{"version":3,"sources":["assets/assets-colors.tsx","assets/LOCKETGO_LOGO_RVB-Blanc.svg","assets/LOCKETGO_LOGO_RVB-Noir.svg","assets/LOCKETGO_LOGO_RVB-Bleu.svg","services/services-api-base-service.tsx","services/member/member-service.tsx","services/member/member.tsx","services/auth/authConfig.ts","services/auth/msal-instance.tsx","services/auth/msal-service.tsx","services/auth/login-response.tsx","services/core/string-helpers.ts","services/auth/auth-service.tsx","services/member/organization-service.tsx","components/header.tsx","pages/account/signup-page.tsx","services/hub/hub.tsx","services/core/address.tsx","services/hub/flow-configs.tsx","services/order/order-service.tsx","services/hub/hub-service.tsx","services/core/language-service.tsx","services/core/notification-level.tsx","services/order/customer.tsx","services/order/order.tsx","services/order/ReservationState.tsx","services/order/order-helpers.tsx","components/paging-component.tsx","services/core/toast-helpers.ts","components/button-component.tsx","components/dateRangeComponent.tsx","services/core/date-helpers.tsx","components/globalfilter-component.jsx","components/hub-location-component.tsx","components/loading-component.tsx","components/notify-level-icon-component.tsx","components/state-badge-component.tsx","components/orders-page-components/orders-table-component.tsx","pages/orders/orders-page.tsx","pages/admin/memberRoleTable.tsx","components/input.tsx","components/customer-information-components/phone-component.tsx","pages/admin/hub-permission-table.tsx","pages/admin/editMember.tsx","components/autocompleteSearch.tsx","pages/admin/database-admin-page.tsx","services/member/customers-service.tsx","pages/customers/customers-page.tsx","services/hub/compartment.tsx","services/hub/hub-helper.tsx","services/hub/compartmentSize-service.tsx","services/hub/packagingOption-service.tsx","components/yesno-component.tsx","components/cancel-reservation-msg-component.tsx","services/payment/payment-state.tsx","services/payment/payment-service.tsx","pages/orders/order-details/order-history.tsx","pages/orders/order-details/order-payment-information.tsx","pages/orders/order-details/order-general.tsx","pages/orders/order-details/order-customer.tsx","components/order-page-components.tsx","pages/orders/order-details/order-reservation.tsx","pages/orders/order-modals/order-request-organization-address-modal.tsx","pages/orders/order-page.tsx","pages/account/organizations-page.tsx","components/waiting-component.tsx","pages/account/organization-page.tsx","components/customer-information-components/firstname-component.tsx","components/customer-information-components/lastname-components.tsx","pages/account/member-page.tsx","pages/orders/create-order-page.tsx","pages/home/no-connection-page.tsx","components/delay-component.tsx","pages/customers/create-customer-page.tsx","pages/customers/edit-customer-page.tsx","services/micro-site/microsite-helpers.tsx","services/micro-site/microsite-service.tsx","assets/meta-table-keys.tsx","pages/micro-site/event-card.tsx","pages/micro-site/micro-site-page.tsx","components/timerComponent.tsx","components/payment-forms/charge-state.tsx","services/payment/payment-request.tsx","components/payment-forms/payment-form-square.tsx","components/payment-forms/payment-form-stripe.tsx","components/payment-forms/payment-form.tsx","pages/micro-site/reserve-locker.tsx","components/placerholder-component.tsx","services/core/request-state.tsx","services/hub/useMyHubs.tsx","pages/hubs/hubs-page.tsx","services/hub/useMyHub.tsx","pages/hubs/hub-details/hub-open-all-door.tsx","pages/hubs/hub-compartment-detail.tsx","pages/hubs/hub-details/hub-legend.tsx","components/address-detail-component.tsx","pages/hubs/hub-details/hub-state-information.tsx","components/hub/rider-lockers/dropdown-side-component.tsx","components/lock-component.tsx","components/hub/locker-component.tsx","services/hub/useCompartmentSizes.tsx","pages/hubs/hub-page.tsx","components/locker-single-reservation-message-component.tsx","components/locker-multiple-reservations-message-component.tsx","pages/reservations/my-reservations-page.tsx","pages/micro-site/order-expired-page.tsx","services/analytic/analytic-service.tsx","pages/dashboard/hub-stats-component.tsx","components/chart-line.tsx","pages/dashboard/order-stats-component.tsx","pages/dashboard/event-stats-component.tsx","pages/dashboard/dashboard-page.tsx","pages/events/microsites-page.tsx","components/useEffect/useHubs.tsx","services/member/member-extensions.tsx","pages/events/events-table.tsx","pages/events/microsite-zones.tsx","pages/events/events-page.tsx","components/micrositeDropDown.tsx","pages/events/event-page.tsx","components/NumberDropdown.tsx","components/customer-information-components/email-component.tsx","pages/micro-site/contributor-reserve-locker-page.tsx","pages/orders/relocate-page.tsx","pages/events/event-settlement-report.tsx","components/useEffect/useMicrosite.tsx","pages/hubs/hub-activities-page.tsx","pages/micro-site/reserve-locker-signin.tsx","components/email-link-component.tsx","pages/home/home-not-registered-page.tsx","services/admin/admin-service.tsx","pages/admin/microsite-cms/hub-inclusion-table.tsx","pages/admin/microsite-cms/microsite-admin.tsx","services/organization/organization.tsx","pages/account/create-organization.tsx","App.tsx","reportWebVitals.ts","i18n.ts","index.tsx"],"names":["AssetColors","GetLocketgoLogoSource","assetColor","color","undefined","Black","blackLogo","White","whiteLogo","Blue","blueLogo","ServicesApiBaseService","apiUrl","process","url","axios","this","getHttpConfig","responseType","get","catch","error","handleError","response","data","post","delete","put","authService","getAccessToken","Authorization","headers","method","status","console","statusText","message","MemberService","getObject","organizationId","members","member","postObject","putObject","email","entityId","permission","entityType","res","Active","Email","EntityId","Permission","EntityType","i","associatedHubs","length","roles","includes","isLocketgoAdmin","organisation","associatedOrganizations","find","org","entity","id","some","role","associated","hubId","isLocketgoHubAdmin","token","memberService","Member","type","referenceId","firstname","lastname","streetNumber","street","city","state","country","postalCode","unit","phone","phoneExtension","externalId","active","features","Array","AzureActiveDirectoryScopes","msalConfig","auth","clientId","authority","knownAuthorities","split","redirectUri","postLogoutRedirectUri","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","containsPii","LogLevel","Error","Info","info","Verbose","debug","Warning","warn","loginRequest","scopes","acquireTokenRequest","msalInstance","PublicClientApplication","MsalService","callback","addEventCallback","eventType","EventType","LOGIN_SUCCESS","ACQUIRE_TOKEN_SUCCESS","interactionType","InteractionType","Redirect","account","getAccount","request","acquireTokenSilent","acquireTokenRedirect","accounts","getAllAccounts","loginType","loginPopup","e","loginRedirect","logoutType","logoutPopup","logoutRedirect","msalService","LoginResponse","StringHelpers","count","textSingular","stringToVerify","RegExp","test","value","digits","toLocaleString","minimumFractionDigits","maximumFractionDigits","useGrouping","amount","AuthService","tokenExpiresOn","registerCallback","msalAccount","log","getToken","tokenResult","accessToken","getMemberMe","username","createMember","localAccountId","getFullName","login","REACT_APP_ADB2C_LOGIN_TYPE","autoLogin","logout","getTime","Date","now","expiresOn","accountToCreate","OrganizationService","organization","Organization","microsites","filter","microsite","forEach","name","Map","Object","entries","organizationService","HeaderNavbar","props","activeOrganization","changeLanguage","changeMember","useState","isNavCollapsed","setIsNavCollapsed","micrositesLength","setMicrositesLength","t","useTranslation","orgContributor","isOrganizationContributor","collapseClasses","onItemClick","loginResponse","accountDisplay","useEffect","getAllMicrositesOfOrganization","then","className","HeaderIcon","logo","onClick","icon","to","toUpperCase","imgSource","src","alt","SignUpPage","history","useHistory","push","HubStates","Address","lat","lng","FlowConfigs","personalStorageEnabled","parcelEnabled","customerSelectionEnabled","rfidEnabled","orderLookupEnabled","isRiderLocker","hasObjectDetection","OrderState","Hub","zoneName","description","flowConfigs","private","address","model","groups","carriers","version","MyHub","computerMetrics","lastSynchronization","reservationDenies","reservations","kiosk","activities","HubService","hub","ids","hubs","sort","a","b","localeCompare","groupId","compartmentNumber","side","hubIid","activitiesMultiplier","hubService","languageService","language","localStorage","getItem","window","navigator","setItem","NotifyLevel","OrderService","start","end","orders","tokenTmp","order","orderFlow","sizeIds","orderId","assetId","getFile","label","phoneNumber","packagingOptionId","carrierId","flow","referenceNumber","firstName","lastName","getLanguage","sizeId","height","width","depth","weight","orderItemId","reservationStart","reservationEnd","reason","requestingFrom","trackingNumbers","deleteTrackingNumber","deleteObject","orderService","OrderFlow","OrderFlowStringValue","ReservationState","OrderHelpers","lockers","items","orderItem","reservation","isPersonalStorage","getPersonalStorageOrderStateBadgeStyle","getBopilOrderStateBadgeStyle","activity","item","payments","toString","deleted","every","p","carrierSubmissionReferenceNumber","New","PersonalStorage","Completed","Canceled","hasNonNewOrderItem","PagingComponent","countTextResource","pageLength","pageIndex","canPreviousPage","canNextPage","previousPage","nextPage","pluralize","ToastHelpers","toast","success","DeleteButtonComponent","disabled","title","AddButtonComponent","SyncButtonComponent","EditButtonComponent","ActionButtonComponent","InfoCirleButton","textInfo","tabIndex","ExportButton","enclosingCharacter","filename","fileName","defaultProps","DateRangeOptions","DateHelpers","date","timeZone","moment","tz","format","DefaultTimeZone","fromNow","nbOfSeconds","days","Math","trunc","NB_OF_SECONDS_IN_A_DAY","hours","NB_OF_SECONDS_IN_AN_HOUR","minutes","NB_OF_SECONDS_IN_A_MINUTE","seconds","dateTime","max","i18next","padStart","duration","val","trim","toLocaleDateString","month","day","time","isBefore","add","toDate","hourCycle","Intl","Locale","region","utc","DateRangeComponent","isCustom","setIsCustom","currentOption","setCurrentOption","startDate","setStartDate","endDate","setEndDate","onStartDateChange","useCallback","event","target","onEndDateChange","selectionOptions","useMemo","option","default","setDataBySelectedIndex","substring","style","map","Custom","setMinMax","onChange","min","areDateValid","onDateChange","selectedCustom","setStartEndOnClick","values","dateOption","startDateStr","setDate","getDate","Week","Month","setMonth","getMonth","toDateString","daysAdded","minEndDate","getFullYear","GlobalFilter","preGlobalFilteredRows","globalFilter","setGlobalFilter","setValue","useAsyncDebounce","placeholder","HubLocationComponent","formatToFit","online","locationStyle","formatStringToFit","minWidth","nbExtraLetterCanFit","floor","innerWidth","substr","trimEnd","LoadingComponent","loading","spin","size","NotifyLevelComponent","notifyLevel","StateBadgeComponent","getOrderStateStyle","UserTimeZone","DateTimeFormat","resolvedOptions","OrderIdColumnIndex","BadgeColumnIndex","CustomerInfoColumIndex","CustomerEmailColumnIndex","CustomerPhoneColumnIndex","HubColumnIndex","LockersColumnIndex","CreationDateColumnIndex","ReservationBlockNameColumnIndex","ReferenceNumberColumnIndex","TrackingNumbersColumnIndex","OrdersTableComponent","isLoading","tableProps","tableBodyProps","headerGroups","page","prepareRow","headerGroup","getHeaderGroupProps","column","getHeaderProps","render","key","colSpan","row","cells","h","findHub","original","customerInfo","stringIsNullOrEmpty","getRowProps","getCellProps","formatDateTime","trackingNumber","index","Fragment","DropdownState","setState","dropdown","setDropdown","ddRef","useRef","Dropdown","current","newState","hide","ref","show","OrdersPage","setLoading","setOrders","setHubs","roundAt5","getMinutes","setMinutes","startInit","endInit","currentStart","currentEnd","currentStartEnd","setCurrentStartEnd","currentState","setCurrentState","setPageSize","getHubs","refreshOrders","tableDataCSV","columnsTemp","Header","accessor","useTable","columns","tableData","orderLockers","getOrderLockers","flatMap","customer","creationDate","orderDate","reservationBlockName","tmp","HubName","OrderId","ReferenceNumber","CreationDate","State","FirstName","LastName","Phone","SiteId","micrositeId","Locker","updateTableOrdersData","initialState","useGlobalFilter","usePagination","getTableProps","getTableBodyProps","rows","pageOptions","orgId","getOrders","finally","MemberRoleTable","setEditMember","setMemberEdited","setIsNewUser","setMembers","filteredMembers","setFilteredMembers","refresh","unique","updateTableCustomersData","filterMembers","list","editMember","isNewUser","getMembers","InputComponent","labelText","getPlaceHolder","ev","regExp","onMsgErrorChanged","getMsgError","validate","required","autoFocus","autofocus","msgError","RegExPhone1","RegExPhone2","PhoneFormComponent","disable","valid","isValid","HubPermissionTable","setMember","setOrganization","element","updateHubsRoleData","changeMemberPermissions","currentPermission","mem","addMemberRole","err","updateMemberRole","getOrganizationById","checked","EditMember","editedMember","setEditingMember","chosenOrgId","setEmail","setFirstName","setLastName","setPermission","setPhoneNumber","newStatus","setNewStatus","exlanationHidden","setExlanationHidden","handleSelect","setFunc","display","Toggle","variant","Menu","Item","marginBottom","document","getElementById","requestMember","ourOrg","arr","createContributor","AutocompleteSearch","currSelection","setCurrSelection","onSelect","objId","marginTop","justifyContent","setter","AdminPage","editingMember","memberEdited","orgsItems","setOrgsItems","setChosenOrgId","orgsStringList","CustomersService","customerId","customersService","CustomersPage","customers","setCustomers","filteredCustomers","setFilteredCustomers","getCustomers","filterCustomers","CompartmentStates","HubHelpers","group","findGroup","compartments","c","number","nbCompartements","Set","compartment","packagingOptionsIds","hubState","isHubOnline","text","has","j","compartmentHasReservation","r","isOpened","Opened","isDeactivated","CompartmentSizeService","compartmentSizes","cs","compartmentSize","compartmentSizeService","PackagingOptionService","packagingOptions","packagingOption","packagingOptionService","YesNoComponent","yesButtonClass","isDangerousChoice","headerMsg","children","onYesClick","onNoClick","CancelReservationMsgomponent","PaymentState","PaymentService","cardPaymentRequest","idempotencyKey","uuidv4","timeoutId","setTimeout","getOrderById","orderToken","Success","Timeout","clearTimeout","pricing","payment","paymentId","paymentService","OrderHistory","createdOn","createBy","getActivityDescription","OrderPaymentInformation","cost","formatPrice","saleTaxTotal","currency","isRefundedOrder","canRefundOrder","cardLastFour","cardBrand","cardExpirationMonth","cardExpirationYear","String","OrderGeneral","isOrgContributor","carrierName","toLowerCase","OrderCustomer","customerInfoHtml","hasCustomerContactInformation","canSendNotification","isFirstTimeNotification","onSendNotification","dangerouslySetInnerHTML","__html","DoorOpeningGifComponent","DoorOpenedComponent","OpenDoorComponent","displayIcon","NoReservationComponent","textAlign","canCreateReservation","itemIdInOpening","isOneGroupsOnline","editable","canCancelReservation","hasOpening","isAnyReservationOpened","isReturn","ReadyForPickUp","isGroupOnline","showAddOrderItemTrackingNumberInput","inputContainer","btn","hidden","input","getElementsByTagName","focus","OrderReservation","isAdmin","isCarriedByCarrier","onRefresh","onTrackingNumberDelete","onCreateReservation","onOrderItemDelete","openDoor","oi","inOpenedState","isCarrierOrder","sliceReservationDatesNumber","codeToDisplay","pickupCode","dropoffCode","notifyText","dropOffTime","since","timeSince","inOpening","isTrackingNumberDisabled","trackingNumbersEditable","openAvailable","PackagingReadyForPickUp","opened","lockernumb","maxWidth","track","onSubmit","preventDefault","currentTarget","addTrackingNumber","onBlur","onKeyDown","trackingNumberInput","onTabKeyDownToAddTrackingNumber","slice","currentOrder","match","updateOrderItem","OrderRequestOrganizationAddressModal","onRequiredAddressMessageChange","requestCarrierPickup","setStreetNumber","setStreet","setCity","setPostalCode","updateOrganization","saveAddressAndSend","OrderPage","useParams","setOrder","setHub","setCompatmentSizes","isEdit","setIsEdit","selectSizeDisabled","setSelectSizeDisabled","msgEditError","setMsgEditError","setPackagingOption","isCancelOrder","setIsCancelOrder","isCancelReservation","setIsCancelReservation","setItemIdInOpening","setIsCarriedByCarrier","isRequestingCarrierPickup","setIsRequestingCarrierPickup","isCancellingCarrierPickup","setIsCancellingCarrierPickup","isCarrierPickupRequested","setIsCarrierPickupRequested","setCanSendNotification","isSendingNotification","setIsSendingNotification","setIsReturn","labelBlob","setLabelBlob","isRequiresAddressMessage","setIsRequiresAddressMessage","isDeleteTrackingNumber","setIsDeleteTrackingNumber","isCompleteOrder","setIsCompleteOrder","setIsPersonalStorage","isRequestingRefund","setIsRequestingRefund","setPayment","itemHeight","setItemHeight","itemWidth","setItemWidth","itemDepth","setItemDepth","itemWeight","setItemWeight","setOrderItemId","setTrackingNumber","setIsAdmin","setIsOrgContributor","isOrganizationAdmin","getPackagingOptions","getHubById","getCompartmentSizes","compartmentSizeIdsOfHub","getCompartmentSizeIds","compartmentSizesOfHub","po","refreshInterval","setInterval","clearInterval","canRequestCarrierPickup","requiresAddress","listInfo","refId","join","canCompleteOrder","Boolean","reservationState","deletOrderItem","canCancelCarrierPickup","download","URL","createObjectURL","link","createElement","href","setAttribute","body","appendChild","click","parentNode","removeChild","getAsset","downloadLabelPdf","canDeleteOrder","cancelEdit","createReservation","addItem","cancelOrder","CompleteOrder","removeTrackingNumber","refundOrder","cancelCarrierPickup","sendReadyForPickupNotification","sendNotification","openDoorForCancellation","createOrderItem","completeBopilOrder","getOrderItem","tracking","refundPayment","Number","parseFloat","valueOf","cSize","cancelOrderItem","deleteOrderItem","OrganizationsPage","changeActiveOrganization","associatedOrganization","stopPropagation","WaitingComponent","ApprobationComponent","OrganizationPage","setActiveOrganization","organizationName","setOrganizationName","streetNumberError","setStreetNumberError","setCountry","isStringOnlyNumbers","associatedHub","FirstNameComponent","maxLength","LastNameComponent","MemberPage","setFirstname","setLastname","setPhone","setPhoneExtension","phoneError","setPhoneError","firstnameError","setFirstnameError","lastnameError","setLastnameError","newMember","updateMemberMe","refreshMe","save","isValidPhone","me","CreateOrderPage","searchResultCount","setCarriers","setPackagingOptions","packagingOptionsAvailable","setPackagingOptionsAvailable","customerSearchText","setCustomerSearchText","customerSelectedEmail","setCustomerSelectedEmail","setReferenceId","step","setStep","selectExistingCustomer","setSelectExistingCustomer","setHubId","setFistname","emailError","setEmailError","isCreating","setIsCreating","setPackagingOptionId","setCarrierId","nocarrier","hubAssociations","o","hubsFiltered","ha","onHubSelected","onCustomerSearchTextChanged","onSelectCustomerSelected","htmlFor","getEmailRegExp","onPackagingOptionSelected","onCarrierSelected","carrier","packagingId","newCarrierId","tmpFirstname","tmpLastname","tmpEmail","tmpPhoneNumber","customerSelected","Return","Deliver","createOrder","persist","listFiltered","searchMatch","search","startsWith","from","getPackagingOptiponIds","options","NoConnectionPage","location","reload","DelayCompoment","waitBeforeShow","isShown","setIsShown","CreateCustomerPage","setUnit","createCustomer","lowerCaseEmail","EditCustomerPage","user","setCustomer","isDeletedCustomer","setIsDeletedCustomer","getCustomer","deleteCustomer","canEdit","editCustomer","membersService","newCustomer","updateCustomer","MicrositeHelpers","rb","dateNow","availableStart","availableEnd","rb1","rb2","reservationBlockIsPassed","reservationBlockIsAvailable","startOn","MicrositeService","reservationBlocks","reservationBlock","result","reservationBlockId","MicrositeId","Id","createPayment","code","allowOffline","hubIds","eventId","micrositeService","PricePerHour","PricePerMinute","MinimalPrice","CodeType","ResetTime","EventCard","reserve","canShowCreateReservation","until","priceFormatted","price","saleTaxRate","showCreateReservation","pricePerHour","meta","pricePerMinute","resetTime","resetTimeDate","getNextDayWithTime","isSwych","logoUrl","Trans","i18nKey","getDay","formatTime","formatDuration","minimalPrice","minimalPriceFormatted","MicroSitePage","setNoConnection","setMicrosite","setReservationBlocks","getMicrosite","reserveUrl","TimerComponent","timeInSeconds","onTimerEnds","counter","setCounter","timer","formatNumberToTimeLeftString","dateTimeFormat","ChargeState","CardPaymentRequest","PayNow","PaymentFormSquare","locationId","paynow","minPrice","card","setCard","EnteringData","Square","ChargeTimeout","initializeCard","ChargeInProgress","pay","statusContainer","visibility","_card","container","innerHTML","attach","clearPaymentResults","classList","remove","tokenize","displayPaymentResultsSquare","ChargeError","paymentMethod","CARD_ELEMENT_OPTIONS","base","fontFamily","fontSmoothing","fontSize","invalid","iconColor","PaymentFormStripe","stripe","useStripe","elements","useElements","setMessage","errorMessage","createPaymentMethod","getElement","CardElement","PaymentForm","paymentIntent","hasPayment","stripePromise","setStripePromise","providerType","loadStripe","stripeOptions","appearance","theme","ReserveLockerPage","setReservationBlock","timeUntilExpired","setTimeUntilExpired","setPaymentIntent","createPaymentIntent","getTimeUntilExpired","parseInt","formatNumber","reservationBlockIsFree","untilStart","rel","PlacerholderComponent","ready","RequestState","useMyHubs","onErrorNotificationMessage","Loading","requestState","setRequestState","setError","getMyHubs","Failure","HubsPage","GetCompartmentCount","useMyHub","OpeningAllDoorsState","getMyHubById","HubCompartmentDetail","onClose","setInOpening","setIsLocketgoHubAdmin","isHubAdmin","setIsHubAdmin","g","doornumber","isHubContributor","activateLockerReservation","deactivateLockerReservation","toggleDoor","HubLegend","HubOpenAllDoor","Question","Opening","Finished","openAllDoors","delayReset","Promise","AddressDetailComponent","intialDetail","detail","setDetail","curValue","HubStateInformation","roundValue","cpuTemperature","cpuPercentage","round","memUsed","memTotal","memUsedPercentage","diskUsed","diskTotal","diskUsedPercentage","numberOfDigits","toFixed","Side","DropdownSide","Front","newSide","LockComponent","onCompartmentSelected","parse","compartmentName","compartmentHeight","kioskSize","position","kioskHeight","showObjectDetected","opacity","isObjectDetected","useCompartmentSizes","HubPage","selectedGroupId","setSelectedGroupId","selectedCompartmentNumber","setSelectedCompartmentNumber","selectedSide","setSelectedSide","showOpenAllDoors","setShowOpenAllDoors","isActivateAllDoors","setIsActivateAllDoors","isDeactivateAllDoors","setIsDeactivateAllDoors","selectedReservation","activateAllDoors","deactivateAllDoors","activateAllLockers","deactivateAllLockers","LockerSingleReservationMessageComponent","firstOrder","firstReservation","firstHub","askOpenDoor","startTime","endTime","isCompleted","isNotStarted","reservationTimeLeftBeforeStart","LockerMultipleReservationsMessageComponent","reservationInOpening","reservationIsActive","compartmentSizeName","helpLink","hubName","reservationTimeLeft","MyReservationsPage","setIsLoading","myReservations","setMyReservations","setReservationInOpening","setCompartmentSizes","setFirstOrder","setFirstReservation","isFirstReservationStarted","setIsFirstReservationStarted","setReservationTimeLeft","isAskingReservationEnd","setIsAskingReservationEnd","endPricing","setEndPricing","setPayments","getEndNowPricing","getMyReservations","getPayment","firstOrderTmp","setMyReservationState","isStarted","milisecondsLeft","setValues","isSingleReservation","firstReservationBlock","firstCurrency","payed","isCompartmentOnline","onYesClickOpenDoor","endReservation","en","fr","getAddress","toHourString","myReservation","curReservations","micrositeLogoUrl","endOrder","endReservationEarly","firstReservationTmp","OrderExpiredPage","AnalyticService","dashboard","analyticService","HubStatsComponent","hubUsages","hubCount","groupCount","reduce","prev","next","used","total","hubUsage","percentage","progressStyle","ChartLine","labels","datasets","fill","backgroundColor","borderColor","borderWidth","tension","plugins","legend","point","radius","interaction","intersect","scales","x","grid","drawTicks","y","beginAtZero","OrderStatsTable","resSum","confirmedSum","totalCadSum","totalUSSum","elem","countPaid","amountGross","Name","Reservations","Confirmed","dif","exportFileName","kpi","EventStatsTable","datas","m","dataA","d","dataB","startOnA","startOnB","translatedName","DashboardPage","setModel","refreshOn","dateStringExport","formatDateEightChar","hasEvents","events","hasOrgs","organizations","hasHubs","timeline","getDashboard","MicrositesPage","setMicrosites","currentOrganization","setCurrentOrganization","useHubs","isHubsLoading","MemberExtensions","EventsTable","isOrgAdmin","MicrositeZones","matchingHubs","EventsPage","setIsOrgAdmin","refreshEvents","getMemberRoleOrganization","compareReservationBlocks","MicrositeDropdown","setTargetMicrosite","micrositesList","targetMicrosite","selectedMicrosite","selected","NumberDropDown","onchange","EventPage","micrositeCompartmentSizes","setMicrositeCompartmentSizes","setCurrency","currEventId","setCurrEventId","isDeleteReservationBlock","setIsDeleteReservationBlock","eventAlreadyStarted","setEventAlreadyStarted","nameFrError","setNameFrError","nameEnError","setNameEnError","priceError","setPriceError","saleTaxRateError","setSaleTaxError","availableStartError","setAvailableStartError","availableEndError","setAvailableEndError","endOnError","setEndOnError","startOnError","setStartOnError","nameFr","setNameFr","nameEn","setNameEn","descriptionFr","setDescriptionFr","descriptionEn","setDescriptionEn","setLogoUrl","setPrice","setPricePerHour","setPricePerMinute","setMinimalPrice","setSaleTaxRate","setStartOn","setAvailableStart","setAvailableEnd","endOn","setEndOn","setSizeId","codeType","setCodeType","setResetTime","Duration","setEventType","durationError","setDurationError","durationDays","setDurationDays","durationHours","setDurationHours","durationMinutes","setDurationMinutes","isPricedPerHour","setIsPricedPerHour","isPricedPerMinute","setIsPricedPerMinute","isFixedPeriod","setIsFixedPeriod","dateTimeNow","getMicrositeSizesIds","tmpCompartmentSizes","Hours_Minutes","StartEnd","deleteReservationBlock","onNameChange","parsedValue","isValidSaleTax","onSaleTaxChange","onEventTypeChange","onChangeIsPricedPerHour","onChangeIsPricedPerMinute","onPriceChange","onDurationChange","onFixedPeriod","onAvailableStartChange","onAvailableEndChange","availableEndValue","availableStartValue","startOnValue","lockerSize","isCodeSpecified","durationInMilisec","toApiDate","Description","LogoUrl","Price","SaleTaxRate","StartOn","AvailableStart","AvailableEnd","SizeId","CodeSpecified","Meta","createReservationBlock","createEvent","updateReservationBlock","updateEvent","createOrUpdateReservationBlock","isNaN","isDurationValid","isValidData","flexDirection","marginRight","marginLeft","prefix","select","selectedIndex","EmailFormComponent","ContributorReserveLockerPage","organisationId","setOrganisationId","setReferenceNumber","setCode","codeError","setCodeError","codeSpecified","CreateOrder","RelocatePage","itemId","currentCompartmentSize","setCurrentCompartmentSize","compartmentState","setCompartmentState","setReservation","availableSizeIds","setAvailableSizeIds","isUpdating","setIsUpdating","currentCompartment","findCompartment","getAvailableCompartmentSizeIds","compartmentSizeIds","compartmentSizeIdsOfHubsCandidates","compartmentSizesOfHubs","relocateLocker","relocateReservation","EventSalesReport","nbLockers","nbLockersSold","grossRevenue","fees","EventSettlementReportPage","isMicrositeLoading","useMicrosite","salesReport","setSalesReport","lockerSold","setLockerSold","netRevenue","setNetRevenue","feesPerOrder","setFeesPerOrder","getEventOrders","micrositeHubs","sr","array","indexOf","generateSalesFromOrders","feesOrder","paymentOrder","order_date","locker_price","locker","sale_tax_rate","Fees","generateSalesReportData","HubActivitiesPage","setActivities","setActivitiesMutiplier","pagingIndex","setPagingIndex","hubActivity","createdBy","updateTableActivitiesData","multiplier","getHubActivities","ReserveLockerSignInPage","isEmail","setIsEmail","setOrderId","linkSent","setLinkSent","resendNotificationTimeout","getReservationBlockById","resendNotification","newEmail","newPhone","EmailLink","subject","mailtoLink","encodeURIComponent","HomeNotRegisteredPage","components","AdminService","micrositeIdState","countryCode","adminService","HubInclusionTable","setHubsIds","currentHubs","selectedOptions","setSelectedOptions","initialSelections","newHubs","handleOptionChange","MicrositeAdminPage","chosenOrg","setMicrositeIdState","setCountryCode","micrositeData","nameMap","fetchMicrosite","handleSubmit","createMicrosite","updateMicrosite","handleDelete","deleteMicrosite","CreateOrganizationPage","phoneExtentionError","setPhoneExtensionError","orgName","setOrgName","orgAddressStreetNumber","setOrgAddressStreetNumber","orgAddressStreet","setOrgAddressStreet","orgAddressCity","setOrgAddressCity","orgAddressPostalCode","setOrgAddressPostalCode","orgAddressState","setOrgAddressState","orgAddressCountry","setOrgAddressCountry","orgAssociatedHubs","setOrgAssociatedHubs","optsNextMarchantOrg","optsNextMarchantMember","onPreviousStep","onNextStep","onHubSelectionChange","createOrganization","newLocations","findIndex","splice","browserHistory","createBrowserHistory","basename","reactPlugin","ReactPlugin","ApplicationInsights","config","instrumentationKey","extensions","extensionConfig","identifier","loadAppInsights","withRouter","isSquareLoaded","setSquareLoaded","setLanguage","delayExpired","setDelayExpired","noConnection","i18n","isMicrosite","pathname","autologinRedirectUri","removeItem","interval","sqPaymentScript","async","onload","isConcierge","exact","path","newLanguage","temp","newActiveOrganization","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","use","Backend","initReactI18next","init","fallbackLng","interpolation","escapeValue","AppLoadingComponent","library","faBox","faUser","faUsers","faPlus","faMapMarkerAlt","faPen","faTrashAlt","faAngleDown","faAngleUp","faCircle","faLock","faLockOpen","faCog","faSearch","faSpinner","faAngleLeft","faAngleRight","faAngleDoubleLeft","faAngleDoubleRight","faCheckCircle","faClock","faMinusCircle","faInfo","faExclamationTriangle","faBars","faSync","faSquare","faSquareRegular","faGlobe","faInfoCircle","faEdit","faUserLock","faPaperPlane","faBan","faBell","faFileExport","faCreditCard","faTag","faFileInvoiceDollar","faExternalLinkSquareAlt","faArrowLeft","faCube","locale","months","monthsShort","monthsParseExact","weekdays","weekdaysShort","weekdaysMin","weekdaysParseExact","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","s","mm","hh","dd","M","MM","yy","dayOfMonthOrdinalParse","ordinal","meridiemParse","isPM","charAt","meridiem","isLower","week","dow","doy","createRoot","fallback","StrictMode","instance"],"mappings":";umBAIYA,E,wFCJG,MAA0B,oDCA1B,MAA0B,mDCA1B,MAA0B,mDHU1B,SAASC,EAAsBC,GAC5C,IAAIC,OAAQC,EACZ,OAAQF,GACN,KAAKF,EAAYK,MACfF,EAAQG,EACR,MACF,KAAKN,EAAYO,MACfJ,EAAQK,EACR,MACF,KAAKR,EAAYS,KACfN,EAAQO,EAGZ,OAAOP,CACT,EAhBC,SAJWH,OAAW,eAAXA,IAAW,iBAAXA,IAAW,iBAItB,CAJWA,MAAW,K,sEIDFW,EAAsB,iDACzCC,OAA6BC,4BAAsC,CAwDlE,OAxDiE,qFAElE,WAAcC,GAAW,wFACmB,OADnB,KACAC,IAAK,KAAWD,EAAG,mCAAcE,KAAKC,gBAAe,OAAuB,OAAvB,mDAAGC,aAAc,QAAM,6CAAtEC,IAAG,qBAAuEC,OAAM,SAACC,GAC5G,OAAO,EAAKC,YAAY,MAAOR,EAAKO,EACtC,IAAG,KAAF,GAFa,OAARE,EAAQ,yBAGC,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAUC,MAAI,iDACtB,mDAPiE,IAOjE,wEAED,WAAmBV,GAAW,wFACW,OADX,KACLC,IAAK,KAAQD,EAAG,SAAQE,KAAKC,gBAAe,wCAAtCE,IAAG,qBAAqCC,OAAM,SAACC,GAC1E,OAAO,EAAKC,YAAY,MAAOR,EAAKO,EACtC,IAAG,KAAF,EAFa,OAARE,EAAQ,yBAGC,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAUC,MAAI,gDACtB,mDAPA,IAOA,yEAED,WAA4BV,EAAaU,GAAS,wFACC,OADD,KACzBT,IAAK,KAAYD,EAAG,KAAEU,EAAI,SAAQR,KAAKC,gBAAe,wCAAhDQ,KAAI,0BAA8CL,OAAM,SAACC,GACpF,OAAO,EAAKC,YAAY,OAAQR,EAAKO,EACvC,IAAG,KAAF,EAFa,OAARE,EAAQ,yBAGC,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAUC,MAAI,iDACtB,qDAPA,IAOA,2EAED,WAAyBV,GAAW,wFACW,OADX,KACXC,IAAK,KAAcD,EAAG,SAAQE,KAAKC,gBAAe,wCAA5CS,OAAM,qBAAwCN,OAAM,SAACC,GAChF,OAAO,EAAKC,YAAY,SAAUR,EAAKO,EACzC,IAAG,KAAF,EAFa,OAARE,EAAQ,yBAGC,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAUC,MAAI,gDACtB,mDAPA,IAOA,wEAED,WAAqBV,EAAaU,GAAS,sFACX,OADW,KACnCT,IAAK,KAAUD,EAAG,KAAEU,EAAI,SAAQR,KAAKC,gBAAe,wCAA9CU,IAAG,0BAA6CP,OAAM,SAACC,GACjE,OAAO,EAAKC,YAAY,MAAOR,EAAKO,EACtC,IAAG,KAAF,2CACF,qDANA,IAMA,4EAED,uHAE8CO,EAAYC,iBAAgB,OAA9C,OAA8C,mDAA3DC,cAAc,EAAD,uBAAxBC,QAAQ,EAAD,gDAEV,kDANA,IAMA,yBAED,SAAoBC,EAAgBlB,EAAaO,GAC/C,GAAIA,EAAME,SAAU,CAClB,GAA8B,MAA1BF,EAAME,SAASU,OACjB,OAGFC,QAAQb,MAAM,GAAD,OAAIW,EAAM,YAAIlB,EAAG,kBAAUO,EAAME,SAASU,OAAM,eAAOZ,EAAME,SAASY,WAAU,KAC/F,MAAWd,EAAMe,QACfF,QAAQb,MAAM,GAAD,OAAIW,EAAM,YAAIlB,EAAG,kBAAUO,EAAMe,UAE9CF,QAAQb,MAAM,GAAD,OAAIW,EAAM,YAAIlB,EAAG,iBAAiBO,GAGjD,MAAMA,CACR,KAAC,EAzDwC,GCCrCgB,EAAa,kHAwLhB,OAxLgB,yFACjB,wGACerB,KAAKsB,UAAS,UAAYtB,KAAKJ,OAAM,gBAAe,KAAD,mFACjE,kDAHgB,IAGhB,yEAED,WAAiB2B,GAAsB,iGACfvB,KAAKsB,UAAS,UAAmBtB,KAAKJ,OAAM,iDAAyC2B,IAAkB,KAAD,EAA/G,OAAPC,EAAO,yBACNA,GAAW,IAAE,gDACrB,mDALA,IAKA,2EAED,WAAmBC,GAAc,2FAClBzB,KAAK0B,WAAU,UAAoB1B,KAAKJ,OAAM,eAAe6B,GAAQ,KAAD,mFAClF,mDAJA,IAIA,gFAED,WAAwBA,GAAc,2FACvBzB,KAAK0B,WAAU,UAAoB1B,KAAKJ,OAAM,wBAAwB6B,GAAQ,KAAD,mFAC3F,mDAJA,IAIA,6EAED,WAAqBA,GAAc,2FAC3BzB,KAAK2B,UAAS,UAAY3B,KAAKJ,OAAM,eAAe6B,GAAQ,KAAD,2CAClE,mDAJA,IAIA,4EAED,WAAoBG,EAAeC,EAAkBC,EAAoBC,GAAkB,iGACzE/B,KAAK0B,WAAU,UAAc1B,KAAKJ,OAAM,0BAA0B,CAChFqB,OAAQ,SACRW,MAAOA,EACPC,SAAUA,EACVC,WAAYA,EACZC,WAAYA,IACX,KAAD,EANK,OAAHC,EAAG,yBAOAA,GAAG,gDACX,yDAXA,IAWA,+EAED,WAAuBJ,EAAeC,EAAkBC,EAAoBC,EAAoBd,GAAc,iGAC5FjB,KAAK0B,WAAU,UAAc1B,KAAKJ,OAAM,6BAA6B,CACnFqC,OAAmB,WAAXhB,EACRiB,MAAON,EACPO,SAAUN,EACVO,WAAYN,EACZO,WAAYN,IACX,KAAD,EANK,OAAHC,EAAG,yBAOAA,GAAG,gDACX,2DAXA,IAWA,6BAED,SAAgBP,GACd,IAAKA,EACH,OAAO,EAGT,IAAK,IAAIa,EAAI,EAAGA,GAAyB,QAAxB,EAAGb,EAAOc,sBAAc,aAArB,EAAuBC,QAAQF,IAAK,CAAC,IAAD,EACtD,GAAIb,EAAOc,eAAeD,GAAGG,MAAMC,SAAS,iBAC1C,OAAO,CAEX,CAEA,OAAO,CACT,GAAC,gCAED,SAAmBjB,GACjB,IAAKA,EACH,OAAO,EAGT,IAAK,IAAIa,EAAI,EAAGA,GAAyB,QAAxB,EAAGb,EAAOc,sBAAc,aAArB,EAAuBC,QAAQF,IAAK,CAAC,IAAD,EACtD,GAAIb,EAAOc,eAAeD,GAAGG,MAAMC,SAAS,qBAAuBjB,EAAOc,eAAeD,GAAGG,MAAMC,SAAS,iBACzG,OAAO,CAEX,CAEA,OAAO,CACT,GAAC,iCAED,SAAoBjB,EAAuBF,GACzC,GAAIvB,KAAK2C,gBAAgBlB,GACvB,OAAO,EAGT,IAAKA,IAAWF,QAAqCnC,IAAnBmC,EAChC,OAAO,EAGT,IAEkB,EAFZqB,EAAenB,EAAOoB,wBAAwBC,MAAK,SAACC,GAAG,aAAe,QAAV,EAAAA,EAAIC,cAAM,aAAV,EAAYC,MAAO1B,CAAc,IAEnG,GAAIqB,IACEA,EAAaH,MAAMC,SAAS,WAA+B,QAAnB,EAAAE,EAAaI,cAAM,aAAnB,EAAqBC,MAAO1B,GACtE,OAAO,EAIX,OAAO,CACT,GAAC,uCAED,SAA0BE,EAAuBF,GAC/C,GAAIvB,KAAK2C,gBAAgBlB,GACvB,OAAO,EAGT,IAAKA,EACH,OAAO,EAGT,IAAKF,QAAqCnC,IAAnBmC,EAA8B,CACnD,IAAK,IAAIe,EAAI,EAAGA,GAAkC,QAAjC,EAAGb,EAAOoB,+BAAuB,aAA9B,EAAgCL,QAAQF,IAAK,CAAC,IAAD,EAC/D,GAAIb,EAAOoB,wBAAwBP,GAAGG,MAAMS,MAAK,SAACC,GAAI,MAAc,gBAATA,GAAmC,UAATA,CAAgB,IACnG,OAAO,CAEX,CAEA,OAAO,CACT,CAEA,IAAK,IAAIb,EAAI,EAAGA,GAAkC,QAAjC,EAAGb,EAAOoB,+BAAuB,aAA9B,EAAgCL,QAAQF,IAAK,CAAC,IAAD,IACzDc,EAAa3B,EAAOoB,wBAAwBP,GAElD,IAAqB,QAAjB,EAAAc,EAAWJ,cAAM,aAAjB,EAAmBC,MAAO1B,IAI1B6B,EAAWX,MAAMC,SAAS,UAAYU,EAAWX,MAAMC,SAAS,gBAClE,OAAO,CAEX,CAEA,OAAO,CACT,GAAC,yBAED,SAAYjB,GACV,IAAKA,EAAQ,OAAO,EAEpB,IAAK,IAAIa,EAAI,EAAGA,GAAyB,QAAxB,EAAGb,EAAOc,sBAAc,aAArB,EAAuBC,QAAQF,IAAK,CAAC,IAAD,EACtD,GAAIb,EAAOc,eAAeD,GAAGG,MAAMC,SAAS,aAC1C,OAAO,CAEX,CAEA,OAAO,CACT,GAAC,8BAED,SAAiBjB,EAAuB4B,GACtC,GAAIrD,KAAK2C,gBAAgBlB,IAAWzB,KAAKsD,mBAAmB7B,GAC1D,OAAO,EAGT,IAAKA,EACH,OAAO,EAGT,IAAK4B,QAAmBjE,IAAViE,EAAqB,CACjC,IAAK,IAAIf,EAAI,EAAGA,GAAyB,QAAxB,EAAGb,EAAOc,sBAAc,aAArB,EAAuBC,QAAQF,IAAK,CAAC,IAAD,EACtD,GACEb,EAAOc,eAAeD,GAAGG,MAAMS,MAC7B,SAACC,GAAI,MAAc,gBAATA,GAAmC,UAATA,GAA6B,kBAATA,GAAqC,qBAATA,CAA2B,IAGjH,OAAO,CAEX,CAEA,OAAO,CACT,CAEA,IAAK,IAAIb,EAAI,EAAGA,GAAyB,QAAxB,EAAGb,EAAOc,sBAAc,aAArB,EAAuBC,QAAQF,IAAK,CAAC,IAAD,IACtD,IAAmC,QAA/B,EAAAb,EAAOc,eAAeD,GAAGU,cAAM,aAA/B,EAAiCC,MAAOI,GAK1C5B,EAAOc,eAAeD,GAAGG,MAAMS,MAC7B,SAACC,GAAI,MAAc,gBAATA,GAAmC,UAATA,GAA6B,kBAATA,GAAqC,qBAATA,CAA2B,IAGjH,OAAO,CAEX,CAEA,OAAO,CACT,GAAC,gFAED,WAAwBI,GAAoB,+EACtCA,EAAM,CAAD,+BACMvD,KAAKsB,UAAS,UAAoBtB,KAAKJ,OAAM,6CAAqC2D,IAAS,KAAD,EAGhB,KAAD,mCAHiB,uBAG5FvD,KAAKsB,UAAS,UAAoBtB,KAAKJ,OAAM,gCAA8B,gDACzF,mDARA,MAQA,EAxLgB,CAASD,GA4Lb6D,EADO,IAAInC,EC3LLoC,EAAM,mDACzBR,GAAa,GAAG,KAChBS,KAAe,OAAO,KACtBC,YAAsB,GAAG,KACzBC,UAAoB,GAAG,KACvBC,SAAmB,GAAG,KAEtBC,aAAuB,GAAG,KAC1BC,OAAiB,GAAG,KACpBC,KAAe,GAAG,KAClBC,MAAgB,GAAG,KACnBC,QAAkB,GAAG,KACrBC,WAAqB,GAAG,KACxBC,KAAe,GAAG,KAElBC,MAAgB,GAAG,KACnBC,oBAAc,OACd1C,MAAgB,GAAG,KAEnB2C,WAAqB,GAAG,KACxBC,QAAkB,EAAK,KAEvBC,SAA0B,IAAIC,MAAgB,KAE9C7B,wBAAyD,GAAG,KAC5DN,eAAuC,EAAG,I,wBClBtCoC,EAAkC9E,qGAO3B+E,EAA4B,CACvCC,KAAM,CACJC,SAbyCjF,uCAczCkF,UAAWlF,kFACXmF,iBAb8CnF,4BAaSoF,MAAM,KAC7DC,YAAarF,iCACbsF,sBAAuBtF,kCAEzBuF,MAAO,CACLC,cAAe,iBACfC,wBAAwB,GAE1BC,OAAQ,CACNC,cAAe,CACbC,eAAgB,SAACC,EAAOtE,EAASuE,GAC/B,IAAIA,EAGJ,OAAQD,GACN,KAAKE,IAASC,MAEZ,YADA3E,QAAQb,MAAMe,GAEhB,KAAKwE,IAASE,KAEZ,YADA5E,QAAQ6E,KAAK3E,GAEf,KAAKwE,IAASI,QAEZ,YADA9E,QAAQ+E,MAAM7E,GAEhB,KAAKwE,IAASM,QAEZ,YADAhF,QAAQiF,KAAK/E,GAGnB,KAWOgF,EAAe,CAC1BC,OAAQ1B,EAA2BM,MAAM,MAO9BqB,EAAsB,CACjCD,OAAQ1B,EAA2BM,MAAM,MC9D5BsB,EADM,I,OAAIC,GAAwB5B,GCH3C6B,EAAW,4CA4Dd,OA5Dc,6CACf,SAAwBC,GACtBH,EAAaI,kBAAiB,SAACvF,GACzBA,EAAQwF,YAAcC,IAAUC,eAAiB1F,EAAQwF,YAAcC,IAAUE,uBAC/E3F,EAAQ4F,kBAAoBC,IAAgBC,UAC9CR,GAGN,GACF,GAAC,uEAED,gGACoC,GAA5BS,EAAUnH,KAAKoH,aACR,CAAD,wCACH,MAAI,OAKK,OAFZC,EAAO,2BACRf,GAAmB,IACtBa,QAASA,IAAO,kBAGHZ,EAAae,mBAAmBD,GAAS,KAAD,2CAGV,OAHU,0BAErDnG,QAAQb,MAAM,gCAAD,cACbkG,EAAagB,qBAAqBF,GAAS,kBACpC,MAAI,0DAEd,kDAnBA,IAmBA,wBAED,WACE,IAAMG,EAAWjB,EAAakB,iBAC9B,OAAID,GAAYA,EAAShF,OAAS,EACzBgF,EAAS,GAEX,IACT,GAAC,oEAED,WAAmBE,GAAiB,8EAChB,UAAdA,EAAqB,gCACjBnB,EAAaoB,WAAWvB,GAAchG,OAAM,SAACwH,GACjD1G,QAAQb,MAAMuH,EAChB,IAAG,KAAD,2BACqB,aAAdF,EAAwB,gCAC3BnB,EAAasB,cAAczB,GAAchG,OAAM,SAACwH,GACpD1G,QAAQb,MAAMuH,EAChB,IAAG,KAAD,sCAEL,mDAZA,IAYA,qEAED,WAAoBE,GAAkB,8EACjB,UAAfA,EAAsB,gCAClBvB,EAAawB,YAAY,CAC7B5C,sBAAuB,MACtB,KAAD,2BACsB,aAAf2C,EAAyB,gCAC5BvB,EAAayB,eAAe,CAChC7C,sBAAuB,MACtB,KAAD,sCAEL,mDAZA,MAYA,EA5Dc,GAgEF8C,EADK,IAAIxB,ECjEHyB,EAAa,mDAChCzG,OAAwB,KAAK,KAC7BpB,OAAiB,CAAM,ICJJ8H,EAAa,4CA8C/B,OA9C+B,2CAChC,SAAiBC,EAAeC,GAC9B,OAAOA,GAAgBD,EAAQ,EAAI,IAAM,GAC3C,GAAC,yBAED,SAAmBxE,EAA+BC,GAChD,OAAID,GAAaC,EACRD,EAAY,IAAMC,EAGvBD,IAIAC,GAGG,GACT,GAAC,iCAED,SAA2ByE,GAIzB,OAHa,IAAIC,OAAO,YACVC,KAAKF,EAGrB,GAAC,4BAED,WAEE,MAAO,iJACT,GAAC,0BAED,SAAoBG,EAAeC,GACjC,OAAOD,EAAME,eAAe,QAAS,CACnCC,sBAAuB,EACvBC,sBAAuBH,EACvBI,aAAa,GAEjB,GAAC,yBAED,SAAmBC,GAA6C,IAA7BL,EAAc,uDAAG,EAClD,OAAOK,EAAOJ,eAAe,QAAS,CACpCC,sBAAuBF,EACvBG,sBAAuBH,EACvBI,aAAa,GAEjB,KAAC,EA9C+B,GCM5BE,EAAW,iDACfzF,MAAuB,KAAK,KAC5B0F,eAA8B,IAAK,CA4FlC,OA5FiC,6CAElC,SAAwBvC,GACtBuB,EAAYiB,iBAAiBxC,EAC/B,GAAC,wEAED,oGAG+C,GAFzCnG,EAAW,IAAI2H,EAEbiB,EAAclB,EAAYb,aACf,CAAD,eACiC,OAA/ClG,QAAQkI,IAAI,sCAAmC,kBACxC7I,GAAQ,uBAIS0H,EAAYoB,WAAW,KAAD,EAA/B,IAAXC,EAAW,SAEIA,EAAYC,YAAW,iBACU,OAApDrI,QAAQkI,IAAI,2CAAwC,kBAC7C7I,GAAQ,mCAIKiD,EAAcgG,cAAc,KAAD,GAApC,GAAPrC,EAAO,OAEE,CAAD,gBAE2B,OADrCA,EAAU,IAAI1D,GACN7B,MAAQuH,EAAYM,SAAS,UACrBzJ,KAAK0J,aAAaP,EAAYM,UAAU,KAAD,GAAvDtC,EAAO,eAGLA,IACFA,EAAQ5C,WAAa4E,EAAYQ,eACjCzI,QAAQkI,IAAI,kCAAD,OACsBjC,EAAQvF,MAAK,YAAIuF,EAAQ5C,WAAU,aAAK4D,EAAcyB,YACnFzC,EAAQvD,UACRuD,EAAQtD,UACT,QAILtD,EAASkB,OAAS0F,GAAW,KAAK,mDAElCjG,QAAQb,MAAM,kBAAkB,EAAD,IAC/BE,EAASF,OAAQ,EAAK,iCAGjBE,GAAQ,2DAChB,kDA7CA,IA6CA,oEAED,wGACQ0H,EAAY4B,MAAMhK,g/BAAYiK,4BAA8B,YAAY,KAAD,kBAEhE9J,KAAK+J,YAAY,KAAD,mFAC9B,kDANA,IAMA,qEAED,wGACQ9B,EAAY+B,OAAOnK,g/BAAYiK,4BAA8B,YAAY,KAAD,sCAC/E,kDAJA,IAIA,6EAED,iGACO9J,KAAKiJ,kBAAkBjJ,KAAKiJ,eAAegB,UAAYC,KAAKC,OAAK,gCAC1ClC,EAAYoB,WAAW,KAAD,EAA/B,IAAXC,EAAW,SAEIA,EAAYC,YAAW,yCACnC,MAAI,OAGbvJ,KAAKuD,MAAQ+F,EAAYC,YACzBvJ,KAAKiJ,eAAiBK,EAAYc,UAAU,gCAGvCpK,KAAKuD,OAAK,gDAClB,kDAfA,IAeA,2EAED,WAA2B3B,GAAa,mFAER,OAD1ByI,EAAkB,IAAI5G,GACV7B,MAAQA,EAAM,kBAGN4B,EAAckG,aAAaW,GAAiB,KAAD,EAApD,GAAPlD,EAAO,OACA,CAAD,eAC8D,OAAxEjG,QAAQb,MAAM,kDAAmDuB,GAAO,uBACjExC,GAAS,OAGuC,OAAzD8B,QAAQkI,IAAI,mCAAoCjC,GAAS,kBAClDA,GAAO,gEAEP/H,GAAS,0DAEnB,mDAlBA,MAkBA,EA9Fc,GAkGFwB,EADK,IAAIoI,ECnGlBsB,EAAmB,kHA+CtB,OA/CsB,gGACvB,WAAyBC,GAA0B,2FACpCvK,KAAK0B,WAAU,UAAgC1B,KAAKJ,OAAM,kBAAkB2K,GAAc,KAAD,mFACvG,mDAHsB,IAGtB,iFAED,WACEhJ,EACAuC,EACAC,EACAC,EACAG,EACAF,EACAC,EACAM,GAAgB,2FAEVxE,KAAK2B,UAAS,UAAS3B,KAAKJ,OAAM,0BAAkB2B,GAAkB,CAC1EA,iBACAuC,eACAC,SACAC,OACAG,aACAF,QACAC,UACAM,OAAc,OAANA,QAAM,IAANA,OACP,KAAD,2CACH,iEAtBA,IAsBA,kFACD,WAA0BjD,GAAsB,iGACnBvB,KAAKsB,UAAS,UAAkBtB,KAAKJ,OAAM,0BAAkB2B,IAAkB,KAAD,EAAvF,OAAZiJ,EAAY,yBACXA,GAAgB,MAAI,gDAC5B,mDAJA,IAIA,6FAED,WAAqCjJ,GAAsB,iGAClCvB,KAAKsB,UAAS,UAAsBtB,KAAKJ,OAAM,0BAAkB2B,EAAc,gBAAe,KAAD,EAYnH,OAZGkJ,EAAU,UAEZA,EAAaA,EAAWC,QAAO,SAAUC,GACvC,OAAOA,EAAUnG,MACnB,KACWoG,SAAQ,SAACD,GACdA,GACEA,EAAUE,OACZF,EAAUE,KAAO,IAAIC,IAAIC,OAAOC,QAAiB,OAATL,QAAS,IAATA,OAAS,EAATA,EAAWE,OAGzD,IACD,kBAEMJ,GAAc,IAAE,gDACxB,mDAlBA,MAkBA,EA/CsB,CAAS9K,GAmDnBsL,EADa,IAAIX,E,OCpChC,SAASY,EAAaC,GAA4B,IAAD,UACvC1J,EAA6D0J,EAA7D1J,OAAQ2J,EAAqDD,EAArDC,mBAAoBC,EAAiCF,EAAjCE,eAAgBC,EAAiBH,EAAjBG,aACpD,EAA4CC,oBAAS,GAAK,mBAAnDC,EAAc,KAAEC,EAAiB,KAExC,EAAgDF,mBAAiB,GAAE,mBAA5DG,EAAgB,KAAEC,EAAmB,KAEpCC,EAAMC,cAAND,EACFE,EAAiBtI,EAAcuI,0BAA0BtK,EAA0B,OAAlB2J,QAAkB,IAAlBA,GAA0B,QAAR,EAAlBA,EAAoBpI,cAAM,WAAR,EAAlB,EAA4BC,IAE7F+I,EAAe,UAAMR,EAAiB,WAAa,GAAE,oBAErDS,EAAc,WAClBR,GAAkB,EACpB,EAAE,SAEa5B,IAAK,4CAGnB,OAHmB,kCAApB,8GAC8BjJ,EAAYiJ,QAAQ,KAAD,EAAzCqC,EAAa,OACnBZ,EAAaY,EAAczK,QAAQ,4CACpC,sBAED,IAAI0K,EAAiB,WA0BrB,OAzBI1K,KACF0K,EAAiB1K,EAAOmC,YACDnC,EAAOG,QAC5BuK,EAAiB1K,EAAOG,OAI5BwK,qBACE,WACE,GAAI3K,EAAQ,CAAC,IAAD,EACNF,EAAmC,OAAlB6J,QAAkB,IAAlBA,GAA0B,QAAR,EAAlBA,EAAoBpI,cAAM,WAAR,EAAlB,EAA4BC,GACjD,GAAI1B,EAAgB,CAClB,IAAIgJ,EAAe9I,EAAOoB,wBAAwBC,MAAK,SAACyH,GAAY,aAAwB,QAAnB,EAAAA,EAAavH,cAAM,aAAnB,EAAqBC,KAAM1B,CAAc,IAC9GE,GAAU8I,GAAgB/G,EAAcuI,0BAA0BtK,EAAQF,IAC5E0J,EAAoBoB,+BAA+B9K,GAAgB+K,MAAK,SAAC7B,GACvEkB,EAAoBlB,EAAWjI,OACjC,GAEJ,CACF,CACF,GAEA,CAAC4I,IAID,qBAAKmB,UAAU,2CAA0C,SACvD,sBAAKA,UAAU,YAAW,UACxB,cAACC,EAAU,CAACC,KAAMzN,EAAYO,QAE9B,wBACEgN,UAAU,iBACV7I,KAAK,SACL,iBAAe,WACf,iBAAe,kBACf,gBAAc,iBACd,iBAAgB8H,EAChB,aAAW,oBACXkB,QAAS,kBAAMjB,GAAmBD,EAAe,EAAC,SAElD,+BACE,cAAC,IAAe,CAACrM,MAAM,QAAQwN,KAAM,CAAC,MAAO,cAIjD,sBAAKJ,UAAWP,EAAiB/I,GAAG,iBAAgB,UAClD,oBAAIsJ,UAAU,kCAAiC,SAC5C9K,GACC,qCACGqK,GACC,qCACE,oBAAIS,UAAU,WAAU,SACtB,cAAC,IAAI,CAACA,UAAU,WAAWK,GAAG,UAAUF,QAAST,EAAY,SAC1DL,EAAE,4BAGP,oBAAIW,UAAU,WAAU,SACtB,cAAC,IAAI,CAACA,UAAU,WAAWK,GAAG,aAAaF,QAAST,EAAY,SAC7DL,EAAE,wBAINpI,EAAcb,gBAAgBlB,IAC7B,oBAAI8K,UAAU,WAAU,SACtB,cAAC,IAAI,CAACA,UAAU,WAAWK,GAAG,kBAAkBF,QAAST,EAAY,SAClEL,EAAE,yBAKPF,EAAmB,GAAKlI,EAAcb,gBAAgBlB,KACtD,oBAAI8K,UAAU,WAAU,SACtB,cAAC,IAAI,CAACA,UAAU,WAAWK,GAAE,yBAAsC,OAAlBxB,QAAkB,IAAlBA,GAA0B,QAAR,EAAlBA,EAAoBpI,cAAM,WAAR,EAAlB,EAA4BC,GAAE,eAAeyJ,QAAST,EAAY,SAChHL,EAAE,6BAOS,QAArB,EAAAnK,EAAOc,sBAAc,aAArB,EAAuBC,QAAS,GAC/B,oBAAI+J,UAAU,WAAU,SACtB,cAAC,IAAI,CAACA,UAAU,WAAWK,GAAG,QAAQF,QAAST,EAAY,SACxDL,EAAE,wBAQf,qBAAIW,UAAU,wCAAuC,UAClD9K,IAAwC,QAA9B,EAAAA,EAAOoB,+BAAuB,aAA9B,EAAgCL,QAAS,GAClD,mCACE,oBAAI+J,UAAU,gCAA+B,SAC3C,cAAC,IAAI,CAACA,UAAU,WAAWK,GAAG,iBAAiBF,QAAST,EAAY,SAC/C,OAAlBb,QAAkB,IAAlBA,GAA0B,QAAR,EAAlBA,EAAoBpI,cAAM,WAAR,EAAlB,EAA4B6H,KAAKgC,oBAMzCpL,GACC,mCACE,oBAAI8K,UAAU,8CAA6C,SACzD,eAAC,IAAI,CAACA,UAAU,WAAWK,GAAG,kBAAkBF,QAAST,EAAY,UACnE,cAAC,IAAe,CAACU,KAAM,CAAC,MAAO,UAC/B,+BAAOR,EAAeU,wBAK5BpL,GACA,oBAAI8K,UAAU,gCAA+B,SAC3C,wBACEA,UAAU,WACVG,QAAO,gCAAE,wFACO,OAAdT,IAAc,SACRpC,IAAQ,KAAD,sCACb,SAED+B,EAAE,qBAIT,oBAAIW,UAAU,WAAU,SACtB,wBACEA,UAAU,WACVG,QAAS,WACPT,IACAZ,GACF,EAAE,SAEDO,EAAE,kCAQnB,CAMA,SAASY,EAAWrB,GAClB,IAAI2B,EAAY7N,EAAsBkM,EAAMsB,MAC5C,OACE,cAAC,IAAI,CAACF,UAAU,eAAeK,GAAG,IAAG,SACnC,qBAAKG,IAAKD,EAAWE,IAAI,OAAOT,UAAU,cAGhD,C,OCpLe,SAASU,EAAW9B,GACjC,IAAQG,EAAiCH,EAAjCG,aAAcD,EAAmBF,EAAnBE,eACdO,EAAMC,cAAND,EACFsB,EAAUC,cAEhB,OACE,qCACE,iCACE,qBAAKZ,UAAU,8BAA6B,SAC1C,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,oDAAmD,SAChE,qBAAKA,UAAU,eAAc,SAC3B,oBAAIA,UAAU,wCAAuC,SACnD,oBAAIA,UAAU,WAAU,SACtB,yBAAQA,UAAU,WAAWG,QAASrB,EAAe,UACnD,cAAC,IAAe,CAACkB,UAAU,OAAOI,KAAM,CAAC,MAAO,WAC/Cf,EAAE,0CAUnB,qBAAKW,UAAU,8BAA6B,SAC1C,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,oDAAmD,SAChE,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,MAAK,UAClB,sBAAKA,UAAU,eAAc,UAC3B,qBAAKA,UAAU,OAAM,SACnB,cAACC,EAAU,CAACC,KAAMzN,EAAYS,SAGhC,qBAAK8M,UAAU,YAAW,SACxB,sBAAKA,UAAU,YAAW,UACxB,6BAAKX,EAAE,2BACP,6BAAKA,EAAE,8BAEP,8BACE,wBAAQ3I,GAAG,cAAcsJ,UAAU,yBAAyBG,QAAO,gCAAE,wGAAkB7C,IAAO,mFAAC,SAC5F+B,EAAE,+BAIP,sBAAKW,UAAU,gBAAe,UAC5B,gCAAQX,EAAE,0CACV,wBAAQW,UAAU,qBAAqBG,QAAO,gCAAE,wGAAkB7C,IAAO,mFAAC,SACvE+B,EAAE,sCAMb,qBAAKW,UAAU,iDAAgD,SAC7D,qBAAKA,UAAU,YAAYQ,IAAI,sBAAsBC,IAAI,qBAQvE,SAEanD,IAAK,4CAOnB,OAPmB,kCAApB,8GAC8BjJ,EAAYiJ,QAAQ,KAAD,EAA5B,OAAbqC,EAAa,gBAEEZ,EAAaY,EAAczK,QAAQ,KAAD,EAA3C,QAEVyL,EAAQE,KAAK,KACd,4CACF,sBACH,C,WChFYC,E,QCRCC,EAAO,mDAClBxJ,aAAuB,GAAG,KAC1BC,OAAiB,GAAG,KACpBC,KAAe,GAAG,KAClBG,WAAqB,GAAG,KACxBF,MAAgB,GAAG,KACnBC,QAAkB,GAAG,KACrBqJ,IAAc,GAAG,KACjBC,IAAc,EAAG,ICRNC,EAAW,mDACtBlM,eAAyB,GAAG,KAC5BmM,wBAAkC,EAAM,KACxCC,eAAyB,EAAM,KAC/BC,0BAAoC,EAAM,KAC1CC,aAAuB,EAAM,KAC7BC,oBAA8B,EAAM,KACpCC,eAAyB,EAAM,KAC/BC,oBAA8B,CAAM,KFIrC,SAJWX,OAAS,qBAATA,IAAS,mBAATA,IAAS,qBAIpB,CAJWA,MAAS,KAMd,IGVKY,GHUCC,GAAG,mDACdjL,GAAa,GAAG,KAChB4H,KAAe,GAAG,KAClBsD,SAAmB,GAAG,KACtBC,YAAsB,GAAG,KACzBC,YAA2B,IAAIZ,EAAc,KAC7Ca,SAAmB,EAAM,KACzBC,QAAmB,IAAIjB,EAAU,KACjCkB,MAAgB,GAAG,KACnBvK,MAAgB,GAAG,KACnBwK,OAAuB,GAAG,KAC1BlB,IAAc,EAAE,KAChBC,IAAc,EAAE,KAChBkB,SAA2B,GAAG,KAC9BC,QAAkB,GAAG,KACrBnK,QAAkB,CAAK,IAQZoK,GAAK,mDAChB3L,GAAa,GAAG,KAChB4H,KAAe,GAAG,KAClBsD,SAAmB,GAAG,KACtBC,YAAsB,GAAG,KACzBC,YAA2B,IAAIZ,EAAc,KAC7CkB,QAAkB,GAAG,KACrBE,qBAAe,OACfC,oBAA8B,GAAG,KACjCR,SAAmB,EAAM,KACzB9J,QAAkB,EAAK,KACvB+J,QAAmB,IAAIjB,EAAU,KACjCkB,MAAgB,GAAG,KACnBvK,MAAgB,GAAG,KACnBwK,OAAuB,GAAG,KAC1BlB,IAAc,EAAE,KAChBC,IAAc,EAAE,KAEhBkB,SAA2B,GAAG,KAC9BK,kBAA4C,GAAG,KAC/CC,aAAmC,GAAG,KACtCC,MAAsB,KAAK,KAE3BC,WAAiC,EAAG,IIxDzBC,GAAU,kHAqGpB,OArGoB,wFACrB,WAAiBlM,GAAU,iGACPjD,KAAKsB,UAAS,UAAStB,KAAKJ,OAAM,iBAASqD,EAAE,kBAAiB,KAAD,EAAtE,OAAHmM,EAAG,yBACFA,GAAO,IAAIlB,IAAK,gDACxB,mDAJoB,IAIpB,2EAED,WAAmBmB,GAAkB,iGAChBrP,KAAK0B,WAAU,UAA+B1B,KAAKJ,OAAM,+BAA+ByP,GAAK,KAAD,EAC5D,OAA/C,QADEC,EAAI,cACN,IAAJA,KAAMC,MAAK,SAACC,EAAGC,GAAC,OAAKD,EAAE3E,KAAK6E,cAAcD,EAAE5E,KAAK,IAAE,kBAC5CyE,GAAQ,IAAE,gDAClB,mDANA,IAMA,sEAED,8GACqBtP,KAAKsB,UAAS,UAAgBtB,KAAKJ,OAAM,uBAAsB,KAAD,EAC9B,OAA/C,QADE0P,EAAI,cACN,IAAJA,KAAMC,MAAK,SAACC,EAAGC,GAAC,OAAKD,EAAE3E,KAAK6E,cAAcD,EAAE5E,KAAK,IAAE,kBAC5CyE,GAAQ,IAAE,gDAClB,kDANA,IAMA,wEAED,8GACqBtP,KAAKsB,UAAS,UAAgBtB,KAAKJ,OAAM,YAAW,KAAD,EACnB,OAA/C,QADE0P,EAAI,cACN,IAAJA,KAAMC,MAAK,SAACC,EAAGC,GAAC,OAAKD,EAAE3E,KAAK6E,cAAcD,EAAE5E,KAAK,IAAE,kBAC5CyE,GAAQ,IAAE,gDAClB,kDANA,IAMA,2EAED,WAAmBrM,GAAU,iGACTjD,KAAKsB,UAAS,UAAWtB,KAAKJ,OAAM,mBAAWqD,IAAM,KAAD,EAA7D,OAAHmM,EAAG,yBACFA,GAAO,IAAIR,IAAO,gDAC1B,mDALA,IAKA,wFAED,WAAgCvL,EAAesM,EAAiBC,GAAyB,oGAE/E5P,KAAK0B,WAAW,GAAD,OAAI1B,KAAKJ,OAAM,iBAASyD,EAAK,mBAAWsM,EAAO,yBAAiBC,EAAiB,qBAAqB,CAAC,GAAG,KAAD,4BACvH,GAAI,0DAEJ,GAAK,wDAEf,uDATA,IASA,0FAED,WAAkCvM,EAAesM,EAAiBC,GAAyB,oGAEjF5P,KAAK0B,WAAW,GAAD,OAAI1B,KAAKJ,OAAM,iBAASyD,EAAK,mBAAWsM,EAAO,yBAAiBC,EAAiB,uBAAuB,CAAC,GAAG,KAAD,4BACzH,GAAI,0DAEJ,GAAK,wDAEf,uDATA,IASA,iFAED,WAAyBvM,GAAa,oGAE5BrD,KAAK0B,WAAW,GAAD,OAAI1B,KAAKJ,OAAM,iBAASyD,EAAK,6BAA6B,CAAC,GAAG,KAAD,4BAC3E,GAAI,0DAEJ,GAAK,wDAEf,mDATA,IASA,mFAED,WAA2BA,GAAa,oGAE9BrD,KAAK0B,WAAW,GAAD,OAAI1B,KAAKJ,OAAM,iBAASyD,EAAK,+BAA+B,CAAC,GAAG,KAAD,4BAC7E,GAAI,0DAEJ,GAAK,wDAEf,mDATA,IASA,uEAED,WAAeA,EAAesM,EAAiBC,EAA2BC,GAAY,oGAE5E7P,KAAK0B,WAAW,GAAD,OAChB1B,KAAKJ,OAAM,iBAASyD,EAAK,mBAAWsM,EAAO,yBAAiBC,EAAiB,kCAA0BC,GAC1G,CAAC,GACD,KAAD,4BACM,GAAI,0DAEJ,GAAK,wDAEf,yDAZA,IAYA,2EAED,WAAmBC,GAAc,oGAEvB9P,KAAK0B,WAAU,UAAc1B,KAAKJ,OAAM,iBAASkQ,EAAM,8CAA8C,CAAC,GAAG,KAAD,yGAEjH,mDANA,IAMA,yEAED,WAAiBA,EAAgBH,EAAiBC,GAAyB,oGAEjE5P,KAAK0B,WAAW,GAAD,OAAI1B,KAAKJ,OAAM,iBAASkQ,EAAM,mBAAWH,EAAO,yBAAiBC,EAAiB,uBAAuB,CAAC,GAAG,KAAD,4BAC1H,GAAI,0DAEJ,GAAK,wDAEf,uDATA,IASA,+EAED,WAAuBvM,EAAe0M,GAA4B,0GAEvC/P,KAAKsB,UAAS,UAChCtB,KAAKJ,OAAM,iBAASyD,EAAK,4CAAoC0M,IAChE,KAAD,EAFa,OAAVb,EAAU,yBAGPA,GAAc,IAAE,yDAEhB,IAAE,yDAEZ,qDAXA,MAWA,EArGoB,CAASvP,GAyGjBqQ,GADI,IAAIb,GCnFRc,GADS,IAxBH,WAGnB,aAAe,yBAFfC,SAAmB,KAGjBlQ,KAAKkQ,SAAWC,aAAaC,QAAQ,cAAgBC,OAAOC,UAAUJ,SAASxN,SAAS,MAAQ,KAAO,KACzG,CAgBC,OAhBA,wCAED,WACE,OAAO1C,KAAKkQ,QACd,GAAC,4BAED,WASE,MARsB,OAAlBlQ,KAAKkQ,SACPlQ,KAAKkQ,SAAW,KAEhBlQ,KAAKkQ,SAAW,KAElBC,aAAaI,QAAQ,WAAYvQ,KAAKkQ,UAG/BlQ,KAAKkQ,QACd,KAAC,EArBkB,KFQpB,SAJWjC,KAAU,gBAAVA,EAAU,sBAAVA,EAAU,sBAIrB,CAJWA,QAAU,SGJVuC,GHUNC,GAAY,kHAkKf,OAlKe,sCAChB,iDACA,WAAgBlP,EAAwB0C,EAAeyM,EAAgBC,GAAY,iGAC5D3Q,KAAKsB,UAAS,UAC9BtB,KAAKJ,OAAM,0BAAkB2B,EAAc,yBAAiB0C,GAAK,OAAGyM,EAAK,iBAAaA,GAAU,IAAE,OAAGC,EAAG,eAAWA,GAAQ,KAC9H,KAAD,EAFW,OAANC,EAAM,yBAGLA,GAAU,IAAE,gDACpB,yDAND,IAMC,2EAED,WAAmBrP,EAAwB0B,GAAU,iGACG,OAAlD4N,EAAqB,QAD4BtN,EAAoB,+BAAG,MAC/C,iBAAaA,GAAU,GAAG,EAAD,OAClCvD,KAAKsB,UAAS,UAAWtB,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0B,EAAK4N,IAAY,KAAD,EAAxG,OAALC,EAAK,yBACJA,GAAS,MAAI,gDACrB,qDANA,IAMA,6FAED,WACEvP,EACA8B,EACA0N,EACAL,EACAC,GAAY,iGAEU3Q,KAAK0B,WAAU,UAChC1B,KAAKJ,OAAM,0BAAkB2B,EAAc,kCAC9C,CAAE8B,MAAOA,EAAO0N,UAAWA,EAAWL,MAAOA,EAAOC,IAAKA,IACzD,KAAD,EAHY,OAAPK,EAAO,yBAINA,GAAW,IAAE,gDACrB,2DAdA,IAcA,uEAED,WAAezP,EAAwB0P,EAAiBC,GAAe,iGACnDlR,KAAKmR,QAAQ,GAAD,OAAInR,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,mBAAWC,IAAW,KAAD,EAA3G,OAALE,EAAK,yBACFA,GAAS,MAAI,gDACrB,uDALA,IAOD,0EACA,WACE/N,EACA9B,EACA8P,EACAzP,EACAgC,EACAC,EACAqM,EACAoB,EACAC,EACAC,EACAC,GAAmC,2FAEtBzR,KAAK0B,WAAU,UAAiB1B,KAAKJ,OAAM,0BAAkB2B,EAAc,WAAW,CACjGmQ,UAAW9N,EACX+N,SAAU9N,EACVjC,MAAOA,EACPyC,MAAOgN,EACPnB,SAAUA,GAAYD,GAAgB2B,cACtCvO,MAAOA,EACPiO,kBAAmBA,EACnBE,KAAMA,EACND,UAAWA,EACXE,gBAAiBA,IAChB,KAAD,mFACH,uEA1BD,IA0BC,8EAED,WACElQ,EACA0P,EACAY,EACAC,EACAC,EACAC,EACAC,GAAe,2FAEFjS,KAAK0B,WAAU,UAAiB1B,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,uBAAuB,CAC/H7C,YAAa,GACb0D,OAAQA,EACRC,MAAOA,EACPC,MAAOA,EACPC,OAAQA,EACRJ,OAAQA,IACP,KAAD,mFACH,+DAnBA,IAmBA,kFAED,WACEtQ,EACA0P,EACAiB,EACAL,EACAM,EACAC,GAAuB,2FAEVpS,KAAK0B,WAAU,UACvB1B,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,kBAAUiB,EAAW,aACrF,CAAEL,OAAQA,EAAQM,iBAAkBA,EAAkBC,eAAgBA,IACtE,KAAD,mFACF,6DAdA,IAcA,uEAED,WAAe7Q,EAAwB0P,EAAiBiB,EAAqBG,EAAgB9O,GAAoB,iFAI9G,OAHGzD,EAAG,UAAME,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,kBAAUiB,EAAW,qBAC3F3O,IACFzD,GAAG,iBAAcyD,IAClB,SAEKvD,KAAK0B,WAAW5B,EAAK,CACzBwS,eAAgB,SAChBD,OAAQA,IACP,KAAD,2CACH,2DAZA,IAYA,6FAED,WAAqC9Q,EAAwB0P,GAAe,2FACpEjR,KAAK0B,WAAW,GAAD,OAAI1B,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,WAAW,MAAM,KAAD,2CACvG,qDAJA,IAIA,mFAED,WAA2B1P,EAAwB0P,GAAe,iGAC9CjR,KAAK0B,WAAU,UAC5B1B,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,iCAChE,MACA,KAAD,EAHQ,OAALH,EAAK,yBAIFA,GAAS,MAAI,gDACrB,qDARA,IAQA,kFAED,WAA0BvP,EAAwB0P,GAAe,iGAC7CjR,KAAK0B,WAAU,UAC5B1B,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,gCAChE,MACA,KAAD,EAHQ,OAALH,EAAK,yBAIFA,GAAS,MAAI,gDACrB,qDARA,IAQA,iFAED,WAAyBvP,EAAwB0P,GAAe,2FACjDjR,KAAK0B,WAAW,GAAD,OAAI1B,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,aAAa,MAAM,KAAD,mFAChH,qDAJA,IAIA,uEAED,WAAe1P,EAAwB0P,EAAiB1N,GAAa,2FACtDvD,KAAK0B,WAAW,GAAD,OACvB1B,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,eAAO1N,EAAK,iBAAaA,GAAU,IACnG,MACA,KAAD,mFACF,uDAPA,IASD,8EACA,WACEhC,EACA0P,EACAiB,EACAK,EACAC,GAA8B,iFAEiE,OAA3F1S,EAAG,UAAME,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,kBAAUiB,GAAW,SAClFlS,KAAK2B,UAAU7B,EAAK,CAAEyS,kBAAiBC,yBAAwB,KAAD,mFAC5E,2DAVD,IAYA,0EAEA,WAAkBjR,EAAwB0P,GAAe,2FACjDjR,KAAKyS,aAAa,GAAD,OAAIzS,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,IAAW,KAAD,2CAC5F,qDAJD,IAIC,8EAED,WAAsB1P,EAAwB0P,EAAiBiB,GAAmB,2FACnElS,KAAKyS,aAAa,GAAD,OAAIzS,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,kBAAUiB,IAAe,KAAD,mFACxH,uDAJA,IAIA,8EAED,WAAsB3Q,EAAwB0P,EAAiBiB,GAAmB,2FAC1ElS,KAAKyS,aAAa,GAAD,OAAIzS,KAAKJ,OAAM,0BAAkB2B,EAAc,mBAAW0P,EAAO,kBAAUiB,IAAe,KAAD,2CACjH,uDAJA,MAIA,EAlKe,CAASvS,GAsKZ+S,GADM,IAAIjC,G,sBG3KxB,SAJWD,KAAW,YAAXA,EAAW,gBAAXA,EAAW,YAItB,CAJWA,QAAW,KCAhB,ICMKmC,GAMAC,IAFX,SAJWD,OAAS,qBAATA,IAAS,mBAATA,IAAS,qCAIpB,CAJWA,QAAS,KAUpB,SAJWC,KAAoB,kBAApBA,EAAoB,gBAApBA,EAAoB,kCAI/B,CAJWA,QAAoB,KAMzB,IClBKC,IAMX,SANWA,KAAgB,UAAhBA,EAAgB,gCAAhBA,EAAgB,kDAAhBA,EAAgB,sBAAhBA,EAAgB,oBAM3B,CANWA,QAAgB,KCKrB,IAAMC,GAAY,4CA8LtB,OA9LsB,iDACvB,SAAuBhC,GACrB,IAAIiC,EAAU,GAed,OAdAjC,EAAMkC,MAAMpI,SAAQ,SAACqI,GACnB,GAAa,OAATA,QAAS,IAATA,KAAWC,YAAa,CAAC,IAAD,IACtBvD,EAAmB,OAATsD,QAAS,IAATA,GAAsB,QAAb,EAATA,EAAWC,mBAAW,WAAb,EAAT,EAAwBvD,QAClCC,EAA6B,OAATqD,QAAS,IAATA,GAAsB,QAAb,EAATA,EAAWC,mBAAW,WAAb,EAAT,EAAwBtD,mBAE5CD,GAAWC,KACTmD,EAAQvQ,OAAS,IACnBuQ,GAAW,MAEbA,GAAW,QAAQvK,KAAKoH,GAAqBA,EAAoBD,EAAUC,EAE/E,CACF,IAEOmD,CACT,GAAC,gCAED,SAA0B9O,EAAekP,GACvC,OAAIA,EACKnT,KAAKoT,uCAAuCnP,GAE5CjE,KAAKqT,6BAA6BpP,EAE7C,GAAC,0CAED,SAAoCA,GAClC,OAAQA,GACN,IAAK,iBACL,IAAK,iBACL,IAAK,0BACL,IAAK,yBACL,IAAK,gBACL,IAAK,qBACH,MAAO,mCACT,IAAK,YACH,MAAO,iCACT,IAAK,gBACH,MAAO,gCACT,IAAK,YACH,MAAO,kCACT,QACE,MAAO,gCAEb,GAAC,oDAED,SAA8CA,GAC5C,OAAQA,GACN,IAAK,iBACL,IAAK,iBACH,MAAO,mCACT,IAAK,YACH,MAAO,iCACT,IAAK,YACH,MAAO,kCACT,QACE,MAAO,mCAEb,GAAC,oCAED,SAA8BqP,EAAyBpD,GACrD,IAAKoD,EAASlF,YACZ,MAAO,GAET,IAAM3F,EAAQ6K,EAASlF,YAAY8B,GACnC,OAAKzH,GACI,EAGX,GAAC,0BAED,SAAoBqI,EAAcoB,GAChC,OAAOpB,EAAMkC,MAAMlQ,MAAK,SAACyQ,GAAI,OAAKA,EAAKtQ,KAAOiP,CAAW,GAC3D,GAAC,gCAED,SAA0BjO,GACxB,MAAiB,QAAVA,GAA6B,OAAVA,CAC5B,GAAC,4BAED,SAAsB6M,GACpB,SACGA,IACAA,EAAM0C,UACmB,oBAA1B1C,EAAMU,KAAKiC,YACX3C,EAAM4C,SACN5C,EAAM0C,SAASG,OAAM,SAACC,GAAC,MAAiB,cAAZA,EAAE3P,KAAqB,IAMvD,GAAC,6BAED,SAAuB6M,GACrB,IAAKA,IAAUA,EAAM4C,UAAY5C,EAAM0C,WAAa1C,EAAM0C,SAAShR,OACjE,OAAO,EAGT,IAAK,IAAIF,EAAI,EAAGA,EAAIwO,EAAM0C,SAAShR,OAAQF,IACzC,GAAgC,aAA5BwO,EAAM0C,SAASlR,GAAG2B,MACpB,OAAO,EAIX,OAAO,CACT,GAAC,4BAED,SAAsB6M,GACpB,IAAKA,EACH,OAAO,EAGT,GAAIA,EAAM+C,kCAAyC,OAAL/C,QAAK,IAALA,KAAO4C,SAA4B,QAAhB5C,EAAM7M,OAAmC,kBAAhB6M,EAAM7M,MAC9F,OAAO,EAGT,IAAIzD,EAAOsQ,EAAMkC,MAAMlQ,MAAK,SAACmQ,GAAS,OAAKA,EAAUC,YAAYjP,QAAU4O,GAAiBiB,GAAG,IAC/F,OAAgB,OAATtT,QAA0BpB,IAAToB,CAC1B,GAAC,8BAED,SAAwBsQ,GACtB,QAAKA,IAImB,GAAjBA,EAAM4C,SAA0C,YAA1B5C,EAAMU,KAAKiC,YAA4C,cAAhB3C,EAAM7M,OAAgD,IAAvB6M,EAAMkC,MAAMxQ,OACjH,GAAC,2BAED,SAAqByB,GACnB,MAAiB,mBAAVA,GAAwC,kBAAVA,GAAuC,2BAAVA,CACpE,GAAC,qCAED,SAA+B6M,GAC7B,SAAKA,GAASA,EAAM+C,kCAAoC/C,EAAM4C,WAI1D5C,EAAMU,KAAKiC,aAAeb,GAAqBmB,gBAC1CjD,EAAMkC,MAAM9P,MACjB,SAAC+P,GAAoB,OACnBA,EAAUC,aACVD,EAAUC,YAAYjP,QAAU4O,GAAiBmB,WACjDf,EAAUC,YAAYjP,QAAU4O,GAAiBoB,QAAQ,MAGzDnD,EAAM7M,OAAyB,kBAAhB6M,EAAM7M,OAA6C,QAAhB6M,EAAM7M,QAGrD6M,EAAMkC,MAAM9P,MAAK,SAAC+P,GAAoB,OAAKA,EAAUC,aAAeD,EAAUC,YAAYjP,QAAU4O,GAAiBiB,GAAG,IAEnI,GAAC,sBAED,SAAgBhD,GACd,IAAKA,EACH,OAAO,EAGT,GACEA,EAAM+C,kCACL/C,EAAM7M,OAAyB,kBAAhB6M,EAAM7M,OAA6C,QAAhB6M,EAAM7M,OACzD6M,EAAM4C,QAEN,OAAO,EAGT,IAAIlT,EAAOsQ,EAAMkC,MAAMlQ,MAAK,SAACmQ,GAAoB,OAAKA,EAAUC,aAAeD,EAAUC,YAAYjP,QAAU4O,GAAiBiB,GAAG,IACnI,OAAgB,OAATtT,QAA0BpB,IAAToB,CAC1B,GAAC,qCAED,SAA+BsQ,GAC7B,SAAKA,GAASA,EAAM+C,kCAAoD,QAAhB/C,EAAM7M,OAAmB6M,EAAM4C,WAI/E1T,KAAKkU,mBAAmBpD,EAClC,GAAC,oCAED,SAA8BA,GAC5B,SAAKA,IAAUA,EAAM+C,kCAAqD,QAAhB/C,EAAM7M,OAAmC,kBAAhB6M,EAAM7M,SAIjFjE,KAAKkU,mBAAmBpD,EAClC,GAAC,gCAED,SAA0BA,GACxB,IAAItQ,EAAY,OAALsQ,QAAK,IAALA,OAAK,EAALA,EAAOkC,MAAMlQ,MAAK,SAACmQ,GAAoB,OAAKA,EAAUC,aAAeD,EAAUC,YAAYjP,QAAU4O,GAAiBiB,GAAG,IACpI,OAAgB,OAATtT,QAA0BpB,IAAToB,CAC1B,KAAC,EA9LsB,GCYV,SAAS2T,GAAgBhJ,GACtC,IAAQiJ,EAA0GjJ,EAA1GiJ,kBAAmBhM,EAAuF+C,EAAvF/C,MAAOiM,EAAgFlJ,EAAhFkJ,WAAYC,EAAoEnJ,EAApEmJ,UAAWC,EAAyDpJ,EAAzDoJ,gBAAiBC,EAAwCrJ,EAAxCqJ,YAAaC,EAA2BtJ,EAA3BsJ,aAAcC,EAAavJ,EAAbuJ,SAE7F9I,EAAMC,cAAND,EAER,OACE,gCACE,+BAAOA,EAAEzD,EAAcwM,UAAUvM,EAAOgM,GAAoB,CAAEhM,MAAOA,MAEpEA,EAAQ,GACP,qBAAImE,UAAU,uBAAsB,UAClC,oBAAIA,UAAW,aAAgBgI,EAAgC,GAAd,aAAkB,SACjE,wBAAQhI,UAAU,YAAY,aAAW,WAAWG,QAAS,kBAAM+H,GAAc,EAAC,SAChF,cAAC,IAAe,CAAC9H,KAAM,CAAC,MAAO,oBAGnC,oBAAIJ,UAAU,gCAA+B,SAC3C,yBAAQA,UAAU,YAAY,aAAW,WAAWG,QAAS,kBAAM+H,GAAc,EAAC,UAC/EH,EAAY,EAAE,IAAE1I,EAAE,aAAa,IAAEyI,OAGtC,oBAAI9H,UAAW,aAAgBiI,EAA4B,GAAd,aAAkB,SAC7D,wBAAQjI,UAAU,YAAY,aAAW,OAAOG,QAAS,kBAAMgI,GAAU,EAAC,SACxE,cAAC,IAAe,CAAC/H,KAAM,CAAC,MAAO,0BAO7C,C,yBC7CqBiI,GAAY,4CAO9B,OAP8B,yCAC/B,SAAexT,GACbyT,KAAMC,QAAQ1T,EAChB,GAAC,mBAED,SAAaA,GACXyT,KAAMxU,MAAMe,EACd,KAAC,EAP8B,G,UCU1B,SAAS2T,GAAsB5J,GACpC,OACE,mCACE,yBAAQoB,UAAS,0BAA6BG,QAAS,kBAAMvB,EAAMuB,SAAS,EAAEsI,SAAU7J,EAAM6J,SAAS,UACrG,cAAC,IAAe,CAACrI,KAAM,CAAC,MAAO,eAAgB,IAAExB,EAAM8J,OAAS,IAAM9J,EAAM8J,UAIpF,CAQO,SAASC,GAAmB/J,GACjC,OACE,yBAAQoB,UAAWpB,EAAMoB,UAAYpB,EAAMoB,UAAY,kBAAmBG,QAAS,kBAAMvB,EAAMuB,SAAS,EAAC,UACvG,cAAC,IAAe,CAACH,UAAWpB,EAAM8J,OAAS,OAAQtI,KAAM,CAAC,MAAO,UAChExB,EAAM8J,OAAS,IAAM9J,EAAM8J,QAGlC,CAUO,SAASE,GAAoBhK,GAClC,OACE,wBAAQoB,UAAWpB,EAAMoB,UAAY,4BAA6BG,QAAS,kBAAMvB,EAAMuB,SAAS,EAAEsI,SAAU7J,EAAM6J,SAAS,SACzH,cAAC,IAAe,CAACrI,KAAK,UAG5B,CAMO,SAASyI,GAAoBjK,GAClC,IAAM+B,EAAUC,cAEhB,OACE,wBAAQZ,UAAU,0BAA0BG,QAAS,kBAAMQ,EAAQE,KAAKjC,EAAMrL,IAAI,EAAC,SACjF,cAAC,IAAe,CAAC6M,KAAM,CAAC,MAAO,UAGrC,CAWO,SAAS0I,GAAsBlK,GACpC,OACE,yBAAQzH,KAAMyH,EAAMzH,KAAM6I,UAAWpB,EAAMoB,UAAWG,QAAS,kBAAMvB,EAAMuB,SAAS,EAAEsI,SAAU7J,EAAM6J,SAAS,UAC5G7J,EAAMwB,MAAQ,cAAC,IAAe,CAACJ,UAAU,OAAOI,KAAMxB,EAAMwB,OAAS,IAAExB,EAAM8J,OAAS9J,EAAM8J,QAGnG,CAOO,SAASK,GAAgB,GAA2C,IAAzCrS,EAAE,EAAFA,GAAIgS,EAAK,EAALA,MAAOM,EAAQ,EAARA,SACnC3J,EAAMC,cAAND,EAER,OACE,qCACE,wBAAQW,UAAU,2BAA2B,4BAAoBtJ,GAAM,iBAAe,QAAO,SAC3F,cAAC,IAAe,CAACsJ,UAAU,YAAYI,KAAM,CAAC,MAAO,mBAEvD,qBAAKJ,UAAU,QAAQiJ,UAAW,EAAGvS,GAAIA,EAAG,SAC1C,qBAAKsJ,UAAU,eAAc,SAC3B,sBAAKA,UAAU,gBAAe,UAC5B,sBAAKA,UAAU,eAAc,UAC3B,oBAAIA,UAAU,cAAa,SAAE0I,IAC7B,wBAAQvR,KAAK,SAAS6I,UAAU,YAAY,kBAAgB,QAAQ,aAAW,aAEjF,qBAAKA,UAAU,aAAY,SAAEgJ,IAC7B,qBAAKhJ,UAAU,eAAc,SAC3B,wBAAQ7I,KAAK,SAAS6I,UAAU,0BAA0B,kBAAgB,QAAO,SAC9EX,EAAE,6BAQnB,CAQO,SAAS6J,GAAatK,GAC3B,IAAQS,EAAMC,cAAND,EACJqJ,EAAQ9J,EAAM8J,MAAQ9J,EAAM8J,MAAQrJ,EAAE,iBAE1C,OACE,cAAC,WAAO,CACNW,UAAW,0BACX0I,MAAOA,EACPzU,KAAM2K,EAAM3K,KACZkV,mBAAkB,IAClBC,SAAUxK,EAAMyK,SAAW,OAAO,SAElC,cAAC,IAAe,CAACjJ,KAAK,iBAG5B,CAhGAwI,GAAoBU,aAAe,CACjCb,UAAU,G,WC3BAc,G,6BCXSC,GAAW,4CAuH7B,OAvH6B,qDAS9B,SAA2BC,EAAYC,GACrC,OAAKD,EAIKE,KAAOF,GAENG,GAAGF,GAAUG,OAAO,YALtB,EAMX,GAAC,0BAED,SAAoBJ,GAA6D,IAAjDC,EAAgB,uDAAGF,EAAYM,gBAC7D,OAAOH,KAAOF,GAAMG,GAAGF,GAAUG,OAAO,aAC1C,GAAC,0BAED,SAAoBJ,GAA6D,IAAjDC,EAAgB,uDAAGF,EAAYM,gBAC7D,OAAOH,KAAOF,GAAMG,GAAGF,GAAUG,OAAO,UAC1C,GAAC,uBAED,SAAiBJ,GACf,OAAOE,KAAOF,OAAM5W,EAAW6Q,GAAgBC,UAAUoG,SAC3D,GAAC,0CAED,SAAoCC,GAClC,IAAMC,EAAOC,KAAKC,MAAMH,EAAcvW,KAAK2W,wBACrCC,EAAQH,KAAKC,MAAOH,EAAcvW,KAAK2W,uBAA0B3W,KAAK6W,0BACtEC,EAAUL,KAAKC,MAAOH,EAAcvW,KAAK6W,yBAA4B7W,KAAK+W,2BAC1EC,EAAUP,KAAKC,MAAMH,EAAcvW,KAAK+W,2BAE1CE,EAAW,GAWf,OATIT,EAAO,IACTS,EAAQ,UAAMR,KAAKS,IAAIV,EAAM,IAAE,OAAGW,KAAQvL,EAAE,eAAa,OAAG4K,EAAO,EAAI,IAAM,GAAE,MAE7EI,EAAQ,IACVK,GAAQ,UAAOR,KAAKS,IAAIN,EAAO,IAAE,OAAGO,KAAQvL,EAAE,sBAAqB,MAErEqL,GAAQ,UAAOR,KAAKS,IAAIJ,EAAS,GAAGrD,WAAW2D,SAAS,EAAG,MAAI,OAAGD,KAAQvL,EAAE,cAAa,KACzFqL,GAAQ,UAAOR,KAAKS,IAAIF,EAAS,GAAGvD,WAAW2D,SAAS,EAAG,MAAI,OAAGD,KAAQvL,EAAE,cAG9E,GAAC,4BAED,SAAsBoK,EAAYC,GAChC,OAAKD,EAIKE,KAAOF,GACSG,GAAGF,GAAUG,OAAO,oBAJrC,EAOX,GAAC,4BAED,SAAsBY,GACpB,IAAKA,EACH,MAAO,GAGT,IAAMK,EAAWnB,KAAOmB,SAASL,EAAS,WACpCR,EAAOa,EAASb,OAChBI,EAAQS,EAAST,QACjBE,EAAUO,EAASP,UACrBQ,EAAM,GAgBV,OAdId,EAAO,IACTc,GAAG,UAAOd,EAAI,YAAIW,KAAQvL,EAAE,eAC5B0L,EAAG,UAAMnP,EAAcwM,UAAU6B,EAAMc,GAAI,MAGzCV,EAAQ,IACVU,GAAG,UAAOV,EAAK,YAAIO,KAAQvL,EAAE,gBAC7B0L,EAAG,UAAMnP,EAAcwM,UAAUiC,EAAOU,GAAI,MAG1CR,EAAU,IACZQ,GAAG,UAAOR,GAAO,OAAGK,KAAQvL,EAAE,gBAGzB0L,EAAIC,MACb,GAAC,sBAED,SAAgBvB,GACd,OAAOA,EAAKwB,mBAAmBvH,GAAgB2B,cAAe,CAAE6F,MAAO,QACzE,GAAC,oBAED,SAAczB,GACZ,OAAOA,EAAKwB,mBAAmBvH,GAAgB2B,cAAe,CAAE8F,IAAK,WACvE,GAAC,gCAED,SAA0BC,EAAc1B,GACtC,IAAM9L,EAAM+L,OAASC,GAAGF,GACxB,OAAOC,KAAOyB,EAAM,QAAS,MAAMC,SAASzN,GACxC+L,KAAOyB,EAAM,QAAS,MAAME,IAAI,EAAG,OAAOC,SAC1C5B,KAAOyB,EAAM,QAAS,MAAMG,QAClC,GAAC,wBAED,SAAkBH,EAAc1B,GAC9B,IAAM8B,EAAY,IAAIC,KAAKC,OAAO3H,UAAUJ,SAAU,CACpDgI,OAAQ,OACPH,UAEH,OADA7W,QAAQkI,IAAI2O,GACM,QAAdA,EACKJ,EAEAzB,KAAOyB,EAAM,QAAS,MAAMvB,OAAO,UAE9C,GAAC,uBAED,SAAiBJ,GACf,OAAOE,KAAOiC,IAAInC,GAAMI,OAAO,qBACjC,KAAC,EAvH6B,GDkBjB,SAASgC,GAAmBjN,GACzC,IAAQS,EAAMC,cAAND,EAER,EAAgCL,oBAAkB,GAAM,mBAAjD8M,EAAQ,KAAEC,EAAW,KAC5B,EAA0C/M,qBAA8B,mBAAjEgN,EAAa,KAAEC,EAAgB,KAEtC,EAAkCjN,mBAAiBJ,EAAMuF,OAAM,mBAAxD+H,EAAS,KAAEC,EAAY,KAC9B,EAA8BnN,mBAAiBJ,EAAMwF,KAAI,mBAAlDgI,EAAO,KAAEC,EAAU,KAEpBC,EAAoBC,uBACxB,SAACC,GACCL,EAAaK,EAAMC,OAAOvQ,MAC5B,GACA,CAACiQ,IAGGO,EAAkBH,uBACtB,SAACC,GACCH,EAAWG,EAAMC,OAAOvQ,MAC1B,GACA,CAACmQ,IAGGM,EAAmBC,mBAAQ,WAC/B,MAAO,CAAC,iBAAkB,iBAAkB,kBAAmB,qBACjE,GAAG,CAACvN,IAEJQ,qBAAU,WACRoM,EAAiBU,EAAiBpW,MAAK,SAACsW,GAAM,OAAKA,IAAWjO,EAAMkO,QAAQ5F,UAAU,KACtF6E,GAAY,EACd,GAAG,CAACrI,GAAgBC,WAEpB,IAAMjE,EAAW,iDAAG,WAAOmN,GAAc,2EACd,OAAzBZ,EAAiBY,GAAQ,SACnBE,EAAuBF,GAAQ,KAAD,sCACrC,gBAHgB,sCAKjB,OACE,sBAAKnW,GAAG,uBAAsB,UAC5B,qBAAKsJ,UAAU,+BAA8B,SAC3C,mBACEA,UAAU,mCACV,iBAAe,WACf,iBAAe,uBACf,gBAAc,sBACd,gBAAc,YAIlB,wBACEA,UAAU,gCACV7I,KAAK,SACL,iBAAe,WACf,iBAAe,uBACf,gBAAc,sBACd,gBAAc,QAAO,SAErB,+BACGyH,EAAMuF,OAASvF,EAAMwF,KACpB,mCACGxF,EAAMuF,MAAM6I,UAAU,EAAG,KAAOpO,EAAMwF,IAAI4I,UAAU,EAAG,GACtD,qCACGpO,EAAMuF,MAAM6I,UAAU,EAAGpO,EAAMuF,MAAMlO,QAAQ,IAAEoJ,EAAE,aAAa,IAAET,EAAMwF,IAAI4I,UAAU,EAAGpO,EAAMwF,IAAInO,WAGpG,qCACG2I,EAAMuF,MAAM,IAAE9E,EAAE,aAAa,IAAET,EAAMwF,aAQlD,qBAAKpE,UAAU,yBAAwB,SACrC,qBAAKiN,MAAO,CAAEzH,MAAO,SAAWxF,UAAS,uDAAyD,SAChG,sBAAKA,UAAU,iBAAgB,UAC7B,qBAAKA,UAAU,iBAAiBpJ,KAAK,QAAO,SACzC+V,EAAiBO,KAAI,SAACL,GACrB,IAAI5U,EAAS+T,GAAiBa,IAAWb,EAAgB,UAAY,GAC/DF,EAAWe,IAAWtD,GAAiB4D,OAC7C,OACE,wBAEEhW,KAAK,SACL,iBAAiB2U,OAAwBjZ,EAAb,WAC5B,iBAAiBiZ,OAAoCjZ,EAAzB,uBAC5B,gBAAgBiZ,OAAmCjZ,EAAxB,sBAC3B,gBAAgBiZ,OAAqBjZ,EAAV,QAC3BmN,UAAS,kCAA6B/H,GACtCkI,QAAS,WACPT,EAAYmN,EACd,EAAE,SAEDxN,EAAEwN,IAXEA,EAcX,MAEF,gCACE,sBAAK7M,UAAU,qBAAoB,UACjC,8BACE,uBACEyI,UAAWqD,EACX9L,UAAU,eACV7I,KAAK,OACLwT,IAAKyC,GAAUhB,EAAS,GACxBlQ,MAAOgQ,EACPmB,SAAUf,MAId,qBAAKtM,UAAU,mBAAkB,SAAEX,EAAE,eAErC,8BACE,uBACEoJ,UAAWqD,EACX9L,UAAU,eACV7I,KAAK,OACLmW,IAAKF,GAAUlB,EAAW,GAC1BhQ,MAAOkQ,EACPiB,SAAUX,SAKhB,sBAAK1M,UAAU,YAAW,UACxB,wBACEA,UAAU,4BACV,iBAAe,WACf,iBAAe,uBACf,gBAAc,sBACd,gBAAc,QACdyI,UAAWqD,IAAayB,GAAarB,EAAWE,GAChDjM,QAAO,gCAAE,wGACDvB,EAAM4O,aAAatB,EAAWE,GAAS,KAAD,sCAC5C,SAED/M,EAAE,oBAEL,wBACEW,UAAU,4CACV,iBAAe,WACf,iBAAe,uBACf,gBAAc,sBACd,gBAAc,QAAO,SAEpBX,EAAE,mCAQjB,SAEa0N,EAAuB,GAAD,4CAUpC,OAVoC,kCAArC,WAAsCF,GAAc,iFAGtB,GAFtBY,EAAiBZ,IAAWtD,GAAiB4D,OAEnDpB,EAAY0B,GACPA,EAAe,CAAD,+BACXC,GACJlP,OAAOmP,OAAyBpE,IAAkBhT,MAAK,SAACqX,GAAU,OAAKA,IAAef,CAAM,IAC5FjO,EAAM4O,cACN,KAAD,uCAEJ,sBACH,CAAC,SAEcE,GAAmB,EAAD,iDAmBhC,OAnBgC,mCAAjC,WAAkCG,EAA4CL,GAAkD,yFACxH5P,EAAM,IAAID,KACZuO,EAAY,IAAIvO,KAAKC,IACrBwO,EAAU,IAAIzO,KAAKC,IACfkQ,QAAQ1B,EAAQ2B,UAAY,GAEhCF,IAAiBtE,GAAiByE,KACpC9B,EAAU4B,QAAQ5B,EAAU6B,UAAY,GAC/BF,IAAiBtE,GAAiB0E,QAC3C/B,EAAUgC,SAAShC,EAAUiC,WAAa,GAC1CjC,EAAU4B,QAAQ5B,EAAU6B,UAAY,IAGpC5J,EAAQqF,GAAY4E,aAAalC,IACjC9H,EAAMoF,GAAY4E,aAAahC,KAE1BjI,GACTqJ,EAAarJ,EAAOC,GACrB,4CACF,sBAED,SAASgJ,GAAUlR,EAA2BmS,GAC5C,GAAInS,EAAO,CACT,GAAImS,EAAY,EAAG,CACjB,IAAIC,EAAa,IAAI3Q,KAAKzB,GAG1B,OAFAoS,EAAWR,QAAQQ,EAAWP,UAAYM,GAEnC7E,GAAY4E,aAAaE,EAClC,CAAO,OAAO9E,GAAY4E,aAAa,IAAIzQ,KAAKzB,GAClD,CACF,CAEA,SAASqR,GAAarB,EAAmBE,GACvC,OAAOF,EAAYE,GAAW,IAAIzO,KAAKuO,GAAWqC,eAAiB,IACrE,CE/NO,SAASC,GAAa,GAAuB,EAArBC,sBAAyD,IAAlCC,EAAY,EAAZA,aAAcC,EAAe,EAAfA,gBAClE,EAA0B3P,mBAAS0P,GAAa,mBAAzCxS,EAAK,KAAE0S,EAAQ,KACdvP,EAAMC,cAAND,EAEFgO,EAAWd,sBAAYsC,4BAAiB,SAAC3S,GAC7CyS,EAAgBzS,EAAM8O,OACxB,GAAG,KAAM,CAAC2D,IAEV,OACE,uBACE3O,UAAU,6BACV8O,YAAazP,EAAE,iBACfnD,MAAOA,GAAS,GAChBmR,SAAU,SAAChS,GACTuT,EAASvT,EAAEoR,OAAOvQ,OAClBmR,EAAShS,EAAEoR,OAAOvQ,MACpB,GAGN,CCde,SAAS6S,GAAqBnQ,GAC3C,IAAQiE,EAAqBjE,EAArBiE,IAAKmM,EAAgBpQ,EAAhBoQ,YACL3P,EAAMC,cAAND,EAER,IAAKwD,EACH,OAAO,KAGT,IAAMoM,EAAuB,WAAdpM,EAAInL,MACbwX,EAAa,oBAAgBD,EAAS,UAAY,UAClDvG,EAAQrJ,EAAE4P,EAAS,6BAA+B,+BAExD,OACE,qCACE,sBAAMjP,UAAWkP,EAAe,iBAAe,UAAU,oBAAkB,MAAMxG,MAAOA,EAAM,SAC5F,cAAC,IAAe,CAACtI,KAAM,CAAC,MAAO,cAEhC4O,GAAeG,GAAkBtM,EAAIvE,KAAM0Q,IAC1CA,GAAenM,EAAIvE,OAG3B,CAEA,SAAS6Q,GAAkBjT,EAAekT,GACxClT,EAAQA,EAAM8O,OACd,IAAIqE,EAAsBnF,KAAKoF,OAAOxL,OAAOyL,WAAaH,GAAY,IAClEnZ,EAAS,GAAKoZ,EAAsB,EAAIA,EAAsB,GAGlE,OAFgBnT,EAAMsT,OAAO,EAAGvZ,KAEdiG,EAAcA,EAEzBA,EAAMsT,OAAO,EAAGvZ,GAAQwZ,UAAY,KAC7C,CCnCe,SAASC,GAAiB9Q,GACvC,IAAQ+Q,EAAY/Q,EAAZ+Q,QAER,OACE,mCACGA,GACC,qBAAK3P,UAAU,SAAQ,SACrB,qBAAKA,UAAU,cAAa,SAC1B,cAAC,IAAe,CAACI,KAAK,UAAUwP,MAAI,EAACC,KAAK,YAMtD,CCdO,SAASC,GAAqBlR,GACnC,MAA0B,SAAtBA,EAAMmR,YACD,cAAC,IAAe,CAAC3P,KAAM,CAAC,MAAO,wBAAyByP,KAAK,KAAK7P,UAAU,gBAG3D,WAAtBpB,EAAMmR,YACD,cAAC,IAAe,CAAC3P,KAAM,CAAC,MAAO,QAASyP,KAAK,KAAK7P,UAAU,iBAG9D,IACT,CCRO,SAASgQ,GAAoBpR,GAClC,IAAQS,EAAMC,cAAND,EACA3H,EAA6BkH,EAA7BlH,MAAOkP,EAAsBhI,EAAtBgI,kBAEf,OACE,sBAAM5G,UAAWuG,GAAa0J,mBAAmBvY,EAAOkP,GAAmB,SACxEvH,GAAGuH,EAAoB,MAAQ,IAAM,eAAiBlP,IAG7D,CLZqB8R,GACHM,gBAA0B,kBADvBN,GAGH0G,aAAuBzE,KAAK0E,iBAAiBC,kBAAkB1G,SAH5DF,GAKHY,uBAAyB,MALtBZ,GAMHc,yBAA2B,KANxBd,GAOHgB,0BAA4B,GDS7C,SALWjB,KAAgB,uBAAhBA,EAAgB,sBAAhBA,EAAgB,wBAAhBA,EAAgB,4BAK3B,CALWA,QAAgB,KOM5B,IAAM8G,GAA6B,EAC7BC,GAA2B,EAC3BC,GAAiC,EACjCC,GAAmC,EACnCC,GAAmC,EACnCC,GAAyB,EACzBC,GAA6B,EAC7BC,GAAkC,EAClCC,GAA0C,EAC1CC,GAAqC,EACrCC,GAAqC,GAEpC,SAASC,GAAqBpS,GACnC,IAAQmE,EAAgFnE,EAAhFmE,KAAMkO,EAA0ErS,EAA1EqS,UAAWC,EAA+DtS,EAA/DsS,WAAYC,EAAmDvS,EAAnDuS,eAAgBC,EAAmCxS,EAAnCwS,aAAcC,EAAqBzS,EAArByS,KAAMC,EAAe1S,EAAf0S,WAEnE3Q,EAAUC,cAShB,OACE,qBAAKZ,UAAU,WAAU,SACvB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,qBAAKA,UAAU,YAAW,SACxB,kDAAWkR,GAAU,IAAElR,UAAU,0CAAyC,UACxE,gCACGoR,EAAalE,KAAI,SAACqE,GAAW,OAC5B,+CAAQA,EAAYC,uBAAqB,cACvC,uBAECD,EAAY/c,QAAQ0Y,KAAI,SAACuE,GACxB,IAAQC,EAA2BD,EAA3BC,eAAgBC,EAAWF,EAAXE,OAClBC,EAAMF,IAAiBE,IAC7B,GAAY,iBAARA,GAAkC,iBAARA,EAC5B,OAAO,8CAAQF,KAAgB,aAAGC,EAAO,YAE7C,IACA,0BACG,MAGT,kDAAWR,GAAc,cACtBF,GACC,6BACE,oBAAIY,QAAS,GAAI7R,UAAU,cAAa,SACtC,cAAC0P,GAAgB,CAACC,QAASsB,SAK/BA,GACAI,EAAKnE,KAAI,SAAC4E,EAAK/b,GACbub,EAAWQ,GACX,IAAMjP,EAAMiP,EAAIC,MAAM1B,IAAoBnU,OAzC5D,SAAiBpF,GACf,GAAKA,EAGL,OAAW,OAAJiM,QAAI,IAAJA,OAAI,EAAJA,EAAMxM,MAAK,SAACyb,GAAC,OAAKA,EAAEtb,KAAOI,CAAK,WAAKjE,CAC9C,CAoCqEof,CAAQH,EAAIC,MAAMrB,IAAgBxU,OAC/E3I,EAAG,kBAAcue,EAAIC,MAAM1B,IAAoBnU,OAC/CqI,EAAQuN,EAAII,SAEdC,EAAe,GACdC,GAAoBN,EAAIC,MAAMxB,IAAwBrU,OAE/CkW,GAAoBN,EAAIC,MAAMvB,IAA0BtU,OAExDkW,GAAoBN,EAAIC,MAAMtB,IAA0BvU,OAExDkW,GAAoBN,EAAIC,MAAMjB,IAA4B5U,SACpEiW,EAAeL,EAAIC,MAAMjB,IAA4B5U,OAFrDiW,EAAeL,EAAIC,MAAMtB,IAA0BvU,MAFnDiW,EAAeL,EAAIC,MAAMvB,IAA0BtU,MAFnDiW,EAAeL,EAAIC,MAAMxB,IAAwBrU,MASnD,IAAM0K,GAAqBwL,GAAoBN,EAAIC,MAAM,GAAG7V,OAE5D,OACE,+CAAQ4V,EAAIO,eAAa,IAAElS,QAAS,kBAAMQ,EAAQE,KAAKtN,EAAI,EAAC,UAC1D,oBAAIyM,UAAU,cAAa,SACzB,cAAC8P,GAAoB,CAACC,YAAaxL,EAAMwL,gBAI3C,8CAAQ+B,EAAIC,MAAM1B,IAAoBiC,gBAAc,aAAGR,EAAIC,MAAM1B,IAAoBsB,OAAO,WAG5F,8CAAQG,EAAIC,MAAMzB,IAAkBgC,gBAAc,aAChD,cAACtC,GAAmB,CAClBtY,MAAOoa,EAAIC,MAAMzB,IAAkBpU,MACnC0K,kBAAmBA,OAKvB,8CAAQkL,EAAIC,MAAMxB,IAAwB+B,gBAAc,aAAGH,KAG3D,8CAAQL,EAAIC,MAAMrB,IAAgB4B,gBAAc,aAC9C,cAACvD,GAAoB,CAAClM,IAAKA,EAAKmM,YAAa,SAI/C,8CAAQ8C,EAAIC,MAAMpB,IAAoB2B,gBAAc,aAAGR,EAAIC,MAAMpB,IAAoBgB,OAAO,WAG5F,8CAAQG,EAAIC,MAAMnB,IAAyB0B,gBAAc,aACtD9I,GAAY+I,eAAe,IAAI5U,KAAKmU,EAAIC,MAAMnB,IAAyB1U,OAAQsN,GAAY0G,iBAI9F,8CAAQ4B,EAAIC,MAAMlB,IAAiCyB,gBAAc,IAAEtS,UAAU,oBAAmB,SAC7F8R,EAAIC,MAAMlB,IAAiCc,OAAO,WAIrD,8CAAQG,EAAIC,MAAMjB,IAA4BwB,gBAAc,IAAEtS,UAAU,oBAAmB,SACxF8R,EAAIC,MAAMjB,IAA4Ba,OAAO,WAGhD,8CAAQG,EAAIC,MAAMhB,IAA4BuB,gBAAc,IAAEtS,UAAU,oBAAmB,SACxF8R,EAAIC,MAAMhB,IAA4B7U,MAAMgR,KAAI,SAACsF,EAAwBC,GAAa,OACrF,eAAC,IAAMC,SAAQ,WACZF,EACD,yBAFmBC,EAGJ,OAIrB,6BACE,cAAC5J,GAAmB,CAACtV,IAAKA,SAIlC,mBAQlB,CAEA,SAAS6e,GAAoBlW,GAC3B,OAAiB,OAAVA,QAA4BrJ,IAAVqJ,GAAiC,KAAVA,GAA0B,MAAVA,GAAiBA,EAAM/F,SAAS,YAClG,CCzIA,SAASwc,GAAc/T,GACrB,IAAQyO,EAAazO,EAAbyO,SAER,EAA0BrO,mBAAqB0C,GAAWhM,QAAO,mBAA1DgC,EAAK,KAAEkb,EAAQ,KACtB,EAAgC5T,mBAA0B,MAAK,mBAAxD6T,EAAQ,KAAEC,EAAW,KACtBC,EAAQC,iBAAO,MAEb3T,EAAMC,cAAND,EAERQ,qBAAU,WACHgT,GACHC,EAAY,IAAIG,KAASF,EAAMG,SAAW,GAAI,CAAC,GAEnD,GAAG,CAACL,IAEJ,IAIMnT,EAAc,SAACyT,GACfzb,IAAUyb,IACZP,EAASO,GACT9F,EAAS8F,IAGH,OAARN,QAAQ,IAARA,KAAUO,MACZ,EAEA,OACE,sBAAKpT,UAAU,gBAAe,UAC5B,wBACEA,UAAU,0CACV7I,KAAK,SACL,iBAAe,WACfkc,IAAKN,EACL,gBAAc,QACd5S,QArBkB,WACd,OAAR0S,QAAQ,IAARA,KAAUS,MACZ,EAmB+B,SAExBjU,EAAE,8BAAD,OAA+B3H,EAAMwP,eAEzC,oBAAIlH,UAAU,gBAAgB,kBAAgB,YAAW,SACtDxB,OAAOmP,OAAOjM,IAAYwL,KAAI,SAACxV,GAC9B,OACE,6BACE,wBACEsI,UAAU,gBACVG,QAAS,WACPT,EAAYhI,EACd,EAAE,SAED2H,EAAE,8BAAD,OAA+B3H,OAP5BA,EAWb,QAIR,CAYe,SAAS6b,GAAW3U,GACjC,IAAQZ,EAAiBY,EAAjBZ,aACR,EAA8BgB,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAA4BxU,mBAAuB,IAAG,mBAA/CqF,EAAM,KAAEoP,EAAS,KACxB,EAAwBzU,mBAA4B,MAAK,mBAAlD+D,EAAI,KAAE2Q,EAAO,KACd/S,EAAUC,cAEZhD,EAAM,IAAID,KACVgW,EAAW,EAAK/V,EAAIgW,aAAe,EACvChW,EAAIiW,WAAWjW,EAAIgW,aAAeD,GAElC,IAAIzH,EAAYtO,EACZwO,EAAU,IAAIzO,KAAKC,GACvBwO,EAAQ0B,QAAQ1B,EAAQ2B,UAAY,GACpC7B,EAAUgC,SAAShC,EAAUiC,WAAa,GAC1CjC,EAAU4B,QAAQ5B,EAAU6B,UAAY,GACxC,IAAI+F,EAAYtK,GAAY4E,aAAalC,EAAW1C,GAAY0G,cAC5D6D,EAAUvK,GAAY4E,aAAahC,EAAS5C,GAAY0G,cAE5D,EAA8ClR,mBAAsB,CAClEgV,aAAcF,EACdG,WAAYF,IACZ,mBAHKG,EAAe,KAAEC,EAAkB,KAK1C,EAAwCnV,mBAAqB0C,GAAWhM,QAAO,mBAAxE0e,EAAY,KAAEC,EAAe,KAE5BhV,EAAMC,cAAND,EAERQ,qBAAU,WACJ7B,IACFsW,EAAY,IAEZ7Q,GACG8Q,UACAxU,MAAK,SAACgD,GACL2Q,EAAQ3Q,EACV,IACClP,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,6BACvB,IAEN,GAAG,CAACrB,EAAcqB,IAElBuN,kBAAO,gCAAC,4FACFsH,EAAgB,CAAD,+BACXM,GAAcN,EAAgBF,aAAcE,EAAgBD,YAAY,KAAD,sCAE9E,CAACG,EAAcF,IAElB,IAKIO,EAA2B7H,mBAAQ,iBAAM,EAAE,GAAE,CAACvI,EAAQtB,IAGpD2R,EAAc,CAClB,CACEC,OAAQtV,EAAE,oCACVuV,SAAU,WAEZ,CACED,OAAQtV,EAAE,kCACVuV,SAAU,SAEZ,CACED,OAAQtV,EAAE,qCACVuV,SAAU,YAEZ,CACED,OAAQtV,EAAE,qCACVuV,SAAU,SAEZ,CACED,OAAQtV,EAAE,qCACVuV,SAAU,SAEZ,CACED,OAAQtV,EAAE,qCACVuV,SAAU,SAEZ,CACED,OAAQtV,EAAE,oCACVuV,SAAU,WAEZ,CACED,OAAQtV,EAAE,yCACVuV,SAAU,gBAEZ,CACED,OAAQtV,EAAE,mDACVuV,SAAU,wBAEZ,CACED,OAAQtV,EAAE,+BACVuV,SAAU,mBAEZ,CACED,OAAQtV,EAAE,2BACVuV,SAAU,oBAId,EAiBIC,mBACF,CAEEC,QAASlI,mBAAQ,kBAAM8H,CAAW,GAAE,CAAChR,GAAgBC,WAErD1P,KAAM2Y,mBAAQ,kBAgHpB,SAA+BvI,EAAsBtB,EAAyB0R,GAC5E,IAAMM,EAAwB,GAC1B1Q,GAAUtB,GACZsB,EAAOhG,SAAQ,SAACkG,GAAkB,IAAD,sCACzByQ,EAAezO,GAAa0O,gBAAgB1Q,GAAO2C,WACnDlB,EAAuB,OAALzB,QAAK,IAALA,GAAY,QAAP,EAALA,EAAOkC,aAAK,WAAP,EAAL,EAAcyO,SAAQ,SAAClO,GAAI,aAAqC,QAArC,EAAKA,EAAKL,YAAYX,uBAAe,QAAI,EAAE,IAC9F+O,EAAUlU,KAAK,CACb6D,QAASH,EAAM7N,GAAGwQ,WAClBxP,MAAO6M,EAAM7M,MAAMwP,WACnBiO,SAAS,GAAD,OAAmB,QAAnB,EAAK5Q,EAAM4Q,gBAAQ,OAAU,QAAV,EAAd,EAAgB7d,gBAAQ,WAAV,EAAd,EAA0B4P,WAAU,YAAkB,QAAlB,EAAI3C,EAAM4Q,gBAAQ,OAAW,QAAX,EAAd,EAAgB9d,iBAAS,WAAX,EAAd,EAA2B6P,YAChF7R,MAAqB,QAAhB,EAAEkP,EAAM4Q,gBAAQ,OAAO,QAAP,EAAd,EAAgB9f,aAAK,WAAP,EAAd,EAAuB6R,WAC9BpP,MAAqB,QAAhB,EAAEyM,EAAM4Q,gBAAQ,OAAO,QAAP,EAAd,EAAgBrd,aAAK,WAAP,EAAd,EAAuBoP,WAC9BpQ,MAAOyN,EAAMzN,MACb0P,QAASwO,EACTI,aAAc7Q,EAAM8Q,UAAUnO,WAC9B6I,YAAaxL,EAAMwL,YACnBuF,qBAA2B,OAAL/Q,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOkC,MAAM,UAAE,OAAa,QAAb,EAAf,EAAiBE,mBAAW,WAAvB,EAAL,EAA8B2O,qBACpDpQ,gBAAiBX,EAAMW,gBACvBc,gBAAiBA,IAGnB,IAAMuP,EAAM,CACVC,QAASjR,EAAMzN,MACf2e,QAASlR,EAAM7N,GAAGwQ,WAClBwO,gBAAiBnR,EAAMW,gBACvByQ,aAAcpR,EAAM8Q,UAAUnO,WAC9B0O,MAAOrR,EAAM7M,MAAMwP,WACnB2O,UAAyB,QAAhB,EAAEtR,EAAM4Q,gBAAQ,aAAd,EAAgB9d,UAC3Bye,SAAwB,QAAhB,EAAEvR,EAAM4Q,gBAAQ,aAAd,EAAgB7d,SAC1B3B,MAAqB,QAAhB,EAAE4O,EAAM4Q,gBAAQ,aAAd,EAAgB9f,MACvB0gB,MAAqB,QAAhB,EAAExR,EAAM4Q,gBAAQ,aAAd,EAAgBrd,MACvBke,QAAc,OAALzR,QAAK,IAALA,OAAK,EAALA,EAAOkC,QAASlC,EAAMkC,MAAMxQ,OAAS,GAAKsO,EAAMkC,MAAM,KAAW,OAALlC,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOkC,MAAM,UAAE,OAAa,QAAb,EAAf,EAAiBE,mBAAW,WAAvB,EAAL,EAA8BsP,cAAgB,GACnHX,qBACG/Q,EAAMkC,OAASlC,EAAMkC,MAAMxQ,OAAS,GAAKsO,EAAMkC,MAAM,KAAW,OAALlC,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOkC,MAAM,UAAE,OAAa,QAAb,EAAf,EAAiBE,mBAAW,WAAvB,EAAL,EAA8B2O,uBAAyB,GACrHY,OAAQlB,GAEVP,EAAa5T,KAAK0U,EACpB,IAEF,OAAOR,CACT,CAxJ0BoB,CAAsB9R,EAAQtB,EAAM0R,EAAa,GAAE,CAACpQ,EAAQtB,IAChFqT,aAAc,CAAErO,UAAW,IAE7BsO,kBACAC,iBAzBAC,EAAa,EAAbA,cACAC,EAAiB,EAAjBA,kBACApF,EAAY,EAAZA,aACAqF,EAAI,EAAJA,KACAnF,EAAU,EAAVA,WACAD,EAAI,EAAJA,KACArJ,EAAe,EAAfA,gBACAC,EAAW,EAAXA,YACAyO,EAAW,EAAXA,YACAvO,EAAQ,EAARA,SACAD,EAAY,EAAZA,aACAoM,EAAW,EAAXA,YACA5c,GAAK,EAALA,MACA+W,GAAqB,EAArBA,sBACAE,GAAe,EAAfA,gBACS5G,GAAS,EAAlBrQ,MAASqQ,UAiBX,OAJAlI,qBAAU,WACR8O,GAAgBjX,GAAMgX,aACxB,GAAG,CAACrK,EAAQtB,IAGV,sBAAK/C,UAAU,6BAA4B,UACzC,6BAAKX,EAAE,+BAEP,sBAAKW,UAAU,UAAS,UACtB,cAAC2I,GAAkB,CAACD,MAAOrJ,EAAE,gCAAiCc,QAAS,kBAAMQ,EAAQE,KAAK,gBAAgB,IAE1G,cAAC8H,GAAkB,CACjB3I,UAAU,+BACV0I,MAAOrJ,EAAE,iCACTc,QAAS,kBAAMQ,EAAQE,KAAK,iBAAiB,IAG/C,cAAC+H,GAAmB,CAClB5I,UAAU,OACVG,QAAO,gCAAE,wGAAkBqU,GAA6B,OAAfN,QAAe,IAAfA,OAAe,EAAfA,EAAiBF,aAA6B,OAAfE,QAAe,IAAfA,OAAe,EAAfA,EAAiBD,YAAW,qFAGtG,cAACtB,GAAa,CAACtF,SA1GC,SAAC8F,GACrBkB,EAAgBlB,EAClB,IA0GM,qBAAKnT,UAAU,OAAM,SACnB,cAAC6L,GAAkB,CACjBnV,GAAI,oBACJoW,QAASvD,GAAiB0E,MAC1BT,aAuEV,SAAuBrJ,EAAeC,GACpC+P,EAAmB,CAAEH,aAAc7P,EAAO8P,WAAY7P,GACxD,EAxEUD,MAAsB,OAAf+P,QAAe,IAAfA,OAAe,EAAfA,EAAiBF,aACxB5P,IAAoB,OAAf8P,QAAe,IAAfA,OAAe,EAAfA,EAAiBD,eAI1B,sBAAKjU,UAAU,aAAY,UACzB,eAAC,WAAO,CAACA,UAAU,0BAA0B/L,KAAMwgB,EAActL,mBAAkB,IAAOC,SAAS,mBAAkB,UACnH,cAAC,IAAe,CAAChJ,KAAK,gBAAgC,IAAEf,EAAE,oBAG5D,cAACmP,GAAY,CAACC,sBAAuBA,GAAuBC,aAAchX,GAAMgX,aAAcC,gBAAiBA,WAInH,gCACE,cAACqC,GAAoB,CACnBjO,KAAMA,EACNkO,UAAWtB,EACXuB,WAAYqF,IACZpF,eAAgBqF,IAChBpF,aAAcA,EACdC,KAAMA,EACNC,WAAYA,IAEd,cAAC1J,GAAe,CACdC,kBAAmB,yBACnBhM,MAAO4a,EAAKxgB,OACZ6R,WAAY4O,EAAYzgB,OACxB8R,UAAWA,GACXC,gBAAiBA,EACjBC,YAAaA,EACbC,aAAcA,EACdC,SAAUA,UAIhB,SAEaqM,GAAc,EAAD,iDA8B3B,OA9B2B,mCAA5B,WAA6BrQ,EAA2BC,GAAuB,iFAC9C,KAAzBuS,EAAoB,OAAZ3Y,QAAY,IAAZA,OAAY,EAAZA,EAActH,IAClB,CAAD,gBACU,GAAjB8c,GAAW,IACPrP,IAASC,EAAG,gCACR+B,GACHyQ,UAAUD,EAAOvC,EAAcjQ,EAAOC,GACtCrE,MAAK,SAAC9L,GACLwf,EAAUxf,EACZ,IACCJ,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,6BACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,IAAG,KAAD,0CAEErN,GACHyQ,UAAUD,EAAOvC,GACjBrU,MAAK,SAAC9L,GACLwf,EAAUxf,EACZ,IACCJ,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,6BACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,IAAG,KAAD,wCAGT,sBAKH,C,cCtTe,SAASsD,GAAgBlY,GACtC,IAAQ5J,EAAiE4J,EAAjE5J,eAAgB+hB,EAAiDnY,EAAjDmY,cAAeC,EAAkCpY,EAAlCoY,gBAAiBC,EAAiBrY,EAAjBqY,aACxD,EAA8BjY,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAA8BxU,mBAAwB,IAAG,mBAAlD/J,EAAO,KAAEiiB,EAAU,KAC1B,EAA8ClY,mBAAwB,IAAG,mBAAlEmY,EAAe,KAAEC,EAAkB,KAElC/X,EAAMC,cAAND,EAERQ,qBAAU,WACJ7K,GACFqiB,GAEJ,GAAG,IAGH,IAAM3C,EAAc,CAClB,CACEC,OAAQtV,EAAE,yCACVuV,SAAU,aAEZ,CACED,OAAQtV,EAAE,wCACVuV,SAAU,YAEZ,CACED,OAAQtV,EAAE,qCACVuV,SAAU,SAEZ,CACED,OAAQ,yBACRC,SAAU,SAId,EAiBIC,mBACF,CAEEC,QAASlI,mBAAQ,kBAAM8H,CAAW,GAAE,CAAChR,GAAgBC,WAErD1P,KAAM2Y,mBAAQ,kBAmIpB,SAAkC3X,EAAmBD,GACnD,IAAM+f,EAAwB,GAC1B9f,GACFA,EAAQoJ,SAAQ,SAACnJ,GACf,IAAIoiB,EAAwB,GAE5BpiB,EAAOoB,wBAAwB+H,SAAQ,SAAC7H,GAGuC,IAAD,YAFxEA,IACEA,EAAIC,SACD6gB,EAAOnhB,SAASK,EAAIC,OAAOC,KAAOF,EAAIC,OAAOC,IAAM1B,IACtD+f,EAAUlU,KAAK,CACbxJ,UAAuC,QAA9B,EAAkB,QAAlB,EAAEnC,EAAOmC,iBAAS,aAAhB,EAAkB6P,kBAAU,QAAI,GAC3C5P,SAAqC,QAA7B,EAAiB,QAAjB,EAAEpC,EAAOoC,gBAAQ,aAAf,EAAiB4P,kBAAU,QAAI,GACzC7R,MAA8B,QAAzB,EAAEH,EAAOG,MAAM6R,kBAAU,QAAI,GAClCzQ,OAAQ,eACRG,KAA0B,QAAtB,EAAEJ,EAAIN,MAAMgR,kBAAU,QAAI,GAC9BlR,eAAgBd,EAAOc,eACvBM,wBAAyBpB,EAAOoB,0BAElCghB,EAAOzW,KAAKrK,EAAIC,OAAOC,MAI/B,GACF,IAEF,OAAOqe,CACT,CA9J0BwC,CAAyBJ,EAAiBniB,EAAe,GAAE,CAACmiB,IAChFf,aAAc,CAAErO,UAAW,IAE7BsO,kBACAC,iBAzBAC,EAAa,EAAbA,cACAC,EAAiB,EAAjBA,kBACApF,EAAY,EAAZA,aACAqF,EAAI,EAAJA,KACAnF,EAAU,EAAVA,WACAD,EAAI,EAAJA,KACArJ,EAAe,EAAfA,gBACAC,EAAW,EAAXA,YACAyO,EAAW,EAAXA,YACAvO,EAAQ,EAARA,SACAD,EAAY,EAAZA,aAEAxQ,GADW,EAAX4c,YACK,EAAL5c,OACA+W,EAAqB,EAArBA,sBACAE,EAAe,EAAfA,gBACS5G,EAAS,EAAlBrQ,MAASqQ,UAaLyP,EAAgB,SAACC,GAChBxiB,EAILmiB,EAAmBK,GAHjBP,EAAW,GAIf,EAMA,OAJArX,qBAAU,WACR8O,EAAgBjX,EAAMgX,aACxB,GAAG,CAACyI,IAGF,sBAAKnX,UAAU,gCAA+B,UAC5C,6BAAI,YAEJ,sBAAKA,UAAU,UAAS,UACtB,cAAC2I,GAAkB,CAACD,MAAO,gBAAiBvI,QAAS,kBAAMuX,EAAW,IAAIxgB,GAAU,EAAK,IAEzF,cAAC0R,GAAmB,CAAC5I,UAAU,OAAOG,QAAS,kBAAMkX,GAAS,IAE9D,cAAC7I,GAAY,CAACC,sBAAuBA,EAAuBC,aAAchX,EAAMgX,aAAcC,gBAAiBA,OAGjH,gCACE,qBAAK3O,UAAU,WAAU,SACvB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,qBAAKA,UAAU,YAAW,SACxB,kDAAWuW,KAAe,IAAEvW,UAAU,2CAA0C,UAC9E,gCACGoR,EAAalE,KAAI,SAACqE,GAAW,OAC5B,+CAAQA,EAAYC,uBAAqB,cACtCD,EAAY/c,QAAQ0Y,KAAI,SAACuE,GACxB,OAAO,8CAAQA,EAAOC,kBAAgB,aAAGD,EAAOE,OAAO,YACzD,IAGA,0BACG,MAGT,kDAAW6E,KAAmB,cAC3B7G,GACC,6BACE,oBAAIkC,QAAS,EAAG7R,UAAU,cAAa,SACrC,cAAC0P,GAAgB,CAACC,QAASA,SAK/BA,GACA0B,EAAKnE,KAAI,SAAC4E,EAAK/b,GACbub,EAAWQ,GAEX,IAAIqD,EAAWrD,EAAII,SAEnB,OACE,+CAAQJ,EAAIO,eAAa,IAAElS,QAAS,kBAAMuX,EAAWvC,GAAU,EAAM,EAAC,UACpE,8CAAQrD,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAAS9d,aAC/C,8CAAQya,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAAS7d,YAC/C,8CAAQwa,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAAS9f,SAC/C,8CAAQyc,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAASve,QAC/C,6BACE,wBACEoJ,UAAU,0BACVG,QAAS,WACPuX,EAAWvC,GAAU,EACvB,EAAE,SAEF,cAAC,IAAe,CAAC/U,KAAM,CAAC,MAAO,gBAKzC,oBAQd,cAACwH,GAAe,CACdC,kBAAmB,4BACnBhM,MAAO4a,EAAKxgB,OACZ6R,WAAY4O,EAAYzgB,OACxB8R,UAAWA,EACXC,gBAAiBA,EACjBC,YAAaA,EACbC,aAAcA,EACdC,SAAUA,UAMlB,SAASuP,EAAWxiB,EAAgByiB,GAClCX,EAAgB9hB,GAChB+hB,EAAaU,GACbZ,GAAc,EAChB,CAEA,SAASM,IACP,IAAMV,EAAQ3hB,EACV2hB,IACFnD,GAAW,GAEXvc,EACG2gB,WAAWjB,GACX5W,MAAK,SAAC9L,GACLijB,EAAWjjB,GACXujB,EAAcvjB,EAChB,IACCJ,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,6BACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,IAEN,CACF,C,cClMO,SAASqE,GAAejZ,GAC7B,IAAQS,EAAMC,cAAND,EAER,OACE,qCACE,uBAAOW,UAAU,aAAY,SAAEpB,EAAMkZ,YACrC,uBACE9X,UAAU,eACV7I,KAAMyH,EAAMzH,KACZ+E,MAAO0C,EAAM1C,MACb4S,YAUN,SAAwB3X,GACtB,OAAQA,GACN,IAAK,MACH,MAAO,eACT,IAAK,QACH,OAAOkI,EAAE,qCACX,IAAK,eAEL,IAAK,YACH,MAAO,SACT,QACE,MAAO,GAEb,CAvBmB0Y,CAAenZ,EAAMzH,MAClCkW,SAAU,SAAC2K,GAAE,OAyCnB,SAAkB9b,GAAgB,IAAD,EAEA,EAExB,EAHP0C,EAAMgQ,SAAS1S,GACC,QAAhB,EAAI0C,EAAMqZ,cAAM,OAAZ,EAAchc,KAAKC,GACE,QAAvB,EAAA0C,EAAMsZ,yBAAiB,OAAvB,OAAAtZ,OAA0B/L,GAEH,QAAvB,EAAA+L,EAAMsZ,yBAAiB,OAAvB,OAAAtZ,EAtBJ,SAAqBzH,GACnB,OAAQA,GACN,IAAK,MACH,OAAOkI,EAAE,+BACX,IAAK,QACH,OAAOA,EAAE,+BACX,IAAK,eACH,OAAOA,EAAE,sCACX,IAAK,YACH,OAAOA,EAAE,mCACX,IAAK,YACH,OAAOA,EAAE,mCACX,QACE,OAEN,CAO8B8Y,CAAYvZ,EAAMzH,MAEhD,CAhDwBihB,CAASJ,EAAGvL,OAAOvQ,MAAM,EAC3Cmc,SAAUzZ,EAAMyZ,SAChB5P,SAAU7J,EAAM6J,SAChB6P,UAAW1Z,EAAM2Z,YAElB3Z,EAAM4Z,UAAY,uBAAOxY,UAAU,YAAW,SAAEpB,EAAM4Z,aA4C7D,CC1EA,IAAMC,GAAc,+BACdC,GAAc,WAab,SAASC,GAAmB/Z,GACjC,IAAQS,EAAMC,cAAND,EACFvL,EAAQuL,EAAE,+BACVyY,EAAYlZ,EAAMiG,OAASxF,EAAE,gBAE/BuZ,EAAUha,EAAM6J,WAAgC,KAAf,OAAL7J,QAAK,IAALA,OAAK,EAALA,EAAO6J,UAEvC,OACE,mCACE,sBAAKzI,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAE8X,IAC/B,uBACE9X,UAAU,eACV7I,KAAK,MACL+E,MAAO0C,EAAM1C,MACb4S,YAAY,eACZzB,SAAU,SAAC2K,GAAE,OASH9b,EATiB8b,EAAGvL,OAAOvQ,MAU3C0C,EAAMgQ,SAAS1S,QASjB,SAAiBA,GACf,IAAI2c,EAAiBJ,GAAYxc,KAAKC,IAAUwc,GAAYzc,KAAKC,GAEjE,SAAI0C,EAAMyZ,WAAYQ,MAEjBja,EAAMyZ,WAAaQ,GAA0B,IAAjB3c,EAAMjG,OAGzC,CAfM6iB,CAAQ5c,GACV0C,EAAM4Z,UAAY5Z,EAAMsZ,uBAAkBrlB,IAEzC+L,EAAM4Z,UAAY5Z,EAAMsZ,kBAAkBpkB,IAN/C,IAAkBoI,CATiC,EAC3CuM,SAAUmQ,EACVN,UAAW1Z,EAAM2Z,YAElB3Z,EAAM4Z,UAAY,uBAAOxY,UAAU,YAAW,SAAEpB,EAAM4Z,eAwB/D,C,OCtCe,SAASO,GAAmBna,GACzC,IAAQS,EAAMC,cAAND,EAEAnK,EAAsC0J,EAAtC1J,OAAQF,EAA8B4J,EAA9B5J,eAAgBgkB,EAAcpa,EAAdoa,UAChC,EAAwCha,qBAAwB,mBAAzDhB,EAAY,KAAEib,EAAe,KACpC,EAA8Bja,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KACpBkB,EAAc,CAClB,CACEC,OAAQ,SACRC,SAAU,SAEZ,CACED,OAAQ,2BACRC,SAAU,eAId,EAiBIC,mBACF,CACEC,QAASlI,mBAAQ,kBAAM8H,CAAW,GAAE,CAAChR,GAAgBC,WACrD1P,KAAM2Y,mBAAQ,kBAgKpB,SAA4B5O,EAAwC9I,GAClE,IAAM6f,EAAwB,GAuB9B,OArBY,OAAZ/W,QAAY,IAAZA,KAAchI,eAAeqI,SAAQ,SAACwE,GACpC,IAAItN,EAAa,OAEP,OAANL,QAAM,IAANA,KAAQc,gBACVd,EAAOc,eAAeqI,SAAQ,SAAC6a,GAAa,IAAD,GACvB,QAAd,EAAAA,EAAQziB,cAAM,aAAd,EAAgBC,KAAMmM,EAAI/L,QAC5BvB,EAAa2jB,EAAQhjB,MAAM,GAE/B,IAGE2M,GACgB,aAAdA,EAAInL,OACNqd,EAAUlU,KAAK,CACb/J,MAAO+L,EAAI/L,MACXvB,WAAYA,GAIpB,IAEOwf,CACT,CAzL0BoE,CAAmBnb,EAAc9I,EAAO,GAAE,CAAC8I,EAAc9I,EAAQya,IACrFyG,aAAc,CAAErO,UAAW,IAE7BsO,kBACAC,iBAvBAC,EAAa,EAAbA,cACAC,EAAiB,EAAjBA,kBACApF,EAAY,EAAZA,aAEAE,GADI,EAAJmF,KACU,EAAVnF,YACAD,EAAI,EAAJA,KAMAiD,GALe,EAAftM,gBACW,EAAXC,YACW,EAAXyO,YACQ,EAARvO,SACY,EAAZD,aACW,EAAXoM,aACK,EAAL5c,MACqB,EAArB+W,sBACe,EAAfE,gBACkB,EAAlBjX,MAASqQ,UAsCV,SAEcqR,EAAwB,EAAD,iDA0CrC,OA1CqC,kCAAtC,WAAuC7jB,EAAoB8jB,EAA2BviB,GAAa,oFAEvF,OAAN5B,QAAM,IAANA,MAAQG,MAAK,iBAIE,GAHjBme,GAAW,GAEXje,EAA4B,SAAfA,EAAwB,GAAKA,EACtC+jB,EAAMpkB,EAEgB,SAAtBmkB,EAA4B,gCACxBpiB,EACHsiB,cAAcrkB,EAAOG,MAAOyB,EAAOvB,EAAY,OAC/CwK,MAAK,SAACtK,GACL,IAAIoN,EAAM,IAAIlB,GACdkB,EAAInM,GAAKI,EAETwiB,EAAItjB,eAAe6K,KAAK,CACtBpK,OAAQoM,EACR3M,MAAO,CAACX,KAGVyjB,EAAUM,EACZ,IACCzlB,OAAM,SAAC2lB,GACNnR,GAAavU,MAAM,6BACrB,IAAG,KAAD,0CAEEmD,EACHwiB,iBAAiBvkB,EAAOG,MAAOyB,EAAOvB,EAAY,MAAO,UACzDwK,MAAK,SAACtK,GACL6jB,EAAItjB,eAAeqI,SAAQ,SAAC6a,GAAa,IAAD,GACpB,QAAd,EAAAA,EAAQziB,cAAM,aAAd,EAAgBC,MAAOI,IACzBoiB,EAAQhjB,MAAuB,KAAfX,EAAoB,CAAC,QAAU,CAACA,GAEpD,IACAyjB,EAAUM,EACZ,IACCzlB,OAAM,SAAC2lB,GACNnR,GAAavU,MAAM,6BACrB,IAAG,KAAD,GAGR0f,GAAW,GAAO,6CACnB,sBAED,OAzEA3T,qBAAU,WACJ7K,IACFsf,EAAY,IAKhB,WACE,IAAMqC,EAAQ3hB,EACV2hB,IACFnD,GAAW,GAEXvc,EAAc2gB,WAAWjB,GACzBjY,EACGgb,oBAAoB1kB,GACpB+K,MAAK,SAACvJ,GACDA,GACFyiB,EAAgBziB,EAEpB,IACC3C,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,6BACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,IAEN,CAxBI6D,GAEJ,GAAG,CAACriB,IAqEF,qBAAKgL,UAAU,QAAO,SACpB,kDAAWuW,KAAe,IAAEvW,UAAU,2CAA0C,UAC9E,gCACGoR,EAAalE,KAAI,SAACqE,GAAW,OAC5B,+CAAQA,EAAYC,uBAAqB,cACtCD,EAAY/c,QAAQ0Y,KAAI,SAACuE,GACxB,OAAO,8CAAQA,EAAOC,kBAAgB,aAAGD,EAAOE,OAAO,YACzD,IAGA,0BACG,MAGT,kDAAW6E,KAAmB,cAC3B7G,GACC,6BACE,oBAAIkC,QAAS,EAAG7R,UAAU,cAAa,SACrC,cAAC0P,GAAgB,CAACC,QAASA,SAK/BA,GACA0B,EAAKnE,KAAI,SAAC4E,EAAK/b,GACbub,EAAWQ,GAEX,IAAIjP,EAAMiP,EAAII,SAEd,OACE,+CAAQJ,EAAIO,eAAa,cACvB,8CAAQP,EAAIC,MAAM,GAAGO,gBAAc,IAAE5b,GAAU,OAANxB,QAAM,IAANA,OAAM,EAANA,EAAQyC,QAAQ,SACtDkL,EAAI/L,SAEP,8CAAQgb,EAAIC,MAAM,GAAGO,gBAAc,aACjC,sBAAKtS,UAAU,yBAAwB,UACrC,uBACE7I,KAAK,QACL+E,MAAM,QACNoC,KAAI,eAAUuE,EAAI/L,OAClB6iB,QAA4B,UAAnB9W,EAAItN,YAA6C,UAAnBsN,EAAItN,WAC3C8X,SAAU,kBAAM+L,EAAwB,QAASvW,EAAItN,WAAYsN,EAAI/L,MAAM,IAC1E,IAAI,QAEP,uBACEK,KAAK,QACL+E,MAAM,cACNoC,KAAI,eAAUuE,EAAI/L,OAClB6iB,QAA4B,gBAAnB9W,EAAItN,WACb8X,SAAU,kBAAM+L,EAAwB,cAAevW,EAAItN,WAAYsN,EAAI/L,MAAM,IAChF,IAAI,cAEP,uBACEK,KAAK,QACL+E,MAAM,YACNoC,KAAI,eAAUuE,EAAI/L,OAClB6iB,QAA4B,cAAnB9W,EAAItN,WACb8X,SAAU,kBAAM+L,EAAwB,YAAavW,EAAItN,WAAYsN,EAAI/L,MAAM,IAC9E,IAAI,YAEP,uBACEK,KAAK,QACL+E,MAAM,OACNoC,KAAI,eAAUuE,EAAI/L,OAClB6iB,QAA4B,SAAnB9W,EAAItN,WACb8X,SAAU,kBAAM+L,EAAwB,OAAQvW,EAAItN,WAAYsN,EAAI/L,MAAM,IACzE,IAAI,gBAMjB,aAKZ,CCjMe,SAAS8iB,GAAWhb,GACjC,IAAQib,EAA4Ejb,EAA5Eib,aAAcC,EAA8Dlb,EAA9Dkb,iBAAkBC,EAA4Cnb,EAA5Cmb,YAAapC,EAA+B/Y,EAA/B+Y,UAAWX,EAAoBpY,EAApBoY,gBAEhE,EAA0BhY,mBAAyC,OAAZ6a,QAAY,IAAZA,OAAY,EAAZA,EAAcxkB,OAAM,mBAApEA,EAAK,KAAE2kB,EAAQ,KACtB,EAAkChb,mBAAyC,OAAZ6a,QAAY,IAAZA,OAAY,EAAZA,EAAcxiB,WAAU,mBAAhF8N,EAAS,KAAE8U,EAAY,KAC9B,EAAgCjb,mBAAyC,OAAZ6a,QAAY,IAAZA,OAAY,EAAZA,EAAcviB,UAAS,mBAA7E8N,EAAQ,KAAE8U,EAAW,KAE5B,EAAoClb,mBACtB,OAAZ6a,QAAY,IAAZA,KAAcvjB,wBAAwB,GAAKujB,EAAavjB,wBAAwB,GAAGJ,MAAM,GAAK,IAC/F,mBAFMX,EAAU,KAAE4kB,EAAa,KAGhC,EAAwCnb,mBAAiB+a,GAAY,mBAA9D/b,EAAY,KAAEib,EAAe,KACpC,EAAoCja,mBAAiB,gBAAe,mBAA7DxJ,EAAU,KACjB,GADgC,KACMwJ,mBAAiB,KAAG,mBAAnD8F,EAAW,KAAEsV,EAAc,KAElC,EAAkCpb,mBAAiB,UAAS,mBAArDqb,EAAS,KAAEC,EAAY,KAC9B,EAAgCtb,oBAAkB,GAAM,mBAAjDiS,EAAS,KAAEuC,EAAU,KAC5B,EAAgDxU,oBAAkB,GAAK,mBAAhEub,EAAgB,KAAEC,EAAmB,KAEtCC,GAAe,SAACC,EAAchkB,GAClCgkB,EAAQhkB,EACV,EAEA,OAAIua,EACK,cAACvB,GAAgB,CAACC,QAASsB,IAIlC,sBAAKjR,UAAU,SAAQ,UACrB,wBACEA,UAAU,0BACVG,QAAS,WACP2Z,GAAiB,EACnB,EAAE,SAEF,cAAC,IAAe,CAAC1Z,KAAM,CAAC,MAAO,kBAEjC,uBACCma,EACC,wBACEva,UAAU,+BACVG,QAAS,WACPqa,GAAoB,EACtB,EAAE,SACH,2BAID,gCACE,4BAAG,wDACH,6BAAI,sGACJ,+BAAI,6BACyB,IAAI,UAAQ,IAAI,gBAAc,IAAI,cAAY,IAAI,QAAM,OAErF,6BAAI,4GACJ,6BAAI,6FACJ,6BAAI,yGACJ,6BAAI,6EACJ,+BAAI,8HAC0H,UAKlI,sBAAKxa,UAAU,eAAc,UAC1B2X,GACC,sBAAK3X,UAAU,WAAU,UACvB,cAAC6X,GAAc,CACbC,UAAW,YACX5b,MAAgB,OAATiJ,QAAS,IAATA,IAAa,GACpByJ,SAAU,SAAC1S,GAAa,OAAK+d,EAAa/d,EAAM,EAChDuM,UAAU,IAEZ,cAACoP,GAAc,CACbC,UAAW,WACX5b,MAAe,OAARkJ,QAAQ,IAARA,IAAY,GACnBwJ,SAAU,SAAC1S,GAAa,OAAKge,EAAYhe,EAAM,EAC/CuM,UAAU,OAKhB,qBAAKzI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWH,EAAY,mBAAqB,QAC5Czb,MAAY,OAAL7G,QAAK,IAALA,IAAS,GAChBuZ,SAAU,SAAC1S,GAAa,OAAK8d,EAAS9d,EAAM,EAC5CuM,UAAWkP,MAGf,qBAAK3X,UAAU,WAAU,SACvB,qBAAKiN,MAAO,CAAE0N,QAAS,QAAS,SAC9B,qBAAK1N,MAAO,CAAEzH,MAAO,OAAQ,SAC3B,cAACqS,GAAc,CACbC,UAAW,iBACX5b,MAAmB,OAAZ8B,QAAY,IAAZA,OAAY,EAAZA,EAAckJ,WACrB0H,SAAU,SAAC1S,GAAa,OAAK+c,EAAgB/c,EAAM,EACnDuM,UAAU,UAKlB,sBAAKzI,UAAU,WAAU,UACvB,cAAC6X,GAAc,CACbC,UAAW,yBACX5b,MAAiB,OAAV3G,QAAU,IAAVA,OAAU,EAAVA,EAAY2R,WACnB0H,SAAU,SAAC1S,GAAa,OAAKie,EAAcje,EAAM,EACjDuM,UAAU,IAEZ,eAACwK,GAAA,EAAQ,WACP,cAACA,GAAA,EAAS2H,OAAM,CAACC,QAAQ,UAAUnkB,GAAG,iBAAgB,SAAC,uBAIvD,eAACuc,GAAA,EAAS6H,KAAI,WACZ,cAAC7H,GAAA,EAAS8H,KAAI,CAAC5a,QAAS,kBAAMsa,GAAaN,EAAe,QAAQ,EAAC,SAAC,UACpE,cAAClH,GAAA,EAAS8H,KAAI,CAAC5a,QAAS,kBAAMsa,GAAaN,EAAe,gBAAgB,EAAC,SAAC,kBAC5E,cAAClH,GAAA,EAAS8H,KAAI,CAAC5a,QAAS,kBAAMsa,GAAaN,EAAe,cAAc,EAAC,SAAC,gBAC1E,cAAClH,GAAA,EAAS8H,KAAI,CAAC5a,QAAS,kBAAMsa,GAAaN,EAAe,GAAG,EAAC,SAAC,qBAIpExC,EACC,qBAAK3X,UAAU,OAAM,SACnB,cAAC2Y,GAAkB,CACjBzc,MAAO4I,EACP8J,SAAUwL,EACVlC,kBAAmB,WAAO,EAC1BM,SAAU,GACV3T,MAAO,mBAIX,6BAEA8S,EAmBA,6BAlBA,sBAAK3X,UAAU,WAAU,UACvB,qBAAKiN,MAAO,CAAE0N,QAAS,QAAS,SAC9B,qBAAK1N,MAAO,CAAEzH,MAAO,OAAQ,SAC3B,cAACqS,GAAc,CAACC,UAAW,SAAU5b,MAAOme,EAAWzL,SAAU,SAAC1S,GAAa,OAAKoe,EAAape,EAAM,EAAEuM,UAAU,QAGvH,eAACwK,GAAA,EAAQ,WACP,cAACA,GAAA,EAAS2H,OAAM,CAACC,QAAQ,UAAUnkB,GAAG,iBAAgB,SAAC,mBAIvD,eAACuc,GAAA,EAAS6H,KAAI,WACZ,cAAC7H,GAAA,EAAS8H,KAAI,CAAC5a,QAAS,kBAAMsa,GAAaH,EAAc,SAAS,EAAC,SAAC,WACpE,cAACrH,GAAA,EAAS8H,KAAI,CAAC5a,QAAS,kBAAMsa,GAAaH,EAAc,WAAW,EAAC,SAAC,yBAShF,uBACA,qBAAKrN,MAAO,CAAE+N,aAAc,SAAWhb,UAAU,QAAO,SACtD,wBACEA,UAAU,kBACVG,QAAS,WACPqT,GAAW,GAYnB,WACoC,yBAZ5B4F,EACF,EAAE,SAEDzB,EAAY,gBAAkB,oBAInC,6BAAI,qCAEFA,GAAa,cAACoB,GAAkB,CAAC7jB,OAAQ2kB,EAAc7kB,eAAgBgJ,EAAakJ,WAAY8R,UAAWhC,OAG3E,cA2ErC,OA3EqC,mCAAtC,oGAOqD,GAN/CpiB,EAAaqmB,SAASC,eAAe,gBAIrCC,OAAwCtoB,GAAhBgnB,EAA4B,IAAI3iB,EAAW2iB,GAEzDxkB,MAAa,OAALA,QAAK,IAALA,IAAS8lB,EAAc9lB,OAEzCsiB,EAAU,CAAD,gCACajZ,EAAoBgb,oBAA+B,OAAXK,QAAW,IAAXA,OAAW,EAAXA,EAAa7S,YAAY,KAAD,EAApFkU,EAAW,OACfD,EAAc7kB,wBAA0B,CAAC8kB,GACzCD,EAAczkB,GAAK,GACnBykB,EAAcrjB,MAAmB,OAAXgN,QAAW,IAAXA,IAAe,aACrCqW,EAAc9jB,UAAqB,OAAT8N,QAAS,IAATA,IAAa,GACvCgW,EAAc7jB,SAAmB,OAAR8N,QAAQ,IAARA,IAAY,GACrC+V,EAAcvjB,WAAa,GAC3BujB,EAActjB,KAAO,GACrBsjB,EAAcljB,QAAS,EAAK,QAmB9B,GAhBkB,gBAAdzC,IACmC,QAArC,EAAA2lB,EAAc7kB,+BAAuB,OAArC,EAAuC+H,SAAQ,SAAC7H,GAAS,IAAD,EACtD,IAAc,QAAV,EAAAA,EAAIC,cAAM,aAAV,EAAYC,KAAMqjB,EAAa,CAAC,IAAD,EAC7BsB,EAA8B,QAAZ,EAAG7kB,EAAIN,aAAK,QAAI,IAErCX,EAAa,KAAKmD,MAAM,KAAK2F,SAAQ,SAACzH,GACrCykB,EAAIxa,KAAS,OAAJjK,QAAI,IAAJA,OAAI,EAAJA,EAAMsQ,WACjB,IAEA1Q,EAAIN,MAAQmlB,CACd,CACF,KAGFF,EAAchkB,KAAO,KAGjBwgB,EAAU,CAAD,oBACPtiB,EAAM,CAAD,iCACD4B,EACHqkB,kBAAkBH,GAClBpb,MAAK,SAACtK,GAAS,IACf5B,OAAM,SAAC2lB,GACNnR,GAAavU,MAAM,wBACrB,IAAG,KAAD,oBACEmD,EACHsiB,cAAclkB,EAAO2I,EAAczI,EAAYC,GAC/CuK,MAAK,SAACtK,GACDb,GACF4e,GAAW,GAEbsG,GAAiB,EACnB,IACCjmB,OAAM,SAAC2lB,GACNnR,GAAavU,MAAM,6BACrB,IAAG,KAAD,2BAEJuU,GAAavU,MAAM,iBAAiB,oCAGlCuB,EAAM,CAAD,iCACD4B,EACHwiB,iBAAiBpkB,EAAO2I,EAAczI,EAAYC,EAAY6kB,GAC9Dta,MAAK,SAACtK,GACL+d,GAAW,GACXsG,GAAiB,EACnB,IACCjmB,OAAM,SAAC2lB,GACNnR,GAAavU,MAAM,6BACrB,IAAG,KAAD,2BAEJuU,GAAavU,MAAM,iBAAiB,6CAGzC,sBACH,C,cCpQe,SAASynB,GAAmB3c,GACzC,MAA0CI,mBAAiB,IAAG,mBAAvDwc,EAAa,KAAEC,EAAgB,KAYtC,OACE,gCACE,cAAC,2BAAuB,CAAOhV,MAAO7H,EAAM6H,MAAOiV,SAZhC,SAAC1U,GACtByU,EAAiBzU,EAAK2U,MACxB,IAWI,qBACE1O,MAAO,CACLzH,MAAO,OACPmV,QAAS,OACTiB,UAAW,MACXC,eAAgB,SAChB,SAEF,wBACE7b,UAAU,kBACViN,MAAO,CAAEzH,MAAO,SAChBrF,QAAS,WAnBXvB,EAAMkd,QACRld,EAAMkd,OAAON,EAoBT,EAAE,SACH,eAMT,CC/Be,SAASO,GAAUnd,GAChC,IAAQ1J,EAAW0J,EAAX1J,OAGR,GADcoK,cAAND,EACkCL,oBAAkB,IAAM,mBAA3Dgd,EAAa,KAAElC,EAAgB,KACtC,EAAwC9a,qBAAkB,mBAAnDid,EAAY,KAAEjF,EAAe,KACpC,EAAkChY,mBAAsB,IAAG,mBAApDkd,EAAS,KAAEC,EAAY,KAC9B,EAAsCnd,mBAAiB,IAAG,mBAAnD+a,EAAW,KAAEqC,EAAc,KAClC,EAAkCpd,oBAAkB,GAAM,mBAAnD2Y,EAAS,KAAEV,EAAY,KAmB9B,OAjBApX,qBAAU,WACR,IAAIwc,EAA8B,GAC9BxgB,EAAQ,EACZ3G,EAAOoB,wBAAwB+H,SAAQ,SAAC7H,GAClCA,EAAIC,SACN4lB,EAAexb,KAAK,CAClBnK,GAAImF,EACJyC,KAAM9H,EAAIC,OAAO6H,KACjBqd,MAAOnlB,EAAIC,OAAOC,KAEpBmF,IAEJ,IAEAsgB,EAAaE,EACf,GAAG,IAGD,sBAAKrc,UAAU,iCAAgC,UAC7C,6BAAI,iCAEJ,qBAAIA,UAAU,OAAM,UAAC,IAAiB,IAAf+Z,GAAqB,+DAC5B,IAAfA,EACCiC,EACE,cAACpC,GAAU,CACTC,aAAcoC,EACdnC,iBAAkBA,EAClBC,YAAaA,EACbpC,UAAWA,EACXX,gBAAiBA,IAGnB,cAACF,GAAe,CACd9hB,eAAgB+kB,EAChBhD,cAAe+C,EACf9C,gBAAiBA,EACjBC,aAAcA,IAIlB,cAACsE,GAAkB,CAAC9U,MAAOyV,EAAWJ,OAAQM,IAGhD,qBAAKpc,UAAU,WAAU,SAKvB,2BAIR,CChFkE,IAG5Dsc,GAAgB,kHAqCnB,OArCmB,yFACpB,WAAkBtnB,EAAwBunB,GAAkB,iGACnC9oB,KAAKsB,UAAS,UAAStB,KAAKJ,OAAM,0BAAkB2B,EAAc,sBAAcunB,IAAc,KAAD,EAAtG,OAARpH,EAAQ,yBAEPA,QAAYtiB,GAAS,gDAC7B,qDALmB,IAKnB,2EAED,WAAmBmC,GAAsB,iGACjBvB,KAAKsB,UAAS,UAAmBtB,KAAKJ,OAAM,0BAAkB2B,EAAc,eAAc,KAAD,EAAlG,OAAPC,EAAO,yBACNA,GAAW,IAAE,gDACrB,mDALA,IAKA,6EAED,WACED,EACAqC,EACAC,EACAwN,EACAzP,EACAwC,EACA8L,GAA6B,2FAEhBlQ,KAAK0B,WAAU,UAAiB1B,KAAKJ,OAAM,0BAAkB2B,EAAc,cAAc,CACpGqC,UAAWA,EACXC,SAAUA,EACVQ,MAAOgN,EACPzP,MAAOA,EACPsO,SAAUA,GAAYD,GAAgB2B,cACtCxN,KAAMA,IACL,KAAD,mFACH,+DAnBA,IAmBA,6EAED,WAAqB7C,EAAwBmgB,GAAa,2FAC3C1hB,KAAK2B,UAAS,UAAS3B,KAAKJ,OAAM,0BAAkB2B,EAAc,sBAAcmgB,EAASze,IAAMye,GAAU,KAAD,mFACtH,qDAJA,IAIA,6EAED,WAAqBngB,EAAwBunB,GAAkB,2FAChD9oB,KAAKyS,aAAY,UAASzS,KAAKJ,OAAM,0BAAkB2B,EAAc,sBAAcunB,IAAc,KAAD,mFAC9G,qDAJA,MAIA,EArCmB,CAASnpB,GAyChBopB,GADU,IAAIF,GCxBd,SAASG,GAAc7d,GACpC,IAAQZ,EAAiBY,EAAjBZ,aACR,EAA8BgB,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAAkCxU,mBAAwB,IAAG,mBAAtD0d,EAAS,KAAEC,EAAY,KAE9B,EAAkD3d,mBAA0B,IAAG,mBAAxE4d,EAAiB,KAAEC,EAAoB,KAEtCxd,EAAMC,cAAND,EACFsB,EAAUC,cAEhBf,qBAAU,WACJ7B,IACFsW,EAAY,IAEZkI,GACGM,aAAa9e,EAAatH,IAC1BqJ,MAAK,SAAC2c,GACLC,EAAaD,GACbrF,GACF,IACCxjB,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,gCACvB,IAEN,GAAG,IAEH,IAAM0d,EAAkB,SAACtF,GAMvBoF,EALKH,EAKgBjF,EAJE,GAKzB,EAGM/C,EAAc,CAClB,CACEC,OAAQtV,EAAE,yCACVuV,SAAU,aAEZ,CACED,OAAQtV,EAAE,wCACVuV,SAAU,YAEZ,CACED,OAAQtV,EAAE,qCACVuV,SAAU,SAEZ,CACED,OAAQtV,EAAE,qCACVuV,SAAU,SAEZ,CACED,OAAQtV,EAAE,oCACVuV,SAAU,SAId,EAiBIC,mBACF,CAEEC,QAASlI,mBAAQ,kBAAM8H,CAAW,GAAE,CAAChR,GAAgBC,WAErD1P,KAAM2Y,mBAAQ,kBAmHpB,SAAkCgQ,GAChC,IAAM7H,EAAwB,GAC1B6H,GACFA,EAAkBve,SAAQ,SAAC8W,GACsD,IAAD,cAA1EA,EAASze,IAAMye,EAAS7d,UAAY6d,EAAS9d,WAAa8d,EAAS9f,OACrE0f,EAAUlU,KAAK,CACbnK,GAAIye,EAASze,GACbW,UAAwC,QAA/B,EAAE8d,EAAS9d,UAAU6P,kBAAU,QAAI,GAC5C5P,SAAsC,QAA9B,EAAE6d,EAAS7d,SAAS4P,kBAAU,QAAI,GAC1C7R,MAAgC,QAA3B,EAAE8f,EAAS9f,MAAM6R,kBAAU,QAAI,GACpCpP,MAAiC,QAA5B,EAAgB,QAAhB,EAAEqd,EAASrd,aAAK,aAAd,EAAgBoP,kBAAU,QAAI,GACrCrP,KAA+B,QAA3B,EAAe,QAAf,EAAEsd,EAAStd,YAAI,aAAb,EAAeqP,kBAAU,QAAI,IAGzC,IAEF,OAAO6N,CACT,CApI0BwC,CAAyBqF,EAAkB,GAAE,CAACA,IAClExG,aAAc,CAAErO,UAAW,IAE7BsO,kBACAC,iBAzBAC,EAAa,EAAbA,cACAC,EAAiB,EAAjBA,kBACApF,EAAY,EAAZA,aACAqF,EAAI,EAAJA,KACAnF,EAAU,EAAVA,WACAD,EAAI,EAAJA,KACArJ,EAAe,EAAfA,gBACAC,EAAW,EAAXA,YACAyO,EAAW,EAAXA,YACAvO,EAAQ,EAARA,SACAD,EAAY,EAAZA,aACAoM,EAAW,EAAXA,YACA5c,EAAK,EAALA,MACA+W,EAAqB,EAArBA,sBACAE,EAAe,EAAfA,gBACS5G,EAAS,EAAlBrQ,MAASqQ,UAiBX,OAJAlI,qBAAU,WACR8O,EAAgBjX,EAAMgX,aACxB,GAAG,CAACkO,IAGF,sBAAK5c,UAAU,gCAA+B,UAC5C,6BAAKX,EAAE,0BAEP,sBAAKW,UAAU,UAAS,UACtB,cAAC2I,GAAkB,CACjBD,MAAOrJ,EAAE,sCACTc,QAAS,kBAAMQ,EAAQE,KAAK,mBAAmB,IAGjD,cAAC+H,GAAmB,CAAC5I,UAAU,OAAOG,QAAS,kBAAMkX,GAAS,IAE9D,cAAC7I,GAAY,CAACC,sBAAuBA,EAAuBC,aAAchX,EAAMgX,aAAcC,gBAAiBA,OAGjH,gCACE,qBAAK3O,UAAU,WAAU,SACvB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,qBAAKA,UAAU,YAAW,SACxB,kDAAWuW,KAAe,IAAEvW,UAAU,2CAA0C,UAC9E,gCACGoR,EAAalE,KAAI,SAACqE,GAAW,OAC5B,+CAAQA,EAAYC,uBAAqB,cACtCD,EAAY/c,QAAQ0Y,KAAI,SAACuE,GACxB,OAAO,8CAAQA,EAAOC,kBAAgB,aAAGD,EAAOE,OAAO,YACzD,IAGA,0BACG,MAGT,kDAAW6E,KAAmB,cAC3B7G,GACC,6BACE,oBAAIkC,QAAS,EAAG7R,UAAU,cAAa,SACrC,cAAC0P,GAAgB,CAACC,QAASA,SAK/BA,GACA0B,EAAKnE,KAAI,SAAC4E,EAAK/b,GACbub,EAAWQ,GAEX,IAAIqD,EAAWrD,EAAII,SACf3e,EAAG,qBAAiB4hB,EAASze,IAEjC,OACE,+CAAQob,EAAIO,eAAa,IAAElS,QAAS,kBAAMQ,EAAQE,KAAKtN,EAAI,EAAC,UAC1D,8CAAQue,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAAS9d,aAC/C,8CAAQya,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAAS7d,YAC/C,8CAAQwa,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAAS9f,SAC/C,8CAAQyc,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAASrd,SAC/C,8CAAQga,EAAIC,MAAM,GAAGO,gBAAc,aAAG6C,EAAStd,QAC/C,6BACE,cAACgR,GAAmB,CAACtV,IAAKA,SAIlC,oBAQd,cAACqU,GAAe,CACdC,kBAAmB,4BACnBhM,MAAO4a,EAAKxgB,OACZ6R,WAAY4O,EAAYzgB,OACxB8R,UAAWA,EACXC,gBAAiBA,EACjBC,YAAaA,EACbC,aAAcA,EACdC,SAAUA,UAMlB,SAASkP,IACP,IAAMV,EAAoB,OAAZ3Y,QAAY,IAAZA,OAAY,EAAZA,EAActH,GACxBigB,IACFnD,GAAW,GAEXgJ,GACGM,aAAanG,GACb5W,MAAK,SAAC9L,GACL0oB,EAAa1oB,GACb8oB,EAAgB9oB,EAClB,IACCJ,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,6BACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,IAEN,CACF,C,ICtNYwJ,G,QAIX,SAJWA,KAAiB,kBAAjBA,EAAiB,gBAAjBA,EAAiB,gBAI5B,CAJWA,QAAiB,KAMtB,ICDMC,GAAU,4CA6IpB,OA7IoB,2CACrB,SAAiBpa,EAAUO,GAAqC,IAAD,EACzD8Z,OAAQrqB,EAMZ,OALG,OAAHgQ,QAAG,IAAHA,GAAW,QAAR,EAAHA,EAAKX,cAAM,OAAX,EAAa7D,SAAQ,SAAC6a,GAChBA,EAAQxiB,KAAO0M,IACjB8Z,EAAQhE,EAEZ,IACOgE,CACT,GAAC,6BAED,SAAuBra,EAAU8D,GAAoD,IAAD,EAClF,OAAqD,QAArD,EAAOsW,EAAWE,UAAUta,EAAK8D,EAAYvD,gBAAQ,aAA9C,EAAgDga,aAAa7mB,MAAK,SAAC8mB,GAAC,OAAKA,EAAEC,UAAsB,OAAX3W,QAAW,IAAXA,OAAW,EAAXA,EAAatD,kBAAmB,GAC/H,GAAC,iCAED,SAA2BR,GAEzB,IADA,IAAI0a,EAAkB,EACbxnB,EAAI,EAAGA,EAAI8M,EAAIX,OAAOjM,OAAQF,IACrCwnB,GAAmB1a,EAAIX,OAAOnM,GAAGqnB,aAAannB,OAEhD,OAAOsnB,CACT,GAAC,oCAED,SAA8B1a,GAAwB,IAAD,EAC/CC,EAAmB,IAAI0a,IAU3B,OARU,QAAV,EAAA3a,EAAIX,cAAM,OAAV,EAAY7D,SAAQ,SAAC6e,GAAkB,IAAD,EAClB,QAAlB,EAAAA,EAAME,oBAAY,OAAlB,EAAoB/e,SAAQ,SAACof,GAA8B,IAAD,EACzB,QAA/B,EAAAA,EAAYC,2BAAmB,OAA/B,EAAiCrf,SAAQ,SAAC0G,GACxCjC,EAAIwI,IAAIvG,EACV,GACF,GACF,IAEOjC,CACT,GAAC,yBAED,SAAmB6a,GACjB,MAAoB,WAAbA,CACT,GAAC,+BAED,SAAyB9a,GACvB,IAAKpP,KAAKmqB,YAAY/a,EAAInL,OAAQ,OAAO,EAEzC,IAAIwlB,EAAQra,EAAIX,OAAO3L,MAAK,SAAC2mB,GAAK,MAAqB,WAAhBA,EAAMxlB,KAAkB,IAC/D,OAAiB,OAAVwlB,QAA4BrqB,IAAVqqB,CAC3B,GAAC,2BAED,SAAqBra,EAAUO,GAC7B,IAAK3P,KAAKmqB,YAAY/a,EAAInL,OAAQ,OAAO,EAEzC,IAAIwlB,EAA8B,OAAHra,QAAG,IAAHA,OAAG,EAAHA,EAAKX,OAAO3L,MAAK,SAAC2mB,GAAY,OAAKA,EAAMxmB,KAAO0M,CAAO,IAEtF,SAAK8Z,GAAe,OAALA,QAAK,IAALA,MAAOxlB,QAEC,WAAhBwlB,EAAMxlB,KACf,GAAC,iCAED,SAA2BmL,EAAUO,EAAiBC,GACpD,IAAK5P,KAAKmqB,YAAY/a,EAAInL,OAAQ,OAAO,EAEzC,IAAIwlB,EAA8B,OAAHra,QAAG,IAAHA,OAAG,EAAHA,EAAKX,OAAO3L,MAAK,SAAC2mB,GAAY,OAAKA,EAAMxmB,KAAO0M,CAAO,IAEtF,IAAK8Z,GAAe,OAALA,QAAK,IAALA,MAAOxlB,MAAO,OAAO,EAEpC,IAAI+lB,EAA4C,OAALP,QAAK,IAALA,OAAK,EAALA,EAAOE,aAAa7mB,MAC7D,SAACknB,GAAwB,OAAKA,EAAYH,SAAWja,CAAiB,IAGxE,SAAKoa,GAA2B,OAAXA,QAAW,IAAXA,MAAa/lB,QAEL,YAAtB+lB,EAAY/lB,KACrB,GAAC,wBAED,SAAkBmL,GAChB,IAAKA,IAAQA,EAAIb,QACf,MAAO,GAGT,IAAI6b,EAAO,GAmBX,OAjBIhb,EAAIb,QAAQzK,eACdsmB,EAAOhb,EAAIb,QAAQzK,cAEjBsL,EAAIb,QAAQxK,SACdqmB,IAASA,EAAK5nB,OAAS,EAAI,IAAM,IAAM4M,EAAIb,QAAQxK,QAGjDqL,EAAIb,QAAQvK,OACdomB,IAASA,EAAK5nB,OAAS,EAAI,KAAO,IAAM4M,EAAIb,QAAQvK,MAElDoL,EAAIb,QAAQtK,QACdmmB,IAASA,EAAK5nB,OAAS,EAAI,KAAO,IAAM4M,EAAIb,QAAQtK,OAElDmL,EAAIb,QAAQpK,aACdimB,IAASA,EAAK5nB,OAAS,EAAI,KAAO,IAAM4M,EAAIb,QAAQpK,YAG/CimB,CACT,GAAC,mCAED,SAA6Bhb,GAC3B,IAAI4B,EAAU,IAAI+Y,IAclB,OAZI3a,EAAInM,IAAMmM,EAAIX,OAAOjM,OAAS,GAChC4M,EAAIX,OAAO7D,SAAQ,SAAC6e,GACdA,EAAME,aAAannB,OAAS,GAC9BinB,EAAME,aAAa/e,SAAQ,SAACof,GACrBhZ,EAAQqZ,IAAIL,EAAYnY,SAC3Bb,EAAQ6G,IAAImS,EAAYnY,OAE5B,GAEJ,IAGKb,CACT,GAAC,4CAED,SAAsC5B,GAGpC,IAFA,IAAI4B,EAAUtM,QAAgB,aAI5B,IADA,IAAI+kB,EAAQra,EAAIX,OAAOnM,GAAG,aAC2B,IAAD,EAC9C0nB,EAAcP,EAAME,aAAaW,GAC/BC,EAA4Bnb,EAAIJ,aAAalM,MACjD,SAAC0nB,GAAC,OAAKA,EAAE7a,UAAY8Z,EAAMxmB,IAAMunB,EAAE5a,oBAAsBoa,EAAYH,MAAM,IAEvEY,EAAWT,EAAY/lB,QAAUslB,GAAkBmB,OACnDC,EAAmB,OAAHvb,QAAG,IAAHA,GAAsB,QAAnB,EAAHA,EAAKL,yBAAiB,WAAnB,EAAH,EAAwB7L,MAC5C,SAACsnB,GAAC,OAAKA,EAAE5a,oBAAsBoa,EAAYH,QAAUW,EAAE7a,UAAY8Z,EAAMxmB,IAAMunB,EAAEnnB,QAAU+L,EAAInM,EAAE,IAG9F+N,EAAQtO,SAASsnB,EAAYnY,SAAY0Y,GAA8BE,GAAaE,GACvF3Z,EAAQ5D,KAAK4c,EAAYnY,OAE7B,EAbSyY,EAAI,EAAGA,EAAIb,EAAME,aAAannB,OAAQ8nB,IAAG,GAcpD,EAhBShoB,EAAI,EAAGA,EAAI8M,EAAIX,OAAOjM,OAAQF,IAAG,IAkB1C,OAAO0O,CACT,KAAC,EA7IoB,GCFjB4Z,GAAsB,kHAmBzB,OAnByB,iGAC1B,WAA0BrnB,GAA0B,mGACnBvD,KAAKsB,UAAS,UACxCtB,KAAKJ,OAAM,4BAAqB2D,EAAU,iBAAaA,GAAf,KAC3C,KAAD,EAFqB,KAAhBsnB,EAAgB,QAGD,CAAD,eASf,OARCC,EAAKD,EAAiBpR,KAAI,SAACsR,GAO7B,OANmB,OAAfA,QAAe,IAAfA,KAAiB3c,cACnB2c,EAAgB3c,YAAc,IAAItD,IAAIC,OAAOC,QAAuB,OAAf+f,QAAe,IAAfA,OAAe,EAAfA,EAAiB3c,eAEpE2c,EAAgBlgB,OAClBkgB,EAAgBlgB,KAAO,IAAIC,IAAIC,OAAOC,QAAuB,OAAf+f,QAAe,IAAfA,OAAe,EAAfA,EAAiBlgB,QAE1DkgB,CACT,IAAE,kBACKD,GAAE,gCAGJD,GAAoB,IAAE,gDAC9B,mDAnByB,MAmBzB,EAnByB,CAASlrB,GAuBtBqrB,GADgB,IAAIJ,GCtB7BK,GAAsB,kHAczB,OAdyB,iGAC1B,gHACiCjrB,KAAKsB,UAAS,UAA4BtB,KAAKJ,OAAM,sBAAqB,KAAD,EAAlF,KAAhBsrB,EAAgB,QACD,CAAD,eAMf,OALCJ,EAAKI,EAAiBzR,KAAI,SAAC0R,GAI7B,OAHmB,OAAfA,QAAe,IAAfA,KAAiB/c,cACnB+c,EAAgB/c,YAAc,IAAItD,IAAIC,OAAOC,QAAuB,OAAfmgB,QAAe,IAAfA,OAAe,EAAfA,EAAiB/c,eAEjE+c,CACT,IAAE,kBACKL,GAAE,gCAGJI,GAAoB,IAAE,gDAC9B,kDAdyB,MAczB,EAdyB,CAASvrB,GAkBtByrB,GADgB,IAAIH,G,OCR5B,SAASI,GAAelgB,GAC7B,IAAQS,EAAMC,cAAND,EAEF0f,EAAiBngB,EAAMogB,kBAAoB,qBAAuB,+BAExE,OACE,qBAAKhf,UAAU,iBAAgB,SAC7B,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,sBAAKA,UAAU,iBAAgB,UAC7B,6BAAKpB,EAAMqgB,YAAgB,SAG9BrgB,EAAMsgB,UAAY,qBAAKlf,UAAU,YAAW,SAAEpB,EAAMsgB,WACrD,qBAAKlf,UAAU,cAAa,SAC1B,sBAAKA,UAAU,qBAAoB,UACjC,yBAAQA,UAAW+e,EAAgB5e,QAAS,kBAAMvB,EAAMugB,YAAY,EAAC,UAClEvgB,EAAMogB,mBAAqB,cAAC,IAAe,CAAChf,UAAU,OAAOI,KAAM,CAAC,MAAO,0BAC3Ef,EAAE,iBAGL,wBAAQW,UAAU,+BAA+BG,QAAS,kBAAMvB,EAAMwgB,WAAU,EAAM,EAAC,SACpF/f,EAAE,0BAQnB,CCnCO,SAASggB,GAA6BzgB,GAC3C,IAAQS,EAAMC,cAAND,EAER,OACE,mCACE,qBAAKW,UAAU,iBAAgB,SAC7B,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,sBAAKA,UAAU,iBAAgB,UAC7B,6BAAKpB,EAAMqgB,YAAgB,SAG/B,qBAAKjf,UAAU,YAAW,SACxB,sBAAKA,UAAU,qBAAoB,UACjC,wBAAQA,UAAU,+BAA+BG,QAAS,kBAAMvB,EAAMugB,YAAY,EAAC,SAChF9f,EAAE,2CAGL,wBAAQW,UAAU,+BAA+BG,QAAS,kBAAMvB,EAAMwgB,WAAU,EAAM,EAAC,SACpF/f,EAAE,uDASrB,C,ICrCYigB,G,WAIX,SAJWA,KAAY,kBAAZA,EAAY,cAAZA,EAAY,kBAIvB,CAJWA,QAAY,KCKuB,IAKzCC,GAAc,kHA+DjB,OA/DiB,iGAClB,WAA0B7a,GAAe,2FAC1BjR,KAAK0B,WAAU,UAAc1B,KAAKJ,OAAM,2CAAmCqR,GAAW,MAAM,KAAD,mFACzG,mDAHiB,IAGjB,kEAED,WAAU8a,EAAwCxqB,GAAsB,mFAmB7D,OAlBJwqB,EAAmBC,iBAAgBD,EAAmBC,eAAiBC,gBAExEC,EAAYC,YAAW,WACzBzZ,GACG0Z,aAAa7qB,EAAgBwqB,EAAmBM,WAAYN,EAAmBM,YAC/E/f,MAAK,SAACwE,GACL,OAAIA,GAASA,EAAM0C,UAAY1C,EAAM0C,SAAShR,OAAS,GACrDtB,QAAQkI,IAAI,kCACL,CAAEnF,MAAO4nB,GAAaS,WAG/BprB,QAAQkI,IAAI,0BACL,CAAEnF,MAAO4nB,GAAaU,SAC/B,IACCnsB,OAAM,WAEL,OADAc,QAAQkI,IAAI,wCACL,CAAEnF,MAAO4nB,GAAaU,QAC/B,GACJ,GAAG,MAAO,EAAD,gBAGavsB,KAAK0B,WAAU,UAAgC1B,KAAKJ,OAAM,aAAamsB,GAAoB,KAAD,EAAnG,KAAL1rB,EAAK,QACD,CAAD,yCACA,CAAE4D,MAAO4nB,GAAahmB,MAAOxF,MAAOA,IAAO,iCAE3C,CAAE4D,MAAO4nB,GAAaS,QAASjsB,WAAOjB,IAAW,gCAIjC,OAJiC,0BAG1D8B,QAAQkI,WAAW,EAAP,IACZlI,QAAQb,MAAM,KAAEe,SAAS,kBAClB,CAAE6C,MAAO4nB,GAAahmB,MAAOxF,MAAO,qBAAoB,QAEvC,OAFuC,UAE/DmsB,aAAaN,GAAW,6EAE3B,qDArCA,IAqCA,+EAED,WAAuBG,GAAkB,iGACnBrsB,KAAKsB,UAAS,UAAatB,KAAKJ,OAAM,gDAAwCysB,IAAc,KAAD,EAApG,OAAPI,EAAO,yBACJA,GAAO,gDACf,mDALA,IAKA,yEAED,WAAiBJ,GAAkB,iGACbrsB,KAAKsB,UAAS,UAAetB,KAAKJ,OAAM,gCAAwBysB,IAAc,KAAD,EAAtF,OAAPK,EAAO,yBACJA,GAAW,IAAE,gDACrB,mDALA,IAKA,kFAED,WAA0BL,GAAkB,iFACb,OAAzBL,EAAiBC,eAAS,EAAD,OACvBjsB,KAAK0B,WAAU,UAAc1B,KAAKJ,OAAM,wCAAwC,CACpFysB,WAAYA,EACZL,eAAgBA,IACf,KAAD,2CACH,mDARA,IAQA,4EAED,WAAoBW,GAAiB,iFACN,OAAzBX,EAAiBC,eAAS,EAAD,OACvBjsB,KAAK0B,WAAU,UAAc1B,KAAKJ,OAAM,qBAAa+sB,EAAS,0CAAkCX,GAAkB,MAAM,KAAD,2CAC9H,mDALA,MAKA,EA/DiB,CAASrsB,GAmEditB,GADQ,IAAId,GC/DZ,SAASe,GAAa,GAAuC,IAArC/b,EAAK,EAALA,MAC/BZ,GAD4C,EAANzO,OACnBwO,GAAgB2B,eACjChG,EAAMC,cAAND,EAER,OACE,qCACE,qBAAKW,UAAU,2BAA0B,SACvC,qBAAKA,UAAU,SAAQ,SACrB,qBAAKA,UAAU,eAAc,SAC3B,sBAAKA,UAAU,YAAW,UACxB,oBAAIA,UAAU,aAAY,SAAEX,EAAE,wBAE7BkF,EAAM5B,WAAWuK,KAAI,SAACnG,GACrB,OACE,sBAAK/G,UAAU,eAAc,UAC3B,uBACA,gCACE,sBAAMA,UAAU,gBAAe,SAC5BwJ,GAAY+I,eAAe,IAAI5U,KAAKoJ,EAASwZ,WAAY/W,GAAY0G,gBAExE,sBAAMlQ,UAAU,SAAQ,SAAE+G,EAASyZ,cAErC,qBAAKxgB,UAAU,OAAM,SACnB,+BAAOuG,GAAaka,uBAAuB1Z,EAAUpD,SATtBoD,EAASrQ,GAahD,aAMR,qBAAKsJ,UAAU,4BAA2B,SACxC,qBAAKA,UAAU,SAAQ,SACrB,qBAAKA,UAAU,gBAAe,SAC5B,sBAAKA,UAAU,YAAW,UACxB,oBAAIA,UAAU,aAAY,SAAEX,EAAE,wBAE9B,wBAAOW,UAAU,sBAAqB,UACpC,gCACE,+BACE,6BAAKX,EAAE,kCACP,6BAAKA,EAAE,uCACP,6BAAKA,EAAE,yCAGX,gCACGkF,EAAM5B,WAAWuK,KAAI,SAACnG,GACrB,OACE,+BACE,6BAAKyC,GAAY+I,eAAe,IAAI5U,KAAKoJ,EAASwZ,WAAY/W,GAAY0G,gBAC1E,6BAAK3J,GAAaka,uBAAuB1Z,EAAUpD,KACnD,6BAAKoD,EAASyZ,aAHPzZ,EAASrQ,GAMtB,oBASlB,CChEe,SAASgqB,GAAwB9hB,GAC9C,IAAQ2F,EAAgD3F,EAAhD2F,MAAO4b,EAAyCvhB,EAAzCuhB,QAASvZ,EAAgChI,EAAhCgI,kBAAmB8C,EAAa9K,EAAb8K,SACnCrK,EAAMC,cAAND,EACR,OACE,qBAAKW,UAAU,kBAAiB,SAC7BmgB,GACC,qBAAKngB,UAAU,OAAM,SACnB,sBAAKA,UAAU,YAAW,UACxB,oBAAIA,UAAU,4CAA2C,SACvD,+BAAOX,EAAE,mDAEX,mBAAGW,UAAU,YAAW,SACrB4G,GACC,qCACGvH,EAAE,wBAAyB,IAC5B,iCACU,OAAP8gB,QAAO,IAAPA,KAAS/K,aACN5L,GAAY+I,eAAe,IAAI5U,KAAY,OAAPwiB,QAAO,IAAPA,OAAO,EAAPA,EAAS/K,cAAe1L,GAC5DrK,EAAE,sCAER,uBACCA,EAAE,0BAA2B,IAC9B,mCACGA,EAAE,mBAAoB,CACrBshB,KAAMR,EAAUvkB,EAAcglB,YAAYT,EAAQ3jB,OAAS2jB,EAAQU,cAAgBjlB,EAAcglB,YAAY,GAC7GE,SAAiB,OAAPX,QAAO,IAAPA,OAAO,EAAPA,EAASW,WAGpBva,GAAawa,gBAAgBxc,IAAU,sBAAMvE,UAAW,uBAAuB,SAAEX,EAAE,4BAErFkH,GAAaya,eAAezc,IAC3B,qCACE,uBACClF,EAAE,0BAA2B,IAC9B,iCACU,OAAP8gB,QAAO,IAAPA,KAASc,cAAuB,OAAPd,QAAO,IAAPA,KAASe,UAAS,UAC9B,OAAPf,QAAO,IAAPA,OAAO,EAAPA,EAASe,UAAS,uFAA0B,OAAPf,QAAO,IAAPA,OAAO,EAAPA,EAASc,cACjD5hB,EAAE,sCAER,uBACCA,EAAE,8BAA+B,IAClC,iCACU,OAAP8gB,QAAO,IAAPA,KAASgB,qBAA8B,OAAPhB,QAAO,IAAPA,KAASiB,mBAAkB,WACpDC,OAAc,OAAPlB,QAAO,IAAPA,OAAO,EAAPA,EAASgB,qBAAqBtW,SAAS,EAAG,KAAI,YAAIwW,QAAc,OAAPlB,QAAO,IAAPA,OAAO,EAAPA,EAASiB,oBAAqB,KAAKvW,SACrG,EACA,MAEFxL,EAAE,oDAY9B,CCvDe,SAASiiB,GAAa1iB,GAA2B,IAAD,IACrD2F,EAAyE3F,EAAzE2F,MAAO1B,EAAkEjE,EAAlEiE,IAAK0e,EAA6D3iB,EAA7D2iB,iBAAkB7X,EAA2C9K,EAA3C8K,SAAUkV,EAAiChgB,EAAjCggB,gBAAiB4C,EAAgB5iB,EAAhB4iB,YACzDniB,EAAMC,cAAND,EACR,OACE,qBAAKW,UAAU,kBAAiB,SAC9B,qBAAKA,UAAU,OAAM,SACnB,sBAAKA,UAAU,YAAW,UACxB,oBAAIA,UAAU,4CAA2C,SACvD,+BAAOX,EAAE,0BAEX,oBAAGW,UAAU,YAAW,UACtB,iCACGX,EAAE,uBACF,KACD,iCACE,cAAC0P,GAAoB,CAAClM,IAAKA,MAE7B,0BAED0e,GACC,iCACGliB,EAAE,yBAA0B,IAC7B,iCAASkF,EAAMU,MAAQ5F,EAAE,yBAA2BkF,EAAMU,KAAKiC,WAAWua,oBAG9E,uBACCpiB,EAAE,4BAA4B,IAAC,iCAASmK,GAAY+I,eAAe,IAAI5U,KAAU,OAAL4G,QAAK,IAALA,OAAK,EAALA,EAAO8Q,WAAY3L,KACpE,qBAAtB,OAALnF,QAAK,IAALA,OAAK,EAALA,EAAOU,KAAKiC,aACX,qCACE,uBACA,iCACG7H,EAAE,qCAAqC,IAAC,iCAAc,OAALkF,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOkC,MAAM,UAAE,OAAa,QAAb,EAAf,EAAiBE,mBAAW,WAAvB,EAAL,EAA8B2O,6BAIrFsJ,GACC,qCACE,uBACCvf,EAAE,+BAA+B,IAAE,IACpC,iCAASuf,GAAmBA,EAAgB/c,YAAYjO,IAAI8P,GAAgBC,eAG/E6d,GACC,qCACE,uBACCniB,EAAE,sBAAsB,KAAE,iCAASmiB,OAGvCjd,EAAMW,iBACL,qCACE,uBACA,uBAAMlF,UAAU,oBAAmB,UAChCX,EAAE,+BAA+B,KAAE,iCAASkF,EAAMW,iCASrE,CCpEe,SAASwc,GAAc9iB,GACpC,IAAQ+iB,EAAsH/iB,EAAtH+iB,iBAAkBC,EAAoGhjB,EAApGgjB,8BAA+BC,EAAqEjjB,EAArEijB,oBAAqBC,EAAgDljB,EAAhDkjB,wBAAyBC,EAAuBnjB,EAAvBmjB,mBAC/F1iB,EAAMC,cAAND,EACR,OACE,qBAAKW,UAAU,kBAAiB,SAC9B,qBAAKA,UAAU,gBAAe,SAC5B,sBAAKA,UAAU,YAAW,UACxB,oBAAIA,UAAU,aAAY,SAAEX,EAAE,yBAC9B,qBAAKW,UAAU,MAAK,SAClB,qBAAKA,UAAU,SAAQ,SACrB,mBAAGgiB,wBAAyB,CAAEC,OAAQN,SAGzCC,GACC,qBAAK5hB,UAAU,MAAK,SAClB,qBAAKA,UAAU,SAAQ,SACrB,yBACEA,UAAU,mCACVG,QAAS4hB,EACTtZ,UAAWoZ,EAAoB,UAEJxiB,EAA1ByiB,EAA4B,oBAAyB,2BACtD,cAAC,IAAe,CAAC9hB,UAAU,OAAOI,KAAM,CAAC,MAAO,uBASlE,C,wBCvCO,SAAS8hB,KACd,IAAQ7iB,EAAMC,cAAND,EAER,OACE,mCACE,iCACE,qBAAKW,UAAU,gBAAgBQ,IAAI,2BAA2BC,IAAI,KAAK,IAAEpB,EAAE,0BAInF,CAEO,SAAS8iB,KACd,IAAQ9iB,EAAMC,cAAND,EAER,OACE,qCACE,cAAC,IAAe,CAACe,KAAM,CAAC,MAAO,eAC/B,sBAAMJ,UAAU,OAAM,SAAEX,EAAE,yBAGhC,CAWO,SAAS+iB,GAAkBxjB,GAChC,IAAQS,EAAMC,cAAND,EAER,OACE,mCACE,yBAAQW,UAAU,8BAA8BG,QAAS,kBAAMvB,EAAMuB,SAAS,EAAEsI,SAAU7J,EAAM6J,SAAS,UACtG7J,EAAMyjB,aAAe,cAAC,IAAe,CAACjiB,KAAM,CAAC,MAAO,UACrD,sBAAMJ,UAAU,OAAM,SAAEX,EAAE,4BAIlC,CAqBO,SAASijB,GAAuB1jB,GACrC,OACE,mCACE,6BACE,oBAAIiT,QAAS,EAAG5E,MAAO,CAAEsV,UAAW,UAAW,SAC5C3jB,EAAM8J,SAFF,kBAOf,CCyTA,SAAS8Z,GAAqB3f,EAAU4f,EAAgCle,GACtE,QAAK0Y,GAAWyF,kBAAkB7f,MAI9B4f,GAIGlc,GAAaoc,SAASpe,GAC/B,CAEA,SAASqe,GACP/f,EACA0B,EACAse,EACAC,EACAnc,EACAoc,GAEA,QAAKlgB,KACI,OAAL0B,QAAK,IAALA,MAAO4C,YACP0b,IAAcC,IAEdnc,EAAYjP,QAAU4O,GAAiBiB,MAEtCwb,GAAYpc,EAAYjP,QAAU4O,GAAiB0c,gBAC/C/F,GAAWgG,cAAcpgB,EAAK8D,EAAYvD,WAIrD,CAEA,SAAS8f,GAAoCvd,EAAqB2N,GAChE,IAAI6P,EAAiBlI,SAASC,eAAe,0BAAD,OAA2BvV,IACnEyd,EAAMnI,SAASC,eAAe,2BAAD,OAA4BvV,IAE7D,GAAIwd,EAAgB,CAClBA,EAAeE,QAAU/P,EACzB,IAAIgQ,EAAQH,EAAeI,qBAAqB,QAAQ,GAAGA,qBAAqB,SAAS,GACrFjQ,EACFgQ,EAAME,QAENF,EAAMpnB,MAAQ,EAElB,CACIknB,IACFA,EAAIC,OAAS/P,EAEjB,CDxZA8O,GAAkB9Y,aAAe,CAC/Bb,UAAU,EACV4Z,aAAa,GCwZAoB,OA1Yf,SAA0B7kB,GAA+B,IAAD,YAEpD2F,EAgBE3F,EAhBF2F,MACAG,EAeE9F,EAfF8F,QACA1G,EAcEY,EAdFZ,aACA6E,EAaEjE,EAbFiE,IACA6gB,EAYE9kB,EAZF8kB,QACAnC,EAWE3iB,EAXF2iB,iBACAoC,EAUE/kB,EAVF+kB,mBACA/c,EASEhI,EATFgI,kBACAmc,EAQEnkB,EARFmkB,SACAN,EAOE7jB,EAPF6jB,gBACAnE,EAME1f,EANF0f,iBACAsF,EAKEhlB,EALFglB,UACAC,EAIEjlB,EAJFilB,uBACAC,EAGEllB,EAHFklB,oBACAC,EAEEnlB,EAFFmlB,kBACAC,EACEplB,EADFolB,SAGM3kB,EAAMC,cAAND,EACFsE,EAAmBD,GAAgB2B,cACnC1E,EAAUC,cAGVkiB,EAAyBlW,mBAAQ,WAAO,IAAD,EAC3C,OAAkB,QAAlB,EAAOrI,EAAMkC,aAAK,aAAX,EAAa9P,MAAK,SAACstB,GAAE,aAAK1d,GAAa2d,cAAgB,OAAFD,QAAE,IAAFA,GAAe,QAAb,EAAFA,EAAItd,mBAAW,WAAb,EAAF,EAAiBjP,MAAM,GACrF,GAAG,CAAC6M,IAEEqB,EAAiC,QAAjB,EAAGrB,EAAMkC,MAAM,UAAE,OAAa,QAAb,EAAd,EAAgBE,mBAAW,WAAb,EAAd,EAA6BxC,MAChD0B,EAA+B,QAAjB,EAAGtB,EAAMkC,MAAM,UAAE,OAAa,QAAb,EAAd,EAAgBE,mBAAW,WAAb,EAAd,EAA6BvC,IAC9C+f,EAAiB5f,EAAMS,WAAaT,EAAMkC,MAAMxQ,QAAU,EAE5DmuB,EAAsC,EAU1C,OARIxe,GAAoBC,IAClBD,EAAiBoH,UAAU,EAAG,MAAQnH,EAAemH,UAAU,EAAG,IACpEoX,EAA8B,GACrBxe,EAAiBoH,UAAU,EAAG,KAAOnH,EAAemH,UAAU,EAAG,KAC1EoX,EAA8B,IAKhC,qBAAKpkB,UAAU,MAAK,SAClB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,sBAAKA,UAAU,YAAW,UACxB,qBAAIA,UAAU,aAAY,UACvBX,EAAE,iCACFuH,GACC,cAACgC,GAAmB,CAAC5I,UAAYmkB,EAA0B,GAAT,OAAahkB,QAASyjB,OAG5E,8BACGtF,EAAiB,KAAO1X,GACvB,sCACIud,GACA,yBACEnkB,UAAU,+CACVG,QAAS,kBAAM2jB,GAAqB,EACpCrb,UAAW+Z,GAAqB3f,EAAK4f,EAAiBle,GAAO,UAE7D,cAAC,IAAe,CAACvE,UAAU,OAAOI,KAAM,CAAC,MAAO,UAC/Cf,EAAE,4CAGP,cAACuJ,GAAmB,CAAC5I,UAAYmkB,EAA0B,GAAT,OAAahkB,QAASyjB,SAK9E,wBAAO5jB,UAAU,6BAA4B,UAC3C,gCACE,+BACE,uBACA,6BAAKX,EAAE,oCACP,6BAAKA,EAAE,kCACP,6BAAKA,EAAE,4CACP,6BAAKA,EAAE,uCACNuH,GAAqB,6BAAKvH,EAAE,oCAC3BuH,GACA,qCACE,6BAAKvH,EAAE,6BACP,6BAAKA,EAAE,4CAIX,uBACA,4BAGJ,kCAC2B,KAAb,QAAX,EAAAkF,EAAMkC,aAAK,aAAX,EAAaxQ,SAAgB,cAACqsB,GAAsB,CAAC5Z,MAAOrJ,EAAE,+BAEnD,QAF0G,EAErHkF,EAAMkC,aAAK,aAAX,EAAayG,KAAI,SAACxG,GACjB,IAAIC,EAAuB,OAATD,QAAS,IAATA,OAAS,EAATA,EAAWC,YACvB0d,EAAgBtB,EAAWrc,EAAUC,YAAY2d,WAAa5d,EAAUC,YAAY4d,YAE1F,GAAI5d,EAAa,CAAC,IAAD,QACXrB,EAAuD,QAAjD,EAAG2X,GAAWE,UAAUta,EAAK8D,EAAYvD,gBAAQ,OAE1D,QAF0D,EAA9C,EAAgDga,aAAa7mB,MACxE,SAAC8mB,GAAC,OAAKA,EAAEC,SAAW3W,EAAYtD,iBAAiB,WAClD,WAF0D,EAA9C,EAEViC,OAEGkZ,EAAkBF,EAAiB/nB,MAAK,SAACgoB,GAAE,OAAKA,EAAG7nB,KAAO4O,CAAM,IAEhEyK,EAAcpJ,EAAYoJ,YAC5ByU,EAAa,GACjB,GAAoB,WAAhBzU,GAA4C,SAAhBA,EAAwB,CACtD,IAAM0U,EAAc,IAAI9mB,KAAKgJ,EAAY8d,aACzCD,EAAanlB,EAAE,wBAAyB,CAAEqlB,MAAOlb,GAAYmb,UAAUF,IACzE,CAEA,IAAM5B,EAAiC,OAApBJ,EACbmC,EAAYnC,GAAmB/b,EAAUhQ,GACzCmuB,GACHte,GAAaue,wBAAwBvgB,IAAUse,GAAcC,GAA8C,OAApBve,EAAMS,UAC5F+f,GAAgB,EAUpBA,GAREA,EADEhC,EACcpc,EAAYjP,QAAU4O,GAAiB0c,gBAC9Cpc,IAIPD,EAAYjP,QAAU4O,GAAiBiB,KAAOZ,EAAYjP,QAAU4O,GAAiB0e,2BArGjFrb,KAAO,IAAIhM,MAAQkM,OAAO,qBAwGgBF,KAAO,IAAIhM,KAAKgJ,EAAYxC,QAAQ0F,OAAO,oBAE7F,IAAMob,EAAS1e,GAAa2d,cAAcvd,EAAYjP,OAEhDwtB,EAAa,QAAQjpB,KAAK0K,EAAYtD,mBACxCsD,EAAYtD,kBACZsD,EAAYvD,QAAUuD,EAAYtD,kBAEtC,OACE,+BACE,oBAAIqF,MAAO8b,EAAW,SACpB,cAAC1U,GAAoB,CAACC,YAAaxL,EAAMwL,gBAE3C,6BAAKmV,IACL,6BACGvB,EACGtkB,EAAE,uBAAwB,CACxBkG,OAAQmB,EAAUnB,OAClBC,MAAOkB,EAAUlB,MACjBC,MAAOiB,EAAUjB,QAEJ,OAAf+Y,QAAe,IAAfA,OAAe,EAAfA,EAAiBlgB,KAAK1K,IAAI+P,KAEhC,6BACE,cAACqM,GAAmB,CAACtY,MAAOiP,EAAYjP,MAAOkP,kBAAmBA,MAEpE,+BACGge,IAAc9B,GAA0B,cAACZ,GAAuB,KAC/D0C,IAAcK,GACd,cAAC7C,GAAiB,CAChBjiB,QAAO,gCAAE,wGAAkB6jB,EAAShmB,EAAatH,GAAIgO,EAASgC,EAAUhQ,GAAIiQ,EAAYjP,OAAM,mFAC9F+Q,UAAWsc,GAAiBlC,GAAcC,IAA2B7F,GAAWW,YAAY/a,EAAInL,UAGlGktB,GAAaK,GAAU,cAAC9C,GAAmB,OAE/C,qBAAIlV,MAAO,CAAEkY,SAAU,SAAU,UAC9Bze,EAAUC,YAAYX,gBAAgBkH,KAAI,SAACkY,GAAK,OAC/C,uBAAMplB,UAAU,iDAAgD,UAC7DolB,EACD,wBACEplB,UAAU,+CACVG,QAAS,kBAAM0jB,EAAuBnd,EAAUhQ,GAAI0uB,EAAM,EAC1D3c,SAAUoc,MAEP,IAGT,sBACEnuB,GAAE,iCAA4BgQ,EAAUhQ,IACxCsJ,UAAU,iDACVqjB,QAAM,WAEN,sBACEgC,SAAU,SAACrN,GACTA,EAAGsN,iBACH,IAAIhC,EAAQtL,EAAGuN,cAAchC,qBAAqB,SAAS,GAC3DiC,EAAkBxnB,EAAatH,GAAI6N,EAAOmC,EAAUhQ,GAAI4sB,EAAMpnB,OAC9DgnB,GAAoCxc,EAAUhQ,IAAI,EACpD,EAAE,SAEF,uBACEA,GAAG,sBACH+uB,OAAQ,kBAAMvC,GAAoCxc,EAAUhQ,IAAI,EAAM,EACtEgvB,UAAW,SAACpC,GAA+B,OA0GzE,SAAyCA,EAAiC/e,EAAcvP,EAAwB2Q,GAC9G,GAAkB,QAAd2d,EAAM1R,IAAe,CACvB,IAAM+T,EAAwC1K,SAASC,eAAe,uBACtEsK,EAAkBxwB,EAAgBuP,EAAOoB,EAAgC,OAAnBggB,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqBzpB,OAC3EgnB,GAAoCvd,GAAa,EACnD,CACF,CA/GgCigB,CAAgCtC,EAAO/e,EAAOvG,EAAatH,GAAIgQ,EAAUhQ,GAAG,EAE9ES,KAAK,aAKX,wBACEA,KAAK,SACLgJ,QAAS,kBAAM+iB,GAAoCxc,EAAUhQ,IAAI,EAAK,EACtEA,GAAE,kCAA6BgQ,EAAUhQ,IACzCsJ,UAAU,mDACVyI,SAAUoc,EAAyB,SAEnC,cAAC,IAAe,CAACzkB,KAAM,CAAC,MAAO,gBAIjCwG,GAAqB,6BAAKyd,IAC5B,6BACE,uBAAMrkB,UAAU,gCAA+B,UAC5CuhB,GACC,wBACEvhB,UAAU,kBACVG,QAAS,WACPQ,EAAQE,KAAK,GAAD,OAAI6D,EAAO,kBAAUgC,EAAUhQ,GAAE,aAC/C,EACA+R,SACEoa,GACAC,GACAnc,EAAYjP,QAAU4O,GAAiBmB,WACrB,IAAlBlD,EAAM4C,QACP,SAEA9H,EAAE,yBAGNqH,EAAUhQ,IAAMiQ,EAAYjP,QAAUkP,GACrC,cAAC4B,GAAqB,CACpBE,WAAO7V,EACPsN,QAAS,kBAAM4jB,EAAkB/lB,EAAatH,GAAIgO,EAASgC,EAAUhQ,GAAIiQ,EAAYjP,MAAM,EAC3F+Q,UAAWma,GAAqB/f,EAAK0B,EAAOse,EAAYC,EAAwBnc,EAAaoc,UAKrG,+BACE,wBAAQ/iB,UAAU,2BAA2B,iBAAe,YAAY,iBAAe,QAAO,SAC5F,cAAC,IAAe,CAACI,KAAM,CAAC,MAAO,mBAEjC,qBAAKJ,UAAU,QAAQiJ,UAAW,EAAGvS,GAAG,WAAU,SAChD,qBAAKsJ,UAAU,eAAc,SAC3B,sBAAKA,UAAU,gBAAe,UAC5B,sBAAKA,UAAU,eAAc,UAC3B,oBAAIA,UAAU,cAAa,SAAEX,EAAE,oCAC/B,wBAAQlI,KAAK,SAAS6I,UAAU,YAAY,kBAAgB,QAAQ,aAAW,aAEjF,qBAAKA,UAAU,aAAY,SACzB,sBAAKiN,MAAO,CAAEsV,UAAW,QAAS,UAChC,6BAAKljB,EAAE,2BAA6B,MACnCif,EAAiBpR,KAAI,SAACsR,GACrB,OACE,gCACkB,OAAfA,QAAe,IAAfA,OAAe,EAAfA,EAAiBlgB,KAAK1K,IAAI+P,GAAU,KAAkB,OAAf6a,QAAe,IAAfA,OAAe,EAAfA,EAAiB3c,YAAYjO,IAAI+P,KAG/E,IAC4B,qBAAtB,OAALY,QAAK,IAALA,OAAK,EAALA,EAAOU,KAAKiC,aAAoCwc,GAAW9d,GAAoBC,GAC9E,gCACE,uBACCxG,EAAE,8BACF,KACmF,QAD/E,EACJmK,GAAY+I,eAAe,IAAI5U,KAAKiI,GAAmB4D,GAAYM,wBAAgB,aAAnF,EAAqF+b,MACpFzB,GACC,IACF/kB,EAAE,aAAc,IACiE,QAD9D,EACnBmK,GAAY+I,eAAe,IAAI5U,KAAKkI,GAAiB2D,GAAYM,wBAAgB,aAAjF,EAAmF+b,MAClFzB,WAMV,qBAAKpkB,UAAU,eAAc,SAC3B,wBAAQ7I,KAAK,SAAS6I,UAAU,0BAA0B,kBAAgB,QAAO,SAC9EX,EAAE,gCA7IRqH,EAAUhQ,GAsJvB,CACA,MAAO,EACT,mBAeb,SAEc8uB,EAAkB,EAAD,mDAmC/B,OAnC+B,kCAAhC,WAAiCxwB,EAAwB8wB,EAAqBngB,EAAqB6M,GAAsB,wFAClHA,EAAe,CAAD,mDAII,UAAnBxU,EAAatH,KAAkBkQ,GAAsB4L,EAAeuT,MAAM,cAAa,gBAChC,OAAzD1d,GAAavU,MAAMuL,EAAE,oCAAoC,0BAKjB,GADpCkF,EAAY,eAAQuhB,GACtB9f,EAAkB,IAAI7N,OAEtBoM,EAAM,CAAD,gBACP,IAASxO,EAAI,EAAGA,EAAIwO,EAAMkC,MAAMxQ,OAAQF,IAClCwO,EAAMkC,MAAM1Q,GAAGW,KAAOiP,IACxBpB,EAAMkC,MAAM1Q,GAAG4Q,YAAYX,gBAAgBnF,KAAK2R,GAChDxM,EAAkBzB,EAAMkC,MAAM1Q,GAAG4Q,YAAYX,iBAEhD,iBAEKG,GAAa6f,gBAAgBhxB,EAAgB0P,EAASiB,EAAaK,GAAiBnS,OAAM,SAACC,GAAgB,IAAD,EAChF,sCAArB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBC,MACf2S,EACFyB,GAAavU,MAAMuL,EAAE,qCAErBgJ,GAAavU,MAAMuL,EAAE,gDAGvBgJ,GAAavU,MAAMuL,EAAE,2CAEzB,IAAG,KAAD,oBAEIukB,IAAY,KAAD,uCAEpB,wBACH,EC3PeqC,OA1Hf,SAA8CrnB,GAC5C,IAAQ8kB,EAAuF9kB,EAAvF8kB,QAAS1lB,EAA8EY,EAA9EZ,aAAcuG,EAAgE3F,EAAhE2F,MAAO2hB,EAAyDtnB,EAAzDsnB,+BAAgCC,EAAyBvnB,EAAzBunB,qBAC9D9mB,EAAMC,cAAND,EAER,EAAwCL,mBAAiB,IAAG,mBAArDzH,EAAY,KAAE6uB,EAAe,KACpC,EAA4BpnB,mBAAiB,IAAG,mBAAzCxH,EAAM,KAAE6uB,EAAS,KACxB,EAAwBrnB,mBAAiB,IAAG,mBAArCvH,EAAI,KAAE6uB,EAAO,KACpB,EAAoCtnB,mBAAiB,IAAG,mBAAjDpH,EAAU,KAAE2uB,EAAa,KAC1B7uB,EAAQ,KACRC,EAAU,SAEhB,OAAK+rB,EAwBH,qBAAK1jB,UAAU,iBAAgB,SAC7B,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,sBAAKA,UAAU,iBAAgB,UAC7B,6BAAKX,EAAE,qCACP,8BAAMA,EAAE,2CAGZ,qBAAKW,UAAU,YAAW,SACxB,uBAAMA,UAAU,UAAUqlB,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,UAC9D,qBAAKtlB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,+BAAiC,IAC9CuP,SAAU,SAAC1S,GAAa,OAAKkqB,EAAgBlqB,EAAM,EACnDA,MAAO3E,MAGX,qBAAKyI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,yBAA2B,IACxCuP,SAAU,SAAC1S,GAAa,OAAKmqB,EAAUnqB,EAAM,EAC7CA,MAAO1E,MAGX,qBAAKwI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CAACC,UAAWzY,EAAE,uBAAyB,IAAKuP,SAAU,SAAC1S,GAAa,OAAKoqB,EAAQpqB,EAAM,EAAEA,MAAOzE,MAEjH,qBAAKuI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,6BAA+B,IAC5CuP,SAAU,SAAC1S,GAAa,OAAKqqB,EAAcrqB,EAAM,EACjDA,MAAOtE,MAGX,qBAAKoI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CAACC,UAAWzY,EAAE,wBAA0B,IAAKuP,SAAU,SAAC1S,GAAmB,EAAGA,MAAOxE,EAAO+Q,UAAQ,MAErH,qBAAKzI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CAACC,UAAWzY,EAAE,0BAA4B,IAAKuP,SAAU,SAAC1S,GAAmB,EAAGA,MAAOvE,EAAS8Q,UAAQ,MAEzH,sBAAKzI,UAAU,QAAO,UACpB,cAAC8I,GAAqB,CACpB3R,KAAK,SACLuR,MAAOrJ,EAAE,qCACTc,QAAS,kBAsBzB,SAA4BoE,GACtB/M,GAAUD,GAAgBE,GAAQG,GAAcoG,GAClDU,EAAoB8nB,mBAAmBxoB,EAAatH,GAAIa,EAAcC,EAAQC,EAAMG,EAAYF,EAAOC,GAASoI,MAAK,WACnHmmB,GAA+B,GAE/BloB,EAAaxG,OAASA,EACtBwG,EAAazG,aAAeA,EAC5ByG,EAAavG,KAAOA,EACpBuG,EAAapG,WAAaA,EAC1BoG,EAAatG,MAAQA,EACrBsG,EAAarG,QAAUA,EAEvBwuB,EAAqB5hB,EAAOvG,EAC9B,IAGFkoB,GAA+B,EACjC,CAvC+BO,CAAmBliB,EAAM,EACxCkE,UAkBNjR,IAAWD,IAAiBE,IAASG,EAjB/BoI,UAAU,uBACVI,KAAM,CAAC,MAAO,iBAEhB,cAAC0I,GAAqB,CACpBJ,MAAOrJ,EAAE,iBACTc,QAAS,kBAAM+lB,GAA+B,EAAM,EACpDlmB,UAAU,kDA3EtB,qBAAKA,UAAU,iBAAgB,SAC7B,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,sBAAKA,UAAU,iBAAgB,UAC7B,6BAAKX,EAAE,2CAA+C,SAG1D,qBAAKW,UAAU,YAAW,SACxB,qBAAKA,UAAU,qBAAoB,SACjC,wBAAQA,UAAU,kBAAkBG,QAAS,kBAAM+lB,GAA+B,EAAM,EAAC,SACtF7mB,EAAE,6BAgGrB,ECzFe,SAASqnB,GAAU9nB,GAAwB,IAAD,gBAC/CZ,EAAyBY,EAAzBZ,aAAc9I,EAAW0J,EAAX1J,OACdwP,EAAYiiB,cAAZjiB,QAER,EAA8B1F,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAA0BxU,mBAAuB,MAAK,mBAA/CuF,EAAK,KAAEqiB,EAAQ,KACtB,EAAsB5nB,mBAAc,IAAI2C,IAAM,mBAAvCkB,EAAG,KAAEgkB,EAAM,KAClB,EAA+C7nB,mBAAiC,IAAG,mBAA5Esf,EAAgB,KAAEwI,EAAkB,KAC3C,EAA4B9nB,oBAAkB,GAAM,mBAA7C+nB,EAAM,KAAEC,EAAS,KACxB,EAAoDhoB,oBAAkB,GAAM,mBAArEioB,EAAkB,KAAEC,EAAqB,KAChD,EAAwCloB,wBAA6BnM,GAAU,mBAAxEs0B,EAAY,KAAEC,EAAe,KACpC,EAA8CpoB,mBAAiC,MAAK,mBAA7E4f,EAAe,KAAEyI,EAAkB,KAC1C,GAA0CroB,oBAAkB,GAAM,qBAA3DsoB,GAAa,MAAEC,GAAgB,MACtC,GAAsDvoB,oBAAkB,GAAM,qBAAvEwoB,GAAmB,MAAEC,GAAsB,MAClD,GAA8CzoB,mBAAwB,MAAK,qBAApEyjB,GAAe,MAAEiF,GAAkB,MAC1C,GAAoD1oB,oBAAkB,GAAM,qBAArE2kB,GAAkB,MAAEgE,GAAqB,MAChD,GAAkE3oB,oBAAkB,GAAM,qBAAnF4oB,GAAyB,MAAEC,GAA4B,MAC9D,GAAkE7oB,oBAAkB,GAAM,qBAAnF8oB,GAAyB,MAAEC,GAA4B,MAC9D,GAAgE/oB,oBAAkB,GAAM,qBAAjFgpB,GAAwB,MAAEC,GAA2B,MAC5D,GAAsDjpB,oBAAkB,GAAM,qBAAvE6iB,GAAmB,MAAEqG,GAAsB,MAClD,GAA0DlpB,oBAAkB,GAAM,qBAA3EmpB,GAAqB,MAAEC,GAAwB,MACtD,GAAgCppB,oBAAkB,GAAM,qBAAjD+jB,GAAQ,MAAEsF,GAAW,MAC5B,GAAkCrpB,mBAAsB,MAAK,qBAAtDspB,GAAS,MAAEC,GAAY,MAC9B,GAAgEvpB,oBAAkB,GAAM,qBAAjFwpB,GAAwB,MAAEC,GAA2B,MAC5D,GAA4DzpB,oBAAkB,GAAM,qBAA7E0pB,GAAsB,MAAEC,GAAyB,MACxD,GAA8C3pB,oBAAkB,GAAM,qBAA/D4pB,GAAe,MAAEC,GAAkB,MAE1C,GAAkD7pB,oBAAkB,GAAM,qBAAnE4H,GAAiB,MAAEkiB,GAAoB,MAC9C,GAAoD9pB,oBAAkB,GAAM,qBAArE+pB,GAAkB,MAAEC,GAAqB,MAChD,GAA8BhqB,qBAA+B,qBAAtDmhB,GAAO,MAAE8I,GAAU,MAE1B,GAAoCjqB,qBAA8B,qBAA3DkqB,GAAU,MAAEC,GAAa,MAChC,GAAkCnqB,qBAA8B,qBAAzDoqB,GAAS,MAAEC,GAAY,MAC9B,GAAkCrqB,qBAA8B,qBAAzDsqB,GAAS,MAAEC,GAAY,MAC9B,GAAoCvqB,qBAA8B,qBAA3DwqB,GAAU,MAAEC,GAAa,MAChC,GAAsCzqB,mBAAiB,IAAG,qBAAnD2G,GAAW,MAAE+jB,GAAc,MAClC,GAA4C1qB,qBAA8B,qBAAnEwT,GAAc,MAAEmX,GAAiB,MACxC,GAA8B3qB,oBAAkB,GAAM,qBAA/C0kB,GAAO,MAAEkG,GAAU,MAC1B,GAAgD5qB,qBAAmB,qBAA5DuiB,GAAgB,MAAEsI,GAAmB,MAEpCxqB,GAAMC,cAAND,EACFsE,GAAmBD,GAAgB2B,cAEzCxF,qBACE,WACM8P,GAAW3R,EAAatH,KAC1BkzB,GAAW3yB,EAAc6yB,oBAAoB50B,EAAQ8I,EAAatH,KAClEmzB,GAAoB5yB,EAAcuI,0BAA0BtK,EAAQ8I,EAAatH,KACjFmoB,GAAuBkL,sBAAsBhqB,MAAK,SAAC4e,GACjDxY,GACG0Z,aAAa7hB,EAAatH,GAAIgO,GAC9B3E,MAAK,SAACwE,GAAW,IAAD,EACfqiB,EAASriB,GACT0kB,GAAgB,OAAL1kB,QAAK,IAALA,GAAe,QAAV,EAALA,EAAO0C,gBAAQ,WAAV,EAAL,EAAkB,IAEzB1C,IACF8jB,GAAsC,WAA1B9jB,EAAMU,KAAKiC,YACvB4hB,GAA+C,oBAA1BvkB,EAAMU,KAAKiC,YAEF,WAA1B3C,EAAMU,KAAKiC,WACbghB,GAAuC,QAAhB3jB,EAAM7M,OACM,oBAA1B6M,EAAMU,KAAKiC,WACpBghB,GAAuC,cAAhB3jB,EAAM7M,OAAyC,cAAhB6M,EAAM7M,OAE5DwwB,GAAuC,mBAAhB3jB,EAAM7M,OAG/BiwB,KAAsBpjB,EAAMS,WAExBT,EAAM+C,kCAAkC2gB,IAA4B,GAEpE1jB,EAAMzN,OACR2M,GAAWumB,WAAWzlB,EAAMzN,OAAOiJ,MAAK,SAAC8C,GASvC,GARAgkB,EAAOhkB,GAEP4b,GAAuBwL,sBAAsBlqB,MAAK,SAACue,GACjD,IAAI4L,EAA0BjN,GAAWkN,sBAAsBtnB,GAC3DunB,EAAwC,OAAhB9L,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBngB,QAAO,SAAC0R,GAAI,OAAKqa,EAAwBpM,IAAIjO,EAAKnZ,GAAG,IACnGowB,EAAmBsD,EACrB,IAEI7lB,EAAMQ,kBAAmB,CAC3B,IAAM8H,EAAS8R,EAAiBpoB,MAAK,SAAC8zB,GAAE,OAAKA,EAAG3zB,KAAO6N,EAAMQ,iBAAiB,IAE1E8H,GACFwa,EAAmBxa,EAEvB,CACF,IAGN,IACChZ,OAAM,SAACC,GAAW,IAAD,EAChBuU,GAAavU,MAAMuL,GAAE,2BAA4B,CAAE3K,OAAa,OAALZ,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,SAC9E,IACCmiB,SAAQ,WACPrD,GAAW,EACb,GACJ,IAEJ,GAEA,CAAC9O,EAAS1G,EAAcykB,KAG1B5iB,qBAAU,WACR,IAAMyqB,EAAkBC,YAAYlT,GAAS,KAC7C,OAAO,kBAAMmT,cAAcF,EAAiB,CAC9C,GAAG,CAAC3a,IAEJ,IAAMwW,GAAuB5Z,sBAAW,iDACtC,WAAOhI,EAAcvG,GAA0B,wFAEvCuI,GAAakkB,wBAAwBlmB,GAAO,CAAD,oBACzCmmB,GAAgBnmB,EAAOvG,GAAc,CAAD,eAEJ,OADlC6pB,IAA6B,GAC7BY,IAA4B,GAAM,0BAIA,OAApCZ,IAA6B,GAAO,SAC9B1hB,GAAaggB,qBAAqB5hB,EAAMvP,eAAekS,WAAY3C,EAAM7N,IAAI,KAAD,mBAC5E2gB,KAAU,KAAD,GACfwQ,IAA6B,GAAO,0DAGtCxf,GAAavU,MAAMuL,GAAE,yBAAyB,0DAEjD,qDAlBqC,GAmBtC,CAACgY,KAGCsT,GAAW,GACXxV,GAAWvZ,EAAcyB,YAAiB,OAALkH,QAAK,IAALA,GAAe,QAAV,EAALA,EAAO4Q,gBAAQ,WAAV,EAAL,EAAiB9d,UAAgB,OAALkN,QAAK,IAALA,GAAe,QAAV,EAALA,EAAO4Q,gBAAQ,WAAV,EAAL,EAAiB7d,UAClF6d,IACFwV,GAAS9pB,KAAKsU,IAGhB,IAAI9f,IAAa,OAALkP,QAAK,IAALA,GAAe,QAAV,EAALA,EAAO4Q,gBAAQ,WAAV,EAAL,EAAiB9f,QAAS,GAClCA,IACFs1B,GAAS9pB,KAAKxL,IAGhB,IAAIyC,IAAa,OAALyM,QAAK,IAALA,GAAe,QAAV,EAALA,EAAO4Q,gBAAQ,WAAV,EAAL,EAAiBrd,QAAS,GAClCA,IACF6yB,GAAS9pB,KAAK/I,IAGhB,IAAI8yB,IAAa,OAALrmB,QAAK,IAALA,GAAe,QAAV,EAALA,EAAO4Q,gBAAQ,WAAV,EAAL,EAAiB/d,cAAe,GACxCwzB,IACFD,GAAS9pB,KAAK,GAAD,OAAIxB,GAAE,+BAA8B,qBAAaurB,GAAK,cAGrE,IAAIjJ,GAAmBgJ,GAASE,KAAK,SAEjCrJ,GAAiB,OAAH3e,QAAG,IAAHA,GAAa,QAAV,EAAHA,EAAKV,gBAAQ,OAAwC,QAAxC,EAAb,EAAe5L,MAAK,SAAC8mB,GAAC,OAAKA,EAAE3mB,MAAY,OAAL6N,QAAK,IAALA,OAAK,EAALA,EAAOS,UAAS,WAAC,WAAlD,EAAH,EAAuD1G,KAEzE,OACE,iCAC6B,MAyiB1ByoB,IACAO,KACAsB,KACApB,KACAI,KACAE,KACAK,KACAK,KACAO,KACAL,KAjjBC,sBAAK1oB,UAAU,4BAA2B,UACxC,qBAAKA,UAAU,kBAAiB,SAC9B,qBAAIA,UAAU,aAAY,UACxB,oBAAIA,UAAU,yBAAwB,SACpC,cAAC,IAAI,CAACA,UAAU,GAAGK,GAAG,UAAS,SAC5BhB,GAAE,4BAGP,oBAAIW,UAAU,yBAAwB,SAAE0E,UAI1CiL,IAAYpL,GACZ,qBAAKvE,UAAU,mBAAkB,SAC/B,4BAAIX,GAAE,mCAIV,sBAAKW,UAAU,gCAA+B,UAC5C,sBAAKA,UAAU,SAAQ,UACrB,sBAAKA,UAAU,kBAAiB,UAC9B,oBAAIA,UAAU,iBAAgB,mBAAKX,GAAE,oBAAmB,aAAKqF,KAE5Dgf,IAAuC,aAAvB,OAALnf,QAAK,IAALA,GAAW,QAAN,EAALA,EAAOU,YAAI,WAAN,EAAL,EAAaiC,aACvB,wBACE/P,KAAK,SACL6I,UAAU,0CACVG,QAAS,kBAAM0oB,IAAmB,EAAK,EACvCpgB,WAAUga,KAAmClc,GAAaukB,iBAAiBvmB,GAAO,SAEjFlF,GAAE,kCAIT,qBAAKW,UAAU,cAAa,SACzBuE,GACC,cAACyL,GAAmB,CAClBtY,MAAO6M,EAAM7M,MACbkP,kBAAmBrC,EAAMU,KAAKiC,aAAeb,GAAqBmB,uBAM1E,cAACkI,GAAgB,CAACC,QAASA,IAE1BpL,GAASvG,GAAgB0G,GACxB,qCACE,sBAAK1E,UAAU,MAAK,UAClB,cAAC0hB,GAAa,CACZC,iBAAkBA,GAClBC,8BAA+BmJ,QAAQ11B,IAASyC,IAChD+pB,oBAAqBA,GACrBC,wBAAyBiB,IAAYnc,GACrCmb,mBAAoB,kBAAMqG,IAAyB,EAAK,IAG1D,cAAC9G,GAAY,CACX/c,MAAOA,EACP1B,IAAKA,EACL0e,iBAAkBA,GAClB7X,SAAUF,GAAY0G,aACtB0O,gBAAiBA,EACjB4C,YAAaA,KAGf,cAACd,GAAuB,CACtBnc,MAAOA,EACP4b,QAASA,GACTvZ,kBAAmBA,GACnB8C,SAAUF,GAAY0G,kBAI1B,cAAC,GAAgB,CACf3L,MAAOA,EACPG,QAASA,EACT1G,aAAcA,EACd6E,IAAKA,EACL6gB,QAASA,GACTnC,iBAAkBA,GAClBoC,mBAAoBA,GACpB/c,kBAAmBA,GACnBmc,SAAUA,GACVN,gBAAiBA,GACjBnE,iBAAkBA,EAClBsF,UAAWvM,GACXwM,uBAAwB,SAACle,EAAqB6M,GAC5CkX,GAAe/jB,GACfgkB,GAAkBnX,GAClBmW,IAA0B,EAC5B,EACA7E,oBAydhB,WACM7G,GAAWW,YAAY/a,EAAInL,QAC7BwvB,GAAsB,GACtBF,GAAU,IAEV3e,GAAavU,MAAMuL,GAAE,uCAEzB,EA/dgB0kB,kBAiehB,SAA2B/uB,EAAwB0P,EAAiBiB,EAAqBqlB,GAC9D,QAArBA,EAML,SAE6B,EAAD,8BAPzBC,CAAej2B,EAAgB0P,EAASiB,GACV,mBAArBqlB,IACTvD,IAAuB,GACvBiC,GAAe/jB,GAEnB,EAvegBqe,SAsff,SAEuB,EAAD,0CArfT,sBAAKhkB,UAAU,OAAM,UAElB2jB,IACC,sCACIqE,IACA,cAAClf,GAAqB,CACpBJ,MAAOrJ,GAAE,qCACTc,QAAS,kBAAM0nB,IAA6B,EAAK,EACjDpf,WAAUga,KAAmClc,GAAakkB,wBAAwBlmB,GAClFvE,UAAU,uBACVI,KAAM,CAAC,MAAO,iBAIjB4nB,IACC,qCACE,cAAClf,GAAqB,CACpBJ,MAAOrJ,GAAE,oCACTc,QAAS,kBAAM4nB,IAA6B,EAAK,EACjDtf,WAAUga,KAAmClc,GAAa2kB,uBAAuB3mB,GACjFvE,UAAU,+BACVI,KAAM,CAAC,MAAO,SAGhB,cAAC0I,GAAqB,CACpBJ,MAAOrJ,GAAE,6BACTc,QAAS,kBAsMnC,SAA0BnL,EAAwB0P,GAChD,IAAMymB,EAAW,SAAC7C,GAAqB,IAAD,EAC9B/0B,EAAMuQ,OAAOsnB,IAAIC,gBAAgB/C,GACjCgD,EAAOrQ,SAASsQ,cAAc,KACpCD,EAAKE,KAAOj4B,EACZ+3B,EAAKG,aAAa,WAAW,SAAD,OAAW/mB,EAAO,SAC9CuW,SAASyQ,KAAKC,YAAYL,GAC1BA,EAAKM,QACU,QAAf,EAAAN,EAAKO,kBAAU,OAAf,EAAiBC,YAAYR,EAC/B,EAEA,GAAIhD,GAEF,YADA6C,EAAS7C,IAIXniB,GACG4lB,SAAS/2B,EAAgB0P,EAAS,KAClC3E,MAAK,SAACtK,GACDA,IACF8yB,GAAa9yB,GACb01B,EAAS11B,GAEb,IACC5B,OAAM,SAACC,GACNuU,GAAavU,MAAMuL,GAAE,mCACvB,GACJ,CAjOyC2sB,CAAiBhuB,EAAatH,GAAIgO,EAAQ,EACzD+D,WAAUga,KAAmClc,GAAa2kB,uBAAuB3mB,GACjFvE,UAAU,+BACVI,KAAM,CAAC,MAAO,eAQvBwG,IAAqBuZ,IAAWA,GAAQ3jB,OAAS,EAChD,mCACE,cAACsM,GAAqB,CACpBJ,MAAOrJ,GAAE,6BACTc,QAAS,kBAAM6oB,IAAsB,EAAK,EAC1CvgB,UAAWlC,GAAaya,eAAezc,GACvCvE,UAAU,+BACVI,KAAM,CAAC,MAAO,mBAIlB,mCACE,cAACoI,GAAqB,CACpBE,MAAOrJ,GAAE,2BACTc,QAAS,kBAAMonB,IAAiB,EAAK,EACrC9e,WAAUga,KAAmClc,GAAa0lB,eAAe1nB,UAMjF,cAAC+b,GAAY,CAAC/b,MAAOA,EAAOrP,OAAQA,cAO5CyuB,IAAsBoD,GACtB,qBAAK/mB,UAAU,6BAA4B,SACzC,qBAAKA,UAAU,0CAAyC,SACtD,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,GAAE,kCAET,wBAAQW,UAAU,sBAAsBG,QAAS,kBAAM+rB,IAAY,OAErE,sBAAKlsB,UAAU,YAAW,UACvBse,GAAoBtgB,EAAatH,IAChC,uBAAOsJ,UAAU,iCAAgC,SAC/C,gCACGse,EAAiBpR,KAAI,SAACsR,GACrB,OACE,oBAEEre,QAAS,WACF8mB,GAgLhC,SAEgC,EAAD,8BAlLqBkF,CAAkBnuB,EAAatH,GAAIgO,EAAS8Z,EAAgB9nB,GACvF,EAAE,SAEF,+BACG8nB,EAAgBlgB,KAAK1K,IAAI+P,IAAU,KAAG6a,EAAgB3c,YAAYjO,IAAI+P,QANpE6a,EAAgB9nB,GAU3B,QAKLywB,GAAgB,uBAAOnnB,UAAU,yBAAwB,SAAEmnB,cAOrExD,IAAsBoD,GACrB,qBAAK/mB,UAAU,6BAA4B,SACzC,qBAAKA,UAAU,mDAAkD,SAC/D,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,GAAE,iCAET,wBAAQW,UAAU,sBAAsBG,QAAS,kBAAM+rB,IAAY,OAErE,sBAAKlsB,UAAU,YAAW,UACvBse,GAAoBtgB,EAAatH,IAChC,uBAAM2uB,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,UAC1C,uBAAOtlB,UAAU,aAAY,SAAEX,GAAE,kCACjC,uBACEW,UAAU,eACV9D,MAAOgtB,GACP7b,SAAU,SAAC2K,GAAE,OAAKmR,GAAcnR,EAAGvL,OAAOvQ,MAAM,EAChDmc,UAAQ,EACRC,WAAW,IAEb,uBAAOtY,UAAU,kBAAiB,SAAEX,GAAE,iCACtC,uBAAOW,UAAU,eAAe9D,MAAOktB,GAAW/b,SAAU,SAAC2K,GAAE,OAAKqR,GAAarR,EAAGvL,OAAOvQ,MAAM,EAAEmc,UAAQ,IAC3G,uBAAOrY,UAAU,kBAAiB,SAAEX,GAAE,iCACtC,uBAAOW,UAAU,eAAe9D,MAAOotB,GAAWjc,SAAU,SAAC2K,GAAE,OAAKuR,GAAavR,EAAGvL,OAAOvQ,MAAM,EAAEmc,UAAQ,IAC3G,uBAAOrY,UAAU,kBAAiB,SAAEX,GAAE,kCACtC,uBAAOW,UAAU,eAAe9D,MAAOstB,GAAYnc,SAAU,SAAC2K,GAAE,OAAKyR,GAAczR,EAAGvL,OAAOvQ,MAAM,EAAEmc,UAAQ,IAC7G,wBACErY,UAAU,8BACV7I,KAAK,SACLgJ,QAAS,kBAgP5B,SAEsB,GAAD,gCAlPaisB,CAAQpuB,EAAatH,GAAG,EACvC+R,SAAUwe,EAAmB,SAE5B5nB,GAAE,4BAKR8nB,GAAgB,uBAAOnnB,UAAU,yBAAwB,SAAEmnB,cAMrEG,IAAiBtpB,GAAgBuG,GAChC,cAACua,GAAc,CACbG,UAAW5f,GAAE,+BACb8f,WAAY,kBAwInB,SAE0B,EAAD,mCA1IAkN,CAAYruB,EAAatH,GAAI6N,EAAM,EACrD6a,UAAWmI,KAIdqB,IAAmB5qB,GAAgBuG,GAASmf,IAAWnd,GAAaukB,iBAAiBvmB,IACpF,cAACua,GAAc,CACbG,UAAW5f,GAAE,iCACb8f,WAAY,kBAiJnB,SAE4B,EAAD,mCAnJFmN,CAActuB,EAAatH,GAAI6N,EAAM,EACvD6a,UAAWyJ,KAIdH,IAA0B1qB,GAAgBuG,GAASoB,IAAe6M,IACjE,cAACsM,GAAc,CACbG,UAAW5f,GAAE,iCAAkC,CAAEmT,eAAgBA,KACjE2M,WAAY,kBA6JnB,SAEmC,EAAD,uCA/JToN,CAAqBvuB,EAAatH,GAAI6N,EAAOoB,GAAa6M,GAAe,EAC3F4M,UAAWuJ,KAIdI,IAAsB/qB,GAAgBuG,GACrC,cAACua,GAAc,CACbG,UAAW5f,GAAE,+BACb8f,WAAY,kBAoKnB,SAE0B,EAAD,mCAtKAqN,CAAYxuB,EAAatH,GAAI6N,EAAM,EACrD6a,UAAW4J,KAIdpB,IAA6BrjB,GAC5B,cAACua,GAAc,CACbG,UAAW5f,GAAE,4CACb8f,WAAY,kBAAMgH,GAAqB5hB,EAAOvG,EAAa,EAC3DohB,UAAWyI,KAIdC,IAA6BvjB,GAC5B,cAACua,GAAc,CACbG,UAAW5f,GAAE,4CACb8f,WAAY,kBAyKnB,SAEkC,GAAD,gCA3KRsN,CAAoBloB,EAAM,EAC5C6a,UAAW2I,KAIdI,IAAyBnqB,GAAgB0G,GACxC,cAACoa,GAAc,CACbG,UAAsB5f,GAAX0jB,GAAa,0CAA+C,oCACvE5D,WAAY,kBAsDpB,SAA0BnqB,EAAwB0P,GAC5Cmd,KACF1b,GAAaumB,+BAA+B13B,EAAgB0P,GAAS7Q,OAAM,SAACC,GAC1E,IAEFs0B,IAAyB,GAE7B,CA7D0BuE,CAAiB3uB,EAAatH,GAAIgO,EAAQ,EAC5D0a,UAAWgJ,KAIdI,IAA4BxqB,GAAgBuG,GAC3C,cAAC,GAAoC,CACnCmf,QAASA,GACT1lB,aAAcA,EACduG,MAAOA,EACP2hB,+BAAgCuC,GAChCtC,qBAAsBA,KAIzBqB,IAAuBxpB,GAAgB0G,GAAWH,GACjD,cAAC8a,GAA4B,CAC3BJ,UAAW5f,GAAE,2DACb8f,WAAY,kBAkNnB,SAEsC,EAAD,qCApNZyN,CAAwB5uB,EAAatH,GAAIgO,EAASiB,GAAY,EAChFyZ,UAAWqI,QA4Ca,cAoB/B,OApB+B,mCAAhC,WAAiCzyB,EAAwB0P,EAAiBY,GAAc,iFAC1D,OAA5B4hB,GAAsB,GAAM,kBAEH/gB,GAAa0mB,gBAAgB73B,EAAgB0P,EAASY,GAAQ,KAAD,EAAtE,WACD,CAAD,gBACO,OAAjB0hB,GAAU,GAAO,SACX3P,KAAU,KAAD,EACfqS,GAAe,IACftC,OAAgBv0B,GAAW,wBAE3Bu0B,EAAgB/nB,GAAE,+BAA+B,0DAGnB,OAA5B,4BAAe,QAAf,OAAOrL,gBAAQ,WAAf,IAAiBU,QACnB0yB,EAAgB/nB,GAAE,+BAElBgJ,GAAavU,MAAMuL,GAAE,yBACtB,QAEH6nB,GAAsB,GAAO,0DAC9B,kCAEcgF,KAAU,8CAGxB,OAHwB,mCAAzB,wFACE9E,OAAgBv0B,GAChBm0B,GAAU,GAAO,4CAClB,sBAEyB,cAezB,OAfyB,mCAA1B,WAA2BhyB,EAAwBuP,GAAY,8FAEvDgC,GAAa0lB,eAAe1nB,GAAO,CAAD,eACZ,OAAxBgjB,IAAiB,GAAO,SAClBphB,GAAakmB,YAAYr3B,EAAgBuP,EAAM7N,IAAI,KAAD,kBAClD2gB,KAAU,KAAD,EACfkQ,IAAiB,GAAO,yDAGM,OAA5B,4BAAe,QAAf,OAAOvzB,gBAAQ,WAAf,IAAiBU,QACnB2T,GAAavU,MAAMuL,GAAE,uCAErBgJ,GAAavU,MAAMuL,GAAE,yBACtB,0DAEJ,yBAE2B,cAkB3B,OAlB2B,mCAA5B,WAA6BrK,EAAwBuP,GAAY,gGAEzDmf,KAAWnd,GAAaukB,iBAAiBvmB,GAAM,oBAC7CA,EAAM+C,mCAAoC/C,EAAMS,UAAS,gCACrDmB,GAAasmB,oBAAoBz3B,EAAgBuP,EAAM7N,IAAI,KAAD,kBAG5DyP,GAAa2mB,mBAAmB93B,EAAgBuP,EAAM7N,IAAI,KAAD,kBACzD2gB,KAAU,KAAD,oDAGe,OAA5B,4BAAe,QAAf,OAAOrjB,gBAAQ,WAAf,IAAiBU,SAA4C,sBAA1B,4BAAe,QAAf,OAAOV,gBAAQ,WAAf,IAAiBC,MACtDoU,GAAavU,MAAMuL,GAAE,oCAErBgJ,GAAavU,MAAMuL,GAAE,yBACtB,QAEHwpB,IAAmB,GAAO,0DAC3B,yBAEkC,cAalC,OAbkC,mCAAnC,WAAoC7zB,EAAwBuP,EAAcoB,EAAqB6M,GAAsB,mFAOhH,OANC9L,EAAYH,GAAawmB,aAAaxoB,EAAOoB,GAC7CK,EAA8B,GACzB,OAATU,QAAS,IAATA,KAAWC,YAAYX,gBAAgB3H,SAAQ,SAAC2uB,GAC1Cxa,IAAmBwa,GACrBhnB,EAAgBnF,KAAKmsB,EAEzB,IAAG,SACG7mB,GACH6f,gBAAgBhxB,EAAgB0P,EAASiB,EAAaK,GAAiB,GACvEnS,OAAM,SAACC,GAAU,OAAKuU,GAAavU,MAAMuL,GAAE,2CAA2C,IAAE,KAAD,kBACpFgY,KAAU,KAAD,EACfsR,IAA0B,GAAO,2CAClC,yBAEyB,cAmBzB,OAnByB,mCAA1B,WAA2B3zB,EAAwBuP,GAAY,8FAEvDgC,GAAaya,eAAezc,GAAO,CAAD,eACP,GAA7BykB,IAAsB,IAElBzkB,EAAM0C,SAAS,CAAD,+BACVoZ,GAAe4M,cAAc1oB,EAAM0C,SAAS,GAAGvQ,IAAI,KAAD,kBAClD2gB,KAAU,KAAD,EAGjB2R,IAAsB,GAAO,yDAGC,OAA5B,4BAAe,QAAf,OAAOh1B,gBAAQ,WAAf,IAAiBU,QACnB2T,GAAavU,MAAMuL,GAAE,uCAErBgJ,GAAavU,MAAMuL,GAAE,yBACtB,0DAEJ,yBAEiC,cAYjC,OAZiC,mCAAlC,WAAmCkF,GAAY,wFAEvCgC,GAAa2kB,uBAAuB3mB,GAAO,CAAD,eACR,OAApCwjB,IAA6B,GAAO,SAE9B5hB,GAAasmB,oBAAoBloB,EAAMvP,eAAekS,WAAY3C,EAAM7N,IAAI,KAAD,kBAC3E2gB,KAAU,KAAD,EACf0Q,IAA6B,GAAO,yDAGtC1f,GAAavU,MAAMuL,GAAE,yBAAyB,0DAEjD,yBAEqB,cAmDrB,OAnDqB,mCAAtB,WAAuBrK,GAAsB,+FAI4B,GAHnEuQ,EAAS2nB,OAAOC,WAAWjE,GAAaA,GAAWkE,UAAY,IAC/D5nB,EAAQ0nB,OAAOC,WAAW/D,GAAYA,GAAUgE,UAAY,IAC5D3nB,EAAQynB,OAAOC,WAAW7D,GAAYA,GAAU8D,UAAY,IAC5D1nB,EAASwnB,OAAOC,WAAW3D,GAAaA,GAAW4D,UAAY,IAE9D7nB,GAAWC,GAAUC,GAAUC,EAAM,gBACY,OAApD2C,GAAavU,MAAMuL,GAAE,+BAA+B,0BAItD6nB,GAAsB,GAClB5hB,EAAS,GACJvP,EAAI,EAAE,KAAD,QAAEA,EAAIuoB,EAAiBroB,QAAM,iBACT,MAA5Bo3B,EAAQ/O,EAAiBvoB,IAGpBwP,QAAUA,IAAY8nB,EAAM7nB,OAASA,GAAS6nB,EAAM5nB,OAASA,GAAW4nB,EAAM5nB,OAASD,GAAS6nB,EAAM7nB,OAASC,IACrH4nB,EAAM9nB,QAAUC,IAAW6nB,EAAM7nB,OAASD,GAAU8nB,EAAM5nB,OAASA,GAAW4nB,EAAM5nB,OAASF,GAAU8nB,EAAM7nB,OAASC,IACtH4nB,EAAM9nB,QAAUE,IAAW4nB,EAAM7nB,OAASA,GAAS6nB,EAAM5nB,OAASF,GAAY8nB,EAAM5nB,OAASD,GAAS6nB,EAAM7nB,OAASD,IAAS,iBAE7G,OAAlBD,EAAS+nB,EAAM32B,GAAG,6BARuBX,IAAG,2BAa3CuP,EAAO,CAAD,gBAEoB,OAD7B8hB,EAAgB/nB,GAAE,8BAClB6nB,GAAsB,GAAO,sDAKN/gB,GAAa0mB,gBAAgB73B,EAAgB0P,EAASY,EAAQC,EAAQC,EAAOC,EAAOC,GAAQ,KAAD,GAApG,WACD,CAAD,gBACO,OAAjBshB,GAAU,GAAO,UACX3P,KAAU,KAAD,GACfqS,GAAe,IACftC,OAAgBv0B,GAChBq0B,GAAsB,GAAO,wBAE7BE,EAAgB/nB,GAAE,8BAClB6nB,GAAsB,GAAO,2DAGC,OAA5B,4BAAe,QAAf,OAAOlzB,gBAAQ,WAAf,IAAiBU,QACnB0yB,EAAgB/nB,GAAE,8BAElBgJ,GAAavU,MAAMuL,GAAE,yBACtB,4DAEJ,sBAEqC,cAsBrC,OAtBqC,mCAAtC,WAAuCrK,EAAwB0P,EAAiBiB,GAAmB,2EAEnE,OAD9B+hB,GAAmB/hB,GACnB8hB,IAAuB,GAAO,SAExBthB,GACH6d,SAAShvB,EAAgB0P,EAASiB,EAAa,aAAc,MAC7D5F,KAAI,gCAAC,wGACEoG,GAAamnB,gBAAgBt4B,EAAgB0P,EAASiB,GAAa,KAAD,kBAClE0R,KAAU,KAAD,uCAEhBxjB,OAAM,SAACC,GAAW,IAAD,IACgB,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,GAAE,8BACgB,OAAvB,OAALvL,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QAC1B2T,GAAavU,MAAMuL,GAAE,kCAErBgJ,GAAavU,MAAMuL,GAAE,wBAEzB,IACCwX,QAAO,gCAAC,wGACD6Q,GAAmB,MAAM,KAAD,uCAC7B,KAAD,sCACL,yBAmC4B,cAa5B,OAb4B,mCAA7B,WAA8B1yB,EAAwB0P,EAAiBiB,GAAmB,0GAEhFQ,GAAaonB,gBAAgBv4B,EAAgB0P,EAASiB,GAAa,KAAD,EAE1C,OAD9B+jB,GAAe,IACfjC,IAAuB,GAAO,SACxBpQ,KAAU,KAAD,kDAEiB,OAA5B,4BAAe,QAAf,OAAOrjB,gBAAQ,WAAf,IAAiBU,QACnB2T,GAAavU,MAAMuL,GAAE,uCAErBgJ,GAAavU,MAAMuL,GAAE,yBACtB,yDAEJ,yBAEsB,cAqCtB,OArCsB,mCAAvB,WAAwBrK,EAAwB0P,EAAiBiB,EAAqBjO,GAAa,qFAE7FqrB,GAAS,CAAD,kBACI,mBAAVrrB,EAA0B,gBAC5BoO,EAAS,SAAS,iFAKN,QAAVpO,EAAe,iBACjBoO,EAAS,UAAU,2BACA,4BAAVpO,EAAmC,iBAC5CoO,EAAS,kBAAkB,0DAM/B4hB,GAAmB/hB,GAEnBQ,GACG6d,SAAShvB,EAAgB0P,EAASiB,EAAaG,EAAQ,MACvD/F,KAAI,gCAAC,wGACEsX,KAAU,KAAD,uCAEhBxjB,OAAM,SAACC,GAAW,IAAD,IACgB,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,GAAE,8BACgB,OAAvB,OAALvL,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QAC1B2T,GAAavU,MAAMuL,GAAE,kCAErBgJ,GAAavU,MAAMuL,GAAE,wBAEzB,IACCwX,SAAQ,WACP6Q,GAAmB,KACrB,IAAG,4CACN,kCAEcrQ,KAAO,8CAwBrB,OAxBqB,mCAAtB,iGACO1H,IAAW3R,EAAatH,GAAE,0CAEPyP,GAAa0Z,aAAa7hB,EAAatH,GAAIgO,GAAS,KAAD,GAAjEH,EAAK,UAETqiB,EAASriB,GAGP2jB,GADEnF,GACqC,QAAhBxe,EAAM7M,MACpBkP,GAC8B,cAAhBrC,EAAM7M,OAAyC,cAAhB6M,EAAM7M,MAErB,mBAAhB6M,EAAM7M,OAGtB,OAAL6M,QAAK,IAALA,KAAO+C,iCACT2gB,IAA4B,IAE5BA,IAA4B,GAC5BM,GAAa,QAEhB,0GAGN,sBACH,CAEA,SAASmC,GAAgBnmB,EAAcvG,GACrC,OAAIuG,EAAMvP,eAAekS,aAAelJ,EAAatH,KAK7B,KAAtBsH,EAAavG,MACS,OAAtBuG,EAAavG,MACY,KAAzBuG,EAAarG,SACY,OAAzBqG,EAAarG,SACe,KAA5BqG,EAAapG,YACe,OAA5BoG,EAAapG,YACW,KAAxBoG,EAAaxG,QACW,OAAxBwG,EAAaxG,QACiB,KAA9BwG,EAAazG,cACiB,OAA9ByG,EAAazG,cACU,KAAvByG,EAAatG,OACU,OAAvBsG,EAAatG,OACY,KAAzBsG,EAAarG,SACY,OAAzBqG,EAAarG,QAEjB,C,wCC32Be,SAAS61B,GAAkB5uB,GACxC,IAAQ1J,EAAyD0J,EAAzD1J,OAAQ2J,EAAiDD,EAAjDC,mBAAoB4uB,EAA6B7uB,EAA7B6uB,yBAE9B9sB,EAAUC,cAEhB,EAAkC5B,mBAA+C9J,EAAOoB,yBAAjFA,EAAyG,iBAAlF,GAEtB+I,EAAMC,cAAND,EAER,OACE,qBAAKW,UAAU,yCAAwC,SACrD,qBAAKA,UAAU,MAAK,SAElB,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,6BAAKX,EAAE,gCAGT,qBAAKW,UAAU,YAAW,SACxB,qBAAKA,UAAU,SAAQ,SACrB,wBAAOA,UAAU,iCAAgC,UAC/C,gCACE,+BACE,uBACA,6BAAKX,EAAE,qCACP,6BACGpI,EAAcb,gBAAgBlB,IAC7B,cAACyT,GAAkB,CACjBD,MAAO,sBACPvI,QAAS,kBAAMQ,EAAQE,KAAK,uBAAuB,MAIzD,4BAGJ,kCACG3L,GACCoB,GACAA,EAAwB4W,KAAI,SAACwgB,GAA4B,IAAD,IAChDxa,KACJrU,GACAA,EAAmBpI,QACnBi3B,EAAuBj3B,QACvBi3B,EAAuBj3B,OAAOC,KAAOmI,EAAmBpI,OAAOC,IAIjE,OACE,qBAEEyJ,QAAS,wBAAMQ,EAAQE,KAAK,iBAAD,OAA+C,QAA/C,EAAkB6sB,EAAuBj3B,cAAM,aAA7B,EAA+BC,IAAK,EAAC,UAElF,6BAAKwc,GAAW,cAAC,IAAe,CAAClT,UAAU,eAAeI,KAAM,CAAC,MAAO,oBACxE,6BAAkC,QAAlC,EAAKstB,EAAuBj3B,cAAM,aAA7B,EAA+B6H,OACpC,8BACI4U,GACA,wBACElT,UAAU,uBACVG,QAAS,SAAC6X,GACRA,EAAG2V,kBACHF,EAAyBC,EAC3B,EAAE,SAEDruB,EAAE,8CAIT,6BACE,wBACEW,UAAU,0BACVG,QAAS,SAAC6X,GAAQ,IAAD,EACfA,EAAG2V,kBACHhtB,EAAQE,KAAK,iBAAD,OAA+C,QAA/C,EAAkB6sB,EAAuBj3B,cAAM,aAA7B,EAA+BC,IAC/D,EAAE,SAEF,cAAC,IAAe,CAAC0J,KAAM,CAAC,MAAO,eA1BD,QA4B7B,EA5BAstB,EAAuBj3B,cAAM,aAA7B,EAA+BC,GA+B1C,MACCxB,IAAWoB,IACZ,6BACE,oBAAIub,QAAS,EAAE,SAAExS,EAAE,uEAY3C,CCjHe,SAASuuB,KACtB,OACE,mCACE,qBAAK5tB,UAAU,eAAc,SAC3B,qBAAKQ,IAAI,2BAA2BC,IAAI,QAIhD,CCmBA,SAASotB,GAAqBjvB,GAC5B,IAAQlH,EAAUkH,EAAVlH,MACA2H,EAAMC,cAAND,EAER,OAAO,mCAAGA,EAAE,yBAAD,OAA0B3H,KACvC,CAEe,SAASo2B,GAAiBlvB,GAAe,IAAD,IAC7C1J,EAAyB0J,EAAzB1J,OAAQ6J,EAAiBH,EAAjBG,aACR/J,EAAmB2xB,cAAnB3xB,eACAqK,EAAMC,cAAND,EACR,EAA8BL,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAE1B,EAAoDxU,wBAA6CnM,GAAU,mBAApGgM,EAAkB,KAAEkvB,EAAqB,KAChD,EAAgD/uB,wBAA6BnM,GAAU,mBAAhFm7B,EAAgB,KAAEC,EAAmB,KAC5C,EAAwCjvB,wBAA6BnM,GAAU,mBAAxE0E,EAAY,KAAE6uB,EAAe,KACpC,EAAkDpnB,wBAA6BnM,GAAU,mBAAlFq7B,EAAiB,KAAEC,EAAoB,KAC9C,EAA4BnvB,wBAA6BnM,GAAU,mBAA5D2E,EAAM,KAAE6uB,EAAS,KACxB,EAAwBrnB,wBAA6BnM,GAAU,mBAAxD4E,EAAI,KAAE6uB,EAAO,KACpB,EAAoCtnB,wBAA6BnM,GAAU,mBAApE+E,EAAU,KAAE2uB,EAAa,KAChC,EAA0BvnB,mBAAiB,IAAG,mBAAvCtH,EAAK,KAAEkb,EAAQ,KACtB,EAA8B5T,mBAAiB,IAAG,oBAA3CrH,GAAO,MAAEy2B,GAAU,MAEpB1K,GAAUzsB,EAAc6yB,oBAAoB50B,EAAQF,GAE1D,GAAgDgK,mBAAiB,GAAE,qBAA5DG,GAAgB,MAAEC,GAAmB,MAEtCuB,GAAUC,cA2BhB,OAzBAf,qBAAU,WACR,IACkB,kBADd7B,EAAe9I,EAAOoB,wBAAwBC,MAAK,SAACyH,GAAY,aAAwB,QAAnB,EAAAA,EAAavH,cAAM,aAAnB,EAAqBC,KAAM1B,CAAc,IAC9GgJ,IACF+vB,EAAsB/vB,GACtBiwB,EAAuC,QAApB,EAACjwB,EAAavH,cAAM,aAAnB,EAAqB6H,MACzCgoB,EAA2B,QAApB,EAACtoB,EAAavH,cAAM,aAAnB,EAAqBgB,MAC7B8uB,EAAiC,QAApB,EAACvoB,EAAavH,cAAM,aAAnB,EAAqBmB,YAEnCyuB,EAA6B,QAApB,EAACroB,EAAavH,cAAM,aAAnB,EAAqBe,QAC/B4uB,EAAmC,QAApB,EAACpoB,EAAavH,cAAM,aAAnB,EAAqBc,cAErC62B,GAA8B,QAAnB,EAAApwB,EAAavH,cAAM,OAAnB,EAAqBkB,QAA6B,QAAtB,EAAGqG,EAAavH,cAAM,aAAnB,EAAqBkB,QAAU,UACzEib,EAA4B,QAAnB,EAAA5U,EAAavH,cAAM,OAAnB,EAAqBiB,MAA2B,QAAtB,EAAGsG,EAAavH,cAAM,aAAnB,EAAqBiB,MAAQ,MACnEgH,EACGoB,+BAA+B9K,GAC/B+K,MAAK,SAAC7B,GACLkB,GAAoBlB,EAAWjI,QAC/Bud,GAAW,EACb,IACC3f,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,oCACvB,IAEN,GAAG,IAGD,sBAAKW,UAAU,yCAAwC,UACpD2P,GAAW,cAACie,GAAgB,KAC3Bje,GACA,qCACE,sBAAK3P,UAAU,8BAA6B,UAC1C,sBAAKA,UAAU,kBAAiB,UAC9B,qBAAIA,UAAU,aAAY,UACxB,oBAAIA,UAAU,yBAAwB,SACpC,cAAC,IAAI,CAACA,UAAU,aAAaK,GAAG,iBAAgB,SAC7ChB,EAAE,4BAGP,oBAAIW,UAAU,yBAAwB,SAAEguB,OAE1C,uCAAQA,QAIY,IAArB7uB,IAA0BjK,GAAU+B,EAAcuI,0BAA0BtK,EAAQF,IACnF,8BACE,cAAC,IAAI,CAACgL,UAAU,8BAA8BK,GAAE,yBAAoBrL,EAAc,eAAc,SAC7FqK,EAAE,4CAOX,qBAAKW,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,wBAAQA,UAAU,sBAAsBG,QAAS,kBAAMQ,GAAQE,KAAK,iBAAiB,IACrF,6BAAKxB,EAAE,kCAET,qBAAKW,UAAU,YAAW,SACxB,uBAAMA,UAAU,UAAUqlB,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,UAC9D,qBAAKtlB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACb1gB,KAAK,SACL8gB,OAAQ,WACRH,UAAWzY,EAAE,+BAAiC,IAC9CuP,SAAU,SAAC1S,GACTkqB,EAAgBlqB,GAChBN,EAAcyyB,oBAAoBnyB,GAC9BiyB,OAAqBt7B,GACrBs7B,EAAqB9uB,EAAE,sCAC7B,EACAnD,MAAO3E,GAA8B,GACrCkR,UAAWib,GACXlL,SAAU0V,MAGd,qBAAKluB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,yBAA2B,IACxCuP,SAAU,SAAC1S,GAAa,OAAKmqB,EAAUnqB,EAAM,EAC7CA,MAAO1E,GAAkB,GACzBiR,UAAWib,OAGf,qBAAK1jB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,uBAAyB,IACtCuP,SAAU,SAAC1S,GAAa,OAAKoqB,EAAQpqB,EAAM,EAC3CA,MAAOzE,GAAc,GACrBgR,UAAWib,OAGf,qBAAK1jB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,6BAA+B,IAC5CuP,SAAU,SAAC1S,GAAa,OAAKqqB,EAAcrqB,EAAM,EACjDA,MAAOtE,GAA0B,GACjC6Q,UAAWib,OAGf,qBAAK1jB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CAACC,UAAWzY,EAAE,wBAA0B,IAAKuP,SAAU,SAAC1S,GAAmB,EAAGA,MAAOxE,EAAO+Q,UAAQ,MAErH,qBAAKzI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,0BAA4B,IACzCuP,SAAU,SAAC1S,GAAmB,EAC9BA,MAAOvE,GACP8Q,UAAQ,MAIXib,IACC,gCACE,cAAC5a,GAAqB,CACpB3R,KAAK,SACLuR,MAAOrJ,EAAE,kCACTc,QAAS,kBAuG7BqT,GAAW,QACX9U,EACG8nB,mBAAmBxxB,EAA4B,OAAZuC,QAAY,IAAZA,IAAgB,GAAU,OAANC,QAAM,IAANA,IAAU,GAAQ,OAAJC,QAAI,IAAJA,IAAQ,GAAc,OAAVG,QAAU,IAAVA,IAAc,GAAS,OAALF,QAAK,IAALA,IAAS,GAAW,OAAPC,SAAO,IAAPA,MAAW,IAC3H9D,OAAM,SAACC,GACNuU,GAAavU,MAAMuL,EAAE,wBACvB,IACCwX,SAAQ,kBAAMrD,GAAW,EAAM,GA7Gc,EAC5BxT,UAAU,kBACVyI,UAAU,IAEZ,wBAAQzI,UAAU,iCAAiC7I,KAAK,SAASgJ,QAAS,kBAAMQ,GAAQE,KAAK,iBAAiB,EAAC,SAC5GxB,EAAE,mBAEJpI,EAAcb,gBAAgBlB,IAC7B,yBAAQ8K,UAAS,2BAA8BG,QAAS,kBAgF5EqT,GAAW,QACX9U,EACG8nB,mBAAmBxxB,EAA4B,OAAZuC,QAAY,IAAZA,IAAgB,GAAU,OAANC,QAAM,IAANA,IAAU,GAAQ,OAAJC,QAAI,IAAJA,IAAQ,GAAc,OAAVG,QAAU,IAAVA,IAAc,GAAS,OAALF,QAAK,IAALA,IAAS,GAAW,OAAPC,SAAO,IAAPA,MAAW,IAAI,GAC/H9D,OAAM,SAACC,GACNuU,GAAavU,MAAMuL,EAAE,wBACvB,IACCwX,SAAQ,WACP5f,EAAcgG,cAAc8C,MAAK,SAAC7K,GAChC6J,EAAa7J,GACbyL,GAAQE,KAAK,iBACf,GACF,GA3F8F,EAAE4H,UAAU,EAAM,UAC5F,cAAC,IAAe,CAACrI,KAAM,CAAC,MAAO,eAAgB,IAAEf,EAAE,iCAWnE,qBAAKW,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,6BAAKX,EAAE,4CAGT,qBAAKW,UAAU,YAAW,SACxB,qBAAKA,UAAU,SAAQ,SACrB,wBAAOA,UAAU,QAAO,UACtB,gCACE,6BACE,6BAAKX,EAAE,mDAGX,gCACqB,OAAlBR,QAAkB,IAAlBA,GAAyB,QAAP,EAAlBA,EAAoB3I,aAAK,WAAP,EAAlB,EAA2BgX,KAAI,SAACtW,GAC/B,OACE,6BACE,oBAAIoJ,UAAU,aAAY,SAAEpJ,KADrBA,EAIb,kBASZ,qBAAKoJ,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,6BAAKX,EAAE,yCAGT,qBAAKW,UAAU,YAAW,SACxB,qBAAKA,UAAU,SAAQ,SACrB,wBAAOA,UAAU,QAAO,UACtB,gCACE,+BACE,oBAAIA,UAAU,cAAa,SAAEX,EAAE,gCAC/B,6BAAKA,EAAE,wCAGX,gCACqB,OAAlBR,QAAkB,IAAlBA,GAA0B,QAAR,EAAlBA,EAAoBpI,cAAM,WAAR,EAAlB,EAA4BT,eAAekX,KAAI,SAACohB,GAC/C,OACE,+BACE,6BAAKA,EAAcx3B,QACnB,6BACE,cAAC+2B,GAAoB,CAACn2B,MAAO42B,EAAc52B,YAHtC42B,EAAcx3B,MAO3B,uBAoCtB,CCpRO,SAASy3B,GAAmB3vB,GACjC,IAAQS,EAAMC,cAAND,EACR,OACE,qCACE,uBAAOW,UAAU,aAAY,SAAEX,EAAE,8BACjC,uBAAOW,UAAU,eAAe9D,MAAO0C,EAAM1C,MAAOmR,SAAU,SAAC2K,GAAE,OAMnE9b,GAFgBA,EAJiE8b,EAAGvL,OAAOvQ,OAM7E8Q,UAAU,EAAE,IAC1BpO,EAAMgQ,SAAS1S,GAEf0C,EAAMsZ,kBAAkB,SACrBhc,EAAMjG,OAAS,IAEhB2I,EAAMsZ,kBAAkB7Y,EAAE,qCAR9B,IAAkBnD,CAJiF,EAAEuM,SAAU7J,EAAM6J,SAAU+lB,UAAW,KACrI5vB,EAAM4Z,UAAY,uBAAOxY,UAAU,YAAW,SAAEpB,EAAM4Z,aAc7D,CCpBO,SAASiW,GAAkB7vB,GAChC,IAAQS,EAAMC,cAAND,EAER,OACE,qCACE,uBAAOW,UAAU,aAAY,SAAEX,EAAE,6BACjC,uBAAOW,UAAU,eAAe9D,MAAO0C,EAAM1C,MAAOmR,SAAU,SAAC2K,GAAE,OAMnE9b,GAFgBA,EAJiE8b,EAAGvL,OAAOvQ,OAM7E8Q,UAAU,EAAE,IAC1BpO,EAAMgQ,SAAS1S,GAEf0C,EAAMsZ,kBAAkB,SACrBhc,EAAMjG,OAAS,IAEhB2I,EAAMsZ,kBAAkB7Y,EAAE,oCAR9B,IAAkBnD,CAJiF,EAAEuM,SAAU7J,EAAM6J,SAAU+lB,UAAW,KACrI5vB,EAAM4Z,UAAY,uBAAOxY,UAAU,YAAW,SAAEpB,EAAM4Z,aAc7D,CCZe,SAASkW,GAAW9vB,GACjC,IAAQ1J,EAAyB0J,EAAzB1J,OAAQ6J,EAAiBH,EAAjBG,aACRM,EAAMC,cAAND,EACFsB,EAAUC,cAEhB,EAAkC5B,mBAAiB9J,EAAOmC,WAAU,mBAA7DA,EAAS,KAAEs3B,EAAY,KAC9B,EAAgC3vB,mBAAiB9J,EAAOoC,UAAS,mBAA1DA,EAAQ,KAAEs3B,EAAW,KAC5B,EAA0B5vB,mBAAiB9J,EAAOG,OAAM,mBAAjDA,EAAK,KAAE2kB,EAAQ,KACtB,EAA0Bhb,mBAAiB9J,EAAO4C,OAAM,mBAAjDA,EAAK,KAAE+2B,EAAQ,KACtB,EAA4C7vB,mBAA6B9J,EAAO6C,gBAAe,mBAAxFA,EAAc,KAAE+2B,EAAiB,KACxC,EAAoC9vB,wBAA6BnM,GAAU,mBAApEk8B,EAAU,KAAEC,EAAa,KAChC,EAA4ChwB,wBAA6BnM,GAAU,mBAA5Eo8B,EAAc,KAAEC,EAAiB,KACxC,EAA0ClwB,wBAA6BnM,GAAU,mBAA1Es8B,EAAa,KAAEC,EAAgB,KAEtC,EAA4BpwB,oBAAkB,GAAM,mBAA7C+nB,EAAM,KAAEC,EAAS,KAKxB,OACE,qBAAKhnB,UAAU,kCAAiC,SAC9C,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,6BAAKX,EAAE,4BAGT,sBAAKW,UAAU,YAAW,UACxB,qBAAKA,UAAU,kBAAiB,UAC5B+mB,GACA,qCACE,wBAAQ/mB,UAAU,kBAAkB,iBAAe,uBAAuB,iBAAe,QAAO,SAC7FX,EAAE,oCAEL,qBAAKW,UAAU,QAAQiJ,UAAW,EAAGvS,GAAG,sBAAqB,SAC3D,qBAAKsJ,UAAU,eAAc,SAC3B,sBAAKA,UAAU,gBAAe,UAC5B,sBAAKA,UAAU,eAAc,UAC3B,oBAAIA,UAAU,cAAa,SAAEX,EAAE,oCAC/B,wBAAQlI,KAAK,SAAS6I,UAAU,YAAY,kBAAgB,QAAQ,aAAW,aAEjF,qBAAKA,UAAU,aAAY,SACzB,4BAAIX,EAAE,2CAER,qBAAKW,UAAU,eAAc,SAC3B,wBAAQ7I,KAAK,SAAS6I,UAAU,0BAA0B,kBAAgB,QAAO,SAC9EX,EAAE,2BAOb,wBAAQW,UAAU,sBAAsBG,QAAO,gCAAE,wGAAkB1C,IAAQ,mFAAC,SACzE4B,EAAE,oBAGL,cAACyJ,GAAqB,CAAC3I,QAAS,kBAAM6mB,GAAU,EAAK,EAAEhnB,UAAU,+BAA+BI,KAAM,CAAC,MAAO,cAKpH,sBAAKJ,UAAU,UAAS,UACtB,qBAAKA,UAAU,WAAU,SACvB,cAACuuB,GAAkB,CACjBryB,MAAO7E,EACPuX,SAAU+f,EACVnW,SAAUyW,EACV/W,kBAAmBgX,EACnBzmB,UAAWse,MAGf,qBAAK/mB,UAAU,WAAU,SACvB,cAACyuB,GAAiB,CAChBvyB,MAAO5E,EACPsX,SAAUggB,EACVpW,SAAU2W,EACVjX,kBAAmBkX,EACnB3mB,UAAWse,MAGf,qBAAK/mB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,wBACbnD,MAAO7G,EACPuZ,SAAU,SAAC1S,GAAa,OAAK8d,EAAS9d,EAAM,EAC5CuM,UAAU,MAGd,qBAAKzI,UAAU,WAAU,SAOvB,cAAC2Y,GAAkB,CACjBzc,MAAOpE,EACP8W,SAAUigB,EACV3W,kBAAmB8W,EACnBxW,SAAUuW,EACVlqB,MAAOxF,EAAE,gBACToJ,UAAWse,MAGf,qBAAK/mB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,4BACbnD,MAAOnE,EAAiBA,EAAemP,WAAa,GACpD0H,SAAU,SAAC1S,GAAa,OAAK4yB,EAAkB5yB,EAAM,EACrDuM,UAAWse,MAIf,8BACGA,GACC,qCACE,cAACje,GAAqB,CACpBJ,MAAOrJ,EAAE,eACTc,QAAS,kBA8D/B,WACE,GAAI9I,GAAaC,GAAYjC,GAASyC,EAAO,CAC3C,IAAIu3B,EAAS,eAAQn6B,GAErBm6B,EAAUh4B,UAAYA,EACtBg4B,EAAU/3B,SAAWA,EACrB+3B,EAAUh6B,MAAQA,EAClBg6B,EAAUv3B,MAAQA,EAClBu3B,EAAUt3B,eAAiBA,EAE3Bd,EACGq4B,eAAeD,GACftvB,MAAK,WACJinB,GAAU,GACVuI,GACF,IACC17B,OAAM,SAACC,GACNuU,GAAavU,MAAMuL,EAAE,wBACvB,GACJ,CACF,CAlFqCmwB,EAAM,EACrBxvB,UAAU,kBACVyI,UAiDZpR,IAAcC,IAAajC,IAAUyC,GAAST,EAAUpB,OAAS,IAAMqB,EAASrB,OAAS,KAEnG,SAAsBiG,GACpB,IAAMuc,EAAc,+BACdC,EAAc,WAChBG,EAAiBJ,EAAYxc,KAAKC,IAAUwc,EAAYzc,KAAKC,GAEjE,QAAI2c,CAGN,CAV0G4W,CAAa33B,KA/CnG,cAACgR,GAAqB,CACpBJ,MAAOrJ,EAAE,iBACTc,QAAS,kBA4F7B6mB,GAAU,QAEVuI,GA9F+C,EAC3BvvB,UAAU,qDAmC9B,SAEavC,IAAM,4CAIpB,OAJoB,kCAArB,wFAEqB,OADnBkD,EAAQE,KAAK,KACb9B,EAAa,MAAM,SACb1K,EAAYoJ,SAAS,KAAD,uCAC3B,sBAoCD,SAAS8xB,IACPt4B,EAAcgG,cAAc8C,MAAK,SAAC2vB,GAChC3wB,EAAa2wB,GACTA,IACFf,EAAae,EAAGr4B,WAChBu3B,EAAYc,EAAGp4B,UACfu3B,EAASa,EAAG53B,OACZg3B,EAAkBY,EAAG33B,gBACrBiiB,EAAS0V,EAAGr6B,OAEhB,GACF,CAOF,C,OClNe,SAASs6B,GAAgB/wB,GACtC,IAAQZ,EAA2BY,EAA3BZ,aAAc+kB,EAAankB,EAAbmkB,SAEtB,EAA8B/jB,oBAAS,GAAK,mBAArC2Q,EAAO,KAAE6D,EAAU,KAEpBoc,EAA4B,EAClC,EAAwB5wB,mBAA4B,MAAK,mBAAlD+D,EAAI,KAAE2Q,EAAO,KACpB,EAAgC1U,mBAAyB,IAAG,mBAArDmD,EAAQ,KAAE0tB,EAAW,KAC5B,EAAgD7wB,mBAAwC,MAAK,mBAAtF2f,EAAgB,KAAEmR,EAAmB,KAC5C,EAAkE9wB,mBAAwC,MAAK,mBAAxG+wB,EAAyB,KAAEC,EAA4B,KAC9D,EAAkChxB,mBAAwB,IAAG,mBAAtD0d,EAAS,KAAEC,EAAY,KAC9B,EAAkD3d,mBAAwB,IAAG,mBAAtE4d,EAAiB,KAAEC,EAAoB,KAC9C,EAAoD7d,mBAAiB,IAAG,mBAAjEixB,EAAkB,KAAEC,EAAqB,KAChD,EAA0DlxB,mBAAiB,IAAG,mBAAvEmxB,EAAqB,KAAEC,EAAwB,KACtD,EAAsCpxB,mBAAiB,IAAG,mBAAnD5H,EAAW,KAAEi5B,EAAc,KAElC,EAAwBrxB,mBAAS,GAAE,mBAA5BsxB,GAAI,KAAEC,GAAO,KAEpB,GAA4DvxB,oBAAS,GAAK,qBAAnEwxB,GAAsB,MAAEC,GAAyB,MAExD,GAA0BzxB,qBAAkB,qBAArClI,GAAK,MAAE45B,GAAQ,MAEtB,GAAsC1xB,mBAAiB,IAAG,qBAAnD8F,GAAW,MAAEsV,GAAc,MAClC,GAA0Bpb,mBAAiB,IAAG,qBAAvC3J,GAAK,MAAE2kB,GAAQ,MACtB,GAAiChb,mBAAiB,IAAG,qBAA9C3H,GAAS,MAAEs5B,GAAW,MAC7B,GAAgC3xB,mBAAiB,IAAG,qBAA7C1H,GAAQ,MAAEs3B,GAAW,MAE5B,GAAoC5vB,qBAAkB,qBAA/C4xB,GAAU,MAAEC,GAAa,MAChC,GAAoC7xB,qBAAkB,qBAA/C+vB,GAAU,MAAEC,GAAa,MAEhC,GAAoChwB,oBAAkB,GAAM,qBAArD8xB,GAAU,MAAEC,GAAa,MAEhC,GAAkD/xB,mBAAiB,eAAc,qBAA1E+F,GAAiB,MAAEisB,GAAoB,MAC9C,GAAkChyB,mBAAiB,aAAY,qBAAxDgG,GAAS,MAAEisB,GAAY,MAExBC,GAA0B,cAAdlsB,GAEV3F,GAAMC,cAAND,EACFsB,GAAUC,cAkDhB,OAhDAf,qBACE,WACM7B,GACF6gB,GACGkL,sBACAhqB,MAAK,SAAC4e,GACLmR,EAAoBnR,GAEpB,IAAMwS,EAAkBnzB,EAAahI,eAAemI,QAAO,SAACizB,GAAC,MAAiB,aAAZA,EAAE15B,KAAoB,IAExF+L,GACG8Q,UACAxU,MAAK,SAACgD,GACL,IAAMsuB,EAAetuB,EAAK5E,QAAO,SAAC6T,GAAC,OAAoB,OAAfmf,QAAe,IAAfA,OAAe,EAAfA,EAAiB56B,MAAK,SAAC+6B,GAAE,OAAKA,EAAGx6B,QAAUkb,EAAEtb,EAAE,MAAKsb,EAAE/Z,MAAM,IACpGyb,EAAQ2d,GAEoB,IAAxBA,EAAap7B,QACfs7B,GAAcxuB,EAAM4b,EAAkB0S,EAAa,GAAG36B,IAGxD8lB,GACGM,aAAyB,OAAZ9e,QAAY,IAAZA,OAAY,EAAZA,EAActH,IAC3BqJ,MAAK,SAAC2c,GACLA,EAAYA,EAAUve,QAAO,SAACgX,GAAQ,OAAKA,EAAS9d,WAAa8d,EAAS7d,UAAY6d,EAAS9f,KAAK,IACpGsnB,EAAaD,GACb+T,GAA0B/T,EAAUzmB,OAAS,GAE7Cu7B,GAA4B,GAAI9U,GAEhClJ,GAAW,EACb,IACC3f,OAAM,WACLwU,GAAavU,MAAMuL,GAAE,gCACvB,GACJ,IACCxL,OAAM,WACLwU,GAAavU,MAAMuL,GAAE,wBACvB,GACJ,IACCxL,OAAM,WACLwU,GAAavU,MAAMuL,GAAE,wBACvB,GAEN,GAEA,CAACrB,IAGkB,KAAb,OAAJ+E,QAAI,IAAJA,OAAI,EAAJA,EAAM9M,QAEN,qBAAK+J,UAAU,mCAAkC,SAC/C,sBAAKA,UAAU,2BAA0B,UACvC,4BAAIX,GAAE,8BACN,wBAAQW,UAAU,kBAAkBG,QAAS,kBAAMQ,GAAQE,KAAK,UAAU,EAAC,SACxExB,GAAE,wBAQX,qBAAKW,UAAU,mCAAkC,SAC/C,sBAAKA,UAAU,2BAA0B,UACvC,6BAAgBX,GAAX0jB,EAAa,iCAAsC,6BAExD,cAACrT,GAAgB,CAACC,QAASA,KAEzBA,GAAoB,IAAT2gB,IACX,sBAAKtwB,UAAU,gBAAe,UAC5B,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,GAAE,mCAET,wBAAQW,UAAU,sBAAsBG,QAAS,kBAAMQ,GAAQE,KAAK,SAAS,OAE/E,qBAAKb,UAAU,YAAW,SACvB+C,GACC,uBAAO/C,UAAU,iCAAgC,SAC/C,gCACG+C,EAAKmK,KAAI,SAACrK,GACT,OACE,qBAEE1C,QAAS,WACPoxB,GAAcxuB,EAAM4b,EAAkB9b,EAAInM,GAC5C,EAAE,UAEF,oBAAIuW,MAAO,CAAEsV,UAAW,QAAS,SAC/B,cAACxT,GAAoB,CAAClM,IAAKA,MAE7B,8BACIoa,GAAWW,YAAY/a,EAAInL,QAC3B,sBAAMuV,MAAO,CAAEra,MAAO,OAAQ,SAAE,IAAMyM,GAAE,oDAVvCwD,EAAInM,GAef,cAQViZ,GAAoB,IAAT2gB,IACX,sBAAKtwB,UAAU,gBAAe,UAC5B,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,GAAE,qCAET,wBAAQW,UAAU,sBAAsBG,QAAS,kBAAMQ,GAAQE,KAAK,SAAS,OAG/E,qBAAKb,UAAU,YAAW,SACxB,uBAAMqlB,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,UAC1C,sBAAKtlB,UAAU,OAAM,UACnB,uBACE7I,KAAK,QACL6I,UAAU,mBACV1B,KAAK,yBACL5H,GAAG,yBAEHijB,QAAS6W,GACT/nB,SAA+B,IAArBiU,EAAUzmB,OACpBoX,SAAUokB,IAHN,0BAKN,uBAAOzxB,UAAU,mBAAmB0xB,QAAQ,yBAAwB,SACjEryB,GAAE,yCAGJqd,EAAUzmB,OAAS,GAAKu6B,IACvB,mCACE,sBAAKxwB,UAAU,YAAW,UACxB,uBACEA,UAAU,oBACV9D,MAAO+zB,EACPnhB,YAAazP,GAAE,+BACfgO,SAAU,SAAC2K,GAAE,OAAKwZ,GAA4BxZ,EAAGvL,OAAOvQ,MAAOwgB,EAAU,EACzEpE,WAAW,IAEb,qBAAKtY,UAAU,mBAAkB,SAC/B,wBAAOA,UAAU,0CAAyC,UACxD,gCACE,+BACE,uBACA,6BAAKX,GAAE,4BACP,6BAAKA,GAAE,6BACP,6BAAKA,GAAE,uBAGX,kCACGud,EAAkB3mB,OAAS,GAC1B2mB,EAAkB1P,KAAI,SAACmQ,GAAC,aACtB,qBAAkBld,QAAS,kBAAMiwB,EAAyB/S,EAAEhoB,MAAM,EAAC,UACjE,6BACG86B,IAA0B9S,EAAEhoB,OAC3B,cAAC,IAAe,CAAC+K,KAAK,eAAeJ,UAAU,mBAGnD,+BACGqd,EAAEhmB,UAAU,KAAY,QAAV,EAAAgmB,EAAE/lB,gBAAQ,aAAV,EAAYrB,QAAS,GAAK,IAAMonB,EAAE/lB,YAEnD,6BAAK+lB,EAAEhoB,QACP,6BAAKgoB,EAAEvlB,UAVAulB,EAAEhoB,MAWN,IAEqB,IAA7BunB,EAAkB3mB,QAAgB,8BAAMoJ,GAAE,+CAQvD,gCACE,uBACElI,KAAK,QACL6I,UAAU,mBACV1B,KAAK,cACL5H,GAAG,cAEHijB,SAAU6W,GACVnjB,SAAUokB,IAFN,eAIN,uBAAOzxB,UAAU,mBAAmB0xB,QAAQ,cAAa,SACtDryB,GAAE,qCAGkB,IAArBqd,EAAUzmB,SAAiBu6B,KAC3B,sBAAKxwB,UAAU,OAAM,UAEnB,sBAAKA,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,GAAE,8BACjC,uBACEW,UAAU,eACV9D,MAAO7E,GACPgW,SAAU,SAAC2K,GAAE,OAAK2Y,GAAY3Y,EAAGvL,OAAOvQ,MAAM,EAC9Cmc,UAAQ,EACRC,WAAW,OAKf,sBAAKtY,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,GAAE,6BACjC,uBAAOW,UAAU,eAAe9D,MAAO5E,GAAU+V,SAAU,SAAC2K,GAAE,OAAK4W,GAAY5W,EAAGvL,OAAOvQ,MAAM,EAAEmc,UAAQ,OAI3G,qBAAKrY,UAAU,OAAM,SACnB,cAAC2Y,GAAkB,CACjBzc,MAAO4I,GACP8J,SAAUwL,GACVlC,kBAAmB8W,GACnBxW,SAAUuW,GACVlqB,MAAOxF,GAAE,oBAKb,qBAAKW,UAAU,OAAM,SACnB,cAAC6X,GAAc,CACb3b,MAAO7G,GACPuZ,SAAUoL,GACV/B,OAAQrc,EAAc+1B,iBACtBnZ,SAAUoY,GACV1Y,kBAAmB2Y,GACnB15B,KAAM,QACN2gB,UAAWzY,GAAE,wBACbgZ,UAAU,eAQtB,sBAAKrY,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,GAAE,wCACjC,uBACEW,UAAU,eACV9D,MAAO9E,EACPiW,SAAU,SAAC2K,GAAE,OAAKqY,EAAerY,EAAGvL,OAAOvQ,MAAM8Q,UAAU,EAAG,KAAK,EACnEwhB,UAAW,UAKbzL,GAAYhgB,GAAQgtB,GAA6BA,EAA0B95B,OAAS,GACpF,sBAAK+J,UAAU,OAAM,UACnB,sBAAKA,UAAU,OAAM,UAClBX,GAAE,4CACH,cAAC0J,GAAe,CACdrS,GAAI,gBACJgS,MAAOrJ,GAAE,4CACT2J,SAAU3J,GAAE,gDAGhB,sBAAKW,UAAU,YAAYpJ,KAAK,QAAO,UACrC,uBACEO,KAAK,QACL6I,UAAU,YACV1B,KAAK,cACL5H,GAAG,cAEHijB,QAA+B,gBAAtB5U,GACTsI,SAAUukB,GACVnpB,SAAUyoB,IAHN,eAKN,uBAAOlxB,UAAU,0BAA0B0xB,QAAQ,cAAa,SAC7DryB,GAAE,oCAGqB,OAAzB0wB,QAAyB,IAAzBA,OAAyB,EAAzBA,EAA2B7iB,KAAI,SAAC0R,GAC/B,OACE,eAAC,IAAMlM,SAAQ,WACb,uBACEvb,KAAK,QACL6I,UAAU,YACV1B,KAAMsgB,EAAgBloB,GACtBA,GAAIkoB,EAAgBloB,GACpBijB,QAAS5U,KAAsB6Z,EAAgBloB,GAC/C2W,SAAUukB,GACVnpB,SAAUyoB,KAEZ,uBAAOlxB,UAAU,0BAA0B0xB,QAAS9S,EAAgBloB,GAAG,SACpEkoB,EAAgB/c,YAAYjO,IAAI8P,GAAgBC,cAXhCib,EAAgBloB,GAezC,WAMJqsB,GAAYhgB,GAAQZ,EAASlM,OAAS,GACtC,sBAAK+J,UAAU,OAAM,UACnB,sBAAKA,UAAU,OAAM,UAClBX,GAAE,0CACH,cAAC0J,GAAe,CACdrS,GAAI,cACJgS,MAAOrJ,GAAE,0CACT2J,SAAU3J,GAAE,uCAGhB,sBAAKW,UAAU,YAAYpJ,KAAK,QAAO,UACrC,uBACEO,KAAK,QACL6I,UAAU,YACV1B,KAAK,YACL5H,GAAG,YAEHijB,QAAuB,cAAd3U,GACTqI,SAAUwkB,IAFN,aAIN,uBAAO7xB,UAAU,0BAA0B0xB,QAAQ,YAAW,SAC3DryB,GAAE,8CAGJ8C,EAAS+K,KAAI,SAAC4kB,GACb,OACE,eAAC,IAAMpf,SAAQ,WACb,uBACEvb,KAAK,QACL6I,UAAU,YACV1B,KAAMwzB,EAAQp7B,GACdA,GAAIo7B,EAAQp7B,GACZijB,QAAS3U,KAAc8sB,EAAQp7B,GAC/B2W,SAAUwkB,KAEZ,uBAAO7xB,UAAU,0BAA0B0xB,QAASI,EAAQp7B,GAAG,SAC5Do7B,EAAQxzB,SAVQwzB,EAAQp7B,GAcjC,UAKN,wBAAQsJ,UAAU,yBAAyB7I,KAAK,SAASgJ,QAAS,kBAuFhF,WACE,IAAKrJ,KAAUkH,EAAc,OAE7B,GAAIwyB,IAA4D,KAAb,OAArBL,QAAqB,IAArBA,OAAqB,EAArBA,EAAuBl6B,QAEnD,YADAoS,GAAavU,MAAMuL,GAAE,4CAIvB,GAA0B,gBAAtB0F,IAAqD,cAAdC,GAA2B,OAEtE,IAAKwrB,MAA4Bn7B,KAAUgC,KAAcC,IAAYy3B,IAAc6B,IAEjF,YADAG,IAAc,GAIhBA,IAAc,GAEd,IAAIgB,EAAchtB,GACQ,gBAAtBA,KACFgtB,EAAc,IAGhB,IAAIC,EAAmChtB,GAClB,cAAjBgtB,IACFA,OAAen/B,GAGjB,IAAIo/B,EAAe56B,GACf66B,EAAc56B,GACd66B,EAAW98B,GACX+8B,EAAiBttB,GACrB,GAAI0rB,KAA+C,OAArBL,QAAqB,IAArBA,OAAqB,EAArBA,EAAuBl6B,QAAS,EAAG,CAC/D,IAAMo8B,EAAmB3V,EAAUnmB,MAAK,SAAC8mB,GAAC,OAAKA,EAAEhoB,QAAU86B,CAAqB,IAC5EkC,IACFJ,EAA+B,OAAhBI,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBh7B,UACjC66B,EAA8B,OAAhBG,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB/6B,SAChC66B,EAA2B,OAAhBE,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBh9B,MAC7B+8B,EAAiC,OAAhBC,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBv6B,MAEvC,CAEA,GAAIm6B,GAAgBC,GAAeC,EAAU,CAC3C,IAAMltB,EAAO8d,EAAW3c,GAAUksB,OAASlsB,GAAUmsB,QACrDpsB,GACGqsB,YACC17B,GACAkH,EAAatH,GACb07B,EACAD,EACAF,EACAC,EACAxuB,GAAgB2B,cAChB0sB,EACAC,EACA/sB,EACA7N,GAED2I,MAAK,SAAC/L,GACL,OAAO2M,GAAQE,KAAK,WAAD,OAAY7M,GACjC,IACCH,OAAM,SAACC,GAAW,IAAD,EAChBi9B,IAAc,GACkB,OAAvB,OAALj9B,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnBm8B,GAAcxxB,GAAE,wCAEhBgJ,GAAavU,MAAMuL,GAAE,oCAEzB,GACJ,MACEgJ,GAAavU,MAAMuL,GAAE,gDAEzB,CA9JsFmzB,EAAa,EAAE/pB,SAAUqoB,GAAW,SAC9FzxB,GAAX0jB,EAAa,kCAAuC,2CASrE,SAAS6O,GAA0BplB,GACjCA,EAAMimB,UACN,IAAQ/7B,EAAO8V,EAAMC,OAAb/V,GACRs6B,GAAqBt6B,GAEH,cAAdsO,IAAoC,gBAAPtO,GAAsBs6B,GAAqB,cAC9E,CAEA,SAASa,GAAkBrlB,GACzBA,EAAMimB,UACN,IAAQ/7B,EAAO8V,EAAMC,OAAb/V,GACRu6B,GAAav6B,GAEF,cAAPA,GAAoBs6B,GAAqB,cAC/C,CAEA,SAASS,GAAyBjlB,GAChCA,EAAMimB,UACN,IAAQ/7B,EAAO8V,EAAMC,OAAb/V,GACR+5B,GAAiC,2BAAP/5B,EAC5B,CAEA,SAAS86B,GAA4B3T,EAAcnB,GAGjD,GAFAwT,EAAsBrS,GAET,KAATA,EAEFhB,EAAqBH,OAChB,CACL,IAAMgW,EAAehW,EAAUve,QAAO,SAACkf,GACrC,OAAOsV,GAAYtV,EAAEhmB,UAAWwmB,IAAS8U,GAAYtV,EAAE/lB,SAAUumB,IAAS8U,GAAYtV,EAAEhoB,MAAOwoB,IAAS8U,GAAYtV,EAAEvlB,MAAO+lB,EAC/H,IAEI6U,EAAaz8B,OAAS25B,GACxB8C,EAAa7M,MAAM,EAAG+J,GAIxB/S,EAAqB6V,EACvB,CACF,CAEA,SAASC,GAAY9U,EAAc+U,GACjC,OAAO/U,EAAKgV,WAAWD,EACzB,CAMA,SAASrB,GAAcxuB,EAAyB4b,EAAiD7nB,GAC/F45B,GAAS55B,GAET,IAPewmB,EAOTza,EAAU,OAAJE,QAAI,IAAJA,OAAI,EAAJA,EAAMxM,MAAK,SAACyb,GAAC,OAAKA,EAAEtb,KAAOI,CAAK,IAE5C,GAAImmB,GAAWW,YAAe,OAAH/a,QAAG,IAAHA,OAAG,EAAHA,EAAKnL,OAAQ,CACtC,GAAImL,EAAK,CACPgtB,EAAYhtB,EAAIV,UAEhB,IAAMW,EAAM3K,MAAM26B,KAAK7V,GAAW8V,uBAAuBlwB,IAErDmwB,EAAU,IAAI76B,MAClB2K,EAAIzE,SAAQ,SAAC3H,GACX,IAAMmW,EAAyB,OAAhB8R,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBpoB,MAAK,SAACsW,GAAM,OAAKA,EAAOnW,KAAOA,CAAE,IAC9DmW,GACFmmB,EAAQnyB,KAAKgM,EAEjB,IACAmjB,EAA6BgD,EAC/B,EAvBa1V,EAyBLgT,GAAO,GAxBR,GAAKC,GAAQjT,EAyBtB,MACEjV,GAAavU,MAAMuL,GAAE,uCAEzB,CA0EF,C,cCpjBe,SAAS4zB,GAAiBr0B,GACvC,IAAQE,EAAmBF,EAAnBE,eACAO,EAAMC,cAAND,EAMR,OACE,qCACE,iCACE,qBAAKW,UAAU,YAAW,SACxB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,oDAAmD,SAChE,qBAAKA,UAAU,eAAc,SAC3B,oBAAIA,UAAU,wCAAuC,SACnD,oBAAIA,UAAU,WAAU,SACtB,yBAAQA,UAAU,WAAWG,QAASrB,EAAe,UACnD,cAAC,IAAe,CAACkB,UAAU,OAAOI,KAAM,CAAC,MAAO,WAC/Cf,EAAE,0CAUnB,qBAAKW,UAAU,mCAAkC,SAC/C,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,oDAAmD,SAChE,qBAAKA,UAAU,iBAAgB,SAC7B,sBAAKA,UAAU,MAAK,UAClB,sBAAKA,UAAU,eAAc,UAC3B,qBAAKA,UAAU,OAAM,SACnB,cAACC,EAAU,CAACC,KAAMzN,EAAYS,SAGhC,qBAAK8M,UAAU,YAAW,SACxB,sBAAKA,UAAU,YAAW,UACxB,6BAAKX,EAAE,6BACP,6BAAKA,EAAE,8BACP,6BAAKA,EAAE,iCAEP,wBAAQW,UAAU,yBAAyBG,QAAO,gCAAE,6GAxCtE2D,OAAOovB,SAASC,SAwCgF,mFAAC,SAC5E9zB,EAAE,sCAKX,qBAAKW,UAAU,iDAAgD,SAC7D,qBAAKA,UAAU,YAAYQ,IAAI,sBAAsBC,IAAI,oBAS3E,CC/De,SAAS2yB,GAAe,GAA4C,IAA1ClU,EAAQ,EAARA,SAAS,EAAD,EAAEmU,sBAAc,MAAG,IAAG,EACrE,EAA8Br0B,oBAAS,GAAM,mBAAtCs0B,EAAO,KAAEC,EAAU,KAU1B,OARA1zB,qBAAU,WACR,IAAI8f,EAAYC,YAAW,WACzB2T,GAAW,EACb,GAAGF,GAEH,OAAO,kBAAM7I,cAAc7K,EAAW,CACxC,GAAG,CAAC0T,IAEAC,EACKpU,EAEF,IACT,CCPO,SAASsU,GAAmB50B,GACjC,IAAQZ,EAAiBY,EAAjBZ,aAER,EAA8BgB,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAE1B,EAAsCxU,mBAAiB,IAAG,mBAAnD8F,EAAW,KAAEsV,EAAc,KAClC,EAA0Bpb,mBAAiB,IAAG,mBAAvC3J,EAAK,KAAE2kB,EAAQ,KACtB,EAAiChb,mBAAiB,IAAG,mBAA9C3H,EAAS,KAAEs5B,EAAW,KAC7B,EAAgC3xB,mBAAiB,IAAG,mBAA7C1H,EAAQ,KAAEs3B,EAAW,KAC5B,EAAwB5vB,mBAAiB,IAAG,mBAArCnH,EAAI,KAAE47B,EAAO,KAEpB,EAAoCz0B,qBAAkB,mBAA/C4xB,EAAU,KAAEC,EAAa,KAChC,EAAoC7xB,qBAAkB,mBAA/C+vB,EAAU,KAAEC,EAAa,KAExB3vB,EAAMC,cAAND,EACFsB,EAAUC,cAMhB,OAJAf,qBAAU,WACR2T,GAAW,EACb,IAGE,qBAAKxT,UAAU,6BAA4B,SACzC,sBAAKA,UAAU,2BAA0B,UACvC,6BAAKX,EAAE,oCAEP,cAACqQ,GAAgB,CAACC,QAASA,KAEzBA,GACA,sBAAK3P,UAAU,gBAAe,UAC5B,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,qCAET,wBAAQW,UAAU,sBAAsBG,QAAS,kBAAMQ,EAAQE,KAAK,aAAa,OAGnF,qBAAKb,UAAU,YAAW,SACxB,uBAAMqlB,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,UAE1C,sBAAKtlB,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,8BACjC,uBACEW,UAAU,eACV9D,MAAO7E,EACPgW,SAAU,SAAC2K,GAAE,OAAK2Y,EAAY3Y,EAAGvL,OAAOvQ,MAAM,EAC9Cmc,UAAQ,EACRC,WAAW,OAKf,sBAAKtY,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,6BACjC,uBAAOW,UAAU,eAAe9D,MAAO5E,EAAU+V,SAAU,SAAC2K,GAAE,OAAK4W,EAAY5W,EAAGvL,OAAOvQ,MAAM,EAAEmc,UAAQ,OAI3G,qBAAKrY,UAAU,OAAM,SACnB,cAAC2Y,GAAkB,CACjBzc,MAAO4I,EACP8J,SAAUwL,EACVlC,kBAAmB8W,EACnBxW,SAAUuW,EACVlqB,MAAOxF,EAAE,oBAKb,qBAAKW,UAAU,OAAM,SACnB,cAAC6X,GAAc,CACb3b,MAAO7G,EACPuZ,SAAUoL,EACV/B,OAAQrc,EAAc+1B,iBACtBnZ,SAAUoY,EACV1Y,kBAAmB2Y,EACnB15B,KAAM,QACN2gB,UAAWzY,EAAE,wBACbgZ,UAAU,MAKd,sBAAKrY,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,yBACjC,uBAAOW,UAAU,eAAe9D,MAAOrE,EAAMwV,SAAU,SAAC2K,GAAE,OAAKyb,EAAQzb,EAAGvL,OAAOvQ,MAAM,OAGzF,wBAAQ8D,UAAU,yBAAyB7I,KAAK,SAASgJ,QAAS,kBAS9E,WAE2B,+BAXyDuzB,EAAgB,EAAC,SACtFr0B,EAAE,kCAUU,aAgB5B,OAhB4B,kCAA7B,mGACkB,OAAZrB,QAAY,IAAZA,KAActH,IAAMW,GAAaC,GAAYjC,IAAU05B,GAAe6B,EAAU,gBACxC,OAApC+C,EAAiBt+B,EAAMosB,cAAc,EAAD,OACpCjF,GACHkX,eAAe11B,EAAatH,GAAIW,EAAWC,EAAUwN,EAAa6uB,EAAgB97B,GAClFkI,MAAK,WACJ,OAAOY,EAAQE,KAAK,aACtB,IACChN,OAAM,SAACC,GAAW,IAAD,EACgB,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnBm8B,EAAcxxB,EAAE,wCAEhBgJ,GAAavU,MAAMuL,EAAE,oCAEzB,IAAG,KAAD,uCAEP,sBACH,CC7GO,SAASu0B,GAAiBh1B,GAC/B,IAAQZ,EAAiBY,EAAjBZ,aACA61B,EAASj1B,EAATi1B,KACAtX,EAAeoK,cAAfpK,WAER,EAA8Bvd,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAE1B,EAAgCxU,qBAAkB,mBAA3CmW,EAAQ,KAAE2e,EAAW,KAC5B,EAA0B90B,mBAAiB,IAAG,mBAAvClH,EAAK,KAAE+2B,EAAQ,KACtB,EAA0B7vB,mBAAiB,IAAG,mBAAvC3J,EAAK,KAAE2kB,EAAQ,KACtB,EAAiChb,mBAAiB,IAAG,mBAA9C3H,EAAS,KAAEs5B,EAAW,KAC7B,EAAgC3xB,mBAAiB,IAAG,mBAA7C1H,EAAQ,KAAEs3B,EAAW,KAC5B,EAAwB5vB,mBAAiB,IAAG,mBAArCnH,EAAI,KAAE47B,EAAO,KACpB,EAAkDz0B,oBAAkB,GAAM,mBAAnE+0B,EAAiB,KAAEC,EAAoB,KAE9C,EAAoCh1B,qBAAkB,mBAA/C+vB,EAAU,KAAEC,EAAa,KAExB3vB,EAAMC,cAAND,EACFsB,EAAUC,cAwBhB,OAtBAf,qBAAU,WACJ7B,GAAgBue,GAClBC,GACGyX,YAAwB,OAAZj2B,QAAY,IAAZA,OAAY,EAAZA,EAActH,GAAI6lB,GAC9Bxc,MAAK,SAAC/L,GACL8/B,EAAY9/B,GAERA,IACFgmB,EAAiB,OAARhmB,QAAQ,IAARA,OAAQ,EAARA,EAAUqB,OACnBw5B,EAAiB,OAAR76B,QAAQ,IAARA,OAAQ,EAARA,EAAU8D,OACnB64B,EAAoB,OAAR38B,QAAQ,IAARA,OAAQ,EAARA,EAAUqD,WACtBu3B,EAAoB,OAAR56B,QAAQ,IAARA,OAAQ,EAARA,EAAUsD,UACtBm8B,EAAgB,OAARz/B,QAAQ,IAARA,OAAQ,EAARA,EAAU6D,MAEtB,IACChE,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,gCACvB,IAEJmU,GAAW,EACb,GAAG,CAAC+I,EAAYve,IAGd,qBAAKgC,UAAU,6BAA4B,SACxC+zB,EACC,cAACjV,GAAc,CACbG,UAAW5f,EAAE,0CACb8f,WAAY,kBAoGnB,WAE4B,gCAtGH+U,EAAgB,EAClC9U,UAAW4U,IAGb,sBAAKh0B,UAAU,2BAA0B,UACvC,6BAAKX,EAAE,8BAEP,cAACqQ,GAAgB,CAACC,QAASA,KAEzBA,GACA,sBAAK3P,UAAU,gBAAe,UAC5B,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,qCAET,wBAAQW,UAAU,sBAAsBG,QAAS,kBAAMQ,EAAQE,KAAK,aAAa,OAGnF,qBAAKb,UAAU,YAAW,SACxB,uBAAMqlB,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,UAE1C,sBAAKtlB,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,8BACjC,uBACEW,UAAU,eACV9D,MAAO7E,EACPgW,SAAU,SAAC2K,GAAE,OAAK2Y,EAAY3Y,EAAGvL,OAAOvQ,MAAM,EAC9Cmc,UAAQ,EACRC,WAAW,OAKf,sBAAKtY,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,6BACjC,uBAAOW,UAAU,eAAe9D,MAAO5E,EAAU+V,SAAU,SAAC2K,GAAE,OAAK4W,EAAY5W,EAAGvL,OAAOvQ,MAAM,EAAEmc,UAAQ,OAI3G,qBAAKrY,UAAU,OAAM,SACnB,cAAC2Y,GAAkB,CACjBzc,MAAOpE,EACP8W,SAAUigB,EACV3W,kBAAmB8W,EACnBxW,SAAUuW,EACVlqB,MAAOxF,EAAE,4BAKb,sBAAKW,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,yBACjC,uBAAOW,UAAU,eAAe9D,MAAOrE,EAAMwV,SAAU,SAAC2K,GAAE,OAAKyb,EAAQzb,EAAGvL,OAAOvQ,MAAM,OAGxFi4B,KACC,qCACE,wBAAQn0B,UAAU,yBAAyB7I,KAAK,SAASgJ,QAAS,kBA4BrF,WAE0B,+BA9BiEi0B,EAAc,EAAC,SACpF/0B,EAAE,iCAEL,yBAAQW,UAAS,2CAA8CG,QAAS,kBAAM6zB,GAAqB,EAAK,EAAC,UACvG,cAAC,IAAe,CAAC5zB,KAAM,CAAC,MAAO,eAAgB,IAAEf,EAAE,wBAKvD80B,KAAa,gCAAQ90B,EAAE,uCACzB,wBAAQW,UAAU,iCAAiC7I,KAAK,SAASgJ,QAAS,kBAAMQ,EAAQE,KAAK,aAAa,EAAC,SACxGxB,EAAE,gDAWrB,SAAS80B,IACP,SAAIN,IAAQQ,EAAej+B,gBAAgBy9B,KAEpB,UAAX,OAAR1e,QAAQ,IAARA,OAAQ,EAARA,EAAUhe,KAGhB,CAE2B,aAa1B,OAb0B,kCAA3B,mGACkB,OAAZ6G,QAAY,IAAZA,KAActH,IAAMW,GAAaC,GAAYjC,IAAU05B,EAAU,gBACK,OAApEuF,EAAW,2BAAQnf,GAAQ,IAAE9d,YAAWC,WAAUQ,QAAOzC,QAAOwC,SAAI,SAElE2kB,GACH+X,eAA2B,OAAZv2B,QAAY,IAAZA,OAAY,EAAZA,EAActH,GAAI49B,GACjCv0B,MAAK,WACJ,OAAOY,EAAQE,KAAK,aACtB,IACChN,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,oCACvB,IAAG,KAAD,uCAEP,sBAE4B,cAY5B,OAZ4B,mCAA7B,2FACkB,OAAZrB,QAAY,IAAZA,MAActH,KAAM6lB,EAAU,gBACJ,OAA5ByX,GAAqB,GAAO,SACtBxX,GACH0X,eAA2B,OAAZl2B,QAAY,IAAZA,OAAY,EAAZA,EAActH,GAAI6lB,GACjCxc,MAAK,WACJ,OAAOY,EAAQE,KAAK,aACtB,IACChN,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,4CACvB,IAAG,KAAD,uCAEP,sBACH,CCtLO,IAAMm1B,GAAgB,4CA+C1B,OA/C0B,6DAC3B,SAAmCC,GACjC,IAAIC,EAAU,IAAI/2B,KAAKA,KAAKC,OAE5B,OADqB,IAAID,KAAK82B,EAAGE,iBACRD,CAC3B,GAAC,sCAED,SAAgCD,GAC9B,IAAKA,EAAGG,aACN,OAAO,EAGT,IAAIF,EAAU,IAAI/2B,KAAKA,KAAKC,OAE5B,OADmB,IAAID,KAAK82B,EAAGG,eACRF,CACzB,GAAC,sCAED,SAAgCG,EAAuBC,GACrD,OAAIrhC,KAAKshC,yBAAyBF,KAASphC,KAAKshC,yBAAyBD,IAC/D,EAENrhC,KAAKshC,yBAAyBD,KAASrhC,KAAKshC,yBAAyBF,GAChE,EAGLphC,KAAKuhC,4BAA4BH,KAASphC,KAAKuhC,4BAA4BF,IACrE,EAENrhC,KAAKuhC,4BAA4BF,KAASrhC,KAAKuhC,4BAA4BH,IAI3EA,EAAID,cAAgBE,EAAIF,cAAgBC,EAAID,aAAeE,EAAIF,cAAgBC,EAAI/pB,SAAWgqB,EAAIhqB,SAH7F,EAKE+pB,EAAID,cAAgBE,EAAIF,cAAgBC,EAAID,eAAiBE,EAAIF,cAAgBC,EAAI/pB,SAAWgqB,EAAIhqB,UAK5G+pB,EAAIF,gBAAkBG,EAAIH,gBAAkBE,EAAIF,eAAiBG,EAAIH,gBACrEE,EAAII,SAAWH,EAAIG,SAAWJ,EAAII,QAAUH,EAAIG,UAC/CJ,EAAII,UAAYJ,EAAIF,iBAAmBG,EAAIG,SAAWH,EAAIH,iBANpD,EAWH,CACT,KAAC,EA/C0B,GCmCvBO,GAAgB,kHAsInB,OAtImB,0FACpB,WAAmBjf,GAAmB,+FAA2B,OAAzB9X,EAAc,+BAAG,SAAQ,SACvC1K,KAAKsB,UAAS,UAAetB,KAAKJ,OAAM,uBAAe4iB,EAAW,mBAAW9X,IAAU,KAAD,EAiB7G,OAjBKC,EAAS,UAETA,EAAUE,OACZF,EAAUE,KAAO,IAAIC,IAAIC,OAAOC,QAAiB,OAATL,QAAS,IAATA,OAAS,EAATA,EAAWE,QAEjDF,EAAU+2B,mBACZ/2B,EAAU+2B,kBAAkBjoB,KAAI,SAACkoB,GAQ/B,OAPIA,EAAiB92B,OACnB82B,EAAiB92B,KAAO,IAAIC,IAAIC,OAAOC,QAAQ22B,EAAiB92B,QAG9D82B,EAAiBvzB,cACnBuzB,EAAiBvzB,YAAc,IAAItD,IAAIC,OAAOC,QAAQ22B,EAAiBvzB,eAElEuzB,CACT,KAEH,kBAEMh3B,QAAavL,GAAS,gDAC9B,mDAtBmB,IAsBnB,kFAED,WAA0B6R,GAA2B,iGAC9BjR,KAAKsB,UAAS,UAAStB,KAAKJ,OAAM,wCAAgCqR,IAAW,KAAD,EAArF,OAAN2wB,EAAM,yBACLA,GAAU,GAAC,gDACnB,mDALA,IAKA,sFAED,WAA8Bpf,EAAqBqf,GAA0B,iGAC5C7hC,KAAKsB,UAAS,UAAStB,KAAKJ,OAAM,uBAAe4iB,EAAW,8BAAsBqf,IAAsB,KAAD,EASrI,OATKF,EAAgB,UAEhBA,EAAiB92B,OACnB82B,EAAiB92B,KAAO,IAAIC,IAAIC,OAAOC,QAAQ22B,EAAiB92B,QAG9D82B,EAAiBvzB,cACnBuzB,EAAiBvzB,YAAc,IAAItD,IAAIC,OAAOC,QAAQ22B,EAAiBvzB,gBAE1E,kBACMuzB,GAAgB,gDACxB,qDAdA,IAcA,qFAED,WAA6BpgC,EAAwBf,GAA6B,2FACnER,KAAK0B,WAAU,UACvB1B,KAAKJ,OAAM,uBAAeY,EAAKshC,YAAW,yBAAiBvgC,EAAc,sBAC5Ef,GACA,KAAD,mFACF,qDAPA,IAOA,qFAED,WAA6Be,EAAwBihB,EAAqBhiB,GAA6B,2FACxFR,KAAK2B,UAAS,UACtB3B,KAAKJ,OAAM,uBAAe4iB,EAAW,yBAAiBjhB,EAAc,8BAAsBf,EAAKuhC,IAClGvhC,GACA,KAAD,mFACF,uDAPA,IAOA,qFAED,WAA6Be,EAAwBihB,EAAqBqf,GAA0B,2FACrF7hC,KAAKyS,aAAY,UACzBzS,KAAKJ,OAAM,uBAAe4iB,EAAW,yBAAiBjhB,EAAc,8BAAsBsgC,IAC7F,KAAD,mFACF,uDANA,IAMA,0EAED,WACErf,EACAqf,EACAG,EACA3wB,EACAzP,EACAgC,EACAC,EACAF,EACAs+B,EACA/xB,GAA6B,iGAED,OAD5BS,EAAuB,uCAAGvR,EAC1B8iC,IAAqB,oCAAO,SAEPliC,KAAK0B,WAAU,UAC/B1B,KAAKJ,OAAM,uBAAe4iB,EAAW,8BAAsBqf,EAAkB,WAChF,CACEx9B,MAAOgN,EACPzP,MAAOA,EACPgC,UAAWA,EACXC,SAAUA,EACVF,YAAaA,EACbq+B,cAAeA,EACfC,KAAMA,EACN/xB,SAAUA,GAAYD,GAAgB2B,cACtCjB,IAAKA,EACLuxB,aAAcA,IAEhB,KAAD,EAdW,OAANN,EAAM,yBAeLA,GAAU,IAAE,gDACpB,qEAhCA,IAgCA,iFAED,WACEpf,EACAqf,EACA5wB,EACAI,EACAzP,EACA+B,GAAgC,iGAEX3D,KAAK0B,WAAU,UAC/B1B,KAAKJ,OAAM,uBAAe4iB,EAAW,8BAAsBqf,EAAkB,uBAChF,CACEx9B,MAAOgN,EACPzP,MAAOA,EACP+B,YAAaA,EACbsN,QAASA,IAEX,KAAD,EARW,OAAN2wB,EAAM,yBASLA,GAAU,IAAE,gDACpB,6DApBA,IAoBA,mFAED,WAA2Bj3B,GAAoB,mFACd,OAA3BqG,EAAU,IAAI+Y,IAAc,EAAD,OACZ/Z,GAAW8Q,UAAU,KAAD,EAQpC,OARGxR,EAAI,OAEV3E,EAAUw3B,OAAOv3B,SAAQ,SAACvH,GACxB,IAAI+L,EAAME,EAAKxM,MAAK,SAACyb,GAAC,OAAKA,EAAEtb,KAAOI,CAAK,IACrC+L,GACqBoa,GAAWkN,sBAAsBtnB,GACvCxE,SAAQ,SAACiH,GAAM,OAAKb,EAAQ6G,IAAIhG,EAAO,GAE5D,IAAG,kBAEIb,GAAO,2CACf,mDAfA,IAeA,6EAED,WAAqBwR,EAAqB4f,GAAe,iGACpCpiC,KAAKsB,UAAS,UAAkBtB,KAAKJ,OAAM,uBAAe4iB,EAAW,8BAAsB4f,EAAO,YAAW,KAAD,EAArH,OAANR,EAAM,yBAEHA,GAAU,IAAE,gDACpB,qDANA,MAMA,EAtImB,CAASjiC,GA0IhB0iC,GADU,IAAIZ,GC9KvBa,I,OAAe,gBACfC,GAAiB,iBACjBC,GAAe,eACfC,GAAW,WACXC,GAAY,Y,UCYH,SAASC,GAAUx3B,GAChC,IAAQw2B,EAA6Ex2B,EAA7Ew2B,iBAAkBh3B,EAA2DQ,EAA3DR,UAAWuF,EAAgD/E,EAAhD+E,SAAU0yB,EAAsCz3B,EAAtCy3B,QAASC,EAA6B13B,EAA7B03B,yBAChDj3B,EAAMC,cAAND,EAEFk3B,EAAQ5sB,KAAOyrB,EAAiBH,SAAS3pB,IAAI8pB,EAAiBtqB,SAAU,WAAWS,SACnFirB,EAAiB56B,EAAcglB,YAAYwU,EAAiBqB,MAAQrB,EAAiBqB,MAAQrB,EAAiBsB,aAE9GC,EAAwBL,EAAyBlB,GACjDwB,EAAe1J,OAAOC,WAAWiI,EAAiByB,KAAKd,KACvDe,EAAiB5J,OAAOC,WAAWiI,EAAiByB,KAAKb,KACzDe,EAAY3B,EAAiByB,KAAKV,IAClCa,EAAgBxtB,GAAYytB,mBAAmBF,EAAWvtB,GAAY0G,cAEtEgnB,EAA2B,UAAjB94B,EAAU1H,GAE1B,IAAKkgC,IAAiBE,EACpB,OACE,sBAAK92B,UAAU,OAAM,UACnB,sBAAKA,UAAU,cAAa,WACT,OAAhBo1B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB+B,UAAW,qBAAK32B,IAAqB,OAAhB40B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB+B,QAAS12B,IAAI,GAAGT,UAAU,aACpF,qBAAIA,UAAU,OAAM,UAAC,IAAEo1B,EAAiB92B,KAAK1K,IAAI+P,SAGnD,sBAAK3D,UAAU,YAAW,UACvB5B,EAAU+4B,SAAW,qBAAK32B,IAAKpC,EAAU+4B,QAAS12B,IAAI,GAAGT,UAAU,uBACpE,8BACGo1B,EAAiBvzB,aAAeuzB,EAAiBvzB,YAAY5L,OAAS,GACrE,qCACGm/B,EAAiBvzB,YAAYjO,IAAI+P,GAClC,0BAIHyxB,EAAiBH,QAChB,cAACmC,GAAA,EAAK,CACJC,QAAQ,mCACR1pB,OAAQ,CACNxJ,MAAOqF,GAAY+I,eAAe,IAAI5U,KAAKy3B,EAAiBH,SAAUzrB,GAAY0G,cAClF9L,IAAKoF,GAAY+I,eAAegkB,EAAO/sB,GAAY0G,iBAIvD,mCACI6mB,EAQA,mCACE,cAACK,GAAA,EAAK,CACJC,QAAQ,0CACR1pB,OAAQ,CACNzC,MAAO1B,GAAY2E,SAAS6oB,GAC5B7rB,IAAK3B,GAAY8tB,OAAON,GACxB5rB,KAAM5B,GAAY+tB,WAAWR,EAAWvtB,GAAY0G,mBAb1D,mCACE,cAACknB,GAAA,EAAK,CACJC,QAAQ,uCACR1pB,OAAQ,CAAE7C,SAAUtB,GAAYguB,eAAepC,EAAiBtqB,oBAmB5E,4BAAIzL,EAAE,uBAAwB,CAAEshB,KAAM6V,EAAgB1V,SAAU1iB,EAAU0iB,aAEzE6V,EACC,qBAAK32B,UAAU,OAAM,SACnB,wBAAQA,UAAU,yBAAyBG,QAAS,kBAAMk2B,EAAQjB,EAAiB,EAAC,SACvE/1B,EAAV63B,EAAY,2CAAgD,0CAIjE,4BACG73B,EAAE,4CAA6C,CAC9CoK,KAAMD,GAAY+I,eAAe,IAAI5U,KAAKy3B,EAAiBT,eAAeztB,YAAa,4BA5DtEkuB,EAAiB1+B,IAoEhD,IAAM+gC,EAAevK,OAAOC,WAAWiI,EAAiByB,KAAKZ,KACvDyB,EAAwB97B,EAAcglB,YAAY6W,EAAeA,EAAerC,EAAiBsB,aAEnG/V,EAAO,GAIX,OAHIiW,EAAcjW,EAAO/kB,EAAcglB,YAAYgW,EAAeA,EAAexB,EAAiBsB,aACzFI,IAAgBnW,EAAO/kB,EAAcglB,YAAYkW,EAAiBA,EAAiB1B,EAAiBsB,cAG3G,sBAAK12B,UAAU,OAAM,UACnB,sBAAKA,UAAU,cAAa,WACT,OAAhBo1B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB+B,UAAW,qBAAK32B,IAAqB,OAAhB40B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB+B,QAAS12B,IAAI,GAAGT,UAAU,aACpF,qBAAIA,UAAU,OAAM,UAAC,IAAEo1B,EAAiB92B,KAAK1K,IAAI+P,SAGnD,sBAAK3D,UAAU,YAAW,UACvB5B,EAAU+4B,SAAW,qBAAK32B,IAAKpC,EAAU+4B,QAAS12B,IAAI,GAAGT,UAAU,uBACpE,8BACGo1B,EAAiBvzB,aAAeuzB,EAAiBvzB,YAAY5L,OAAS,GACrE,qCACGm/B,EAAiBvzB,YAAYjO,IAAI+P,GAClC,0BAGJ,cAACyzB,GAAA,EAAK,CACJC,QAAQ,0CACR1pB,OAAQ,CACNzC,MAAO1B,GAAY2E,SAAS6oB,GAC5B7rB,IAAK3B,GAAY8tB,OAAON,GACxB5rB,KAAM5B,GAAY+tB,WAAWR,EAAWvtB,GAAY0G,oBAK1D,8BACE,iCAAS7Q,EAAE,gCACX,yBAEGu3B,GAAgBv3B,EAAE,gCAAiC,CAAEshB,KAAMA,EAAMG,SAAU1iB,EAAU0iB,aACrFgW,GAAkBz3B,EAAE,kCAAmC,CAAEshB,KAAMA,EAAMG,SAAU1iB,EAAU0iB,WAC3F2W,EAAe,GACd,qCACE,uBACCp4B,EAAE,2BAA4B,CAAEshB,KAAM+W,EAAuB5W,SAAU1iB,EAAU0iB,cAGtF,uBACCzhB,EAAE,2BAA4B,CAAEshB,KAAM6V,EAAgB1V,SAAU1iB,EAAU0iB,cAG5E6V,EACC,qBAAK32B,UAAU,OAAM,SACnB,wBAAQA,UAAU,yBAAyBG,QAAS,kBAAMk2B,EAAQjB,EAAiB,EAAC,SACvE/1B,EAAV63B,EAAY,2CAAgD,0CAIjE,4BACG73B,EAAE,4CAA6C,CAC9CoK,KAAMD,GAAY+I,eAAe,IAAI5U,KAAKy3B,EAAiBT,eAAeztB,YAAa,4BAlDtEkuB,EAAiB1+B,GAyDhD,CC7Ie,SAASihC,GAAc/4B,GACpC,IAAQ1J,EAA4B0J,EAA5B1J,OAAQ0iC,EAAoBh5B,EAApBg5B,gBAERv4B,EAAMC,cAAND,EACFsE,EAAmBD,GAAgB2B,cACnC1E,EAAUC,cACRqV,EAAgB0Q,cAAhB1Q,YAER,EAA8BjX,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAAkCxU,qBAAqB,mBAAhDZ,EAAS,KAAEy5B,EAAY,KAC9B,EAAkD74B,mBAA6B,IAAG,mBAA3Em2B,EAAiB,KAAE2C,EAAoB,KAqB9C,OAnBAj4B,qBAAU,WACRi2B,GACGiC,aAAa9hB,GACblW,MAAK,SAAC3B,GACDA,IACFy5B,EAAaz5B,GACTA,EAAU+2B,kBAAkB,IAC9B2C,EACE15B,EAAU+2B,kBAAkBnyB,MAAK,SAAC6xB,EAAKC,GAAG,OAAK,IAAIn3B,KAAKk3B,EAAII,SAASv3B,UAAY,IAAIC,KAAKm3B,EAAIG,SAASv3B,SAAS,KAIxH,IACC7J,OAAM,kBAAM+jC,GAAgB,EAAK,IACjC/gB,SAAQ,WACPrD,GAAW,EACb,GACJ,GAAG,CAACte,EAAQ0iC,EAAiB3hB,IAEzBtG,EACK,cAACD,GAAgB,CAACC,QAASA,IAG/BvR,EAaH,qBAAK4B,UAAU,kCAAiC,SAC9C,qBAAKA,UAAU,MAAK,SAClB,sBAAKA,UAAU,4DAA2D,UAE1C,IAA7Bm1B,EAAkBl/B,QACjB,qBAAK+J,UAAU,MAAK,SAClB,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,YAAW,UACxB,6BAAK5B,EAAUE,KAAK1K,IAAI+P,KACxB,6BAAKtE,EAAE,gDAOd81B,EAAkBjoB,KAAI,SAACkoB,GACtB,OACE,cAACgB,GAAS,CACRC,QAASA,EACTjB,iBAAkBA,EAClBzxB,SAAUA,EACVvF,UAAWA,EACXk4B,yBAA0BA,GAGhC,WArCJ,qBAAKt2B,UAAU,iCAAgC,UAC3C5B,GACA,qBAAK4B,UAAU,mBAAkB,SAC/B,4BAAIX,EAAE,6CAwChB,SAASi3B,EAAyBlB,GAChC,OAAOZ,GAAiBQ,4BAA4BI,EACtD,CAAC,SAEciB,EAAQ,GAAD,4CAGrB,OAHqB,kCAAtB,WAAuBjB,GAAkC,iFACjD4C,EAAU,iBAAa/hB,EAAW,kCAA0C,OAAhBmf,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB1+B,IACpFiK,EAAQE,KAAKm3B,GAAY,4CAC1B,sBACH,C,OCrGe,SAASC,GAAer5B,GACrC,IAAQs5B,EAAmDt5B,EAAnDs5B,cAAerjC,EAAoC+J,EAApC/J,QAASsjC,EAA2Bv5B,EAA3Bu5B,YAAan4B,EAAcpB,EAAdoB,UAC7C,EAA8BhB,mBAASk5B,GAAc,mBAA9CE,EAAO,KAAEC,EAAU,KAE1Bx4B,qBAAU,WACJu4B,GAAW,GACbD,IAGF,IAAMG,EAASF,EAAU,GAAK7N,aAAY,kBAAM8N,EAAWD,EAAU,EAAE,GAAE,WAAUvlC,EAEnF,OAAOylC,GAAU,kBAAM9N,cAAc8N,EAAM,CAC7C,GAAG,CAACF,IAEJ,IAAM1tB,EAAWlB,GAAY+uB,6BAA6BH,GAE1D,OACE,sBAAKp4B,UAAoB,OAATA,QAAS,IAATA,IAAa,gBAAgB,UAC1CnL,GAAW,cAACuiC,GAAA,EAAK,CAACC,QAASxiC,EAAS8Y,OAAQ,CAAE6qB,eAAgB9tB,MAC7D7V,GAAW,iCAAS6V,MAG5B,C,IClCY+tB,G,mBCACC,GAAkB,mDAC7B5Y,WAAqB,GAAG,KACxB9oB,MAAgB,GAAG,KACnByoB,eAAyB,GAAG,KAC5BkZ,QAAkB,CAAK,I,OCwBV,SAASC,GAAkBh6B,GACxC,IAAQ+hB,EAA6E/hB,EAA7E+hB,KAAgBkY,GAA6Dj6B,EAAvEkiB,SAAuEliB,EAA7Di6B,YAAY/Y,EAAiDlhB,EAAjDkhB,WAAY9qB,EAAqC4J,EAArC5J,eAAgB8jC,EAAqBl6B,EAArBk6B,OAAQC,EAAan6B,EAAbm6B,SAChE15B,EAAMC,cAAND,EACFsB,EAAUC,cAEhB,EAAwB5B,mBAAc,MAAK,mBAApCg6B,EAAI,KAAEC,EAAO,KACpB,EAA0Bj6B,mBAAsBy5B,GAAYS,cAAa,mBAAlExhC,EAAK,KAAEkb,EAAQ,KAEtB,IAAK9O,OAAOq1B,OAAQ,MAAM,IAAI7/B,MAAM,uCAYpC,OAVAuG,qBAAU,WACR,GAAInI,IAAU+gC,GAAYW,cACxB,KAyDF,WAE2B,wBA1DvBC,EAGF,CAFE,MAAOh+B,GACP1G,QAAQb,MAAM,2BAA4BuH,EAC5C,CAEJ,GAAG,CAACw9B,IAGF,sBAAK74B,UAAU,yBAAwB,UACpCtI,IAAU+gC,GAAYW,eACrB,gCACE,sBAAKp5B,UAAU,cAAa,UAC1B,cAAC,IAAe,CAACA,UAAU,OAAOI,KAAM,CAAC,MAAO,0BAC/Cf,EAAE,oDAEL,qBAAKW,UAAU,OAAM,SACnB,wBAAQA,UAAU,kBAAkBG,QAAS,kBAAM2D,OAAOovB,SAASC,QAAQ,EAAC,SACzE9zB,EAAE,8CAMV3H,IAAU+gC,GAAYW,eACrB,qCACE,uBAAOp5B,UAAU,aAAY,SAAEX,EAAE,2CAEjC,uBAAM3I,GAAG,eAAc,UACrB,qBAAKA,GAAG,mBACR,qBAAKA,GAAG,6BACR,cAACgZ,GAAgB,CAACC,QAASjY,IAAU+gC,GAAYa,mBACjD,wBACE5iC,GAAG,cACHsJ,UAAU,+CACV7I,KAAK,SACLsR,SAAU/Q,IAAU+gC,GAAYa,iBAChCn5B,QAAS,SAAC6X,GAAoB,OAqDzC,SAEkB,EAAD,oCAvD6BuhB,CAAIvhB,EAAIghB,EAAMpmB,EAAS,EAAC,SAE3D,uBAAM5S,UAAU,kBAAiB,UAC9B84B,GAAUz5B,EAAE,cAAe,CAAEshB,KAAMA,KAClCmY,GACA,sCACIC,GAAY15B,EAAE,eAAgB,CAAEshB,KAAMA,IACvCoY,GAAY15B,EAAE,cAAe,CAAEshB,KAAMoY,eAOhD,sBAAK/4B,UAAU,OAAM,UACnB,cAAC,IAAe,CAACI,KAAM,CAAC,MAAO,iBAAkB,IAAEf,EAAE,gDAOlC,aAqB5B,OArB4B,kCAA7B,6GAGI4H,EAAWnD,OAAOq1B,OAAOlyB,SAAS3T,gCAAqCulC,GAAY,sBAMlF,OANkF,0BAE7EW,EAAkBve,SAASC,eAAe,+BAE9Cse,EAAgBx5B,UAAY,sBAC5Bw5B,EAAgBvsB,MAAMwsB,WAAa,WACpC,2CAIiBxyB,EAAS+xB,OAAO,KAAD,GAIK,OAJlCU,EAAK,OACXT,EAAQS,IAEFC,EAAY1e,SAASC,eAAe,qBAC3Bye,EAAUC,UAAY,IAAG,UAClCF,EAAMG,OAAO,mBAAmB,KAAD,GAErCllC,QAAQkI,IAAI,wBAAwB,0DACrC,sBAED,SAASi9B,IACP,IAAMN,EAAkBve,SAASC,eAAe,4BAC5Cse,IACFA,EAAgBvsB,MAAMwsB,WAAa,UACnCD,EAAgBO,UAAUC,OAAO,cACjCR,EAAgBO,UAAUC,OAAO,cACjCR,EAAgBI,UAAY,GAEhC,CAEkB,aA0CjB,OA1CiB,kCAAlB,WAAmBptB,EAAyBwsB,EAAWpmB,GAAkB,mFAIhC,OAHvCpG,EAAM8Y,iBACNwU,IAEAlnB,EAAS6lB,GAAYa,kBAAkB,SAEnBW,EAASjB,GAAM,KAAD,EAAvB,GAALhiC,EAAK,OACA,CAAD,gBAG0B,OAFlCrC,QAAQb,MAAM,gCACdomC,EAA4B,WAC5BtnB,EAAS6lB,GAAY0B,aAAa,2BAOD,OAH7B3a,EAAqB,IAAIkZ,IACZ1hC,MAAQA,EAC3BwoB,EAAmBM,WAAaA,EAChCN,EAAmBmZ,OAASG,EAAO,UAC7BzY,GACHkZ,IAAI/Z,EAAoBxqB,GACxB+K,MAAK,SAACs1B,GACL,OAAQA,EAAO39B,OACb,KAAK4nB,GAAaS,QAChBma,EAA4B,WAC5BvlC,QAAQkI,IAAI,0BACZ+V,EAAS6lB,GAAYhxB,WACrB9G,EAAQE,KAAK,oBAAD,OAAqBif,IACjC,MACF,KAAKR,GAAahmB,MAChBsZ,EAAS6lB,GAAY0B,aACrBD,EAA4B,WAC5B,MACF,KAAK5a,GAAaU,QAChBpN,EAAS6lB,GAAYW,eACrBc,EAA4B,WAGlC,IACCrmC,OAAM,WACL+e,EAAS6lB,GAAY0B,aACrBD,EAA4B,UAC9B,IAAG,KAAD,uCACL,iCAEcD,EAAS,GAAD,4CAWtB,OAXsB,kCAAvB,WAAwBG,GAAkB,0GAEZA,EAAcH,WAAW,KAAD,EAAjC,GACU,QADrBl9B,EAAW,QACDrI,OAAe,yCACtBqI,EAAY/F,OAAK,gCAGnB,MAAI,yDAEJ,MAAI,0DAEd,sBAED,SAASkjC,EAA4BxlC,GAEnC,IAAM8kC,EAAkBve,SAASC,eAAe,4BAC3Cse,IAEU,YAAX9kC,GACF8kC,EAAgBO,UAAUC,OAAO,cACjCR,EAAgBO,UAAUzuB,IAAI,cAC9BkuB,EAAgBI,WAAav6B,EAAE,wBAE/Bm6B,EAAgBO,UAAUC,OAAO,cACjCR,EAAgBO,UAAUzuB,IAAI,cAC9BkuB,EAAgBI,WAAav6B,EAAE,uBAEjCm6B,EAAgBvsB,MAAMwsB,WAAa,UACrC,CACF,EFvMC,SANWhB,KAAW,4BAAXA,EAAW,oCAAXA,EAAW,8BAAXA,EAAW,0BAAXA,EAAW,sBAMtB,CANWA,QAAW,K,WGuBjB4B,GAAuB,CAC3BptB,MAAO,CACLqtB,KAAM,CACJ1nC,MAAO,UACP2nC,WAAY,0CACZC,cAAe,cACfC,SAAU,OACV,gBAAiB,CACf7nC,MAAO,YAGX8nC,QAAS,CACP9nC,MAAO,UACP+nC,UAAW,aAKF,SAASC,GAAkBh8B,GACxC,IAAQ+hB,EAAiE/hB,EAAjE+hB,KAAgBb,GAAiDlhB,EAA3DkiB,SAA2DliB,EAAjDkhB,YAAY9qB,EAAqC4J,EAArC5J,eAAgB8jC,EAAqBl6B,EAArBk6B,OAAQC,EAAan6B,EAAbm6B,SAEtD8B,EAASC,uBACTC,EAAWC,yBACT37B,EAAMC,cAAND,EACFsB,EAAUC,cAEhB,EAA8B5B,mBAAc,MAAK,mBAA1CnK,EAAO,KAAEomC,EAAU,KAC1B,EAA0Bj8B,mBAAsBy5B,GAAYS,cAAa,mBAAlExhC,EAAK,KAAEkb,EAAQ,KAEtB,OACE,gCACGlb,IAAU+gC,GAAYW,eACrB,gCACE,sBAAKp5B,UAAU,cAAa,UAC1B,cAAC,IAAe,CAACA,UAAU,OAAOI,KAAM,CAAC,MAAO,0BAC/Cf,EAAE,oDAEL,qBAAKW,UAAU,OAAM,SACnB,wBAAQA,UAAU,kBAAkBG,QAAS,kBAAM2D,OAAOovB,SAASC,QAAQ,EAAC,SACzE9zB,EAAE,8CAMV3H,IAAU+gC,GAAYW,eACrB,uBAAM1iC,GAAG,eAAe2uB,SA6B5B,SAEiB,GAAD,gCA/B0B,UACpC,cAAC,eAAW,CAAC2N,QAASqH,GAAsBhtB,SAyFpD,SAA0Bb,GACxB,IAAM0uB,EAAe1uB,EAAM1Y,MAAQ0Y,EAAM1Y,MAAMe,QAAU,KACzDomC,EAAWC,EACb,IA1FQ,uBACA,wBACEzyB,UAAWoyB,IAAWE,GAAYrjC,IAAU+gC,GAAYa,iBACxD5iC,GAAG,SACHsJ,UAAU,+CAA8C,SAExD,uBAAMtJ,GAAG,cAAcsJ,UAAU,kBAAiB,UAC/C84B,GAAUz5B,EAAE,cAAe,CAAEshB,KAAMA,KAClCmY,GACA,sCACIC,GAAY15B,EAAE,eAAgB,CAAEshB,KAAMA,IACvCoY,GAAY15B,EAAE,cAAe,CAAEshB,KAAMoY,YAM9C,cAACrpB,GAAgB,CAACC,QAASjY,IAAU+gC,GAAYa,mBAEhDzkC,GAAW,qBAAK6B,GAAG,kBAAiB,SAAE7B,IACvC,sBAAKmL,UAAU,OAAM,UACnB,cAAC,IAAe,CAACI,KAAM,CAAC,MAAO,iBAAkB,IAAEf,EAAE,gDAO7C,aAyDjB,OAzDiB,kCAAlB,WAAmBhE,GAAM,mFAGvB,GAFAA,EAAEiqB,iBAGGuV,GAAWE,EAAQ,iDAIe,OAAvCnoB,EAAS6lB,GAAYa,kBAAkB,SAElBuB,EAClBM,oBAAoB,CACnBhkC,KAAM,OACN6hC,KAAM+B,EAASK,WAAWC,kBAE3BxnC,OAAM,SAACwH,GAAM,OAAK1G,QAAQkI,IAAI,4BAA6BxB,EAAE,IAAE,KAAD,EALrD,GAANg6B,EAAM,OAMA,CAAD,gBAGyB,OAFlC1gC,QAAQb,MAAM,mCACdmnC,EAAW57B,EAAE,yBACbuT,EAAS6lB,GAAY0B,aAAa,+BAGhC9E,EAAOvhC,MAAM,CAAD,gBAGoB,OAFlCa,QAAQb,MAAM,0CAA2CuhC,EAAOvhC,OAChEmnC,EAAW5F,EAAOvhC,MAAMe,SACxB+d,EAAS6lB,GAAY0B,aAAa,2BAOD,OAH7B3a,EAAqB,IAAIkZ,IACZ1hC,MAAQq+B,EAAO+E,cAAc1jC,GAChD8oB,EAAmBM,WAAaA,EAChCN,EAAmBmZ,OAASG,EAAO,UAC7BzY,GACHkZ,IAAI/Z,EAAoBxqB,GACxB+K,MAAK,SAACs1B,GAAiC,IAAD,EACrC,OAAQA,EAAO39B,OACb,KAAK4nB,GAAaS,QAChBkb,EAAW,IACXtmC,QAAQkI,IAAI,0BACZ+V,EAAS6lB,GAAYhxB,WACrB9G,EAAQE,KAAK,oBAAD,OAAqBif,IACjC,MACF,KAAKR,GAAahmB,MAChBsZ,EAAS6lB,GAAY0B,aACrBc,EAAuB,QAAb,EAAC5F,EAAOvhC,aAAK,QAAIuL,EAAE,yBAC7B,MACF,KAAKigB,GAAaU,QAChBpN,EAAS6lB,GAAYW,eACrB6B,EAAW,IAGjB,IACCpnC,OAAM,WACL+e,EAAS6lB,GAAY0B,aACrBc,EAAW57B,EAAE,wBACf,IAAG,KAAD,wCACL,sBAMH,CC3Ie,SAASi8B,GAAY18B,GAClC,IAAQ28B,EAA4F38B,EAA5F28B,cAAevmC,EAA6E4J,EAA7E5J,eAAgB8qB,EAA6DlhB,EAA7DkhB,WAAYgB,EAAiDliB,EAAjDkiB,SAAUH,EAAuC/hB,EAAvC+hB,KAAM6a,EAAiC58B,EAAjC48B,WAAY1C,EAAqBl6B,EAArBk6B,OAAQC,EAAan6B,EAAbm6B,SAC/E15B,EAAMC,cAAND,EACFsB,EAAUC,cAEhB,EAA0C5B,qBAAkC,mBAArEy8B,EAAa,KAAEC,EAAgB,KACtC,EAA8B18B,mBAAc,MAAK,mBAA1CnK,EAAO,KAAEomC,EAAU,KAQ1B,GANAp7B,qBAAU,WAC0E,WAA/B07B,EAAcI,cAC/DD,EAAiBE,aAAWtoC,+GAEhC,GAAG,IAECkoC,EAAY,CACd,IAGMK,EAAqB,CACzBC,WAJiB,CACjBC,MAAO,WAMT,OACE,qCACkC,WAA/BR,EAAcI,cAA6BF,GAC1C,cAAC,YAAQ,CAACzI,QAAS6I,EAAehB,OAAQY,EAAc,SACtD,cAACb,GAAiB,CAChB5lC,eAAgBA,EAChB8qB,WAAYA,EACZa,KAAMA,EACNG,SAAUA,EACVgY,OAAQA,EACRC,SAAUA,MAKgB,WAA/BwC,EAAcI,cACb,cAAC/C,GAAiB,CAChB5jC,eAAgBA,EAChB8qB,WAAYA,EACZa,KAAMA,EACNG,SAAUA,EACV+X,WAAY0C,EAAcrI,SAC1B4F,OAAQA,EACRC,SAAUA,MAKpB,CACE,OACE,qCACE,wBAAQ/4B,UAAU,+CAA+CG,QAOtE,WAEgC,gCATkE,SAC3F,sBAAMH,UAAU,kBAAiB,SAAEX,EAAE,uBAGtCxK,GAAW,qBAAK6B,GAAG,kBAAiB,SAAE7B,OAKZ,aAwBhC,OAxBgC,kCAAjC,8FAG6C,OAFrC2qB,EAAqB,IAAIkZ,IACZ1hC,MAAQ8oB,EAC3BN,EAAmBM,WAAaA,EAAW,SACrCO,GACHkZ,IAAI/Z,EAAoBxqB,GACxB+K,MAAK,SAACs1B,GAAiC,IAAD,EACrC,OAAQA,EAAO39B,OACb,KAAK4nB,GAAaS,QAChBkb,EAAW,IACXtmC,QAAQkI,IAAI,0BACZ8D,EAAQE,KAAK,oBAAD,OAAqBif,IACjC,MACF,KAAKR,GAAahmB,MAChB2hC,EAAuB,QAAb,EAAC5F,EAAOvhC,aAAK,QAAIuL,EAAE,yBAC7B,MACF,KAAKigB,GAAaU,QAChBib,EAAW57B,EAAE,yBAGnB,IACCxL,OAAM,WACLonC,EAAW57B,EAAE,wBACf,IAAG,KAAD,uCACL,sBACH,C,OCrFe,SAAS28B,KACtB,IAAQ38B,EAAMC,cAAND,EACFsB,EAAUC,cACV+C,EAAmBD,GAAgB2B,cAEzC,EAAmDshB,cAA3C1Q,EAAW,EAAXA,YAAaqf,EAAkB,EAAlBA,mBAAoBt+B,EAAK,EAALA,MACzC,EAA8BgI,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAAgDxU,qBAAmC,mBAA5Eo2B,EAAgB,KAAE6G,EAAmB,KAC5C,EAAgDj9B,qBAAkB,mBAA3Dk9B,EAAgB,KAAEC,EAAmB,KAE5C,EAAkCn9B,wBAAgCnM,GAAU,mBAArEuL,EAAS,KAAEy5B,EAAY,KAC9B,EAA0C74B,qBAAqC,mBAAxEu8B,EAAa,KAAEa,EAAgB,KA0CtC,GAxCAv8B,qBAAU,WAERi2B,GAAiBiC,aAAa9hB,GAAalW,MAAK,SAAC3B,GAC/C,GAAIA,EAAW,CACby5B,EAAaz5B,GACb,IAAMg3B,EAAmBh3B,EAAU+2B,kBAAkB5+B,MAAK,SAACk+B,GAAE,OAAKA,EAAG/9B,KAAO4+B,CAAkB,IAC9F2G,EAAoB7G,GAChBp+B,GACFmP,GAAa0Z,aAAazhB,EAAUpJ,eAAgBgC,EAAOA,GAAO+I,MAAK,SAACwE,GAClEA,GACEA,EAAM0C,UAAY1C,EAAM0C,SAAShR,OAAS,GAC5C0K,EAAQE,KAAK,oBAAD,OAAqB7J,IAGnCqpB,GAAegc,oBAAoB93B,EAAM7N,IAAIqJ,MAAK,SAACw7B,GACjDa,EAAiBb,EACnB,IAEInG,EACFU,GACGwG,oBAAoB/3B,EAAM7N,IAC1BqJ,MAAK,SAACs1B,GACL8G,EAAoBI,SAAS3gC,EAAc4gC,aAAanH,EAAQ,IAClE,IACCxhC,OAAM,WACL2f,GAAW,EACb,IACCqD,SAAQ,kBAAMrD,GAAW,EAAM,IAElCA,GAAW,IAGb7S,EAAQE,KAAK,8BAAD,OAA+BoV,GAE/C,GAEJ,CACF,GACF,GAAG,CAACA,EAAaqf,IAEb3lB,EACF,OAAO,cAACD,GAAgB,CAACC,QAASA,IAGpC,IAAKylB,EACH,OACE,qBAAKp1B,UAAU,sCAAqC,SAClD,qBAAKA,UAAU,2BAA0B,SACvC,qBAAKA,UAAU,OAAM,UAAGo1B,GAAoB,8BAAM/1B,EAAE,0DAM5D,IAAMk3B,EAAQnB,EAAmBzrB,KAAOyrB,EAAiBH,SAAS3pB,IAAI8pB,EAAiBtqB,SAAU,WAAWS,SAAW,IAAI5N,KACrH8+B,EAAoD,IAA3BrH,EAAiBqB,MAC1C/B,EAAU,IAAI/2B,KACd++B,GAAc,IAAI/+B,KAAKy3B,EAAiBH,SAASv3B,UAAYg3B,EAAQh3B,WAAa,IAElFm5B,EAAuB,OAAhBzB,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkByB,KACzBD,EAAeC,EAAO3J,OAAOC,WAAW0J,EAAKd,KAAiB,KAC9De,EAAiBD,EAAO3J,OAAOC,WAAW0J,EAAKb,KAAmB,KAClEyB,EAAeZ,EAAO3J,OAAOC,WAAW0J,EAAKZ,KAAiB,KAC9D6C,GAASlC,IAAgBE,EAEzBI,EAA0B,UAAhBjhB,EAEhB,OACE,qBAAKjW,UAAU,qCAAoC,SACjD,sBAAKA,UAAU,mEAAkE,UAC/E,qBAAKA,UAAU,WAAU,SACvB,yBAAQA,UAAU,0BAA0BG,QAAS,kBAAMQ,EAAQE,KAAK,UAAD,OAAWoV,GAAc,EAAC,UAC/F,cAAC,IAAe,CAAC7V,KAAM,CAAC,MAAO,cAAeJ,UAAU,SACvDX,EAAE,uBAGP,cAAC44B,GAAc,CACbC,cAA+B,OAAhBgE,QAAgB,IAAhBA,IAAoB,IACnCrnC,QAAQ,yCACRsjC,YAAa,WACXx3B,EAAQE,KAAK,8BAAD,OAA+BoV,GAC7C,EACAjW,UAAU,gEAGZ,sBAAKA,UAAU,uCAAsC,UACnD,sBAAKA,UAAU,qCAAoC,WAChC,OAAhBo1B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB+B,UAAW,qBAAK32B,IAAqB,OAAhB40B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB+B,QAAS12B,IAAI,GAAGT,UAAU,aACpF,qBAAIA,UAAU,YAAW,UAAC,IAAkB,OAAhBo1B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB92B,KAAK1K,IAAI+P,SAEzD,sBAAK3D,UAAU,YAAW,UACxB,qBAAKA,UAAU,OAAM,SACRX,EAAV63B,EAAY,4CAAiD,yCAG/D9B,EAAiBvzB,YAAYjO,IAAI+P,IAAa,sBAAM3D,UAAU,OAAM,SAAEo1B,EAAiBvzB,YAAYjO,IAAI+P,KAEvGyxB,EAAiBH,SAChB,qCACE,cAACgD,GAAc,CACbC,cAAewE,EACf7nC,QAAQ,wCACRsjC,YAAa,kBAAM,IAAI,EACvBn4B,UAAU,yBAEZ,cAACo3B,GAAA,EAAK,CACJC,QAAQ,sCACR1pB,OAAQ,CACNvJ,IAAKoF,GAAY+I,eAAegkB,EAAO/sB,GAAY0G,qBAKzDklB,EAAiBH,SACjB,qBAAKj1B,UAAU,uBAAsB,SACnC,cAACo3B,GAAA,EAAK,CACJC,QAAQ,uCACR1pB,OAAQ,CAAE7C,SAAUtB,GAAYguB,eAAepC,EAAiBtqB,oBAMrE8rB,KACEE,GACD,qBAAK92B,UAAU,MAAK,SAClB,qBAAKA,UAAU,8BAA6B,SAC1C,qBAAKA,UAAU,cAAa,SAC1B,8BACE,iCAASX,EAAE,gCACX,yBACGu3B,GACDv3B,EAAE,gCAAiC,CACjCshB,KAAM/kB,EAAcglB,YAAYgW,EAAeA,EAAexB,EAAiBsB,aAC/E5V,SAAmB,OAAT1iB,QAAS,IAATA,OAAS,EAATA,EAAW0iB,aAEtBgW,GACDz3B,EAAE,kCAAmC,CACnCshB,KAAM/kB,EAAcglB,YAAYkW,EAAiBA,EAAiB1B,EAAiBsB,aACnF5V,SAAmB,OAAT1iB,QAAS,IAATA,OAAS,EAATA,EAAW0iB,WAEzB,yBACG2W,GACD,qCACGp4B,EAAE,2BAA4B,CAC7BshB,KAAM/kB,EAAcglB,YAAY6W,EAAeA,EAAerC,EAAiBsB,aAC/E5V,SAAmB,OAAT1iB,QAAS,IAATA,OAAS,EAATA,EAAW0iB,WAEvB,0BAGHzhB,EAAE,2BAA4B,CAC7BshB,KAAM/kB,EAAcglB,YAAYwU,EAAiBqB,MAAQrB,EAAiBqB,MAAQrB,EAAiBsB,aACnG5V,SAAmB,OAAT1iB,QAAS,IAATA,OAAS,EAATA,EAAW0iB,oBAQnC,qBAAK9gB,UAAU,MAAK,SAClB,qBAAKA,UAAU,8BAA6B,SACzCu7B,GAAiBvkC,IAAkB,OAAToH,QAAS,IAATA,OAAS,EAATA,EAAWpJ,iBACpC,mCACE,cAACsmC,GAAW,CACVC,cAAeA,EACfzb,WAAY9oB,EACZhC,eAAyB,OAAToJ,QAAS,IAATA,OAAS,EAATA,EAAWpJ,eAC3BwmC,YAAaiB,EACb9b,KAAM/kB,EAAcglB,YAAYwU,EAAiBqB,MAAQrB,EAAiBqB,MAAQrB,EAAiBsB,aACnG5V,SAAU1iB,EAAU0iB,SACpBgY,OAAQA,EACRC,SACEtB,EAAe77B,EAAcglB,YAAY6W,EAAeA,EAAerC,EAAiBsB,kBAAe7jC,UAQnH,sBAAKmN,UAAU,sBAAqB,UAClC,sBAAKA,UAAU,QAAO,UACpB,sBAAKA,UAAU,6BAA4B,UAAC,IAAEX,EAAE,6CAChD,sBAAKW,UAAU,kBAAiB,UAAC,KAAGX,EAAE,+CAExC,qBAAKW,UAAU,iBAAgB,SAC7B,qBAAKA,UAAU,8BAA6B,SAC/BX,EAAV63B,EAAY,wCAA6C,2CAK9DuF,GAA0BlB,GAC1B,qCACE,oBAAIv7B,UAAU,SACd,mBACEwrB,KACiC,WAA/B+P,EAAcI,aACG,OAAbh4B,EACE,sCACA,sCACF,mCAEN8I,OAAO,SACPkwB,IAAI,aAAY,mBACbt9B,EAAE,6CAA4C,YAAIk8B,EAAcI,0BAOnF,C,gCChPA,SAASiB,GAAsBh+B,GAC7B,IAAQ+Q,EAAkC/Q,EAAlC+Q,QAASuP,EAAyBtgB,EAAzBsgB,SAAUzI,EAAe7X,EAAf6X,KAAMtf,EAASyH,EAATzH,KAEjC,OACE,cAAC,KAAgB,CAACA,KAAMA,EAAMsf,KAAMA,EAAMomB,OAAQltB,EAAQ,SACvDuP,GAGP,CAZA0d,GAAsBtzB,aAAe,CACnCnS,KAAM,OACNsf,KAAM,GAYOmmB,ICvBHE,GDuBGF,OCnBd,SAJWE,KAAY,kBAAZA,EAAY,kBAAZA,EAAY,kBAIvB,CAJWA,QAAY,KC+CTC,OArCf,SAAmBn+B,GACjB,IAAQo+B,EAA+Bp+B,EAA/Bo+B,2BAER,EAAwCh+B,mBAAuB89B,GAAaG,SAAQ,mBAA7EC,EAAY,KAAEC,EAAe,KACpC,EAA0Bn+B,mBAAiB,IAAG,mBAAvClL,EAAK,KAAEspC,EAAQ,KACtB,EAAwBp+B,mBAAqB,IAAG,mBAAzC+D,EAAI,KAAE2Q,EAAO,KAUpB,SAAS2D,IACP8lB,EAAgBL,GAAaG,SAE7Bx5B,GACG45B,YACAt9B,MAAK,SAACgD,GACL2Q,EAAQ3Q,GACRo6B,EAAgBL,GAAa/c,QAC/B,IACClsB,OAAM,SAACwH,GACN8hC,EAAgBL,GAAaQ,SAC7BF,EAAS/hC,GAEL2hC,GACF30B,GAAavU,MAAMkpC,EAEvB,GACJ,CAEA,OA3BAn9B,qBACE,WACEwX,GACF,GAEA,IAsBK,CAAEtU,OAAMm6B,eAAcppC,QAAOujB,UACtC,EC3Be,SAASkmB,GAAS3+B,GAC/B,IAAQ1J,EAAW0J,EAAX1J,OACAmK,EAAMC,cAAND,EACFsB,EAAUC,cAEhB,EAAwCm8B,GAAU,CAAEC,2BAA4B39B,EAAE,6BAA1E0D,EAAI,EAAJA,KAAMm6B,EAAY,EAAZA,aAAc7lB,EAAO,EAAPA,QAE5B,OACE,sBAAKrX,UAAU,gCAA+B,UAC5C,6BAAKX,EAAE,qBACP,cAACuJ,GAAmB,CAClB5I,UAAU,YACVyI,SAAUy0B,IAAiBJ,GAAa/c,QACxC5f,QAAS,kBAAMkX,GAAS,IAGzB6lB,IAAiBJ,GAAaQ,SAAW,8BAAMj+B,EAAE,6BAElD,qBAAKW,UAAU,WAAU,SACvB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,qBAAKA,UAAU,YAAW,SACxB,cAAC,GAAqB,CAAC2P,QAASutB,IAAiBJ,GAAaG,QAASxmB,KAAM,EAAE,SAC7E,wBAAOzW,UAAU,0CAAyC,UACxD,gCACE,+BACE,6BAAKX,EAAE,oBACP,6BAAKA,EAAE,qBACNvK,EAAciC,mBAAmB7B,IAAW,6BAAKmK,EAAE,uBACpD,uBAGA,4BAGJ,kCACG69B,IAAiBJ,GAAa/c,SAA2B,IAAhBhd,EAAK9M,QAC7C,6BACE,oBAAI4b,QAAS,EAAE,SAAExS,EAAE,yBAItB0D,EAAKmK,KAAI,SAACrK,GACT,IAAMtP,EAAG,gBAAYsP,EAAInM,IACnBuY,EAAuB,WAAdpM,EAAInL,MACbgR,EAAQrJ,EAAE4P,EAAS,6BAA+B,+BACxD,OAAKpM,EAAI5K,OAIP,qBAAiBkI,QAAS,kBAAMQ,EAAQE,KAAKtN,EAAI,EAAC,UAChD,+BACGsP,EAAIvE,KACJuE,EAAId,SAAW,cAAC,IAAe,CAAC/B,UAAU,OAAOI,KAAM,CAAC,MAAO,kBAElE,6BACE,sBACEJ,UAAS,oBAAeiP,EAAS,UAAY,UAC7C,iBAAe,UACf,oBAAkB,MAClBvG,MAAOA,EAAM,SAEb,cAAC,IAAe,CAACtI,KAAM,CAAC,MAAO,gBAGlCtL,EAAciC,mBAAmB7B,IAChC,6BACG2N,EAAIT,SACHoH,GAAY+I,eAAe,IAAI5U,KAAKkF,EAAIT,QAAQ4K,UAAU,EAAG,IAAM,UAAWxD,GAAY0G,gBAGhG,6BAAK7Q,EAAE,yBAA0B,CAAExD,MAAOohB,GAAWugB,oBAAoB36B,OACzE,6BACE,cAACgG,GAAmB,CAACtV,IAAKA,QAvBrBsP,EAAInM,IAHN,4BA8BX,sBAUpB,C,OC3De+mC,ICnCVC,GDmCUD,GAnCf,SAAkB7+B,GAChB,IAAQ9H,EAAsC8H,EAAtC9H,MAAOkmC,EAA+Bp+B,EAA/Bo+B,2BAEf,EAAwCh+B,mBAAuB89B,GAAaG,SAAQ,mBAA7EC,EAAY,KAAEC,EAAe,KACpC,EAA0Bn+B,mBAAiB,IAAG,mBAAvClL,EAAK,KAAEspC,EAAQ,KACtB,EAAsBp+B,mBAAuB,MAAK,mBAA3C6D,EAAG,KAAEgkB,EAAM,KAUlB,SAASxP,IACP5T,GACGk6B,aAAa7mC,GACbiJ,MAAK,SAAC8C,GACLgkB,EAAOhkB,GACPs6B,EAAgBL,GAAa/c,QAC/B,IACClsB,OAAM,SAACwH,GACN8hC,EAAgBL,GAAaQ,SAC7BF,EAAS/hC,GAEL2hC,GACF30B,GAAavU,MAAMkpC,EAEvB,GACJ,CAEA,OAzBAn9B,qBACE,WACEwX,GACF,GAEA,IAoBK,CAAExU,MAAKq6B,eAAcppC,QAAOujB,UACrC,EEnBe,SAASumB,GAAqBh/B,GAAgC,IAAD,EAClEiE,EAAwFjE,EAAxFiE,IAAK6B,EAAmF9F,EAAnF8F,QAAS0b,EAA0ExhB,EAA1EwhB,UAAWhd,EAA+DxE,EAA/DwE,QAASC,EAAsDzE,EAAtDyE,kBAAmBC,EAAmC1E,EAAnC0E,KAAMpO,EAA6B0J,EAA7B1J,OAAQ2oC,EAAqBj/B,EAArBi/B,QAASxmB,EAAYzY,EAAZyY,QAC5EhY,EAAMC,cAAND,EAER,EAAkCL,oBAAkB,GAAM,mBAAnD4lB,EAAS,KAAEkZ,EAAY,KAC9B,EAAoD9+B,oBAAkB,GAAM,mBAArEjI,EAAkB,KAAEgnC,EAAqB,KAChD,EAAoC/+B,oBAAkB,GAAM,mBAArDg/B,EAAU,KAAEC,EAAa,KAE1B/gB,EAAW,OAAHra,QAAG,IAAHA,OAAG,EAAHA,EAAKX,OAAO3L,MAAK,SAAC2nC,GAAC,OAAKA,EAAExnC,KAAO0M,CAAO,IAChDqa,EAAmB,OAALP,QAAK,IAALA,OAAK,EAALA,EAAOE,aAAa7mB,MAAK,SAAC8mB,GAAC,OAAKA,EAAEC,SAAWja,CAAiB,IAE5E+a,GADsB,OAAXX,QAAW,IAAXA,KAAa/lB,MAAUslB,GAAkBmB,OACjC,OAAHtb,QAAG,IAAHA,GAAsB,QAAnB,EAAHA,EAAKL,yBAAiB,WAAnB,EAAH,EAAwB7L,MAC5C,SAACsnB,GAAC,OAAKA,EAAE5a,oBAAsBA,GAAqB4a,EAAE7a,UAAYA,GAAW6a,EAAEnnB,QAAU+L,EAAInM,EAAE,KAE7FynC,EAAa,GAejB,OAdG1gB,IACA0gB,EAAa,QAAQliC,KAAKwhB,EAAYH,QAAWG,EAAYH,QAAc,OAALJ,QAAK,IAALA,OAAK,EAALA,EAAOxmB,IAAK+mB,EAAYH,QAGjGzd,qBAAU,WACJgD,GACFk7B,EAAsB9mC,EAAcF,mBAAmB7B,IACvD+oC,EAAchnC,EAAcmnC,iBAAiBlpC,EAAQ2N,EAAInM,OAEzDqnC,GAAsB,GACtBE,GAAc,GAElB,GAAG,CAACp7B,EAAK3N,IAEJuoB,EAKH,qBAAKzd,UAAU,6BAA4B,SACzC,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,+BACGm+B,IAA+B,OAALjhB,QAAK,IAALA,OAAK,EAALA,EAAOxmB,IAAK+mB,EAAYH,OACnD,cAAC1U,GAAmB,CAClBzI,QAAS,WACPkX,IACAymB,GAAa,EACf,EACA99B,UAAW,cAIjB,wBAAQA,UAAU,sBAAsBG,QAAS,kBAAM09B,GAAS,OAGlE,sBAAK79B,UAAU,YAAW,UAEvB0E,GACC,sBAAK1E,UAAU,OAAM,UACnB,gCACE,qBAAKA,UAAU,OAAM,SAAEX,EAAE,iCACzB,cAAC,IAAI,CAACW,UAAU,OAAOK,GAAE,kBAAaqE,GAAU,SAC7CA,OAIJ0b,GACC,gCACG/gB,EAAE,uCACH,cAAC,IAAe,CAACW,UAAU,OAAOI,KAAM,CAAC,MAAO,oBAGpD,0BAIJ,sBAAKJ,UAAW0E,EAAU,OAAS,GAAG,UACpC,qBAAK1E,UAAU,YAAW,SAAEX,EAAE,qCAG9B,8BAEE,+BACGulB,EACC,cAAC1C,GAAuB,IAExB,cAACE,GAAiB,CAACC,aAAa,EAAoBliB,QAyClE,WAEqB,gCA3CgEsI,SAAUmc,QAMtF7tB,GACC,qBAAKiJ,UAAU,OAAM,SACnB,wBAAQA,UAAU,0BAA0BG,QA0DzD,WAEwB,gCA5DqD,SAC7Dd,EAAE,+BAOX,sBAAKW,UAAU,OAAM,UACnB,uBAEA,qBAAKA,UAAU,YAAW,SAAEX,EAAE,4CAE7B+e,GAAiB,uBAAOpe,UAAU,gBAAe,SAAEX,EAAE,mDACpD+e,GAAiB,uBAAOpe,UAAU,OAAM,SAAEX,EAAE,gDAE7C2+B,GACC,mCACG5f,EACC,wBAAQpe,UAAU,+BAA+BG,QA2EjE,WACiB,OAAXsd,QAAW,IAAXA,KAAa/lB,OAASmL,GACxBY,GACG46B,0BAA0Bx7B,EAAInM,GAAI0M,EAASC,GAC3CtD,KAAI,iDAAC,WAAOwI,GAAO,2FACZ8O,IAAU,KAAD,sCAChB,mDAFI,IAGJxjB,OAAM,SAACC,GACNuU,GAAavU,MAAMuL,EAAE,wBACvB,GAEN,EAtFuF,SACpEA,EAAE,yCAGL,wBAAQW,UAAU,+BAA+BG,QA0DjE,WACiB,OAAXsd,QAAW,IAAXA,KAAa/lB,OAASmL,GACxBY,GACG66B,4BAA4Bz7B,EAAInM,GAAI0M,EAASC,GAC7CtD,KAAI,iDAAC,WAAOwI,GAAO,2FACZ8O,IAAU,KAAD,sCAChB,mDAFI,IAGJxjB,OAAM,SAACC,GACNuU,GAAavU,MAAMuL,EAAE,wBACvB,GAEN,EArEyF,SACtEA,EAAE,wDArFZ,8BAAMA,EAAE,sDAgGM,aAuBtB,OAvBsB,kCAAvB,2FACOwD,EAAI,CAAD,gDAIRi7B,GAAa,GACbr6B,GACGugB,SAASnhB,EAAInM,GAAI0M,EAASC,EAAmBC,GAC7CvD,KAAI,iDAAC,WAAOwI,GAAO,2FACZ8O,IAAU,KAAD,sCAChB,mDAFI,IAGJxjB,OAAM,SAACC,GAAW,IAAD,IACgB,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,EAAE,8BACgB,OAAvB,OAALvL,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QAC1B2T,GAAavU,MAAMuL,EAAE,kCAErBgJ,GAAavU,MAAMuL,EAAE,wBAEzB,IACCwX,SAAQ,WACPinB,GAAa,EACf,IAAG,2CACN,wBAEwB,aAmBxB,OAnBwB,kCAAzB,2FACOj7B,EAAI,CAAD,gDAIRY,GACG86B,WAAW17B,EAAInM,GAAI0M,EAASC,GAC5BtD,KAAI,iDAAC,WAAOwI,GAAO,2EAClBF,GAAaE,QAAQlJ,EAAE,0BAA2B,CAAE3H,MAAO6Q,EAAU,OAAS,WAAY,2CAC3F,mDAFI,IAGJ1U,OAAM,SAACC,GAAW,IAAD,IACgB,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,EAAE,8BACgB,OAAvB,OAALvL,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QAC1B2T,GAAavU,MAAMuL,EAAE,kCAErBgJ,GAAavU,MAAMuL,EAAE,wBAEzB,IAAG,2CACN,wBA2BH,CC3Ne,SAASm/B,KACtB,IAAQn/B,EAAMC,cAAND,EACR,OACE,sBAAKW,UAAU,OAAM,UACnB,iCACE,cAAC,IAAe,CAACA,UAAU,+BAA+BI,KAAM,CAAC,MAAO,YAAa,IAAEf,EAAE,oBAE3F,uBAAMW,UAAU,OAAM,UACpB,cAAC,IAAe,CAACA,UAAU,cAAcI,KAAM,CAAC,MAAO,YAAa,IAAEf,EAAE,oBAE1E,uBAAMW,UAAU,OAAM,UACpB,cAAC,IAAe,CAACA,UAAU,eAAeI,KAAM,CAAC,MAAO,YAAa,IAAEf,EAAE,sCAE3E,uBAAMW,UAAU,OAAM,UACpB,cAAC,IAAe,CAACA,UAAU,aAAaI,KAAM,CAAC,MAAO,YAAa,IAAEf,EAAE,iCAEzE,uBAAMW,UAAU,OAAM,UACpB,cAAC,IAAe,CAACA,UAAU,gCAAgCI,KAAM,CAAC,MAAO,YAAc,IACtFf,EAAE,qDAIX,CFRe,SAASo/B,GAAe7/B,GACrC,IAAQiE,EAA0BjE,EAA1BiE,IAAKg7B,EAAqBj/B,EAArBi/B,QAASxmB,EAAYzY,EAAZyY,QACdhY,EAAMC,cAAND,EAER,EAA0BL,mBAA+B0+B,GAAqBgB,UAAS,mBAAhFhnC,EAAK,KAAEkb,EAAQ,KAEtB,OACE,qBAAK5S,UAAU,6BAA4B,SACzC,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,oCAET,wBAAQW,UAAU,sBAAsBG,QAAS09B,OAGnD,sBAAK79B,UAAU,YAAW,UACvBtI,IAAUgmC,GAAqBgB,UAC9B,qCACGr/B,EAAE,kCACH,sBAAKW,UAAU,OAAM,UACnB,wBAAQA,UAAU,kBAAkBG,QAoBhD,WAEsB,gCAtB6C,SACpDd,EAAE,gBAEL,wBAAQW,UAAU,uBAAuBG,QAAS09B,EAAQ,SACvDx+B,EAAE,qBAMV3H,IAAUgmC,GAAqBiB,SAC9B,8BACE,8BAAMt/B,EAAE,wBAIX3H,IAAUgmC,GAAqBkB,UAAY,8BAAMv/B,EAAE,mCAMpC,aAsBvB,OAtBuB,kCAAxB,iGACOwD,EAAI,CAAD,gDAKiC,OALjC,SAKN+P,EAAS8qB,GAAqBiB,SAAS,SAEjCl7B,GAAWo7B,aAAah8B,EAAInM,IAAI,KAAD,EAEG,OAFH,SAErCkc,EAAS8qB,GAAqBkB,UAAU,UAClCvnB,IAAU,KAAD,8BAQd,OALGynB,EAAa,WAAH,OACd,IAAIC,SAAQ,kBACVnf,YAAW,WACTie,GACF,GAAG,IAAK,GACR,EAAD,UACGiB,IAAa,KAAD,oBACZznB,IAAU,KAAD,yDAChB,sBACH,CGzEe,SAAS2nB,GAAuBpgC,GAC7C,IAAQoD,EAA0BpD,EAA1BoD,QAASi9B,EAAiBrgC,EAAjBqgC,aACjB,EAA4BjgC,mBAAkBigC,GAAa,mBAApDC,EAAM,KAAEC,EAAS,KAExB,OACE,qCACGn9B,EAAQzK,aAAa,IAAEyK,EAAQxK,OAChC,uBACCwK,EAAQvK,KAAM,IACdynC,EACC,qCACE,uBACA,iCACGl9B,EAAQtK,MAAM,KAAGsK,EAAQrK,QAAQ,KAAGqK,EAAQpK,iBAIjD,wBACEoI,UAAU,iCACVG,QAAS,WACPg/B,GAAU,SAACC,GAAQ,OAAMA,CAAQ,GACnC,EAAE,SACH,UAMT,CChBe,SAASC,GAAoBzgC,GAC1C,IAAQ1J,EAAW0J,EAAX1J,OAEA4B,EAAU6vB,cAAV7vB,MACAuI,EAAMC,cAAND,EACFsB,EAAUC,cAChB,EAA8B68B,GAAS,CAAE3mC,MAAOA,EAAOkmC,2BAA4B39B,EAAE,4BAA7EwD,EAAG,EAAHA,IAAKq6B,EAAY,EAAZA,aAEb,EAAoDl+B,oBAAkB,GAAM,mBAArEjI,EAAkB,KAAEgnC,EAAqB,KAChD,EAAoC/+B,oBAAkB,GAAM,mBAArDg/B,EAAU,KAAEC,EAAa,KAE1BtuB,EAAUutB,IAAiBJ,GAAaG,QAO9C,OALAp9B,qBAAU,WACRk+B,EAAsB9mC,EAAcF,mBAAmB7B,IACvD+oC,EAAchnC,EAAcmnC,iBAAiBlpC,EAAW,OAAH2N,QAAG,IAAHA,OAAG,EAAHA,EAAKnM,IAC5D,GAAG,CAACxB,IAGF,qBAAK8K,UAAU,gBAAe,SAC5B,qBAAKA,UAAU,SAAQ,SACrB,qBAAKA,UAAU,OAAM,SACnB,sBAAKA,UAAU,YAAW,UACvB2P,GAAW,cAACD,GAAgB,CAACC,QAASA,KACrCA,GACA,qCACE,sBAAK3P,UAAU,MAAK,UAClB,sBAAKA,UAAU,QAAO,UACnB6C,EAAM,cAACkM,GAAoB,CAAClM,IAAKA,IAAU,4BAAIxD,EAAE,8BAC9C,OAAHwD,QAAG,IAAHA,OAAG,EAAHA,EAAKd,UAAW,cAAC,IAAe,CAAC/B,UAAU,OAAOI,KAAM,CAAC,MAAO,eAChEyC,GAAOm7B,GACN,qCACGn7B,EAAIN,qBACH,qCACE,uBACA,iCACGlD,EAAE,iCAAkC,IACpCmK,GAAY+I,eAAe,IAAI5U,KAAKkF,EAAIN,qBAAsBiH,GAAY0G,oBAIhFrN,EAAIT,SACH,qCACE,uBACA,iCAAM,WACK,IACRoH,GAAY+I,eAAe,IAAI5U,KAAKkF,EAAIT,QAAQ4K,UAAU,EAAG,IAAM,UAAWxD,GAAY0G,2BAQnG,OAAHrN,QAAG,IAAHA,OAAG,EAAHA,EAAKb,UACJ,qBAAKhC,UAAU,QAAO,SAAE6C,EAAM,cAACm8B,GAAsB,CAACC,cAAc,EAAMj9B,QAASa,EAAIb,UAAc,+BAEtGa,GAAOA,EAAIP,iBAAmBvL,GAC7B,mCACE,sBAAKiJ,UAAU,QAAO,UACpB,uBACA,6BAAI,qBACJ,iCACGX,EAAE,oCAAoC,IAAEigC,GAAWz8B,EAAIP,gBAAgBi9B,eAAgB,GAAG,YAE7F,uBACA,iCACGlgC,EAAE,oCAAoC,IAAEigC,GAAWz8B,EAAIP,gBAAgBk9B,cAAe,GAAG,OAE5F,uBACA,iCACGngC,EAAE,oCAAoC,IAAE6K,KAAKu1B,MAAM58B,EAAIP,gBAAgBo9B,SAAS,KAAG,IACnFx1B,KAAKu1B,MAAM58B,EAAIP,gBAAgBq9B,UAAU,QAAML,GAAWz8B,EAAIP,gBAAgBs9B,kBAAmB,GAAG,QAEvG,uBACA,iCACGvgC,EAAE,qCAAqC,IAAE6K,KAAKu1B,MAAM58B,EAAIP,gBAAgBu9B,UAAU,KAAG,IACrF31B,KAAKu1B,MAAM58B,EAAIP,gBAAgBw9B,WAAW,QAAMR,GAAWz8B,EAAIP,gBAAgBy9B,mBAAoB,GAAG,gBAMjH,qBAAK//B,UAAU,MAAK,SAClB,qBAAKA,UAAU,SAAQ,SACrB,wBACEA,UAAU,mCACVG,QAAS,SAAC6X,GACRA,EAAG2V,kBACHhtB,EAAQE,KAAK,SAAD,OAAU/J,EAAK,eAC7B,EAAE,SAEDuI,EAAE,qCAWzB,CAEA,SAASigC,GAAWpjC,EAAe8jC,GACjC,OAAO9S,OAAOC,WAAWjxB,GAAO+jC,QAAQD,EAC1C,EJtHyB,SAApBtC,OAAoB,uBAApBA,IAAoB,qBAApBA,IAAoB,wBAApBA,QAAoB,KGJzBsB,GAAuB11B,aAAe,CACpC21B,cAAc,G,IEJXiB,G,WAAI,SAAJA,KAAI,cAAJA,EAAI,aAAJA,QAAI,KAqEQC,OA5DjB,SAAsBvhC,GAClB,IAAQyO,EAAazO,EAAbyO,SAER,EAA0BrO,mBAAekhC,GAAKE,OAAM,mBAA7C1oC,EAAK,KAAEkb,EAAQ,KACtB,EAAgC5T,mBAA0B,MAAK,mBAAxD6T,EAAQ,KAAEC,EAAW,KACtBC,EAAQC,iBAAO,MAEb3T,EAAMC,cAAND,EAERQ,qBAAU,WACHgT,GACHC,EAAY,IAAIG,KAASF,EAAMG,SAAW,GAAI,CAAC,GAEnD,GAAG,CAACL,IAEJ,IAIMnT,EAAc,SAAC2gC,GACf3oC,IAAU2oC,IACZztB,EAASytB,GACThzB,EAASgzB,IAGH,OAARxtB,QAAQ,IAARA,KAAUO,MACZ,EAEA,OACE,sBAAKpT,UAAU,gBAAe,UAC5B,wBACEA,UAAU,0CACV7I,KAAK,SACL,iBAAe,WACfkc,IAAKN,EACL,gBAAc,QACd5S,QArBkB,WACd,OAAR0S,QAAQ,IAARA,KAAUS,MACZ,EAmB+B,SAExBjU,EAAE,2BAAD,OAA4B3H,EAAMwP,eAEtC,oBAAIlH,UAAU,gBAAgB,kBAAgB,YAAW,SACtDxB,OAAOmP,OAAOuyB,IAAMhzB,KAAI,SAACxV,GACxB,OACE,6BACE,wBACEsI,UAAU,gBACVG,QAAS,WACPT,EAAYhI,EACd,EAAE,SAED2H,EAAE,2BAAD,OAA4B3H,OAPzBA,EAWb,QAIR,EC5Da,SAAS4oC,GAAc1hC,GACpC,IAAQqmB,EAAqBrmB,EAArBqmB,OAAQxc,EAAa7J,EAAb6J,SAEhB,OACE,cAAC,IAAe,CACdzI,UAAW,QAAUilB,EAAS,UAAY,KAAOxc,EAAW,YAAc,IAC1ErI,KAAM,CAAC,MAAO6kB,EAAS,YAAc,SAG3C,CAbAqb,GAAch3B,aAAe,CAC3B2b,QAAQ,EACRxc,UAAU,GC2EGyN,OArEf,SAAgBtX,GAAqB,IAAD,EAC1BiE,EAAqEjE,EAArEiE,IAAKqa,EAAgEte,EAAhEse,MAAOO,EAAyD7e,EAAzD6e,YAAaa,EAA4C1f,EAA5C0f,iBAAkBiiB,EAA0B3hC,EAA1B2hC,sBAE7C55B,EAAc9D,EAAIJ,aAAalM,MACnC,SAAC0nB,GAAC,OACAA,EAAE7a,UAAY8Z,EAAMxmB,IACpBunB,EAAE5a,oBAAsBoa,EAAYH,QACpC3f,KAAK6iC,MAAMviB,EAAE9Z,OAASxG,KAAKC,OAC3BD,KAAK6iC,MAAMviB,EAAE7Z,KAAOzG,KAAKC,KAAK,IAE5BsgB,EAAWT,EAAY/lB,QAAUslB,GAAkBmB,OACnDC,EAAmB,OAAHvb,QAAG,IAAHA,GAAsB,QAAnB,EAAHA,EAAKL,yBAAiB,WAAnB,EAAH,EAAwB7L,MAC5C,SAACsnB,GAAC,OAAKA,EAAE5a,oBAAsBoa,EAAYH,QAAUW,EAAE7a,UAAY8Z,EAAMxmB,IAAMunB,EAAEnnB,QAAU+L,EAAInM,EAAE,IAE7F+pC,EAAkBvjB,EAAMxmB,GAAK+mB,EAAYH,OAC3CkB,EAAkBF,EAAiB/nB,MAAK,SAACgoB,GAAE,OAAKA,EAAG7nB,KAAO+mB,EAAYnY,MAAM,IAC1Eo7B,GAAqBliB,EAA2C,IAAzBA,EAAgBjZ,OAAe,IAAM,KAE9Eo7B,OAAyC9tC,EACzCgQ,EAAIH,OAASG,EAAIH,MAAM4C,QAAUzC,EAAIH,MAAMk+B,WAAaH,IAC1DE,EAAYriB,EAAiB/nB,MAAK,SAACgoB,GAAE,aAAKA,EAAG7nB,MAAgB,QAAd,EAAKmM,EAAIH,aAAK,aAAT,EAAW4C,OAAQ,KAEzE,IAAMu7B,GAAeF,EAA+B,IAAnBA,EAAUp7B,OAAe,IAAM,KAE1Du7B,EAAqBj+B,EAAIf,YAAYN,eAA4B,iBAAXqB,EAAInM,IAAyBmM,EAAIf,YAAYL,mBAEzG,OACE,gCAEGk/B,GACC,qBAAqC1zB,MAAO,CAAE1H,OAAQs7B,GAAe7gC,UAAW,cAAc,SAC5F,qBAAKA,UAAU,WADP,QAAUygC,GAOtB,qBACExzB,MAAO,CAAE1H,OAAQm7B,GACjB1gC,UACE,+BACC2G,EAAc,eAAiB,KAC/BuX,EAAW,UAAY,YACvBE,EAAgB,YAAc,IAEjCje,QAAS,WACPogC,EAAsBrjB,EAAOO,EAC/B,EAAE,SAEF,qBAAKzd,UAAU,MAAK,SAClB,sBAAKA,UAAU,qBAAoB,UACjC,sBAAMA,UAAU,0BAAyB,SAAEyd,EAAYH,SAEvD,uBAAMtd,UAAW,uBAAyBke,EAAW,UAAY,WAAW,WAC9D,OAAXvX,QAAW,IAAXA,OAAW,EAAXA,EAAayZ,YAAa,cAAC,IAAe,CAACpgB,UAAU,OAAOI,KAAM,CAAC,MAAO,iBAE1E0gC,GACC,cAAC,IAAe,CAAC9gC,UAAU,OAAOiN,MAAO,CAAE8zB,QAAUtjB,EAAYujB,iBAAyB,EAAN,IAAW5gC,KAAM,CAAC,MAAO,UAG/G,cAACkgC,GAAa,CAACrb,OAAQ/G,EAAUzV,SAAwB,WAAd5F,EAAInL,OAAsC,WAAhBwlB,EAAMxlB,oBAjC3E+oC,EAwCd,ECxEe,SAASQ,GAAoBriC,GAC1C,IAAQo+B,EAA+Bp+B,EAA/Bo+B,2BAER,EAAwCh+B,mBAAuB89B,GAAaG,SAAQ,mBAA7EC,EAAY,KAAEC,EAAe,KACpC,EAA0Bn+B,mBAAiB,IAAG,mBAAvClL,EAAK,KAAEspC,EAAQ,KACtB,EAA+Cp+B,mBAAiC,IAAG,mBAA5Esf,EAAgB,KAAEwI,EAAkB,KAU3C,SAASzP,IACPoH,GACGwL,sBACAlqB,MAAK,SAACue,GACLwI,EAAmBxI,GACnB6e,EAAgBL,GAAa/c,QAC/B,IACClsB,OAAM,SAACwH,GACN8hC,EAAgBL,GAAaQ,SAC7BF,EAAS/hC,GAEL2hC,GACF30B,GAAavU,MAAMkpC,EAEvB,GACJ,CAEA,OAzBAn9B,qBACE,WACEwX,GACF,GAEA,IAoBK,CAAEiH,mBAAkB4e,eAAcppC,QAAOujB,UAClD,CChBe,SAAS6pB,GAAQtiC,GAAsB,IAAD,EAC3C1J,EAAW0J,EAAX1J,OACA4B,EAAU6vB,cAAV7vB,MACAuI,EAAMC,cAAND,EAER,EAAyBo+B,GAAS,CAAE3mC,MAAOA,EAAOkmC,2BAA4B39B,EAAE,4BAAxEwD,EAAG,EAAHA,IAAKwU,EAAO,EAAPA,QACLiH,EAAqB2iB,GAAoB,CAAEjE,2BAA4B39B,EAAE,4BAAzEif,iBAER,EAA8Ctf,mBAAiB,IAAG,mBAA3DmiC,EAAe,KAAEC,EAAkB,KAC1C,EAAkEpiC,mBAAiB,IAAG,mBAA/EqiC,EAAyB,KAAEC,EAA4B,KAC9D,EAAwCtiC,mBAAiB,SAAQ,mBAA1DuiC,EAAY,KAAEC,EAAe,KACpC,EAAgDxiC,oBAAkB,GAAM,mBAAjEyiC,EAAgB,KAAEC,EAAmB,KAC5C,EAAoD1iC,oBAAkB,GAAM,mBAArE2iC,EAAkB,KAAEC,EAAqB,KAChD,EAAwD5iC,oBAAkB,GAAM,mBAAzE6iC,EAAoB,KAAEC,EAAuB,KAE9CC,EAAyB,OAAHl/B,QAAG,IAAHA,OAAG,EAAHA,EAAKJ,aAAalM,MAC5C,SAAC0nB,GAAC,OACAA,EAAE7a,UAAY+9B,GACdljB,EAAE5a,oBAAsBg+B,GACxB1jC,KAAK6iC,MAAMviB,EAAE9Z,OAASxG,KAAKC,OAC3BD,KAAK6iC,MAAMviB,EAAE7Z,KAAOzG,KAAKC,KAAK,IAGlCiC,qBAAU,WACR,IAAM8f,EAAY4K,YAAW,gCAAC,wGACtBlT,IAAU,KAAD,sCACd,KACH,OAAO,kBAAMmT,cAAc7K,EAAW,CACxC,GAAG,CAACtI,IAEJ,IAAMkpB,EAAwBh0B,uBAAY,SAAC2Q,EAAcO,GACvD2jB,EAAmBlkB,EAAMxmB,IACzB4qC,EAA6B7jB,EAAYH,OAC3C,GAAG,IAEH,OAAIqkB,EAEA,cAAC7iB,GAAc,CACbG,UAAW5f,EAAE,mCACb8f,WAAY,kBAwHjB,SAE+B,GAAD,+BA1HP6iB,CAAiBlrC,EAAM,EACzCsoB,UAAWwiB,IAKbC,EAEA,cAAC/iB,GAAc,CACbG,UAAW5f,EAAE,qCACb8f,WAAY,kBAmHjB,SAEiC,GAAD,+BArHT8iB,CAAmBnrC,EAAM,EAC3CsoB,UAAW0iB,IAMf,gCACE,sBAAK9hC,UAAU,0BAAyB,UACtC,qBAAKA,UAAU,kBAAiB,SAC9B,qBAAIA,UAAU,aAAY,UACxB,oBAAIA,UAAU,yBAAwB,SACpC,cAAC,IAAI,CAACA,UAAU,GAAGK,GAAG,QAAO,SAC1BhB,EAAE,wBAGP,oBAAIW,UAAU,yBAAwB,SAAE6C,EAAMA,EAAIvE,KAAOxH,SAI7D,cAACuoC,GAAmB,CAACnqC,OAAQA,IAG5B2N,GAAOA,EAAIX,QAAUW,EAAIX,OAAOjM,OAAS,GACxC,qBAAK+J,UAAU,OAAM,SACnB,sBAAKA,UAAU,YAAW,UACxB,qBAAIA,UAAU,qBAAoB,UAC/BX,EAAE,yBACFwD,GACC,qCACE,cAAC+F,GAAmB,CAAC5I,UAAU,OAAOG,QAASkX,IAE/C,wBAAQrX,UAAU,+BAA+BG,QAAS,kBAAMuhC,GAAoB,EAAK,EAAC,SACvFriC,EAAE,6BAGL,wBAAQW,UAAU,+BAA+BG,QAAS,kBAAMyhC,GAAsB,EAAK,EAAC,SACzFviC,EAAE,iCAGL,wBAAQW,UAAU,+BAA+BG,QAAS,kBAAM2hC,GAAwB,EAAK,EAAC,SAC3FziC,EAAE,mCAGJwD,EAAIf,YAAYN,eACf,cAAC,GAAY,CACX6L,SAAU,SAAC/J,GACTk+B,EAAgBl+B,EAClB,UAOV,cAACk7B,GAAS,IAEV,qBAAKx+B,UAAU,UAAS,SAClB,OAAH6C,QAAG,IAAHA,GAAW,QAAR,EAAHA,EAAKX,cAAM,WAAR,EAAH,EAAagL,KAAI,SAACgQ,GACjB,OACE,sBAAoBld,UAAW,uCAAyD,WAAhBkd,EAAMxlB,MAAqB,YAAc,IAAI,UACnH,qBAAKsI,UAAU,MAAK,SAClB,qBAAKA,UAAU,SAAQ,SACrB,sBAAKA,UAAU,cAAa,UAAEkd,EAAMxmB,GAAG,WAI3C,qBAAKsJ,UAAU,eAAc,SAC1Bkd,EAAME,aAAalQ,KAAI,SAACuQ,GACvB,OACE,cAAC,GAAM,CACL5a,IAAKA,EACLqa,MAAOA,EACPO,YAAaA,EACb8iB,sBAAuBA,EACvBjiB,iBAAkBA,GAGxB,QAlBMpB,EAAMxmB,GAsBpB,cAOW,KAApByqC,GAAwD,KAA9BE,GACzB,cAACzD,GAAoB,CACnB/6B,IAAKA,EACL6B,QAA4B,OAAnBq9B,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqBr9B,QAC9B0b,UAA8B,OAAnB2hB,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqB3hB,UAChChd,QAAS+9B,EACT99B,kBAAmBg+B,EACnB/9B,KAAMi+B,EACNrsC,OAAQA,EACR2oC,QASR,WACEuD,EAAmB,IACnBE,EAA6B,GAC/B,EAXQjqB,QAASA,IAIZoqB,GAAoB,cAAChD,GAAc,CAAC57B,IAAKA,EAAKg7B,QAAS,kBAAM6D,GAAoB,EAAM,EAAErqB,QAASA,OASxE,aAG9B,OAH8B,kCAA/B,WAAgCvgB,GAAa,2EACd,OAA7B8qC,GAAsB,GAAO,SACvBn+B,GAAWy+B,mBAAmBprC,GAAO,KAAD,sCAC3C,wBAEgC,aAGhC,OAHgC,kCAAjC,WAAkCA,GAAa,2EACd,OAA/BgrC,GAAwB,GAAO,SACzBr+B,GAAW0+B,qBAAqBrrC,GAAO,KAAD,sCAC7C,wBACH,C,OCnLe,SAASsrC,GAAwC,GAOvB,IANvCC,EAAU,EAAVA,WACAC,EAAgB,EAAhBA,iBACAC,EAAQ,EAARA,SACAC,EAAW,EAAXA,YACA/5B,EAAQ,EAARA,SACAisB,EAAO,EAAPA,QAEQr1B,EAAMC,cAAND,EACFojC,EAAY,IAAI9kC,KAAK2kC,EAAiBn+B,OACtCu+B,EAAU,IAAI/kC,KAAK2kC,EAAiBl+B,KACpCu+B,GAA8B,OAAhBL,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB5qC,SAAU4O,GAAiBmB,WAAaitB,EAAUgO,EAClFE,EAAelO,EAAU+N,EACzBI,GAAkCJ,EAAU/kC,UAAYg3B,EAAQh3B,WAAa,IAE7EwnB,EAAa,QAAQjpB,KAAKqmC,EAAiBj/B,mBAC7Ci/B,EAAiBj/B,kBACjBi/B,EAAiBl/B,QAAUk/B,EAAiBj/B,kBAChD,OACE,qCACGu/B,GACC,qBAAK5iC,UAAU,2BAA0B,SACvC,qBAAKA,UAAU,yBAAwB,SACrC,cAACi4B,GAAc,CACbC,cAAe2K,EACfhuC,QAAQ,4CACRsjC,YAAa,kBAAM,IAAI,QAMC,YAA/BkK,EAAWp9B,KAAKiC,YAA4B,qBAAKlH,UAAU,WAE5D,qBAAIA,UAAU,oDAAmD,UAC9DuiC,EAAS3gC,SAAS,MAAIvC,EAAE,iBAAiB,IAAE6lB,KAE9C,oBAAIllB,UAAU,oDAAmD,SAC9B,QAAhCsiC,EAAiBrsB,aAAyD,WAAhCqsB,EAAiBrsB,YACxD5W,EAAE,oCAAsCijC,EAAiBt8B,gBAAgB,GACzE,KAEN,qBAAKhG,UAAU,kCAAiC,SAC9C,wBACEA,UAAU,sDACVG,QAAO,gCAAE,wGAAkBqiC,EAAYH,EAAYC,GAAiB,mFACpE75B,SAAUA,GAAYk6B,GAAeC,EAAa,SAElD,uBAAM5iC,UAAU,kBAAiB,UAC/B,sBAAMA,UAAU,OAAM,SACpB,cAACsgC,GAAa,CAACrb,OAAQ1e,GAAa2d,cAA8B,OAAhBoe,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB5qC,WAEtE,+BAAO2H,EAAE,oCAAoCiB,yBAMzD,CCrDe,SAASwiC,GAA2C,GAUvB,IAAD,EATzCN,EAAW,EAAXA,YACAj+B,EAAK,EAALA,MACAoC,EAAW,EAAXA,YACA9D,EAAG,EAAHA,IACAkgC,EAAoB,EAApBA,qBACAC,EAAmB,EAAnBA,oBACAC,EAAmB,EAAnBA,oBACAC,EAAQ,EAARA,SACAC,EAAO,EAAPA,QAEQ9jC,EAAMC,cAAND,EACF+D,EAAUuD,EAAYvD,QACtB6hB,EAAS1e,GAAa2d,cAAcvd,EAAYjP,OAChDktB,EAAqC,OAAzBme,EACZn8B,GAAyB,OAALrC,QAAK,IAALA,GAAW,QAAN,EAALA,EAAOU,YAAI,WAAN,EAAL,EAAaiC,cAAeb,GAAqBmB,gBAErE47B,EAAsBx2B,mBAAQ,WAClC,IAAM8nB,EAAU,IAAI/2B,KAGpB,OAFc,IAAIA,KAAKgJ,EAAYvC,KACL1G,UAAYg3B,EAAQh3B,WACzB,GAC3B,GAAG,CAACiJ,EAAYvC,MAEhB,OACE,+BACE,8BACU,OAAP++B,QAAO,IAAPA,IAAW,QAAQlnC,KAAK0K,EAAYtD,oBACjCsD,EAAYtD,kBACZsD,EAAYvD,QAAUuD,EAAYtD,oBAExC,6BACE,cAAC40B,GAAc,CAACC,cAAekL,EAAqBvuC,QAAQ,GAAGsjC,YAAa,kBAAM,IAAI,EAAEn4B,UAAW,gBAEpGijC,GAAuB,6BAAKA,IAC7B,6BACE,cAACjzB,GAAmB,CAACtY,MAAOiP,EAAYjP,MAAOkP,kBAAmBA,MAEpE,6BACG/D,GAAOoa,GAAWgG,cAAcpgB,EAAKO,GACpC,qCACE,cAACgf,GAAiB,CAChBjiB,QAAS,WACHoE,GAAOi+B,EAAYj+B,EAAOoC,EAChC,EACA8B,SAAUwc,GAAUL,IAAcoe,KAElCpe,GAAaK,GAAU+d,GAAuB,cAAC7gB,GAAmB,OAGtE,qCACE,qBAAIniB,UAAU,gCAA+B,UAC1CX,EAAE,6CACH,uBACA,mBAAGW,UAAU,2BAA2BwrB,KAAM0X,EAAS,SACpDA,OAGL,8BAjCCv8B,EAAYjQ,GAuCzB,CCvDe,SAAS2sC,KAAsB,IAAD,YACnChkC,EAAMC,cAAND,EACArI,EAAU2vB,cAAV3vB,MACF2M,EAAmBD,GAAgB2B,cACzC,EAAgCrG,oBAAkB,GAAK,mBAAhD2Q,EAAO,KAAE2zB,EAAY,KAC5B,EAA4CtkC,qBAA0B,mBAA/DukC,EAAc,KAAEC,EAAiB,KACxC,EAAwDxkC,mBAA4D,MAAK,mBAAlH+jC,EAAoB,KAAEU,EAAuB,KACpD,EAAgDzkC,mBAAiC,IAAG,mBAA7Esf,EAAgB,KAAEolB,EAAmB,KAC5C,EAAoC1kC,qBAAiB,mBAA9CqjC,EAAU,KAAEsB,EAAa,KAChC,EAAgD3kC,wBAAkCnM,GAAU,mBAArFyvC,EAAgB,KAAEsB,EAAmB,KAC5C,EAAkE5kC,oBAAkB,GAAM,mBAAnF6kC,EAAyB,KAAEC,EAA4B,KAC9D,EAAsD9kC,wBAA6BnM,GAAU,mBAAtFuwC,EAAmB,KAAEW,EAAsB,KAClD,EAA4D/kC,oBAAkB,GAAM,mBAA7EglC,EAAsB,KAAEC,GAAyB,KACxD,GAAoCjlC,wBAA8BnM,GAAU,qBAArEqxC,GAAU,MAAEC,GAAa,MAChC,GAAgCnlC,mBAAoB,IAAG,qBAAhDiI,GAAQ,MAAEm9B,GAAW,MAE5BvkC,qBAAU,WACgB,aA4BvB,OA5BuB,kCAAxB,kHAEiB,OAFjB,cAEIskC,GAAa,SAAO9jB,GAAegkB,iBAAiBrtC,GAAS,IAAG,kDACnCC,EAAcqtC,kBAAkBttC,GAAS,IAAI,KAAD,EAC9D,OADLusC,EAAc,YACpBa,GAAW,UAAO/jB,GAAekkB,WAAWvtC,GAAS,IAAG,uCACpDusC,EAAe,CAAD,gBAE+B,GAD/CC,EAAkBD,KACdiB,EAAqC,QAAxB,EAAGjB,EAAel/B,cAAM,aAArB,EAAwB,IAE1B,CAAD,iCACTogC,KAAwB,KAAD,GACvB99B,EAAoC,QAAzB,EAAG69B,EAAc/9B,MAAM,UAAE,aAAtB,EAAwBE,YAC5Ci9B,EAAoBj9B,GACd+9B,EAAYhQ,IAAW,IAAI/2B,KAAKgJ,EAAYxC,OAClD2/B,EAA6BY,GACvBtgC,EAAM,IAAIzG,KAAKgJ,EAAYvC,KAC3BugC,EAAkBvgC,EAAI1G,UAAYg3B,GAAQh3B,UAChDqmC,EAAuBY,EAAkB,KAAM,QAEjDhB,EAAmC,QAAtB,EAACJ,EAAel/B,cAAM,aAArB,EAAwB,IAAI,yBAEboa,GAAuBwL,oBAAoBjzB,GAAO,KAAD,GAA1EsnB,EAAgB,OACtBolB,EAAoBplB,GAAkB,kDAEtCjW,GAAavU,MAAMuL,EAAE,qCAAsC,CAAE3K,OAAM,OAAC,EAAD,mBAAiB,QAAjB,EAAE,KAAOV,gBAAQ,WAAjB,EAAE,EAAiBU,UAAW,QAE7E,OAF6E,UAEjG4uC,GAAa,GAAO,8EAEvB,uBA7Bc,WACS,wBA8BxBsB,EACF,GAAG,CAACvlC,IAEJ,IAAMwlC,GAAwD,KAApB,OAAdtB,QAAc,IAAdA,OAAc,EAAdA,EAAgBl/B,OAAOpO,SAA6C,KAAnB,OAAVosC,QAAU,IAAVA,OAAU,EAAVA,EAAY57B,MAAMxQ,QAC/Ey+B,GAAU,IAAI/2B,KAGpBkC,qBAAU,WACR0qB,YAAW,gCAAC,wGACJka,KAAwB,KAAD,EAChB,OADgB,KAC7BN,GAAa,SAAO9jB,GAAegkB,iBAAiBrtC,GAAS,IAAG,6EAC/D,IACL,GAAG,IAEH,IAAM8tC,GAAsC,OAAdvB,QAAc,IAAdA,GAA8B,QAAhB,EAAdA,EAAgBA,sBAAc,OAAK,QAAL,EAA9B,EAAiC,UAAE,WAArB,EAAd,EAAqCnO,iBAC7D2P,GAA8B,OAAdxB,QAAc,IAAdA,GAA8B,QAAhB,EAAdA,EAAgBA,sBAAc,OAAK,QAAL,EAA9B,EAAiC,UAAE,WAArB,EAAd,EAAqCziB,SACrDyhB,GAAyB,OAAdgB,QAAc,IAAdA,OAAc,EAAdA,EAAgBxgC,KAAKxM,MAAK,SAACyb,GAAC,OAAKA,EAAEtb,MAAiB,OAAV2rC,QAAU,IAAVA,OAAU,EAAVA,EAAYvrC,MAAO,IAExEkuC,GAAgB,OAAR/9B,SAAQ,IAARA,QAAQ,EAARA,GAAUtQ,MAAK,SAAC0Q,GAAC,MAAiB,cAAZA,EAAE3P,KAAqB,IAErDirC,GACJL,KAAqC,OAAhBA,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB5qC,SAAU4O,GAAiBmB,WAAaitB,GAAU,IAAI/2B,KAAqB,OAAhB2kC,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBl+B,MAEhH6gC,GACJ1C,IAAYD,GAAoBrlB,GAAWgoB,oBAAoB1C,GAAUD,EAAiBl/B,QAASk/B,EAAiBj/B,mBAEhH6zB,GAAiD,WAAlB,OAArB4N,SAAqB,IAArBA,QAAqB,EAArBA,GAAuB7uB,aAEjCitB,GAAW,gCAEXx5B,GAAWF,GAAY0G,aAE7B,OACE,qBAAKlQ,UAAU,sCAAqC,SAClD,sBAAKA,UAAU,2BAA0B,UACvC,cAAC0P,GAAgB,CAACC,QAASA,IAE1BozB,GACC,cAACjkB,GAAc,CACbG,UAAW5f,EAAE,qCACb8f,WAAU,gCAAE,wGACJ+lB,GAAmBnC,EAAqBx+B,MAAOw+B,EAAqBp8B,YAAak+B,IAAoB,mFAE7GzlB,UAAW,kBAAMqkB,EAAwB,KAAK,IAIjDO,GACC,eAACllB,GAAc,CACbE,mBAAmB,EACnBC,UAAW5f,EAAE,4CACb8f,WAAU,gCAAE,wGAAkBgmB,KAAgB,mFAC9C/lB,UAAW,kBAAM6kB,IAA0B,EAAM,EAAC,UAElD,4BAAI5kC,EAAE,oDACJ63B,IACA,4BACG73B,EAAE,sDAAuD,CACxD7C,OAAQ0nC,GAAatoC,EAAcglB,YAAYsjB,GAAWzN,MAAQyN,GAAWrjB,cAAgB,OAC7FC,SAAUikB,WAOlBp1B,IACCozB,IACAiB,IACAa,GACC,sBAAK7kC,UAAU,sDAAqD,UAEjE8kC,IACC,oBAAI9kC,UAAU,OAAM,SAAe,OAAb2D,EAAoBmhC,GAAsBxmC,KAAK8mC,GAAKN,GAAsBxmC,KAAK+mC,OAEpG9B,IAAmBlB,IAAeA,EAAW57B,MAAMxQ,SACpD,qBAAK+J,UAAU,MAAK,SAClB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,qBAAKA,UAAU,wBAAuB,SAAEX,EAAE,+CAKjDgjC,GACC,gCACGE,IAAYA,GAAS3gC,UACpB,mCACG0gC,GACC,qCACGuB,GACC,qCACE,sBAAM7jC,UAAU,gBAAe,SAAEX,EAAE,uCACnC,qBAAKW,UAAU,+CAA8C,SAC3D,cAACgQ,GAAmB,CAClBtY,MAAO4qC,EAAiB5qC,MACxBkP,kBAAmBy7B,EAAWp9B,KAAKiC,aAAeb,GAAqBmB,uBAK9E+6B,GAASvgC,SAA0C,YAA/BqgC,EAAWp9B,KAAKiC,YACnC,uBAAMlH,UAAU,0BAAyB,UACvC,cAAC,IAAe,CAACA,UAAU,YAAYI,KAAM,CAAC,MAAO,oBACpD6c,GAAWqoB,WAAW/C,YAQlCD,GACC,qCACGC,IAAY0C,GACX,cAAC7C,GAAuC,CACtCC,WAAYA,EACZC,iBAAkBA,EAClBC,SAAUA,GACVC,YAAaA,GACb/5B,SAA4F,MAAxBs6B,EACpErO,QAASA,KAGX,qCACE,qBAAI10B,UAAU,gCAA+B,UAC1CX,EAAE,6CACH,uBACA,mBAAGW,UAAU,2BAA2BwrB,KAAM0X,GAAS,SACpDA,QAGL,0BAGHW,EACCT,GACE,qCACGd,EAAiB5qC,QAAU4O,GAAiBmB,WAC3C,qBAAKzH,UAAU,uBAAsB,SACnC,cAACi4B,GAAc,CACbC,cAAekL,EACfvuC,QAAQ,0CACRsjC,YAAa,kBAAM,IAAI,QAI1B6M,IAAS9N,KACV,qBAAKl3B,UAAU,uCAAsC,SACnD,wBACEA,UAAU,4DACVG,QAAS,kBAAM8jC,IAA0B,EAAK,EAC9Cx7B,SAAUk6B,KAAgBsC,GAAoB,SAE9C,sBAAMjlC,UAAU,kBAAiB,SAC/B,+BAAOX,EAAE,8CAA8CiB,yBAQnE,qBAAKN,UAAU,0DAAyD,SACtE,cAACo3B,GAAA,EAAK,CACJC,QAAS,uDACT1pB,OAAQ,CACN6qB,eACEhvB,GAAY4E,aAAa,IAAIzQ,KAAK2kC,EAAiBl+B,KAAMsF,IACzD,IACAF,GAAY+7B,aAAa,IAAI5nC,KAAK2kC,EAAiBl+B,KAAMsF,kBAW7E,qCACE,6BAAKrK,EAAE,kCACJkkC,MAAkC,OAAdA,QAAc,IAAdA,GAAsB,QAAR,EAAdA,EAAgBl/B,cAAM,WAAR,EAAd,EAAwBpO,QAAS,MAAqB,OAAdstC,QAAc,IAAdA,GAAsB,QAAR,EAAdA,EAAgBl/B,cAAM,OAAtB,EAAwB1N,MAAK,SAACy6B,GAAC,OAAKA,EAAE3qB,MAAMxQ,OAAS,CAAC,OACnH,qBAAK+J,UAAU,MAAK,SAClB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,qBAAKA,UAAU,wBAAuB,SAAEX,EAAE,+CAKjDkkC,GAAkBA,EAAeA,eAAettC,OAAS,EACxC,OAAdstC,QAAc,IAAdA,OAAc,EAAdA,EAAgBA,eAAer2B,KAAI,SAACs4B,GAElC,IAAMpQ,EAAmBoQ,EAAcpQ,iBAEjCqQ,EAAsC,GAC5ClC,EAAel/B,OAAOhG,SAAQ,SAACkG,GAC7BA,EAAMkC,MAAMpI,SAAQ,SAAC2I,GACfA,EAAKL,YAAY2uB,qBAAuBF,EAAiB1+B,IAC3D+uC,EAAgB5kC,KAAKmG,EAAKL,YAE9B,GACF,IAEA,IAAMrI,EAAoB,OAAbqF,EAAoByxB,EAAiB92B,KAAK8mC,GAAKhQ,EAAiB92B,KAAK+mC,GAElF,OACE,qBAAKrlC,UAAU,MAAK,SAClB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,sBAAKA,UAAU,YAAW,UACvBwlC,EAAcE,kBACb,qBAAKllC,IAAKglC,EAAcE,iBAAkBjlC,IAAI,GAAGT,UAAU,uBAG7D,qBAAIA,UAAU,uBAAsB,UACjCo1B,EAAiB+B,SAAW,qBAAK32B,IAAK40B,EAAiB+B,QAAS12B,IAAI,GAAGT,UAAU,aAAc,IAAE1B,KAGnG82B,EAAiBH,SAChB,qBAAKj1B,UAAU,aAAY,SAAEwJ,GAAY+I,eAAe,IAAI5U,KAAKy3B,EAAiBH,SAAUvrB,MAG9F,wBAAO1J,UAAU,oCAAmC,UAClD,gCACE,+BACE,6BAAKX,EAAE,iDACP,6BAAKA,EAAE,gDACP,6BAAKA,EAAE,4CACP,6BAAKA,EAAE,yDACP,6BAAKA,EAAE,wDAGX,gCACGomC,EAAgBv4B,KAAI,SAACvG,GAAiB,IAAD,EAC9BpC,EAAQg/B,EAAel/B,OAAO9N,MAAK,SAAC66B,GAAC,OACzCA,EAAE3qB,MAAMlQ,MAAK,SAACR,GAAC,OAAKA,EAAE4Q,YAAYjQ,KAAOiQ,EAAYjQ,EAAE,GAAC,IAEpDmM,EAAM0gC,EAAexgC,KAAKxM,MAAK,SAACyb,GAAC,OAAKA,EAAEtb,MAAY,OAAL6N,QAAK,IAALA,OAAK,EAALA,EAAOzN,MAAO,IAC/DqsC,EAAa,OAAHtgC,QAAG,IAAHA,OAAG,EAAHA,EAAKvE,KAEjB6kC,EADS,QAAX,EAAIA,SAAO,OAAP,EAAStQ,WAAW,UACZ,WAAasQ,EAAQ3zB,OAAO,EAAG2zB,EAAQltC,OAAS,GAAK,MAErD,GAGZ,IAAIgtC,EAAsB3kC,EAC1B,GAAIuE,EAAK,CAAC,IAAD,IACHyC,EAAuD,QAAjD,EAAG2X,GAAWE,UAAUta,EAAK8D,EAAYvD,gBAAQ,OAE1D,QAF0D,EAA9C,EAAgDga,aAAa7mB,MACxE,SAAC8mB,GAAC,OAAKA,EAAEC,SAAW3W,EAAYtD,iBAAiB,WAClD,WAF0D,EAA9C,EAEViC,OAECkZ,EAAkBF,EAAiB/nB,MAAK,SAACgoB,GAAE,OAAKA,EAAG7nB,KAAO4O,CAAM,IACpE29B,EAAqC,OAAfzkB,QAAe,IAAfA,OAAe,EAAfA,EAAiBlgB,KAAK1K,IAAI+P,EAClD,CAEA,IAAMsxB,EAAU,IAAIt3B,KAAKgJ,EAAYxC,OAC/BoyB,EAAQ,IAAI54B,KAAKgJ,EAAYvC,KAC7B4+B,EAAsBtO,IAAWO,GAAWP,IAAW6B,EAE7D,OACE,cAACuM,GAA0C,CACzCv+B,MAAOA,EACPoC,YAAaA,EACb9D,IAAKA,EACL2/B,YAAaA,GACbU,SAAUA,GACVD,oBAAqBA,EACrBD,oBAAqBA,EACrBD,qBAAsBA,EACtBI,QAASA,GAGf,iBAlEcqC,EAAcpQ,iBAAiB1+B,GA0E7D,IACc,OAAd6sC,QAAc,IAAdA,OAAc,EAAdA,EAAgBl/B,OAAO6I,KAAI,SAAC3I,GAE1B,IAAM1B,EAAM0gC,EAAexgC,KAAKxM,MAAK,SAACyb,GAAC,OAAKA,EAAEtb,MAAY,OAAL6N,QAAK,IAALA,OAAK,EAALA,EAAOzN,MAAO,IACnE,QACIyN,EAAMkC,MAAMxQ,QACZ,qBAAK+J,UAAU,MAAK,SAClB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,gBAAe,SAC5B,sBAAKA,UAAU,YAAW,UACxB,oBAAIA,UAAU,sBAAqB,SAAK,OAAH6C,QAAG,IAAHA,OAAG,EAAHA,EAAKvE,QACtC,OAAHuE,QAAG,IAAHA,OAAG,EAAHA,EAAKb,UACJ,uBAAMhC,UAAU,gBAAe,UAC7B,cAAC,IAAe,CAACA,UAAU,YAAYI,KAAM,CAAC,MAAO,oBACpD6c,GAAWqoB,WAAWziC,MAI3B,wBAAO7C,UAAU,yCAAwC,UACvD,gCACE,+BACE,6BAAKX,EAAE,iDACP,6BAAKA,EAAE,gDACP,6BAAKA,EAAE,yDACP,6BAAKA,EAAE,wDAGX,gCACGkF,EAAMkC,MAAMyG,KAAI,SAACxG,GAChB,IAAMC,EAAcD,EAAUC,YAC9B,IAAKA,EACH,OAAO,KAGT,IAAIq8B,GAAsB,EAO1B,OALEA,EAD4B,WAA1Bz+B,EAAMU,KAAKiC,WACSP,EAAYjP,QAAU4O,GAAiBiB,IAEvCZ,EAAYjP,QAAU4O,GAAiB0c,eAI7D,cAAC8f,GAA0C,CACzCv+B,MAAOA,EACPoC,YAAaA,EACb9D,IAAKA,EACL2/B,YAAaA,GACbU,SAAUA,GACVF,oBAAqBA,EACrBD,qBAAsBA,GAG5B,iBA9Ccx+B,EAAM7N,GAuDtC,aAKd,SAEayuC,KAAc,8CAuB5B,OAvB4B,mCAA7B,4FACMnuC,EAAM,CAAD,gBAE0B,GADjCssC,GAAa,GACbW,IAA0B,IAEtB/M,GAAQ,CAAD,mBACLmL,EAAW,CAAD,+BACNl8B,GACHw/B,SAAmB,OAAVtD,QAAU,IAAVA,OAAU,EAAVA,EAAYrtC,eAA0B,OAAVqtC,QAAU,IAAVA,OAAU,EAAVA,EAAY3rC,GAAIM,GACrD+I,KAAI,gCAAC,wGACE0kC,KAAwB,KAAD,uCAE9B5tB,SAAQ,kBAAMysB,GAAa,EAAM,IAAE,KAAD,0CAGjCjjB,GACHulB,oBAAoB5uC,GACpB+I,KAAI,gCAAC,wGACE0kC,KAAwB,KAAD,uCAE9B5tB,SAAQ,kBAAMysB,GAAa,EAAM,IAAE,KAAD,wCAG1C,+BAEc4B,GAAmB,EAAD,mDAkBhC,OAlBgC,mCAAjC,WAAkC3gC,EAAcoC,EAA0Bk+B,GAA4B,+EAChGtgC,IAASoC,EAAW,gBACH,OAAnB28B,GAAa,GAAM,SACbtf,GAASzf,EAAOoC,GACnB5G,KAAI,gCAAC,kGACA8kC,EAAoB,CAAD,+BACfJ,KAAwB,KAAD,wCAEAxtC,EAAcqtC,kBAAkBttC,GAAS,IAAI,KAAD,GAAnEusC,EAAc,SAElBC,EAAkBD,GACnB,4CAGJ1sB,SAAQ,kBAAMysB,GAAa,EAAM,IAAE,KAAD,wBAErCj7B,GAAavU,MAAMuL,EAAE,4CAA4C,2CAEpE,kCAEcolC,KAAqB,8CAMnC,OANmC,mCAApC,oHAC+BxtC,EAAcqtC,kBAAkBttC,GAAS,IAAI,KAAD,GAAnEusC,EAAc,UAEZsC,EAA8C,QAA3B,EAAGtC,EAAel/B,OAAO,UAAE,OAAU,QAAV,EAAxB,EAA0BoC,MAAM,UAAE,WAAV,EAAxB,EAAoCE,YAChEi9B,EAAoBiC,IACrB,2CACF,kCAEcrD,GAAY,EAAD,iDAEzB,OAFyB,mCAA1B,WAA2Bj+B,EAAcoC,GAAwB,2EAC/D88B,EAAwB,CAAEl/B,QAAOoC,gBAAe,4CACjD,+BAEcqd,GAAS,EAAD,iDAmCtB,OAnCsB,mCAAvB,WAAwBzf,EAAcoC,GAAwB,qFAC5D88B,EAAwB,MACpB39B,EAAS,KAAK,EAAD,GACTvB,EAAMU,KAAKiC,WAAU,OACtB,oBADsB,KACL,EAGjB,YAHiB,KAGR,EAGT,WAHS,KAGD,kBALgB,OAA3BpB,EAAS,kBAAkB,4BAGT,OAAlBA,EAAS,SAAS,4BAGC,OAAnBA,EAAS,UAAU,6BAKM,GADvBY,EAAYnC,EAAMkC,MAAMlQ,MAAK,SAACR,GAAC,OAAKA,EAAE4Q,YAAYjQ,KAAOiQ,EAAYjQ,EAAE,IACzE4N,EAAWtN,GAAS,MACpB0P,IAAaZ,EAAM,kCACfK,GAAa6d,SAASzf,EAAMvP,eAAekS,WAAY3C,EAAM7N,GAAIgQ,EAAUhQ,GAAIoP,EAAQxB,GAAUzQ,OAAM,SAACC,GAAW,IAAD,EACtH,OAAa,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACvB,KAAK,IACH2T,GAAavU,MAAMuL,EAAE,wCACrB,MACF,KAAK,IACHgJ,GAAavU,MAAMuL,EAAE,4CACrB,MACF,KAAK,IACHgJ,GAAavU,MAAMuL,EAAE,4CACrB,MACF,QACEgJ,GAAavU,MAAMuL,EAAE,yBAG3B,IAAG,KAAD,wCAEL,sBACH,CCpgBe,SAASymC,KACtB,IAAQzmC,EAAMC,cAAND,EACFsB,EAAUC,cAERqV,EAAgB0Q,cAAhB1Q,YAER,OACE,qBAAKjW,UAAU,6BAA4B,SACzC,qBAAKA,UAAU,2BAA0B,SACvC,sBAAKA,UAAU,gBAAe,UAC5B,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,+CAET,wBAAQW,UAAU,sBAAsBG,QAAS,kBAAMQ,EAAQE,KAAK,UAAD,OAAWoV,GAAc,OAG9F,qBAAKjW,UAAU,YAAW,SACxB,qBAAKA,UAAU,qBAAoB,SACjC,wBAAQA,UAAU,+BAA+BG,QAAS,kBAAMQ,EAAQE,KAAK,UAAD,OAAWoV,GAAc,EAAC,SACnG5W,EAAE,yDAQnB,C,WChCM0mC,GAAe,kHAIlB,OAJkB,0FACnB,WAAmB5hC,EAAcC,GAAU,iGACjB3Q,KAAKsB,UAAS,UAAetB,KAAKJ,OAAM,4BAAoB8Q,EAAK,gBAAQC,IAAO,KAAD,EAAxF,OAAT4hC,EAAS,yBACRA,GAAS,gDACjB,qDAJkB,MAIlB,EAJkB,CAAS5yC,GAQf6yC,GADS,IAAIF,GCIb,SAASG,GAAkBtnC,GACxC,IAAQmE,EAAoBnE,EAApBmE,KAAMojC,EAAcvnC,EAAdunC,UACRxlC,EAAUC,cAERvB,EAAMC,cAAND,EAEF+mC,EAAYrjC,GAAQA,EAAK9M,QAAW,EACpCowC,EAActjC,GAAQA,EAAKmK,KAAI,SAAClG,GAAI,OAAKA,EAAK9E,OAAOjM,MAAM,IAAEqwC,QAAO,SAACC,EAAMC,GAAI,OAAKD,EAAOC,CAAI,KAAM,EACrGC,EAAQN,GAAaA,EAAUlwC,SAAmB,OAATkwC,QAAS,IAATA,OAAS,EAATA,EAAWj5B,KAAI,SAAClG,GAAI,OAAKA,EAAKy/B,IAAI,IAAEH,QAAO,SAACC,EAAMC,GAAI,OAAKD,EAAOC,CAAI,MAAM,EACrHE,EAASP,GAAaA,EAAUlwC,SAAmB,OAATkwC,QAAS,IAATA,OAAS,EAATA,EAAWj5B,KAAI,SAAClG,GAAI,OAAKA,EAAK0/B,KAAK,IAAEJ,QAAO,SAACC,EAAMC,GAAI,OAAKD,EAAOC,CAAI,MAAM,EAE7H,OACE,mCAEGL,GAAaA,EAAUlwC,OAAS,GAC/B,sBAAK+J,UAAU,iBAAgB,UAC7B,6BAAKX,EAAE,8BACP,sBAAKW,UAAU,8CAA6C,UAC1D,qBAAKA,UAAU,SAAQ,SACrB,wBAAOA,UAAU,0CAAyC,UACxD,gCACE,+BACE,6BAAKX,EAAE,kBACP,6BAAKA,EAAE,wBACP,uBACA,uBACA,4BAGJ,gCACG8mC,EAAUj5B,KAAI,SAACy5B,GACd,IAAMC,EAAaD,EAASD,MAAQ,EAAqB,IAAhBC,EAASF,KAAcE,EAASD,MAAQ,EAC3EG,EAAgB,CAAErhC,MAAOohC,EAAa,KACtC/jC,GAAU,OAAJE,QAAI,IAAJA,OAAI,EAAJA,EAAMxM,MAAK,SAACyb,GAAC,OAAKA,EAAEtb,KAAOiwC,EAASjwC,EAAE,MAAK,KACjDnD,EAAMsP,EAAG,gBAAYA,EAAInM,IAAO,IAEtC,OACE,qBAAsByJ,QAAS,kBAAMQ,EAAQE,KAAKtN,EAAI,EAAC,UACrD,oBAAIyM,UAAU,YAAW,SACvB,cAAC+O,GAAoB,CAAClM,IAAKA,MAE7B,oBAAI7C,UAAU,YAAW,SAAEX,EAAE,0BAA2B,CAAEonC,KAAME,EAASF,KAAMC,MAAOC,EAASD,UAC/F,oBAAI1mC,UAAU,YAAW,SACvB,qBAAKA,UAAU,WAAU,SACvB,qBACEA,UAAU,oCACVpJ,KAAK,cACLqW,MAAO45B,EACP,gBAAeF,EAASF,KACxB,gBAAe,EACf,gBAAeE,EAASD,YAI9B,qBAAI1mC,UAAU,YAAW,UAAEpE,EAAc4gC,aAAaoK,EAAY,GAAG,OACrE,oBAAI5mC,UAAU,YAAW,SACvB,cAAC,IAAe,CAACI,KAAM,CAAC,MAAO,qBAnB1BumC,EAASjwC,GAuBtB,WAKN,gCACE,+BAAO2I,EAAE,6BAA8B,CAAE+mC,WAAUC,iBACnD,sBAAMrmC,UAAU,YAAW,SAAEX,EAAE,6BAA8B,CAAEonC,OAAMC,sBAOnF,C,cCrFe,SAASI,GAAUloC,GAChC,IAAM3K,EAAO,CACX8yC,OAAQnoC,EAAMmoC,OACdC,SAAU,CACR,CACE/yC,KAAM2K,EAAM3K,KACZgzC,MAAM,EACNC,gBAAiB,0BACjBC,YAAa,wBACbC,YAAa,EACbC,QAAS,MA+Bf,OAAO,cAAC,KAAI,CAACpzC,KAAMA,EAAM++B,QA3BT,CACdsU,QAAS,CACPC,OAAQ,CACN5sB,SAAS,IAGbogB,SAAU,CACRyM,MAAO,CACLC,OAAQ,EACRP,gBAAiB,0BAGrBQ,YAAa,CACXC,WAAW,GAEbC,OAAQ,CACNC,EAAG,CACDltB,SAAS,EACTmtB,KAAM,CAAEntB,SAAS,EAAOotB,WAAW,IAErCC,EAAG,CACDrtB,SAAS,EACTstB,aAAa,MAMrB,CCjCe,SAASC,GAAgBtpC,GACtC,IAAQqD,EAA2BrD,EAA3BqD,MAAO7L,EAAoBwI,EAApBxI,gBACPiJ,EAAMC,cAAND,EAEJpL,EAAmB,GAEnBk0C,EAAiB,EACjBC,EAAuB,EACvBC,EAAsB,EACtBC,EAAqB,EA+BzB,OA7BA1pC,EAAMqD,MAAM0L,OAAOtP,SAAQ,SAACkqC,GAC1BJ,GAAUI,EAAK1sC,MACfusC,GAAgBG,EAAKC,UACrBH,GAAgC,OAAjBE,EAAKznB,SAAoBynB,EAAKE,YAAc,EAC3DH,GAA+B,OAAjBC,EAAKznB,SAAoBynB,EAAKE,YAAc,EAE1Dx0C,EAAK4M,KAAK,CACR6nC,KAAMH,EAAKjqC,KACXqqC,aAAcJ,EAAK1sC,MACnB+sC,UAAWL,EAAKC,UAChB,sBAAwC,OAAjBD,EAAKznB,SAAoBynB,EAAKE,YAAc,EACnE,sBAAwC,OAAjBF,EAAKznB,SAAoBynB,EAAKE,YAAc,GAEvE,IAEAx0C,EAAK4M,KAAK,CACR6nC,KAAM,QACNC,aAAcR,EACdS,UAAWR,EACX,sBAAuBC,EACvB,sBAAuBC,IAGzB1pC,EAAMqD,MAAM0L,OAAO3K,MAAK,SAACC,EAAGC,GAC1B,IAAI2lC,EAAM3lC,EAAErH,MAAQoH,EAAEpH,MACtB,OAAY,IAARgtC,EAAkBA,EACf3lC,EAAEslC,UAAYvlC,EAAEulC,SACzB,IAGE,qBAAKxoC,UAAU,SAAQ,SACrB,wBAAOA,UAAU,sBAAqB,UACpC,gCACE,+BACE,+BACGpB,EAAM8J,MACP,sBAAM1I,UAAU,OAAM,SACpB,cAACkJ,GAAY,CAACjV,KAAMA,EAAMoV,SAAUzK,EAAMkqC,sBAG9C,oBAAI9oC,UAAU,WAAU,SAAEX,EAAE,uBAC3BjJ,GAAmB,oBAAI4J,UAAU,WAAU,SAAEX,EAAE,wBAChD,oBAAIW,UAAU,WAAU,SAAEX,EAAE,gCAGhC,gCACG4C,EAAM0L,OAAOT,KAAI,SAAC67B,GACjB,OACE,+BACE,oBAAI/oC,UAAU,YAAW,SAAE+oC,EAAIzqC,OAC/B,oBAAI0B,UAAU,qBAAoB,SAAE+oC,EAAIltC,QACvCzF,GAAmB,oBAAI4J,UAAU,qBAAoB,SAAE+oC,EAAIP,YAC5D,oBAAIxoC,UAAU,qBAAoB,SAC9B+oC,EAAIjoB,SAEFzhB,EAAE,sBAAuB,CAAEo3B,MAAO76B,EAAcglB,YAAYmoB,EAAIN,aAAc3nB,SAAUioB,EAAIjoB,WAD5F,UANCioB,EAAIzqC,KAWjB,UAKV,CC3De,SAAS0qC,GAAgBpqC,GACtC,IAAQqD,EAAuDrD,EAAvDqD,MAAO7L,EAAgDwI,EAAhDxI,gBAAiB8H,EAA+BU,EAA/BV,WAAY4qC,EAAmBlqC,EAAnBkqC,eACpCzpC,EAAMC,cAAND,EACFsB,EAAUC,cAEVqoC,EAA0B,GAE5Bd,EAAiB,EACjBC,EAAuB,EACvBC,EAAsB,EACtBC,EAAqB,EAmEzB,OAjEArmC,EAAM0L,OAAOtP,SAAQ,SAACkqC,GACpB,IAAMnqC,EAAYF,EAAW3H,MAAK,SAAC2yC,GAAC,OAAKA,EAAE/T,kBAAkBx+B,MAAK,SAAC89B,GAAE,OAAKA,EAAG/9B,KAAO6xC,EAAKjzC,QAAQ,GAAC,IAC5F8/B,EAA4B,OAATh3B,QAAS,IAATA,OAAS,EAATA,EAAW+2B,kBAAkB5+B,MAAK,SAACk+B,GAAE,OAAKA,EAAG/9B,KAAO6xC,EAAKjzC,QAAQ,IAE1F6yC,GAAUI,EAAK1sC,MACfusC,GAAgBG,EAAKC,UACrBH,GAAgC,OAAjBE,EAAKznB,SAAoBynB,EAAKE,YAAc,EAC3DH,GAA+B,OAAjBC,EAAKznB,SAAoBynB,EAAKE,YAAc,EAE1DQ,EAAMpoC,KAAK,CACT6nC,KAAMH,EAAKjqC,KACXL,aAAcsqC,EAAKva,iBACnB2a,aAAcJ,EAAK1sC,MACnB+sC,UAAWL,EAAKC,UAChB,oBAAsC,OAAhBpT,QAAgB,IAAhBA,KAAkBH,SAEpCzrB,GAAY+I,eAAe,IAAI5U,KAAKy3B,EAAiBH,SAAU,oBAD/D,MAEJ,sBAAwC,OAAjBsT,EAAKznB,SAAoBynB,EAAKE,YAAc,EACnE,sBAAwC,OAAjBF,EAAKznB,SAAoBynB,EAAKE,YAAc,GAEvE,IAEAQ,EAAMpoC,KAAK,CACT6nC,KAAM,QACNzqC,aAAc,MACd0qC,aAAcR,EACdS,UAAWR,EACX,oBAAqB,MACrB,sBAAuBC,EACvB,sBAAuBC,IAGzBrmC,EAAM0L,OAAO3K,MAAK,SAACC,EAAGC,GACpB,IAAMimC,EAAQF,EAAM1yC,MAAK,SAAC6yC,GAAC,OAAKA,EAAEV,OAASzlC,EAAE3E,IAAI,IAC3C+qC,EAAQJ,EAAM1yC,MAAK,SAAC6yC,GAAC,OAAKA,EAAEV,OAASxlC,EAAE5E,IAAI,IAEjD,GAAI6qC,GAASE,EAAO,CAClB,IAAMC,EAAW,IAAI3rC,KAAKwrC,EAAM,sBAC1BI,EAAW,IAAI5rC,KAAK0rC,EAAM,sBAEhC,GAAIC,EAASlc,WAAamc,EAASnc,UAAW,CAC5C,IAAMyb,EAAMU,EAASnc,UAAYkc,EAASlc,UAE1C,OAAIyb,EAAM,EAAU,EAChBA,EAAM,GAAW,EACd,CACT,CAEA,OAAKS,EAASlc,WAAamc,EAASnc,UAC3B,EAGLkc,EAASlc,YAAcmc,EAASnc,WAC1B,EAGH,CACT,CAEA,IAAMyb,EAAM3lC,EAAErH,MAAQoH,EAAEpH,OAASqH,EAAEslC,UAAYvlC,EAAEulC,WACjD,OAAIK,EAAM,EAAU,EAChBA,EAAM,GAAW,EACd,CACT,IAGE,qBAAK7oC,UAAU,SAAQ,SACrB,wBAAOA,UAAU,+CAA8C,UAC7D,gCACE,+BACE,+BACGX,EAAE,mBACH,cAAC,WAAO,CACNW,UAAU,+BACV0I,MAAOrJ,EAAE,iBACTpL,KAAMg1C,EACN9/B,mBAAkB,IAClBC,SAAU0/B,EAAe,SAEzB,cAAC,IAAe,CAAC1oC,KAAK,qBAG1B,oBAAIJ,UAAU,WAAU,SAAEX,EAAE,2BAC5B,oBAAIW,UAAU,WAAU,SAAEX,EAAE,uBAC5B,oBAAIW,UAAU,WAAU,SAAEX,EAAE,uBAC3BjJ,GAAmB,oBAAI4J,UAAU,WAAU,SAAEX,EAAE,wBAChD,oBAAIW,UAAU,WAAU,SAAEX,EAAE,2BAC5B,4BAGJ,gCACG4C,EAAM0L,OAAOT,KAAI,SAAC67B,GAAS,IAAD,EACnB3qC,EAAYF,EAAW3H,MAAK,SAAC2yC,GAAC,OAAKA,EAAE/T,kBAAkBx+B,MAAK,SAAC89B,GAAE,OAAKA,EAAG/9B,KAAOqyC,EAAIzzC,QAAQ,GAAC,IAC3F8/B,EAA4B,OAATh3B,QAAS,IAATA,OAAS,EAATA,EAAW+2B,kBAAkB5+B,MAAK,SAACk+B,GAAE,OAAKA,EAAG/9B,KAAOqyC,EAAIzzC,QAAQ,IACnFrB,EAAOg1C,EAAM1yC,MAAK,SAAC6yC,GAAC,OAAKA,EAAEV,OAASK,EAAIzqC,IAAI,IAC5C/K,EACJ6K,GAAag3B,EAAgB,yBACE,OAATh3B,QAAS,IAATA,OAAS,EAATA,EAAWpJ,eAAc,uBAAwB,OAAToJ,QAAS,IAATA,OAAS,EAATA,EAAW1H,GAAE,8BAAsC,OAAhB0+B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB1+B,GAAE,iBACjH,IAEN,OAAK0+B,EAKH,qBAAmBj1B,QAAS,kBAAMQ,EAAQE,KAAKtN,EAAI,EAAC,UAClD,oBAAIyM,UAAU,YAAW,SAA8C,QAA9C,EAAE+oC,EAAIS,eAAe9lC,GAAgBC,iBAAS,QAAIolC,EAAIzqC,OAC/E,oBAAI0B,UAAU,qBAAoB,SAAE+oC,EAAI/a,mBACxC,oBAAIhuB,UAAU,qBAAoB,SAAM,OAAJ/L,QAAI,IAAJA,OAAI,EAAJA,EAAO,uBAC3C,oBAAI+L,UAAU,qBAAoB,SAAE+oC,EAAIltC,QACvCzF,GAAmB,oBAAI4J,UAAU,qBAAoB,SAAE+oC,EAAIP,YAC5D,oBAAIxoC,UAAU,qBAAoB,SAC9B+oC,EAAIjoB,SAEFzhB,EAAE,sBAAuB,CACvBo3B,MAAO76B,EAAcglB,YAAYmoB,EAAIN,aACrC3nB,SAAUioB,EAAIjoB,WAHhB,QAMN,oBAAI9gB,UAAU,iBAAgB,SAC5B,cAAC,IAAe,CAACI,KAAM,CAAC,MAAO,qBAf1B2oC,EAAIzqC,MAJN,4BAuBX,UAKV,CC5Ie,SAASmrC,GAAc7qC,GAAe,IAAD,YAC1C1J,EAAW0J,EAAX1J,OAER,EAA8B8J,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAE1B,EAA0BxU,wBAAgCnM,GAAU,mBAA7DoP,EAAK,KAAEynC,EAAQ,KACtB,EAAwB1qC,mBAA4B,MAAK,mBAAlD+D,EAAI,KAAE2Q,EAAO,KACd0qB,EAAmBnnC,EAAcmnC,iBAAiBlpC,GAClDsK,EAA4BvI,EAAcuI,0BAA0BtK,GACpEkB,EAAkBa,EAAcb,gBAAgBlB,GAChDy0C,EAAYvzC,EAAkB,IAAQ,IACpCiJ,EAAMC,cAAND,EAEJzB,EAAM,IAAID,KAAKA,KAAKC,OACpB+V,EAAW,EAAK/V,EAAIgW,aAAe,EACvChW,EAAIiW,WAAWjW,EAAIgW,aAAeD,GAElC,IAAIzH,EAAYtO,EACZwO,EAAU,IAAIzO,KAAKC,GACvBwO,EAAQ0B,QAAQ1B,EAAQ2B,UAAY,GACpC7B,EAAU4B,QAAQ5B,EAAU6B,UAAY,GACxC,IAAI+F,EAAYtK,GAAY4E,aAAalC,EAAW1C,GAAY0G,cAC5D6D,EAAUvK,GAAY4E,aAAahC,EAAS5C,GAAY0G,cAE5D,EAA8ClR,mBAAsB,CAClEgV,aAAcF,EACdG,WAAYF,IACZ,mBAHKG,EAAe,KAAEC,EAAkB,KAI1C,EAAgCnV,oBAAkB,GAAK,mBAAxC,KAAa,KAE5B4N,kBAAO,gCAAC,wGACAnJ,GACH8Q,UACAxU,MAAK,SAACgD,GACL2Q,EAAQ3Q,EACV,IACClP,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,kBACvB,IACCwX,SAAQ,kBAAMrD,GAAW,EAAM,IAAE,KAAD,sCAClC,IAEH5G,kBAAO,gCAAC,4FACFsH,EAAgB,CAAD,+BACXmD,EAAQnD,EAAgBF,aAAcE,EAAgBD,YAAY,KAAD,sCAExE,CAACC,IAEJrU,qBAAU,WACR,IAAM8f,EAAY4K,YAAW,gCAAC,4FACxBrW,EAAgB,CAAD,+BACXmD,EAAQnD,EAAgBF,aAAcE,EAAgBD,YAAY,KAAD,sCAExE01B,GACH,OAAO,kBAAMnf,cAAc7K,EAAW,CACxC,GAAG,CAACzL,IAEJ,IAAI01B,EAAgB,WAAOpgC,GAAYqgC,oBACrC,IAAIlsC,KAAKuW,EAAgBF,cACzBxK,GAAY0G,cACb,YAAI1G,GAAYqgC,oBAAoB,IAAIlsC,KAAKuW,EAAgBD,YAAazK,GAAY0G,eAEvF,GAAIP,EACF,OAAO,cAACD,GAAgB,CAACC,QAASA,IAGpC,IAAMm6B,EAAY7nC,IAAqB,QAAZ,EAAAA,EAAM8nC,cAAM,OAAQ,QAAR,EAAZ,EAAcp8B,cAAM,WAAR,EAAZ,EAAsB1X,QAAS,EACpD+zC,EAAU/nC,IAA4B,QAAnB,EAAAA,EAAMgoC,qBAAa,OAAQ,QAAR,EAAnB,EAAqBt8B,cAAM,WAAR,EAAnB,EAA6B1X,QAAS,EACzDi0C,EAAUjoC,IAAmB,QAAV,EAAAA,EAAMc,YAAI,OAAQ,QAAR,EAAV,EAAY4K,cAAM,WAAR,EAAV,EAAoB1X,QAAS,EAEtD,OACE,qBAAK+J,UAAU,sBAAqB,SACjCiC,GACC,sBAAKjC,UAAU,YAAW,UACxB,6BAAKX,EAAE,gCACP,cAACuJ,GAAmB,CAClB5I,UAAU,YACVG,QAAO,gCAAE,wGAAkBkX,EAAuB,OAAfnD,QAAe,IAAfA,OAAe,EAAfA,EAAiBF,aAA6B,OAAfE,QAAe,IAAfA,OAAe,EAAfA,EAAiBD,YAAW,qFAE/FzU,GAA6ByC,EAAMgoC,eAClC,mCACE,sBAAKjqC,UAAU,kEAAiE,UAC9E,qBAAKA,UAAU,YAAW,SACxB,cAAC6L,GAAkB,CACjBnV,GAAI,qBACJoW,QAASvD,GAAiByE,KAC1BR,aAmIlB,SAAuBrJ,EAAeC,GAChC8P,EAAgBF,eAAiB7P,GAAS+P,EAAgBD,aAAe7P,GAC3E+P,EAAmB,CAAEH,aAAc7P,EAAO8P,WAAY7P,GAE1D,EAtIkBD,MAAO+P,EAAgBF,aACvB5P,IAAK8P,EAAgBD,eAIzB,cAAC6yB,GAAS,CACRC,OAAQ9kC,EAAMgoC,cAAcE,SAASj9B,KAAI,SAACi9B,GAAQ,OAAKA,EAAStsB,IAAI,IACpE5pB,KAAMgO,EAAMgoC,cAAcE,SAASj9B,KAAI,SAACi9B,GAAQ,OAAKA,EAAStuC,KAAK,OAEnEmuC,GAAWF,GAAaI,IACxB,sBAAKlqC,UAAU,mCAAkC,UAC/C,8BACE,qBAAIA,UAAU,eAAetJ,GAAG,UAAUE,KAAK,UAAS,UACrDkzC,GACC,oBAAI9pC,UAAU,YAAW,SACvB,wBACEA,UAAU,kBACVtJ,GAAG,iBACH,iBAAe,MACf,iBAAe,cACfS,KAAK,SACLP,KAAK,MACL,gBAAc,aACd,gBAAc,OAAM,SAEnByI,EAAE,uBAIR2qC,GACC,oBAAIhqC,UAAU,YAAW,SACvB,wBACEA,UAAS,oBAAgB8pC,EAAuB,GAAX,UACrCpzC,GAAG,wBACH,iBAAe,MACf,iBAAe,qBACfS,KAAK,SACLP,KAAK,MACL,gBAAc,oBACd,iBAAgBkzC,EAAU,SAEzBzqC,EAAE,4BAIR6qC,GACC,oBAAIlqC,UAAU,YAAW,SACvB,wBACEA,UAAS,oBAAgB8pC,GAAcE,EAAqB,GAAX,UACjDtzC,GAAG,eACH,iBAAe,MACf,iBAAe,YACfS,KAAK,SACLP,KAAK,MACL,gBAAc,WACd,iBAAgBkzC,IAAcE,EAAQ,SAErC3qC,EAAE,0BAMb,sBAAKW,UAAU,cAActJ,GAAG,iBAAgB,UAC7CozC,GACC,qBAAK9pC,UAAU,mCAAmCtJ,GAAG,aAAaE,KAAK,WAAW,kBAAgB,iBAAgB,SAChH,cAACoyC,GAAe,CACdtgC,MAAOrJ,EAAE,mBACTjJ,gBAAiBA,EACjB6L,MAAOA,EAAM8nC,OACb7rC,WAAY+D,EAAM/D,WAClB4qC,eAAc,sBAAiBc,EAAgB,YAIpDI,GACC,qBACEhqC,UAAS,+BAA2B8pC,EAA4B,GAAhB,eAChDpzC,GAAG,oBACHE,KAAK,WACL,kBAAgB,wBAAuB,SAEvC,cAACsxC,GAAe,CACdx/B,MAAOrJ,EAAE,wBACTjJ,gBAAiBA,EACjB6L,MAAOA,EAAMgoC,cACbnB,eAAc,6BAAwBc,OAI3CM,GACC,qBACElqC,UAAS,+BAA2B8pC,GAAcE,EAA0B,GAAhB,eAC5DtzC,GAAG,WACHE,KAAK,WACL,kBAAgB,eAAc,SAE9B,cAACsxC,GAAe,CACdx/B,MAAOrJ,EAAE,iBACTjJ,gBAAiBA,EACjB6L,MAAOA,EAAMc,KACb+lC,eAAc,oBAAec,kBAU9CxL,GAAoB,cAAC8H,GAAiB,CAACnjC,KAAMA,QAAQlQ,EAAWszC,UAAWlkC,EAAMkkC,iBAIxF,SAEa9uB,EAAQ,EAAD,+CAWrB,OAXqB,kCAAtB,WAAuBnL,EAAmBE,GAAe,2FACjD65B,GACHmE,aAAal+B,EAAWE,GACxBrM,MAAK,SAACimC,GACDA,GACF0D,EAAS1D,EAEb,IACCnyC,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,kBACvB,IAAG,KAAD,sCACL,wBAOH,CCvOe,SAASgrC,GAAezrC,GAAe,IAAD,EAC3CS,EAAMC,cAAND,EACAnK,EAAW0J,EAAX1J,OACFyO,EAAmBD,GAAgB2B,cACjCrQ,EAAmB2xB,cAAnB3xB,eAER,EAAoCgK,mBAA2B,IAAG,mBAA3Dd,EAAU,KAAEosC,EAAa,KAChC,EAAsDtrC,wBAA6CnM,GAAU,mBAAtG03C,EAAmB,KAAEC,EAAsB,KAE5C7pC,EAAUC,cA0BhB,OAxBAf,qBACE,WACE,GAAI3K,EAAQ,CACV,IAAI8I,EAAe9I,EAAOoB,wBAAwBC,MAAK,SAACyH,GAAY,aAAwB,QAAnB,EAAAA,EAAavH,cAAM,aAAnB,EAAqBC,KAAM1B,CAAc,IAC9GE,GAAU8I,GAAgB/G,EAAcuI,0BAA0BtK,EAAQF,KAC5Ew1C,EAAuBxsC,GACvBU,EACGoB,+BAA+B9K,GAC/B+K,MAAK,SAAC7B,GACLosC,EAAcpsC,GACTA,EAAWjI,QAAWgB,EAAcb,gBAAgBlB,IACvDyL,EAAQE,KAAK,iBAEjB,IACChN,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,oCACvB,IAEN,CACF,GAEA,CAACkrC,IAID,mCACGr1C,GAAUq1C,GAAuBtzC,EAAcuI,0BAA0BtK,EAAQF,IAChF,qBAAKgL,UAAU,sBAAqB,SAClC,qBAAKA,UAAU,MAAK,SAClB,sBAAKA,UAAU,8BAA6B,UAC1C,qBAAKA,UAAU,kBAAiB,SAC9B,oBAAIA,UAAU,aAAY,SACxB,qBAAIA,UAAU,yBAAwB,UACpC,cAAC,IAAI,CAACK,GAAE,iBAAmB,SAAEhB,EAAE,0BAC9B,MACD,cAAC,IAAI,CAACgB,GAAE,yBAAoBrL,GAAiB,SAAqB,OAAnBu1C,QAAmB,IAAnBA,GAA2B,QAAR,EAAnBA,EAAqB9zC,cAAM,WAAR,EAAnB,EAA6B6H,OAAY,aACjFe,EAAE,gCAIf,qBAAKW,UAAU,SAAQ,SACrB,uCAAQX,EAAE,8BAEZ,qBAAKW,UAAU,OAAM,SACnB,qBAAKA,UAAU,YAAW,SACxB,qBAAKA,UAAU,SAAQ,SACrB,wBAAOA,UAAU,6CAA4C,UAC3D,gCACE,+BACE,6BAAKX,EAAE,iBACP,6BACGpI,EAAcb,gBAAgBlB,IAC7B,cAACyT,GAAkB,CACjBD,MAAO,mBACPvI,QAAS,kBAAMQ,EAAQE,KAAK,6BAAD,OAA8B7L,EAAc,iBAAgB,MAI5FiC,EAAcb,gBAAgBlB,IAAW,6BAAI,6BAGlD,gCACa,OAAVgJ,QAAU,IAAVA,OAAU,EAAVA,EAAYgP,KAAI,SAAC9O,GAChB,IAAMhI,EAAkBa,EAAcb,gBAAgBlB,GAChD3B,EAAG,yBAAqByB,EAAc,uBAAeoJ,EAAU1H,GAAE,sBACvE,OACE,qBAEEyJ,QAAS,WACQ,OAAf/J,QAAe,IAAfA,GAAmBuK,EAAQE,KAAKtN,EAClC,EAAE,UAEF,6BAAK6K,EAAUE,KAAK1K,IAAI+P,KACxB,6BACE,cAACmF,GAAqB,CACpB1I,KAAM,CAAC,MAAO,OACdsI,MAAOrJ,EAAE,sBACTc,QAAS,WACPQ,EAAQE,KAAKtN,EACf,EACAyM,UAAU,kBACVyI,UAAU,MAGbrS,GACC,6BACE,cAAC0S,GAAqB,CACpB1I,KAAM,CAAC,MAAO,OACdsI,MAAO,YACPvI,QAAS,WACPQ,EAAQE,KAAK,6BAAD,OAA8B7L,EAAc,YAAIoJ,EAAU1H,IACxE,EACAsJ,UAAU,kBACVyI,UAAU,QA1BXrK,EAAU1H,GAgCrB,uBAYxB,CCxIe,SAAS+zC,KACtB,IAAQprC,EAAMC,cAAND,EAER,EAAwBL,qBAAsB,mBAAvC+D,EAAI,KAAE2Q,EAAO,KACpB,EAA8B1U,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAoB1B,OAlBA3T,qBAAU,WAEN4D,GACG8Q,UACAxU,MAAK,SAACgD,GACDA,GACF2Q,EAAQ3Q,EAEZ,IACClP,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,6BACvB,IACCwX,SAAQ,kBAAMrD,GAAW,EAAM,GAItC,GAAG,CAACnU,IAEG,CAAE0D,OAAM2nC,cAAe/6B,EAChC,C,IC5BqBg7B,GAAgB,4CAGlC,OAHkC,2DACnC,SAAiCz1C,EAAgBF,GAC/C,OAAOE,EAAOoB,wBAAwBC,MAAK,SAACyH,GAAY,aAAwB,QAAnB,EAAAA,EAAavH,cAAM,aAAnB,EAAqBC,MAAO1B,CAAc,GACzG,KAAC,EAHkC,GCqHtB41C,OAlGf,SAAqBhsC,GAA0B,IAAD,EACpCR,EAAqCQ,EAArCR,UAAWysC,EAA0BjsC,EAA1BisC,WAAY55B,EAAcrS,EAAdqS,UAC/B,EAAwC0V,cAAhC3xB,EAAc,EAAdA,eAAgBihB,EAAW,EAAXA,YAEhB5W,EAAMC,cAAND,EACFsE,EAAmBD,GAAgB2B,cACnC1E,EAAUC,cAEhB,OAA4C,KAA/B,OAATxC,QAAS,IAATA,OAAS,EAATA,EAAW+2B,kBAAkBl/B,QACxB,8BAAMoJ,EAAE,4BAEJ,OAATjB,QAAS,IAATA,KAAW+2B,kBAAkB,KAC/B/2B,EAAU+2B,kBAAoB/2B,EAAU+2B,kBAAkBnyB,MACxD,SAAC6xB,EAAKC,GAAG,OAAK,IAAIn3B,KAAKk3B,EAAII,SAASv3B,UAAY,IAAIC,KAAKm3B,EAAIG,SAASv3B,SAAS,KAIjF,wBAAOsC,UAAU,oBAAmB,UAClC,gCACE,+BACE,6BAAKX,EAAE,iBACP,6BAAKA,EAAE,kBACP,6BAAKA,EAAE,qBACP,6BAAKA,EAAE,qBACP,uBACCwrC,GAAc,4BAGnB,kCACG55B,GACC,6BACE,oBAAIY,QAAS,EAAG7R,UAAU,cAAa,SACrC,cAAC0P,GAAgB,CAACC,QAASsB,SAI/BA,IACS,OAAT7S,QAAS,IAATA,GAA4B,QAAnB,EAATA,EAAW+2B,yBAAiB,WAAnB,EAAT,EAA8BjoB,KAAI,SAACkoB,GACjC,OACEA,GACAA,EAAiB92B,KAAK1K,IAAI+P,KACE,IAA5ByxB,EAAiBn9B,QACf,+BACE,6BAAKm9B,EAAiB92B,KAAK1K,IAAI+P,KAC/B,6BACGtE,EAAE,sBAAuB,CACxBo3B,MAAO76B,EAAcglB,YAAYwU,EAAiBqB,MAAQrB,EAAiBqB,MAAQrB,EAAiBsB,aACpG5V,SAAU1iB,EAAU0iB,aAGxB,6BACGsU,EAAiBH,SAAWzrB,GAAY+I,eAAe,IAAI5U,KAAKy3B,EAAiBH,SAAUzrB,GAAY0G,gBAE1G,6BAAKklB,EAAiBtqB,UAAYtB,GAAYguB,eAAepC,EAAiBtqB,YAC9E,oBAAI9K,UAAU,cAAa,SACzB,wBACEA,UAAU,uBACVG,QAAS,SAAC6X,GACRA,EAAG2V,kBACHhtB,EAAQE,KAAK,kBAAD,OACQ7L,EAAc,uBAAeihB,EAAW,8BAAsBmf,EAAiB1+B,GAAE,mBAEvG,EACA+R,SAAU+rB,GAAiBO,yBAAyBK,GAAkB,SAErE/1B,EAAE,6BAGNwrC,GACC,mCACE,qBAAI7qC,UAAU,cAAa,UACzB,wBACE0I,MAAOrJ,EAAE,oBACTW,UAAU,+BACVG,QAAS,SAAC6X,GACRA,EAAG2V,kBACHhtB,EAAQE,KAAK,kBAAD,OACQ7L,EAAc,uBAAeoJ,EAAU1H,GAAE,8BAAsB0+B,EAAiB1+B,GAAE,iBAExG,EAAE,SAEF,cAAC,IAAe,CAAC0J,KAAM,CAAC,MAAO,2BAEjC,cAACyI,GAAmB,CAClBtV,IAAG,yBAAoByB,EAAc,uBAAeoJ,EAAU1H,GAAE,8BAAsB0+B,EAAiB1+B,aA1CxG0+B,EAAiB1+B,GAkDhC,WAIV,ECtEeo0C,OAtCf,SAAwBlsC,GACtB,IAAQS,EAAMC,cAAND,EACA0D,EAAS0nC,KAAT1nC,KAER,IAAKnE,EAAMR,WAA+C,IAAlCQ,EAAMR,UAAUw3B,OAAO3/B,OAC7C,OAAO,KAGT,IAAM80C,EAAmB,OAAJhoC,QAAI,IAAJA,OAAI,EAAJA,EAAM5E,QAAO,SAAC6T,GAAO,IAAD,EACvC,OAAsB,QAAf,EAAApT,EAAMR,iBAAS,aAAf,EAAiBw3B,OAAOz/B,SAAS6b,EAAEtb,OAAQsb,EAAE1T,IACtD,IAEA,OAAKysC,GAAwC,IAAxBA,EAAa90C,OAKhC,sBAAK+J,UAAU,aAAY,UACzB,qBAAKA,UAAU,iCAAgC,SAC7C,6BAAKX,EAAE,yBAGT,qBAAKW,UAAU,YAAW,SACxB,sBAAKA,UAAU,SAAQ,UACpBpB,EAAMqS,WAAa,cAACvB,GAAgB,CAACC,QAAS/Q,EAAMqS,aACnDrS,EAAMqS,WACN,oBAAIjR,UAAU,GAAE,SACb+qC,EAAa79B,KAAI,SAACrK,GACjB,OAAO,oBAAI7C,UAAU,GAAE,SAAK,OAAH6C,QAAG,IAAHA,OAAG,EAAHA,EAAKjB,UAChC,cAhBH,IAuBX,ECZe,SAASopC,GAAWpsC,GAAe,IAAD,EACvCS,EAAMC,cAAND,EACAnK,EAAW0J,EAAX1J,OACR,EAAwCyxB,cAAhC3xB,EAAc,EAAdA,eAAgBihB,EAAW,EAAXA,YAClBtS,EAAmBD,GAAgB2B,cAEzC,EAAkCrG,qBAAiC,mBAA5DZ,EAAS,KAAEy5B,EAAY,KAC9B,EAAsD74B,wBAA6CnM,GAAU,mBAAtG03C,EAAmB,KAAEC,EAAsB,KAClD,EAAgCC,KAAxB1nC,EAAI,EAAJA,KAAM2nC,EAAa,EAAbA,cACd,EAA8B1rC,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAEpBvC,EAAYrE,mBAAQ,WACxB,SAAQ89B,IAAkB/6B,EAC5B,GAAG,CAACA,EAAS+6B,IAEb,EAAoC1rC,oBAAkB,GAAM,mBAArD6rC,EAAU,KAAEI,EAAa,KAChC,EAAgDjsC,oBAAkB,GAAM,mBAAjEuiB,EAAgB,KAAEsI,EAAmB,KAqB5C,OAnBAhqB,qBACE,WACEqrC,GACF,GAEA,CAACX,IAGH1qC,qBACE,WACM3K,IACF20B,EAAoB5yB,EAAcuI,0BAA0BtK,EAAQF,IACpEi2C,EAAch0C,EAAc6yB,oBAAoB50B,EAAQF,IAE5D,GAEA,CAACE,IAID,mCACGA,GAAUq1C,GAAuBhpB,GAChC,qBAAKvhB,UAAU,sBAAqB,SAClC,sBAAKA,UAAU,MAAK,UAClB,qBAAKA,UAAU,kBAAiB,SAC9B,oBAAIA,UAAU,aAAY,SACxB,qBAAIA,UAAU,yBAAwB,UACpC,cAAC,IAAI,CAACK,GAAE,iBAAmB,SAAEhB,EAAE,0BAA+B,MAE9D,cAAC,IAAI,CAACgB,GAAE,yBAAoBrL,GAAiB,SAAqB,OAAnBu1C,QAAmB,IAAnBA,GAA2B,QAAR,EAAnBA,EAAqB9zC,cAAM,WAAR,EAAnB,EAA6B6H,OAAY,MAExF,cAAC,IAAI,CAAC+B,GAAE,yBAAoBrL,EAAc,eAAc,SAAEqK,EAAE,0BAA+B,aAC3E,OAATjB,QAAS,IAATA,OAAS,EAATA,EAAWE,KAAK1K,IAAI+P,WAKjC,qBAAK3D,UAAU,SAAQ,SACrB,6BAAc,OAAT5B,QAAS,IAATA,OAAS,EAATA,EAAWE,KAAK1K,IAAI+P,GAAUrD,kBAGrC,qBAAKN,UAAU,sBAAqB,SAClC,sBAAKA,UAAU,YAAW,UACxB,oBAAIA,UAAU,4CAA2C,SACvD,+BAAOX,EAAE,mBAEX,cAACqQ,GAAgB,CAACC,QAAS+6B,IAC1B3nC,IAAS2nC,GACR,mBAAG1qC,UAAU,YAAW,SACrB+C,EACE5E,QAAO,SAAC0E,GAAG,OAAc,OAATzE,QAAS,IAATA,OAAS,EAATA,EAAWw3B,OAAOz/B,SAAS0M,EAAInM,GAAG,IAClDwW,KAAI,SAACrK,GACJ,OACE,qCACE,cAACkM,GAAoB,CAAClM,IAAKA,IAC3B,yBAGN,WAMV,cAAC,GAAc,CAACzE,UAAWA,EAAW6S,UAAWA,IAEjD,sBAAKjR,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,6BAAKX,EAAE,0BAGT,qBAAKW,UAAU,YAAW,SACxB,sBAAKA,UAAU,SAAQ,UACpB6qC,GACC,cAAC,IAAI,CAAC7qC,UAAU,uBAAuBK,GAAG,wBAAuB,SAC9DhB,EAAE,8BAIP,oBACEqJ,MAAOrJ,EAAE,4CACTW,UAAU,oCACVwrB,KAAI,iBAAYvV,GAChBxJ,OAAQ,SACRkwB,IAAI,aAAY,UAEhB,cAAC,IAAe,CAACv8B,KAAM,CAAC,MAAO,8BAC/B,iCAAM,IAAEf,EAAE,kDAGZ,cAACuJ,GAAmB,CAAC5I,UAAU,YAAYG,QAAS,kBAAM+qC,GAAe,IACzE,cAAC,GAAW,CAAC9sC,UAAWA,EAAWysC,WAAYA,EAAY55B,UAAWA,mBAUtF,SAASi6B,IACP,GAAIh2C,EAAQ,CACV,IAAI8I,EAAe2sC,GAAiBQ,0BAA0Bj2C,EAAQF,GAClEgJ,GAAgB/G,EAAcuI,0BAA0BtK,EAAQF,KAClEw1C,EAAuBxsC,GACvB83B,GACGiC,aAAa9hB,EAAa,OAC1BlW,MAAK,SAAC3B,GACDA,GACFA,EAAU+2B,kBAAoB/2B,EAAU+2B,kBAAkBnyB,MAAK,SAAC6xB,EAAKC,GACnE,OAA8D,EAAvDN,GAAiB4W,yBAAyBvW,EAAKC,EACxD,IACA+C,EAAaz5B,IACRiK,GAAavU,MAAMuL,EAAE,yCAC9B,IACCxL,OAAM,SAACC,GAAgB,IAAD,EACW,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,EAAE,0CAErBgJ,GAAavU,MAAMuL,EAAE,wBAEzB,IACCwX,SAAQ,WACPrD,GAAW,EACb,IAEN,CACF,CACF,C,OCrJe63B,ICVV/wC,GDUU+wC,GAtBf,SAA2BzsC,GACzB,IAAQ0sC,EAAwD1sC,EAAxD0sC,mBAAoBC,EAAoC3sC,EAApC2sC,eAAgBC,EAAoB5sC,EAApB4sC,gBAEtC7nC,EAAmBD,GAAgB2B,cAMzC,OACE,qBAAKrF,UAAU,4DAA2D,SACxE,wBAAQqN,SAPkB,SAACb,GAC7B,IAAMi/B,EAAoBF,EAAeh1C,MAAK,SAAC6H,GAAS,OAAKA,EAAUE,KAAK1K,IAAI+P,KAAc6I,EAAMC,OAAOvQ,KAAK,IAChHovC,EAAmBG,EACrB,EAI6CzrC,UAAU,cAAc,aAAW,sBAAqB,SAC9FurC,EAAer+B,KAAI,SAAC9O,GAAS,OAC5B,wBAA2BlC,MAAOkC,EAAUE,KAAK1K,IAAI+P,GAAW+nC,UAAyB,OAAfF,QAAe,IAAfA,OAAe,EAAfA,EAAiB90C,MAAO0H,EAAU1H,GAAG,SAC5G0H,EAAUE,KAAK1K,IAAI+P,IADTvF,EAAU1H,GAEd,OAKnB,EEtBO,SAASi1C,GAAe/sC,GAC7B,OACE,wBACElI,GAAIkI,EAAMlI,GACVwF,MAAO0C,EAAMsU,QACbjG,MAAO,CAAEzH,MAAO,QAChBxF,UAAU,uBACVyI,SAAU7J,EAAM6J,SAChB4E,SAAU,kBAAMzO,EAAMgtC,SAAShtC,EAAMlI,GAAG,EAAC,SAExCyB,MAAM26B,KAAK,IAAI36B,MAAMyG,EAAM+L,MAAM,SAACk9B,EAAG9xC,GAAC,OAAKA,EAAI6I,EAAM0O,GAAG,IAAEJ,KAAI,SAACnX,GAC9D,OACE,wBAAgCW,GAAI,cAAgBX,EAAGmG,MAAOnG,EAAE,SAC7DA,GADU,cAAgBA,EAIjC,KAGN,CDWe,SAAS81C,GAAUjtC,GAChC,IAAQS,EAAMC,cAAND,EACAnK,EAAW0J,EAAX1J,OACR,EAAiDyxB,cAAzC3xB,EAAc,EAAdA,eAAgBihB,EAAW,EAAXA,YAAa4f,EAAO,EAAPA,QAC/BlyB,EAAmBD,GAAgB2B,cAEjCiZ,EAAqB2iB,GAAoB,CAAEjE,2BAA4B39B,EAAE,yCAAzEif,iBACR,EAAkEtf,wBAAwCnM,GAAU,mBAA7Gi5C,EAAyB,KAAEC,EAA4B,KAC9D,EAAgC/sC,mBAAiB,OAAM,mBAAhD8hB,EAAQ,KAAEkrB,EAAW,KAC5B,EAAsChtC,mBAAiB62B,GAAQ,mBAAxDoW,EAAW,KAAEC,EAAc,KAElC,EAA8BltC,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAAgExU,oBAAkB,GAAM,mBAAjFmtC,EAAwB,KAAEC,EAA2B,KAC5D,EAAsDptC,oBAAkB,GAAM,mBAAvEqtC,EAAmB,KAAEC,EAAsB,KAElD,EAAsCttC,oBAAkB,GAAM,mBAAvDutC,EAAW,KAAEC,EAAc,KAClC,EAAsCxtC,oBAAkB,GAAM,mBAAvDytC,EAAW,KAAEC,EAAc,KAClC,EAAoC1tC,oBAAkB,GAAM,mBAArD2tC,EAAU,KAAEC,EAAa,KAChC,EAA4C5tC,oBAAkB,GAAM,oBAA7D6tC,GAAgB,MAAEC,GAAe,MACxC,GAAsD9tC,wBAA6BnM,GAAU,qBAAtFk6C,GAAmB,MAAEC,GAAsB,MAClD,GAAkDhuC,wBAA6BnM,GAAU,qBAAlFo6C,GAAiB,MAAEC,GAAoB,MAC9C,GAAoCluC,wBAA6BnM,GAAU,qBAApEs6C,GAAU,MAAEC,GAAa,MAChC,GAAwCpuC,wBAA6BnM,GAAU,qBAAxEw6C,GAAY,MAAEC,GAAe,MAEpC,GAA4BtuC,wBAA6BnM,GAAU,qBAA5D06C,GAAM,MAAEC,GAAS,MACxB,GAA4BxuC,wBAA6BnM,GAAU,qBAA5D46C,GAAM,MAAEC,GAAS,MACxB,GAA0C1uC,wBAA6BnM,GAAU,qBAA1E86C,GAAa,MAAEC,GAAgB,MACtC,GAA0C5uC,wBAA6BnM,GAAU,qBAA1Eg7C,GAAa,MAAEC,GAAgB,MACtC,GAA8B9uC,wBAA6BnM,GAAU,qBAA9DskC,GAAO,MAAE4W,GAAU,MAC1B,GAA0B/uC,mBAAiB,GAAE,qBAAtCy3B,GAAK,MAAEuX,GAAQ,MACtB,GAAwChvC,mBAAiB,GAAE,qBAApD43B,GAAY,MAAEqX,GAAe,MACpC,GAA4CjvC,mBAAiB,GAAE,qBAAxD83B,GAAc,MAAEoX,GAAiB,MACxC,GAAwClvC,mBAAiB,GAAE,qBAApDy4B,GAAY,MAAE0W,GAAe,MACpC,GAAsCnvC,mBAAiB,GAAE,qBAAlD03B,GAAW,MAAE0X,GAAc,MAClC,GAA8BpvC,wBAA6BnM,GAAU,qBAA9DoiC,GAAO,MAAEoZ,GAAU,MAC1B,GAA4CrvC,wBAA6BnM,GAAU,qBAA5E8hC,GAAc,MAAE2Z,GAAiB,MACxC,GAAwCtvC,wBAA6BnM,GAAU,qBAAxE+hC,GAAY,MAAE2Z,GAAe,MACpC,GAA0BvvC,wBAA6BnM,GAAU,qBAA1D27C,GAAK,MAAEC,GAAQ,MACtB,GAA4BzvC,wBAA6BnM,GAAU,qBAA5DyS,GAAM,MAAEopC,GAAS,MACxB,GAAgC1vC,mBAA6B,QAAO,qBAA7D2vC,GAAQ,MAAEC,GAAW,MAC5B,GAAkC5vC,wBAA6BnM,GAAU,qBAAlEkkC,GAAS,MAAE8X,GAAY,MAE9B,GAAkC7vC,mBAAoB1E,GAAUw0C,UAAS,qBAAlEz0C,GAAS,MAAE00C,GAAY,MAE9B,GAA0C/vC,oBAAkB,GAAM,qBAA3DgwC,GAAa,MAAEC,GAAgB,MACtC,GAAwCjwC,mBAAiB,GAAE,qBAApDkwC,GAAY,MAAEC,GAAe,MACpC,GAA0CnwC,mBAAiB,GAAE,qBAAtDowC,GAAa,MAAEC,GAAgB,MACtC,GAA8CrwC,mBAAiB,GAAE,qBAA1DswC,GAAe,MAAEC,GAAkB,MAE1C,GAA8CvwC,oBAAkB,GAAM,qBAA/DwwC,GAAe,MAAEC,GAAkB,MAC1C,GAAkDzwC,oBAAkB,GAAM,qBAAnE0wC,GAAiB,MAAEC,GAAoB,MAC9C,GAAgD3wC,oBAAkB,GAAK,qBACvE,IADuB,MAAqB,MACFA,oBAAkB,IAAM,qBAA3D4wC,GAAa,MAAEC,GAAgB,MACtC,GAAwC7wC,qBAA4B,qBAA7DusC,GAAc,MAAEjB,GAAa,MACpC,GAA8CtrC,qBAAqB,qBAA5DwsC,GAAe,MAAEF,GAAkB,MAEpCwE,GAAc,WAAH,OAASnmC,KAAO,IAAIhM,MAAQkM,OAAO,mBAAoB,EAElElJ,GAAUC,cAyHhB,OAvHAf,qBACE,WACE,GAAIye,EAAiBroB,OAAS,EAAG,CAC/B,IAAI+H,EAAe9I,GAAUA,EAAOoB,wBAAwBC,MAAK,SAACyH,GAAY,aAAwB,QAAnB,EAAAA,EAAavH,cAAM,aAAnB,EAAqBC,MAAO1B,CAAc,IACzHE,GACE8I,GAAgB/G,EAAcuI,0BAA0BtK,EAAQF,IAClE8gC,GACGiC,aAAa9hB,EAAa,OAC1BlW,MAAK,SAAC3B,GACL,GAAIA,EAAW,CACb4tC,EAAY5tC,EAAU0iB,UACtBwqB,GAAmBltC,GACnB03B,GACGia,qBAAqB3xC,GACrB2B,MAAK,SAAC0E,GACL,IAAIurC,EAAsB1xB,EAAiBngB,QAAO,SAAC0R,GAAI,OAAKpL,EAAQqZ,IAAIjO,EAAKnZ,GAAG,IAChFq1C,EAA6BiE,EAC/B,IACCn8C,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,uCACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,IAEF,IAAI4hB,EAAmBh3B,EAAU+2B,kBAAkB5+B,MAAK,SAACk+B,GAAE,OAAKA,EAAG/9B,KAAOu1C,CAAW,IAErF,GAAI7W,GAAoC,QAAhB6W,EAAuB,CAC7CuB,GAAUpY,EAAiB92B,KAAK1K,IAAI,OACpC85C,GAAUtY,EAAiB92B,KAAK1K,IAAI,OACpCg6C,GAAiBxY,EAAiBvzB,YAAYjO,IAAI,OAClDk6C,GAAiB1Y,EAAiBvzB,YAAYjO,IAAI,OAClDm6C,GAAW3Y,EAAiB+B,SAC5B6W,GAAS5Y,EAAiBqB,OAC1B2X,GAA8C,IAA/BhZ,EAAiBsB,aAChCgY,GAAUtZ,EAAiB9vB,QAE3B,IAAI2qC,EAAgB,CAAC,IACrB,GAAI7a,EAAiBtqB,SAAS5D,WAAW/Q,SAAS,KAAM,CACtD,IAAI8T,EAAOmrB,EAAiBtqB,SAAS5D,WAAWxO,MAAM,KACtDy2C,GAAgB5S,SAAStyB,EAAK,KAC9BgmC,EAAgBhmC,EAAK,GAAGvR,MAAM,IAChC,MAAOu3C,EAAgB7a,EAAiBtqB,SAAS5D,WAAWxO,MAAM,KAElE22C,GAAiB9S,SAAS0T,EAAc,KACxCV,GAAmBhT,SAAS0T,EAAc,KAEtC7a,EAAiByB,OACfzB,EAAiByB,KAAKX,KAAW0Y,GAAYxZ,EAAiByB,KAAKX,KACnEd,EAAiByB,KAAKZ,KAAekY,GAAgBhhB,WAAWiI,EAAiByB,KAAKZ,MACtFb,EAAiByB,KAAKV,MACxB0Y,GAAazZ,EAAiByB,KAAKV,KACnC4Y,GAAaz0C,GAAU67B,YAErBf,EAAiByB,KAAKd,KACxBkY,GAAgB9gB,WAAWiI,EAAiByB,KAAKd,OAKjDX,EAAiBH,SAAWG,EAAiBR,eAC/CyZ,GAAW1kC,KAAO,IAAIhM,KAAKy3B,EAAiBH,UAAUprB,OAAO,qBAC7D4kC,GAAS9kC,KAAO,IAAIhM,KAAKy3B,EAAiBR,eAAe/qB,OAAO,qBAChEklC,GAAaz0C,GAAU41C,WAMrB9a,EAAiBH,SAAWG,EAAiBR,cAAgBQ,EAAiBT,gBAChF2Z,GAAkB3kC,KAAO,IAAIhM,KAAKy3B,EAAiBT,iBAAiB9qB,OAAO,qBAEvEimC,KAAgBnmC,KAAO,IAAIhM,KAAKy3B,EAAiBH,UAAUprB,OAAO,qBACpEyiC,GAAuB,IAErBlX,EAAiBT,gBAAkBS,EAAiBR,eACtDib,IAAiB,GAEbC,KAAgBnmC,KAAO,IAAIhM,KAAKy3B,EAAiBT,iBAAiB9qB,OAAO,qBAC3EyiC,GAAuB,GAEzBgC,GAAkB3kC,KAAO,IAAIhM,KAAKy3B,EAAiBT,iBAAiB9qB,OAAO,qBAC3E0kC,GAAgB5kC,KAAO,IAAIhM,KAAKy3B,EAAiBR,eAAe/qB,OAAO,qBAM7E,CACF,CACF,IACChW,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,wCACrBmU,GAAW,EACb,GAGR,CACF,GAEA,CAAC8K,IAGHze,qBAAU,WACR,GAAI3K,EAAQ,CACV,IAAI8I,EAAe9I,EAAOoB,wBAAwBC,MAAK,SAACyH,GAAY,aAAwB,QAAnB,EAAAA,EAAavH,cAAM,aAAnB,EAAqBC,KAAM1B,CAAc,IAC9GE,GAAU8I,GAAgB/G,EAAcuI,0BAA0BtK,EAAQF,IAC5E0J,EACGoB,+BAA+B9K,GAC/B+K,MAAK,SAAC7B,GACLosC,GAAcpsC,EAChB,IACCrK,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,oCACvB,GAEN,CACF,GAAG,IAEC8sC,EAEA,qBAAKnsC,UAAU,6BAA4B,SACzC,cAAC8e,GAAc,CACbG,UAAW5f,EAAE,qDACb8f,WAAY,WAw7BdnqB,GAAkC,QAAhBi3C,IACpBG,GAA4B,GAC5BtW,GACGqa,uBAAuBn7C,EAAgBihB,EAAag2B,GACpDlsC,MAAK,WACJ,OAAOY,GAAQE,KAAK,kBAAD,OAAmB7L,EAAc,uBAAeihB,EAAW,sBAChF,IACCpiB,OAAM,SAACC,GAAgB,IAAD,EACW,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,EAAE,wDAErBgJ,GAAavU,MAAMuL,EAAE,wBAEzB,IAr8B4C,EAC1C+f,UAAWgtB,MAOjB,qBAAKpsC,UAAU,6BAA4B,SACzC,sBAAKA,UAAU,MAAK,UAClB,cAAC0P,GAAgB,CAACC,QAASA,KAEzBA,GACA,sBAAM0V,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,SAC1C,sBAAKtlB,UAAU,MAAK,UAClB,qBAAKA,UAAU,kBAAiB,SAC9B,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,yCAET,wBACEW,UAAU,sBACVG,QAAS,kBAAMQ,GAAQE,KAAK,kBAAD,OAAmB7L,EAAc,uBAAeihB,EAAW,sBAAqB,OAI/G,sBAAKjW,UAAU,YAAW,UAExB,sBAAKA,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,yCACjC,uBACEW,UAAU,eACV9D,MAAOqxC,GACPlgC,SAAU,SAAC2K,GAAE,OAAKo4B,GAAap4B,EAAGvL,OAAOvQ,MAAOsxC,GAAWhB,EAAe,EAC1En0B,UAAQ,EACRC,WAAW,EACX7P,SAAU4jC,IAEXE,GACC,uBAAOvsC,UAAU,YAAYtJ,GAAG,mBAAkB,SAC/C2I,EAAE,2CAMT,sBAAKW,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,yCACjC,uBACEW,UAAU,eACV9D,MAAOuxC,GACPpgC,SAAU,SAAC2K,GAAE,OAAKo4B,GAAap4B,EAAGvL,OAAOvQ,MAAOwxC,GAAWhB,EAAe,EAC1Er0B,UAAQ,EACR5P,SAAU4jC,IAEXI,GACC,uBAAOzsC,UAAU,YAAYtJ,GAAG,mBAAkB,SAC/C2I,EAAE,2CAMT,sBAAKW,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,gDACjC,uBACEW,UAAU,eACV9D,MAAOyxC,GACPtgC,SAAU,SAAC2K,GAAE,OAAK41B,GAAiB51B,EAAGvL,OAAOvQ,MAAM,EACnDuM,SAAU4jC,OAKd,sBAAKrsC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,gDACjC,uBACEW,UAAU,eACV9D,MAAO2xC,GACPxgC,SAAU,SAAC2K,GAAE,OAAK81B,GAAiB91B,EAAGvL,OAAOvQ,MAAM,EACnDuM,SAAU4jC,OAKd,sBAAKrsC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,0CACjC,uBACEW,UAAU,eACV9D,MAAOi7B,GACP9pB,SAAU,SAAC2K,GAAE,OAAK+1B,GAAW/1B,EAAGvL,OAAOvQ,MAAM,EAC7CuM,SAAU4jC,OAKd,sBAAKrsC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,8CAEjC,sBAAKW,UAAU,mBAAkB,UAC/B,uBACE7I,KAAK,SACLm5B,KAAK,OACLtwB,UAAU,eACV9D,MAAOw6B,GACPrpB,SAAU,SAAC2K,GAAE,OAstBrC,SAAyB9b,GACvB,IAAMm0C,EAAcljB,WAAWjxB,GAC/BkyC,GAAeiC,QACKx9C,IAAhBw9C,GACFvD,IA6JN,SAAwB5wC,GAEtB,OADc,IAAIF,OAAO,yCACZC,KAAKC,EACpB,CAhKuBo0C,CAAep0C,GAEpC,CA5tB0Cq0C,CAAgBv4B,EAAGvL,OAAOvQ,MAAM,EAClDmc,UAAQ,EACR5P,SAAU4jC,IAGZ,sBAAMrsC,UAAU,sCAAqC,SAAC,SAEvD6sC,IACC,uBAAO7sC,UAAU,YAAYtJ,GAAG,wBAAuB,SACpD2I,EAAE,wDAQf,qBAAKW,UAAU,kBAAiB,SAC9B,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,mCAET,wBACEW,UAAU,sBACVG,QAAS,kBAAMQ,GAAQE,KAAK,kBAAD,OAAmB7L,EAAc,uBAAeihB,EAAW,sBAAqB,OAI/G,sBAAKjW,UAAU,YAAW,UAExB,sBAAKA,UAAU,OAAM,UACnB,uBACE7I,KAAK,WACLT,GAAG,kBACH2W,SAAU,kBAwpBhC,SAAiCnR,GAC3BA,IACFyzC,IAAqB,GACrBa,GAAkBl2C,GAAU67B,YAG9BsZ,GAAmBvzC,EACrB,CA/pBsCu0C,EAAyBjB,GAAgB,EACzD71B,QAAS61B,GACT/mC,SAAU4jC,IAEZ,uBAAO3a,QAAQ,kBAAkB1xB,UAAU,OAAM,SAC9CX,EAAE,4CAKP,sBAAKW,UAAU,OAAM,UACnB,uBACE7I,KAAK,WACLT,GAAG,oBACH2W,SAAU,kBAmpBhC,SAAmCnR,GAC7BA,IACFuzC,IAAmB,GACnBe,GAAkBl2C,GAAU67B,YAG9BwZ,GAAqBzzC,EACvB,CA1pBsCw0C,EAA2BhB,GAAkB,EAC7D/1B,QAAS+1B,GACTjnC,SAAU4jC,IAEZ,uBAAO3a,QAAQ,oBAAoB1xB,UAAU,OAAM,SAChDX,EAAE,8CAKP,sBAAKW,UAAU,OAAOtJ,GAAG,YAAW,UAClC,uBAAOg7B,QAAQ,iBAAiB1xB,UAAU,aAAY,SACnDX,EAAE,4CAEL,yBACE3I,GAAI,iBACJsJ,UAAU,cACV9D,MAAOyyC,GACPthC,SAAU,SAAC2K,GAAE,OAAK42B,GAAY52B,EAAGvL,OAAOvQ,MAAM,EAAC,UAE/C,wBAAmBxF,GAAG,OAAOwF,MAAM,OAAM,SACtCmD,EAAE,mBADO,QAGZ,wBAAsB3I,GAAG,UAAUwF,MAAM,UAAS,SAC/CmD,EAAE,sBADO,WAGZ,wBAAqB3I,GAAG,SAASwF,MAAM,SAAQ,SAC5CmD,EAAE,0BADO,gBAOfmwC,IAAmBE,GAClB,qCAEE,sBAAK1vC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,4CACjC,sBAAKW,UAAU,cAAa,UAC1B,uBACE7I,KAAK,SACLmW,IAAI,OACJgjB,KAAK,OACLtwB,UAAU,eACV9D,MAAOu6B,GACPppB,SAAU,SAAC2K,GAAE,OAAK24B,GAAcxjB,WAAWnV,EAAGvL,OAAOvQ,OAAO,EAC5DuM,SAAU4jC,EACVh0B,UAAQ,IAGV,uBAAMrY,UAAU,sCAAqC,UAAC,KAAG8gB,KACxD6rB,GACC,uBAAO3sC,UAAU,YAAYtJ,GAAG,kBAAiB,SAC9C2I,EAAE,6CAOX,sBAAKW,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,4CACjC,sBAAKW,UAAU,cAAa,UAC1B,uBACE7I,KAAK,SACLmW,IAAI,OACJgjB,KAAK,OACLtwB,UAAU,eACV9D,MAAOu7B,GACPpqB,SAAU,SAAC2K,GAAE,OAAK24B,GAAcxjB,WAAWnV,EAAGvL,OAAOvQ,OAAQiyC,GAAgB,EAC7E1lC,SAAU4jC,IAGZ,uBAAMrsC,UAAU,sCAAqC,UAAC,KAAG8gB,KACxD6rB,GACC,uBAAO3sC,UAAU,YAAYtJ,GAAG,kBAAiB,SAC9C2I,EAAE,6CAMVmwC,IACC,mCAEE,sBAAKxvC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,iDACjC,sBAAKW,UAAU,cAAa,UAC1B,uBACE7I,KAAK,SACLmW,IAAI,OACJgjB,KAAK,OACLtwB,UAAU,eACV9D,MAAO06B,GACPvpB,SAAU,SAAC2K,GAAE,OAAK24B,GAAcxjB,WAAWnV,EAAGvL,OAAOvQ,OAAQ+xC,GAAgB,EAC7ExlC,SAAU4jC,EACVh0B,UAAQ,IAGV,uBAAMrY,UAAU,sCAAqC,UAAC,KAAG8gB,EAAS,QACjE6rB,GACC,uBAAO3sC,UAAU,YAAYtJ,GAAG,kBAAiB,SAC9C2I,EAAE,+CAQdqwC,IACC,mCAEE,sBAAK1vC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,mDACjC,sBAAKW,UAAU,cAAa,UAC1B,uBACE7I,KAAK,SACLmW,IAAI,OACJgjB,KAAK,OACLtwB,UAAU,eACV9D,MAAO46B,GACPzpB,SAAU,SAAC2K,GAAE,OAAK24B,GAAcxjB,WAAWnV,EAAGvL,OAAOvQ,OAAQgyC,GAAkB,EAC/EzlC,SAAU4jC,EACVh0B,UAAQ,IAGV,uBAAMrY,UAAU,sCAAqC,UAAC,KAAG8gB,EAAS,UACjE6rB,GACC,uBAAO3sC,UAAU,YAAYtJ,GAAG,kBAAiB,SAC9C2I,EAAE,kDASjB,sBAAKW,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,wCACjC,sBAAKW,UAAU,cAAa,UAC1B,uBACE7I,KAAK,SACLmW,IAAI,OACJgjB,KAAK,OACLtwB,UAAU,eACV9D,MAAOu6B,GACPppB,SAAU,SAAC2K,GAAE,OAAK24B,GAAcxjB,WAAWnV,EAAGvL,OAAOvQ,OAAO,EAC5Dmc,UAAQ,EACR5P,SAAU4jC,IAGZ,uBAAMrsC,UAAU,sCAAqC,UAAC,KAAG8gB,KACxD6rB,GACC,uBAAO3sC,UAAU,YAAYtJ,GAAG,kBAAiB,SAC9C2I,EAAE,6CAQb,sBAAKW,UAAU,OAAOtJ,GAAG,OAAM,UAC7B,uBAAOsJ,UAAU,aAAY,SAAEX,EAAE,uCACjC,yBACE3I,GAAI,iBACJsJ,UAAU,cACV9D,MAAOoJ,GACPmD,SAAU4jC,EACVh/B,SAAU,SAAC2K,GAAE,OAAK02B,GAAU12B,EAAGvL,OAAOvQ,MAAM,EAAC,UAE7C,wBAA4BxF,GAAG,gBAAgBwF,MAAM,gBAAgBmnB,QAAM,WACxEhkB,EAAE,2CADO,iBAGXysC,GACCA,EAA0B5+B,KAAI,SAACsR,GAC7B,OACE,wBAA8C9nB,GAAI,WAAa8nB,EAAgB9nB,GAAIwF,MAAOsiB,EAAgB9nB,GAAG,SAC3G,iCACkB,OAAf8nB,QAAe,IAAfA,OAAe,EAAfA,EAAiBlgB,KAAK1K,IAAI+P,GAAU,MAAmB,OAAf6a,QAAe,IAAfA,OAAe,EAAfA,EAAiB3c,YAAYjO,IAAI+P,OAFjE,WAAa6a,EAAgB9nB,GAM9C,UAIL84C,IAAmBE,GAClB,qCACE,uBAAOhe,QAAQ,YAAW,SAAEryB,EAAE,iDAC9B,uBACElI,KAAK,OACLT,GAAG,YACH4H,KAAK,YACL0B,UAAU,eACV9D,MAAO66B,GACP1pB,SAAU,SAAC2K,GAAE,OAAK62B,GAAa72B,EAAGvL,OAAOvQ,MAAM,EAC/Cmc,UAAQ,OAIZ,qCACE,sBAAKrY,UAAU,OAAM,UACnB,gCACE,uBACE7I,KAAK,QACLT,GAAG,aACH4H,KAAK,UACLpC,MAAM,WACNyd,QAAStf,KAAcC,GAAUw0C,SACjCrmC,SAAU4jC,EACVh/B,SAAU,kBAAMmjC,GAAkBl2C,GAAUw0C,SAAS,IAEvD,uBAAOpd,QAAQ,aAAa1xB,UAAU,YAAYG,QAAS,kBAAMqwC,GAAkBl2C,GAAUw0C,SAAS,EAAC,SACpGzvC,EAAE,uDAGP,gCACE,uBACElI,KAAK,QACLT,GAAG,cACH4H,KAAK,UACLpC,MAAM,YACNyd,QAAStf,KAAcC,GAAU67B,UACjC1tB,SAAU4jC,EACVh/B,SAAU,kBAAMmjC,GAAkBl2C,GAAU67B,UAAU,IAExD,uBAAOzE,QAAQ,cAAc1xB,UAAU,YAAYG,QAAS,kBAAMqwC,GAAkBl2C,GAAU67B,UAAU,EAAC,SACtG92B,EAAE,wDAGP,gCACE,uBACElI,KAAK,QACLT,GAAG,aACH4H,KAAK,UACLpC,MAAM,WACNyd,QAAStf,KAAcC,GAAU41C,SACjCznC,SAAU4jC,EACVh/B,SAAU,kBAAMmjC,GAAkBl2C,GAAU41C,SAAS,IAEvD,uBAAOxe,QAAQ,aAAa1xB,UAAU,OAAOG,QAAS,kBAAMqwC,GAAkBl2C,GAAU41C,SAAS,EAAC,SAC/F7wC,EAAE,2DAKRhF,KAAcC,GAAUw0C,UACvB,qCAEE,qBAAK9uC,UAAS,oBAAeqsC,GAAuB,YAAc31C,GAAG,WAAU,SAC7E,gCACE,uBAAMsJ,UAAU,iBAAgB,UAC9B,uBAAOA,UAAU,OAAM,SAAEX,EAAE,+CAC3B,cAACssC,GAAc,CACbj1C,GAAG,eACH4W,IAAK,EACL3C,IAAK,IACLuI,QAASg8B,GACTzmC,SAAU4jC,EACVT,SAAU,kBAAMgF,GAAiB,eAAe,OAGpD,uBAAM5wC,UAAU,iBAAgB,UAC9B,uBAAOA,UAAU,YAAW,SAAEX,EAAE,gDAChC,cAACssC,GAAc,CACbj1C,GAAG,gBACH4W,IAAK,EACL3C,IAAK,GACLuI,QAASk8B,GACT3mC,SAAU4jC,EACVT,SAAU,kBAAMgF,GAAiB,gBAAgB,OAGrD,uBAAM5wC,UAAU,iBAAgB,UAC9B,uBAAOA,UAAU,YAAW,SAAEX,EAAE,kDAChC,cAACssC,GAAc,CACbj1C,GAAG,kBACH4W,IAAK,EACL3C,IAAK,GACLuI,QAASo8B,GACT7mC,SAAU4jC,EACVT,SAAU,kBAAMgF,GAAiB,kBAAkB,OAGtD5B,IAAiB,uBAAOhvC,UAAU,YAAW,SAAEX,EAAE,+CAGtD,sBAAKW,UAAU,YAAW,UACxB,uBACE7I,KAAK,WACLT,GAAG,wBACH2W,SAAU,kBAAMwjC,IAAejB,GAAc,EAC7Cj2B,QAASi2B,GACTnnC,SAAU4jC,IAEZ,uBAAO3a,QAAQ,wBAAwB1xB,UAAU,OAAM,SACpDX,EAAE,8CAGNuwC,IACC,sBAAK5vC,UAAU,OAAM,UAEnB,sBAAKA,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,iDACjC,uBACE3I,GAAG,sBACHS,KAAK,iBACL6I,UAAU,eACV9D,MAAOy4B,GACPtnB,SAAU,SAAC2K,GAAE,OAAK84B,GAAuB94B,EAAGvL,OAAOvQ,MAAM,EACzDuM,SAAU4jC,IAEXU,IAAuB,uBAAO/sC,UAAU,YAAW,SAAEX,EAAE0tC,SAI1D,sBAAK/sC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,+CACjC,uBACE3I,GAAG,oBACHS,KAAK,iBACL6I,UAAU,eACV9D,MAAO04B,GACPvnB,SAAU,SAAC2K,GAAE,OAAK+4B,GAAqB/4B,EAAGvL,OAAOvQ,MAAM,EACvDuM,SAAU4jC,IAEXY,IAAqB,uBAAOjtC,UAAU,YAAW,SAAEX,EAAE4tC,eAM/D5yC,KAAcC,GAAU67B,WACvB,qCACE,sBAAKn2B,UAAU,YAAW,UAExB,uBAAO0xB,QAAQ,YAAW,SAAEryB,EAAE,iDAC9B,uBACElI,KAAK,OACLT,GAAG,YACH4H,KAAK,YACL0B,UAAU,eACV9D,MAAO66B,GACP1pB,SAAU,SAAC2K,GAAE,OAAK62B,GAAa72B,EAAGvL,OAAOvQ,MAAM,EAC/Cmc,UAAQ,OAGZ,sBAAKrY,UAAU,YAAW,UACxB,uBACE7I,KAAK,WACLT,GAAG,wBACH2W,SAAU,kBAAMwjC,IAAejB,GAAc,EAC7Cj2B,QAASi2B,GACTnnC,SAAU4jC,IAEZ,uBAAO3a,QAAQ,wBAAwB1xB,UAAU,OAAM,SACpDX,EAAE,8CAGNuwC,IACC,sBAAK5vC,UAAU,OAAM,UAEnB,sBAAKA,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,iDACjC,uBACE3I,GAAG,sBACHS,KAAK,iBACL6I,UAAU,eACV9D,MAAOy4B,GACPtnB,SAAU,SAAC2K,GAAE,OAAK84B,GAAuB94B,EAAGvL,OAAOvQ,MAAM,EACzDuM,SAAU4jC,IAEXU,IAAuB,uBAAO/sC,UAAU,YAAW,SAAEX,EAAE0tC,SAI1D,sBAAK/sC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,+CACjC,uBACE3I,GAAG,oBACHS,KAAK,iBACL6I,UAAU,eACV9D,MAAO04B,GACPvnB,SAAU,SAAC2K,GAAE,OAAK+4B,GAAqB/4B,EAAGvL,OAAOvQ,MAAM,EACvDuM,SAAU4jC,IAGXY,IAAqB,uBAAOjtC,UAAU,YAAW,SAAEX,EAAE4tC,eAM/D5yC,KAAcC,GAAU41C,UACvB,mCACE,sBAAKx5C,GAAG,YAAW,UAEjB,sBAAKsJ,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,0CACjC,uBACE3I,GAAG,eACHS,KAAK,iBACL6I,UAAU,eACV9D,MAAO+4B,GACP5nB,SAAU,SAAC2K,GAAE,OAoNpB9b,EApNyC8b,EAAGvL,OAAOvQ,MAqN1EmyC,GAAWnyC,QACPA,GAASsyC,GACPsB,KAAgB5zC,EAClBoxC,GAAgB,2CAEhBA,GADSpxC,EAAQsyC,GACD,iDAEA37C,GAGlBy6C,QAAgBz6C,IAXpB,IAAyBqJ,CApNyD,EAClDuM,SAAU4jC,IAEXgB,IAAgB,uBAAOrtC,UAAU,YAAW,SAAEX,EAAEguC,SAInD,sBAAKrtC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,wCACjC,uBACE3I,GAAG,aACHS,KAAK,iBACL6I,UAAU,eACV9D,MAAOsyC,GACPnhC,SAAU,SAAC2K,GAAE,OAqNtB9b,EArNyC8b,EAAGvL,OAAOvQ,MAsNxEuyC,GAASvyC,GACTqyC,GAAgBryC,QACZ+4B,IAAW/4B,EACT4zC,KAAgB5zC,EAClBkxC,GAAc,yCAEdA,GADSnY,GAAU/4B,EACL,iDAEArJ,GAGhBu6C,QAAcv6C,IAZlB,IAAuBqJ,CArNyD,EAChDuM,SAAU4jC,IAEXc,IAAc,uBAAOntC,UAAU,YAAW,SAAEX,EAAE8tC,SAIjD,sBAAKntC,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,iDACjC,uBACE3I,GAAG,sBACHS,KAAK,iBACL6I,UAAU,eACV9D,MAAOy4B,GACPtnB,SAAU,SAAC2K,GAAE,OAAK84B,GAAuB94B,EAAGvL,OAAOvQ,MAAM,EACzDuM,SAAU4jC,IAEXU,IAAuB,uBAAO/sC,UAAU,YAAW,SAAEX,EAAE0tC,yBAU1E,qBAAK/sC,UAAU,MAAK,SAClB,sBAAKA,UAAU,SAAQ,UACrB,wBACEA,UAAU,yBACV7I,KAAK,SACLgJ,QAAS,kBAsP3B,WACE,IAAI2K,EAAW,MACXkmC,EAAgC,OAAZpc,SAAY,IAAZA,MAAgB,GAClCqc,EAAoC,OAAdtc,SAAc,IAAdA,MAAkB,GACxCuc,EAAsB,OAAPjc,SAAO,IAAPA,MAAW,GAC1Bkc,EAAmB,OAAN7rC,SAAM,IAANA,QAAM,EAANA,GAAQmc,cACrB2vB,EAA+B,YAAbzC,IAAuC,WAAbA,GAElD,QAAe97C,IAAXyS,GAAsB,OAE1B,GAAIkpC,IAASvZ,GAAS,CACpB,IAAIoc,EAAoB1zC,KAAK6iC,MAAMgO,IAAS7wC,KAAK6iC,MAAMvL,IACvDnqB,EAAWZ,KAAKu1B,MAAM4R,EAAoB,KAC1CL,EAAoBxC,EACtB,EAEIU,GAAe,GAAKE,GAAgB,GAAKE,GAAkB,KAC7DxkC,EAA0B,MAAfokC,GAAuC,KAAhBE,GAAyC,GAAlBE,IAG3D,GAAIxkC,EAAW,EAAG,CAChB,IAAIxM,EAAO,CAAE+mC,GAAIkI,GAAQnI,GAAIqI,IACzB5rC,EAAc,CAAEwjC,GAAIsI,GAAevI,GAAIyI,IACvCjZ,EAAqC,KAAtBoc,EAA2BxnC,GAAY8nC,UAAU,IAAI3zC,KAAKqzC,SAAsBn+C,EAC/F8hC,EAAyC,KAAxBsc,EAA6BznC,GAAY8nC,UAAU,IAAI3zC,KAAKszC,SAAwBp+C,EACrGoiC,EAA2B,KAAjBic,EAAsB1nC,GAAY8nC,UAAU,IAAI3zC,KAAKuzC,SAAiBr+C,EAChFgkC,EAA8C,CAAC,EAEnDA,EAAKX,IAAYyY,GACjB9X,EAAKV,IAAaY,IAEdyY,IAAmBE,MACjBF,GACF3Y,EAAKd,IAAgBa,GAAa1vB,WAElC2vB,EAAKb,IAAkBc,GAAe5vB,WAExC2vB,EAAKZ,IAAgBwB,GAAavwB,YAGpC,IAAIjT,EAAO,CACTy0C,KAAMpqC,EACNizC,YAAa1vC,EACb2vC,QAASra,GACTsa,MAAOhb,GACPib,YAAahb,GAAc,IAC3Bib,QAAS1c,EACT6Z,SAAUhkC,EACV8mC,eAAgBjd,EAChBkd,aAAcjd,EACdkd,OAAQX,EACRY,cAAeX,EACfY,KAAMnb,GAGY,QAAhBoV,GAAyC,iBAAhBA,EAsBjC,SAAqBh4C,GACnBA,EAAkB,YAAmB,OAAfu3C,SAAe,IAAfA,QAAe,EAAfA,GAAiB90C,GACvCzC,EAAKyB,QAAS,EAEdogC,GACGmc,uBAAuBj9C,EAAgBf,GACvC8L,MAAK,WACJ,GAAmB,OAAfyrC,SAAe,IAAfA,OAAiB90C,GACnB,OAAOiK,GAAQE,KAAK,kBAAD,OAAmB7L,EAAc,uBAA8B,OAAfw2C,SAAe,IAAfA,QAAe,EAAfA,GAAiB90C,GAAE,sBAE1F,IACC7C,OAAM,SAACC,GAAgB,IAAD,EACW,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,EAAE,wDAErBgJ,GAAavU,MAAMuL,EAAE,wBAEzB,GACJ,CAxCiE6yC,CAAYj+C,GAK7E,SAAqBA,GACnBA,EAAS,GAAIg4C,EAEbnW,GACGqc,uBAAuBn9C,EAAgBihB,EAAahiB,GACpD8L,MAAK,WACJY,GAAQE,KAAK,kBAAD,OAAmB7L,EAAc,uBAAeihB,EAAW,sBACzE,IACCpiB,OAAM,SAACC,GAAgB,IAAD,EACW,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,EAAE,wDAErBgJ,GAAavU,MAAMuL,EAAE,wBAEzB,GACJ,CAnBS+yC,CAAYn+C,EACnB,CACF,CAhTiCo+C,EAAgC,EAC/C5pC,UAiGlB,WACE,GAwQE8jC,GACAE,GACAE,GACAqC,IACA/B,IACAF,IACAI,IACAN,GA/Qc,OAAO,EAEvB,GAAIR,IAAwBkB,KAAWE,IAAU6E,MAAM7b,KAAUA,GAAQ,GAAK6b,MAAM5b,UAA2B7jC,IAAXyS,GAAsB,OAAO,EAEjI,GAAIkqC,IAAmBE,IACrB,IAAK3Y,GAAW,OAAO,MAClB,CACL,OAAQ18B,IACN,KAAKC,GAAUw0C,SACb,IAAKyD,KAAmB,OAAO,EAC/B,MACF,KAAKj4C,GAAU67B,UACb,IAAKY,GAAW,OAAO,EACvB,MACF,KAAKz8B,GAAU41C,SACb,IAAKjb,KAAYuZ,GAAO,OAAO,EAInC,GAAIoB,MAAmBjb,KAAmBC,IAAe,OAAO,EAEhE,GAAID,IAAkBC,GAAc,QAASD,GAAiBC,IAAgBkb,KAAgBnb,IAE9F,GAAIM,IAAWuZ,GAAO,QAASvZ,GAAUuZ,IAASsB,KAAgB7a,GACpE,CACA,OAAO,CACT,CA5H6Bud,GAAc,SAEkCnzC,EAA1C,iBAAhB4sC,GAAkD,QAAhBA,EAA0B,wBAA6B,iBAG5F,wBACEjsC,UAAU,sCACV7I,KAAK,SACLgJ,QAAS,kBAAMQ,GAAQE,KAAK,kBAAD,OAAmB7L,EAAc,uBAAeihB,EAAW,sBAAqB,EAAC,SAE3G5W,EAAE,mBAGY,QAAhB4sC,GAAyC,iBAAhBA,GACxB,sBAAKjsC,UAAU,YAAYiN,MAAO,CAAE0N,QAAS,OAAQ83B,cAAe,OAAQ,UAC1E,cAAC,GAAiB,CAChBnH,mBAAoBA,GACpBC,eAA8B,OAAdA,SAAc,IAAdA,MAAkB,GAClCC,gBAAiBA,KAEnB,wBACExrC,UAAS,2CACTiN,MAAO,CAAEylC,YAAa,OAAQC,WAAY,IAC1CxyC,QAAS,SAAC9E,GACRA,EAAEsyB,kBACFue,EAAe,gBACf,IAAI0G,EAAS,WACbpF,GAAUoF,EAASrF,IACnBG,GAAUkF,EAASnF,GACrB,EACAhlC,UAAU,EAAM,SAEfpJ,EAAE,4BAEL,yBACEW,UAAS,2BACTiN,MAAO,CAAE0lC,WAAY,IACrBxyC,QAAS,kBAAMisC,GAA4B,EAAK,EAChD3jC,UAAU,EAAM,UAEhB,cAAC,IAAe,CAACrI,KAAM,CAAC,MAAO,eAAgB,IAAEf,EAAE,sCAazE,SAASuxC,GAAiBl6C,GACxB,IAAIm8C,EAA4B53B,SAASC,eAAexkB,GAEpD6e,EAAMgnB,SAASsW,EAAO7f,QAAQ6f,EAAOC,eAAe52C,OAE7C,iBAAPxF,EACFy4C,GAAgB55B,GACA,kBAAP7e,EACT24C,GAAiB95B,GACD,oBAAP7e,GACT64C,GAAmBh6B,GAGT,IAARA,GAAcg9B,GAAgBh9B,GAC7B05B,IAAiB,GADkBA,IAAiB,EAE3D,CAEA,SAASuB,GAAkBltB,GACL,QAAhB2oB,IACE3oB,IAAUhpB,GAAU41C,UACtB7B,QAAWx7C,GACX47C,QAAS57C,GACTm6C,QAAuBn6C,GACvBu6C,QAAcv6C,IAEd07C,QAAgB17C,GAElBy7C,QAAkBz7C,IAGhBywB,IAAUhpB,GAAUw0C,UACtBK,GAAgB,GAChBE,GAAiB,GACjBE,GAAmB,IACVjsB,IAAUhpB,GAAU67B,UAC7B0Y,QAAah8C,GAEbw7C,QAAWx7C,GAGbg9C,IAAiB,GACjBd,GAAazrB,EACf,CA+BA,SAAS8sB,GAAal0C,EAAe0S,EAAoBwuB,GACvDxuB,EAAS1S,GACJA,GAA0B,IAAjBA,EAAMjG,OAGlBmnC,GAAS,GAFTA,GAAS,EAIb,CAEA,SAAS0T,GAAuB50C,GAC9BoyC,GAAkBpyC,GACd04B,IAAgB14B,EACd4zC,KAAgB5zC,EAClB8wC,GAAuB,kDAEvBA,GADS9wC,EAAQ04B,GACM,+DAEA/hC,GAGzBm6C,QAAuBn6C,EAE3B,CAEA,SAASk+C,GAAqB70C,GAC5BqyC,GAAgBryC,GACZy4B,IAAkBz4B,EAChB4zC,KAAgB5zC,EAClBgxC,GAAqB,gDAErBA,GADSvY,GAAiBz4B,EACL,+DAEArJ,GAGvBq6C,QAAqBr6C,EAEzB,CAmDA,SAAS89C,GAAcz0C,IAAuC,uDAAG8xC,IAC3D9xC,GAEF0wC,EADE1wC,EAAQ,EAKd,CAUA,SAAS20C,GAAcvtB,GACjBssB,KACF5C,QAAuBn6C,GACvBq6C,QAAqBr6C,GACD,QAAhBo5C,IACFqC,QAAkBz7C,GAClB07C,QAAgB17C,KAGpBg9C,GAAiBvsB,GACjBgrB,QAAkBz7C,GAClB07C,QAAgB17C,EAClB,CAkIA,SAAS0/C,KACP,OACU,KAFwB,uDAAG,IAGlCrD,IAAgBA,IAAgB,GAChCE,IAAiBA,IAAiB,GAClCE,IAAmBA,IAAmB,GACtCM,MAAmBjb,KAAmBC,GAE3C,CACF,CElrCO,SAASme,GAAmBn0C,GACjC,IAAQS,EAAMC,cAAND,EAEFvL,EAAQuL,EAAE,+BAEhB,OACE,mCACE,sBAAKW,UAAU,OAAM,UACnB,wBAAOA,UAAU,aAAY,UAC1BX,EAAE,wBACFT,EAAMyZ,UAAY,OAErB,uBACErY,UAAU,eACV7I,KAZK,MAaL+E,MAAO0C,EAAM1C,MACb4S,YAAazP,EAAE,qCACfgO,SAAU,SAAC2K,GAAE,OAQH9b,EARiB8b,EAAGvL,OAAOvQ,MAS3C0C,EAAMgQ,SAAS1S,QASjB,SAAiBA,GACf,IAAI2c,EAAiBjd,EAAc+1B,iBAAiB11B,KAAKC,GAEzD,SAAI0C,EAAMyZ,WAAYQ,MAEjBja,EAAMyZ,WAAaQ,GAA0B,IAAjB3c,EAAMjG,OAGzC,CAfM6iB,CAAQ5c,GACV0C,EAAMsZ,uBAAkBrlB,GAExB+L,EAAMsZ,kBAAkBpkB,IAN5B,IAAkBoI,CARiC,EAC3Cmc,SAAUzZ,EAAMyZ,WAEjBzZ,EAAM4Z,UAAY,uBAAOxY,UAAU,YAAW,SAAEpB,EAAM4Z,eAwB/D,CCvBe,SAASw6B,GAA6Bp0C,GACnD,IAAQS,EAAMC,cAAND,EACFsB,EAAUC,cACV+C,EAAmBD,GAAgB2B,cAEzC,EAA4CshB,cAApC1Q,EAAW,EAAXA,YAAaqf,EAAkB,EAAlBA,mBACbpgC,EAA4B0J,EAA5B1J,OAAQ0iC,EAAoBh5B,EAApBg5B,gBAChB,EAAgC6S,KAAxB1nC,EAAI,EAAJA,KAAM2nC,EAAa,EAAbA,cACd,EAAgD1rC,qBAAmC,mBAA5Eo2B,EAAgB,KAAE6G,EAAmB,KAC5C,EAA4Cj9B,mBAAiB,IAAG,mBAAzDi0C,EAAc,KAAEC,EAAiB,KAExC,EAA0Bl0C,mBAAiB,IAAG,mBAAvClH,EAAK,KAAE+2B,EAAQ,KACtB,EAA0B7vB,mBAAiB,IAAG,mBAAvC3J,EAAK,KAAE2kB,EAAQ,KACtB,EAAkChb,mBAAiB,IAAG,mBAA/C3H,EAAS,KAAEs3B,EAAY,KAC9B,EAAgC3vB,mBAAiB,IAAG,mBAA7C1H,EAAQ,KAAEs3B,EAAW,KAC5B,EAA8C5vB,mBAAiB,IAAG,mBAA3DkG,EAAe,KAAEiuC,EAAkB,KAC1C,EAAoCn0C,wBAA6BnM,GAAU,mBAApE+9B,EAAU,KAAEC,EAAa,KAChC,EAA4C7xB,wBAA6BnM,GAAU,mBAA5Eo8B,EAAc,KAAEC,EAAiB,KACxC,GAA0ClwB,wBAA6BnM,GAAU,qBAA1Es8B,GAAa,MAAEC,GAAgB,MACtC,GAAoCpwB,qBAAkB,qBAA/C+vB,GAAU,MAAEC,GAAa,MAEhC,GAAwBhwB,mBAAiB,IAAG,qBAArC02B,GAAI,MAAE0d,GAAO,MACpB,GAAkCp0C,wBAA6BnM,GAAU,qBAAlEwgD,GAAS,MAAEC,GAAY,MAE9B,GAAkCt0C,qBAAqB,qBAAhDZ,GAAS,MAAEy5B,GAAY,MAE9B,GAA8B74B,oBAAkB,GAAK,qBAA9C2Q,GAAO,MAAE6D,GAAU,MAEpBvC,GAAYrE,mBAAQ,WACxB,SAAQ89B,IAAkB/6B,GAC5B,GAAG,CAACA,GAAS+6B,IAqBb,GAhBA7qC,qBAAU,WAERi2B,GAAiBiC,aAAa9hB,GAAalW,MAAK,SAAC3B,GAC/C,GAAIA,EAAW,CACby5B,GAAaz5B,GACb80C,EAAkB90C,EAAUpJ,gBAE5B,IAAMogC,EAAmBh3B,EAAU+2B,kBAAkB5+B,MAAK,SAACk+B,GAAE,OAAKA,EAAG/9B,KAAO4+B,CAAkB,IAC1FF,IACF6G,EAAoB7G,GACpB5hB,IAAW,GAEf,CACF,GACF,GAAG,CAACyC,EAAaqf,EAAoBpgC,IAEjC+b,GACF,OAAO,cAACvB,GAAgB,CAACC,QAASsB,KAGpC,IAAKmkB,EACH,OACE,qBAAKp1B,UAAU,oCAAmC,SAChD,qBAAKA,UAAU,2BAA0B,SACvC,qBAAKA,UAAU,OAAM,UAAGo1B,GAAoB,8BAAM/1B,EAAE,0DAM5D,IAAMk3B,GAAQnB,EAAmBzrB,KAAOyrB,EAAiBH,SAAS3pB,IAAI8pB,EAAiBtqB,SAAU,WAAWS,SAAW,IAAI5N,KAE3H,OACE,qBAAKqC,UAAU,qCAAoC,SACjD,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,sBAAKA,UAAU,iBAAgB,WACZ,OAAhBo1B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB+B,UAAW,qBAAK32B,IAAqB,OAAhB40B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB+B,QAAS12B,IAAI,GAAGT,UAAU,aACpF,qBAAIA,UAAU,OAAM,UAAC,IAAkB,OAAhBo1B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB92B,KAAK1K,IAAI+P,SAEpD,wBACE3D,UAAU,sBACVG,QAAS,WACPQ,EAAQE,KAAK,kBAAD,OAAmBoyC,EAAc,uBAAeh9B,EAAW,sBACzE,OAIJ,sBAAKjW,UAAU,YAAW,UACxB,oBAAGA,UAAU,OAAM,WACZ,OAAJ+C,QAAI,IAAJA,OAAI,EAAJA,EAAMqE,OAAM,SAACvE,GAAG,MAAmB,WAAdA,EAAInL,SAAgC,OAAT0G,SAAS,IAATA,OAAWw3B,OAAOz/B,SAAS0M,EAAInM,IAAG,MACjF,qCACE,uBAAMsJ,UAAU,cAAa,UAC3B,cAAC,IAAe,CAACI,KAAM,CAAC,MAAO,wBAAyBJ,UAAU,SACjEX,EAAE,oDAEL,0BAGH+1B,EAAiBvzB,YAAYjO,IAAI+P,GAClC,uBACCyxB,EAAiBH,SAChB,cAACmC,GAAA,EAAK,CACJC,QAAQ,mCACR1pB,OAAQ,CACNxJ,MAAOqF,GAAY+I,eAAe,IAAI5U,KAAKy3B,EAAiBH,SAAUzrB,GAAY0G,cAClF9L,IAAKoF,GAAY+I,eAAegkB,GAAO/sB,GAAY0G,kBAIvDklB,EAAiBH,SACjB,cAACmC,GAAA,EAAK,CACJC,QAAQ,uCACR1pB,OAAQ,CAAE7C,SAAUtB,GAAYguB,eAAepC,EAAiBtqB,gBAKtE,qCACE,4BAAIzL,EAAE,mDAEN,qBAAKW,UAAU,MAAK,SAClB,qBAAKA,UAAU,kBAAiB,SAC9B,uBAAMqlB,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,UAC1C,sBAAKtlB,UAAU,OAAM,UACnB,cAAC+yC,GAAkB,CACjB72C,MAAO7G,EACPuZ,SAAUoL,EACVxB,SAAUoY,EACV1Y,kBAAmB2Y,IAGrB,cAACtC,GAAkB,CACjBryB,MAAO7E,EACPuX,SAAU+f,EACVnW,SAAUyW,EACV/W,kBAAmBgX,IAErB,cAACT,GAAiB,CAChBvyB,MAAO5E,EACPsX,SAAUggB,EACVpW,SAAU2W,GACVjX,kBAAmBkX,KAGnB,cAACzW,GAAkB,CACjBzc,MAAOpE,EACP8W,SAAUigB,EACV3W,kBAAmB8W,GACnBxW,SAAUuW,GACVlqB,MAAOxF,EAAE,kBAIb,sBAAKW,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,sDACjC,uBACEW,UAAU,eACV7I,KAAK,OACL+E,MAAOgJ,EACPmI,SAAU,SAAC2K,GAAE,OAAKm7B,EAAmBn7B,EAAGvL,OAAOvQ,MAAM,OAGxDk5B,EAAiBme,eAChB,cAAC17B,GAAc,CACbC,UAAWzY,EAAE,8BACblI,KAAK,YACL+E,MAAOw5B,GACP9mB,SAAUwkC,GACV56B,SAAU66B,GACVn7B,kBAAmBo7B,GACnBj7B,UAAU,EACVJ,OAAQ,kBAId,wBAAQ9X,QAAS,kBAwBjC,WACE,GAAIi1B,EAAkB,CAAC,IAAD,EACpB5hB,IAAW,GAEX,IAAIpP,OAAMvR,EACV,GAAyB,QAAzB,EAAIuiC,EAAiByB,YAAI,OAArB,EAAwBV,IAAY,CACtC,IAAI1sB,EAAOD,GAAYytB,mBAAmB7B,EAAiByB,KAAKV,IAAY3sB,GAAY0G,cACxF9L,EAAMoF,GAAY8nC,UAAU7nC,EAC9B,CAEAqsB,GACGtD,YAAYvc,EAAamf,EAAiB1+B,IAAI,EAAMoB,EAAOzC,EAAOgC,EAAWC,EAAU4N,EAAiBwwB,GAAM/xB,EAAUS,GAAK,GAC7HrE,MAAK,SAAC2E,GACDA,EACF/D,EAAQE,KAAK,WAAD,OAAY6D,IAExB2D,GAAavU,MAAMuL,EAAE,oCAEzB,IACCxL,OAAM,WACL+jC,GAAgB,GAChBvvB,GAAavU,MAAMuL,EAAE,oCACvB,IACCwX,SAAQ,WACPrD,IAAW,EACb,GACJ,CACF,CAnDuCggC,EAAa,EAAExzC,UAAU,kBAAkByI,YAc7EmoB,GACA7B,IACAI,IACAF,GACU,KAAV55B,GAA0B,KAAVyC,GAAoC,KAApBoN,GAChCmuC,IACS,KAAT3d,IAAgC,OAAhBN,QAAgB,IAAhBA,KAAkBme,eApBuE,SAC3Fl0C,EAAE,4CAmDvB,CCnOe,SAASo0C,GAAa70C,GACnC,IAAQ5J,EAA2B4J,EAA3B5J,eAAgBE,EAAW0J,EAAX1J,OACxB,EAA4ByxB,cAApBjiB,EAAO,EAAPA,QAASgvC,EAAM,EAANA,OAEjB,EAAgD10C,qBAA6B,mBAAtEsf,EAAgB,KAAEolB,EAAmB,KAC5C,EAA4D1kC,qBAA2B,mBAAhF20C,EAAsB,KAAEC,EAAyB,KACxD,EAAgD50C,qBAAkB,mBAA3D60C,EAAgB,KAAEC,EAAmB,KAC5C,EAAsC90C,qBAAmC,mBAAlE2H,EAAW,KAAEotC,EAAc,KAClC,EAA4B/0C,qBAAkB,mBAAvCsG,EAAM,KAAEopC,EAAS,KACxB,EAAgD1vC,qBAAyB,mBAAlEg1C,EAAgB,KAAEC,EAAmB,KAE5C,EAA8Bj1C,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAAoCxU,oBAAkB,GAAM,mBAArDk1C,EAAU,KAAEC,EAAa,KAEhC,EAAgDn1C,oBAAkB,GAAM,mBAAjEuiB,EAAgB,KAAEsI,EAAmB,KAEtClmB,EAAmBD,GAAgB2B,cAEnC1E,EAAUC,cAERvB,GAAMC,cAAND,EAoDR,OAlDAQ,qBAAU,WACH7K,GAILmR,GAAa0Z,aAAa7qB,EAAgB0P,GAAS3E,KAAI,iDAAC,WAAOwE,GAAmB,yFAErC,GADrCmC,EAAiB,OAALnC,QAAK,IAALA,OAAK,EAALA,EAAOkC,MAAMlQ,MAAK,SAACmQ,GAAS,OAAKA,EAAUhQ,KAAOg9C,CAAM,KACpE/sC,EAAuB,OAATD,QAAS,IAATA,OAAS,EAATA,EAAWC,cACL,OAALpC,QAAK,IAALA,KAAOzN,MAAK,iEAIf2M,GAAWumB,WAAWzlB,EAAMzN,OAAO,KAAD,EAKxB,OALtB+L,EAAG,OACHuxC,EAAqBn3B,GAAWo3B,gBAAgBxxC,EAAK8D,GACrDrB,EAA2B,OAAlB8uC,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoB9uC,OAEnCwuC,EAAoBntC,EAAYjP,OAChCq8C,EAAeptC,GAAa,UAEtBR,GACHmuC,+BAA+Bt/C,EAAgB6N,EAAInM,GAAI6N,EAAMU,KAAM0B,EAAYxC,MAAOwC,EAAYvC,KAClGrE,KAAI,iDAAC,WAAOw0C,GAAkB,yFAKW,OAJpCjvC,GAAUivC,EAAmBp+C,SAASmP,IACxCopC,EAAUppC,GAGZ2uC,EAAoBM,GAAoB,SAET91B,GAAuBwL,sBAAsB,KAAD,EAArD,OAAhB3L,EAAgB,gBACK5f,EAAoBgb,oBAAoB1kB,GAAgB,KAAD,EAA5EgJ,EAAY,OAEZw2C,EAAiD,OAAZx2C,QAAY,IAAZA,GAA4B,QAAhB,EAAZA,EAAchI,sBAAc,WAAhB,EAAZ,EAA8BkX,IAAG,iDAAC,WAAOrK,GAAG,2FACxEY,GAAWumB,WAAWnnB,EAAI/L,OAAOiJ,MAAK,SAAC8C,GAClD,OAAOoa,GAAWkN,sBAAsBtnB,EAC1C,IAAG,KAAD,8EACH,mDAJ2E,IAMtE4xC,EAAyC,OAAhBn2B,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBngB,QAAO,SAAC0R,GAAI,OACzB,OAAlC2kC,QAAkC,IAAlCA,OAAkC,EAAlCA,EAAoC79C,MAAK,SAAC0mB,GAAC,OAAKA,EAAEtd,MAAK,SAACsd,GAAC,OAAKA,EAAES,IAAIjO,EAAKnZ,GAAG,GAAC,GAAC,IAGhFgtC,EAAoB+Q,GACpBb,EAA0Bt1B,EAAiB/nB,MAAK,SAACgoB,GAAE,OAAKA,EAAG7nB,KAAO4O,CAAM,KAAG,4CAC5E,mDAtBI,IAuBJuR,SAAQ,kBAAMrD,GAAW,EAAM,IAAE,KAAD,uCACpC,mDAxCsD,GAyCzD,GAAG,CAACxe,IAEJ6K,qBAAU,kBAAMgqB,EAAoB5yB,EAAcuI,0BAA0BtK,EAAQF,GAAgB,GAAE,CAACE,IAGrG,qBAAK8K,UAAU,sBAAqB,SAClC,sBAAKA,UAAU,MAAK,UAClB,qBAAKA,UAAU,kBAAiB,SAC9B,oBAAIA,UAAU,aAAY,SACxB,qBAAIA,UAAU,yBAAwB,UACpC,cAAC,IAAI,CAACK,GAAE,UAAY,SAAEhB,GAAE,0BAA+B,MAEvD,cAAC,IAAI,CAACgB,GAAE,kBAAaqE,GAAU,SAAEA,IAAe,MAE/CrF,GAAE,8BAKT,cAACqQ,GAAgB,CAACC,QAASA,GAAWukC,KAEpCvkC,GAAW4R,GACX,mCACE,sBAAKvhB,UAAU,gCAA+B,UAC5C,qBAAKA,UAAU,SAAQ,SACrB,6BACE,gCACGX,GAAE,uBAAuB,KAAGqF,EAAS,IACtC,wBACE1E,UAAU,8BACVG,QAAS,kBAAMQ,EAAQE,KAAK,WAAD,OAAY6D,GAAU,EACjD+D,SAAUkH,GAAWukC,WAM7B,sBAAKl0C,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,6BAAKX,GAAE,wCAGT,qBAAKW,UAAU,YAAW,SACxB,qBAAKA,UAAU,SAAQ,SACrB,wBAAOA,UAAU,6CAA4C,UAC3D,gCACE,+BACE,6BAAKX,GAAE,oCACP,6BAAKA,GAAE,uCAGX,gCACE,+BACE,+BACc,OAAXsH,QAAW,IAAXA,OAAW,EAAXA,EAAavD,QACF,OAAXuD,QAAW,IAAXA,OAAW,EAAXA,EAAatD,qBAEhB,+BACyB,OAAtBswC,QAAsB,IAAtBA,OAAsB,EAAtBA,EAAwBr1C,KAAK1K,IAAI+P,GAAU,IAAwB,OAAtBgwC,QAAsB,IAAtBA,OAAsB,EAAtBA,EAAwB9xC,YAAYjO,IAAI+P,qBASpG,sBAAK3D,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,6BAAKX,GAAE,gCAGT,qBAAKW,UAAU,YAAW,SACxB,sBAAKA,UAAU,SAAQ,UACpBg0C,IAAoC,OAAhBA,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB/9C,QAAS,EAC9C,mCACmB,OAAhBqoB,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBpR,KAAI,SAACsR,GACtB,OACE,sBAAKxe,UAAU,YAAW,UACxB,uBACE7I,KAAK,QACLT,GAAI8nB,EAAgB9nB,GACpB4H,KAAMkgB,EAAgBlgB,KAAK1K,IAAI+P,GAC/BzH,MAAOsiB,EAAgB9nB,GACvBijB,QAAS6E,EAAgB9nB,KAAO4O,EAChC+H,SAAU,kBAAMqhC,EAAUlwB,EAAgB9nB,GAAG,EAC7C+R,WACmB,OAAhBurC,QAAgB,IAAhBA,KAAkB79C,SAASqoB,EAAgB9nB,MAAOm9C,IAAqBvtC,GAAiBmB,YAG7F,wBAAOiqB,QAASlT,EAAgB9nB,GAAIsJ,UAAU,YAAW,UACtDwe,EAAgBlgB,KAAK1K,IAAI+P,GAAU,IAAE6a,EAAgB3c,YAAYjO,IAAI+P,MAExE,yBAGN,MAGF,qCACE,+BAAOtE,GAAE,wCACT,0BAIJ,uBACA,wBACElI,KAAK,SACL6I,UAAU,kBACVG,QAAO,gCAAE,wGAAkBu0C,KAAgB,mFAC3CjsC,UAeVnD,GAAU4uC,GAAcL,IAAqBvtC,GAAiBmB,aAA8B,OAAhBusC,QAAgB,IAAhBA,KAAkB79C,SAASmP,IAfpE,SAExBjG,GAAE,iDActB,SAEcq1C,KAAc,8CAmB5B,OAnB4B,mCAA7B,6FACM1/C,GAAkBsQ,GAAUuuC,IAAqBvtC,GAAiBmB,WAAad,GAAW,iBACxE,OAApBwtC,GAAc,GAAM,kBAGZhuC,GAAawuC,oBAAoB3/C,EAAgB0P,EAASgvC,EAAQpuC,EAAQqB,EAAYxC,MAAOwC,EAAYvC,KAAK,KAAD,KAE/GyvC,IAAqBvtC,GAAiBiB,IAAG,gCACrCpB,GAAaumB,+BAA+B13B,EAAgB0P,GAAS7Q,OAAM,WAC/EwU,GAAavU,MAAMuL,GAAE,kDACvB,IAAG,KAAD,oDAGJgJ,GAAavU,MAAMuL,GAAE,yBAAyB,QAGzB,OAHyB,UAE9CsB,EAAQE,KAAK,WAAD,OAAY6D,IACxByvC,GAAc,GAAO,8EAG1B,sBACH,EJ9Nc,SAAT75C,KAAS,oBAATA,EAAS,oBAATA,EAAS,uBAATA,QAAS,KKF6C,IAErDs6C,GAAgB,mDACpBC,UAAoB,EAAE,KACtBC,cAAwB,EAAE,KAC1BC,aAAuB,EAAE,KACzBC,KAAe,EAAE,KACjB3wC,OAAuB,EAAG,IAab,SAAS4wC,GAA0Br2C,GAAe,IAAD,EACxD+E,EAAmBD,GAAgB2B,cACnC1E,EAAUC,cACRvB,EAAMC,cAAND,EAER,EAAiDsnB,cAAzC3xB,EAAc,EAAdA,eAAgBihB,EAAW,EAAXA,YAAa4f,EAAO,EAAPA,QAC7B3gC,EAAW0J,EAAX1J,OAER,EAA8B8J,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAE1B,EC5Ca,SAAsByC,GACnC,IAAQ5W,EAAMC,cAAND,EAER,EAAkCL,qBAAqB,mBAAhDZ,EAAS,KAAEy5B,EAAY,KAC9B,EAA8B74B,qBAAmB,mBAA1C2Q,EAAO,KAAE6D,EAAU,KAoB1B,OAlBA3T,qBAAU,WAENi2B,GACGiC,aAAa9hB,EAAa,OAC1BlW,MAAK,SAAC3B,GACDA,GACFy5B,EAAaz5B,EAEjB,IACCvK,OAAM,SAACC,GACNuU,GAAavU,MAAMuL,EAAE,wBACvB,IACCwX,SAAQ,kBAAMrD,GAAW,EAAM,GAItC,GAAG,CAACyC,EAAa5W,IAEV,CAAEjB,YAAW82C,mBAAoBvlC,EAC1C,CDmB4CwlC,CAAal/B,GAA/C7X,EAAS,EAATA,UAAW82C,EAAkB,EAAlBA,mBACnB,EAAgCzK,KAAxB1nC,EAAI,EAAJA,KAAM2nC,EAAa,EAAbA,cACd,EAAsC1rC,mBAA2B,IAAI41C,IAAmB,mBAAjFQ,EAAW,KAAEC,EAAc,KAClC,EAAsDr2C,wBAA6CnM,GAAU,mBAAtG03C,EAAmB,KAAEC,EAAsB,KAClD,EAAoCxrC,qBAA2B,mBAAxDs2C,EAAU,KAAEC,EAAa,KAChC,EAAoCv2C,mBAAiB,GAAE,mBAAhDw2C,EAAU,KAAEC,EAAa,KAChC,EAAwCz2C,mBAAiB,GAAE,mBAApD02C,EAAY,KAAEC,EAAe,KAE9BnpC,EAAsCI,mBAAQ,WAClD,GAAIxO,EACF,OAAOA,EAAU+2B,kBAAkB5+B,MAAK,SAACk+B,GAAE,OAAKA,EAAG/9B,KAAOm/B,CAAO,GAGrE,GAAG,CAACz3B,EAAWy3B,IAEfh2B,qBAAU,WACR41C,EAAcL,EAAYL,aAAeK,EAAYJ,MACrDW,EAAgBP,EAAYJ,KAAOI,EAAY/wC,OAAOpO,OACxD,GAAG,CAACm/C,IAEJv1C,qBAAU,WACR,IAAI7B,EAAe2sC,GAAiBQ,0BAA0Bj2C,EAAQF,GAElEgJ,GACFwsC,EAAuBxsC,GAGpB0sC,GAAkBwK,GACrBpf,GACG8f,eAAe3/B,EAAa4f,GAC5B91B,MAAK,SAACsE,GACL,GAAIA,GAAUA,EAAOpO,QAAU8M,GAAQA,EAAK9M,QAAUmI,EAAW,CAC/D,IAAIy3C,EAAgB9yC,EAAK5E,QAAO,SAAC6T,GAAC,OAAK5T,EAAUw3B,OAAOz/B,SAAS6b,EAAEtb,GAAG,IACtE2+C,EAiJZ,SAAiChxC,EAAsBtB,GACrD,IAAI+yC,EAAK,IAAIlB,GACbkB,EAAGjB,UAAY9xC,EAAKujC,QAAO,SAACI,EAAO10B,GAAC,OAAK00B,EAAQzpB,GAAWugB,oBAAoBxrB,EAAE,GAAE,GACpF8jC,EAAGzxC,OAASA,EAEZ,IAAK,IAAItO,EAAI,EAAGA,EAAIsO,EAAOpO,OAAQF,IAAK,CACtC,IAAMwO,EAAQF,EAAOtO,GACrB,GAAIwO,EAAM0C,UAAY1C,EAAM0C,SAAShR,OAAQ,CAC3C,IAAMuQ,EAAUjC,EAAMkC,MAAMtI,QAAO,SAACjC,EAAOuW,EAAOsjC,GAAK,OAAKA,EAAMC,QAAQ95C,KAAWuW,CAAK,IAAExc,OAC5F6/C,EAAGhB,eAAiBtuC,EAEpBjC,EAAM0C,SAAS5I,SAAQ,SAAC8hB,GACtB21B,EAAGd,MAAQ70B,EAAQ60B,KACnBc,EAAGf,cAAgB50B,EAAQ3jB,OAAS2jB,EAAQU,YAC9C,GACF,CACF,CAEA,OAAOi1B,CACT,CApK2BG,CAAwB5xC,EAAQwxC,GACjD,CACF,IACChiD,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,uCACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,GAEN,GAAG,CAACyC,EAAa4f,EAASz3B,EAAW2E,EAAM1D,EAAGnK,EAAQF,EAAgB01C,EAAewK,IAErF,IAAMjhD,EAAmB2Y,mBAAQ,kBA0JnC,SACEwoC,EACAryC,EACAyJ,EACAkpC,GAEA,OAAON,EAAY/wC,OAAO6I,KAAI,SAAC3I,GAAW,IAAD,MACjCoC,EAAcpC,EAAMkC,MAAM,GAAGE,YAE/BuvC,EAAoB,EACpBC,EAAuB,EAM3B,OALK,OAAL5xC,QAAK,IAALA,GAAe,QAAV,EAALA,EAAO0C,gBAAQ,OAAf,EAAiB5I,SAAQ,SAAC8hB,GACxB+1B,GAAa/1B,EAAQ60B,KACrBmB,GAAgBh2B,EAAQ3jB,OAAS2jB,EAAQU,YAC3C,IAEO,CACLu1B,WAAY7xC,EAAM8Q,UAAUnO,WAC5BmvC,aAAmB,OAAL7pC,QAAK,IAALA,OAAK,EAALA,EAAOiqB,MAAMvvB,WAC3BovC,OAAQ3vC,EAAYvD,QAAQ8D,WAAaP,EAAYtD,kBAAkB6D,WACvErE,IAAS,OAAJE,QAAI,IAAJA,GAAuC,QAAnC,EAAJA,EAAMxM,MAAK,SAACsxC,GAAC,OAAKA,EAAEnxC,KAAO6N,EAAMzN,KAAK,WAAC,WAAnC,EAAJ,EAAyCwH,KAAK4I,WACnDuvB,MAAO0f,EAAajvC,WACpBqvC,cAAoB,OAAL/pC,QAAK,IAALA,OAAK,EAALA,EAAOkqB,YAAYxvB,WAClCsvC,KAA0B,QAAtB,EAAEN,EAAUhvC,kBAAU,QAAIwuC,EAAaxuC,WAE/C,GACF,CApLyCuvC,CAAwBrB,EAAaryC,EAAMyJ,EAAOkpC,EAAa,GAAE,CAACN,EAAaM,IAUtH,OARA71C,qBAAU,WACR,IACMy1C,IADmB,OAAL9oC,QAAK,IAALA,MAAOyoB,SAEvB51B,EAAE,0BAA2B,CAAEonC,KAAM2O,EAAYN,cAAepO,MAAO0O,EAAYP,YACnFO,EAAYN,cAChBS,EAAcD,EAChB,GAAG,CAACF,IAEAzlC,EAEA,qBAAK3P,UAAU,6BAA4B,SACzC,cAAC0P,GAAgB,CAACC,QAASA,MAM/B,qBAAK3P,UAAU,6BAA4B,SACzC,sBAAKA,UAAU,cAAa,UAC1B,qBAAKA,UAAU,kBAAiB,SAC9B,oBAAIA,UAAU,aAAY,SACxB,qBAAIA,UAAU,yBAAwB,UACpC,cAAC,IAAI,CAACK,GAAE,iBAAmB,SAAEhB,EAAE,0BAA+B,MAE9D,cAAC,IAAI,CAACgB,GAAE,yBAAoBrL,GAAiB,SAAqB,OAAnBu1C,QAAmB,IAAnBA,GAA2B,QAAR,EAAnBA,EAAqB9zC,cAAM,WAAR,EAAnB,EAA6B6H,OAAY,MAExF,cAAC,IAAI,CAAC+B,GAAE,yBAAoBrL,EAAc,eAAc,SAAEqK,EAAE,0BAA+B,MAE3F,cAAC,IAAI,CAACgB,GAAE,yBAAoBrL,EAAc,uBAAeihB,EAAW,sBAAqB,SAC7E,OAAT7X,QAAS,IAATA,OAAS,EAATA,EAAWE,KAAK1K,IAAI+P,KAChB,aACK,OAAL6I,QAAK,IAALA,OAAK,EAALA,EAAOlO,KAAK1K,IAAI+P,WAK7B,sBAAK3D,UAAU,yCAAwC,UACrD,oBAAIA,UAAU,eAAc,SAAEX,EAAE,kCAAmC,CAAEmN,MAAY,OAALA,QAAK,IAALA,OAAK,EAALA,EAAOlO,KAAK1K,IAAI+P,KAAarD,gBAEzG,sBAAKN,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,qBAAIA,UAAU,OAAM,UACjBX,EAAE,mCACH,sBAAMW,UAAU,OAAM,SACpB,cAACkJ,GAAY,CAACjV,KAAMA,EAAMoV,SAAQ,gBAAgB,OAALmD,QAAK,IAALA,OAAK,EAALA,EAAOlO,KAAK1K,IAAI+P,GAAS,sBAK9E,sBAAK3D,UAAU,YAAW,UACxB,qBAAKA,UAAU,WAAU,SACvB,sBAAKA,UAAU,qBAAoB,UAChCX,EAAE,0CAA0C,IAAEi2C,OAInD,sBAAKt1C,UAAU,MAAK,UAClB,qBAAKA,UAAU,QAAO,SAAEX,EAAE,2CAC1B,qBAAKW,UAAU,iBAAgB,SAC5BX,EAAE,sBAAuB,CACxBo3B,MAAO76B,EAAcglB,YAAYw0B,EAAYL,cAC7Cj0B,SAAmB,OAAT1iB,QAAS,IAATA,OAAS,EAATA,EAAW0iB,gBAI3B,sBAAK9gB,UAAU,MAAK,UAClB,qBAAKA,UAAU,QAAO,SAAEX,EAAE,kCAC1B,sBAAKW,UAAU,+BAA8B,UAAC,IAE3CX,EAAE,sBAAuB,CACxBo3B,MAAO76B,EAAcglB,YAAYw0B,EAAYJ,MAC7Cl0B,SAAmB,OAAT1iB,QAAS,IAATA,OAAS,EAATA,EAAW0iB,iBAI3B,sBAAK9gB,UAAU,MAAK,UAClB,sBAAKA,UAAU,QAAO,UAAEX,EAAE,uCAAuC,OACjE,qBAAKW,UAAU,iBAAgB,SAC5BX,EAAE,sBAAuB,CAAEo3B,MAAO76B,EAAcglB,YAAY40B,GAAa10B,SAAmB,OAAT1iB,QAAS,IAATA,OAAS,EAATA,EAAW0iB,sBAMvG,sBAAK9gB,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,oBAAIA,UAAU,OAAM,SAAC,qBAIzB,qBAAKA,UAAU,YAAW,SACxB,wBAAOA,UAAU,0CAAyC,UACxD,gCACE,+BACE,6BAAKX,EAAE,qBACP,6BAAKA,EAAE,mBACP,6BAAKA,EAAE,iBACP,4BAGJ,gCACc,OAAX+1C,QAAW,IAAXA,OAAW,EAAXA,EAAa/wC,OAAO6I,KAAI,SAAC3I,GAAkB,IAAD,EACrC2uB,EAAe,OAAJnwB,QAAI,IAAJA,GAA2C,QAAvC,EAAJA,EAAMxM,MAAK,SAACsM,GAAG,OAAKA,EAAInM,KAAO6N,EAAMzN,KAAK,WAAC,WAAvC,EAAJ,EAA6CwH,KACxD+E,EAAoBkB,EAAMkC,MAAM,GAAGE,YAAYtD,kBAC/C6Z,EAAQ3Y,EAAMkC,MAAM,GAAGE,YAAYvD,QACnCqG,EAAOD,GAAY+I,eAAe,IAAI5U,KAAK4G,EAAM8Q,WAAY7L,GAAY0G,cAG7E,OACE,qBAAI/P,QAAS,kBAHmBQ,EAAQE,KAAK,WAAD,OAAY0D,EAAM7N,IAGtB,EAAC,UACvC,6BAAKw8B,IACL,6BAAK,QAAQj3B,KAAKoH,GAAqBA,EAAoB6Z,EAAQ7Z,IACnE,6BAAKoG,IACL,6BACE,cAAC,IAAe,CAACrJ,KAAM,CAAC,MAAO,qBAIvC,qBASlB,C,OEvMO,SAASs2C,GAAkB93C,GACbA,EAAX1J,OAAR,IACQ4B,EAAU6vB,cAAV7vB,MACAuI,EAAMC,cAAND,EAEAwD,EAAQ46B,GAAS,CACvB3mC,MAAOA,EACPkmC,2BAA4B39B,EAAE,4BAFxBwD,IAKR,EAAoC7D,mBAA6B,IAAG,mBAA7D2D,EAAU,KAAEg0C,EAAa,KAChC,EAAuD33C,mBAAiB,GAAE,mBAAnEwE,EAAoB,KAAEozC,EAAsB,KACnD,EAA8B53C,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAAsCxU,mBAAiB,GAAE,mBAAlD63C,EAAW,KAAEC,EAAc,KAE5Bn2C,EAAUC,cAEV8T,EAAc,CAClB,CACEC,OAAQtV,EAAE,sCACVuV,SAAU,aAEZ,CACED,OAAQtV,EAAE,2CACVuV,SAAU,eAEZ,CACED,OAAQtV,EAAE,wCACVuV,SAAU,cAId,EAgBIC,mBACF,CACEC,QAASlI,mBAAQ,kBAAM8H,CAAW,GAAE,CAAChR,GAAgBC,WACrD1P,KAAM2Y,mBAAQ,kBAgIpB,SAAmCjK,EAA2BzN,GAC5D,IAAM6f,EAAwB,GAC1BpS,GACFA,EAAWtE,SAAQ,SAAC04C,GACG,IAAD,IAAhBA,EAAYrgD,IACdqe,EAAUlU,KAAK,CACbnK,GAAIqgD,EAAYrgD,GAChB6pB,UAAgG,QAAvF,EAAE/W,GAAY+I,eAAe,IAAI5U,KAAKo5C,EAAYx2B,WAAY/W,GAAY0G,qBAAa,QAAI,GACpGrO,YAAa0E,GAAaka,uBAAuBs2B,EAAarzC,GAAgBC,UAC9EqzC,WAA+B,QAApB,EAAAD,EAAYv2B,gBAAQ,aAApB,EAAsBtZ,aAAc,IAGrD,IAEF,OAAO6N,CACT,CA/I0BkiC,CAA0Bt0C,EAAmB,GAAE,CAACA,EAAYe,GAAgBC,WAChGyS,aAAc,CAAErO,UAAW8uC,IAE7BxgC,kBACAC,iBAtBAC,EAAa,EAAbA,cACAC,EAAiB,EAAjBA,kBACApF,EAAY,EAAZA,aACAqF,EAAI,EAAJA,KACAnF,EAAU,EAAVA,WACAD,EAAI,EAAJA,KACArJ,EAAe,EAAfA,gBACAC,EAAW,EAAXA,YACAyO,EAAW,EAAXA,YACAvO,EAAQ,EAARA,SACAD,EAAY,EAAZA,aACAxQ,EAAK,EAALA,MACA+W,EAAqB,EAArBA,sBACAE,EAAe,EAAfA,gBACS5G,EAAS,EAAlBrQ,MAASqQ,UAmBX,OARAlI,qBAAU,WACRwX,EAAQtP,EACV,GAAG,CAACA,EAAY,GAAK2O,EAAYzgB,QAAUygB,EAAYzgB,OAAS,IAAM,IAEtE4J,qBAAU,WACR8O,EAAgBjX,EAAMgX,aACxB,GAAG,CAAC/L,EAAYe,GAAgBC,WAG9B,sBAAK3D,UAAU,qCAAoC,UACjD,qBAAKA,UAAU,kBAAiB,SAC9B,qBAAIA,UAAU,aAAY,UACxB,oBAAIA,UAAU,yBAAwB,SACpC,cAAC,IAAI,CAACA,UAAU,GAAGK,GAAE,QAAU,SAC5BhB,EAAE,wBAGP,oBAAIW,UAAU,yBAAwB,SACpC,cAAC,IAAI,CAACA,UAAU,GAAGK,GAAE,gBAAWvJ,GAAQ,SACrC+L,EAAMA,EAAIvE,KAAOxH,MAGtB,oBAAIkJ,UAAU,yBAAwB,SAAEX,EAAE,wCAI9C,6BAAKA,EAAE,8BAEP,sBAAKW,UAAU,UAAS,UACtB,cAAC4I,GAAmB,CAACzI,QAAS,kBAAMkX,EAAQ,EAAE,IAE9C,cAAC7I,GAAY,CAACC,sBAAuBA,EAAuBC,aAAchX,EAAMgX,aAAcC,gBAAiBA,OAGjH,gCACE,qBAAK3O,UAAU,WAAU,SACvB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,OAAM,SACnB,qBAAKA,UAAU,YAAW,SACxB,kDAAWuW,KAAe,IAAEvW,UAAU,0CAAyC,UAC7E,gCACGoR,EAAalE,KAAI,SAACqE,GAAW,OAC5B,8CAAQA,EAAYC,uBAAqB,aACtCD,EAAY/c,QAAQ0Y,KAAI,SAACuE,GACxB,OAAO,8CAAQA,EAAOC,kBAAgB,aAAGD,EAAOE,OAAO,YACzD,MACG,MAGT,kDAAW6E,KAAmB,cAC3B7G,GACC,6BACE,oBAAIkC,QAAS,EAAG7R,UAAU,cAAa,SACrC,cAAC0P,GAAgB,CAACC,QAASA,SAK/BA,GACA0B,EAAKnE,KAAI,SAAC4E,EAAK/b,GACbub,EAAWQ,GAEX,IAAIilC,EAAcjlC,EAAII,SAClB3e,EAAG,gBAAYuD,GAEnB,OACE,+CAAQgb,EAAIO,eAAa,IAAElS,QAAS,kBAAMQ,EAAQE,KAAKtN,EAAI,EAAC,UAC1D,8CAAQue,EAAIC,MAAM,GAAGO,gBAAc,aAAGykC,EAAYx2B,aAClD,8CAAQzO,EAAIC,MAAM,GAAGO,gBAAc,aAAGykC,EAAYl1C,eAClD,8CAAQiQ,EAAIC,MAAM,GAAGO,gBAAc,aAAGykC,EAAYC,gBAGxD,oBAQd,cAACpvC,GAAe,CACdC,kBAAmB,8BACnBhM,MAAO4a,EAAKxgB,OACZ6R,WAAY4O,EAAYzgB,OACxB8R,UAAWA,EACXC,gBAAiBA,EACjBC,YAAaA,EACbC,aAAcA,EACdC,SAAUA,UAKlB,SAASkP,EAAQtP,GACf,IAAImvC,EAAa1zC,IACjBuE,GAEiB2O,EAAYzgB,QAC3B6gD,EAA4B,GAAbI,EAAkB,GACjCN,EAAuBpzC,EAAuB,GAC9C0zC,KACsB,GAAbnvC,IACTmvC,EAAa,EACbJ,EAAe,GACfF,EAAuB,IAGzBnzC,GACG0zC,iBAAiBrgD,EAAoB,IAAbogD,GACxBn3C,MAAK,SAAC4C,GACLg0C,EAAch0C,EAChB,IACC9O,OAAM,SAACwH,GACNgN,GAAavU,MAAMuL,EAAE,0CACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,GACJ,CACF,CC3Le,SAAS4jC,KACtB,IAAQ/3C,EAAMC,cAAND,EACFsB,EAAUC,cAChB,EAA4C+lB,cAApC1Q,EAAW,EAAXA,YAAaqf,EAAkB,EAAlBA,mBACrB,EAA8Bt2B,oBAAkB,GAAK,mBAA9Cq4C,EAAO,KAAEC,EAAU,KAC1B,EAA0Bt4C,mBAAiB,IAAG,mBAAvClH,EAAK,KAAE+2B,EAAQ,KACtB,EAAoC7vB,mBAAiB,IAAG,mBAAjD+vB,EAAU,KAAEC,EAAa,KAChC,EAA0BhwB,mBAAiB,IAAG,mBAAvC3J,EAAK,KAAE2kB,EAAQ,KACtB,EAAoChb,mBAAiB,IAAG,mBAAjD4xB,EAAU,KAAEC,EAAa,KAEhC,EAAwB7xB,mBAAiB,IAAG,mBAArC02B,EAAI,KAAE0d,EAAO,KACpB,EAAkCp0C,wBAA6BnM,GAAU,mBAAlEwgD,EAAS,KAAEC,EAAY,KAE9B,EAA8Bt0C,mBAAiB,IAAG,mBAA3C0F,EAAO,KAAE6yC,EAAU,KAC1B,EAAgCv4C,oBAAkB,GAAM,mBAAjDw4C,EAAQ,KAAEC,EAAW,KAC5B,EAA8Bz4C,oBAAkB,GAAM,mBAA/C2Q,EAAO,KAAE6D,EAAU,KAEpBkkC,EAA4B,GAClC,GAA8B14C,mBAAS04C,GAA0B,qBAA1Dtf,GAAO,MAAEC,GAAU,MAE1B,GAAgDr5B,mBAAc,CAAC,GAAE,qBAA1Do2B,GAAgB,MAAE6G,GAAmB,MA0B5C,GAvBAp8B,qBAAU,WACR2T,GAAW,GAEXsiB,GACG6hB,wBAAwB1hC,EAAaqf,GACrCv1B,MAAK,SAAC7D,GACL+/B,GAAoB//B,EACtB,IACCrI,OAAM,SAACC,GACNuU,GAAavU,MAAMA,EACrB,IACC+iB,SAAQ,WACPrD,GAAW,EACb,GACJ,GAAG,CAAC8hB,EAAoBrf,IAExBpW,qBAAU,WACR,GAAIu4B,GAAU,EAAG,CACf,IAAME,EAAQ/N,aAAY,kBAAM8N,IAAW,SAACkO,GAAI,OAAKA,EAAO,CAAC,GAAC,GAAE,KAChE,OAAO,kBAAM/b,cAAc8N,EAAO,CACpC,CACF,GAAG,CAACF,KAEAzoB,EACF,OAAO,cAACD,GAAgB,CAACC,QAASA,IAGpC,IAAMknB,GAAuB,OAAhBzB,SAAgB,IAAhBA,QAAgB,EAAhBA,GAAkByB,KACzB8X,GAAe,OAAJ9X,SAAI,IAAJA,OAAOX,IAAYd,GAAiByB,KAAKX,IAAY,OAEtE,OACE,qBAAKl2B,UAAU,6BAA4B,SACzC,qBAAKA,UAAU,8BAA6B,SAC1C,sBAAKA,UAAU,OAAM,UACnB,sBAAKA,UAAU,iCAAgC,UAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,uCAET,wBAAQW,UAAU,sBAAsBG,QAAS,kBAAMQ,EAAQE,KAAK,UAAD,OAAWoV,GAAc,OAE9F,sBAAKjW,UAAU,YAAW,UACvBw3C,GACC,sBAAKx3C,UAAU,OAAM,UAClBq3C,GAAW,8BAAMh4C,EAAE,wDAClBg4C,GAAW,8BAAMh4C,EAAE,uDACrB,8BAAMA,EAAE,+CACR,uBAECg4C,GACC,gCACGh4C,EAAE,+CAA+C,KAAE,4BAAIhK,QAG1DgiD,GACA,gCACGh4C,EAAE,+CAA+C,KAAE,4BAAIvH,OAG5D,yBAAQkI,UAAU,kBAAkBG,QAAS,kBA6HzDqT,GAAW,QACXsiB,GACG8hB,mBAAmB3hC,EAAaqf,EAAoB5wB,EAAS5M,EAAOzC,OAAOxC,GAC3EkN,MAAK,SAACtK,GACAA,GACH4S,GAAavU,MAAMuL,EAAE,2CAEzB,IACCxL,OAAM,SAACC,GAAW,IAAD,EACgB,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,EAAE,sCAEjB+1B,GAAiBme,eACnBlrC,GAAavU,MAAMuL,EAAE,gDAEvBgJ,GAAavU,MAAMuL,EAAE,yBAEzB,IACCwX,SAAQ,WACPwhB,GAAuC,IAA5Bqf,GACXlkC,GAAW,EACb,GAlJiF,EAAE/K,SAAU2vB,GAAU,EAAE,UAC5F/4B,EAAE,iDAAiD,IAAE+4B,GAAU,GAAK,IAAMA,GAAU,WAIzFof,GACA,qCAEI,qCACE,qBAAKx3C,UAAU,OAAM,SAAEX,EAAE,sCACzB,sBAAKW,UAAU,OAAM,UACnB,uBAAO7I,KAAK,QAAQT,GAAG,UAAU4H,KAAK,QAAQpC,MAAM,QAAQyd,QAAS09B,EAASl3C,QAAS,kBAAMm3C,GAAW,EAAK,IAC7G,uBAAO5lB,QAAQ,UAAU1xB,UAAU,OAAOG,QAAS,kBAAMm3C,GAAW,EAAK,EAAC,SACvEj4C,EAAE,8CAIP,sBAAKW,UAAU,OAAM,UACnB,uBAAO7I,KAAK,QAAQT,GAAG,UAAU4H,KAAK,QAAQpC,MAAM,QAAQyd,SAAU09B,EAASl3C,QAAS,kBAAMm3C,GAAW,EAAM,IAC/G,uBAAO5lB,QAAQ,UAAU1xB,UAAU,OAAOG,QAAS,kBAAMm3C,GAAW,EAAM,EAAC,SACxEj4C,EAAE,kDAKV,EACD,kCACG,EAaEg4C,EACC,qBAAKr3C,UAAU,OAAM,SACnB,cAAC6X,GAAc,CACb3b,MAAO7G,EACPuZ,SAAUoL,EACV/B,OAAQrc,EAAc+1B,iBACtBnZ,SAAUoY,EACV1Y,kBAAmB2Y,EACnB15B,KAAM,QACN2gB,UAAWzY,EAAE,gBAAkB,IAC/BgZ,UAAU,MAId,cAACM,GAAkB,CACjBzc,MAAOpE,EACP8W,SAAUigB,EACV3W,kBAAmB8W,EACnBxW,SAAUuW,EACVlqB,MAAOxF,EAAE,gBAAkB,MAInB,YAAbsvC,IACC,cAAC92B,GAAc,CACbC,UAAWzY,EAAE,sCACblI,KAAK,eACL+E,MAAOw5B,EACP9mB,SAAUwkC,EACV56B,SAAU66B,EACVn7B,kBAAmBo7B,EACnBj7B,UAAU,EACVJ,OAAQ,eAGE,WAAb02B,IACC,cAAC92B,GAAc,CACbC,UAAWzY,EAAE,8BACblI,KAAK,YACL+E,MAAOw5B,EACP9mB,SAAUwkC,EACV56B,SAAU66B,EACVn7B,kBAAmBo7B,EACnBj7B,UAAU,EACVJ,OAAQ,eAGZ,qBAAKjY,UAAU,YAAW,SACxB,wBAAQ7I,KAAK,SAAS6I,UAAU,kBAAkBG,QAAS,kBAiB5E,WACsB,gCAlB4DiY,EAAU,EAAE3P,SAczF4uC,OACoBxkD,IAAf+9B,GAA4BjhB,QAAyB9c,IAAdwgD,IAA4Bh+C,IAAWqgC,GAAQN,GAAiBme,mBAC1F1gD,IAAfk8B,GAA4Bpf,QAAyB9c,IAAdwgD,IAA4Bv7C,IAAW49B,GAAQN,GAAiBme,cAhBS,SACpGl0C,EAAE,iEAiBA,cAgBtB,OAhBsB,mCAAvB,gGAEuB,GADjBw4C,EAAWxiD,EACXyiD,EAAWhgD,GACXu/C,EAAQ,CAAD,eACK,GAAdS,EAAW,IACPziD,IAASu7B,EAAU,wEAIT,GAAdinB,EAAW,IACP//C,IAASi3B,EAAU,mDAKzByD,GAAYslB,EAAUD,GAAU,6CACjC,sBA2BD,SAASrlB,GAAY16B,EAAezC,GAAgB,IAAD,EACjDme,GAAW,GACX,IAAIpP,OAAMvR,EACV,GAAyB,QAAzB,EAAIuiC,GAAiByB,YAAI,OAArB,EAAwBV,IAAY,CACtC,IAAI1sB,EAAOD,GAAYytB,mBAAmB7B,GAAiByB,KAAKV,IAAY3sB,GAAY0G,cACxF9L,EAAMoF,GAAY8nC,UAAU7nC,EAC9B,CAEA,IAAIksB,EAA+B,gBAAhB1f,GAAiD,iBAAhBA,GAAkD,cAAhBA,EAEtF6f,GACGtD,YACCvc,EACAqf,GACA,EACAx9B,EACAzC,OACAxC,OACAA,OACAA,EACA6iC,OACA7iC,EACAuR,EACAuxB,GAED51B,MAAK,SAAC7D,GACDA,GACFu7C,GAAY,GACZpf,GAAWqf,GACXH,EAAWr7C,IAEXmM,GAAavU,MAAMuL,EAAE,2CAEzB,IACCxL,OAAM,SAACC,GAAW,IAAD,EACgB,OAAvB,OAALA,QAAK,IAALA,GAAe,QAAV,EAALA,EAAOE,gBAAQ,WAAV,EAAL,EAAiBU,QACnB2T,GAAavU,MAAMuL,EAAE,sCAEjB+1B,GAAiBme,eACnBlrC,GAAavU,MAAMuL,EAAE,gDAEvBgJ,GAAavU,MAAMuL,EAAE,yBAEzB,IACCwX,SAAQ,WACPrD,GAAW,EACb,GACJ,CACF,CCjSE,IAaeukC,GAbyB,SAAH,GAAoC,IAA9B/1C,EAAO,EAAPA,QAASg2C,EAAO,EAAPA,QAAStsB,EAAI,EAAJA,KAErDusB,EAAU,iBAAaj2C,EAAO,oBAAYk2C,mBAC9CF,GAAW,IACZ,iBAASE,mBAAmBxsB,GAAQ,KAErC,OACE,mBAAGF,KAAMysB,EAAW,SACjBj2C,GAGP,ECCa,SAASm2C,GAAsBv5C,GAC5C,IAAQ1J,EAAyC0J,EAAzC1J,OAAQ4J,EAAiCF,EAAjCE,eAAgBC,EAAiBH,EAAjBG,aACxBM,EAAMC,cAAND,EAER,EAA8BL,oBAAS,GAAK,mBAArC2Q,EAAO,KAAE6D,EAAU,KAIzB,SAEc/V,IAAM,4CAGpB,OAHoB,kCAArB,wGACQpJ,EAAYoJ,SAAS,KAAD,EAC1BsB,EAAa,MAAM,4CACpB,sBAgBD,OAdAc,qBAAU,WACR5I,EACGkG,aAAajI,GACb6K,MAAK,WACJhB,EAAa7J,EACf,IACCrB,OAAM,WACLwU,GAAavU,MAAMuL,EAAE,wBACvB,IACCwX,SAAQ,WACPrD,GAAW,EACb,GACJ,GAAG,CAACte,IAEAya,EACK,cAACD,GAAgB,CAACC,SAAO,IAIhC,qCACE,iCACE,qBAAK3P,UAAU,YAAW,SACxB,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,oDAAmD,SAChE,qBAAKA,UAAU,eAAc,SAC3B,oBAAIA,UAAU,wCAAuC,SACnD,oBAAIA,UAAU,WAAU,SACtB,yBAAQA,UAAU,WAAWG,QAASrB,EAAe,UACnD,cAAC,IAAe,CAACkB,UAAU,OAAOI,KAAM,CAAC,MAAO,WAC/Cf,EAAE,0CAUnB,qBAAKW,UAAU,mCAAkC,SAC/C,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,oDAAmD,SAChE,sBAAKA,UAAU,iBAAgB,UAC7B,qBAAKA,UAAU,OAAM,SACnB,cAACC,EAAU,CAACC,KAAMzN,EAAYS,SAGhC,qBAAK8M,UAAU,YAAW,SACxB,sBAAKA,UAAU,YAAW,UACxB,6BAAKX,EAAE,8BACP,6BAAKA,EAAE,+BACP,oBAAIW,UAAU,OAAM,SAClB,cAACo3B,GAAA,EAAK,CACJC,QAAQ,sCACR+gB,WAAY,CACVL,UAAW,cAAC,GAAS,CAAC/1C,QAAQ,uBAAuBg2C,QAAS34C,EAAE,oDAItE,qBAAKW,UAAU,gBAAe,SAAEX,EAAE,8BAElC,wBAAQW,UAAU,mCAAmCG,QAAO,gCAAE,sHArE5E2D,OAAOovB,SAASC,UAqEgF,2CAAC,SAChF9zB,EAAE,+BAGL,wBAAQW,UAAU,6BAA6BG,QAAO,gCAAE,wGAAkB1C,IAAQ,mFAAC,SAChF4B,EAAE,gDAUvB,CC7GkE,IAG5Dg5C,GAAY,kHAwDf,OAxDe,6FAChB,WAAsBpiC,GAAmB,iGACrBxiB,KAAKyS,aAAa,GAAD,OAAIzS,KAAKJ,OAAM,kCAA0B4iB,IAAe,KAAD,EAAjF,OAAHxgB,EAAG,yBACFA,GAAG,gDACX,mDAJe,IAIf,8EACD,WACEwgB,EACAs3B,EACAE,EACA6K,EACAnhB,EACAohB,EACAz3B,EACA9rB,EACA4gC,GAAqB,iGAEHniC,KAAK0B,WAAU,UAAc1B,KAAKJ,OAAM,0BAA0B,CAClFqD,GAAIuf,EACJ3X,KAAM,CACJ+mC,GAAIkI,EACJnI,GAAIqI,GAENx3B,YAAaqiC,EACbnhB,QAASA,EACTohB,YAAaA,EACbz3B,SAAUA,EACV9rB,eAAgBA,EAChB4gC,OAAQA,EAAO/K,KAAK,OACnB,KAAD,EAZO,OAAHp1B,EAAG,yBAaFA,GAAG,gDACX,mEA1BA,IA0BA,8EAED,WACE83C,EACAE,EACA6K,EACAnhB,EACAohB,EACAz3B,EACA9rB,EACA4gC,GAAqB,iGAEHniC,KAAK0B,WAAU,UAAc1B,KAAKJ,OAAM,0BAA0B,CAClFqD,GAAI,GACJ4H,KAAM,CACJ+mC,GAAIkI,EACJnI,GAAIqI,GAENx3B,YAAaqiC,EACbnhB,QAASA,EACTohB,YAAaA,EACbz3B,SAAUA,EACV9rB,eAAgBA,EAChB4gC,OAAQA,EAAO/K,KAAK,OACnB,KAAD,EAZO,OAAHp1B,EAAG,yBAaFA,GAAG,gDACX,iEA1BA,MA0BA,EAxDe,CAASrC,GA4DZolD,GADM,IAAIH,GCpDV,SAASI,GAAkB75C,GACxC,IAAQmE,EAAkCnE,EAAlCmE,KAAM21C,EAA4B95C,EAA5B85C,WAAYC,EAAgB/5C,EAAhB+5C,YAC1B,EAA8C35C,mBAAuC,CAAC,GAAE,mBAAjF45C,EAAe,KAAEC,EAAkB,KAE1Ch5C,qBAAU,WACR,IAAIi5C,EAAyB,CAAC,EAEnB,OAAXH,QAAW,IAAXA,KAAat6C,SAAQ,SAACwE,GACpBi2C,EAAkBj2C,IAAO,CAC3B,IAEAg2C,EAAmBC,EACrB,GAAG,IAEHj5C,qBAAU,WACR,IAAIk5C,EAAyB,GAC7Bh2C,EAAK1E,SAAQ,SAACwE,GACR+1C,EAAgB/1C,EAAI/L,QAAQiiD,EAAQl4C,KAAKgC,EAAI/L,MACnD,IAEA4hD,EAAWK,EACb,GAAG,CAACH,EAAiBF,IAErB,IAAMM,EAAqB,SAACliD,EAAe+V,GACzCgsC,GAAmB,SAACtS,GAElB,OADoB,2BAAQA,GAAI,kBAAGzvC,EAAQ+V,GAE7C,GACF,EAEA,OACE,qBAAK7M,UAAU,YAAW,SACvB+C,EAAKmK,KAAI,SAACrK,GAAG,OACZ,gCACE,+BACE,4BAAIA,EAAI/L,UAEV,sBAAKkJ,UAAU,yBAAwB,UACrC,kCACE,uBACE7I,KAAK,QACLmH,KAAI,cAASuE,EAAI/L,OACjBoF,MAAM,UACNyd,QAASi/B,EAAgB/1C,EAAI/L,OAC7BuW,SAAU,kBAAM2rC,EAAmBn2C,EAAI/L,OAAO,EAAK,IACnD,aAGJ,kCACE,uBACEK,KAAK,QACLmH,KAAI,cAASuE,EAAI/L,OACjBoF,MAAM,UACNyd,SAAUi/B,EAAgB/1C,EAAI/L,OAC9BuW,SAAU,kBAAM2rC,EAAmBn2C,EAAI/L,OAAO,EAAM,IACpD,kBAtBE+L,EAAI/L,MA0BR,KAId,CCrDe,SAASmiD,GAAmBr6C,GACzC,MAAwC+nB,cAAhC3xB,EAAc,EAAdA,eAAgBihB,EAAW,EAAXA,YAChBijC,EAAct6C,EAAds6C,UAER,EAA4Bl6C,wBAA6BnM,GAAU,mBAA5D06C,EAAM,KAAEC,EAAS,KACxB,EAA4BxuC,wBAA6BnM,GAAU,mBAA5D46C,EAAM,KAAEC,EAAS,KACxB,EAA6B1uC,wBAAoCnM,GAAU,mBAApE+iC,EAAM,KAAE8iB,EAAU,KACzB,EAAgD15C,wBAA6BnM,GAAU,mBAAhFylD,EAAgB,KAAEa,EAAmB,KAC5C,EAA8Bn6C,wBAA6BnM,GAAU,mBAA9DskC,EAAO,KAAE4W,EAAU,KAC1B,EAAsC/uC,mBAA6B,IAAG,mBAA/Du5C,EAAW,KAAEa,EAAc,KAClC,EAAgCp6C,mBAA6B,IAAG,mBAAzD8hB,EAAQ,KAAEkrB,EAAW,KAC5B,EAA8BhtC,oBAAkB,GAAM,mBAA/C2Q,EAAO,KAAE6D,EAAU,KAEpB7S,EAAUC,cAChBf,qBAAU,WACqB,aAmB5B,OAnB4B,kCAA7B,2FACsB,iBAAhBoW,EAA8B,iDACjB,OAAjBzC,GAAW,GAAM,SACXsiB,GACHiC,aAAa9hB,GACblW,MAAK,SAACs5C,GACL,IAAIC,EAA4C,OAAbD,QAAa,IAAbA,OAAa,EAAbA,EAAe/6C,KAClDkvC,EAAU8L,EAAQ1lD,IAAI,OACtB85C,EAAU4L,EAAQ1lD,IAAI,OACtBulD,EAAiC,OAAbE,QAAa,IAAbA,OAAa,EAAbA,EAAe3iD,IACnCq3C,EAAwB,OAAbsL,QAAa,IAAbA,OAAa,EAAbA,EAAeliB,SAC1BiiB,EAA4B,OAAbC,QAAa,IAAbA,OAAa,EAAbA,EAAed,aAC9BvM,EAAyB,OAAbqN,QAAa,IAAbA,OAAa,EAAbA,EAAev4B,UAC3B43B,EAAwB,OAAbW,QAAa,IAAbA,OAAa,EAAbA,EAAezjB,OAC5B,IACC/hC,OAAM,SAACC,GACNa,QAAQb,MAAM,iCAAkCA,EAClD,IAAG,KAAD,EACJ0f,GAAW,GAAO,4CACnB,uBApBc,WACc,wBAoB7B+lC,EACF,GAAG,CAACtjC,IAEJ,IAAMujC,EAAY,iDAAG,wFACF,GAAjBhmC,GAAW,GAAM,SAEK,iBAAhByC,EAA8B,gCAC1BuiC,GAAaiB,gBACjBlM,EACAE,EACA6K,EACAnhB,EACW,OAAXohB,QAAW,IAAXA,IAAe,GACP,OAARz3B,QAAQ,IAARA,IAAY,GACZ9rB,EACM,OAAN4gC,QAAM,IAANA,IAAU,IACV,KAAD,wCAEK4iB,GAAakB,gBACjBzjC,EACAs3B,EACAE,EACA6K,EACAnhB,EACW,OAAXohB,QAAW,IAAXA,IAAe,GACP,OAARz3B,QAAQ,IAARA,IAAY,GACZ9rB,EACM,OAAN4gC,QAAM,IAANA,IAAU,IACV,KAAD,EAEHj1B,EAAQE,KAAK,kBAAD,OAAmB7L,EAAc,gBAAe,kDAE5DL,QAAQb,MAAM,kCAAkC,EAAD,IAAS,QAE1D0f,GAAW,GAAO,0DACnB,kBAhCiB,mCAkCZmmC,EAAY,iDAAG,wFACF,OAAjBnmC,GAAW,GAAM,kBAETglC,GAAaoB,gBAAgB3jC,GAAa,KAAD,EAC/CtV,EAAQE,KAAK,kBAAD,OAAmB7L,EAAc,gBAAe,gDAE5DL,QAAQb,MAAM,mBAAmB,EAAD,IAAS,QAE3C0f,GAAW,GAAO,yDACnB,kBATiB,mCAWlB,OAAI7D,EACK,cAACD,GAAgB,CAACC,QAASA,IAIlC,qBAAK3P,UAAU,iCAAgC,SAC7C,sBAAKA,UAAU,8BAA6B,UAC1C,oBAAIA,UAAU,OAAM,SAAC,6BACrB,qBAAKA,UAAU,OAAM,SACnB,qBAAKA,UAAU,YAAW,SACxB,uBAAMA,UAAU,UAAUqlB,SAAU,SAACrN,GAAE,OAAKA,EAAGsN,gBAAgB,EAAC,UAC9D,qBAAKtlB,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAW,uCACXlJ,SAAU,SAAC1S,GAAa,OAAKi9C,EAAoBj9C,EAAM,EACvDA,MAAOo8C,GAAsC,GAC7C7vC,UAAU,EACVwP,OAAQ,mBAGZ,qBAAKjY,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAW,0BACXlJ,SAAU,SAAC1S,GAAa,OAAKk9C,EAAel9C,EAAM,EAClDA,MAAkB,OAAXq8C,QAAW,IAAXA,IAAe,GACtB9vC,UAAU,EACVwP,OAAQ,gBAGZ,qBAAKjY,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAW,SACXlJ,SAAU,SAAC1S,GAAa,OAAKwxC,EAAUxxC,EAAM,EAC7CA,MAAOuxC,GAAkB,GACzBhlC,UAAU,MAGd,qBAAKzI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAW,wBACXlJ,SAAU,SAAC1S,GAAa,OAAK8vC,EAAY9vC,EAAM,EAC/CA,MAAe,OAAR4kB,QAAQ,IAARA,IAAY,GACnBrY,UAAU,EACVwP,OAAQ,kBAGZ,qBAAKjY,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAW,SACXlJ,SAAU,SAAC1S,GAAa,OAAKsxC,EAAUtxC,EAAM,EAC7CA,MAAOqxC,GAAkB,GACzB9kC,UAAU,MAGd,qBAAKzI,UAAU,WAAU,SACvB,cAAC6X,GAAc,CACbC,UAAW,WACXlJ,SAAU,SAAC1S,GAAa,OAAK6xC,EAAW7xC,EAAM,EAC9CA,MAAOi7B,GAAoB,GAC3B1uB,UAAU,MAGd,cAACgwC,GAAiB,CAAC11C,KAAMm2C,EAAUljD,eAAgB0iD,WAAYA,EAAYC,YAAa/iB,IACxF,sBAAK51B,UAAU,WAAU,UACvB,cAAC8I,GAAqB,CACpB3R,KAAK,SACLuR,MAAuB,iBAAhBuN,EAAiC,SAAW,SACnD9V,QAAS,WACPq5C,GACF,EACAx5C,UAAU,kBACVyI,UAAU,IAGZ,wBACEzI,UAAU,iCACV7I,KAAK,SACL8V,MAAO,CAAE0lC,WAAY,IACrBxyC,QAAS,kBAAMQ,EAAQE,KAAK,kBAAD,OAAmB7L,EAAc,eAAc,EAAC,SAE1E,WAEc,iBAAhBihB,GACC,yBACEjW,UAAS,iBACTiN,MAAO,CAAE0lC,WAAY,IACrBxyC,QAAS,WACPw5C,GACF,EAAE,UAEF,cAAC,IAAe,CAACv5C,KAAM,CAAC,MAAO,eAAgB,IAAE,0BAUrE,C,aCzMqBnC,GAAY,mDAC/BvH,GAAa,GAAG,KAChB4H,KAAe,GAAG,KAElB/G,aAAuB,GAAG,KAC1BC,OAAiB,GAAG,KACpBC,KAAe,GAAG,KAClBC,MAAgB,GAAG,KACnBC,QAAkB,GAAG,KACrBC,WAAqB,GAAG,KACxBoJ,IAAqB,KAAK,KAC1BC,IAAqB,KAAK,KAE1BhJ,QAAkB,EAAK,KACvBjC,eAAoD,EAAG,ICG1C,SAAS6jD,GAAuBj7C,GAC7C,IAAQ1J,EAAyB0J,EAAzB1J,OAAQ6J,EAAiBH,EAAjBG,aAChB,EAAwBC,mBAAqB,IAAG,mBAAzC+D,EAAI,KAAE2Q,EAAO,KACd/S,EAAUC,cACRvB,EAAMC,cAAND,EAER,EAAwBL,mBAAiB,GAAE,mBAApCsxB,EAAI,KAAEC,EAAO,KAEpB,EAA0BvxB,oBAAuB,OAAN9J,QAAM,IAANA,OAAM,EAANA,EAAQ4C,QAAS,IAAG,mBAAxDA,EAAK,KAAE+2B,EAAQ,KACtB,EAA4C7vB,mBAAmC,OAAN9J,QAAM,IAANA,OAAM,EAANA,EAAQ6C,gBAAe,mBAAzFA,EAAc,KAAE+2B,EAAiB,KACxC,EAAoC9vB,qBAAkB,mBAA/C+vB,EAAU,KAAEC,EAAa,KAChC,EAAsDhwB,qBAAkB,mBAAjE86C,EAAmB,KAAEC,EAAsB,KAElD,EAA8B/6C,mBAAiB,IAAG,mBAA3Cg7C,EAAO,KAAEC,EAAU,KAC1B,EAA4Dj7C,mBAAiB,IAAG,mBAAzEk7C,EAAsB,KAAEC,EAAyB,KACxD,EAAgDn7C,mBAAiB,IAAG,mBAA7Do7C,EAAgB,KAAEC,EAAmB,KAC5C,EAA4Cr7C,mBAAiB,IAAG,mBAAzDs7C,EAAc,KAAEC,GAAiB,KACxC,GAAwDv7C,mBAAiB,IAAG,qBAArEw7C,GAAoB,MAAEC,GAAuB,MACpD,GAA8Cz7C,mBAAiB,IAAG,qBAA3D07C,GAAe,MAAEC,GAAkB,MAC1C,GAAkD37C,mBAAiB,IAAG,qBAA/D47C,GAAiB,MAAEC,GAAoB,MAC9C,GAAkD77C,mBAA4C,IAAG,qBAA1F87C,GAAiB,MAAEC,GAAoB,MAC9C,GAA8B/7C,oBAAkB,GAAM,qBAA/C2Q,GAAO,MAAE6D,GAAU,MAE1B3T,qBAAU,WACR4D,GAAW8Q,UAAUxU,MAAK,SAACgD,GACzB2Q,EAAQ3Q,EACV,GACF,GAAG,IAEH,IAAMi4C,GAA2B,CAAC,EAC7BhB,GAAwC,IAA7Bc,GAAkB7kD,SAChC+kD,GAA8B,SAAI,YAGpC,IAAMC,GAA8B,CAAC,EAKrC,OAJKnjD,IACHmjD,GAAiC,SAAI,YAGnCtrC,GACK,cAACie,GAAgB,IAIxB,qBAAK5tB,UAAU,iBAAgB,SAC7B,qBAAKA,UAAU,WAAU,SACvB,sBAAKA,UAAU,8BAA6B,UAChC,IAATswB,GACC,sBAAKtwB,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAI,4BAIR,sBAAKA,UAAU,YAAW,UACxB,4BAAIX,EAAE,kCACN,4BAAIA,EAAE,kCACN,wBAAQW,UAAU,+BAA+BG,QAAS+6C,GAAe,SACtE77C,EAAE,qBAEL,wBAAQW,UAAU,kBAAkBG,QAASg7C,GAAW,SACrD97C,EAAE,qCAMD,IAATixB,GACC,sBAAKtwB,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,qCAIX,sBAAKW,UAAU,YAAW,UACxB,4BAAG,sEACH,sBAAKA,UAAU,WAAU,UACvB,qBAAKA,UAAU,QAAO,SACpB,cAAC2Y,GAAkB,CACjBzc,MAAOpE,EACP8W,SAAUigB,EACV3W,kBAAmB8W,EACnBxW,SAAUuW,EACVlqB,MAAOxF,EAAE,mCACTgZ,UAAU,MAGd,qBAAKrY,UAAU,QAAO,SACpB,cAAC6X,GAAc,CACbC,UAAWzY,EAAE,4BACb4Y,OAAQ,WACR9gB,KAAK,YACL+E,MAAOnE,EAAiBA,EAAemP,WAAa,GACpD0H,SAAU,SAAC1S,GAAa,OAAK4yB,EAAkB5yB,EAAM,EACrDsc,SAAUshC,EACV5hC,kBAAmB6hC,EACnB1hC,UAAU,SAKhB,wBAAQrY,UAAU,+BAA+BG,QAAS+6C,GAAe,SACtE77C,EAAE,qBAEL,gDAAQW,UAAU,mBAAsBi7C,IAAsB,IAAE96C,QAASg7C,GAAW,SACjF97C,EAAE,wBAMD,IAATixB,GACC,sBAAKtwB,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BAAKX,EAAE,6CAIX,sBAAKW,UAAU,YAAW,UACxB,sBAAKA,UAAU,OAAM,UACnB,wBAAO0xB,QAAQ,UAAU1xB,UAAU,aAAY,UAC5CX,EAAE,sBAAsB,OAE3B,uBACEW,UAAU,eACV9D,MAAO89C,EACP3sC,SAAU,SAACb,GAAkC,OAAKytC,EAAWztC,EAAM+Y,cAAcrpB,MAAM,OAI3F,mBAAG8D,UAAU,UAAS,SAAEX,EAAE,wBAC1B,sBAAKW,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,6BACjC,uBACEW,UAAU,eACV9D,MAAOg+C,EACP7sC,SAAU,SAACb,GAAkC,OAAK2tC,EAA0B3tC,EAAM+Y,cAAcrpB,MAAM,OAG1G,sBAAK8D,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,uBACjC,uBACEW,UAAU,eACV9D,MAAOk+C,EACP/sC,SAAU,SAACb,GAAkC,OAAK6tC,EAAoB7tC,EAAM+Y,cAAcrpB,MAAM,OAGpG,sBAAK8D,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,qBACjC,uBACEW,UAAU,eACV9D,MAAOo+C,EACPjtC,SAAU,SAACb,GAAkC,OAAK+tC,GAAkB/tC,EAAM+Y,cAAcrpB,MAAM,OAGlG,sBAAK8D,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,4BACjC,uBACEW,UAAU,eACV9D,MAAOs+C,GACPntC,SAAU,SAACb,GAAkC,OAAKiuC,GAAwBjuC,EAAM+Y,cAAcrpB,MAAM,OAGxG,sBAAK8D,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,sBACjC,uBACEW,UAAU,eACV9D,MAAOw+C,GACPrtC,SAAU,SAACb,GAAkC,OAAKmuC,GAAmBnuC,EAAM+Y,cAAcrpB,MAAM,OAGnG,sBAAK8D,UAAU,OAAM,UACnB,uBAAOA,UAAU,aAAY,SAAEX,EAAE,wBACjC,uBACEW,UAAU,eACV9D,MAAO0+C,GACPvtC,SAAU,SAACb,GAAkC,OAAKquC,GAAqBruC,EAAM+Y,cAAcrpB,MAAM,OAIrG,mBAAG8D,UAAU,UAAS,SAAEX,EAAE,0BACzB0D,EAAKmK,KAAI,SAACrK,GACT,IAAIb,EAAU,GAId,OAHIa,EAAIb,UACNA,EAAO,UAAMa,EAAIb,QAAQzK,aAAY,YAAIsL,EAAIb,QAAQxK,OAAM,aAAKqL,EAAIb,QAAQvK,KAAI,aAAKoL,EAAIb,QAAQtK,MAAK,YAAImL,EAAIb,QAAQrK,QAAO,aAAKkL,EAAIb,QAAQpK,aAG9I,sBAAKoI,UAAU,kBAAiB,UAC9B,uBAAO7I,KAAK,WAAW6I,UAAU,mBAAmBqN,SAAU,kBA+EjF,SAEmC,GAAD,gCAjFqD+tC,CAAqBv4C,EAAInM,GAAG,IAChG,wBAAOsJ,UAAU,mBAAkB,UACjC,iCAAS6C,EAAIvE,OAAc,IAAE0D,IADUa,EAAInM,MAFTmM,EAAInM,GAO9C,IAEA,sBAAKsJ,UAAU,OAAM,UACnB,wBAAQA,UAAU,+BAA+BG,QAAS+6C,GAAe,SACtE77C,EAAE,qBAEL,gDAAQW,UAAU,mBAAsBg7C,IAAmB,IAAE76C,QAASg7C,GAAW,SAC9E97C,EAAE,qCAOH,IAATixB,GACC,sBAAKtwB,UAAU,OAAM,UACnB,qBAAKA,UAAU,iCAAgC,SAC7C,qBAAKA,UAAU,iBAAgB,SAC7B,6BACGX,EAAE,wCAAyC,CAC1Cf,KAAM07C,UAMd,sBAAKh6C,UAAU,YAAW,UACxB,mBAAGA,UAAU,UAAS,SAAEX,EAAE,6CAE1B,qBAAKW,UAAU,OAAM,SACnB,wBACEA,UAAU,kBACVG,QAAS,WACPQ,EAAQE,KAAK,IACf,EAAE,SAEDxB,EAAE,2CAWrB,SAAS67C,GAAe1uC,GACtBA,EAAM8Y,iBACNiL,EAAQD,EAAO,EACjB,CAAC,SAEc6qB,GAAW,GAAD,8CAqBxB,OArBwB,mCAAzB,WAA0B3uC,GAAiB,iFAClB,GAAvBA,EAAM8Y,iBAEO,IAATgL,EAAU,iBAUoC,OAThD9c,IAAW,IACLxV,EAAe,IAAIC,IACZK,KAAO07C,EACpBh8C,EAAazG,aAAe2iD,EAC5Bl8C,EAAaxG,OAAS4iD,EACtBp8C,EAAavG,KAAO6iD,EACpBt8C,EAAapG,WAAa4iD,GAC1Bx8C,EAAatG,MAAQgjD,GACrB18C,EAAarG,QAAUijD,GACvB58C,EAAahI,eAAiB8kD,GAAkB,UAE1Cp8C,EAAoB28C,mBAAmBr9C,GAAc,KAAD,GAC9C,OAD8C,KAC1De,EAAY,UAAO9H,EAAcgG,cAAa,mCAC9CuW,IAAW,GAAO,QAGpB+c,EAAQD,EAAO,GAAG,6CACnB,sBAEkC,cAYlC,OAZkC,mCAAnC,WAAoCx5B,GAAa,mFAC3CwkD,EAAY,aAAOR,KACjBroC,EAAQqoC,GAAkBS,WAAU,SAACjtB,GAAa,OAAKA,EAAcx3B,QAAUA,CAAK,MAC7E,EACXwkD,EAAaE,OAAO/oC,EAAO,GAE3B6oC,EAAaz6C,KAAK,CAChB/J,MAAOA,EACPY,MAAO,aAGXqjD,GAAqBO,GAAc,4CACpC,sBACH,CC3PA,IAAMG,GAAiBC,aAAqB,CAAEC,SAAU,KAClDC,GAAc,IAAIC,KACJ,IAAIC,KAAoB,CAC1CC,OAAQ,CACNC,mBAAoB,uCACpBC,WAAY,CAACL,IACbM,gBAAgB,eACbN,GAAYO,WAAa,CAAEx7C,QAAS86C,QAI/BW,kBA6VGC,oBAvVf,WAAgB,IAAD,MACb,EAA8Br9C,oBAAkB,GAAK,mBAA9C2Q,EAAO,KAAE6D,EAAU,KAC1B,EAA0CxU,oBAAS,GAAM,mBAAlDs9C,EAAc,KAAEC,EAAe,KACtC,EAA4Bv9C,mBAAwB,MAAK,mBAAlD9J,EAAM,KAAE8jB,EAAS,KACxB,EAAoDha,mBAAwC,MAAK,mBAA1FH,EAAkB,KAAEkvB,EAAqB,KAChD,EAAwB/uB,mBAAiB0E,GAAgB2B,eAAhDm3C,EAA8D,iBAAnD,GACpB,EAAwCx9C,oBAAkB,GAAM,mBAAzDy9C,EAAY,KAAEC,EAAe,KACpC,EAAwC19C,oBAAkB,GAAM,mBAAzD29C,EAAY,KAAE/kB,EAAe,KAC9B13B,EAAOxN,EAAsBD,EAAYK,OAE/C,EAAoBwM,cAAZD,EAAC,EAADA,EAAGu9C,EAAI,EAAJA,KACLj8C,EAAUC,cAEVi8C,EACJpB,GAAevoB,SAAS4pB,SAAS3mD,SAAS,YAC1CslD,GAAevoB,SAAS4pB,SAAS3mD,SAAS,qBAC1CslD,GAAevoB,SAAS4pB,SAAS3mD,SAAS,cAkD5C,GAhDA8kB,SAASvS,MAAQrJ,EAAE,mBAEnBQ,qBAAU,WACRlL,QAAQkI,IAAI,8CAAgD+G,aAAaC,QAAQ,wBAA0B,KAE3G,IAAMrG,EAAS,iDAAG,gHACYnJ,EAAYmJ,YAAY,KAAD,EAA7CmC,EAAa,OACnBi4B,EAAgBj4B,EAAc7L,OAC9BiL,GAAaY,EAAczK,QAE3Bse,GAAW,GACX7e,QAAQkI,IAAI,iCAERkgD,EAAuBn5C,aAAaC,QAAQ,wBAC5ClE,EAAczK,QAAU6nD,IAC1BpoD,QAAQkI,IAAI,uBAAwBkgD,GACpCn5C,aAAao5C,WAAW,wBACxBr8C,EAAQE,KAAKk8C,IACd,2CACF,kBAdc,mCAefv/C,IAEAnJ,EAAYsI,kBAAiB,WAC3BhI,QAAQkI,IAAI,wBACZW,GACF,IAEA,IAAIy/C,EAAWr9B,YAAW,WACxB88B,GAAgB,EAClB,GAAG,KAEH,IAAKJ,EAAgB,CACnB,IAAIY,EAAkBjiC,SAASsQ,cAAc,UAC7C2xB,EAAgB18C,IAAMlN,yCACtB4pD,EAAgB/lD,KAAO,kBACvB+lD,EAAgBC,OAAQ,EACxBD,EAAgBE,OAAS,WACvBzoD,QAAQkI,IAAI,sBACZ0/C,GAAgB,EAClB,EACAthC,SAASsI,qBAAqB,QAAQ,GAAGoI,YAAYuxB,EACvD,CAIA,OAFAvoD,QAAQkI,IAAI,sBAEL,kBAAM2tB,cAAcyyB,EAAU,CACvC,GAAG,IAECttC,EACF,OACE,cAACyjB,GAAc,CAACC,eAAgB,IAAI,SAClC,cAACzF,GAAgB,MAKvB,IAAMruB,EAAiBtI,EAAcuI,0BAA0BtK,EAA0B,OAAlB2J,QAAkB,IAAlBA,GAA0B,QAAR,EAAlBA,EAAoBpI,cAAM,WAAR,EAAlB,EAA4BC,IAC7F0nC,EAAmBnnC,EAAcmnC,iBAAiBlpC,OAAQrC,GAC1D2M,EAA4BvI,EAAcuI,0BAA0BtK,OAAQrC,GAC5EwqD,EAAcpmD,EAAcomD,YAAYnoD,GAE9C,OAAIynD,GAIAA,EAHK,mCAAGF,GAAgB,cAACxpB,GAAgB,CAACn0B,eAAgBA,MAQ5D,qCACE,cAAC,WAAO,CAAC8hC,SAAU,cAClBic,GACC,qBAAK78C,UAAU,wCAAuC,SACpD,qBAAKA,UAAU,MAAK,SAClB,sBAAKA,UAAU,8BAA6B,UAC1C,qBAAKQ,IAAKN,EAAMO,IAAI,GAAGT,UAAU,+BACjC,yBAAQA,UAAU,qBAAqBG,QAASrB,EAAe,UAC7D,cAAC,IAAe,CAACkB,UAAU,OAAOI,KAAM,CAAC,MAAO,WAC/Cf,EAAE,mCAOb,cAAC,KAAuB,WACpBnK,GACA,qCACE,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,IAAG,SACnB,cAAC78C,EAAU,CAAC3B,aAAcA,GAAcD,eAAgBA,MAE1D,cAAC,IAAK,CAACw+C,OAAK,EAACC,KAAK,UAAS,SACzB,cAAC78C,EAAU,CAAC3B,aAAcA,GAAcD,eAAgBA,MAG1D,cAAC,IAAK,CAACw+C,OAAK,EAACC,KAAK,0BAAyB,SACzC,cAACla,GAAkB,WAM3B,eAAC,KAAqB,YAClBwZ,GAAe3nD,GAAU2J,GACzB,iCACE,cAACF,EAAY,CACXzJ,OAAQA,EACR2J,mBAAoBA,EACpBC,eAAgBA,EAChBC,aAAcA,QAKlB89C,GAAe3nD,GAAUmoD,IAAgBx+C,GACzC,iCACE,qBAAKmB,UAAU,wCAAuC,SACpD,qBAAKA,UAAU,MAAK,SAClB,sBAAKA,UAAU,SAAQ,UACrB,qBAAKQ,IAAKN,EAAMO,IAAI,GAAGT,UAAU,+BACjC,yBAAQA,UAAU,qBAAqBG,QAASrB,EAAe,UAC7D,cAAC,IAAe,CAACkB,UAAU,OAAOI,KAAM,CAAC,MAAO,WAC/Cf,EAAE,qCASdnK,IAAWkpC,GAAoB5+B,IAC9B,cAAC,IAAK,CAAC89C,OAAK,EAACC,KAAK,IAAG,SACnB,cAAC9T,GAAa,CAACv0C,OAAQA,MAK1BA,IACEkpC,IACA5+B,IACC69C,EAKA,cAAC,IAAK,CAACC,OAAK,EAACC,KAAK,IAAG,SACnB,cAAChgB,GAAQ,CAACroC,OAAQA,MALpB,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,IAAG,SACnB,cAACpF,GAAqB,CAACjjD,OAAQA,EAAQ4J,eAAgBA,EAAgBC,aAAcA,QAQ1F7J,GAAU2J,GACT,qCACGU,GACC,qCACE,cAAC,IAAK,CAAC+9C,OAAK,EAACC,KAAK,iCAAgC,SAChD,cAACzvB,GAAgB,CAAC54B,OAAQA,EAAQ6J,aAAcA,OAElD,cAAC,IAAK,CAACu+C,OAAK,EAACC,KAAK,4CAA2C,SAC3D,cAAClT,GAAc,CAACn1C,OAAQA,MAE1B,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,2EAA0E,SAC1F,cAACvS,GAAU,CAAC91C,OAAQA,MAEtB,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,oFAAmF,SACnG,cAAC1R,GAAS,CAAC32C,OAAQA,MAErB,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,iGAAgG,SAChH,cAACtI,GAAyB,CAAC//C,OAAQA,MAErC,cAAC,IAAK,CACJooD,OAAK,EACLC,KAAK,8GAA6G,SAElH,cAACvK,GAA4B,CAAC99C,OAAQA,EAAQ0iC,gBAAiBA,MAGhE/4B,EAAmBpI,QAClB,qCACE,cAAC,IAAK,CAAC6mD,OAAK,EAACC,KAAK,UAAS,SACzB,cAAChqC,GAAU,CAACvV,aAAca,EAAmBpI,OAAQvB,OAAQA,MAE/D,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,mBAAkB,SAClC,cAAC72B,GAAS,CAAC1oB,aAAca,EAAmBpI,OAAQvB,OAAQA,MAE9D,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,0CAAyC,SACzD,cAAC9J,GAAY,CAACz+C,eAAyC,QAA3B,EAAE6J,EAAmBpI,cAAM,aAAzB,EAA2BC,GAAIxB,OAAQA,MAEvE,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,gBAAe,SAC/B,cAAC5tB,GAAe,CAAC3xB,aAAca,EAAmBpI,OAAQvB,OAAQA,MAEpE,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,iBAAgB,SAChC,cAAC5tB,GAAe,CAAC5M,UAAU,EAAM/kB,aAAca,EAAmBpI,OAAQvB,OAAQA,MAGpF,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,aAAY,SAC5B,cAAC9gC,GAAa,CAACze,aAAca,EAAmBpI,WAEjDQ,EAAcb,gBAAgBlB,IAC7B,qCACE,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,kBAAiB,SACjC,cAAC,GAAiB,CAACroD,OAAQA,MAE7B,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,yDAAwD,SACxE,cAACtE,GAAkB,CAACC,UAAWr6C,EAAmBpI,WAEpD,cAAC,IAAK,CAAC6mD,OAAK,EAACC,KAAK,uBAAsB,SACtC,cAAC1D,GAAsB,CAAC3kD,OAAQA,EAAQ6J,aAAcA,OAExD,cAAC,IAAK,CAACw+C,KAAK,yBAAwB,SACjC,cAAC3pB,GAAgB,CAAC51B,aAAca,EAAmBpI,OAAQo9B,KAAM3+B,MAEpE,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,mBAAkB,SAClC,cAAC/pB,GAAkB,CAACx1B,aAAca,EAAmBpI,oBASnE,cAAC,IAAK,CAAC6mD,OAAK,EAACC,KAAK,iBAAgB,SAChC,cAAC/vB,GAAiB,CAChBt4B,OAAQA,EACR2J,mBAAoBA,EACpB4uB,yBAA0BA,UAMjCv4B,GACC,sCACwB,QAArB,EAAAA,EAAOc,sBAAc,aAArB,EAAuBC,QAAS,GAC/B,qCACE,cAAC,IAAK,CAACqnD,OAAK,EAACC,KAAK,QAAO,SACtB,cAAChgB,GAAQ,CAACroC,OAAQA,MAGrB,cAAC,IAAK,CAACqoD,KAAK,0BAAyB,SACnC,cAAC7G,GAAiB,CAACxhD,OAAQA,MAG7B,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,gBAAe,SAC/B,cAACrc,GAAO,CAAChsC,OAAQA,SAIvB,cAAC,IAAK,CAACooD,OAAK,EAACC,KAAK,kBAAiB,SAChC,cAAC7uB,GAAU,CAACx5B,OAAQA,EAAQ6J,aAAcA,aAenD,cAAC,IAAK,CAACu+C,OAAK,EAACC,KAAK,sBAAqB,SACpC,cAAC5lB,GAAa,CAACziC,OAAQA,EAAQ0iC,gBAAiBA,MAEnD,cAAC,IAAK,CAAC0lB,OAAK,EAACC,KAAK,0CAAyC,SACxD,cAACzX,GAAgB,MAEpB,cAAC,IAAK,CAACwX,OAAK,EAACC,KAAK,gEAA+D,SAC9E,cAACnG,GAAuB,MAE3B,cAAC,IAAK,CAACkG,OAAK,EAACC,KAAK,sEAAqE,SACpF,cAACvhB,GAAiB,MAErB,cAAC,IAAK,CAACshB,OAAK,EAACC,KAAK,oBAAmB,SACnC,cAACla,GAAkB,SASzB,SAASvkC,IACP,IAAM0+C,EAAc95C,GAAgB5E,iBACpC89C,EAAK99C,eAAe0+C,GACpBhB,EAAYgB,GACZviC,SAASvS,MAAQrJ,EAAE,kBACrB,CAEA,SAASN,GAAaswB,GAGpB,GAFArW,EAAUqW,GAENA,GAAaA,EAAU/4B,wBAAwBL,OAAS,EAAG,CAC7D,IAAIjB,EAAiB4O,aAAaC,QAAQ,kBAE1C,GAAI7O,EAAgB,CAClB,IAAIyoD,EAAOpuB,EAAU/4B,wBAAwBC,MAAK,SAACC,GAA2B,aAAe,QAAV,EAAAA,EAAIC,cAAM,aAAV,EAAYC,MAAO1B,CAAc,IAGlHy4B,GADEgwB,GAGuBpuB,EAAU/4B,wBAAwB,GAE/D,MACEm3B,GAAyB4B,EAAU/4B,wBAAwB,GAE/D,MACEm3B,GAAyB,MAG3B,OAAOv4B,CACT,CAEA,SAASu4B,GAAyBiwB,GAAuD,IAAD,IACtF3vB,EAAsB2vB,IACD,OAArBA,QAAqB,IAArBA,GAA6B,QAAR,EAArBA,EAAuBjnD,cAAM,WAAR,EAArB,EAA+BC,KAAMkN,aAAaI,QAAQ,iBAAuC,OAArB05C,QAAqB,IAArBA,GAA6B,QAAR,EAArBA,EAAuBjnD,cAAM,WAAR,EAArB,EAA+BC,GAC7G,CACF,IC7YeinD,GAZS,SAACC,GACnBA,GAAeA,aAAuBC,UACxC,8BAAqB99C,MAAK,YAAkD,IAA/C+9C,EAAM,EAANA,OAAQC,EAAM,EAANA,OAAQC,EAAM,EAANA,OAAQC,EAAM,EAANA,OAAQC,EAAO,EAAPA,QAC3DJ,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAQN,EACV,GAEJ,E,4BCNAhB,KAGGuB,IAAIC,MAKJD,IAAIE,MAGJC,KAAK,CACJC,YAAa76C,GAAgB2B,cAC7B3L,OAAO,EAEP8kD,cAAe,CACbC,aAAa,KAIJ7B,GAAI,E,OAAJA,I,mBCgJf,SAAS8B,KACP,OACE,qBAAK1+C,UAAU,iBAAgB,SAC7B,qBAAKA,UAAU,MAAK,SAClB,qBAAKA,UAAU,SAAQ,SACrB,cAAC4tB,GAAgB,SAK3B,CAtHA+wB,KAAQrzC,IACNszC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAJ,KACAK,KACAC,KACAC,KACArB,KACAsB,KACAC,KACAC,KACAC,MAGF13C,KAAO23C,OAAO,KAAM,CAClBC,OAAQ,gGAAuF7oD,MAAM,KACrG8oD,YAAa,0EAAiE9oD,MAAM,KACpF+oD,kBAAkB,EAClBC,SAAU,sDAAsDhpD,MAAM,KACtEipD,cAAe,qCAAqCjpD,MAAM,KAC1DkpD,YAAa,uBAAuBlpD,MAAM,KAC1CmpD,oBAAoB,EACpBC,eAAgB,CACdC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAERC,SAAU,CACRC,QAAS,wBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEZC,aAAc,CACZC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACH7Z,EAAG,aACH8Z,GAAI,aACJhxC,EAAG,YACHixC,GAAI,YACJ7Z,EAAG,UACH8Z,GAAI,WACJC,EAAG,UACHC,GAAI,UACJpb,EAAG,QACHqb,GAAI,UAENC,uBAAwB,gBACxBC,QAAS,SAAUjmC,GACjB,OAAOA,GAAqB,IAAXA,EAAe,KAAO,IACzC,EACAkmC,cAAe,QACfC,KAAM,SAAUngC,GACd,MAA2B,MAApBA,EAAMogC,OAAO,EACtB,EAMAC,SAAU,SAAUt5C,EAAOE,EAASq5C,GAClC,OAAOv5C,EAAQ,GAAK,KAAO,IAC7B,EACAw5C,KAAM,CACJC,IAAK,EACLC,IAAK,KAgBTC,qBAAW/oC,SAASC,eAAe,SAAwBvJ,OACzD,cAAC,WAAQ,CAACsyC,SAAU,cAACvF,GAAmB,IAAI,SAC1C,cAAC,IAAMwF,WAAU,UACf,cAAC,KAAY,CAACC,SAAUnqD,EAAa,SACnC,cAAC,IAAa,UACZ,cAAC,GAAG,aAUd2jD,I","file":"static/js/main.ac225658.chunk.js","sourcesContent":["import whiteLogo from \"./LOCKETGO_LOGO_RVB-Blanc.svg\";\r\nimport blackLogo from \"./LOCKETGO_LOGO_RVB-Noir.svg\";\r\nimport blueLogo from \"./LOCKETGO_LOGO_RVB-Bleu.svg\";\r\n\r\nexport enum AssetColors {\r\n  Blue,\r\n  Black,\r\n  White,\r\n}\r\n\r\nexport default function GetLocketgoLogoSource(assetColor: AssetColors): string | undefined {\r\n  let color = undefined;\r\n  switch (assetColor) {\r\n    case AssetColors.Black:\r\n      color = blackLogo;\r\n      break;\r\n    case AssetColors.White:\r\n      color = whiteLogo;\r\n      break;\r\n    case AssetColors.Blue:\r\n      color = blueLogo;\r\n      break;\r\n  }\r\n  return color;\r\n}\r\n","export default __webpack_public_path__ + \"static/media/LOCKETGO_LOGO_RVB-Blanc.c45760c3.svg\";","export default __webpack_public_path__ + \"static/media/LOCKETGO_LOGO_RVB-Noir.ecef7a0e.svg\";","export default __webpack_public_path__ + \"static/media/LOCKETGO_LOGO_RVB-Bleu.6dde3a9e.svg\";","import axios from \"axios\";\r\nimport authService from \"./auth/auth-service\";\r\n\r\nexport default class ServicesApiBaseService {\r\n  apiUrl: string | undefined = process.env.REACT_APP_SERVICESAPI_URL;\r\n\r\n  async getFile(url: string): Promise<Blob | undefined> {\r\n    const response = await axios.get<Blob>(url, { ...(await this.getHttpConfig()), responseType: \"blob\" }).catch((error) => {\r\n      return this.handleError(\"GET\", url, error);\r\n    });\r\n    return response?.data;\r\n  }\r\n\r\n  async getObject<T>(url: string): Promise<T | undefined> {\r\n    const response = await axios.get<T>(url, await this.getHttpConfig()).catch((error) => {\r\n      return this.handleError(\"GET\", url, error);\r\n    });\r\n    return response?.data;\r\n  }\r\n\r\n  async postObject<Tin, Tout>(url: string, data: Tin): Promise<Tout | undefined> {\r\n    const response = await axios.post<Tout>(url, data, await this.getHttpConfig()).catch((error) => {\r\n      return this.handleError(\"POST\", url, error);\r\n    });\r\n    return response?.data;\r\n  }\r\n\r\n  async deleteObject<Tout>(url: string): Promise<Tout | undefined> {\r\n    const response = await axios.delete<Tout>(url, await this.getHttpConfig()).catch((error) => {\r\n      return this.handleError(\"DELETE\", url, error);\r\n    });\r\n    return response?.data;\r\n  }\r\n\r\n  async putObject<Tin>(url: string, data: Tin): Promise<void> {\r\n    await axios.put<Tin>(url, data, await this.getHttpConfig()).catch((error) => {\r\n      return this.handleError(\"PUT\", url, error);\r\n    });\r\n  }\r\n\r\n  protected async getHttpConfig() {\r\n    return {\r\n      headers: { Authorization: `Bearer ${await authService.getAccessToken()}` },\r\n    };\r\n  }\r\n\r\n  private handleError(method: string, url: string, error: any) {\r\n    if (error.response) {\r\n      if (error.response.status === 404) {\r\n        return undefined;\r\n      }\r\n\r\n      console.error(`${method} ${url} error ${error.response.status} : '${error.response.statusText}'`);\r\n    } else if (error.message) {\r\n      console.error(`${method} ${url} error ${error.message}`);\r\n    } else {\r\n      console.error(`${method} ${url} unkown error`, error);\r\n    }\r\n\r\n    throw error;\r\n  }\r\n}\r\n","import ServicesApiBaseService from \"../services-api-base-service\";\r\nimport Member from \"./member\";\r\nimport { MyReservations } from \"./my-reservations\";\r\n\r\nclass MemberService extends ServicesApiBaseService {\r\n  async getMemberMe(): Promise<Member | undefined> {\r\n    return await this.getObject<Member>(`${this.apiUrl}/members/me`);\r\n  }\r\n\r\n  async getMembers(organizationId: String): Promise<Array<Member>> {\r\n    const members = await this.getObject<Array<Member>>(`${this.apiUrl}/admin/get-all-members?organizationId=${organizationId}`);\r\n    return members || [];\r\n  }\r\n\r\n  async createMember(member: Member): Promise<Member | undefined> {\r\n    return await this.postObject<Member, Member>(`${this.apiUrl}/members/me`, member);\r\n  }\r\n\r\n  async createContributor(member: Member): Promise<Member | undefined> {\r\n    return await this.postObject<Member, Member>(`${this.apiUrl}/admin/create-member`, member);\r\n  }\r\n\r\n  async updateMemberMe(member: Member): Promise<void> {\r\n    await this.putObject<Member>(`${this.apiUrl}/members/me`, member);\r\n  }\r\n\r\n  async addMemberRole(email: String, entityId: String, permission: String, entityType: String): Promise<any> {\r\n    var res = await this.postObject<any, any>(`${this.apiUrl}/admin/add-member-role`, {\r\n      status: \"Active\",\r\n      email: email,\r\n      entityId: entityId,\r\n      permission: permission,\r\n      entityType: entityType,\r\n    });\r\n    return res;\r\n  }\r\n\r\n  async updateMemberRole(email: String, entityId: String, permission: String, entityType: String, status: String): Promise<any> {\r\n    var res = await this.postObject<any, any>(`${this.apiUrl}/admin/change-member-role`, {\r\n      Active: status === \"Active\",\r\n      Email: email,\r\n      EntityId: entityId,\r\n      Permission: permission,\r\n      EntityType: entityType,\r\n    });\r\n    return res;\r\n  }\r\n\r\n  isLocketgoAdmin(member: Member | null): boolean {\r\n    if (!member) {\r\n      return false;\r\n    }\r\n\r\n    for (let i = 0; i < member.associatedHubs?.length; i++) {\r\n      if (member.associatedHubs[i].roles.includes(\"LocketgoAdmin\")) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  isLocketgoHubAdmin(member: Member | null): boolean {\r\n    if (!member) {\r\n      return false;\r\n    }\r\n\r\n    for (let i = 0; i < member.associatedHubs?.length; i++) {\r\n      if (member.associatedHubs[i].roles.includes(\"LocketgoHubAdmin\") || member.associatedHubs[i].roles.includes(\"LocketgoAdmin\")) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  isOrganizationAdmin(member: Member | null, organizationId: string | undefined): boolean {\r\n    if (this.isLocketgoAdmin(member)) {\r\n      return true;\r\n    }\r\n\r\n    if (!member || !organizationId || organizationId === undefined) {\r\n      return false;\r\n    }\r\n\r\n    const organisation = member.associatedOrganizations.find((org) => org.entity?.id === organizationId);\r\n\r\n    if (organisation) {\r\n      if (organisation.roles.includes(\"Admin\") && organisation.entity?.id === organizationId) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  isOrganizationContributor(member: Member | null, organizationId?: string | undefined): boolean {\r\n    if (this.isLocketgoAdmin(member)) {\r\n      return true;\r\n    }\r\n\r\n    if (!member) {\r\n      return false;\r\n    }\r\n\r\n    if (!organizationId || organizationId === undefined) {\r\n      for (let i = 0; i < member.associatedOrganizations?.length; i++) {\r\n        if (member.associatedOrganizations[i].roles.some((role) => role === \"Contributor\" || role === \"Admin\")) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      return false;\r\n    }\r\n\r\n    for (let i = 0; i < member.associatedOrganizations?.length; i++) {\r\n      const associated = member.associatedOrganizations[i];\r\n\r\n      if (associated.entity?.id !== organizationId) {\r\n        continue;\r\n      }\r\n\r\n      if (associated.roles.includes(\"Admin\") || associated.roles.includes(\"Contributor\")) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  isConcierge(member: Member | null): boolean {\r\n    if (!member) return false;\r\n\r\n    for (let i = 0; i < member.associatedHubs?.length; i++) {\r\n      if (member.associatedHubs[i].roles.includes(\"Concierge\")) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  isHubContributor(member: Member | null, hubId?: string | undefined): boolean {\r\n    if (this.isLocketgoAdmin(member) || this.isLocketgoHubAdmin(member)) {\r\n      return true;\r\n    }\r\n\r\n    if (!member) {\r\n      return false;\r\n    }\r\n\r\n    if (!hubId || hubId === undefined) {\r\n      for (let i = 0; i < member.associatedHubs?.length; i++) {\r\n        if (\r\n          member.associatedHubs[i].roles.some(\r\n            (role) => role === \"Contributor\" || role === \"Admin\" || role === \"LocketgoAdmin\" || role === \"LocketgoHubAdmin\"\r\n          )\r\n        ) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      return false;\r\n    }\r\n\r\n    for (let i = 0; i < member.associatedHubs?.length; i++) {\r\n      if (member.associatedHubs[i].entity?.id !== hubId) {\r\n        continue;\r\n      }\r\n\r\n      if (\r\n        member.associatedHubs[i].roles.some(\r\n          (role) => role === \"Contributor\" || role === \"Admin\" || role === \"LocketgoAdmin\" || role === \"LocketgoHubAdmin\"\r\n        )\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async getMyReservations(token: string | null): Promise<MyReservations | undefined> {\r\n    if (token) {\r\n      return await this.getObject<MyReservations>(`${this.apiUrl}/members/me/my-reservations?token=${token}`);\r\n    }\r\n\r\n    return await this.getObject<MyReservations>(`${this.apiUrl}/members/me/my-reservations`);\r\n  }\r\n}\r\n\r\nconst memberService = new MemberService();\r\nexport default memberService;\r\n","import StringHelpers from \"../core/string-helpers\";\r\nimport MemberRoleHub from \"./member-role-hub\";\r\nimport MemberRoleOrganization from \"./member-role-organization\";\r\n\r\nexport default class Member {\r\n  id: string = \"\";\r\n  type: string = \"User\";\r\n  referenceId: string = \"\";\r\n  firstname: string = \"\";\r\n  lastname: string = \"\";\r\n\r\n  streetNumber: string = \"\";\r\n  street: string = \"\";\r\n  city: string = \"\";\r\n  state: string = \"\";\r\n  country: string = \"\";\r\n  postalCode: string = \"\";\r\n  unit: string = \"\";\r\n\r\n  phone: string = \"\";\r\n  phoneExtension: number | undefined;\r\n  email: string = \"\";\r\n\r\n  externalId: string = \"\";\r\n  active: boolean = true;\r\n\r\n  features: Array<string> = new Array<string>();\r\n\r\n  associatedOrganizations: Array<MemberRoleOrganization> = [];\r\n  associatedHubs: Array<MemberRoleHub> = [];\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Configuration, LogLevel } from \"@azure/msal-browser\";\r\n\r\nconst AzureActiveDirectoryAppClientId: any = process.env.REACT_APP_ADB2C_CLIENT_ID;\r\n\r\nconst AzureActiveDirectoryKnownAuthorities: any = process.env.REACT_APP_ADB2C_KNOWN_AUTHORITIES;\r\n\r\nconst AzureActiveDirectoryScopes: any = process.env.REACT_APP_ADB2C_LOGIN_SCOPES;\r\n\r\n/**\r\n * Configuration object to be passed to MSAL instance on creation.\r\n * For a full list of MSAL.js configuration parameters, visit:\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md\r\n */\r\nexport const msalConfig: Configuration = {\r\n  auth: {\r\n    clientId: AzureActiveDirectoryAppClientId,\r\n    authority: process.env.REACT_APP_ADB2C_AUTHORITY,\r\n    knownAuthorities: AzureActiveDirectoryKnownAuthorities.split(\",\"),\r\n    redirectUri: process.env.REACT_APP_ADB2C_REDIRECT_URI,\r\n    postLogoutRedirectUri: process.env.REACT_APP_ADB2C_POST_LOGOUT_REDIRECT_URI,\r\n  },\r\n  cache: {\r\n    cacheLocation: \"sessionStorage\", // This configures where your cache will be stored\r\n    storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\r\n  },\r\n  system: {\r\n    loggerOptions: {\r\n      loggerCallback: (level, message, containsPii) => {\r\n        if (containsPii) {\r\n          return;\r\n        }\r\n        switch (level) {\r\n          case LogLevel.Error:\r\n            console.error(message);\r\n            return;\r\n          case LogLevel.Info:\r\n            console.info(message);\r\n            return;\r\n          case LogLevel.Verbose:\r\n            console.debug(message);\r\n            return;\r\n          case LogLevel.Warning:\r\n            console.warn(message);\r\n            return;\r\n        }\r\n      },\r\n    },\r\n  },\r\n};\r\n\r\n/**\r\n * Scopes you add here will be prompted for user consent during sign-in.\r\n * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request.\r\n * For more information about OIDC scopes, visit:\r\n * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes\r\n */\r\nexport const loginRequest = {\r\n  scopes: AzureActiveDirectoryScopes.split(\",\"),\r\n};\r\n\r\nexport const policyNames = {\r\n  signUpSignIn: process.env.REACT_APP_ADB2C_SIGNUP_SIGNIN_POLICY,\r\n};\r\n\r\nexport const acquireTokenRequest = {\r\n  scopes: AzureActiveDirectoryScopes.split(\",\"),\r\n};\r\n","import { PublicClientApplication } from \"@azure/msal-browser\";\r\nimport { msalConfig } from \"./authConfig\";\r\n\r\n/**\r\n * Initialize a PublicClientApplication instance which is provided to the MsalProvider component\r\n * We recommend initializing this outside of your root component to ensure it is not re-initialized on re-renders\r\n */\r\nconst msalInstance = new PublicClientApplication(msalConfig);\r\nexport default msalInstance;\r\n","import { AccountInfo, AuthenticationResult, EventType, InteractionType } from \"@azure/msal-browser\";\r\nimport { acquireTokenRequest, loginRequest } from \"./authConfig\";\r\nimport msalInstance from \"./msal-instance\";\r\n\r\nclass MsalService {\r\n  public registerCallback(callback: any) {\r\n    msalInstance.addEventCallback((message) => {\r\n      if (message.eventType === EventType.LOGIN_SUCCESS || message.eventType === EventType.ACQUIRE_TOKEN_SUCCESS) {\r\n        if (message.interactionType === InteractionType.Redirect) {\r\n          callback();\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  public async getToken(): Promise<AuthenticationResult | null> {\r\n    const account = this.getAccount();\r\n    if (!account) {\r\n      return null;\r\n    }\r\n\r\n    const request = {\r\n      ...acquireTokenRequest,\r\n      account: account,\r\n    };\r\n    try {\r\n      return await msalInstance.acquireTokenSilent(request);\r\n    } catch (error) {\r\n      console.error(`Error while acquiring token: ${error}`);\r\n      msalInstance.acquireTokenRedirect(request);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  public getAccount(): AccountInfo | null {\r\n    const accounts = msalInstance.getAllAccounts();\r\n    if (accounts && accounts.length > 0) {\r\n      return accounts[0];\r\n    }\r\n    return null;\r\n  }\r\n\r\n  public async login(loginType: string) {\r\n    if (loginType === \"popup\") {\r\n      await msalInstance.loginPopup(loginRequest).catch((e) => {\r\n        console.error(e);\r\n      });\r\n    } else if (loginType === \"redirect\") {\r\n      await msalInstance.loginRedirect(loginRequest).catch((e) => {\r\n        console.error(e);\r\n      });\r\n    }\r\n  }\r\n\r\n  public async logout(logoutType: string): Promise<void> {\r\n    if (logoutType === \"popup\") {\r\n      await msalInstance.logoutPopup({\r\n        postLogoutRedirectUri: \"/\",\r\n      });\r\n    } else if (logoutType === \"redirect\") {\r\n      await msalInstance.logoutRedirect({\r\n        postLogoutRedirectUri: \"/\",\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\nconst msalService = new MsalService();\r\nexport default msalService;\r\n","import Member from \"../member/member\";\r\n\r\nexport default class LoginResponse {\r\n  member: Member | null = null;\r\n  error: boolean = false;\r\n}\r\n","export default class StringHelpers {\r\n  static pluralize(count: number, textSingular: string): string {\r\n    return textSingular + (count > 1 ? \"s\" : \"\");\r\n  }\r\n\r\n  static getFullName(firstname: string | undefined, lastname: string | undefined): string {\r\n    if (firstname && lastname) {\r\n      return firstname + \" \" + lastname;\r\n    }\r\n\r\n    if (firstname) {\r\n      return firstname;\r\n    }\r\n\r\n    if (lastname) {\r\n      return lastname;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  static isStringOnlyNumbers(stringToVerify: string): boolean {\r\n    let regexp = new RegExp(\"^[0-9]*$\"),\r\n    test = regexp.test(stringToVerify);\r\n    \r\n    return test;\r\n  } \r\n\r\n  static getEmailRegExp(): RegExp {\r\n    // eslint-disable-next-line\r\n    return /^(?:[a-zA-Z0-9.!#$%&amp;'*+\\=?^_`{|}~-]+)(?:[\\.a-zA-Z0-9!#$%&amp;'*+\\=?^_`{|}~-]*)@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9]+$/;\r\n  }\r\n\r\n  static formatNumber(value: number, digits: number): string {\r\n    return value.toLocaleString(\"en-US\", {\r\n      minimumFractionDigits: 0,\r\n      maximumFractionDigits: digits,\r\n      useGrouping: false,\r\n    });\r\n  }\r\n\r\n  static formatPrice(amount: number, digits: number = 2): string {\r\n    return amount.toLocaleString(\"en-US\", {\r\n      minimumFractionDigits: digits,\r\n      maximumFractionDigits: digits,\r\n      useGrouping: true,\r\n    });\r\n  }\r\n}\r\n","import memberService from \"../member/member-service\";\r\nimport Member from \"../member/member\";\r\nimport msalService from \"./msal-service\";\r\nimport LoginResponse from \"./login-response\";\r\nimport StringHelpers from \"../core/string-helpers\";\r\n\r\nclass AuthService {\r\n  token: string | null = null;\r\n  tokenExpiresOn: Date | null = null;\r\n\r\n  public registerCallback(callback: any) {\r\n    msalService.registerCallback(callback);\r\n  }\r\n\r\n  public async autoLogin(): Promise<LoginResponse> {\r\n    var response = new LoginResponse();\r\n\r\n    const msalAccount = msalService.getAccount();\r\n    if (!msalAccount) {\r\n      console.log(\"autoLogin() --> No MSAL Account\");\r\n      return response;\r\n    }\r\n    // console.log(\"AuthService.autoLogin msalAccount\", msalAccount);\r\n\r\n    const tokenResult = await msalService.getToken();\r\n    // console.log(\"tokenResult\", tokenResult);\r\n    if (!tokenResult || !tokenResult.accessToken) {\r\n      console.log(\"AuthService.autoLogin() --> No token\");\r\n      return response;\r\n    }\r\n\r\n    try {\r\n      let account = await memberService.getMemberMe();\r\n      //console.log(\"AuthService.autoLogin() --> Account\", account);\r\n      if (!account) {\r\n        account = new Member();\r\n        account.email = msalAccount.username;\r\n        account = await this.createMember(msalAccount.username);\r\n      }\r\n\r\n      if (account) {\r\n        account.externalId = msalAccount.localAccountId;\r\n        console.log(\r\n          `AuthService.autoLogin() --> ${account.email}/${account.externalId} [${StringHelpers.getFullName(\r\n            account.firstname,\r\n            account.lastname\r\n          )}]}`\r\n        );\r\n      }\r\n\r\n      response.member = account || null;\r\n    } catch (error) {\r\n      console.error(\"autoLogin error\", error);\r\n      response.error = true;\r\n    }\r\n\r\n    return response;\r\n  }\r\n\r\n  public async login(): Promise<LoginResponse> {\r\n    await msalService.login(process.env.REACT_APP_ADB2C_LOGIN_TYPE || \"redirect\");\r\n\r\n    return await this.autoLogin();\r\n  }\r\n\r\n  public async logout(): Promise<void> {\r\n    await msalService.logout(process.env.REACT_APP_ADB2C_LOGIN_TYPE || \"redirect\");\r\n  }\r\n\r\n  public async getAccessToken(): Promise<string | null> {\r\n    if (!this.tokenExpiresOn || this.tokenExpiresOn.getTime() < Date.now()) {\r\n      const tokenResult = await msalService.getToken();\r\n      // console.info(\"tokenResult\", tokenResult);\r\n      if (!tokenResult || !tokenResult.accessToken) {\r\n        return null;\r\n      }\r\n\r\n      this.token = tokenResult.accessToken;\r\n      this.tokenExpiresOn = tokenResult.expiresOn;\r\n    }\r\n\r\n    return this.token;\r\n  }\r\n\r\n  private async createMember(email: string): Promise<Member | undefined> {\r\n    let accountToCreate = new Member();\r\n    accountToCreate.email = email;\r\n\r\n    try {\r\n      const account = await memberService.createMember(accountToCreate);\r\n      if (!account) {\r\n        console.error(\"AuthService.Unable to create the Member Account\", email);\r\n        return undefined;\r\n      }\r\n\r\n      console.log(\"AuthService.Account(Me) created.\", account);\r\n      return account;\r\n    } catch (error) {\r\n      return undefined;\r\n    }\r\n  }\r\n}\r\n\r\nconst authService = new AuthService();\r\nexport default authService;\r\n","import ServicesApiBaseService from \"../services-api-base-service\";\r\nimport Organization from \"../organization/organization\";\r\nimport Microsite from \"../micro-site/microsite\";\r\n\r\nclass OrganizationService extends ServicesApiBaseService {\r\n  async createOrganization(organization: Organization): Promise<Organization | undefined> {\r\n    return await this.postObject<Organization, Organization>(`${this.apiUrl}/organizations`, organization);\r\n  }\r\n\r\n  async updateOrganization(\r\n    organizationId: string,\r\n    streetNumber: string,\r\n    street: string,\r\n    city: string,\r\n    postalCode: string,\r\n    state: string,\r\n    country: string,\r\n    active?: boolean\r\n  ) {\r\n    await this.putObject<any>(`${this.apiUrl}/organizations/${organizationId}`, {\r\n      organizationId,\r\n      streetNumber,\r\n      street,\r\n      city,\r\n      postalCode,\r\n      state,\r\n      country,\r\n      active: active ?? true,\r\n    });\r\n  }\r\n  async getOrganizationById(organizationId: string): Promise<Organization | null> {\r\n    const Organization = await this.getObject<Organization>(`${this.apiUrl}/organizations/${organizationId}`);\r\n    return Organization || null;\r\n  }\r\n\r\n  async getAllMicrositesOfOrganization(organizationId: string): Promise<Array<Microsite>> {\r\n    var microsites = await this.getObject<Array<Microsite>>(`${this.apiUrl}/organizations/${organizationId}/microsites`);\r\n    if (microsites) {\r\n      microsites = microsites.filter(function (microsite) {\r\n        return microsite.active;\r\n      });\r\n      microsites.forEach((microsite) => {\r\n        if (microsite) {\r\n          if (microsite.name) {\r\n            microsite.name = new Map(Object.entries(microsite?.name));\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    return microsites || [];\r\n  }\r\n}\r\n\r\nconst organizationService = new OrganizationService();\r\nexport default organizationService;\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link } from \"react-router-dom\";\r\nimport authService from \"../services/auth/auth-service\";\r\nimport Member from \"../services/member/member\";\r\nimport MemberRoleOrganization from \"../services/member/member-role-organization\";\r\nimport memberService from \"../services/member/member-service\";\r\nimport organizationService from \"../services/member/organization-service\";\r\nimport GetLocketgoLogoSource, { AssetColors } from \"../assets/assets-colors\";\r\n\r\ninterface IHeaderNavBarProps {\r\n  member: Member;\r\n  activeOrganization: MemberRoleOrganization | null;\r\n  changeLanguage: any;\r\n  changeMember: any;\r\n}\r\n\r\nfunction HeaderNavbar(props: IHeaderNavBarProps) {\r\n  const { member, activeOrganization, changeLanguage, changeMember } = props;\r\n  const [isNavCollapsed, setIsNavCollapsed] = useState(true);\r\n\r\n  const [micrositesLength, setMicrositesLength] = useState<number>(0);\r\n\r\n  const { t } = useTranslation();\r\n  const orgContributor = memberService.isOrganizationContributor(member, activeOrganization?.entity?.id);\r\n\r\n  const collapseClasses = `${isNavCollapsed ? \"collapse\" : \"\"} navbar-collapse`;\r\n\r\n  const onItemClick = () => {\r\n    setIsNavCollapsed(true);\r\n  };\r\n\r\n  async function login(): Promise<void> {\r\n    const loginResponse = await authService.login();\r\n    changeMember(loginResponse.member);\r\n  }\r\n\r\n  let accountDisplay = \"<unkown>\";\r\n  if (member) {\r\n    accountDisplay = member.firstname;\r\n    if (!accountDisplay && member.email) {\r\n      accountDisplay = member.email;\r\n    }\r\n  }\r\n\r\n  useEffect(\r\n    () => {\r\n      if (member) {\r\n        let organizationId = activeOrganization?.entity?.id;\r\n        if (organizationId) {\r\n          let organization = member.associatedOrganizations.find((organization) => organization.entity?.id == organizationId);\r\n          if (member && organization && memberService.isOrganizationContributor(member, organizationId)) {\r\n            organizationService.getAllMicrositesOfOrganization(organizationId).then((microsites) => {\r\n              setMicrositesLength(microsites.length);\r\n            });\r\n          }\r\n        }\r\n      }\r\n    },\r\n    // eslint-disable-next-line\r\n    [activeOrganization]\r\n  );\r\n\r\n  return (\r\n    <nav className=\"navbar navbar-expand-lg fixed-top shadow\">\r\n      <div className=\"container\">\r\n        <HeaderIcon logo={AssetColors.White} />\r\n\r\n        <button\r\n          className=\"navbar-toggler\"\r\n          type=\"button\"\r\n          data-bs-toggle=\"collapse\"\r\n          data-bs-target=\"#navbarCollapse\"\r\n          aria-controls=\"navbarCollapse\"\r\n          aria-expanded={!isNavCollapsed}\r\n          aria-label=\"Toggle navigation\"\r\n          onClick={() => setIsNavCollapsed(!isNavCollapsed)}\r\n        >\r\n          <span>\r\n            <FontAwesomeIcon color=\"white\" icon={[\"fas\", \"bars\"]} />\r\n          </span>\r\n        </button>\r\n\r\n        <div className={collapseClasses} id=\"navbarCollapse\">\r\n          <ul className=\"navbar-nav me-auto mb-2 mb-md-0\">\r\n            {member && (\r\n              <>\r\n                {orgContributor && (\r\n                  <>\r\n                    <li className=\"nav-item\">\r\n                      <Link className=\"nav-link\" to=\"/orders\" onClick={onItemClick}>\r\n                        {t(\"common.locker-orders\")}\r\n                      </Link>\r\n                    </li>\r\n                    <li className=\"nav-item\">\r\n                      <Link className=\"nav-link\" to=\"/customers\" onClick={onItemClick}>\r\n                        {t(\"common.customers\")}\r\n                      </Link>\r\n                    </li>\r\n\r\n                    {memberService.isLocketgoAdmin(member) && (\r\n                      <li className=\"nav-item\">\r\n                        <Link className=\"nav-link\" to=\"/database-admin\" onClick={onItemClick}>\r\n                          {t(\"common.adminPage\")}\r\n                        </Link>\r\n                      </li>\r\n                    )}\r\n\r\n                    {(micrositesLength > 0 || memberService.isLocketgoAdmin(member)) && (\r\n                      <li className=\"nav-item\">\r\n                        <Link className=\"nav-link\" to={`/organizations/${activeOrganization?.entity?.id}/microsites`} onClick={onItemClick}>\r\n                          {t(\"common.microsites\")}\r\n                        </Link>\r\n                      </li>\r\n                    )}\r\n                  </>\r\n                )}\r\n\r\n                {member.associatedHubs?.length > 0 && (\r\n                  <li className=\"nav-item\">\r\n                    <Link className=\"nav-link\" to=\"/hubs\" onClick={onItemClick}>\r\n                      {t(\"common.hubs\")}\r\n                    </Link>\r\n                  </li>\r\n                )}\r\n              </>\r\n            )}\r\n          </ul>\r\n\r\n          <ul className=\"navbar-nav mr-auto align-items-center\">\r\n            {member && member.associatedOrganizations?.length > 0 && (\r\n              <>\r\n                <li className=\"nav-item nav-item-space-right\">\r\n                  <Link className=\"nav-link\" to=\"/organizations\" onClick={onItemClick}>\r\n                    {activeOrganization?.entity?.name.toUpperCase()}\r\n                  </Link>\r\n                </li>\r\n              </>\r\n            )}\r\n\r\n            {member && (\r\n              <>\r\n                <li className=\"nav-item nav-item-space-right nav-item-user\">\r\n                  <Link className=\"nav-link\" to=\"/member-profile\" onClick={onItemClick}>\r\n                    <FontAwesomeIcon icon={[\"fas\", \"user\"]} />\r\n                    <span>{accountDisplay.toUpperCase()}</span>\r\n                  </Link>\r\n                </li>\r\n              </>\r\n            )}\r\n            {!member && (\r\n              <li className=\"nav-item nav-item-space-right\">\r\n                <button\r\n                  className=\"nav-link\"\r\n                  onClick={async () => {\r\n                    onItemClick();\r\n                    await login();\r\n                  }}\r\n                >\r\n                  {t(\"account.login\")}\r\n                </button>\r\n              </li>\r\n            )}\r\n            <li className=\"nav-item\">\r\n              <button\r\n                className=\"nav-link\"\r\n                onClick={() => {\r\n                  onItemClick();\r\n                  changeLanguage();\r\n                }}\r\n              >\r\n                {t(\"language.display\")}\r\n              </button>\r\n            </li>\r\n          </ul>\r\n        </div>\r\n      </div>\r\n    </nav>\r\n  );\r\n}\r\n\r\ninterface IHeaderIconProps {\r\n  logo: AssetColors;\r\n}\r\n\r\nfunction HeaderIcon(props: IHeaderIconProps) {\r\n  let imgSource = GetLocketgoLogoSource(props.logo);\r\n  return (\r\n    <Link className=\"navbar-brand\" to=\"/\">\r\n      <img src={imgSource} alt=\"logo\" className=\"app-logo\" />\r\n    </Link>\r\n  );\r\n}\r\n\r\nexport { HeaderNavbar, HeaderIcon };\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { AssetColors } from \"../../assets/assets-colors\";\r\nimport { HeaderIcon } from \"../../components/header\";\r\nimport authService from \"../../services/auth/auth-service\";\r\nimport \"./signup-page.scss\";\r\n\r\ntype Props = {\r\n  changeMember: any;\r\n  changeLanguage: any;\r\n};\r\n\r\nexport default function SignUpPage(props: Props) {\r\n  const { changeMember, changeLanguage } = props;\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  return (\r\n    <>\r\n      <header>\r\n        <div className=\"container page sign-up-page\">\r\n          <div className=\"row\">\r\n            <div className=\"col-12 col-md-10 col-lg-8 offset-md-1 offset-lg-2\">\r\n              <nav className=\"navbar reset\">\r\n                <ul className=\"navbar-nav align-items-center ms-auto\">\r\n                  <li className=\"nav-item\">\r\n                    <button className=\"nav-link\" onClick={changeLanguage}>\r\n                      <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"globe\"]} />\r\n                      {t(\"language.display-long\")}\r\n                    </button>\r\n                  </li>\r\n                </ul>\r\n              </nav>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </header>\r\n\r\n      <div className=\"container page sign-up-page\">\r\n        <div className=\"row\">\r\n          <div className=\"col-12 col-md-10 col-lg-8 offset-md-1 offset-lg-2\">\r\n            <div className=\"card card-rounded card-full\">\r\n              <div className=\"row\">\r\n                <div className=\"col col-xl-8\">\r\n                  <div className=\"logo\">\r\n                    <HeaderIcon logo={AssetColors.Blue} />\r\n                  </div>\r\n\r\n                  <div className=\"card-left\">\r\n                    <div className=\"card-body\">\r\n                      <h5>{t(\"home-not-signed.title\")}</h5>\r\n                      <h6>{t(\"home-not-signed.subtitle\")}</h6>\r\n\r\n                      <div>\r\n                        <button id=\"sign-up-btn\" className=\"btn btn-lg btn-primary\" onClick={async () => await login()}>\r\n                          {t(\"home-not-signed.sign-up\")}\r\n                        </button>\r\n                      </div>\r\n\r\n                      <div className=\"section-login\">\r\n                        <label>{t(\"home-not-signed.already-have-account\")}</label>\r\n                        <button className=\"nav-link btn-login\" onClick={async () => await login()}>\r\n                          {t(\"home-not-signed.login\")}\r\n                        </button>\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n                <div className=\"card-right d-none d-xl-inline-block col-4 gx-0\">\r\n                  <img className=\"img-fluid\" src=\"/images/sign-up.jpg\" alt=\"\" />\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n\r\n  async function login(): Promise<void> {\r\n    const loginResponse = await authService.login();\r\n\r\n    let response = await changeMember(loginResponse.member);\r\n    if (response) {\r\n      history.push(\"/\");\r\n    }\r\n  }\r\n}\r\n","import { Carrier } from \"../carrier/carrier\";\r\nimport { Address } from \"../core/address\";\r\nimport { Reservation } from \"../order/reservation\";\r\nimport { FlowConfigs } from \"./flow-configs\";\r\nimport { Group } from \"./group\";\r\nimport { HubActivity } from \"./hub-activity\";\r\nimport { ReservationDeny } from \"./reservation-deny\";\r\n\r\nexport enum HubStates {\r\n  Unknown = 0,\r\n  Online = 1,\r\n  Offline = 2,\r\n}\r\n\r\nexport class Hub {\r\n  id: string = \"\";\r\n  name: string = \"\";\r\n  zoneName: string = \"\";\r\n  description: string = \"\";\r\n  flowConfigs: FlowConfigs = new FlowConfigs();\r\n  private: boolean = false;\r\n  address: Address = new Address();\r\n  model: string = \"\";\r\n  state: string = \"\";\r\n  groups: Array<Group> = [];\r\n  lat: number = 0;\r\n  lng: number = 0;\r\n  carriers: Array<Carrier> = [];\r\n  version: string = \"\";\r\n  active: boolean = true;\r\n}\r\n\r\nexport class Kiosk {\r\n  position: string = \"\";\r\n  sizeId: string = \"\";\r\n}\r\n\r\nexport class MyHub {\r\n  id: string = \"\";\r\n  name: string = \"\";\r\n  zoneName: string = \"\";\r\n  description: string = \"\";\r\n  flowConfigs: FlowConfigs = new FlowConfigs();\r\n  version: string = \"\";\r\n  computerMetrics: any;\r\n  lastSynchronization: string = \"\";\r\n  private: boolean = false;\r\n  active: boolean = true;\r\n  address: Address = new Address();\r\n  model: string = \"\";\r\n  state: string = \"\";\r\n  groups: Array<Group> = [];\r\n  lat: number = 0;\r\n  lng: number = 0;\r\n\r\n  carriers: Array<Carrier> = [];\r\n  reservationDenies: Array<ReservationDeny> = [];\r\n  reservations: Array<Reservation> = [];\r\n  kiosk: Kiosk | null = null;\r\n\r\n  activities: Array<HubActivity> = [];\r\n}\r\n","export class Address {\r\n  streetNumber: string = \"\";\r\n  street: string = \"\";\r\n  city: string = \"\";\r\n  postalCode: string = \"\";\r\n  state: string = \"\";\r\n  country: string = \"\";\r\n  lat: string = \"\";\r\n  lng: string = \"\";\r\n}\r\n","export class FlowConfigs {\r\n  organizationId: string = \"\";\r\n  personalStorageEnabled: boolean = false;\r\n  parcelEnabled: boolean = false;\r\n  customerSelectionEnabled: boolean = false;\r\n  rfidEnabled: boolean = false;\r\n  orderLookupEnabled: boolean = false;\r\n  isRiderLocker: boolean = false;\r\n  hasObjectDetection: boolean = false;\r\n}\r\n","import languageService from \"../core/language-service\";\r\nimport ServicesApiBaseService from \"../services-api-base-service\";\r\nimport { Order, OrderFlow } from \"./order\";\r\n\r\nexport enum OrderState {\r\n  Active = \"Active\",\r\n  Cancelled = \"Cancelled\",\r\n  Completed = \"Completed\",\r\n}\r\n\r\nclass OrderService extends ServicesApiBaseService {\r\n  // GET\r\n  async getOrders(organizationId: string, state: string, start?: string, end?: string): Promise<Array<Order>> {\r\n    const orders = await this.getObject<Array<Order>>(\r\n      `${this.apiUrl}/organizations/${organizationId}/orders?state=${state}${start ? `&start=${start}` : \"\"}${end ? `&end=${end}` : \"\"}`\r\n    );\r\n    return orders || [];\r\n  }\r\n\r\n  async getOrderById(organizationId: string, id: string, token: string | null = null): Promise<Order | null> {\r\n    let tokenTmp = token !== null ? `?token=${token}` : \"\";\r\n    const order = await this.getObject<Order>(`${this.apiUrl}/organizations/${organizationId}/orders/${id + tokenTmp}`);\r\n    return order || null;\r\n  }\r\n\r\n  async getAvailableCompartmentSizeIds(\r\n    organizationId: string,\r\n    hubId: string,\r\n    orderFlow: OrderFlow,\r\n    start?: string,\r\n    end?: string\r\n  ): Promise<Array<string>> {\r\n    const sizeIds = await this.postObject<any, Array<string>>(\r\n      `${this.apiUrl}/organizations/${organizationId}/orders/actions/availablesizes`,\r\n      { hubId: hubId, orderFlow: orderFlow, start: start, end: end }\r\n    );\r\n    return sizeIds || [];\r\n  }\r\n\r\n  async getAsset(organizationId: string, orderId: string, assetId: string): Promise<Blob | null> {\r\n    let label = await this.getFile(`${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/assets/${assetId}`);\r\n    return label || null;\r\n  }\r\n\r\n  // POST\r\n  async createOrder(\r\n    hubId: string,\r\n    organizationId: string,\r\n    phoneNumber: string,\r\n    email: string,\r\n    firstname: string | undefined,\r\n    lastname: string | undefined,\r\n    language: string | undefined,\r\n    packagingOptionId: string | undefined,\r\n    carrierId: string | undefined,\r\n    flow: OrderFlow,\r\n    referenceNumber: string | undefined\r\n  ): Promise<number | undefined> {\r\n    return await this.postObject<any, number>(`${this.apiUrl}/organizations/${organizationId}/orders`, {\r\n      firstName: firstname,\r\n      lastName: lastname,\r\n      email: email,\r\n      phone: phoneNumber,\r\n      language: language || languageService.getLanguage(),\r\n      hubId: hubId,\r\n      packagingOptionId: packagingOptionId,\r\n      flow: flow,\r\n      carrierId: carrierId,\r\n      referenceNumber: referenceNumber,\r\n    });\r\n  }\r\n\r\n  async createOrderItem(\r\n    organizationId: string,\r\n    orderId: string,\r\n    sizeId: string,\r\n    height?: number,\r\n    width?: number,\r\n    depth?: number,\r\n    weight?: number\r\n  ): Promise<number | undefined> {\r\n    return await this.postObject<any, number>(`${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/items?reserve=true`, {\r\n      description: \"\",\r\n      height: height,\r\n      width: width,\r\n      depth: depth,\r\n      weight: weight,\r\n      sizeId: sizeId,\r\n    });\r\n  }\r\n\r\n  async relocateReservation(\r\n    organizationId: string,\r\n    orderId: string,\r\n    orderItemId: string,\r\n    sizeId?: string,\r\n    reservationStart?: string,\r\n    reservationEnd?: string\r\n  ): Promise<number | undefined> {\r\n    return await this.postObject<any, number>(\r\n      `${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/items/${orderItemId}/relocate`,\r\n      { sizeId: sizeId, reservationStart: reservationStart, reservationEnd: reservationEnd }\r\n    );\r\n  }\r\n\r\n  async openDoor(organizationId: string, orderId: string, orderItemId: string, reason: string, token: string | null): Promise<void> {\r\n    let url = `${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/items/${orderItemId}/actions/opendoor`;\r\n    if (token) {\r\n      url += `?token=${token}`;\r\n    }\r\n\r\n    await this.postObject(url, {\r\n      requestingFrom: \"portal\",\r\n      reason: reason,\r\n    });\r\n  }\r\n\r\n  async sendReadyForPickupNotification(organizationId: string, orderId: string) {\r\n    await this.postObject(`${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/notify`, null);\r\n  }\r\n\r\n  async requestCarrierPickup(organizationId: string, orderId: string): Promise<Order | null> {\r\n    let order = await this.postObject<any, Order>(\r\n      `${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/actions/requestcarrierpickup`,\r\n      null\r\n    );\r\n    return order || null;\r\n  }\r\n\r\n  async cancelCarrierPickup(organizationId: string, orderId: string): Promise<Order | null> {\r\n    let order = await this.postObject<any, Order>(\r\n      `${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/actions/cancelcarrierpickup`,\r\n      null\r\n    );\r\n    return order || null;\r\n  }\r\n\r\n  async completeBopilOrder(organizationId: string, orderId: string): Promise<any> {\r\n    return await this.postObject(`${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/complete`, null);\r\n  }\r\n\r\n  async endOrder(organizationId: string, orderId: string, token: string) {\r\n    return await this.postObject(\r\n      `${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/end${token ? `?token=${token}` : \"\"}`,\r\n      null\r\n    );\r\n  }\r\n\r\n  // PUT\r\n  async updateOrderItem(\r\n    organizationId: string,\r\n    orderId: string,\r\n    orderItemId: string,\r\n    trackingNumbers: Array<string>,\r\n    deleteTrackingNumber?: boolean\r\n  ): Promise<any> {\r\n    let url = `${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/items/${orderItemId}`;\r\n    return await this.putObject(url, { trackingNumbers, deleteTrackingNumber });\r\n  }\r\n\r\n  // DELETE\r\n\r\n  async cancelOrder(organizationId: string, orderId: string): Promise<void> {\r\n    await this.deleteObject(`${this.apiUrl}/organizations/${organizationId}/orders/${orderId}`);\r\n  }\r\n\r\n  async deleteOrderItem(organizationId: string, orderId: string, orderItemId: string) {\r\n    return await this.deleteObject(`${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/items/${orderItemId}`);\r\n  }\r\n\r\n  async cancelOrderItem(organizationId: string, orderId: string, orderItemId: string): Promise<void> {\r\n    await this.deleteObject(`${this.apiUrl}/organizations/${organizationId}/orders/${orderId}/items/${orderItemId}`);\r\n  }\r\n}\r\n\r\nconst orderService = new OrderService();\r\nexport default orderService;\r\n","import ServicesApiBaseService from \"../services-api-base-service\";\r\nimport { Hub, MyHub } from \"./hub\";\r\nimport { HubActivity } from \"./hub-activity\";\r\n\r\nexport class HubService extends ServicesApiBaseService {\r\n  async getHubById(id: string): Promise<Hub> {\r\n    const hub = await this.getObject<Hub>(`${this.apiUrl}/hubs/${id}?details=true`);\r\n    return hub || new Hub();\r\n  }\r\n\r\n  async getHubsByIds(ids: Array<string>): Promise<Array<Hub>> {\r\n    const hubs = await this.postObject<Array<string>, Array<Hub>>(`${this.apiUrl}/hubs/with-ids?details=true`, ids);\r\n    hubs?.sort((a, b) => a.name.localeCompare(b.name));\r\n    return hubs || [];\r\n  }\r\n\r\n  async getHubs(): Promise<Array<Hub>> {\r\n    const hubs = await this.getObject<Array<Hub>>(`${this.apiUrl}/hubs?details=true`);\r\n    hubs?.sort((a, b) => a.name.localeCompare(b.name));\r\n    return hubs || [];\r\n  }\r\n\r\n  async getMyHubs(): Promise<Array<Hub>> {\r\n    const hubs = await this.getObject<Array<Hub>>(`${this.apiUrl}/myhubs`);\r\n    hubs?.sort((a, b) => a.name.localeCompare(b.name));\r\n    return hubs || [];\r\n  }\r\n\r\n  async getMyHubById(id: string): Promise<MyHub> {\r\n    const hub = await this.getObject<MyHub>(`${this.apiUrl}/myhubs/${id}`);\r\n    return hub || new MyHub();\r\n  }\r\n\r\n  async activateLockerReservation(hubId: string, groupId: string, compartmentNumber: string): Promise<boolean> {\r\n    try {\r\n      await this.postObject(`${this.apiUrl}/hubs/${hubId}/groups/${groupId}/compartments/${compartmentNumber}/actions/activate`, {});\r\n      return true;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async deactivateLockerReservation(hubId: string, groupId: string, compartmentNumber: string): Promise<boolean> {\r\n    try {\r\n      await this.postObject(`${this.apiUrl}/hubs/${hubId}/groups/${groupId}/compartments/${compartmentNumber}/actions/deactivate`, {});\r\n      return true;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async activateAllLockers(hubId: string): Promise<boolean> {\r\n    try {\r\n      await this.postObject(`${this.apiUrl}/hubs/${hubId}/actions/activatealldoors`, {});\r\n      return true;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async deactivateAllLockers(hubId: string): Promise<boolean> {\r\n    try {\r\n      await this.postObject(`${this.apiUrl}/hubs/${hubId}/actions/deactivatealldoors`, {});\r\n      return true;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async openDoor(hubId: string, groupId: string, compartmentNumber: string, side: string): Promise<boolean> {\r\n    try {\r\n      await this.postObject(\r\n        `${this.apiUrl}/hubs/${hubId}/groups/${groupId}/compartments/${compartmentNumber}/actions/opendoor?side=${side}`,\r\n        {}\r\n      );\r\n      return true;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async openAllDoors(hubIid: string): Promise<void> {\r\n    try {\r\n      await this.postObject<any, any>(`${this.apiUrl}/hubs/${hubIid}/actions/openalldoors?requestedfrom=portal`, {});\r\n    } catch (e) {}\r\n  }\r\n\r\n  async toggleDoor(hubIid: string, groupId: string, compartmentNumber: string): Promise<boolean> {\r\n    try {\r\n      await this.postObject(`${this.apiUrl}/hubs/${hubIid}/groups/${groupId}/compartments/${compartmentNumber}/actions/toggledoor`, {});\r\n      return true;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async getHubActivities(hubId: string, activitiesMultiplier: number): Promise<Array<HubActivity>> {\r\n    try {\r\n      let activities = await this.getObject<Array<HubActivity>>(\r\n        `${this.apiUrl}/hubs/${hubId}/activities?activitiesMultiplier=${activitiesMultiplier}`\r\n      );\r\n      return activities || [];\r\n    } catch (e) {\r\n      return [];\r\n    }\r\n  }\r\n}\r\n\r\nconst hubService = new HubService();\r\nexport default hubService;\r\n","class LanguageService {\r\n  language: string = \"en\";\r\n\r\n  constructor() {\r\n    this.language = localStorage.getItem(\"language\") || (window.navigator.language.includes(\"fr\") ? \"fr\" : \"en\");\r\n  }\r\n\r\n  getLanguage(): string {\r\n    return this.language;\r\n  }\r\n\r\n  changeLanguage(): string {\r\n    if (this.language === \"fr\") {\r\n      this.language = \"en\";\r\n    } else {\r\n      this.language = \"fr\";\r\n    }\r\n    localStorage.setItem(\"language\", this.language);\r\n\r\n    // console.log(`languageService.changeLanguage --> ${this.language}`);\r\n    return this.language;\r\n  }\r\n}\r\n\r\nconst languageService = new LanguageService();\r\nexport default languageService;\r\n","export enum NotifyLevel {\r\n  None = \"None\",\r\n  Medium = \"Medium\",\r\n  High = \"High\",\r\n}\r\n","export class Customer {\r\n  id: string = \"\";\r\n  firstname: string = \"\";\r\n  lastname: string = \"\";\r\n  phone: string = \"\";\r\n  email: string = \"\";\r\n  referenceId: string = \"\";\r\n  unit: string = \"\";\r\n}\r\n","import { NotifyLevel } from \"../core/notification-level\";\r\nimport { Payment } from \"../payment/payment\";\r\nimport { Customer } from \"./customer\";\r\nimport { OrderActivity } from \"./order-activity\";\r\nimport { OrderItem } from \"./order-item\";\r\n\r\nexport enum OrderFlow {\r\n  Deliver = 0,\r\n  Return = 2,\r\n  PersonalStorage = 3,\r\n}\r\n\r\nexport enum OrderFlowStringValue {\r\n  Deliver = \"Deliver\",\r\n  Return = \"Return\",\r\n  PersonalStorage = \"PersonalStorage\",\r\n}\r\n\r\nexport class Order {\r\n  id: string = \"\";\r\n  customer: Customer = new Customer();\r\n  payments: Array<Payment> | undefined = undefined;\r\n  organizationId: string = \"\";\r\n  orderDate: string = \"\";\r\n  referenceNumber: string = \"\";\r\n  hubId: string = \"\";\r\n  state: string = \"\";\r\n  flow: OrderFlow = OrderFlow.Deliver;\r\n  deleted: number = 0;\r\n  packagingOptionId: string = \"\";\r\n  carrierId: string | undefined = undefined;\r\n  carrierSubmissionReferenceNumber: string = \"\";\r\n\r\n  items: Array<OrderItem> = [];\r\n  activities: Array<OrderActivity> = [];\r\n\r\n  notifyLevel: NotifyLevel = NotifyLevel.None;\r\n}\r\n","export enum ReservationState {\r\n  New = \"New\",\r\n  ReadyForPickUp = \"ReadyForPickUp\",\r\n  PackagingReadyForPickUp = \"PackagingReadyForPickUp\",\r\n  Completed = \"Completed\",\r\n  Canceled = \"Canceled\",\r\n}\r\n","import { Order, OrderFlowStringValue } from \"./order\";\r\nimport { OrderActivity } from \"./order-activity\";\r\nimport { OrderItem } from \"./order-item\";\r\nimport { ReservationState } from \"./ReservationState\";\r\n\r\nexport class OrderHelpers {\r\n  static getOrderLockers(order: Order): string {\r\n    let lockers = \"\";\r\n    order.items.forEach((orderItem) => {\r\n      if (orderItem?.reservation) {\r\n        let groupId = orderItem?.reservation?.groupId;\r\n        let compartmentNumber = orderItem?.reservation?.compartmentNumber;\r\n\r\n        if (groupId || compartmentNumber) {\r\n          if (lockers.length > 0) {\r\n            lockers += \", \";\r\n          }\r\n          lockers += /^\\d+$/.test(compartmentNumber) ? compartmentNumber : groupId + compartmentNumber;\r\n        }\r\n      }\r\n    });\r\n    //console.log(lockers);\r\n    return lockers;\r\n  }\r\n\r\n  static getOrderStateStyle(state: string, isPersonalStorage: boolean): string {\r\n    if (isPersonalStorage) {\r\n      return this.getPersonalStorageOrderStateBadgeStyle(state);\r\n    } else {\r\n      return this.getBopilOrderStateBadgeStyle(state);\r\n    }\r\n  }\r\n\r\n  static getBopilOrderStateBadgeStyle(state: string): string {\r\n    switch (state) {\r\n      case \"LoadingStarted\":\r\n      case \"ReadyForPickUp\":\r\n      case \"PackagingReadyForPickUp\":\r\n      case \"PackagingPickUpStarted\":\r\n      case \"PickUpStarted\":\r\n      case \"PartiallyCompleted\":\r\n        return \"badge badge-outline text-warning\";\r\n      case \"Completed\":\r\n        return \"badge badge-outline text-muted\";\r\n      case \"NoReservation\":\r\n        return \"badge badge-outline text-dark\";\r\n      case \"Cancelled\":\r\n        return \"badge badge-outline text-danger\";\r\n      default:\r\n        return \"badge badge-outline text-info\";\r\n    }\r\n  }\r\n\r\n  static getPersonalStorageOrderStateBadgeStyle(state: string): string {\r\n    switch (state) {\r\n      case \"LoadingStarted\":\r\n      case \"ReadyForPickUp\":\r\n        return \"badge badge-outline text-warning\";\r\n      case \"Completed\":\r\n        return \"badge badge-outline text-muted\";\r\n      case \"Cancelled\":\r\n        return \"badge badge-outline text-danger\";\r\n      default:\r\n        return \"badge badge-outline text-success\";\r\n    }\r\n  }\r\n\r\n  static getActivityDescription(activity: OrderActivity, language: string): string {\r\n    if (!activity.description) {\r\n      return \"\";\r\n    }\r\n    const value = activity.description[language];\r\n    if (!value) {\r\n      return \"\";\r\n    }\r\n    return value;\r\n  }\r\n\r\n  static getOrderItem(order: Order, orderItemId: string): OrderItem | undefined {\r\n    return order.items.find((item) => item.id === orderItemId);\r\n  }\r\n\r\n  static canEditReservation(state: string): boolean {\r\n    return state === \"New\" || state === null;\r\n  }\r\n\r\n  static canRefundOrder(order: Order): boolean {\r\n    if (\r\n      !order ||\r\n      !order.payments ||\r\n      order.flow.toString() !== \"PersonalStorage\" ||\r\n      order.deleted ||\r\n      order.payments.every((p) => p.state === \"Completed\")\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static isRefundedOrder(order: Order): boolean {\r\n    if (!order || !order.deleted || !order.payments || !order.payments.length) {\r\n      return false;\r\n    }\r\n\r\n    for (let i = 0; i < order.payments.length; i++) {\r\n      if (order.payments[i].state !== \"Refunded\") {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static canDeleteOrder(order: Order): boolean {\r\n    if (!order) {\r\n      return false;\r\n    }\r\n\r\n    if (order.carrierSubmissionReferenceNumber || order?.deleted || (order.state !== \"New\" && order.state !== \"NoReservation\")) {\r\n      return false;\r\n    }\r\n\r\n    let data = order.items.find((orderItem) => orderItem.reservation.state !== ReservationState.New);\r\n    return data === null || data === undefined;\r\n  }\r\n\r\n  static canCompleteOrder(order: Order): boolean {\r\n    if (!order) {\r\n      return false;\r\n    }\r\n\r\n    return order.deleted != 1 && order.flow.toString() === \"Deliver\" && order.state !== \"Completed\" && order.items.length !== 0;\r\n  }\r\n\r\n  static inOpenedState(state: string): boolean {\r\n    return state === \"LoadingStarted\" || state === \"PickUpStarted\" || state === \"PackagingPickUpStarted\";\r\n  }\r\n\r\n  static trackingNumbersEditable(order: Order | null): boolean {\r\n    if (!order || order.carrierSubmissionReferenceNumber || order.deleted) {\r\n      return false;\r\n    }\r\n\r\n    if (order.flow.toString() === OrderFlowStringValue.PersonalStorage) {\r\n      return order.items.some(\r\n        (orderItem: OrderItem) =>\r\n          orderItem.reservation &&\r\n          orderItem.reservation.state !== ReservationState.Completed &&\r\n          orderItem.reservation.state !== ReservationState.Canceled\r\n      );\r\n    } else {\r\n      if (order.state && order.state !== \"NoReservation\" && order.state !== \"New\") {\r\n        return false;\r\n      }\r\n      return order.items.some((orderItem: OrderItem) => orderItem.reservation && orderItem.reservation.state === ReservationState.New);\r\n    }\r\n  }\r\n\r\n  static editable(order: Order | null): boolean {\r\n    if (!order) {\r\n      return false;\r\n    }\r\n\r\n    if (\r\n      order.carrierSubmissionReferenceNumber ||\r\n      (order.state && order.state !== \"NoReservation\" && order.state !== \"New\") ||\r\n      order.deleted\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    let data = order.items.find((orderItem: OrderItem) => orderItem.reservation && orderItem.reservation.state !== ReservationState.New);\r\n    return data === null || data === undefined;\r\n  }\r\n\r\n  static canRequestCarrierPickup(order: Order | null): boolean {\r\n    if (!order || order.carrierSubmissionReferenceNumber || order.state !== \"New\" || order.deleted) {\r\n      return false;\r\n    }\r\n\r\n    return !this.hasNonNewOrderItem(order);\r\n  }\r\n\r\n  static canCancelCarrierPickup(order: Order | null): boolean {\r\n    if (!order || !order.carrierSubmissionReferenceNumber || (order.state !== \"New\" && order.state !== \"NoReservation\")) {\r\n      return false;\r\n    }\r\n\r\n    return !this.hasNonNewOrderItem(order);\r\n  }\r\n\r\n  static hasNonNewOrderItem(order: Order | null): boolean {\r\n    let data = order?.items.find((orderItem: OrderItem) => orderItem.reservation && orderItem.reservation.state !== ReservationState.New);\r\n    return data !== null && data !== undefined;\r\n  }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport StringHelpers from \"../services/core/string-helpers\";\r\n\r\ninterface PagingProps {\r\n  countTextResource: string;\r\n\r\n  count: number;\r\n  pageLength: number;\r\n  pageIndex: number;\r\n\r\n  canPreviousPage: boolean;\r\n  canNextPage: boolean;\r\n  previousPage: () => void;\r\n  nextPage: () => void;\r\n}\r\n\r\nexport default function PagingComponent(props: PagingProps) {\r\n  const { countTextResource, count, pageLength, pageIndex, canPreviousPage, canNextPage, previousPage, nextPage } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <nav>\r\n      <span>{t(StringHelpers.pluralize(count, countTextResource), { count: count })}</span>\r\n\r\n      {count > 0 && (\r\n        <ul className=\"pagination float-end\">\r\n          <li className={\"page-item\" + (!canPreviousPage ? \" disabled\" : \"\")}>\r\n            <button className=\"page-link\" aria-label=\"Previous\" onClick={() => previousPage()}>\r\n              <FontAwesomeIcon icon={[\"fas\", \"angle-left\"]} />\r\n            </button>\r\n          </li>\r\n          <li className=\"page-item disabled page-index\">\r\n            <button className=\"page-link\" aria-label=\"Previous\" onClick={() => previousPage()}>\r\n              {pageIndex + 1} {t(\"common.of\")} {pageLength}\r\n            </button>\r\n          </li>\r\n          <li className={\"page-item\" + (!canNextPage ? \" disabled\" : \"\")}>\r\n            <button className=\"page-link\" aria-label=\"Next\" onClick={() => nextPage()}>\r\n              <FontAwesomeIcon icon={[\"fas\", \"angle-right\"]} />\r\n            </button>\r\n          </li>\r\n        </ul>\r\n      )}\r\n    </nav>\r\n  );\r\n}\r\n","import toast from \"react-hot-toast\";\r\n\r\nexport default class ToastHelpers {\r\n  static success(message: string) {\r\n    toast.success(message);\r\n  }\r\n\r\n  static error(message: string) {\r\n    toast.error(message);\r\n  }\r\n}\r\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { CSVLink } from \"react-csv\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\ninterface DeleteButtonProps {\r\n  title: string | undefined;\r\n  onClick: Function;\r\n  disabled: boolean;\r\n}\r\n\r\nexport function DeleteButtonComponent(props: DeleteButtonProps) {\r\n  return (\r\n    <>\r\n      <button className={`btn btn-outline-primary`} onClick={() => props.onClick()} disabled={props.disabled}>\r\n        <FontAwesomeIcon icon={[\"fas\", \"trash-alt\"]} /> {props.title && \" \" + props.title}\r\n      </button>\r\n    </>\r\n  );\r\n}\r\n\r\ninterface AddButtonProps {\r\n  title?: string | undefined;\r\n  className?: string | undefined;\r\n  onClick: Function;\r\n}\r\n\r\nexport function AddButtonComponent(props: AddButtonProps) {\r\n  return (\r\n    <button className={props.className ? props.className : \"btn btn-primary\"} onClick={() => props.onClick()}>\r\n      <FontAwesomeIcon className={props.title && \"me-2\"} icon={[\"fas\", \"plus\"]} />\r\n      {props.title && \" \" + props.title}\r\n    </button>\r\n  );\r\n}\r\n\r\ninterface SyncButtonProps {\r\n  onClick: Function;\r\n  disabled: boolean;\r\n  className?: string;\r\n}\r\nSyncButtonComponent.defaultProps = {\r\n  disabled: false,\r\n};\r\nexport function SyncButtonComponent(props: SyncButtonProps) {\r\n  return (\r\n    <button className={props.className + \" btn btn-outline-primary \"} onClick={() => props.onClick()} disabled={props.disabled}>\r\n      <FontAwesomeIcon icon=\"sync\"></FontAwesomeIcon>\r\n    </button>\r\n  );\r\n}\r\n\r\ninterface EditButtonProps {\r\n  url: string;\r\n}\r\n\r\nexport function EditButtonComponent(props: EditButtonProps) {\r\n  const history = useHistory();\r\n\r\n  return (\r\n    <button className=\"btn btn-outline-primary\" onClick={() => history.push(props.url)}>\r\n      <FontAwesomeIcon icon={[\"fas\", \"pen\"]} />\r\n    </button>\r\n  );\r\n}\r\n\r\ninterface ActionButtonProps {\r\n  type?: \"button\" | \"submit\" | \"reset\" | undefined;\r\n  className?: string | undefined;\r\n  onClick: Function;\r\n  title?: string | undefined;\r\n  icon?: IconProp | undefined;\r\n  disabled?: boolean;\r\n}\r\n\r\nexport function ActionButtonComponent(props: ActionButtonProps) {\r\n  return (\r\n    <button type={props.type} className={props.className} onClick={() => props.onClick()} disabled={props.disabled}>\r\n      {props.icon && <FontAwesomeIcon className=\"me-1\" icon={props.icon} />} {props.title && props.title}\r\n    </button>\r\n  );\r\n}\r\n\r\ninterface InfoCircleProps {\r\n  id: string;\r\n  title: string;\r\n  textInfo: string;\r\n}\r\nexport function InfoCirleButton({ id, title, textInfo }: InfoCircleProps) {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <button className=\"icon-info-circle primary\" data-bs-target={`#${id}`} data-bs-toggle=\"modal\">\r\n        <FontAwesomeIcon className=\"blue-icon\" icon={[\"fas\", \"info-circle\"]} />\r\n      </button>\r\n      <div className=\"modal\" tabIndex={-1} id={id}>\r\n        <div className=\"modal-dialog\">\r\n          <div className=\"modal-content\">\r\n            <div className=\"modal-header\">\r\n              <h5 className=\"modal-title\">{title}</h5>\r\n              <button type=\"button\" className=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n            </div>\r\n            <div className=\"modal-body\">{textInfo}</div>\r\n            <div className=\"modal-footer\">\r\n              <button type=\"button\" className=\"btn btn-outline-primary\" data-bs-dismiss=\"modal\">\r\n                {t(\"common.close\")}\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n}\r\n\r\ninterface ExportButtonProps {\r\n  title?: string;\r\n  data: string | Array<any>;\r\n  fileName: string;\r\n}\r\n\r\nexport function ExportButton(props: ExportButtonProps) {\r\n  const { t } = useTranslation();\r\n  let title = props.title ? props.title : t(\"common.export\");\r\n\r\n  return (\r\n    <CSVLink\r\n      className={\"btn btn-outline-primary\"}\r\n      title={title}\r\n      data={props.data}\r\n      enclosingCharacter={`\"`}\r\n      filename={props.fileName + \".csv\"}\r\n    >\r\n      <FontAwesomeIcon icon=\"file-export\"></FontAwesomeIcon>\r\n    </CSVLink>\r\n  );\r\n}\r\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport languageService from \"../services/core/language-service\";\r\nimport StringHelpers from \"../services/core/string-helpers\";\r\nimport \"./dateRangeComponent.scss\";\r\nimport DateHelpers from \"../services/core/date-helpers\";\r\n\r\ninterface DateRangeComponentProps {\r\n  id: string;\r\n  default: DateRangeOptions;\r\n  disabled?: boolean;\r\n  onDateChange: (start: string, end: string) => void;\r\n  start: string;\r\n  end: string;\r\n}\r\n\r\nexport enum DateRangeOptions {\r\n  Today = \"analytic.today\",\r\n  Week = \"analytic.7days\",\r\n  Month = \"analytic.30days\",\r\n  Custom = \"analytic.customize\",\r\n}\r\n\r\nexport default function DateRangeComponent(props: DateRangeComponentProps) {\r\n  const { t } = useTranslation();\r\n\r\n  const [isCustom, setIsCustom] = useState<boolean>(false);\r\n  const [currentOption, setCurrentOption] = useState<string | undefined>();\r\n\r\n  const [startDate, setStartDate] = useState<string>(props.start);\r\n  const [endDate, setEndDate] = useState<string>(props.end);\r\n\r\n  const onStartDateChange = useCallback(\r\n    (event: React.ChangeEvent<HTMLInputElement>) => {\r\n      setStartDate(event.target.value);\r\n    },\r\n    [setStartDate]\r\n  );\r\n\r\n  const onEndDateChange = useCallback(\r\n    (event: React.ChangeEvent<HTMLInputElement>) => {\r\n      setEndDate(event.target.value);\r\n    },\r\n    [setEndDate]\r\n  );\r\n\r\n  const selectionOptions = useMemo(() => {\r\n    return [\"analytic.today\", \"analytic.7days\", \"analytic.30days\", \"analytic.customize\"];\r\n  }, [t]);\r\n\r\n  useEffect(() => {\r\n    setCurrentOption(selectionOptions.find((option) => option === props.default.toString()));\r\n    setIsCustom(false);\r\n  }, [languageService.language]);\r\n\r\n  const onItemClick = async (option: string) => {\r\n    setCurrentOption(option);\r\n    await setDataBySelectedIndex(option);\r\n  };\r\n\r\n  return (\r\n    <div id=\"date-range-component\">\r\n      <div className=\"collapse-date-range collapse\">\r\n        <a\r\n          className=\"close-collapse-toggler collapsed\"\r\n          data-bs-toggle=\"collapse\"\r\n          data-bs-target=\".collapse-date-range\"\r\n          aria-controls=\"collapse-date-range\"\r\n          aria-expanded=\"false\"\r\n        ></a>\r\n      </div>\r\n\r\n      <button\r\n        className=\"btn btn-outline-primary arrow\"\r\n        type=\"button\"\r\n        data-bs-toggle=\"collapse\"\r\n        data-bs-target=\".collapse-date-range\"\r\n        aria-controls=\"collapse-date-range\"\r\n        aria-expanded=\"false\"\r\n      >\r\n        <span>\r\n          {props.start && props.end && (\r\n            <>\r\n              {props.start.substring(0, 4) === props.end.substring(0, 4) ? (\r\n                <>\r\n                  {props.start.substring(5, props.start.length)} {t(\"common.to\")} {props.end.substring(5, props.end.length)}\r\n                </>\r\n              ) : (\r\n                <>\r\n                  {props.start} {t(\"common.to\")} {props.end}\r\n                </>\r\n              )}\r\n            </>\r\n          )}\r\n        </span>\r\n      </button>\r\n\r\n      <div className=\"position-relative mt-2\">\r\n        <div style={{ width: \"430px\" }} className={`collapse-date-range position-absolute collapse top-0`}>\r\n          <div className=\"card card-body\">\r\n            <div className=\"mb-3 btn-group\" role=\"group\">\r\n              {selectionOptions.map((option) => {\r\n                let active = currentOption && option === currentOption ? \" active\" : \"\";\r\n                const isCustom = option === DateRangeOptions.Custom;\r\n                return (\r\n                  <button\r\n                    key={option}\r\n                    type=\"button\"\r\n                    data-bs-toggle={!isCustom ? \"collapse\" : undefined}\r\n                    data-bs-target={!isCustom ? \".collapse-date-range\" : undefined}\r\n                    aria-controls={!isCustom ? \"collapse-date-range\" : undefined}\r\n                    aria-expanded={!isCustom ? \"false\" : undefined}\r\n                    className={`btn btn-outline-primary ${active}`}\r\n                    onClick={() => {\r\n                      onItemClick(option);\r\n                    }}\r\n                  >\r\n                    {t(option)}\r\n                  </button>\r\n                );\r\n              })}\r\n            </div>\r\n            <div>\r\n              <div className=\"input-group custom\">\r\n                <div>\r\n                  <input\r\n                    disabled={!isCustom}\r\n                    className=\"form-control\"\r\n                    type=\"date\"\r\n                    max={setMinMax(endDate, 0)}\r\n                    value={startDate}\r\n                    onChange={onStartDateChange}\r\n                  />\r\n                </div>\r\n\r\n                <div className=\"textBetween mt-2\">{t(\"common.to\")}</div>\r\n\r\n                <div>\r\n                  <input\r\n                    disabled={!isCustom}\r\n                    className=\"form-control\"\r\n                    type=\"date\"\r\n                    min={setMinMax(startDate, 2)}\r\n                    value={endDate}\r\n                    onChange={onEndDateChange}\r\n                  />\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"mt-2 mb-2\">\r\n                <button\r\n                  className=\"btn btn-primary collapsed\"\r\n                  data-bs-toggle=\"collapse\"\r\n                  data-bs-target=\".collapse-date-range\"\r\n                  aria-controls=\"collapse-date-range\"\r\n                  aria-expanded=\"false\"\r\n                  disabled={!isCustom || !areDateValid(startDate, endDate)}\r\n                  onClick={async () => {\r\n                    await props.onDateChange(startDate, endDate);\r\n                  }}\r\n                >\r\n                  {t(\"analytic.apply\")}\r\n                </button>\r\n                <button\r\n                  className=\"btn btn-outline-secondary collapsed  ms-2\"\r\n                  data-bs-toggle=\"collapse\"\r\n                  data-bs-target=\".collapse-date-range\"\r\n                  aria-controls=\"collapse-date-range\"\r\n                  aria-expanded=\"false\"\r\n                >\r\n                  {t(\"common.cancel\")}\r\n                </button>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  async function setDataBySelectedIndex(option: string) {\r\n    const selectedCustom = option === DateRangeOptions.Custom;\r\n\r\n    setIsCustom(selectedCustom);\r\n    if (!selectedCustom) {\r\n      await setStartEndOnClick(\r\n        Object.values<DateRangeOptions>(DateRangeOptions).find((dateOption) => dateOption === option),\r\n        props.onDateChange\r\n      );\r\n    }\r\n  }\r\n}\r\n\r\nasync function setStartEndOnClick(startDateStr: DateRangeOptions | undefined, onDateChange: (start: string, end: string) => void) {\r\n  const now = new Date();\r\n  let startDate = new Date(now);\r\n  let endDate = new Date(now);\r\n  endDate.setDate(endDate.getDate() + 1);\r\n\r\n  if (startDateStr === DateRangeOptions.Week) {\r\n    startDate.setDate(startDate.getDate() - 6);\r\n  } else if (startDateStr === DateRangeOptions.Month) {\r\n    startDate.setMonth(startDate.getMonth() - 1);\r\n    startDate.setDate(startDate.getDate() + 1);\r\n  }\r\n\r\n  const start = DateHelpers.toDateString(startDate);\r\n  const end = DateHelpers.toDateString(endDate);\r\n\r\n  if (end && start) {\r\n    onDateChange(start, end);\r\n  }\r\n}\r\n\r\nfunction setMinMax(value: string | undefined, daysAdded: number) {\r\n  if (value) {\r\n    if (daysAdded > 0) {\r\n      let minEndDate = new Date(value);\r\n      minEndDate.setDate(minEndDate.getDate() + daysAdded);\r\n\r\n      return DateHelpers.toDateString(minEndDate);\r\n    } else return DateHelpers.toDateString(new Date(value));\r\n  }\r\n}\r\n\r\nfunction areDateValid(startDate: string, endDate: string) {\r\n  return startDate < endDate && new Date(startDate).getFullYear() >= 2020;\r\n}\r\n","import i18next from \"i18next\";\r\nimport moment from \"moment-timezone\";\r\nimport languageService from \"./language-service\";\r\nimport StringHelpers from \"./string-helpers\";\r\n\r\nexport default class DateHelpers {\r\n  static readonly DefaultTimeZone: string = \"America/Toronto\";\r\n\r\n  static readonly UserTimeZone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n\r\n  static readonly NB_OF_SECONDS_IN_A_DAY = 86400;\r\n  static readonly NB_OF_SECONDS_IN_AN_HOUR = 3600;\r\n  static readonly NB_OF_SECONDS_IN_A_MINUTE = 60;\r\n\r\n  static formatDateEightChar(date: Date, timeZone: string): string {\r\n    if (!date) {\r\n      return \"\";\r\n    }\r\n\r\n    var dec = moment(date);\r\n\r\n    return dec.tz(timeZone).format(\"YYYYMMDD\");\r\n  }\r\n\r\n  static toDateString(date: Date, timeZone: string = DateHelpers.DefaultTimeZone) {\r\n    return moment(date).tz(timeZone).format(\"YYYY-MM-DD\");\r\n  }\r\n\r\n  static toHourString(date: Date, timeZone: string = DateHelpers.DefaultTimeZone) {\r\n    return moment(date).tz(timeZone).format(\"hh:mm A\");\r\n  }\r\n\r\n  static timeSince(date: Date): string {\r\n    return moment(date, undefined, languageService.language).fromNow();\r\n  }\r\n\r\n  static formatNumberToTimeLeftString(nbOfSeconds: number): string {\r\n    const days = Math.trunc(nbOfSeconds / this.NB_OF_SECONDS_IN_A_DAY);\r\n    const hours = Math.trunc((nbOfSeconds % this.NB_OF_SECONDS_IN_A_DAY) / this.NB_OF_SECONDS_IN_AN_HOUR);\r\n    const minutes = Math.trunc((nbOfSeconds % this.NB_OF_SECONDS_IN_AN_HOUR) / this.NB_OF_SECONDS_IN_A_MINUTE);\r\n    const seconds = Math.trunc(nbOfSeconds % this.NB_OF_SECONDS_IN_A_MINUTE);\r\n\r\n    let dateTime = \"\";\r\n\r\n    if (days > 0) {\r\n      dateTime = `${Math.max(days, 0)}${i18next.t(\"common.day\")}${days > 1 ? \"s\" : \"\"} `;\r\n    }\r\n    if (hours > 0) {\r\n      dateTime += `${Math.max(hours, 0)}${i18next.t(\"common.hour-symbol\")} `;\r\n    }\r\n    dateTime += `${Math.max(minutes, 0).toString().padStart(2, \"0\")}${i18next.t(\"common.min\")} `;\r\n    dateTime += `${Math.max(seconds, 0).toString().padStart(2, \"0\")}${i18next.t(\"common.sec\")}`;\r\n\r\n    return dateTime;\r\n  }\r\n\r\n  static formatDateTime(date: Date, timeZone: string): string | null {\r\n    if (!date) {\r\n      return \"\";\r\n    }\r\n\r\n    var dec = moment(date);\r\n    const formattedDate = dec.tz(timeZone).format(\"YYYY/MM/DD HH:mm\");\r\n\r\n    return formattedDate;\r\n  }\r\n\r\n  static formatDuration(seconds: number): string {\r\n    if (!seconds) {\r\n      return \"\";\r\n    }\r\n\r\n    const duration = moment.duration(seconds, \"seconds\");\r\n    const days = duration.days();\r\n    const hours = duration.hours();\r\n    const minutes = duration.minutes();\r\n    let val = \"\";\r\n\r\n    if (days > 0) {\r\n      val += `${days} ${i18next.t(\"common.day\")}`;\r\n      val = `${StringHelpers.pluralize(days, val)} `;\r\n    }\r\n\r\n    if (hours > 0) {\r\n      val += `${hours} ${i18next.t(\"common.hour\")}`;\r\n      val = `${StringHelpers.pluralize(hours, val)} `;\r\n    }\r\n\r\n    if (minutes > 0) {\r\n      val += `${minutes}${i18next.t(\"common.min\")}`;\r\n    }\r\n\r\n    return val.trim();\r\n  }\r\n\r\n  static getMonth(date: Date): string {\r\n    return date.toLocaleDateString(languageService.getLanguage(), { month: \"long\" });\r\n  }\r\n\r\n  static getDay(date: Date): string {\r\n    return date.toLocaleDateString(languageService.getLanguage(), { day: \"numeric\" });\r\n  }\r\n\r\n  static getNextDayWithTime(time: string, timeZone: string): Date {\r\n    const now = moment().tz(timeZone);\r\n    return moment(time, \"HH:mm\", \"en\").isBefore(now)\r\n      ? moment(time, \"HH:mm\", \"en\").add(1, \"day\").toDate()\r\n      : moment(time, \"HH:mm\", \"en\").toDate();\r\n  }\r\n\r\n  static formatTime(time: string, timeZone: string): string {\r\n    const hourCycle = new Intl.Locale(navigator.language, {\r\n      region: \"US\",\r\n    }).hourCycle;\r\n    console.log(hourCycle);\r\n    if (hourCycle === \"h24\") {\r\n      return time;\r\n    } else {\r\n      return moment(time, \"HH:mm\", \"en\").format(\"hh:mm A\");\r\n    }\r\n  }\r\n\r\n  static toApiDate(date: Date): string {\r\n    return moment.utc(date).format(\"YYYY-MM-DDTHH:mm Z\");\r\n  }\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport { useAsyncDebounce } from \"react-table\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport function GlobalFilter({ preGlobalFilteredRows, globalFilter, setGlobalFilter }) {\r\n  const [value, setValue] = useState(globalFilter);\r\n  const { t } = useTranslation();\r\n\r\n  const onChange = useCallback(useAsyncDebounce((value) => {\r\n    setGlobalFilter(value.trim());\r\n  }, 200), [setGlobalFilter]);\r\n\r\n  return (\r\n    <input\r\n      className=\"global-filter form-control\"\r\n      placeholder={t(\"common.search\")}\r\n      value={value || \"\"}\r\n      onChange={(e) => {\r\n        setValue(e.target.value);\r\n        onChange(e.target.value);\r\n      }}\r\n    />\r\n  );\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Hub } from \"../services/hub/hub\";\r\n\r\ninterface HubLocationProps {\r\n  hub: Hub | null;\r\n  formatToFit?: number | undefined;\r\n}\r\n\r\nexport default function HubLocationComponent(props: HubLocationProps) {\r\n  const { hub, formatToFit } = props;\r\n  const { t } = useTranslation();\r\n\r\n  if (!hub) {\r\n    return null;\r\n  }\r\n\r\n  const online = hub.state === \"Online\";\r\n  const locationStyle = `me-2 text-${online ? \"success\" : \"danger\"}`;\r\n  const title = t(online ? \"components.location-online\" : \"components.location-offline\");\r\n\r\n  return (\r\n    <>\r\n      <span className={locationStyle} data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title={title}>\r\n        <FontAwesomeIcon icon={[\"fas\", \"circle\"]} />\r\n      </span>\r\n      {formatToFit && formatStringToFit(hub.name, formatToFit)}\r\n      {!formatToFit && hub.name}\r\n    </>\r\n  );\r\n}\r\n\r\nfunction formatStringToFit(value: String, minWidth: number) {\r\n  value = value.trim();\r\n  let nbExtraLetterCanFit = Math.floor((window.innerWidth - minWidth) / 16);\r\n  let length = 3 + (nbExtraLetterCanFit > 0 ? nbExtraLetterCanFit : 0);\r\n  let resString = value.substr(0, length);\r\n\r\n  if (resString === value) return value;\r\n\r\n  return value.substr(0, length).trimEnd() + \"...\";\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ninterface LoadingProps {\r\n  loading: boolean;\r\n}\r\n\r\nexport default function LoadingComponent(props: LoadingProps) {\r\n  const { loading } = props;\r\n\r\n  return (\r\n    <>\r\n      {loading && (\r\n        <div className=\"loader\">\r\n          <div className=\"text-center\">\r\n            <FontAwesomeIcon icon=\"spinner\" spin size=\"3x\" />\r\n          </div>\r\n        </div>\r\n      )}\r\n    </>\r\n  );\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ntype Props = {\r\n  notifyLevel: string;\r\n};\r\n\r\nexport function NotifyLevelComponent(props: Props) {\r\n  if (props.notifyLevel === \"High\") {\r\n    return <FontAwesomeIcon icon={[\"fas\", \"exclamation-triangle\"]} size=\"2x\" className=\"text-danger\" />;\r\n  }\r\n\r\n  if (props.notifyLevel === \"Medium\") {\r\n    return <FontAwesomeIcon icon={[\"fas\", \"info\"]} size=\"2x\" className=\"text-warning\" />;\r\n  }\r\n\r\n  return null;\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { OrderHelpers } from \"../services/order/order-helpers\";\r\n\r\ntype Props = {\r\n  state: string;\r\n  isPersonalStorage: boolean;\r\n};\r\n\r\nexport function StateBadgeComponent(props: Props) {\r\n  const { t } = useTranslation();\r\n  const { state, isPersonalStorage } = props;\r\n\r\n  return (\r\n    <span className={OrderHelpers.getOrderStateStyle(state, isPersonalStorage)}>\r\n      {t((isPersonalStorage ? \"ps-\" : \"\") + \"order-state.\" + state)}\r\n    </span>\r\n  );\r\n}\r\n","import React from \"react\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport { EditButtonComponent } from \"../button-component\";\r\nimport HubLocationComponent from \"../hub-location-component\";\r\nimport LoadingComponent from \"../loading-component\";\r\nimport { NotifyLevelComponent } from \"../notify-level-icon-component\";\r\nimport { StateBadgeComponent } from \"../state-badge-component\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { HeaderGroup, Row, TableBodyProps, TableProps } from \"react-table\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ninterface OrdersTableComponentProps {\r\n  hubs: Hub[] | null;\r\n  isLoading: boolean;\r\n  tableProps: TableProps;\r\n  tableBodyProps: TableBodyProps;\r\n  headerGroups: HeaderGroup<object>[];\r\n  page: Row<Object>[];\r\n  prepareRow: (row: Row<object>) => void;\r\n}\r\n\r\nconst OrderIdColumnIndex: number = 0;\r\nconst BadgeColumnIndex: number = 1;\r\nconst CustomerInfoColumIndex: number = 2;\r\nconst CustomerEmailColumnIndex: number = 3;\r\nconst CustomerPhoneColumnIndex: number = 4;\r\nconst HubColumnIndex: number = 5;\r\nconst LockersColumnIndex: number = 6;\r\nconst CreationDateColumnIndex: number = 7;\r\nconst ReservationBlockNameColumnIndex: number = 8;\r\nconst ReferenceNumberColumnIndex: number = 9;\r\nconst TrackingNumbersColumnIndex: number = 10;\r\n\r\nexport function OrdersTableComponent(props: OrdersTableComponentProps) {\r\n  const { hubs, isLoading, tableProps, tableBodyProps, headerGroups, page, prepareRow } = props;\r\n\r\n  const history = useHistory();\r\n\r\n  function findHub(hubId: string | null): Hub | undefined {\r\n    if (!hubId) {\r\n      return undefined;\r\n    }\r\n    return hubs?.find((h) => h.id === hubId) || undefined;\r\n  }\r\n\r\n  return (\r\n    <div className=\"row mt-3\">\r\n      <div className=\"col\">\r\n        <div className=\"customer card\">\r\n          <div className=\"card-body\">\r\n            <table {...tableProps} className=\"table table-sm table-hover row-clikable\">\r\n              <thead>\r\n                {headerGroups.map((headerGroup) => (\r\n                  <tr {...headerGroup.getHeaderGroupProps()}>\r\n                    <th></th>\r\n\r\n                    {headerGroup.headers.map((column) => {\r\n                      const { getHeaderProps, render } = column;\r\n                      const key = getHeaderProps().key;\r\n                      if (key !== \"header_email\" && key !== \"header_phone\") {\r\n                        return <th {...getHeaderProps()}>{render(\"Header\")}</th>;\r\n                      }\r\n                    })}\r\n                    <th></th>\r\n                  </tr>\r\n                ))}\r\n              </thead>\r\n              <tbody {...tableBodyProps}>\r\n                {isLoading && (\r\n                  <tr>\r\n                    <td colSpan={10} className=\"text-center\">\r\n                      <LoadingComponent loading={isLoading} />\r\n                    </td>\r\n                  </tr>\r\n                )}\r\n\r\n                {!isLoading &&\r\n                  page.map((row, i) => {\r\n                    prepareRow(row);\r\n                    const hub = row.cells[OrderIdColumnIndex].value && findHub(row.cells[HubColumnIndex].value);\r\n                    const url = `/orders/${row.cells[OrderIdColumnIndex].value}`;\r\n                    const order = row.original as any;\r\n\r\n                    let customerInfo = \"\";\r\n                    if (!stringIsNullOrEmpty(row.cells[CustomerInfoColumIndex].value)) {\r\n                      customerInfo = row.cells[CustomerInfoColumIndex].value;\r\n                    } else if (!stringIsNullOrEmpty(row.cells[CustomerEmailColumnIndex].value)) {\r\n                      customerInfo = row.cells[CustomerEmailColumnIndex].value;\r\n                    } else if (!stringIsNullOrEmpty(row.cells[CustomerPhoneColumnIndex].value)) {\r\n                      customerInfo = row.cells[CustomerPhoneColumnIndex].value;\r\n                    } else if (!stringIsNullOrEmpty(row.cells[ReferenceNumberColumnIndex].value)) {\r\n                      customerInfo = row.cells[ReferenceNumberColumnIndex].value;\r\n                    }\r\n\r\n                    const isPersonalStorage = !stringIsNullOrEmpty(row.cells[8].value);\r\n\r\n                    return (\r\n                      <tr {...row.getRowProps()} onClick={() => history.push(url)}>\r\n                        <td className=\"text-center\">\r\n                          <NotifyLevelComponent notifyLevel={order.notifyLevel}></NotifyLevelComponent>\r\n                        </td>\r\n\r\n                        {/* OrderID */}\r\n                        <td {...row.cells[OrderIdColumnIndex].getCellProps()}>{row.cells[OrderIdColumnIndex].render(\"Cell\")}</td>\r\n\r\n                        {/* Badge */}\r\n                        <td {...row.cells[BadgeColumnIndex].getCellProps()}>\r\n                          <StateBadgeComponent\r\n                            state={row.cells[BadgeColumnIndex].value}\r\n                            isPersonalStorage={isPersonalStorage}\r\n                          ></StateBadgeComponent>\r\n                        </td>\r\n\r\n                        {/* Customer info */}\r\n                        <td {...row.cells[CustomerInfoColumIndex].getCellProps()}>{customerInfo}</td>\r\n\r\n                        {/* Location */}\r\n                        <td {...row.cells[HubColumnIndex].getCellProps()}>\r\n                          <HubLocationComponent hub={hub} formatToFit={376} />\r\n                        </td>\r\n\r\n                        {/* Lockers */}\r\n                        <td {...row.cells[LockersColumnIndex].getCellProps()}>{row.cells[LockersColumnIndex].render(\"Cell\")}</td>\r\n\r\n                        {/* CreationDate */}\r\n                        <td {...row.cells[CreationDateColumnIndex].getCellProps()}>\r\n                          {DateHelpers.formatDateTime(new Date(row.cells[CreationDateColumnIndex].value), DateHelpers.UserTimeZone)}\r\n                        </td>\r\n\r\n                        {/* ReservationBlockName */}\r\n                        <td {...row.cells[ReservationBlockNameColumnIndex].getCellProps()} className=\"overflow-ellipsis\">\r\n                          {row.cells[ReservationBlockNameColumnIndex].render(\"Cell\")}\r\n                        </td>\r\n\r\n                        {/* ReferenceNumber */}\r\n                        <td {...row.cells[ReferenceNumberColumnIndex].getCellProps()} className=\"overflow-ellipsis\">\r\n                          {row.cells[ReferenceNumberColumnIndex].render(\"Cell\")}\r\n                        </td>\r\n                        {/*TrackingNumbers */}\r\n                        <td {...row.cells[TrackingNumbersColumnIndex].getCellProps()} className=\"overflow-ellipsis\">\r\n                          {row.cells[TrackingNumbersColumnIndex].value.map((trackingNumber: string, index: number) => (\r\n                            <React.Fragment key={index}>\r\n                              {trackingNumber}\r\n                              <br />\r\n                            </React.Fragment>\r\n                          ))}\r\n                        </td>\r\n\r\n                        <td>\r\n                          <EditButtonComponent url={url}></EditButtonComponent>\r\n                        </td>\r\n                      </tr>\r\n                    );\r\n                  })}\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction stringIsNullOrEmpty(value: String) {\r\n  return value === null || value === undefined || value === \"\" || value === \" \" || value.includes(\"undefined\");\r\n}\r\n","import { useEffect, useState, useMemo, useRef } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport \"./orders-page.scss\";\r\nimport { Order } from \"../../services/order/order\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useGlobalFilter, usePagination, useTable } from \"react-table\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport orderService, { OrderState } from \"../../services/order/order-service\";\r\nimport Dropdown from \"bootstrap/js/dist/dropdown\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport { OrderHelpers } from \"../../services/order/order-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport PagingComponent from \"../../components/paging-component\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport { AddButtonComponent, SyncButtonComponent } from \"../../components/button-component\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { CSVLink } from \"react-csv\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport DateRangeComponent, { DateRangeOptions } from \"../../components/dateRangeComponent\";\r\nimport { GlobalFilter } from \"../../components/globalfilter-component\";\r\nimport { OrdersTableComponent } from \"../../components/orders-page-components/orders-table-component\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ninterface IDropdownStateProps {\r\n  onChange: any;\r\n}\r\n\r\nfunction DropdownState(props: IDropdownStateProps) {\r\n  const { onChange } = props;\r\n\r\n  const [state, setState] = useState<OrderState>(OrderState.Active);\r\n  const [dropdown, setDropdown] = useState<Dropdown | null>(null);\r\n  const ddRef = useRef(null);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() => {\r\n    if (!dropdown) {\r\n      setDropdown(new Dropdown(ddRef.current || \"\", {}));\r\n    }\r\n  }, [dropdown]);\r\n\r\n  const onDropdownClick = () => {\r\n    dropdown?.show();\r\n  };\r\n\r\n  const onItemClick = (newState: OrderState) => {\r\n    if (state !== newState) {\r\n      setState(newState);\r\n      onChange(newState);\r\n    }\r\n\r\n    dropdown?.hide();\r\n  };\r\n\r\n  return (\r\n    <div className=\"dropdown ms-2\">\r\n      <button\r\n        className=\"btn btn-outline-primary dropdown-toggle\"\r\n        type=\"button\"\r\n        data-bs-toggle=\"dropdown\"\r\n        ref={ddRef}\r\n        aria-expanded=\"false\"\r\n        onClick={onDropdownClick}\r\n      >\r\n        {t(`orders-page.dropdown-state-${state.toString()}`)}\r\n      </button>\r\n      <ul className=\"dropdown-menu\" aria-labelledby=\"dropdown1\">\r\n        {Object.values(OrderState).map((state: OrderState) => {\r\n          return (\r\n            <li key={state}>\r\n              <button\r\n                className=\"dropdown-item\"\r\n                onClick={() => {\r\n                  onItemClick(state);\r\n                }}\r\n              >\r\n                {t(`orders-page.dropdown-state-${state}`)}\r\n              </button>\r\n            </li>\r\n          );\r\n        })}\r\n      </ul>\r\n    </div>\r\n  );\r\n}\r\n\r\ninterface onDateProps {\r\n  currentStart: string;\r\n  currentEnd: string;\r\n}\r\n\r\ninterface OrdersPageProps {\r\n  organization: Organization | undefined;\r\n  member: Member;\r\n}\r\n\r\nexport default function OrdersPage(props: OrdersPageProps) {\r\n  const { organization } = props;\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [orders, setOrders] = useState<Array<Order>>([]);\r\n  const [hubs, setHubs] = useState<Array<Hub> | null>(null);\r\n  const history = useHistory();\r\n\r\n  let now = new Date();\r\n  let roundAt5 = 5 - (now.getMinutes() % 5);\r\n  now.setMinutes(now.getMinutes() + roundAt5);\r\n\r\n  let startDate = now;\r\n  let endDate = new Date(now);\r\n  endDate.setDate(endDate.getDate() + 1);\r\n  startDate.setMonth(startDate.getMonth() - 1);\r\n  startDate.setDate(startDate.getDate() + 1);\r\n  let startInit = DateHelpers.toDateString(startDate, DateHelpers.UserTimeZone);\r\n  let endInit = DateHelpers.toDateString(endDate, DateHelpers.UserTimeZone);\r\n\r\n  const [currentStartEnd, setCurrentStartEnd] = useState<onDateProps>({\r\n    currentStart: startInit,\r\n    currentEnd: endInit,\r\n  });\r\n\r\n  const [currentState, setCurrentState] = useState<OrderState>(OrderState.Active);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() => {\r\n    if (organization) {\r\n      setPageSize(10);\r\n\r\n      hubService\r\n        .getHubs()\r\n        .then((hubs) => {\r\n          setHubs(hubs);\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"orders-page.error-refresh\"));\r\n        });\r\n    }\r\n  }, [organization, t]);\r\n\r\n  useMemo(async () => {\r\n    if (currentStartEnd) {\r\n      await refreshOrders(currentStartEnd.currentStart, currentStartEnd.currentEnd);\r\n    }\r\n  }, [currentState, currentStartEnd]);\r\n\r\n  const onStateChange = (newState: OrderState) => {\r\n    setCurrentState(newState);\r\n  };\r\n\r\n  //Prepare Table Data\r\n  let tableDataCSV: Array<any> = useMemo(() => [], [orders, hubs]);\r\n\r\n  //Table configuration\r\n  const columnsTemp = [\r\n    {\r\n      Header: t(\"orders-page-table-header.OrderId\"),\r\n      accessor: \"orderId\",\r\n    },\r\n    {\r\n      Header: t(\"orders-page-table-header.State\"),\r\n      accessor: \"state\",\r\n    },\r\n    {\r\n      Header: t(\"orders-page-table-header.Customer\"),\r\n      accessor: \"customer\",\r\n    },\r\n    {\r\n      Header: t(\"customers-page-table-header.Email\"),\r\n      accessor: \"email\",\r\n    },\r\n    {\r\n      Header: t(\"customers-page-table-header.Phone\"),\r\n      accessor: \"phone\",\r\n    },\r\n    {\r\n      Header: t(\"orders-page-table-header.Location\"),\r\n      accessor: \"hubId\",\r\n    },\r\n    {\r\n      Header: t(\"orders-page-table-header.Lockers\"),\r\n      accessor: \"lockers\",\r\n    },\r\n    {\r\n      Header: t(\"orders-page-table-header.CreationDate\"),\r\n      accessor: \"creationDate\",\r\n    },\r\n    {\r\n      Header: t(\"orders-page-table-header.reservation-Block-Name\"),\r\n      accessor: \"reservationBlockName\",\r\n    },\r\n    {\r\n      Header: t(\"order-page.reference-number\"),\r\n      accessor: \"referenceNumber\",\r\n    },\r\n    {\r\n      Header: t(\"common.tracking-numbers\"),\r\n      accessor: \"trackingNumbers\",\r\n    },\r\n  ];\r\n\r\n  const {\r\n    getTableProps,\r\n    getTableBodyProps,\r\n    headerGroups,\r\n    rows,\r\n    prepareRow,\r\n    page,\r\n    canPreviousPage,\r\n    canNextPage,\r\n    pageOptions,\r\n    nextPage,\r\n    previousPage,\r\n    setPageSize,\r\n    state,\r\n    preGlobalFilteredRows,\r\n    setGlobalFilter,\r\n    state: { pageIndex },\r\n  } = useTable(\r\n    {\r\n      // eslint-disable-next-line\r\n      columns: useMemo(() => columnsTemp, [languageService.language]),\r\n      // eslint-disable-next-line\r\n      data: useMemo(() => updateTableOrdersData(orders, hubs, tableDataCSV), [orders, hubs]),\r\n      initialState: { pageIndex: 0 },\r\n    },\r\n    useGlobalFilter,\r\n    usePagination\r\n  );\r\n\r\n  useEffect(() => {\r\n    setGlobalFilter(state.globalFilter);\r\n  }, [orders, hubs]);\r\n\r\n  return (\r\n    <div className=\"container page orders-page\">\r\n      <h1>{t(\"orders-page.locker-orders\")}</h1>\r\n\r\n      <div className=\"toolbar\">\r\n        <AddButtonComponent title={t(\"orders-page.btn-create-order\")} onClick={() => history.push(`/create-order`)}></AddButtonComponent>\r\n\r\n        <AddButtonComponent\r\n          className=\"btn btn-outline-primary ms-2\"\r\n          title={t(\"orders-page.btn-create-return\")}\r\n          onClick={() => history.push(`/create-return`)}\r\n        ></AddButtonComponent>\r\n\r\n        <SyncButtonComponent\r\n          className=\"ms-2\"\r\n          onClick={async () => await refreshOrders(currentStartEnd?.currentStart, currentStartEnd?.currentEnd)}\r\n        ></SyncButtonComponent>\r\n\r\n        <DropdownState onChange={onStateChange} />\r\n\r\n        <div className=\"ms-1\">\r\n          <DateRangeComponent\r\n            id={\"ordersDatesFilter\"}\r\n            default={DateRangeOptions.Month}\r\n            onDateChange={onDateChanged}\r\n            start={currentStartEnd?.currentStart}\r\n            end={currentStartEnd?.currentEnd}\r\n          />\r\n        </div>\r\n\r\n        <div className=\"line2 ms-2\">\r\n          <CSVLink className=\"btn btn-outline-primary\" data={tableDataCSV} enclosingCharacter={`'`} filename=\"ExportOrders.csv\">\r\n            <FontAwesomeIcon icon=\"file-export\"></FontAwesomeIcon> {t(\"common.export\")}\r\n          </CSVLink>\r\n\r\n          <GlobalFilter preGlobalFilteredRows={preGlobalFilteredRows} globalFilter={state.globalFilter} setGlobalFilter={setGlobalFilter} />\r\n        </div>\r\n      </div>\r\n\r\n      <div>\r\n        <OrdersTableComponent\r\n          hubs={hubs}\r\n          isLoading={loading}\r\n          tableProps={getTableProps()}\r\n          tableBodyProps={getTableBodyProps()}\r\n          headerGroups={headerGroups}\r\n          page={page}\r\n          prepareRow={prepareRow}\r\n        />\r\n        <PagingComponent\r\n          countTextResource={\"orders-page.item-count\"}\r\n          count={rows.length}\r\n          pageLength={pageOptions.length}\r\n          pageIndex={pageIndex}\r\n          canPreviousPage={canPreviousPage}\r\n          canNextPage={canNextPage}\r\n          previousPage={previousPage}\r\n          nextPage={nextPage}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  async function refreshOrders(start: string | undefined, end: string | undefined) {\r\n    const orgId = organization?.id;\r\n    if (orgId) {\r\n      setLoading(true);\r\n      if (start && end) {\r\n        await orderService\r\n          .getOrders(orgId, currentState, start, end)\r\n          .then((data) => {\r\n            setOrders(data);\r\n          })\r\n          .catch(() => {\r\n            ToastHelpers.error(t(\"orders-page.error-refresh\"));\r\n          })\r\n          .finally(() => {\r\n            setLoading(false);\r\n          });\r\n      } else {\r\n        await orderService\r\n          .getOrders(orgId, currentState)\r\n          .then((data) => {\r\n            setOrders(data);\r\n          })\r\n          .catch(() => {\r\n            ToastHelpers.error(t(\"orders-page.error-refresh\"));\r\n          })\r\n          .finally(() => {\r\n            setLoading(false);\r\n          });\r\n      }\r\n    }\r\n  }\r\n\r\n  function onDateChanged(start: string, end: string) {\r\n    setCurrentStartEnd({ currentStart: start, currentEnd: end });\r\n  }\r\n}\r\n\r\n//Prepare Table Data\r\nfunction updateTableOrdersData(orders: Array<Order>, hubs: Array<Hub> | null, tableDataCSV: Array<any>): Array<any> {\r\n  const tableData: Array<any> = [];\r\n  if (orders && hubs) {\r\n    orders.forEach((order: Order) => {\r\n      const orderLockers = OrderHelpers.getOrderLockers(order).toString();\r\n      const trackingNumbers = order?.items?.flatMap((item) => item.reservation.trackingNumbers ?? []);\r\n      tableData.push({\r\n        orderId: order.id.toString(),\r\n        state: order.state.toString(),\r\n        customer: `${order.customer?.lastname?.toString()} ${order.customer?.firstname?.toString()}`,\r\n        email: order.customer?.email?.toString(),\r\n        phone: order.customer?.phone?.toString(),\r\n        hubId: order.hubId,\r\n        lockers: orderLockers,\r\n        creationDate: order.orderDate.toString(),\r\n        notifyLevel: order.notifyLevel,\r\n        reservationBlockName: order?.items[0]?.reservation?.reservationBlockName,\r\n        referenceNumber: order.referenceNumber,\r\n        trackingNumbers: trackingNumbers,\r\n      });\r\n\r\n      const tmp = {\r\n        HubName: order.hubId,\r\n        OrderId: order.id.toString(),\r\n        ReferenceNumber: order.referenceNumber,\r\n        CreationDate: order.orderDate.toString(),\r\n        State: order.state.toString(),\r\n        FirstName: order.customer?.firstname,\r\n        LastName: order.customer?.lastname,\r\n        Email: order.customer?.email,\r\n        Phone: order.customer?.phone,\r\n        SiteId: (order?.items && order.items.length > 0 && order.items[0] && order?.items[0]?.reservation?.micrositeId) || \"\",\r\n        reservationBlockName:\r\n          (order.items && order.items.length > 0 && order.items[0] && order?.items[0]?.reservation?.reservationBlockName) || \"\",\r\n        Locker: orderLockers,\r\n      };\r\n      tableDataCSV.push(tmp);\r\n    });\r\n  }\r\n  return tableData;\r\n}\r\n","import { memo, useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"../customers/customers-page.scss\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport { useGlobalFilter, usePagination, useTable } from \"react-table\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport PagingComponent from \"../../components/paging-component\";\r\nimport { Customer } from \"../../services/order/customer\";\r\nimport { AddButtonComponent, EditButtonComponent, SyncButtonComponent } from \"../../components/button-component\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport { GlobalFilter } from \"../../components/globalfilter-component\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ninterface IProps {\r\n  organizationId: String | undefined;\r\n  setEditMember: Function;\r\n  setMemberEdited: Function;\r\n  setIsNewUser: Function;\r\n}\r\n\r\nexport default function MemberRoleTable(props: IProps) {\r\n  const { organizationId, setEditMember, setMemberEdited, setIsNewUser } = props;\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [members, setMembers] = useState<Array<Member>>([]);\r\n  const [filteredMembers, setFilteredMembers] = useState<Array<Member>>([]);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() => {\r\n    if (organizationId) {\r\n      refresh();\r\n    }\r\n  }, []);\r\n\r\n  //Table configuration\r\n  const columnsTemp = [\r\n    {\r\n      Header: t(\"customers-page-table-header.FirstName\"),\r\n      accessor: \"firstname\",\r\n    },\r\n    {\r\n      Header: t(\"customers-page-table-header.LastName\"),\r\n      accessor: \"lastname\",\r\n    },\r\n    {\r\n      Header: t(\"customers-page-table-header.Email\"),\r\n      accessor: \"email\",\r\n    },\r\n    {\r\n      Header: \"Role over Organization\",\r\n      accessor: \"role\",\r\n    },\r\n  ];\r\n\r\n  const {\r\n    getTableProps,\r\n    getTableBodyProps,\r\n    headerGroups,\r\n    rows,\r\n    prepareRow,\r\n    page,\r\n    canPreviousPage,\r\n    canNextPage,\r\n    pageOptions,\r\n    nextPage,\r\n    previousPage,\r\n    setPageSize,\r\n    state,\r\n    preGlobalFilteredRows,\r\n    setGlobalFilter,\r\n    state: { pageIndex },\r\n  } = useTable(\r\n    {\r\n      // eslint-disable-next-line\r\n      columns: useMemo(() => columnsTemp, [languageService.language]),\r\n      // eslint-disable-next-line\r\n      data: useMemo(() => updateTableCustomersData(filteredMembers, organizationId), [filteredMembers]),\r\n      initialState: { pageIndex: 0 },\r\n    },\r\n    useGlobalFilter,\r\n    usePagination\r\n  );\r\n\r\n  const filterMembers = (list: Array<Member>) => {\r\n    if (!members) {\r\n      setMembers([]);\r\n      return;\r\n    }\r\n    setFilteredMembers(list);\r\n  };\r\n\r\n  useEffect(() => {\r\n    setGlobalFilter(state.globalFilter);\r\n  }, [filteredMembers]);\r\n\r\n  return (\r\n    <div className=\"container page customers-page\">\r\n      <h1>Members</h1>\r\n\r\n      <div className=\"toolbar\">\r\n        <AddButtonComponent title={\"Create Member\"} onClick={() => editMember(new Member(), true)}></AddButtonComponent>\r\n\r\n        <SyncButtonComponent className=\"ms-2\" onClick={() => refresh()}></SyncButtonComponent>\r\n\r\n        <GlobalFilter preGlobalFilteredRows={preGlobalFilteredRows} globalFilter={state.globalFilter} setGlobalFilter={setGlobalFilter} />\r\n      </div>\r\n\r\n      <div>\r\n        <div className=\"row mt-3\">\r\n          <div className=\"col\">\r\n            <div className=\"customer card\">\r\n              <div className=\"card-body\">\r\n                <table {...getTableProps()} className=\"table  table-sm table-hover row-clikable\">\r\n                  <thead>\r\n                    {headerGroups.map((headerGroup) => (\r\n                      <tr {...headerGroup.getHeaderGroupProps()}>\r\n                        {headerGroup.headers.map((column) => {\r\n                          return <th {...column.getHeaderProps()}>{column.render(\"Header\")}</th>;\r\n                        })}\r\n\r\n                        {/* Empty column header for actions */}\r\n                        <td></td>\r\n                      </tr>\r\n                    ))}\r\n                  </thead>\r\n                  <tbody {...getTableBodyProps()}>\r\n                    {loading && (\r\n                      <tr>\r\n                        <td colSpan={7} className=\"text-center\">\r\n                          <LoadingComponent loading={loading} />\r\n                        </td>\r\n                      </tr>\r\n                    )}\r\n\r\n                    {!loading &&\r\n                      page.map((row, i) => {\r\n                        prepareRow(row);\r\n\r\n                        let customer = row.original as any;\r\n\r\n                        return (\r\n                          <tr {...row.getRowProps()} onClick={() => editMember(customer, false)}>\r\n                            <td {...row.cells[0].getCellProps()}>{customer.firstname}</td>\r\n                            <td {...row.cells[1].getCellProps()}>{customer.lastname}</td>\r\n                            <td {...row.cells[2].getCellProps()}>{customer.email}</td>\r\n                            <td {...row.cells[3].getCellProps()}>{customer.role}</td>\r\n                            <td>\r\n                              <button\r\n                                className=\"btn btn-outline-primary\"\r\n                                onClick={() => {\r\n                                  editMember(customer, false);\r\n                                }}\r\n                              >\r\n                                <FontAwesomeIcon icon={[\"fas\", \"pen\"]} />\r\n                              </button>\r\n                            </td>\r\n                          </tr>\r\n                        );\r\n                      })}\r\n                  </tbody>\r\n                </table>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <PagingComponent\r\n          countTextResource={\"customers-page.item-count\"}\r\n          count={rows.length}\r\n          pageLength={pageOptions.length}\r\n          pageIndex={pageIndex}\r\n          canPreviousPage={canPreviousPage}\r\n          canNextPage={canNextPage}\r\n          previousPage={previousPage}\r\n          nextPage={nextPage}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function editMember(member: Member, isNewUser: boolean) {\r\n    setMemberEdited(member);\r\n    setIsNewUser(isNewUser);\r\n    setEditMember(true);\r\n  }\r\n\r\n  function refresh() {\r\n    const orgId = organizationId;\r\n    if (orgId) {\r\n      setLoading(true);\r\n\r\n      memberService\r\n        .getMembers(orgId)\r\n        .then((data) => {\r\n          setMembers(data);\r\n          filterMembers(data);\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"orders-page.error-refresh\"));\r\n        })\r\n        .finally(() => {\r\n          setLoading(false);\r\n        });\r\n    }\r\n  }\r\n}\r\n\r\nfunction updateTableCustomersData(members: Member[], organizationId: String | undefined): Array<any> {\r\n  const tableData: Array<any> = [];\r\n  if (members) {\r\n    members.forEach((member: Member) => {\r\n      var unique: Array<String> = [];\r\n\r\n      member.associatedOrganizations.forEach((org) => {\r\n        if (org) {\r\n          if (org.entity) {\r\n            if (!unique.includes(org.entity.id) && org.entity.id == organizationId) {\r\n              tableData.push({\r\n                firstname: member.firstname?.toString() ?? \"\",\r\n                lastname: member.lastname?.toString() ?? \"\",\r\n                email: member.email.toString() ?? \"\",\r\n                entity: \"Organization\",\r\n                role: org.roles.toString() ?? \"\",\r\n                associatedHubs: member.associatedHubs,\r\n                associatedOrganizations: member.associatedOrganizations,\r\n              });\r\n              unique.push(org.entity.id);\r\n            }\r\n          }\r\n        }\r\n      });\r\n    });\r\n  }\r\n  return tableData;\r\n}\r\n\r\n// if (entityType == \"Hub\") {\r\n//   requestMember.associatedHubs?.forEach((org) => {\r\n//     if (org.entity?.id == chosenOrgId) {\r\n//       var arr: Array<string> = org.roles ?? [];\r\n\r\n//       (permission + \",\").split(\",\").forEach((role: String) => {\r\n//         arr.push(role?.toString());\r\n//       });\r\n\r\n//       org.roles = arr;\r\n//     }\r\n//   });\r\n// }\r\n","import { useTranslation } from \"react-i18next\";\r\n\r\ninterface InputProps {\r\n  value: string;\r\n  setValue: Function;\r\n  msgError?: string;\r\n  onMsgErrorChanged?: Function;\r\n  regExp?: RegExp;\r\n  type?: string;\r\n  labelText: string;\r\n  required?: boolean;\r\n  disabled?: boolean;\r\n  autofocus?: boolean | undefined;\r\n}\r\n\r\nexport function InputComponent(props: InputProps) {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <label className=\"form-label\">{props.labelText}</label>\r\n      <input\r\n        className=\"form-control\"\r\n        type={props.type}\r\n        value={props.value}\r\n        placeholder={getPlaceHolder(props.type)}\r\n        onChange={(ev) => validate(ev.target.value)}\r\n        required={props.required}\r\n        disabled={props.disabled}\r\n        autoFocus={props.autofocus}\r\n      />\r\n      {props.msgError && <label className=\"error-msg\">{props.msgError}</label>}\r\n    </>\r\n  );\r\n\r\n  function getPlaceHolder(type: string | undefined): string {\r\n    switch (type) {\r\n      case \"tel\":\r\n        return \"000-000-0000\";\r\n      case \"email\":\r\n        return t(\"input-component.placeholder-email\");\r\n      case \"code-6digits\":\r\n        return \"XXXXXX\";\r\n      case \"code-sl5c\": //TODO: get the code format for each Hub Type.\r\n        return \"XXXXXX\";\r\n      default:\r\n        return \"\";\r\n    }\r\n  }\r\n\r\n  function getMsgError(type: string | undefined) {\r\n    switch (type) {\r\n      case \"tel\":\r\n        return t(\"input-component.error-phone\");\r\n      case \"email\":\r\n        return t(\"input-component.error-email\");\r\n      case \"code-6digits\":\r\n        return t(\"input-component.error-code-6digits\");\r\n      case \"code-sl5c\":\r\n        return t(\"input-component.error-code-sl5c\");\r\n      case \"extension\":\r\n        return t(\"input-component.error-extension\");\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  function validate(value: string) {\r\n    props.setValue(value);\r\n    if (props.regExp?.test(value)) {\r\n      props.onMsgErrorChanged?.(undefined);\r\n    } else {\r\n      props.onMsgErrorChanged?.(getMsgError(props.type));\r\n    }\r\n  }\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\nconst RegExPhone1 = /^[0-9]{3}-[0-9]{3}-[0-9]{4}$/;\r\nconst RegExPhone2 = /^\\d{10}$/;\r\n\r\ntype Props = {\r\n  value: string;\r\n  setValue: Function;\r\n  msgError: string | undefined;\r\n  onMsgErrorChanged: Function;\r\n  label: string;\r\n  required?: boolean | undefined;\r\n  disabled?: boolean | undefined;\r\n  autofocus?: boolean | undefined;\r\n};\r\n\r\nexport function PhoneFormComponent(props: Props) {\r\n  const { t } = useTranslation();\r\n  const error = t(\"input-component.error-phone\");\r\n  const labelText = props.label || t(\"common.phone\");\r\n\r\n  let disable = props.disabled && props?.disabled === true;\r\n\r\n  return (\r\n    <>\r\n      <div className=\"mb-3\">\r\n        <label className=\"form-label\">{labelText}</label>\r\n        <input\r\n          className=\"form-control\"\r\n          type=\"tel\"\r\n          value={props.value}\r\n          placeholder=\"000-000-0000\"\r\n          onChange={(ev) => validate(ev.target.value)}\r\n          disabled={disable}\r\n          autoFocus={props.autofocus}\r\n        />\r\n        {props.msgError && <label className=\"error-msg\">{props.msgError}</label>}\r\n      </div>\r\n    </>\r\n  );\r\n\r\n  function validate(value: string) {\r\n    props.setValue(value);\r\n\r\n    if (isValid(value)) {\r\n      props.msgError && props.onMsgErrorChanged(undefined);\r\n    } else {\r\n      !props.msgError && props.onMsgErrorChanged(error);\r\n    }\r\n  }\r\n\r\n  function isValid(value: string): boolean {\r\n    let valid: boolean = RegExPhone1.test(value) || RegExPhone2.test(value);\r\n\r\n    if (props.required && valid) return true;\r\n\r\n    if (!props.required && (valid || value.length === 0)) return true;\r\n\r\n    return false;\r\n  }\r\n}\r\n","import React from \"react\";\r\nimport Member from \"../../services/member/member\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"../customers/customers-page.scss\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport { useGlobalFilter, usePagination, useTable } from \"react-table\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport organizationService from \"../../services/member/organization-service\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport \"./hub-permission-table.scss\";\r\n\r\ninterface Iprops {\r\n  member: Member | undefined;\r\n  organizationId: string;\r\n  setMember: Function;\r\n}\r\n\r\nexport default function HubPermissionTable(props: Iprops) {\r\n  const { t } = useTranslation();\r\n\r\n  const { member, organizationId, setMember } = props;\r\n  const [organization, setOrganization] = useState<Organization>();\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const columnsTemp = [\r\n    {\r\n      Header: \"Hub Id\",\r\n      accessor: \"hubId\",\r\n    },\r\n    {\r\n      Header: \"User permission over Hub\",\r\n      accessor: \"permission\",\r\n    },\r\n  ];\r\n\r\n  const {\r\n    getTableProps,\r\n    getTableBodyProps,\r\n    headerGroups,\r\n    rows,\r\n    prepareRow,\r\n    page,\r\n    canPreviousPage,\r\n    canNextPage,\r\n    pageOptions,\r\n    nextPage,\r\n    previousPage,\r\n    setPageSize,\r\n    state,\r\n    preGlobalFilteredRows,\r\n    setGlobalFilter,\r\n    state: { pageIndex },\r\n  } = useTable(\r\n    {\r\n      columns: useMemo(() => columnsTemp, [languageService.language]),\r\n      data: useMemo(() => updateHubsRoleData(organization, member), [organization, member, loading]),\r\n      initialState: { pageIndex: 0 },\r\n    },\r\n    useGlobalFilter,\r\n    usePagination\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (organizationId) {\r\n      setPageSize(10);\r\n      refresh();\r\n    }\r\n  }, [organizationId]);\r\n\r\n  function refresh() {\r\n    const orgId = organizationId;\r\n    if (orgId) {\r\n      setLoading(true);\r\n\r\n      memberService.getMembers(orgId);\r\n      organizationService\r\n        .getOrganizationById(organizationId)\r\n        .then((org) => {\r\n          if (org) {\r\n            setOrganization(org);\r\n          }\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"orders-page.error-refresh\"));\r\n        })\r\n        .finally(() => {\r\n          setLoading(false);\r\n        });\r\n    }\r\n  }\r\n\r\n  async function changeMemberPermissions(permission: string, currentPermission: string, hubId: string) {\r\n    // Push updated user to DB\r\n    if (member?.email) {\r\n      setLoading(true);\r\n\r\n      permission = permission === \"None\" ? \"\" : permission;\r\n      var mem = member;\r\n\r\n      if (currentPermission === \"None\") {\r\n        await memberService\r\n          .addMemberRole(member.email, hubId, permission, \"Hub\")\r\n          .then((res) => {\r\n            var hub = new Hub();\r\n            hub.id = hubId;\r\n\r\n            mem.associatedHubs.push({\r\n              entity: hub,\r\n              roles: [permission],\r\n            });\r\n\r\n            setMember(mem);\r\n          })\r\n          .catch((err) => {\r\n            ToastHelpers.error(\"Error creating member role\");\r\n          });\r\n      } else {\r\n        await memberService\r\n          .updateMemberRole(member.email, hubId, permission, \"Hub\", \"Active\")\r\n          .then((res) => {\r\n            mem.associatedHubs.forEach((element) => {\r\n              if (element.entity?.id === hubId) {\r\n                element.roles = permission === \"\" ? [\"None\"] : [permission];\r\n              }\r\n            });\r\n            setMember(mem);\r\n          })\r\n          .catch((err) => {\r\n            ToastHelpers.error(\"Error changing member role\");\r\n          });\r\n      }\r\n    }\r\n    setLoading(false);\r\n  }\r\n\r\n  return (\r\n    <div className=\"mt 10\">\r\n      <table {...getTableProps()} className=\"table  table-sm table-hover row-clikable\">\r\n        <thead>\r\n          {headerGroups.map((headerGroup) => (\r\n            <tr {...headerGroup.getHeaderGroupProps()}>\r\n              {headerGroup.headers.map((column) => {\r\n                return <th {...column.getHeaderProps()}>{column.render(\"Header\")}</th>;\r\n              })}\r\n\r\n              {/* Empty column header for actions */}\r\n              <td></td>\r\n            </tr>\r\n          ))}\r\n        </thead>\r\n        <tbody {...getTableBodyProps()}>\r\n          {loading && (\r\n            <tr>\r\n              <td colSpan={7} className=\"text-center\">\r\n                <LoadingComponent loading={loading} />\r\n              </td>\r\n            </tr>\r\n          )}\r\n\r\n          {!loading &&\r\n            page.map((row, i) => {\r\n              prepareRow(row);\r\n\r\n              let hub = row.original as any;\r\n\r\n              return (\r\n                <tr {...row.getRowProps()}>\r\n                  <td {...row.cells[0].getCellProps()} id={member?.country}>\r\n                    {hub.hubId}\r\n                  </td>\r\n                  <td {...row.cells[1].getCellProps()}>\r\n                    <div className=\"permission-radio-group\">\r\n                      <input\r\n                        type=\"radio\"\r\n                        value=\"Admin\"\r\n                        name={`role-${hub.hubId}`}\r\n                        checked={hub.permission === \"Admin\" || hub.permission === \"admin\"}\r\n                        onChange={() => changeMemberPermissions(\"Admin\", hub.permission, hub.hubId)}\r\n                      />{\" \"}\r\n                      Admin\r\n                      <input\r\n                        type=\"radio\"\r\n                        value=\"Contributor\"\r\n                        name={`role-${hub.hubId}`}\r\n                        checked={hub.permission === \"Contributor\"}\r\n                        onChange={() => changeMemberPermissions(\"Contributor\", hub.permission, hub.hubId)}\r\n                      />{\" \"}\r\n                      Contributor\r\n                      <input\r\n                        type=\"radio\"\r\n                        value=\"Concierge\"\r\n                        name={`role-${hub.hubId}`}\r\n                        checked={hub.permission === \"Concierge\"}\r\n                        onChange={() => changeMemberPermissions(\"Concierge\", hub.permission, hub.hubId)}\r\n                      />{\" \"}\r\n                      Concierge\r\n                      <input\r\n                        type=\"radio\"\r\n                        value=\"None\"\r\n                        name={`role-${hub.hubId}`}\r\n                        checked={hub.permission === \"None\"}\r\n                        onChange={() => changeMemberPermissions(\"None\", hub.permission, hub.hubId)}\r\n                      />{\" \"}\r\n                      None\r\n                    </div>\r\n                  </td>\r\n                </tr>\r\n              );\r\n            })}\r\n        </tbody>\r\n      </table>\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction updateHubsRoleData(organization: Organization | undefined, member: Member | undefined): Array<any> {\r\n  const tableData: Array<any> = [];\r\n\r\n  organization?.associatedHubs.forEach((hub) => {\r\n    var permission = \"None\";\r\n\r\n    if (member?.associatedHubs) {\r\n      member.associatedHubs.forEach((element) => {\r\n        if (element.entity?.id == hub.hubId) {\r\n          permission = element.roles[0];\r\n        }\r\n      });\r\n    }\r\n\r\n    if (hub) {\r\n      if (hub.state === \"Approved\") {\r\n        tableData.push({\r\n          hubId: hub.hubId,\r\n          permission: permission,\r\n        });\r\n      }\r\n    }\r\n  });\r\n\r\n  return tableData;\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { Dropdown } from \"react-bootstrap\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport { InputComponent } from \"../../components/input\";\r\nimport Member from \"../../services/member/member\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport MemberRoleOrganization from \"../../services/member/member-role-organization\";\r\nimport organizationService from \"../../services/member/organization-service\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { PhoneFormComponent } from \"../../components/customer-information-components/phone-component\";\r\nimport HubPermissionTable from \"./hub-permission-table\";\r\nimport { request } from \"http\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\n\r\ninterface IProps {\r\n  editedMember: Member | undefined;\r\n  setEditingMember: Function;\r\n  chosenOrgId: String;\r\n  isNewUser: boolean;\r\n  setMemberEdited: Function;\r\n}\r\n\r\nexport default function EditMember(props: IProps) {\r\n  const { editedMember, setEditingMember, chosenOrgId, isNewUser, setMemberEdited } = props;\r\n\r\n  const [email, setEmail] = useState<string | undefined>(editedMember?.email);\r\n  const [firstName, setFirstName] = useState<string | undefined>(editedMember?.firstname);\r\n  const [lastName, setLastName] = useState<string | undefined>(editedMember?.lastname);\r\n\r\n  const [permission, setPermission] = useState<String>(\r\n    editedMember?.associatedOrganizations[0] ? editedMember.associatedOrganizations[0].roles[0] : \"\"\r\n  );\r\n  const [organization, setOrganization] = useState<String>(chosenOrgId);\r\n  const [entityType, setEntityType] = useState<String>(\"Organization\");\r\n  const [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n\r\n  const [newStatus, setNewStatus] = useState<string>(\"Active\");\r\n  const [isLoading, setLoading] = useState<boolean>(false);\r\n  const [exlanationHidden, setExlanationHidden] = useState<boolean>(true);\r\n\r\n  const handleSelect = (setFunc: any, id: any) => {\r\n    setFunc(id);\r\n  };\r\n\r\n  if (isLoading) {\r\n    return <LoadingComponent loading={isLoading} />;\r\n  }\r\n\r\n  return (\r\n    <div className=\"col-12\">\r\n      <button\r\n        className=\"btn btn-outline-primary\"\r\n        onClick={() => {\r\n          setEditingMember(false);\r\n        }}\r\n      >\r\n        <FontAwesomeIcon icon={[\"fas\", \"arrow-left\"]} />\r\n      </button>\r\n      <br></br>\r\n      {exlanationHidden ? (\r\n        <button\r\n          className=\"btn btn-outline-primary mt-4\"\r\n          onClick={() => {\r\n            setExlanationHidden(false);\r\n          }}\r\n        >\r\n          Explain Permissions...\r\n        </button>\r\n      ) : (\r\n        <div>\r\n          <p>Roles explanation (In most cases, just put Admin): </p>\r\n          <li>All have the permissions of lower roles. Eg: Admin is also a contributor that is also a concierge</li>\r\n          <li>\r\n            LocketgoAdmin (dangerous) {\">\"} Admin {\">\"} Contributor {\">\"} Concierge {\">\"} None{\" \"}\r\n          </li>\r\n          <li>LocketgoAdmins are Admins of all orgs and hubs. Only give this permission to trusted Locketgo employees</li>\r\n          <li>Admins can block doors from being reserved. They can do report exports and modify events</li>\r\n          <li>Contributors can see information related to the reservation such as client phone number or bracelet </li>\r\n          <li>Contributors can create customers on the portal for the parcel features </li>\r\n          <li>\r\n            Concierge can open doors as they wish. Concierges cannot see the organization and it's role can only be applied to the hubs{\" \"}\r\n          </li>\r\n        </div>\r\n      )}\r\n\r\n      <div className=\"row g-3 mt-3\">\r\n        {isNewUser && (\r\n          <div className=\"col-md-6\">\r\n            <InputComponent\r\n              labelText={\"Firstname\"}\r\n              value={firstName ?? \"\"}\r\n              setValue={(value: string) => setFirstName(value)}\r\n              disabled={false}\r\n            />\r\n            <InputComponent\r\n              labelText={\"Lastname\"}\r\n              value={lastName ?? \"\"}\r\n              setValue={(value: string) => setLastName(value)}\r\n              disabled={false}\r\n            />\r\n          </div>\r\n        )}\r\n\r\n        <div className=\"col-md-6\">\r\n          <InputComponent\r\n            labelText={isNewUser ? \"Email to create*\" : \"Email\"}\r\n            value={email ?? \"\"}\r\n            setValue={(value: string) => setEmail(value)}\r\n            disabled={!isNewUser}\r\n          />\r\n        </div>\r\n        <div className=\"col-md-6\">\r\n          <div style={{ display: \"flex\" }}>\r\n            <div style={{ width: \"70%\" }}>\r\n              <InputComponent\r\n                labelText={\"OrganizationId\"}\r\n                value={organization?.toString()}\r\n                setValue={(value: string) => setOrganization(value)}\r\n                disabled={false}\r\n              />\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div className=\"col-md-6\">\r\n          <InputComponent\r\n            labelText={\"Role over organization\"}\r\n            value={permission?.toString()}\r\n            setValue={(value: string) => setPermission(value)}\r\n            disabled={true}\r\n          />\r\n          <Dropdown>\r\n            <Dropdown.Toggle variant=\"primary\" id=\"dropdown-basic\">\r\n              Permission options\r\n            </Dropdown.Toggle>\r\n\r\n            <Dropdown.Menu>\r\n              <Dropdown.Item onClick={() => handleSelect(setPermission, \"Admin\")}>Admin</Dropdown.Item>\r\n              <Dropdown.Item onClick={() => handleSelect(setPermission, \"LocketgoAdmin\")}>LocketgoAdmin</Dropdown.Item>\r\n              <Dropdown.Item onClick={() => handleSelect(setPermission, \"Contributor\")}>Contributor</Dropdown.Item>\r\n              <Dropdown.Item onClick={() => handleSelect(setPermission, \"\")}>Nothing</Dropdown.Item>\r\n            </Dropdown.Menu>\r\n          </Dropdown>\r\n        </div>\r\n        {isNewUser ? (\r\n          <div className=\"mb-3\">\r\n            <PhoneFormComponent\r\n              value={phoneNumber}\r\n              setValue={setPhoneNumber}\r\n              onMsgErrorChanged={() => {}}\r\n              msgError={\"\"}\r\n              label={\"Phone Number\"}\r\n            />\r\n          </div>\r\n        ) : (\r\n          <></>\r\n        )}\r\n        {!isNewUser ? (\r\n          <div className=\"col-md-6\">\r\n            <div style={{ display: \"flex\" }}>\r\n              <div style={{ width: \"70%\" }}>\r\n                <InputComponent labelText={\"Status\"} value={newStatus} setValue={(value: string) => setNewStatus(value)} disabled={true} />\r\n              </div>\r\n            </div>\r\n            <Dropdown>\r\n              <Dropdown.Toggle variant=\"primary\" id=\"dropdown-basic\">\r\n                Status options\r\n              </Dropdown.Toggle>\r\n\r\n              <Dropdown.Menu>\r\n                <Dropdown.Item onClick={() => handleSelect(setNewStatus, \"Active\")}>Active</Dropdown.Item>\r\n                <Dropdown.Item onClick={() => handleSelect(setNewStatus, \"Disabled\")}>Disabled</Dropdown.Item>\r\n              </Dropdown.Menu>\r\n            </Dropdown>\r\n          </div>\r\n        ) : (\r\n          <></>\r\n        )}\r\n      </div>\r\n\r\n      <br></br>\r\n      <div style={{ marginBottom: \"100px\" }} className=\"mt-10\">\r\n        <button\r\n          className=\"btn btn-primary\"\r\n          onClick={() => {\r\n            setLoading(true);\r\n            changeMemberPermissions();\r\n          }}\r\n        >\r\n          {isNewUser ? \"Create Member\" : \"Update Member\"}\r\n        </button>\r\n      </div>\r\n\r\n      <h2>Hub permissions for this Member</h2>\r\n\r\n      {!isNewUser && <HubPermissionTable member={editedMember} organizationId={organization.toString()} setMember={setMemberEdited} />}\r\n    </div>\r\n  );\r\n  async function changeMemberPermissions() {\r\n    var statusText = document.getElementById(\"queryStatus\");\r\n    var res;\r\n\r\n    // Creation of updated Member\r\n    var requestMember: Member = editedMember == undefined ? new Member() : editedMember;\r\n\r\n    requestMember.email = email ?? requestMember.email;\r\n\r\n    if (isNewUser) {\r\n      var ourOrg: any = await organizationService.getOrganizationById(chosenOrgId?.toString());\r\n      requestMember.associatedOrganizations = [ourOrg];\r\n      requestMember.id = \"\";\r\n      requestMember.phone = phoneNumber ?? \"1231231234\";\r\n      requestMember.firstname = firstName ?? \"\";\r\n      requestMember.lastname = lastName ?? \"\";\r\n      requestMember.postalCode = \"\";\r\n      requestMember.unit = \"\";\r\n      requestMember.active = true;\r\n    }\r\n\r\n    if (entityType == \"Organization\") {\r\n      requestMember.associatedOrganizations?.forEach((org) => {\r\n        if (org.entity?.id == chosenOrgId) {\r\n          var arr: Array<string> = org.roles ?? [];\r\n\r\n          (permission + \",\").split(\",\").forEach((role: String) => {\r\n            arr.push(role?.toString());\r\n          });\r\n\r\n          org.roles = arr;\r\n        }\r\n      });\r\n    }\r\n\r\n    requestMember.type = \"0\";\r\n\r\n    // Push user to DB\r\n    if (isNewUser) {\r\n      if (email) {\r\n        await memberService\r\n          .createContributor(requestMember)\r\n          .then((res) => {})\r\n          .catch((err) => {\r\n            ToastHelpers.error(\"Error creating member\");\r\n          });\r\n        await memberService\r\n          .addMemberRole(email, organization, permission, entityType)\r\n          .then((res) => {\r\n            if (statusText) {\r\n              setLoading(false);\r\n            }\r\n            setEditingMember(false);\r\n          })\r\n          .catch((err) => {\r\n            ToastHelpers.error(\"Error changing member role\");\r\n          });\r\n      } else {\r\n        ToastHelpers.error(\"Invalid Email\");\r\n      }\r\n    } else {\r\n      if (email) {\r\n        await memberService\r\n          .updateMemberRole(email, organization, permission, entityType, newStatus)\r\n          .then((res) => {\r\n            setLoading(false);\r\n            setEditingMember(false);\r\n          })\r\n          .catch((err) => {\r\n            ToastHelpers.error(\"Error changing member role\");\r\n          });\r\n      } else {\r\n        ToastHelpers.error(\"Invalid Email\");\r\n      }\r\n    }\r\n  }\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { ReactSearchAutocomplete } from \"react-search-autocomplete\";\r\n\r\ntype Item = {\r\n  id: number;\r\n  name: string;\r\n  objId: string;\r\n};\r\n\r\ninterface AutocompleteSearchProps {\r\n  items: Array<Item>;\r\n  setter: Function | undefined;\r\n}\r\n\r\nexport default function AutocompleteSearch(props: AutocompleteSearchProps) {\r\n  const [currSelection, setCurrSelection] = useState<String>(\"\");\r\n\r\n  const handleOnSelect = (item: any) => {\r\n    setCurrSelection(item.objId);\r\n  };\r\n\r\n  const propagateCurrSelection = () => {\r\n    if (props.setter) {\r\n      props.setter(currSelection);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      <ReactSearchAutocomplete<Item> items={props.items} onSelect={handleOnSelect} />\r\n      <div\r\n        style={{\r\n          width: \"100%\",\r\n          display: \"flex\",\r\n          marginTop: \"5px\",\r\n          justifyContent: \"right\",\r\n        }}\r\n      >\r\n        <button\r\n          className=\"btn btn-primary\"\r\n          style={{ width: \"300px\" }}\r\n          onClick={() => {\r\n            propagateCurrSelection();\r\n          }}\r\n        >\r\n          Select\r\n        </button>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import Member from \"../../services/member/member\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"../account/member-page.scss\";\r\nimport MemberRoleTable from \"./memberRoleTable\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport { useEffect, useState } from \"react\";\r\nimport EditMember from \"./editMember\";\r\nimport organizationService from \"../../services/member/organization-service\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport AutocompleteSearch from \"../../components/autocompleteSearch\";\r\n\r\ntype Props = {\r\n  member: Member;\r\n};\r\ntype Item = {\r\n  id: number;\r\n  name: string;\r\n  objId: string;\r\n};\r\nexport default function AdminPage(props: Props) {\r\n  const { member } = props;\r\n\r\n  const { t } = useTranslation();\r\n  const [editingMember, setEditingMember] = useState<boolean>(false);\r\n  const [memberEdited, setMemberEdited] = useState<Member>();\r\n  const [orgsItems, setOrgsItems] = useState<Array<Item>>([]);\r\n  const [chosenOrgId, setChosenOrgId] = useState<String>(\"\");\r\n  const [isNewUser, setIsNewUser] = useState<boolean>(false);\r\n\r\n  useEffect(() => {\r\n    var orgsStringList: Array<Item> = [];\r\n    var count = 0;\r\n    member.associatedOrganizations.forEach((org) => {\r\n      if (org.entity) {\r\n        orgsStringList.push({\r\n          id: count,\r\n          name: org.entity.name,\r\n          objId: org.entity.id,\r\n        });\r\n        count++;\r\n      }\r\n    });\r\n\r\n    setOrgsItems(orgsStringList);\r\n  }, []);\r\n\r\n  return (\r\n    <div className=\"container page admin-page pt-5\">\r\n      <h2> DATABASE MEMBER MANAGEMENT </h2>\r\n\r\n      <h5 className=\"mt-4\"> {chosenOrgId == \"\" && \"Enter the Organisation Name of members you want to modify\"}</h5>\r\n      {chosenOrgId != \"\" ? (\r\n        editingMember ? (\r\n          <EditMember\r\n            editedMember={memberEdited}\r\n            setEditingMember={setEditingMember}\r\n            chosenOrgId={chosenOrgId}\r\n            isNewUser={isNewUser}\r\n            setMemberEdited={setMemberEdited}\r\n          />\r\n        ) : (\r\n          <MemberRoleTable\r\n            organizationId={chosenOrgId}\r\n            setEditMember={setEditingMember}\r\n            setMemberEdited={setMemberEdited}\r\n            setIsNewUser={setIsNewUser}\r\n          />\r\n        )\r\n      ) : (\r\n        <AutocompleteSearch items={orgsItems} setter={setChosenOrgId} />\r\n      )}\r\n\r\n      <div className=\"row mt-5\">\r\n        {\r\n          // <h2>Microsites TBD TODO</h2>\r\n        }\r\n\r\n        <br></br>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import languageService from \"../core/language-service\";\r\nimport ServicesApiBaseService from \"../services-api-base-service\";\r\nimport Member from \"./member\";\r\n\r\nclass CustomersService extends ServicesApiBaseService {\r\n  async getCustomer(organizationId: string, customerId: string): Promise<any | undefined> {\r\n    const customer = await this.getObject<any>(`${this.apiUrl}/organizations/${organizationId}/customers/${customerId}`);\r\n    // console.log(customer);\r\n    return customer || undefined;\r\n  }\r\n\r\n  async getCustomers(organizationId: string): Promise<Array<Member>> {\r\n    const members = await this.getObject<Array<Member>>(`${this.apiUrl}/organizations/${organizationId}/customers`);\r\n    return members || [];\r\n  }\r\n\r\n  async createCustomer(\r\n    organizationId: string,\r\n    firstname: string,\r\n    lastname: string,\r\n    phoneNumber: string,\r\n    email: string,\r\n    unit: string,\r\n    language?: string | undefined\r\n  ): Promise<string | undefined> {\r\n    return await this.postObject<any, string>(`${this.apiUrl}/organizations/${organizationId}/customers`, {\r\n      firstname: firstname,\r\n      lastname: lastname,\r\n      phone: phoneNumber,\r\n      email: email,\r\n      language: language || languageService.getLanguage(),\r\n      unit: unit,\r\n    });\r\n  }\r\n\r\n  async updateCustomer(organizationId: string, customer: any): Promise<void> {\r\n    return await this.putObject<any>(`${this.apiUrl}/organizations/${organizationId}/customers/${customer.id}`, customer);\r\n  }\r\n\r\n  async deleteCustomer(organizationId: string, customerId: string): Promise<void> {\r\n    return await this.deleteObject<any>(`${this.apiUrl}/organizations/${organizationId}/customers/${customerId}`);\r\n  }\r\n}\r\n\r\nconst customersService = new CustomersService();\r\nexport default customersService;\r\n","import { useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"./customers-page.scss\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport customersService from \"../../services/member/customers-service\";\r\nimport Member from \"../../services/member/member\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport { useGlobalFilter, usePagination, useTable } from \"react-table\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport PagingComponent from \"../../components/paging-component\";\r\nimport { Customer } from \"../../services/order/customer\";\r\nimport { AddButtonComponent, EditButtonComponent, SyncButtonComponent } from \"../../components/button-component\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport { GlobalFilter } from \"../../components/globalfilter-component\";\r\n\r\ninterface IProps {\r\n  organization: Organization | undefined;\r\n}\r\n\r\nexport default function CustomersPage(props: IProps) {\r\n  const { organization } = props;\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [customers, setCustomers] = useState<Array<Member>>([]);\r\n\r\n  const [filteredCustomers, setFilteredCustomers] = useState<Array<Customer>>([]);\r\n\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    if (organization) {\r\n      setPageSize(10);\r\n\r\n      customersService\r\n        .getCustomers(organization.id)\r\n        .then((customers) => {\r\n          setCustomers(customers);\r\n          refresh();\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"customers-page.error-refresh\"));\r\n        });\r\n    }\r\n  }, []);\r\n\r\n  const filterCustomers = (list: Array<Member>) => {\r\n    if (!customers) {\r\n      setFilteredCustomers([]);\r\n      return;\r\n    }\r\n\r\n    setFilteredCustomers(list);\r\n  };\r\n\r\n  //Table configuration\r\n  const columnsTemp = [\r\n    {\r\n      Header: t(\"customers-page-table-header.FirstName\"),\r\n      accessor: \"firstname\",\r\n    },\r\n    {\r\n      Header: t(\"customers-page-table-header.LastName\"),\r\n      accessor: \"lastname\",\r\n    },\r\n    {\r\n      Header: t(\"customers-page-table-header.Email\"),\r\n      accessor: \"email\",\r\n    },\r\n    {\r\n      Header: t(\"customers-page-table-header.Phone\"),\r\n      accessor: \"phone\",\r\n    },\r\n    {\r\n      Header: t(\"customers-page-table-header.Unit\"),\r\n      accessor: \"unit\",\r\n    },\r\n  ];\r\n\r\n  const {\r\n    getTableProps,\r\n    getTableBodyProps,\r\n    headerGroups,\r\n    rows,\r\n    prepareRow,\r\n    page,\r\n    canPreviousPage,\r\n    canNextPage,\r\n    pageOptions,\r\n    nextPage,\r\n    previousPage,\r\n    setPageSize,\r\n    state,\r\n    preGlobalFilteredRows,\r\n    setGlobalFilter,\r\n    state: { pageIndex },\r\n  } = useTable(\r\n    {\r\n      // eslint-disable-next-line\r\n      columns: useMemo(() => columnsTemp, [languageService.language]),\r\n      // eslint-disable-next-line\r\n      data: useMemo(() => updateTableCustomersData(filteredCustomers), [filteredCustomers]),\r\n      initialState: { pageIndex: 0 },\r\n    },\r\n    useGlobalFilter,\r\n    usePagination\r\n  );\r\n\r\n  useEffect(() => {\r\n    setGlobalFilter(state.globalFilter);\r\n  }, [filteredCustomers]);\r\n\r\n  return (\r\n    <div className=\"container page customers-page\">\r\n      <h1>{t(\"customers-page.title\")}</h1>\r\n\r\n      <div className=\"toolbar\">\r\n        <AddButtonComponent\r\n          title={t(\"customers-page.btn-create-customer\")}\r\n          onClick={() => history.push(`/create-customer`)}\r\n        ></AddButtonComponent>\r\n\r\n        <SyncButtonComponent className=\"ms-2\" onClick={() => refresh()}></SyncButtonComponent>\r\n\r\n        <GlobalFilter preGlobalFilteredRows={preGlobalFilteredRows} globalFilter={state.globalFilter} setGlobalFilter={setGlobalFilter} />\r\n      </div>\r\n\r\n      <div>\r\n        <div className=\"row mt-3\">\r\n          <div className=\"col\">\r\n            <div className=\"customer card\">\r\n              <div className=\"card-body\">\r\n                <table {...getTableProps()} className=\"table  table-sm table-hover row-clikable\">\r\n                  <thead>\r\n                    {headerGroups.map((headerGroup) => (\r\n                      <tr {...headerGroup.getHeaderGroupProps()}>\r\n                        {headerGroup.headers.map((column) => {\r\n                          return <th {...column.getHeaderProps()}>{column.render(\"Header\")}</th>;\r\n                        })}\r\n\r\n                        {/* Empty column header for actions */}\r\n                        <td></td>\r\n                      </tr>\r\n                    ))}\r\n                  </thead>\r\n                  <tbody {...getTableBodyProps()}>\r\n                    {loading && (\r\n                      <tr>\r\n                        <td colSpan={7} className=\"text-center\">\r\n                          <LoadingComponent loading={loading} />\r\n                        </td>\r\n                      </tr>\r\n                    )}\r\n\r\n                    {!loading &&\r\n                      page.map((row, i) => {\r\n                        prepareRow(row);\r\n\r\n                        let customer = row.original as any;\r\n                        let url = `/customers/${customer.id}`;\r\n\r\n                        return (\r\n                          <tr {...row.getRowProps()} onClick={() => history.push(url)}>\r\n                            <td {...row.cells[0].getCellProps()}>{customer.firstname}</td>\r\n                            <td {...row.cells[1].getCellProps()}>{customer.lastname}</td>\r\n                            <td {...row.cells[2].getCellProps()}>{customer.email}</td>\r\n                            <td {...row.cells[3].getCellProps()}>{customer.phone}</td>\r\n                            <td {...row.cells[4].getCellProps()}>{customer.unit}</td>\r\n                            <td>\r\n                              <EditButtonComponent url={url}></EditButtonComponent>\r\n                            </td>\r\n                          </tr>\r\n                        );\r\n                      })}\r\n                  </tbody>\r\n                </table>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <PagingComponent\r\n          countTextResource={\"customers-page.item-count\"}\r\n          count={rows.length}\r\n          pageLength={pageOptions.length}\r\n          pageIndex={pageIndex}\r\n          canPreviousPage={canPreviousPage}\r\n          canNextPage={canNextPage}\r\n          previousPage={previousPage}\r\n          nextPage={nextPage}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function refresh() {\r\n    const orgId = organization?.id;\r\n    if (orgId) {\r\n      setLoading(true);\r\n\r\n      customersService\r\n        .getCustomers(orgId)\r\n        .then((data) => {\r\n          setCustomers(data);\r\n          filterCustomers(data);\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"orders-page.error-refresh\"));\r\n        })\r\n        .finally(() => {\r\n          setLoading(false);\r\n        });\r\n    }\r\n  }\r\n}\r\n\r\nfunction updateTableCustomersData(filteredCustomers: Customer[]): Array<any> {\r\n  const tableData: Array<any> = [];\r\n  if (filteredCustomers) {\r\n    filteredCustomers.forEach((customer: Customer) => {\r\n      if (customer.id && customer.lastname && customer.firstname && customer.email) {\r\n        tableData.push({\r\n          id: customer.id,\r\n          firstname: customer.firstname.toString() ?? \"\",\r\n          lastname: customer.lastname.toString() ?? \"\",\r\n          email: customer.email.toString() ?? \"\",\r\n          phone: customer.phone?.toString() ?? \"\",\r\n          unit: customer.unit?.toString() ?? \"\",\r\n        });\r\n      }\r\n    });\r\n  }\r\n  return tableData;\r\n}\r\n","export enum CompartmentStates {\r\n  Unknown = \"Unknown\",\r\n  Closed = \"Closed\",\r\n  Opened = \"Opened\",\r\n}\r\n\r\nexport class Compartment {\r\n  number: string = \"\";\r\n  state: CompartmentStates = CompartmentStates.Unknown;\r\n  isObjectDetected: boolean = false;\r\n  sizeId: string = \"\";\r\n  packagingOptionsIds: string[] = [];\r\n}\r\n","import { Reservation } from \"../order/reservation\";\r\nimport { Compartment, CompartmentStates } from \"./compartment\";\r\nimport { Group } from \"./group\";\r\nimport { Hub, MyHub } from \"./hub\";\r\n\r\nexport class HubHelpers {\r\n  static findGroup(hub: Hub, groupId: string): Group | undefined {\r\n    let group = undefined;\r\n    hub?.groups?.forEach((element: Group) => {\r\n      if (element.id === groupId) {\r\n        group = element;\r\n      }\r\n    });\r\n    return group;\r\n  }\r\n\r\n  static findCompartment(hub: Hub, reservation: Reservation): Compartment | undefined {\r\n    return HubHelpers.findGroup(hub, reservation.groupId)?.compartments.find((c) => c.number === reservation?.compartmentNumber);\r\n  }\r\n\r\n  static GetCompartmentCount(hub: Hub): number {\r\n    let nbCompartements = 0;\r\n    for (let i = 0; i < hub.groups.length; i++) {\r\n      nbCompartements += hub.groups[i].compartments.length;\r\n    }\r\n    return nbCompartements;\r\n  }\r\n\r\n  static getPackagingOptiponIds(hub: Hub): Set<string> {\r\n    let ids: Set<string> = new Set<string>();\r\n\r\n    hub.groups?.forEach((group: Group) => {\r\n      group.compartments?.forEach((compartment: Compartment) => {\r\n        compartment.packagingOptionsIds?.forEach((packagingOptionId: string) => {\r\n          ids.add(packagingOptionId);\r\n        });\r\n      });\r\n    });\r\n\r\n    return ids;\r\n  }\r\n\r\n  static isHubOnline(hubState: string | undefined) {\r\n    return hubState === \"Online\";\r\n  }\r\n\r\n  static isOneGroupsOnline(hub: Hub): boolean {\r\n    if (!this.isHubOnline(hub.state)) return false;\r\n\r\n    let group = hub.groups.find((group) => group.state === \"Online\");\r\n    return group !== null || group !== undefined;\r\n  }\r\n\r\n  static isGroupOnline(hub: Hub, groupId: string): boolean {\r\n    if (!this.isHubOnline(hub.state)) return false;\r\n\r\n    let group: Group | undefined = hub?.groups.find((group: Group) => group.id === groupId);\r\n\r\n    if (!group || !group?.state) return false;\r\n\r\n    return group.state === \"Online\";\r\n  }\r\n\r\n  static isCompartmentOnline(hub: Hub, groupId: string, compartmentNumber: string): boolean {\r\n    if (!this.isHubOnline(hub.state)) return false;\r\n\r\n    let group: Group | undefined = hub?.groups.find((group: Group) => group.id === groupId);\r\n\r\n    if (!group || !group?.state) return false;\r\n\r\n    let compartment: Compartment | undefined = group?.compartments.find(\r\n      (compartment: Compartment) => compartment.number === compartmentNumber\r\n    );\r\n\r\n    if (!compartment || !compartment?.state) return false;\r\n\r\n    return compartment.state !== \"Unknown\";\r\n  }\r\n\r\n  static getAddress(hub: Hub): string {\r\n    if (!hub || !hub.address) {\r\n      return \"\";\r\n    }\r\n\r\n    let text = \"\";\r\n\r\n    if (hub.address.streetNumber) {\r\n      text = hub.address.streetNumber;\r\n    }\r\n    if (hub.address.street) {\r\n      text += (text.length > 0 ? \" \" : \"\") + hub.address.street;\r\n    }\r\n\r\n    if (hub.address.city) {\r\n      text += (text.length > 0 ? \", \" : \"\") + hub.address.city;\r\n    }\r\n    if (hub.address.state) {\r\n      text += (text.length > 0 ? \", \" : \"\") + hub.address.state;\r\n    }\r\n    if (hub.address.postalCode) {\r\n      text += (text.length > 0 ? \", \" : \"\") + hub.address.postalCode;\r\n    }\r\n\r\n    return text;\r\n  }\r\n\r\n  static getCompartmentSizeIds(hub: Hub): Set<string> {\r\n    let sizeIds = new Set<string>();\r\n\r\n    if (hub.id && hub.groups.length > 0) {\r\n      hub.groups.forEach((group) => {\r\n        if (group.compartments.length > 0) {\r\n          group.compartments.forEach((compartment) => {\r\n            if (!sizeIds.has(compartment.sizeId)) {\r\n              sizeIds.add(compartment.sizeId);\r\n            }\r\n          });\r\n        }\r\n      });\r\n    }\r\n\r\n    return sizeIds;\r\n  }\r\n\r\n  static getAvailableCompartmentSizeIds(hub: MyHub): Array<string> {\r\n    let sizeIds = Array<string>();\r\n\r\n    for (let i = 0; i < hub.groups.length; i++) {\r\n      let group = hub.groups[i];\r\n      for (let j = 0; j < group.compartments.length; j++) {\r\n        let compartment = group.compartments[j];\r\n        const compartmentHasReservation = hub.reservations.find(\r\n          (r) => r.groupId === group.id && r.compartmentNumber === compartment.number\r\n        );\r\n        const isOpened = compartment.state === CompartmentStates.Opened;\r\n        const isDeactivated = hub?.reservationDenies?.some(\r\n          (r) => r.compartmentNumber === compartment.number && r.groupId === group.id && r.hubId === hub.id\r\n        );\r\n\r\n        if (!sizeIds.includes(compartment.sizeId) && !compartmentHasReservation && !isOpened && !isDeactivated) {\r\n          sizeIds.push(compartment.sizeId);\r\n        }\r\n      }\r\n    }\r\n\r\n    return sizeIds;\r\n  }\r\n}\r\n","import ServicesApiBaseService from \"../services-api-base-service\";\r\nimport { CompartmentSize } from \"./compartmentSize\";\r\n\r\nclass CompartmentSizeService extends ServicesApiBaseService {\r\n  async getCompartmentSizes(token?: string | undefined): Promise<Array<CompartmentSize>> {\r\n    const compartmentSizes = await this.getObject<Array<CompartmentSize>>(\r\n      `${this.apiUrl}/compartmentSizes${!token ? \"\" : `?token=${token}`}`\r\n    );\r\n    if (compartmentSizes) {\r\n      let cs = compartmentSizes.map((compartmentSize) => {\r\n        if (compartmentSize?.description) {\r\n          compartmentSize.description = new Map(Object.entries(compartmentSize?.description));\r\n        }\r\n        if (compartmentSize.name) {\r\n          compartmentSize.name = new Map(Object.entries(compartmentSize?.name));\r\n        }\r\n        return compartmentSize;\r\n      });\r\n      return cs;\r\n    }\r\n\r\n    return compartmentSizes || [];\r\n  }\r\n}\r\n\r\nconst compartmentSizeService = new CompartmentSizeService();\r\nexport default compartmentSizeService;\r\n","import ServicesApiBaseService from \"../services-api-base-service\";\r\nimport { PackagingOption } from \"./packgingOption\";\r\n\r\nclass PackagingOptionService extends ServicesApiBaseService {\r\n  async getPackagingOptions(): Promise<Array<PackagingOption>> {\r\n    const packagingOptions = await this.getObject<Array<PackagingOption>>(`${this.apiUrl}/packagingOptions`);\r\n    if (packagingOptions) {\r\n      let cs = packagingOptions.map((packagingOption) => {\r\n        if (packagingOption?.description) {\r\n          packagingOption.description = new Map(Object.entries(packagingOption?.description));\r\n        }\r\n        return packagingOption;\r\n      });\r\n      return cs;\r\n    }\r\n\r\n    return packagingOptions || [];\r\n  }\r\n}\r\n\r\nconst packagingOptionService = new PackagingOptionService();\r\nexport default packagingOptionService;\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport \"./yesno-component.scss\";\r\n\r\ninterface ValidationProps {\r\n  headerMsg: string;\r\n  children?: React.ReactNode;\r\n  onYesClick: Function;\r\n  onNoClick: Function;\r\n  isDangerousChoice?: boolean;\r\n}\r\n\r\nexport function YesNoComponent(props: ValidationProps) {\r\n  const { t } = useTranslation();\r\n\r\n  const yesButtonClass = props.isDangerousChoice ? \"btn btn-risky me-2\" : \"btn btn-outline-primary me-2\";\r\n\r\n  return (\r\n    <div className=\"container page\">\r\n      <div className=\"col-12 col-xl-6 offset-xl-3\">\r\n        <div className=\"card\">\r\n          <div className=\"card-header align-items-center\">\r\n            <div className=\"d-inline-block\">\r\n              <h2>{props.headerMsg}</h2>{\" \"}\r\n            </div>\r\n          </div>\r\n          {props.children && <div className=\"card-body\">{props.children}</div>}\r\n          <div className=\"card-footer\">\r\n            <div className=\"align-items-center\">\r\n              <button className={yesButtonClass} onClick={() => props.onYesClick()}>\r\n                {props.isDangerousChoice && <FontAwesomeIcon className=\"icon\" icon={[\"fas\", \"exclamation-triangle\"]} />}\r\n                {t(\"common.yes\")}\r\n              </button>\r\n\r\n              <button className=\"btn btn-outline-primary me-2\" onClick={() => props.onNoClick(false)}>\r\n                {t(\"common.no\")}\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\n\r\ninterface Props {\r\n  headerMsg: string;\r\n  onYesClick: Function;\r\n  onNoClick: Function;\r\n}\r\n\r\nexport function CancelReservationMsgomponent(props: Props) {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <div className=\"container page\">\r\n        <div className=\"col-12 col-lg-8 offset-lg-2\">\r\n          <div className=\"card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <div className=\"d-inline-block\">\r\n                <h2>{props.headerMsg}</h2>{\" \"}\r\n              </div>\r\n            </div>\r\n            <div className=\"card-body\">\r\n              <div className=\"align-items-center\">\r\n                <button className=\"btn btn-outline-primary me-2\" onClick={() => props.onYesClick()}>\r\n                  {t(\"order-page.cancel-reservation.btn-yes\")}\r\n                </button>\r\n\r\n                <button className=\"btn btn-outline-primary me-2\" onClick={() => props.onNoClick(false)}>\r\n                  {t(\"order-page.cancel-reservation.btn-no\")}\r\n                </button>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n}\r\n","export enum PaymentState {\r\n  Timeout = \"Timeout\",\r\n  Error = \"Error\",\r\n  Success = \"Success\",\r\n}\r\n","import ServicesApiBaseService from \"../services-api-base-service\";\r\nimport { CardPaymentRequest } from \"./payment-request\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport { CardPaymentIntentResponse } from \"./payment-intent-response\";\r\nimport orderService from \"../order/order-service\";\r\nimport { PaymentState } from \"./payment-state\";\r\nimport { CardPaymentResponse } from \"./payment-response\";\r\nimport { Pricing } from \"./pricing\";\r\nimport { Payment } from \"./payment\";\r\n\r\nclass PaymentService extends ServicesApiBaseService {\r\n  async createPaymentIntent(orderId: string): Promise<CardPaymentIntentResponse> {\r\n    return await this.postObject<any, any>(`${this.apiUrl}/payments/create-payment-intent/${orderId}`, null);\r\n  }\r\n\r\n  async pay(cardPaymentRequest: CardPaymentRequest, organizationId: string): Promise<CardPaymentResponse> {\r\n    if (!cardPaymentRequest.idempotencyKey) cardPaymentRequest.idempotencyKey = uuidv4();\r\n\r\n    let timeoutId = setTimeout(() => {\r\n      orderService\r\n        .getOrderById(organizationId, cardPaymentRequest.orderToken, cardPaymentRequest.orderToken)\r\n        .then((order) => {\r\n          if (order && order.payments && order.payments.length > 0) {\r\n            console.log(\"Payment charge Success (Timer)\");\r\n            return { state: PaymentState.Success };\r\n          }\r\n\r\n          console.log(\"Payment charge Timeout\");\r\n          return { state: PaymentState.Timeout };\r\n        })\r\n        .catch(() => {\r\n          console.log(\"Payment charge Timeout error catched\");\r\n          return { state: PaymentState.Timeout };\r\n        });\r\n    }, 25000);\r\n\r\n    try {\r\n      const error = await this.postObject<CardPaymentRequest, string>(`${this.apiUrl}/payments`, cardPaymentRequest);\r\n      if (error) {\r\n        return { state: PaymentState.Error, error: error };\r\n      } else {\r\n        return { state: PaymentState.Success, error: undefined };\r\n      }\r\n    } catch (e: any) {\r\n      console.log(typeof e);\r\n      console.error(e.message);\r\n      return { state: PaymentState.Error, error: \"Declined payment\" };\r\n    } finally {\r\n      clearTimeout(timeoutId);\r\n    }\r\n  }\r\n\r\n  async getEndNowPricing(orderToken: string): Promise<Pricing | undefined> {\r\n    let pricing = await this.getObject<Pricing>(`${this.apiUrl}/payments/end-now-pricing?ordertoken=${orderToken}`);\r\n    return pricing;\r\n  }\r\n\r\n  async getPayment(orderToken: string): Promise<Payment[]> {\r\n    let payment = await this.getObject<Payment[]>(`${this.apiUrl}/payments?ordertoken=${orderToken}`);\r\n    return payment || [];\r\n  }\r\n\r\n  async endReservationEarly(orderToken: string): Promise<void> {\r\n    let idempotencyKey = uuidv4();\r\n    await this.postObject<any, any>(`${this.apiUrl}/payments/pay-for-end-of-reservation`, {\r\n      orderToken: orderToken,\r\n      idempotencyKey: idempotencyKey,\r\n    });\r\n  }\r\n\r\n  async refundPayment(paymentId: string): Promise<void> {\r\n    let idempotencyKey = uuidv4();\r\n    await this.postObject<any, any>(`${this.apiUrl}/payments/${paymentId}/actions/refund?idempotencyKey=${idempotencyKey}`, null);\r\n  }\r\n}\r\n\r\nconst paymentService = new PaymentService();\r\nexport default paymentService;\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Order } from \"../../../services/order/order\";\r\nimport languageService from \"../../../services/core/language-service\";\r\nimport StringHelpers from \"../../../services/core/string-helpers\";\r\nimport Member from \"../../../services/member/member\";\r\nimport { OrderHelpers } from \"../../../services/order/order-helpers\";\r\nimport DateHelpers from \"../../../services/core/date-helpers\";\r\n\r\ninterface OrderHistoryProps {\r\n  order: Order;\r\n  member: Member;\r\n}\r\n\r\nexport default function OrderHistory({ order, member }: OrderHistoryProps) {\r\n  const language: string = languageService.getLanguage();\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <div className=\"row panel-history-mobile\">\r\n        <div className=\"col-12\">\r\n          <div className=\"history card\">\r\n            <div className=\"card-body\">\r\n              <h5 className=\"card-title\">{t(\"order-page.history\")}</h5>\r\n\r\n              {order.activities.map((activity) => {\r\n                return (\r\n                  <div className=\"history-item\" key={activity.id}>\r\n                    <hr />\r\n                    <div>\r\n                      <span className=\"creation-date\">\r\n                        {DateHelpers.formatDateTime(new Date(activity.createdOn), DateHelpers.UserTimeZone)}\r\n                      </span>\r\n                      <span className=\"author\">{activity.createBy}</span>\r\n                    </div>\r\n                    <div className=\"text\">\r\n                      <span>{OrderHelpers.getActivityDescription(activity, language)}</span>\r\n                    </div>\r\n                  </div>\r\n                );\r\n              })}\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <div className=\"row panel-history-desktop\">\r\n        <div className=\"col-12\">\r\n          <div className=\"customer card\">\r\n            <div className=\"card-body\">\r\n              <h5 className=\"card-title\">{t(\"order-page.history\")}</h5>\r\n\r\n              <table className=\"table table-history\">\r\n                <thead>\r\n                  <tr>\r\n                    <td>{t(\"order-page-table-header.date\")}</td>\r\n                    <td>{t(\"order-page-table-header.operation\")}</td>\r\n                    <td>{t(\"order-page-table-header.author\")}</td>\r\n                  </tr>\r\n                </thead>\r\n                <tbody>\r\n                  {order.activities.map((activity) => {\r\n                    return (\r\n                      <tr key={activity.id}>\r\n                        <td>{DateHelpers.formatDateTime(new Date(activity.createdOn), DateHelpers.UserTimeZone)}</td>\r\n                        <td>{OrderHelpers.getActivityDescription(activity, language)}</td>\r\n                        <td>{activity.createBy}</td>\r\n                      </tr>\r\n                    );\r\n                  })}\r\n                </tbody>\r\n              </table>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\nimport StringHelpers from \"../../../services/core/string-helpers\";\r\nimport { Order } from \"../../../services/order/order\";\r\nimport { OrderHelpers } from \"../../../services/order/order-helpers\";\r\nimport { Payment } from \"../../../services/payment/payment\";\r\nimport DateHelpers from \"../../../services/core/date-helpers\";\r\n\r\ninterface OrderPaymentInformationProps {\r\n  order: Order;\r\n  payment: Payment | undefined;\r\n  isPersonalStorage: boolean;\r\n  timeZone: string;\r\n}\r\n\r\nexport default function OrderPaymentInformation(props: OrderPaymentInformationProps) {\r\n  const { order, payment, isPersonalStorage, timeZone } = props;\r\n  const { t } = useTranslation();\r\n  return (\r\n    <div className=\"col-12 col-lg-4\">\r\n      {payment && (\r\n        <div className=\"card\">\r\n          <div className=\"card-body\">\r\n            <h5 className=\"card-title d-flex justify-content-between\">\r\n              <span>{t(\"order-page.reservation-payment-informations\")}</span>\r\n            </h5>\r\n            <p className=\"card-text\">\r\n              {isPersonalStorage && (\r\n                <>\r\n                  {t(\"order-page.paid-date\")}{\" \"}\r\n                  <strong>\r\n                    {payment?.creationDate\r\n                      ? DateHelpers.formatDateTime(new Date(payment?.creationDate), timeZone)\r\n                      : t(\"order-page.packaging-option-none\")}\r\n                  </strong>\r\n                  <br />\r\n                  {t(\"order-page.paid-amount\")}{\" \"}\r\n                  <strong>\r\n                    {t(\"order-page.price\", {\r\n                      cost: payment ? StringHelpers.formatPrice(payment.amount + payment.saleTaxTotal) : StringHelpers.formatPrice(0),\r\n                      currency: payment?.currency,\r\n                    })}\r\n\r\n                    {OrderHelpers.isRefundedOrder(order) && <span className={\"ms-2 badge bg-danger\"}>{t(\"order-page.refunded\")}</span>}\r\n                  </strong>\r\n                  {OrderHelpers.canRefundOrder(order) && (\r\n                    <>\r\n                      <br />\r\n                      {t(\"order-page.card-number\")}{\" \"}\r\n                      <strong>\r\n                        {payment?.cardLastFour && payment?.cardBrand\r\n                          ? `${payment?.cardBrand} •••• •••• •••• ${payment?.cardLastFour}`\r\n                          : t(\"order-page.packaging-option-none\")}\r\n                      </strong>\r\n                      <br />\r\n                      {t(\"order-page.card-expiration\")}{\" \"}\r\n                      <strong>\r\n                        {payment?.cardExpirationMonth && payment?.cardExpirationYear\r\n                          ? ` ${String(payment?.cardExpirationMonth).padStart(2, \"0\")}/${String(payment?.cardExpirationYear % 100).padStart(\r\n                              2,\r\n                              \"0\"\r\n                            )}`\r\n                          : t(\"order-page.packaging-option-none\")}\r\n                      </strong>\r\n                    </>\r\n                  )}\r\n                </>\r\n              )}\r\n            </p>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\nimport HubLocationComponent from \"../../../components/hub-location-component\";\r\nimport languageService from \"../../../services/core/language-service\";\r\nimport StringHelpers from \"../../../services/core/string-helpers\";\r\nimport { Hub } from \"../../../services/hub/hub\";\r\nimport { PackagingOption } from \"../../../services/hub/packgingOption\";\r\nimport { Order } from \"../../../services/order/order\";\r\nimport DateHelpers from \"../../../services/core/date-helpers\";\r\n\r\ninterface OrderGeneralProps {\r\n  order: Order;\r\n  hub: Hub;\r\n  isOrgContributor: boolean | undefined;\r\n  timeZone: string;\r\n  packagingOption: PackagingOption | null;\r\n  carrierName: string | undefined;\r\n}\r\n\r\nexport default function OrderGeneral(props: OrderGeneralProps) {\r\n  const { order, hub, isOrgContributor, timeZone, packagingOption, carrierName } = props;\r\n  const { t } = useTranslation();\r\n  return (\r\n    <div className=\"col-12 col-lg-4\">\r\n      <div className=\"card\">\r\n        <div className=\"card-body\">\r\n          <h5 className=\"card-title d-flex justify-content-between\">\r\n            <span>{t(\"order-page.general\")}</span>\r\n          </h5>\r\n          <p className=\"card-text\">\r\n            <span>\r\n              {t(\"order-page.location\")}\r\n              {\": \"}\r\n              <strong>\r\n                <HubLocationComponent hub={hub} />\r\n              </strong>\r\n              <br />\r\n            </span>\r\n            {isOrgContributor && (\r\n              <span>\r\n                {t(\"order-page.order-flow\")}{\" \"}\r\n                <strong>{order.flow && t(\"order-page.order-flow-\" + order.flow.toString().toLowerCase())}</strong>\r\n              </span>\r\n            )}\r\n            <br />\r\n            {t(\"order-page.creation-date\")} <strong>{DateHelpers.formatDateTime(new Date(order?.orderDate), timeZone)}</strong>\r\n            {order?.flow.toString() === \"PersonalStorage\" && (\r\n              <>\r\n                <br />\r\n                <span>\r\n                  {t(\"order-page.reservation-Block-Name\")} <strong>{order?.items[0]?.reservation?.reservationBlockName}</strong>\r\n                </span>\r\n              </>\r\n            )}\r\n            {packagingOption && (\r\n              <>\r\n                <br />\r\n                {t(\"order-page.packaging-option\")}:{\" \"}\r\n                <strong>{packagingOption && packagingOption.description.get(languageService.language)}</strong>\r\n              </>\r\n            )}\r\n            {carrierName && (\r\n              <>\r\n                <br />\r\n                {t(\"order-page.carrier\")}: <strong>{carrierName}</strong>\r\n              </>\r\n            )}\r\n            {order.referenceNumber && (\r\n              <>\r\n                <br />\r\n                <span className=\"overflow-ellipsis\">\r\n                  {t(\"order-page.reference-number\")}: <strong>{order.referenceNumber}</strong>\r\n                </span>\r\n              </>\r\n            )}\r\n          </p>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface OrderCustomerProps {\r\n  customerInfoHtml: string;\r\n  hasCustomerContactInformation: boolean;\r\n  canSendNotification: boolean;\r\n  isFirstTimeNotification: boolean;\r\n  onSendNotification: React.MouseEventHandler<HTMLButtonElement>;\r\n}\r\n\r\nexport default function OrderCustomer(props: OrderCustomerProps) {\r\n  const { customerInfoHtml, hasCustomerContactInformation, canSendNotification, isFirstTimeNotification, onSendNotification } = props;\r\n  const { t } = useTranslation();\r\n  return (\r\n    <div className=\"col-12 col-lg-4\">\r\n      <div className=\"customer card\">\r\n        <div className=\"card-body\">\r\n          <h5 className=\"card-title\">{t(\"order-page.customer\")}</h5>\r\n          <div className=\"row\">\r\n            <div className=\"col-12\">\r\n              <p dangerouslySetInnerHTML={{ __html: customerInfoHtml }}></p>\r\n            </div>\r\n          </div>\r\n          {hasCustomerContactInformation && (\r\n            <div className=\"row\">\r\n              <div className=\"col-12\">\r\n                <button\r\n                  className=\"btn btn-sm btn-primary float-end\"\r\n                  onClick={onSendNotification}\r\n                  disabled={!canSendNotification}\r\n                >\r\n                  {isFirstTimeNotification ? t(\"order-page.notify\") : t(\"order-page.notify-again\")}\r\n                  <FontAwesomeIcon className=\"ms-1\" icon={[\"fas\", \"bell\"]} />\r\n                </button>\r\n              </div>\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport function DoorOpeningGifComponent() {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <span>\r\n        <img className=\"opening-image\" src=\"/locketgo-glyph-spin.gif\" alt=\"\" /> {t(\"order-page.opening\")}\r\n      </span>\r\n    </>\r\n  );\r\n}\r\n\r\nexport function DoorOpenedComponent() {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <FontAwesomeIcon icon={[\"fas\", \"lock-open\"]} />\r\n      <span className=\"ms-2\">{t(\"order-page.opened\")}</span>\r\n    </>\r\n  );\r\n}\r\n\r\ninterface OpenDoorProps {\r\n  onClick: Function;\r\n  disabled: boolean;\r\n  displayIcon: boolean;\r\n}\r\nOpenDoorComponent.defaultProps = {\r\n  disabled: false,\r\n  displayIcon: true,\r\n};\r\nexport function OpenDoorComponent(props: OpenDoorProps) {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <button className=\"btn btn-primary text-nowrap\" onClick={() => props.onClick()} disabled={props.disabled}>\r\n        {props.displayIcon && <FontAwesomeIcon icon={[\"fas\", \"lock\"]} />}\r\n        <span className=\"ms-2\">{t(\"order-page.btnOpen\")}</span>\r\n      </button>\r\n    </>\r\n  );\r\n}\r\n\r\ninterface CreateReservationProps {\r\n  onClick: Function;\r\n  title: string;\r\n  disabled: boolean;\r\n}\r\n\r\nexport function CreateReservationComponent(props: CreateReservationProps) {\r\n  return (\r\n    <button className=\"btn-reserve-locker mt-3 mb-3 btn btn-primary\" onClick={() => props.onClick()} disabled={props.disabled}>\r\n      <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"plus\"]} />\r\n      {props.title}\r\n    </button>\r\n  );\r\n}\r\n\r\ninterface NoReservationComponentProps {\r\n  title: string;\r\n}\r\n\r\nexport function NoReservationComponent(props: NoReservationComponentProps) {\r\n  return (\r\n    <>\r\n      <tr key={\"noreservation\"}>\r\n        <td colSpan={9} style={{ textAlign: \"center\" }}>\r\n          {props.title}\r\n        </td>\r\n      </tr>\r\n    </>\r\n  );\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport moment from \"moment\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { SyncButtonComponent, DeleteButtonComponent } from \"../../../components/button-component\";\r\nimport { NotifyLevelComponent } from \"../../../components/notify-level-icon-component\";\r\nimport {\r\n  NoReservationComponent,\r\n  DoorOpeningGifComponent,\r\n  OpenDoorComponent,\r\n  DoorOpenedComponent,\r\n} from \"../../../components/order-page-components\";\r\nimport { StateBadgeComponent } from \"../../../components/state-badge-component\";\r\nimport languageService from \"../../../services/core/language-service\";\r\nimport StringHelpers from \"../../../services/core/string-helpers\";\r\nimport ToastHelpers from \"../../../services/core/toast-helpers\";\r\nimport { CompartmentSize } from \"../../../services/hub/compartmentSize\";\r\nimport { Hub } from \"../../../services/hub/hub\";\r\nimport { HubHelpers } from \"../../../services/hub/hub-helper\";\r\nimport { Order } from \"../../../services/order/order\";\r\nimport { OrderHelpers } from \"../../../services/order/order-helpers\";\r\nimport { Reservation } from \"../../../services/order/reservation\";\r\nimport Organization from \"../../../services/organization/organization\";\r\nimport orderService from \"../../../services/order/order-service\";\r\nimport { ReservationState } from \"../../../services/order/ReservationState\";\r\nimport { useMemo } from \"react\";\r\nimport DateHelpers from \"../../../services/core/date-helpers\";\r\n\r\ninterface OrderReservationProps {\r\n  order: Order;\r\n  orderId: string;\r\n  organization: Organization;\r\n  hub: Hub;\r\n  isAdmin: boolean;\r\n  isOrgContributor: boolean | undefined;\r\n  isCarriedByCarrier: boolean;\r\n  isPersonalStorage: boolean;\r\n  isReturn: boolean;\r\n  itemIdInOpening: string | null;\r\n  compartmentSizes: Array<CompartmentSize>;\r\n  onCreateReservation(): void;\r\n  onRefresh(): Promise<void>;\r\n  onTrackingNumberDelete(orderItemId: string, trackingNumber: string): void;\r\n  onOrderItemDelete(organizationId: string, orderId: string, orderItemId: string, reservationState: string): void;\r\n  openDoor(organizationId: string, orderId: string, orderItemId: string, state: string): Promise<void>;\r\n}\r\n\r\nfunction OrderReservation(props: OrderReservationProps) {\r\n  const {\r\n    order,\r\n    orderId,\r\n    organization,\r\n    hub,\r\n    isAdmin,\r\n    isOrgContributor,\r\n    isCarriedByCarrier,\r\n    isPersonalStorage,\r\n    isReturn,\r\n    itemIdInOpening,\r\n    compartmentSizes,\r\n    onRefresh,\r\n    onTrackingNumberDelete,\r\n    onCreateReservation,\r\n    onOrderItemDelete,\r\n    openDoor,\r\n  } = props;\r\n\r\n  const { t } = useTranslation();\r\n  const language: string = languageService.getLanguage();\r\n  const history = useHistory();\r\n  const dateTimeNow = () => moment(new Date()).format(\"YYYY-MM-DDTHH:mm\");\r\n\r\n  const isAnyReservationOpened = useMemo(() => {\r\n    return order.items?.some((oi) => OrderHelpers.inOpenedState(oi?.reservation?.state));\r\n  }, [order]);\r\n\r\n  const reservationStart = order.items[0]?.reservation?.start;\r\n  const reservationEnd = order.items[0]?.reservation?.end;\r\n  const isCarrierOrder = order.carrierId && order.items.length >= 1;\r\n\r\n  let sliceReservationDatesNumber: number = 0;\r\n\r\n  if (reservationStart && reservationEnd) {\r\n    if (reservationStart.substring(0, 10) === reservationEnd.substring(0, 10)) {\r\n      sliceReservationDatesNumber = 10;\r\n    } else if (reservationStart.substring(0, 5) === reservationEnd.substring(0, 5)) {\r\n      sliceReservationDatesNumber = 5;\r\n    }\r\n  }\r\n\r\n  return (\r\n    <div className=\"row\">\r\n      <div className=\"col\">\r\n        <div className=\"customer card\">\r\n          <div className=\"card-body\">\r\n            <h5 className=\"card-title\">\r\n              {t(\"order-page.locker-reservation\")}\r\n              {isPersonalStorage && (\r\n                <SyncButtonComponent className={!isCarrierOrder ? \"ms-2\" : \"\"} onClick={onRefresh}></SyncButtonComponent>\r\n              )}\r\n            </h5>\r\n            <div>\r\n              {compartmentSizes[0] && !isPersonalStorage && (\r\n                <>\r\n                  {!isCarrierOrder && (\r\n                    <button\r\n                      className=\"btn-reserve-locker mt-3 mb-3 btn btn-primary\"\r\n                      onClick={() => onCreateReservation()}\r\n                      disabled={!canCreateReservation(hub, itemIdInOpening, order)}\r\n                    >\r\n                      <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"plus\"]} />\r\n                      {t(\"order-page.btn-add-locker-reservation\")}\r\n                    </button>\r\n                  )}\r\n                  <SyncButtonComponent className={!isCarrierOrder ? \"ms-2\" : \"\"} onClick={onRefresh}></SyncButtonComponent>\r\n                </>\r\n              )}\r\n            </div>\r\n\r\n            <table className=\"table table-sm table-order\">\r\n              <thead>\r\n                <tr>\r\n                  <th></th>\r\n                  <th>{t(\"order-page-table-header.locker\")}</th>\r\n                  <th>{t(\"order-page-table-header.size\")}</th>\r\n                  <th>{t(\"order-page-table-header.orderItemState\")}</th>\r\n                  <th>{t(\"order-page-table-header.doorState\")}</th>\r\n                  {isPersonalStorage && <th>{t(\"order-page-table-header.codes\")}</th>}\r\n                  {!isPersonalStorage && (\r\n                    <>\r\n                      <th>{t(\"common.tracking-numbers\")}</th>\r\n                      <th>{t(\"order-page-table-header.dropoffCode\")}</th>\r\n                    </>\r\n                  )}\r\n\r\n                  <th></th>\r\n                  <th></th>\r\n                </tr>\r\n              </thead>\r\n              <tbody>\r\n                {order.items?.length === 0 && <NoReservationComponent title={t(\"order-page.no-reservation\")}></NoReservationComponent>}\r\n\r\n                {order.items?.map((orderItem) => {\r\n                  let reservation = orderItem?.reservation;\r\n                  const codeToDisplay = isReturn ? orderItem.reservation.pickupCode : orderItem.reservation.dropoffCode;\r\n\r\n                  if (reservation) {\r\n                    let sizeId = HubHelpers.findGroup(hub, reservation.groupId)?.compartments.find(\r\n                      (c) => c.number === reservation.compartmentNumber\r\n                    )?.sizeId;\r\n\r\n                    const compartmentSize = compartmentSizes.find((cs) => cs.id === sizeId);\r\n\r\n                    const notifyLevel = reservation.notifyLevel;\r\n                    let notifyText = \"\";\r\n                    if (notifyLevel === \"Medium\" || notifyLevel === \"High\") {\r\n                      const dropOffTime = new Date(reservation.dropOffTime);\r\n                      notifyText = t(\"order-page.notifyText\", { since: DateHelpers.timeSince(dropOffTime) });\r\n                    }\r\n\r\n                    const hasOpening = itemIdInOpening !== null;\r\n                    const inOpening = itemIdInOpening == orderItem.id;\r\n                    const isTrackingNumberDisabled =\r\n                      !OrderHelpers.trackingNumbersEditable(order) || hasOpening || isAnyReservationOpened || order.carrierId !== null;\r\n                    let openAvailable = true;\r\n                    if (isReturn) {\r\n                      openAvailable = reservation.state === ReservationState.ReadyForPickUp;\r\n                    } else if (isPersonalStorage) {\r\n                      openAvailable = false;\r\n                    } else {\r\n                      openAvailable =\r\n                        reservation.state === ReservationState.New || reservation.state === ReservationState.PackagingReadyForPickUp;\r\n                    }\r\n\r\n                    openAvailable = openAvailable && dateTimeNow() >= moment(new Date(reservation.start)).format(\"YYYY-MM-DDTHH:mm\");\r\n\r\n                    const opened = OrderHelpers.inOpenedState(reservation.state);\r\n\r\n                    const lockernumb = /^\\d+$/.test(reservation.compartmentNumber)\r\n                      ? reservation.compartmentNumber\r\n                      : reservation.groupId + reservation.compartmentNumber;\r\n\r\n                    return (\r\n                      <tr key={orderItem.id}>\r\n                        <td title={notifyText}>\r\n                          <NotifyLevelComponent notifyLevel={order.notifyLevel}></NotifyLevelComponent>\r\n                        </td>\r\n                        <td>{lockernumb}</td>\r\n                        <td>\r\n                          {isCarriedByCarrier\r\n                            ? t(\"order-page.item.size\", {\r\n                                height: orderItem.height,\r\n                                width: orderItem.width,\r\n                                depth: orderItem.depth,\r\n                              })\r\n                            : compartmentSize?.name.get(language)}\r\n                        </td>\r\n                        <td>\r\n                          <StateBadgeComponent state={reservation.state} isPersonalStorage={isPersonalStorage}></StateBadgeComponent>\r\n                        </td>\r\n                        <td>\r\n                          {inOpening && !isAnyReservationOpened && <DoorOpeningGifComponent />}\r\n                          {!inOpening && !opened && (\r\n                            <OpenDoorComponent\r\n                              onClick={async () => await openDoor(organization.id, orderId, orderItem.id, reservation.state)}\r\n                              disabled={!openAvailable || hasOpening || isAnyReservationOpened || !HubHelpers.isHubOnline(hub.state)}\r\n                            ></OpenDoorComponent>\r\n                          )}\r\n                          {!inOpening && opened && <DoorOpenedComponent />}\r\n                        </td>\r\n                        <td style={{ maxWidth: \"750px\" }}>\r\n                          {orderItem.reservation.trackingNumbers.map((track) => (\r\n                            <span className=\"badge rounded-pill bg-dark text-light p-2 me-1\">\r\n                              {track}\r\n                              <button\r\n                                className=\"btn-close btn-close-white float-end ms-1 p-0\"\r\n                                onClick={() => onTrackingNumberDelete(orderItem.id, track)}\r\n                                disabled={isTrackingNumberDisabled}\r\n                              ></button>\r\n                            </span>\r\n                          ))}\r\n\r\n                          <span\r\n                            id={`tracking-number-adding-${orderItem.id}`}\r\n                            className=\"badge rounded-pill bg-dark text-light p-2 me-1\"\r\n                            hidden\r\n                          >\r\n                            <form\r\n                              onSubmit={(ev) => {\r\n                                ev.preventDefault();\r\n                                let input = ev.currentTarget.getElementsByTagName(\"input\")[0] as HTMLInputElement;\r\n                                addTrackingNumber(organization.id, order, orderItem.id, input.value);\r\n                                showAddOrderItemTrackingNumberInput(orderItem.id, false);\r\n                              }}\r\n                            >\r\n                              <input\r\n                                id=\"trackingNumberInput\"\r\n                                onBlur={() => showAddOrderItemTrackingNumberInput(orderItem.id, false)}\r\n                                onKeyDown={(input: React.KeyboardEvent<any>) =>\r\n                                  onTabKeyDownToAddTrackingNumber(input, order, organization.id, orderItem.id)\r\n                                }\r\n                                type=\"text\"\r\n                              ></input>\r\n                            </form>\r\n                          </span>\r\n\r\n                          <button\r\n                            type=\"button\"\r\n                            onClick={() => showAddOrderItemTrackingNumberInput(orderItem.id, true)}\r\n                            id={`tracking-number-add-btn-${orderItem.id}`}\r\n                            className=\"badge rounded-pill btn btn-primary p-2 ps-3 pe-3\"\r\n                            disabled={isTrackingNumberDisabled}\r\n                          >\r\n                            <FontAwesomeIcon icon={[\"fas\", \"plus\"]} />\r\n                          </button>\r\n                        </td>\r\n\r\n                        {!isPersonalStorage && <td>{codeToDisplay}</td>}\r\n                        <td>\r\n                          <span className=\"justify-content-around d-flex\">\r\n                            {isOrgContributor && (\r\n                              <button\r\n                                className=\"btn btn-primary\"\r\n                                onClick={() => {\r\n                                  history.push(`${orderId}/items/${orderItem.id}/relocate`);\r\n                                }}\r\n                                disabled={\r\n                                  hasOpening ||\r\n                                  isAnyReservationOpened ||\r\n                                  reservation.state === ReservationState.Completed ||\r\n                                  order.deleted === 1\r\n                                }\r\n                              >\r\n                                {t(\"order-page.relocate\")}\r\n                              </button>\r\n                            )}\r\n                            {orderItem.id && reservation.state && !isPersonalStorage && (\r\n                              <DeleteButtonComponent\r\n                                title={undefined}\r\n                                onClick={() => onOrderItemDelete(organization.id, orderId, orderItem.id, reservation.state)}\r\n                                disabled={!canCancelReservation(hub, order, hasOpening, isAnyReservationOpened, reservation, isReturn)}\r\n                              ></DeleteButtonComponent>\r\n                            )}\r\n                          </span>\r\n                        </td>\r\n                        <td>\r\n                          <button className=\"icon-info-circle primary\" data-bs-target=\"#sizeInfo\" data-bs-toggle=\"modal\">\r\n                            <FontAwesomeIcon icon={[\"fas\", \"info-circle\"]} />\r\n                          </button>\r\n                          <div className=\"modal\" tabIndex={-1} id=\"sizeInfo\">\r\n                            <div className=\"modal-dialog\">\r\n                              <div className=\"modal-content\">\r\n                                <div className=\"modal-header\">\r\n                                  <h5 className=\"modal-title\">{t(\"order-page.reservation-details\")}</h5>\r\n                                  <button type=\"button\" className=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n                                </div>\r\n                                <div className=\"modal-body\">\r\n                                  <div style={{ textAlign: \"left\" }}>\r\n                                    <h6>{t(\"order-page.size-details\") + \":\"}</h6>\r\n                                    {compartmentSizes.map((compartmentSize: CompartmentSize) => {\r\n                                      return (\r\n                                        <div>\r\n                                          {compartmentSize?.name.get(language)}: {compartmentSize?.description.get(language)}\r\n                                        </div>\r\n                                      );\r\n                                    })}\r\n                                    {order?.flow.toString() === \"PersonalStorage\" && isAdmin && reservationStart && reservationEnd && (\r\n                                      <div>\r\n                                        <hr></hr>\r\n                                        {t(\"order-page.reservationDate\")}\r\n                                        {\": \"}\r\n                                        {DateHelpers.formatDateTime(new Date(reservationStart), DateHelpers.DefaultTimeZone)?.slice(\r\n                                          sliceReservationDatesNumber\r\n                                        )}{\" \"}\r\n                                        {t(\"common.to\")}{\" \"}\r\n                                        {DateHelpers.formatDateTime(new Date(reservationEnd), DateHelpers.DefaultTimeZone)?.slice(\r\n                                          sliceReservationDatesNumber\r\n                                        )}\r\n                                      </div>\r\n                                    )}\r\n                                  </div>\r\n                                </div>\r\n                                <div className=\"modal-footer\">\r\n                                  <button type=\"button\" className=\"btn btn-outline-primary\" data-bs-dismiss=\"modal\">\r\n                                    {t(\"common.close\")}\r\n                                  </button>\r\n                                </div>\r\n                              </div>\r\n                            </div>\r\n                          </div>\r\n                        </td>\r\n                      </tr>\r\n                    );\r\n                  }\r\n                  return \"\";\r\n                })}\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function onTabKeyDownToAddTrackingNumber(input: React.KeyboardEvent<any>, order: Order, organizationId: string, orderItemId: string) {\r\n    if (input.key === \"Tab\") {\r\n      const trackingNumberInput: HTMLInputElement = document.getElementById(\"trackingNumberInput\") as HTMLInputElement;\r\n      addTrackingNumber(organizationId, order, orderItemId, trackingNumberInput?.value);\r\n      showAddOrderItemTrackingNumberInput(orderItemId, false);\r\n    }\r\n  }\r\n\r\n  async function addTrackingNumber(organizationId: string, currentOrder: Order, orderItemId: string, trackingNumber: string) {\r\n    if (!trackingNumber) {\r\n      return;\r\n    }\r\n\r\n    if (organization.id == \"granby\" && isPersonalStorage && !trackingNumber.match(/^[1-4]{6}$/)) {\r\n      ToastHelpers.error(t(\"input-component.error-code-sl5c\"));\r\n      return;\r\n    }\r\n\r\n    const order: Order = { ...currentOrder };\r\n    let trackingNumbers = new Array<string>();\r\n\r\n    if (order) {\r\n      for (let i = 0; i < order.items.length; i++) {\r\n        if (order.items[i].id === orderItemId) {\r\n          order.items[i].reservation.trackingNumbers.push(trackingNumber);\r\n          trackingNumbers = order.items[i].reservation.trackingNumbers;\r\n        }\r\n      }\r\n\r\n      await orderService.updateOrderItem(organizationId, orderId, orderItemId, trackingNumbers).catch((error: any) => {\r\n        if (error?.response?.data === \"Tracking number already existing\") {\r\n          if (isPersonalStorage) {\r\n            ToastHelpers.error(t(\"order-page.code-already-existing\"));\r\n          } else {\r\n            ToastHelpers.error(t(\"order-page.tracking-number-already-existing\"));\r\n          }\r\n        } else {\r\n          ToastHelpers.error(t(\"order-page.error-create-tracking-number\"));\r\n        }\r\n      });\r\n\r\n      await onRefresh();\r\n    }\r\n  }\r\n}\r\n\r\nfunction canCreateReservation(hub: Hub, itemIdInOpening: String | null, order: Order) {\r\n  if (!HubHelpers.isOneGroupsOnline(hub)) {\r\n    return false;\r\n  }\r\n\r\n  if (itemIdInOpening) {\r\n    return false;\r\n  }\r\n\r\n  return OrderHelpers.editable(order);\r\n}\r\n\r\nfunction canCancelReservation(\r\n  hub: Hub,\r\n  order: Order,\r\n  hasOpening: boolean,\r\n  isAnyReservationOpened: boolean,\r\n  reservation: Reservation,\r\n  isReturn: boolean\r\n) {\r\n  if (!hub) return false;\r\n  if (order?.deleted) return false;\r\n  if (hasOpening || isAnyReservationOpened) return false;\r\n\r\n  if (reservation.state === ReservationState.New) return true;\r\n\r\n  if (!isReturn && reservation.state === ReservationState.ReadyForPickUp) {\r\n    return HubHelpers.isGroupOnline(hub, reservation.groupId);\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nfunction showAddOrderItemTrackingNumberInput(orderItemId: string, show: boolean) {\r\n  let inputContainer = document.getElementById(`tracking-number-adding-${orderItemId}`);\r\n  let btn = document.getElementById(`tracking-number-add-btn-${orderItemId}`);\r\n\r\n  if (inputContainer) {\r\n    inputContainer.hidden = !show;\r\n    let input = inputContainer.getElementsByTagName(\"form\")[0].getElementsByTagName(\"input\")[0];\r\n    if (show) {\r\n      input.focus();\r\n    } else {\r\n      input.value = \"\";\r\n    }\r\n  }\r\n  if (btn) {\r\n    btn.hidden = show;\r\n  }\r\n}\r\n\r\nexport default OrderReservation;\r\n","import { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ActionButtonComponent } from \"../../../components/button-component\";\r\nimport { InputComponent } from \"../../../components/input\";\r\nimport organizationService from \"../../../services/member/organization-service\";\r\nimport { Order } from \"../../../services/order/order\";\r\nimport Organization from \"../../../services/organization/organization\";\r\n\r\nexport interface OrderRequestOrganizationAddressModalProps {\r\n  isAdmin: boolean;\r\n  organization: Organization;\r\n  order: Order;\r\n  onRequiredAddressMessageChange: (isAddressMessageRequired: boolean) => void;\r\n  requestCarrierPickup: (order: Order, organization: Organization) => void;\r\n}\r\nfunction OrderRequestOrganizationAddressModal(props: OrderRequestOrganizationAddressModalProps) {\r\n  const { isAdmin, organization, order, onRequiredAddressMessageChange, requestCarrierPickup } = props;\r\n  const { t } = useTranslation();\r\n\r\n  const [streetNumber, setStreetNumber] = useState<string>(\"\");\r\n  const [street, setStreet] = useState<string>(\"\");\r\n  const [city, setCity] = useState<string>(\"\");\r\n  const [postalCode, setPostalCode] = useState<string>(\"\");\r\n  const state = \"QC\";\r\n  const country = \"Canada\";\r\n\r\n  if (!isAdmin) {\r\n    return (\r\n      <div className=\"container page\">\r\n        <div className=\"col-12 col-xl-6 offset-xl-3\">\r\n          <div className=\"card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <div className=\"d-inline-block\">\r\n                <h2>{t(\"order-page.msg-admin-requires-address\")}</h2>{\" \"}\r\n              </div>\r\n            </div>\r\n            <div className=\"card-body\">\r\n              <div className=\"align-items-center\">\r\n                <button className=\"btn btn-primary\" onClick={() => onRequiredAddressMessageChange(false)}>\r\n                  {t(\"common.return\")}\r\n                </button>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"container page\">\r\n      <div className=\"col-12 col-xl-6 offset-xl-3\">\r\n        <div className=\"card\">\r\n          <div className=\"card-header align-items-center\">\r\n            <div className=\"d-inline-block\">\r\n              <h2>{t(\"order-page.msg-requires-address\")}</h2>\r\n              <div>{t(\"order-page.msg-address-precision\")}</div>\r\n            </div>\r\n          </div>\r\n          <div className=\"card-body\">\r\n            <form className=\"row g-3\" onSubmit={(ev) => ev.preventDefault()}>\r\n              <div className=\"col-md-3\">\r\n                <InputComponent\r\n                  labelText={t(\"member-profile.streetNumber\") + \"*\"}\r\n                  setValue={(value: string) => setStreetNumber(value)}\r\n                  value={streetNumber}\r\n                />\r\n              </div>\r\n              <div className=\"col-md-9\">\r\n                <InputComponent\r\n                  labelText={t(\"member-profile.street\") + \"*\"}\r\n                  setValue={(value: string) => setStreet(value)}\r\n                  value={street}\r\n                />\r\n              </div>\r\n              <div className=\"col-md-8\">\r\n                <InputComponent labelText={t(\"member-profile.city\") + \"*\"} setValue={(value: string) => setCity(value)} value={city} />\r\n              </div>\r\n              <div className=\"col-md-4\">\r\n                <InputComponent\r\n                  labelText={t(\"member-profile.postalCode\") + \"*\"}\r\n                  setValue={(value: string) => setPostalCode(value)}\r\n                  value={postalCode}\r\n                />\r\n              </div>\r\n              <div className=\"col-md-6\">\r\n                <InputComponent labelText={t(\"member-profile.state\") + \"*\"} setValue={(value: string) => {}} value={state} disabled />\r\n              </div>\r\n              <div className=\"col-md-6\">\r\n                <InputComponent labelText={t(\"member-profile.country\") + \"*\"} setValue={(value: string) => {}} value={country} disabled />\r\n              </div>\r\n              <div className=\"col-6\">\r\n                <ActionButtonComponent\r\n                  type=\"submit\"\r\n                  title={t(\"order-page.request-carrier-pickup\")}\r\n                  onClick={() => saveAddressAndSend(order)}\r\n                  disabled={saveDisabled()}\r\n                  className=\"btn btn-primary me-2\"\r\n                  icon={[\"fas\", \"paper-plane\"]}\r\n                />\r\n                <ActionButtonComponent\r\n                  title={t(\"common.cancel\")}\r\n                  onClick={() => onRequiredAddressMessageChange(false)}\r\n                  className=\"btn btn-outline-secondary me-2\"\r\n                />\r\n              </div>\r\n            </form>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function saveDisabled(): boolean {\r\n    return !street || !streetNumber || !city || !postalCode;\r\n  }\r\n\r\n  function saveAddressAndSend(order: Order) {\r\n    if (street && streetNumber && city && postalCode && organization) {\r\n      organizationService.updateOrganization(organization.id, streetNumber, street, city, postalCode, state, country).then(() => {\r\n        onRequiredAddressMessageChange(false);\r\n\r\n        organization.street = street;\r\n        organization.streetNumber = streetNumber;\r\n        organization.city = city;\r\n        organization.postalCode = postalCode;\r\n        organization.state = state;\r\n        organization.country = country;\r\n\r\n        requestCarrierPickup(order, organization);\r\n      });\r\n    }\r\n\r\n    onRequiredAddressMessageChange(false);\r\n  }\r\n}\r\n\r\nexport default OrderRequestOrganizationAddressModal;\r\n","import { useState, useEffect, useCallback } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, useParams } from \"react-router-dom\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport { Order, OrderFlowStringValue } from \"../../services/order/order\";\r\nimport orderService from \"../../services/order/order-service\";\r\nimport \"./order-page.scss\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport { OrderHelpers } from \"../../services/order/order-helpers\";\r\nimport { HubHelpers } from \"../../services/hub/hub-helper\";\r\nimport Member from \"../../services/member/member\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport compartmentSizeService from \"../../services/hub/compartmentSize-service\";\r\nimport \"./orders-page.scss\";\r\nimport { CompartmentSize } from \"../../services/hub/compartmentSize\";\r\nimport { PackagingOption } from \"../../services/hub/packgingOption\";\r\nimport packagingOptionService from \"../../services/hub/packagingOption-service\";\r\nimport { YesNoComponent } from \"../../components/yesno-component\";\r\nimport { ActionButtonComponent, DeleteButtonComponent } from \"../../components/button-component\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\n\r\nimport { CancelReservationMsgomponent } from \"../../components/cancel-reservation-msg-component\";\r\nimport { StateBadgeComponent } from \"../../components/state-badge-component\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport paymentService from \"../../services/payment/payment-service\";\r\nimport { Payment } from \"../../services/payment/payment\";\r\nimport OrderHistory from \"./order-details/order-history\";\r\nimport OrderPaymentInformation from \"./order-details/order-payment-information\";\r\nimport OrderGeneral from \"./order-details/order-general\";\r\nimport OrderCustomer from \"./order-details/order-customer\";\r\nimport OrderReservation from \"./order-details/order-reservation\";\r\nimport OrderRequestOrganizationAddressModal from \"./order-modals/order-request-organization-address-modal\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ninterface OrderPageProps {\r\n  organization: Organization;\r\n  member: Member;\r\n}\r\n\r\ninterface IParamTypes {\r\n  orderId: string;\r\n}\r\n\r\nexport default function OrderPage(props: OrderPageProps) {\r\n  const { organization, member } = props;\r\n  const { orderId } = useParams<IParamTypes>();\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [order, setOrder] = useState<Order | null>(null);\r\n  const [hub, setHub] = useState<Hub>(new Hub());\r\n  const [compartmentSizes, setCompatmentSizes] = useState<Array<CompartmentSize>>([]);\r\n  const [isEdit, setIsEdit] = useState<boolean>(false);\r\n  const [selectSizeDisabled, setSelectSizeDisabled] = useState<boolean>(false);\r\n  const [msgEditError, setMsgEditError] = useState<string | undefined>(undefined);\r\n  const [packagingOption, setPackagingOption] = useState<PackagingOption | null>(null);\r\n  const [isCancelOrder, setIsCancelOrder] = useState<boolean>(false);\r\n  const [isCancelReservation, setIsCancelReservation] = useState<boolean>(false);\r\n  const [itemIdInOpening, setItemIdInOpening] = useState<string | null>(null);\r\n  const [isCarriedByCarrier, setIsCarriedByCarrier] = useState<boolean>(false);\r\n  const [isRequestingCarrierPickup, setIsRequestingCarrierPickup] = useState<boolean>(false);\r\n  const [isCancellingCarrierPickup, setIsCancellingCarrierPickup] = useState<boolean>(false);\r\n  const [isCarrierPickupRequested, setIsCarrierPickupRequested] = useState<boolean>(false);\r\n  const [canSendNotification, setCanSendNotification] = useState<boolean>(false);\r\n  const [isSendingNotification, setIsSendingNotification] = useState<boolean>(false);\r\n  const [isReturn, setIsReturn] = useState<boolean>(false);\r\n  const [labelBlob, setLabelBlob] = useState<Blob | null>(null);\r\n  const [isRequiresAddressMessage, setIsRequiresAddressMessage] = useState<boolean>(false);\r\n  const [isDeleteTrackingNumber, setIsDeleteTrackingNumber] = useState<boolean>(false);\r\n  const [isCompleteOrder, setIsCompleteOrder] = useState<boolean>(false);\r\n\r\n  const [isPersonalStorage, setIsPersonalStorage] = useState<boolean>(false);\r\n  const [isRequestingRefund, setIsRequestingRefund] = useState<boolean>(false);\r\n  const [payment, setPayment] = useState<Payment | undefined>();\r\n\r\n  const [itemHeight, setItemHeight] = useState<string | undefined>();\r\n  const [itemWidth, setItemWidth] = useState<string | undefined>();\r\n  const [itemDepth, setItemDepth] = useState<string | undefined>();\r\n  const [itemWeight, setItemWeight] = useState<string | undefined>();\r\n  const [orderItemId, setOrderItemId] = useState<string>(\"\");\r\n  const [trackingNumber, setTrackingNumber] = useState<string | undefined>();\r\n  const [isAdmin, setIsAdmin] = useState<boolean>(false);\r\n  const [isOrgContributor, setIsOrgContributor] = useState<boolean>();\r\n\r\n  const { t } = useTranslation();\r\n  const language: string = languageService.getLanguage();\r\n\r\n  useEffect(\r\n    () => {\r\n      if (loading && organization.id) {\r\n        setIsAdmin(memberService.isOrganizationAdmin(member, organization.id));\r\n        setIsOrgContributor(memberService.isOrganizationContributor(member, organization.id));\r\n        packagingOptionService.getPackagingOptions().then((packagingOptions) => {\r\n          orderService\r\n            .getOrderById(organization.id, orderId)\r\n            .then((order) => {\r\n              setOrder(order);\r\n              setPayment(order?.payments?.[0]);\r\n\r\n              if (order) {\r\n                setIsReturn(order.flow.toString() === \"Return\");\r\n                setIsPersonalStorage(order.flow.toString() === \"PersonalStorage\");\r\n\r\n                if (order.flow.toString() === \"Return\") {\r\n                  setCanSendNotification(order.state === \"New\");\r\n                } else if (order.flow.toString() === \"PersonalStorage\") {\r\n                  setCanSendNotification(order.state !== \"Cancelled\" && order.state !== \"Completed\");\r\n                } else {\r\n                  setCanSendNotification(order.state === \"ReadyForPickUp\");\r\n                }\r\n\r\n                setIsCarriedByCarrier(order.carrierId ? true : false);\r\n\r\n                if (order.carrierSubmissionReferenceNumber) setIsCarrierPickupRequested(true);\r\n\r\n                if (order.hubId) {\r\n                  hubService.getHubById(order.hubId).then((hub) => {\r\n                    setHub(hub);\r\n\r\n                    compartmentSizeService.getCompartmentSizes().then((compartmentSizes: Array<CompartmentSize>) => {\r\n                      let compartmentSizeIdsOfHub = HubHelpers.getCompartmentSizeIds(hub);\r\n                      let compartmentSizesOfHub = compartmentSizes?.filter((size) => compartmentSizeIdsOfHub.has(size.id));\r\n                      setCompatmentSizes(compartmentSizesOfHub);\r\n                    });\r\n\r\n                    if (order.packagingOptionId) {\r\n                      const option = packagingOptions.find((po) => po.id === order.packagingOptionId);\r\n\r\n                      if (option) {\r\n                        setPackagingOption(option);\r\n                      }\r\n                    }\r\n                  });\r\n                }\r\n              }\r\n            })\r\n            .catch((error) => {\r\n              ToastHelpers.error(t(\"order-page.error-refresh\", { status: error?.response?.status }));\r\n            })\r\n            .finally(() => {\r\n              setLoading(false);\r\n            });\r\n        });\r\n      }\r\n    },\r\n    // eslint-disable-next-line\r\n    [orderId, organization, itemIdInOpening]\r\n  );\r\n\r\n  useEffect(() => {\r\n    const refreshInterval = setInterval(refresh, 5000);\r\n    return () => clearInterval(refreshInterval);\r\n  }, [loading]);\r\n\r\n  const requestCarrierPickup = useCallback(\r\n    async (order: Order, organization: Organization) => {\r\n      try {\r\n        if (OrderHelpers.canRequestCarrierPickup(order)) {\r\n          if (requiresAddress(order, organization)) {\r\n            setIsRequestingCarrierPickup(false);\r\n            setIsRequiresAddressMessage(true);\r\n            return;\r\n          }\r\n\r\n          setIsRequestingCarrierPickup(false);\r\n          await orderService.requestCarrierPickup(order.organizationId.toString(), order.id);\r\n          await refresh();\r\n          setIsRequestingCarrierPickup(false);\r\n        }\r\n      } catch (error: any) {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      }\r\n    },\r\n    [refresh] // I think refresh needs to use callback too because otherwise, requestCarrierPickup will re-render every time the component renders\r\n  );\r\n\r\n  let listInfo = [];\r\n  let customer = StringHelpers.getFullName(order?.customer?.firstname, order?.customer?.lastname);\r\n  if (customer) {\r\n    listInfo.push(customer);\r\n  }\r\n\r\n  let email = order?.customer?.email || \"\";\r\n  if (email) {\r\n    listInfo.push(email);\r\n  }\r\n\r\n  let phone = order?.customer?.phone || \"\";\r\n  if (phone) {\r\n    listInfo.push(phone);\r\n  }\r\n\r\n  let refId = order?.customer?.referenceId || \"\";\r\n  if (refId) {\r\n    listInfo.push(`${t(\"order-page.reference-number\")}: <strong>${refId}</strong>`);\r\n  }\r\n\r\n  let customerInfoHtml = listInfo.join(\"<br/>\");\r\n\r\n  let carrierName = hub?.carriers?.find((c) => c.id === order?.carrierId)?.name;\r\n\r\n  return (\r\n    <div>\r\n      {canShowOrderDetails() === true && (\r\n        <div className=\"container page order-page\">\r\n          <div className=\"page-breadcrumb\">\r\n            <ul className=\"breadcrumb\">\r\n              <li className=\"breadcrumb-item active\">\r\n                <Link className=\"\" to=\"/orders\">\r\n                  {t(\"order-page.orderlink\")}\r\n                </Link>\r\n              </li>\r\n              <li className=\"breadcrumb-item active\">{orderId}</li>\r\n            </ul>\r\n          </div>\r\n\r\n          {!loading && !order && (\r\n            <div className=\"text-center mt-4\">\r\n              <p>{t(\"order-page.no-order-message\")}</p>\r\n            </div>\r\n          )}\r\n\r\n          <div className=\"page-background-boxing shadow\">\r\n            <div className=\"header\">\r\n              <div className=\"d-flex flex-row\">\r\n                <h1 className=\"d-inline-block\">{`${t(\"order-page.order\")} #${orderId}`}</h1>\r\n                {/* Complete order*/}\r\n                {isAdmin && order?.flow?.toString() === \"Deliver\" && (\r\n                  <button\r\n                    type=\"button\"\r\n                    className=\"btn btn-danger d-inline-block ms-3 mt-3\"\r\n                    onClick={() => setIsCompleteOrder(true)}\r\n                    disabled={itemIdInOpening ? true : false || !OrderHelpers.canCompleteOrder(order)}\r\n                  >\r\n                    {t(\"order-page.complete-order\")}\r\n                  </button>\r\n                )}\r\n              </div>\r\n              <div className=\"order-state\">\r\n                {order && (\r\n                  <StateBadgeComponent\r\n                    state={order.state}\r\n                    isPersonalStorage={order.flow.toString() === OrderFlowStringValue.PersonalStorage}\r\n                  ></StateBadgeComponent>\r\n                )}\r\n              </div>\r\n            </div>\r\n\r\n            <LoadingComponent loading={loading} />\r\n\r\n            {order && organization && orderId && (\r\n              <>\r\n                <div className=\"row\">\r\n                  <OrderCustomer\r\n                    customerInfoHtml={customerInfoHtml}\r\n                    hasCustomerContactInformation={Boolean(email || phone)}\r\n                    canSendNotification={canSendNotification}\r\n                    isFirstTimeNotification={isReturn || isPersonalStorage}\r\n                    onSendNotification={() => setIsSendingNotification(true)}\r\n                  />\r\n\r\n                  <OrderGeneral\r\n                    order={order}\r\n                    hub={hub}\r\n                    isOrgContributor={isOrgContributor}\r\n                    timeZone={DateHelpers.UserTimeZone}\r\n                    packagingOption={packagingOption}\r\n                    carrierName={carrierName}\r\n                  />\r\n\r\n                  <OrderPaymentInformation\r\n                    order={order}\r\n                    payment={payment}\r\n                    isPersonalStorage={isPersonalStorage}\r\n                    timeZone={DateHelpers.UserTimeZone}\r\n                  />\r\n                </div>\r\n\r\n                <OrderReservation\r\n                  order={order}\r\n                  orderId={orderId}\r\n                  organization={organization}\r\n                  hub={hub}\r\n                  isAdmin={isAdmin}\r\n                  isOrgContributor={isOrgContributor}\r\n                  isCarriedByCarrier={isCarriedByCarrier}\r\n                  isPersonalStorage={isPersonalStorage}\r\n                  isReturn={isReturn}\r\n                  itemIdInOpening={itemIdInOpening}\r\n                  compartmentSizes={compartmentSizes}\r\n                  onRefresh={refresh}\r\n                  onTrackingNumberDelete={(orderItemId: string, trackingNumber: string) => {\r\n                    setOrderItemId(orderItemId);\r\n                    setTrackingNumber(trackingNumber);\r\n                    setIsDeleteTrackingNumber(true);\r\n                  }}\r\n                  onCreateReservation={btnCreateReservation}\r\n                  onOrderItemDelete={btnDeletOrderItem}\r\n                  openDoor={openDoor}\r\n                />\r\n\r\n                <div className=\"mb-3\">\r\n                  {/* Request carrier pickup */}\r\n                  {isCarriedByCarrier && (\r\n                    <>\r\n                      {!isCarrierPickupRequested && (\r\n                        <ActionButtonComponent\r\n                          title={t(\"order-page.request-carrier-pickup\")}\r\n                          onClick={() => setIsRequestingCarrierPickup(true)}\r\n                          disabled={itemIdInOpening ? true : false || !OrderHelpers.canRequestCarrierPickup(order)}\r\n                          className=\"btn btn-primary me-2\"\r\n                          icon={[\"fas\", \"paper-plane\"]}\r\n                        ></ActionButtonComponent>\r\n                      )}\r\n\r\n                      {isCarrierPickupRequested && (\r\n                        <>\r\n                          <ActionButtonComponent\r\n                            title={t(\"order-page.cancel-carrier-pickup\")}\r\n                            onClick={() => setIsCancellingCarrierPickup(true)}\r\n                            disabled={itemIdInOpening ? true : false || !OrderHelpers.canCancelCarrierPickup(order)}\r\n                            className=\"btn btn-outline-primary me-2\"\r\n                            icon={[\"fas\", \"ban\"]}\r\n                          ></ActionButtonComponent>\r\n\r\n                          <ActionButtonComponent\r\n                            title={t(\"order-page.download-label\")}\r\n                            onClick={() => downloadLabelPdf(organization.id, orderId)}\r\n                            disabled={itemIdInOpening ? true : false || !OrderHelpers.canCancelCarrierPickup(order)}\r\n                            className=\"btn btn-outline-primary me-2\"\r\n                            icon={[\"fas\", \"tag\"]}\r\n                          ></ActionButtonComponent>\r\n                        </>\r\n                      )}\r\n                    </>\r\n                  )}\r\n\r\n                  {/* delete order */}\r\n                  {isPersonalStorage && payment && payment.amount > 0 ? (\r\n                    <>\r\n                      <ActionButtonComponent\r\n                        title={t(\"order-page.request-refund\")}\r\n                        onClick={() => setIsRequestingRefund(true)}\r\n                        disabled={!OrderHelpers.canRefundOrder(order)}\r\n                        className=\"btn btn-outline-primary me-2\"\r\n                        icon={[\"fas\", \"credit-card\"]}\r\n                      ></ActionButtonComponent>\r\n                    </>\r\n                  ) : (\r\n                    <>\r\n                      <DeleteButtonComponent\r\n                        title={t(\"order-page.delete-order\")}\r\n                        onClick={() => setIsCancelOrder(true)}\r\n                        disabled={itemIdInOpening ? true : false || !OrderHelpers.canDeleteOrder(order)}\r\n                      ></DeleteButtonComponent>\r\n                    </>\r\n                  )}\r\n                </div>\r\n\r\n                <OrderHistory order={order} member={member}></OrderHistory>\r\n              </>\r\n            )}\r\n          </div>\r\n        </div>\r\n      )}\r\n\r\n      {!isCarriedByCarrier && isEdit && (\r\n        <div className=\"container page orders-page\">\r\n          <div className=\"col-12 col-xl-8 offset-md-1 offset-xl-2\">\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <div className=\"d-inline-block\">\r\n                  <h2>{t(\"order-page.edit-size-title\")}</h2>\r\n                </div>\r\n                <button className=\"btn-close float-end\" onClick={() => cancelEdit()}></button>\r\n              </div>\r\n              <div className=\"card-body\">\r\n                {compartmentSizes && organization.id && (\r\n                  <table className=\"table table-hover row-clikable\">\r\n                    <tbody>\r\n                      {compartmentSizes.map((compartmentSize: CompartmentSize) => {\r\n                        return (\r\n                          <tr\r\n                            key={compartmentSize.id}\r\n                            onClick={() => {\r\n                              if (!selectSizeDisabled) createReservation(organization.id, orderId, compartmentSize.id);\r\n                            }}\r\n                          >\r\n                            <td>\r\n                              {compartmentSize.name.get(language)}: {compartmentSize.description.get(language)}\r\n                            </td>\r\n                          </tr>\r\n                        );\r\n                      })}\r\n                    </tbody>\r\n                  </table>\r\n                )}\r\n\r\n                {msgEditError && <label className=\"form-label text-danger\">{msgEditError}</label>}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )}\r\n\r\n      {isCarriedByCarrier && isEdit && (\r\n        <div className=\"container page orders-page\">\r\n          <div className=\"col-12 col-sm-8 col-xl-6 offset-sm-2 offset-xl-3\">\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <div className=\"d-inline-block\">\r\n                  <h2>{t(\"order-page.add-item-title\")}</h2>\r\n                </div>\r\n                <button className=\"btn-close float-end\" onClick={() => cancelEdit()}></button>\r\n              </div>\r\n              <div className=\"card-body\">\r\n                {compartmentSizes && organization.id && (\r\n                  <form onSubmit={(ev) => ev.preventDefault()}>\r\n                    <label className=\"form-label\">{t(\"order-page.item.enter-height\")}</label>\r\n                    <input\r\n                      className=\"form-control\"\r\n                      value={itemHeight}\r\n                      onChange={(ev) => setItemHeight(ev.target.value)}\r\n                      required\r\n                      autoFocus={true}\r\n                    />\r\n                    <label className=\"form-label mt-2\">{t(\"order-page.item.enter-width\")}</label>\r\n                    <input className=\"form-control\" value={itemWidth} onChange={(ev) => setItemWidth(ev.target.value)} required />\r\n                    <label className=\"form-label mt-2\">{t(\"order-page.item.enter-depth\")}</label>\r\n                    <input className=\"form-control\" value={itemDepth} onChange={(ev) => setItemDepth(ev.target.value)} required />\r\n                    <label className=\"form-label mt-2\">{t(\"order-page.item.enter-weight\")}</label>\r\n                    <input className=\"form-control\" value={itemWeight} onChange={(ev) => setItemWeight(ev.target.value)} required />\r\n                    <button\r\n                      className=\"btn btn-md btn-primary mt-3\"\r\n                      type=\"submit\"\r\n                      onClick={() => addItem(organization.id)}\r\n                      disabled={selectSizeDisabled}\r\n                    >\r\n                      {t(\"order-page.item.add\")}\r\n                    </button>\r\n                  </form>\r\n                )}\r\n\r\n                {msgEditError && <label className=\"form-label text-danger\">{msgEditError}</label>}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )}\r\n      {isCancelOrder && organization && order && (\r\n        <YesNoComponent\r\n          headerMsg={t(\"order-page.msg-cancel-order\")}\r\n          onYesClick={() => cancelOrder(organization.id, order)}\r\n          onNoClick={setIsCancelOrder}\r\n        />\r\n      )}\r\n\r\n      {isCompleteOrder && organization && order && isAdmin && OrderHelpers.canCompleteOrder(order) && (\r\n        <YesNoComponent\r\n          headerMsg={t(\"order-page.msg-complete-order\")}\r\n          onYesClick={() => CompleteOrder(organization.id, order)}\r\n          onNoClick={setIsCompleteOrder}\r\n        />\r\n      )}\r\n\r\n      {isDeleteTrackingNumber && organization && order && orderItemId && trackingNumber && (\r\n        <YesNoComponent\r\n          headerMsg={t(\"order-page.msg-remove-tracking\", { trackingNumber: trackingNumber })}\r\n          onYesClick={() => removeTrackingNumber(organization.id, order, orderItemId, trackingNumber)}\r\n          onNoClick={setIsDeleteTrackingNumber}\r\n        />\r\n      )}\r\n\r\n      {isRequestingRefund && organization && order && (\r\n        <YesNoComponent\r\n          headerMsg={t(\"order-page.msg-refund-order\")}\r\n          onYesClick={() => refundOrder(organization.id, order)}\r\n          onNoClick={setIsRequestingRefund}\r\n        />\r\n      )}\r\n\r\n      {isRequestingCarrierPickup && order && (\r\n        <YesNoComponent\r\n          headerMsg={t(\"order-page.msg-requesting-carrier-pickup\")}\r\n          onYesClick={() => requestCarrierPickup(order, organization)}\r\n          onNoClick={setIsRequestingCarrierPickup}\r\n        />\r\n      )}\r\n\r\n      {isCancellingCarrierPickup && order && (\r\n        <YesNoComponent\r\n          headerMsg={t(\"order-page.msg-cancelling-carrier-pickup\")}\r\n          onYesClick={() => cancelCarrierPickup(order)}\r\n          onNoClick={setIsCancellingCarrierPickup}\r\n        />\r\n      )}\r\n\r\n      {isSendingNotification && organization && orderId && (\r\n        <YesNoComponent\r\n          headerMsg={isReturn ? t(\"order-page.msg-send-return-notification\") : t(\"order-page.msg-send-notification\")}\r\n          onYesClick={() => sendNotification(organization.id, orderId)}\r\n          onNoClick={setIsSendingNotification}\r\n        />\r\n      )}\r\n\r\n      {isRequiresAddressMessage && organization && order && (\r\n        <OrderRequestOrganizationAddressModal\r\n          isAdmin={isAdmin}\r\n          organization={organization}\r\n          order={order}\r\n          onRequiredAddressMessageChange={setIsRequiresAddressMessage}\r\n          requestCarrierPickup={requestCarrierPickup}\r\n        />\r\n      )}\r\n\r\n      {isCancelReservation && organization && orderId && order && (\r\n        <CancelReservationMsgomponent\r\n          headerMsg={t(\"order-page.cancel-reservation.msg-cancel-order-openDoor\")}\r\n          onYesClick={() => openDoorForCancellation(organization.id, orderId, orderItemId)}\r\n          onNoClick={setIsCancelReservation}\r\n        ></CancelReservationMsgomponent>\r\n      )}\r\n    </div>\r\n  );\r\n\r\n  function downloadLabelPdf(organizationId: string, orderId: string) {\r\n    const download = (labelBlob: Blob) => {\r\n      const url = window.URL.createObjectURL(labelBlob);\r\n      const link = document.createElement(\"a\");\r\n      link.href = url;\r\n      link.setAttribute(\"download\", `Label-${orderId}.pdf`);\r\n      document.body.appendChild(link);\r\n      link.click();\r\n      link.parentNode?.removeChild(link);\r\n    };\r\n\r\n    if (labelBlob) {\r\n      download(labelBlob);\r\n      return;\r\n    }\r\n\r\n    orderService\r\n      .getAsset(organizationId, orderId, \"1\") //For now, there's always only one asset\r\n      .then((res: Blob | null) => {\r\n        if (res) {\r\n          setLabelBlob(res);\r\n          download(res);\r\n        }\r\n      })\r\n      .catch((error: any) => {\r\n        ToastHelpers.error(t(\"order-page.error-label-download\"));\r\n      });\r\n  }\r\n\r\n  function sendNotification(organizationId: string, orderId: string) {\r\n    if (canSendNotification) {\r\n      orderService.sendReadyForPickupNotification(organizationId, orderId).catch((error: any) => {\r\n        //ToastHelpers.error(t(\"order-page.error-refresh\", { status: error?.response?.status }));\r\n      });\r\n      setIsSendingNotification(false);\r\n    }\r\n  }\r\n\r\n  async function createReservation(organizationId: string, orderId: string, sizeId: string) {\r\n    setSelectSizeDisabled(true);\r\n    try {\r\n      const response = await orderService.createOrderItem(organizationId, orderId, sizeId);\r\n      if (response) {\r\n        setIsEdit(false);\r\n        await refresh();\r\n        setOrderItemId(\"\");\r\n        setMsgEditError(undefined);\r\n      } else {\r\n        setMsgEditError(t(\"order-page.error-edit-size\"));\r\n      }\r\n    } catch (error: any) {\r\n      if (error?.response?.status === 409) {\r\n        setMsgEditError(t(\"order-page.error-edit-size\"));\r\n      } else {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      }\r\n    }\r\n    setSelectSizeDisabled(false);\r\n  }\r\n\r\n  async function cancelEdit() {\r\n    setMsgEditError(undefined);\r\n    setIsEdit(false);\r\n  }\r\n\r\n  async function cancelOrder(organizationId: string, order: Order) {\r\n    try {\r\n      if (OrderHelpers.canDeleteOrder(order)) {\r\n        setIsCancelOrder(false);\r\n        await orderService.cancelOrder(organizationId, order.id);\r\n        await refresh();\r\n        setIsCancelOrder(false);\r\n      }\r\n    } catch (error: any) {\r\n      if (error?.response?.status === 409) {\r\n        ToastHelpers.error(t(\"order-page.error-cancel-order-item\"));\r\n      } else {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      }\r\n    }\r\n  }\r\n\r\n  async function CompleteOrder(organizationId: string, order: Order) {\r\n    try {\r\n      if (isAdmin && OrderHelpers.canCompleteOrder(order)) {\r\n        if (order.carrierSubmissionReferenceNumber && order.carrierId) {\r\n          await orderService.cancelCarrierPickup(organizationId, order.id);\r\n        }\r\n\r\n        await orderService.completeBopilOrder(organizationId, order.id);\r\n        await refresh();\r\n      }\r\n    } catch (error: any) {\r\n      if (error?.response?.status === 400 && error?.response?.data === \"CompletedDeleted\") {\r\n        ToastHelpers.error(t(\"order-page.error-complete-order\"));\r\n      } else {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      }\r\n    }\r\n    setIsCompleteOrder(false);\r\n  }\r\n\r\n  async function removeTrackingNumber(organizationId: string, order: Order, orderItemId: string, trackingNumber: string) {\r\n    let orderItem = OrderHelpers.getOrderItem(order, orderItemId);\r\n    let trackingNumbers: Array<any> = [];\r\n    orderItem?.reservation.trackingNumbers.forEach((tracking) => {\r\n      if (trackingNumber !== tracking) {\r\n        trackingNumbers.push(tracking);\r\n      }\r\n    });\r\n    await orderService\r\n      .updateOrderItem(organizationId, orderId, orderItemId, trackingNumbers, true)\r\n      .catch((error: any) => ToastHelpers.error(t(\"order-page.error-delete-tracking-number\")));\r\n    await refresh();\r\n    setIsDeleteTrackingNumber(false);\r\n  }\r\n\r\n  async function refundOrder(organizationId: string, order: Order) {\r\n    try {\r\n      if (OrderHelpers.canRefundOrder(order)) {\r\n        setIsRequestingRefund(false);\r\n\r\n        if (order.payments) {\r\n          await paymentService.refundPayment(order.payments[0].id);\r\n          await refresh();\r\n        }\r\n\r\n        setIsRequestingRefund(false);\r\n      }\r\n    } catch (error: any) {\r\n      if (error?.response?.status === 409) {\r\n        ToastHelpers.error(t(\"order-page.error-cancel-order-item\"));\r\n      } else {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      }\r\n    }\r\n  }\r\n\r\n  async function cancelCarrierPickup(order: Order) {\r\n    try {\r\n      if (OrderHelpers.canCancelCarrierPickup(order)) {\r\n        setIsCancellingCarrierPickup(false);\r\n\r\n        await orderService.cancelCarrierPickup(order.organizationId.toString(), order.id);\r\n        await refresh();\r\n        setIsCancellingCarrierPickup(false);\r\n      }\r\n    } catch (error: any) {\r\n      ToastHelpers.error(t(\"common.error-generic\"));\r\n    }\r\n  }\r\n\r\n  async function addItem(organizationId: string) {\r\n    let height = Number.parseFloat(itemHeight ? itemHeight.valueOf() : \"\");\r\n    let width = Number.parseFloat(itemWidth ? itemWidth.valueOf() : \"\");\r\n    let depth = Number.parseFloat(itemDepth ? itemDepth.valueOf() : \"\");\r\n    let weight = Number.parseFloat(itemWeight ? itemWeight.valueOf() : \"\");\r\n\r\n    if (!height || !width || !depth || !weight) {\r\n      ToastHelpers.error(t(\"order-page.item.error-size\"));\r\n      return;\r\n    }\r\n\r\n    setSelectSizeDisabled(true);\r\n    var sizeId = \"\";\r\n    for (let i = 0; i < compartmentSizes.length; i++) {\r\n      let cSize = compartmentSizes[i];\r\n\r\n      if (\r\n        (cSize.height >= height && ((cSize.width >= width && cSize.depth >= depth) || (cSize.depth >= width && cSize.width >= depth))) ||\r\n        (cSize.height >= width && ((cSize.width >= height && cSize.depth >= depth) || (cSize.depth >= height && cSize.width >= depth))) ||\r\n        (cSize.height >= depth && ((cSize.width >= width && cSize.depth >= height) || (cSize.depth >= width && cSize.width >= height)))\r\n      ) {\r\n        sizeId = cSize.id;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!sizeId) {\r\n      setMsgEditError(t(\"order-page.error-add-item\"));\r\n      setSelectSizeDisabled(false);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const response = await orderService.createOrderItem(organizationId, orderId, sizeId, height, width, depth, weight);\r\n      if (response) {\r\n        setIsEdit(false);\r\n        await refresh();\r\n        setOrderItemId(\"\");\r\n        setMsgEditError(undefined);\r\n        setSelectSizeDisabled(false);\r\n      } else {\r\n        setMsgEditError(t(\"order-page.error-add-item\"));\r\n        setSelectSizeDisabled(false);\r\n      }\r\n    } catch (error: any) {\r\n      if (error?.response?.status === 409) {\r\n        setMsgEditError(t(\"order-page.error-add-item\"));\r\n      } else {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      }\r\n    }\r\n  }\r\n\r\n  async function openDoorForCancellation(organizationId: string, orderId: string, orderItemId: string): Promise<void> {\r\n    setItemIdInOpening(orderItemId);\r\n    setIsCancelReservation(false);\r\n\r\n    await orderService\r\n      .openDoor(organizationId, orderId, orderItemId, \"Recuperate\", null)\r\n      .then(async () => {\r\n        await orderService.cancelOrderItem(organizationId, orderId, orderItemId);\r\n        await refresh();\r\n      })\r\n      .catch((error) => {\r\n        if (error?.response?.status === 409) {\r\n          ToastHelpers.error(t(\"order-page.error-opendoor\"));\r\n        } else if (error?.response?.status === 424) {\r\n          ToastHelpers.error(t(\"order-page.error-opendoor-424\"));\r\n        } else {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        }\r\n      })\r\n      .finally(async () => {\r\n        await setItemIdInOpening(null);\r\n      });\r\n  }\r\n\r\n  function canShowOrderDetails() {\r\n    return (\r\n      !isEdit &&\r\n      !isCancelOrder &&\r\n      !isCompleteOrder &&\r\n      !isCancelReservation &&\r\n      !isRequestingCarrierPickup &&\r\n      !isCancellingCarrierPickup &&\r\n      !isSendingNotification &&\r\n      !isRequiresAddressMessage &&\r\n      !isRequestingRefund &&\r\n      !isDeleteTrackingNumber\r\n    );\r\n  }\r\n\r\n  function btnCreateReservation() {\r\n    if (HubHelpers.isHubOnline(hub.state)) {\r\n      setSelectSizeDisabled(false);\r\n      setIsEdit(true);\r\n    } else {\r\n      ToastHelpers.error(t(\"create-order-page.error-hub-offline\"));\r\n    }\r\n  }\r\n\r\n  function btnDeletOrderItem(organizationId: string, orderId: string, orderItemId: string, reservationState: string) {\r\n    if (reservationState === \"New\") {\r\n      deletOrderItem(organizationId, orderId, orderItemId);\r\n    } else if (reservationState === \"ReadyForPickUp\") {\r\n      setIsCancelReservation(true);\r\n      setOrderItemId(orderItemId);\r\n    }\r\n  }\r\n\r\n  async function deletOrderItem(organizationId: string, orderId: string, orderItemId: string): Promise<void> {\r\n    try {\r\n      await orderService.deleteOrderItem(organizationId, orderId, orderItemId);\r\n      setOrderItemId(\"\");\r\n      setIsCancelReservation(false);\r\n      await refresh();\r\n    } catch (error: any) {\r\n      if (error?.response?.status === 409) {\r\n        ToastHelpers.error(t(\"order-page.error-delete-order-item\"));\r\n      } else {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      }\r\n    }\r\n  }\r\n\r\n  async function openDoor(organizationId: string, orderId: string, orderItemId: string, state: string): Promise<void> {\r\n    let reason: string;\r\n    if (isReturn) {\r\n      if (state === \"ReadyForPickUp\") {\r\n        reason = \"Pickup\";\r\n      } else {\r\n        return;\r\n      }\r\n    } else {\r\n      if (state === \"New\") {\r\n        reason = \"Dropoff\";\r\n      } else if (state === \"PackagingReadyForPickUp\") {\r\n        reason = \"PackagingPickup\";\r\n      } else {\r\n        return;\r\n      }\r\n    }\r\n\r\n    setItemIdInOpening(orderItemId);\r\n\r\n    orderService\r\n      .openDoor(organizationId, orderId, orderItemId, reason, null)\r\n      .then(async () => {\r\n        await refresh();\r\n      })\r\n      .catch((error) => {\r\n        if (error?.response?.status === 409) {\r\n          ToastHelpers.error(t(\"order-page.error-opendoor\"));\r\n        } else if (error?.response?.status === 424) {\r\n          ToastHelpers.error(t(\"order-page.error-opendoor-424\"));\r\n        } else {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        }\r\n      })\r\n      .finally(() => {\r\n        setItemIdInOpening(null);\r\n      });\r\n  }\r\n\r\n  async function refresh() {\r\n    if (!loading && organization.id) {\r\n      try {\r\n        const order = await orderService.getOrderById(organization.id, orderId);\r\n        if (order) {\r\n          setOrder(order);\r\n\r\n          if (isReturn) {\r\n            setCanSendNotification(order.state === \"New\");\r\n          } else if (isPersonalStorage) {\r\n            setCanSendNotification(order.state !== \"Completed\" && order.state !== \"Cancelled\");\r\n          } else {\r\n            setCanSendNotification(order.state === \"ReadyForPickUp\");\r\n          }\r\n\r\n          if (order?.carrierSubmissionReferenceNumber) {\r\n            setIsCarrierPickupRequested(true);\r\n          } else {\r\n            setIsCarrierPickupRequested(false);\r\n            setLabelBlob(null);\r\n          }\r\n        }\r\n      } catch (error) {}\r\n    }\r\n  }\r\n}\r\n\r\nfunction requiresAddress(order: Order, organization: Organization): boolean {\r\n  if (order.organizationId.toString() !== organization.id) {\r\n    return false;\r\n  }\r\n\r\n  return (\r\n    organization.city === \"\" ||\r\n    organization.city === null ||\r\n    organization.country === \"\" ||\r\n    organization.country === null ||\r\n    organization.postalCode === \"\" ||\r\n    organization.postalCode === null ||\r\n    organization.street === \"\" ||\r\n    organization.street === null ||\r\n    organization.streetNumber === \"\" ||\r\n    organization.streetNumber === null ||\r\n    organization.state === \"\" ||\r\n    organization.state === null ||\r\n    organization.country === \"\" ||\r\n    organization.country === null\r\n  );\r\n}\r\n","import \"./organizations-page.scss\";\r\nimport { useState } from \"react\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Member from \"../../services/member/member\";\r\nimport MemberRoleOrganization from \"../../services/member/member-role-organization\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport { AddButtonComponent } from \"../../components/button-component\";\r\n\r\ntype Props = {\r\n  member: Member;\r\n  activeOrganization: MemberRoleOrganization | null;\r\n  changeActiveOrganization: any;\r\n};\r\n\r\nexport default function OrganizationsPage(props: Props) {\r\n  const { member, activeOrganization, changeActiveOrganization } = props;\r\n\r\n  const history = useHistory();\r\n\r\n  const [associatedOrganizations] = useState<MemberRoleOrganization[] | undefined>(member.associatedOrganizations);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <div className=\"container pt-5 page organizations-page\">\r\n      <div className=\"row\">\r\n        {/* Organizations */}\r\n        <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n          <div className=\"card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <h2>{t(\"organizations-page.title\")}</h2>\r\n            </div>\r\n\r\n            <div className=\"card-body\">\r\n              <div className=\"col-12\">\r\n                <table className=\"table table-hover row-clikable\">\r\n                  <thead>\r\n                    <tr>\r\n                      <th></th>\r\n                      <th>{t(\"organizations-page.organization\")}</th>\r\n                      <th>\r\n                        {memberService.isLocketgoAdmin(member) && (\r\n                          <AddButtonComponent\r\n                            title={\"Create Organization\"}\r\n                            onClick={() => history.push(\"/create-organization\")}\r\n                          ></AddButtonComponent>\r\n                        )}\r\n                      </th>\r\n                      <th></th>\r\n                    </tr>\r\n                  </thead>\r\n                  <tbody>\r\n                    {member &&\r\n                      associatedOrganizations &&\r\n                      associatedOrganizations.map((associatedOrganization) => {\r\n                        const current: boolean =\r\n                          activeOrganization &&\r\n                          activeOrganization.entity &&\r\n                          associatedOrganization.entity &&\r\n                          associatedOrganization.entity.id === activeOrganization.entity.id\r\n                            ? true\r\n                            : false;\r\n\r\n                        return (\r\n                          <tr\r\n                            key={associatedOrganization.entity?.id}\r\n                            onClick={() => history.push(`organizations/${associatedOrganization.entity?.id}`)}\r\n                          >\r\n                            <td>{current && <FontAwesomeIcon className=\"text-success\" icon={[\"fas\", \"check-circle\"]} />}</td>\r\n                            <td>{associatedOrganization.entity?.name}</td>\r\n                            <td>\r\n                              {!current && (\r\n                                <button\r\n                                  className=\"btn btn-primary me-2\"\r\n                                  onClick={(ev) => {\r\n                                    ev.stopPropagation();\r\n                                    changeActiveOrganization(associatedOrganization);\r\n                                  }}\r\n                                >\r\n                                  {t(\"organizations-page.select-organization\")}\r\n                                </button>\r\n                              )}\r\n                            </td>\r\n                            <td>\r\n                              <button\r\n                                className=\"btn btn-outline-primary\"\r\n                                onClick={(ev) => {\r\n                                  ev.stopPropagation();\r\n                                  history.push(`organizations/${associatedOrganization.entity?.id}`);\r\n                                }}\r\n                              >\r\n                                <FontAwesomeIcon icon={[\"fas\", \"pen\"]} />\r\n                              </button>\r\n                            </td>\r\n                          </tr>\r\n                        );\r\n                      })}\r\n                    {(!member || !associatedOrganizations) && (\r\n                      <tr>\r\n                        <td colSpan={2}>{t(\"organizations-page.no-organization-associated\")}</td>\r\n                      </tr>\r\n                    )}\r\n                  </tbody>\r\n                </table>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","export default function WaitingComponent() {\r\n  return (\r\n    <>\r\n      <div className=\"waiting-icon\">\r\n        <img src=\"/locketgo-glyph-spin.gif\" alt=\"\" />\r\n      </div>\r\n    </>\r\n  );\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport { ActionButtonComponent } from \"../../components/button-component\";\r\nimport { InputComponent } from \"../../components/input\";\r\nimport WaitingComponent from \"../../components/waiting-component\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport MemberRoleOrganization from \"../../services/member/member-role-organization\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport organizationService from \"../../services/member/organization-service\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ntype Props = {\r\n  member: Member;\r\n  changeMember: Function;\r\n};\r\n\r\ninterface IApprobationProps {\r\n  state: string;\r\n}\r\n\r\ninterface IParamTypes {\r\n  organizationId: string;\r\n}\r\n\r\nfunction ApprobationComponent(props: IApprobationProps) {\r\n  const { state } = props;\r\n  const { t } = useTranslation();\r\n\r\n  return <>{t(`hub-association-state.${state}`)}</>;\r\n}\r\n\r\nexport default function OrganizationPage(props: Props) {\r\n  const { member, changeMember } = props;\r\n  const { organizationId } = useParams<IParamTypes>();\r\n  const { t } = useTranslation();\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n\r\n  const [activeOrganization, setActiveOrganization] = useState<MemberRoleOrganization | undefined>(undefined);\r\n  const [organizationName, setOrganizationName] = useState<string | undefined>(undefined);\r\n  const [streetNumber, setStreetNumber] = useState<string | undefined>(undefined);\r\n  const [streetNumberError, setStreetNumberError] = useState<string | undefined>(undefined);\r\n  const [street, setStreet] = useState<string | undefined>(undefined);\r\n  const [city, setCity] = useState<string | undefined>(undefined);\r\n  const [postalCode, setPostalCode] = useState<string | undefined>(undefined);\r\n  const [state, setState] = useState<string>(\"\");\r\n  const [country, setCountry] = useState<string>(\"\");\r\n\r\n  const isAdmin = memberService.isOrganizationAdmin(member, organizationId);\r\n\r\n  const [micrositesLength, setMicrositesLength] = useState<number>(0);\r\n\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    let organization = member.associatedOrganizations.find((organization) => organization.entity?.id == organizationId);\r\n    if (organization) {\r\n      setActiveOrganization(organization);\r\n      setOrganizationName(organization.entity?.name);\r\n      setCity(organization.entity?.city);\r\n      setPostalCode(organization.entity?.postalCode);\r\n\r\n      setStreet(organization.entity?.street);\r\n      setStreetNumber(organization.entity?.streetNumber);\r\n\r\n      setCountry(organization.entity?.country ? organization.entity?.country : \"Canada\");\r\n      setState(organization.entity?.state ? organization.entity?.state : \"QC\");\r\n      organizationService\r\n        .getAllMicrositesOfOrganization(organizationId)\r\n        .then((microsites) => {\r\n          setMicrositesLength(microsites.length);\r\n          setLoading(false);\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"microsites-page.microsites-error\"));\r\n        });\r\n    }\r\n  }, []);\r\n\r\n  return (\r\n    <div className=\"container pt-3 page organizations-page\">\r\n      {loading && <WaitingComponent />}\r\n      {!loading && (\r\n        <>\r\n          <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n            <div className=\"page-breadcrumb\">\r\n              <ul className=\"breadcrumb\">\r\n                <li className=\"breadcrumb-item active\">\r\n                  <Link className=\"microsites\" to=\"/organizations\">\r\n                    {t(\"common.organizations\")}\r\n                  </Link>\r\n                </li>\r\n                <li className=\"breadcrumb-item active\">{organizationName}</li>\r\n              </ul>\r\n              <h1>{`${organizationName}`}</h1>\r\n            </div>\r\n\r\n            {/* Microsites button */}\r\n            {micrositesLength !== 0 && member && memberService.isOrganizationContributor(member, organizationId) && (\r\n              <div>\r\n                <Link className=\" microsites btn btn-primary\" to={`/organizations/${organizationId}/microsites`}>\r\n                  {t(\"organization-page.microsites-page\")}\r\n                </Link>\r\n              </div>\r\n            )}\r\n          </div>\r\n\r\n          {/* Edit organization */}\r\n          <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <button className=\"btn-close float-end\" onClick={() => history.push(`/organizations`)}></button>\r\n                <h2>{t(\"organization-page.address\")}</h2>\r\n              </div>\r\n              <div className=\"card-body\">\r\n                <form className=\"row g-3\" onSubmit={(ev) => ev.preventDefault()}>\r\n                  <div className=\"col-md-3\">\r\n                    <InputComponent\r\n                      type=\"number\"\r\n                      regExp={/^[0-9]*$/}\r\n                      labelText={t(\"member-profile.streetNumber\") + \"*\"}\r\n                      setValue={(value: string) => {\r\n                        setStreetNumber(value);\r\n                        StringHelpers.isStringOnlyNumbers(value)\r\n                          ? setStreetNumberError(undefined)\r\n                          : setStreetNumberError(t(\"member-profile.street-number-error\"));\r\n                      }}\r\n                      value={streetNumber ? streetNumber : \"\"}\r\n                      disabled={!isAdmin}\r\n                      msgError={streetNumberError}\r\n                    />\r\n                  </div>\r\n                  <div className=\"col-md-9\">\r\n                    <InputComponent\r\n                      labelText={t(\"member-profile.street\") + \"*\"}\r\n                      setValue={(value: string) => setStreet(value)}\r\n                      value={street ? street : \"\"}\r\n                      disabled={!isAdmin}\r\n                    />\r\n                  </div>\r\n                  <div className=\"col-md-8\">\r\n                    <InputComponent\r\n                      labelText={t(\"member-profile.city\") + \"*\"}\r\n                      setValue={(value: string) => setCity(value)}\r\n                      value={city ? city : \"\"}\r\n                      disabled={!isAdmin}\r\n                    />\r\n                  </div>\r\n                  <div className=\"col-md-4\">\r\n                    <InputComponent\r\n                      labelText={t(\"member-profile.postalCode\") + \"*\"}\r\n                      setValue={(value: string) => setPostalCode(value)}\r\n                      value={postalCode ? postalCode : \"\"}\r\n                      disabled={!isAdmin}\r\n                    />\r\n                  </div>\r\n                  <div className=\"col-md-6\">\r\n                    <InputComponent labelText={t(\"member-profile.state\") + \"*\"} setValue={(value: string) => {}} value={state} disabled />\r\n                  </div>\r\n                  <div className=\"col-md-6\">\r\n                    <InputComponent\r\n                      labelText={t(\"member-profile.country\") + \"*\"}\r\n                      setValue={(value: string) => {}}\r\n                      value={country}\r\n                      disabled\r\n                    />\r\n                  </div>\r\n\r\n                  {isAdmin && (\r\n                    <div>\r\n                      <ActionButtonComponent\r\n                        type=\"submit\"\r\n                        title={t(\"organization-page.save-address\")}\r\n                        onClick={() => saveAddress()}\r\n                        className=\"btn btn-primary\"\r\n                        disabled={false}\r\n                      />\r\n                      <button className=\"btn btn-md btn-primary-outline\" type=\"submit\" onClick={() => history.push(`/organizations`)}>\r\n                        {t(\"common.cancel\")}\r\n                      </button>\r\n                      {memberService.isLocketgoAdmin(member) && (\r\n                        <button className={`btn btn-danger float-end`} onClick={() => handleDelete()} disabled={false}>\r\n                          <FontAwesomeIcon icon={[\"fas\", \"trash-alt\"]} /> {t(\"common.delete\")}\r\n                        </button>\r\n                      )}\r\n                    </div>\r\n                  )}\r\n                </form>\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          {/* My roles */}\r\n          <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <h2>{t(\"organization-page.organization-roles\")}</h2>\r\n              </div>\r\n\r\n              <div className=\"card-body\">\r\n                <div className=\"col-12\">\r\n                  <table className=\"table\">\r\n                    <thead>\r\n                      <tr>\r\n                        <th>{t(\"organization-page.organization-roles-name\")}</th>\r\n                      </tr>\r\n                    </thead>\r\n                    <tbody>\r\n                      {activeOrganization?.roles?.map((role) => {\r\n                        return (\r\n                          <tr key={role}>\r\n                            <td className=\"text-start\">{role}</td>\r\n                          </tr>\r\n                        );\r\n                      })}\r\n                    </tbody>\r\n                  </table>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          {/* Associated Hubs */}\r\n          <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <h2>{t(\"organization-page.associated-hubs\")}</h2>\r\n              </div>\r\n\r\n              <div className=\"card-body\">\r\n                <div className=\"col-12\">\r\n                  <table className=\"table\">\r\n                    <thead>\r\n                      <tr>\r\n                        <th className=\"text-center\">{t(\"organization-page.location\")}</th>\r\n                        <th>{t(\"organization-page.approbation\")}</th>\r\n                      </tr>\r\n                    </thead>\r\n                    <tbody>\r\n                      {activeOrganization?.entity?.associatedHubs.map((associatedHub) => {\r\n                        return (\r\n                          <tr key={associatedHub.hubId}>\r\n                            <td>{associatedHub.hubId}</td>\r\n                            <td>\r\n                              <ApprobationComponent state={associatedHub.state} />\r\n                            </td>\r\n                          </tr>\r\n                        );\r\n                      })}\r\n                    </tbody>\r\n                  </table>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </>\r\n      )}\r\n    </div>\r\n  );\r\n\r\n  function handleDelete() {\r\n    setLoading(true);\r\n    organizationService\r\n      .updateOrganization(organizationId, streetNumber ?? \"\", street ?? \"\", city ?? \"\", postalCode ?? \"\", state ?? \"\", country ?? \"\", false)\r\n      .catch((error: any) => {\r\n        ToastHelpers.error(t(\"common.error-refresh\"));\r\n      })\r\n      .finally(() => {\r\n        memberService.getMemberMe().then((member) => {\r\n          changeMember(member);\r\n          history.push(`/organizations`);\r\n        });\r\n      });\r\n  }\r\n\r\n  function saveAddress() {\r\n    setLoading(true);\r\n    organizationService\r\n      .updateOrganization(organizationId, streetNumber ?? \"\", street ?? \"\", city ?? \"\", postalCode ?? \"\", state ?? \"\", country ?? \"\")\r\n      .catch((error: any) => {\r\n        ToastHelpers.error(t(\"common.error-refresh\"));\r\n      })\r\n      .finally(() => setLoading(false));\r\n  }\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n  value: string;\r\n  setValue: Function;\r\n  msgError: string | undefined;\r\n  onMsgErrorChanged: Function;\r\n  disabled?: boolean | undefined;\r\n};\r\n\r\nexport function FirstNameComponent(props: Props) {\r\n  const { t } = useTranslation();\r\n  return (\r\n    <>\r\n      <label className=\"form-label\">{t(\"member-profile.firstName\")}</label>\r\n      <input className=\"form-control\" value={props.value} onChange={(ev) => validate(ev.target.value)} disabled={props.disabled} maxLength={50}/>\r\n      {props.msgError && <label className=\"error-msg\">{props.msgError}</label>}\r\n    </>\r\n  );\r\n  function validate(value : string)\r\n  {\r\n    value = value.substring(0,50);\r\n    props.setValue(value);\r\n\r\n    props.onMsgErrorChanged(\"\");\r\n    if(value.length > 50)\r\n    {\r\n      props.onMsgErrorChanged(t(\"input-component.firstname-error\"));\r\n    }\r\n  }\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\n\r\ntype Props = {\r\n  value: string;\r\n  setValue: Function;\r\n  msgError: string | undefined;\r\n  onMsgErrorChanged: Function;\r\n  disabled?: boolean | undefined;\r\n};\r\n\r\nexport function LastNameComponent(props: Props) {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <label className=\"form-label\">{t(\"member-profile.lastName\")}</label>\r\n      <input className=\"form-control\" value={props.value} onChange={(ev) => validate(ev.target.value)} disabled={props.disabled} maxLength={50}/>\r\n      {props.msgError && <label className=\"error-msg\">{props.msgError}</label>}\r\n    </>\r\n  );\r\n  function validate(value : string)\r\n  {\r\n    value = value.substring(0,50);\r\n    props.setValue(value);\r\n\r\n    props.onMsgErrorChanged(\"\");\r\n    if(value.length > 50)\r\n    {\r\n      props.onMsgErrorChanged(t(\"input-component.lastname-error\"));\r\n    }\r\n  }\r\n}\r\n\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport \"./member-page.scss\";\r\nimport Member from \"../../services/member/member\";\r\nimport authService from \"../../services/auth/auth-service\";\r\nimport { InputComponent } from \"../../components/input\";\r\nimport { useState } from \"react\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport { ActionButtonComponent } from \"../../components/button-component\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport { PhoneFormComponent } from \"../../components/customer-information-components/phone-component\";\r\nimport { FirstNameComponent } from \"../../components/customer-information-components/firstname-component\";\r\nimport { LastNameComponent } from \"../../components/customer-information-components/lastname-components\";\r\n\r\ntype Props = {\r\n  member: Member;\r\n  changeMember: any;\r\n};\r\n\r\nexport default function MemberPage(props: Props) {\r\n  const { member, changeMember } = props;\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const [firstname, setFirstname] = useState<string>(member.firstname);\r\n  const [lastname, setLastname] = useState<string>(member.lastname);\r\n  const [email, setEmail] = useState<string>(member.email);\r\n  const [phone, setPhone] = useState<string>(member.phone);\r\n  const [phoneExtension, setPhoneExtension] = useState<number | undefined>(member.phoneExtension);\r\n  const [phoneError, setPhoneError] = useState<string | undefined>(undefined);\r\n  const [firstnameError, setFirstnameError] = useState<string | undefined>(undefined);\r\n  const [lastnameError, setLastnameError] = useState<string | undefined>(undefined);\r\n\r\n  const [isEdit, setIsEdit] = useState<boolean>(false);\r\n\r\n  // const hasBopil = member.features.includes(\"bopil\");\r\n  // const hasPersonalStorage = member.features.includes(\"personalstorage\");\r\n\r\n  return (\r\n    <div className=\"container pt-5 page member-page\">\r\n      <div className=\"row\">\r\n        <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n          <div className=\"card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <h2>{t(\"member-profile.title\")}</h2>\r\n            </div>\r\n\r\n            <div className=\"card-body\">\r\n              <div className=\"profile-buttons\">\r\n                {!isEdit && (\r\n                  <>\r\n                    <button className=\"btn btn-primary\" data-bs-target=\"#changePasswordModal\" data-bs-toggle=\"modal\">\r\n                      {t(\"member-profile.change-password\")}\r\n                    </button>\r\n                    <div className=\"modal\" tabIndex={-1} id=\"changePasswordModal\">\r\n                      <div className=\"modal-dialog\">\r\n                        <div className=\"modal-content\">\r\n                          <div className=\"modal-header\">\r\n                            <h5 className=\"modal-title\">{t(\"member-profile.change-password\")}</h5>\r\n                            <button type=\"button\" className=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n                          </div>\r\n                          <div className=\"modal-body\">\r\n                            <p>{t(\"member-profile.change-password-text\")}</p>\r\n                          </div>\r\n                          <div className=\"modal-footer\">\r\n                            <button type=\"button\" className=\"btn btn-outline-primary\" data-bs-dismiss=\"modal\">\r\n                              {t(\"common.close\")}\r\n                            </button>\r\n                          </div>\r\n                        </div>\r\n                      </div>\r\n                    </div>\r\n\r\n                    <button className=\"btn btn-purple ms-2\" onClick={async () => await logout()}>\r\n                      {t(\"account.logout\")}\r\n                    </button>\r\n\r\n                    <ActionButtonComponent onClick={() => setIsEdit(true)} className=\"btn btn-outline-primary ms-2\" icon={[\"fas\", \"pen\"]} />\r\n                  </>\r\n                )}\r\n              </div>\r\n\r\n              <div className=\"row g-3\">\r\n                <div className=\"col-md-6\">\r\n                  <FirstNameComponent\r\n                    value={firstname}\r\n                    setValue={setFirstname}\r\n                    msgError={firstnameError}\r\n                    onMsgErrorChanged={setFirstnameError}\r\n                    disabled={!isEdit}\r\n                  />\r\n                </div>\r\n                <div className=\"col-md-6\">\r\n                  <LastNameComponent\r\n                    value={lastname}\r\n                    setValue={setLastname}\r\n                    msgError={lastnameError}\r\n                    onMsgErrorChanged={setLastnameError}\r\n                    disabled={!isEdit}\r\n                  />\r\n                </div>\r\n                <div className=\"col-md-6\">\r\n                  <InputComponent\r\n                    labelText={t(\"member-profile.email\")}\r\n                    value={email}\r\n                    setValue={(value: string) => setEmail(value)}\r\n                    disabled={true}\r\n                  />\r\n                </div>\r\n                <div className=\"col-md-4\">\r\n                  {/* <InputComponent\r\n                    labelText={t(\"common.phone\")}\r\n                    value={phone}\r\n                    setValue={(value: string) => setPhone(value)}\r\n                    disabled={!isEdit}\r\n                  /> */}\r\n                  <PhoneFormComponent\r\n                    value={phone}\r\n                    setValue={setPhone}\r\n                    onMsgErrorChanged={setPhoneError}\r\n                    msgError={phoneError}\r\n                    label={t(\"common.phone\")}\r\n                    disabled={!isEdit}\r\n                  />\r\n                </div>\r\n                <div className=\"col-md-2\">\r\n                  <InputComponent\r\n                    labelText={t(\"member-profile.extension\")}\r\n                    value={phoneExtension ? phoneExtension.toString() : \"\"}\r\n                    setValue={(value: number) => setPhoneExtension(value)}\r\n                    disabled={!isEdit}\r\n                  />\r\n                </div>\r\n\r\n                <div>\r\n                  {isEdit && (\r\n                    <>\r\n                      <ActionButtonComponent\r\n                        title={t(\"common.save\")}\r\n                        onClick={() => save()}\r\n                        className=\"btn btn-primary\"\r\n                        disabled={saveDisabled()}\r\n                      />\r\n                      <ActionButtonComponent\r\n                        title={t(\"common.cancel\")}\r\n                        onClick={() => cancelEdit()}\r\n                        className=\"ms-2 btn btn-outline-primary\"\r\n                      />\r\n                    </>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        {/* <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n          <div className=\"card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <h2>{t(\"member-profile.title-features\")}</h2>\r\n            </div>\r\n\r\n            <div className=\"card-body\">\r\n              <form className=\"row g-3\">\r\n                <div className=\"col-12\">\r\n                  <div className=\"form-check\">\r\n                    <input className=\"form-check-input\" type=\"checkbox\" checked={hasBopil} disabled />\r\n                    <label className=\"form-check-label\">{t(\"member-profile.feature-bopil\")}</label>\r\n                  </div>\r\n                </div>\r\n                <div className=\"col-12\">\r\n                  <div className=\"form-check\">\r\n                    <input className=\"form-check-input\" type=\"checkbox\" checked={hasPersonalStorage} disabled />\r\n                    <label className=\"form-check-label\">{t(\"member-profile.feature-personal-storage\")}</label>\r\n                  </div>\r\n                </div>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        </div> */}\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  async function logout(): Promise<void> {\r\n    history.push(\"/\");\r\n    changeMember(null);\r\n    await authService.logout();\r\n  }\r\n\r\n  function saveDisabled(): boolean {\r\n    return !firstname || !lastname || !email || !phone || firstname.length > 50 || lastname.length > 50 || !isValidPhone(phone);\r\n  }\r\n  function isValidPhone(value: string): boolean {\r\n    const RegExPhone1 = /^[0-9]{3}-[0-9]{3}-[0-9]{4}$/;\r\n    const RegExPhone2 = /^\\d{10}$/;\r\n    let valid: boolean = RegExPhone1.test(value) || RegExPhone2.test(value);\r\n\r\n    if (valid) return true;\r\n\r\n    return false;\r\n  }\r\n  function save() {\r\n    if (firstname && lastname && email && phone) {\r\n      let newMember = { ...member };\r\n\r\n      newMember.firstname = firstname;\r\n      newMember.lastname = lastname;\r\n      newMember.email = email;\r\n      newMember.phone = phone;\r\n      newMember.phoneExtension = phoneExtension;\r\n\r\n      memberService\r\n        .updateMemberMe(newMember)\r\n        .then(() => {\r\n          setIsEdit(false);\r\n          refreshMe();\r\n        })\r\n        .catch((error: any) => {\r\n          ToastHelpers.error(t(\"common.error-refresh\"));\r\n        });\r\n    }\r\n  }\r\n\r\n  function refreshMe() {\r\n    memberService.getMemberMe().then((me) => {\r\n      changeMember(me);\r\n      if (me) {\r\n        setFirstname(me.firstname);\r\n        setLastname(me.lastname);\r\n        setPhone(me.phone);\r\n        setPhoneExtension(me.phoneExtension);\r\n        setEmail(me.email);\r\n      }\r\n    });\r\n  }\r\n\r\n  function cancelEdit() {\r\n    setIsEdit(false);\r\n\r\n    refreshMe();\r\n  }\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport orderService from \"../../services/order/order-service\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport \"./create-order-page.scss\";\r\nimport Member from \"../../services/member/member\";\r\nimport { InputComponent } from \"../../components/input\";\r\nimport { HubHelpers } from \"../../services/hub/hub-helper\";\r\nimport packagingOptionService from \"../../services/hub/packagingOption-service\";\r\nimport { PackagingOption } from \"../../services/hub/packgingOption\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport HubLocationComponent from \"../../components/hub-location-component\";\r\nimport customersService from \"../../services/member/customers-service\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { PhoneFormComponent } from \"../../components/customer-information-components/phone-component\";\r\nimport { Carrier } from \"../../services/carrier/carrier\";\r\nimport { OrderFlow } from \"../../services/order/order\";\r\nimport { InfoCirleButton } from \"../../components/button-component\";\r\n\r\ninterface CreateOrderPageProps {\r\n  isReturn?: boolean | undefined;\r\n  organization: Organization | undefined;\r\n  member: Member;\r\n}\r\n\r\nexport default function CreateOrderPage(props: CreateOrderPageProps) {\r\n  const { organization, isReturn } = props;\r\n\r\n  const [loading, setLoading] = useState(true);\r\n\r\n  const searchResultCount: number = 5;\r\n  const [hubs, setHubs] = useState<Array<Hub> | null>(null);\r\n  const [carriers, setCarriers] = useState<Array<Carrier>>([]);\r\n  const [packagingOptions, setPackagingOptions] = useState<Array<PackagingOption> | null>(null);\r\n  const [packagingOptionsAvailable, setPackagingOptionsAvailable] = useState<Array<PackagingOption> | null>(null);\r\n  const [customers, setCustomers] = useState<Array<Member>>([]);\r\n  const [filteredCustomers, setFilteredCustomers] = useState<Array<Member>>([]);\r\n  const [customerSearchText, setCustomerSearchText] = useState<string>(\"\");\r\n  const [customerSelectedEmail, setCustomerSelectedEmail] = useState<string>(\"\");\r\n  const [referenceId, setReferenceId] = useState<string>(\"\");\r\n\r\n  const [step, setStep] = useState(1);\r\n\r\n  const [selectExistingCustomer, setSelectExistingCustomer] = useState(true);\r\n\r\n  const [hubId, setHubId] = useState<string>();\r\n\r\n  const [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n  const [email, setEmail] = useState<string>(\"\");\r\n  const [firstname, setFistname] = useState<string>(\"\");\r\n  const [lastname, setLastname] = useState<string>(\"\");\r\n\r\n  const [emailError, setEmailError] = useState<string>();\r\n  const [phoneError, setPhoneError] = useState<string>();\r\n\r\n  const [isCreating, setIsCreating] = useState<boolean>(false);\r\n\r\n  const [packagingOptionId, setPackagingOptionId] = useState<string>(\"nopackaging\");\r\n  const [carrierId, setCarrierId] = useState<string>(\"nocarrier\");\r\n\r\n  const nocarrier = carrierId !== \"nocarrier\";\r\n\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  useEffect(\r\n    () => {\r\n      if (organization) {\r\n        packagingOptionService\r\n          .getPackagingOptions()\r\n          .then((packagingOptions) => {\r\n            setPackagingOptions(packagingOptions);\r\n\r\n            const hubAssociations = organization.associatedHubs.filter((o) => o.state !== \"Rejected\");\r\n\r\n            hubService\r\n              .getHubs()\r\n              .then((hubs) => {\r\n                const hubsFiltered = hubs.filter((h) => hubAssociations?.find((ha) => ha.hubId === h.id) && h.active);\r\n                setHubs(hubsFiltered);\r\n\r\n                if (hubsFiltered.length === 1) {\r\n                  onHubSelected(hubs, packagingOptions, hubsFiltered[0].id);\r\n                }\r\n\r\n                customersService\r\n                  .getCustomers(organization?.id)\r\n                  .then((customers) => {\r\n                    customers = customers.filter((customer) => customer.firstname && customer.lastname && customer.email);\r\n                    setCustomers(customers);\r\n                    setSelectExistingCustomer(customers.length > 0);\r\n\r\n                    onCustomerSearchTextChanged(\"\", customers);\r\n\r\n                    setLoading(false);\r\n                  })\r\n                  .catch(() => {\r\n                    ToastHelpers.error(t(\"customers-page.error-refresh\"));\r\n                  });\r\n              })\r\n              .catch(() => {\r\n                ToastHelpers.error(t(\"common.error-refresh\"));\r\n              });\r\n          })\r\n          .catch(() => {\r\n            ToastHelpers.error(t(\"common.error-refresh\"));\r\n          });\r\n      }\r\n    },\r\n    // eslint-disable-next-line\r\n    [organization]\r\n  );\r\n\r\n  if (hubs?.length === 0) {\r\n    return (\r\n      <div className=\"container page create-order-page\">\r\n        <div className=\"col col-lg-6 offset-lg-3\">\r\n          <p>{t(\"create-order-page.no-hub\")}</p>\r\n          <button className=\"btn btn-primary\" onClick={() => history.push(`/orders`)}>\r\n            {t(\"common.return\")}\r\n          </button>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"container page create-order-page\">\r\n      <div className=\"col col-lg-6 offset-lg-3\">\r\n        <h1>{isReturn ? t(\"create-order-page.return.title\") : t(\"create-order-page.title\")}</h1>\r\n\r\n        <LoadingComponent loading={loading} />\r\n\r\n        {!loading && step === 1 && (\r\n          <div className=\"customer card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <div className=\"d-inline-block\">\r\n                <h2>{t(\"create-order-page.chose-hub\")}</h2>\r\n              </div>\r\n              <button className=\"btn-close float-end\" onClick={() => history.push(\"orders\")}></button>\r\n            </div>\r\n            <div className=\"card-body\">\r\n              {hubs && (\r\n                <table className=\"table table-hover row-clikable\">\r\n                  <tbody>\r\n                    {hubs.map((hub: Hub) => {\r\n                      return (\r\n                        <tr\r\n                          key={hub.id}\r\n                          onClick={() => {\r\n                            onHubSelected(hubs, packagingOptions, hub.id);\r\n                          }}\r\n                        >\r\n                          <td style={{ textAlign: \"left\" }}>\r\n                            <HubLocationComponent hub={hub} />\r\n                          </td>\r\n                          <td>\r\n                            {!HubHelpers.isHubOnline(hub.state) && (\r\n                              <span style={{ color: \"red\" }}>{\" \" + t(\"create-order-page.select-hub-not-available\")}</span>\r\n                            )}\r\n                          </td>\r\n                        </tr>\r\n                      );\r\n                    })}\r\n                  </tbody>\r\n                </table>\r\n              )}\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n        {!loading && step === 2 && (\r\n          <div className=\"customer card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <div className=\"d-inline-block\">\r\n                <h2>{t(\"customer.customer-information\")}</h2>\r\n              </div>\r\n              <button className=\"btn-close float-end\" onClick={() => history.push(\"orders\")}></button>\r\n            </div>\r\n\r\n            <div className=\"card-body\">\r\n              <form onSubmit={(ev) => ev.preventDefault()}>\r\n                <div className=\"mb-4\">\r\n                  <input\r\n                    type=\"radio\"\r\n                    className=\"form-check-input\"\r\n                    name=\"selectexistingcustomer\"\r\n                    id=\"selectexistingcustomer\"\r\n                    key=\"selectexistingcustomer\"\r\n                    checked={selectExistingCustomer}\r\n                    disabled={customers.length === 0}\r\n                    onChange={onSelectCustomerSelected}\r\n                  />\r\n                  <label className=\"form-check-label\" htmlFor=\"selectexistingcustomer\">\r\n                    {t(\"create-order-page.existing-customer\")}\r\n                  </label>\r\n\r\n                  {customers.length > 0 && selectExistingCustomer && (\r\n                    <>\r\n                      <div className=\"ms-4 mb-2\">\r\n                        <input\r\n                          className=\"form-control mb-2\"\r\n                          value={customerSearchText}\r\n                          placeholder={t(\"create-order-page.searchbox\")}\r\n                          onChange={(ev) => onCustomerSearchTextChanged(ev.target.value, customers)}\r\n                          autoFocus={true}\r\n                        />\r\n                        <div className=\"fixed-head-table\">\r\n                          <table className=\"table table-sm table-hover row-clikable\">\r\n                            <thead>\r\n                              <tr>\r\n                                <th></th>\r\n                                <th>{t(\"create-order-page.name\")}</th>\r\n                                <th>{t(\"create-order-page.email\")}</th>\r\n                                <th>{t(\"common.phone\")}</th>\r\n                              </tr>\r\n                            </thead>\r\n                            <tbody>\r\n                              {filteredCustomers.length > 0 &&\r\n                                filteredCustomers.map((c) => (\r\n                                  <tr key={c.email} onClick={() => setCustomerSelectedEmail(c.email)}>\r\n                                    <td>\r\n                                      {customerSelectedEmail === c.email && (\r\n                                        <FontAwesomeIcon icon=\"check-circle\" className=\"text-success\"></FontAwesomeIcon>\r\n                                      )}\r\n                                    </td>\r\n                                    <td>\r\n                                      {c.firstname} {c.lastname?.length > 0 && \" \" + c.lastname}\r\n                                    </td>\r\n                                    <td>{c.email}</td>\r\n                                    <td>{c.phone}</td>\r\n                                  </tr>\r\n                                ))}\r\n                              {filteredCustomers.length === 0 && <div>{t(\"create-order-page.no-results\")}</div>}\r\n                            </tbody>\r\n                          </table>\r\n                        </div>\r\n                      </div>\r\n                    </>\r\n                  )}\r\n\r\n                  <div>\r\n                    <input\r\n                      type=\"radio\"\r\n                      className=\"form-check-input\"\r\n                      name=\"newcustomer\"\r\n                      id=\"newcustomer\"\r\n                      key=\"newcustomer\"\r\n                      checked={!selectExistingCustomer}\r\n                      onChange={onSelectCustomerSelected}\r\n                    />\r\n                    <label className=\"form-check-label\" htmlFor=\"newcustomer\">\r\n                      {t(\"create-order-page.new-customer\")}\r\n                    </label>\r\n\r\n                    {(customers.length === 0 || !selectExistingCustomer) && (\r\n                      <div className=\"ms-4\">\r\n                        {/* FIRST NAME */}\r\n                        <div className=\"mb-3\">\r\n                          <label className=\"form-label\">{t(\"customer.enter-firstname\")}</label>\r\n                          <input\r\n                            className=\"form-control\"\r\n                            value={firstname}\r\n                            onChange={(ev) => setFistname(ev.target.value)}\r\n                            required\r\n                            autoFocus={true}\r\n                          />\r\n                        </div>\r\n\r\n                        {/* LAST NAME */}\r\n                        <div className=\"mb-3\">\r\n                          <label className=\"form-label\">{t(\"customer.enter-lastname\")}</label>\r\n                          <input className=\"form-control\" value={lastname} onChange={(ev) => setLastname(ev.target.value)} required />\r\n                        </div>\r\n\r\n                        {/* PHONE */}\r\n                        <div className=\"mb-3\">\r\n                          <PhoneFormComponent\r\n                            value={phoneNumber}\r\n                            setValue={setPhoneNumber}\r\n                            onMsgErrorChanged={setPhoneError}\r\n                            msgError={phoneError}\r\n                            label={t(\"common.phone\")}\r\n                          />\r\n                        </div>\r\n\r\n                        {/* EMAIL */}\r\n                        <div className=\"mb-3\">\r\n                          <InputComponent\r\n                            value={email}\r\n                            setValue={setEmail}\r\n                            regExp={StringHelpers.getEmailRegExp()}\r\n                            msgError={emailError}\r\n                            onMsgErrorChanged={setEmailError}\r\n                            type={\"email\"}\r\n                            labelText={t(\"customer.enter-email\")}\r\n                            required={true}\r\n                          />\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n                  </div>\r\n                </div>\r\n\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"create-order-page.reference-number\")}</label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={referenceId}\r\n                    onChange={(ev) => setReferenceId(ev.target.value.substring(0, 128))}\r\n                    maxLength={128}\r\n                  />\r\n                </div>\r\n\r\n                {/* Packaging Options */}\r\n                {!isReturn && hubs && packagingOptionsAvailable && packagingOptionsAvailable.length > 0 && (\r\n                  <div className=\"mb-4\">\r\n                    <div className=\"mb-2\">\r\n                      {t(\"create-order-page.chose-packaging-option\")}\r\n                      <InfoCirleButton\r\n                        id={\"packagingInfo\"}\r\n                        title={t(\"create-order-page.chose-packaging-option\")}\r\n                        textInfo={t(\"create-order-page.packaging-option-info\")}\r\n                      />\r\n                    </div>\r\n                    <div className=\"btn-group\" role=\"group\">\r\n                      <input\r\n                        type=\"radio\"\r\n                        className=\"btn-check\"\r\n                        name=\"nopackaging\"\r\n                        id=\"nopackaging\"\r\n                        key=\"nopackaging\"\r\n                        checked={packagingOptionId === \"nopackaging\"}\r\n                        onChange={onPackagingOptionSelected}\r\n                        disabled={nocarrier}\r\n                      />\r\n                      <label className=\"btn btn-outline-primary\" htmlFor=\"nopackaging\">\r\n                        {t(\"create-order-page.no-packaging\")}\r\n                      </label>\r\n\r\n                      {packagingOptionsAvailable?.map((packagingOption: PackagingOption) => {\r\n                        return (\r\n                          <React.Fragment key={packagingOption.id}>\r\n                            <input\r\n                              type=\"radio\"\r\n                              className=\"btn-check\"\r\n                              name={packagingOption.id}\r\n                              id={packagingOption.id}\r\n                              checked={packagingOptionId === packagingOption.id}\r\n                              onChange={onPackagingOptionSelected}\r\n                              disabled={nocarrier}\r\n                            />\r\n                            <label className=\"btn btn-outline-primary\" htmlFor={packagingOption.id}>\r\n                              {packagingOption.description.get(languageService.language)}\r\n                            </label>\r\n                          </React.Fragment>\r\n                        );\r\n                      })}\r\n                    </div>\r\n                  </div>\r\n                )}\r\n\r\n                {/* Carrier Options */}\r\n                {!isReturn && hubs && carriers.length > 0 && (\r\n                  <div className=\"mb-5\">\r\n                    <div className=\"mb-2\">\r\n                      {t(\"create-order-page.chose-carrier-option\")}\r\n                      <InfoCirleButton\r\n                        id={\"carrierInfo\"}\r\n                        title={t(\"create-order-page.chose-carrier-option\")}\r\n                        textInfo={t(\"create-order-page.carrier-info\")}\r\n                      />\r\n                    </div>\r\n                    <div className=\"btn-group\" role=\"group\">\r\n                      <input\r\n                        type=\"radio\"\r\n                        className=\"btn-check\"\r\n                        name=\"nocarrier\"\r\n                        id=\"nocarrier\"\r\n                        key=\"nocarrier\"\r\n                        checked={carrierId === \"nocarrier\"}\r\n                        onChange={onCarrierSelected}\r\n                      />\r\n                      <label className=\"btn btn-outline-primary\" htmlFor=\"nocarrier\">\r\n                        {t(\"create-order-page.default-carrier-option\")}\r\n                      </label>\r\n\r\n                      {carriers.map((carrier: Carrier) => {\r\n                        return (\r\n                          <React.Fragment key={carrier.id}>\r\n                            <input\r\n                              type=\"radio\"\r\n                              className=\"btn-check\"\r\n                              name={carrier.id}\r\n                              id={carrier.id}\r\n                              checked={carrierId === carrier.id}\r\n                              onChange={onCarrierSelected}\r\n                            />\r\n                            <label className=\"btn btn-outline-primary\" htmlFor={carrier.id}>\r\n                              {carrier.name}\r\n                            </label>\r\n                          </React.Fragment>\r\n                        );\r\n                      })}\r\n                    </div>\r\n                  </div>\r\n                )}\r\n\r\n                <button className=\"btn btn-lg btn-primary\" type=\"submit\" onClick={() => createOrder()} disabled={isCreating}>\r\n                  {isReturn ? t(\"create-order-page.return.create\") : t(\"create-order-page.create\")}\r\n                </button>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n  function onPackagingOptionSelected(event: any) {\r\n    event.persist();\r\n    const { id } = event.target;\r\n    setPackagingOptionId(id);\r\n\r\n    if (carrierId !== \"nocarrier\" && id !== \"nopackaging\") setPackagingOptionId(\"nopackaging\");\r\n  }\r\n\r\n  function onCarrierSelected(event: any) {\r\n    event.persist();\r\n    const { id } = event.target;\r\n    setCarrierId(id);\r\n\r\n    if (id !== \"nocarrier\") setPackagingOptionId(\"nopackaging\");\r\n  }\r\n\r\n  function onSelectCustomerSelected(event: any) {\r\n    event.persist();\r\n    const { id } = event.target;\r\n    setSelectExistingCustomer(id === \"selectexistingcustomer\");\r\n  }\r\n\r\n  function onCustomerSearchTextChanged(text: string, customers: Array<Member>) {\r\n    setCustomerSearchText(text);\r\n\r\n    if (text === \"\") {\r\n      //console.log(\"listFiltered : No text to filter\");\r\n      setFilteredCustomers(customers);\r\n    } else {\r\n      const listFiltered = customers.filter((c) => {\r\n        return searchMatch(c.firstname, text) || searchMatch(c.lastname, text) || searchMatch(c.email, text) || searchMatch(c.phone, text);\r\n      });\r\n\r\n      if (listFiltered.length > searchResultCount) {\r\n        listFiltered.slice(0, searchResultCount);\r\n      }\r\n\r\n      // console.log(\"listFiltered\", listFiltered);\r\n      setFilteredCustomers(listFiltered);\r\n    }\r\n  }\r\n\r\n  function searchMatch(text: string, search: string): boolean {\r\n    return text.startsWith(search);\r\n  }\r\n\r\n  function onClick(number: number) {\r\n    number < 4 && setStep(number);\r\n  }\r\n\r\n  function onHubSelected(hubs: Array<Hub> | null, packagingOptions: Array<PackagingOption> | null, hubId: string) {\r\n    setHubId(hubId);\r\n\r\n    const hub = hubs?.find((h) => h.id === hubId);\r\n\r\n    if (HubHelpers.isHubOnline(hub?.state)) {\r\n      if (hub) {\r\n        setCarriers(hub.carriers);\r\n\r\n        const ids = Array.from(HubHelpers.getPackagingOptiponIds(hub));\r\n\r\n        let options = new Array<PackagingOption>();\r\n        ids.forEach((id) => {\r\n          const option = packagingOptions?.find((option) => option.id === id);\r\n          if (option) {\r\n            options.push(option);\r\n          }\r\n        });\r\n        setPackagingOptionsAvailable(options);\r\n      }\r\n\r\n      onClick(step + 1);\r\n    } else {\r\n      ToastHelpers.error(t(\"create-order-page.error-hub-offline\"));\r\n    }\r\n  }\r\n\r\n  function createOrder() {\r\n    if (!hubId || !organization) return;\r\n\r\n    if (selectExistingCustomer && customerSelectedEmail?.length === 0) {\r\n      ToastHelpers.error(t(\"create-order-page.error-select-customer\"));\r\n      return;\r\n    }\r\n\r\n    if (packagingOptionId !== \"nopackaging\" && carrierId !== \"nocarrier\") return;\r\n\r\n    if (!selectExistingCustomer && (!email || !firstname || !lastname || phoneError || emailError)) {\r\n      setIsCreating(false);\r\n      return;\r\n    }\r\n\r\n    setIsCreating(true);\r\n\r\n    let packagingId = packagingOptionId;\r\n    if (packagingOptionId === \"nopackaging\") {\r\n      packagingId = \"\";\r\n    }\r\n\r\n    let newCarrierId: string | undefined = carrierId;\r\n    if (newCarrierId === \"nocarrier\") {\r\n      newCarrierId = undefined;\r\n    }\r\n\r\n    let tmpFirstname = firstname;\r\n    let tmpLastname = lastname;\r\n    let tmpEmail = email;\r\n    let tmpPhoneNumber = phoneNumber;\r\n    if (selectExistingCustomer && customerSelectedEmail?.length > 0) {\r\n      const customerSelected = customers.find((c) => c.email === customerSelectedEmail);\r\n      if (customerSelected) {\r\n        tmpFirstname = customerSelected?.firstname;\r\n        tmpLastname = customerSelected?.lastname;\r\n        tmpEmail = customerSelected?.email;\r\n        tmpPhoneNumber = customerSelected?.phone;\r\n      }\r\n    }\r\n\r\n    if (tmpFirstname && tmpLastname && tmpEmail) {\r\n      const flow = isReturn ? OrderFlow.Return : OrderFlow.Deliver;\r\n      orderService\r\n        .createOrder(\r\n          hubId,\r\n          organization.id,\r\n          tmpPhoneNumber,\r\n          tmpEmail,\r\n          tmpFirstname,\r\n          tmpLastname,\r\n          languageService.getLanguage(),\r\n          packagingId,\r\n          newCarrierId,\r\n          flow,\r\n          referenceId\r\n        )\r\n        .then((response) => {\r\n          return history.push(`/orders/${response}`);\r\n        })\r\n        .catch((error) => {\r\n          setIsCreating(false);\r\n          if (error?.response?.status === 409) {\r\n            setEmailError(t(\"create-order-page.error-email-exist\"));\r\n          } else {\r\n            ToastHelpers.error(t(\"create-order-page.error-conflict\"));\r\n          }\r\n        });\r\n    } else {\r\n      ToastHelpers.error(t(\"create-order-page.customer-information-error\"));\r\n    }\r\n  }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { AssetColors } from \"../../assets/assets-colors\";\r\nimport { HeaderIcon } from \"../../components/header\";\r\n\r\ninterface NoConnectionPageProps {\r\n  changeLanguage: any;\r\n}\r\n\r\nexport default function NoConnectionPage(props: NoConnectionPageProps) {\r\n  const { changeLanguage } = props;\r\n  const { t } = useTranslation();\r\n\r\n  function reload() {\r\n    window.location.reload();\r\n  }\r\n\r\n  return (\r\n    <>\r\n      <header>\r\n        <div className=\"container\">\r\n          <div className=\"row\">\r\n            <div className=\"col-12 col-md-10 col-lg-8 offset-md-1 offset-lg-2\">\r\n              <nav className=\"navbar reset\">\r\n                <ul className=\"navbar-nav align-items-center ms-auto\">\r\n                  <li className=\"nav-item\">\r\n                    <button className=\"nav-link\" onClick={changeLanguage}>\r\n                      <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"globe\"]} />\r\n                      {t(\"language.display-long\")}\r\n                    </button>\r\n                  </li>\r\n                </ul>\r\n              </nav>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </header>\r\n\r\n      <div className=\"container page sign-up-page pt-5\">\r\n        <div className=\"row\">\r\n          <div className=\"col-12 col-md-10 col-lg-8 offset-md-1 offset-lg-2\">\r\n            <div className=\"card card-full\">\r\n              <div className=\"row\">\r\n                <div className=\"col col-xl-8\">\r\n                  <div className=\"logo\">\r\n                    <HeaderIcon logo={AssetColors.Blue} />\r\n                  </div>\r\n\r\n                  <div className=\"card-left\">\r\n                    <div className=\"card-body\">\r\n                      <h5>{t(\"no-connection-page.oups\")}</h5>\r\n                      <h6>{t(\"no-connection-page.title\")}</h6>\r\n                      <h6>{t(\"no-connection-page.subtitle\")}</h6>\r\n\r\n                      <button className=\"btn btn-lg btn-primary\" onClick={async () => await reload()}>\r\n                        {t(\"no-connection-page.retry\")}\r\n                      </button>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n                <div className=\"card-right d-none d-xl-inline-block col-4 gx-0\">\r\n                  <img className=\"img-fluid\" src=\"/images/sign-up.jpg\" alt=\"\" />\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n}\r\n","import { useEffect, useState } from \"react\";\r\n\r\ntype Props = {\r\n  children: any;\r\n  waitBeforeShow?: number;\r\n};\r\n\r\nexport default function DelayCompoment({ children, waitBeforeShow = 500 }: Props) {\r\n  const [isShown, setIsShown] = useState(false);\r\n\r\n  useEffect(() => {\r\n    let timeoutId = setTimeout(() => {\r\n      setIsShown(true);\r\n    }, waitBeforeShow);\r\n\r\n    return () => clearInterval(timeoutId);\r\n  }, [waitBeforeShow]);\r\n\r\n  if (isShown) {\r\n    return children;\r\n  }\r\n  return null;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { PhoneFormComponent } from \"../../components/customer-information-components/phone-component\";\r\nimport { InputComponent } from \"../../components/input\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport customersService from \"../../services/member/customers-service\";\r\nimport Organization from \"../../services/organization/organization\";\r\n\r\ntype Props = {\r\n  organization: Organization | undefined;\r\n};\r\n\r\nexport function CreateCustomerPage(props: Props) {\r\n  const { organization } = props;\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n\r\n  const [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n  const [email, setEmail] = useState<string>(\"\");\r\n  const [firstname, setFistname] = useState<string>(\"\");\r\n  const [lastname, setLastname] = useState<string>(\"\");\r\n  const [unit, setUnit] = useState<string>(\"\");\r\n\r\n  const [emailError, setEmailError] = useState<string>();\r\n  const [phoneError, setPhoneError] = useState<string>();\r\n\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    setLoading(false);\r\n  });\r\n\r\n  return (\r\n    <div className=\"container page orders-page\">\r\n      <div className=\"col col-lg-6 offset-lg-3\">\r\n        <h1>{t(\"customer.create-customer-title\")}</h1>\r\n\r\n        <LoadingComponent loading={loading} />\r\n\r\n        {!loading && (\r\n          <div className=\"customer card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <div className=\"d-inline-block\">\r\n                <h2>{t(\"customer.customer-information\")}</h2>\r\n              </div>\r\n              <button className=\"btn-close float-end\" onClick={() => history.push(\"/customers\")}></button>\r\n            </div>\r\n\r\n            <div className=\"card-body\">\r\n              <form onSubmit={(ev) => ev.preventDefault()}>\r\n                {/* FIRST NAME */}\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"customer.enter-firstname\")}</label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={firstname}\r\n                    onChange={(ev) => setFistname(ev.target.value)}\r\n                    required\r\n                    autoFocus={true}\r\n                  />\r\n                </div>\r\n\r\n                {/* LAST NAME */}\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"customer.enter-lastname\")}</label>\r\n                  <input className=\"form-control\" value={lastname} onChange={(ev) => setLastname(ev.target.value)} required />\r\n                </div>\r\n\r\n                {/* PHONE */}\r\n                <div className=\"mb-3\">\r\n                  <PhoneFormComponent\r\n                    value={phoneNumber}\r\n                    setValue={setPhoneNumber}\r\n                    onMsgErrorChanged={setPhoneError}\r\n                    msgError={phoneError}\r\n                    label={t(\"common.phone\")}\r\n                  />\r\n                </div>\r\n\r\n                {/* EMAIL */}\r\n                <div className=\"mb-3\">\r\n                  <InputComponent\r\n                    value={email}\r\n                    setValue={setEmail}\r\n                    regExp={StringHelpers.getEmailRegExp()}\r\n                    msgError={emailError}\r\n                    onMsgErrorChanged={setEmailError}\r\n                    type={\"email\"}\r\n                    labelText={t(\"customer.enter-email\")}\r\n                    required={true}\r\n                  />\r\n                </div>\r\n\r\n                {/* UNIT */}\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"customer.enter-unit\")}</label>\r\n                  <input className=\"form-control\" value={unit} onChange={(ev) => setUnit(ev.target.value)} />\r\n                </div>\r\n\r\n                <button className=\"btn btn-lg btn-primary\" type=\"submit\" onClick={() => createCustomer()}>\r\n                  {t(\"customer.create\")}\r\n                </button>\r\n              </form>\r\n            </div>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  async function createCustomer() {\r\n    if (organization?.id && firstname && lastname && email && !phoneError && !emailError) {\r\n      const lowerCaseEmail = email.toLowerCase();\r\n      await customersService\r\n        .createCustomer(organization.id, firstname, lastname, phoneNumber, lowerCaseEmail, unit)\r\n        .then(() => {\r\n          return history.push(`/customers`);\r\n        })\r\n        .catch((error) => {\r\n          if (error?.response?.status === 409) {\r\n            setEmailError(t(\"create-order-page.error-email-exist\"));\r\n          } else {\r\n            ToastHelpers.error(t(\"create-order-page.error-conflict\"));\r\n          }\r\n        });\r\n    }\r\n  }\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport customersService from \"../../services/member/customers-service\";\r\nimport membersService from \"../../services/member/member-service\";\r\nimport Member from \"../../services/member/member\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport { PhoneFormComponent } from \"../../components/customer-information-components/phone-component\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { YesNoComponent } from \"../../components/yesno-component\";\r\n\r\ntype Props = {\r\n  organization: Organization | undefined;\r\n  user: Member | undefined;\r\n};\r\n\r\ninterface IParamTypes {\r\n  customerId: string;\r\n}\r\n\r\nexport function EditCustomerPage(props: Props) {\r\n  const { organization } = props;\r\n  const { user } = props;\r\n  const { customerId } = useParams<IParamTypes>();\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n\r\n  const [customer, setCustomer] = useState<Member>();\r\n  const [phone, setPhone] = useState<string>(\"\");\r\n  const [email, setEmail] = useState<string>(\"\");\r\n  const [firstname, setFistname] = useState<string>(\"\");\r\n  const [lastname, setLastname] = useState<string>(\"\");\r\n  const [unit, setUnit] = useState<string>(\"\");\r\n  const [isDeletedCustomer, setIsDeletedCustomer] = useState<boolean>(false);\r\n\r\n  const [phoneError, setPhoneError] = useState<string>();\r\n\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    if (organization && customerId) {\r\n      customersService\r\n        .getCustomer(organization?.id, customerId)\r\n        .then((response: Member | undefined) => {\r\n          setCustomer(response);\r\n\r\n          if (response) {\r\n            setEmail(response?.email);\r\n            setPhone(response?.phone);\r\n            setFistname(response?.firstname);\r\n            setLastname(response?.lastname);\r\n            setUnit(response?.unit);\r\n          }\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"customers-page.error-refresh\"));\r\n        });\r\n    }\r\n    setLoading(false);\r\n  }, [customerId, organization]);\r\n\r\n  return (\r\n    <div className=\"container page orders-page\">\r\n      {isDeletedCustomer ? (\r\n        <YesNoComponent\r\n          headerMsg={t(\"edit-customer-page.msg-delete-customer\")}\r\n          onYesClick={() => deleteCustomer()}\r\n          onNoClick={setIsDeletedCustomer}\r\n        />\r\n      ) : (\r\n        <div className=\"col col-lg-6 offset-lg-3\">\r\n          <h1>{t(\"edit-customer-page.title\")}</h1>\r\n\r\n          <LoadingComponent loading={loading} />\r\n\r\n          {!loading && (\r\n            <div className=\"customer card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <div className=\"d-inline-block\">\r\n                  <h2>{t(\"customer.customer-information\")}</h2>\r\n                </div>\r\n                <button className=\"btn-close float-end\" onClick={() => history.push(\"/customers\")}></button>\r\n              </div>\r\n\r\n              <div className=\"card-body\">\r\n                <form onSubmit={(ev) => ev.preventDefault()}>\r\n                  {/* FIRST NAME */}\r\n                  <div className=\"mb-3\">\r\n                    <label className=\"form-label\">{t(\"customer.enter-firstname\")}</label>\r\n                    <input\r\n                      className=\"form-control\"\r\n                      value={firstname}\r\n                      onChange={(ev) => setFistname(ev.target.value)}\r\n                      required\r\n                      autoFocus={true}\r\n                    />\r\n                  </div>\r\n\r\n                  {/* LAST NAME */}\r\n                  <div className=\"mb-3\">\r\n                    <label className=\"form-label\">{t(\"customer.enter-lastname\")}</label>\r\n                    <input className=\"form-control\" value={lastname} onChange={(ev) => setLastname(ev.target.value)} required />\r\n                  </div>\r\n\r\n                  {/* PHONE */}\r\n                  <div className=\"mb-3\">\r\n                    <PhoneFormComponent\r\n                      value={phone}\r\n                      setValue={setPhone}\r\n                      onMsgErrorChanged={setPhoneError}\r\n                      msgError={phoneError}\r\n                      label={t(\"customer.enter-phone\")}\r\n                    />\r\n                  </div>\r\n\r\n                  {/* UNIT */}\r\n                  <div className=\"mb-3\">\r\n                    <label className=\"form-label\">{t(\"customer.enter-unit\")}</label>\r\n                    <input className=\"form-control\" value={unit} onChange={(ev) => setUnit(ev.target.value)} />\r\n                  </div>\r\n\r\n                  {canEdit() && (\r\n                    <>\r\n                      <button className=\"btn btn-lg btn-primary\" type=\"submit\" onClick={() => editCustomer()}>\r\n                        {t(\"edit-customer-page.btn-save\")}\r\n                      </button>\r\n                      <button className={`btn btn-lg btn-outline-primary float-end`} onClick={() => setIsDeletedCustomer(true)}>\r\n                        <FontAwesomeIcon icon={[\"fas\", \"trash-alt\"]} /> {t(\"common.delete\")}\r\n                      </button>\r\n                    </>\r\n                  )}\r\n\r\n                  {!canEdit() && <label>{t(\"edit-customer-page.not-authorized\")}</label>}\r\n                  <button className=\"btn btn-lg btn-primary-outline\" type=\"submit\" onClick={() => history.push(\"/customers\")}>\r\n                    {t(\"edit-customer-page.btn-cancel\")}\r\n                  </button>\r\n                </form>\r\n              </div>\r\n            </div>\r\n          )}\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n\r\n  function canEdit(): boolean {\r\n    if (user && membersService.isLocketgoAdmin(user)) return true;\r\n\r\n    if (customer?.type === \"User\") return false;\r\n\r\n    return true;\r\n  }\r\n\r\n  async function editCustomer() {\r\n    if (organization?.id && firstname && lastname && email && !phoneError) {\r\n      let newCustomer = { ...customer, firstname, lastname, phone, email, unit };\r\n\r\n      await customersService\r\n        .updateCustomer(organization?.id, newCustomer)\r\n        .then(() => {\r\n          return history.push(`/customers`);\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"create-order-page.error-conflict\"));\r\n        });\r\n    }\r\n  }\r\n\r\n  async function deleteCustomer() {\r\n    if (organization?.id && customerId) {\r\n      setIsDeletedCustomer(false);\r\n      await customersService\r\n        .deleteCustomer(organization?.id, customerId)\r\n        .then(() => {\r\n          return history.push(`/customers`);\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"edit-customer-page.error-delete-customer\"));\r\n        });\r\n    }\r\n  }\r\n}\r\n","import ReservationBlock from \"./reservationBlock\";\r\n\r\nexport class MicrositeHelpers {\r\n  static reservationBlockIsAvailable(rb: ReservationBlock) {\r\n    let dateNow = new Date(Date.now());\r\n    let availableStart = new Date(rb.availableStart);\r\n    return availableStart <= dateNow;\r\n  }\r\n\r\n  static reservationBlockIsPassed(rb: ReservationBlock) {\r\n    if (!rb.availableEnd) {\r\n      return false;\r\n    }\r\n\r\n    let dateNow = new Date(Date.now());\r\n    let availableEnd = new Date(rb.availableEnd);\r\n    return availableEnd <= dateNow;\r\n  }\r\n\r\n  static compareReservationBlocks(rb1: ReservationBlock, rb2: ReservationBlock): number {\r\n    if (this.reservationBlockIsPassed(rb1) && !this.reservationBlockIsPassed(rb2)) {\r\n      return -1;\r\n    }\r\n    if (this.reservationBlockIsPassed(rb2) && !this.reservationBlockIsPassed(rb1)) {\r\n      return 1;\r\n    }\r\n\r\n    if (this.reservationBlockIsAvailable(rb1) && !this.reservationBlockIsAvailable(rb2)) {\r\n      return -1;\r\n    }\r\n    if (this.reservationBlockIsAvailable(rb2) && !this.reservationBlockIsAvailable(rb1)) {\r\n      return 1;\r\n    }\r\n\r\n    if (rb1.availableEnd && rb2.availableEnd && rb1.availableEnd > rb2.availableEnd && rb1.duration > rb2.duration) {\r\n      return 1;\r\n    } else if (rb1.availableEnd && rb2.availableEnd && rb1.availableEnd === rb2.availableEnd && rb1.duration < rb2.duration) {\r\n      return -1;\r\n    }\r\n\r\n    if (\r\n      (rb1.availableStart && rb2.availableStart && rb1.availableStart < rb2.availableStart) ||\r\n      (rb1.startOn && rb2.startOn && rb1.startOn < rb2.startOn) ||\r\n      (!rb1.startOn && !rb1.availableStart && (rb2.startOn || rb2.availableStart))\r\n    ) {\r\n      return -1;\r\n    }\r\n\r\n    return 0;\r\n  }\r\n}\r\n","import languageService from \"../core/language-service\";\r\nimport { HubHelpers } from \"../hub/hub-helper\";\r\nimport hubService from \"../hub/hub-service\";\r\nimport { Order } from \"../order/order\";\r\nimport ServicesApiBaseService from \"../services-api-base-service\";\r\nimport Microsite from \"./microsite\";\r\nimport ReservationBlock from \"./reservationBlock\";\r\n\r\ninterface ICreateReservationBlock {\r\n  MicrositeId: string;\r\n  Name: { [key: string]: string };\r\n  Description?: { [key: string]: string | undefined };\r\n  LogoUrl?: string;\r\n  Price: number;\r\n  StartOn?: string;\r\n  Duration: number;\r\n  AvailableStart?: string;\r\n  AvailableEnd?: string;\r\n  CodeSpecified: boolean;\r\n  Meta?: { [key: string]: string | undefined };\r\n  Active: boolean;\r\n}\r\n\r\ninterface IUpdateReservationBlock {\r\n  Id: string;\r\n  Name: { [key: string]: string };\r\n  Description?: { [key: string]: string | undefined };\r\n  LogoUrl?: string;\r\n  Price: number;\r\n  StartOn?: string;\r\n  Duration: number;\r\n  AvailableStart?: string;\r\n  AvailableEnd?: string;\r\n  CodeSpecified: boolean;\r\n  Meta?: { [key: string]: string | undefined };\r\n}\r\n\r\nclass MicrositeService extends ServicesApiBaseService {\r\n  async getMicrosite(micrositeId: string, filter: string = \"Active\"): Promise<Microsite | undefined> {\r\n    const microsite = await this.getObject<Microsite>(`${this.apiUrl}/microsites/${micrositeId}?filter=${filter}`);\r\n    if (microsite) {\r\n      if (microsite.name) {\r\n        microsite.name = new Map(Object.entries(microsite?.name));\r\n      }\r\n      if (microsite.reservationBlocks) {\r\n        microsite.reservationBlocks.map((reservationBlock) => {\r\n          if (reservationBlock.name) {\r\n            reservationBlock.name = new Map(Object.entries(reservationBlock.name));\r\n          }\r\n\r\n          if (reservationBlock.description) {\r\n            reservationBlock.description = new Map(Object.entries(reservationBlock.description));\r\n          }\r\n          return reservationBlock;\r\n        });\r\n      }\r\n    }\r\n\r\n    return microsite || undefined;\r\n  }\r\n\r\n  async getTimeUntilExpired(orderId: String | undefined): Promise<any> {\r\n    const result = await this.getObject<any>(`${this.apiUrl}/microsites/timeUntilExpired/${orderId}`);\r\n    return result || 0;\r\n  }\r\n\r\n  async getReservationBlockById(micrositeId: string, reservationBlockId: string): Promise<ReservationBlock | undefined> {\r\n    const reservationBlock = await this.getObject<any>(`${this.apiUrl}/microsites/${micrositeId}/reservationBlocks/${reservationBlockId}`);\r\n    if (reservationBlock) {\r\n      if (reservationBlock.name) {\r\n        reservationBlock.name = new Map(Object.entries(reservationBlock.name));\r\n      }\r\n\r\n      if (reservationBlock.description) {\r\n        reservationBlock.description = new Map(Object.entries(reservationBlock.description));\r\n      }\r\n    }\r\n    return reservationBlock;\r\n  }\r\n\r\n  async createReservationBlock(organizationId: string, data: ICreateReservationBlock): Promise<number | undefined> {\r\n    return await this.postObject<any, number>(\r\n      `${this.apiUrl}/microsites/${data.MicrositeId}/organization/${organizationId}/reservationBlocks`,\r\n      data\r\n    );\r\n  }\r\n\r\n  async updateReservationBlock(organizationId: string, micrositeId: string, data: IUpdateReservationBlock): Promise<void> {\r\n    return await this.putObject<any>(\r\n      `${this.apiUrl}/microsites/${micrositeId}/organization/${organizationId}/reservationBlocks/${data.Id}`,\r\n      data\r\n    );\r\n  }\r\n\r\n  async deleteReservationBlock(organizationId: string, micrositeId: string, reservationBlockId: string): Promise<void> {\r\n    return await this.deleteObject<any>(\r\n      `${this.apiUrl}/microsites/${micrositeId}/organization/${organizationId}/reservationBlocks/${reservationBlockId}`\r\n    );\r\n  }\r\n\r\n  async createOrder(\r\n    micrositeId: string,\r\n    reservationBlockId: string,\r\n    createPayment: boolean,\r\n    phoneNumber?: string | undefined,\r\n    email?: string | undefined,\r\n    firstname?: string | undefined,\r\n    lastname?: string | undefined,\r\n    referenceId?: string | undefined,\r\n    code?: string | undefined,\r\n    language?: string | undefined,\r\n    end: string | undefined = undefined,\r\n    allowOffline: boolean = true\r\n  ): Promise<string> {\r\n    const result = await this.postObject<any, string>(\r\n      `${this.apiUrl}/microsites/${micrositeId}/reservationBlocks/${reservationBlockId}/orders`,\r\n      {\r\n        phone: phoneNumber,\r\n        email: email,\r\n        firstname: firstname,\r\n        lastname: lastname,\r\n        referenceId: referenceId,\r\n        createPayment: createPayment,\r\n        code: code,\r\n        language: language || languageService.getLanguage(),\r\n        end: end,\r\n        allowOffline: allowOffline,\r\n      }\r\n    );\r\n    return result || \"\";\r\n  }\r\n\r\n  async resendNotification(\r\n    micrositeId: string,\r\n    reservationBlockId: string,\r\n    orderId: string,\r\n    phoneNumber?: string | undefined,\r\n    email?: string | undefined,\r\n    referenceId?: string | undefined\r\n  ): Promise<string> {\r\n    const result = await this.postObject<any, string>(\r\n      `${this.apiUrl}/microsites/${micrositeId}/reservationBlocks/${reservationBlockId}/resendNotification`,\r\n      {\r\n        phone: phoneNumber,\r\n        email: email,\r\n        referenceId: referenceId,\r\n        orderId: orderId,\r\n      }\r\n    );\r\n    return result || \"\";\r\n  }\r\n\r\n  async getMicrositeSizesIds(microsite: Microsite): Promise<Set<String>> {\r\n    let sizeIds = new Set<String>();\r\n    const hubs = await hubService.getHubs();\r\n\r\n    microsite.hubIds.forEach((hubId) => {\r\n      let hub = hubs.find((h) => h.id === hubId);\r\n      if (hub) {\r\n        let compartmentSizes = HubHelpers.getCompartmentSizeIds(hub);\r\n        compartmentSizes.forEach((sizeId) => sizeIds.add(sizeId));\r\n      }\r\n    });\r\n\r\n    return sizeIds;\r\n  }\r\n\r\n  async getEventOrders(micrositeId: string, eventId: string): Promise<Array<Order>> {\r\n    let result = await this.getObject<Array<Order>>(`${this.apiUrl}/microsites/${micrositeId}/reservationBlocks/${eventId}/orders`);\r\n\r\n    return result || [];\r\n  }\r\n}\r\n\r\nconst micrositeService = new MicrositeService();\r\nexport default micrositeService;\r\n","const PricePerHour = \"PricePerHour\";\r\nconst PricePerMinute = \"PricePerMinute\";\r\nconst MinimalPrice = \"MinimalPrice\";\r\nconst CodeType = \"CodeType\";\r\nconst ResetTime = \"ResetTime\";\r\nexport { PricePerHour, PricePerMinute, MinimalPrice, CodeType, ResetTime };\r\n","import moment from \"moment\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport { MinimalPrice, PricePerHour, PricePerMinute, ResetTime } from \"../../assets/meta-table-keys\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport ReservationBlock from \"../../services/micro-site/reservationBlock\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ntype EventCardProps = {\r\n  reservationBlock: ReservationBlock;\r\n  microsite: Microsite;\r\n  language: string;\r\n  reserve: (reservationBlock: ReservationBlock) => void;\r\n  canShowCreateReservation: (reservationBlock: ReservationBlock) => boolean;\r\n};\r\n\r\nexport default function EventCard(props: EventCardProps) {\r\n  const { reservationBlock, microsite, language, reserve, canShowCreateReservation } = props;\r\n  const { t } = useTranslation();\r\n\r\n  const until = moment(reservationBlock.startOn).add(reservationBlock.duration, \"seconds\").toDate();\r\n  const priceFormatted = StringHelpers.formatPrice(reservationBlock.price + reservationBlock.price * reservationBlock.saleTaxRate);\r\n\r\n  const showCreateReservation = canShowCreateReservation(reservationBlock);\r\n  const pricePerHour = Number.parseFloat(reservationBlock.meta[PricePerHour]);\r\n  const pricePerMinute = Number.parseFloat(reservationBlock.meta[PricePerMinute]);\r\n  const resetTime = reservationBlock.meta[ResetTime];\r\n  const resetTimeDate = DateHelpers.getNextDayWithTime(resetTime, DateHelpers.UserTimeZone);\r\n\r\n  const isSwych = microsite.id === \"swych\";\r\n\r\n  if (!pricePerHour && !pricePerMinute)\r\n    return (\r\n      <div className=\"card\" key={reservationBlock.id}>\r\n        <div className=\"card-header\">\r\n          {reservationBlock?.logoUrl && <img src={reservationBlock?.logoUrl} alt=\"\" className=\"img-logo\" />}\r\n          <h2 className=\"mt-4\"> {reservationBlock.name.get(language)}</h2>\r\n        </div>\r\n\r\n        <div className=\"card-body\">\r\n          {microsite.logoUrl && <img src={microsite.logoUrl} alt=\"\" className=\"img-logo float-end\" />}\r\n          <p>\r\n            {reservationBlock.description && reservationBlock.description.length > 0 && (\r\n              <>\r\n                {reservationBlock.description.get(language)}\r\n                <br />\r\n              </>\r\n            )}\r\n\r\n            {reservationBlock.startOn ? (\r\n              <Trans\r\n                i18nKey=\"micro-site-page.locker-available\"\r\n                values={{\r\n                  start: DateHelpers.formatDateTime(new Date(reservationBlock.startOn), DateHelpers.UserTimeZone),\r\n                  end: DateHelpers.formatDateTime(until, DateHelpers.UserTimeZone),\r\n                }}\r\n              />\r\n            ) : (\r\n              <>\r\n                {!resetTime ? (\r\n                  <>\r\n                    <Trans\r\n                      i18nKey=\"micro-site-page.locker-available-now\"\r\n                      values={{ duration: DateHelpers.formatDuration(reservationBlock.duration) }}\r\n                    />\r\n                  </>\r\n                ) : (\r\n                  <>\r\n                    <Trans\r\n                      i18nKey=\"micro-site-page.reservation-valid-until\"\r\n                      values={{\r\n                        month: DateHelpers.getMonth(resetTimeDate),\r\n                        day: DateHelpers.getDay(resetTimeDate),\r\n                        time: DateHelpers.formatTime(resetTime, DateHelpers.UserTimeZone),\r\n                      }}\r\n                    />\r\n                  </>\r\n                )}\r\n              </>\r\n            )}\r\n          </p>\r\n\r\n          <p>{t(\"micro-site-page.cost\", { cost: priceFormatted, currency: microsite.currency })}</p>\r\n\r\n          {showCreateReservation ? (\r\n            <div className=\"mt-4\">\r\n              <button className=\"btn btn-lg btn-primary\" onClick={() => reserve(reservationBlock)}>\r\n                {isSwych ? t(\"micro-site-page.create-reservation-swych\") : t(\"micro-site-page.create-reservation\")}\r\n              </button>\r\n            </div>\r\n          ) : (\r\n            <p>\r\n              {t(\"micro-site-page.reservation-not-available\", {\r\n                date: DateHelpers.formatDateTime(new Date(reservationBlock.availableStart.toString()), \"America/Toronto\"),\r\n              })}\r\n            </p>\r\n          )}\r\n        </div>\r\n      </div>\r\n    );\r\n\r\n  const minimalPrice = Number.parseFloat(reservationBlock.meta[MinimalPrice]);\r\n  const minimalPriceFormatted = StringHelpers.formatPrice(minimalPrice + minimalPrice * reservationBlock.saleTaxRate);\r\n\r\n  let cost = \"\";\r\n  if (pricePerHour) cost = StringHelpers.formatPrice(pricePerHour + pricePerHour * reservationBlock.saleTaxRate);\r\n  else if (pricePerMinute) cost = StringHelpers.formatPrice(pricePerMinute + pricePerMinute * reservationBlock.saleTaxRate);\r\n\r\n  return (\r\n    <div className=\"card\" key={reservationBlock.id}>\r\n      <div className=\"card-header\">\r\n        {reservationBlock?.logoUrl && <img src={reservationBlock?.logoUrl} alt=\"\" className=\"img-logo\" />}\r\n        <h2 className=\"mt-4\"> {reservationBlock.name.get(language)}</h2>\r\n      </div>\r\n\r\n      <div className=\"card-body\">\r\n        {microsite.logoUrl && <img src={microsite.logoUrl} alt=\"\" className=\"img-logo float-end\" />}\r\n        <p>\r\n          {reservationBlock.description && reservationBlock.description.length > 0 && (\r\n            <>\r\n              {reservationBlock.description.get(language)}\r\n              <br />\r\n            </>\r\n          )}\r\n          <Trans\r\n            i18nKey=\"micro-site-page.reservation-valid-until\"\r\n            values={{\r\n              month: DateHelpers.getMonth(resetTimeDate),\r\n              day: DateHelpers.getDay(resetTimeDate),\r\n              time: DateHelpers.formatTime(resetTime, DateHelpers.UserTimeZone),\r\n            }}\r\n          />\r\n        </p>\r\n\r\n        <p>\r\n          <strong>{t(\"micro-site-page.cost-title\")}</strong>\r\n          <br />\r\n\r\n          {!!pricePerHour && t(\"micro-site-page.cost-per-hour\", { cost: cost, currency: microsite.currency })}\r\n          {!!pricePerMinute && t(\"micro-site-page.cost-per-minute\", { cost: cost, currency: microsite.currency })}\r\n          {minimalPrice > 0 && (\r\n            <>\r\n              <br />\r\n              {t(\"micro-site-page.min-cost\", { cost: minimalPriceFormatted, currency: microsite.currency })}\r\n            </>\r\n          )}\r\n          <br />\r\n          {t(\"micro-site-page.max-cost\", { cost: priceFormatted, currency: microsite.currency })}\r\n        </p>\r\n\r\n        {showCreateReservation ? (\r\n          <div className=\"mt-4\">\r\n            <button className=\"btn btn-lg btn-primary\" onClick={() => reserve(reservationBlock)}>\r\n              {isSwych ? t(\"micro-site-page.create-reservation-swych\") : t(\"micro-site-page.create-reservation\")}\r\n            </button>\r\n          </div>\r\n        ) : (\r\n          <p>\r\n            {t(\"micro-site-page.reservation-not-available\", {\r\n              date: DateHelpers.formatDateTime(new Date(reservationBlock.availableStart.toString()), \"America/Toronto\"),\r\n            })}\r\n          </p>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import moment from \"moment\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport { MicrositeHelpers } from \"../../services/micro-site/microsite-helpers\";\r\nimport micrositeService from \"../../services/micro-site/microsite-service\";\r\nimport ReservationBlock from \"../../services/micro-site/reservationBlock\";\r\nimport \"./micro-site-page.scss\";\r\nimport { MinimalPrice, PricePerHour } from \"../../assets/meta-table-keys\";\r\nimport EventCard from \"./event-card\";\r\n\r\ntype Props = {\r\n  member: Member | null;\r\n  setNoConnection: any;\r\n};\r\n\r\ninterface IParamTypes {\r\n  micrositeId: string;\r\n}\r\n\r\nexport default function MicroSitePage(props: Props) {\r\n  const { member, setNoConnection } = props;\r\n\r\n  const { t } = useTranslation();\r\n  const language: string = languageService.getLanguage();\r\n  const history = useHistory();\r\n  const { micrositeId } = useParams<IParamTypes>();\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [microsite, setMicrosite] = useState<Microsite>();\r\n  const [reservationBlocks, setReservationBlocks] = useState<ReservationBlock[]>([]);\r\n\r\n  useEffect(() => {\r\n    micrositeService\r\n      .getMicrosite(micrositeId)\r\n      .then((microsite: Microsite | undefined) => {\r\n        if (microsite) {\r\n          setMicrosite(microsite);\r\n          if (microsite.reservationBlocks[0]) {\r\n            setReservationBlocks(\r\n              microsite.reservationBlocks.sort((rb1, rb2) => new Date(rb1.startOn).getTime() - new Date(rb2.startOn).getTime())\r\n            );\r\n          }\r\n        }\r\n      })\r\n      .catch(() => setNoConnection(true))\r\n      .finally(() => {\r\n        setLoading(false);\r\n      });\r\n  }, [member, setNoConnection, micrositeId]);\r\n\r\n  if (loading) {\r\n    return <LoadingComponent loading={loading} />;\r\n  }\r\n\r\n  if (!microsite) {\r\n    return (\r\n      <div className=\"container page micro-site-page\">\r\n        {!microsite && (\r\n          <div className=\"text-center mt-4\">\r\n            <p>{t(\"micro-site-page.no-reservationBlock\")}</p>\r\n          </div>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"container page micro-site-page \">\r\n      <div className=\"row\">\r\n        <div className=\"col-12 offset-lg-2 col-lg-8 page-background-boxing shadow\">\r\n          {/* No reservation */}\r\n          {reservationBlocks.length === 0 && (\r\n            <div className=\"row\">\r\n              <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n                <div className=\"card-body\">\r\n                  <h1>{microsite.name.get(language)}</h1>\r\n                  <h5>{t(\"micro-site-page.no-reservationBlock\")}</h5>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          )}\r\n\r\n          {/* Display the reservations */}\r\n          {reservationBlocks.map((reservationBlock) => {\r\n            return (\r\n              <EventCard\r\n                reserve={reserve}\r\n                reservationBlock={reservationBlock}\r\n                language={language}\r\n                microsite={microsite}\r\n                canShowCreateReservation={canShowCreateReservation}\r\n              />\r\n            );\r\n          })}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function canShowCreateReservation(reservationBlock: ReservationBlock): boolean {\r\n    return MicrositeHelpers.reservationBlockIsAvailable(reservationBlock);\r\n  }\r\n\r\n  async function reserve(reservationBlock: ReservationBlock) {\r\n    const reserveUrl = `/sites/${micrositeId}/signin-reserve-locker/${reservationBlock?.id}`;\r\n    history.push(reserveUrl);\r\n  }\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { Trans } from \"react-i18next\";\r\nimport \"./timerComponent.scss\";\r\nimport DateHelpers from \"../services/core/date-helpers\";\r\n\r\ntype Props = {\r\n  timeInSeconds: number;\r\n  message: string;\r\n  onTimerEnds: VoidFunction;\r\n  className?: string;\r\n};\r\n\r\nexport default function TimerComponent(props: Props) {\r\n  const { timeInSeconds, message, onTimerEnds, className } = props;\r\n  const [counter, setCounter] = useState(timeInSeconds);\r\n\r\n  useEffect(() => {\r\n    if (counter <= 0) {\r\n      onTimerEnds();\r\n    }\r\n\r\n    const timer = (counter > 0 && setInterval(() => setCounter(counter - 1), 1000)) || undefined;\r\n\r\n    return timer && (() => clearInterval(timer));\r\n  }, [counter]);\r\n\r\n  const dateTime = DateHelpers.formatNumberToTimeLeftString(counter);\r\n\r\n  return (\r\n    <div className={className ?? \"countdown-red\"}>\r\n      {message && <Trans i18nKey={message} values={{ dateTimeFormat: dateTime }} />}\r\n      {!message && <strong>{dateTime}</strong>}\r\n    </div>\r\n  );\r\n}\r\n","export enum ChargeState {\r\n  EnteringData = \"EnteringData\",\r\n  ChargeInProgress = \"ChargeInProgress\",\r\n  ChargeTimeout = \"ChargeTimeout\",\r\n  ChargeError = \"ChargeError\",\r\n  Completed = \"Completed\",\r\n}\r\n","export class CardPaymentRequest {\r\n  orderToken: string = \"\";\r\n  token: string = \"\";\r\n  idempotencyKey: string = \"\";\r\n  PayNow: boolean = true;\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"./payment-form-square.scss\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport LoadingComponent from \"../loading-component\";\r\nimport { CardPaymentRequest } from \"../../services/payment/payment-request\";\r\nimport paymentService from \"../../services/payment/payment-service\";\r\nimport { ChargeState } from \"./charge-state\";\r\nimport { PaymentState } from \"../../services/payment/payment-state\";\r\nimport { CardPaymentResponse } from \"../../services/payment/payment-response\";\r\n\r\ndeclare global {\r\n  interface Window {\r\n    Square: any; // This is to make sure the typescript doesn't cry.\r\n  }\r\n}\r\n\r\ninterface PaymentFormProps {\r\n  cost: string;\r\n  currency: string;\r\n  orderToken: string;\r\n  organizationId: string;\r\n  locationId: string;\r\n  paynow: boolean;\r\n  minPrice?: string;\r\n}\r\n\r\nexport default function PaymentFormSquare(props: PaymentFormProps) {\r\n  const { cost, currency, locationId, orderToken, organizationId, paynow, minPrice } = props;\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const [card, setCard] = useState<any>(null);\r\n  const [state, setState] = useState<ChargeState>(ChargeState.EnteringData);\r\n\r\n  if (!window.Square) throw new Error(\"PaymentLib failed to load properly.\");\r\n\r\n  useEffect(() => {\r\n    if (state !== ChargeState.ChargeTimeout) {\r\n      try {\r\n        initializeCard();\r\n      } catch (e) {\r\n        console.error(\"Initializing Card failed\", e);\r\n      }\r\n    }\r\n  }, [locationId]);\r\n\r\n  return (\r\n    <div className=\"payment-form-container\">\r\n      {state === ChargeState.ChargeTimeout && (\r\n        <div>\r\n          <div className=\"text-danger\">\r\n            <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"exclamation-triangle\"]} />\r\n            {t(\"micro-site-reserve-locker.payment-timeout-msg\")}\r\n          </div>\r\n          <div className=\"mt-2\">\r\n            <button className=\"btn btn-primary\" onClick={() => window.location.reload()}>\r\n              {t(\"micro-site-reserve-locker.try-again\")}\r\n            </button>\r\n          </div>\r\n        </div>\r\n      )}\r\n\r\n      {state !== ChargeState.ChargeTimeout && (\r\n        <>\r\n          <label className=\"form-label\">{t(\"micro-site-reserve-locker.credit-card\")}</label>\r\n\r\n          <form id=\"payment-form\">\r\n            <div id=\"card-container\"></div>\r\n            <div id=\"payment-status-container\"></div>\r\n            <LoadingComponent loading={state === ChargeState.ChargeInProgress} />\r\n            <button\r\n              id=\"card-button\"\r\n              className=\"btn btn-primary pushable rounded-3 shadow-lg\"\r\n              type=\"button\"\r\n              disabled={state === ChargeState.ChargeInProgress}\r\n              onClick={(ev: React.MouseEvent) => pay(ev, card, setState)}\r\n            >\r\n              <span className=\"front rounded-3\">\r\n                {paynow && t(\"payment.pay\", { cost: cost })}\r\n                {!paynow && (\r\n                  <>\r\n                    {!minPrice && t(\"payment.hold\", { cost: cost })}\r\n                    {minPrice && t(\"payment.pay\", { cost: minPrice })}\r\n                  </>\r\n                )}\r\n              </span>\r\n            </button>\r\n          </form>\r\n\r\n          <div className=\"mt-3\">\r\n            <FontAwesomeIcon icon={[\"fas\", \"info-circle\"]} /> {t(\"micro-site-reserve-locker.msg-taxes\")}\r\n          </div>\r\n        </>\r\n      )}\r\n    </div>\r\n  );\r\n\r\n  async function initializeCard() {\r\n    let payments;\r\n    try {\r\n      payments = window.Square.payments(process.env.REACT_APP_SQUARE_APP_ID, locationId);\r\n    } catch {\r\n      const statusContainer = document.getElementById(\"payment-status-container\");\r\n      if (statusContainer) {\r\n        statusContainer.className = \"missing-credentials\";\r\n        statusContainer.style.visibility = \"visible\";\r\n      }\r\n      return;\r\n    }\r\n\r\n    const _card = await payments.card();\r\n    setCard(_card);\r\n\r\n    const container = document.getElementById(\"card-container\");\r\n    if (container) container.innerHTML = \"\";\r\n    await _card.attach(\"#card-container\");\r\n\r\n    console.log(\"initializeCard done.\");\r\n  }\r\n\r\n  function clearPaymentResults() {\r\n    const statusContainer = document.getElementById(\"payment-status-container\");\r\n    if (statusContainer) {\r\n      statusContainer.style.visibility = \"visible\";\r\n      statusContainer.classList.remove(\"is-success\");\r\n      statusContainer.classList.remove(\"is-failure\");\r\n      statusContainer.innerHTML = \"\";\r\n    }\r\n  }\r\n\r\n  async function pay(event: React.MouseEvent, card: any, setState: Function) {\r\n    event.preventDefault();\r\n    clearPaymentResults();\r\n\r\n    setState(ChargeState.ChargeInProgress);\r\n\r\n    const token = await tokenize(card);\r\n    if (!token) {\r\n      console.error(\"Unable to retreive the token\");\r\n      displayPaymentResultsSquare(\"FAILURE\");\r\n      setState(ChargeState.ChargeError);\r\n      return;\r\n    }\r\n\r\n    const cardPaymentRequest = new CardPaymentRequest();\r\n    cardPaymentRequest.token = token;\r\n    cardPaymentRequest.orderToken = orderToken;\r\n    cardPaymentRequest.PayNow = paynow;\r\n    await paymentService\r\n      .pay(cardPaymentRequest, organizationId)\r\n      .then((result: CardPaymentResponse) => {\r\n        switch (result.state) {\r\n          case PaymentState.Success:\r\n            displayPaymentResultsSquare(\"SUCCESS\");\r\n            console.log(\"Payment charge Success\");\r\n            setState(ChargeState.Completed);\r\n            history.push(`/my-reservations/${orderToken}`);\r\n            break;\r\n          case PaymentState.Error:\r\n            setState(ChargeState.ChargeError);\r\n            displayPaymentResultsSquare(\"FAILURE\");\r\n            break;\r\n          case PaymentState.Timeout:\r\n            setState(ChargeState.ChargeTimeout);\r\n            displayPaymentResultsSquare(\"FAILURE\");\r\n            break;\r\n        }\r\n      })\r\n      .catch(() => {\r\n        setState(ChargeState.ChargeError);\r\n        displayPaymentResultsSquare(\"FAILURE\");\r\n      });\r\n  }\r\n\r\n  async function tokenize(paymentMethod: any): Promise<string | null> {\r\n    try {\r\n      const tokenResult = await paymentMethod.tokenize();\r\n      if (tokenResult.status === \"OK\") {\r\n        return tokenResult.token;\r\n      }\r\n\r\n      return null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function displayPaymentResultsSquare(status: string) {\r\n    // 'SUCCESS' or 'FAILURE'\r\n    const statusContainer = document.getElementById(\"payment-status-container\");\r\n    if (!statusContainer) return;\r\n\r\n    if (status === \"SUCCESS\") {\r\n      statusContainer.classList.remove(\"is-failure\");\r\n      statusContainer.classList.add(\"is-success\");\r\n      statusContainer.innerHTML += t(\"payment.is-success\");\r\n    } else {\r\n      statusContainer.classList.remove(\"is-success\");\r\n      statusContainer.classList.add(\"is-failure\");\r\n      statusContainer.innerHTML += t(\"payment.is-failure\");\r\n    }\r\n    statusContainer.style.visibility = \"visible\";\r\n  }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useStripe, useElements, CardElement } from \"@stripe/react-stripe-js\";\r\nimport { StripeCardElement } from \"@stripe/stripe-js\";\r\nimport { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { CardPaymentRequest } from \"../../services/payment/payment-request\";\r\nimport { CardPaymentResponse } from \"../../services/payment/payment-response\";\r\nimport paymentService from \"../../services/payment/payment-service\";\r\nimport { PaymentState } from \"../../services/payment/payment-state\";\r\nimport LoadingComponent from \"../loading-component\";\r\nimport { ChargeState } from \"./charge-state\";\r\nimport \"./payment-form-stripe.scss\";\r\n\r\ntype Props = {\r\n  cost: string;\r\n  currency: string;\r\n  orderToken: string;\r\n  organizationId: string;\r\n  paynow: boolean;\r\n  minPrice?: string;\r\n};\r\n\r\nconst CARD_ELEMENT_OPTIONS = {\r\n  style: {\r\n    base: {\r\n      color: \"#32325d\",\r\n      fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\r\n      fontSmoothing: \"antialiased\",\r\n      fontSize: \"16px\",\r\n      \"::placeholder\": {\r\n        color: \"#aab7c4\",\r\n      },\r\n    },\r\n    invalid: {\r\n      color: \"#fa755a\",\r\n      iconColor: \"#fa755a\",\r\n    },\r\n  },\r\n};\r\n\r\nexport default function PaymentFormStripe(props: Props) {\r\n  const { cost, currency, orderToken, organizationId, paynow, minPrice } = props;\r\n\r\n  const stripe = useStripe();\r\n  const elements = useElements();\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const [message, setMessage] = useState<any>(null);\r\n  const [state, setState] = useState<ChargeState>(ChargeState.EnteringData);\r\n\r\n  return (\r\n    <div>\r\n      {state === ChargeState.ChargeTimeout && (\r\n        <div>\r\n          <div className=\"text-danger\">\r\n            <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"exclamation-triangle\"]} />\r\n            {t(\"micro-site-reserve-locker.payment-timeout-msg\")}\r\n          </div>\r\n          <div className=\"mt-2\">\r\n            <button className=\"btn btn-primary\" onClick={() => window.location.reload()}>\r\n              {t(\"micro-site-reserve-locker.try-again\")}\r\n            </button>\r\n          </div>\r\n        </div>\r\n      )}\r\n\r\n      {state !== ChargeState.ChargeTimeout && (\r\n        <form id=\"payment-form\" onSubmit={pay}>\r\n          <CardElement options={CARD_ELEMENT_OPTIONS} onChange={handleCardChange} />\r\n\r\n          <br />\r\n          <button\r\n            disabled={!stripe || !elements || state === ChargeState.ChargeInProgress}\r\n            id=\"submit\"\r\n            className=\"btn btn-primary pushable rounded-3 shadow-lg\"\r\n          >\r\n            <span id=\"button-text\" className=\"front rounded-3\">\r\n              {paynow && t(\"payment.pay\", { cost: cost })}\r\n              {!paynow && (\r\n                <>\r\n                  {!minPrice && t(\"payment.hold\", { cost: cost })}\r\n                  {minPrice && t(\"payment.pay\", { cost: minPrice })}\r\n                </>\r\n              )}\r\n            </span>\r\n          </button>\r\n\r\n          <LoadingComponent loading={state === ChargeState.ChargeInProgress} />\r\n\r\n          {message && <div id=\"payment-message\">{message}</div>}\r\n          <div className=\"mt-3\">\r\n            <FontAwesomeIcon icon={[\"fas\", \"info-circle\"]} /> {t(\"micro-site-reserve-locker.msg-taxes\")}\r\n          </div>\r\n        </form>\r\n      )}\r\n    </div>\r\n  );\r\n\r\n  async function pay(e: any) {\r\n    e.preventDefault();\r\n\r\n    // Stripe.js has not yet loaded. Make sure to disable form submission until Stripe.js has loaded.\r\n    if (!stripe || !elements) {\r\n      return;\r\n    }\r\n\r\n    setState(ChargeState.ChargeInProgress);\r\n\r\n    const result = await stripe\r\n      .createPaymentMethod({\r\n        type: \"card\",\r\n        card: elements.getElement(CardElement) as StripeCardElement,\r\n      })\r\n      .catch((e: any) => console.log(\"createPaymentMethod error\", e));\r\n    if (!result) {\r\n      console.error(\"Unable to create payment method\");\r\n      setMessage(t(\"common.error-generic\"));\r\n      setState(ChargeState.ChargeError);\r\n      return;\r\n    }\r\n    if (result.error) {\r\n      console.error(\"Unable to create payment method, error:\", result.error);\r\n      setMessage(result.error.message);\r\n      setState(ChargeState.ChargeError);\r\n      return;\r\n    }\r\n\r\n    const cardPaymentRequest = new CardPaymentRequest();\r\n    cardPaymentRequest.token = result.paymentMethod.id;\r\n    cardPaymentRequest.orderToken = orderToken;\r\n    cardPaymentRequest.PayNow = paynow;\r\n    await paymentService\r\n      .pay(cardPaymentRequest, organizationId)\r\n      .then((result: CardPaymentResponse) => {\r\n        switch (result.state) {\r\n          case PaymentState.Success:\r\n            setMessage(\"\");\r\n            console.log(\"Payment charge Success\");\r\n            setState(ChargeState.Completed);\r\n            history.push(`/my-reservations/${orderToken}`);\r\n            break;\r\n          case PaymentState.Error:\r\n            setState(ChargeState.ChargeError);\r\n            setMessage(result.error ?? t(\"common.error-generic\"));\r\n            break;\r\n          case PaymentState.Timeout:\r\n            setState(ChargeState.ChargeTimeout);\r\n            setMessage(\"\");\r\n            break;\r\n        }\r\n      })\r\n      .catch(() => {\r\n        setState(ChargeState.ChargeError);\r\n        setMessage(t(\"common.error-generic\"));\r\n      });\r\n  }\r\n\r\n  function handleCardChange(event: any) {\r\n    const errorMessage = event.error ? event.error.message : null;\r\n    setMessage(errorMessage);\r\n  }\r\n}\r\n","import { Elements } from \"@stripe/react-stripe-js\";\r\nimport { loadStripe, Stripe } from \"@stripe/stripe-js\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { CardPaymentIntentResponse } from \"../../services/payment/payment-intent-response\";\r\nimport { CardPaymentRequest } from \"../../services/payment/payment-request\";\r\nimport { CardPaymentResponse } from \"../../services/payment/payment-response\";\r\nimport paymentService from \"../../services/payment/payment-service\";\r\nimport { PaymentState } from \"../../services/payment/payment-state\";\r\nimport PaymentFormSquare from \"./payment-form-square\";\r\nimport PaymentFormStripe from \"./payment-form-stripe\";\r\n\r\ntype Props = {\r\n  paymentIntent: CardPaymentIntentResponse;\r\n  organizationId: string;\r\n  orderToken: string;\r\n  cost: string;\r\n  currency: string;\r\n  hasPayment: boolean;\r\n  paynow: boolean;\r\n  minPrice?: string;\r\n};\r\n\r\nexport default function PaymentForm(props: Props) {\r\n  const { paymentIntent, organizationId, orderToken, currency, cost, hasPayment, paynow, minPrice } = props;\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const [stripePromise, setStripePromise] = useState<Promise<Stripe | null>>();\r\n  const [message, setMessage] = useState<any>(null);\r\n\r\n  useEffect(() => {\r\n    if (process.env.REACT_APP_STRIPE_APP_PUBLIC_KEY && paymentIntent.providerType === \"Stripe\") {\r\n      setStripePromise(loadStripe(process.env.REACT_APP_STRIPE_APP_PUBLIC_KEY));\r\n    }\r\n  }, []);\r\n\r\n  if (hasPayment) {\r\n    const appearance = {\r\n      theme: \"stripe\",\r\n    };\r\n    const stripeOptions: any = {\r\n      appearance,\r\n    };\r\n\r\n    return (\r\n      <>\r\n        {paymentIntent.providerType === \"Stripe\" && stripePromise && (\r\n          <Elements options={stripeOptions} stripe={stripePromise}>\r\n            <PaymentFormStripe\r\n              organizationId={organizationId}\r\n              orderToken={orderToken}\r\n              cost={cost}\r\n              currency={currency}\r\n              paynow={paynow}\r\n              minPrice={minPrice}\r\n            />\r\n          </Elements>\r\n        )}\r\n\r\n        {paymentIntent.providerType === \"Square\" && (\r\n          <PaymentFormSquare\r\n            organizationId={organizationId}\r\n            orderToken={orderToken}\r\n            cost={cost}\r\n            currency={currency}\r\n            locationId={paymentIntent.location}\r\n            paynow={paynow}\r\n            minPrice={minPrice}\r\n          />\r\n        )}\r\n      </>\r\n    );\r\n  } else {\r\n    return (\r\n      <>\r\n        <button className=\"btn btn-primary pushable rounded-3 shadow-lg\" onClick={payFreeReservation}>\r\n          <span className=\"front rounded-3\">{t(\"payment.reserve\")}</span>\r\n        </button>\r\n\r\n        {message && <div id=\"payment-message\">{message}</div>}\r\n      </>\r\n    );\r\n  }\r\n\r\n  async function payFreeReservation() {\r\n    const cardPaymentRequest = new CardPaymentRequest();\r\n    cardPaymentRequest.token = orderToken;\r\n    cardPaymentRequest.orderToken = orderToken;\r\n    await paymentService\r\n      .pay(cardPaymentRequest, organizationId)\r\n      .then((result: CardPaymentResponse) => {\r\n        switch (result.state) {\r\n          case PaymentState.Success:\r\n            setMessage(\"\");\r\n            console.log(\"Payment charge Success\");\r\n            history.push(`/my-reservations/${orderToken}`);\r\n            break;\r\n          case PaymentState.Error:\r\n            setMessage(result.error ?? t(\"common.error-generic\"));\r\n            break;\r\n          case PaymentState.Timeout:\r\n            setMessage(t(\"common.error-generic\"));\r\n            break;\r\n        }\r\n      })\r\n      .catch(() => {\r\n        setMessage(t(\"common.error-generic\"));\r\n      });\r\n  }\r\n}\r\n","import moment from \"moment\";\r\nimport { useState, useEffect } from \"react\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport TimerComponent from \"../../components/timerComponent\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport PaymentForm from \"../../components/payment-forms/payment-form\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport micrositeService from \"../../services/micro-site/microsite-service\";\r\nimport ReservationBlock from \"../../services/micro-site/reservationBlock\";\r\nimport orderService from \"../../services/order/order-service\";\r\nimport { CardPaymentIntentResponse } from \"../../services/payment/payment-intent-response\";\r\nimport paymentService from \"../../services/payment/payment-service\";\r\nimport \"./reserve-locker.scss\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { MinimalPrice, PricePerHour, PricePerMinute } from \"../../assets/meta-table-keys\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ninterface IParamTypes {\r\n  micrositeId: string;\r\n  reservationBlockId: string;\r\n  token: string;\r\n}\r\n\r\nexport default function ReserveLockerPage() {\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n  const language: string = languageService.getLanguage();\r\n\r\n  const { micrositeId, reservationBlockId, token } = useParams<IParamTypes>();\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [reservationBlock, setReservationBlock] = useState<ReservationBlock | null>();\r\n  const [timeUntilExpired, setTimeUntilExpired] = useState<number>();\r\n\r\n  const [microsite, setMicrosite] = useState<Microsite | undefined>(undefined);\r\n  const [paymentIntent, setPaymentIntent] = useState<CardPaymentIntentResponse>();\r\n\r\n  useEffect(() => {\r\n    //Gather the microsite and reservation block requested\r\n    micrositeService.getMicrosite(micrositeId).then((microsite: Microsite | undefined) => {\r\n      if (microsite) {\r\n        setMicrosite(microsite);\r\n        const reservationBlock = microsite.reservationBlocks.find((rb) => rb.id === reservationBlockId);\r\n        setReservationBlock(reservationBlock);\r\n        if (token) {\r\n          orderService.getOrderById(microsite.organizationId, token, token).then((order) => {\r\n            if (order) {\r\n              if (order.payments && order.payments.length > 0) {\r\n                history.push(`/my-reservations/${token}`);\r\n              }\r\n\r\n              paymentService.createPaymentIntent(order.id).then((paymentIntent: CardPaymentIntentResponse) => {\r\n                setPaymentIntent(paymentIntent);\r\n              });\r\n\r\n              if (reservationBlock) {\r\n                micrositeService\r\n                  .getTimeUntilExpired(order.id)\r\n                  .then((result) => {\r\n                    setTimeUntilExpired(parseInt(StringHelpers.formatNumber(result, 0)));\r\n                  })\r\n                  .catch(() => {\r\n                    setLoading(false);\r\n                  })\r\n                  .finally(() => setLoading(false));\r\n              } else {\r\n                setLoading(false);\r\n              }\r\n            } else {\r\n              history.push(`/sites/reservation-expired/${micrositeId}`);\r\n            }\r\n          });\r\n        }\r\n      }\r\n    });\r\n  }, [micrositeId, reservationBlockId]);\r\n\r\n  if (loading) {\r\n    return <LoadingComponent loading={loading} />;\r\n  }\r\n\r\n  if (!reservationBlock) {\r\n    return (\r\n      <div className=\"page reserve-locker-page container \">\r\n        <div className=\"col col-lg-6 offset-lg-3\">\r\n          <div className=\"card\">{!reservationBlock && <div>{t(\"micro-site-reserve-locker.no-reservation-block\")}</div>}</div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  const until = reservationBlock ? moment(reservationBlock.startOn).add(reservationBlock.duration, \"seconds\").toDate() : new Date();\r\n  const reservationBlockIsFree = reservationBlock.price === 0;\r\n  const dateNow = new Date();\r\n  const untilStart = (new Date(reservationBlock.startOn).getTime() - dateNow.getTime()) / 1000;\r\n\r\n  const meta = reservationBlock?.meta;\r\n  const pricePerHour = meta ? Number.parseFloat(meta[PricePerHour]) : null;\r\n  const pricePerMinute = meta ? Number.parseFloat(meta[PricePerMinute]) : null;\r\n  const minimalPrice = meta ? Number.parseFloat(meta[MinimalPrice]) : null;\r\n  const paynow = pricePerHour || pricePerMinute ? false : true;\r\n\r\n  const isSwych = micrositeId === \"swych\";\r\n\r\n  return (\r\n    <div className=\"page reserve-locker-page container\">\r\n      <div className=\"col col-sm-12 col-lg-8 offset-lg-2 page-background-boxing shadow\">\r\n        <div className=\"d-inline\">\r\n          <button className=\"btn fs-5 text-grey mt-2\" onClick={() => history.push(`/sites/${micrositeId}`)}>\r\n            <FontAwesomeIcon icon={[\"fas\", \"arrow-left\"]} className=\"me-2\" />\r\n            {t(\"common.go-back\")}\r\n          </button>\r\n        </div>\r\n        <TimerComponent\r\n          timeInSeconds={timeUntilExpired ?? 5 * 60}\r\n          message=\"micro-site-page.msg-time-until-expired\"\r\n          onTimerEnds={() => {\r\n            history.push(`/sites/reservation-expired/${micrositeId}`);\r\n          }}\r\n          className=\"mb-1 me-3 float-end text-grey timeLeft text-center d-inline\"\r\n        />\r\n\r\n        <div className=\"card-body text-center text-grey mt-4\">\r\n          <div className=\"d-inline-block mt-0 pb-0 text-dark\">\r\n            {reservationBlock?.logoUrl && <img src={reservationBlock?.logoUrl} alt=\"\" className=\"img-logo\" />}\r\n            <h2 className=\"mt-2 fs-3\"> {reservationBlock?.name.get(language)}</h2>\r\n          </div>\r\n          <div className=\"mb-4 mt-3\">\r\n            <div className=\"mb-1\">\r\n              {isSwych ? t(\"micro-site-page.temp-locker-reserve-swych\") : t(\"micro-site-page.temp-locker-reserve\")}\r\n            </div>\r\n\r\n            {reservationBlock.description.get(language) && <span className=\"mb-2\">{reservationBlock.description.get(language)}</span>}\r\n\r\n            {reservationBlock.startOn && (\r\n              <>\r\n                <TimerComponent\r\n                  timeInSeconds={untilStart}\r\n                  message=\"micro-site-page.locker-available-from\"\r\n                  onTimerEnds={() => null}\r\n                  className=\"timeBeforeStart mb-1\"\r\n                />\r\n                <Trans\r\n                  i18nKey=\"micro-site-page.locker-available-to\"\r\n                  values={{\r\n                    end: DateHelpers.formatDateTime(until, DateHelpers.UserTimeZone),\r\n                  }}\r\n                />\r\n              </>\r\n            )}\r\n            {!reservationBlock.startOn && (\r\n              <div className=\"durationAvailability\">\r\n                <Trans\r\n                  i18nKey=\"micro-site-page.locker-available-now\"\r\n                  values={{ duration: DateHelpers.formatDuration(reservationBlock.duration) }}\r\n                />\r\n              </div>\r\n            )}\r\n          </div>\r\n\r\n          {!!pricePerHour ||\r\n            (!!pricePerMinute && (\r\n              <div className=\"row\">\r\n                <div className=\"col-12 col-lg-8 offset-lg-2\">\r\n                  <div className=\"text-center\">\r\n                    <p>\r\n                      <strong>{t(\"micro-site-page.cost-title\")}</strong>\r\n                      <br />\r\n                      {!!pricePerHour &&\r\n                        t(\"micro-site-page.cost-per-hour\", {\r\n                          cost: StringHelpers.formatPrice(pricePerHour + pricePerHour * reservationBlock.saleTaxRate),\r\n                          currency: microsite?.currency,\r\n                        })}\r\n                      {!!pricePerMinute &&\r\n                        t(\"micro-site-page.cost-per-minute\", {\r\n                          cost: StringHelpers.formatPrice(pricePerMinute + pricePerMinute * reservationBlock.saleTaxRate),\r\n                          currency: microsite?.currency,\r\n                        })}\r\n                      <br />\r\n                      {!!minimalPrice && (\r\n                        <>\r\n                          {t(\"micro-site-page.min-cost\", {\r\n                            cost: StringHelpers.formatPrice(minimalPrice + minimalPrice * reservationBlock.saleTaxRate),\r\n                            currency: microsite?.currency,\r\n                          })}\r\n                          <br />\r\n                        </>\r\n                      )}\r\n                      {t(\"micro-site-page.max-cost\", {\r\n                        cost: StringHelpers.formatPrice(reservationBlock.price + reservationBlock.price * reservationBlock.saleTaxRate),\r\n                        currency: microsite?.currency,\r\n                      })}\r\n                    </p>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            ))}\r\n\r\n          <div className=\"row\">\r\n            <div className=\"col-12 col-lg-8 offset-lg-2\">\r\n              {paymentIntent && token && microsite?.organizationId && (\r\n                <>\r\n                  <PaymentForm\r\n                    paymentIntent={paymentIntent}\r\n                    orderToken={token}\r\n                    organizationId={microsite?.organizationId}\r\n                    hasPayment={!reservationBlockIsFree}\r\n                    cost={StringHelpers.formatPrice(reservationBlock.price + reservationBlock.price * reservationBlock.saleTaxRate)}\r\n                    currency={microsite.currency}\r\n                    paynow={paynow}\r\n                    minPrice={\r\n                      minimalPrice ? StringHelpers.formatPrice(minimalPrice + minimalPrice * reservationBlock.saleTaxRate) : undefined\r\n                    }\r\n                  />\r\n                </>\r\n              )}\r\n            </div>\r\n          </div>\r\n\r\n          <div className=\"text-start row mt-4\">\r\n            <div className=\"col-5\">\r\n              <div className=\"text-start text-very-small\">*{t(\"micro-site-page.charge-explenation-now\")}</div>\r\n              <div className=\"text-very-small\">**{t(\"micro-site-page.privilage-explenation\")}</div>\r\n            </div>\r\n            <div className=\"col-5 offset-2\">\r\n              <div className=\"text-danger text-very-small\">\r\n                {isSwych ? t(\"micro-site-page.causion-message-swych\") : t(\"micro-site-page.causion-message\")}\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          {!reservationBlockIsFree && paymentIntent && (\r\n            <>\r\n              <hr className=\"mt-4\"></hr>\r\n              <a\r\n                href={\r\n                  paymentIntent.providerType !== \"Stripe\"\r\n                    ? language === \"fr\"\r\n                      ? \"https://squareup.com/ca/fr/security\"\r\n                      : \"https://squareup.com/us/en/security\"\r\n                    : \"https://stripe.com/docs/security\"\r\n                }\r\n                target=\"_blank\"\r\n                rel=\"noreferrer\"\r\n              >{`${t(\"micro-site-page.provider-security-message\")} ${paymentIntent.providerType}`}</a>\r\n            </>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import ReactPlaceholder from \"react-placeholder\";\r\n\r\ninterface Props {\r\n  loading: boolean;\r\n  children: JSX.Element;\r\n  type?: any;\r\n  rows?: number;\r\n}\r\n\r\nPlacerholderComponent.defaultProps = {\r\n  type: \"text\",\r\n  rows: 5,\r\n};\r\nfunction PlacerholderComponent(props: Props) {\r\n  const { loading, children, rows, type } = props;\r\n\r\n  return (\r\n    <ReactPlaceholder type={type} rows={rows} ready={!loading}>\r\n      {children}\r\n    </ReactPlaceholder>\r\n  );\r\n}\r\n\r\nexport default PlacerholderComponent;\r\n","export enum RequestState {\r\n  Loading = \"Loading\",\r\n  Success = \"Success\",\r\n  Failure = \"Failure\",\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { RequestState } from \"../core/request-state\";\r\nimport ToastHelpers from \"../core/toast-helpers\";\r\nimport { Hub } from \"./hub\";\r\nimport hubService from \"./hub-service\";\r\n\r\ninterface IProps {\r\n  onErrorNotificationMessage: string;\r\n}\r\n\r\nfunction useMyHubs(props: IProps) {\r\n  const { onErrorNotificationMessage } = props;\r\n\r\n  const [requestState, setRequestState] = useState<RequestState>(RequestState.Loading);\r\n  const [error, setError] = useState<string>(\"\");\r\n  const [hubs, setHubs] = useState<Array<Hub>>([]);\r\n\r\n  useEffect(\r\n    () => {\r\n      refresh();\r\n    },\r\n    // eslint-disable-next-line\r\n    []\r\n  );\r\n\r\n  function refresh() {\r\n    setRequestState(RequestState.Loading);\r\n\r\n    hubService\r\n      .getMyHubs()\r\n      .then((hubs) => {\r\n        setHubs(hubs);\r\n        setRequestState(RequestState.Success);\r\n      })\r\n      .catch((e) => {\r\n        setRequestState(RequestState.Failure);\r\n        setError(e);\r\n\r\n        if (onErrorNotificationMessage) {\r\n          ToastHelpers.error(onErrorNotificationMessage);\r\n        }\r\n      });\r\n  }\r\n\r\n  return { hubs, requestState, error, refresh };\r\n}\r\n\r\nexport default useMyHubs;\r\n","import \"./hubs-page.scss\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { EditButtonComponent, SyncButtonComponent } from \"../../components/button-component\";\r\nimport PlacerholderComponent from \"../../components/placerholder-component\";\r\nimport useMyHubs from \"../../services/hub/useMyHubs\";\r\nimport { RequestState } from \"../../services/core/request-state\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { HubHelpers } from \"../../services/hub/hub-helper\";\r\nimport MemberService from \"../../services/member/member-service\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ntype Props = {\r\n  member: Member;\r\n};\r\n\r\nexport default function HubsPage(props: Props) {\r\n  const { member } = props;\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const { hubs, requestState, refresh } = useMyHubs({ onErrorNotificationMessage: t(\"hubs-page.error-refresh\") });\r\n\r\n  return (\r\n    <div className=\"container page hubs-page pt-5\">\r\n      <h1>{t(\"hubs-page.title\")}</h1>\r\n      <SyncButtonComponent\r\n        className=\"ms-3 mb-3\"\r\n        disabled={requestState !== RequestState.Success}\r\n        onClick={() => refresh()}\r\n      ></SyncButtonComponent>\r\n\r\n      {requestState === RequestState.Failure && <div>{t(\"hubs-page.error-refresh\")}</div>}\r\n\r\n      <div className=\"row mt-3\">\r\n        <div className=\"col\">\r\n          <div className=\"customer card\">\r\n            <div className=\"card-body\">\r\n              <PlacerholderComponent loading={requestState === RequestState.Loading} rows={5}>\r\n                <table className=\"table table-sm table-hover row-clikable\">\r\n                  <thead>\r\n                    <tr>\r\n                      <th>{t(\"hubs-page.name\")}</th>\r\n                      <th>{t(\"hubs-page.state\")}</th>\r\n                      {MemberService.isLocketgoHubAdmin(member) && <th>{t(\"hubs-page.version\")}</th>}\r\n                      <th></th>\r\n\r\n                      {/* Empty column header for actions */}\r\n                      <th></th>\r\n                    </tr>\r\n                  </thead>\r\n                  <tbody>\r\n                    {requestState === RequestState.Success && hubs.length === 0 && (\r\n                      <tr>\r\n                        <td colSpan={3}>{t(\"hubs-page.no-hubs\")}</td>\r\n                      </tr>\r\n                    )}\r\n\r\n                    {hubs.map((hub) => {\r\n                      const url = `/hubs/${hub.id}`;\r\n                      const online = hub.state === \"Online\";\r\n                      const title = t(online ? \"components.location-online\" : \"components.location-offline\");\r\n                      if (!hub.active) {\r\n                        return <></>;\r\n                      }\r\n                      return (\r\n                        <tr key={hub.id} onClick={() => history.push(url)}>\r\n                          <td>\r\n                            {hub.name}\r\n                            {hub.private && <FontAwesomeIcon className=\"ms-2\" icon={[\"fas\", \"user-lock\"]} />}\r\n                          </td>\r\n                          <td>\r\n                            <span\r\n                              className={`ms-2 text-${online ? \"success\" : \"danger\"}`}\r\n                              data-bs-toggle=\"tooltip\"\r\n                              data-bs-placement=\"top\"\r\n                              title={title}\r\n                            >\r\n                              <FontAwesomeIcon icon={[\"fas\", \"circle\"]} />\r\n                            </span>\r\n                          </td>\r\n                          {MemberService.isLocketgoHubAdmin(member) && (\r\n                            <td>\r\n                              {hub.version &&\r\n                                DateHelpers.formatDateTime(new Date(hub.version.substring(0, 19) + \"+00:00\"), DateHelpers.UserTimeZone)}\r\n                            </td>\r\n                          )}\r\n                          <td>{t(\"hubs-page.compartments\", { count: HubHelpers.GetCompartmentCount(hub) })}</td>\r\n                          <td>\r\n                            <EditButtonComponent url={url}></EditButtonComponent>\r\n                          </td>\r\n                        </tr>\r\n                      );\r\n                    })}\r\n                  </tbody>\r\n                </table>\r\n              </PlacerholderComponent>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { RequestState } from \"../core/request-state\";\r\nimport ToastHelpers from \"../core/toast-helpers\";\r\nimport { MyHub } from \"./hub\";\r\nimport hubService from \"./hub-service\";\r\n\r\ninterface IProps {\r\n  hubId: string;\r\n  onErrorNotificationMessage: string;\r\n}\r\n\r\nfunction useMyHub(props: IProps) {\r\n  const { hubId, onErrorNotificationMessage } = props;\r\n\r\n  const [requestState, setRequestState] = useState<RequestState>(RequestState.Loading);\r\n  const [error, setError] = useState<string>(\"\");\r\n  const [hub, setHub] = useState<MyHub | null>(null);\r\n\r\n  useEffect(\r\n    () => {\r\n      refresh();\r\n    },\r\n    // eslint-disable-next-line\r\n    []\r\n  );\r\n\r\n  function refresh() {\r\n    hubService\r\n      .getMyHubById(hubId)\r\n      .then((hub) => {\r\n        setHub(hub);\r\n        setRequestState(RequestState.Success);\r\n      })\r\n      .catch((e) => {\r\n        setRequestState(RequestState.Failure);\r\n        setError(e);\r\n\r\n        if (onErrorNotificationMessage) {\r\n          ToastHelpers.error(onErrorNotificationMessage);\r\n        }\r\n      });\r\n  }\r\n\r\n  return { hub, requestState, error, refresh };\r\n}\r\n\r\nexport default useMyHub;\r\n","import { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { MyHub } from \"../../../services/hub/hub\";\r\nimport hubService from \"../../../services/hub/hub-service\";\r\n\r\ninterface IPropHubOpenDoor {\r\n  hub: MyHub | null;\r\n  onClose: any;\r\n  refresh: any;\r\n}\r\n\r\nenum OpeningAllDoorsState {\r\n  Question = 0,\r\n  Opening,\r\n  Finished,\r\n}\r\n\r\nexport default function HubOpenAllDoor(props: IPropHubOpenDoor) {\r\n  const { hub, onClose, refresh } = props;\r\n  const { t } = useTranslation();\r\n\r\n  const [state, setState] = useState<OpeningAllDoorsState>(OpeningAllDoorsState.Question);\r\n\r\n  return (\r\n    <div className=\"panel-popup panel-centered\">\r\n      <div className=\"card\">\r\n        <div className=\"card-header align-items-center\">\r\n          <div className=\"d-inline-block\">\r\n            <h2>{t(\"hub-page.open-all-door-title\")}</h2>\r\n          </div>\r\n          <button className=\"btn-close float-end\" onClick={onClose}></button>\r\n        </div>\r\n\r\n        <div className=\"card-body\">\r\n          {state === OpeningAllDoorsState.Question && (\r\n            <>\r\n              {t(\"hub-page.open-all-door-message\")}\r\n              <div className=\"mt-3\">\r\n                <button className=\"btn btn-primary\" onClick={openDoors}>\r\n                  {t(\"common.yes\")}\r\n                </button>\r\n                <button className=\"ms-2 btn btn-primary\" onClick={onClose}>\r\n                  {t(\"common.no\")}\r\n                </button>\r\n              </div>\r\n            </>\r\n          )}\r\n\r\n          {state === OpeningAllDoorsState.Opening && (\r\n            <div>\r\n              <div>{t(\"hub-page.opening\")}</div>\r\n            </div>\r\n          )}\r\n\r\n          {state === OpeningAllDoorsState.Finished && <div>{t(\"hub-page.opening-done\")}</div>}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  async function openDoors(): Promise<void> {\r\n    if (!hub) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      setState(OpeningAllDoorsState.Opening);\r\n\r\n      await hubService.openAllDoors(hub.id);\r\n    } finally {\r\n      setState(OpeningAllDoorsState.Finished);\r\n      await refresh();\r\n    }\r\n\r\n    const delayReset = () =>\r\n      new Promise(() =>\r\n        setTimeout(() => {\r\n          onClose();\r\n        }, 5000)\r\n      );\r\n    await delayReset();\r\n    await refresh();\r\n  }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { SyncButtonComponent } from \"../../components/button-component\";\r\nimport { DoorOpenedComponent, DoorOpeningGifComponent, OpenDoorComponent } from \"../../components/order-page-components\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport { CompartmentStates } from \"../../services/hub/compartment\";\r\nimport { MyHub } from \"../../services/hub/hub\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport Member from \"../../services/member/member\";\r\nimport memberService from \"../../services/member/member-service\";\r\n\r\ninterface IPropCompartmentDetail {\r\n  hub: MyHub | null;\r\n  orderId?: string;\r\n  paymentId?: string;\r\n  groupId: string;\r\n  compartmentNumber: string;\r\n  side: string;\r\n  member: Member;\r\n  onClose: any;\r\n  refresh: any;\r\n}\r\n\r\nexport default function HubCompartmentDetail(props: IPropCompartmentDetail) {\r\n  const { hub, orderId, paymentId, groupId, compartmentNumber, side, member, onClose, refresh } = props;\r\n  const { t } = useTranslation();\r\n\r\n  const [inOpening, setInOpening] = useState<boolean>(false);\r\n  const [isLocketgoHubAdmin, setIsLocketgoHubAdmin] = useState<boolean>(false);\r\n  const [isHubAdmin, setIsHubAdmin] = useState<boolean>(false);\r\n\r\n  const group = hub?.groups.find((g) => g.id === groupId);\r\n  const compartment = group?.compartments.find((c) => c.number === compartmentNumber);\r\n  const isOpened = compartment?.state === CompartmentStates.Opened;\r\n  const isDeactivated = hub?.reservationDenies?.some(\r\n    (r) => r.compartmentNumber === compartmentNumber && r.groupId === groupId && r.hubId === hub.id\r\n  );\r\n  var doornumber = \"\";\r\n  if(compartment) {\r\n     doornumber = /^\\d+$/.test(compartment.number) ?  compartment.number : group?.id + compartment.number;\r\n  }\r\n\r\n  useEffect(() => {\r\n    if (hub) {\r\n      setIsLocketgoHubAdmin(memberService.isLocketgoHubAdmin(member));\r\n      setIsHubAdmin(memberService.isHubContributor(member, hub.id));\r\n    } else {\r\n      setIsLocketgoHubAdmin(false);\r\n      setIsHubAdmin(false);\r\n    }\r\n  }, [hub, member]);\r\n\r\n  if (!compartment) {\r\n    return <div>{t(\"hub-compartment-detail.error-loading-compartment\")}</div>;\r\n  }\r\n\r\n  return (\r\n    <div className=\"panel-popup panel-centered\">\r\n      <div className=\"card\">\r\n        <div className=\"card-header align-items-center\">\r\n          <div className=\"d-inline-block\">\r\n            <h2>\r\n              {doornumber ? doornumber : group?.id + compartment.number}\r\n              <SyncButtonComponent\r\n                onClick={() => {\r\n                  refresh();\r\n                  setInOpening(false);\r\n                }}\r\n                className={\"ms-2\"}\r\n              />\r\n            </h2>\r\n          </div>\r\n          <button className=\"btn-close float-end\" onClick={() => onClose()}></button>\r\n        </div>\r\n\r\n        <div className=\"card-body\">\r\n          {/* Order */}\r\n          {orderId && (\r\n            <div className=\"mb-3\">\r\n              <div>\r\n                <div className=\"lead\">{t(\"hub-page.detail-order-title\")}</div>\r\n                <Link className=\"ps-0\" to={`/orders/${orderId}`}>\r\n                  {orderId}\r\n                </Link>\r\n              </div>\r\n\r\n              {paymentId && (\r\n                <div>\r\n                  {t(\"hub-compartment-detail.with-payment\")}\r\n                  <FontAwesomeIcon className=\"ms-2\" icon={[\"fas\", \"credit-card\"]} />\r\n                </div>\r\n              )}\r\n              <hr />\r\n            </div>\r\n          )}\r\n\r\n          <div className={orderId ? \"mt-3\" : \"\"}>\r\n            <div className=\"lead mb-2\">{t(\"hub-page.detail-door-management\")}</div>\r\n\r\n            {/* Open  */}\r\n            <div /*className={\"item-lock\" + (isOpened ? \" opened\" : \" closed\")}*/>\r\n              {/*isOpened && <DoorOpenedComponent />*/}\r\n              <span /*className={isOpened ? \"ms-3\" : \"\"}*/>\r\n                {inOpening ? (\r\n                  <DoorOpeningGifComponent />\r\n                ) : (\r\n                  <OpenDoorComponent displayIcon={true /*!isOpened*/} onClick={openDoor} disabled={inOpening /* || isOpened*/} />\r\n                )}\r\n              </span>\r\n            </div>\r\n\r\n            {/* Toggle */}\r\n            {isLocketgoHubAdmin && (\r\n              <div className=\"mt-2\">\r\n                <button className=\"btn btn-outline-primary\" onClick={toggleDoor}>\r\n                  {t(\"hub-page.toggle-door\")}\r\n                </button>\r\n              </div>\r\n            )}\r\n          </div>\r\n\r\n          {/* Activate/Deactivate */}\r\n          <div className=\"mt-3\">\r\n            <hr />\r\n\r\n            <div className=\"lead mb-2\">{t(\"hub-page.reservationDenies-label-title\")}</div>\r\n\r\n            {isDeactivated && <label className=\"disabled me-2\">{t(\"hub-page.reservationDenies-label-deactivated\")}</label>}\r\n            {!isDeactivated && <label className=\"me-2\">{t(\"hub-page.reservationDenies-label-activated\")}</label>}\r\n\r\n            {isHubAdmin && (\r\n              <>\r\n                {isDeactivated ? (\r\n                  <button className=\"btn btn-outline-primary mb-2\" onClick={onActivation}>\r\n                    {t(\"hub-page.reservationDenies-activate\")}\r\n                  </button>\r\n                ) : (\r\n                  <button className=\"btn btn-outline-primary mb-2\" onClick={onDeactivation}>\r\n                    {t(\"hub-page.reservationDenies-deactivate\")}\r\n                  </button>\r\n                )}\r\n              </>\r\n            )}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  async function openDoor(): Promise<void> {\r\n    if (!hub) {\r\n      return;\r\n    }\r\n\r\n    setInOpening(true);\r\n    hubService\r\n      .openDoor(hub.id, groupId, compartmentNumber, side)\r\n      .then(async (success) => {\r\n        await refresh();\r\n      })\r\n      .catch((error) => {\r\n        if (error?.response?.status === 409) {\r\n          ToastHelpers.error(t(\"order-page.error-opendoor\"));\r\n        } else if (error?.response?.status === 424) {\r\n          ToastHelpers.error(t(\"order-page.error-opendoor-424\"));\r\n        } else {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        }\r\n      })\r\n      .finally(() => {\r\n        setInOpening(false);\r\n      });\r\n  }\r\n\r\n  async function toggleDoor(): Promise<void> {\r\n    if (!hub) {\r\n      return;\r\n    }\r\n\r\n    hubService\r\n      .toggleDoor(hub.id, groupId, compartmentNumber)\r\n      .then(async (success) => {\r\n        ToastHelpers.success(t(\"hub-page.toggle-message\", { state: success ? \"done\" : \"error\" }));\r\n      })\r\n      .catch((error) => {\r\n        if (error?.response?.status === 409) {\r\n          ToastHelpers.error(t(\"order-page.error-opendoor\"));\r\n        } else if (error?.response?.status === 424) {\r\n          ToastHelpers.error(t(\"order-page.error-opendoor-424\"));\r\n        } else {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        }\r\n      });\r\n  }\r\n\r\n  function onDeactivation() {\r\n    if (compartment?.state && hub) {\r\n      hubService\r\n        .deactivateLockerReservation(hub.id, groupId, compartmentNumber)\r\n        .then(async (success) => {\r\n          await refresh();\r\n        })\r\n        .catch((error) => {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        });\r\n    }\r\n  }\r\n\r\n  function onActivation() {\r\n    if (compartment?.state && hub) {\r\n      hubService\r\n        .activateLockerReservation(hub.id, groupId, compartmentNumber)\r\n        .then(async (success) => {\r\n          await refresh();\r\n        })\r\n        .catch((error) => {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        });\r\n    }\r\n  }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport default function HubLegend() {\r\n  const { t } = useTranslation();\r\n  return (\r\n    <div className=\"mt-3\">\r\n      <span>\r\n        <FontAwesomeIcon className=\"text-black bg-white border-1\" icon={[\"far\", \"square\"]} /> {t(\"common.closed\")}\r\n      </span>\r\n      <span className=\"ms-3\">\r\n        <FontAwesomeIcon className=\"text-danger\" icon={[\"fas\", \"square\"]} /> {t(\"common.opened\")}\r\n      </span>\r\n      <span className=\"ms-3\">\r\n        <FontAwesomeIcon className=\"text-success\" icon={[\"fas\", \"square\"]} /> {t(\"hub-page.state-with-reservation\")}\r\n      </span>\r\n      <span className=\"ms-3\">\r\n        <FontAwesomeIcon className=\"text-muted\" icon={[\"fas\", \"square\"]} /> {t(\"hub-page.state-unavailable\")}\r\n      </span>\r\n      <span className=\"ms-3\">\r\n        <FontAwesomeIcon className=\"text-danger bg-white border-1\" icon={[\"far\", \"square\"]} />{\" \"}\r\n        {t(\"hub-page.reservationDenies-label-deactivated\")}\r\n      </span>\r\n    </div>\r\n  );\r\n}\r\n","import { useState } from \"react\";\r\nimport { Address } from \"../services/core/address\";\r\n\r\ninterface Props {\r\n  address: Address;\r\n  intialDetail: boolean;\r\n}\r\nAddressDetailComponent.defaultProps = {\r\n  intialDetail: false,\r\n};\r\nexport default function AddressDetailComponent(props: Props) {\r\n  const { address, intialDetail } = props;\r\n  const [detail, setDetail] = useState<boolean>(intialDetail);\r\n\r\n  return (\r\n    <>\r\n      {address.streetNumber} {address.street}\r\n      <br />\r\n      {address.city}{\" \"}\r\n      {detail ? (\r\n        <>\r\n          <br />\r\n          <span>\r\n            {address.state}, {address.country}, {address.postalCode}\r\n          </span>\r\n        </>\r\n      ) : (\r\n        <button\r\n          className=\"btn btn-sm btn-outline-primary\"\r\n          onClick={() => {\r\n            setDetail((curValue) => !curValue);\r\n          }}\r\n        >\r\n          ...\r\n        </button>\r\n      )}\r\n    </>\r\n  );\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport AddressDetailComponent from \"../../../components/address-detail-component\";\r\nimport HubLocationComponent from \"../../../components/hub-location-component\";\r\nimport LoadingComponent from \"../../../components/loading-component\";\r\nimport { RequestState } from \"../../../services/core/request-state\";\r\nimport StringHelpers from \"../../../services/core/string-helpers\";\r\nimport useMyHub from \"../../../services/hub/useMyHub\";\r\nimport Member from \"../../../services/member/member\";\r\nimport memberService from \"../../../services/member/member-service\";\r\nimport DateHelpers from \"../../../services/core/date-helpers\";\r\n\r\ninterface HubStateInformationProps {\r\n  member: Member;\r\n}\r\n\r\ninterface IParamTypes {\r\n  hubId: string;\r\n}\r\n\r\nexport default function HubStateInformation(props: HubStateInformationProps) {\r\n  const { member } = props;\r\n\r\n  const { hubId } = useParams<IParamTypes>();\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n  const { hub, requestState } = useMyHub({ hubId: hubId, onErrorNotificationMessage: t(\"hub-page.error-refresh\") });\r\n\r\n  const [isLocketgoHubAdmin, setIsLocketgoHubAdmin] = useState<boolean>(false);\r\n  const [isHubAdmin, setIsHubAdmin] = useState<boolean>(false);\r\n\r\n  const loading = requestState === RequestState.Loading;\r\n\r\n  useEffect(() => {\r\n    setIsLocketgoHubAdmin(memberService.isLocketgoHubAdmin(member));\r\n    setIsHubAdmin(memberService.isHubContributor(member, hub?.id));\r\n  }, [member]);\r\n\r\n  return (\r\n    <div className=\"row hub-infos\">\r\n      <div className=\"col-12\">\r\n        <div className=\"card\">\r\n          <div className=\"card-body\">\r\n            {loading && <LoadingComponent loading={loading} />}\r\n            {!loading && (\r\n              <>\r\n                <div className=\"row\">\r\n                  <div className=\"col-6\">\r\n                    {hub ? <HubLocationComponent hub={hub} /> : <p>{t(\"hub-page.no-hub-message\")}</p>}\r\n                    {hub?.private && <FontAwesomeIcon className=\"ms-2\" icon={[\"fas\", \"user-lock\"]} />}\r\n                    {hub && isHubAdmin && (\r\n                      <>\r\n                        {hub.lastSynchronization && (\r\n                          <>\r\n                            <br />\r\n                            <span>\r\n                              {t(\"hub-page.last-synchronization\")}{\" \"}\r\n                              {DateHelpers.formatDateTime(new Date(hub.lastSynchronization), DateHelpers.UserTimeZone)}\r\n                            </span>\r\n                          </>\r\n                        )}\r\n                        {hub.version && (\r\n                          <>\r\n                            <br />\r\n                            <span>\r\n                              Version:{\" \"}\r\n                              {DateHelpers.formatDateTime(new Date(hub.version.substring(0, 19) + \"+00:00\"), DateHelpers.UserTimeZone)}\r\n                            </span>\r\n                          </>\r\n                        )}\r\n                      </>\r\n                    )}\r\n                  </div>\r\n\r\n                  {hub?.address && (\r\n                    <div className=\"col-6\">{hub ? <AddressDetailComponent intialDetail={true} address={hub.address} /> : <></>}</div>\r\n                  )}\r\n                  {hub && hub.computerMetrics && isLocketgoHubAdmin && (\r\n                    <>\r\n                      <div className=\"col-6\">\r\n                        <hr></hr>\r\n                        <h5>Computer metrics</h5>\r\n                        <span>\r\n                          {t(\"hub-page.computerMetrics-cpuTemp\")} {roundValue(hub.computerMetrics.cpuTemperature, 1)} C°\r\n                        </span>\r\n                        <br />\r\n                        <span>\r\n                          {t(\"hub-page.computerMetrics-cpuUsed\")} {roundValue(hub.computerMetrics.cpuPercentage, 1)}%\r\n                        </span>\r\n                        <br />\r\n                        <span>\r\n                          {t(\"hub-page.computerMetrics-memUsed\")} {Math.round(hub.computerMetrics.memUsed)} /{\" \"}\r\n                          {Math.round(hub.computerMetrics.memTotal)} MB ({roundValue(hub.computerMetrics.memUsedPercentage, 1)}%)\r\n                        </span>\r\n                        <br />\r\n                        <span>\r\n                          {t(\"hub-page.computerMetrics-diskUsed\")} {Math.round(hub.computerMetrics.diskUsed)} /{\" \"}\r\n                          {Math.round(hub.computerMetrics.diskTotal)} MB ({roundValue(hub.computerMetrics.diskUsedPercentage, 1)}%)\r\n                        </span>\r\n                      </div>\r\n                    </>\r\n                  )}\r\n                </div>\r\n                <div className=\"row\">\r\n                  <div className=\"col-12\">\r\n                    <button\r\n                      className=\"btn btn-sm btn-primary float-end\"\r\n                      onClick={(ev) => {\r\n                        ev.stopPropagation();\r\n                        history.push(`/hubs/${hubId}/activities`);\r\n                      }}\r\n                    >\r\n                      {t(\"hub-page.history\")}\r\n                    </button>\r\n                  </div>\r\n                </div>\r\n              </>\r\n            )}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction roundValue(value: string, numberOfDigits: number): string {\r\n  return Number.parseFloat(value).toFixed(numberOfDigits);\r\n}\r\n","import { Dropdown } from \"bootstrap\";\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nenum Side {\r\n    Front = \"front\",\r\n    Back = \"back\",\r\n}\r\n  \r\ninterface IDropdownSideProps {\r\n    onChange: (side: Side) => void;\r\n}\r\n\r\nfunction DropdownSide(props: IDropdownSideProps) {\r\n    const { onChange } = props;\r\n  \r\n    const [state, setState] = useState<Side>(Side.Front);\r\n    const [dropdown, setDropdown] = useState<Dropdown | null>(null);\r\n    const ddRef = useRef(null);\r\n  \r\n    const { t } = useTranslation();\r\n  \r\n    useEffect(() => {\r\n      if (!dropdown) {\r\n        setDropdown(new Dropdown(ddRef.current || \"\", {}));\r\n      }\r\n    }, [dropdown]);\r\n  \r\n    const onDropdownClick = () => {\r\n      dropdown?.show();\r\n    };\r\n  \r\n    const onItemClick = (newSide: Side) => {\r\n      if (state !== newSide) {\r\n        setState(newSide);\r\n        onChange(newSide);\r\n      }\r\n  \r\n      dropdown?.hide();\r\n    };\r\n  \r\n    return (\r\n      <div className=\"dropdown ms-2\">\r\n        <button\r\n          className=\"btn btn-outline-primary dropdown-toggle\"\r\n          type=\"button\"\r\n          data-bs-toggle=\"dropdown\"\r\n          ref={ddRef}\r\n          aria-expanded=\"false\"\r\n          onClick={onDropdownClick}\r\n        >\r\n          {t(`hubs-page.dropdown-side-${state.toString()}`)}\r\n        </button>\r\n        <ul className=\"dropdown-menu\" aria-labelledby=\"dropdown1\">\r\n          {Object.values(Side).map((state: Side) => {\r\n            return (\r\n              <li key={state}>\r\n                <button\r\n                  className=\"dropdown-item\"\r\n                  onClick={() => {\r\n                    onItemClick(state);\r\n                  }}\r\n                >\r\n                  {t(`hubs-page.dropdown-side-${state}`)}\r\n                </button>\r\n              </li>\r\n            );\r\n          })}\r\n        </ul>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  export default DropdownSide;","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ninterface IProp {\r\n  opened: boolean;\r\n  disabled: boolean;\r\n}\r\n\r\nLockComponent.defaultProps = {\r\n  opened: false,\r\n  disabled: false,\r\n};\r\nexport default function LockComponent(props: IProp) {\r\n  const { opened, disabled } = props;\r\n\r\n  return (\r\n    <FontAwesomeIcon\r\n      className={\"lock\" + (opened ? \" opened\" : \"\") + (disabled ? \" disabled\" : \"\")}\r\n      icon={[\"fas\", opened ? \"lock-open\" : \"lock\"]}\r\n    />\r\n  );\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Compartment, CompartmentStates } from \"../../services/hub/compartment\";\r\nimport { CompartmentSize } from \"../../services/hub/compartmentSize\";\r\nimport LockComponent from \"../lock-component\";\r\nimport { MyHub } from \"../../services/hub/hub\";\r\nimport { Group } from \"../../services/hub/group\";\r\n\r\ninterface LockerProps {\r\n  hub: MyHub;\r\n  group: Group;\r\n  compartment: Compartment;\r\n  compartmentSizes: CompartmentSize[];\r\n  onCompartmentSelected: (group: Group, compartment: Compartment) => void;\r\n}\r\n\r\nfunction Locker(props: LockerProps) {\r\n  const { hub, group, compartment, compartmentSizes, onCompartmentSelected } = props;\r\n\r\n  const reservation = hub.reservations.find(\r\n    (r) =>\r\n      r.groupId === group.id &&\r\n      r.compartmentNumber === compartment.number &&\r\n      Date.parse(r.start) < Date.now() &&\r\n      Date.parse(r.end) > Date.now()\r\n  );\r\n  const isOpened = compartment.state === CompartmentStates.Opened;\r\n  const isDeactivated = hub?.reservationDenies?.some(\r\n    (r) => r.compartmentNumber === compartment.number && r.groupId === group.id && r.hubId === hub.id\r\n  );\r\n  const compartmentName = group.id + compartment.number;\r\n  var compartmentSize = compartmentSizes.find((cs) => cs.id === compartment.sizeId);\r\n  const compartmentHeight = (compartmentSize ? compartmentSize.height * 7.3 : 50) + \"px\";\r\n\r\n  let kioskSize: CompartmentSize | undefined = undefined;\r\n  if (hub.kiosk && hub.kiosk.sizeId && hub.kiosk.position === compartmentName) {\r\n    kioskSize = compartmentSizes.find((cs) => cs.id === hub.kiosk?.sizeId);\r\n  }\r\n  const kioskHeight = (kioskSize ? kioskSize.height * 7.3 : 50) + \"px\";\r\n\r\n  const showObjectDetected = hub.flowConfigs.isRiderLocker || hub.id === \"swych-locker\" || hub.flowConfigs.hasObjectDetection;\r\n\r\n  return (\r\n    <div key={compartmentName}>\r\n      {/* Kiosk */}\r\n      {kioskSize && (\r\n        <div key={\"kiosk\" + compartmentName} style={{ height: kioskHeight }} className={\"panel-kiosk\"}>\r\n          <div className=\"kiosk\"></div>\r\n          {/* <span className=\"item-number float-start\">{compartment.number}</span> */}\r\n        </div>\r\n      )}\r\n\r\n      {/* Compartment */}\r\n      <div\r\n        style={{ height: compartmentHeight }}\r\n        className={\r\n          \"panel-compartment clickable\" +\r\n          (reservation ? \" reservation\" : \"\") +\r\n          (isOpened ? \" opened\" : \" closed\") +\r\n          (isDeactivated ? \" disabled\" : \"\")\r\n        }\r\n        onClick={() => {\r\n          onCompartmentSelected(group, compartment);\r\n        }}\r\n      >\r\n        <div className=\"row\">\r\n          <div className=\"col-12 text-center\">\r\n            <span className=\"item-number float-start\">{compartment.number}</span>\r\n\r\n            <span className={\"float-end item-lock\" + (isOpened ? \" opened\" : \" closed\")}>\r\n              {reservation?.paymentId && <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"credit-card\"]} />}\r\n\r\n              {showObjectDetected && (\r\n                <FontAwesomeIcon className=\"me-2\" style={{ opacity: !compartment.isObjectDetected ? 0.2 : 1 }} icon={[\"fas\", \"cube\"]} />\r\n              )}\r\n\r\n              <LockComponent opened={isOpened} disabled={hub.state !== \"Online\" || group.state !== \"Online\"} />\r\n            </span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default Locker;\r\n","import { useEffect, useState } from \"react\";\r\nimport { RequestState } from \"../core/request-state\";\r\nimport ToastHelpers from \"../core/toast-helpers\";\r\nimport { CompartmentSize } from \"./compartmentSize\";\r\nimport compartmentSizeService from \"./compartmentSize-service\";\r\n\r\ninterface IProps {\r\n  onErrorNotificationMessage: string;\r\n}\r\n\r\nexport default function useCompartmentSizes(props: IProps) {\r\n  const { onErrorNotificationMessage } = props;\r\n\r\n  const [requestState, setRequestState] = useState<RequestState>(RequestState.Loading);\r\n  const [error, setError] = useState<string>(\"\");\r\n  const [compartmentSizes, setCompatmentSizes] = useState<Array<CompartmentSize>>([]);\r\n\r\n  useEffect(\r\n    () => {\r\n      refresh();\r\n    },\r\n    // eslint-disable-next-line\r\n    []\r\n  );\r\n\r\n  function refresh() {\r\n    compartmentSizeService\r\n      .getCompartmentSizes()\r\n      .then((compartmentSizes: Array<CompartmentSize>) => {\r\n        setCompatmentSizes(compartmentSizes);\r\n        setRequestState(RequestState.Success);\r\n      })\r\n      .catch((e) => {\r\n        setRequestState(RequestState.Failure);\r\n        setError(e);\r\n\r\n        if (onErrorNotificationMessage) {\r\n          ToastHelpers.error(onErrorNotificationMessage);\r\n        }\r\n      });\r\n  }\r\n\r\n  return { compartmentSizes, requestState, error, refresh };\r\n}\r\n","import \"./hub-page.scss\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, useParams } from \"react-router-dom\";\r\nimport { SyncButtonComponent } from \"../../components/button-component\";\r\nimport { Compartment } from \"../../services/hub/compartment\";\r\nimport { Group } from \"../../services/hub/group\";\r\nimport useMyHub from \"../../services/hub/useMyHub\";\r\nimport Member from \"../../services/member/member\";\r\nimport HubCompartmentDetail from \"./hub-compartment-detail\";\r\nimport HubLegend from \"./hub-details/hub-legend\";\r\nimport HubOpenAllDoor from \"./hub-details/hub-open-all-door\";\r\nimport HubStateInformation from \"./hub-details/hub-state-information\";\r\nimport DropdownSide from \"../../components/hub/rider-lockers/dropdown-side-component\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport Locker from \"../../components/hub/locker-component\";\r\nimport { YesNoComponent } from \"../../components/yesno-component\";\r\nimport useCompartmentSizes from \"../../services/hub/useCompartmentSizes\";\r\n\r\ninterface IParamTypes {\r\n  hubId: string;\r\n}\r\n\r\ntype HubPageProps = {\r\n  member: Member;\r\n};\r\n\r\nexport default function HubPage(props: HubPageProps) {\r\n  const { member } = props;\r\n  const { hubId } = useParams<IParamTypes>();\r\n  const { t } = useTranslation();\r\n\r\n  const { hub, refresh } = useMyHub({ hubId: hubId, onErrorNotificationMessage: t(\"hub-page.error-refresh\") });\r\n  const { compartmentSizes } = useCompartmentSizes({ onErrorNotificationMessage: t(\"hub-page.error-refresh\") });\r\n\r\n  const [selectedGroupId, setSelectedGroupId] = useState<string>(\"\");\r\n  const [selectedCompartmentNumber, setSelectedCompartmentNumber] = useState<string>(\"\");\r\n  const [selectedSide, setSelectedSide] = useState<string>(\"front\");\r\n  const [showOpenAllDoors, setShowOpenAllDoors] = useState<boolean>(false);\r\n  const [isActivateAllDoors, setIsActivateAllDoors] = useState<boolean>(false);\r\n  const [isDeactivateAllDoors, setIsDeactivateAllDoors] = useState<boolean>(false);\r\n\r\n  const selectedReservation = hub?.reservations.find(\r\n    (r) =>\r\n      r.groupId === selectedGroupId &&\r\n      r.compartmentNumber === selectedCompartmentNumber &&\r\n      Date.parse(r.start) < Date.now() &&\r\n      Date.parse(r.end) > Date.now()\r\n  );\r\n\r\n  useEffect(() => {\r\n    const timeoutId = setInterval(async () => {\r\n      await refresh();\r\n    }, 5000);\r\n    return () => clearInterval(timeoutId);\r\n  }, [refresh]);\r\n\r\n  const onCompartmentSelected = useCallback((group: Group, compartment: Compartment) => {\r\n    setSelectedGroupId(group.id);\r\n    setSelectedCompartmentNumber(compartment.number);\r\n  }, []);\r\n\r\n  if (isActivateAllDoors) {\r\n    return (\r\n      <YesNoComponent\r\n        headerMsg={t(\"hub-page.msg-activate-all-doors\")}\r\n        onYesClick={() => activateAllDoors(hubId)}\r\n        onNoClick={setIsActivateAllDoors}\r\n      />\r\n    );\r\n  }\r\n\r\n  if (isDeactivateAllDoors) {\r\n    return (\r\n      <YesNoComponent\r\n        headerMsg={t(\"hub-page.msg-deactivate-all-doors\")}\r\n        onYesClick={() => deactivateAllDoors(hubId)}\r\n        onNoClick={setIsDeactivateAllDoors}\r\n      />\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <div className=\"container page hub-page\">\r\n        <div className=\"page-breadcrumb\">\r\n          <ul className=\"breadcrumb\">\r\n            <li className=\"breadcrumb-item active\">\r\n              <Link className=\"\" to=\"/hubs\">\r\n                {t(\"hub-page.hublink\")}\r\n              </Link>\r\n            </li>\r\n            <li className=\"breadcrumb-item active\">{hub ? hub.name : hubId}</li>\r\n          </ul>\r\n        </div>\r\n\r\n        <HubStateInformation member={member} />\r\n\r\n        {/* Groups/Compartments */}\r\n        {hub && hub.groups && hub.groups.length > 0 && (\r\n          <div className=\"card\">\r\n            <div className=\"card-body\">\r\n              <h5 className=\"card-title toolbar\">\r\n                {t(\"hub-page.compartments\")}\r\n                {hub && (\r\n                  <>\r\n                    <SyncButtonComponent className=\"ms-2\" onClick={refresh}></SyncButtonComponent>\r\n\r\n                    <button className=\"ms-2 btn btn-outline-primary\" onClick={() => setShowOpenAllDoors(true)}>\r\n                      {t(\"hub-page.open-all-doors\")}\r\n                    </button>\r\n\r\n                    <button className=\"ms-2 btn btn-outline-primary\" onClick={() => setIsActivateAllDoors(true)}>\r\n                      {t(\"hub-page.activate-all-doors\")}\r\n                    </button>\r\n\r\n                    <button className=\"ms-2 btn btn-outline-primary\" onClick={() => setIsDeactivateAllDoors(true)}>\r\n                      {t(\"hub-page.deactivate-all-doors\")}\r\n                    </button>\r\n\r\n                    {hub.flowConfigs.isRiderLocker && (\r\n                      <DropdownSide\r\n                        onChange={(side: string) => {\r\n                          setSelectedSide(side);\r\n                        }}\r\n                      />\r\n                    )}\r\n                  </>\r\n                )}\r\n              </h5>\r\n\r\n              <HubLegend />\r\n\r\n              <div className=\"row g-1\">\r\n                {hub?.groups?.map((group: Group) => {\r\n                  return (\r\n                    <div key={group.id} className={\"panel-group col-4 col-md-3 col-lg-2\" + (group.state !== \"Online\" ? \" disabled\" : \"\")}>\r\n                      <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                          <div className=\"group-title\">{group.id} </div>\r\n                        </div>\r\n                      </div>\r\n\r\n                      <div className=\"compartments\">\r\n                        {group.compartments.map((compartment: Compartment) => {\r\n                          return (\r\n                            <Locker\r\n                              hub={hub}\r\n                              group={group}\r\n                              compartment={compartment}\r\n                              onCompartmentSelected={onCompartmentSelected}\r\n                              compartmentSizes={compartmentSizes}\r\n                            />\r\n                          );\r\n                        })}\r\n                      </div>\r\n                    </div>\r\n                  );\r\n                })}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        )}\r\n      </div>\r\n\r\n      {selectedGroupId !== \"\" && selectedCompartmentNumber !== \"\" && (\r\n        <HubCompartmentDetail\r\n          hub={hub}\r\n          orderId={selectedReservation?.orderId}\r\n          paymentId={selectedReservation?.paymentId}\r\n          groupId={selectedGroupId}\r\n          compartmentNumber={selectedCompartmentNumber}\r\n          side={selectedSide}\r\n          member={member}\r\n          onClose={clearCompartmentSelected}\r\n          refresh={refresh}\r\n        />\r\n      )}\r\n\r\n      {showOpenAllDoors && <HubOpenAllDoor hub={hub} onClose={() => setShowOpenAllDoors(false)} refresh={refresh} />}\r\n    </div>\r\n  );\r\n\r\n  function clearCompartmentSelected() {\r\n    setSelectedGroupId(\"\");\r\n    setSelectedCompartmentNumber(\"\");\r\n  }\r\n\r\n  async function activateAllDoors(hubId: string) {\r\n    setIsActivateAllDoors(false);\r\n    await hubService.activateAllLockers(hubId);\r\n  }\r\n\r\n  async function deactivateAllDoors(hubId: string) {\r\n    setIsDeactivateAllDoors(false);\r\n    await hubService.deactivateAllLockers(hubId);\r\n  }\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Hub } from \"../services/hub/hub\";\r\nimport { Order } from \"../services/order/order\";\r\nimport { OrderHelpers } from \"../services/order/order-helpers\";\r\nimport { Reservation } from \"../services/order/reservation\";\r\nimport { ReservationState } from \"../services/order/ReservationState\";\r\nimport LockComponent from \"./lock-component\";\r\nimport TimerComponent from \"./timerComponent\";\r\n\r\ninterface LockerSingleReservationMessageProps {\r\n  firstOrder: Order;\r\n  firstReservation: Reservation;\r\n  firstHub: Hub;\r\n  askOpenDoor: (order: Order, reservation: Reservation) => Promise<void>;\r\n  disabled: boolean;\r\n  dateNow: Date;\r\n}\r\n\r\nexport default function LockerSingleReservationMessageComponent({\r\n  firstOrder,\r\n  firstReservation,\r\n  firstHub,\r\n  askOpenDoor,\r\n  disabled,\r\n  dateNow,\r\n}: LockerSingleReservationMessageProps) {\r\n  const { t } = useTranslation();\r\n  const startTime = new Date(firstReservation.start);\r\n  const endTime = new Date(firstReservation.end);\r\n  const isCompleted = firstReservation?.state === ReservationState.Completed || dateNow > endTime;\r\n  const isNotStarted = dateNow < startTime;\r\n  const reservationTimeLeftBeforeStart = (startTime.getTime() - dateNow.getTime()) / 1000;\r\n  //Checking if compartment number is a number, if it is, only show the compartment numb, if not show the col name as well\r\n  const lockernumb = /^\\d+$/.test(firstReservation.compartmentNumber)\r\n    ? firstReservation.compartmentNumber\r\n    : firstReservation.groupId + firstReservation.compartmentNumber;\r\n  return (\r\n    <>\r\n      {isNotStarted && (\r\n        <div className=\"text-center mb-3 d-block\">\r\n          <div className=\"fs-5 start-reservation\">\r\n            <TimerComponent\r\n              timeInSeconds={reservationTimeLeftBeforeStart}\r\n              message=\"my-reservations-page.start-of-reservation\"\r\n              onTimerEnds={() => null}\r\n            />\r\n          </div>\r\n        </div>\r\n      )}\r\n\r\n      {firstOrder.flow.toString() === \"Deliver\" && <div className=\"spacer\"></div>}\r\n\r\n      <h1 className=\"text-center fw-bold mt-0 pt-0 pb-1 mb-3 text-dark\">\r\n        {firstHub.zoneName} - {t(\"common.locker\")} {lockernumb}\r\n      </h1>\r\n      <h2 className=\"text-center fw-bold mt-0 pt-0 pb-1 mb-3 text-dark\">\r\n        {firstReservation.micrositeId == \"yano\" || firstReservation.micrositeId == \"shabono\"\r\n          ? t(\"my-reservations-page.locker-code\") + firstReservation.trackingNumbers[0]\r\n          : \"\"}\r\n      </h2>\r\n      <div className=\"row justify-content-center mb-3\">\r\n        <button\r\n          className=\"btn col-11 btn-primary rounded-3 shadow-lg pushable\"\r\n          onClick={async () => await askOpenDoor(firstOrder, firstReservation)}\r\n          disabled={disabled || isCompleted || isNotStarted}\r\n        >\r\n          <span className=\"front rounded-3\">\r\n            <span className=\"me-2\">\r\n              <LockComponent opened={OrderHelpers.inOpenedState(firstReservation?.state)} />\r\n            </span>\r\n            <span>{t(\"my-reservations-page.open-locker\").toUpperCase()}</span>\r\n          </span>\r\n        </button>\r\n      </div>\r\n    </>\r\n  );\r\n}\r\n","import { useMemo } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Hub } from \"../services/hub/hub\";\r\nimport { HubHelpers } from \"../services/hub/hub-helper\";\r\nimport { Order, OrderFlowStringValue } from \"../services/order/order\";\r\nimport { OrderHelpers } from \"../services/order/order-helpers\";\r\nimport { Reservation } from \"../services/order/reservation\";\r\nimport { OpenDoorComponent, DoorOpenedComponent } from \"./order-page-components\";\r\nimport { StateBadgeComponent } from \"./state-badge-component\";\r\nimport TimerComponent from \"./timerComponent\";\r\n\r\ninterface LockerMultipleReservationsMessageProps {\r\n  askOpenDoor: (order: Order, reservation: Reservation) => Promise<void>;\r\n  order: Order | undefined;\r\n  reservation: Reservation;\r\n  hub: Hub | undefined;\r\n  reservationInOpening: null;\r\n  reservationIsActive: boolean;\r\n  compartmentSizeName?: string;\r\n  helpLink: string;\r\n  hubName?: string;\r\n}\r\n\r\nexport default function LockerMultipleReservationsMessageComponent({\r\n  askOpenDoor,\r\n  order,\r\n  reservation,\r\n  hub,\r\n  reservationInOpening,\r\n  reservationIsActive,\r\n  compartmentSizeName,\r\n  helpLink,\r\n  hubName,\r\n}: LockerMultipleReservationsMessageProps) {\r\n  const { t } = useTranslation();\r\n  const groupId = reservation.groupId;\r\n  const opened = OrderHelpers.inOpenedState(reservation.state);\r\n  const inOpening = reservationInOpening !== null;\r\n  const isPersonalStorage = order?.flow?.toString() === OrderFlowStringValue.PersonalStorage;\r\n\r\n  const reservationTimeLeft = useMemo(() => {\r\n    const dateNow = new Date();\r\n    const until = new Date(reservation.end);\r\n    const milisecondsLeft = until.getTime() - dateNow.getTime();\r\n    return milisecondsLeft / 1000;\r\n  }, [reservation.end]);\r\n\r\n  return (\r\n    <tr key={reservation.id}>\r\n      <td>\r\n        {hubName ?? /^\\d+$/.test(reservation.compartmentNumber)\r\n          ? reservation.compartmentNumber\r\n          : reservation.groupId + reservation.compartmentNumber}\r\n      </td>\r\n      <td>\r\n        <TimerComponent timeInSeconds={reservationTimeLeft} message=\"\" onTimerEnds={() => null} className={\"text-dark\"} />\r\n      </td>\r\n      {compartmentSizeName && <td>{compartmentSizeName}</td>}\r\n      <td>\r\n        <StateBadgeComponent state={reservation.state} isPersonalStorage={isPersonalStorage}></StateBadgeComponent>\r\n      </td>\r\n      <td>\r\n        {hub && HubHelpers.isGroupOnline(hub, groupId) ? (\r\n          <>\r\n            <OpenDoorComponent\r\n              onClick={() => {\r\n                if (order) askOpenDoor(order, reservation);\r\n              }}\r\n              disabled={opened || inOpening || !reservationIsActive}\r\n            ></OpenDoorComponent>\r\n            {!inOpening && opened && reservationIsActive && <DoorOpenedComponent />}\r\n          </>\r\n        ) : (\r\n          <>\r\n            <h4 className=\"text-center fw-bold mt-0 pt-0\">\r\n              {t(\"my-reservations-page.hub-or-group-offline\")}\r\n              <br />\r\n              <a className=\"h4 text-center mt-0 pt-0\" href={helpLink}>\r\n                {helpLink}\r\n              </a>\r\n            </h4>\r\n            <br />\r\n          </>\r\n        )}\r\n      </td>\r\n    </tr>\r\n  );\r\n}\r\n","import \"./my-reservations-page.scss\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport { Reservation } from \"../../services/order/reservation\";\r\nimport { Order, OrderFlowStringValue } from \"../../services/order/order\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport orderService from \"../../services/order/order-service\";\r\nimport { MyReservations } from \"../../services/member/my-reservations\";\r\nimport { YesNoComponent } from \"../../components/yesno-component\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport { HubHelpers } from \"../../services/hub/hub-helper\";\r\nimport compartmentSizeService from \"../../services/hub/compartmentSize-service\";\r\nimport { CompartmentSize } from \"../../services/hub/compartmentSize\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport LockerSingleReservationMessageComponent from \"../../components/locker-single-reservation-message-component\";\r\nimport { ReservationState } from \"../../services/order/ReservationState\";\r\nimport { StateBadgeComponent } from \"../../components/state-badge-component\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport TimerComponent from \"../../components/timerComponent\";\r\nimport LockerMultipleReservationsMessageComponent from \"../../components/locker-multiple-reservations-message-component\";\r\nimport paymentService from \"../../services/payment/payment-service\";\r\nimport { Pricing } from \"../../services/payment/pricing\";\r\nimport { Payment } from \"../../services/payment/payment\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ninterface IParamTypes {\r\n  token?: string;\r\n}\r\n\r\nexport default function MyReservationsPage() {\r\n  const { t } = useTranslation();\r\n  const { token } = useParams<IParamTypes>();\r\n  const language: string = languageService.getLanguage();\r\n  const [loading, setIsLoading] = useState<boolean>(true);\r\n  const [myReservations, setMyReservations] = useState<MyReservations>();\r\n  const [reservationInOpening, setReservationInOpening] = useState<{ order: Order; reservation: Reservation } | null>(null);\r\n  const [compartmentSizes, setCompartmentSizes] = useState<Array<CompartmentSize>>([]);\r\n  const [firstOrder, setFirstOrder] = useState<Order>();\r\n  const [firstReservation, setFirstReservation] = useState<Reservation | undefined>(undefined);\r\n  const [isFirstReservationStarted, setIsFirstReservationStarted] = useState<boolean>(false);\r\n  const [reservationTimeLeft, setReservationTimeLeft] = useState<number | undefined>(undefined);\r\n  const [isAskingReservationEnd, setIsAskingReservationEnd] = useState<boolean>(false);\r\n  const [endPricing, setEndPricing] = useState<Pricing | undefined>(undefined);\r\n  const [payments, setPayments] = useState<Payment[]>([]);\r\n\r\n  useEffect(() => {\r\n    async function setValues() {\r\n      try {\r\n        setEndPricing(await paymentService.getEndNowPricing(token || \"\"));\r\n        const myReservations = await memberService.getMyReservations(token || \"\");\r\n        setPayments(await paymentService.getPayment(token || \"\"));\r\n        if (myReservations) {\r\n          setMyReservations(myReservations);\r\n          let firstOrderTmp = myReservations.orders?.[0];\r\n\r\n          if (firstOrderTmp) {\r\n            await setMyReservationState();\r\n            const reservation = firstOrderTmp.items[0]?.reservation;\r\n            setFirstReservation(reservation);\r\n            const isStarted = dateNow >= new Date(reservation.start);\r\n            setIsFirstReservationStarted(isStarted);\r\n            const end = new Date(reservation.end);\r\n            const milisecondsLeft = end.getTime() - dateNow.getTime();\r\n            setReservationTimeLeft(milisecondsLeft / 1000);\r\n          }\r\n          setFirstOrder(myReservations.orders?.[0]);\r\n        }\r\n        const compartmentSizes = await compartmentSizeService.getCompartmentSizes(token);\r\n        setCompartmentSizes(compartmentSizes);\r\n      } catch (error: any) {\r\n        ToastHelpers.error(t(\"my-reservations-page.error-refresh\", { status: error?.response?.status }));\r\n      } finally {\r\n        setIsLoading(false);\r\n      }\r\n    }\r\n\r\n    setValues();\r\n  }, [t]);\r\n\r\n  const isSingleReservation = myReservations?.orders.length === 1 && firstOrder?.items.length === 1;\r\n  const dateNow = new Date();\r\n\r\n  //This is a checker if the door is opened or closed\r\n  useEffect(() => {\r\n    setInterval(async () => {\r\n      await setMyReservationState();\r\n      setEndPricing(await paymentService.getEndNowPricing(token || \"\"));\r\n    }, 10000);\r\n  }, []);\r\n\r\n  const firstReservationBlock = myReservations?.myReservations?.[0]?.reservationBlock;\r\n  const firstCurrency = myReservations?.myReservations?.[0]?.currency;\r\n  const firstHub = myReservations?.hubs.find((h) => h.id === firstOrder?.hubId);\r\n\r\n  const payed = payments?.some((p) => p.state === \"Completed\");\r\n\r\n  const isCompleted =\r\n    firstReservation && (firstReservation?.state === ReservationState.Completed || dateNow > new Date(firstReservation?.end));\r\n\r\n  const isCompartmentOnline =\r\n    firstHub && firstReservation && HubHelpers.isCompartmentOnline(firstHub, firstReservation.groupId, firstReservation.compartmentNumber);\r\n\r\n  const isSwych = firstReservationBlock?.micrositeId === \"swych\";\r\n\r\n  const helpLink = \"https://locketgo.com/faq.html\";\r\n\r\n  const timeZone = DateHelpers.UserTimeZone;\r\n\r\n  return (\r\n    <div className=\"container page my-reservations-page\">\r\n      <div className=\"col col-lg-8 offset-lg-2\">\r\n        <LoadingComponent loading={loading} />\r\n\r\n        {reservationInOpening && (\r\n          <YesNoComponent\r\n            headerMsg={t(\"my-reservations-page.msg-opendoor\")}\r\n            onYesClick={async () =>\r\n              await onYesClickOpenDoor(reservationInOpening.order, reservationInOpening.reservation, isSingleReservation)\r\n            }\r\n            onNoClick={() => setReservationInOpening(null)}\r\n          />\r\n        )}\r\n\r\n        {isAskingReservationEnd && (\r\n          <YesNoComponent\r\n            isDangerousChoice={true}\r\n            headerMsg={t(\"my-reservations-page.msg-end-reservation\")}\r\n            onYesClick={async () => await endReservation()}\r\n            onNoClick={() => setIsAskingReservationEnd(false)}\r\n          >\r\n            <p>{t(\"my-reservations-page.msg-end-reservation-info\")}</p>\r\n            {!isSwych && (\r\n              <p>\r\n                {t(\"my-reservations-page.msg-end-reservation-new-amount\", {\r\n                  amount: endPricing ? StringHelpers.formatPrice(endPricing.price + endPricing.saleTaxTotal) : \"0.00\",\r\n                  currency: firstCurrency,\r\n                })}\r\n              </p>\r\n            )}\r\n          </YesNoComponent>\r\n        )}\r\n\r\n        {!loading &&\r\n          !reservationInOpening &&\r\n          !isAskingReservationEnd &&\r\n          (isSingleReservation ? (\r\n            <div className=\"page-background-boxing shadow text-center pt-5 pb-5\">\r\n              {/*This section is for personal storage and bopil single reservation*/}\r\n              {firstReservationBlock && (\r\n                <h2 className=\"mb-4\">{language === \"en\" ? firstReservationBlock.name.en : firstReservationBlock.name.fr}</h2>\r\n              )}\r\n              {(!myReservations || !firstOrder || !firstOrder.items.length) && (\r\n                <div className=\"row\">\r\n                  <div className=\"col\">\r\n                    <div className=\"customer card\">\r\n                      <div className=\"card-body text-center\">{t(\"my-reservations-page.no-reservation\")}</div>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              )}\r\n              {firstOrder && (\r\n                <div>\r\n                  {firstHub && firstHub.zoneName && (\r\n                    <>\r\n                      {firstReservation && (\r\n                        <>\r\n                          {isFirstReservationStarted && (\r\n                            <>\r\n                              <span className=\"fs-5 congrats\">{t(\"my-reservations-page.congrats-msg\")}</span>\r\n                              <div className=\"d-flex justify-content-center fs-2 mb-3 mt-2\">\r\n                                <StateBadgeComponent\r\n                                  state={firstReservation.state}\r\n                                  isPersonalStorage={firstOrder.flow.toString() === OrderFlowStringValue.PersonalStorage}\r\n                                ></StateBadgeComponent>\r\n                              </div>\r\n                            </>\r\n                          )}\r\n                          {firstHub.address && firstOrder.flow.toString() === \"Deliver\" && (\r\n                            <span className=\"mt-3 pt-0 pb-1 location\">\r\n                              <FontAwesomeIcon className=\"me-2 mb-1\" icon={[\"fas\", \"map-marker-alt\"]} />\r\n                              {HubHelpers.getAddress(firstHub)}\r\n                            </span>\r\n                          )}\r\n                        </>\r\n                      )}\r\n                    </>\r\n                  )}\r\n\r\n                  {firstReservation && (\r\n                    <>\r\n                      {firstHub && isCompartmentOnline ? (\r\n                        <LockerSingleReservationMessageComponent\r\n                          firstOrder={firstOrder}\r\n                          firstReservation={firstReservation}\r\n                          firstHub={firstHub}\r\n                          askOpenDoor={askOpenDoor}\r\n                          disabled={/*OrderHelpers.inOpenedState(firstReservation.state) ||*/ reservationInOpening != null}\r\n                          dateNow={dateNow}\r\n                        />\r\n                      ) : (\r\n                        <>\r\n                          <h4 className=\"text-center fw-bold mt-0 pt-0\">\r\n                            {t(\"my-reservations-page.hub-or-group-offline\")}\r\n                            <br />\r\n                            <a className=\"h4 text-center mt-0 pt-0\" href={helpLink}>\r\n                              {helpLink}\r\n                            </a>\r\n                          </h4>\r\n                          <br />\r\n                        </>\r\n                      )}\r\n                      {isFirstReservationStarted ? (\r\n                        reservationTimeLeft && (\r\n                          <>\r\n                            {firstReservation.state !== ReservationState.Completed && (\r\n                              <div className=\"fs-5 end-reservation\">\r\n                                <TimerComponent\r\n                                  timeInSeconds={reservationTimeLeft}\r\n                                  message=\"my-reservations-page.end-of-reservation\"\r\n                                  onTimerEnds={() => null}\r\n                                />\r\n                              </div>\r\n                            )}\r\n                            {(!payed || isSwych) && (\r\n                              <div className=\"mt-3 row justify-content-center mb-3\">\r\n                                <button\r\n                                  className=\"btn btn-md col-11 btn-danger rounded-3 shadow-lg pushable\"\r\n                                  onClick={() => setIsAskingReservationEnd(true)}\r\n                                  disabled={isCompleted || !isCompartmentOnline}\r\n                                >\r\n                                  <span className=\"front rounded-3\">\r\n                                    <span>{t(\"my-reservations-page.end-reservation-early\").toUpperCase()}</span>\r\n                                  </span>\r\n                                </button>\r\n                              </div>\r\n                            )}\r\n                          </>\r\n                        )\r\n                      ) : (\r\n                        <div className=\"fs-5 text-center mb-3 end-reservation text-strong-black\">\r\n                          <Trans\r\n                            i18nKey={\"my-reservations-page.end-of-reservation-before-start\"}\r\n                            values={{\r\n                              dateTimeFormat:\r\n                                DateHelpers.toDateString(new Date(firstReservation.end), timeZone) +\r\n                                \" \" +\r\n                                DateHelpers.toHourString(new Date(firstReservation.end), timeZone),\r\n                            }}\r\n                          />\r\n                        </div>\r\n                      )}\r\n                    </>\r\n                  )}\r\n                </div>\r\n              )}\r\n            </div>\r\n          ) : (\r\n            <>\r\n              <h1>{t(\"my-reservations-page.title\")}</h1>\r\n              {(!myReservations || !(myReservations?.orders?.length > 0) || !myReservations?.orders?.some((o) => o.items.length > 0)) && (\r\n                <div className=\"row\">\r\n                  <div className=\"col\">\r\n                    <div className=\"customer card\">\r\n                      <div className=\"card-body text-center\">{t(\"my-reservations-page.no-reservation\")}</div>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              )}\r\n              {myReservations && myReservations.myReservations.length > 0\r\n                ? myReservations?.myReservations.map((myReservation) => {\r\n                    //This section is for personal storage multiple reservations, This part will never be used, because at this time a PS order only have one reservation.\r\n                    const reservationBlock = myReservation.reservationBlock;\r\n\r\n                    const curReservations: Array<Reservation> = [];\r\n                    myReservations.orders.forEach((order) => {\r\n                      order.items.forEach((item) => {\r\n                        if (item.reservation.reservationBlockId === reservationBlock.id) {\r\n                          curReservations.push(item.reservation);\r\n                        }\r\n                      });\r\n                    });\r\n\r\n                    const name = language === \"en\" ? reservationBlock.name.en : reservationBlock.name.fr;\r\n\r\n                    return (\r\n                      <div className=\"row\" key={myReservation.reservationBlock.id}>\r\n                        <div className=\"col\">\r\n                          <div className=\"customer card\">\r\n                            <div className=\"card-body\">\r\n                              {myReservation.micrositeLogoUrl && (\r\n                                <img src={myReservation.micrositeLogoUrl} alt=\"\" className=\"img-logo float-end\" />\r\n                              )}\r\n\r\n                              <h2 className=\"card-title pb-0 mb-0\">\r\n                                {reservationBlock.logoUrl && <img src={reservationBlock.logoUrl} alt=\"\" className=\"app-logo\" />} {name}\r\n                              </h2>\r\n\r\n                              {reservationBlock.startOn && (\r\n                                <div className=\"large mb-2\">{DateHelpers.formatDateTime(new Date(reservationBlock.startOn), timeZone)}</div>\r\n                              )}\r\n\r\n                              <table className=\"table table-sm table-reservations\">\r\n                                <thead>\r\n                                  <tr>\r\n                                    <th>{t(\"my-reservations-page-table-header.locker-id\")}</th>\r\n                                    <th>{t(\"my-reservations-page-table-header.end-time\")}</th>\r\n                                    <th>{t(\"my-reservations-page-table-header.size\")}</th>\r\n                                    <th>{t(\"my-reservations-page-table-header.reservation-state\")}</th>\r\n                                    <th>{t(\"my-reservations-page-table-header.locker-door\")}</th>\r\n                                  </tr>\r\n                                </thead>\r\n                                <tbody>\r\n                                  {curReservations.map((reservation) => {\r\n                                    const order = myReservations.orders.find((o) =>\r\n                                      o.items.find((i) => i.reservation.id === reservation.id)\r\n                                    );\r\n                                    const hub = myReservations.hubs.find((h) => h.id === order?.hubId);\r\n                                    let hubName = hub?.name;\r\n                                    if (hubName?.startsWith(\"Event \")) {\r\n                                      hubName = \"Section \" + hubName.substr(6, hubName.length - 6) + \" - \";\r\n                                    } else {\r\n                                      hubName = \"\";\r\n                                    }\r\n\r\n                                    let compartmentSizeName = name;\r\n                                    if (hub) {\r\n                                      let sizeId = HubHelpers.findGroup(hub, reservation.groupId)?.compartments.find(\r\n                                        (c) => c.number === reservation.compartmentNumber\r\n                                      )?.sizeId;\r\n\r\n                                      var compartmentSize = compartmentSizes.find((cs) => cs.id === sizeId);\r\n                                      compartmentSizeName = compartmentSize?.name.get(language);\r\n                                    }\r\n\r\n                                    const startOn = new Date(reservation.start);\r\n                                    const until = new Date(reservation.end);\r\n                                    const reservationIsActive = dateNow >= startOn && dateNow <= until;\r\n\r\n                                    return (\r\n                                      <LockerMultipleReservationsMessageComponent\r\n                                        order={order}\r\n                                        reservation={reservation}\r\n                                        hub={hub}\r\n                                        askOpenDoor={askOpenDoor}\r\n                                        helpLink={helpLink}\r\n                                        compartmentSizeName={compartmentSizeName}\r\n                                        reservationIsActive={reservationIsActive}\r\n                                        reservationInOpening={reservationInOpening}\r\n                                        hubName={hubName}\r\n                                      />\r\n                                    );\r\n                                  })}\r\n                                </tbody>\r\n                              </table>\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                      </div>\r\n                    );\r\n                  })\r\n                : myReservations?.orders.map((order) => {\r\n                    //This section is for bopil multiple reservations\r\n                    const hub = myReservations.hubs.find((h) => h.id === order?.hubId);\r\n                    return (\r\n                      !!order.items.length && (\r\n                        <div className=\"row\" key={order.id}>\r\n                          <div className=\"col\">\r\n                            <div className=\"customer card\">\r\n                              <div className=\"card-body\">\r\n                                <h1 className=\"mb-1 pb-0 pt-2 ms-4\">{hub?.name}</h1>\r\n                                {hub?.address && (\r\n                                  <span className=\"location ms-4\">\r\n                                    <FontAwesomeIcon className=\"me-2 mb-1\" icon={[\"fas\", \"map-marker-alt\"]} />\r\n                                    {HubHelpers.getAddress(hub)}\r\n                                  </span>\r\n                                )}\r\n\r\n                                <table className=\"table table-sm table-reservations mt-4\">\r\n                                  <thead>\r\n                                    <tr>\r\n                                      <th>{t(\"my-reservations-page-table-header.locker-id\")}</th>\r\n                                      <th>{t(\"my-reservations-page-table-header.end-time\")}</th>\r\n                                      <th>{t(\"my-reservations-page-table-header.reservation-state\")}</th>\r\n                                      <th>{t(\"my-reservations-page-table-header.locker-door\")}</th>\r\n                                    </tr>\r\n                                  </thead>\r\n                                  <tbody>\r\n                                    {order.items.map((orderItem) => {\r\n                                      const reservation = orderItem.reservation;\r\n                                      if (!reservation) {\r\n                                        return null;\r\n                                      }\r\n\r\n                                      let reservationIsActive = false;\r\n                                      if (order.flow.toString() === \"Return\") {\r\n                                        reservationIsActive = reservation.state === ReservationState.New;\r\n                                      } else {\r\n                                        reservationIsActive = reservation.state === ReservationState.ReadyForPickUp;\r\n                                      }\r\n\r\n                                      return (\r\n                                        <LockerMultipleReservationsMessageComponent\r\n                                          order={order}\r\n                                          reservation={reservation}\r\n                                          hub={hub}\r\n                                          askOpenDoor={askOpenDoor}\r\n                                          helpLink={helpLink}\r\n                                          reservationIsActive={reservationIsActive}\r\n                                          reservationInOpening={reservationInOpening}\r\n                                        />\r\n                                      );\r\n                                    })}\r\n                                  </tbody>\r\n                                </table>\r\n                              </div>\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                      )\r\n                    );\r\n                  })}\r\n            </>\r\n          ))}\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  async function endReservation(): Promise<void> {\r\n    if (token) {\r\n      setIsLoading(true);\r\n      setIsAskingReservationEnd(false);\r\n\r\n      if (isSwych) {\r\n        if (firstOrder) {\r\n          await orderService\r\n            .endOrder(firstOrder?.organizationId, firstOrder?.id, token)\r\n            .then(async () => {\r\n              await setMyReservationState();\r\n            })\r\n            .finally(() => setIsLoading(false));\r\n        }\r\n      } else {\r\n        await paymentService\r\n          .endReservationEarly(token)\r\n          .then(async () => {\r\n            await setMyReservationState();\r\n          })\r\n          .finally(() => setIsLoading(false));\r\n      }\r\n    }\r\n  }\r\n\r\n  async function onYesClickOpenDoor(order: Order, reservation: Reservation, isSingleReservation: boolean): Promise<void> {\r\n    if (order && reservation) {\r\n      setIsLoading(true);\r\n      await openDoor(order, reservation)\r\n        .then(async () => {\r\n          if (isSingleReservation) {\r\n            await setMyReservationState();\r\n          } else {\r\n            const myReservations = await memberService.getMyReservations(token || \"\");\r\n            if (myReservations) {\r\n              setMyReservations(myReservations);\r\n            }\r\n          }\r\n        })\r\n        .finally(() => setIsLoading(false));\r\n    } else {\r\n      ToastHelpers.error(t(\"my-reservations-page.error-opendoor-424\"));\r\n    }\r\n  }\r\n\r\n  async function setMyReservationState(): Promise<void> {\r\n    const myReservations = await memberService.getMyReservations(token || \"\");\r\n    if (myReservations) {\r\n      const firstReservationTmp = myReservations.orders[0]?.items[0]?.reservation;\r\n      setFirstReservation(firstReservationTmp);\r\n    }\r\n  }\r\n\r\n  async function askOpenDoor(order: Order, reservation: Reservation): Promise<void> {\r\n    setReservationInOpening({ order, reservation });\r\n  }\r\n\r\n  async function openDoor(order: Order, reservation: Reservation): Promise<void> {\r\n    setReservationInOpening(null);\r\n    let reason = null;\r\n    switch (order.flow.toString()) {\r\n      case \"PersonalStorage\":\r\n        reason = \"PersonalStorage\";\r\n        break;\r\n      case \"Deliver\":\r\n        reason = \"Pickup\";\r\n        break;\r\n      case \"Return\":\r\n        reason = \"Dropoff\";\r\n        break;\r\n    }\r\n\r\n    const orderItem = order.items.find((i) => i.reservation.id === reservation.id);\r\n    let tokenTmp = token || null;\r\n    if (orderItem && reason) {\r\n      await orderService.openDoor(order.organizationId.toString(), order.id, orderItem.id, reason, tokenTmp).catch((error) => {\r\n        switch (error?.response?.status) {\r\n          case 409:\r\n            ToastHelpers.error(t(\"my-reservations-page.error-opendoor\"));\r\n            break;\r\n          case 424:\r\n            ToastHelpers.error(t(\"my-reservations-page.error-opendoor-424\"));\r\n            break;\r\n          case 429:\r\n            ToastHelpers.error(t(\"my-reservations-page.error-opendoor-429\"));\r\n            break;\r\n          default:\r\n            ToastHelpers.error(t(\"common.error-generic\"));\r\n            break;\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\n\r\ninterface IParamTypes {\r\n  micrositeId: string;\r\n}\r\n\r\nexport default function OrderExpiredPage() {\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const { micrositeId } = useParams<IParamTypes>();\r\n\r\n  return (\r\n    <div className=\"container page orders-page\">\r\n      <div className=\"col col-lg-6 offset-lg-3\">\r\n        <div className=\"customer card\">\r\n          <div className=\"card-header align-items-center\">\r\n            <div className=\"d-inline-block\">\r\n              <h2>{t(\"micro-site-reserve-locker.order-expired\")}</h2>\r\n            </div>\r\n            <button className=\"btn-close float-end\" onClick={() => history.push(`/sites/${micrositeId}`)}></button>\r\n          </div>\r\n\r\n          <div className=\"card-body\">\r\n            <div className=\"align-items-center\">\r\n              <button className=\"btn btn-outline-primary me-2\" onClick={() => history.push(`/sites/${micrositeId}`)}>\r\n                {t(\"micro-site-reserve-locker.new-reservation\")}\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import ServicesApiBaseService from \"../services-api-base-service\";\r\nimport { Dashboard } from \"./dashboard\";\r\n\r\nclass AnalyticService extends ServicesApiBaseService {\r\n  async getDashboard(start:string, end:string): Promise<Dashboard | undefined> {\r\n    const dashboard = await this.getObject<Dashboard>(`${this.apiUrl}/analytics?start=${start}&end=${end}`);\r\n    return dashboard;\r\n  }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\nexport default analyticService;\r\n","import { useTranslation } from \"react-i18next\";\r\nimport \"./dashboard-page.scss\";\r\nimport HubLocationComponent from \"../../components/hub-location-component\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport { HubUsage } from \"../../services/analytic/hubUsage\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ntype Props = {\r\n  hubs: Array<Hub> | undefined;\r\n  hubUsages: Array<HubUsage> | undefined;\r\n};\r\n\r\nexport default function HubStatsComponent(props: Props) {\r\n  const { hubs, hubUsages } = props;\r\n  const history = useHistory();\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const hubCount = (hubs && hubs.length) || 0;\r\n  const groupCount = (hubs && hubs.map((item) => item.groups.length).reduce((prev, next) => prev + next)) || 0;\r\n  const used = (hubUsages && hubUsages.length && hubUsages?.map((item) => item.used).reduce((prev, next) => prev + next)) || 0;\r\n  const total = (hubUsages && hubUsages.length && hubUsages?.map((item) => item.total).reduce((prev, next) => prev + next)) || 0;\r\n\r\n  return (\r\n    <>\r\n      {/* Hub Capacity */}\r\n      {hubUsages && hubUsages.length > 0 && (\r\n        <div className=\"hubs-component\">\r\n          <h5>{t(\"analytic.hub-usage-title\")}</h5>\r\n          <div className=\"hubs-usage shadow rounded-3 mt-2 border p-3\">\r\n            <div className=\"col-12\">\r\n              <table className=\"table table-sm table-hover row-clikable\">\r\n                <thead>\r\n                  <tr>\r\n                    <th>{t(\"analytic.hub\")}</th>\r\n                    <th>{t(\"analytic.hub-usage\")}</th>\r\n                    <th></th>\r\n                    <th></th>\r\n                    <th></th>\r\n                  </tr>\r\n                </thead>\r\n                <tbody>\r\n                  {hubUsages.map((hubUsage) => {\r\n                    const percentage = hubUsage.total > 0 ? (hubUsage.used * 100) / hubUsage.total : 0;\r\n                    const progressStyle = { width: percentage + \"%\" };\r\n                    const hub = hubs?.find((h) => h.id === hubUsage.id) || null;\r\n                    const url = hub ? `/hubs/${hub.id}` : \"/\";\r\n\r\n                    return (\r\n                      <tr key={hubUsage.id} onClick={() => history.push(url)}>\r\n                        <td className=\"pt-2 pb-2\">\r\n                          <HubLocationComponent hub={hub} />\r\n                        </td>\r\n                        <td className=\"pt-2 pb-2\">{t(\"analytic.hub-usage-text\", { used: hubUsage.used, total: hubUsage.total })}</td>\r\n                        <td className=\"pt-2 pb-2\">\r\n                          <div className=\"progress\">\r\n                            <div\r\n                              className=\"progress-bar progress-bar-striped\"\r\n                              role=\"progressbar\"\r\n                              style={progressStyle}\r\n                              aria-valuenow={hubUsage.used}\r\n                              aria-valuemin={0}\r\n                              aria-valuemax={hubUsage.total}\r\n                            ></div>\r\n                          </div>\r\n                        </td>\r\n                        <td className=\"pt-2 pb-2\">{StringHelpers.formatNumber(percentage, 0)}%</td>\r\n                        <td className=\"pt-2 pb-2\">\r\n                          <FontAwesomeIcon icon={[\"fas\", \"angle-right\"]} />\r\n                        </td>\r\n                      </tr>\r\n                    );\r\n                  })}\r\n                </tbody>\r\n              </table>\r\n            </div>\r\n\r\n            <div>\r\n              <span>{t(\"analytic.hub-summary-text1\", { hubCount, groupCount })}</span>\r\n              <span className=\"float-end\">{t(\"analytic.hub-summary-text2\", { used, total })}</span>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </>\r\n  );\r\n}\r\n","import { Line } from \"react-chartjs-2\";\r\nimport ChartProps from \"./chart-props\";\r\n\r\nexport default function ChartLine(props: ChartProps) {\r\n  const data = {\r\n    labels: props.labels,\r\n    datasets: [\r\n      {\r\n        data: props.data,\r\n        fill: true,\r\n        backgroundColor: \"rgba(54, 162, 235, 0.2)\",\r\n        borderColor: \"rgba(54, 162, 235, 1)\",\r\n        borderWidth: 1,\r\n        tension: 0.2,\r\n      },\r\n    ],\r\n  };\r\n  const options = {\r\n    plugins: {\r\n      legend: {\r\n        display: false,\r\n      },\r\n    },\r\n    elements: {\r\n      point: {\r\n        radius: 2,\r\n        backgroundColor: \"rgba(54, 162, 235, 0)\",\r\n      },\r\n    },\r\n    interaction: {\r\n      intersect: false,\r\n    },\r\n    scales: {\r\n      x: {\r\n        display: true,\r\n        grid: { display: false, drawTicks: true },\r\n      },\r\n      y: {\r\n        display: true,\r\n        beginAtZero: true,\r\n      },\r\n    },\r\n  };\r\n\r\n  return <Line data={data} options={options} />;\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { ExportButton } from \"../../components/button-component\";\r\nimport { Kpi } from \"../../services/analytic/kpi\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\n\r\ntype Props = {\r\n  model: Kpi;\r\n  isLocketgoAdmin: boolean;\r\n  exportFileName: string;\r\n  title: string;\r\n};\r\n\r\nexport default function OrderStatsTable(props: Props) {\r\n  const { model, isLocketgoAdmin } = props;\r\n  const { t } = useTranslation();\r\n\r\n  let data: Array<any> = [];\r\n\r\n  var resSum: number = 0;\r\n  var confirmedSum: number = 0;\r\n  var totalCadSum: number = 0;\r\n  var totalUSSum: number = 0;\r\n\r\n  props.model.values.forEach((elem) => {\r\n    resSum += elem.count;\r\n    confirmedSum += elem.countPaid;\r\n    totalCadSum += elem.currency == \"CAD\" ? elem.amountGross : 0;\r\n    totalUSSum += elem.currency == \"USD\" ? elem.amountGross : 0;\r\n\r\n    data.push({\r\n      Name: elem.name,\r\n      Reservations: elem.count,\r\n      Confirmed: elem.countPaid,\r\n      \"Total Amount of CAD\": elem.currency == \"CAD\" ? elem.amountGross : 0,\r\n      \"Total Amount of USD\": elem.currency == \"USD\" ? elem.amountGross : 0,\r\n    });\r\n  });\r\n\r\n  data.push({\r\n    Name: \"Total\",\r\n    Reservations: resSum,\r\n    Confirmed: confirmedSum,\r\n    \"Total Amount of CAD\": totalCadSum,\r\n    \"Total Amount of USD\": totalUSSum,\r\n  });\r\n\r\n  props.model.values.sort((a, b) => {\r\n    let dif = b.count - a.count;\r\n    if (dif !== 0) return dif;\r\n    return b.countPaid - a.countPaid;\r\n  });\r\n\r\n  return (\r\n    <div className=\"col-12\">\r\n      <table className=\"table table-sm mt-4\">\r\n        <thead>\r\n          <tr>\r\n            <th>\r\n              {props.title}\r\n              <span className=\"ms-2\">\r\n                <ExportButton data={data} fileName={props.exportFileName} />\r\n              </span>\r\n            </th>\r\n            <th className=\"text-end\">{t(\"analytic.reserved\")}</th>\r\n            {isLocketgoAdmin && <th className=\"text-end\">{t(\"analytic.confirmed\")}</th>}\r\n            <th className=\"text-end\">{t(\"analytic.total-amount\")}</th>\r\n          </tr>\r\n        </thead>\r\n        <tbody>\r\n          {model.values.map((kpi) => {\r\n            return (\r\n              <tr key={kpi.name}>\r\n                <td className=\"pt-2 pb-2\">{kpi.name}</td>\r\n                <td className=\"text-end pt-2 pb-2\">{kpi.count}</td>\r\n                {isLocketgoAdmin && <td className=\"text-end pt-2 pb-2\">{kpi.countPaid}</td>}\r\n                <td className=\"text-end pt-2 pb-2\">\r\n                  {!kpi.currency\r\n                    ? \"N/A\"\r\n                    : t(\"common.price-format\", { price: StringHelpers.formatPrice(kpi.amountGross), currency: kpi.currency })}\r\n                </td>\r\n              </tr>\r\n            );\r\n          })}\r\n        </tbody>\r\n      </table>\r\n    </div>\r\n  );\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { CSVLink } from \"react-csv\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Kpi } from \"../../services/analytic/kpi\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ntype Props = {\r\n  model: Kpi;\r\n  microsites: Array<Microsite>;\r\n  isLocketgoAdmin: boolean;\r\n  exportFileName: string;\r\n  title: string;\r\n};\r\n\r\ntype EventData = {\r\n  Name: string;\r\n  Organization: string;\r\n  Reservations: number;\r\n  Confirmed: number;\r\n  \"Event Started  On\": string;\r\n  \"Total Amount of CAD\": undefined | number;\r\n  \"Total Amount of USD\": undefined | number;\r\n};\r\n\r\nexport default function EventStatsTable(props: Props) {\r\n  const { model, isLocketgoAdmin, microsites, exportFileName } = props;\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const datas: Array<EventData> = [];\r\n\r\n  var resSum: number = 0;\r\n  var confirmedSum: number = 0;\r\n  var totalCadSum: number = 0;\r\n  var totalUSSum: number = 0;\r\n\r\n  model.values.forEach((elem) => {\r\n    const microsite = microsites.find((m) => m.reservationBlocks.some((rb) => rb.id === elem.entityId));\r\n    const reservationBlock = microsite?.reservationBlocks.find((rb) => rb.id === elem.entityId);\r\n\r\n    resSum += elem.count;\r\n    confirmedSum += elem.countPaid;\r\n    totalCadSum += elem.currency == \"CAD\" ? elem.amountGross : 0;\r\n    totalUSSum += elem.currency == \"USD\" ? elem.amountGross : 0;\r\n\r\n    datas.push({\r\n      Name: elem.name,\r\n      Organization: elem.organizationName,\r\n      Reservations: elem.count,\r\n      Confirmed: elem.countPaid,\r\n      \"Event Started  On\": !reservationBlock?.startOn\r\n        ? \"N/A\"\r\n        : DateHelpers.formatDateTime(new Date(reservationBlock.startOn), \"America/Toronto\") || \"N/A\",\r\n      \"Total Amount of CAD\": elem.currency == \"CAD\" ? elem.amountGross : 0,\r\n      \"Total Amount of USD\": elem.currency == \"USD\" ? elem.amountGross : 0,\r\n    });\r\n  });\r\n\r\n  datas.push({\r\n    Name: \"Total\",\r\n    Organization: \"N/A\",\r\n    Reservations: resSum,\r\n    Confirmed: confirmedSum,\r\n    \"Event Started  On\": \"N/A\",\r\n    \"Total Amount of CAD\": totalCadSum,\r\n    \"Total Amount of USD\": totalUSSum,\r\n  });\r\n\r\n  model.values.sort((a, b) => {\r\n    const dataA = datas.find((d) => d.Name === a.name);\r\n    const dataB = datas.find((d) => d.Name === b.name);\r\n\r\n    if (dataA && dataB) {\r\n      const startOnA = new Date(dataA[\"Event Started  On\"]);\r\n      const startOnB = new Date(dataB[\"Event Started  On\"]);\r\n\r\n      if (startOnA.valueOf() && startOnB.valueOf()) {\r\n        const dif = startOnB.valueOf() - startOnA.valueOf();\r\n\r\n        if (dif > 0) return 1;\r\n        if (dif < 0) return -1;\r\n        return 0;\r\n      }\r\n\r\n      if (!startOnA.valueOf() && startOnB.valueOf()) {\r\n        return 1;\r\n      }\r\n\r\n      if (startOnA.valueOf() && !startOnB.valueOf()) {\r\n        return -1;\r\n      }\r\n\r\n      return 0;\r\n    }\r\n\r\n    const dif = b.count - a.count + (b.countPaid - a.countPaid);\r\n    if (dif > 0) return 1;\r\n    if (dif < 0) return -1;\r\n    return 0;\r\n  });\r\n\r\n  return (\r\n    <div className=\"col-12\">\r\n      <table className=\"table table-sm mt-4 table-hover row-clikable\">\r\n        <thead>\r\n          <tr>\r\n            <th>\r\n              {t(\"analytic.events\")}\r\n              <CSVLink\r\n                className=\"btn btn-outline-primary ms-2\"\r\n                title={t(\"common.export\")}\r\n                data={datas}\r\n                enclosingCharacter={`\"`}\r\n                filename={exportFileName}\r\n              >\r\n                <FontAwesomeIcon icon=\"file-export\"></FontAwesomeIcon>\r\n              </CSVLink>\r\n            </th>\r\n            <th className=\"text-end\">{t(\"analytic.organization\")}</th>\r\n            <th className=\"text-end\">{t(\"analytic.start-on\")}</th>\r\n            <th className=\"text-end\">{t(\"analytic.reserved\")}</th>\r\n            {isLocketgoAdmin && <th className=\"text-end\">{t(\"analytic.confirmed\")}</th>}\r\n            <th className=\"text-end\">{t(\"analytic.total-amount\")}</th>\r\n            <th></th>\r\n          </tr>\r\n        </thead>\r\n        <tbody>\r\n          {model.values.map((kpi) => {\r\n            const microsite = microsites.find((m) => m.reservationBlocks.some((rb) => rb.id === kpi.entityId));\r\n            const reservationBlock = microsite?.reservationBlocks.find((rb) => rb.id === kpi.entityId);\r\n            const data = datas.find((d) => d.Name === kpi.name);\r\n            const url =\r\n              microsite && reservationBlock\r\n                ? `/organizations/${microsite?.organizationId}/microsites/${microsite?.id}/reservationBlocks/${reservationBlock?.id}/sales-report`\r\n                : \"/\";\r\n\r\n            if (!reservationBlock) {\r\n              return <></>;\r\n            }\r\n\r\n            return (\r\n              <tr key={kpi.name} onClick={() => history.push(url)}>\r\n                <td className=\"pt-2 pb-2\">{kpi.translatedName[languageService.language] ?? kpi.name}</td>\r\n                <td className=\"text-end pt-2 pb-2\">{kpi.organizationName}</td>\r\n                <td className=\"text-end pt-2 pb-2\">{data?.[\"Event Started  On\"]}</td>\r\n                <td className=\"text-end pt-2 pb-2\">{kpi.count}</td>\r\n                {isLocketgoAdmin && <td className=\"text-end pt-2 pb-2\">{kpi.countPaid}</td>}\r\n                <td className=\"text-end pt-2 pb-2\">\r\n                  {!kpi.currency\r\n                    ? \"N/A\"\r\n                    : t(\"common.price-format\", {\r\n                        price: StringHelpers.formatPrice(kpi.amountGross),\r\n                        currency: kpi.currency,\r\n                      })}\r\n                </td>\r\n                <td className=\"ps-4 pt-2 pb-2\">\r\n                  <FontAwesomeIcon icon={[\"fas\", \"angle-right\"]} />\r\n                </td>\r\n              </tr>\r\n            );\r\n          })}\r\n        </tbody>\r\n      </table>\r\n    </div>\r\n  );\r\n}\r\n","import { useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"./dashboard-page.scss\";\r\nimport analyticService from \"../../services/analytic/analytic-service\";\r\nimport { Dashboard } from \"../../services/analytic/dashboard\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport Member from \"../../services/member/member\";\r\nimport HubStatsComponent from \"./hub-stats-component\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport { SyncButtonComponent } from \"../../components/button-component\";\r\nimport ChartLine from \"../../components/chart-line\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport OrderStatsTable from \"./order-stats-component\";\r\nimport DateRangeComponent, { DateRangeOptions } from \"../../components/dateRangeComponent\";\r\nimport EventStatsTable from \"./event-stats-component\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ntype Props = {\r\n  member: Member;\r\n};\r\n\r\ninterface onDateProps {\r\n  currentStart: string;\r\n  currentEnd: string;\r\n}\r\n\r\nexport default function DashboardPage(props: Props) {\r\n  const { member } = props;\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n\r\n  const [model, setModel] = useState<Dashboard | undefined>(undefined);\r\n  const [hubs, setHubs] = useState<Array<Hub> | null>(null);\r\n  const isHubContributor = memberService.isHubContributor(member);\r\n  const isOrganizationContributor = memberService.isOrganizationContributor(member);\r\n  const isLocketgoAdmin = memberService.isLocketgoAdmin(member);\r\n  const refreshOn = isLocketgoAdmin ? 60000 : 300000;\r\n  const { t } = useTranslation();\r\n\r\n  let now = new Date(Date.now());\r\n  let roundAt5 = 5 - (now.getMinutes() % 5);\r\n  now.setMinutes(now.getMinutes() + roundAt5);\r\n\r\n  let startDate = now;\r\n  let endDate = new Date(now);\r\n  endDate.setDate(endDate.getDate() + 1);\r\n  startDate.setDate(startDate.getDate() - 6);\r\n  let startInit = DateHelpers.toDateString(startDate, DateHelpers.UserTimeZone);\r\n  let endInit = DateHelpers.toDateString(endDate, DateHelpers.UserTimeZone);\r\n\r\n  const [currentStartEnd, setCurrentStartEnd] = useState<onDateProps>({\r\n    currentStart: startInit,\r\n    currentEnd: endInit,\r\n  });\r\n  const [canApply, setCanApply] = useState<boolean>(true);\r\n\r\n  useMemo(async () => {\r\n    await hubService\r\n      .getHubs()\r\n      .then((hubs) => {\r\n        setHubs(hubs);\r\n      })\r\n      .catch(() => {\r\n        ToastHelpers.error(t(\"analytic.error\"));\r\n      })\r\n      .finally(() => setLoading(false));\r\n  }, []);\r\n\r\n  useMemo(async () => {\r\n    if (currentStartEnd) {\r\n      await refresh(currentStartEnd.currentStart, currentStartEnd.currentEnd);\r\n    }\r\n  }, [currentStartEnd]);\r\n\r\n  useEffect(() => {\r\n    const timeoutId = setInterval(async () => {\r\n      if (currentStartEnd) {\r\n        await refresh(currentStartEnd.currentStart, currentStartEnd.currentEnd);\r\n      }\r\n    }, refreshOn);\r\n    return () => clearInterval(timeoutId);\r\n  }, [currentStartEnd]);\r\n\r\n  let dateStringExport = `-${DateHelpers.formatDateEightChar(\r\n    new Date(currentStartEnd.currentStart),\r\n    DateHelpers.UserTimeZone\r\n  )}-${DateHelpers.formatDateEightChar(new Date(currentStartEnd.currentEnd), DateHelpers.UserTimeZone)}`;\r\n\r\n  if (loading) {\r\n    return <LoadingComponent loading={loading} />;\r\n  }\r\n\r\n  const hasEvents = model && model.events?.values?.length > 0;\r\n  const hasOrgs = model && model.organizations?.values?.length > 0;\r\n  const hasHubs = model && model.hubs?.values?.length > 0;\r\n\r\n  return (\r\n    <div className=\"page dashboard-page\">\r\n      {model && (\r\n        <div className=\"container\">\r\n          <h5>{t(\"analytic.reservation-title\")}</h5>\r\n          <SyncButtonComponent\r\n            className=\"ms-2 mb-1\"\r\n            onClick={async () => await refresh(currentStartEnd?.currentStart, currentStartEnd?.currentEnd)}\r\n          />\r\n          {isOrganizationContributor && model.organizations && (\r\n            <>\r\n              <div className=\"section-reservation-detail bg-light shadow rounded-3 border p-3\">\r\n                <div className=\"float-end\">\r\n                  <DateRangeComponent\r\n                    id={\"dateRangeSelection\"}\r\n                    default={DateRangeOptions.Week}\r\n                    onDateChange={onDateChanged}\r\n                    start={currentStartEnd.currentStart}\r\n                    end={currentStartEnd.currentEnd}\r\n                  />\r\n                </div>\r\n\r\n                <ChartLine\r\n                  labels={model.organizations.timeline.map((timeline) => timeline.text)}\r\n                  data={model.organizations.timeline.map((timeline) => timeline.count)}\r\n                />\r\n                {(hasOrgs || hasEvents || hasHubs) && (\r\n                  <div className=\"row justify-content-between mt-4\">\r\n                    <nav>\r\n                      <ul className=\"nav nav-tabs\" id=\"nav-tab\" role=\"tablist\">\r\n                        {hasEvents && (\r\n                          <li className=\"nav-item \">\r\n                            <button\r\n                              className=\"nav-link active\"\r\n                              id=\"nav-events-tab\"\r\n                              data-bs-toggle=\"tab\"\r\n                              data-bs-target=\"#nav-events\"\r\n                              type=\"button\"\r\n                              role=\"tab\"\r\n                              aria-controls=\"nav-events\"\r\n                              aria-selected=\"true\"\r\n                            >\r\n                              {t(\"analytic.events\")}\r\n                            </button>\r\n                          </li>\r\n                        )}\r\n                        {hasOrgs && (\r\n                          <li className=\"nav-item \">\r\n                            <button\r\n                              className={`nav-link  ${!hasEvents ? \"active\" : \"\"}`}\r\n                              id=\"nav-organizations-tab\"\r\n                              data-bs-toggle=\"tab\"\r\n                              data-bs-target=\"#nav-organizations\"\r\n                              type=\"button\"\r\n                              role=\"tab\"\r\n                              aria-controls=\"nav-organizations\"\r\n                              aria-selected={!hasEvents}\r\n                            >\r\n                              {t(\"common.organizations\")}\r\n                            </button>\r\n                          </li>\r\n                        )}\r\n                        {hasHubs && (\r\n                          <li className=\"nav-item \">\r\n                            <button\r\n                              className={`nav-link  ${!hasEvents && !hasOrgs ? \"active\" : \"\"}`}\r\n                              id=\"nav-hubs-tab\"\r\n                              data-bs-toggle=\"tab\"\r\n                              data-bs-target=\"#nav-hubs\"\r\n                              type=\"button\"\r\n                              role=\"tab\"\r\n                              aria-controls=\"nav-hubs\"\r\n                              aria-selected={!hasEvents && !hasOrgs}\r\n                            >\r\n                              {t(\"analytic.hubs\")}\r\n                            </button>\r\n                          </li>\r\n                        )}\r\n                      </ul>\r\n                    </nav>\r\n                    <div className=\"tab-content\" id=\"nav-tabContent\">\r\n                      {hasEvents && (\r\n                        <div className=\"tab-pane fade show shadow active\" id=\"nav-events\" role=\"tabpanel\" aria-labelledby=\"nav-events-tab\">\r\n                          <EventStatsTable\r\n                            title={t(\"analytic.events\")}\r\n                            isLocketgoAdmin={isLocketgoAdmin}\r\n                            model={model.events}\r\n                            microsites={model.microsites}\r\n                            exportFileName={`ExportEvents${dateStringExport}.csv`}\r\n                          ></EventStatsTable>\r\n                        </div>\r\n                      )}\r\n                      {hasOrgs && (\r\n                        <div\r\n                          className={`tab-pane fade shadow ${!hasEvents ? \"show active\" : \"\"}`}\r\n                          id=\"nav-organizations\"\r\n                          role=\"tabpanel\"\r\n                          aria-labelledby=\"nav-organizations-tab\"\r\n                        >\r\n                          <OrderStatsTable\r\n                            title={t(\"common.organizations\")}\r\n                            isLocketgoAdmin={isLocketgoAdmin}\r\n                            model={model.organizations}\r\n                            exportFileName={`ExportOrganizations${dateStringExport}`}\r\n                          ></OrderStatsTable>\r\n                        </div>\r\n                      )}\r\n                      {hasHubs && (\r\n                        <div\r\n                          className={`tab-pane fade shadow ${!hasEvents && !hasOrgs ? \"show active\" : \"\"}`}\r\n                          id=\"nav-hubs\"\r\n                          role=\"tabpanel\"\r\n                          aria-labelledby=\"nav-hubs-tab\"\r\n                        >\r\n                          <OrderStatsTable\r\n                            title={t(\"analytic.hubs\")}\r\n                            isLocketgoAdmin={isLocketgoAdmin}\r\n                            model={model.hubs}\r\n                            exportFileName={`ExportHubs${dateStringExport}`}\r\n                          ></OrderStatsTable>\r\n                        </div>\r\n                      )}\r\n                    </div>\r\n                  </div>\r\n                )}\r\n              </div>\r\n            </>\r\n          )}\r\n          {isHubContributor && <HubStatsComponent hubs={hubs || undefined} hubUsages={model.hubUsages} />}\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n\r\n  async function refresh(startDate: string, endDate: string) {\r\n    await analyticService\r\n      .getDashboard(startDate, endDate)\r\n      .then((dashboard) => {\r\n        if (dashboard) {\r\n          setModel(dashboard);\r\n        }\r\n      })\r\n      .catch(() => {\r\n        ToastHelpers.error(t(\"analytic.error\"));\r\n      });\r\n  }\r\n\r\n  function onDateChanged(start: string, end: string) {\r\n    if (currentStartEnd.currentStart !== start || currentStartEnd.currentEnd !== end) {\r\n      setCurrentStartEnd({ currentStart: start, currentEnd: end });\r\n    }\r\n  }\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport { ActionButtonComponent, AddButtonComponent, EditButtonComponent } from \"../../components/button-component\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport MemberRoleOrganization from \"../../services/member/member-role-organization\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport organizationService from \"../../services/member/organization-service\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\n\r\ninterface Props {\r\n  member: Member | undefined;\r\n}\r\n\r\ninterface IParamTypes {\r\n  organizationId: string;\r\n}\r\n\r\nexport default function MicrositesPage(props: Props) {\r\n  const { t } = useTranslation();\r\n  const { member } = props;\r\n  const language: string = languageService.getLanguage();\r\n  const { organizationId } = useParams<IParamTypes>();\r\n\r\n  const [microsites, setMicrosites] = useState<Array<Microsite>>([]);\r\n  const [currentOrganization, setCurrentOrganization] = useState<MemberRoleOrganization | undefined>(undefined);\r\n\r\n  const history = useHistory();\r\n\r\n  useEffect(\r\n    () => {\r\n      if (member) {\r\n        let organization = member.associatedOrganizations.find((organization) => organization.entity?.id == organizationId);\r\n        if (member && organization && memberService.isOrganizationContributor(member, organizationId)) {\r\n          setCurrentOrganization(organization);\r\n          organizationService\r\n            .getAllMicrositesOfOrganization(organizationId)\r\n            .then((microsites) => {\r\n              setMicrosites(microsites);\r\n              if (!microsites.length && !memberService.isLocketgoAdmin(member)) {\r\n                history.push(`/organizations`);\r\n              }\r\n            })\r\n            .catch(() => {\r\n              ToastHelpers.error(t(\"micro-site-page.microsites-error\"));\r\n            });\r\n        }\r\n      }\r\n    },\r\n    // eslint-disable-next-line\r\n    [currentOrganization]\r\n  );\r\n\r\n  return (\r\n    <>\r\n      {member && currentOrganization && memberService.isOrganizationContributor(member, organizationId) && (\r\n        <div className=\"container pt-3 page\">\r\n          <div className=\"row\">\r\n            <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n              <div className=\"page-breadcrumb\">\r\n                <ul className=\"breadcrumb\">\r\n                  <li className=\"breadcrumb-item active\">\r\n                    <Link to={`/organizations`}>{t(\"common.organizations\")}</Link>\r\n                    {\" / \"}\r\n                    <Link to={`/organizations/${organizationId}`}>{currentOrganization?.entity?.name}</Link>\r\n                    {` / ${t(\"microsites-page.name\")}`}\r\n                  </li>\r\n                </ul>\r\n              </div>\r\n              <div className=\"header\">\r\n                <h1>{`${t(\"microsites-page.title\")}`}</h1>\r\n              </div>\r\n              <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                  <div className=\"col-12\">\r\n                    <table className=\"table table-hover row-clikable table-order\">\r\n                      <thead>\r\n                        <tr>\r\n                          <th>{t(\"common.name\")}</th>\r\n                          <th>\r\n                            {memberService.isLocketgoAdmin(member) && (\r\n                              <AddButtonComponent\r\n                                title={\"Create Microsite\"}\r\n                                onClick={() => history.push(`/database-admin/microsite/${organizationId}/NEWMICROSITE`)}\r\n                              ></AddButtonComponent>\r\n                            )}\r\n                          </th>\r\n                          {memberService.isLocketgoAdmin(member) && <th>LOCKETGO ADMIN EDIT</th>}\r\n                        </tr>\r\n                      </thead>\r\n                      <tbody>\r\n                        {microsites?.map((microsite) => {\r\n                          const isLocketgoAdmin = memberService.isLocketgoAdmin(member);\r\n                          const url = `/organizations/${organizationId}/microsites/${microsite.id}/reservationBlocks`;\r\n                          return (\r\n                            <tr\r\n                              key={microsite.id}\r\n                              onClick={() => {\r\n                                isLocketgoAdmin ?? history.push(url);\r\n                              }}\r\n                            >\r\n                              <td>{microsite.name.get(language)}</td>\r\n                              <td>\r\n                                <ActionButtonComponent\r\n                                  icon={[\"fas\", \"pen\"]}\r\n                                  title={t(\"events-page.events\")}\r\n                                  onClick={() => {\r\n                                    history.push(url);\r\n                                  }}\r\n                                  className=\"btn btn-primary\"\r\n                                  disabled={false}\r\n                                />\r\n                              </td>\r\n                              {isLocketgoAdmin && (\r\n                                <td>\r\n                                  <ActionButtonComponent\r\n                                    icon={[\"fas\", \"pen\"]}\r\n                                    title={\"Microsite\"}\r\n                                    onClick={() => {\r\n                                      history.push(`/database-admin/microsite/${organizationId}/${microsite.id}`);\r\n                                    }}\r\n                                    className=\"btn btn-primary\"\r\n                                    disabled={false}\r\n                                  />\r\n                                </td>\r\n                              )}\r\n                            </tr>\r\n                          );\r\n                        })}\r\n                      </tbody>\r\n                    </table>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </>\r\n  );\r\n}\r\n","import { useState, useEffect } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\n\r\nexport default function useHubs() {\r\n  const { t } = useTranslation();\r\n\r\n  const [hubs, setHubs] = useState<Array<Hub>>();\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n\r\n  useEffect(() => {\r\n    function get() {\r\n      hubService\r\n        .getHubs()\r\n        .then((hubs) => {\r\n          if (hubs) {\r\n            setHubs(hubs);\r\n          }\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"orders-page.error-refresh\"));\r\n        })\r\n        .finally(() => setLoading(false));\r\n    }\r\n\r\n    get();\r\n  }, [t]);\r\n\r\n  return { hubs, isHubsLoading: loading };\r\n}\r\n","import Member from \"../../services/member/member\";\r\nimport MemberRoleOrganization from \"./member-role-organization\";\r\n\r\nexport default class MemberExtensions {\r\n  static getMemberRoleOrganization(member: Member, organizationId: string): MemberRoleOrganization | undefined {\r\n    return member.associatedOrganizations.find((organization) => organization.entity?.id === organizationId);\r\n  }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { EditButtonComponent } from \"../../components/button-component\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport { MicrositeHelpers } from \"../../services/micro-site/microsite-helpers\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ninterface EventsTableProps {\r\n  microsite: Microsite | undefined;\r\n  isOrgAdmin: boolean;\r\n  isLoading: boolean;\r\n}\r\n\r\ninterface IParamTypes {\r\n  organizationId: string;\r\n  micrositeId: string;\r\n}\r\n\r\nfunction EventsTable(props: EventsTableProps) {\r\n  const { microsite, isOrgAdmin, isLoading } = props;\r\n  const { organizationId, micrositeId } = useParams<IParamTypes>();\r\n  \r\n  const { t } = useTranslation();\r\n  const language: string = languageService.getLanguage();\r\n  const history = useHistory();\r\n\r\n  if (microsite?.reservationBlocks.length === 0) {\r\n    return <div>{t(\"events-page.no-events\")}</div>;\r\n  }\r\n  if (microsite?.reservationBlocks[0]) {\r\n    microsite.reservationBlocks = microsite.reservationBlocks.sort(\r\n      (rb1, rb2) => new Date(rb1.startOn).getTime() - new Date(rb2.startOn).getTime()\r\n    );\r\n  }\r\n  return (\r\n    <table className=\"table table-order\">\r\n      <thead>\r\n        <tr>\r\n          <th>{t(\"common.name\")}</th>\r\n          <th>{t(\"common.price\")}</th>\r\n          <th>{t(\"common.start-on\")}</th>\r\n          <th>{t(\"common.duration\")}</th>\r\n          <th></th>\r\n          {isOrgAdmin && <th></th>}\r\n        </tr>\r\n      </thead>\r\n      <tbody>\r\n        {isLoading && (\r\n          <tr>\r\n            <td colSpan={5} className=\"text-center\">\r\n              <LoadingComponent loading={isLoading} />\r\n            </td>\r\n          </tr>\r\n        )}\r\n        {!isLoading &&\r\n          microsite?.reservationBlocks?.map((reservationBlock) => {\r\n            return (\r\n              reservationBlock &&\r\n              reservationBlock.name.get(language) &&\r\n              reservationBlock.active === true && (\r\n                <tr key={reservationBlock.id}>\r\n                  <td>{reservationBlock.name.get(language)}</td>\r\n                  <td>\r\n                    {t(\"common.price-format\", {\r\n                      price: StringHelpers.formatPrice(reservationBlock.price + reservationBlock.price * reservationBlock.saleTaxRate),\r\n                      currency: microsite.currency,\r\n                    })}\r\n                  </td>\r\n                  <td>\r\n                    {reservationBlock.startOn && DateHelpers.formatDateTime(new Date(reservationBlock.startOn), DateHelpers.UserTimeZone)}\r\n                  </td>\r\n                  <td>{reservationBlock.duration && DateHelpers.formatDuration(reservationBlock.duration)}</td>\r\n                  <td className=\"text-center\">\r\n                    <button\r\n                      className=\"btn btn-primary me-2\"\r\n                      onClick={(ev) => {\r\n                        ev.stopPropagation();\r\n                        history.push(\r\n                          `/organizations/${organizationId}/microsites/${micrositeId}/reservationBlocks/${reservationBlock.id}/reserve-locker`\r\n                        );\r\n                      }}\r\n                      disabled={MicrositeHelpers.reservationBlockIsPassed(reservationBlock)}\r\n                    >\r\n                      {t(\"common.reserve-locker\")}\r\n                    </button>\r\n                  </td>\r\n                  {isOrgAdmin && (\r\n                    <>\r\n                      <td className=\"text-center\">\r\n                        <button\r\n                          title={t(\"event-page.sales\")}\r\n                          className=\"btn btn-outline-primary me-2\"\r\n                          onClick={(ev) => {\r\n                            ev.stopPropagation();\r\n                            history.push(\r\n                              `/organizations/${organizationId}/microsites/${microsite.id}/reservationBlocks/${reservationBlock.id}/sales-report`\r\n                            );\r\n                          }}\r\n                        >\r\n                          <FontAwesomeIcon icon={[\"fas\", \"file-invoice-dollar\"]}></FontAwesomeIcon>\r\n                        </button>\r\n                        <EditButtonComponent\r\n                          url={`/organizations/${organizationId}/microsites/${microsite.id}/reservationBlocks/${reservationBlock.id}`}\r\n                        />\r\n                      </td>\r\n                    </>\r\n                  )}\r\n                </tr>\r\n              )\r\n            );\r\n          })}\r\n      </tbody>\r\n    </table>\r\n  );\r\n}\r\n\r\nexport default EventsTable;\r\n","import { useTranslation } from \"react-i18next\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport useHubs from \"../../components/useEffect/useHubs\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\n\r\ninterface ZoneProps {\r\n  microsite: Microsite | undefined;\r\n  isLoading: boolean;\r\n}\r\n\r\nfunction MicrositeZones(props: ZoneProps) {\r\n  const { t } = useTranslation();\r\n  const { hubs } = useHubs();\r\n\r\n  if (!props.microsite || props.microsite.hubIds.length === 0) {\r\n    return null;\r\n  }\r\n\r\n  const matchingHubs = hubs?.filter((h) => {\r\n    return props.microsite?.hubIds.includes(h.id) && !h.name;\r\n  });\r\n\r\n  if (!matchingHubs || matchingHubs.length === 0) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div className=\"card col-4\">\r\n      <div className=\"card-header align-items-center\">\r\n        <h2>{t(\"events-page.zones\")}</h2>\r\n      </div>\r\n\r\n      <div className=\"card-body\">\r\n        <div className=\"col-12\">\r\n          {props.isLoading && <LoadingComponent loading={props.isLoading} />}\r\n          {!props.isLoading && (\r\n            <ul className=\"\">\r\n              {matchingHubs.map((hub) => {\r\n                return <li className=\"\">{hub?.zoneName}</li>;\r\n              })}\r\n            </ul>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default MicrositeZones;\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, useParams } from \"react-router-dom\";\r\nimport { SyncButtonComponent } from \"../../components/button-component\";\r\nimport HubLocationComponent from \"../../components/hub-location-component\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport useHubs from \"../../components/useEffect/useHubs\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport MemberExtensions from \"../../services/member/member-extensions\";\r\nimport MemberRoleOrganization from \"../../services/member/member-role-organization\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport { MicrositeHelpers } from \"../../services/micro-site/microsite-helpers\";\r\nimport micrositeService from \"../../services/micro-site/microsite-service\";\r\nimport EventsTable from \"./events-table\";\r\nimport MicrositeZones from \"./microsite-zones\";\r\n\r\ninterface Props {\r\n  member: Member | undefined;\r\n}\r\n\r\ninterface IParamTypes {\r\n  organizationId: string;\r\n  micrositeId: string;\r\n}\r\n\r\ninterface ZoneProps {\r\n  microsite: Microsite | undefined;\r\n  isLoading: boolean;\r\n}\r\n\r\nexport default function EventsPage(props: Props) {\r\n  const { t } = useTranslation();\r\n  const { member } = props;\r\n  const { organizationId, micrositeId } = useParams<IParamTypes>();\r\n  const language: string = languageService.getLanguage();\r\n\r\n  const [microsite, setMicrosite] = useState<Microsite | undefined>();\r\n  const [currentOrganization, setCurrentOrganization] = useState<MemberRoleOrganization | undefined>(undefined);\r\n  const { hubs, isHubsLoading } = useHubs();\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n\r\n  const isLoading = useMemo(() => {\r\n    return !isHubsLoading && !loading ? false : true;\r\n  }, [loading, isHubsLoading]);\r\n\r\n  const [isOrgAdmin, setIsOrgAdmin] = useState<boolean>(false);\r\n  const [isOrgContributor, setIsOrgContributor] = useState<boolean>(false);\r\n\r\n  useEffect(\r\n    () => {\r\n      refreshEvents();\r\n    },\r\n    // eslint-disable-next-line\r\n    [currentOrganization]\r\n  );\r\n\r\n  useEffect(\r\n    () => {\r\n      if (member) {\r\n        setIsOrgContributor(memberService.isOrganizationContributor(member, organizationId));\r\n        setIsOrgAdmin(memberService.isOrganizationAdmin(member, organizationId));\r\n      }\r\n    },\r\n    // eslint-disable-next-line\r\n    [member]\r\n  );\r\n\r\n  return (\r\n    <>\r\n      {member && currentOrganization && isOrgContributor && (\r\n        <div className=\"container pt-3 page\">\r\n          <div className=\"row\">\r\n            <div className=\"page-breadcrumb\">\r\n              <ul className=\"breadcrumb\">\r\n                <li className=\"breadcrumb-item active\">\r\n                  <Link to={`/organizations`}>{t(\"common.organizations\")}</Link>\r\n                  {` / `}\r\n                  <Link to={`/organizations/${organizationId}`}>{currentOrganization?.entity?.name}</Link>\r\n                  {` / `}\r\n                  <Link to={`/organizations/${organizationId}/microsites`}>{t(\"microsites-page.name\")}</Link>\r\n                  {` / ${microsite?.name.get(language)}`}\r\n                </li>\r\n              </ul>\r\n            </div>\r\n\r\n            <div className=\"header\">\r\n              <h1>{microsite?.name.get(language).toUpperCase()}</h1>\r\n            </div>\r\n\r\n            <div className=\"card col-6 col-lg-4\">\r\n              <div className=\"card-body\">\r\n                <h5 className=\"card-title d-flex justify-content-between\">\r\n                  <span>{t(\"common.hubs\")}</span>\r\n                </h5>\r\n                <LoadingComponent loading={isHubsLoading} />\r\n                {hubs && !isHubsLoading && (\r\n                  <p className=\"card-text\">\r\n                    {hubs\r\n                      .filter((hub) => microsite?.hubIds.includes(hub.id))\r\n                      .map((hub) => {\r\n                        return (\r\n                          <>\r\n                            <HubLocationComponent hub={hub} />\r\n                            <br />\r\n                          </>\r\n                        );\r\n                      })}\r\n                  </p>\r\n                )}\r\n              </div>\r\n            </div>\r\n\r\n            <MicrositeZones microsite={microsite} isLoading={isLoading} />\r\n\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <h2>{t(\"events-page.events\")}</h2>\r\n              </div>\r\n\r\n              <div className=\"card-body\">\r\n                <div className=\"col-12\">\r\n                  {isOrgAdmin && (\r\n                    <Link className=\"btn btn-primary mb-4\" to=\"reservationBlocks/new\">\r\n                      {t(\"events-page.create-event\")}\r\n                    </Link>\r\n                  )}\r\n\r\n                  <a\r\n                    title={t(\"orders-page.microsite-reservation-button\")}\r\n                    className=\"btn btn-outline-primary mb-4 ms-2\"\r\n                    href={`/sites/${micrositeId}`}\r\n                    target={\"_blank\"}\r\n                    rel=\"noreferrer\"\r\n                  >\r\n                    <FontAwesomeIcon icon={[\"fas\", \"external-link-square-alt\"]} />\r\n                    <span> {t(\"orders-page.microsite-reservation-button\")}</span>\r\n                  </a>\r\n\r\n                  <SyncButtonComponent className=\"mb-4 ms-2\" onClick={() => refreshEvents()} />\r\n                  <EventsTable microsite={microsite} isOrgAdmin={isOrgAdmin} isLoading={isLoading} />\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )}\r\n    </>\r\n  );\r\n\r\n  function refreshEvents() {\r\n    if (member) {\r\n      let organization = MemberExtensions.getMemberRoleOrganization(member, organizationId);\r\n      if (organization && memberService.isOrganizationContributor(member, organizationId)) {\r\n        setCurrentOrganization(organization);\r\n        micrositeService\r\n          .getMicrosite(micrositeId, \"All\")\r\n          .then((microsite) => {\r\n            if (microsite) {\r\n              microsite.reservationBlocks = microsite.reservationBlocks.sort((rb1, rb2) => {\r\n                return MicrositeHelpers.compareReservationBlocks(rb1, rb2) * -1;\r\n              });\r\n              setMicrosite(microsite);\r\n            } else ToastHelpers.error(t(\"events-page.events-page-error-refresh\"));\r\n          })\r\n          .catch((error: any) => {\r\n            if (error?.response?.status === 409) {\r\n              ToastHelpers.error(t(\"events-page.events-page-error-refresh\"));\r\n            } else {\r\n              ToastHelpers.error(t(\"common.error-generic\"));\r\n            }\r\n          })\r\n          .finally(() => {\r\n            setLoading(false);\r\n          });\r\n      }\r\n    }\r\n  }\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Microsite from \"../services/micro-site/microsite\";\r\nimport languageService from \"../services/core/language-service\";\r\n\r\ninterface Props {\r\n  setTargetMicrosite: Function;\r\n  micrositesList: Array<Microsite>;\r\n  targetMicrosite: Microsite | undefined;\r\n}\r\n\r\nfunction MicrositeDropdown(props: Props) {\r\n  const { setTargetMicrosite, micrositesList, targetMicrosite } = props;\r\n\r\n  const language: string = languageService.getLanguage();\r\n  const handleMicrositeChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\r\n    const selectedMicrosite = micrositesList.find((microsite) => microsite.name.get(language) === event.target.value);\r\n    setTargetMicrosite(selectedMicrosite);\r\n  };\r\n\r\n  return (\r\n    <div className=\"d-flex justify-content-center align-items-center bg-light\">\r\n      <select onChange={handleMicrositeChange} className=\"form-select\" aria-label=\"Microsite selection\">\r\n        {micrositesList.map((microsite) => (\r\n          <option key={microsite.id} value={microsite.name.get(language)} selected={targetMicrosite?.id === microsite.id}>\r\n            {microsite.name.get(language)}\r\n          </option>\r\n        ))}\r\n      </select>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default MicrositeDropdown;\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport moment from \"moment\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport { YesNoComponent } from \"../../components/yesno-component\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport micrositeService from \"../../services/micro-site/microsite-service\";\r\nimport useCompartmentSizes from \"../../services/hub/useCompartmentSizes\";\r\nimport { CompartmentSize } from \"../../services/hub/compartmentSize\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport \"./event-page.scss\";\r\nimport { CodeType, MinimalPrice, PricePerHour, PricePerMinute, ResetTime } from \"../../assets/meta-table-keys\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\nimport organizationService from \"../../services/member/organization-service\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport MicrositeDropdown from \"../../components/micrositeDropDown\";\r\nimport { NumberDropDown } from \"../../components/NumberDropdown\";\r\n\r\nenum EventType {\r\n  Duration = \"duration\",\r\n  StartEnd = \"startend\",\r\n  ResetTime = \"resetTime\",\r\n}\r\n\r\ninterface Props {\r\n  member: Member | undefined;\r\n}\r\n\r\ninterface IParamTypes {\r\n  organizationId: string;\r\n  micrositeId: string;\r\n  eventId: string;\r\n}\r\n\r\nexport default function EventPage(props: Props) {\r\n  const { t } = useTranslation();\r\n  const { member } = props;\r\n  const { organizationId, micrositeId, eventId } = useParams<IParamTypes>();\r\n  const language: string = languageService.getLanguage();\r\n\r\n  const { compartmentSizes } = useCompartmentSizes({ onErrorNotificationMessage: t(\"event-page.event-page-error-refresh\") });\r\n  const [micrositeCompartmentSizes, setMicrositeCompartmentSizes] = useState<CompartmentSize[] | undefined>(undefined);\r\n  const [currency, setCurrency] = useState<string>(\"CAD\");\r\n  const [currEventId, setCurrEventId] = useState<string>(eventId);\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [isDeleteReservationBlock, setIsDeleteReservationBlock] = useState<boolean>(false);\r\n  const [eventAlreadyStarted, setEventAlreadyStarted] = useState<boolean>(false);\r\n\r\n  const [nameFrError, setNameFrError] = useState<boolean>(false);\r\n  const [nameEnError, setNameEnError] = useState<boolean>(false);\r\n  const [priceError, setPriceError] = useState<boolean>(false);\r\n  const [saleTaxRateError, setSaleTaxError] = useState<boolean>(false);\r\n  const [availableStartError, setAvailableStartError] = useState<string | undefined>(undefined);\r\n  const [availableEndError, setAvailableEndError] = useState<string | undefined>(undefined);\r\n  const [endOnError, setEndOnError] = useState<string | undefined>(undefined);\r\n  const [startOnError, setStartOnError] = useState<string | undefined>(undefined);\r\n\r\n  const [nameFr, setNameFr] = useState<string | undefined>(undefined);\r\n  const [nameEn, setNameEn] = useState<string | undefined>(undefined);\r\n  const [descriptionFr, setDescriptionFr] = useState<string | undefined>(undefined);\r\n  const [descriptionEn, setDescriptionEn] = useState<string | undefined>(undefined);\r\n  const [logoUrl, setLogoUrl] = useState<string | undefined>(undefined);\r\n  const [price, setPrice] = useState<number>(0);\r\n  const [pricePerHour, setPricePerHour] = useState<number>(0);\r\n  const [pricePerMinute, setPricePerMinute] = useState<number>(0);\r\n  const [minimalPrice, setMinimalPrice] = useState<number>(0);\r\n  const [saleTaxRate, setSaleTaxRate] = useState<number>(0);\r\n  const [startOn, setStartOn] = useState<string | undefined>(undefined);\r\n  const [availableStart, setAvailableStart] = useState<string | undefined>(undefined);\r\n  const [availableEnd, setAvailableEnd] = useState<string | undefined>(undefined);\r\n  const [endOn, setEndOn] = useState<string | undefined>(undefined);\r\n  const [sizeId, setSizeId] = useState<string | undefined>(undefined);\r\n  const [codeType, setCodeType] = useState<string | undefined>(\"none\");\r\n  const [resetTime, setResetTime] = useState<string | undefined>(undefined);\r\n\r\n  const [eventType, setEventType] = useState<EventType>(EventType.Duration);\r\n\r\n  const [durationError, setDurationError] = useState<boolean>(false);\r\n  const [durationDays, setDurationDays] = useState<number>(0);\r\n  const [durationHours, setDurationHours] = useState<number>(0);\r\n  const [durationMinutes, setDurationMinutes] = useState<number>(0);\r\n\r\n  const [isPricedPerHour, setIsPricedPerHour] = useState<boolean>(false);\r\n  const [isPricedPerMinute, setIsPricedPerMinute] = useState<boolean>(false);\r\n  const [isResetTimeInput, setIsResetTimeInput] = useState<boolean>(true);\r\n  const [isFixedPeriod, setIsFixedPeriod] = useState<boolean>(false);\r\n  const [micrositesList, setMicrosites] = useState<Array<Microsite>>();\r\n  const [targetMicrosite, setTargetMicrosite] = useState<Microsite>();\r\n\r\n  const dateTimeNow = () => moment(new Date()).format(\"YYYY-MM-DDTHH:mm\");\r\n\r\n  const history = useHistory();\r\n\r\n  useEffect(\r\n    () => {\r\n      if (compartmentSizes.length > 0) {\r\n        let organization = member && member.associatedOrganizations.find((organization) => organization.entity?.id === organizationId);\r\n        if (member) {\r\n          if (organization && memberService.isOrganizationContributor(member, organizationId)) {\r\n            micrositeService\r\n              .getMicrosite(micrositeId, \"All\")\r\n              .then((microsite) => {\r\n                if (microsite) {\r\n                  setCurrency(microsite.currency);\r\n                  setTargetMicrosite(microsite);\r\n                  micrositeService\r\n                    .getMicrositeSizesIds(microsite)\r\n                    .then((sizeIds) => {\r\n                      let tmpCompartmentSizes = compartmentSizes.filter((size) => sizeIds.has(size.id));\r\n                      setMicrositeCompartmentSizes(tmpCompartmentSizes);\r\n                    })\r\n                    .catch(() => {\r\n                      ToastHelpers.error(t(\"event-page.event-page-error-refresh\"));\r\n                    })\r\n                    .finally(() => {\r\n                      setLoading(false);\r\n                    });\r\n\r\n                  var reservationBlock = microsite.reservationBlocks.find((rb) => rb.id === currEventId);\r\n\r\n                  if (reservationBlock && currEventId !== \"new\") {\r\n                    setNameFr(reservationBlock.name.get(\"fr\"));\r\n                    setNameEn(reservationBlock.name.get(\"en\"));\r\n                    setDescriptionFr(reservationBlock.description.get(\"fr\"));\r\n                    setDescriptionEn(reservationBlock.description.get(\"en\"));\r\n                    setLogoUrl(reservationBlock.logoUrl);\r\n                    setPrice(reservationBlock.price);\r\n                    setSaleTaxRate(reservationBlock.saleTaxRate * 100);\r\n                    setSizeId(reservationBlock.sizeId);\r\n\r\n                    let Hours_Minutes = [\"\"];\r\n                    if (reservationBlock.duration.toString().includes(\".\")) {\r\n                      let days = reservationBlock.duration.toString().split(\".\");\r\n                      setDurationDays(parseInt(days[0]));\r\n                      Hours_Minutes = days[1].split(\":\");\r\n                    } else Hours_Minutes = reservationBlock.duration.toString().split(\":\");\r\n\r\n                    setDurationHours(parseInt(Hours_Minutes[0]));\r\n                    setDurationMinutes(parseInt(Hours_Minutes[1]));\r\n\r\n                    if (reservationBlock.meta) {\r\n                      if (reservationBlock.meta[CodeType]) setCodeType(reservationBlock.meta[CodeType]);\r\n                      if (reservationBlock.meta[MinimalPrice]) setMinimalPrice(parseFloat(reservationBlock.meta[MinimalPrice]));\r\n                      if (reservationBlock.meta[ResetTime]) {\r\n                        setResetTime(reservationBlock.meta[ResetTime]);\r\n                        setEventType(EventType.ResetTime);\r\n                      }\r\n                      if (reservationBlock.meta[PricePerHour]) {\r\n                        setPricePerHour(parseFloat(reservationBlock.meta[PricePerHour]));\r\n                        // setIsPricedPerHour(true);\r\n                      }\r\n                    }\r\n\r\n                    if (reservationBlock.startOn && reservationBlock.availableEnd) {\r\n                      setStartOn(moment(new Date(reservationBlock.startOn)).format(\"YYYY-MM-DDTHH:mm\"));\r\n                      setEndOn(moment(new Date(reservationBlock.availableEnd)).format(\"YYYY-MM-DDTHH:mm\"));\r\n                      setEventType(EventType.StartEnd);\r\n                      // setIsResetTimeInput(false);\r\n                      // setIsDurationInput(false);\r\n                    }\r\n\r\n                    //Get the date and put it in the selected options\r\n                    if (reservationBlock.startOn && reservationBlock.availableEnd && reservationBlock.availableStart) {\r\n                      setAvailableStart(moment(new Date(reservationBlock.availableStart)).format(\"YYYY-MM-DDTHH:mm\"));\r\n\r\n                      if (dateTimeNow() > moment(new Date(reservationBlock.startOn)).format(\"YYYY-MM-DDTHH:mm\"))\r\n                        setEventAlreadyStarted(true);\r\n                    } else {\r\n                      if (reservationBlock.availableStart && reservationBlock.availableEnd) {\r\n                        setIsFixedPeriod(true);\r\n\r\n                        if (dateTimeNow() > moment(new Date(reservationBlock.availableStart)).format(\"YYYY-MM-DDTHH:mm\"))\r\n                          setEventAlreadyStarted(true);\r\n\r\n                        setAvailableStart(moment(new Date(reservationBlock.availableStart)).format(\"YYYY-MM-DDTHH:mm\"));\r\n                        setAvailableEnd(moment(new Date(reservationBlock.availableEnd)).format(\"YYYY-MM-DDTHH:mm\"));\r\n                      } //else if (!reservationBlock.startOn) {\r\n                      //   setAvailableStart(undefined);\r\n                      //   setAvailableEnd(undefined);\r\n                      // }\r\n                    }\r\n                  }\r\n                }\r\n              })\r\n              .catch(() => {\r\n                ToastHelpers.error(t(\"event-page.event-page-error-refresh\"));\r\n                setLoading(false);\r\n              });\r\n          }\r\n        }\r\n      }\r\n    },\r\n    // eslint-disable-next-line\r\n    [compartmentSizes]\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (member) {\r\n      let organization = member.associatedOrganizations.find((organization) => organization.entity?.id == organizationId);\r\n      if (member && organization && memberService.isOrganizationContributor(member, organizationId)) {\r\n        organizationService\r\n          .getAllMicrositesOfOrganization(organizationId)\r\n          .then((microsites) => {\r\n            setMicrosites(microsites);\r\n          })\r\n          .catch(() => {\r\n            ToastHelpers.error(t(\"micro-site-page.microsites-error\"));\r\n          });\r\n      }\r\n    }\r\n  }, []);\r\n\r\n  if (isDeleteReservationBlock) {\r\n    return (\r\n      <div className=\"container page orders-page\">\r\n        <YesNoComponent\r\n          headerMsg={t(\"event-page.event-page-msg-delete-reservationBlock\")}\r\n          onYesClick={() => deleteReservationBlock()}\r\n          onNoClick={setIsDeleteReservationBlock}\r\n        />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"container page orders-page\">\r\n      <div className=\"col\">\r\n        <LoadingComponent loading={loading} />\r\n\r\n        {!loading && (\r\n          <form onSubmit={(ev) => ev.preventDefault()}>\r\n            <div className=\"row\">\r\n              <div className=\"col-12 col-lg-6\">\r\n                <div className=\"card\">\r\n                  <div className=\"card-header align-items-center\">\r\n                    <div className=\"d-inline-block\">\r\n                      <h2>{t(\"event-page.event-page-information\")}</h2>\r\n                    </div>\r\n                    <button\r\n                      className=\"btn-close float-end\"\r\n                      onClick={() => history.push(`/organizations/${organizationId}/microsites/${micrositeId}/reservationBlocks`)}\r\n                    ></button>\r\n                  </div>\r\n\r\n                  <div className=\"card-body\">\r\n                    {/* Name Fr */}\r\n                    <div className=\"mb-3\">\r\n                      <label className=\"form-label\">{t(\"event-page.event-page-create-nameFr\")}</label>\r\n                      <input\r\n                        className=\"form-control\"\r\n                        value={nameFr}\r\n                        onChange={(ev) => onNameChange(ev.target.value, setNameFr, setNameFrError)}\r\n                        required\r\n                        autoFocus={true}\r\n                        disabled={eventAlreadyStarted}\r\n                      />\r\n                      {nameFrError && (\r\n                        <label className=\"error-msg\" id=\"nameFr-Error-Msg\">\r\n                          {t(\"event-page.event-page-error-nameFr\")}\r\n                        </label>\r\n                      )}\r\n                    </div>\r\n\r\n                    {/* Name En */}\r\n                    <div className=\"mb-3\">\r\n                      <label className=\"form-label\">{t(\"event-page.event-page-create-nameEn\")}</label>\r\n                      <input\r\n                        className=\"form-control\"\r\n                        value={nameEn}\r\n                        onChange={(ev) => onNameChange(ev.target.value, setNameEn, setNameEnError)}\r\n                        required\r\n                        disabled={eventAlreadyStarted}\r\n                      />\r\n                      {nameEnError && (\r\n                        <label className=\"error-msg\" id=\"nameEn-Error-Msg\">\r\n                          {t(\"event-page.event-page-error-nameEn\")}\r\n                        </label>\r\n                      )}\r\n                    </div>\r\n\r\n                    {/* Description Fr */}\r\n                    <div className=\"mb-3\">\r\n                      <label className=\"form-label\">{t(\"event-page.event-page-create-descriptionFr\")}</label>\r\n                      <input\r\n                        className=\"form-control\"\r\n                        value={descriptionFr}\r\n                        onChange={(ev) => setDescriptionFr(ev.target.value)}\r\n                        disabled={eventAlreadyStarted}\r\n                      />\r\n                    </div>\r\n\r\n                    {/* Description En */}\r\n                    <div className=\"mb-3\">\r\n                      <label className=\"form-label\">{t(\"event-page.event-page-create-descriptionEn\")}</label>\r\n                      <input\r\n                        className=\"form-control\"\r\n                        value={descriptionEn}\r\n                        onChange={(ev) => setDescriptionEn(ev.target.value)}\r\n                        disabled={eventAlreadyStarted}\r\n                      />\r\n                    </div>\r\n\r\n                    {/* Logo Url */}\r\n                    <div className=\"mb-3\">\r\n                      <label className=\"form-label\">{t(\"event-page.event-page-create-logoUrl\")}</label>\r\n                      <input\r\n                        className=\"form-control\"\r\n                        value={logoUrl}\r\n                        onChange={(ev) => setLogoUrl(ev.target.value)}\r\n                        disabled={eventAlreadyStarted}\r\n                      />\r\n                    </div>\r\n\r\n                    {/* Sale Tax */}\r\n                    <div className=\"mb-3\">\r\n                      <label className=\"form-label\">{t(\"event-page.event-page-create-saleTaxRate\")}</label>\r\n\r\n                      <div className=\"input-group mb-3\">\r\n                        <input\r\n                          type=\"number\"\r\n                          step=\"0.01\"\r\n                          className=\"form-control\"\r\n                          value={saleTaxRate}\r\n                          onChange={(ev) => onSaleTaxChange(ev.target.value)}\r\n                          required\r\n                          disabled={eventAlreadyStarted}\r\n                        />\r\n\r\n                        <span className=\"input-group-append input-group-text\">%</span>\r\n                      </div>\r\n                      {saleTaxRateError && (\r\n                        <label className=\"error-msg\" id=\"saleTaxRate-Error-Msg\">\r\n                          {t(\"event-page.event-page-error-saleTaxRate\")}\r\n                        </label>\r\n                      )}\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"col-12 col-lg-6\">\r\n                <div className=\"card\">\r\n                  <div className=\"card-header align-items-center\">\r\n                    <div className=\"d-inline-block\">\r\n                      <h2>{t(\"event-page.event-page-rules\")}</h2>\r\n                    </div>\r\n                    <button\r\n                      className=\"btn-close float-end\"\r\n                      onClick={() => history.push(`/organizations/${organizationId}/microsites/${micrositeId}/reservationBlocks`)}\r\n                    ></button>\r\n                  </div>\r\n\r\n                  <div className=\"card-body\">\r\n                    {/* Is Priced per hour */}\r\n                    <div className=\"mb-3\">\r\n                      <input\r\n                        type=\"checkbox\"\r\n                        id=\"isPricedPerHour\"\r\n                        onChange={() => onChangeIsPricedPerHour(!isPricedPerHour)}\r\n                        checked={isPricedPerHour}\r\n                        disabled={eventAlreadyStarted}\r\n                      />\r\n                      <label htmlFor=\"isPricedPerHour\" className=\"ms-2\">\r\n                        {t(\"event-page.event-is-priced-per-hour\")}\r\n                      </label>\r\n                    </div>\r\n\r\n                    {/* Is Priced per minute */}\r\n                    <div className=\"mb-3\">\r\n                      <input\r\n                        type=\"checkbox\"\r\n                        id=\"isPricedPerMinute\"\r\n                        onChange={() => onChangeIsPricedPerMinute(!isPricedPerMinute)}\r\n                        checked={isPricedPerMinute}\r\n                        disabled={eventAlreadyStarted}\r\n                      />\r\n                      <label htmlFor=\"isPricedPerMinute\" className=\"ms-2\">\r\n                        {t(\"event-page.event-is-priced-per-minute\")}\r\n                      </label>\r\n                    </div>\r\n\r\n                    {/* Code Type */}\r\n                    <div className=\"mb-3\" id=\"code-type\">\r\n                      <label htmlFor=\"codeTypeSelect\" className=\"form-label\">\r\n                        {t(\"event-page.event-page-create-code-type\")}\r\n                      </label>\r\n                      <select\r\n                        id={\"codeTypeSelect\"}\r\n                        className=\"form-select\"\r\n                        value={codeType}\r\n                        onChange={(ev) => setCodeType(ev.target.value)}\r\n                      >\r\n                        <option key=\"none\" id=\"none\" value=\"none\">\r\n                          {t(\"code-type.none\")}\r\n                        </option>\r\n                        <option key=\"6-digit\" id=\"6-digit\" value=\"6-digit\">\r\n                          {t(\"code-type.6-digit\")}\r\n                        </option>\r\n                        <option key=\"1-to-4\" id=\"1-to-4\" value=\"1-to-4\">\r\n                          {t(\"code-type.only-1-to-4\")}\r\n                        </option>\r\n                      </select>\r\n                    </div>\r\n\r\n                    {/* Price */}\r\n                    {isPricedPerHour || isPricedPerMinute ? (\r\n                      <>\r\n                        {/* Max */}\r\n                        <div className=\"mb-3\">\r\n                          <label className=\"form-label\">{t(\"event-page.event-page-create-price-max\")}</label>\r\n                          <div className=\"input-group\">\r\n                            <input\r\n                              type=\"number\"\r\n                              min=\"0.00\"\r\n                              step=\"0.01\"\r\n                              className=\"form-control\"\r\n                              value={price}\r\n                              onChange={(ev) => onPriceChange(parseFloat(ev.target.value))}\r\n                              disabled={eventAlreadyStarted}\r\n                              required\r\n                            />\r\n\r\n                            <span className=\"input-group-append input-group-text\">$ {currency}</span>\r\n                            {priceError && (\r\n                              <label className=\"error-msg\" id=\"price-Error-Msg\">\r\n                                {t(\"event-page.event-page-error-price\")}\r\n                              </label>\r\n                            )}\r\n                          </div>\r\n                        </div>\r\n\r\n                        {/* Min */}\r\n                        <div className=\"mb-3\">\r\n                          <label className=\"form-label\">{t(\"event-page.event-page-create-price-min\")}</label>\r\n                          <div className=\"input-group\">\r\n                            <input\r\n                              type=\"number\"\r\n                              min=\"0.00\"\r\n                              step=\"0.01\"\r\n                              className=\"form-control\"\r\n                              value={minimalPrice}\r\n                              onChange={(ev) => onPriceChange(parseFloat(ev.target.value), setMinimalPrice)}\r\n                              disabled={eventAlreadyStarted}\r\n                            />\r\n\r\n                            <span className=\"input-group-append input-group-text\">$ {currency}</span>\r\n                            {priceError && (\r\n                              <label className=\"error-msg\" id=\"price-Error-Msg\">\r\n                                {t(\"event-page.event-page-error-price\")}\r\n                              </label>\r\n                            )}\r\n                          </div>\r\n                        </div>\r\n\r\n                        {isPricedPerHour && (\r\n                          <>\r\n                            {/* Price per hour */}\r\n                            <div className=\"mb-3\">\r\n                              <label className=\"form-label\">{t(\"event-page.event-page-create-price-per-hour\")}</label>\r\n                              <div className=\"input-group\">\r\n                                <input\r\n                                  type=\"number\"\r\n                                  min=\"0.00\"\r\n                                  step=\"0.01\"\r\n                                  className=\"form-control\"\r\n                                  value={pricePerHour}\r\n                                  onChange={(ev) => onPriceChange(parseFloat(ev.target.value), setPricePerHour)}\r\n                                  disabled={eventAlreadyStarted}\r\n                                  required\r\n                                />\r\n\r\n                                <span className=\"input-group-append input-group-text\">$ {currency}/h</span>\r\n                                {priceError && (\r\n                                  <label className=\"error-msg\" id=\"price-Error-Msg\">\r\n                                    {t(\"event-page.event-page-error-price\")}\r\n                                  </label>\r\n                                )}\r\n                              </div>\r\n                            </div>\r\n                          </>\r\n                        )}\r\n\r\n                        {isPricedPerMinute && (\r\n                          <>\r\n                            {/* Price per minute */}\r\n                            <div className=\"mb-3\">\r\n                              <label className=\"form-label\">{t(\"event-page.event-page-create-price-per-minute\")}</label>\r\n                              <div className=\"input-group\">\r\n                                <input\r\n                                  type=\"number\"\r\n                                  min=\"0.00\"\r\n                                  step=\"0.01\"\r\n                                  className=\"form-control\"\r\n                                  value={pricePerMinute}\r\n                                  onChange={(ev) => onPriceChange(parseFloat(ev.target.value), setPricePerMinute)}\r\n                                  disabled={eventAlreadyStarted}\r\n                                  required\r\n                                />\r\n\r\n                                <span className=\"input-group-append input-group-text\">$ {currency}/min</span>\r\n                                {priceError && (\r\n                                  <label className=\"error-msg\" id=\"price-Error-Msg\">\r\n                                    {t(\"event-page.event-page-error-price\")}\r\n                                  </label>\r\n                                )}\r\n                              </div>\r\n                            </div>\r\n                          </>\r\n                        )}\r\n                      </>\r\n                    ) : (\r\n                      <div className=\"mb-3\">\r\n                        <label className=\"form-label\">{t(\"event-page.event-page-create-price\")}</label>\r\n                        <div className=\"input-group\">\r\n                          <input\r\n                            type=\"number\"\r\n                            min=\"0.00\"\r\n                            step=\"0.01\"\r\n                            className=\"form-control\"\r\n                            value={price}\r\n                            onChange={(ev) => onPriceChange(parseFloat(ev.target.value))}\r\n                            required\r\n                            disabled={eventAlreadyStarted}\r\n                          />\r\n\r\n                          <span className=\"input-group-append input-group-text\">$ {currency}</span>\r\n                          {priceError && (\r\n                            <label className=\"error-msg\" id=\"price-Error-Msg\">\r\n                              {t(\"event-page.event-page-error-price\")}\r\n                            </label>\r\n                          )}\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n\r\n                    {/* SizeId */}\r\n                    <div className=\"mb-3\" id=\"size\">\r\n                      <label className=\"form-label\">{t(\"event-page.event-page-locker-size\")}</label>\r\n                      <select\r\n                        id={\"sizeInfoSelect\"}\r\n                        className=\"form-select\"\r\n                        value={sizeId}\r\n                        disabled={eventAlreadyStarted}\r\n                        onChange={(ev) => setSizeId(ev.target.value)}\r\n                      >\r\n                        <option key=\"Select_a_size\" id=\"Select_a_size\" value=\"Select a size\" hidden>\r\n                          {t(\"event-page.event-page-no-size-selected\")}\r\n                        </option>\r\n                        {micrositeCompartmentSizes &&\r\n                          micrositeCompartmentSizes.map((compartmentSize: CompartmentSize) => {\r\n                            return (\r\n                              <option key={\"sizeOpt_\" + compartmentSize.id} id={\"sizeOpt_\" + compartmentSize.id} value={compartmentSize.id}>\r\n                                <span>\r\n                                  {compartmentSize?.name.get(language)} - {compartmentSize?.description.get(language)}\r\n                                </span>\r\n                              </option>\r\n                            );\r\n                          })}\r\n                      </select>\r\n                    </div>\r\n\r\n                    {isPricedPerHour || isPricedPerMinute ? (\r\n                      <>\r\n                        <label htmlFor=\"resetTime\">{t(\"event-page.event-page-create-resetting-time\")}</label>\r\n                        <input\r\n                          type=\"time\"\r\n                          id=\"resetTime\"\r\n                          name=\"resetTime\"\r\n                          className=\"form-control\"\r\n                          value={resetTime}\r\n                          onChange={(ev) => setResetTime(ev.target.value)}\r\n                          required\r\n                        />\r\n                      </>\r\n                    ) : (\r\n                      <>\r\n                        <div className=\"mb-3\">\r\n                          <div>\r\n                            <input\r\n                              type=\"radio\"\r\n                              id=\"byDuration\"\r\n                              name=\"reserve\"\r\n                              value=\"duration\"\r\n                              checked={eventType === EventType.Duration}\r\n                              disabled={eventAlreadyStarted}\r\n                              onChange={() => onEventTypeChange(EventType.Duration)}\r\n                            />\r\n                            <label htmlFor=\"byDuration\" className=\"ms-2 me-3\" onClick={() => onEventTypeChange(EventType.Duration)}>\r\n                              {t(\"event-page.event-page-create-reserveByDuration\")}\r\n                            </label>\r\n                          </div>\r\n                          <div>\r\n                            <input\r\n                              type=\"radio\"\r\n                              id=\"byResetTime\"\r\n                              name=\"reserve\"\r\n                              value=\"resetTime\"\r\n                              checked={eventType === EventType.ResetTime}\r\n                              disabled={eventAlreadyStarted}\r\n                              onChange={() => onEventTypeChange(EventType.ResetTime)}\r\n                            />\r\n                            <label htmlFor=\"byResetTime\" className=\"ms-2 me-3\" onClick={() => onEventTypeChange(EventType.ResetTime)}>\r\n                              {t(\"event-page.event-page-create-reserveByResetTime\")}\r\n                            </label>\r\n                          </div>\r\n                          <div>\r\n                            <input\r\n                              type=\"radio\"\r\n                              id=\"byStartEnd\"\r\n                              name=\"reserve\"\r\n                              value=\"startend\"\r\n                              checked={eventType === EventType.StartEnd}\r\n                              disabled={eventAlreadyStarted}\r\n                              onChange={() => onEventTypeChange(EventType.StartEnd)}\r\n                            />\r\n                            <label htmlFor=\"byStartEnd\" className=\"ms-2\" onClick={() => onEventTypeChange(EventType.StartEnd)}>\r\n                              {t(\"event-page.event-page-create-reserveByStart-End\")}\r\n                            </label>\r\n                          </div>\r\n                        </div>\r\n\r\n                        {eventType === EventType.Duration && (\r\n                          <>\r\n                            {/*duration*/}\r\n                            <div className={`ms-4 mb-3 ${eventAlreadyStarted && \"readOnly\"}`} id=\"duration\">\r\n                              <div>\r\n                                <span className=\"d-inline-block\">\r\n                                  <label className=\"me-2\">{t(\"event-page.event-page-create-durationDays\")}</label>\r\n                                  <NumberDropDown\r\n                                    id=\"durationDays\"\r\n                                    min={0}\r\n                                    max={366}\r\n                                    current={durationDays}\r\n                                    disabled={eventAlreadyStarted}\r\n                                    onchange={() => onDurationChange(\"durationDays\")}\r\n                                  />\r\n                                </span>\r\n                                <span className=\"d-inline-block\">\r\n                                  <label className=\"ms-2 me-2\">{t(\"event-page.event-page-create-durationHours\")}</label>\r\n                                  <NumberDropDown\r\n                                    id=\"durationHours\"\r\n                                    min={0}\r\n                                    max={24}\r\n                                    current={durationHours}\r\n                                    disabled={eventAlreadyStarted}\r\n                                    onchange={() => onDurationChange(\"durationHours\")}\r\n                                  />\r\n                                </span>\r\n                                <span className=\"d-inline-block\">\r\n                                  <label className=\"ms-2 me-2\">{t(\"event-page.event-page-create-durationMinutes\")}</label>\r\n                                  <NumberDropDown\r\n                                    id=\"durationMinutes\"\r\n                                    min={0}\r\n                                    max={60}\r\n                                    current={durationMinutes}\r\n                                    disabled={eventAlreadyStarted}\r\n                                    onchange={() => onDurationChange(\"durationMinutes\")}\r\n                                  />\r\n                                </span>\r\n                                {durationError && <label className=\"error-msg\">{t(\"event-page.event-page-error-duration\")}</label>}\r\n                              </div>\r\n                            </div>\r\n                            <div className=\"ms-4 mb-3\">\r\n                              <input\r\n                                type=\"checkbox\"\r\n                                id=\"withAvailableStartEnd\"\r\n                                onChange={() => onFixedPeriod(!isFixedPeriod)}\r\n                                checked={isFixedPeriod}\r\n                                disabled={eventAlreadyStarted}\r\n                              />\r\n                              <label htmlFor=\"withAvailableStartEnd\" className=\"ms-2\">\r\n                                {t(\"event-page.event-page-create-checkbox\")}\r\n                              </label>\r\n                            </div>\r\n                            {isFixedPeriod && (\r\n                              <div className=\"ms-4\">\r\n                                {/* Available Start */}\r\n                                <div className=\"mb-3\">\r\n                                  <label className=\"form-label\">{t(\"event-page.event-page-create-availableStart\")}</label>\r\n                                  <input\r\n                                    id=\"availableStartInput\"\r\n                                    type=\"datetime-local\"\r\n                                    className=\"form-control\"\r\n                                    value={availableStart}\r\n                                    onChange={(ev) => onAvailableStartChange(ev.target.value)}\r\n                                    disabled={eventAlreadyStarted}\r\n                                  />\r\n                                  {availableStartError && <label className=\"error-msg\">{t(availableStartError)}</label>}\r\n                                </div>\r\n\r\n                                {/* Available End */}\r\n                                <div className=\"mb-3\">\r\n                                  <label className=\"form-label\">{t(\"event-page.event-page-create-availableEnd\")}</label>\r\n                                  <input\r\n                                    id=\"availableEndInput\"\r\n                                    type=\"datetime-local\"\r\n                                    className=\"form-control\"\r\n                                    value={availableEnd}\r\n                                    onChange={(ev) => onAvailableEndChange(ev.target.value)}\r\n                                    disabled={eventAlreadyStarted}\r\n                                  />\r\n                                  {availableEndError && <label className=\"error-msg\">{t(availableEndError)}</label>}\r\n                                </div>\r\n                              </div>\r\n                            )}\r\n                          </>\r\n                        )}\r\n                        {eventType === EventType.ResetTime && (\r\n                          <>\r\n                            <div className=\"ms-4 mb-3\">\r\n                              {/*Reset Time*/}\r\n                              <label htmlFor=\"resetTime\">{t(\"event-page.event-page-create-resetting-time\")}</label>\r\n                              <input\r\n                                type=\"time\"\r\n                                id=\"resetTime\"\r\n                                name=\"resetTime\"\r\n                                className=\"form-control\"\r\n                                value={resetTime}\r\n                                onChange={(ev) => setResetTime(ev.target.value)}\r\n                                required\r\n                              />\r\n                            </div>\r\n                            <div className=\"ms-4 mb-3\">\r\n                              <input\r\n                                type=\"checkbox\"\r\n                                id=\"withAvailableStartEnd\"\r\n                                onChange={() => onFixedPeriod(!isFixedPeriod)}\r\n                                checked={isFixedPeriod}\r\n                                disabled={eventAlreadyStarted}\r\n                              />\r\n                              <label htmlFor=\"withAvailableStartEnd\" className=\"ms-2\">\r\n                                {t(\"event-page.event-page-create-checkbox\")}\r\n                              </label>\r\n                            </div>\r\n                            {isFixedPeriod && (\r\n                              <div className=\"ms-4\">\r\n                                {/* Available Start */}\r\n                                <div className=\"mb-3\">\r\n                                  <label className=\"form-label\">{t(\"event-page.event-page-create-availableStart\")}</label>\r\n                                  <input\r\n                                    id=\"availableStartInput\"\r\n                                    type=\"datetime-local\"\r\n                                    className=\"form-control\"\r\n                                    value={availableStart}\r\n                                    onChange={(ev) => onAvailableStartChange(ev.target.value)}\r\n                                    disabled={eventAlreadyStarted}\r\n                                  />\r\n                                  {availableStartError && <label className=\"error-msg\">{t(availableStartError)}</label>}\r\n                                </div>\r\n\r\n                                {/* Available End */}\r\n                                <div className=\"mb-3\">\r\n                                  <label className=\"form-label\">{t(\"event-page.event-page-create-availableEnd\")}</label>\r\n                                  <input\r\n                                    id=\"availableEndInput\"\r\n                                    type=\"datetime-local\"\r\n                                    className=\"form-control\"\r\n                                    value={availableEnd}\r\n                                    onChange={(ev) => onAvailableEndChange(ev.target.value)}\r\n                                    disabled={eventAlreadyStarted}\r\n                                  />\r\n\r\n                                  {availableEndError && <label className=\"error-msg\">{t(availableEndError)}</label>}\r\n                                </div>\r\n                              </div>\r\n                            )}\r\n                          </>\r\n                        )}\r\n                        {eventType === EventType.StartEnd && (\r\n                          <>\r\n                            <div id=\"datesOnly\">\r\n                              {/* Start On */}\r\n                              <div className=\"mb-3\">\r\n                                <label className=\"form-label\">{t(\"event-page.event-page-create-startOn\")}</label>\r\n                                <input\r\n                                  id=\"startOnInput\"\r\n                                  type=\"datetime-local\"\r\n                                  className=\"form-control\"\r\n                                  value={startOn}\r\n                                  onChange={(ev) => onStartOnChange(ev.target.value)}\r\n                                  disabled={eventAlreadyStarted}\r\n                                />\r\n                                {startOnError && <label className=\"error-msg\">{t(startOnError)}</label>}\r\n                              </div>\r\n\r\n                              {/* End On */}\r\n                              <div className=\"mb-3\">\r\n                                <label className=\"form-label\">{t(\"event-page.event-page-create-endOn\")}</label>\r\n                                <input\r\n                                  id=\"EndOnInput\"\r\n                                  type=\"datetime-local\"\r\n                                  className=\"form-control\"\r\n                                  value={endOn}\r\n                                  onChange={(ev) => onEndOnChange(ev.target.value)}\r\n                                  disabled={eventAlreadyStarted}\r\n                                />\r\n                                {endOnError && <label className=\"error-msg\">{t(endOnError)}</label>}\r\n                              </div>\r\n\r\n                              {/* Available Start */}\r\n                              <div className=\"mb-3\">\r\n                                <label className=\"form-label\">{t(\"event-page.event-page-create-availableStart\")}</label>\r\n                                <input\r\n                                  id=\"availableStartInput\"\r\n                                  type=\"datetime-local\"\r\n                                  className=\"form-control\"\r\n                                  value={availableStart}\r\n                                  onChange={(ev) => onAvailableStartChange(ev.target.value)}\r\n                                  disabled={eventAlreadyStarted}\r\n                                />\r\n                                {availableStartError && <label className=\"error-msg\">{t(availableStartError)}</label>}\r\n                              </div>\r\n                            </div>\r\n                          </>\r\n                        )}\r\n                      </>\r\n                    )}\r\n                  </div>\r\n                </div>\r\n              </div>\r\n              <div className=\"row\">\r\n                <div className=\"col-12\">\r\n                  <button\r\n                    className=\"btn btn-md btn-primary\"\r\n                    type=\"submit\"\r\n                    onClick={() => createOrUpdateReservationBlock()}\r\n                    disabled={!isValidData()}\r\n                  >\r\n                    {currEventId === \"cloned-event\" || currEventId === \"new\" ? t(\"create-org.create-org\") : t(\"common.save\")}\r\n                  </button>\r\n\r\n                  <button\r\n                    className=\"btn btn-md btn-outline-primary ms-2\"\r\n                    type=\"submit\"\r\n                    onClick={() => history.push(`/organizations/${organizationId}/microsites/${micrositeId}/reservationBlocks`)}\r\n                  >\r\n                    {t(\"common.cancel\")}\r\n                  </button>\r\n\r\n                  {currEventId !== \"new\" && currEventId !== \"cloned-event\" && (\r\n                    <div className=\"float-end\" style={{ display: \"flex\", flexDirection: \"row\" }}>\r\n                      <MicrositeDropdown\r\n                        setTargetMicrosite={setTargetMicrosite}\r\n                        micrositesList={micrositesList ?? []}\r\n                        targetMicrosite={targetMicrosite}\r\n                      />\r\n                      <button\r\n                        className={`btn btn-md btn-outline-primary float-end`}\r\n                        style={{ marginRight: \"20px\", marginLeft: 10 }}\r\n                        onClick={(e) => {\r\n                          e.stopPropagation();\r\n                          setCurrEventId(\"cloned-event\");\r\n                          var prefix = \"CLONE - \";\r\n                          setNameFr(prefix + nameFr);\r\n                          setNameEn(prefix + nameEn);\r\n                        }}\r\n                        disabled={false}\r\n                      >\r\n                        {t(\"event-page.event-clone\")}\r\n                      </button>\r\n                      <button\r\n                        className={`btn btn-danger float-end`}\r\n                        style={{ marginLeft: 30 }}\r\n                        onClick={() => setIsDeleteReservationBlock(true)}\r\n                        disabled={false}\r\n                      >\r\n                        <FontAwesomeIcon icon={[\"fas\", \"trash-alt\"]} /> {t(\"common.delete\")}\r\n                      </button>\r\n                    </div>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </form>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function onDurationChange(id: string) {\r\n    var select: HTMLSelectElement = document.getElementById(id) as HTMLSelectElement;\r\n\r\n    let tmp = parseInt(select.options[select.selectedIndex].value);\r\n\r\n    if (id === \"durationDays\") {\r\n      setDurationDays(tmp);\r\n    } else if (id === \"durationHours\") {\r\n      setDurationHours(tmp);\r\n    } else if (id === \"durationMinutes\") {\r\n      setDurationMinutes(tmp);\r\n    }\r\n\r\n    if (tmp === 0 || !isDurationValid(tmp)) setDurationError(true);\r\n    else setDurationError(false);\r\n  }\r\n\r\n  function onEventTypeChange(input: EventType) {\r\n    if (currEventId === \"new\") {\r\n      if (input !== EventType.StartEnd) {\r\n        setStartOn(undefined);\r\n        setEndOn(undefined);\r\n        setAvailableStartError(undefined);\r\n        setEndOnError(undefined);\r\n      } else {\r\n        setAvailableEnd(undefined);\r\n      }\r\n      setAvailableStart(undefined);\r\n    }\r\n\r\n    if (input === EventType.Duration) {\r\n      setDurationDays(0);\r\n      setDurationHours(0);\r\n      setDurationMinutes(0);\r\n    } else if (input === EventType.ResetTime) {\r\n      setResetTime(undefined);\r\n    } else {\r\n      setStartOn(undefined);\r\n    }\r\n\r\n    setIsFixedPeriod(false);\r\n    setEventType(input);\r\n  }\r\n\r\n  function isValidData(): boolean {\r\n    if (hasError()) return false;\r\n\r\n    if (eventAlreadyStarted || !nameFr || !nameEn || isNaN(price) || price < 0 || isNaN(saleTaxRate) || sizeId === undefined) return false;\r\n\r\n    if (isPricedPerHour || isPricedPerMinute) {\r\n      if (!resetTime) return false;\r\n    } else {\r\n      switch (eventType) {\r\n        case EventType.Duration:\r\n          if (!isDurationValid()) return false;\r\n          break;\r\n        case EventType.ResetTime:\r\n          if (!resetTime) return false;\r\n          break;\r\n        case EventType.StartEnd:\r\n          if (!startOn || !endOn) return false;\r\n          break;\r\n      }\r\n\r\n      if (isFixedPeriod && (!availableStart || !availableEnd)) return false;\r\n\r\n      if (availableStart && availableEnd) return !(availableStart > availableEnd || dateTimeNow() > availableStart);\r\n\r\n      if (startOn && endOn) return !(startOn > endOn || dateTimeNow() > startOn);\r\n    }\r\n    return true;\r\n  }\r\n\r\n  function onNameChange(value: string, setValue: Function, setError: Function) {\r\n    setValue(value);\r\n    if (!value || value.length === 0) {\r\n      setError(true);\r\n    } else {\r\n      setError(false);\r\n    }\r\n  }\r\n\r\n  function onAvailableStartChange(value: string) {\r\n    setAvailableStart(value);\r\n    if (availableEnd && value) {\r\n      if (dateTimeNow() > value) {\r\n        setAvailableStartError(\"event-page.event-page-error-availableStart-now\");\r\n      } else if (value > availableEnd) {\r\n        setAvailableStartError(\"event-page.event-page-error-availableStart-availableEnd\");\r\n      } else {\r\n        setAvailableStartError(undefined);\r\n      }\r\n    } else {\r\n      setAvailableStartError(undefined);\r\n    }\r\n  }\r\n\r\n  function onAvailableEndChange(value: string) {\r\n    setAvailableEnd(value);\r\n    if (availableStart && value) {\r\n      if (dateTimeNow() > value) {\r\n        setAvailableEndError(\"event-page.event-page-error-availableEnd-now\");\r\n      } else if (availableStart > value) {\r\n        setAvailableEndError(\"event-page.event-page-error-availableStart-availableEnd\");\r\n      } else {\r\n        setAvailableEndError(undefined);\r\n      }\r\n    } else {\r\n      setAvailableEndError(undefined);\r\n    }\r\n  }\r\n\r\n  function onStartOnChange(value: string) {\r\n    setStartOn(value);\r\n    if (value && endOn) {\r\n      if (dateTimeNow() > value) {\r\n        setStartOnError(\"event-page.event-page-error-startOn-now\");\r\n      } else if (value > endOn) {\r\n        setStartOnError(\"event-page.event-page-error-startOn-endOn\");\r\n      } else {\r\n        setStartOnError(undefined);\r\n      }\r\n    } else {\r\n      setStartOnError(undefined);\r\n    }\r\n  }\r\n\r\n  function onEndOnChange(value: string) {\r\n    setEndOn(value);\r\n    setAvailableEnd(value);\r\n    if (startOn && value) {\r\n      if (dateTimeNow() > value) {\r\n        setEndOnError(\"event-page.event-page-error-endOn-now\");\r\n      } else if (startOn > value) {\r\n        setEndOnError(\"event-page.event-page-error-startOn-endOn\");\r\n      } else {\r\n        setEndOnError(undefined);\r\n      }\r\n    } else {\r\n      setEndOnError(undefined);\r\n    }\r\n  }\r\n\r\n  function onChangeIsPricedPerHour(value: boolean) {\r\n    if (value) {\r\n      setIsPricedPerMinute(false);\r\n      onEventTypeChange(EventType.ResetTime);\r\n    }\r\n\r\n    setIsPricedPerHour(value);\r\n  }\r\n\r\n  function onChangeIsPricedPerMinute(value: boolean) {\r\n    if (value) {\r\n      setIsPricedPerHour(false);\r\n      onEventTypeChange(EventType.ResetTime);\r\n    }\r\n\r\n    setIsPricedPerMinute(value);\r\n  }\r\n\r\n  function onPriceChange(value: number, set: (v: number) => void = setPrice) {\r\n    set(value);\r\n    if (value < 0) {\r\n      setPriceError(true);\r\n    } else {\r\n      setPriceError(false);\r\n    }\r\n  }\r\n\r\n  function onSaleTaxChange(value: string) {\r\n    const parsedValue = parseFloat(value);\r\n    setSaleTaxRate(parsedValue);\r\n    if (parsedValue !== undefined) {\r\n      setSaleTaxError(!isValidSaleTax(value));\r\n    }\r\n  }\r\n\r\n  function onFixedPeriod(input: boolean) {\r\n    if (isFixedPeriod) {\r\n      setAvailableStartError(undefined);\r\n      setAvailableEndError(undefined);\r\n      if (currEventId === \"new\") {\r\n        setAvailableStart(undefined);\r\n        setAvailableEnd(undefined);\r\n      }\r\n    }\r\n    setIsFixedPeriod(input);\r\n    setAvailableStart(undefined);\r\n    setAvailableEnd(undefined);\r\n  }\r\n\r\n  function createOrUpdateReservationBlock() {\r\n    let duration = 86400;\r\n    let availableEndValue = availableEnd ?? \"\";\r\n    const availableStartValue = availableStart ?? \"\";\r\n    const startOnValue = startOn ?? \"\";\r\n    const lockerSize = sizeId?.toLowerCase();\r\n    const isCodeSpecified = codeType !== \"6-digit\" && codeType !== \"1-to-4\" ? false : true;\r\n\r\n    if (sizeId === undefined) return;\r\n\r\n    if (endOn && startOn) {\r\n      let durationInMilisec = Date.parse(endOn) - Date.parse(startOn);\r\n      duration = Math.round(durationInMilisec / 1000);\r\n      availableEndValue = endOn;\r\n    }\r\n\r\n    if (durationDays > 0 || durationHours > 0 || durationMinutes > 0) {\r\n      duration = durationDays * 86400 + durationHours * 3600 + durationMinutes * 60;\r\n    }\r\n\r\n    if (duration > 0) {\r\n      let name = { fr: nameFr, en: nameEn };\r\n      let description = { fr: descriptionFr, en: descriptionEn };\r\n      let availableEnd = availableEndValue !== \"\" ? DateHelpers.toApiDate(new Date(availableEndValue)) : undefined;\r\n      let availableStart = availableStartValue !== \"\" ? DateHelpers.toApiDate(new Date(availableStartValue)) : undefined;\r\n      let startOn = startOnValue !== \"\" ? DateHelpers.toApiDate(new Date(startOnValue)) : undefined;\r\n      let meta: { [key: string]: string | undefined } = {};\r\n\r\n      meta[CodeType] = codeType;\r\n      meta[ResetTime] = resetTime;\r\n\r\n      if (isPricedPerHour || isPricedPerMinute) {\r\n        if (isPricedPerHour) {\r\n          meta[PricePerHour] = pricePerHour.toString();\r\n        } else {\r\n          meta[PricePerMinute] = pricePerMinute.toString();\r\n        }\r\n        meta[MinimalPrice] = minimalPrice.toString();\r\n      }\r\n\r\n      let data = {\r\n        Name: name,\r\n        Description: description,\r\n        LogoUrl: logoUrl,\r\n        Price: price,\r\n        SaleTaxRate: saleTaxRate / 100,\r\n        StartOn: startOn,\r\n        Duration: duration,\r\n        AvailableStart: availableStart,\r\n        AvailableEnd: availableEnd,\r\n        SizeId: lockerSize,\r\n        CodeSpecified: isCodeSpecified,\r\n        Meta: meta,\r\n      };\r\n\r\n      if (currEventId === \"new\" || currEventId === \"cloned-event\") createEvent(data);\r\n      else updateEvent(data);\r\n    }\r\n  }\r\n\r\n  function updateEvent(data: any) {\r\n    data[\"Id\"] = currEventId;\r\n\r\n    micrositeService\r\n      .updateReservationBlock(organizationId, micrositeId, data)\r\n      .then(() => {\r\n        history.push(`/organizations/${organizationId}/microsites/${micrositeId}/reservationBlocks`);\r\n      })\r\n      .catch((error: any) => {\r\n        if (error?.response?.status === 409) {\r\n          ToastHelpers.error(t(\"event-page.event-page-error-update-reservationBlock\"));\r\n        } else {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        }\r\n      });\r\n  }\r\n\r\n  function createEvent(data: any) {\r\n    data[\"MicrositeId\"] = targetMicrosite?.id;\r\n    data.Active = true;\r\n\r\n    micrositeService\r\n      .createReservationBlock(organizationId, data)\r\n      .then(() => {\r\n        if (targetMicrosite?.id) {\r\n          return history.push(`/organizations/${organizationId}/microsites/${targetMicrosite?.id}/reservationBlocks`);\r\n        }\r\n      })\r\n      .catch((error: any) => {\r\n        if (error?.response?.status === 409) {\r\n          ToastHelpers.error(t(\"event-page.event-page-error-create-reservationBlock\"));\r\n        } else {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        }\r\n      });\r\n  }\r\n\r\n  function deleteReservationBlock() {\r\n    if (organizationId && currEventId !== \"new\") {\r\n      setIsDeleteReservationBlock(false);\r\n      micrositeService\r\n        .deleteReservationBlock(organizationId, micrositeId, currEventId)\r\n        .then(() => {\r\n          return history.push(`/organizations/${organizationId}/microsites/${micrositeId}/reservationBlocks`);\r\n        })\r\n        .catch((error: any) => {\r\n          if (error?.response?.status === 409) {\r\n            ToastHelpers.error(t(\"event-page.event-page-error-delete-reservationBlock\"));\r\n          } else {\r\n            ToastHelpers.error(t(\"common.error-generic\"));\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  function hasError() {\r\n    return (\r\n      nameFrError ||\r\n      nameEnError ||\r\n      priceError ||\r\n      durationError ||\r\n      availableEndError ||\r\n      availableStartError ||\r\n      endOnError ||\r\n      saleTaxRateError\r\n    );\r\n  }\r\n\r\n  function isDurationValid(tmp: number = 0) {\r\n    return (\r\n      tmp !== 0 ||\r\n      (durationDays && durationDays >= 0) ||\r\n      (durationHours && durationHours >= 0) ||\r\n      (durationMinutes && durationMinutes >= 0) ||\r\n      (isFixedPeriod && (!availableStart || !availableEnd))\r\n    );\r\n  }\r\n}\r\n\r\nfunction isValidSaleTax(value: string): boolean {\r\n  const regex = new RegExp(/^[0-9]{1,2}$|^[0-9]{1,2}\\.[0-9]{1,3}$/);\r\n  return regex.test(value);\r\n}\r\n","interface NumberDropdownProps {\r\n  id: string | undefined;\r\n  min: number;\r\n  max: number;\r\n  current: number;\r\n  disabled: boolean;\r\n  onchange: Function;\r\n}\r\nexport function NumberDropDown(props: NumberDropdownProps) {\r\n  return (\r\n    <select\r\n      id={props.id}\r\n      value={props.current}\r\n      style={{ width: \"auto\" }}\r\n      className=\"form-select d-inline\"\r\n      disabled={props.disabled}\r\n      onChange={() => props.onchange(props.id)}\r\n    >\r\n      {Array.from(new Array(props.max), (x, i) => i + props.min).map((i) => {\r\n        return (\r\n          <option key={\"dropDownOpt\" + i} id={\"dropDownOpt\" + i} value={i}>\r\n            {i}\r\n          </option>\r\n        );\r\n      })}\r\n    </select>\r\n  );\r\n}\r\n","import { useTranslation } from \"react-i18next\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\n\r\ntype Props = {\r\n  value: string;\r\n  setValue: Function;\r\n  msgError: string | undefined;\r\n  onMsgErrorChanged: Function;\r\n  required?: boolean | undefined;\r\n};\r\n\r\nexport function EmailFormComponent(props: Props) {\r\n  const { t } = useTranslation();\r\n  const type = \"tel\";\r\n  const error = t(\"input-component.error-email\");\r\n\r\n  return (\r\n    <>\r\n      <div className=\"mb-3\">\r\n        <label className=\"form-label\">\r\n          {t(\"member-profile.email\")}\r\n          {props.required && \"*\"}\r\n        </label>\r\n        <input\r\n          className=\"form-control\"\r\n          type={type}\r\n          value={props.value}\r\n          placeholder={t(\"input-component.placeholder-email\")}\r\n          onChange={(ev) => validate(ev.target.value)}\r\n          required={props.required}\r\n        />\r\n        {props.msgError && <label className=\"error-msg\">{props.msgError}</label>}\r\n      </div>\r\n    </>\r\n  );\r\n\r\n  function validate(value: string) {\r\n    props.setValue(value);\r\n\r\n    if (isValid(value)) {\r\n      props.onMsgErrorChanged(undefined);\r\n    } else {\r\n      props.onMsgErrorChanged(error);\r\n    }\r\n  }\r\n\r\n  function isValid(value: string) {\r\n    let valid: boolean = StringHelpers.getEmailRegExp().test(value);\r\n\r\n    if (props.required && valid) return true;\r\n\r\n    if (!props.required && (valid || value.length === 0)) return true;\r\n\r\n    return false;\r\n  }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport moment from \"moment\";\r\nimport { useState, useEffect, useMemo } from \"react\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { EmailFormComponent } from \"../../components/customer-information-components/email-component\";\r\nimport { FirstNameComponent } from \"../../components/customer-information-components/firstname-component\";\r\nimport { LastNameComponent } from \"../../components/customer-information-components/lastname-components\";\r\nimport { PhoneFormComponent } from \"../../components/customer-information-components/phone-component\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport useHubs from \"../../components/useEffect/useHubs\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport micrositeService from \"../../services/micro-site/microsite-service\";\r\nimport ReservationBlock from \"../../services/micro-site/reservationBlock\";\r\nimport \"./reserve-locker.scss\";\r\nimport { InputComponent } from \"../../components/input\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\nimport { ResetTime } from \"../../assets/meta-table-keys\";\r\n\r\ntype Props = {\r\n  member: Member;\r\n  setNoConnection: any;\r\n};\r\n\r\ninterface IParamTypes {\r\n  micrositeId: string;\r\n  reservationBlockId: string;\r\n}\r\n\r\nexport default function ContributorReserveLockerPage(props: Props) {\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n  const language: string = languageService.getLanguage();\r\n\r\n  const { micrositeId, reservationBlockId } = useParams<IParamTypes>();\r\n  const { member, setNoConnection } = props;\r\n  const { hubs, isHubsLoading } = useHubs();\r\n  const [reservationBlock, setReservationBlock] = useState<ReservationBlock | null>();\r\n  const [organisationId, setOrganisationId] = useState<String>(\"\");\r\n\r\n  const [phone, setPhone] = useState<string>(\"\");\r\n  const [email, setEmail] = useState<string>(\"\");\r\n  const [firstname, setFirstname] = useState<string>(\"\");\r\n  const [lastname, setLastname] = useState<string>(\"\");\r\n  const [referenceNumber, setReferenceNumber] = useState<string>(\"\");\r\n  const [emailError, setEmailError] = useState<string | undefined>(undefined);\r\n  const [firstnameError, setFirstnameError] = useState<string | undefined>(undefined);\r\n  const [lastnameError, setLastnameError] = useState<string | undefined>(undefined);\r\n  const [phoneError, setPhoneError] = useState<string>();\r\n\r\n  const [code, setCode] = useState<string>(\"\");\r\n  const [codeError, setCodeError] = useState<string | undefined>(undefined);\r\n\r\n  const [microsite, setMicrosite] = useState<Microsite>();\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n\r\n  const isLoading = useMemo(() => {\r\n    return !isHubsLoading && !loading ? false : true;\r\n  }, [loading, isHubsLoading]);\r\n\r\n  //const showSms = microsite?.countryCode.toLocaleLowerCase() === \"ca\";\r\n  const showSms = true;\r\n\r\n  useEffect(() => {\r\n    //Gather the microsite and reservation block requested\r\n    micrositeService.getMicrosite(micrositeId).then((microsite: Microsite | undefined) => {\r\n      if (microsite) {\r\n        setMicrosite(microsite);\r\n        setOrganisationId(microsite.organizationId);\r\n\r\n        const reservationBlock = microsite.reservationBlocks.find((rb) => rb.id === reservationBlockId);\r\n        if (reservationBlock) {\r\n          setReservationBlock(reservationBlock);\r\n          setLoading(false);\r\n        }\r\n      }\r\n    });\r\n  }, [micrositeId, reservationBlockId, member]);\r\n\r\n  if (isLoading) {\r\n    return <LoadingComponent loading={isLoading} />;\r\n  }\r\n\r\n  if (!reservationBlock) {\r\n    return (\r\n      <div className=\"container page reerve-locker-page\">\r\n        <div className=\"col col-lg-6 offset-lg-3\">\r\n          <div className=\"card\">{!reservationBlock && <div>{t(\"micro-site-reserve-locker.no-reservation-block\")}</div>}</div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  const until = reservationBlock ? moment(reservationBlock.startOn).add(reservationBlock.duration, \"seconds\").toDate() : new Date();\r\n\r\n  return (\r\n    <div className=\"container page reserve-locker-page\">\r\n      <div className=\"card\">\r\n        <div className=\"card-header align-items-center\">\r\n          <div className=\"d-inline-block\">\r\n            {reservationBlock?.logoUrl && <img src={reservationBlock?.logoUrl} alt=\"\" className=\"img-logo\" />}\r\n            <h2 className=\"mt-2\"> {reservationBlock?.name.get(language)}</h2>\r\n          </div>\r\n          <button\r\n            className=\"btn-close float-end\"\r\n            onClick={() => {\r\n              history.push(`/organizations/${organisationId}/microsites/${micrositeId}/reservationBlocks`);\r\n            }}\r\n          ></button>\r\n        </div>\r\n\r\n        <div className=\"card-body\">\r\n          <p className=\"mb-4\">\r\n            {hubs?.every((hub) => hub.state !== \"Online\" || !microsite?.hubIds.includes(hub.id)) && (\r\n              <>\r\n                <span className=\"text-danger\">\r\n                  <FontAwesomeIcon icon={[\"fas\", \"exclamation-triangle\"]} className=\"me-2\" />\r\n                  {t(\"contributor-reserve-locker-page.no-hub-online\")}\r\n                </span>\r\n                <br />\r\n              </>\r\n            )}\r\n            {reservationBlock.description.get(language)}\r\n            <br />\r\n            {reservationBlock.startOn && (\r\n              <Trans\r\n                i18nKey=\"micro-site-page.locker-available\"\r\n                values={{\r\n                  start: DateHelpers.formatDateTime(new Date(reservationBlock.startOn), DateHelpers.UserTimeZone),\r\n                  end: DateHelpers.formatDateTime(until, DateHelpers.UserTimeZone),\r\n                }}\r\n              />\r\n            )}\r\n            {!reservationBlock.startOn && (\r\n              <Trans\r\n                i18nKey=\"micro-site-page.locker-available-now\"\r\n                values={{ duration: DateHelpers.formatDuration(reservationBlock.duration) }}\r\n              />\r\n            )}\r\n          </p>\r\n\r\n          <>\r\n            <p>{t(\"contributor-reserve-locker-page.msg-fill-info\")}</p>\r\n\r\n            <div className=\"row\">\r\n              <div className=\"col-12 col-lg-8\">\r\n                <form onSubmit={(ev) => ev.preventDefault()}>\r\n                  <div className=\"mb-4\">\r\n                    <EmailFormComponent\r\n                      value={email}\r\n                      setValue={setEmail}\r\n                      msgError={emailError}\r\n                      onMsgErrorChanged={setEmailError}\r\n                    ></EmailFormComponent>\r\n\r\n                    <FirstNameComponent\r\n                      value={firstname}\r\n                      setValue={setFirstname}\r\n                      msgError={firstnameError}\r\n                      onMsgErrorChanged={setFirstnameError}\r\n                    ></FirstNameComponent>\r\n                    <LastNameComponent\r\n                      value={lastname}\r\n                      setValue={setLastname}\r\n                      msgError={lastnameError}\r\n                      onMsgErrorChanged={setLastnameError}\r\n                    ></LastNameComponent>\r\n                    {showSms && (\r\n                      <PhoneFormComponent\r\n                        value={phone}\r\n                        setValue={setPhone}\r\n                        onMsgErrorChanged={setPhoneError}\r\n                        msgError={phoneError}\r\n                        label={t(\"common.phone\")}\r\n                      />\r\n                    )}\r\n\r\n                    <div className=\"mb-3\">\r\n                      <label className=\"form-label\">{t(\"contributor-reserve-locker-page.reference-number\")}</label>\r\n                      <input\r\n                        className=\"form-control\"\r\n                        type=\"text\"\r\n                        value={referenceNumber}\r\n                        onChange={(ev) => setReferenceNumber(ev.target.value)}\r\n                      />\r\n                    </div>\r\n                    {reservationBlock.codeSpecified && (\r\n                      <InputComponent\r\n                        labelText={t(\"input-component.code-label\")}\r\n                        type=\"code-sl5c\"\r\n                        value={code}\r\n                        setValue={setCode}\r\n                        msgError={codeError}\r\n                        onMsgErrorChanged={setCodeError}\r\n                        required={true}\r\n                        regExp={/^[1-4]{6}$/}\r\n                      />\r\n                    )}\r\n                  </div>\r\n                  <button onClick={() => CreateOrder()} className=\"btn btn-primary\" disabled={!canCreateOrder()}>\r\n                    {t(\"common.reserve-locker\")}\r\n                  </button>\r\n                </form>\r\n              </div>\r\n            </div>\r\n          </>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function canCreateOrder(): boolean {\r\n    return !!(\r\n      !emailError &&\r\n      !phoneError &&\r\n      !lastnameError &&\r\n      !firstnameError &&\r\n      (email !== \"\" || phone !== \"\" || referenceNumber !== \"\") &&\r\n      !codeError &&\r\n      (code !== \"\" || !reservationBlock?.codeSpecified)\r\n    );\r\n  }\r\n\r\n  function CreateOrder() {\r\n    if (reservationBlock) {\r\n      setLoading(true);\r\n\r\n      let end = undefined;\r\n      if (reservationBlock.meta?.[ResetTime]) {\r\n        let date = DateHelpers.getNextDayWithTime(reservationBlock.meta[ResetTime], DateHelpers.UserTimeZone);\r\n        end = DateHelpers.toApiDate(date);\r\n      }\r\n\r\n      micrositeService\r\n        .createOrder(micrositeId, reservationBlock.id, true, phone, email, firstname, lastname, referenceNumber, code, language, end, true)\r\n        .then((orderId) => {\r\n          if (orderId) {\r\n            history.push(`/orders/${orderId}`);\r\n          } else {\r\n            ToastHelpers.error(t(\"create-order-page.error-conflict\"));\r\n          }\r\n        })\r\n        .catch(() => {\r\n          setNoConnection(true);\r\n          ToastHelpers.error(t(\"create-order-page.error-conflict\"));\r\n        })\r\n        .finally(() => {\r\n          setLoading(false);\r\n        });\r\n    }\r\n  }\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport { CompartmentSize } from \"../../services/hub/compartmentSize\";\r\nimport compartmentSizeService from \"../../services/hub/compartmentSize-service\";\r\nimport { HubHelpers } from \"../../services/hub/hub-helper\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport Member from \"../../services/member/member\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport organizationService from \"../../services/member/organization-service\";\r\nimport { Order } from \"../../services/order/order\";\r\nimport orderService from \"../../services/order/order-service\";\r\nimport { Reservation } from \"../../services/order/reservation\";\r\nimport { ReservationState } from \"../../services/order/ReservationState\";\r\n\r\ninterface relocatePage {\r\n  organizationId: string | undefined;\r\n  member: Member;\r\n}\r\n\r\ninterface IParamTypes {\r\n  orderId: string;\r\n  itemId: string;\r\n}\r\n\r\nexport default function RelocatePage(props: relocatePage) {\r\n  const { organizationId, member } = props;\r\n  const { orderId, itemId } = useParams<IParamTypes>();\r\n\r\n  const [compartmentSizes, setCompartmentSizes] = useState<CompartmentSize[]>();\r\n  const [currentCompartmentSize, setCurrentCompartmentSize] = useState<CompartmentSize>();\r\n  const [compartmentState, setCompartmentState] = useState<string>();\r\n  const [reservation, setReservation] = useState<Reservation | undefined>();\r\n  const [sizeId, setSizeId] = useState<string>();\r\n  const [availableSizeIds, setAvailableSizeIds] = useState<Array<string>>();\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [isUpdating, setIsUpdating] = useState<boolean>(false);\r\n\r\n  const [isOrgContributor, setIsOrgContributor] = useState<boolean>(false);\r\n\r\n  const language: string = languageService.getLanguage();\r\n\r\n  const history = useHistory();\r\n\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() => {\r\n    if (!organizationId) {\r\n      return;\r\n    }\r\n\r\n    orderService.getOrderById(organizationId, orderId).then(async (order: Order | null) => {\r\n      const orderItem = order?.items.find((orderItem) => orderItem.id === itemId);\r\n      const reservation = orderItem?.reservation;\r\n      if (!reservation || !order?.hubId) {\r\n        return;\r\n      }\r\n\r\n      const hub = await hubService.getHubById(order.hubId);\r\n      const currentCompartment = HubHelpers.findCompartment(hub, reservation);\r\n      const sizeId = currentCompartment?.sizeId;\r\n\r\n      setCompartmentState(reservation.state);\r\n      setReservation(reservation);\r\n\r\n      await orderService\r\n        .getAvailableCompartmentSizeIds(organizationId, hub.id, order.flow, reservation.start, reservation.end)\r\n        .then(async (compartmentSizeIds) => {\r\n          if (sizeId && compartmentSizeIds.includes(sizeId)) {\r\n            setSizeId(sizeId);\r\n          }\r\n\r\n          setAvailableSizeIds(compartmentSizeIds);\r\n\r\n          const compartmentSizes = await compartmentSizeService.getCompartmentSizes();\r\n          const organization = await organizationService.getOrganizationById(organizationId);\r\n\r\n          const compartmentSizeIdsOfHubsCandidates = organization?.associatedHubs?.map(async (hub) => {\r\n            return await hubService.getHubById(hub.hubId).then((hub) => {\r\n              return HubHelpers.getCompartmentSizeIds(hub);\r\n            });\r\n          });\r\n\r\n          const compartmentSizesOfHubs = compartmentSizes?.filter((size) =>\r\n            compartmentSizeIdsOfHubsCandidates?.some((c) => c.then((c) => c.has(size.id)))\r\n          );\r\n\r\n          setCompartmentSizes(compartmentSizesOfHubs);\r\n          setCurrentCompartmentSize(compartmentSizes.find((cs) => cs.id === sizeId));\r\n        })\r\n        .finally(() => setLoading(false));\r\n    });\r\n  }, [organizationId]);\r\n\r\n  useEffect(() => setIsOrgContributor(memberService.isOrganizationContributor(member, organizationId)), [member]);\r\n\r\n  return (\r\n    <div className=\"container pt-3 page\">\r\n      <div className=\"row\">\r\n        <div className=\"page-breadcrumb\">\r\n          <ul className=\"breadcrumb\">\r\n            <li className=\"breadcrumb-item active\">\r\n              <Link to={`/orders`}>{t(\"order-page.orderlink\")}</Link>\r\n              {` / `}\r\n              <Link to={`/orders/${orderId}`}>{orderId}</Link>\r\n              {` / `}\r\n              {t(\"order-page.relocate\")}\r\n            </li>\r\n          </ul>\r\n        </div>\r\n\r\n        <LoadingComponent loading={loading || isUpdating} />\r\n\r\n        {!loading && isOrgContributor && (\r\n          <>\r\n            <div className=\"page-background-boxing shadow\">\r\n              <div className=\"header\">\r\n                <h1>\r\n                  <div>\r\n                    {t(\"order-page.relocate\")} #{orderId}{\" \"}\r\n                    <button\r\n                      className=\"btn-close h5 float-end mb-0\"\r\n                      onClick={() => history.push(`/orders/${orderId}`)}\r\n                      disabled={loading || isUpdating}\r\n                    ></button>\r\n                  </div>\r\n                </h1>\r\n              </div>\r\n\r\n              <div className=\"card\">\r\n                <div className=\"card-header align-items-center\">\r\n                  <h2>{t(\"relocate-page.locker-reservation\")}</h2>\r\n                </div>\r\n\r\n                <div className=\"card-body\">\r\n                  <div className=\"col-12\">\r\n                    <table className=\"table table-hover row-clikable table-order\">\r\n                      <thead>\r\n                        <tr>\r\n                          <th>{t(\"order-page-table-header.locker\")}</th>\r\n                          <th>{t(\"order-page-table-header.size\")}</th>\r\n                        </tr>\r\n                      </thead>\r\n                      <tbody>\r\n                        <tr>\r\n                          <td>\r\n                            {reservation?.groupId}\r\n                            {reservation?.compartmentNumber}\r\n                          </td>\r\n                          <td>\r\n                            {currentCompartmentSize?.name.get(language)} {currentCompartmentSize?.description.get(language)}\r\n                          </td>\r\n                        </tr>\r\n                      </tbody>\r\n                    </table>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"card\">\r\n                <div className=\"card-header align-items-center\">\r\n                  <h2>{t(\"relocate-page.size-title\")}</h2>\r\n                </div>\r\n\r\n                <div className=\"card-body\">\r\n                  <div className=\"col-12\">\r\n                    {availableSizeIds && availableSizeIds?.length > 0 ? (\r\n                      <>\r\n                        {compartmentSizes?.map((compartmentSize) => {\r\n                          return (\r\n                            <div className=\"clickable\">\r\n                              <input\r\n                                type=\"radio\"\r\n                                id={compartmentSize.id}\r\n                                name={compartmentSize.name.get(language)}\r\n                                value={compartmentSize.id}\r\n                                checked={compartmentSize.id === sizeId}\r\n                                onChange={() => setSizeId(compartmentSize.id)}\r\n                                disabled={\r\n                                  !availableSizeIds?.includes(compartmentSize.id) || compartmentState === ReservationState.Completed\r\n                                }\r\n                              />\r\n                              <label htmlFor={compartmentSize.id} className=\"ms-2 me-3\">\r\n                                {compartmentSize.name.get(language)} {compartmentSize.description.get(language)}\r\n                              </label>\r\n                              <hr></hr>\r\n                            </div>\r\n                          );\r\n                        })}\r\n                      </>\r\n                    ) : (\r\n                      <>\r\n                        <span>{t(\"relocate-page.no-lockers-available\")}</span>\r\n                        <br />\r\n                      </>\r\n                    )}\r\n\r\n                    <br />\r\n                    <button\r\n                      type=\"submit\"\r\n                      className=\"btn btn-primary\"\r\n                      onClick={async () => await relocateLocker()}\r\n                      disabled={saveDisabled()}\r\n                    >\r\n                      {t(\"relocate-page.save-button\")}\r\n                    </button>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </>\r\n        )}\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function saveDisabled(): boolean {\r\n    return !sizeId || isUpdating || compartmentState === ReservationState.Completed || !availableSizeIds?.includes(sizeId);\r\n  }\r\n\r\n  async function relocateLocker() {\r\n    if (organizationId && sizeId && compartmentState !== ReservationState.Completed && reservation) {\r\n      setIsUpdating(true);\r\n\r\n      try {\r\n        await orderService.relocateReservation(organizationId, orderId, itemId, sizeId, reservation.start, reservation.end);\r\n\r\n        if (compartmentState !== ReservationState.New) {\r\n          await orderService.sendReadyForPickupNotification(organizationId, orderId).catch(() => {\r\n            ToastHelpers.error(t(\"relocate-page.error-while-sending-notification\"));\r\n          });\r\n        }\r\n      } catch (e) {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      } finally {\r\n        history.push(`/orders/${orderId}`);\r\n        setIsUpdating(false);\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport \"../dashboard/dashboard-page.scss\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport useHubs from \"../../components/useEffect/useHubs\";\r\nimport useMicrosite from \"../../components/useEffect/useMicrosite\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Member from \"../../services/member/member\";\r\nimport MemberExtensions from \"../../services/member/member-extensions\";\r\nimport MemberRoleOrganization from \"../../services/member/member-role-organization\";\r\nimport micrositeService from \"../../services/micro-site/microsite-service\";\r\nimport ReservationBlock from \"../../services/micro-site/reservationBlock\";\r\nimport { Order } from \"../../services/order/order\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport { HubHelpers } from \"../../services/hub/hub-helper\";\r\nimport { ExportButton } from \"../../components/button-component\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\nclass EventSalesReport {\r\n  nbLockers: number = 0;\r\n  nbLockersSold: number = 0;\r\n  grossRevenue: number = 0;\r\n  fees: number = 0;\r\n  orders: Array<Order> = [];\r\n}\r\n\r\ninterface IParamTypes {\r\n  organizationId: string;\r\n  micrositeId: string;\r\n  eventId: string;\r\n}\r\n\r\ninterface Props {\r\n  member: Member;\r\n}\r\n\r\nexport default function EventSettlementReportPage(props: Props) {\r\n  const language: string = languageService.getLanguage();\r\n  const history = useHistory();\r\n  const { t } = useTranslation();\r\n\r\n  const { organizationId, micrositeId, eventId } = useParams<IParamTypes>();\r\n  const { member } = props;\r\n\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n\r\n  const { microsite, isMicrositeLoading } = useMicrosite(micrositeId);\r\n  const { hubs, isHubsLoading } = useHubs();\r\n  const [salesReport, setSalesReport] = useState<EventSalesReport>(new EventSalesReport());\r\n  const [currentOrganization, setCurrentOrganization] = useState<MemberRoleOrganization | undefined>(undefined);\r\n  const [lockerSold, setLockerSold] = useState<string | number>();\r\n  const [netRevenue, setNetRevenue] = useState<number>(0);\r\n  const [feesPerOrder, setFeesPerOrder] = useState<number>(0);\r\n\r\n  const event: ReservationBlock | undefined = useMemo(() => {\r\n    if (microsite) {\r\n      return microsite.reservationBlocks.find((rb) => rb.id === eventId);\r\n    }\r\n    return undefined;\r\n  }, [microsite, eventId]);\r\n\r\n  useEffect(() => {\r\n    setNetRevenue(salesReport.grossRevenue - salesReport.fees);\r\n    setFeesPerOrder(salesReport.fees / salesReport.orders.length);\r\n  }, [salesReport]);\r\n\r\n  useEffect(() => {\r\n    let organization = MemberExtensions.getMemberRoleOrganization(member, organizationId);\r\n\r\n    if (organization) {\r\n      setCurrentOrganization(organization);\r\n    }\r\n\r\n    if (!isHubsLoading && !isMicrositeLoading) {\r\n      micrositeService\r\n        .getEventOrders(micrositeId, eventId)\r\n        .then((orders) => {\r\n          if (orders && orders.length && hubs && hubs.length && microsite) {\r\n            let micrositeHubs = hubs.filter((h) => microsite.hubIds.includes(h.id));\r\n            setSalesReport(generateSalesFromOrders(orders, micrositeHubs));\r\n          }\r\n        })\r\n        .catch(() => {\r\n          ToastHelpers.error(t(\"event-page.event-page-error-refresh\"));\r\n        })\r\n        .finally(() => {\r\n          setLoading(false);\r\n        });\r\n    }\r\n  }, [micrositeId, eventId, microsite, hubs, t, member, organizationId, isHubsLoading, isMicrositeLoading]);\r\n\r\n  const data: Array<any> = useMemo(() => generateSalesReportData(salesReport, hubs, event, feesPerOrder), [salesReport, feesPerOrder]);\r\n\r\n  useEffect(() => {\r\n    const isLimited = !!event?.startOn;\r\n    const lockerSold = isLimited\r\n      ? t(\"analytic.hub-usage-text\", { used: salesReport.nbLockersSold, total: salesReport.nbLockers })\r\n      : salesReport.nbLockersSold;\r\n    setLockerSold(lockerSold);\r\n  }, [salesReport]);\r\n\r\n  if (loading) {\r\n    return (\r\n      <div className=\"container page orders-page\">\r\n        <LoadingComponent loading={loading} />\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"container page orders-page\">\r\n      <div className=\"offset-lg-2\">\r\n        <div className=\"page-breadcrumb\">\r\n          <ul className=\"breadcrumb\">\r\n            <li className=\"breadcrumb-item active\">\r\n              <Link to={`/organizations`}>{t(\"common.organizations\")}</Link>\r\n              {` / `}\r\n              <Link to={`/organizations/${organizationId}`}>{currentOrganization?.entity?.name}</Link>\r\n              {` / `}\r\n              <Link to={`/organizations/${organizationId}/microsites`}>{t(\"microsites-page.name\")}</Link>\r\n              {` / `}\r\n              <Link to={`/organizations/${organizationId}/microsites/${micrositeId}/reservationBlocks`}>\r\n                {microsite?.name.get(language)}\r\n              </Link>\r\n              {` / ${event?.name.get(language)}`}\r\n            </li>\r\n          </ul>\r\n        </div>\r\n\r\n        <div className=\"page-background-boxing shadow col-lg-8\">\r\n          <h1 className=\"text-primary\">{t(\"event-settlement-report.metrics\", { event: event?.name.get(language) }).toUpperCase()}</h1>\r\n\r\n          <div className=\"card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <div className=\"d-inline-block\">\r\n                <h2 className=\"mt-2\">\r\n                  {t(\"event-settlement-report.summary\")}\r\n                  <span className=\"ms-2\">\r\n                    <ExportButton data={data} fileName={`event-${event?.name.get(language)}-report`} />\r\n                  </span>\r\n                </h2>\r\n              </div>\r\n            </div>\r\n            <div className=\"card-body\">\r\n              <div className=\"row mb-3\">\r\n                <div className=\"col-lg-6 col-md-12\">\r\n                  {t(\"event-settlement-report.nb-locker-sold\")} {lockerSold}\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"row\">\r\n                <div className=\"col-6\">{t(\"event-settlement-report.gross-revenue\")}</div>\r\n                <div className=\"col-6 text-end\">\r\n                  {t(\"common.price-format\", {\r\n                    price: StringHelpers.formatPrice(salesReport.grossRevenue),\r\n                    currency: microsite?.currency,\r\n                  })}\r\n                </div>\r\n              </div>\r\n              <div className=\"row\">\r\n                <div className=\"col-6\">{t(\"event-settlement-report.fees\")}</div>\r\n                <div className=\"col-6 border-bottom text-end\">\r\n                  -\r\n                  {t(\"common.price-format\", {\r\n                    price: StringHelpers.formatPrice(salesReport.fees),\r\n                    currency: microsite?.currency,\r\n                  })}\r\n                </div>\r\n              </div>\r\n              <div className=\"row\">\r\n                <div className=\"col-6\">{t(\"event-settlement-report.net-revenue\")} </div>\r\n                <div className=\"col-6 text-end\">\r\n                  {t(\"common.price-format\", { price: StringHelpers.formatPrice(netRevenue), currency: microsite?.currency })}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <div className=\"card\">\r\n            <div className=\"card-header align-items-center\">\r\n              <div className=\"d-inline-block\">\r\n                <h2 className=\"mt-2\">Reservations</h2>\r\n              </div>\r\n            </div>\r\n\r\n            <div className=\"card-body\">\r\n              <table className=\"table table-sm table-hover row-clikable\">\r\n                <thead>\r\n                  <tr>\r\n                    <th>{t(\"common.location\")}</th>\r\n                    <th>{t(\"common.locker\")}</th>\r\n                    <th>{t(\"common.date\")}</th>\r\n                    <th></th>\r\n                  </tr>\r\n                </thead>\r\n                <tbody>\r\n                  {salesReport?.orders.map((order: Order) => {\r\n                    let location = hubs?.find((hub) => hub.id === order.hubId)?.name;\r\n                    let compartmentNumber = order.items[0].reservation.compartmentNumber;\r\n                    let group = order.items[0].reservation.groupId;\r\n                    let date = DateHelpers.formatDateTime(new Date(order.orderDate), DateHelpers.UserTimeZone);\r\n                    const redirectToOrderPage = () => history.push(`/orders/${order.id}`);\r\n\r\n                    return (\r\n                      <tr onClick={() => redirectToOrderPage()}>\r\n                        <td>{location}</td>\r\n                        <td>{/^\\d+$/.test(compartmentNumber) ? compartmentNumber : group + compartmentNumber}</td>\r\n                        <td>{date}</td>\r\n                        <td>\r\n                          <FontAwesomeIcon icon={[\"fas\", \"angle-right\"]} />\r\n                        </td>\r\n                      </tr>\r\n                    );\r\n                  })}\r\n                </tbody>\r\n              </table>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction generateSalesFromOrders(orders: Array<Order>, hubs: Array<Hub>): EventSalesReport {\r\n  let sr = new EventSalesReport();\r\n  sr.nbLockers = hubs.reduce((total, h) => total + HubHelpers.GetCompartmentCount(h), 0);\r\n  sr.orders = orders;\r\n\r\n  for (let i = 0; i < orders.length; i++) {\r\n    const order = orders[i];\r\n    if (order.payments && order.payments.length) {\r\n      const lockers = order.items.filter((value, index, array) => array.indexOf(value) === index).length;\r\n      sr.nbLockersSold += lockers;\r\n\r\n      order.payments.forEach((payment) => {\r\n        sr.fees += payment.fees;\r\n        sr.grossRevenue += payment.amount + payment.saleTaxTotal;\r\n      });\r\n    }\r\n  }\r\n\r\n  return sr;\r\n}\r\n\r\nfunction generateSalesReportData(\r\n  salesReport: EventSalesReport,\r\n  hubs: Hub[] | undefined,\r\n  event: ReservationBlock | undefined,\r\n  feesPerOrder: number\r\n) {\r\n  return salesReport.orders.map((order) => {\r\n    const reservation = order.items[0].reservation;\r\n\r\n    let feesOrder: number = 0;\r\n    let paymentOrder: number = 0;\r\n    order?.payments?.forEach((payment) => {\r\n      feesOrder += payment.fees;\r\n      paymentOrder += payment.amount + payment.saleTaxTotal;\r\n    });\r\n\r\n    return {\r\n      order_date: order.orderDate.toString(),\r\n      locker_price: event?.price.toString(),\r\n      locker: reservation.groupId.toString() + reservation.compartmentNumber.toString(),\r\n      hub: hubs?.find((x) => x.id === order.hubId)?.name.toString(),\r\n      price: paymentOrder.toString(),\r\n      sale_tax_rate: event?.saleTaxRate.toString(),\r\n      Fees: feesOrder.toString() ?? feesPerOrder.toString(),\r\n    };\r\n  });\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport Microsite from \"../../services/micro-site/microsite\";\r\nimport micrositeService from \"../../services/micro-site/microsite-service\";\r\n\r\nexport default function useMicrosite(micrositeId: string) {\r\n  const { t } = useTranslation();\r\n\r\n  const [microsite, setMicrosite] = useState<Microsite>();\r\n  const [loading, setLoading] = useState<boolean>();\r\n\r\n  useEffect(() => {\r\n    function get() {\r\n      micrositeService\r\n        .getMicrosite(micrositeId, \"All\")\r\n        .then((microsite) => {\r\n          if (microsite) {\r\n            setMicrosite(microsite);\r\n          }\r\n        })\r\n        .catch((error: any) => {\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        })\r\n        .finally(() => setLoading(false));\r\n    }\r\n\r\n    get();\r\n  }, [micrositeId, t]);\r\n\r\n  return { microsite, isMicrositeLoading: loading };\r\n}\r\n","import \"./hub-activities-page.scss\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport languageService from \"../../services/core/language-service\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport useMyHub from \"../../services/hub/useMyHub\";\r\nimport Member from \"../../services/member/member\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport { HubActivity } from \"../../services/hub/hub-activity\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport { useGlobalFilter, usePagination, useTable } from \"react-table\";\r\nimport PagingComponent from \"../../components/paging-component\";\r\nimport { SyncButtonComponent } from \"../../components/button-component\";\r\nimport { OrderHelpers } from \"../../services/order/order-helpers\";\r\nimport { GlobalFilter } from \"../../components/globalfilter-component\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ninterface IParamTypes {\r\n  hubId: string;\r\n}\r\n\r\ninterface IHubActivitiesPageProps {\r\n  member: Member;\r\n}\r\n\r\nexport function HubActivitiesPage(props: IHubActivitiesPageProps) {\r\n  const { member } = props;\r\n  const { hubId } = useParams<IParamTypes>();\r\n  const { t } = useTranslation();\r\n\r\n  const { hub } = useMyHub({\r\n    hubId: hubId,\r\n    onErrorNotificationMessage: t(\"hub-page.error-refresh\"),\r\n  });\r\n\r\n  const [activities, setActivities] = useState<Array<HubActivity>>([]);\r\n  const [activitiesMultiplier, setActivitiesMutiplier] = useState<number>(1);\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [pagingIndex, setPagingIndex] = useState<number>(0);\r\n\r\n  const history = useHistory();\r\n\r\n  const columnsTemp = [\r\n    {\r\n      Header: t(\"hub-history-page.table-header.date\"),\r\n      accessor: \"createdOn\",\r\n    },\r\n    {\r\n      Header: t(\"hub-history-page.table-header.operation\"),\r\n      accessor: \"description\",\r\n    },\r\n    {\r\n      Header: t(\"hub-history-page.table-header.author\"),\r\n      accessor: \"createdBy\",\r\n    },\r\n  ];\r\n\r\n  const {\r\n    getTableProps,\r\n    getTableBodyProps,\r\n    headerGroups,\r\n    rows,\r\n    prepareRow,\r\n    page,\r\n    canPreviousPage,\r\n    canNextPage,\r\n    pageOptions,\r\n    nextPage,\r\n    previousPage,\r\n    state,\r\n    preGlobalFilteredRows,\r\n    setGlobalFilter,\r\n    state: { pageIndex },\r\n  } = useTable(\r\n    {\r\n      columns: useMemo(() => columnsTemp, [languageService.language]),\r\n      data: useMemo(() => updateTableActivitiesData(activities, member), [activities, languageService.language]),\r\n      initialState: { pageIndex: pagingIndex },\r\n    },\r\n    useGlobalFilter,\r\n    usePagination\r\n  );\r\n\r\n  useEffect(() => {\r\n    refresh(pageIndex);\r\n  }, [pageIndex + 1 == pageOptions.length && pageOptions.length % 10 == 0]);\r\n\r\n  useEffect(() => {\r\n    setGlobalFilter(state.globalFilter);\r\n  }, [activities, languageService.language]);\r\n\r\n  return (\r\n    <div className=\"container page hub-activities-page\">\r\n      <div className=\"page-breadcrumb\">\r\n        <ul className=\"breadcrumb\">\r\n          <li className=\"breadcrumb-item active\">\r\n            <Link className=\"\" to={`/hubs`}>\r\n              {t(\"hub-page.hublink\")}\r\n            </Link>\r\n          </li>\r\n          <li className=\"breadcrumb-item active\">\r\n            <Link className=\"\" to={`/hubs/${hubId}`}>\r\n              {hub ? hub.name : hubId}\r\n            </Link>\r\n          </li>\r\n          <li className=\"breadcrumb-item active\">{t(\"hub-history-page.history-link\")}</li>\r\n        </ul>\r\n      </div>\r\n\r\n      <h1>{t(\"hub-history-page.history\")}</h1>\r\n\r\n      <div className=\"toolbar\">\r\n        <SyncButtonComponent onClick={() => refresh(0)}></SyncButtonComponent>\r\n\r\n        <GlobalFilter preGlobalFilteredRows={preGlobalFilteredRows} globalFilter={state.globalFilter} setGlobalFilter={setGlobalFilter} />\r\n      </div>\r\n\r\n      <div>\r\n        <div className=\"row mt-3\">\r\n          <div className=\"col\">\r\n            <div className=\"card\">\r\n              <div className=\"card-body\">\r\n                <table {...getTableProps()} className=\"table table-sm table-hover row-clikable\">\r\n                  <thead>\r\n                    {headerGroups.map((headerGroup) => (\r\n                      <tr {...headerGroup.getHeaderGroupProps()}>\r\n                        {headerGroup.headers.map((column) => {\r\n                          return <th {...column.getHeaderProps()}>{column.render(\"Header\")}</th>;\r\n                        })}\r\n                      </tr>\r\n                    ))}\r\n                  </thead>\r\n                  <tbody {...getTableBodyProps()}>\r\n                    {loading && (\r\n                      <tr>\r\n                        <td colSpan={7} className=\"text-center\">\r\n                          <LoadingComponent loading={loading} />\r\n                        </td>\r\n                      </tr>\r\n                    )}\r\n\r\n                    {!loading &&\r\n                      page.map((row, i) => {\r\n                        prepareRow(row);\r\n\r\n                        let hubActivity = row.original as any;\r\n                        let url = `/hubs/${hubId}`;\r\n\r\n                        return (\r\n                          <tr {...row.getRowProps()} onClick={() => history.push(url)}>\r\n                            <td {...row.cells[0].getCellProps()}>{hubActivity.createdOn}</td>\r\n                            <td {...row.cells[1].getCellProps()}>{hubActivity.description}</td>\r\n                            <td {...row.cells[2].getCellProps()}>{hubActivity.createdBy}</td>\r\n                          </tr>\r\n                        );\r\n                      })}\r\n                  </tbody>\r\n                </table>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <PagingComponent\r\n          countTextResource={\"hub-history-page.item-count\"}\r\n          count={rows.length}\r\n          pageLength={pageOptions.length}\r\n          pageIndex={pageIndex}\r\n          canPreviousPage={canPreviousPage}\r\n          canNextPage={canNextPage}\r\n          previousPage={previousPage}\r\n          nextPage={nextPage}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n  function refresh(pageIndex: number) {\r\n    let multiplier = activitiesMultiplier;\r\n    pageIndex++;\r\n\r\n    if (pageIndex == pageOptions.length) {\r\n      setPagingIndex(multiplier * 10 - 1);\r\n      setActivitiesMutiplier(activitiesMultiplier + 1);\r\n      multiplier++;\r\n    } else if (pageIndex == 0) {\r\n      multiplier = 1;\r\n      setPagingIndex(0);\r\n      setActivitiesMutiplier(1);\r\n    }\r\n\r\n    hubService\r\n      .getHubActivities(hubId, multiplier * 100)\r\n      .then((activities) => {\r\n        setActivities(activities);\r\n      })\r\n      .catch((e) => {\r\n        ToastHelpers.error(t(\"hub-history-page.history-error-refresh\"));\r\n      })\r\n      .finally(() => {\r\n        setLoading(false);\r\n      });\r\n  }\r\n}\r\n\r\nfunction updateTableActivitiesData(activities: HubActivity[], member: Member): Array<any> {\r\n  const tableData: Array<any> = [];\r\n  if (activities) {\r\n    activities.forEach((hubActivity: HubActivity) => {\r\n      if (hubActivity.id) {\r\n        tableData.push({\r\n          id: hubActivity.id,\r\n          createdOn: DateHelpers.formatDateTime(new Date(hubActivity.createdOn), DateHelpers.UserTimeZone) ?? \"\",\r\n          description: OrderHelpers.getActivityDescription(hubActivity, languageService.language),\r\n          createdBy: hubActivity.createBy?.toString() || \"\",\r\n        });\r\n      }\r\n    });\r\n  }\r\n  return tableData;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { PhoneFormComponent } from \"../../components/customer-information-components/phone-component\";\r\nimport { InputComponent } from \"../../components/input\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\nimport StringHelpers from \"../../services/core/string-helpers\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport micrositeService from \"../../services/micro-site/microsite-service\";\r\nimport { CodeType, ResetTime } from \"../../assets/meta-table-keys\";\r\nimport DateHelpers from \"../../services/core/date-helpers\";\r\n\r\ninterface IParamTypes {\r\n  micrositeId: string;\r\n  reservationBlockId: string;\r\n}\r\n\r\nexport default function ReserveLockerSignInPage() {\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n  const { micrositeId, reservationBlockId } = useParams<IParamTypes>();\r\n  const [isEmail, setIsEmail] = useState<boolean>(true);\r\n  const [phone, setPhone] = useState<string>(\"\");\r\n  const [phoneError, setPhoneError] = useState<string>(\"\");\r\n  const [email, setEmail] = useState<string>(\"\");\r\n  const [emailError, setEmailError] = useState<string>(\"\");\r\n\r\n  const [code, setCode] = useState<string>(\"\");\r\n  const [codeError, setCodeError] = useState<string | undefined>(undefined);\r\n\r\n  const [orderId, setOrderId] = useState<string>(\"\");\r\n  const [linkSent, setLinkSent] = useState<boolean>(false);\r\n  const [loading, setLoading] = useState<boolean>(false);\r\n\r\n  const resendNotificationTimeout = 60;\r\n  const [counter, setCounter] = useState(resendNotificationTimeout);\r\n\r\n  const [reservationBlock, setReservationBlock] = useState<any>({});\r\n  const showSms = true;\r\n\r\n  useEffect(() => {\r\n    setLoading(true);\r\n\r\n    micrositeService\r\n      .getReservationBlockById(micrositeId, reservationBlockId)\r\n      .then((value) => {\r\n        setReservationBlock(value);\r\n      })\r\n      .catch((error) => {\r\n        ToastHelpers.error(error);\r\n      })\r\n      .finally(() => {\r\n        setLoading(false);\r\n      });\r\n  }, [reservationBlockId, micrositeId]);\r\n\r\n  useEffect(() => {\r\n    if (counter > 0) {\r\n      const timer = setInterval(() => setCounter((prev) => prev - 1), 1000);\r\n      return () => clearInterval(timer); // Cleanup on unmount or before re-running effect\r\n    }\r\n  }, [counter]); // Depend on counter\r\n\r\n  if (loading) {\r\n    return <LoadingComponent loading={loading} />;\r\n  }\r\n\r\n  const meta = reservationBlock?.meta;\r\n  const codeType = meta?.[CodeType] ? reservationBlock.meta[CodeType] : \"none\";\r\n\r\n  return (\r\n    <div className=\"container page orders-page\">\r\n      <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n        <div className=\"card\">\r\n          <div className=\"card-header align-items-center\">\r\n            <div className=\"d-inline-block\">\r\n              <h2>{t(\"micro-site-reserve-locker.title\")}</h2>\r\n            </div>\r\n            <button className=\"btn-close float-end\" onClick={() => history.push(`/sites/${micrositeId}`)}></button>\r\n          </div>\r\n          <div className=\"card-body\">\r\n            {linkSent && (\r\n              <div className=\"mb-3\">\r\n                {isEmail && <div>{t(\"micro-site-reserve-locker.verification-sent-email\")}</div>}\r\n                {!isEmail && <div>{t(\"micro-site-reserve-locker.verification-sent-phone\")}</div>}\r\n                <div>{t(\"micro-site-reserve-locker.please-finalise\")}</div>\r\n                <br></br>\r\n\r\n                {isEmail && (\r\n                  <div>\r\n                    {t(\"micro-site-reserve-locker.verify-sent-email\")}: <b>{email}</b>\r\n                  </div>\r\n                )}\r\n                {!isEmail && (\r\n                  <div>\r\n                    {t(\"micro-site-reserve-locker.verify-sent-phone\")}: <b>{phone}</b>\r\n                  </div>\r\n                )}\r\n                <button className=\"btn btn-primary\" onClick={() => resendNotification()} disabled={counter > 0}>\r\n                  {t(\"micro-site-reserve-locker.resend-notification\")} {counter > 0 && \"(\" + counter + \")\"}\r\n                </button>\r\n              </div>\r\n            )}\r\n            {!linkSent && (\r\n              <>\r\n                {showSms && (\r\n                  <>\r\n                    <div className=\"mb-3\">{t(\"micro-site-reserve-locker.signup\")}</div>\r\n                    <div className=\"mb-3\">\r\n                      <input type=\"radio\" id=\"byEmail\" name=\"email\" value=\"email\" checked={isEmail} onClick={() => setIsEmail(true)} />\r\n                      <label htmlFor=\"byEmail\" className=\"ms-2\" onClick={() => setIsEmail(true)}>\r\n                        {t(\"micro-site-reserve-locker.enter-email\")}\r\n                      </label>\r\n                    </div>\r\n\r\n                    <div className=\"mb-3\">\r\n                      <input type=\"radio\" id=\"byPhone\" name=\"phone\" value=\"phone\" checked={!isEmail} onClick={() => setIsEmail(false)} />\r\n                      <label htmlFor=\"byPhone\" className=\"ms-2\" onClick={() => setIsEmail(false)}>\r\n                        {t(\"micro-site-reserve-locker.enter-phone\")}\r\n                      </label>\r\n                    </div>\r\n                  </>\r\n                )}\r\n                {!showSms && <div className=\"mb-3\">{t(\"micro-site-reserve-locker.signup-email-only\")}</div>}\r\n                <form>\r\n                  {!showSms && (\r\n                    <InputComponent\r\n                      value={email}\r\n                      setValue={setEmail}\r\n                      regExp={StringHelpers.getEmailRegExp()}\r\n                      msgError={emailError}\r\n                      onMsgErrorChanged={setEmailError}\r\n                      type={\"email\"}\r\n                      labelText={t(\"common.email\") + \"*\"}\r\n                      required={true}\r\n                    />\r\n                  )}\r\n                  {showSms &&\r\n                    (isEmail ? (\r\n                      <div className=\"mb-3\">\r\n                        <InputComponent\r\n                          value={email}\r\n                          setValue={setEmail}\r\n                          regExp={StringHelpers.getEmailRegExp()}\r\n                          msgError={emailError}\r\n                          onMsgErrorChanged={setEmailError}\r\n                          type={\"email\"}\r\n                          labelText={t(\"common.email\") + \"*\"}\r\n                          required={true}\r\n                        />\r\n                      </div>\r\n                    ) : (\r\n                      <PhoneFormComponent\r\n                        value={phone}\r\n                        setValue={setPhone}\r\n                        onMsgErrorChanged={setPhoneError}\r\n                        msgError={phoneError}\r\n                        label={t(\"common.phone\") + \"*\"}\r\n                      />\r\n                    ))}\r\n\r\n                  {codeType === \"6-digit\" && (\r\n                    <InputComponent\r\n                      labelText={t(\"input-component.code-label-6digits\")}\r\n                      type=\"code-6digits\"\r\n                      value={code}\r\n                      setValue={setCode}\r\n                      msgError={codeError}\r\n                      onMsgErrorChanged={setCodeError}\r\n                      required={true}\r\n                      regExp={/^[0-9]{6}$/}\r\n                    />\r\n                  )}\r\n                  {codeType === \"1-to-4\" && (\r\n                    <InputComponent\r\n                      labelText={t(\"input-component.code-label\")}\r\n                      type=\"code-sl5c\"\r\n                      value={code}\r\n                      setValue={setCode}\r\n                      msgError={codeError}\r\n                      onMsgErrorChanged={setCodeError}\r\n                      required={true}\r\n                      regExp={/^[1-4]{6}$/}\r\n                    />\r\n                  )}\r\n                  <div className=\"mb-4 mt-3\">\r\n                    <button type=\"submit\" className=\"btn btn-primary\" onClick={() => validate()} disabled={isBtnDisabled()}>\r\n                      {t(\"micro-site-reserve-locker.validate-button\")}\r\n                    </button>\r\n                  </div>\r\n                </form>\r\n              </>\r\n            )}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function isBtnDisabled(): boolean {\r\n    if (isEmail)\r\n      return emailError !== undefined || loading || codeError !== undefined || !email || (!code && reservationBlock.codeSpecified);\r\n    return phoneError !== undefined || loading || codeError !== undefined || !phone || (!code && reservationBlock.codeSpecified);\r\n  }\r\n  async function validate() {\r\n    let newEmail = email;\r\n    let newPhone = phone;\r\n    if (isEmail) {\r\n      newPhone = \"\";\r\n      if (email && emailError) {\r\n        return;\r\n      }\r\n    } else {\r\n      newEmail = \"\";\r\n      if (phone && phoneError) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    createOrder(newPhone, newEmail);\r\n  }\r\n\r\n  function resendNotification() {\r\n    setLoading(true);\r\n    micrositeService\r\n      .resendNotification(micrositeId, reservationBlockId, orderId, phone, email, undefined)\r\n      .then((res) => {\r\n        if (!res) {\r\n          ToastHelpers.error(t(\"create-order-page.error-no-availability\"));\r\n        }\r\n      })\r\n      .catch((error) => {\r\n        if (error?.response?.status === 409) {\r\n          ToastHelpers.error(t(\"create-order-page.error-conflict\"));\r\n        } else {\r\n          if (reservationBlock.codeSpecified) {\r\n            ToastHelpers.error(t(\"create-order-page.error-generic-change-code\"));\r\n          }\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        }\r\n      })\r\n      .finally(() => {\r\n        setCounter(resendNotificationTimeout * 1.5);\r\n        setLoading(false);\r\n      });\r\n  }\r\n\r\n  function createOrder(phone: string, email: string) {\r\n    setLoading(true);\r\n    let end = undefined;\r\n    if (reservationBlock.meta?.[ResetTime]) {\r\n      let date = DateHelpers.getNextDayWithTime(reservationBlock.meta[ResetTime], DateHelpers.UserTimeZone);\r\n      end = DateHelpers.toApiDate(date);\r\n    }\r\n\r\n    let allowOffline = micrositeId === \"osheaga2024\" || micrositeId === \"ilesoniq2024\" || micrositeId === \"lasso2024\";\r\n\r\n    micrositeService\r\n      .createOrder(\r\n        micrositeId,\r\n        reservationBlockId,\r\n        false,\r\n        phone,\r\n        email,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        code,\r\n        undefined,\r\n        end,\r\n        allowOffline\r\n      )\r\n      .then((value) => {\r\n        if (value) {\r\n          setLinkSent(true);\r\n          setCounter(resendNotificationTimeout);\r\n          setOrderId(value);\r\n        } else {\r\n          ToastHelpers.error(t(\"create-order-page.error-no-availability\"));\r\n        }\r\n      })\r\n      .catch((error) => {\r\n        if (error?.response?.status === 409) {\r\n          ToastHelpers.error(t(\"create-order-page.error-conflict\"));\r\n        } else {\r\n          if (reservationBlock.codeSpecified) {\r\n            ToastHelpers.error(t(\"create-order-page.error-generic-change-code\"));\r\n          }\r\n          ToastHelpers.error(t(\"common.error-generic\"));\r\n        }\r\n      })\r\n      .finally(() => {\r\n        setLoading(false);\r\n      });\r\n  }\r\n}\r\n","interface EmailProps {\r\n    address: string;\r\n    subject?: string;\r\n    body?: string;\r\n  }\r\n  \r\n  const EmailLink: React.FC<EmailProps> = ({ address, subject, body }) => {\r\n  \r\n    const mailtoLink = `mailto:${address}?subject=${encodeURIComponent(\r\n      subject || ''\r\n    )}&body=${encodeURIComponent(body || '')}`;\r\n  \r\n    return (\r\n      <a href={mailtoLink}>\r\n        {address}\r\n      </a>\r\n    );\r\n  };\r\n\r\n  export default EmailLink;","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport { AssetColors } from \"../../assets/assets-colors\";\r\nimport { HeaderIcon } from \"../../components/header\";\r\nimport authService from \"../../services/auth/auth-service\";\r\nimport EmailLink from \"../../components/email-link-component\";\r\nimport { useEffect, useState } from \"react\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport Member from \"../../services/member/member\";\r\nimport ToastHelpers from \"../../services/core/toast-helpers\";\r\nimport LoadingComponent from \"../../components/loading-component\";\r\n\r\ninterface HomeNotRegisteredPageProps {\r\n  member: Member;\r\n  changeLanguage: any;\r\n  changeMember: any;\r\n}\r\n\r\nexport default function HomeNotRegisteredPage(props: HomeNotRegisteredPageProps) {\r\n  const { member, changeLanguage, changeMember } = props;\r\n  const { t } = useTranslation();\r\n\r\n  const [loading, setLoading] = useState(true);\r\n\r\n  function reload() {\r\n    window.location.reload();\r\n  }\r\n\r\n  async function logout(): Promise<void> {\r\n    await authService.logout();\r\n    changeMember(null);\r\n  }\r\n\r\n  useEffect(() => {\r\n    memberService\r\n      .createMember(member)\r\n      .then(() => {\r\n        changeMember(member);\r\n      })\r\n      .catch(() => {\r\n        ToastHelpers.error(t(\"common.error-generic\"));\r\n      })\r\n      .finally(() => {\r\n        setLoading(false);\r\n      });\r\n  }, [member]);\r\n\r\n  if (loading) {\r\n    return <LoadingComponent loading />;\r\n  }\r\n\r\n  return (\r\n    <>\r\n      <header>\r\n        <div className=\"container\">\r\n          <div className=\"row\">\r\n            <div className=\"col-12 col-md-10 col-lg-8 offset-md-1 offset-lg-2\">\r\n              <nav className=\"navbar reset\">\r\n                <ul className=\"navbar-nav align-items-center ms-auto\">\r\n                  <li className=\"nav-item\">\r\n                    <button className=\"nav-link\" onClick={changeLanguage}>\r\n                      <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"globe\"]} />\r\n                      {t(\"language.display-long\")}\r\n                    </button>\r\n                  </li>\r\n                </ul>\r\n              </nav>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </header>\r\n\r\n      <div className=\"container page sign-up-page pt-5\">\r\n        <div className=\"row\">\r\n          <div className=\"col-12 col-md-10 col-lg-8 offset-md-1 offset-lg-2\">\r\n            <div className=\"card card-full\">\r\n              <div className=\"logo\">\r\n                <HeaderIcon logo={AssetColors.Blue} />\r\n              </div>\r\n\r\n              <div className=\"card-left\">\r\n                <div className=\"card-body\">\r\n                  <h5>{t(\"home-not-registered.oups\")}</h5>\r\n                  <h6>{t(\"home-not-registered.title\")}</h6>\r\n                  <h6 className=\"mb-0\">\r\n                    <Trans\r\n                      i18nKey=\"home-not-registered.contact-support\"\r\n                      components={{\r\n                        EmailLink: <EmailLink address=\"support@locketgo.com\" subject={t(\"home-not-registered.contact-support-title\")} />,\r\n                      }}\r\n                    />\r\n                  </h6>\r\n                  <div className=\"sub-info mb-5\">{t(\"home-not-registered.info\")}</div>\r\n\r\n                  <button className=\"mt-2 me-4 btn btn-lg btn-primary\" onClick={async () => reload()}>\r\n                    {t(\"home-not-registered.retry\")}\r\n                  </button>\r\n\r\n                  <button className=\"mt-2 btn btn-lg btn-danger\" onClick={async () => await logout()}>\r\n                    {t(\"home-not-registered.logout\")}\r\n                  </button>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </>\r\n  );\r\n}\r\n","import ServicesApiBaseService from \"../services-api-base-service\";\r\nimport Microsite from \"../micro-site/microsite\";\r\n\r\nclass AdminService extends ServicesApiBaseService {\r\n  async deleteMicrosite(micrositeId: string) {\r\n    const res = await this.deleteObject(`${this.apiUrl}/admin/deleteMicrosite/${micrositeId}`);\r\n    return res;\r\n  }\r\n  async updateMicrosite(\r\n    micrositeId: string,\r\n    nameFr: string | undefined,\r\n    nameEn: string | undefined,\r\n    micrositeIdState: string | undefined,\r\n    logoUrl: string | undefined,\r\n    countryCode: string,\r\n    currency: string,\r\n    organizationId: string,\r\n    hubIds: Array<String>\r\n  ): Promise<any> {\r\n    const res = await this.postObject<any, any>(`${this.apiUrl}/admin/updateMicrosite`, {\r\n      id: micrositeId, // Can be changed through the cascade\r\n      name: {\r\n        fr: nameFr,\r\n        en: nameEn,\r\n      },\r\n      micrositeId: micrositeIdState,\r\n      logoUrl: logoUrl,\r\n      countryCode: countryCode,\r\n      currency: currency,\r\n      organizationId: organizationId,\r\n      hubIds: hubIds.join(\",\"),\r\n    });\r\n    return res;\r\n  }\r\n\r\n  async createMicrosite(\r\n    nameFr: string | undefined,\r\n    nameEn: string | undefined,\r\n    micrositeIdState: string | undefined,\r\n    logoUrl: string | undefined,\r\n    countryCode: string,\r\n    currency: string,\r\n    organizationId: string,\r\n    hubIds: Array<String>\r\n  ): Promise<any> {\r\n    const res = await this.postObject<any, any>(`${this.apiUrl}/admin/createMicrosite`, {\r\n      id: \"\",\r\n      name: {\r\n        fr: nameFr,\r\n        en: nameEn,\r\n      },\r\n      micrositeId: micrositeIdState,\r\n      logoUrl: logoUrl,\r\n      countryCode: countryCode,\r\n      currency: currency,\r\n      organizationId: organizationId,\r\n      hubIds: hubIds.join(\",\"),\r\n    });\r\n    return res;\r\n  }\r\n}\r\n\r\nconst adminService = new AdminService();\r\nexport default adminService;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport OrganizationHubAssociation from \"../../../services/organization/organization-hub-association\";\r\nimport \"../hub-permission-table.scss\";\r\n\r\ninterface Iprops {\r\n  hubs: Array<OrganizationHubAssociation>;\r\n  currentHubs: Array<string> | undefined;\r\n  setHubsIds: Function;\r\n}\r\n\r\nexport default function HubInclusionTable(props: Iprops) {\r\n  const { hubs, setHubsIds, currentHubs } = props;\r\n  const [selectedOptions, setSelectedOptions] = useState<{ [hubId: string]: boolean }>({});\r\n\r\n  useEffect(() => {\r\n    var initialSelections: any = {};\r\n\r\n    currentHubs?.forEach((hub) => {\r\n      initialSelections[hub] = true;\r\n    });\r\n\r\n    setSelectedOptions(initialSelections);\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    var newHubs: Array<string> = [];\r\n    hubs.forEach((hub) => {\r\n      if (selectedOptions[hub.hubId]) newHubs.push(hub.hubId);\r\n    });\r\n\r\n    setHubsIds(newHubs);\r\n  }, [selectedOptions, setHubsIds]);\r\n\r\n  const handleOptionChange = (hubId: string, option: boolean) => {\r\n    setSelectedOptions((prev) => {\r\n      const updatedOptions = { ...prev, [hubId]: option };\r\n      return updatedOptions;\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className=\"mt-5 mb-5\">\r\n      {hubs.map((hub) => (\r\n        <div key={hub.hubId}>\r\n          <span>\r\n            <b>{hub.hubId}</b>\r\n          </span>\r\n          <div className=\"permission-radio-group\">\r\n            <label>\r\n              <input\r\n                type=\"radio\"\r\n                name={`hub-${hub.hubId}`}\r\n                value=\"include\"\r\n                checked={selectedOptions[hub.hubId]}\r\n                onChange={() => handleOptionChange(hub.hubId, true)}\r\n              />\r\n              Include\r\n            </label>\r\n            <label>\r\n              <input\r\n                type=\"radio\"\r\n                name={`hub-${hub.hubId}`}\r\n                value=\"exclude\"\r\n                checked={!selectedOptions[hub.hubId]}\r\n                onChange={() => handleOptionChange(hub.hubId, false)}\r\n              />\r\n              Exclude\r\n            </label>\r\n          </div>\r\n        </div>\r\n      ))}\r\n    </div>\r\n  );\r\n}\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { InputComponent } from \"../../../components/input\";\r\nimport { ActionButtonComponent, DeleteButtonComponent } from \"../../../components/button-component\";\r\nimport micrositeService from \"../../../services/micro-site/microsite-service\";\r\nimport LoadingComponent from \"../../../components/loading-component\";\r\nimport adminService from \"../../../services/admin/admin-service\";\r\nimport HubInclusionTable from \"./hub-inclusion-table\";\r\nimport Organization from \"../../../services/organization/organization\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ninterface IParamTypes {\r\n  organizationId: string;\r\n  micrositeId: string;\r\n}\r\n\r\ninterface Props {\r\n  chosenOrg: Organization;\r\n}\r\n\r\nexport default function MicrositeAdminPage(props: Props) {\r\n  const { organizationId, micrositeId } = useParams<IParamTypes>();\r\n  const { chosenOrg } = props;\r\n\r\n  const [nameFr, setNameFr] = useState<string | undefined>(undefined);\r\n  const [nameEn, setNameEn] = useState<string | undefined>(undefined);\r\n  const [hubIds, setHubsIds] = useState<Array<string> | undefined>(undefined);\r\n  const [micrositeIdState, setMicrositeIdState] = useState<string | undefined>(undefined);\r\n  const [logoUrl, setLogoUrl] = useState<string | undefined>(undefined);\r\n  const [countryCode, setCountryCode] = useState<string | undefined>(\"\");\r\n  const [currency, setCurrency] = useState<string | undefined>(\"\");\r\n  const [loading, setLoading] = useState<boolean>(false);\r\n\r\n  const history = useHistory();\r\n  useEffect(() => {\r\n    async function fetchMicrosite() {\r\n      if (micrositeId === \"NEWMICROSITE\") return;\r\n      setLoading(true);\r\n      await micrositeService\r\n        .getMicrosite(micrositeId)\r\n        .then((micrositeData) => {\r\n          var nameMap: Map<string, string> = micrositeData?.name;\r\n          setNameFr(nameMap.get(\"fr\"));\r\n          setNameEn(nameMap.get(\"en\"));\r\n          setMicrositeIdState(micrositeData?.id);\r\n          setLogoUrl(micrositeData?.logoUrl);\r\n          setCountryCode(micrositeData?.countryCode);\r\n          setCurrency(micrositeData?.currency);\r\n          setHubsIds(micrositeData?.hubIds);\r\n        })\r\n        .catch((error) => {\r\n          console.error(\"Failed to fetch microsite data\", error);\r\n        });\r\n      setLoading(false);\r\n    }\r\n    fetchMicrosite();\r\n  }, [micrositeId]);\r\n\r\n  const handleSubmit = async () => {\r\n    setLoading(true);\r\n    try {\r\n      if (micrositeId === \"NEWMICROSITE\") {\r\n        await adminService.createMicrosite(\r\n          nameFr,\r\n          nameEn,\r\n          micrositeIdState,\r\n          logoUrl,\r\n          countryCode ?? \"\",\r\n          currency ?? \"\",\r\n          organizationId,\r\n          hubIds ?? []\r\n        );\r\n      } else {\r\n        await adminService.updateMicrosite(\r\n          micrositeId,\r\n          nameFr,\r\n          nameEn,\r\n          micrositeIdState,\r\n          logoUrl,\r\n          countryCode ?? \"\",\r\n          currency ?? \"\",\r\n          organizationId,\r\n          hubIds ?? []\r\n        );\r\n      }\r\n      history.push(`/organizations/${organizationId}/microsites`);\r\n    } catch (error) {\r\n      console.error(\"Failed to submit microsite data\", error);\r\n    }\r\n    setLoading(false);\r\n  };\r\n\r\n  const handleDelete = async () => {\r\n    setLoading(true);\r\n    try {\r\n      await adminService.deleteMicrosite(micrositeId);\r\n      history.push(`/organizations/${organizationId}/microsites`);\r\n    } catch (error) {\r\n      console.error(\"Failed to delete\", error);\r\n    }\r\n    setLoading(false);\r\n  };\r\n\r\n  if (loading) {\r\n    return <LoadingComponent loading={loading} />;\r\n  }\r\n\r\n  return (\r\n    <div className=\"container page admin-page pt-5\">\r\n      <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n        <h2 className=\"mb-3\">Microsite Database Admin</h2>\r\n        <div className=\"card\">\r\n          <div className=\"card-body\">\r\n            <form className=\"row g-3\" onSubmit={(ev) => ev.preventDefault()}>\r\n              <div className=\"col-md-6\">\r\n                <InputComponent\r\n                  labelText={\"Microsite Id (only lowercase and - )\"}\r\n                  setValue={(value: string) => setMicrositeIdState(value)}\r\n                  value={micrositeIdState ? micrositeIdState : \"\"}\r\n                  disabled={false}\r\n                  regExp={/^[a-z0-9-]+$/}\r\n                />\r\n              </div>\r\n              <div className=\"col-md-6\">\r\n                <InputComponent\r\n                  labelText={\"Country Code (CA or US)\"}\r\n                  setValue={(value: string) => setCountryCode(value)}\r\n                  value={countryCode ?? \"\"}\r\n                  disabled={false}\r\n                  regExp={/^(CA|US)$/}\r\n                />\r\n              </div>\r\n              <div className=\"col-md-6\">\r\n                <InputComponent\r\n                  labelText={\"NameEn\"}\r\n                  setValue={(value: string) => setNameEn(value)}\r\n                  value={nameEn ? nameEn : \"\"}\r\n                  disabled={false}\r\n                />\r\n              </div>\r\n              <div className=\"col-md-6\">\r\n                <InputComponent\r\n                  labelText={\"Currency (CAD or USD)\"}\r\n                  setValue={(value: string) => setCurrency(value)}\r\n                  value={currency ?? \"\"}\r\n                  disabled={false}\r\n                  regExp={/^(CAD|USD)$/}\r\n                />\r\n              </div>\r\n              <div className=\"col-md-6\">\r\n                <InputComponent\r\n                  labelText={\"NameFr\"}\r\n                  setValue={(value: string) => setNameFr(value)}\r\n                  value={nameFr ? nameFr : \"\"}\r\n                  disabled={false}\r\n                />\r\n              </div>\r\n              <div className=\"col-md-6\">\r\n                <InputComponent\r\n                  labelText={\"Logo URL\"}\r\n                  setValue={(value: string) => setLogoUrl(value)}\r\n                  value={logoUrl ? logoUrl : \"\"}\r\n                  disabled={false}\r\n                />\r\n              </div>\r\n              <HubInclusionTable hubs={chosenOrg.associatedHubs} setHubsIds={setHubsIds} currentHubs={hubIds} />\r\n              <div className=\"col-md-6\">\r\n                <ActionButtonComponent\r\n                  type=\"submit\"\r\n                  title={micrositeId === \"NEWMICROSITE\" ? \"Create\" : \"Update\"}\r\n                  onClick={() => {\r\n                    handleSubmit();\r\n                  }}\r\n                  className=\"btn btn-primary\"\r\n                  disabled={false}\r\n                />\r\n\r\n                <button\r\n                  className=\"btn btn-md btn-primary-outline\"\r\n                  type=\"submit\"\r\n                  style={{ marginLeft: 20 }}\r\n                  onClick={() => history.push(`/organizations/${organizationId}/microsites`)}\r\n                >\r\n                  {\"Cancel\"}\r\n                </button>\r\n                {micrositeId !== \"NEWMICROSITE\" && (\r\n                  <button\r\n                    className={`btn btn-danger`}\r\n                    style={{ marginLeft: 20 }}\r\n                    onClick={() => {\r\n                      handleDelete();\r\n                    }}\r\n                  >\r\n                    <FontAwesomeIcon icon={[\"fas\", \"trash-alt\"]} /> {\"Delete\"}\r\n                  </button>\r\n                )}\r\n              </div>\r\n            </form>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import OrganizationHubAssociation from \"./organization-hub-association\";\r\n\r\nexport default class Organization {\r\n  id: string = \"\";\r\n  name: string = \"\";\r\n\r\n  streetNumber: string = \"\";\r\n  street: string = \"\";\r\n  city: string = \"\";\r\n  state: string = \"\";\r\n  country: string = \"\";\r\n  postalCode: string = \"\";\r\n  lat: number | null = null;\r\n  lng: number | null = null;\r\n\r\n  active: boolean = true;\r\n  associatedHubs: Array<OrganizationHubAssociation> = [];\r\n}\r\n","import { FormEvent, MouseEvent, useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport memberService from \"../../services/member/member-service\";\r\nimport Organization from \"../../services/organization/organization\";\r\nimport Member from \"../../services/member/member\";\r\nimport { Hub } from \"../../services/hub/hub\";\r\nimport hubService from \"../../services/hub/hub-service\";\r\nimport OrganizationHubAssociation from \"../../services/organization/organization-hub-association\";\r\nimport { InputComponent } from \"../../components/input\";\r\nimport organizationService from \"../../services/member/organization-service\";\r\nimport { PhoneFormComponent } from \"../../components/customer-information-components/phone-component\";\r\nimport WaitingComponent from \"../../components/waiting-component\";\r\n\r\ntype Props = {\r\n  member: Member;\r\n  changeMember: any;\r\n};\r\n\r\nexport default function CreateOrganizationPage(props: Props) {\r\n  const { member, changeMember } = props;\r\n  const [hubs, setHubs] = useState<Array<Hub>>([]);\r\n  const history = useHistory();\r\n  const { t } = useTranslation();\r\n\r\n  const [step, setStep] = useState<number>(1);\r\n\r\n  const [phone, setPhone] = useState<string>(member?.phone || \"\");\r\n  const [phoneExtension, setPhoneExtension] = useState<number | undefined>(member?.phoneExtension);\r\n  const [phoneError, setPhoneError] = useState<string>();\r\n  const [phoneExtentionError, setPhoneExtensionError] = useState<string>();\r\n\r\n  const [orgName, setOrgName] = useState<string>(\"\");\r\n  const [orgAddressStreetNumber, setOrgAddressStreetNumber] = useState<string>(\"\");\r\n  const [orgAddressStreet, setOrgAddressStreet] = useState<string>(\"\");\r\n  const [orgAddressCity, setOrgAddressCity] = useState<string>(\"\");\r\n  const [orgAddressPostalCode, setOrgAddressPostalCode] = useState<string>(\"\");\r\n  const [orgAddressState, setOrgAddressState] = useState<string>(\"\");\r\n  const [orgAddressCountry, setOrgAddressCountry] = useState<string>(\"\");\r\n  const [orgAssociatedHubs, setOrgAssociatedHubs] = useState<Array<OrganizationHubAssociation>>([]);\r\n  const [loading, setLoading] = useState<boolean>(false);\r\n\r\n  useEffect(() => {\r\n    hubService.getHubs().then((hubs) => {\r\n      setHubs(hubs);\r\n    });\r\n  }, []);\r\n\r\n  const optsNextMarchantOrg: any = {};\r\n  if (!orgName || orgAssociatedHubs.length === 0) {\r\n    optsNextMarchantOrg[\"disabled\"] = \"disabled\";\r\n  }\r\n\r\n  const optsNextMarchantMember: any = {};\r\n  if (!phone) {\r\n    optsNextMarchantMember[\"disabled\"] = \"disabled\";\r\n  }\r\n\r\n  if (loading) {\r\n    return <WaitingComponent />;\r\n  }\r\n\r\n  return (\r\n    <div className=\"container pt-3\">\r\n      <div className=\"row mt-5\">\r\n        <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n          {step === 1 && (\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <div className=\"d-inline-block\">\r\n                  <h2>Create Organization</h2>\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"card-body\">\r\n                <p>{t(\"create-org.creation-message1\")}</p>\r\n                <p>{t(\"create-org.creation-message2\")}</p>\r\n                <button className=\"btn btn-outline-primary me-2\" onClick={onPreviousStep}>\r\n                  {t(\"common.previous\")}\r\n                </button>\r\n                <button className=\"btn btn-primary\" onClick={onNextStep}>\r\n                  {t(\"create-org.start-creation\")}\r\n                </button>\r\n              </div>\r\n            </div>\r\n          )}\r\n\r\n          {step === 2 && (\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <div className=\"d-inline-block\">\r\n                  <h2>{t(\"create-org.finalize-profile\")}</h2>\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"card-body\">\r\n                <p>Put the phone number of the person in charge of that Organization</p>\r\n                <div className=\"mb-3 row\">\r\n                  <div className=\"col-8\">\r\n                    <PhoneFormComponent\r\n                      value={phone}\r\n                      setValue={setPhone}\r\n                      onMsgErrorChanged={setPhoneError}\r\n                      msgError={phoneError}\r\n                      label={t(\"create-merchant-org.enter-phone\")}\r\n                      required={false}\r\n                    />\r\n                  </div>\r\n                  <div className=\"col-4\">\r\n                    <InputComponent\r\n                      labelText={t(\"member-profile.extension\")}\r\n                      regExp={/^[0-9]*$/}\r\n                      type=\"extension\"\r\n                      value={phoneExtension ? phoneExtension.toString() : \"\"}\r\n                      setValue={(value: number) => setPhoneExtension(value)}\r\n                      msgError={phoneExtentionError}\r\n                      onMsgErrorChanged={setPhoneExtensionError}\r\n                      required={false}\r\n                    />\r\n                  </div>\r\n                </div>\r\n\r\n                <button className=\"btn btn-outline-primary me-2\" onClick={onPreviousStep}>\r\n                  {t(\"common.previous\")}\r\n                </button>\r\n                <button className=\"btn btn-primary\" {...optsNextMarchantMember} onClick={onNextStep}>\r\n                  {t(\"common.next\")}\r\n                </button>\r\n              </div>\r\n            </div>\r\n          )}\r\n\r\n          {step === 3 && (\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <div className=\"d-inline-block\">\r\n                  <h2>{t(\"create-org.organization-information\")}</h2>\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"card-body\">\r\n                <div className=\"mb-3\">\r\n                  <label htmlFor=\"orgname\" className=\"form-label\">\r\n                    {t(\"create-org.orgName\")}*\r\n                  </label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={orgName}\r\n                    onChange={(event: FormEvent<HTMLInputElement>) => setOrgName(event.currentTarget.value)}\r\n                  />\r\n                </div>\r\n\r\n                <p className=\"fw-bold\">{t(\"create-org.address\")}</p>\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"create-org.streetNumber\")}</label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={orgAddressStreetNumber}\r\n                    onChange={(event: FormEvent<HTMLInputElement>) => setOrgAddressStreetNumber(event.currentTarget.value)}\r\n                  />\r\n                </div>\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"create-org.street\")}</label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={orgAddressStreet}\r\n                    onChange={(event: FormEvent<HTMLInputElement>) => setOrgAddressStreet(event.currentTarget.value)}\r\n                  />\r\n                </div>\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"create-org.city\")}</label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={orgAddressCity}\r\n                    onChange={(event: FormEvent<HTMLInputElement>) => setOrgAddressCity(event.currentTarget.value)}\r\n                  />\r\n                </div>\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"create-org.postal-code\")}</label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={orgAddressPostalCode}\r\n                    onChange={(event: FormEvent<HTMLInputElement>) => setOrgAddressPostalCode(event.currentTarget.value)}\r\n                  />\r\n                </div>\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"create-org.state\")}</label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={orgAddressState}\r\n                    onChange={(event: FormEvent<HTMLInputElement>) => setOrgAddressState(event.currentTarget.value)}\r\n                  />\r\n                </div>\r\n                <div className=\"mb-3\">\r\n                  <label className=\"form-label\">{t(\"create-org.country\")}</label>\r\n                  <input\r\n                    className=\"form-control\"\r\n                    value={orgAddressCountry}\r\n                    onChange={(event: FormEvent<HTMLInputElement>) => setOrgAddressCountry(event.currentTarget.value)}\r\n                  />\r\n                </div>\r\n\r\n                <p className=\"fw-bold\">{t(\"create-org.locations\")}</p>\r\n                {hubs.map((hub) => {\r\n                  let address = \"\";\r\n                  if (hub.address) {\r\n                    address = `${hub.address.streetNumber} ${hub.address.street}, ${hub.address.city}, ${hub.address.state} ${hub.address.country}, ${hub.address.postalCode}`;\r\n                  }\r\n                  return (\r\n                    <div className=\"mb-3 form-check\" key={hub.id}>\r\n                      <input type=\"checkbox\" className=\"form-check-input\" onChange={() => onHubSelectionChange(hub.id)} />\r\n                      <label className=\"form-check-label\" key={hub.id}>\r\n                        <strong>{hub.name}</strong> {address}\r\n                      </label>\r\n                    </div>\r\n                  );\r\n                })}\r\n\r\n                <div className=\"mt-4\">\r\n                  <button className=\"btn btn-outline-primary me-2\" onClick={onPreviousStep}>\r\n                    {t(\"common.previous\")}\r\n                  </button>\r\n                  <button className=\"btn btn-primary\" {...optsNextMarchantOrg} onClick={onNextStep}>\r\n                    {t(\"create-org.create-org\")}\r\n                  </button>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          )}\r\n\r\n          {step === 4 && (\r\n            <div className=\"card\">\r\n              <div className=\"card-header align-items-center\">\r\n                <div className=\"d-inline-block\">\r\n                  <h2>\r\n                    {t(\"create-org.organization-created-title\", {\r\n                      name: orgName,\r\n                    })}\r\n                  </h2>\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"card-body\">\r\n                <p className=\"fw-bold\">{t(\"create-org.organization-created-message\")}</p>\r\n\r\n                <div className=\"mt-4\">\r\n                  <button\r\n                    className=\"btn btn-primary\"\r\n                    onClick={() => {\r\n                      history.push(\"/\");\r\n                    }}\r\n                  >\r\n                    {t(\"create-org.return-menu\")}\r\n                  </button>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n  function onPreviousStep(event: MouseEvent) {\r\n    event.preventDefault();\r\n    setStep(step - 1);\r\n  }\r\n\r\n  async function onNextStep(event: MouseEvent) {\r\n    event.preventDefault();\r\n\r\n    if (step === 3) {\r\n      setLoading(true);\r\n      const organization = new Organization();\r\n      organization.name = orgName;\r\n      organization.streetNumber = orgAddressStreetNumber;\r\n      organization.street = orgAddressStreet;\r\n      organization.city = orgAddressCity;\r\n      organization.postalCode = orgAddressPostalCode;\r\n      organization.state = orgAddressState;\r\n      organization.country = orgAddressCountry;\r\n      organization.associatedHubs = orgAssociatedHubs;\r\n\r\n      await organizationService.createOrganization(organization);\r\n      changeMember(await memberService.getMemberMe());\r\n      setLoading(false);\r\n    }\r\n\r\n    setStep(step + 1);\r\n  }\r\n\r\n  async function onHubSelectionChange(hubId: string) {\r\n    let newLocations = [...orgAssociatedHubs];\r\n    const index = orgAssociatedHubs.findIndex((associatedHub) => associatedHub.hubId === hubId);\r\n    if (index >= 0) {\r\n      newLocations.splice(index, 1);\r\n    } else {\r\n      newLocations.push({\r\n        hubId: hubId,\r\n        state: \"Approved\",\r\n      });\r\n    }\r\n    setOrgAssociatedHubs(newLocations);\r\n  }\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport \"./App.scss\";\r\nimport { Route, useHistory, withRouter } from \"react-router-dom\";\r\nimport SignUpPage from \"./pages/account/signup-page\";\r\nimport OrdersPage from \"./pages/orders/orders-page\";\r\nimport DatabaseAdminPage from \"./pages/admin/database-admin-page\";\r\nimport CustomersPage from \"./pages/customers/customers-page\";\r\nimport OrderPage from \"./pages/orders/order-page\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\r\nimport { ReactPlugin } from \"@microsoft/applicationinsights-react-js\";\r\nimport { createBrowserHistory } from \"history\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport languageService from \"./services/core/language-service\";\r\nimport authService from \"./services/auth/auth-service\";\r\nimport Member from \"./services/member/member\";\r\nimport { HeaderNavbar } from \"./components/header\";\r\nimport MemberRoleOrganization from \"./services/member/member-role-organization\";\r\nimport OrganizationsPage from \"./pages/account/organizations-page\";\r\nimport OrganizationPage from \"./pages/account/organization-page\";\r\nimport MemberPage from \"./pages/account/member-page\";\r\nimport CreateOrderPage from \"./pages/orders/create-order-page\";\r\nimport { AuthenticatedTemplate, UnauthenticatedTemplate } from \"@azure/msal-react\";\r\nimport NoConnectionPage from \"./pages/home/no-connection-page\";\r\nimport WaitingComponent from \"./components/waiting-component\";\r\nimport DelayCompoment from \"./components/delay-component\";\r\nimport { Toaster } from \"react-hot-toast\";\r\nimport { CreateCustomerPage } from \"./pages/customers/create-customer-page\";\r\nimport { EditCustomerPage } from \"./pages/customers/edit-customer-page\";\r\nimport MicroSitePage from \"./pages/micro-site/micro-site-page\";\r\nimport ReserveLockerPage from \"./pages/micro-site/reserve-locker\";\r\nimport HubsPage from \"./pages/hubs/hubs-page\";\r\nimport HubPage from \"./pages/hubs/hub-page\";\r\nimport MyReservationsPage from \"./pages/reservations/my-reservations-page\";\r\nimport OrderExpiredPage from \"./pages/micro-site/order-expired-page\";\r\nimport memberService from \"./services/member/member-service\";\r\nimport DashboardPage from \"./pages/dashboard/dashboard-page\";\r\nimport MicrositesPage from \"./pages/events/microsites-page\";\r\nimport EventsPage from \"./pages/events/events-page\";\r\nimport EventPage from \"./pages/events/event-page\";\r\nimport ContributorReserveLockerPage from \"./pages/micro-site/contributor-reserve-locker-page\";\r\nimport RelocatePage from \"./pages/orders/relocate-page\";\r\nimport EventSettlementReportPage from \"./pages/events/event-settlement-report\";\r\nimport { HubActivitiesPage } from \"./pages/hubs/hub-activities-page\";\r\nimport GetLocketgoLogoSource, { AssetColors } from \"./assets/assets-colors\";\r\nimport ReserveLockerSignInPage from \"./pages/micro-site/reserve-locker-signin\";\r\nimport HomeNotRegisteredPage from \"./pages/home/home-not-registered-page\";\r\nimport MicrositeAdminPage from \"./pages/admin/microsite-cms/microsite-admin\";\r\nimport CreateOrganizationPage from \"./pages/account/create-organization\";\r\n\r\n/* \r\n  AppInsights\r\n */\r\nconst browserHistory = createBrowserHistory({ basename: \"\" });\r\nconst reactPlugin = new ReactPlugin();\r\nconst appInsights = new ApplicationInsights({\r\n  config: {\r\n    instrumentationKey: \"cb42ef3d-5c2a-41fe-9f34-477a50329b27\",\r\n    extensions: [reactPlugin],\r\n    extensionConfig: {\r\n      [reactPlugin.identifier]: { history: browserHistory },\r\n    },\r\n  },\r\n});\r\nappInsights.loadAppInsights();\r\nexport { reactPlugin, appInsights };\r\n\r\n/* \r\n  The Application \r\n*/\r\nfunction App() {\r\n  const [loading, setLoading] = useState<boolean>(true);\r\n  const [isSquareLoaded, setSquareLoaded] = useState(false);\r\n  const [member, setMember] = useState<Member | null>(null);\r\n  const [activeOrganization, setActiveOrganization] = useState<MemberRoleOrganization | null>(null);\r\n  const [, setLanguage] = useState<string>(languageService.getLanguage());\r\n  const [delayExpired, setDelayExpired] = useState<boolean>(false);\r\n  const [noConnection, setNoConnection] = useState<boolean>(false);\r\n  const logo = GetLocketgoLogoSource(AssetColors.Black);\r\n\r\n  const { t, i18n } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const isMicrosite: boolean =\r\n    browserHistory.location.pathname.includes(\"/sites/\") ||\r\n    browserHistory.location.pathname.includes(\"/my-reservations\") ||\r\n    browserHistory.location.pathname.includes(\"/my-orders\");\r\n\r\n  document.title = t(\"common.appTitle\");\r\n\r\n  useEffect(() => {\r\n    console.log(\"App.useEffect start. [autologinRedirectUri=\" + localStorage.getItem(\"autologinRedirectUri\") + \"]\");\r\n\r\n    const autoLogin = async () => {\r\n      const loginResponse = await authService.autoLogin();\r\n      setNoConnection(loginResponse.error);\r\n      changeMember(loginResponse.member);\r\n\r\n      setLoading(false);\r\n      console.log(\"App.useEffect autologin done.\");\r\n\r\n      let autologinRedirectUri = localStorage.getItem(\"autologinRedirectUri\");\r\n      if (loginResponse.member && autologinRedirectUri) {\r\n        console.log(\"autologinRedirectUri\", autologinRedirectUri);\r\n        localStorage.removeItem(\"autologinRedirectUri\");\r\n        history.push(autologinRedirectUri);\r\n      }\r\n    };\r\n    autoLogin();\r\n\r\n    authService.registerCallback(() => {\r\n      console.log(\"App.registerCallback\");\r\n      autoLogin();\r\n    });\r\n\r\n    let interval = setTimeout(() => {\r\n      setDelayExpired(true);\r\n    }, 3000);\r\n\r\n    if (!isSquareLoaded) {\r\n      let sqPaymentScript = document.createElement(\"script\");\r\n      sqPaymentScript.src = process.env.REACT_APP_SQUARE_SCRIPT || \"\";\r\n      sqPaymentScript.type = \"text/javascript\";\r\n      sqPaymentScript.async = false;\r\n      sqPaymentScript.onload = () => {\r\n        console.log(\"PaymentLib loaded.\");\r\n        setSquareLoaded(true);\r\n      };\r\n      document.getElementsByTagName(\"head\")[0].appendChild(sqPaymentScript);\r\n    }\r\n\r\n    console.log(\"App.useEffect end.\");\r\n\r\n    return () => clearInterval(interval);\r\n  }, []);\r\n\r\n  if (loading) {\r\n    return (\r\n      <DelayCompoment waitBeforeShow={750}>\r\n        <WaitingComponent />\r\n      </DelayCompoment>\r\n    );\r\n  }\r\n\r\n  const orgContributor = memberService.isOrganizationContributor(member, activeOrganization?.entity?.id);\r\n  const isHubContributor = memberService.isHubContributor(member, undefined);\r\n  const isOrganizationContributor = memberService.isOrganizationContributor(member, undefined);\r\n  const isConcierge = memberService.isConcierge(member);\r\n\r\n  if (noConnection) {\r\n    return <>{delayExpired && <NoConnectionPage changeLanguage={changeLanguage} />}</>;\r\n  }\r\n\r\n  if (noConnection) {\r\n    return <>{delayExpired && <NoConnectionPage changeLanguage={changeLanguage} />}</>;\r\n  }\r\n\r\n  return (\r\n    <>\r\n      <Toaster position={\"top-right\"} />\r\n      {isMicrosite && (\r\n        <div className=\"container container-site mb-3 mb-lg-5\">\r\n          <div className=\"row\">\r\n            <div className=\"col-12 offset-lg-2 col-lg-8\">\r\n              <img src={logo} alt=\"\" className=\"img-logo img-logo-locketgo\" />\r\n              <button className=\"nav-link float-end\" onClick={changeLanguage}>\r\n                <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"globe\"]} />\r\n                {t(\"language.display-long\")}\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      )}\r\n\r\n      <UnauthenticatedTemplate>\r\n        {!member && (\r\n          <>\r\n            <Route exact path=\"/\">\r\n              <SignUpPage changeMember={changeMember} changeLanguage={changeLanguage} />\r\n            </Route>\r\n            <Route exact path=\"/signup\">\r\n              <SignUpPage changeMember={changeMember} changeLanguage={changeLanguage} />\r\n            </Route>\r\n\r\n            <Route exact path=\"/my-reservations/:token\">\r\n              <MyReservationsPage />\r\n            </Route>\r\n          </>\r\n        )}\r\n      </UnauthenticatedTemplate>\r\n\r\n      <AuthenticatedTemplate>\r\n        {!isMicrosite && member && activeOrganization && (\r\n          <header>\r\n            <HeaderNavbar\r\n              member={member}\r\n              activeOrganization={activeOrganization}\r\n              changeLanguage={changeLanguage}\r\n              changeMember={changeMember}\r\n            />\r\n          </header>\r\n        )}\r\n\r\n        {!isMicrosite && member && isConcierge && !activeOrganization && (\r\n          <header>\r\n            <div className=\"container container-site mb-3 mb-lg-5\">\r\n              <div className=\"row\">\r\n                <div className=\"col-12\">\r\n                  <img src={logo} alt=\"\" className=\"img-logo img-logo-locketgo\" />\r\n                  <button className=\"nav-link float-end\" onClick={changeLanguage}>\r\n                    <FontAwesomeIcon className=\"me-2\" icon={[\"fas\", \"globe\"]} />\r\n                    {t(\"language.display-long\")}\r\n                  </button>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </header>\r\n        )}\r\n\r\n        {/* Root page */}\r\n        {member && (isHubContributor || isOrganizationContributor) && (\r\n          <Route exact path=\"/\">\r\n            <DashboardPage member={member} />\r\n          </Route>\r\n        )}\r\n\r\n        {/* No Associations */}\r\n        {member &&\r\n          !isHubContributor &&\r\n          !isOrganizationContributor &&\r\n          (!isConcierge ? (\r\n            <Route exact path=\"/\">\r\n              <HomeNotRegisteredPage member={member} changeLanguage={changeLanguage} changeMember={changeMember} />\r\n            </Route>\r\n          ) : (\r\n            <Route exact path=\"/\">\r\n              <HubsPage member={member} />\r\n            </Route>\r\n          ))}\r\n\r\n        {member && activeOrganization && (\r\n          <>\r\n            {orgContributor && (\r\n              <>\r\n                <Route exact path=\"/organizations/:organizationId\">\r\n                  <OrganizationPage member={member} changeMember={changeMember} />\r\n                </Route>\r\n                <Route exact path=\"/organizations/:organizationId/microsites\">\r\n                  <MicrositesPage member={member} />\r\n                </Route>\r\n                <Route exact path=\"/organizations/:organizationId/microsites/:micrositeId/reservationBlocks\">\r\n                  <EventsPage member={member} />\r\n                </Route>\r\n                <Route exact path=\"/organizations/:organizationId/microsites/:micrositeId/reservationBlocks/:eventId\">\r\n                  <EventPage member={member} />\r\n                </Route>\r\n                <Route exact path=\"/organizations/:organizationId/microsites/:micrositeId/reservationBlocks/:eventId/sales-report\">\r\n                  <EventSettlementReportPage member={member} />\r\n                </Route>\r\n                <Route\r\n                  exact\r\n                  path=\"/organizations/:organizationId/microsites/:micrositeId/reservationBlocks/:reservationBlockId/reserve-locker\"\r\n                >\r\n                  <ContributorReserveLockerPage member={member} setNoConnection={setNoConnection} />\r\n                </Route>\r\n\r\n                {activeOrganization.entity && (\r\n                  <>\r\n                    <Route exact path=\"/orders\">\r\n                      <OrdersPage organization={activeOrganization.entity} member={member} />\r\n                    </Route>\r\n                    <Route exact path=\"/orders/:orderId\">\r\n                      <OrderPage organization={activeOrganization.entity} member={member} />\r\n                    </Route>\r\n                    <Route exact path=\"/orders/:orderId/items/:itemId/relocate\">\r\n                      <RelocatePage organizationId={activeOrganization.entity?.id} member={member} />\r\n                    </Route>\r\n                    <Route exact path=\"/create-order\">\r\n                      <CreateOrderPage organization={activeOrganization.entity} member={member}></CreateOrderPage>\r\n                    </Route>\r\n                    <Route exact path=\"/create-return\">\r\n                      <CreateOrderPage isReturn={true} organization={activeOrganization.entity} member={member}></CreateOrderPage>\r\n                    </Route>\r\n\r\n                    <Route exact path=\"/customers\">\r\n                      <CustomersPage organization={activeOrganization.entity} />\r\n                    </Route>\r\n                    {memberService.isLocketgoAdmin(member) && (\r\n                      <>\r\n                        <Route exact path=\"/database-admin\">\r\n                          <DatabaseAdminPage member={member} />\r\n                        </Route>\r\n                        <Route exact path=\"/database-admin/microsite/:organizationId/:micrositeId\">\r\n                          <MicrositeAdminPage chosenOrg={activeOrganization.entity} />\r\n                        </Route>\r\n                        <Route exact path=\"/create-organization\">\r\n                          <CreateOrganizationPage member={member} changeMember={changeMember} />\r\n                        </Route>\r\n                        <Route path=\"/customers/:customerId\">\r\n                          {<EditCustomerPage organization={activeOrganization.entity} user={member} />}\r\n                        </Route>\r\n                        <Route exact path=\"/create-customer\">\r\n                          <CreateCustomerPage organization={activeOrganization.entity} />\r\n                        </Route>\r\n                      </>\r\n                    )}\r\n                  </>\r\n                )}\r\n              </>\r\n            )}\r\n\r\n            <Route exact path=\"/organizations\">\r\n              <OrganizationsPage\r\n                member={member}\r\n                activeOrganization={activeOrganization}\r\n                changeActiveOrganization={changeActiveOrganization}\r\n              />\r\n            </Route>\r\n          </>\r\n        )}\r\n\r\n        {member && (\r\n          <>\r\n            {member.associatedHubs?.length > 0 && (\r\n              <>\r\n                <Route exact path=\"/hubs\">\r\n                  {<HubsPage member={member} />}\r\n                </Route>\r\n\r\n                <Route path=\"/hubs/:hubId/activities\">\r\n                  <HubActivitiesPage member={member} />\r\n                </Route>\r\n\r\n                <Route exact path=\"/hubs/:hubId/\">\r\n                  <HubPage member={member} />\r\n                </Route>\r\n              </>\r\n            )}\r\n            <Route exact path=\"/member-profile\">\r\n              {<MemberPage member={member} changeMember={changeMember} />}\r\n            </Route>\r\n            {/**\r\n            <Route exact path=\"/create-organization\">\r\n              <CreateMerchantOrganizationPage member={member} changeMember={changeMember} />\r\n              { {<CreateOrganizationPage member={member} changeMember={changeMember} />} }\r\n            </Route>\r\n            <Route exact path=\"/my-reservations\">\r\n              <MyReservationsPage />\r\n            </Route>\r\n            **/}\r\n          </>\r\n        )}\r\n      </AuthenticatedTemplate>\r\n\r\n      <Route exact path=\"/sites/:micrositeId\">\r\n        {<MicroSitePage member={member} setNoConnection={setNoConnection} />}\r\n      </Route>\r\n      <Route exact path=\"/sites/reservation-expired/:micrositeId\">\r\n        {<OrderExpiredPage />}\r\n      </Route>\r\n      <Route exact path=\"/sites/:micrositeId/signin-reserve-locker/:reservationBlockId\">\r\n        {<ReserveLockerSignInPage />}\r\n      </Route>\r\n      <Route exact path=\"/sites/:micrositeId/reserve-locker/:reservationBlockId/token/:token\">\r\n        {<ReserveLockerPage />}\r\n      </Route>\r\n      <Route exact path=\"/my-orders/:token\">\r\n        <MyReservationsPage />\r\n      </Route>\r\n\r\n      {/* <Route exact path=\"/admin-debug\">\r\n            <AdminPage />\r\n          </Route> */}\r\n    </>\r\n  );\r\n\r\n  function changeLanguage() {\r\n    const newLanguage = languageService.changeLanguage();\r\n    i18n.changeLanguage(newLanguage);\r\n    setLanguage(newLanguage);\r\n    document.title = t(\"common.appTitle\");\r\n  }\r\n\r\n  function changeMember(newMember: Member | null) {\r\n    setMember(newMember);\r\n\r\n    if (newMember && newMember.associatedOrganizations.length > 0) {\r\n      let organizationId = localStorage.getItem(\"organizationId\");\r\n\r\n      if (organizationId) {\r\n        let temp = newMember.associatedOrganizations.find((org: MemberRoleOrganization) => org.entity?.id === organizationId);\r\n\r\n        if (temp) {\r\n          changeActiveOrganization(temp);\r\n        } else {\r\n          changeActiveOrganization(newMember.associatedOrganizations[0]);\r\n        }\r\n      } else {\r\n        changeActiveOrganization(newMember.associatedOrganizations[0]);\r\n      }\r\n    } else {\r\n      changeActiveOrganization(null);\r\n    }\r\n\r\n    return member;\r\n  }\r\n\r\n  function changeActiveOrganization(newActiveOrganization: MemberRoleOrganization | null) {\r\n    setActiveOrganization(newActiveOrganization);\r\n    newActiveOrganization?.entity?.id && localStorage.setItem(\"organizationId\", newActiveOrganization?.entity?.id);\r\n  }\r\n}\r\n\r\nexport default withRouter(App);\r\n","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n  if (onPerfEntry && onPerfEntry instanceof Function) {\r\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n      getCLS(onPerfEntry);\r\n      getFID(onPerfEntry);\r\n      getFCP(onPerfEntry);\r\n      getLCP(onPerfEntry);\r\n      getTTFB(onPerfEntry);\r\n    });\r\n  }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import i18n from \"i18next\";\r\nimport Backend from \"i18next-http-backend\";\r\n//import LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport languageService from \"./services/core/language-service\";\r\n\r\ni18n\r\n  // load translation using http -> see /public/locales\r\n  // learn more: https://github.com/i18next/i18next-http-backend\r\n  .use(Backend)\r\n  // detect user language\r\n  // learn more: https://github.com/i18next/i18next-browser-languageDetector\r\n  //.use(LanguageDetector)\r\n  // pass the i18n instance to react-i18next.\r\n  .use(initReactI18next)\r\n  // init i18next\r\n  // for all options read: https://www.i18next.com/overview/configuration-options\r\n  .init({\r\n    fallbackLng: languageService.getLanguage(),\r\n    debug: true,\r\n\r\n    interpolation: {\r\n      escapeValue: false, // not needed for react as it escapes by default\r\n    },\r\n  });\r\n\r\nexport default i18n;\r\n","import React, { Suspense } from \"react\";\r\nimport { createRoot } from \"react-dom/client\";\r\nimport App from \"./App\";\r\nimport reportWebVitals from \"./reportWebVitals\";\r\nimport { IconDefinition, library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport \"./i18n.ts\"; // import i18n (needs to be bundled ;))\r\nimport \"bootstrap\";\r\nimport { MsalProvider } from \"@azure/msal-react\";\r\nimport msalInstance from \"./services/auth/msal-instance\";\r\nimport \"./styles/index.scss\";\r\n/* \r\n  Font Awesome icons that could be used in the solution\r\n  https://fontawesome.com/v5.15/how-to-use/on-the-web/using-with/react\r\n*/\r\nimport {\r\n  faAngleDoubleLeft,\r\n  faAngleDoubleRight,\r\n  faAngleDown,\r\n  faAngleLeft,\r\n  faAngleRight,\r\n  faAngleUp,\r\n  faBars,\r\n  faBox,\r\n  faCheckCircle,\r\n  faCircle,\r\n  faClock,\r\n  faCog,\r\n  faEdit,\r\n  faExclamationTriangle,\r\n  faFileExport,\r\n  faGlobe,\r\n  faInfo,\r\n  faInfoCircle,\r\n  faLock,\r\n  faLockOpen,\r\n  faMapMarkerAlt,\r\n  faMinusCircle,\r\n  faPen,\r\n  faPlus,\r\n  faSearch,\r\n  faSpinner,\r\n  faSquare,\r\n  faSync,\r\n  faTrashAlt,\r\n  faUser,\r\n  faUserLock,\r\n  faUsers,\r\n  faPaperPlane,\r\n  faBan,\r\n  faBell,\r\n  faCreditCard,\r\n  faTag,\r\n  faFileInvoiceDollar,\r\n  faExternalLinkSquareAlt,\r\n  faArrowLeft,\r\n  faCube,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport { faSquare as faSquareRegular } from \"@fortawesome/free-regular-svg-icons\";\r\nimport moment from \"moment\";\r\nimport WaitingComponent from \"./components/waiting-component\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\n\r\nlibrary.add(\r\n  faBox as IconDefinition,\r\n  faUser as IconDefinition,\r\n  faUsers as IconDefinition,\r\n  faPlus as IconDefinition,\r\n  faMapMarkerAlt as IconDefinition,\r\n  faPen as IconDefinition,\r\n  faTrashAlt as IconDefinition,\r\n  faAngleDown as IconDefinition,\r\n  faAngleUp as IconDefinition,\r\n  faCircle as IconDefinition,\r\n  faLock as IconDefinition,\r\n  faLockOpen as IconDefinition,\r\n  faCog as IconDefinition,\r\n  faSearch as IconDefinition,\r\n  faSpinner as IconDefinition,\r\n  faAngleLeft as IconDefinition,\r\n  faAngleRight as IconDefinition,\r\n  faAngleDoubleLeft as IconDefinition,\r\n  faAngleDoubleRight as IconDefinition,\r\n  faCheckCircle as IconDefinition,\r\n  faClock as IconDefinition,\r\n  faMinusCircle as IconDefinition,\r\n  faInfo as IconDefinition,\r\n  faExclamationTriangle as IconDefinition,\r\n  faBars as IconDefinition,\r\n  faSync as IconDefinition,\r\n  faSquare as IconDefinition,\r\n  faSquareRegular as IconDefinition,\r\n  faGlobe as IconDefinition,\r\n  faInfoCircle as IconDefinition,\r\n  faEdit as IconDefinition,\r\n  faUserLock as IconDefinition,\r\n  faPaperPlane as IconDefinition,\r\n  faBan as IconDefinition,\r\n  faBell as IconDefinition,\r\n  faEdit as IconDefinition,\r\n  faFileExport as IconDefinition,\r\n  faCreditCard as IconDefinition,\r\n  faTag as IconDefinition,\r\n  faAngleRight as IconDefinition,\r\n  faFileInvoiceDollar as IconDefinition,\r\n  faExternalLinkSquareAlt as IconDefinition,\r\n  faArrowLeft as IconDefinition,\r\n  faCube as IconDefinition\r\n);\r\n\r\nmoment.locale(\"fr\", {\r\n  months: \"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),\r\n  monthsShort: \"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),\r\n  monthsParseExact: true,\r\n  weekdays: \"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),\r\n  weekdaysShort: \"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),\r\n  weekdaysMin: \"Di_Lu_Ma_Me_Je_Ve_Sa\".split(\"_\"),\r\n  weekdaysParseExact: true,\r\n  longDateFormat: {\r\n    LT: \"HH:mm\",\r\n    LTS: \"HH:mm:ss\",\r\n    L: \"DD/MM/YYYY\",\r\n    LL: \"D MMMM YYYY\",\r\n    LLL: \"D MMMM YYYY HH:mm\",\r\n    LLLL: \"dddd D MMMM YYYY HH:mm\",\r\n  },\r\n  calendar: {\r\n    sameDay: \"[Aujourd'hui à] LT\",\r\n    nextDay: \"[Demain à] LT\",\r\n    nextWeek: \"dddd [à] LT\",\r\n    lastDay: \"[Hier à] LT\",\r\n    lastWeek: \"dddd [dernier à] LT\",\r\n    sameElse: \"L\",\r\n  },\r\n  relativeTime: {\r\n    future: \"dans %s\",\r\n    past: \"il y a %s\",\r\n    s: \"quelques secondes\",\r\n    m: \"une minute\",\r\n    mm: \"%d minutes\",\r\n    h: \"une heure\",\r\n    hh: \"%d heures\",\r\n    d: \"un jour\",\r\n    dd: \"%d jours\",\r\n    M: \"un mois\",\r\n    MM: \"%d mois\",\r\n    y: \"un an\",\r\n    yy: \"%d ans\",\r\n  },\r\n  dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\r\n  ordinal: function (number) {\r\n    return number + (number === 1 ? \"er\" : \"e\");\r\n  },\r\n  meridiemParse: /PD|MD/,\r\n  isPM: function (input) {\r\n    return input.charAt(0) === \"M\";\r\n  },\r\n  // In case the meridiem units are not separated around 12, then implement\r\n  // this function (look at locale/id.js for an example).\r\n  // meridiemHour : function (hour, meridiem) {\r\n  //     return /* 0-23 hour, given meridiem token and hour 1-12 */ ;\r\n  // },\r\n  meridiem: function (hours, minutes, isLower) {\r\n    return hours < 12 ? \"PD\" : \"MD\";\r\n  },\r\n  week: {\r\n    dow: 1, // Monday is the first day of the week.\r\n    doy: 4, // Used to determine first week of the year.\r\n  },\r\n});\r\n\r\nfunction AppLoadingComponent() {\r\n  return (\r\n    <div className=\"container page\">\r\n      <div className=\"app\">\r\n        <div className=\"loader\">\r\n          <WaitingComponent />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\ncreateRoot(document.getElementById(\"root\") as HTMLElement).render(\r\n  <Suspense fallback={<AppLoadingComponent />}>\r\n    <React.StrictMode>\r\n      <MsalProvider instance={msalInstance}>\r\n        <BrowserRouter>\r\n          <App />\r\n        </BrowserRouter>\r\n      </MsalProvider>\r\n    </React.StrictMode>\r\n  </Suspense>\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}