{"version":3,"sources":["../../index.ts","../../../src/resolvers.ts","../../../src/schemes.ts","components/ErrorBoundary.tsx","config/axios/index.ts","config/firebase/index.ts","hooks/useMedia.ts","hooks/useUser.ts","utils/error/index.ts","components/LoadingLinearProgress.ts","contexts/RequestInterceptor.tsx","contexts/auth.tsx","contexts/permission.tsx","components/ShiftsHistory/utils.ts","config/axios/offlineProxy/offlineQueue.ts","config/axios/offlineProxy/index.ts","utils/store/index.ts","hooks/useCanAccess.ts","hooks/useShift/index.ts","hooks/useEmergencyContacts.ts","utils/store/offlineStore.ts","hooks/useSubCategory.ts","hooks/localstorage/useLocalStorage.ts","hooks/localstorage/useReducerWithLocalStorage.ts","hooks/localstorage/utils.ts","hooks/useEvent/patchEventCommentOffline.ts","hooks/useEvent/patchEventStatusOffline.ts","hooks/useEvent/patchEventUpdatedTimeHappensOffline.ts","hooks/useEvent/postEventOffline.ts","hooks/useEvent/postScheduledMeasurementOffline.ts","hooks/useEvent/index.ts","hooks/useMedication.ts","utils/shiftQuestion/index.ts","hooks/useShiftQuestions/postAnswerOffline.ts","hooks/useShiftQuestions/index.ts","hooks/useShoppingList.ts","contexts/CurrentShiftData.tsx","contexts/ShiftInProgress.tsx","components/StyledButton.ts","assets/Elipseblue.svg","assets/Elipsegreen.svg","components/StyledDialog/styles.ts","components/StyledDialog/index.tsx","components/StyledSimpleModal.tsx","components/CreateEventSelectTypeDialog/styles.ts","components/CreateEventSelectTypeDialog/index.tsx","components/Tabbar/MenuItem/styles.ts","components/Tabbar/MenuItem/index.tsx","components/Tabbar/styles.ts","assets/phone-icon.svg","components/Tabbar/index.tsx","pages/Account/styles.ts","components/InternetConnectionCheck/InternetConnectionContext.tsx","components/InternetConnectionCheck/style.ts","components/InternetConnectionCheck/index.tsx","components/Headers/HeaderBase/styles.tsx","components/Headers/HeaderBase/index.tsx","components/Headers/HeaderWithTitle/styles.ts","components/Headers/HeaderWithTitle/index.tsx","components/Icons/PscIcon/index.tsx","components/Headers/Header/styles.ts","components/Headers/Header/index.tsx","components/StyledFieldset.ts","components/StyledTabs.ts","styles/theme.ts","styles/colorMapping.ts","components/StyledTextField/styles.ts","components/StyledTextField/index.tsx","components/Forms/FormikTextField.tsx","components/PasswordRules/styles.ts","components/PasswordRules/index.tsx","pages/Account/ChangePassword/styles.ts","utils/inputs/index.tsx","pages/Account/ChangePassword/utils.ts","pages/Account/ChangePassword/index.tsx","assets/user.png","components/ProfilePicture/styles.ts","components/ProfilePicture/index.tsx","hooks/useCaregiver.ts","pages/Account/Personal/styles.ts","pages/Account/Personal/utils.ts","pages/Account/Personal/index.tsx","pages/Account/index.tsx","hooks/useCaregiverMood/index.ts","hooks/useCaregiverMood/postCaregiverMoodOffline.ts","pages/CaregiverMood/ShiftEnd/styles.ts","assets/caregiver-mood-icons/happy-icon.svg","assets/caregiver-mood-icons/little-happy-icon.svg","assets/caregiver-mood-icons/sad-icon.svg","assets/caregiver-mood-icons/very-happy-icon.svg","assets/caregiver-mood-icons/very-sad-icon.svg","components/LoadingBackdrop/styles.ts","pages/CaregiverMood/ShiftEnd/index.tsx","components/LoadingBackdrop/index.tsx","pages/CaregiverMood/ShiftStart/styles.ts","pages/CaregiverMood/ShiftStart/index.tsx","components/Forms/styles.ts","components/Forms/FormikSelect.tsx","components/StyledTextFieldWhite.ts","components/PasswordField/index.tsx","components/FormCardContainer.ts","assets/elderlyIcon.svg","components/MedicBalloon/styles.ts","components/MedicBalloon/index.tsx","components/StyledKeyboardDatePicker/styles.ts","components/StyledKeyboardDatePicker/index.tsx","components/StyledMenuItem.tsx","pages/CompleteSignup/styles.ts","pages/CompleteSignup/utils.ts","pages/CompleteSignup/index.tsx","components/ContentSearchTextField/styles.ts","components/ContentSearchTextField/index.tsx","assets/sign-out-icon.svg","hooks/usePatient.ts","components/LogoutDialog/styles.ts","components/LogoutDialog/index.tsx","components/SelectPatientModal/styles.ts","components/SelectPatientModal/index.tsx","components/Headers/HeaderWithDrawer/Drawer/styles.ts","components/Headers/HeaderWithDrawer/Drawer/index.tsx","components/Headers/HeaderWithDrawer/Drawer/AppShortcut/index.tsx","components/Headers/HeaderWithDrawer/Drawer/MenuItem/index.tsx","assets/burger-menu.svg","components/Headers/HeaderWithDrawer/styles.ts","components/Headers/HeaderWithDrawer/index.tsx","components/LoadMoreContainer/styles.ts","components/LoadMoreContainer/index.tsx","components/OfflineWarning/styles.ts","components/OfflineWarning/index.tsx","hooks/useContent.ts","components/StyledPaper.ts","pages/Content/styles.ts","pages/Content/index.tsx","pages/Content/ContentItem/styles.ts","pages/Content/ContentItem/index.tsx","components/CreateProfessionalReportForm/styles.ts","components/CreateProfessionalReportForm/utils.ts","components/CreateProfessionalReportForm/index.tsx","hooks/useProfessionalReport/postOfflineProfessionalReport.ts","hooks/useProfessionalReport/indexs.ts","pages/CreateProfessionalReport/styles.ts","pages/CreateProfessionalReport/index.tsx","components/CreateShiftEvent/styles.ts","components/CreateShiftEvent/CreateAppointmentEventForm/utils.ts","components/CreateShiftEvent/CreateAppointmentEventForm/index.tsx","components/CreateShiftEvent/CreateComplicationEventForm/utils.ts","components/CreateShiftEvent/CreateComplicationEventForm/index.tsx","components/VitalSignsMeasurementInput/utils.ts","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/styles.ts","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/BloodGlycemiaInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/BloodPressureInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/BodyTemperatureInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/BreathRateInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/DefaultInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/HeartRateInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/OximetryRateInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/WeightInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/MeasurementInput/index.tsx","components/CreateShiftEvent/CreateMeasurementEventForm/utils.ts","components/VitalSignsMeasurementInput/BloodPressureMeasurementInput/utils.ts","components/CreateShiftEvent/CreateMeasurementEventForm/index.tsx","utils/medication/index.ts","components/CreateShiftEvent/CreateMedicationEventForm/MedicationInformationCard/styles.ts","components/CreateShiftEvent/CreateMedicationEventForm/MedicationInformationCard/index.tsx","components/CreateShiftEvent/CreateMedicationEventForm/utils.ts","components/CreateShiftEvent/CreateMedicationEventForm/index.tsx","components/CreateShiftEvent/CreateRoutineEventForm/utils.ts","components/CreateShiftEvent/CreateRoutineEventForm/index.tsx","components/ExecutionMessageForm/styles.ts","components/ExecutionMessageForm/utils.ts","components/ExecutionMessageForm/index.tsx","hooks/useExecution/patchExecutionNotesOffline.ts","hooks/useExecution/index.ts","pages/CreateShiftEvent/styles.ts","pages/CreateShiftEvent/utils.ts","pages/CreateShiftEvent/index.tsx","components/ShiftTimeContestationDateBlock/styles.ts","components/ShiftTimeContestationDateBlock/index.tsx","components/StyledFormControlLabel/styles.ts","components/StyledFormControlLabel/index.tsx","hooks/useShiftExecutionTimeContestation.ts","pages/CreateShiftExecutionTimeContestation/ConfirmSaveDialog/index.tsx","pages/CreateShiftExecutionTimeContestation/styles.ts","pages/CreateShiftExecutionTimeContestation/DateTimePickers/index.tsx","pages/CreateShiftExecutionTimeContestation/index.tsx","components/CareCategoryAccordion/styles.ts","components/CareCategoryAccordion/index.tsx","components/CareCategoriesList/styles.ts","components/CareCategoriesList/index.tsx","assets/Icon-coloredCalendar.svg","assets/Icon-time-color.svg","assets/Icon-time.svg","components/CreateShiftEvent/utils.ts","hooks/useShiftEventHandling.ts","components/CurrentShiftEventList/CurrentShiftCards/CommentModal/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/CommentModal/index.tsx","webpack:///./src/assets/Icon-done.svg?7128","webpack:///./src/assets/Icon-notdone.svg?858c","components/CurrentShiftEventList/CurrentShiftCards/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/UpdateTimeModal/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/UpdateTimeModal/index.tsx","components/CurrentShiftEventList/CurrentShiftCards/AppointmentCard/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/AppointmentCard/index.tsx","assets/Icon-alert.svg","components/CurrentShiftEventList/CurrentShiftCards/ComplicationCard/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/ComplicationCard/index.tsx","assets/Icon-measurement.svg","components/CurrentShiftEventList/CurrentShiftCards/MeasurementCard/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/MeasurementCard/utils.ts","components/ShiftEventList/LastShiftCards/styles.ts","components/ShiftEventList/LastShiftCards/ScheduledMeasurementCard/styles.ts","components/ShiftEventList/LastShiftCards/ScheduledMeasurementCard/Measurement/styles.ts","components/ShiftEventList/LastShiftCards/ScheduledMeasurementCard/Measurement/index.tsx","components/ShiftEventList/LastShiftCards/ScheduledMeasurementCard/index.tsx","components/CurrentShiftEventList/CurrentShiftCards/MeasurementCard/index.tsx","assets/Icon-medication.svg","components/CurrentShiftEventList/CurrentShiftCards/MedicationCard/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/MedicationCard/index.tsx","assets/Icon-clock.svg","components/CurrentShiftEventList/CurrentShiftCards/RoutineCard/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/RoutineCard/index.tsx","assets/Icon-time-measurement-orange.svg","assets/Icon-time-measurement.svg","components/VitalSignsMeasurementInput/styles.ts","components/StyledSelectField/styles.ts","components/StyledSelectField/index.tsx","components/VitalSignsMeasurementInput/BloodGlycemiaInput/index.tsx","components/VitalSignsMeasurementInput/BloodPressureMeasurementInput/MultiselectModal/styles.ts","components/VitalSignsMeasurementInput/BloodPressureMeasurementInput/MultiselectModal/index.tsx","utils/subCategoryEnum.ts","contexts/SymptomsList.tsx","components/VitalSignsMeasurementInput/BloodPressureMeasurementInput/index.tsx","components/VitalSignsMeasurementInput/BodyTemperatureInput/index.tsx","components/VitalSignsMeasurementInput/BreathRateInput/index.tsx","components/VitalSignsMeasurementInput/HeartRateInput/index.tsx","components/VitalSignsMeasurementInput/OximetryRateInput/index.tsx","components/VitalSignsMeasurementInput/WeightMeasurementInput/index.tsx","components/VitalSignsMeasurementInput/index.tsx","components/CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/utils.ts","components/CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement/index.tsx","components/CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/styles.ts","components/CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/index.tsx","components/CurrentShiftEventList/styles.ts","components/CurrentShiftEventList/index.tsx","components/CollapsibleCardContent/styles.ts","components/CollapsibleCardContent/index.tsx","hooks/useOverflowDetector.ts","components/ExecutionMessageCard/styles.ts","components/ExecutionMessageCard/index.tsx","components/StyledSimpleDialog.tsx","components/FinishShiftConfirmDialog.tsx","assets/logo-cuidador-inline.svg","components/MadeBy/styles.ts","components/MadeBy/index.tsx","pages/CurrentShift/styles.ts","pages/CurrentShift/utils.ts","components/PatientAvatar/PatientAvatar.tsx","components/PageTitle/PageTitle.tsx","components/Header/Header.tsx","components/IconButtonStyled/IconButtonStyled.tsx","components/PscButton/PscButton.tsx","components/SideMenu/styles.ts","components/SideMenu/SideMenu.tsx","components/SideMenu/MenuItem/MenuItem.tsx","components/SideMenu/AppSchortcut/AppShortcut.tsx","components/MenuButton/MenuButton.tsx","pages/CurrentShift/CurrentShift.tsx","components/EmergencyContactCard/styles.ts","components/EmergencyContactCard/index.tsx","pages/EmergencyContacts/styles.ts","pages/EmergencyContacts/index.tsx","pages/ForgotPassword/utils.ts","pages/ForgotPassword/styles.ts","pages/ForgotPassword/index.tsx","pages/Home/index.tsx","components/Headers/PatientHeader/styles.ts","components/ShiftHeaderNotification/styles.ts","components/ShiftHeaderNotification/index.tsx","components/ShiftHeaderNotification/utils.ts","components/Headers/PatientHeader/utils.ts","components/Headers/PatientHeader/index.tsx","components/ShiftEventList/styles.ts","assets/Icon-done.svg","assets/Icon-notdone.svg","components/ShiftEventList/LastShiftCards/AppointmentCard/styles.ts","components/ShiftEventList/LastShiftCards/AppointmentCard/index.tsx","components/ShiftEventList/LastShiftCards/ComplicationCard/styles.ts","components/ShiftEventList/LastShiftCards/ComplicationCard/index.tsx","components/ShiftEventList/LastShiftCards/MedicationCard/styles.ts","components/ShiftEventList/LastShiftCards/MedicationCard/index.tsx","components/ShiftEventList/LastShiftCards/MeasurementCard/styles.ts","components/ShiftEventList/LastShiftCards/MeasurementCard/index.tsx","assets/Icon-watch.svg","components/ShiftEventList/LastShiftCards/RoutineCard/styles.ts","components/ShiftEventList/LastShiftCards/RoutineCard/index.tsx","components/ShiftEventList/utils.ts","components/ShiftEventList/index.tsx","hooks/useLastShift.ts","pages/LastShiftEvents/styles.ts","pages/LastShiftEvents/index.tsx","assets/senior-background.png","pages/Login/styles.ts","pages/Login/utils.ts","pages/Login/index.tsx","hooks/useMotivationalMessage.ts","pages/MotivationalMessage/styles.ts","pages/MotivationalMessage/index.tsx","assets/calendar-icon.svg","components/PatientCardItem/Buttons/styles.ts","components/PatientCardItem/Buttons/ShiftCalendarButton/styles.ts","components/PatientCardItem/Buttons/ShiftCalendarButton/index.tsx","components/PatientCardItem/styles.ts","components/PatientCardItem/index.tsx","components/PatientCardItem/utils.ts","components/SearchTextField/styles.ts","components/SearchTextField/index.tsx","pages/Patients/styles.ts","pages/Patients/index.tsx","components/ButtonLink.tsx","components/Fab/styles.ts","components/Fab/index.tsx","components/ProfessionalReportList/styles.ts","components/ProfessionalReportList/index.tsx","pages/ProfessionalReport/styles.ts","pages/ProfessionalReport/index.tsx","components/ViewProfessionalReportForm/styles.ts","components/ViewProfessionalReportForm/index.tsx","pages/ProfessionalReport/ProfessionalReportItem/styles.ts","pages/ProfessionalReport/ProfessionalReportItem/utils.ts","pages/ProfessionalReport/ProfessionalReportItem/index.tsx","pages/ShiftContestation/ShiftExecutionCard/styles.ts","pages/ShiftContestation/utils.ts","pages/ShiftContestation/ShiftExecutionCard/index.tsx","pages/ShiftContestation/styles.ts","pages/ShiftContestation/ExecutionTimeline/styles.ts","utils/dates/index.ts","pages/ShiftContestation/ExecutionTimeline/index.tsx","pages/ShiftContestation/index.tsx","pages/ExecutionHistoryContestation/utils.ts","pages/ExecutionHistoryContestation/styles.ts","pages/ExecutionHistoryContestation/OriginalSchedules/index.tsx","pages/ExecutionHistoryContestation/AnnulledCard/index.tsx","pages/ExecutionHistoryContestation/TimeContestationCard/index.tsx","pages/ExecutionHistoryContestation/index.tsx","pages/ShiftFinish/styles.ts","pages/ShiftFinish/index.tsx","components/ShiftsHistory/MenuButton/styles.ts","components/ShiftsHistory/MenuButton/index.tsx","components/ShiftsHistory/styles.ts","components/ShiftsHistory/index.tsx","pages/ShiftHistory/styles.ts","pages/ShiftHistory/index.tsx","components/CareCategoriesViewer/Card/styles.tsx","components/CareCategoriesViewer/Card/utils.tsx","components/CareCategoriesViewer/Card/index.tsx","components/CareCategoriesViewer/styles.ts","components/CareCategoriesViewer/utils.ts","components/CareCategoriesViewer/index.tsx","pages/ShiftHistory/Shift/PreviousOrNextShift/styles.ts","pages/ShiftHistory/Shift/PreviousOrNextShift/index.tsx","pages/ShiftHistory/Shift/styles.ts","pages/ShiftHistory/Shift/index.tsx","components/Steps/styles.ts","components/Steps/index.tsx","components/ShiftQuestion/styles.ts","components/ShiftQuestion/ShiftQuestionOptions/index.tsx","components/ShiftQuestion/index.tsx","pages/ShiftQuestion/styles.ts","pages/ShiftQuestion/index.tsx","assets/old-man.svg","pages/ShiftCalendar/UnregistredShiftsMessage/styles.ts","pages/ShiftCalendar/UnregistredShiftsMessage/index.tsx","assets/not-started.svg","assets/list.svg","pages/ShiftCalendar/ShiftCalendarCard/styles.ts","pages/ShiftCalendar/ShiftCalendarCard/index.tsx","pages/ShiftCalendar/styles.ts","pages/ShiftCalendar/index.tsx","pages/ShoppingList/styles.ts","components/ShoppingListUpsertForm/styles.ts","components/ShoppingListUpsertForm/index.tsx","pages/ShoppingList/index.tsx","components/Headers/HeaderWithSignOut/index.tsx","pages/BlockPages/styles.ts","pages/BlockPages/NoPatientRelationsBlock/index.tsx","pages/BlockPages/NoOrganizationIdBlock/index.tsx","routes/AuthenticatedRoute.tsx","config/googleAnalytics/index.ts","routes/RoutesAnalytics.tsx","routes/UnauthenticatedRoute.tsx","routes/Routes.tsx","components/Layout/styles.ts","components/Layout/index.tsx","components/Toast/styles.ts","components/Toast/index.tsx","config/hotjar/index.ts","routes/ScrollToTop.ts","styles/globalStyle.ts","contexts/PushNotification.tsx","App.tsx","reportWebVitals.ts","serviceWorkerRegistration.ts","index.tsx"],"names":["default","schemeId","organizationName","organizationEmail","appFSubdomain","appCSubdomain","appFUrl","appCUrl","appFShortcutIconUrl","main","start_url","display","theme_color","background_color","dark","FallbackComponent","ErrorBoundary","children","fallback","axiosInstance","axios","create","timeout","headers","Accept","baseURL","process","AMB","LOCAL_GATEWAY_URL","forageStore","localforage","createInstance","driver","INDEXEDDB","LOCALSTORAGE","name","cachedAxiosInstance","setupCachedAxios","defaults","cache","maxAge","store","exclude","query","readOnError","error","message","clearOnStale","getCachedAxios","addGlobalRequestInterceptor","onFulfilled","onRejected","axiosInstanceId","interceptors","request","use","cachedAxiosInstanceId","eject","addGlobalResponseInterceptor","response","firebaseConfig","apiKey","authDomain","databaseURL","REACT_APP_FIREBASE_DATABASE_URL","projectId","storageBucket","messagingSenderId","appId","firebaseOld","initializeApp","auth","authRequestInterceptor","config","a","currentUser","getIdToken","token","Authorization","console","log","getFCMToken","messaging","getMessaging","getApp","getToken","catch","err","Sentry","firebaseGetApp","useMedia","getSignedUrl","useCallback","endpoint","contentType","method","url","data","uploadMedia","file","type","signedUrl","defaultAxios","getMedia","useUser","completeSignup","completeSignupToken","post","Promise","resolve","reject","checkSignupStatus","userId","get","uploadProfilePicture","getProfilePicture","id","putUserFCMToken","put","deleteUserFCMToken","fcmRegistrationToken","delete","resolveErrorMessage","displayMessage","customErrorData","includes","getDisplayMessage","defaultStatusMessage","status","getStatusCodeMessage","resolveMessage","StyledLinearProgress","styled","LinearProgress","reducer","state","GlobalLoadingContext","createContext","GlobalLoadingProvider","useReducer","loadingCount","dispatch","useEffect","removeRequestInterceptors","incrementLoading","removeResponseInterceptors","decrementLoading","location","pathname","toast","signOut","removeFirebaseAuthRequestInterceptors","Provider","value","sendPasswordResetEmail","email","userProfile","changePassword","currentPassword","newPassword","getUserInfo","AuthContext","AuthProvider","useState","user","setUser","setError","loading","setLoading","reloadUser","setReloadUser","userInfo","setUserInfo","clientSideScheme","useLocation","useContext","refreshUserInfo","caregiverAccount","requestSignIn","cpf","password","signInWithCustomToken","signIn","then","fcmToken","finally","unsubscribe","onAuthStateChanged","firebaseUser","uid","hasCompletedSignup","undefined","getIdTokenResult","claims","Error","userRole","role","caregiverAppAccess","guardianAppAccess","window","replace","roleTitle","title","qs","parse","search","apiAuthToken","decodedAuthToken","jwt","decode","localToken","localStorage","getItem","decodedLocalToken","JSON","isSameUser","isRecent","differenceInHours","Date","date","String","username","DEFAULT_ROLES","PermissionContext","PermissionProvider","hasLoaded","setHasLoaded","permissions","setPermissions","refreshPermissions","axiosModule","usePermission","isSelfCare","isCaregiver","getShiftCardBackgroundColor","shift","isAdditionalCoverage","getDayGroup","weekday","format","locale","ptBrLocale","capitalizedWeekday","charAt","toUpperCase","slice","day","month","getShiftRealTime","startedAt","start","isShiftMenuVisible","shiftInProgress","caregiverId","Number","isCaregiverWithInProgressShift","caregiverOwnAtLeastOneShiftExecution","executions","length","some","execution","QUEUE_KEY","addToRequestQueue","requestQueueData","queuedData","getQueueData","push","setQueuedData","stringData","stringify","setItem","createOfflineProxy","httpMethod","offlineResponseCb","statusCode","statusText","sendQueueData","queueData","getIdsAndContent","ids","byId","reduce","prev","cur","total","createReducer","action","payload","Array","from","Set","filter","results","useCanAccess","resource","organizationId","prohibitedOrganizations","prohibitedOrganizationsArray","split","map","allowedActions","useMemo","Boolean","isAllowedToCreate","isAllowedToDelete","isAllowedToInvoke","isAllowedToRead","isAllowedToUpdate","initialData","useShift","getByPatientIdPaginated","patientId","params","getById","shiftId","startShift","sendQueueBeforeFinishShift","queueItem","finishShift","getShiftInProgressWithExecutionInProgress","getShiftCalendarByPatientId","getTimeline","showContestationPageItem","isAllowedToCreateShiftTimeContestation","useEmergencyContacts","getAllByPatientId","payloadIds","payloadById","localStorageIds","localStorageById","currentItem","find","item","currentItemDate","createdAt","itemDate","isEqual","EventCategoryEnum","createOfflineReducer","now","useLocalStorage","key","initialValue","storedValue","setStoredValue","valueToStore","Function","useReducerWithLocalStorage","initializerArg","setValue","newState","removeLocalStorageItemsByKeySubstring","substring","Object","keys","forEach","removeItem","createOfflinePatchEventComment","eventData","createOfflinePatchEventStatus","createOfflinePatchUpdatedTimeHappens","createOfflinePostEvent","createOfflinePostMeasurement","SHIFT_EVENTS_LOCAL_KEY","useEvent","clearAllLocalShiftEvents","getEventsByShiftId","createShiftEvent","eventType","postOfflineEvent","subCategory","medication","patchEventStatus","eventId","patchOfflineEvent","patchEventComment","setUpdatedTime","updateScheduledMeasurement","measurementData","postOfflineMeasurement","getSymptomsList","useMedication","getAllMedicationsIfNecessaryByPatientId","isQuestionAnswered","answerConfig","checkedOption","options","option","isChecked","needDescription","description","nextAnswer","normalizeCareCategory","careCategory","questionIndex","index","normalizedCareLines","careLines","careLine","normalizeCareLine","totalQuestions","careQuestions","totalAnswered","normalizedCareQuestions","question","normalizeCareQuestion","careQuestion","normalizeAnswerToApi","careQuestionId","questionAnswerData","createOfflinePostAnswer","answer","getEndpoint","SHIFT_QUESTIONS_LOCAL_KEY","useShiftQuestions","clearAllLocalShiftQuestions","getQuestionsByShiftId","careCategories","careline","careQuestionAnswers","careQuestionAnswer","saveAnswer","questionId","careCategoryIndex","careLineIndex","firstQuestionIndex","updatedCategory","sendAnswerDebounce","callback","buildNormalizedAnswersToApi","answers","normalizedAnswers","cqa","normalizeAnswersToApi","sendAnswer","normalizedAnswer","postOfflineAnswer","useDebouncedCallback","useShoppingList","getOneByPatientId","patch","postBuyShoppingListById","useSubCategory","getAllAppointments","getAllRoutines","getAllComplications","getAllMeasurements","CurrentShiftDataContext","CurrentShiftDataProvider","ShiftInProgressContext","eventHookData","questionHookData","getEmergencyContactsByPatientId","getShoppingListByPatientId","ShiftInProgressProvider","setShiftInProgress","executionInProgress","setExecutionInProgress","minShiftLimitDate","plannedToStartAt","addMinutes","maxShiftLimitDate","plannedToEndAt","refreshShiftInProgress","StyledButton","Button","attrs","variant","StyledMuiDialog","Dialog","theme","spacing","palette","primary","common","white","secondary","grey","StyledElipseBlueTop","img","StyledElipseGreenTop","StyledElipseBlueBot","StyledElipseGreenBot","StyledDiv","div","StyledDialog","dialogProps","src","elipseBlue","elipseGreen","StyledSimpleDialog","open","DialogTitle","DialogContent","CreateEventDialogContainer","StyledFormControlLabel","FormControlLabel","CreateDialogBtnContainer","Fab","MuiFab","typography","h3","fontSize","EventSelectTypeDialog","opened","close","setEventType","history","useHistory","ShiftInProgressDialog","FormControl","RadioGroup","aria-label","onChange","e","target","control","Radio","color","label","onClick","disabled","ShiftNotInProgressDialog","Typography","StyledSimpleModal","CreateEventSelectTypeDialog","isCreateEventDialogOpen","setIsCreateEventDialogOpen","size","StyledLink","Link","$active","MenuItem","to","exact","isActive","startsWith","Container","nav","StyledBadge","Badge","backgroundColor","visible","_extends","assign","i","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","d","fill","SvgPhoneIcon","_ref","svgRef","titleId","props","width","height","viewBox","xmlns","ref","ForwardRef","Tabbar","isAllowedToReadNextShifts","isAllowedToCreateEvent","isAllowedToReadContent","isAllowedToReadShoppingList","isAllowedToReadEmergencyContacts","path","red","ButtonContainer","StyledTabItem","Tab","Backdrop","MaterialBackdrop","zIndex","drawer","extra","light","BackdropCircularProgress","MaterialCircularProgress","InternetConnectionContext","internetStatus","EXTERNAL_INTERNET_TESTING_SERVER_URIS","InternetConnectionProvider","intervalRef","useRef","setInternetStatus","checkInternetConnection","current","setInterval","clearInterval","all","uri","fetch","ping","warning","CircularProgress","Label","span","body2","RefreshIcon","Cached","StyledIconButton","IconButton","InternetConnectionErrorBanner","Toolbar","MaterialToolbar","AppBar","elevation","position","ElipseBlue","ElipseGreen","HeaderBase","leftContent","centerContent","rightContent","withBackgroundShapes","Title","HeaderWithTitle","align","PscIcon","pscIconColor","useTheme","stroke","strokeWidth","strokeLinecap","strokeLinejoin","StyledBackIcon","ChevronLeftRounded","StyledBlankDiv","IconBackground","StyledPhoneIcon","PhoneIcon","Header","rightButtonType","rightIconClick","leftIconClick","actions","phone","remove","psc","edge","data-testid","goBack","StyledFieldset","fieldset","StyledTabs","Tabs","black","resolveTheme","scheme","muiTheme","createMuiTheme","appCPalette","shape","borderRadius","fontFamily","overrides","MuiButton","root","textTransform","MuiTab","styledTheme","colorMapping","text","hexToRGBArray","hex","h","TextField","MuiTextField","$color","StyledTextField","FormikField","required","fullWidth","useFormikContext","errors","hasError","touched","autoComplete","as","helperText","RuleContainer","RuleText","isValid","submitError","green","passwordRules","test","PasswordRequirements","validationError","rule","htmlColor","FooterContainer","cpfMask","numberMask","phoneMask","numberOnly","removeDDI","bodyTemperatureMask","bloodGlycemiaMask","breathRateMask","heartRateMask","oximetryRateMask","weightMeasurementMask","formatted","validateCpf","rawCpf","add","parseInt","rev","validatePasswordStrength","UFoptions","formInitialValue","retypePassword","validationSchema","Yup","oneOf","ChangePassword","showNewPassword","setShowNewPassword","showRetypePassword","setShowRetypePassword","setValidationError","handleShowNewPassword","handleShowRetypePassword","initialValues","onSubmit","values","setFieldValue","setSubmitting","success","validateOnChange","formik","noValidate","FormikTextField","margin","inputProps","InputProps","endAdornment","InputAdornment","PasswordRules","isSubmitting","StyledEditor","AvatarEditor","ProfilePicture","initialImage","isCreation","editorImage","setEditorImage","openEditor","setOpenEditor","zoom","setZoom","editorRef","originalFile","isAllowedToUpdateProfilePicture","image","border","rotate","scale","Slider","style","min","max","step","event","DialogActions","canvasScaled","getImageScaledToCanvas","croppedImg","toDataURL","toBlob","blob","UserDefault","htmlFor","component","files","URL","createObjectURL","hidden","accept","useCaregiver","formDataToCaregiverModel","phoneNumber","Personal","imageUrl","setImageUrl","formikRef","isAllowedToUpdateCaregiver","handleGetProfilePicture","result","fetchPatientProfilePicture","userData","innerRef","picture","Account","currentTab","match","tabId","leftButtonType","_","newValue","useCaregiverMood","offlinePost","OutterContainer","HorizontalLine","hr","TitleContainer","h6","MoodIconsLine","MoodIconContainer","selected","NextButton","body1","MoodEnum","LoadingBackdrop","ShiftEnd","shiftExecutionId","loadingShiftInProgress","mood","setMood","isAllowedToCreateCaregiverMood","alt","VeryHappyMoodIcon","VERY_HAPPY","HappyMoodIcon","HAPPY","LittleHappyMoodIcon","LITTLE_HAPPY","SadMoodIcon","SAD","VerySadMoodIcon","VERY_SAD","moodLevel","shiftPeriod","shiftSchedule","logoutUserOnFinishShift","ShiftStart","StyledFormControl","FormikSelect","formControlVariant","StyledSelectField","InputLabel","Select","labelId","FormHelperText","StyledTextFieldWhite","PasswordTextField","showPassword","setShowPassword","FormCardContainer","StyledBoldTitle","StyledFormikTextField","StyledSelect","StyledFormikTextPassword","StyledFormikSelect","xlinkHref","SvgElderlyIcon","xmlnsXlink","BalloonContainer","alignItems","Balloon","Balloons","PointBalloon","marginTop","StyledText","MedicBalloon","isTextArray","isArray","balloonContainerAlignItems","pointBalloonMarginTop","t","$borderType","css","StyledKeyboardDatePicker","maxDate","inputVariant","onBlur","borderType","React","selectedDate","setSelectedDate","handleDateChange","utils","DateFnsUtils","invalidDateMessage","minDateMessage","maxDateMessage","clearable","MuiMenuItem","StyledMenuItem","rest","forwardRef","Screen","Logo","logoLightUrl","LogoContainer","ProfileContainer","Subtitle","TabbedContainer","VisibilityContainer","MessageContainer","ContentContainer","resolveValidationSchema","formType","caregiverValidationSchema","supporterValidationSchema","selfCareValidationSchema","defaultValidationSchema","personalDataValidationSchema","yup","gender","dateOfBirth","nullable","typeError","caregiverStepValidationSchema","worksAsCaregiverForTime","hasTakenProfessionalCourse","belongsToCaregiverAgency","caregiverAgencyName","supporterStepValidationSchema","occupation","document","documentProvince","specialty","selfCareDataValidationSchema","educationLevel","passwordValidationSchema","passwordConfirmation","termsAccepted","equals","genderOptions","worksAsCaregiverForTimeOptions","hasTakenProfessionalCourseOptions","occupationOptions","educationLevelOptions","formDataToCompleteSignupRequest","resolveUserData","caregiverData","resolveCaregiverData","supporterData","resolveSupporterData","formInitialValues","PersonalDataStepContainer","handleBlur","finalDate","SelectDisplayProps","placeholder","InputLabelProps","shrink","CaregiverStepContainer","multiline","rows","SelfCareStepContainer","educationLevelOption","SupporterStepContainer","PasswordStepContainer","autocomplete","form","CompleteSignup","formikFormRef","signInError","submitted","setSubmitted","completeSignupTokenPayload","roleId","resolvePendingSignupJWTData","userIdFromTokenPayload","handleSignIn","handleUploadProfilePicture","setTimeout","handleCompleteSignupSubmit","formData","toUTCString","fieldError","context","setFieldError","Checkbox","href","rel","StyledInput","InputBase","overline","SearchTextField","fieldName","defaultValue","onChangeDebounced","inputValue","setInputValue","debounced","newSearch","newUrl","stringifyUrl","Clear","Search","SvgSignOutIcon","usePatient","getAll","getAllRelated","StyledDialogContainer","StyledWarningIcon","ReportProblemOutlined","StyledDialogContentText","DialogContentText","LogoutDialog","onClose","onConfirm","Form","FormikForm","StyledOptions","patient","SelectPatientModal","patients","PatientModalUrl","StyledDrawer","Drawer","StyledCloseIcon","Close","StyledPersonIcon","Person","StyledAssessment","AccessibilityNewRounded","Assignment","StyledComunityIcon","Facebook","StyledFileIcon","InsertDriveFile","StyledHistoryIcon","History","Phone","StyledLogoBlock","DrawerHeader","StyledList","List","StyledListItem","ListItem","StyledListItemText","ListItemText","defaultLink","StyledHrefLink","AppItemTitle","AppItemLabel","AppIcon","TextContainer","DrawerBody","DrawerFooter","DrawerButton","DrawerFooterText","AppShortcut","icon","button","ListItemIcon","handleToggleDrawer","isDrawerOpen","isGuardianAppAccess","isLogoutDialogOpen","setIsLogoutDialogOpen","isPatientModalVisible","setIsPatientModalVisible","setPatients","HYSTORY","patientModalUrl","setPatientModalUrl","isAllowedToReadShifts","isAllowedToReadProfessionalReport","isAllowedToReadPatients","handlePatientDataModal","modalUrl","handleToggleLogoutDialog","PROFESSIONAL_REPORT","rx","y","SvgBurgerMenu","StyledMenuIcon","Menu","StyledMenuButton","HeaderWithDrawer","setIsDrawerOpen","ContainerFlat","BottomContainer","LoadMoreContainer","hasMoreItems","loadMoreText","handlePagination","renderItem","keyExtractor","OfflineWarning","WifiOff","useContent","getPaginated","limit","getAllRecommendedContent","StyledPaper","Paper","TypographyContainer","CardBox","TextWrap","HeaderTitle","Content","recommendedData","setRecommendedData","setHasMoreItems","contents","setContents","page","setPage","setTotal","searchValue","setSearchValue","loadingContent","checkHasMoreItems","totalActual","fetchData","searchParam","paramToString","toString","onChangeParams","renderContentItem","ContentSearchTextField","TitleWrap","ContentItem","useParams","itemId","contentItem","TitleByOccupation","FormContainer","Centralizer","OptionsButton","subCategoryId","titleOptions","supervisor","doctor","nurse","nursingTechnician","physicalTherapist","psychologist","occupationalTherapist","physicalEducator","nutritionist","speechTherapist","dentist","another","CreateProfessionalReportForm","submit","cancel","subCategories","formValues","readOnly","supporter","toISOString","caregiver","formatAndSubmit","isDraft","eventSubCategoryId","setTouched","validateForm","validateAndSubmit","isFormValid","validateFutureDate","triggerCustomValidation","validationErrors","setNestedObjectValues","ptBr","cancelLabel","maxlength","createOfflinePostProfessionalReport","useProfessionalReport","getByPatientId","deleteById","CreateProfessionalReport","setPatient","setSubCategories","loadComplications","loadPatient","subCategoriesWithNone","submitForm","StyledDateTimePicker","DateTimePicker","CreateAppointmentEventForm","minDateTime","dateTimeEvent","setDateTimeEvent","comment","eventHappensAt","ampm","minDate","CreateComplicationEventForm","maxDateTime","subCategoryIdMapper","BLOOD_PRESSURE","BODY_TEMPERATURE","BLOOD_GLYCEMIA","BREATH_RATE","HEART_RATE","OXIMETRY_RATE","WEIGHT_MEASURMENT","staticCareLineIdMapper","DIABETES_TYPE1","DIABETES_TYPE2","bloodGlycemiaAdditionalDetails","preprandial","fasting","postprandial","not_available","validateOxymetryInput","rawValue","isNaN","complicationLevel","isDangerousComplication","validateBreathRate","validateBodyTemperature","validateBloodGlycemia","rawMeasurement","patientDateOfBirth","patientHasDiabetes","additionalDetails","measurement","age","differenceInYears","validateHeartRate","validateBloodPressure","rawSystolicValue","symptomsCount","systolicValue","InputContainer","BloodGlycemiaInput","formattedValue","entries","BloodPressureInput","setSystolicValue","diastolicValue","setDiastolicValue","systolic","diastolic","sanitizedSystolic","toNumber","sanitizedDiastolic","onChangeAnyValue","systolicNumber","diastolicNumber","systolicWithLeftZeros","padStart","diastolicWithLeftZeros","sanitizedValue","validate","BodyTemperatureInput","BreathRateInput","DefaultInput","HeartRateInput","OximetryRateInput","WeightInput","MeasurementInput","measurementValue","ensure","when","is","validateSubCategory","patientData","hasDiabetes","staticCareLines","scl","classification","careLineId","symptomList","formatSymptomsOptions","symptoms","checkedIds","symptom","formatSingleSymptomIntoOption","checked","symptomName","CreateMeasurementEventForm","continuousAdd","setContinuousAdd","showSymptoms","setShowSymptoms","setSymptoms","resetForm","measuredAt","measurementDescription","extraFormValues","vitalSignValidation","formatedSymptoms","getSymptoms","symptomId","newSymptoms","findIndex","flipSymptom","handleFormatDose","doseFormat","dosageQuantity","doseFormatFormated","handleDropsLabel","handleFormatAdministeredBy","administeredBy","viaTypeFormated","ContainerText","Text","fontWeightBold","MedicationInformationCard","dosageFormat","medicalNotes","stringFirstNumberIndex","medicationDosage","medicationId","CreateMedicationEventForm","medications","selectedMedication","setSelectedMedication","handleGetSelectedMedication","optional","CreateRoutineEventForm","Card","CardTitleContainer","FooterContent","info","StyledForm","ExecutionMessageForm","formProps","defaultProps","buttonLabel","subTitle","defaultFormProps","handleChange","hiddenButton","createOfflinePatchExecutionMessage","useExecution","patchExecutionMessage","executionId","patchOfflineNotes","resolveEventCreationBody","createdAtDate","setMilliseconds","resolveEventStatus","resolveEventShiftIdData","resolveEventShiftExecutionIdData","eventNotifiedAt","resolveEventMedicatonData","resolveEventMeasurementData","resolveEventSubCategoryData","resolveParamToProperEventType","eventTypeParam","isDateAfterShift","isDateAtShiftInterval","isWithinInterval","end","shiftMaxDateTime","isAfter","CreateShiftEvent","setMedications","titleText","resolveTitleText","loadingMedication","setMaxDateTime","setMinDateTime","resolveLoad","loadMedications","loadSubCategories","resolveGetAllSubCategories","handleCreateEvent","dataToSend","handleExecutionMessage","handleCancel","renderCreateEventShiftForms","HeaderContainer","TimerContainer","TimerBox","ShiftTimeContestationDateBlock","startingDatetime","endingDatetime","startingLabel","endingLabel","getFormattedDate","dateTime","getFormattedTime","MuiFormControlLabel","useShiftTimeContestation","endedAt","justification","ConfirmSaveDialog","Body","TopGuidelineParagraph","p","StyledDatePicker","DatePicker","StyledTimePicker","TimePicker","FormInnerContainer","DateTimePickersGroup","DateTimeCheckboxGroup","JustificationContainer","setHours","startedAtDate","startedDatetimeEnabled","schema","startedAtTime","endedAtDate","endedDatetimeEnabled","endedAtTime","CreateTimeContestationForm","onCancel","minTimeContestationDatetime","maxTimeContestationDatetime","isSubmitConfirmationModalOpen","setFieldTouched","checkIfDatesDaysAreEqual","DialogProps","maxLength","field","dateA","dateB","getDate","CreateTimeContestation","setShift","postShiftTimeContestation","shiftExecution","executionHasContestation","timeContestations","caregiverHasAlreadyContestedExecution","createdById","handleTimeContestationSubmitted","getHours","setMinutes","getMinutes","body","currentExecutionIndex","orderBy","Accordion","MuiAccordion","$backgroundColor","CareLineCard","CareLineInfo","CareLineName","CareLineStatus","$answered","CareCategoryAccordion","colorHexa","isAllowedToCreateCareQuestions","AccordionSummary","expandIcon","AccordionDetails","answered","careQuestionText","careQuestionIndex","CareCategoryList","isDateAtInterval","checkIfStatusToggleTimeIsAllowed","eventTime","updatedTimeHappensAt","differenceInMinutes","checkIfUserIsAllowedToPatchEvent","useShiftEventHandling","onChangeStatus","onChangeComment","onChangeTime","currentStatus","setCurrentStatus","currentComment","setCurrentComment","isStatusToggleTimeAllowed","setIsStatusToggleTimeAllowed","isUserAllowedToPatchEvent","setIsUserAllowedToPatchEvent","intervalId","statusToggleTimeAllowed","handleStatusToggle","newStatus","previousStatus","toggledStatus","dismiss","toastId","warn","handleUpdatedTime","updatedTimeHappens","isoUpdatedTimeHappens","isBefore","handleCommentChange","newComment","handleAllowedPatchEvent","callbackFn","LargeButton","defaultValues","CommentModal","handleEventComment","readonly","allowRemoveButton","transform","SvgIconDone","className","cx","cy","r","SvgIconNotdone","StyledNotDoneIcon","NotDoneIcon","StyledDoneIcon","DoneIcon","AccessibleSharpIcon","RealTimeContainer","LeftContainer","DescriptionContainer","RightContainer","$disabled","StyledCommentButton","StyledChangeStatus","LineThroughTypography","CardFooter","footer","CaregiverTypography","UpdateTimeModal","initialFormValues","UnselectedNotDoneIcon","UnselectedDoneIcon","SelectedNotDoneIcon","SelectedDoneIcon","CommentIcon","Message","UnselectedTimeIcon","TimeIcon","SelectedTimeIcon","TimeColorIcon","AppointmentCard","caregiverName","isAllowedToUpdateComment","isAllowedToUpdateDoneStatus","isAllowedToUpdateRealTime","commentModalVisible","setCommentModalVisible","visibleModal","setVisibleModal","CalendarIcon","trim","ComplicationCard","visibleCommentModal","setVisibleCommentModal","AlertIcon","yellow","styledHighlight","getMeasurementUnit","StatusContainer","Instructions","input","InformationContainer","NoteTypography","CloseIconContainer","background","iconColor","borderColor","CheckIconContainer","StyledCheckIcon","CheckIcon","BoldText","Measurement","Math","abs","borderStyle","borderWidth","getConditionWithDetail","getFormattedSymptoms","condition","foodCondition","ScheduledMeasurementCard","scheduledMeasurements","eventScheduleId","hour","MesurementIcon","MeasurementCard","MedicationCard","MedicationIcon","ocean","RoutineCard","updateTimeModalVisible","setUpdateTimeModalVisible","ClockIcon","Column","Row","clickable","SymptomsDescription","LoadingSpinner","patchEvent","glycemiaValue","setGlycemiaValue","setAdditionalDetails","newMeasurementValue","complicationMeasurement","pattern","StyledModal","Modal","MultiselectContainer","paper","HeaderLeftIcon","OptionsSection","OptionContainer","StyledTypography","StyledCheckbox","Input","FooterButton","Option","check","testid","MultiselectModal","isOpen","onFinishOptionsSelection","hasCustomUserInput","customOptionInitialValue","localOptions","setLocalOptions","isCustomInput","setCustomOption","customOption","customOptionName","setCustomOptionName","customLabel","closeWithOnCloseEvent","onSelectButtonClick","formattedCustomOption","onBackdropClick","SUB_CATEGORY_ENUM","GLICEMY","OXIMETRY","WEIGHT","HEIGHT","TEMPERATURE","PAIN","URINARY_ELIMINATION","EVACUATION","HIDRIC_INGESTION","ABDOMINAL_CIRCUMFERENCE","SymptomsListContext","SymptomsListContextProvider","currentShiftEvents","symptomsList","setSymptomsList","list","BloodPressureMeasurementInput","isModalOpen","setIsModalOpen","symptomOptionsToPut","setSymptomOptionsToPut","symptomOptionsList","measurementComplication","symptomOptions","wasUserInput","formattedSymptomOptions","formattedCheckedOptions","onCloseWithoutSelection","Create","join","symptomsToPut","formatOptionIntoSymptomOption","temperatureValue","setTemperatureValue","frequencyValue","setFrequencyValue","heartRate","setHeartRate","OximetryRate","oximetryRate","setOximetryRate","WeightMeasurementInput","weightValue","setWeightValue","VitalSignsMeasurementInput","childrenProps","formatEvents","events","measurements","categoryId","categoryIdMapper","filteredEvents","formattedMeasurements","groupBy","group","concat","sort","event1","event2","dateEvent1","dateEvent2","toastErrorRedirect","beforeOpen","responseDataMessage","subCategoryHasCustomInput","ActionsContainer","SelectedAccessTimeButton","legacy","currentCaregiverName","setCurrentCaregiverName","currentUpdatedTimeHappensAt","setCurrentUpdatedTimeHappensAt","currentEvent","setCurrentEvent","isAllowedToUpdateMeasurement","initialMeasurement","setMeasurementValue","measurementValidation","setMeasurementValidation","visibleTimeModal","setVisibleTimeModal","timeIcon","UnSelectedTimeIcon","delayedUpdateScheduledMeasurement","measurementInputRef","handleChangeStatus","overrideStatus","userIsAllowedToPatchEvent","focus","CardDiv","GENERAL","MEDICATION","COMPLICATION","MEASUREMENT","CurrentShiftEventList","formattedEvents","emptyMessage","isRoutine","renderActivityCardByEvent","CardActionAreaCentered","backgroundVariant","CollapseCentered","Divider","CardContentColorVariant","maxLines","CollapsibleCardContent","isExpanded","setIsExpanded","hasPressedSeeMore","setHasPressedSeeMore","toggleCollapse","expanded","resetStateOnResize","useLayoutEffect","addEventListener","removeEventListener","overflow","setOverflow","updateState","offsetWidth","scrollWidth","offsetHeight","scrollHeight","useResizeDetector","targetRef","onResize","useOverflowDetector","CardWithBackground","TypographyWhiteText","ExecutionMessageCard","executionMessage","handleNo","handleYes","FinishShiftConfirmDialog","totalOfQuestions","isUserSelfCare","subtitle","isFinishingShift","SvgLogoCuidadorInline","mainColor","StyledFavorite","Favorite","StyledLogoInline","LogoInline","MadeBy","SubTitle","DateContainer","CircleContainer","DateInside","DateOutside","FinishShiftButton","formatFullWeekdayName","PatientAvatar","Avatar","PageTitle","justifyContent","marginInline","maxWidth","textAlign","marginLeft","BlankDiv","top","right","bottom","left","IconButtonStyled","padding","PscButton","SideMenu","handleToggleSideMenu","isSideMenuOpen","canAccessGuardianApp","MenuButton","CurrentShift","unblock","block","hasQueueItems","Notiflix","Confirm","show","cssAnimationDuration","okButtonBackground","cancelButtonBackground","titleColor","messageColor","titleElement","querySelector","innerHTML","isLoading","setIsLoading","isOpenSideMenu","setIsOpenSideMenu","isFinishShiftDialogOpened","setIsFinishShiftDialogOpened","refreshAndEnsurePageLoads","isAllowedToFinishShift","isAllowedToReadCareQuestions","showError","loadPageData","showToastOnError","patchExecutionMessageDebounced","newMessage","dateDay","dateMonth","toLowerCase","dateWeekDay","executionMessages","sortBy","getExecutionMessages","SymptomsList","Instruction","ContactText","LinksContainer","StyledPhoneContainer","StyledOpenWhatsappContainer","StyledOpenLinkContainer","Contact","ContactsCard","relevantInformation","callingCondition","support","link","isWhatsapp","maskedPhoneNumber","Language","WhatsApp","Launch","EmergencyContactsCard","contacts","EmergencyContactCard","EmergencyContacts","originalValue","BackgroundOverlay","TitleTypography","BackButton","ForgotPassword","Home","displayName","PhotoElement","CenterContainer","$isAlmostComplete","LeftContent","CompletedTasks","ShiftHeaderNotification","onFinishClick","questions","completed","getTasksSummary","completedTasksInPercentage","round","endIcon","memo","TIMER_IN_MS","PatientHeader","endTime","shiftEndingTimer","getDiffInMs","isShiftNotificationVisible","setIsShiftNotificationVisible","diffInMs","clearTimeout","SubTitleContainer","IconContainer","eventDate","formattedDate","MesurementCard","separateComplicationsFromActivities","shiftEvents","complicationEvents","eventsWithoutComplications","ShiftEventList","RenderActivityCardByEvent","useLastShift","ShiftHeader","ButtonBottomContainer","LastShift","lastShiftEvents","setLastShiftEvents","lastShiftMessages","setLastShiftMessages","lastShiftFormattedDate","setLastShiftFormattedDate","getLastShiftByPatientId","handleNextRedirect","lastShift","messages","formattedEventsWithoutComplications","Background","BackgroundImage","section","Login","redirect","setRedirect","handleSubmit","formattedCpf","handleShowPassword","useMotivationalMessage","getOne","MotivationalMessageCard","MotivationalMessageLine","logoDarkUrl","MotivationalMessage","messageLines","setMessageLines","messageData","breakMessageLines","lines","clipPath","fillRule","clipRule","SvgCalendarIcon","ButtonContainerBaseStyles","ShiftCalendarButton","aria-controls","aria-haspopup","PatientInfoContainer","InfoContainer","Info","PatientCardItem","isAllowedToReadProfilePicture","userBaseImage","EmptyDiv","Patients","isAllowedToReadRelatedPatients","historyLocationSearch","handleGetPatients","order","patientsToInsert","LinkForwardRef","ButtonLink","StyledFab","h2","ButtonLinkForwardRef","ReportStatus","ReportCard","ProfessionalReportList","reports","report","CardActionArea","CardHeader","titleTypographyProps","subheaderTypographyProps","avatar","subheader","renderReportCard","ProfessionalReport","professionalReports","setProfessionalReports","isAllowedToCreateProfessionalReport","handlePatientName","loadProfessionalReports","loadedReports","caregiverPatients","ViewProfessionalReportForm","disableUnderline","ProfessionalReportModelToFormValues","eventSubCategory","ProfessionalReportItem","loadingComplications","reportId","setReport","reportFormData","setReporFormData","dialogStatus","setDialogStatus","handleProfessionalReport","handleSubcategories","handleRemoveProfessionalReport","rowsDeleted","Grid","TextSection","AccessTimeIcon","strikethrough","MenuSection","$isExpanded","sortDescShiftContestations","b","getTimeContestationCreatedAt","timeContestation","getShiftExecutionRealTime","isCaregiverExecutionOwner","isExecutionContested","StyledMenu","withStyles","getContentAnchorEl","anchorOrigin","vertical","horizontal","transformOrigin","ShiftExecutionCard","anchorEl","setAnchorEl","shouldBeAbleToContestTime","isAnnulled","hasPreviouslyContested","endOfContestPeriod","addDays","endOfMonth","currentTarget","keepMounted","data-testId","handleRedirectToCreateContestation","handleRedirectToExecutionHistoryContestation","ExecutionList","TimelineContainer","hasTimestamps","ParentTimeline","BoundaryTimestamps","Timestamp","ExecutionTimelineSlotBlock","timeslot","startsAtPercentage","durationPercentage","LegendContainer","Legend","LegendLabel","LegendColor","formatTimeToAmericaSaoPauloTimezone","utcDatePtBr","subHours","timezoneUnawareDate","formatShortDateToAmericaSaoPauloTimezone","getTimezoneOffset","ShiftExecutionTimeline","timeline","ShiftContestation","executionTimeline","setExecutionTimeline","formatShift","handleFormatDate","handleFormatTime","time","iconBaseStyles","CardContainer","OriginalSchedulesContainer","CardItem","CardItemJustify","CardTimeText","CardTitle","StyledTitle","StyledSubtitle","StyledCreatedBy","NoRegistrationsText","StyledClockIcon","WatchLater","StyledCalendarIcon","DateRange","OriginalSchedules","dateStartedAt","timeStartedAt","dateEndedAt","timeEndedAt","AnnulledCard","annullation","dateCreatedAt","timeCreatedAt","executionType","annulledBy","TimeContestationCard","contestationNumber","createdBy","ExecutionHistoryContestation","findExecutionByExecutionId","orderByCreatedAt","collection","executionNumber","annullations","hasTimeContestations","hasAnnullations","reverse","ShiftFinish","handleShiftFinish","headerTitle","baseIconStyles","ShiftDetailsIcon","TimeCorrectionIcon","AccessTime","isAllowedToReadShiftTimeContestation","showShiftDetailsItem","isShiftDetailsVisible","showTimeContestationReadItem","ContainerShifts","ContainerDayShifts","ShiftCard","ShiftCardTitle","StyledYYYYMM","StyledDD","StyledName","ShiftBodyDetails","ShiftsHistory","shifts","mapKeyYYYYMM","innerMap","anyShift","mapKeyDD","ShiftHistory","setShifts","patientName","setPatientName","Map","groupedShifts","setGroupedShifts","loadedShifts","getPatientName","has","s","set","handleShiftGroup","AnswerLineTypography","MultiAnswerUl","ul","MultiAnswerLi","getAnswerContent","o","selectedOptions","v","TitleHeader","StyledSection","isDeeplyAnswered","countAnsweredShiftCareQuestions","count","currentCareQuestionAnswer","getCareCategoryCardStatusMessage","careQuestionCount","CareCategoriesViewer","questionsGroupedByCareCategory","shiftCareQuestions","careCategoryId","shiftCareQuestionList","currentCareCategory","scq","cq","filteredCareQuestions","shiftCareQuestion","currentCareQuestion","PreviousButton","ShiftDataContainer","PreviousOrNextShift","shiftIds","currentShiftId","isPreviousShiftButtonDisabled","isNextShiftButtonDisabled","previousShiftId","nextShiftId","StyledTypographyTitle","StyledTypographyAvatar","TypographyWithIcon","ShiftPatientContainer","StyledTypographyAdditionalCoverage","FollowShift","patientPictureURL","setPatientPictureURL","setShiftIds","fetchShiftList","handleGetProfilePictureURL","ptBR","StepDot","Steps","steps","activeStep","QuestionCard","StepsContainer","StepCounter","OptionsWrapper","OptionDescriptionContainer","StyledOptionDescriptionTextField","QuestionText","ShiftQuestionOptions","onOptionsChange","buildChangeOptions","changedData","optionId","answerOptions","optionToChange","op","updatedNextAnswer","Fragment","updatedOptions","ShiftQuestion","onAnswerChange","currentStep","handleOptionsChange","newAnswerData","FinishingShiftHeaderDiv","defaultRouteState","ShiftQuestionPage","setCareCategoryIndex","setCareLineIndex","setCareQuestionIndex","nextQuestion","previousQuestion","previousCareCategory","previousCareLine","goToNextQuestion","lastCareCategory","lastCareLine","SvgOldMan","StyledOldManIllustration","OldMan","UnregistredShiftsMessage","SvgNotStarted","SvgList","backgroundColorByStatusTitle","CardBody","CardTime","CardButton","Done","StyledAvailableIcon","NotStartedIcon","StyledUnavailableIcon","AlarmOff","StyledInProgressIcon","ListIcon","ShiftCalendarCard","calendarEntry","handleStartShift","formattedDateToStart","shiftPlannedToStartAt","handleClickButton","statusTitle","resolveShiftStatusColor","resolveShiftStatusIcon","resolveShiftStatusTitle","shiftName","resolveButtonLabel","ShiftHistoryButton","HistoryIcon","ShiftCalendar","shiftCalendar","setShiftCalendar","patientProfilePictureURL","setPatientProfilePictureURL","isStartingShift","setIsStartingShift","getPatientById","patientById","loadingPatient","loadingShiftCalendar","isAllowedToReadShiftCalendar","handleGetShiftCalendar","setOfflineQueuedData","entry","ShoppingListUpsertForm","handleBoughtSubmit","isAllowedToUpdateShoppingList","isAllowedToBuyShoppingList","shoppingText","ShoppingList","shoppingList","listId","HeaderWithSignOut","handleToggleDialog","CardText","Warning","NoPatientRelationsBlock","userHasRelatedPatients","handleRefreshUserInfo","NoOrganizationIdBlock","userHasOrganizationId","ExecutionInProgressRedirects","renderComponent","executionInProgressRequired","executionInProgressForbidden","AuthenticatedRoute","Component","shouldCheckIfHasShiftInProgress","isUserOrganizationOwner","organization","render","analytics","pageview","pagePath","gtag","page_path","RouteAnalytics","UnauthenticatedRoute","Routes","CaregiverMoodShiftStart","CaregiverMoodShiftEnd","LastShiftEvents","withTabs","routesWithMenu","Layout","useRouteMatch","shouldRenderTabs","isExact","Toast","ToastContainer","ToastContainerCustom","autoClose","ScrollToTop","scrollTo","createGlobalStyle","PushNotificationContext","PushNotificationProvider","handlePermissionAndTokenRequest","Notification","permission","requestPermission","handlePutToken","currentToken","onMessage","notificationTitle","notification","notificationOptions","isTryingToRequest","firstQueueData","splice","RETRY_SECONDS","startQueueChecker","App","appCFaviconUrl","appCJsonManifest","setFavicon","setManifest","StylesProvider","injectFirst","ThemeProvider","ShiftInProgress","reportWebVitals","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","isLocalhost","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","ReactDOM","StrictMode","getElementById","origin","ready","unregister","reload","checkValidServiceWorker","serviceWorkerRegistration"],"mappings":"4QAAA,aAQS,gFAPP,sBAOyB,gFANzB,sBAM2C,0EAL3C,gBAKuD,2EAJvD,kB,uPCJF,aAEA,YAYa,mBAAmB,WAG5B,IAAI,EAwHR,WACE,IAAK,OACH,MAAM,IAAI,MAAM,iCAElB,OAAO,EA5HW,GACd,IACA,IAEE,EAAW,EAA2B,GAC5C,OAAO,UAAQ,IAMJ,mBAAmB,SAAC,GAC/B,IAAM,EAAW,EAAgC,GAC/C,OAAK,UAAQ,IAGJ,aAAa,SAAC,GACvB,IAAE,EAAyB,SAAS,cAAc,qBAE/C,KACH,EAAO,SAAS,cAAc,SACzB,IAAM,OACX,SAAS,qBAAqB,QAAQ,GAAG,YAAY,IAGrD,EAAG,KAAO,GAGD,cAAc,SAAC,GACxB,IAAE,EAAyB,SAAS,cAAc,yBAC9C,EAAiB,KAAK,UAAU,GAChC,EAAO,IAAI,KAAK,CAAC,GAAiB,CAAE,KAAM,qBAC1C,EAAc,IAAI,gBAAgB,GAEnC,KACC,EAAG,SAAS,cAAc,SACzB,IAAM,WACX,SAAS,qBAAqB,QAAQ,GAAG,YAAY,IAGvD,EAAK,aAAa,OAAQ,IAG5B,IAAM,EAAsB,WACxB,IAAG,OACH,MAAM,IAAI,MAAM,iCAKhB,OAFgB,OAAO,SAAS,SAAS,MAAM,KAAK,IAKlD,EAAsC,WACxC,IAAI,EAAW,QAAM,OAAO,SAAS,QAErC,OAAuB,MAArB,EAAS,SACJ,IAEA,EAAsB,IAI3B,EAAyB,WAK3B,OAJ4B,OAAO,aAAa,QAChD,iCAG8B,WAG5B,EAAwB,SAC5B,GAEE,IAAE,EAYF,OAVA,EADE,MAAM,QAAQ,EAAS,UACF,EAAS,SAAS,GAElB,EAAS,WAGhC,OAAO,aAAa,QAClB,+BACA,GAGG,GAGH,EAA6B,SAAC,GAChC,IAAG,EACC,MAAG,UAGP,IAAI,EAAgB,OAAO,QAAQ,WAAS,MAC5C,YAA0C,2BAAnC,EAAmC,EAAnC,cAAe,EAAoB,EAApB,cACpB,OAAO,IAAc,GAAiB,IAAc,KAGtD,OAAE,EACK,EAAc,GAEd,WAIL,EAAkC,SAAC,GACvC,OAAuB,MAAnB,EACK,gBACqB,MAAnB,EACF,SACqB,OAAnB,EACF,QACqB,OAAnB,EACF,eAEA,Y,kFCusBX,UA10B0C,CACtCA,QAAO,CACHC,SAAM,UACNC,iBAAc,2BACdC,kBAAe,qCACfC,cAAW,UACXC,cAAW,MACXC,QAAK,6CACLC,QAAK,yCACLC,oBACF,6EACE,oBACF,4EACE,eACF,+EACE,eACF,+EACE,YACF,4EACE,eACF,4EACE,aACF,6EACE,gBACF,6EACE,iBAAc,CACV,WAAM,wCACN,6CACA,MAAC,CACL,CACE,IACE,gFACM,MAAD,gCACC,KAAF,aAER,CACE,IACE,iFACF,KAAM,YACN,MAAO,WAET,CACE,IACE,iFACF,KAAM,YACN,MAAO,YAGL,UAAK,IACL,QAAG,aACH,YAAO,UACP,iBAAY,WAEhB,iBAAc,CACV,WAAM,2BACN,gCACA,MAAC,CACL,CACU,IACN,+EACF,MAAO,gCACP,KAAM,aAER,CACE,IACE,gFACF,KAAM,YACN,MAAO,WAET,CACE,IACE,gFACF,KAAM,YACN,MAAO,YAGL,UAAK,IACL,QAAG,aACH,YAAO,UACP,iBAAY,WAEhB,YAAS,CACL,QAAG,CACP,KAAM,UACN,KAAM,WAEF,UAAK,CACT,KAAM,UACN,KAAM,WAEF,MACJ,KAAM,UACE,KAAF,WAEF,MAAC,CACG,MAAD,UACC,KAAF,WAEF,QAAG,CACC,KAAF,kBACE,MAAD,WAEH,QAAG,CACC,KAAF,qBAEF,MAAC,CACG,MAAD,CACL,KAAM,CACJ,KAAM,UACN,MAAO,UACP,KAAM,WAER,MAAO,UACP,IAAK,CACH,KAAM,UACN,MAAO,UACP,KAAM,WAER,KAAM,UACN,OAAQ,UACR,MAAO,aAIT,YAAS,CACL,QAAG,CACC,KAAF,UACN,MAAO,UACP,KAAM,WAEF,UAAK,CACT,MAAO,UACCC,KAAF,UACN,KAAM,WAEF,MACI,KAAF,WAEF,MAAC,CACG,KAAF,UACE,KAAF,WAEF,QAAG,CACC,KAAF,mBAEF,QAAG,CACC,KAAF,WAEF,MAAC,CACG,MAAD,CACL,KAAM,CACJ,KAAM,UACN,MAAO,UACP,KAAM,WAER,MAAO,UACP,IAAK,CACH,KAAM,UACN,MAAO,UACP,KAAM,WAER,KAAM,UACN,OAAQ,UACR,MAAO,aAIT,aAAU,CACZ,QAAS,WAEP,cAAW,CACb,QAAS,UACT,UAAW,YAGb,OAAM,CACF,SAAM,SACN,eAAY,IACZ,iBAAc,SACd,kBAAe,mCACf,cAAW,iBACX,cAAW,kBACX,QAAK,oDACL,QAAK,qDACL,oBACF,wEACE,oBACF,wEACE,eACF,8EACE,eACF,8EACE,YACF,kFACE,eACF,kFACE,aACF,mFACE,gBACF,mFACE,iBAAc,CACV,WAAM,gCACZ,KAAM,gCACN,MAAO,CACL,CACE,IACE,wEACF,MAAO,gCACC,KAAF,aAER,CACE,IACE,yEACM,KAAF,YACE,MAAD,WAET,CACE,IACE,yEACM,KAAF,YACE,MAAD,YAGLC,UAAK,IACLC,QAAG,aACHC,YAAO,UACPC,iBAAY,WAEhB,iBAAc,CACV,WAAM,gCACN,qCACA,MAAC,CACL,CACE,IACE,wEACF,MAAO,gCACP,KAAM,aAER,CACE,IACE,yEACF,KAAM,YACN,MAAO,WAET,CACE,IACE,yEACF,KAAM,YACN,MAAO,YAGL,UAAK,IACL,QAAG,aACH,YAAO,UACP,iBAAY,WAEhB,YAAS,CACL,QAAG,CACC,KAAF,WAEF,UAAK,CACD,KAAF,WAEF,MACI,KAAF,UACE,KAAF,WAEF,MAAC,CACL,MAAO,UACP,KAAM,WAEF,QAAG,CACP,KAAM,kBACN,MAAO,WAEH,QAAG,CACP,KAAM,qBAEF,MAAC,CACL,MAAO,CACL,KAAM,CACJ,KAAM,UACN,MAAO,UACP,KAAM,WAER,MAAO,UACP,IAAK,CACH,KAAM,UACN,MAAO,UACP,KAAM,WAEE,KAAJ,UACI,OAAF,UACE,MAAH,aAIT,YAAS,CACL,QAAG,CACC,KAAF,WAEF,UAAK,CACD,KAAF,WAEF,MACI,KAAF,WAER,MAAO,CACL,KAAM,UACN,KAAM,WAER,QAAS,CACP,KAAM,mBAER,QAAS,CACP,KAAM,WAER,MAAO,CACL,MAAO,CACL,KAAM,CACJ,KAAM,UACN,MAAO,UACP,KAAM,WAER,MAAO,UACP,IAAK,CACH,KAAM,UACN,MAAO,UACP,KAAM,WAER,KAAM,UACN,OAAQ,UA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M,eACN,eAAY,KACZ,iBAAc,iBACd,kBAAe,GACf,cAAW,uBACX,cAAW,wBACX,QAAK,0DACL,QAAK,2DACL,oBACF,iFACE,oBACF,iFACE,eACF,mFACE,eACF,mFACE,YACF,qFACE,eACF,qFACE,aACF,uFACE,gBACF,uFACE,iBAAc,CACV,WAAM,yCACN,8CACA,MAAC,CACL,CACE,IACE,2EACF,MAAO,gCACP,KAAM,aAER,CACE,IACE,wFACM,KAAF,YACE,MAAD,WAET,CACU,IACN,wFACM,KAAF,YACE,MAAD,YAGL,UAAK,IACL,QAAG,aACH,YAAO,UACP,iBAAY,WAEhB,iBAAc,CAChB,WAAY,yCACN,8CACA,MAAC,CACL,CACE,IACE,2EACF,MAAO,gCACP,KAAM,aAER,CACE,IACE,wFACF,KAAM,YACN,MAAO,WAET,CACE,IACE,wFACF,KAAM,YACN,MAAO,YAGL,UAAK,IACL,QAAG,aACH,YAAO,UACP,iBAAY,WAEhB,YAAS,CACL,QAAG,CACC,KAAF,WAEF,UAAK,CACD,KAAF,WAEF,MACI,KAAF,UACE,KAAF,WAER,MAAO,CACL,MAAO,UACP,KAAM,WAER,QAAS,CACP,KAAM,kBACN,MAAO,WAET,QAAS,CACP,KAAM,qBAER,MAAO,CACL,MAAO,CACL,KAAM,CACJ,KAAM,UACN,MAAO,UACP,KAAM,WAER,MAAO,UACP,IAAK,CACH,KAAM,UACN,MAAO,UACP,KAAM,WAER,KAAM,UACN,OAAQ,UACR,MAAO,aAIb,YAAa,CACX,QAAS,CACP,KAAM,WAER,UAAW,CACT,KAAM,WAER,KAAM,CACJ,KAAM,WAER,MAAO,CACL,KAAM,UACN,KAAM,WAER,QAAS,CACP,KAAM,mBAER,QAAS,CACP,KAAM,WAER,MAAO,CACL,MAAO,CACL,KAAM,CACJ,KAAM,UACN,MAAO,UACP,KAAM,WAER,MAAO,UACP,IAAK,CACH,KAAM,UACN,MAAO,UACP,KAAM,WAER,KAAM,UACN,OAAQ,UACR,MAAO,aAIb,aAAc,CACZ,QAAS,WAEX,cAAe,CACb,QAAS,UACT,UAAW,c,kWCp0BjB,SAASM,IACP,OAAO,kDAGT,IAQeC,EARiB,SAAC,GAAkB,IAAhBC,EAAe,EAAfA,SACjC,OACE,cAAC,IAAD,CAAsBC,SAAUH,EAAhC,SACGE,K,oMCIME,EAAgBC,IAAMC,OAAN,2BAVP,CACpBC,QAAS,IACTC,QAAS,CACPC,OAAQ,iCACR,eAAgB,sBAMS,IAE3BC,QAAQ,GAAD,OACe,UAApBC,gyBAAYC,IACRD,gyBAAYE,kBACZF,+CAHC,cAOHG,EAAcC,IAAYC,eAAe,CAC7CC,OAAQ,CAACF,IAAYG,UAAWH,IAAYI,cAC5CC,KAAM,6BAoBKC,EAhBXC,gBAAiB,2BAAD,OACXlB,QADW,IACXA,OADW,EACXA,EAAemB,UADJ,IAEdC,MAAO,CACLC,OAAQ,IACRC,MAAOZ,EACPa,QAAS,CACPC,OAAO,GAGTC,YAAa,SAACC,GACZ,MAAyB,kBAAlBA,EAAMC,SAEfC,cAAc,MAMPC,EAAiB,kBAAMZ,GAEvBa,EAA8B,SACzCC,EAGAC,GAEA,IAAMC,EAAkBjC,EAAckC,aAAaC,QAAQC,IACzDL,EACAC,GAEIK,EAAwBpB,EAAoBiB,aAAaC,QAAQC,IACrEL,EACAC,GAGF,OAAO,WACLhC,EAAckC,aAAaC,QAAQG,MAAML,GACzChB,EAAoBiB,aAAaC,QAAQG,MAAMD,KAItCE,EAA+B,SAC1CR,EAEAC,GAEA,IAAMC,EAAkBjC,EAAckC,aAAaM,SAASJ,IAC1DL,EACAC,GAGIK,EAAwBpB,EAAoBiB,aAAaM,SAASJ,IACtEL,EACAC,GAGF,OAAO,WACLhC,EAAckC,aAAaM,SAASF,MAAML,GAC1ChB,EAAoBiB,aAAaM,SAASF,MAAMD,KAIrCrC,I,0FCjFTyC,EAAiB,CACrBC,OAAQnC,0CACRoC,WAAYpC,6CACZqC,YAAarC,gyBAAYsC,gCACzBC,UAAWvC,6BACXwC,cAAexC,yCACfyC,kBAAmBzC,eACnB0C,MAAO1C,6CAGT2C,IAAYC,cAAcV,GAEnB,IAAMW,GAAOF,IAAYE,KAEnBC,GAAsB,uCAAG,WAAOC,GAAP,iBAAAC,EAAA,yFAEdH,KAAOI,mBAFO,aAEd,EAAoBC,aAFN,QAE5BC,EAF4B,UAIhCJ,EAAOlD,QAAQuD,cAAf,iBAAyCD,IAJT,gDAOlCE,QAAQC,IAAR,MAPkC,iCAS7BP,GAT6B,yDAAH,sDAYtBQ,GAAW,uCAAG,8BAAAP,EAAA,6DACnBQ,EAAYC,YAAaC,MADN,SAELC,YAASH,GAAWI,OAAM,SAACC,GAG7C,OAFAR,QAAQlC,MAAM0C,GACdC,IAAwBD,GACjB,QALgB,cAEnBV,EAFmB,yBAOlBA,GAPkB,2CAAH,qDAUXO,GAASK,ICEPC,IDAArB,EAAf,EC3CiB,WAEf,IAAMsB,EAAeC,uBACnB,SAACC,EAAkBC,GAAnB,OACE1E,EAAM,CACJ2E,OAAQ,MACRC,IAAKH,EACLI,KAAM,KACN1E,QAAS,CACP,eAAgBuE,OAGtB,IA4BF,MAAO,CAAEI,YAxBWN,sBAAW,uCAAC,WAAOC,EAAkBM,GAAzB,iBAAAzB,EAAA,sEAGpBiB,EAAaE,EAAUM,EAAKC,MAHR,uBAEpBC,EAFoB,EAE5BJ,KAAQI,UAFoB,kBAIvBC,IAAa,CAClBP,OAAQ,MACRE,KAAME,EACNH,IAAKK,EACL9E,QAAS,CACP,eAAgB4E,EAAKC,SATK,2CAAD,wDAY5B,IAYmBG,SAVLX,uBACf,SAACC,GAAD,OACE7C,IAAiB,CACf+C,OAAQ,MACRC,IAAKH,EACLI,KAAM,SAEV,OC/BEJ,GAAW,QA2FFW,GAzFC,WAAO,IAAD,EACcd,KAA1BQ,EADY,EACZA,YAAaK,EADD,EACCA,SA8ErB,MAAO,CACLE,eA9EqBb,sBAAW,uCAChC,WAAOK,EAA0BS,GAAjC,eAAAhC,EAAA,+EAE2BtD,EAAMuF,KAAN,UAAcd,GAAd,oBAA0CI,EAAM,CACrE1E,QAAS,CACPuD,cAAc,UAAD,OAAY4B,MAJjC,cAEU/C,EAFV,yBAOWiD,QAAQC,QAAQlD,EAASsC,OAPpC,yDASWW,QAAQE,OAAR,OATX,yDADgC,wDAahC,IAkEAC,kBA/DwBnB,sBAAW,uCAAC,WAAOoB,GAAP,eAAAtC,EAAA,+EAEXtD,EAAM6F,IAAN,UAClBpB,GADkB,gCACcmB,IAHH,cAE5BrD,EAF4B,yBAK3BiD,QAAQC,QAAQlD,EAASsC,OALE,yDAO3BW,QAAQE,OAAR,OAP2B,yDAAD,sDASlC,IAuDDI,qBArD2BtB,sBAAW,uCACtC,WAAOO,EAAYa,GAAnB,eAAAtC,EAAA,+EAE2BwB,EAAY,+BAAD,OACDc,GAC/Bb,GAJN,cAEUxC,EAFV,yBAMWiD,QAAQC,QAAQlD,IAN3B,yDAQWiD,QAAQE,OAAR,OARX,yDADsC,wDAYtC,IA0CAK,kBAvCwBvB,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,+EAEX6B,EAAS,+BAAD,OAAgCa,IAF7B,cAE5BzD,EAF4B,yBAG3BiD,QAAQC,QAAQlD,IAHW,yDAK3BiD,QAAQE,OAAR,OAL2B,yDAAD,sDAOlC,IAiCDO,gBA/BsBzB,sBAAW,uCACjC,WAAOK,GAAP,eAAAvB,EAAA,+EAE2BtD,EAAMkG,IAAN,UAAazB,GAAb,cAAmCI,GAF9D,cAEUtC,EAFV,yBAGWiD,QAAQC,QAAQlD,EAASsC,OAHpC,yDAKWW,QAAQE,OAAR,OALX,yDADiC,sDASjC,IAuBAS,mBApByB3B,sBAAW,uCACpC,WAAO4B,GAAP,eAAA9C,EAAA,+EAE2BtD,EAAMqG,OAAN,UAClB5B,GADkB,sBACI2B,IAH/B,cAEU7D,EAFV,yBAKWiD,QAAQC,QAAQlD,EAASsC,OALpC,yDAOWW,QAAQE,OAAR,OAPX,yDADoC,sDAWpC,MCpCSY,GAAsB,SAAC7E,GAqBlC,OApBuB,SAACA,GAEtB,IAAKA,EAAMc,SAAU,CAEnB,MAdG,uCAkBL,IAAMgE,EAjCgB,SAAC9E,GAAiC,IAAD,EACnD+E,EAAe,OAAG/E,QAAH,IAAGA,GAAH,UAAGA,EAAOc,gBAAV,aAAG,EAAiBsC,KAAK0B,eAM9C,MALiB,CACf,8EACA,6BAGWE,SAASD,GACb,8EAGFA,EAsBkBE,CAAkBjF,GACzC,GAAI8E,EACF,OAAOA,EAGT,IAAMI,EA5DmB,SAAClF,GAAiC,IAAD,EAG5D,OAFoB,OAAGA,QAAH,IAAGA,GAAH,UAAGA,EAAOc,gBAAV,aAAG,EAAiBqE,QAGtC,KAAK,IACH,MAAO,gEACT,KAAK,IACH,MAAO,oDACT,KAAK,IACH,MAAO,yIACT,KAAK,IACH,MAAO,uGACT,KAAK,IACH,MAAO,wGACT,KAAK,IACH,MAAO,kIACT,QACE,MAAO,iEA2CoBC,CAAqBpF,GAClD,OAAIkF,QAAJ,EAMKG,CAAerF,I,+ICvExB,IAMesF,GANcC,YAAOC,KAAPD,CAAH,MCSpBE,GAAU,SAACC,EAAD,GACd,OAD6D,EAA7BnC,MAE9B,IAAK,oBACH,OAAOmC,EAAQ,EACjB,IAAK,oBACH,OAAOA,EAAQ,EACjB,QACE,OAAOA,IASAC,GAAuBC,wBAClC,IAGWC,GAAkC,SAAC,GAAkB,IAAhBzH,EAAe,EAAfA,SAAe,EAC9B0H,qBAAWL,GAAS,GADU,mBACxDM,EADwD,KAC1CC,EAD0C,KAG/DC,qBAAU,WACR,IAAMC,EAA4B3H,GAChC,SAACqD,GAEC,OADAuE,IACOvE,KAILwE,EAA6B7H,GACjC,SAACqD,GAEC,OADAyE,IACOzE,KAET,SAAC5B,GAAW,IAAD,EAMT,OALAqG,IAC+B,OAA3B,UAAArG,EAAMc,gBAAN,eAAgBqE,SAAwC,WAAtBmB,SAASC,WAC7CC,IAAMxG,MAAM,qDACZ0B,KAAO+E,WAEF1C,QAAQE,OAAOjE,MAIpB0G,EAAwCnI,EAC5CoD,IAGF,OAAO,WACLuE,IACAE,IACAM,OAED,IAEH,IAAMP,EAAmBpD,uBAAY,WACnCiD,EAAS,CAAEzC,KAAM,wBAChB,IAEG8C,EAAmBtD,uBAAY,WACnCiD,EAAS,CAAEzC,KAAM,wBAChB,IAEH,OACE,eAACoC,GAAqBgB,SAAtB,CACEC,MAAO,CAAET,mBAAkBE,oBAD7B,UAGGN,EAAe,cAAC,GAAD,IAAsB,KACrC3H,M,+BC5CMyI,GAAsB,uCAAG,WAAOC,GAAP,eAAAjF,EAAA,sEACbtD,EAAMuF,KAAN,iCAA6C,CAClEgD,QACAC,YAAa,cAHqB,cAC9BjG,EAD8B,yBAK7BA,GAL6B,2CAAH,sDAQtBkG,GAAc,uCAAG,WAC5BC,EACAC,GAF4B,eAAArF,EAAA,+EAKHtD,EAAMuF,KAAN,uBAAmC,CACxDmD,kBACAC,gBAPwB,cAKpBpG,EALoB,yBASnBiD,QAAQC,QAAQlD,IATG,yDAWnBiD,QAAQE,OAAR,OAXmB,yDAAH,wDAerBkD,GAAW,uCAAG,sBAAAtF,EAAA,+EAAYtD,EAAM6F,IAAe,aAAjC,2CAAH,qDAEJgD,GAAcxB,wBAA4B,IAE1CyB,GAAyB,SAAC,GAAyB,IAAvBjJ,EAAsB,EAAtBA,SAAsB,EACrCkJ,mBAA+B,MADM,mBACtDC,EADsD,KAChDC,EADgD,OAEnCF,mBAAsC,MAFH,mBAEtDtH,EAFsD,KAE/CyH,EAF+C,OAG/BH,oBAAS,GAHsB,mBAGtDI,EAHsD,KAG7CC,EAH6C,OAIzBL,oBAAS,GAJgB,mBAItDM,EAJsD,KAI1CC,EAJ0C,OAK7BP,qBAL6B,mBAKtDQ,EALsD,KAK5CC,EAL4C,KAMrDtK,EAAYuK,6BAAZvK,QACF6I,EAAW2B,cAP4C,EAQdC,qBAC7CvC,IADMQ,EARqD,EAQrDA,iBAAkBE,EARmC,EAQnCA,iBAGlB3B,EAAuBf,KAAvBe,mBAEFyD,EAAe,uCAAG,4BAAAtG,EAAA,sEACCsF,KADD,OAChBrG,EADgB,OAEtBiH,EAAYjH,EAASsC,KAAKgF,kBAFJ,2CAAH,qDAKfC,EAAa,uCAAG,WAAOC,EAAaC,GAApB,eAAA1G,EAAA,sEACGtD,EAAMuF,KAAN,cAA0B,CAC/CwE,MACAC,WACAxB,YAAa,cAJK,cACdjG,EADc,yBAMbY,KAAO8G,sBAAsB1H,EAASsC,KAAKpB,QAN9B,2CAAH,wDASbyG,EAAM,uCAAG,WAAOH,EAAaC,GAApB,SAAA1G,EAAA,sEAEXsE,IAFW,SAGLkC,EAAcC,EAAKC,GAHd,OAIXd,EAAS,MAJE,gDAMXA,EAAS,EAAD,IANG,yBAQXpB,IARW,4EAAH,wDAYNI,EAAU,WACdrE,KACGsG,MAAK,SAACC,GACDA,GACFjE,EAAmBiE,MAGtBC,SAAQ,WACPlH,KAAO+E,cAqMb,OAjMAR,qBAAU,WACR,IAAM4C,EAAcnH,KAAOoH,mBAAP,+BAAAjH,EAAA,MAA0B,WAAOkH,GAAP,2BAAAlH,EAAA,0DACxCkH,EADwC,gCAERxK,EAAM6F,IAAN,2CAAuC2E,QAAvC,IAAuCA,OAAvC,EAAuCA,EAAcC,MAF7C,iBAEqD5F,KAAK6F,mBAF1D,wEAKxBF,QALwB,IAKxBA,OALwB,EAKxBA,EAAchH,aALU,UAKtCC,EALsC,OAM5CzD,EAAMkB,SAASf,QAAQuD,cAAgB8G,EAAY,iBACrC/G,QACVkH,GAEAH,EAVwC,4CAYfA,EAAaI,mBAZE,oBAapB,eADZC,EAZgC,EAYhCA,QACG1H,KAb6B,wBAetC8E,IAAMxG,MACJ,2GAEF2C,IACE,IAAI0G,MAAJ,qCACgCN,EAAaC,IAD7C,iEACyGI,EAAO1H,KADhH,iCAIF+E,IAvBsC,4CA2BjBU,KA3BiB,WA2BlCrG,EA3BkC,OA4BlCwI,EA5BkC,UA4BvBxI,EAASsC,YA5Bc,aA4BvB,EAAemG,KA5BQ,wBA+BtC/C,IAAMxG,MAAN,oGAGA2C,IACE,IAAI0G,MAAJ,qCACgCN,EAAaC,IAD7C,sDAIFvC,IAvCsC,8BA0CnC6C,EAASE,qBAAsBF,EAASG,kBA1CL,wBA4CtChD,IA5CsC,kBA6C/BiD,OAAOpD,SAASqD,QAAhB,UAA2BlM,EAA3B,kBAA4CuE,KA7Cb,WA+CnCsH,EAASE,mBA/C0B,wBAiDhCI,EAAYN,EAASO,MAC3BrD,IAAMxG,MAAN,4CACoC4J,EADpC,2DAGAnD,IArDsC,2BAwDxCsB,EAAYjH,EAASsC,KAAKgF,kBAxDc,mDA0DxC5B,IAAMxG,MAAM6E,GAAoB,EAAD,KA1DS,QA8D5C2C,EAAQuB,GACRpB,GAAW,GA/DiC,2DAA1B,uDAkEpB,OAAO,WACLkB,OAED,IAEH5C,qBAAU,WACR,IAAM4C,EAAcnH,KAAOoH,mBAAP,+BAAAjH,EAAA,MAA0B,WAAOkH,GAAP,2BAAAlH,EAAA,0DACxCkH,EADwC,gCAERxK,EAAM6F,IAAN,2CAAuC2E,QAAvC,IAAuCA,OAAvC,EAAuCA,EAAcC,MAF7C,iBAEqD5F,KAAK6F,mBAF1D,wEAKxBF,QALwB,IAKxBA,OALwB,EAKxBA,EAAchH,aALU,UAKtCC,EALsC,OAM5CzD,EAAMkB,SAASf,QAAQuD,cAAgB8G,EAAY,iBACrC/G,QACVkH,GAEAH,EAVwC,4CAYfA,EAAaI,mBAZE,oBAapB,eADZC,EAZgC,EAYhCA,QACG1H,KAb6B,wBAetC8E,IAAMxG,MACJ,2GAEF2C,IACE,IAAI0G,MAAJ,qCACgCN,EAAaC,IAD7C,iEACyGI,EAAO1H,KADhH,iCAIF+E,IAvBsC,4CA2BjBU,KA3BiB,WA2BlCrG,EA3BkC,OA4BlCwI,EA5BkC,UA4BvBxI,EAASsC,YA5Bc,aA4BvB,EAAemG,KA5BQ,wBA+BtC/C,IAAMxG,MAAN,oGAGA2C,IACE,IAAI0G,MAAJ,qCACgCN,EAAaC,IAD7C,sDAIFvC,IAvCsC,8BA0CnC6C,EAASE,qBAAsBF,EAASG,kBA1CL,wBA4CtChD,IA5CsC,kBA6C/BiD,OAAOpD,SAASqD,QAAhB,UAA2BlM,EAA3B,kBAA4CuE,KA7Cb,WA+CnCsH,EAASE,mBA/C0B,wBAiDhCI,EAAYN,EAASO,MAC3BrD,IAAMxG,MAAN,4CACoC4J,EADpC,2DAGAnD,IArDsC,2BAwDxCsB,EAAYjH,EAASsC,KAAKgF,kBAxDc,mDA0DxC5B,IAAMxG,MAAM6E,GAAoB,EAAD,KA1DS,QA8D5C2C,EAAQuB,GACRpB,GAAW,GACXE,GAAc,GAhE8B,2DAA1B,uDAmEpB,OAAO,WACLgB,OAED,CAACjB,IAEJ3B,qBAAU,WACR,sBAAC,0CAAApE,EAAA,2DACiCiI,IAAGC,MAAMzD,EAAS0D,UAAnCC,EADhB,EACSjI,OADT,iCAIK2F,GAAW,GAJhB,SAK4BpJ,EAAMuF,KAC3B,qBACA,CAAEiD,YAAa,aACf,CAAErI,QAAS,CAAEuD,cAAc,UAAD,OAAYgI,MAR7C,UAKWnJ,EALX,OAUWoJ,EAAmBC,KAAIC,OAAOH,KAC9BI,EAAaX,OAAOY,aAAaC,QAAQ,mBAXpD,oBAcaC,EAAoBC,KAAKV,MAAMM,GACrCnI,QAAQC,IAAI,eAAgB+H,GAEtBQ,EAAaF,EAAkBrG,SAAW+F,EAAiB3F,GAC3DoG,EAAWC,aAAkB,IAAIC,KAAQ,IAAIA,KAAKL,EAAkBM,QAAU,IAEhFZ,GAAoBQ,GAAcC,GApB7C,kCAqBejJ,KAAO8G,sBAAsB1H,EAASsC,KAAKpB,OArB1D,0DAyBKE,QAAQlC,MAAR,MACA2C,IAAA,MACA6D,IAAMxG,MAAM6E,GAAoB,EAAD,KA3BpC,yBA6BK8C,GAAW,GA7BhB,4EAAD,KAiCC,IAEH1B,qBAAU,WACO,IAAD,IAAV6B,EACFnF,IAAe,CACb4B,GAAIwG,OAAM,OAACjD,QAAD,IAACA,OAAD,EAACA,EAAUvD,IACrBuC,MAAK,OAAEgB,QAAF,IAAEA,GAAF,UAAEA,EAAUP,YAAZ,aAAE,EAAgBT,MACvBkE,SAAQ,OAAElD,QAAF,IAAEA,GAAF,UAAEA,EAAUP,YAAZ,aAAE,EAAgBjI,OAG5BqD,IAAe,QAEhB,CAACmF,IAEAJ,EAAgB,KAGlB,cAACN,GAAYT,SAAb,CACEC,MAAO,CACLW,OACAG,UACA1H,QACAyI,SACAhC,UACAqB,WACAC,cACAI,kBACAN,iBAVJ,SAaGzJ,KC9SM6M,GAEA,EAFAA,GAID,EAaCC,GAAoBtF,wBAC/B,IAGWuF,GAA+B,SAAC,GAAkB,IAAhB/M,EAAe,EAAfA,SAAe,EAC9BkJ,oBAAS,GADqB,mBACrDI,EADqD,KAC5CC,EAD4C,OAE1BL,oBAAS,GAFiB,mBAErD8D,EAFqD,KAE1CC,EAF0C,OAGlC/D,mBAAuB,MAHW,mBAGrDtH,EAHqD,KAG9CyH,EAH8C,OAItBH,mBACpC,IAL0D,mBAIrDgE,EAJqD,KAIxCC,EAJwC,KAOpDhE,EAASW,qBAAWd,IAApBG,KAERtB,qBAAU,WACRuF,MACC,CAACjE,IAEJtB,qBAAU,WACRuF,IAGAC,OAAyCvC,GAAW,SAAClJ,GAAgB,IAAD,EAKlE,OAJ+B,OAA3B,UAAAA,EAAMc,gBAAN,eAAgBqE,SAElBqG,IAEKzH,QAAQE,OAAOjE,QAEvB,IAEH,IAAMwL,EAAqBzI,sBAAW,sBAAC,4BAAAlB,EAAA,yDAGhC0F,EAHgC,8CAK5B2B,GAL4B,cAQrCvB,GAAW,GAR0B,kBAUZpJ,EAAM6F,IAAN,2BAVY,cAU7BtD,EAV6B,OAWnCyK,EAAezK,EAASsC,MACxBiI,GAAa,GAZsB,kBAa5BvK,EAASsC,MAbmB,yCAenCqE,EAAS,EAAD,IAER9E,IAAA,MAjBmC,kBAkB5BoB,QAAQE,OAAR,OAlB4B,yBAoBnC0D,GAAW,GApBwB,6EAsBpC,CAACJ,EAAMgE,EAAgB5D,IAE1B,OAAIJ,IAAS6D,EAAkB,KAG7B,cAACF,GAAkBvE,SAAnB,CACEC,MAAO,CACLc,UACA0D,YACApL,QACAsL,cACAE,sBANJ,SASGpN,KAKMsN,GAAgB,kBAAMxD,qBAAWgD,KAQjCS,GAAa,SAACpE,GAAsB,IAAD,EAC9C,OAAW,OAAJA,QAAI,IAAJA,GAAA,UAAAA,EAAMgC,YAAN,eAAYhF,MAAO0G,IAGfW,GAAc,SAACrE,GAAsB,IAAD,EAC/C,OAAW,OAAJA,QAAI,IAAJA,GAAA,UAAAA,EAAMgC,YAAN,eAAYhF,MAAO0G,ICvHrB,SAASY,GAA4BC,GAC1C,MAAqB,aAAjBA,EAAM3G,OAA8B,UACpC2G,EAAMC,qBAA6B,YAChC,QAGF,SAASC,GAAYlB,GAC1B,IAAMmB,EAAUC,YAAOpB,EAAM,MAAO,CAAEqB,OAAQC,MACxCC,EAAqBJ,EAAQK,OAAO,GAAGC,cAAgBN,EAAQO,MAAM,GACrEC,EAAMP,YAAOpB,EAAM,KAAM,CAAEqB,OAAQC,MACnCM,EAAQR,YAAOpB,EAAM,OAAQ,CAAEqB,OAAQC,MAC7C,MAAM,GAAN,OAAUC,EAAV,YAAgCI,EAAhC,eAA0CC,GAGrC,SAASC,GAAiBb,GAC/B,IACoB,SAAjBA,EAAM3G,QAAsC,uBAAjB2G,EAAM3G,SACjC2G,EAAMc,UAFT,CAKA,IAAMC,EAAQX,YAAO,IAAIrB,KAAKiB,EAAMc,WAAY,SAChD,MAAM,eAAN,OAAmBC,IAGd,IAAMC,GAAqB,SAChChB,EACAvE,EACAwF,GAEA,IAAMC,EAAcC,OAAM,OAAC1F,QAAD,IAACA,OAAD,EAACA,EAAMhD,IACjC,QACGqH,GAAYrE,KACb2F,GAA+B3F,EAAMwF,KACrCI,GAAqCrB,EAAOkB,KAiB1CE,GAAiC,SACrC3F,EACAwF,GAEA,SAAUnB,GAAYrE,KAASwF,IAGpBI,GAAuC,SAClDrB,EACAkB,GAEA,SAAKlB,EAAMsB,YAActB,EAAMsB,WAAWC,OAAS,IAE5CvB,EAAMsB,WAAWE,MACtB,SAACC,GAAD,OAAeA,EAAUP,aAAeA,MCpEtCQ,GAAS,sBAQFC,GAAiB,uCAAG,WAC/BC,GAD+B,eAAA7L,EAAA,uDAGzB8L,EAAaC,MACRC,KAAKH,GAChBI,GAAcH,GALiB,2CAAH,sDAQjBC,GAAe,WAC1B,IAAMG,EAAazD,aAAaC,QAAQiD,KAAc,KAEtD,OAD+B/C,KAAKV,MAAMgE,IAI/BD,GAAgB,SAAC1K,GAC5B,IAAM2K,EAAatD,KAAKuD,UAAU5K,GAClCkH,aAAa2D,QAAQT,GAAWO,ICDrBG,GAAqB,SAChC5P,EACA6P,EACAC,GAEA,8CAAO,WACLjL,EACAC,EACAxB,GAHK,qBAAAC,EAAA,+EAMoBvD,EAAc6P,GACnChL,EACAC,QAAQ8F,EACRtH,GAAUtD,EAAcmB,UATvB,cAMGqB,EANH,yBAWIA,GAXJ,mCAaoB,mBAAnB,uCAAOb,SAbR,kCAcKwN,GAAkB,CACtBU,aACAhL,MACAC,KAAMA,QAAQ8F,IAjBf,YAmBGkF,EAnBH,kCAoBoCA,IApBpC,wBAoBSC,EApBT,EAoBSA,WAAYjL,EApBrB,EAoBqBA,KApBrB,kBAqBQ,CACLxB,OAAQA,GAAUtD,EAAcmB,SAChC2D,OACA+B,OAAQkJ,EACR3P,QAAS,GACT4P,WAAY,KA1Bf,4EAAP,2DAyDWC,GAAgB,SAC3BjQ,EACAkQ,GACI,IACIL,EAA0BK,EAA1BL,WAAYhL,EAAcqL,EAAdrL,IAAKC,EAASoL,EAATpL,KAEzB,OAAO9E,EAAc6P,GACnBhL,EACAC,QAAQ8F,EACR5K,EAAcmB,W,kBCLlB,SAASgP,GAAoBrL,GAC3B,IAAMsL,EAAqB,GAQ3B,MAAO,CAAEC,KAPIvL,EAAKwL,QAAgC,SAACC,EAAMC,GAKvD,OAJIA,EAAIvK,KACNmK,EAAIb,KAAKiB,EAAIvK,IACbsK,EAAKC,EAAIvK,IAAMuK,GAEVD,IACN,IACYH,MAAKK,MAAOL,EAAIrB,QAG1B,IAAM2B,GAAgB,kBAAS,SACpCtJ,EACAuJ,GAEA,OAAQA,EAAO1L,MACb,IAAK,UACH,OAAO,uCACFmC,GACA+I,GAAoBQ,EAAOC,UAFhC,IAGExH,SAAS,IAEb,IAAK,YACH,OAAO,2BACFhC,GADL,IAEEgJ,IAAKS,MAAMC,KAAK,IAAIC,IAAJ,uBAAY3J,EAAMgJ,KAAlB,CAAuBO,EAAOC,QAAQ3K,OACtDoK,KAAK,2BACAjJ,EAAMiJ,MADP,mBAEDM,EAAOC,QAAQ3K,GAAK0K,EAAOC,UAE9BxH,SAAS,IAEb,IAAK,SACH,OAAO,2BACFhC,GADL,IAEEgJ,IAAKS,MAAMC,KAAK,IAAIC,IAAJ,uBAAY3J,EAAMgJ,KAAlB,CAAuBO,EAAOC,QAAQ3K,OACtDoK,KAAK,2BAAMjJ,EAAMiJ,MAAb,mBAAoBM,EAAOC,QAAQ3K,GAAK0K,EAAOC,UACnDH,MAAOrJ,EAAMqJ,MAAQ,EACrBrH,SAAS,IAEb,IAAK,SACH,OAAO,2BACFhC,GADL,IAEEgJ,IAAKS,MAAMC,KAAK,IAAIC,IAAJ,uBAAY3J,EAAMgJ,KAAlB,CAAuBO,EAAOC,QAAQ3K,OACtDoK,KAAK,2BAAMjJ,EAAMiJ,MAAb,mBAAoBM,EAAOC,QAAQ3K,GAAK0K,EAAOC,UACnDxH,SAAS,IAEb,IAAK,SACH,OAAO,2BACFhC,GADL,IAEEgJ,IAAKhJ,EAAMgJ,IAAIY,QAAO,SAAC/K,GAAD,OAAgBA,IAAO0K,EAAOC,QAAQ3K,MAC5DoK,KAAK,2BAAMjJ,EAAMiJ,MAAb,mBAAoBM,EAAOC,QAAQ3K,QAAK2E,IAC5C6F,MAAOrJ,EAAMqJ,MAAQ,EACrBrH,SAAS,IAEb,IAAK,aACH,OAAO,uCACFhC,GACA+I,GAAoBQ,EAAOC,QAAQK,UAFxC,IAGER,MAAOE,EAAOC,QAAQH,MACtBrH,SAAS,IAEb,IAAK,QACH,OAAO,2BAAKhC,GAAZ,IAAmB1F,MAAOiP,EAAOC,QAASxH,SAAS,IACrD,IAAK,UACH,OAAO,2BAAKhC,GAAZ,IAAmBgC,SAAS,IAC9B,IAAK,UACH,OAAO,2BAAKhC,GAAZ,IAAmBgC,SAAS,IAC9B,QACE,OAAOhC,KCpFE8J,GAjEW,SAACC,GAAwD,IAA1B3H,EAAyB,uDAAT,KAEvE,GAAiB,eAAb2H,GAA6B3H,EAAU,CAAC,IAAD,EACnC4H,EAAkC,OAAG5H,QAAH,IAAGA,GAAH,UAAGA,EAAUP,YAAb,aAAG,EAAgBmI,eACrDC,EAA8C9Q,YAE9C+Q,EAAyCD,EAC3CA,EAAwBE,MAAM,KAAKC,IAAI7C,QACvC,GAEJ,QAAuB/D,IAAnBwG,GAAgCE,EAA6B5K,SAAS0K,GACxE,OAAO,EAXqE,MAe/ChE,KAAzBhE,EAfwE,EAexEA,QAAS4D,EAf+D,EAe/DA,YAEXyE,EAAiBC,mBAAQ,WAC7B,OAAK1E,GAIyB2E,QAAQ3E,EAAYmE,IAM3BnE,EAAYmE,GAAUK,KAC3C,qBAAGb,UAVI,KAaR,CAAC3D,IAEE4E,EAAoBF,mBAAQ,WAChC,OAAOD,EAAe/K,SAAS,YAC9B+K,GAEGI,EAAoBH,mBAAQ,WAChC,OAAOD,EAAe/K,SAAS,YAC9B+K,GAEGK,EAAoBJ,mBAAQ,WAChC,OAAOD,EAAe/K,SAAS,YAC9B+K,GAEGM,EAAkBL,mBAAQ,WAC9B,OAAOD,EAAe/K,SAAS,UAC9B+K,GAEGO,EAAoBN,mBAAQ,WAChC,OAAOD,EAAe/K,SAAS,YAC9B+K,GAEH,MAAO,CACLrI,UACAqI,iBACAG,oBACAC,oBACAC,oBACAC,kBACAC,sBCjDEtN,GAAW,cAEXuN,GAAuC,CAC3C5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA6JMwQ,GA1JE,WAAO,IAAD,EACK1K,qBACxBkJ,KACAuB,IAHmB,mBACd7K,EADc,KACPM,EADO,KAMfyK,EAA0B1N,sBAAW,uCACzC,WAAO2N,EAAmBC,GAA1B,eAAA9O,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YAFrB,SAG2BhF,EAAM6F,IAAN,UAGjBpB,GAHiB,uBAGM0N,GAAa,CACxCC,WAPN,cAGU7P,EAHV,OASIkF,EAAS,CAAEzC,KAAM,aAAc2L,QAASpO,EAASsC,OATrD,kBAUWW,QAAQC,QAAQlD,IAV3B,uCAYIkF,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAZrC,kBAaWnL,QAAQE,OAAR,OAbX,yDADyC,wDAiBzC,IAGI2M,EAAU7N,sBAAW,uCAAC,WAAO8N,GAAP,eAAAhP,EAAA,sEAExBmE,EAAS,CAAEzC,KAAM,YAFO,SAGDpD,IAAiBiE,IAAjB,UAAwBpB,GAAxB,YAAoC6N,IAHnC,cAGlB/P,EAHkB,OAIxBkF,EAAS,CAAEzC,KAAM,YAAa2L,QAASpO,EAASsC,OAJxB,kBAKjBtC,EAASsC,MALQ,gCAOxB4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPT,yDAAD,sDASxB,IAEG4B,EAAa/N,sBAAW,uCAAC,WAAO8N,GAAP,eAAAhP,EAAA,+EAEJtD,EAAMuF,KAAN,UAAcd,GAAd,kBAAgC6N,IAF5B,cAErB/P,EAFqB,yBAGpBA,EAASsC,MAHW,sCAK3B4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KALN,8DAAD,sDAQ3B,IAEG6B,EAA6BhO,sBAAW,sBAAC,kCAAAlB,EAAA,sDACvC2M,EAAYZ,KAClBE,GAAc,IAF+B,cAIrBU,GAJqB,gEAIlCwC,EAJkC,2BAMnCzC,GAAchQ,EAAOyS,GANc,0DAQzC9O,QAAQC,IAAR,MACAQ,IAAA,MATyC,8MAY5C,IAEGsO,EAAclO,sBAAW,uCAC7B,WACE8N,EACAzN,GAFF,eAAAvB,EAAA,+EASUkP,IATV,uBAW2BxS,EAAMuF,KAAN,UAClBd,GADkB,mBACC6N,GACtBzN,GAbN,cAWUtC,EAXV,yBAeWA,EAASsC,MAfpB,sCAiBI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAjBrC,8DAD6B,wDAsB7B,IAGIgC,EAA4CnO,sBAAW,sBAAC,4BAAAlB,EAAA,sEAE1DmE,EAAS,CAAEzC,KAAM,YAFyC,SAGnCpD,IAAiBiE,IAAjB,UAClBpB,GADkB,4DAHmC,cAGpDlC,EAHoD,OAM1DkF,EAAS,CAAEzC,KAAM,YAAa2L,QAASpO,EAASsC,OANU,kBAOnDtC,EAASsC,KAAKmM,QAAQ,IAP6B,gCAS1DvJ,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATyB,yDAW3D,IAEGiC,EAA8BpO,sBAAW,uCAAC,WAAO2N,GAAP,eAAA7O,EAAA,sEAE5CmE,EAAS,CAAEzC,KAAM,YAF2B,SAGrBhF,EAAM6F,IAAN,UAClBpB,GADkB,gCACc0N,IAJO,cAGtC5P,EAHsC,OAM5CkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OANF,kBAOrCW,QAAQC,QAAQlD,EAASsC,OAPY,uCAS5C4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATW,kBAUrCnL,QAAQE,OAAR,OAVqC,yDAAD,sDAY5C,IAkBGmN,EAAcrO,sBAAW,uCAAC,WAAO8N,GAAP,eAAAhP,EAAA,sEAE5BmE,EAAS,CAAEzC,KAAM,YAFW,SAGLhF,EAAM6F,IAAN,UAAapB,GAAb,qBAAkC6N,IAH7B,cAGtB/P,EAHsB,OAI5BkF,EAAS,CAAEzC,KAAM,YAJW,kBAKrBzC,EAASsC,MALY,sCAO5B4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPL,8DAAD,sDAU5B,IAEH,OAAO,2BACFxJ,GADL,IAEEoL,aACAG,cACAR,0BACAG,UACAO,8BACAD,4CACAG,yBApC+B,SAACvF,GAAiC,IAAD,EAE3CwF,EACjB9B,GAAa,0CADfU,kBAEMpI,EAAaI,qBAAWd,IAAxBU,SAEFkF,EAAcC,OAAM,OAACnF,QAAD,IAACA,GAAD,UAACA,EAAUP,YAAX,aAAC,EAAgBhD,IAE3C,SAAKuH,IAAUkB,OAGXG,GAAqCrB,EAAOkB,KAC9CsE,IAyBFF,iBChLEb,GAAkD,CACtD5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA2BMuR,GAxBc,WAAO,IAAD,EACPzL,qBACxBkJ,KACAuB,IAH+B,mBAC1B7K,EAD0B,KACnBM,EADmB,KAM3BwL,EAAoBzO,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,sEAElCmE,EAAS,CAAEzC,KAAM,YAFiB,SAGXpD,IAAiBiE,IAAjB,UAnBZ,yBAmBY,uBACKG,IAJM,OAG5BzD,EAH4B,OAMlCkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OANZ,gDAQlC4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KARC,yDAAD,sDAUlC,IAEH,OAAO,2BACFxJ,GADL,IAEE8L,uB,UC5BJ,SAAS/C,GAAoBrL,EAAiBsC,GAC5C,IAAM+L,EAA4B,GAC5BC,EAActO,EAAKwL,QAAgC,SAACC,EAAMC,GAK9D,OAJIA,EAAIvK,KACNkN,EAAW5D,KAAKiB,EAAIvK,IACpBsK,EAAKC,EAAIvK,IAAMuK,GAEVD,IACN,IAMG8C,EAAiC,GACjCC,EAAmBlM,EAAMgJ,IAC5BoB,KAAI,SAACvL,GAAD,OAAQmB,EAAMiJ,KAAKpK,MACvBqK,QAAgC,SAACC,EAAMC,GACtC,IAAM+C,EAAc/C,EACpB,UAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAKvK,GAAI,CAIX,GAH4BnB,EAAK0O,MAAK,SAACC,GAAD,OAAUA,EAAKxN,IAAMuK,EAAIvK,MAGtC,OAAOsK,EAChC,IAAMmD,EAAkB,IAAInH,KAAKE,OAAM,OAAC8G,QAAD,IAACA,OAAD,EAACA,EAAaI,YAMrD,GALoC7O,EACjC0M,KAAI,SAACiC,GAAD,OAAU,IAAIlH,KAAKE,OAAOgH,EAAKE,eACnCH,MAAK,SAACI,GAAD,OAAcC,aAAQD,EAAUF,MAGR,OAAOnD,EAGvC8C,EAAgB9D,KAAKiB,EAAIvK,IACzBsK,EAAKC,EAAIvK,IAAMuK,EAEjB,OAAOD,IACN,IAEL,MAAO,CACLF,KAAK,2BAAM+C,GAAgBE,GAC3BlD,IAAI,GAAD,OAAM+C,EAAeE,GACxB5C,MAAO0C,EAAWpE,OAASsE,EAAgBtE,QAUxC,IC5CK+E,GD4CCC,GAAuB,kBAAS,SAC3C3M,EACAuJ,GACqB,IAAD,EACpB,OAAQA,EAAO1L,MACb,IAAK,UACH,OAAO,uCACFmC,GACA+I,GAAoBQ,EAAOC,QAASxJ,IAFzC,IAGEgC,SAAS,IAEb,IAAK,YACH,OAAO,uCACFhC,GACA+I,GAAoB,CAACQ,EAAOC,SAAqBxJ,IAFtD,IAGEgC,SAAS,IAEb,IAAK,SAOH,OALI,UAACuH,EAAOC,eAAR,aAAC,EAAgB3K,MACnB0K,EAAOC,QAAQ3K,IACb0K,EAAOC,SAxBPrE,KAAKyH,QA2BF,2BACF5M,GADL,IAEEgJ,IAAKS,MAAMC,KAAK,IAAIC,IAAJ,uBAAY3J,EAAMgJ,KAAlB,CAAuBO,EAAOC,QAAQ3K,OACtDoK,KAAK,2BACAjJ,EAAMiJ,MADP,mBAEDM,EAAOC,QAAQ3K,GAFd,2BAGGmB,EAAMiJ,KAAKM,EAAOC,QAAQ3K,KAC1B0K,EAAOC,WAGdH,MAAOrJ,EAAMqJ,MAAQ,EACrBrH,SAAS,IAEb,IAAK,SACH,OAAO,2BACFhC,GADL,IAEEgJ,IAAKS,MAAMC,KAAK,IAAIC,IAAJ,uBAAY3J,EAAMgJ,KAAlB,CAAuBO,EAAOC,QAAQ3K,OACtDoK,KAAK,2BACAjJ,EAAMiJ,MADP,mBAEDM,EAAOC,QAAQ3K,GAFd,2BAGGmB,EAAMiJ,KAAKM,EAAOC,QAAQ3K,KAC1B0K,EAAOC,WAGdxH,SAAS,IAEb,IAAK,SACH,OAAO,2BACFhC,GADL,IAEEgJ,IAAKhJ,EAAMgJ,IAAIY,QAAO,SAAC/K,GAAD,OAAgBA,IAAO0K,EAAOC,QAAQ3K,MAC5DoK,KAAK,2BAAMjJ,EAAMiJ,MAAb,mBAAoBM,EAAOC,QAAQ3K,QAAK2E,IAC5C6F,MAAOrJ,EAAMqJ,MAAQ,EACrBrH,SAAS,IAEb,IAAK,aACH,OAAO,uCACFhC,GACA+I,GAAoBQ,EAAOC,QAAQK,QAAS7J,IAFjD,IAGEqJ,MAAOE,EAAOC,QAAQH,MACtBrH,SAAS,IAEb,IAAK,QACH,OAAO,2BAAKhC,GAAZ,IAAmB1F,MAAOiP,EAAOC,QAASxH,SAAS,IACrD,IAAK,UACH,OAAO,2BAAKhC,GAAZ,IAAmBgC,SAAS,IAC9B,QACE,OAAOhC,KEjGE6M,GA5BS,SACtBC,EACAC,GAC6B,IAAD,EACUnL,oBAAY,WAChD,IACE,IAAMyK,EAAOrI,OAAOY,aAAaC,QAAQiI,GACzC,OAAOT,EAAOtH,KAAKV,MAAMgI,GAAQU,EACjC,MAAOzS,GAEP,OADAkC,QAAQlC,MAAMA,GACPyS,MAPiB,mBACrBC,EADqB,KACRC,EADQ,KAsB5B,MAAO,CAACD,EAXR,SAAkB9L,GAChB,IACE,IAAMgM,EACJhM,aAAiBiM,SAAWjM,EAAM8L,GAAe9L,EACnD+L,EAAeC,GACflJ,OAAOY,aAAa2D,QAAQuE,EAAK/H,KAAKuD,UAAU4E,IAChD,MAAO5S,GACPkC,QAAQC,IAAInC,OCAH8S,GAdoB,YAIG,IAHpCC,EAGmC,EAHnCA,eACAP,EAEmC,EAFnCA,IACA/M,EACmC,EADnCA,QACmC,EACH8M,GAAmBC,EAAKO,GADrB,mBAC5BL,EAD4B,KACfM,EADe,KAGnC,OAAOlN,sBAAW,SAACJ,EAAUuJ,GAC3B,IAAMgE,EAAWxN,EAAQC,EAAOuJ,GAEhC,OADA+D,EAASC,GACFA,IACNP,ICnBQQ,GAAwC,SAACC,GAC/BC,OAAOC,KAAK/I,cAAcgF,QAAO,SAACkD,GAAD,OACpDA,EAAIxN,SAASmO,MAEFG,SAAQ,SAACd,GACpBlI,aAAaiJ,WAAWf,OCJfgB,GAAiC,SAC5CjV,EACAkV,GAF4C,OAI5CvF,GAAmB3P,EAAO,QAAR,sBAAiB,sBAAAsD,EAAA,+EAC1B,CACLuB,KAAMqQ,EACNpF,WAAY,MAHmB,6CCJxBqF,GAAgC,SAC3CnV,EACAkV,GAF2C,OAI3CvF,GAAmB3P,EAAO,QAAR,sBAAiB,sBAAAsD,EAAA,+EAC1B,CACLuB,KAAMqQ,EACNpF,WAAY,MAHmB,6CCJxBsF,GAAuC,SAClDpV,EACAkV,GAFkD,OAIlDvF,GAAmB3P,EAAO,QAAR,sBAAiB,sBAAAsD,EAAA,+EAC1B,CACLuB,KAAMqQ,EACNpF,WAAY,MAHmB,6CCJxBuF,GAAyB,SACpCrV,EACAkV,GAFoC,OAIpCvF,GAAmB3P,EAAO,OAAR,sBAAgB,sBAAAsD,EAAA,+EACzB,CACLuB,KAAMqQ,EACNpF,WAAY,MAHkB,6CCKvBwF,GAA+B,SAC1CtV,EACAkV,GAF0C,OAI1CvF,GAAmB3P,EAAO,OAAR,sBAAgB,sBAAAsD,EAAA,+EACzB,CACLuB,KAAMqQ,EACNpF,WAAY,MAHkB,6CCwB9BrL,GAAW,cACX8Q,GAAyB,yBAEzBvD,GAAuC,CAC3C5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MAmKM+T,GAhKE,SAAClD,GAAsB,IAAD,EACXiC,GAGxB,CACAC,eAAgBxC,GAChBiC,IAAI,GAAD,OAAKsB,GAAL,YAA+BjD,GAClCpL,QAAS4M,OAP0B,mBAC9B3M,EAD8B,KACvBM,EADuB,KAU/BgO,EAA2BjR,uBAAY,WAC3CmQ,GAAsC,GAAD,OAAIY,OACxC,IAEGG,EAAqBlR,sBAAW,uCAAC,WAAO8N,GAAP,eAAAhP,EAAA,sEAEnCmE,EAAS,CAAEzC,KAAM,YAFkB,SAGZpD,IAAiBiE,IAAjB,UAClBpB,GADkB,qBACG6N,IAJS,cAG7B/P,EAH6B,OAMnCkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OANX,kBAO5BtC,EAASsC,MAPmB,gCASnC4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATE,yDAAD,sDAWnC,IAEGgF,EAAmBnR,sBAAW,uCAClC,WACEoR,EACAV,GAFF,iBAAA5R,EAAA,sEAKImE,EAAS,CAAEzC,KAAM,YACX6Q,EAAmBR,GAAuBrV,EAAOkV,GAN3D,SAO2BW,EAAiB,qBAAD,OAChBD,GADgB,YAAC,eAEjCV,GAFgC,IAErBY,iBAAanL,EAAWoL,gBAAYpL,KAT1D,OAOUpI,EAPV,OAWIkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAXjD,uDAaI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAbrC,kBAcWnL,QAAQE,OAAR,OAdX,yDADkC,wDAkBlC,IAGIsQ,EAAmBxR,sBAAW,uCAClC,WAAOyR,EAAiBf,GAAxB,iBAAA5R,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YACXkR,EAAoBf,GACxBnV,EACAkV,GALN,SAO2BgB,EAAkB,GAAD,OACnCzR,GADmC,YACvBwR,EADuB,WAEtCf,GATN,QAOU3S,EAPV,QAWasC,KAAKmB,GAAKiQ,EACnBxO,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAZjD,yDAcI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAdrC,kBAeWnL,QAAQE,OAAR,OAfX,0DADkC,wDAmBlC,IAGIyQ,EAAoB3R,sBAAW,uCACnC,WAAOyR,EAAiBf,GAAxB,iBAAA5R,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YACXkR,EAAoBjB,GACxBjV,EACAkV,GALN,SAO2BgB,EAAkB,GAAD,OACnCzR,GADmC,YACvBwR,EADuB,YAEtCf,GATN,OAOU3S,EAPV,OAWIkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAXjD,uDAaI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAbrC,kBAcWnL,QAAQE,OAAR,OAdX,yDADmC,wDAkBnC,IAGI0Q,EAAiB5R,sBAAW,uCAChC,WAAOyR,EAAiBf,GAAxB,iBAAA5R,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YACXkR,EAAoBd,GACxBpV,EACAkV,GALN,SAO2BgB,EAAkB,GAAD,OACnCzR,GADmC,YACvBwR,EADuB,iBAEtCf,GATN,QAOU3S,EAPV,QAWasC,KAAKmB,GAAKiQ,EACnBxO,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAZjD,yDAcI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAdrC,kBAeWnL,QAAQE,OAAR,OAfX,0DADgC,wDAmBhC,IAGI2Q,EAA6B7R,sBAAW,uCAC5C,WACEyR,EACAf,EACAoB,GAHF,iBAAAhT,EAAA,sEAMImE,EAAS,CAAEzC,KAAM,YACXuR,EAAyBjB,GAC7BtV,EACAkV,GATN,SAW2BqB,EAAuB,GAAD,OACxC9R,GADwC,wBAChBwR,GAC3BK,GAbN,OAWU/T,EAXV,OAeIkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAfjD,uDAiBI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAjBrC,kBAkBWnL,QAAQE,OAAR,OAlBX,yDAD4C,0DAsB5C,IAGI8Q,EAAkBhS,sBAAW,sBAAC,8BAAAlB,EAAA,+EAETtD,EAAM6F,IAAI,mCAFD,cAE1BtD,EAF0B,mCAGxBA,EAASsC,YAHe,QAGP,IAHO,gCAKhC4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KALD,yDAOjC,IAEH,OAAO,2BACFxJ,GADL,IAEEuO,qBACAC,mBACAK,mBACAG,oBACAC,iBACAX,2BACAY,6BACAG,qBCzMExE,GAAuC,CAC3C5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA+BMgV,GA5BO,WAAO,IAAD,EACAlP,qBACxBkJ,KACAuB,IAHwB,mBACnB7K,EADmB,KACZM,EADY,KAMpBiP,EAA0ClS,sBAAW,uCACzD,WAAOwB,GAAP,eAAA1C,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YAFrB,SAG2BpD,IAAiBiE,IAAjB,UApBd,mBAoBc,oCACkBG,EADlB,wCAH3B,cAGUzD,EAHV,OAMIkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OANlD,kBAOWtC,EAASsC,MAPpB,gCASI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATrC,yDADyD,sDAazD,IAGF,OAAO,2BACFxJ,GADL,IAEEuP,6C,SCdSC,GAAqB,SAArBA,EAAsBC,GACjC,GAA0B,WAAtBA,EAAa5R,KAAmB,CAClC,IAAM6R,EAAgBD,EAAaE,QAAQvD,MACzC,SAACwD,GAAD,OAAYA,EAAOC,aAGrB,QAAKH,MAEDA,EAAcI,kBAAoBJ,EAAcK,gBAGhDL,EAAcM,YACTR,EAAmBE,EAAcM,cAI5C,OAAOP,EAAaE,QAAQ/H,MAAK,SAACgI,GAAD,OAAYA,EAAOC,cAIzCI,GAAwB,SACnCC,GAE4B,IAAD,EAD3BC,EAC2B,uDADX,CAAEC,MAAO,GAEnBC,GACJ,UAAAH,EAAaI,iBAAb,eAAwBlG,KAAI,SAACmG,GAAD,OAC1BC,GAAkBD,EAAUJ,QACzB,GAEP,OAAO,2BACFD,GADL,IAEErR,GAAIqR,EAAarR,GACjByR,UAAWD,EACXI,eAAgBJ,EAAoBnH,QAClC,SAACuH,EAAwBF,GAAzB,aACGE,IAA0B,OAARF,QAAQ,IAARA,GAAA,UAAAA,EAAUG,qBAAV,eAAyB/I,SAAU,KACxD,GAEFgJ,cAAeN,EAAoBnH,QACjC,SAACyH,EAAuBJ,GAAxB,OACGI,IAAyB,OAARJ,QAAQ,IAARA,OAAA,EAAAA,EAAUI,gBAAiB,KAC/C,MAMOH,GAAoB,SAC/BD,GAEwB,IAAD,EADvBJ,EACuB,uDADP,CAAEC,MAAO,GAEnBQ,GACJ,UAAAL,EAASG,qBAAT,eAAwBtG,KAAI,SAACyG,GAAD,OAC1BC,GAAsBD,EAAUV,QAC7B,GAEP,OAAO,2BACFI,GADL,IAEEG,cAAeE,EACfH,eAAgBG,EAAwBjJ,QAAU,EAClDgJ,cACEC,EAAwBhH,QAAO,SAACiH,GAAD,OAC7BrB,GAAmBqB,EAASpB,iBAC5B9H,QAAU,KAILmJ,GAAwB,SACnCC,GAE4B,IAD5BZ,EAC2B,uDADX,CAAEC,MAAO,GAEnBS,EAAgC,2BACjCE,GADiC,IAGpCZ,cAAeA,EAAcC,QAK/B,OADAD,EAAcC,OAAS,EAChBS,GAoBIG,GAAuB,SAACH,GAAD,MAAkC,CACpEI,eAAgBJ,EAAShS,GACzBqS,mBAAoBL,EAASpB,eC1HlB0B,GAA0B,SACrCtY,EACAuY,GAFqC,OAIrC5I,GAAmB3P,EAAO,OAAR,sBAAgB,sBAAAsD,EAAA,+EACzB,CACLuB,KAAM0T,EACNzI,WAAY,MAHkB,6CCUvB0I,GAAc,SAAClG,GAAD,4BACVA,EADU,mBAGdmG,GAA4B,4BAEnCzG,GAAmD,CACvD5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MAqIMiX,GAlIW,SAACpG,GAAsB,IAAD,EACpBiC,GAGxB,CACAC,eAAgBxC,GAChBiC,IAAI,GAAD,OAAKwE,GAAL,YAAkCnG,GACrCpL,QAAS4M,OAPmC,mBACvC3M,EADuC,KAChCM,EADgC,KAUxCkR,EAA8BnU,uBAAY,WAC9CmQ,GAAsC8D,MACrC,IAEGG,EAAwBpU,sBAAW,uCACvC,WAAO8N,GAAP,iBAAAhP,EAAA,0DAEM6D,EAAMqJ,MAFZ,iEAII/I,EAAS,CAAEzC,KAAM,YAJrB,SAK2BpD,IAAiBiE,IAAjB,UAAwB2S,GAAYlG,KAL/D,OAKU/P,EALV,OAMU+U,EAAgB,CAAEC,MAAO,GAC/B9P,EAAS,CACPzC,KAAM,UACN2L,QAASpO,EAASsC,KAAKgU,eAAetH,KACpC,SAAC8F,GAAD,aACED,GAAqB,YAAC,eAGfC,GAHc,IAIjBI,UAAS,UAAEJ,EAAaI,iBAAf,aAAE,EAAwBlG,KAAI,SAACuH,GAAD,yBAAC,eACnCA,GADkC,IAErCjB,cAAa,UAAEiB,EAASjB,qBAAX,aAAE,EAAwBtG,KACrC,SAAC2G,GAAD,2BAAC,eACIA,GADL,IAEEtB,cACE,UAAAsB,EAAaa,2BAAb,mBAAkCxF,MAChC,SAACyF,GAAD,OACEA,EAAmBZ,iBACnBF,EAAalS,aAHjB,eAIGqS,qBAAsBH,EAAatB,yBAKhDU,QA9BZ,wDAmCI7P,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAnCrC,+DADuC,sDAwCvC,CAACxJ,EAAMqJ,QAGHyI,EAAazU,uBACjB,SAAC0U,EAAYX,EAAb,GAA+D,IAAxCY,EAAuC,EAAvCA,kBAAmBC,EAAoB,EAApBA,cAClC/B,EAAelQ,EAAMiJ,KAAKjJ,EAAMgJ,IAAIgJ,IAGpCE,EAAqB,CACzB9B,MAAOF,EAAaI,UAAU,GAAGI,cAAc,GAAGP,eAI9CgC,EAAkBlC,GAAsB,2BAEvCC,GAFsC,IAGzCI,UAAWJ,EAAaI,UAAUlG,KAAI,SAACmG,EAAUH,GAAX,aACpCA,IAAU6B,EACN1B,EADJ,2BAGSA,GAHT,IAIMG,cAAa,UAAEH,EAASG,qBAAX,aAAE,EAAwBtG,KAAI,SAACyG,GAAD,OACzCkB,IAAelB,EAAShS,GACpBgS,EADJ,2BAESA,GAFT,IAEmBpB,aAAc2B,cAK7Cc,GAGF5R,EAAS,CACPzC,KAAM,SACN2L,QAAQ,2BAAM2I,GAAP,IAAwBtT,GAAIsT,EAAgBtT,OAIjD2Q,GAAmB4B,IACrBgB,EAAmBC,SAASN,EAAYX,KAG5C,CAACpR,IAGGsS,EAA8BjV,uBAAY,WAC9C,OFxBiC,SAACqU,GACpC,IAAMa,EAAqC,GAW3C,OATAb,EAAe9D,SAAQ,SAACsC,GAAkB,IAAD,EAC3B,OAAZA,QAAY,IAAZA,GAAA,UAAAA,EAAcI,iBAAd,SAAyB1C,SAAQ,SAAC2C,GAChC,IAAMiC,GAAqBjC,EAASG,eAAiB,IAAItG,IACvD4G,IAEFuB,EAAQpK,KAAR,MAAAoK,EAAO,aAASC,UAIbD,EAAQ3I,QAAO,SAAC6I,GAAD,OACpBjD,GAAmBiD,EAAIvB,uBEWhBwB,CAAsB1S,EAAMgJ,IAAIoB,KAAI,SAACvL,GAAD,OAAQmB,EAAMiJ,KAAKpK,SAC7D,CAACmB,IAEE2S,EAAatV,sBAAW,uCAC5B,WAAO0U,EAAoBX,GAA3B,iBAAAjV,EAAA,6DACQyW,EAAmB5B,GAAqB,CAC5CnS,GAAIkT,EACJtC,aAAc2B,IAEVyB,EAAoB1B,GACxBtY,EACA+Z,GAPJ,SASQC,EAAkBxB,GAAYlG,GAAWyH,GATjD,2CAD4B,wDAY5B,IAGIR,EAAqBU,gCAAqBH,EAAY,KAE5D,OAAO,2BACF3S,GADL,IAEEwR,8BACAC,wBACAK,aACAQ,8BACAK,gBCvJErV,GAAW,sBAEXuN,GAA8C,CAClD5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MAuDMyY,GApDS,WAAO,IAAD,EACF3S,qBACxBkJ,KACAuB,IAH0B,mBACrB7K,EADqB,KACdM,EADc,KAMtB0S,EAAoB3V,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,sEAElCmE,EAAS,CAAEzC,KAAM,YAFiB,SAGXpD,IAAiBiE,IAAjB,UAClBpB,GADkB,uBACKuB,IAJM,cAG5BzD,EAH4B,OAMlCkF,EAAS,CAAEzC,KAAM,YAAa2L,QAASpO,EAASsC,OANd,kBAO3BW,QAAQC,QAAQlD,IAPW,gCASlCkF,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATC,yDAAD,sDAWlC,IAEGyJ,EAAQ5V,sBAAW,uCACvB,WAAOwB,EAAYnB,GAAnB,eAAAvB,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YAFrB,SAG2BhF,EAAMoa,MAAN,UAAe3V,GAAf,YAA2BuB,GAAMnB,GAH5D,OAGUtC,EAHV,OAIIkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAJjD,uDAMI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KANrC,kBAOWnL,QAAQE,OAAR,OAPX,yDADuB,wDAWvB,IAGI2U,EAA0B7V,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,sEAExCmE,EAAS,CAAEzC,KAAM,YAFuB,SAGjBhF,EAAMuF,KAAN,UAAcd,GAAd,YAA0BuB,EAA1B,SAHiB,OAGlCzD,EAHkC,OAIxCkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAJL,uDAMxC4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KANO,kBAOjCnL,QAAQE,OAAR,OAPiC,yDAAD,sDASxC,IAEH,OAAO,2BACFyB,GADL,IAEEgT,oBACAC,QACAC,6Bd3DE5V,GAAW,2BAEXuN,GAAuC,CAC3C5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,O,SAGGoS,O,qBAAAA,I,2BAAAA,I,+BAAAA,I,4BAAAA,Q,KAOZ,IAmEeyG,GAnEQ,WAAO,IAAD,EACD/S,qBACxBkJ,KACAuB,IAHyB,mBACpB7K,EADoB,KACbM,EADa,KAMrB8S,EAAqB/V,sBAAW,sBAAC,4BAAAlB,EAAA,sEAEnCmE,EAAS,CAAEzC,KAAM,YAFkB,SAGZpD,IAAiBiE,IAAjB,UAClBpB,GADkB,uBACKoP,GAAiB,QADtB,6DAHY,cAG7BtR,EAH6B,OAMnCkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OANX,kBAO5BtC,EAASsC,MAPmB,gCASnC4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATE,yDAWpC,IAEG6J,EAAiBhW,sBAAW,sBAAC,4BAAAlB,EAAA,sEAE/BmE,EAAS,CAAEzC,KAAM,YAFc,SAGRpD,IAAiBiE,IAAjB,UAClBpB,GADkB,uBACKoP,GAAiB,QADtB,yDAHQ,cAGzBtR,EAHyB,OAM/BkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OANf,kBAOxBtC,EAASsC,MAPe,gCAS/B4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATF,yDAWhC,IAEG8J,EAAsBjW,sBAAW,sBAAC,4BAAAlB,EAAA,sEAEpCmE,EAAS,CAAEzC,KAAM,YAFmB,SAGbpD,IAAiBiE,IAAjB,UAClBpB,GADkB,uBACKoP,GAAiB,aADtB,6CAHa,cAG9BtR,EAH8B,OAMpCkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OANV,kBAO7BtC,EAASsC,MAPoB,gCASpC4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATG,yDAWrC,IAEG+J,EAAqBlW,sBAAW,sBAAC,4BAAAlB,EAAA,sEAEnCmE,EAAS,CAAEzC,KAAM,YAFkB,SAGZpD,IAAiBiE,IAAjB,UAClBpB,GADkB,uBACKoP,GAAiB,WADtB,6CAHY,cAG7BtR,EAH6B,OAMnCkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OANX,kBAO5BtC,EAASsC,MAPmB,gCASnC4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KATE,yDAWpC,IAEH,OAAO,2BACFxJ,GADL,IAEEoT,qBACAC,iBACAC,sBACAC,wBevESC,GAA0BtT,wBACrC,IAQWuT,GAAqC,SAAC,GAAkB,IAAhB/a,EAAe,EAAfA,SAC3C2O,EAAoB7E,qBAAWkR,IAA/BrM,gBACFsM,EAAgBtF,GAAShH,EAAiBxI,IAC1C+U,EAAmBrC,GAAkBlK,EAAiBxI,IAEvCgV,EACjBhI,KADFC,kBALgE,EAY9DqH,KAJFC,EARgE,EAQhEA,mBACAC,EATgE,EAShEA,eACAC,EAVgE,EAUhEA,oBACAC,EAXgE,EAWhEA,mBAEMhE,EAA4CD,KAA5CC,wCACmBuE,EAA+Bf,KAAlDC,kBAsBR,OApBAzS,qBAAU,WACJ8G,IAEFsM,EAAcpF,mBAAmBlH,EAAiBxI,IAElD+U,EAAiBnC,sBAAsBpK,EAAiBxI,IAExDgV,EAAgCxM,EAAgB2D,WAEhDoI,IACAC,IACAC,IACAC,IAEAhE,EAAwClI,EAAgB2D,WAExD8I,EAA2BzM,EAAgB2D,cAE5C,CAAC3D,IAGF,cAACmM,GAAwBvS,SAAzB,CACEC,MAAO,CACLmN,SAAU,kBAAMsF,GAChBpC,kBAAmB,kBAAMqC,IAH7B,SAMGlb,KC9CMgb,GAAyBxT,wBAA4B,CAChE8B,SAAS,IAsEI+R,GAnEkC,SAAC,GAAkB,IAAhBrb,EAAe,EAAfA,SAC1CmJ,EAASW,qBAAWd,IAApBG,KACA2J,EAA8CV,KAA9CU,0CAFyD,EAGnC5J,oBAAS,GAH0B,mBAG1DI,EAH0D,KAGjDC,EAHiD,OAInBL,mBAC5C,MAL+D,mBAI1DyF,EAJ0D,KAIzC2M,EAJyC,OAU7DpS,mBAAqC,MAVwB,mBAQ/DqS,EAR+D,KAS/DC,EAT+D,KAY3DC,GAAmC,OAAf9M,QAAe,IAAfA,OAAA,EAAAA,EAAiB+M,kBACvCC,YACE,IAAIlP,KAAKkC,EAAgB+M,mBArBI,QAwB/B5Q,EAEE8Q,GAAmC,OAAfjN,QAAe,IAAfA,OAAA,EAAAA,EAAiBkN,gBACvCF,YACE,IAAIlP,KAAKkC,EAAgBkN,gBA3BG,SA8B9B/Q,EAEJjD,qBAAU,WACJsB,GAAM2S,MACT,CAAC3S,IAEJ,IAAM2S,EAAyB,WAC7B,OAAOhJ,IACJxI,MAAK,SAACqE,GACDA,GAAmBA,EAAgB4M,qBACrCD,EAAmB3M,GACnB6M,EAAuB7M,EAAgB4M,uBAEvCD,EAAmB,MACnBE,EAAuB,UAG1BhR,SAAQ,WACPjB,GAAW,OAIjB,OACE,cAACyR,GAAuBzS,SAAxB,CACEC,MAAO,CACLmG,kBACA4M,sBACAO,yBACAN,yBACAlS,UACAmS,oBACAG,qBARJ,SAWGjN,GAAmB4M,EAClB,cAAC,GAAD,UAA2Bvb,IAE3BA,K,8IClFR,IAIe+b,GAJM5U,YAAO6U,MAAQC,OAAM,kBAAkB,CAC1DC,QADwC,EAAGA,SACvB,cADD/U,CAAH,M,6BCHH,OAA0B,uCCA1B,OAA0B,wC,k1DCGlC,IAAMgV,GAAkBhV,YAAOiV,KAAPjV,CAAH,MAEd,qBAAGkV,MAAkBC,QAAQ,MACnB,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAGhD,qBAAG6c,MAAkBE,QAAQE,OAAOC,SAKlC,qBAAGL,MAAkBC,QAAQ,EAAG,MAMlC,qBAAGD,MAAkBE,QAAQE,OAAOC,SAcf,qBAAGL,MAAkBE,QAAQI,UAAU9c,QAI/C,qBAAGwc,MAAkBE,QAAQE,OAAOC,SAIlC,qBAAGL,MAAkBE,QAAQK,KAAK,QAMjDC,GAAsB1V,IAAO2V,IAAV,MASnBC,GAAuB5V,IAAO2V,IAAV,MASpBE,GAAsB7V,IAAO2V,IAAV,MASnBG,GAAuB9V,IAAO2V,IAAV,MASpBI,GAAY/V,IAAOgW,IAAV,MCvDPC,GAd6B,SAAC,GAAkC,IAAhCpd,EAA+B,EAA/BA,SAAaqd,EAAkB,6BAC5E,OACE,eAAClB,GAAD,2BAAqBkB,GAArB,cACE,eAACH,GAAD,WACE,cAACL,GAAD,CAAqBS,IAAKC,KAC1B,cAACR,GAAD,CAAsBO,IAAKE,KAC3B,cAACR,GAAD,CAAqBM,IAAKC,KAC1B,cAACN,GAAD,CAAsBK,IAAKE,QAE5Bxd,OCFQyd,GAbmC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,KACAjS,EAEI,EAFJA,MACAzL,EACI,EADJA,SAEA,OACE,eAAC,GAAD,CAAc0d,KAAMA,EAApB,UACGjS,GAAS,cAACkS,GAAA,EAAD,UAAclS,IACxB,cAACmS,GAAA,EAAD,UAAgB5d,Q,qpBCbf,IAAM6d,GAA6B1W,IAAOgW,IAAV,MAIvB,qBAAGd,MAAkBC,QAAQ,QAGhCwB,GAAyB3W,YAAO4W,KAAP5W,CAAH,MAOtB6W,GAA2B7W,IAAOgW,IAAV,MAIzB,qBAAGd,MAAkBC,QAAQ,MAG5B2B,GAAM9W,YAAO+W,KAAP/W,CAAH,MACJ,qBAAGkV,MAAkBC,QAAQ,MACnB,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAChD,qBAAGwc,MAAkBE,QAAQE,OAAOC,SAE9B,qBAAGL,MAAkB8B,WAAWC,GAAGC,YChB9CC,GAGD,SAAC,GAAuB,IAArBC,EAAoB,EAApBA,OAAQC,EAAY,EAAZA,MACN7P,EAAoB7E,qBAAWkR,IAA/BrM,gBADkB,EAEQzF,mBAAS,IAFjB,mBAEnB6M,EAFmB,KAER0I,EAFQ,KAGpBC,EAAUC,cAKVlT,EAAQkD,OAAkB7D,EAAY,uBACtC8T,EACJ,qCACE,cAACf,GAAD,UACE,cAACgB,GAAA,EAAD,UACE,eAACC,GAAA,EAAD,CACEC,aAAW,SACX7d,KAAK,UACL8d,SAAU,SAACC,GAAD,OAAOR,EAAaQ,EAAEC,OAAO1W,QAHzC,UAKE,cAAC,GAAD,CACEA,MAAM,cACN2W,QAAS,cAACC,GAAA,EAAD,CAAOC,MAAM,YACtBC,MAAM,gBAER,cAAC,GAAD,CACE9W,MAAM,iBACN2W,QAAS,cAACC,GAAA,EAAD,CAAOC,MAAM,YACtBC,MAAM,sBAER,cAAC,GAAD,CACE9W,MAAM,cACN2W,QAAS,cAACC,GAAA,EAAD,CAAOC,MAAM,YACtBC,MAAM,gBAER,cAAC,GAAD,CACE9W,MAAM,UACN2W,QAAS,cAACC,GAAA,EAAD,CAAOC,MAAM,YACtBC,MAAM,8BAER,cAAC,GAAD,CACE9W,MAAM,SACN2W,QAAS,cAACC,GAAA,EAAD,CAAOC,MAAM,YACtBC,MAAM,WAER,cAAC,GAAD,CACE9W,MAAM,YACN2W,QAAS,cAACC,GAAA,EAAD,CAAOC,MAAM,YACtBC,MAAM,0DAKd,eAACtB,GAAD,WACE,cAAC,GAAD,CAAcqB,MAAM,UAAUE,QAASf,EAAvC,sBAGA,cAAC,GAAD,CACEgB,UAAWzJ,EACXsJ,MAAM,UACNE,QAtDuB,WAC7Bb,EAAQjP,KAAR,oCAA0CsG,KAkDtC,8BAWA0J,EACJ,qCACE,cAAC5B,GAAD,UACE,cAAC6B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,iHAKF,cAAC8B,GAAD,UACE,cAAC,GAAD,CAAcqB,MAAM,UAAUE,QAASf,EAAvC,0BAON,OACE,cAACmB,GAAD,CAAmBjC,KAAMa,EAAQ9S,MAAOA,EAAxC,SACGkD,EAAkBiQ,EAAwBa,KAuBlCG,GAlB+B,WAAO,IAAD,EACY1W,oBAAS,GADrB,mBAC3C2W,EAD2C,KAClBC,EADkB,KAGlD,OACE,qCACE,cAAC,GAAD,CAAKC,KAAK,QAAQR,QAAS,kBAAMO,GAA2B,IAA5D,SACE,cAAC,KAAD,MAEDD,GACC,cAAC,GAAD,CACEtB,OAAQsB,EACRrB,MAAO,kBAAMsB,GAA2B,U,+eChH3C,IAAME,GAAa7Y,YAAO8Y,IAAP9Y,CAAH,MASD,gBAAG+Y,EAAH,EAAGA,QAAS7D,EAAZ,EAAYA,MAAZ,OAClB6D,EAAU7D,EAAME,QAAQC,QAAQ3c,KAAOwc,EAAME,QAAQC,QAAQhd,QACtD,qBAAG6c,MAAkBE,QAAQE,OAAOC,SAK1B,qBAAGL,MAAkBC,QAAQ,QCInC6D,GAf2B,SAAC,GAA6B,IAA3BC,EAA0B,EAA1BA,GAAIpgB,EAAsB,EAAtBA,SAAUqgB,EAAY,EAAZA,MACnDnY,EAAW2B,cAEXyW,EAAW1O,mBAAQ,WACvB,OAAIyO,EAAcnY,EAASC,WAAaiY,GAA4B,MAAtBlY,EAASC,SAChDD,EAASC,SAASoY,WAAWH,KACnC,CAAClY,EAASC,WAEb,OACE,cAAC6X,GAAD,CAAYI,GAAIA,EAAIF,QAASI,EAA7B,SACGtgB,K,uzBCZA,IAAMwgB,GAAYrZ,IAAOsZ,IAAV,MAOV,qBAAGpE,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBE,QAAQE,OAAOC,SACzB,qBAAGL,MAAkBE,QAAQC,QAAQhd,QAiB9CkhB,IAZgBvZ,IAAOgW,IAAV,MACb,qBAAGd,MAAkBC,QAAQ,MACpC,qBAAGD,MAAkBC,QAAQ,MAMJnV,IAAOgW,IAAV,MAChB,qBAAGd,MAAkBC,QAAQ,MAGdnV,YAAOwZ,KAAPxZ,CAAH,MAEA,qBAAGyZ,mBACV,qBAAGC,QAAyB,WAAa,eCrC1D,SAASC,KAA2Q,OAA9PA,GAAW9L,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAASO,GAAyBN,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM0C,CAA8BV,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,OAAQ,CACnD8C,EAAG,4dACHC,KAAM,UAGR,SAASC,GAAaC,EAAMC,GAC1B,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQd,GAAyBW,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAOrB,GAAS,CACtDyB,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTR,KAAM,OACNS,MAAO,6BACPC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,IAGpB,IAAImX,GAA0B,aAAiBV,ICuChCW,IDtCA,IChBU,WAAO,IACtBnZ,EAAaI,qBAAWd,IAAxBU,SACA6R,EAAwBzR,qBAAWkR,IAAnCO,oBACiBuH,EAA8B1R,GACrD,qBADMa,gBAGmB8Q,EAA2B3R,GACpD,oBADMU,kBAGiBkR,EAA2B5R,GAClD,gBADMa,gBAGiBgR,EAAgC7R,GACvD,sBADMa,gBAGiBiR,EAAqC9R,GAC5D,0BADMa,gBAGFkR,EAAO5H,EAAsB,WAAa,IAEhD,OACE,eAACiF,GAAD,YACIsC,GAA6BvH,IAC7B,eAAC,GAAD,CAAU8E,OAAK,EAACD,GAAI+C,EAApB,UACE,cAACzC,GAAD,CACEE,gBAAiBwC,IAAI,KACrBlH,QAAQ,MACR2E,UAAWtF,EAHb,SAKE,cAAC,IAAD,MAEDhO,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,SAAW,gBAG5C6Z,GACC,eAAC,GAAD,CAAU5C,GAAG,YAAb,UACE,cAAC,IAAD,IADF,kBAID2C,GAA0B,cAAC,GAAD,IAC1BE,GACC,eAAC,GAAD,CAAU7C,GAAG,WAAb,UACE,cAAC,IAAD,IADF,cAID8C,GACC,eAAC,GAAD,CAAU9C,GAAG,SAAb,UACE,cAAC,GAAD,IADF,oB,0yBCvDD,IAAMI,GAAYrZ,IAAOgW,IAAV,MAIT,qBAAGd,MAAkBC,QAAQ,EAAG,MAGhC+G,GAAkBlc,IAAOgW,IAAV,MAOV,qBAAGd,MAAkBE,QAAQC,QAAQhd,QAC1C,qBAAG6c,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGtCgH,GAAgBnc,YAAOoc,KAAPpc,CAAH,MACf,qBAAGkV,MAAkBC,QAAQ,OAC7B,qBAAGD,MAAkBE,QAAQC,QAAQhd,QACjC,qBAAG6c,MAAkBC,QAAQ,MAK/BkH,GAAWrc,YAAOsc,KAAPtc,CAAH,MACR,qBAAGkV,MAAkBqH,OAAOC,OAAS,KACvC,qBAAGtH,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAI5CC,GAA2B3c,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,M,qBC1BxB6c,GAA4Bxc,wBAA4B,CACnEyc,eAAgB,WAQZC,GAAwC,CAC5C,UACA,UACA,kBAsDaC,GAnDqC,SAAC,GAAkB,IAAhBnkB,EAAe,EAAfA,SAC/CokB,EAAcC,mBADgD,EAExBnb,qBAFwB,mBAE7D+a,EAF6D,KAE7CK,EAF6C,KAMpEzc,qBAAU,WAOR,OANA0c,IAA0B/Z,SAAQ,WAChC4Z,EAAYI,QAAUC,YACpBF,EAjBoC,QAqBjC,WACDH,EAAYI,SAASE,cAAcN,EAAYI,YAEpD,IAEH,IAAMD,EAA0B5f,sBAAW,sBAAC,sBAAAlB,EAAA,sEACtBkC,QAAQgf,IAC1BT,GAAsCxS,IAAtC,uCAA0C,WAAOkT,GAAP,SAAAnhB,EAAA,+EAKhCohB,MAAMD,GAL0B,iCAM/B,GAN+B,0DAQ/B,GAR+B,wDAA1C,wDAFwC,kBAehC1V,MAAK,SAAC4V,GAAD,OAAUA,KAfiB,uBAgBxCR,EAAkB,UAhBsB,mBAiBjC,GAjBiC,cAmBxCA,EAAkB,WAnBsB,mBAoBjC,GApBiC,4CAsBzC,IAEH,OACE,cAACN,GAA0Bzb,SAA3B,CACEC,MAAO,CAAE+b,0BAAyBN,kBADpC,SAGGjkB,K,yoBCrEA,IAAMwgB,GAAYrZ,IAAOgW,IAAV,MACA,qBAAGd,MAAkBE,QAAQwI,QAAQlB,SAC9C,qBAAGxH,MAAkBC,QAAQ,EAAG,MAQhC0I,GAAmB7d,YAAO4c,MAA0B9H,MAAM,CACrE8D,KAAM,GACNV,MAAO,WAFuBlY,CAAH,MAOhB8d,GAAQ9d,IAAO+d,KAAV,MACP,qBAAG7I,MAAkBE,QAAQC,QAAQ3c,QAClC,qBAAGwc,MAAkB8B,WAAWgH,MAAM9G,YAGvC+G,GAAcje,YAAOke,KAAPle,CAAH,MAIXme,GAAmBne,YAAOoe,KAAPpe,CAAH,MAEjB,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MCgBnCkJ,GAnCiC,WAAO,IAAD,EACtBtc,oBAAS,GADa,mBAC7CI,EAD6C,KACpCC,EADoC,OAEAO,qBAClDka,IADMO,EAF4C,EAE5CA,wBAAyBN,EAFmB,EAEnBA,eAYjC,MAAuB,WAAnBA,EACK,KAGc,YAAnBA,EAEA,mCACE,eAAC,GAAD,CAAW1E,QAAS,kBAdxBhW,GAAW,GAEJgb,IAA0B/Z,SAAQ,WACvCjB,GAAW,OAWT,UACE,cAAC0b,GAAD,yDACA,cAACK,GAAD,UACGhc,EAAU,cAAC,GAAD,IAAuB,cAAC8b,GAAD,WAOrC,M,otCCxCF,IAAMK,GAAUte,YAAOue,KAAPve,CAAH,MAIPqZ,GAAYrZ,YAAOwe,MAAQ1J,MAAM,CAC5C2J,UAAW,EACXC,SAAU,UAFa1e,CAAH,MAUT0V,GAAsB1V,IAAO2V,IAAIb,MAAM,CAClDqB,IAAKwI,IAD4B3e,CAAH,MAWnB4V,GAAuB5V,IAAO2V,IAAIb,MAAM,CACnDqB,IAAKyI,IAD6B5e,CAAH,MAWpB6V,GAAsB7V,IAAO2V,IAAIb,MAAM,CAClDqB,IAAKwI,IAD4B3e,CAAH,MAWnB8V,GAAuB9V,IAAO2V,IAAIb,MAAM,CACnDqB,IAAKyI,IAD6B5e,CAAH,MAWpB+V,GAAY/V,IAAOgW,IAAV,MCfP6I,GA5B2B,SAAC,GAMpC,IALLC,EAKI,EALJA,YACAC,EAII,EAJJA,cACAC,EAGI,EAHJA,aAGI,IAFJC,4BAEI,SADJpmB,EACI,EADJA,SAEA,OACE,eAAC,GAAD,WACE,eAAC,GAAD,WACGimB,EACAC,EACAC,KAEFC,GACC,eAAC,GAAD,WACE,cAAC,GAAD,IACA,cAAC,GAAD,IACA,cAAC,GAAD,IACA,cAAC,GAAD,OAGJ,cAAC,GAAD,IACCpmB,M,mPCxCA,IAAMqmB,GAAQlf,YAAOuY,MAAYzD,MAAM,CAC5CC,QAAS,MADU/U,CAAH,MCkBHmf,GAbgC,SAAC,GAAyB,IAAvB7a,EAAsB,EAAtBA,MAAU6W,EAAY,0BACtE,OACE,cAAC,GAAD,aACE4D,cACE,cAACG,GAAD,CAAOE,MAAM,SAASrK,QAAQ,KAA9B,SACGzQ,KAGD6W,K,SC8BKkE,GA3CoD,SAAC,GAE7D,IAAD,IADJtK,eACI,MADM,OACN,EAEEuK,EADQC,eACanK,QAAQC,QAAQN,GAE3C,OACE,sBACEqG,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRR,KAAK,OACLS,MAAM,6BACNiE,OAAQF,EANV,UAQE,sBACEzE,EAAE,qnBACF4E,YAAY,IACZC,cAAc,QACdC,eAAe,UAEjB,sBACE9E,EAAE,4JACF4E,YAAY,MAEd,sBACE5E,EAAE,kKACF4E,YAAY,MAEd,sBACE5E,EAAE,kKACF4E,YAAY,MAEd,sBACE5E,EAAE,0oBACF4E,YAAY,IACZC,cAAc,QACdC,eAAe,c,2sBClChB,IAAMC,GAAiB5f,YAAO6f,KAAP7f,CAAH,MAId8f,GAAiB9f,IAAOgW,IAAV,MAKdmI,GAAmBne,YAAOoe,KAAPpe,CAAH,MAKhB+f,GAAiB/f,YAAO8Y,IAAP9Y,CAAH,MACL,qBAAGkV,MAAkBE,QAAQE,OAAOC,SACvC,qBAAGL,MAAkBC,QAAQ,MACrC,qBAAGD,MAAkBC,QAAQ,QAC5B,qBAAGD,MAAkBC,QAAQ,QAQ5B6K,GAAkBhgB,YAAOigB,KAAPjgB,CAAH,MACjB,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QC2CjC6nB,GAvDuB,SAAC,GAKnB,IAJlB5b,EAIiB,EAJjBA,MACA6b,EAGiB,EAHjBA,gBACAC,EAEiB,EAFjBA,eACAC,EACiB,EADjBA,cAEM9I,EAAUC,cAEV8I,EAAU,CACdC,MACE,cAACR,GAAD,CAAgB9G,GAAG,SAAnB,SACE,cAAC+G,GAAD,CAAiB9I,SAAS,YAG9BsJ,OAAQ,cAAC,KAAD,CAAYtJ,SAAS,UAC7BuJ,IACE,cAACV,GAAD,CAAgB9G,GAAG,uBAAnB,SACE,cAAC,GAAD,OAKN,OACE,mCACE,cAAC,GAAD,CACE6F,YACE,cAAC,GAAD,CACE4B,KAAK,MACLxI,MAAM,UACNyI,cAAY,cACZvI,QAAUiI,GAAgB,kBAAM9I,EAAQqJ,UAJ1C,SAME,cAAChB,GAAD,MAGJtb,MAAOA,EACP0a,aACEmB,EACE,cAAC,GAAD,CACEO,KAAK,MACLxI,MAAM,UACNyI,cAAaR,EACb/H,QAASgI,EAJX,SAMGE,EAAQH,KAGX,cAACL,GAAD,S,mWClEL,IAAMe,GAAiB7gB,IAAO8gB,SAAV,MAMP,gBAAG5L,EAAH,EAAGA,MAAH,SAAUmD,SACbnD,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKpd,KAAO,aAAe,MAGzD,gBAAG6c,EAAH,EAAGA,MAAH,SAAUmD,SACNnD,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKpd,KAAO,aAAe,MAGzD,gBAAG6c,EAAH,EAAGA,MAAH,SAAUmD,SACNnD,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKpd,KAAO,aAAe,M,kTCdtE,IAee0oB,GAfI/gB,YAAOghB,KAAPhhB,CAAH,MAEQ,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QAGrC,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAElD,qBAAG6c,MAAkBE,QAAQE,OAAO2L,SAC7B,qBAAG/L,MAAkBC,QAAQ,MAGlC,qBAAGD,MAAkBE,QAAQC,QAAQhd,Q,iFCCrC6oB,GAAe,WAC1B,IAAMC,EAAS1e,6BAET2e,EAAWC,aAAe,CAC9BjM,QAAS+L,EAAOG,YAChBC,MAAO,CACLC,aAAc,IAEhBxK,WAAY,CACVyK,WAAY,YACZvK,SAAU,IAEZ/B,QAAS,EACTuM,UAAW,CACTC,UAAW,CACTC,KAAM,CACJJ,aAAc,MACdK,cAAe,UAGnBC,OAAQ,CACNF,KAAM,CACJC,cAAe,aAcvB,MAAO,CACLT,WACAW,YAV4B,2BACzBX,GADyB,IAE5BhM,QAAQ,2BACHgM,EAAShM,SADP,IAELqH,MAAO0E,EAAOG,YAAY7E,Y,GC1CEyE,KAA1BE,G,GAAAA,SAAUW,G,GAAAA,YACLC,GAAiC,CAC5C3M,QAAS+L,GAAShM,QAAQC,QAAQhd,KAClCmd,UAAW4L,GAAShM,QAAQI,UAAUnd,KACtCkd,MAAO6L,GAAShM,QAAQE,OAAOC,MAC/B0M,KAAMb,GAAShM,QAAQC,QAAQ3c,KAC/BuoB,MAAOc,GAAY3M,QAAQqH,MAAMvE,MAAMzC,KAAK/c,MAGjCwpB,GAAgB,SAACC,GAC5B,IAAMC,EAAI,mBAIV,MAAO,CAHuB,GAApBA,EAAE5H,QAAQ2H,EAAI,IAAWC,EAAE5H,QAAQ2H,EAAI,IACnB,GAApBC,EAAE5H,QAAQ2H,EAAI,IAAWC,EAAE5H,QAAQ2H,EAAI,IACnB,GAApBC,EAAE5H,QAAQ2H,EAAI,IAAWC,EAAE5H,QAAQ2H,EAAI,M,m3BCb5C,IAAME,GAAYriB,YAAOsiB,KAAPtiB,CAAH,MAET,gBAAGuiB,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAI7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAIpB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAGtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAGtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAK7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAItB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MC7BpCC,GANyC,SAAC,GAAD,QACtDtK,aADsD,MAC9C,UAD8C,MAEtDnD,eAFsD,MAE5C,WAF4C,EAGnDoG,EAHmD,2CAIlD,cAAC,GAAD,aAAWoH,OAAQrK,EAAOnD,QAASA,GAAaoG,KCkBvCsH,GA3BK,SAAC,GAOf,IALF1oB,EAKC,EALDA,KAKC,IAJD2oB,gBAIC,aAHDC,iBAGC,SAFExH,EAEF,kDAEyByH,eAApBC,EAFL,EAEKA,OAEFC,EAJH,EAEaC,QAEShpB,IAAS8oB,EAAO9oB,GAEzC,OACE,cAAC,KAAD,aACE2oB,SAAUA,EACVM,aAAa,MACbC,GAAIT,GACJzoB,KAAMA,EACNU,MAAOiQ,QAAQoY,GACfI,WAAY,cAAC,KAAD,CAAcnpB,KAAMA,IAChC4oB,UAAWA,GACPxH,K,udCxBH,IAAMgI,GAAgBnjB,IAAOgW,IAAV,MAGV,qBAAGd,MAAkBC,QAAQ,MAQhC+J,GAAQlf,YAAOuY,KAAPvY,CAAH,MACP,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QAEtC,qBAAG6c,MAAkBC,QAAQ,MAGnCiO,GAAWpjB,YAAOuY,KAAPvY,CAAH,MACV,gBAAGqjB,EAAH,EAAGA,QAASC,EAAZ,EAAYA,YAAapO,EAAzB,EAAyBA,MAAzB,OACPmO,EACInO,EAAME,QAAQqH,MAAMvE,MAAMqL,MAC1BD,EACApO,EAAME,QAAQqH,MAAMvE,MAAM+D,IAAI5jB,KAC9B6c,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QACtB,qBAAG6c,MAAkBC,QAAQ,MCfxCqO,GAAgC,CACpC,CACEvB,KAAM,0BACNoB,QAAS,SAACrgB,GAAD,OAAcA,EAAS8E,QAAU,IAE5C,CACEma,KAAM,yBACNoB,QAAS,SAACrgB,GAAD,MAAc,QAAQygB,KAAKzgB,KAEtC,CACEif,KAAM,yBACNoB,QAAS,SAACrgB,GAAD,MAAc,QAAQygB,KAAKzgB,KAEtC,CACEif,KAAM,eACNoB,QAAS,SAACrgB,GAAD,MAAc,QAAQygB,KAAKzgB,KAEtC,CACEif,KAAM,2CACNoB,QAAS,SAACrgB,GAAD,MAAc,oBAAoBygB,KAAKzgB,MA0CrC0gB,GAjCc,SAAC,GAGI,IAFhC1gB,EAE+B,EAF/BA,SAE+B,IAD/B2gB,uBAC+B,SACvBrC,EAAgB7e,6BAAhB6e,YACR,OACE,gCACE,cAAC,GAAD,CAAOvM,QAAQ,UAAf,+CACCyO,GAAcjZ,KAAI,SAACqZ,EAAMrT,GACxB,IAAM8S,EAAUO,EAAKP,QAAQrgB,GAC7B,OACE,eAACmgB,GAAD,WACGE,EACC,cAAC,KAAD,CAAcQ,UAAWvC,EAAY7E,MAAMvE,MAAMqL,QAC/CI,EACF,cAAC,KAAD,CAAWE,UAAWvC,EAAY7E,MAAMvE,MAAM+D,IAAI5jB,OAElD,cAAC,KAAD,CAAkBwrB,UAAWvC,EAAY7E,MAAMvE,MAAMzC,KAAKpd,OAE5D,cAAC+qB,GAAD,CACErO,QAAQ,YACRsO,QAASA,EACTC,YAAaK,EAHf,SAKGC,EAAK3B,SAbU1R,U,0dChDvB,IAAM8I,GAAYrZ,IAAOgW,IAAV,MAIX,qBAAGd,MAAkBE,QAAQC,QAAQ3c,QAcnCorB,IANuB9jB,YAAOuY,MAAYzD,MAAM,CAC3DC,QAAS,WADyB/U,CAAH,MAGrB,qBAAGkV,MAAkBC,QAAQ,MAGVnV,IAAOgW,IAAV,O,SCjBf+N,GAAU,SAAC1iB,GACtB,OAAOA,EACJ+C,QAAQ,MAAO,IACfA,QAAQ,cAAe,SACvBA,QAAQ,cAAe,SACvBA,QAAQ,mBAAoB,SAC5BA,QAAQ,gBAAiB,OAGjB4f,GAAa,SAAC3iB,GACzB,OAAOA,EAAM+C,QAAQ,MAAO,KAcjB6f,GAAY,SAAC5iB,GACxB,IAAI6iB,EAAa7iB,EAAM+C,QAAQ,MAAO,IAQtC,OALI/C,EAAM+X,WAAW,OAAS/X,EAAMyG,OAAS,KAC3Coc,EAAaC,GAAUD,IAIrB7iB,EAAM+X,WAAW,MACZ8K,EAAW9f,QAAQ,+BAAgC,YACjD/C,EAAMyG,OAAS,EACjBoc,EACJ9f,QAAQ,mBAAoB,WAC5BA,QAAQ,wBAAyB,SAE/B8f,GAGIC,GAAY,SAAC9iB,GACxB,OAAOA,EAAM4F,MAAM,IAORmd,GAAsB,SAAC/iB,GAClC,OAAOA,EAAM+C,QAAQ,MAAO,IAAIA,QAAQ,qBAAsB,UAGnDigB,GAAoB,SAAChjB,GAChC,OAAOA,EAAM+C,QAAQ,MAAO,IAAIA,QAAQ,gBAAiB,OAG9CkgB,GAAiB,SAACjjB,GAC7B,OAAOA,EAAM+C,QAAQ,MAAO,IAAIA,QAAQ,iBAAkB,OAG/CmgB,GAAgB,SAACljB,GAC5B,OAAOA,EAAM+C,QAAQ,MAAO,IAAIA,QAAQ,eAAgB,OAG7CogB,GAAmB,SAACnjB,GAC/B,OAAOA,EAAM+C,QAAQ,MAAO,IAAIA,QAAQ,eAAgB,OAG7CqgB,GAAwB,SAACpjB,GACpC,IAAMqjB,EAAYrjB,EACf+C,QAAQ,eAAgB,IACxBA,QAAQ,IAAK,KACbA,QAAQ,qBAAsB,SAMjC,OAAOsgB,EAAU9W,UACf,EACA8W,EAAUlK,QAAQ,KAAO,EAAIkK,EAAUlK,QAAQ,KAAO,EAAI,IAOvD,SAASmK,KAA0B,IAAdC,EAAa,uDAAJ,GAC7B7hB,EAAM6hB,EAAOxgB,QAAQ,UAAW,IACtC,GAAY,KAARrB,EAAY,OAAO,EAEvB,GACiB,KAAfA,EAAI+E,QACI,gBAAR/E,GACQ,gBAARA,GACQ,gBAARA,GACQ,gBAARA,GACQ,gBAARA,GACQ,gBAARA,GACQ,gBAARA,GACQ,gBAARA,GACQ,gBAARA,GACQ,gBAARA,EAEA,OAAO,EAGT,IADA,IAAI8hB,EAAM,EACDhL,EAAI,EAAGA,EAAI,EAAGA,IAAKgL,GAAOC,SAAS/hB,EAAIgE,OAAO8S,KAAO,GAAKA,GACnE,IAAIkL,EAAM,GAAMF,EAAM,GAEtB,GADY,KAARE,GAAsB,KAARA,IAAYA,EAAM,GAChCA,IAAQD,SAAS/hB,EAAIgE,OAAO,IAAK,OAAO,EAE5C8d,EAAM,EACN,IAAK,IAAIhL,EAAI,EAAGA,EAAI,GAAIA,IAAKgL,GAAOC,SAAS/hB,EAAIgE,OAAO8S,KAAO,GAAKA,GAGpE,OADY,MADZkL,EAAM,GAAMF,EAAM,KACQ,KAARE,IAAYA,EAAM,GAChCA,IAAQD,SAAS/hB,EAAIgE,OAAO,KAI3B,IAIMie,GAA2B,SAAC3jB,GAMvC,MADc,qFACDoiB,KAAKpiB,IAeP4jB,GAAY,CACvB,CAAE5jB,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,MACtB,CAAE9W,MAAO,KAAM8W,MAAO,OC1KX+M,GAAmB,CAC9BxjB,gBAAiB,GACjBC,YAAa,GACbwjB,eAAgB,IAGLC,GAAmBC,OAAa9D,MAAM,CACjD7f,gBAAiB2jB,OAAa3C,SAAS,6BACvC/gB,YAAa0jB,OACV3C,SAAS,kCACTe,KACC,kBACA,2EACA,SAACpiB,GAAD,OAAW2jB,GAAyB3jB,GAAS,OAEjD8jB,eAAgBE,OACb3C,SAAS,kDACT4C,MAAM,CAACD,KAAQ,eAAgB,IAAK,gCC2G1BE,GApHkB,WAAO,IAAD,EACSxjB,oBAAS,GADlB,mBAC9ByjB,EAD8B,KACbC,EADa,OAEe1jB,oBAAS,GAFxB,mBAE9B2jB,EAF8B,KAEVC,EAFU,OAGS5jB,oBAAS,GAHlB,mBAG9B4hB,EAH8B,KAGbiC,EAHa,KAuB/BC,EAAwB,kBAAMJ,GAAoBD,IAClDM,EAA2B,kBAC/BH,GAAuBD,IAEzB,OACE,mCACE,cAAC,GAAD,UACE,cAAC,KAAD,CACEN,iBAAkBA,GAClBW,cAAeb,GACfc,SA5Ba,SACnBC,EADmB,GAGf,IADFC,EACC,EADDA,cAAeC,EACd,EADcA,cAEjB1kB,GAAewkB,EAAOvkB,gBAAiBukB,EAAOtkB,aAC3CwB,MAAK,WACJlC,IAAMmlB,QAAQ,8BACdF,EAAc,kBAAmB,IACjCA,EAAc,cAAe,IAC7BA,EAAc,iBAAkB,OAEjChpB,OAAM,SAACC,GACN,IAAMoC,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,GACZ4mB,GAAc,OAeZE,kBAAkB,EAJpB,SAMG,SAACC,GAAD,OACC,eAAC,KAAD,CAAMC,YAAY,EAAlB,UACE,cAACC,GAAD,CACEtO,MAAM,UACNne,KAAK,kBACLoe,MAAM,eACNna,KAAK,WACLyoB,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,qBAE/B,cAACF,GAAD,CACEtO,MAAM,UACNne,KAAK,cACLiE,KAAMwnB,EAAkB,OAAS,WACjCrN,MAAM,aACNsO,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,eAC7BC,WAAY,CACVC,aACE,cAACC,GAAA,EAAD,CAAgBnI,SAAS,MAAzB,SACE,cAACN,GAAA,EAAD,CACExG,aAAW,6BACXQ,QAASyN,EAFX,SAIGL,EAAkB,cAAC,KAAD,IAAiB,cAAC,KAAD,WAM9C,cAACgB,GAAD,CACEtO,MAAM,UACNne,KAAK,iBACLiE,KAAM0nB,EAAqB,OAAS,WACpCvN,MAAM,uBACNsO,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,kBAC7BC,WAAY,CACVC,aACE,cAACC,GAAA,EAAD,CAAgBnI,SAAS,MAAzB,SACE,cAACN,GAAA,EAAD,CACExG,aAAW,6BACXQ,QAAS0N,EAFX,SAIGJ,EACC,cAAC,KAAD,IAEA,cAAC,KAAD,WAOZ,cAACoB,GAAD,CACE9jB,SAAUsjB,EAAOL,OAAOtkB,YACxBgiB,gBAAiBA,IAEnB,cAACG,GAAD,UACE,cAAC,GAAD,CACEzL,SAAUiO,EAAOS,aACjB/oB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNE,QAAS,kBAAMwN,GAAmB,IALpC,iC,yCCnHD,OAA0B,iC,qnBCMlC,IAAMvM,GAAYrZ,IAAOgW,IAAV,MAWE,qBAAGd,MAAkBE,QAAQE,OAAOC,SAI/CuB,GAAM9W,YAAO+W,KAAP/W,CAAH,MAOM,qBAAGkV,MAAkBE,QAAQE,OAAOC,SAM7CyR,GAAehnB,YAAOinB,MAAcnS,OAAM,SAACqG,GAAD,MAAY,CACjEC,MAAO,IACPC,OAAQ,IACRmG,aAAc,IACdtJ,MAAM,GAAD,oBAAMgK,GAAc/G,EAAMjG,MAAME,QAAQC,QAAQhd,OAAhD,CAAuD,QAJlC2H,CAAH,MC4FVknB,GA7GuC,SAAC,GAIhD,IAHLrP,EAGI,EAHJA,SACAsP,EAEI,EAFJA,aACAC,EACI,EADJA,WACI,EACkCrlB,mBAAS,IAD3C,mBACGslB,EADH,KACgBC,EADhB,OAEgCvlB,oBAAS,GAFzC,mBAEGwlB,EAFH,KAEeC,EAFf,OAGoBzlB,mBAAiB,KAHrC,mBAGG0lB,EAHH,KAGSC,EAHT,KAKEC,EAAYzK,mBACZ0K,EAAe1K,mBACM2K,EAAoC5d,GAC7D,yBADMc,kBAmCR,OACE,qCACE,cAAC,GAAD,CAAcwL,KAAMgR,EAApB,SACE,eAAC9Q,GAAA,EAAD,WACE,cAACuQ,GAAD,CACExL,IAAKmM,EACLG,MAAOT,EACPU,OAAQ,GACRC,OAAQ,EACRC,MAAOR,IAET,gCACE,yCACA,cAACS,GAAA,EAAD,CACEC,MAAO,CAAEjQ,MAAO,SAChBkQ,IAAK,EACLC,IAAK,GACLC,KAAM,GACNjnB,MAAOomB,EACP5P,SA3Ca,SACvB0Q,EACAlnB,GAEAqmB,EAAQrmB,SA0CF,eAACmnB,GAAA,EAAD,WACE,cAAC,GAAD,CAActQ,MAAM,UAAUE,QAxCnB,WACnBoP,GAAc,GACdF,EAAe,KAsCP,sBAGA,cAAC,GAAD,CAAcpP,MAAM,UAAUE,QAtClB,WACpB,IAAMqQ,EAAed,EAAUtK,QAAQqL,yBACjCC,EAAaF,EAAaG,YAEhCH,EAAaI,QAAO,SAACC,GACnBjR,EAASiR,GACT3B,EAAe,GACfG,EAAeqB,KACdf,EAAcvK,QAASrf,MAC1BwpB,GAAc,IA6BN,4BAMN,eAAC,GAAD,WACE,qBAAKrR,IAAKkR,GAAeF,GAAgB4B,MACvC3B,GAAcS,IACd,qCACE,uBAAOmB,QAAQ,iBAAf,SACE,cAAC,GAAD,CAGEC,UAAU,OACVrQ,KAAK,QACLV,MAAM,UACNN,aAAW,MANb,SAQGyP,EAAc,cAAC,KAAD,IAAsB,cAAC,KAAD,QAGzC,uBACEroB,GAAG,iBACH2hB,cAAY,gBACZ9I,SAnFQ,SAAC0Q,GACnB,IAAMxqB,EAAOwqB,EAAOxQ,OAAQmR,MAAO,GAC9BnrB,IACLupB,EAAe6B,IAAIC,gBAAgBrrB,GAAQ,KAC3C6pB,EAAavK,QAAUtf,EACvBypB,GAAc,KA+EJxpB,KAAK,OACLqrB,QAAM,EACNC,OAAO,0BC/Gf7rB,GAAQ,UADO,QACP,cAERuN,GAA2C,CAC/C5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA0BM8uB,GAvBM,WAAO,IAAD,EACChpB,qBACxBkJ,KACAuB,IAHuB,mBAClB7K,EADkB,KACXM,EADW,KAMnB2S,EAAQ5V,sBAAW,uCAAC,WAAOK,GAAP,eAAAvB,EAAA,sEAEtBmE,EAAS,CAAEzC,KAAM,YAFK,SAGChF,EAAMoa,MAAN,UAAe3V,GAAf,OAA8BI,GAH/B,OAGhBtC,EAHgB,OAItBkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAJvB,uDAMtB4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KANX,kBAOfnL,QAAQE,OAAR,OAPe,yDAAD,sDAStB,IAEH,OAAO,2BACFyB,GADL,IAEEiT,W,oZCjCG,IAAMiG,GAAYrZ,IAAOgW,IAAV,MAIN,qBAAGd,MAAkBC,QAAQ,MAClC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAQnCorB,GAAkB9jB,IAAOgW,IAAV,MCIfwT,GAA2B,SAACvD,GAAD,MACrC,CACCjkB,KAAM,CACJjI,KAAMksB,EAAOlsB,KACbwH,MAAO0kB,EAAO1kB,MACdkoB,YAAazF,GAAW,KAAD,OAAMiC,EAAOwD,iBAI7BrE,GAAmBC,OAAa9D,MAAM,CACjDxnB,KAAMsrB,OACH3C,SAAS,qCACT0F,IAAI,EAAG,4CACP3E,KACC,aACA,qCACA,SAACpiB,GAAD,OAAYA,GAAS,IAAIiJ,MAAM,KAAKxC,OAAS,KAEjDvG,MAAO8jB,OACJ3C,SAAS,8BACTnhB,MAAM,yCACTkoB,YAAapE,OACV3C,SAAS,gCACT0F,IAAI,GAAI,0CACRC,IAAI,GAAI,4CC+HEqB,GAnJY,WAAO,IAAD,EACC3nB,mBAAS,IADV,mBACxB4nB,EADwB,KACdC,EADc,OAEgBjnB,qBAAWd,IAAlDU,EAFuB,EAEvBA,SAAUJ,EAFa,EAEbA,QAASS,EAFI,EAEJA,gBACnBwQ,EAAUmW,KAAVnW,MAHuB,EAIqBhV,KAA5CW,EAJuB,EAIvBA,kBAAmBD,EAJI,EAIJA,qBACrB+qB,EAAY3M,mBACS4M,EAA+B7f,GACxD,kBADMc,kBAGmB8c,EAAoC5d,GAC7D,yBADMc,kBAIFgf,EAAuB,uCAAG,WAAO/qB,GAAP,eAAA1C,EAAA,+EAEfyC,EAAkBC,GAAImE,MAAK,gBAAGtF,EAAH,EAAGA,KAAH,cAAcA,QAAd,IAAcA,OAAd,EAAcA,EAAMI,aAFhC,wEAKL,gCADjBsB,EAAiBD,GAAoB,EAAD,MAExC2B,IAAMxG,MAAM8E,GANc,yDAAH,sDAW7BmB,qBAAU,WAAM,4CACd,8BAAApE,EAAA,sEACuBytB,EACnBjF,SAAS,GAAD,iBAAIviB,EAAUP,YAAd,aAAI,EAAgBhD,MAFhC,QACQgrB,EADR,SAKIJ,EAAYI,GALhB,4CADc,uBAAC,WAAD,wBAUdC,GACArnB,MACC,IAEH,IDjDkCZ,ECiD5BkoB,EAAQ,OAAG3nB,QAAH,IAAGA,OAAH,EAAGA,EAAUP,KACrBkjB,EDlD6D,CACnEnrB,MAAU,QADwBiI,ECkDWkoB,SDjDnC,IAAJloB,OAAA,EAAAA,EAAMjI,OAAQ,GACpBgJ,KAAS,OAAJf,QAAI,IAAJA,OAAA,EAAAA,EAAMe,MAAO,GAClBxB,OAAW,OAAJS,QAAI,IAAJA,OAAA,EAAAA,EAAMT,QAAS,GACtBkoB,aAAiB,OAAJznB,QAAI,IAAJA,OAAA,EAAAA,EAAMynB,aAAcxF,GAAUjiB,EAAKynB,aAAe,ICmE/D,OAAItnB,EAEA,cAAC,GAAD,CAAUoU,KAAMpU,EAAhB,SACGA,GACC,cAACwa,GAAD,CAA0BgE,cAAY,6BAO5C,mCACE,cAAC,GAAD,UACE,cAAC,KAAD,CACEwJ,SAAU,SAAC3O,GAAD,OAAUqO,EAAUxM,QAAU7B,GACxC4J,iBAAkBA,GAClBW,cAAeb,EACfc,SApCa,SAACC,GACpB,OAAOznB,QAAQgf,IAAI,CACjBqK,GAAmC5B,EAAOmE,QACtCtrB,EAAqBmnB,EAAOmE,QAAS7nB,EAAUvD,SAC/C2E,EACJyP,EAAMoW,GAAyBvD,MAE9B9iB,MAAK,WAAO,IAAD,EAIV,OAFA,UAAA0mB,EAAUxM,eAAV,SAAmB6I,cAAc,eAAWviB,GAC5C1C,IAAMmlB,QAAQ,gCACPxjB,OAER1F,OAAM,SAACC,GACN,IAAMoC,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,OAsBV8mB,kBAAkB,EALpB,SAOG,SAACC,GAAD,OACC,eAAC,KAAD,CAAMC,YAAY,EAAlB,UACE,cAAC,GAAD,CACE1O,SAAU,SAAC9Z,GAAD,OAAUuoB,EAAOJ,cAAc,UAAWnoB,IACpDopB,aAAcwC,IAEhB,cAACnD,GAAD,CACEtO,MAAM,UACNne,KAAK,OACLoe,MAAM,gBACNsO,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,UAE/B,cAACF,GAAD,CACEtO,MAAM,UACNne,KAAK,MACLoe,MAAM,MACNna,KAAK,MACLyoB,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,OAC7BrlB,MAAO0iB,GAAQuC,EAAOL,OAAOljB,KAC7BsV,UAAQ,IAEV,cAACmO,GAAD,CACEtO,MAAM,UACNne,KAAK,QACLiE,KAAK,QACLma,MAAM,SACNsO,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,WAE/B,cAACF,GAAD,CACEtO,MAAM,UACNne,KAAK,cACLoe,MAAM,UACNna,KAAK,MACLyoB,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,eAC7B7O,SAAU,SAACC,GACTwO,EAAOJ,cACL,cACAjC,GAAUnM,EAAEC,OAAO1W,WAIzB,cAAC,GAAD,UACE,cAAC,GAAD,CACEgX,UAAWyR,GAA8BxD,EAAOS,aAChD/oB,KAAK,SACL4a,KAAK,QACLV,MAAM,UAJR,iCCjHDmS,GA7BmD,SAAClP,GACjE,IAAMmP,EAAanP,EAAMoP,MAAMnf,OAAOof,MAE9Bzf,EAAsBd,GAAa,kBAAnCc,kBAOR,OACE,qCACE,cAAC,GAAD,CAAQ0f,eAAe,SAASnmB,MAAM,eACtC,eAAC,GAAD,WACE,cAAC4X,GAAD,UACE,eAAC,GAAD,CAAY7a,MAAOipB,EAAYzS,SATlB,SAAC6S,EAA0BC,GAC9CxP,EAAM5D,QAAQnT,QAAd,uBAAsCumB,KAQhC,UACE,cAACxO,GAAD,CAAe9a,MAAM,WAAW8W,MAAM,aACtC,cAACgE,GAAD,CAAe9a,MAAM,QAAQ8W,MAAM,eAGvC,cAAC0I,GAAD,CAAgBxI,UAAWtN,EAA3B,SACkB,aAAfuf,GAA6B,cAAC,GAAD,MAEhB,UAAfA,GAA0B,cAAC,GAAD,WC1B7Btf,GAA+C,CACnD5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA2BMmwB,GAxBU,WAAO,IAAD,EACHrqB,qBACxBkJ,KACAuB,IAH2B,mBACtB7K,EADsB,KACfM,EADe,KAKvBlC,EAAOf,sBAAW,uCAAC,WAAOK,GAAP,iBAAAvB,EAAA,sEAErBmE,EAAS,CAAEzC,KAAM,YACX6sB,ECpBVliB,GDoBmD3P,ECpBzB,OAAR,sBAAgB,sBAAAsD,EAAA,+EACzB,CACLuB,KAAM,GACNiL,WAAY,MAHkB,4CDiBT,SAIE+hB,EAAY,GAAD,OAnBvB,wBAmBuChtB,GAJ7B,cAIftC,EAJe,OAKrBkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OALxB,kBAMdW,QAAQC,QAAQlD,IANF,yCAQrBkF,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KARZ,kBASdnL,QAAQE,OAAR,OATc,0DAAD,sDAWrB,IAEH,OAAO,2BACFyB,GADL,IAEE5B,U,sjDEzBG,IAAMusB,GAAkB9qB,IAAOgW,IAAV,MAStB,SAACmF,GAAD,OAAWA,EAAMjG,MAAME,QAAQC,QAAQhd,QACvC,SAAC8iB,GAAD,OAAWA,EAAMjG,MAAME,QAAQI,UAAUnd,QAKlC0yB,GAAiB/qB,IAAOgrB,GAAV,MAOdC,GAAiBjrB,IAAOgW,IAAV,MAEZ,qBAAGd,MAAkB8B,WAAWkU,GAAGhU,YAClC,qBAAGhC,MAAkBC,QAAQ,MAIhCkE,GAAYrZ,IAAOgW,IAAV,MAQL,qBAAGd,MAAkBC,QAAQ,MAGjCgW,GAAgBnrB,IAAOgW,IAAV,MAOboV,GAAoBprB,IAAO2V,IAAV,MAKlB,qBAAGT,MAAkBC,QAAQ,MAGzB,SAACgG,GAAD,OACZA,EAAMkQ,SAAW,4CAA8C,MAGtDC,GAAatrB,YAAO6U,GAAP7U,CAAH,MAGR,qBAAGkV,MAAkB8B,WAAWuU,MAAMrU,YACrC,qBAAGhC,MAAkBC,QAAQ,MAGhCkH,GAAWrc,YAAOsc,KAAPtc,CAAH,MACR,qBAAGkV,MAAkBqH,OAAOC,OAAS,KACvC,qBAAGtH,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAI5CC,GAA2B3c,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,MCnFtB,OAA0B,uCCA1B,OAA0B,8CCA1B,OAA0B,qCCA1B,OAA0B,4CCA1B,OAA0B,0C,yMCMlC,ICuBFwrB,GDvBQnP,GAAWrc,YAAOsc,KAAPtc,CAAH,MACR,qBAAGkV,MAAkBqH,OAAOC,OAAS,KACvC,qBAAGtH,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAI5CC,GAA2B3c,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,MECtByrB,GAVyC,SAAC,GAAiB,IAAftpB,EAAc,EAAdA,QACzD,OACE,cAAC,GAAD,CAAUoU,KAAMpU,EAAhB,SACGA,GACC,cAAC,GAAD,CAA0Bwe,cAAY,iC,SDsBzC6K,O,2BAAAA,I,iBAAAA,I,+BAAAA,I,aAAAA,I,wBAAAA,Q,KAaL,IA4GeE,GA5GY,WACzB,IAAMnU,EAAUC,cADe,EAE+B9U,cAAtDvC,MAASwrB,GAFc,aAEwB,GAFxB,GAEdA,iBAAkBnkB,EAFJ,EAEIA,gBAC3BjF,EAAaI,qBAAWd,IAAxBU,SAHuB,EAO3BI,qBAAWkR,IAFbc,EAL6B,EAK7BA,uBACSiX,EANoB,EAM7BzpB,QAN6B,EAQPJ,mBAAS,GARF,mBAQxB8pB,EARwB,KAQlBC,EARkB,OASLlB,KAAlBrsB,EATuB,EASvBA,KAAM4D,EATiB,EASjBA,QACa4pB,EAAmC9hB,GAC5D,uBADMU,kBAGAzJ,EAAYyB,qBAAWd,IAAvBX,QAyBR,OAJAR,qBAAU,WACRiU,MACC,IAEEoX,EAKDH,EACK,cAAC,GAAD,CAAiBzpB,QAASypB,IAIjC,qCACE,eAACd,GAAD,WACE,cAAC,GAAD,CAAQL,eAAe,SAASnmB,MAAM,uBACtC,cAACymB,GAAD,IACA,cAACE,GAAD,gDAEA,eAAC,GAAD,WACE,eAACE,GAAD,WACE,cAACC,GAAD,CACEY,IAAI,cACJ7V,IAAK8V,GACL7T,QAAS,kBAAM0T,EAAQN,GAASU,aAChCb,SAAUQ,IAASL,GAASU,aAE9B,cAACd,GAAD,CACEY,IAAI,QACJ7V,IAAKgW,GACL/T,QAAS,kBAAM0T,EAAQN,GAASY,QAChCf,SAAUQ,IAASL,GAASY,WAIhC,cAACjB,GAAD,UACE,cAACC,GAAD,CACEY,IAAI,cACJ7V,IAAKkW,GACLjU,QAAS,kBAAM0T,EAAQN,GAASc,eAChCjB,SAAUQ,IAASL,GAASc,iBAIhC,eAACnB,GAAD,WACE,cAACC,GAAD,CACEY,IAAI,SACJ7V,IAAKoW,GACLnU,QAAS,kBAAM0T,EAAQN,GAASgB,MAChCnB,SAAUQ,IAASL,GAASgB,MAE9B,cAACpB,GAAD,CACEY,IAAI,eACJ7V,IAAKsW,GACLrU,QAAS,kBAAM0T,EAAQN,GAASkB,WAChCrB,SAAUQ,IAASL,GAASkB,cAIhC,cAACpB,GAAD,CAAYlT,QA/Ea,WAC/B,IAAMva,EAA2B,CAC/B8uB,UAAWd,EACXF,mBACAiB,YAAa,WACbnlB,YAAW,OAAElF,QAAF,IAAEA,OAAF,EAAEA,EAAUvD,IAEzBT,EAAKV,GACFsF,MAAK,WAAO,IAAD,GACQ,OAAfqE,QAAe,IAAfA,GAAA,UAAAA,EAAiBqlB,qBAAjB,eAAgCC,0BAA2B5rB,GAC5DA,IAEFqW,EAAQnT,QAAR,QAEDlH,OAAM,kBACL+D,IAAMxG,MAAM,sEAgEqC4d,SAAmB,IAATwT,EAAzD,8BAKJ,cAAC,GAAD,CAAUtV,KAAMpU,EAAhB,SACGA,GACC,cAAC,GAAD,CAA0Bwe,cAAY,gCA7DrC,cAAC,IAAD,CAAU1H,GAAI,0B,sjDEvElB,ICkBFuS,GDlBQV,GAAkB9qB,IAAOgW,IAAV,MAStB,SAACmF,GAAD,OAAWA,EAAMjG,MAAME,QAAQC,QAAQhd,QACvC,SAAC8iB,GAAD,OAAWA,EAAMjG,MAAME,QAAQI,UAAUnd,QAKlC0yB,GAAiB/qB,IAAOgrB,GAAV,MAOdC,GAAiBjrB,IAAOgW,IAAV,MAEZ,qBAAGd,MAAkB8B,WAAWkU,GAAGhU,YAClC,qBAAGhC,MAAkBC,QAAQ,MAIhCkE,GAAYrZ,IAAOgW,IAAV,MAQL,qBAAGd,MAAkBC,QAAQ,MAGjCgW,GAAgBnrB,IAAOgW,IAAV,MAOboV,GAAoBprB,IAAO2V,IAAV,MAKlB,qBAAGT,MAAkBC,QAAQ,MAGzB,SAACgG,GAAD,OACZA,EAAMkQ,SAAW,4CAA8C,MAGtDC,GAAatrB,YAAO6U,GAAP7U,CAAH,MAGR,qBAAGkV,MAAkB8B,WAAWuU,MAAMrU,YACrC,qBAAGhC,MAAkBC,QAAQ,MAGhCkH,GAAWrc,YAAOsc,KAAPtc,CAAH,MACR,qBAAGkV,MAAkBqH,OAAOC,OAAS,KACvC,qBAAGtH,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAI5CC,GAA2B3c,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,O,SCtDhCwrB,O,2BAAAA,I,iBAAAA,I,+BAAAA,I,aAAAA,I,wBAAAA,Q,KAQL,IAgGeuB,GAhGc,WAC3B,IAAMxV,EAAUC,cACRjV,EAAaI,qBAAWd,IAAxBU,SAFyB,EAGgCI,qBAC/DkR,IADe+X,EAHgB,EAGzBzpB,QAAiCiS,EAHR,EAGQA,oBAHR,EAMTrS,mBAAS,GANA,mBAM1B8pB,EAN0B,KAMpBC,EANoB,OAOPlB,KAAlBrsB,EAPyB,EAOzBA,KAAM4D,EAPmB,EAOnBA,QAmBd,OAlB8D8H,GAC5D,uBADMU,kBAuBJihB,EACK,cAAC,GAAD,CAAiBzpB,QAASypB,IAIjC,qCACE,eAAC,GAAD,WACE,cAAC,GAAD,CAAQnB,eAAe,SAASnmB,MAAM,uBACtC,cAAC,GAAD,IACA,cAAC,GAAD,gDAEA,eAAC,GAAD,WACE,eAAC,GAAD,WACE,cAAC,GAAD,CACE0nB,IAAI,cACJ7V,IAAK8V,GACL7T,QAAS,kBAAM0T,EAAQN,GAASU,aAChCb,SAAUQ,IAASL,GAASU,aAE9B,cAAC,GAAD,CACEF,IAAI,QACJ7V,IAAKgW,GACL/T,QAAS,kBAAM0T,EAAQN,GAASY,QAChCf,SAAUQ,IAASL,GAASY,WAIhC,cAAC,GAAD,UACE,cAAC,GAAD,CACEJ,IAAI,cACJ7V,IAAKkW,GACLjU,QAAS,kBAAM0T,EAAQN,GAASc,eAChCjB,SAAUQ,IAASL,GAASc,iBAIhC,eAAC,GAAD,WACE,cAAC,GAAD,CACEN,IAAI,SACJ7V,IAAKoW,GACLnU,QAAS,kBAAM0T,EAAQN,GAASgB,MAChCnB,SAAUQ,IAASL,GAASgB,MAE9B,cAAC,GAAD,CACER,IAAI,eACJ7V,IAAKsW,GACLrU,QAAS,kBAAM0T,EAAQN,GAASkB,WAChCrB,SAAUQ,IAASL,GAASkB,cAIhC,cAAC,GAAD,CAAYtU,QAtEa,WAC/B,IAAMva,EAA2B,CAC/B8uB,UAAWd,EACXF,iBAAkBjkB,OAAM,OAAC0M,QAAD,IAACA,OAAD,EAACA,EAAqBpV,IAC9C4tB,YAAa,aACbnlB,YAAW,OAAElF,QAAF,IAAEA,OAAF,EAAEA,EAAUvD,IAEzBT,EAAKV,GACFsF,MAAK,kBAAMoU,EAAQjP,KAAR,qCACXpL,OAAM,kBACL+D,IAAMxG,MAAM,sEA4DqC4d,SAAmB,IAATwT,EAAzD,8BAKJ,cAAC,GAAD,CAAUtV,KAAMpU,EAAhB,SACGA,GACC,cAAC,GAAD,CAA0Bwe,cAAY,gCA7DrC,cAAC,IAAD,CAAU1H,GAAI,oC,mlCC5DlB,IAAM+T,GAAoBhtB,YAAO0X,MAAa5C,OAAM,kBAAkB,CAC3EC,QADyD,EAAGA,SACxC,cADW/U,CAAH,MAMjB,gBAAGuiB,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAI7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAK7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAIpB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAGtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAGtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAI/B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAK3B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAKtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAInC,qBAAGrN,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MCpBjC8X,GA/BM,SAAC,GAWb,IAVPlzB,EAUM,EAVNA,KAUM,IATN2oB,gBASM,SARNwK,EAQM,EARNA,mBACG/R,EAOG,2DAEsByH,eAApBC,EAFF,EAEEA,OAEFC,EAJA,EAEUC,QAEShpB,IAAS8oB,EAAO9oB,GAEzC,OACE,cAAC,KAAD,aACEiE,KAAK,SACLgB,GAAIjF,EACJ2oB,SAAUA,EACVO,GAAIkK,GACJpzB,KAAMA,EACNU,MAAOqoB,EACPoK,mBAAoBA,GAChB/R,KA0BJgS,GAA2C,SAAC,GAS3C,IARLnuB,EAQI,EARJA,GACAmZ,EAOI,EAPJA,MACAtf,EAMI,EANJA,SACA4B,EAKI,EALJA,MACA4d,EAII,EAJJA,SAII,IAHJH,aAGI,MAHI,UAGJ,MAFJgV,0BAEI,MAFiB,WAEjB,EADD/R,EACC,0FACJ,OACE,eAAC6R,GAAD,CACEzK,OAAQrK,EACRyK,WAAS,EACTloB,MAAOiQ,QAAQjQ,GACf4d,SAAUA,EACVtD,QAASmY,EALX,UAOE,cAACE,GAAA,EAAD,CAAYpuB,GAAIA,EAAhB,SAAqBmZ,IACrB,cAACkV,GAAA,EAAD,yBACEtY,QAAQ,WACRoD,MAAOA,EACPmV,QAAStuB,EACTqZ,SAAUA,GACN8C,GALN,aAOGtiB,KAEF4B,GAAS,cAAC8yB,GAAA,EAAD,UAAiB9yB,Q,uoBCvFjC,IAkCe+yB,GAlCcxtB,YAAOqiB,MAAWvN,MAAM,CACnDC,QAAS,YADkB/U,CAAH,MAIb,qBAAGkV,MAAkBE,QAAQE,OAAOC,SAGpC,qBAAGL,MAAkBE,QAAQE,OAAOC,SAMpC,qBAAGL,MAAkBE,QAAQE,OAAOC,SAGpC,qBAAGL,MAAkBE,QAAQE,OAAOC,SAI3B,qBAAGL,MAAkBE,QAAQE,OAAOC,SAC3C,qBAAGL,MAAkBE,QAAQE,OAAOC,SAG7B,qBAAGL,MAAkBE,QAAQE,OAAOC,SAC3C,qBAAGL,MAAkBE,QAAQE,OAAOC,SAG7B,qBAAGL,MAAkBE,QAAQE,OAAOC,SAC3C,qBAAGL,MAAkBE,QAAQE,OAAOC,SCLpCkY,GAtBqB,SAACtS,GAAW,IAAD,EACLpZ,oBAAS,GADJ,mBACtC2rB,EADsC,KACxBC,EADwB,KAE7C,OACE,cAAC,GAAD,yBACE3vB,KAAM0vB,EAAe,OAAS,YAC1BvS,GAFN,IAGEwL,WAAY,CACVC,aACE,cAACC,GAAA,EAAD,CAAgBnI,SAAS,MAAzB,SACE,cAACN,GAAA,EAAD,CACExG,aAAW,6BACXQ,QAAS,kBAAMuV,GAAiBD,IAFlC,SAIGA,EAAe,cAAC,KAAD,IAAiB,cAAC,KAAD,a,+uDCTxC,IAAME,GAAoB5tB,IAAOgW,IAAV,MAEd,qBAAGd,MAAkBC,QAAQ,OACvB,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SACjD,qBAAGxH,MAAkBC,QAAQ,MACnC,qBAAGD,MAAkBC,QAAQ,MAKvB,qBAAGD,MAAkBC,QAAQ,MAGnC0Y,GAAkB7tB,YAAOuY,KAAPvY,CAAH,MACjB,qBAAGkV,MAAkBE,QAAQE,OAAO2L,SAalC6M,IATkB9tB,YAAO+tB,GAAP/tB,CAAH,MACN,qBAAGkV,MAAkBE,QAAQE,OAAOC,SACvC,qBAAGL,MAAkBC,QAAQ,OAOXnV,YACnCwmB,GADmCxmB,CAAH,MAIb,qBAAGkV,MAAkBC,QAAQ,OAC1B,qBAAGD,MAAkBE,QAAQE,OAAOC,UAI/CyY,GAA2BhuB,YAAOytB,GAAPztB,CAAH,MAEhB,qBAAGkV,MAAkBC,QAAQ,OAC1B,qBAAGD,MAAkBE,QAAQE,OAAOC,SAI/C,qBAAGL,MAAkBE,QAAQC,QAAQhd,QAGrC,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAMrC,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAGrC,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAI5B,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAC5C,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAG9B,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAC5C,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAG9B,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAC5C,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAKvC41B,GAAqBjuB,YAAOitB,GAAPjtB,CAAH,MACZ,qBAAGkV,MAAkBC,QAAQ,OAC1B,qBAAGD,MAAkBE,QAAQE,OAAOC,SAI3BvV,IAAO+d,KAAV,MAKF/d,IAAO+d,KAAV,MACZ,qBAAG7I,MAAkBE,QAAQE,OAAO2L,SC9F/C,SAAS,KAA2Q,OAA9P,GAAWpT,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,QAAS,CACpD/Y,GAAI,kBACJ,YAAa,kBACboc,MAAO,GACPC,OAAQ,GACR6S,UAAW,up+BAGb,SAASC,GAAenT,EAAMC,GAC5B,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDO,MAAO,6BACP6S,WAAY,+BACZhT,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTR,KAAM,iBACNU,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,IAGpB,IAAI,GAA0B,aAAiB6pB,IAChC,I,k/BCjCR,IAAME,GAAmBruB,IAAOgW,IAAV,MAEb,qBAAGd,MAAkBC,QAAQ,OAE5B,SAACgG,GAAD,OAAWA,EAAMmT,YAAc,YAKnCC,GAAUvuB,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,OACxB,qBAAGD,MAAkBC,QAAQ,OACvB,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SACjD,qBAAGxH,MAAkBC,QAAQ,MAInC,qBAAGD,MAAkBC,QAAQ,QAK7BqZ,GAAWxuB,IAAOgW,IAAV,MAIRyY,GAAezuB,IAAOgW,IAAV,MAGT,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBC,QAAQ,MACzC,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SACnC,qBAAGxH,MAAkBC,QAAQ,MAC9B,SAACgG,GAAD,OAAWA,EAAMuT,WAAa,OAGjCC,GAAa3uB,YAAOuY,KAAPvY,CAAH,MACZ,qBAAGkV,MAAkBE,QAAQE,OAAO2L,SCGhC2N,GA9BuB,SAAC,GAAwB,IAAtB3M,EAAqB,EAArBA,KAAMppB,EAAe,EAAfA,SACvCg2B,EAAcjlB,MAAMklB,QAAQ7M,GAC5B8M,EAA6BF,EAAc,aAAe,SAC1DG,EAAwBH,EAAc,OAAS,IAErD,OACE,eAACR,GAAD,CACE1N,cAAY,eACZ2N,WAAYS,EAFd,UAIE,cAAC,GAAD,IACA,cAACN,GAAD,CAAcC,UAAWM,IACzB,cAACR,GAAD,UACG5kB,MAAMklB,QAAQ7M,GACbA,EAAK1X,KAAI,SAAC0kB,GAAD,OACP,cAACV,GAAD,UACE,cAACI,GAAD,CAAY5Z,QAAQ,YAApB,SAAiCka,KADrBA,MAKhB,eAACV,GAAD,WACE,cAACI,GAAD,CAAY5Z,QAAQ,YAApB,SAAiCkN,IAChCppB,W,u6BC9BN,IAAMm0B,GAAoBhtB,YAAO0X,MAAa5C,OAAM,kBAAkB,CAC3EC,QADyD,EAAGA,SACxC,cADW/U,CAAH,MAOjB,gBAAGuiB,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAG2M,EAAH,EAAGA,YAAaha,EAAhB,EAAgBA,MAAhB,MACgB,SAAhBga,EACIC,YADJ,KAEuBja,EAAMC,QAAQ,KAEjC,MAEJ,kBACW,cADX,EAAGoN,OAEC4M,YADJ,MAII,MAGG,gBAAG5M,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAIpB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAGtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAGtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG5B,qBAAGrN,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MC8BjCia,GAhE2D,SAAC,GAcpE,IAbLr1B,EAaI,EAbJA,KACAoe,EAYI,EAZJA,MACAE,EAWI,EAXJA,SACAgX,EAUI,EAVJA,QAUI,IATJnX,aASI,MATI,UASJ,MARJoX,oBAQI,MARW,WAQX,MAPJ7I,cAOI,MAPK,SAOL,MANJ7N,YAMI,MANG,QAMH,EALJvX,EAKI,EALJA,MACAwW,EAII,EAJJA,SACA0X,EAGI,EAHJA,OAGI,IAFJC,kBAEI,MAFS,QAET,EADDrU,EACC,wIAEwByH,eAApBC,EAFJ,EAEIA,OACFC,EAHF,EAEYC,QACSvd,OAAOzL,KAAU8oB,EAAOrd,OAAOzL,IAHpD,EAKoC01B,IAAM1tB,SAASV,GAAS,MAL5D,mBAKGquB,EALH,KAKiBC,EALjB,KAOEC,EAAmB,SAACrqB,GACxBsS,EAAStS,GACToqB,EAAgBpqB,IAGlB,OACE,cAAC,GAAD,CACEgd,OAAQlK,EAAW,QAAUH,EAC7BgX,YAAaM,EACb7M,WAAS,EACTtK,SAAUA,EACV5d,MAAOiQ,QAAQoY,GALjB,SAOE,cAAC,KAAD,CAAyB+M,MAAOC,KAAhC,SACE,qCACE,cAAC,KAAD,yBACEnpB,OAAO,aACPopB,oBAAoB,EACpBC,gBAAgB,EAChBC,gBAAgB,EAChBl2B,KAAMA,EACN0sB,OAAQA,EACRtO,MAAOA,EACPmX,aAAcA,EACdjuB,MAAOquB,EACPQ,WAAS,EACTrY,SAAU,SAACtS,GAAD,OAAUqqB,EAAiBrqB,IACrCgqB,OAAQA,EACR90B,MAAOiQ,QAAQoY,GACflK,KAAMA,GACFuC,GAfN,IAgBEkU,QAASA,EACThX,SAAUA,KAEX3N,QAAQoY,IACP,cAACyK,GAAA,EAAD,UAAiB1K,EAAOrd,OAAOzL,c,mGCnE3C,IAAMif,GAAWhZ,YAAOmwB,KAAPnwB,CAAH,MAGH,gBAAGuiB,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAKlC6N,GAAyE,SAAC,EAE9E5U,GAF6E,QAC3EtD,aAD2E,MACnE,UADmE,EACxDrf,EADwD,EACxDA,SAAaw3B,EAD2C,4CAI7E,cAAC,GAAD,yBAAU7U,IAAKA,EAAK+G,OAAQrK,GAAWmY,GAAvC,aACGx3B,MAIU42B,OAAMa,WAAWF,I,i3GCrBzB,IAAMG,GAASvwB,IAAOgW,IAAV,MACG,qBAAGd,MAAkBE,QAAQE,OAAOC,SAG7C,qBAAGL,MAAkBC,QAAQ,MAS7Bqb,GAAOxwB,IAAO2V,IAAIb,OAAM,WAEnC,MAAO,CAAEqB,IADgB1T,6BAAjBguB,gBADUzwB,CAAH,MAOD,qBAAGkV,MAAkBC,QAAQ,OAGhCub,GAAgB1wB,IAAOgW,IAAV,MAObqD,GAAYrZ,IAAOgW,IAAV,MAUT2a,GAAmB3wB,IAAOgW,IAAV,MAGjB,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAarCyb,IAVQ5wB,YAAOuY,MAAYzD,MAAM,CAC5CC,QAAS,KACTqK,MAAO,UAFYpf,CAAH,MAMN,qBAAGkV,MAAkBC,QAAQ,EAAG,MACjC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAGxBsH,YAAOuY,MAAYzD,MAAM,CAC/CC,QAAS,SADa/U,CAAH,MAIT,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,EAAG,OAGrC0b,GAAkB7wB,IAAOgW,IAAV,MACf,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAKtC2b,GAAsB9wB,YAAO4tB,GAAP5tB,CAAH,MAGnB,qBAAG+Y,QAAyB,UAAY,UAKtC,qBAAGA,QAAyB,UAAY,UAM1CpC,GAAyB3W,YAAO4W,KAAP5W,CAAH,MACxB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAGnC,qBAAGwc,MAAkBE,QAAQC,QAAQ3c,QAerCwjB,IAXuBlc,YAAOuY,MAAYzD,MAAM,CAC3DC,QAAS,WADyB/U,CAAH,MAMb,qBAAGkV,MAAkBC,QAAQ,MAKlBnV,IAAOgW,IAAV,MAGd,qBAAGd,MAAkBC,QAAQ,EAAG,MAElC,qBAAGD,MAAkBC,QAAQ,OAG5B2O,GAAkB9jB,IAAOgW,IAAV,MAKf,qBAAGd,MAAkBC,QAAQ,MAkD7B4b,IA/CmB/wB,IAAOgW,IAAV,MAUWhW,YAAOytB,GAAPztB,CAAH,MAgCVA,YAAOuY,KAAPvY,CAAH,MACb,qBAAGkV,MAAkBE,QAAQ3a,MAAMpC,QAId2H,IAAOgW,IAAV,MAChB,qBAAGd,MAAkBC,QAAQ,EAAG,OAGhC6b,GAAmBhxB,IAAOgW,IAAV,MACb,qBAAGd,MAAkBC,QAAQ,MC9IhC8b,GAA0B,SAACC,GACtC,MAAiB,cAAbA,EACKC,GACe,cAAbD,EACFE,GACe,aAAbF,EACFG,GAEAC,IAsBLC,GAA+B,CACnCx3B,KAAMy3B,OAEH9O,SAAS,qCACT0F,IAAI,EAAG,4CACP3E,KACC,aACA,qCACA,SAACpiB,GAAD,OAAYA,GAAS,IAAIiJ,MAAM,KAAKxC,OAAS,KAEjD/E,IAAKyuB,OAEF9O,SAAS,2BACTe,KAAK,aAAc,sCAAmC,SAACpiB,GAAD,OACrDsjB,GAAYtjB,GAAS,OAEzBE,MAAOiwB,OAEJ9O,SAAS,8BACTnhB,MAAM,yCACTkoB,YAAa+H,OAEV9O,SAAS,iCACT0F,IAAI,GAAI,2CACRC,IAAI,GAAI,2CACXoJ,OAAQD,OAEL9O,SAAS,4BACT4C,MAAM,CAAC,OAAQ,SAAU,UAC5BoM,YAAaF,OAEV9O,SAAS,0CACT2F,IAAI,IAAI/iB,KAAQ,8CAChBqsB,WACAC,UAAU,yCAiBFC,GAAgC,CAC3CC,wBAAyBN,OAEtBlM,MAAM,CACL,gBACA,iBACA,iBACA,mBAEJyM,2BAA4BP,OAC5BQ,yBAA0BR,OAC1BS,oBAAqBT,QAiBVU,GAAgC,CAC3CC,WAAYX,OAETlM,MAAM,CACL,SACA,QACA,oBACA,oBACA,eACA,wBACA,mBACA,eACA,kBACA,UACA,YAED5C,SAAS,yCACZ0P,SAAUZ,OACVa,iBAAkBb,OAAalM,MAAML,GAAU1a,KAAI,SAACiC,GAAD,OAAUA,EAAKnL,UAClEixB,UAAWd,QAWAe,GAA+B,CAC1CC,eAAgBhB,OAAYG,YAexBc,GAA2B,CAC/BzvB,SAAUwuB,OAEP9O,SAAS,6BACTe,KACC,kBACA,2EACA,SAACpiB,GAAD,OAAW2jB,GAAyB3jB,GAAS,OAEjDqxB,qBAAsBlB,OAEnB9O,SAAS,kDACT4C,MAAM,CAACkM,KAAQ,YAAa,IAAK,8BACpCmB,cAAenB,OAEZoB,OACC,EAAC,GACD,yEAIOC,GAAgB,CAC3B,CAAExxB,MAAO,OAAQ8W,MAAO,aACxB,CAAE9W,MAAO,SAAU8W,MAAO,YAC1B,CAAE9W,MAAO,QAAS8W,MAAO,QAGd2a,GAAiC,CAC5C,CAAEzxB,MAAO,gBAAiB8W,MAAO,mBACjC,CAAE9W,MAAO,iBAAkB8W,MAAO,oBAClC,CAAE9W,MAAO,iBAAkB8W,MAAO,oBAClC,CAAE9W,MAAO,iBAAkB8W,MAAO,mBAGvB4a,GAAoC,CAC/C,CAAE1xB,MAAO,EAAG8W,MAAO,OACnB,CAAE9W,MAAO,EAAG8W,MAAO,WAGR6a,GAAoB,CAC/B,CAAE3xB,MAAO,SAAU8W,MAAO,YAC1B,CAAE9W,MAAO,QAAS8W,MAAO,cACzB,CAAE9W,MAAO,oBAAqB8W,MAAO,4BACrC,CAAE9W,MAAO,oBAAqB8W,MAAO,gBACrC,CAAE9W,MAAO,eAAgB8W,MAAO,cAChC,CAAE9W,MAAO,wBAAyB8W,MAAO,uBACzC,CAAE9W,MAAO,mBAAoB8W,MAAO,4BACpC,CAAE9W,MAAO,eAAgB8W,MAAO,kBAChC,CAAE9W,MAAO,kBAAmB8W,MAAO,kBACnC,CAAE9W,MAAO,UAAW8W,MAAO,eAC3B,CAAE9W,MAAO,UAAW8W,MAAO,UAGhB8a,GAAwB,CACnC,CAAE5xB,MAAO,OAAQ8W,MAAO,wBACxB,CAAE9W,MAAO,mBAAoB8W,MAAO,mBACpC,CAAE9W,MAAO,wBAAyB8W,MAAO,iCACzC,CAAE9W,MAAO,sBAAuB8W,MAAO,+BACvC,CAAE9W,MAAO,wBAAyB8W,MAAO,8BACzC,CAAE9W,MAAO,sBAAuB8W,MAAO,4BACvC,CAAE9W,MAAO,qBAAsB8W,MAAO,8BACtC,CAAE9W,MAAO,mBAAoB8W,MAAO,6BASzB+a,GAAkC,SAC7CjN,EACAiL,GAF6C,MAGrB,CACxBhH,SAAUiJ,GAAgBlN,GAC1BmN,cAAeC,GAAqBpN,EAAQiL,GAC5CoC,cAAeC,GAAqBtN,EAAQiL,KAGxCiC,GAAkB,SAAClN,GACvB,MAAO,CACLlsB,KAAMksB,EAAOlsB,KACbgJ,IAAKihB,GAAWiC,EAAOljB,KACvBxB,MAAO0kB,EAAO1kB,MACdkoB,YAAazF,GAAW,KAAD,OAAMiC,EAAOwD,cACpCzmB,SAAUijB,EAAOjjB,SACjByuB,OAAQxL,EAAOwL,QAAU,QACzBC,YAAa/qB,YAAO,IAAIrB,KAAK2gB,EAAOyL,aAAe,IAAK,gBAItD2B,GAAuB,SAC3BpN,EACAiL,GAEA,GAAiB,cAAbA,GAAyC,aAAbA,EAGhC,MAAO,CACLY,wBAAyB7L,EAAO6L,8BAA2BnuB,EAC3DouB,2BAA4B9L,EAAO8L,iCAA8BpuB,EACjEquB,yBACEtnB,QAAQub,EAAO+L,gCAA6BruB,EAC9CsuB,oBAAuBhM,EAAO+L,yBAC1B/L,EAAOgM,yBACPtuB,EACJ6uB,eAAgBvM,EAAOuM,qBAAkB7uB,IAIvC4vB,GAAuB,SAC3BtN,EACAiL,GAEA,GAAiB,cAAbA,EAGJ,MAAO,CACLkB,SAAUnM,EAAOmM,eAAYzuB,EAC7B0uB,iBAAkBpM,EAAOoM,uBAAoB1uB,EAC7CwuB,WAAYlM,EAAOkM,iBAAcxuB,EACjC2uB,UAAWrM,EAAOqM,gBAAa3uB,IAiC7BwtB,GAA4BK,OAAajQ,MAAb,uCAC7BgQ,IACAM,IACAY,KAGCpB,GAA2BG,OAAajQ,MAAb,uCAC5BgQ,IACAgB,IACAE,KAGCrB,GAA4BI,OAAajQ,MAAb,uCAC7BgQ,IACAW,IACAO,KAGCnB,GAA0BE,OAAajQ,MAAb,2BAC3BgQ,IACAkB,KAGQe,GAAiB,+DAxT1B,CACFpJ,QAAS,KACTrwB,KAAM,GACNgJ,IAAK,GACLxB,MAAO,GACPkoB,YAAa,GACbgI,OAAQ,GACRC,YAAa,KA+CX,CACFI,wBAAyB,GACzBC,2BAA4B,GAC5BC,yBAA0B,GAC1BC,oBAAqB,KAwBnB,CACFE,WAAY,GACZC,SAAU,GACVC,iBAAkB,GAClBC,UAAW,KA6BT,CACFE,eAAgB,KAamB,CACnCxvB,SAAU,GACV0vB,qBAAsB,GACtBC,eAAe,IC0HXc,GAMD,SAAC,GAA2C,IAAzCxN,EAAwC,EAAxCA,OAAQC,EAAgC,EAAhCA,cAAewN,EAAiB,EAAjBA,WACvBC,EAAYhtB,YAAO,IAAIrB,KAAK,cAAe,cAEjD,OACE,qCACE,cAACqrB,GAAD,UACE,cAAC,GAAD,CACE9Y,SAAU,SAAC9Z,GAAD,OAAUmoB,EAAc,UAAWnoB,IAC7CqpB,YAAY,MAGhB,eAACwG,GAAD,WACE,cAACC,GAAD,CAAiB9Y,QAAQ,YAAzB,wCAIA,cAACyR,GAAD,CACEvD,GAAI6K,GACJ/zB,KAAK,OACLme,MAAM,UACNC,MAAM,gBACNsO,OAAO,SACPC,WAAY,CAAE,cAAe,UAE/B,cAACF,GAAD,CACEvD,GAAI6K,GACJ/zB,KAAK,MACLme,MAAM,UACNC,MAAM,MACNna,KAAK,MACLyoB,OAAO,SACPC,WAAY,CAAE,cAAe,OAC7BrlB,MAAO0iB,GAAQkC,EAAOljB,OAExB,cAACyjB,GAAD,CACEvD,GAAI6K,GACJ/zB,KAAK,QACLme,MAAM,UACNla,KAAK,QACLma,MAAM,SACNsO,OAAO,SACPC,WAAY,CAAE,cAAe,WAE/B,cAACF,GAAD,CACEvD,GAAI6K,GACJ/zB,KAAK,cACLme,MAAM,UACNC,MAAM,WACNna,KAAK,MACLyoB,OAAO,SACPC,WAAY,CAAE,cAAe,eAC7B7O,SAAU,SAACC,GACToO,EAAc,cAAejC,GAAUnM,EAAEC,OAAO1W,WAGpD,cAAC,GAAD,CAEE4hB,GAAI,SAAC9H,GAAD,OAAgB,cAAC8S,GAAD,eAAwB9S,KAC5CphB,KAAK,SACLoe,MAAM,OACND,MAAM,UACN0b,mBAAoB,CAClB,cAAe,UAPnB,SAUGf,GAActoB,KAAI,SAACiC,GAAD,OACjB,cAAC,GAAD,CAAiCnL,MAAOmL,EAAKnL,MAAO6W,MAAM,UAA1D,SACG1L,EAAK2L,OADa3L,EAAKnL,YAK9B,cAAC,GAAD,CACEtH,KAAK,cACLoe,MAAM,qBACND,MAAM,UACN7W,MAAO4kB,EAAOyL,YACd7Z,SAAU,SAACtS,GACT2gB,EAAc,cAAe3gB,IAE/BsuB,YAAY,aACZpN,OAAO,SACP7N,KAAK,SACL8N,WAAY,CACV,cAAe,cACf2B,IAAKsL,GAEPpE,OAAQmE,EACRI,gBAAiB,CAAEC,QAAQ,GAC3BvE,WAAW,gBAOfwE,GAED,SAAC,GAAgB,IAAd/N,EAAa,EAAbA,OACN,OACE,qCACE,cAAC4H,GAAD,CAAiB9Y,QAAQ,YAAY4L,cAAY,kBAAjD,sCAIA,eAACkQ,GAAD,WACE,cAACD,GAAD,yDACA,cAAC,GAAD,CAEE3N,GAAI,SAAC9H,GAAD,OAAgB,cAAC8S,GAAD,eAAwB9S,KAC5CphB,KAAK,0BACLme,MAAM,UACNC,MAAM,uBACNyb,mBAAoB,CAClB,cAAe,2BAPnB,SAUGd,GAA+BvoB,KAAI,SAACiC,GAAD,OAClC,cAAC,GAAD,CAAiCnL,MAAOmL,EAAKnL,MAAO6W,MAAM,UAA1D,SACG1L,EAAK2L,OADa3L,EAAKnL,YAM9B,cAACuvB,GAAD,6DACA,cAACpK,GAAD,CACEvD,GAAI6K,GACJ/zB,KAAK,6BACLme,MAAM,UACNC,MAAM,gCACNsO,OAAO,SACPwN,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,gCAG/B,cAACkK,GAAD,4DACA,cAAC,GAAD,CAEE3N,GAAI,SAAC9H,GAAD,OAAgB,cAAC8S,GAAD,eAAwB9S,KAC5CphB,KAAK,2BACLme,MAAM,UACNC,MAAM,uBACNyb,mBAAoB,CAClB,cAAe,4BAPnB,SAUGb,GAAkCxoB,KAAI,SAACiC,GAAD,OACrC,cAAC,GAAD,CAAiCnL,MAAOmL,EAAKnL,MAAO6W,MAAM,UAA1D,SACG1L,EAAK2L,OADa3L,EAAKnL,cAK3B4kB,EAAO+L,0BACR,cAACxL,GAAD,CACEvD,GAAI6K,GACJ/zB,KAAK,sBACLme,MAAM,UACNC,MAAM,mBACNsO,OAAO,SACPC,WAAY,CAAE,cAAe,gCAQnCyN,GAAkC,WACtC,OACE,qCACE,cAACtG,GAAD,CAAiB9Y,QAAQ,YAAY4L,cAAY,kBAAjD,sCAIA,cAAC,GAAD,CAEEsC,GAAI,SAAC9H,GAAD,OAAgB,cAAC8S,GAAD,eAAwB9S,KAC5CphB,KAAK,iBACLme,MAAM,UACNC,MAAM,2BACNyb,mBAAoB,CAClB,cAAe,kBAPnB,SAUGX,GAAsB1oB,KAAI,SAAC6pB,GAAD,OACzB,cAAC,GAAD,CACE/yB,MAAO+yB,EAAqB/yB,MAD9B,SAIG+yB,EAAqBjc,OAFjBic,EAAqB/yB,gBAUhCgzB,GAED,SAAC,GAAgB,IAAdpO,EAAa,EAAbA,OACN,OACE,qCACE,cAAC4H,GAAD,CAAiB9Y,QAAQ,YAAY4L,cAAY,qBAAjD,sCAIA,cAAC,GAAD,CAEEsC,GAAI,SAAC9H,GAAD,OAAgB,cAAC8S,GAAD,eAAwB9S,KAC5CphB,KAAK,aACLme,MAAM,UACNC,MAAM,eACNyb,mBAAoB,CAClB,cAAe,cAPnB,SAUGZ,GAAkBzoB,KAAI,SAACiC,GAAD,OACrB,cAAC,GAAD,CAAiCnL,MAAOmL,EAAKnL,MAA7C,SACGmL,EAAK2L,OADa3L,EAAKnL,YAM9B,cAACmlB,GAAD,CACEvD,GAAI6K,GACJ/zB,KAAK,WACLme,MAAM,UACNC,MAAM,wBACNsO,OAAO,SACPzoB,KAAK,MACL0oB,WAAY,CAAE,cAAe,YAC7BrlB,MAAO2iB,GAAWiC,EAAOmM,UAAY,MAGvC,cAAC,GAAD,CAEEnP,GAAI,SAAC9H,GAAD,OAAgB,cAAC8S,GAAD,eAAwB9S,KAC5CphB,KAAK,mBACLme,MAAM,UACNC,MAAM,KACNyb,mBAAoB,CAClB,cAAe,oBAPnB,SAUG3O,GAAU1a,KAAI,SAACiC,GAAD,OACb,cAAC,GAAD,CAAiCnL,MAAOmL,EAAKnL,MAA7C,SACGmL,EAAK2L,OADa3L,EAAKnL,YAM9B,cAACmlB,GAAD,CACEvD,GAAI6K,GACJ/zB,KAAK,YACLme,MAAM,UACNC,MAAM,gBACNsO,OAAO,SACPC,WAAY,CAAE,cAAe,mBAM/B4N,GAGD,SAAC,GAAiC,IAA/BrO,EAA8B,EAA9BA,OAAQtC,EAAsB,EAAtBA,gBACd,OACE,eAACiK,GAAD,WACE,cAACC,GAAD,CAAiB9Y,QAAQ,YAAzB,4BAEA,cAACyR,GAAD,CACEvD,GAAI+K,GACJ9V,MAAM,UACNne,KAAK,WACLoe,MAAM,QACNsO,OAAO,SACPzD,aAAa,MACb0D,WAAY,CACV,cAAe,WACf6N,aAAc,eACdC,KAAM,CACJD,aAAc,UAIpB,cAAC/N,GAAD,CACEvD,GAAI+K,GACJ9V,MAAM,UACNne,KAAK,uBACLoe,MAAM,kBACNsO,OAAO,SACPzD,aAAa,MACb0D,WAAY,CACV,cAAe,uBACf6N,aAAc,eACdC,KAAM,CACJD,aAAc,UAIpB,cAACzN,GAAD,CACE9jB,SAAUijB,EAAOjjB,SACjB2gB,gBAAiBA,QAMV8Q,GApjBkB,WAC/B,IAAMld,EAAUC,cACVzW,EAAW2B,cACXgyB,EAAgBxX,iBAAuC,MAHxB,EAK+B9e,KAA5DC,EAL6B,EAK7BA,eAAgBM,EALa,EAKbA,kBAAmBG,EALN,EAKMA,qBALN,EAM4C6D,qBAAWd,IAApFqB,EAN6B,EAM7BA,OAAeyxB,EANc,EAMrBl6B,MAAoBmI,EANC,EAMDA,gBAAiBL,EANhB,EAMgBA,SAAUD,EAN1B,EAM0BA,cAN1B,EAOSP,oBAAS,GAPlB,mBAO9B4hB,EAP8B,KAObiC,EAPa,OAQH7jB,oBAAS,GARN,mBAQ9B6yB,EAR8B,KAQnBC,EARmB,OASP9yB,oBAAS,GATF,mBAS9BI,EAT8B,KASrBC,EATqB,KAWtB9D,EAAwBiG,IAAGC,MAAMzD,EAAS0D,QAAjDhI,MAERiE,qBAAU,WACJ6B,GAAYqyB,IACdtyB,GAAc,GACdiV,EAAQjP,KAAK,QAEd,CAAC/F,EAAUqyB,IAEd,IAAME,EAA6BrqB,mBAAQ,WAEzC,GAA2B,MAAvBnM,EAAJ,CAKA,IAAMqL,ED6OiC,SACzClN,GAEA,IAEE,IAAMkN,EAAU/E,KAAIC,OAAOpI,GAC3B,MAAO,CACLuC,GAAI2K,EAAQ3K,GACZ+1B,OAAQprB,EAAQorB,OAChBh7B,KAAM4P,EAAQ5P,MAAQ,GACtBgJ,IAAK4G,EAAQ5G,KAAO,GACpB0mB,YAAaxF,GAAUta,EAAQ8f,aAAe,IAC9CloB,MAAOoI,EAAQpI,OAAS,IAE1B,MAAOpE,GAEP,OADAC,IAAwBD,GACjB,MC7PS63B,CAA4BxvB,OAAOlH,IAMnD,OAAOqL,EAWP4N,EAAQnT,QAAQ,OAVf,CAAC9F,IAEE4yB,EAAWzmB,mBAAQ,WDzEU,IAACsqB,EC0ElC,GAAKD,EAGL,OD5Ea,KADqBC,EC6EN,OAACD,QAAD,IAACA,OAAD,EAACA,EAA4BC,QD3ElD,YACa,IAAXA,EACF,WACa,IAAXA,EACF,YAEA,YCsEN,QAACD,QAAD,IAACA,OAAD,EAACA,EAA4BC,SAMhC,IAAME,EAAyBvtB,OAAM,OAACotB,QAAD,IAACA,OAAD,EAACA,EAA4B91B,IAElE0B,qBAAU,WACR/B,EAAkBs2B,GAAwB9xB,MAAK,YAA4B,EAAzBO,oBAE9C6T,EAAQjP,KAAK,eAGhB,CAAC2sB,IAEJv0B,qBACE,WACMi0B,GACF1zB,IAAMxG,MAAM6E,GAAoBq1B,MAGpC,CAACA,IAGH,IAAMO,EAAe,WAAO,IAAD,IACjBnyB,GADiB,UACT2xB,EAAcrX,eADL,aACT,EAAuB4I,QAA/BljB,IACAC,GAFiB,UAEJ0xB,EAAcrX,eAFV,aAEJ,EAAuB4I,QAApCjjB,SACR,OAAOE,EAAO8gB,GAAWjhB,GAAO,IAAKC,IAGjCmyB,EAA6B,SAAC/K,EAAe3iB,GACjD,OAAO,IAAIjJ,SAAc,SAACC,GACxB22B,WAAU,sBAAC,sBAAA94B,EAAA,+EAEDwC,EAAqBsrB,EAAS3iB,GAF7B,OAGPhJ,IAHO,gDAKPwC,IAAMxG,MACJ,qFAEF2C,IAAA,MARO,yDAUR,OAIDi4B,EAA0B,uCAAG,8BAAA/4B,EAAA,yDAC3Bg5B,EAD2B,UAChBZ,EAAcrX,eADE,aAChB,EAAuB4I,OACxC7jB,GAAW,GAEN8uB,EAJ4B,wDAMjC/sB,OAAOY,aAAa2D,QAAQ,iBAAkBxD,KAAKuD,UAAU,CAAE7J,OAAQq2B,EAAwB1vB,MAAO,IAAID,MAAQiwB,iBANjF,kBAQ1Bl3B,EACL60B,GAAgC,eAEzBoC,GAELpE,GAEF1rB,OAAOlH,IAEN6E,KATI,uCASC,WAAO5H,GAAP,SAAAe,EAAA,sEACE44B,IADF,gCAEG35B,GAFH,2CATD,uDAaJ4H,KAbI,uCAaC,6BAAA7G,EAAA,yDAAS0C,EAAT,EAASA,GACY,OAAb,OAARs2B,QAAQ,IAARA,OAAA,EAAAA,EAAUlL,SADV,gCAEI+K,EAA2BG,EAASlL,QAASprB,GAFjD,2CAbD,uDAkBJ9B,OAAM,SAACC,GAA+B,IAAD,IAIuB,EAHrDoC,EAAiBD,GAAoBnC,GACrCq4B,EAAU,UAAGr4B,EAAI5B,gBAAP,iBAAG,EAAcsC,KAAK43B,eAAtB,aAAG,EAA4BxoB,IAC3CuoB,EACE3nB,OAAOC,KAAK0lB,IAAmB/zB,SAAS+1B,KAC1C,UAAAd,EAAcrX,eAAd,SAAuBqY,cACrBF,EACAj2B,GAAkB,KAItB0B,IAAMxG,MAAM8E,MAGf8D,QAhCI,sBAgCI,sBAAA/G,EAAA,sEACDsG,IADC,OAEPiyB,GAAa,GACbzyB,GAAW,GAHJ,6CAxCsB,2CAAH,qDA+ChC,OAAK8uB,EAKH,qCACE,cAAC,GAAD,CACEnS,cACE,cAAC,GAAD,UACE,cAACyR,GAAD,QAIN,eAACD,GAAD,WACE,cAACQ,GAAD,UACE,cAAC,GAAD,CACE9O,KACE,kHAIN,cAAC,GAAD,UACE,cAAC,KAAD,CACEoE,kBAAkB,EAClB8D,SAAU,SAAC3O,GAAD,OAAUkZ,EAAcrX,QAAU7B,GAC5CuK,cAAa,2BACRyN,IACAsB,GAEL1P,iBAAkB6L,GAAwBC,GAC1ClL,SAAUqP,EARZ,SAUG,YAAoD,IAAjDpP,EAAgD,EAAhDA,OAAQC,EAAwC,EAAxCA,cAAerD,EAAyB,EAAzBA,OAAQ6Q,EAAiB,EAAjBA,WACjC,OACE,cAAC,KAAD,UACE,eAAC1C,GAAD,WACE,cAAC,GAAD,CACE9K,cAAeA,EACfD,OAAQA,EACRyN,WAAYA,EACZ7Q,OAAQA,IAEV,cAACiO,GAAD,CAAqB/X,QAAsB,aAAbmY,EAA9B,SACE,cAAC,GAAD,MAEF,cAACJ,GAAD,CAAqB/X,QAAsB,cAAbmY,EAA9B,SACE,cAAC,GAAD,CAAwBjL,OAAQA,MAElC,cAAC6K,GAAD,CAAqB/X,QAAsB,cAAbmY,EAA9B,SACE,cAAC,GAAD,CAAwBjL,OAAQA,MAGlC,cAAC,GAAD,CACEA,OAAQA,EACRtC,gBAAiBA,IAGnB,eAAC,GAAD,WACE,gCACE,cAAC,GAAD,CACE3L,QACE,cAAC2d,GAAA,EAAD,CACE57B,KAAK,gBACLsH,MAAO4kB,EAAO0M,cACd9a,SAAU,kBACRqO,EACE,iBACCD,EAAO0M,kBAKhBxa,MACE,mBACEyd,KAAK,4DACL7d,OAAO,SACP8d,IAAI,aAHN,6EAUHhT,EAAO8P,eACN,cAACpF,GAAA,EAAD,CAAgB9yB,OAAK,EAArB,SACGooB,EAAO8P,mBAKd,cAAC,GAAD,UACE,cAAC,GAAD,CACEta,SAAUlW,EACVnE,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNyI,cAAY,SACZvI,QAAS,kBAAMwN,GAAmB,IANpC,4CA1Fb,M,kcChMJ,IAAMkQ,GAAc91B,YAAO+1B,KAAP/1B,CAAH,MACZ,qBAAGkV,MAAkBC,QAAQ,EAAG,MACjC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAC1B,qBAAGwc,MAAkBE,QAAQC,QAAQ3c,QAC9C,qBAAGwc,MAAkBC,QAAQ,EAAG,MAC1B,qBAAGD,MAAkBC,QAAQ,MAGhC,qBAAGD,MAAkBC,QAAQ,QAE5B,qBAAGD,MAAkB8B,WAAWgf,SAAS9e,YAExC,qBAAGhC,MAAkBC,QAAQ,QAChC,qBAAGD,MAAkBC,QAAQ,EAAG,MC4DhC8gB,GAzDyC,SAAC,GAKlD,IAJLC,EAII,EAJJA,UACAC,EAGI,EAHJA,aACAte,EAEI,EAFJA,SACAue,EACI,EADJA,kBACI,EACgCr0B,mBAAS,IADzC,mBACGs0B,EADH,KACeC,EADf,KAGE/e,EAAUC,cAEhB9W,qBAAU,kBAAM41B,EAAcH,GAAgB,MAAK,CAACA,IAEpD,IAAMI,EAAYtjB,cAAqB,SAAC5R,GACtC,IAAMm1B,EAAS,2BACVjyB,IAAGC,MAAM+S,EAAQxW,SAAS0D,SADhB,mBAEZyxB,EAAY70B,EAAK,WAAOA,EAAP,UAAkBsC,IAEhC8yB,EAASlyB,IAAGmyB,aAAa,CAC7B94B,IAAK2Z,EAAQxW,SAASC,SACtBzG,MAAOi8B,IAETjf,EAAQjP,KAAKmuB,GACTL,GAAmBA,EAAkB/0B,KACxC,KAEH,OACE,cAACy0B,GAAD,CACEz0B,MAAOg1B,EACPxe,SAAU,SAACC,GACTwe,EAAcxe,EAAEC,OAAO1W,OACvBk1B,EAAU/jB,SAASsF,EAAEC,OAAO1W,OACxBwW,GAAUA,EAASC,IAEzB+b,YAAY,yBACZnN,WAAY,CACV,cAAe,eAEjBE,aACEyP,EACE,cAACxP,GAAA,EAAD,CAAgBnI,SAAS,MAAzB,SACE,cAACiY,GAAA,EAAD,CACEve,QAAS,WACPke,EAAc,IACdC,EAAU/jB,SAAS,SAKzB,cAACqU,GAAA,EAAD,CAAgBnI,SAAS,MAAzB,SACE,cAACkY,GAAA,EAAD,SCpEZ,SAAS,KAA2Q,OAA9P,GAAW/oB,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,OAAQ,CACnD8C,EAAG,ozCACHC,KAAM,UAGR,SAAS+b,GAAe7b,EAAMC,GAC5B,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTR,KAAM,OACNS,MAAO,6BACPC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,IAGpB,IAAI,GAA0B,aAAiBuyB,ICpBzCp5B,IDqBS,ICrBE,iBAEXuN,GAAyC,CAC7C5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA0EMq8B,GAvEI,WAAO,IAChB34B,EAAab,KAAba,SADe,EAEGoC,qBACxBkJ,KACAuB,IAJqB,mBAEhB7K,EAFgB,KAETM,EAFS,KAOjBlC,EAAOf,sBAAW,uCAAC,WAAOK,GAAP,eAAAvB,EAAA,sEAErBmE,EAAS,CAAEzC,KAAM,YAFI,SAGEhF,EAAMuF,KAAN,UAAcd,IAAYI,GAH5B,cAGftC,EAHe,OAIrBkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAJxB,kBAKdW,QAAQC,QAAQlD,IALF,uCAOrBkF,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPZ,kBAQdnL,QAAQE,OAAR,OARc,yDAAD,sDAUrB,IAEG2M,EAAU7N,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,sEAExBmE,EAAS,CAAEzC,KAAM,YAFO,SAGDpD,IAAiBiE,IAAjB,UAAwBpB,GAAxB,YAAoCuB,IAHnC,cAGlBzD,EAHkB,OAIxBkF,EAAS,CAAEzC,KAAM,YAAa2L,QAASpO,EAASsC,OAJxB,kBAKjBtC,EAASsC,MALQ,gCAOxB4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPT,yDAAD,sDASxB,IAEGotB,EAASv5B,sBAAW,sBAAC,4BAAAlB,EAAA,sEAEvBmE,EAAS,CAAEzC,KAAM,YAFM,SAGAhF,EAAM6F,IAAN,UAAapB,KAHb,cAGjBlC,EAHiB,OAIvBkF,EAAS,CAAEzC,KAAM,UAAW2L,QAASpO,EAASsC,OAJvB,kBAKhBtC,EAASsC,MALO,gCAOvB4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPV,yDASxB,IAEGqtB,EAAgBx5B,sBAAW,uCAAC,WAAO4N,GAAP,eAAA9O,EAAA,sEAE9BmE,EAAS,CAAEzC,KAAM,YAFa,SAGPhF,EAAM6F,IAAN,UAAapB,GAAb,YAAiC,CAAE2N,WAH5B,cAGxB7P,EAHwB,OAI9BkF,EAAS,CAAEzC,KAAM,aAAc2L,QAASpO,EAASsC,OAJnB,kBAKvBtC,EAASsC,MALc,gCAO9B4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPH,yDAAD,sDAS9B,IAEG5K,EAAoBvB,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,+EAEX6B,EAAS,kCAAD,OAAmCa,IAFhC,cAE5BzD,EAF4B,yBAG3BiD,QAAQC,QAAQlD,IAHW,yDAK3BiD,QAAQE,OAAR,OAL2B,yDAAD,sDAOlC,IAEH,OAAO,2BACFyB,GADL,IAEE5B,OACAQ,oBACAsM,UACA0rB,SACAC,mB,qXCnFG,IAAMC,GAAwBj3B,YAAOiW,GAAPjW,CAAH,MAEV,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QAIhD6+B,GAAoBl3B,YAAOm3B,KAAPn3B,CAAH,MAKjBo3B,GAA0Bp3B,YAAOq3B,KAAPr3B,CAAH,MC2BrBs3B,GA5BmC,SAAC,GAI5C,IAHL/gB,EAGI,EAHJA,KACAghB,EAEI,EAFJA,QACAC,EACI,EADJA,UAEA,OACE,cAACP,GAAD,CAAuB1gB,KAAMA,EAAMghB,QAASA,EAA5C,SACE,eAAC9gB,GAAA,EAAD,WACE,cAACD,GAAA,EAAD,UACE,cAAC0gB,GAAD,MAEF,cAACE,GAAD,CAAyBhY,MAAM,SAA/B,sHAIA,eAACoJ,GAAA,EAAD,WACE,cAAC,GAAD,CAAcpQ,QAASmf,EAASrf,MAAM,UAAtC,oBAGA,cAAC,GAAD,CAAcE,QAASof,EAAWziB,QAAQ,OAAOmD,MAAM,UAAvD,2B,qbC9BH,IAAMuf,GAAOz3B,YAAO03B,KAAP13B,CAAH,MAID,qBAAGkV,MAAkBC,SAAS,MAGjCwiB,GAAgB33B,IAAOgW,IAAV,MAMd,qBAAGd,MAAkBC,QAAQ,EAAG,MAG/BN,GAAS7U,YAAO4U,GAAP5U,CAAH,MCCb+lB,GAA4B,CAChC6R,QAAS,IAGLxS,GAAmBoM,OAAajQ,MAAM,CAC1CqW,QAASvS,OAAa3C,SAAS,uCAsDlBmV,GAnDkC,SAAC,GAK3C,IAJLC,EAII,EAJJA,SACA9R,EAGI,EAHJA,SACAuR,EAEI,EAFJA,QACAhhB,EACI,EADJA,KAEA,OACE,cAACiC,GAAD,CAAmBjC,KAAMA,EAAMjS,MAAO,uBAAtC,SACE,cAAC,KAAD,CACE+hB,kBAAkB,EAClBN,cAAeA,GACfX,iBAAkBA,GAClBY,SAAUA,EAJZ,SAMG,WACC,OACE,eAACyR,GAAD,CAAMlR,YAAY,EAAlB,UACE,cAAC,GAAD,CACExsB,KAAK,UACLoe,MAAM,WACNyb,mBAAoB,CAClB,cAAe,kBAEjB1b,MAAM,QANR,SAQG4f,EAASvtB,KAAI,SAACqtB,GAAD,OACZ,cAAC,GAAD,CAEEv2B,MAAOu2B,EAAQ54B,GACfkZ,MAAM,UAHR,SAKG0f,EAAQ79B,MAJJ69B,EAAQ54B,SAQnB,eAAC24B,GAAD,WACE,cAAC,GAAD,CAAQ/e,KAAK,SAASV,MAAM,UAAUE,QAASmf,EAA/C,sBAGA,cAAC,GAAD,CAAQv5B,KAAK,SAAS4a,KAAK,SAASV,MAAM,UAA1C,mC,4sGC9CT,ICmBF6f,GDnBQC,GAAeh4B,YAAOi4B,KAAPj4B,CAAH,MASZk4B,GAAkBl4B,YAAOm4B,KAAPn4B,CAAH,MACjB,qBAAGkV,MAAkBE,QAAQE,OAAOC,SAKlC6iB,GAAmBp4B,YAAOq4B,KAAPr4B,CAAH,MAClB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAWnC4/B,IANgBt4B,YAAOu4B,KAAPv4B,CAAH,MACf,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAKhBsH,YAAOw4B,KAAPx4B,CAAH,MAClB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,SAKnC+/B,GAAqBz4B,YAAO04B,KAAP14B,CAAH,MACpB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAKnCigC,GAAiB34B,YAAO44B,KAAP54B,CAAH,MAChB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAKnCmgC,GAAoB74B,YAAO84B,KAAP94B,CAAH,MACnB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAKnCsnB,GAAkBhgB,YAAO+4B,KAAP/4B,CAAH,MACN,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAChD,qBAAGwc,MAAkBE,QAAQE,OAAOC,SAC5B,qBAAGL,MAAkBC,QAAQ,QACnC,qBAAGD,MAAkBC,QAAQ,QACzB,qBAAGD,MAAkBC,QAAQ,QAKjC6jB,GAAkBh5B,IAAO2V,IAAIb,OAAM,WAE9C,MAAO,CAAEqB,IADgB1T,6BAAjBguB,gBADqBzwB,CAAH,MAOZ,qBAAGkV,MAAkBC,QAAQ,QAC1B,qBAAGD,MAAkBC,QAAQ,QAGnC8jB,GAAej5B,IAAOgW,IAAV,MACH,qBAAGd,MAAkBE,QAAQC,QAAQhd,QAM9C6gC,GAAal5B,YAAOm5B,KAAPn5B,CAAH,MAIVo5B,GAAiBp5B,YAAOq5B,KAAPr5B,CAAH,MAEH,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAIzD4c,GAAqBt5B,YAAOu5B,KAAPv5B,CAAH,MACpB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAGnCmgB,GAAa7Y,YAAOw5B,IAAPx5B,CAAH,MAIVy5B,GAAiBz5B,YAAO8Y,KAAP9Y,CAAH,MAQd05B,GAAe15B,IAAO+d,KAAV,MACd,qBAAG7I,MAAkBE,QAAQC,QAAQ3c,QAG7B,qBAAGwc,MAAkBC,QAAQ,OAGnCwkB,GAAe35B,IAAO+d,KAAV,MACd,qBAAG7I,MAAkBE,QAAQC,QAAQ3c,QAInCkhC,GAAU55B,IAAO2V,IAAV,MAGH,qBAAGT,MAAkBC,QAAQ,QAGjC0kB,GAAgB75B,IAAOgW,IAAV,MAGT,qBAAGd,MAAkBC,QAAQ,QAGjC2kB,GAAa95B,IAAOgW,IAAV,MAIV+jB,GAAe/5B,IAAOgW,IAAV,MACH,qBAAGd,MAAkBE,QAAQC,QAAQhd,QACvC,qBAAG6c,MAAkBC,QAAQ,MAGpC6kB,GAAeh6B,YAAOoe,KAAPpe,CAAH,MACd,qBAAGkV,MAAkBE,QAAQE,OAAOC,SAOlC0kB,GAAmBj6B,IAAO+d,KAAV,MACZ,qBAAG7I,MAAkBC,QAAQ,ME/I/B+kB,GAZiC,SAAC,GAAqB,IAAnB/hB,EAAkB,EAAlBA,MAAOgiB,EAAW,EAAXA,KACxD,OACE,eAACf,GAAD,CAAgBgB,QAAM,EAAtB,UACE,cAACC,GAAA,EAAD,UAAeF,IACf,eAACN,GAAD,WACE,cAACH,GAAD,4BACA,cAACC,GAAD,UAAexhB,WCDRa,GAT2B,SAAC,GAA8B,IAA5Bb,EAA2B,EAA3BA,MAAOgiB,EAAoB,EAApBA,KAAM/hB,EAAc,EAAdA,QACxD,OACE,eAACghB,GAAD,CAAgBgB,QAAM,EAAChiB,QAASA,EAAhC,UACE,cAACiiB,GAAA,EAAD,UAAeF,IACf,cAACb,GAAD,UAAqBnhB,S,SF2BtB4f,K,sCAAAA,E,2CAAAA,Q,KAKL,IAiJeE,GAjJuB,SAAC,GAGhC,IAAD,IAFJqC,EAEI,EAFJA,mBACAC,EACI,EADJA,aACI,EAC0B53B,qBAAWd,IAAjCX,EADJ,EACIA,QAASqB,EADb,EACaA,SACTw0B,EAAWD,KAAXC,OACFxf,EAAUC,cAEVgjB,EAAmB,OAAGj4B,QAAH,IAAGA,GAAH,UAAGA,EAAUP,YAAb,iBAAG,EAAgBgC,YAAnB,aAAG,EAAsBE,kBAL9C,EAMgDnC,oBAAS,GANzD,mBAMG04B,EANH,KAMuBC,EANvB,OAOsD34B,oBAAS,GAP/D,mBAOG44B,EAPH,KAO0BC,EAP1B,OAQ4B74B,mBAAyB,IARrD,mBAQG+1B,EARH,KAQa+C,EARb,OAS0C94B,mBAC5Cg2B,GAAgB+C,SAVd,mBASGC,EATH,KASoBC,EATpB,KAYqBC,EAA0BhxB,GAAa,aAAc1H,GAAtEuI,gBACiBowB,EAAsCjxB,GAC7D,uBADMa,gBAGiBqwB,EAA4BlxB,GAAa,gBAA1Da,gBAhBJ,EAiBqCrI,6BAAjCrK,EAjBJ,EAiBIA,oBAAqBF,EAjBzB,EAiByBA,QAEvBkjC,EAAyB,SAACC,GAC9BtE,IACG5zB,MAAK,SAACtF,GACLm9B,EAAmBK,GACnBR,EAAYh9B,GACZ+8B,GAAyB,MAE1B19B,OAAM,WACL+D,IAAMxG,MACJ,2EAKF6gC,EAA2B,WAC/BZ,GAAuBD,IAYzB,OACE,qCACE,eAACzC,GAAD,CACEzhB,KAAMgkB,EACNhD,QAAS,WACP+C,KAHJ,UAME,eAACrB,GAAD,WACE,cAAC7a,GAAA,EAAD,CACEhG,QAAS,WACPkiB,KAFJ,SAKE,cAACpC,GAAD,CAAiBhhB,SAAS,YAE5B,cAAC8hB,GAAD,OAEF,cAACc,GAAD,UACE,eAACZ,GAAD,WACE,cAAC,GAAD,CAAYjgB,GAAI,wBAAhB,SACE,cAAC,GAAD,CAAUkhB,KAAM,cAAC/B,GAAD,IAAsBjgB,MAAO,kBAE9CgjB,GACC,cAAC,GAAD,CAAYliB,GAAI,uBAAhB,SACE,cAAC,GAAD,CACEkhB,KAAM,cAAC,GAAD,CAASplB,QAAQ,SACvBoD,MAAO,0BAIb,cAAC,GAAD,CAAYc,GAAI,SAAhB,SACE,cAAC,GAAD,CAAUkhB,KAAM,cAAC,GAAD,IAAqBhiB,MAAO,eAE7C8iB,GACC,cAAC,GAAD,CACEd,KAAM,cAACtB,GAAD,IACN1gB,MAAM,8BACNC,QAAS,kBAAMgjB,EAAuBrD,GAAgB+C,YAGzDI,GACC,cAAC,GAAD,CACEf,KAAM,cAAC7B,GAAD,IACNngB,MAAM,oCACNC,QAAS,kBACPgjB,EAAuBrD,GAAgBwD,wBAI7C,cAAC9B,GAAD,CACE7D,KAAM,sDADR,SAGE,cAAC,GAAD,CAAUuE,KAAM,cAAC1B,GAAD,IAAwBtgB,MAAO,iBAEjD,cAACshB,GAAD,CACE7D,KAAM,4DADR,SAGE,cAAC,GAAD,CAAUuE,KAAM,cAACxB,GAAD,IAAoBxgB,MAAO,oBAE5CzN,QAAQ8vB,IACP,cAACf,GAAD,CAAgB7D,KAAM19B,EAAtB,SACE,cAAC,GAAD,CACEiiC,KAAM,cAACP,GAAD,CAASzjB,IAAK/d,IACpB+f,MAAO,sCAMjB,cAAC4hB,GAAD,UACE,eAACC,GAAD,CACE5hB,QAAS,WACPkjB,KAFJ,UAKE,cAAC,GAAD,IACA,cAACrB,GAAD,oCAIN,cAAC,GAAD,CACE1jB,KAAMkkB,EACNjD,UAAWt2B,EACXq2B,QAAS+D,IAEX,cAAC,GAAD,CACE/kB,KAAMokB,EACNpD,QAjG0B,WAC9BqD,GAAyB,IAiGrB9C,SAAUA,EACV9R,SA/FsB,SAACnoB,GAC3B,IAAMD,EAAG,UAAMm9B,EAAN,YAAyBl9B,EAAK+5B,SACvCrgB,EAAQjP,KAAK1K,UG5FjB,SAAS,KAA2Q,OAA9P,GAAWiQ,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,OAAQ,CACnDqD,MAAO,QACPC,OAAQ,EACRmgB,GAAI,EACJ1gB,KAAM,UAGJ,GAAqB,gBAAoB,OAAQ,CACnD2gB,EAAG,EACHrgB,MAAO,QACPC,OAAQ,EACRmgB,GAAI,EACJ1gB,KAAM,UAGJ,GAAqB,gBAAoB,OAAQ,CACnD2gB,EAAG,GACHrgB,MAAO,QACPC,OAAQ,EACRmgB,GAAI,EACJ1gB,KAAM,UAGR,SAAS4gB,GAAc1gB,EAAMC,GAC3B,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTR,KAAM,OACNS,MAAO,6BACPC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,GAAO,GAAO,IAGlC,IAAI,GAA0B,aAAiBo3B,IAChC,I,mdC7CR,IAAM3b,GAAiB/f,YAAO8Y,IAAP9Y,CAAH,MACL,qBAAGkV,MAAkBE,QAAQE,OAAOC,SACvC,qBAAGL,MAAkBC,QAAQ,MASnCwmB,GAAiB37B,YAAO47B,GAAP57B,CAAH,MAChB,qBAAGkV,MAAkBE,QAAQE,OAAOC,SAKlCsmB,GAAmB77B,YAAOoe,KAAPpe,CAAH,MC2Bd87B,GAzCiC,SAAC,GAAkB,IAAb3gB,EAAY,oBAC1Dpa,EAAW2B,cAD+C,EAExBX,oBAAS,GAFe,mBAEzDw4B,EAFyD,KAE3CwB,EAF2C,KAGvCZ,EAA4BlxB,GACnD,gBADMa,gBAIFwvB,EAAqB,WACzByB,GAAiBxB,IAGnB,OACE,qCACE,cAAC,GAAD,aACEzb,YACE,cAAC+c,GAAD,CACEzjB,QAAS,WACPkiB,KAFJ,SAKE,cAACqB,GAAD,MAGJ3c,aACEmc,GACsB,MAAtBp6B,EAASC,UACP,cAAC,GAAD,CAAgBiY,GAAG,uBAAnB,SACE,cAAC,GAAD,OAIFkC,IAEN,cAAC,GAAD,CACEof,aAAcA,EACdD,mBAAoBA,Q,kSCzCrB,IAAM0B,GAAgBh8B,IAAOgW,IAAV,MAKbimB,GAAkBj8B,IAAOgW,IAAV,MAGZ,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MCKjC,SAAS+mB,GAAT,GAQyB,IAPtCr+B,EAOqC,EAPrCA,KACAsE,EAMqC,EANrCA,QACAg6B,EAKqC,EALrCA,aACAC,EAIqC,EAJrCA,aACAC,EAGqC,EAHrCA,iBACAC,EAEqC,EAFrCA,WACAC,EACqC,EADrCA,aAEA,OACE,eAACP,GAAD,WACGn+B,EAAK0M,KAAI,SAACiC,GAAD,OACR,8BAAmC8vB,EAAW9vB,IAApC+vB,EAAa,CAAE/vB,aAE1BrK,EACC,cAAC85B,GAAD,UACE,cAAC,KAAD,MAGFE,GACE,cAACF,GAAD,UACE,cAAC,GAAD,CAAc/jB,MAAM,UAAUE,QAAS,kBAAMikB,KAA7C,SACGD,GAA8B,uB,gSCpCtC,IAAM/iB,GAAYrZ,IAAOgW,IAAV,MAUT,qBAAGd,MAAkBE,QAAQC,QAAQhd,QCInCmkC,GAVkB,WAC/B,OACE,eAAC,GAAD,WACE,cAACC,GAAA,EAAD,IACA,cAAClkB,GAAA,EAAD,CAAYxD,QAAQ,KAApB,4BACA,cAACwD,GAAA,EAAD,8DCDA9a,GAAW,gBAEXuN,GAAyC,CAC7C5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MAwDMiiC,GArDI,WAAO,IAAD,EACGn8B,qBACxBkJ,KACAuB,IAHqB,mBAChB7K,EADgB,KACTM,EADS,KAMjBk8B,EAAen/B,sBAAW,uCAAC,WAAO4N,GAAP,eAAA9O,EAAA,sEAE7BmE,EAAS,CAAEzC,KAAM,YAFY,SAGNhF,EAAM6F,IAAN,UAAapB,GAAb,kBAAuC,CAC5D2N,OAAO,2BACFA,GADC,IAEJwxB,MAAO,OANkB,cAGvBrhC,EAHuB,OAS7BkF,EAAS,CAAEzC,KAAM,aAAc2L,QAASpO,EAASsC,OATpB,kBAUtBW,QAAQC,QAAQlD,EAASsC,OAVH,uCAY7B4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAZJ,kBAatBnL,QAAQE,OAAR,OAbsB,yDAAD,sDAe7B,IAEG2M,EAAU7N,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,sEAExBmE,EAAS,CAAEzC,KAAM,YAFO,SAGDhF,EAAM6F,IAAN,UAAapB,GAAb,YAAyBuB,IAHxB,OAGlBzD,EAHkB,OAIxBkF,EAAS,CAAEzC,KAAM,YAAa2L,QAASpO,EAASsC,OAJxB,uDAMxB4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KANT,kBAOjBnL,QAAQE,OAAR,OAPiB,yDAAD,sDASxB,IAEGm+B,EAA2Br/B,sBAAW,sBAAC,4BAAAlB,EAAA,sEAEzCmE,EAAS,CAAEzC,KAAM,YAFwB,SAGlBhF,EAAM6F,IAAN,UAAapB,GAAb,iBAHkB,cAGnClC,EAHmC,yBAIlCiD,QAAQC,QAAQlD,EAASsC,OAJS,uCAMzC4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KANQ,kBAOlCnL,QAAQE,OAAR,OAPkC,yDAS1C,IAEH,OAAO,2BACFyB,GADL,IAEEw8B,eACAtxB,UACAwxB,8B,0MClEJ,IAQeC,GARK98B,YAAO+8B,MAAOjoB,MAAM,CAAE2J,UAAW,GAAjCze,CAAH,MACN,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QACnC,qBAAG6c,MAAkBC,QAAQ,MAG1B,qBAAGD,MAAkBC,QAAQ,M,sxDCAtC,IAAMkE,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,MAIlC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAGnCq4B,GAAmB/wB,IAAOgW,IAAV,MAIlB,qBAAGd,MAAkBE,QAAQC,QAAQ3c,QAChC,qBAAGwc,MAAkBC,QAAQ,MAIhC6nB,GAAsBh9B,IAAOgW,IAAV,MAIrB,qBAAGd,MAAkBE,QAAQC,QAAQ3c,QAChC,qBAAGwc,MAAkBC,QAAQ,MAUhC8nB,IAPgBj9B,IAAOgW,IAAV,MAIf,qBAAGd,MAAkBE,QAAQC,QAAQ3c,QAGzBsH,YAAO88B,GAAP98B,CAAH,MAKJ,qBAAGkV,MAAkBC,QAAQ,MAElC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,SAGnCmgB,GAAa7Y,YAAO8Y,IAAP9Y,CAAH,MAMVk9B,GAAWl9B,IAAOgW,IAAV,MA2BRmnB,IAjBgBn9B,IAAOgW,IAAV,MAKchW,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,MAINA,IAAOgW,IAAV,MAGZ,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MAIrBnV,YAAOuY,MAAYzD,MAAM,CAClDC,QAAS,MADgB/U,CAAH,MAIP,qBAAGkV,MAAkBC,QAAQ,OCkG/BioB,GA7JW,WAAO,IACvBtgB,EAAmBna,qBAAWka,IAA9BC,eADsB,EAEgB/a,mBAAyB,IAFzC,mBAEvBs7B,EAFuB,KAENC,EAFM,OAGAv7B,oBAAS,GAHT,mBAGvBI,EAHuB,KAGdC,EAHc,OAIUL,oBAAS,GAJnB,mBAIvBo6B,EAJuB,KAIToB,EAJS,OAKEx7B,mBAAyB,IAL3B,mBAKvBy7B,EALuB,KAKbC,EALa,OAMN17B,mBAAS,GANH,mBAMvB27B,EANuB,KAMjBC,EANiB,OAOJ57B,mBAAS,GAPL,mBAOvByH,EAPuB,KAOhBo0B,EAPgB,OAQQ77B,mBAAS,IARjB,mBAQvB87B,EARuB,KAQVC,EARU,OAc1BpB,KAHFC,EAX4B,EAW5BA,aACSoB,EAZmB,EAY5B57B,QACA06B,EAb4B,EAa5BA,yBAIItlB,EAAUC,cAEVwmB,EAAoB,SAACC,GACzB,OAAOA,EAJK,IAIkBP,EAAO,IAGvCh9B,qBAAU,WACe,WAAnBoc,GACF+f,IAA2B15B,MAAK,SAACtF,GAC/By/B,EAAmBz/B,QAGtB,CAACif,IAEJpc,qBAAU,WACe,WAAnBoc,GACFohB,MAED,CAACphB,EAAgB4gB,IAEpB,IAAMQ,EAAS,uCAAG,kCAAA5hC,EAAA,uDACV8O,EAAS7G,IAAGC,MAAM+S,EAAQxW,SAAS0D,WAEjC05B,EAAc55B,IAAGC,MAAM+S,EAAQxW,SAAS0D,QACxC25B,EAFI,UAEYD,EAAY,wBAFxB,aAEY,EAA8BE,WACpDP,GAA4B,OAAbM,QAAa,IAAbA,OAAA,EAAAA,EAAen3B,MAAM,GAAI,KAAM,KAEhD01B,EAAa,2BACRvxB,GADO,IAEVsyB,UAECv6B,MAAK,SAACtF,GAEH4/B,EADW,IAATC,EACU7/B,EAAKmM,QAEL,GAAD,oBAAKwzB,GAAL,aAAkB3/B,EAAKmM,WAEpC4zB,EAAS//B,EAAK2L,OACd+zB,EAAgBS,EAAkBngC,EAAK2L,WAExCtM,OAAM,SAACC,GACN,IAAMoC,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,MAEb8D,SAAQ,WACPjB,GAAW,MAzBC,2CAAH,qDA6BTk8B,EAAiB,WACR,IAATZ,EACFQ,IAEAP,EAAQ,IAINtB,EAAmB,WACnB2B,EAAkBx0B,KACpBpH,GAAW,GACXu7B,EAAQD,EAAO,KAIba,EAAoB,SAAC/xB,GACzB,OACE,cAAC,GAAD,CAAYyM,GAAE,oBAAezM,EAAKxN,IAAlC,SACE,eAACi+B,GAAD,WACE,cAACC,GAAD,UACE,cAAC3kB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiCvI,EAAKlI,UAExC,cAAC,KAAD,UA8CR,OACE,qCACGy5B,IAAmB57B,GAClB,cAAC,GAAD,CAAiBA,QAAS47B,IAE5B,cAAC,GAAD,CACEhf,cACE,cAACoe,GAAD,CAAa/d,MAAM,SAASrK,QAAQ,KAApC,qCAKJ,cAAC,GAAD,UACsB,WAAnB+H,EApDL,qCACE,cAAC0hB,GAAD,CACEtI,UAAU,gBACVE,kBAAmBkI,EACnBnI,aAAc0H,KAEA,OAAfR,QAAe,IAAfA,OAAA,EAAAA,EAAiBv1B,QAAS,GACzB,qCACE,cAACk1B,GAAD,UACE,cAACzkB,GAAA,EAAD,CAAYxD,QAAQ,KAApB,yCAEDsoB,EAAgB9yB,KAAI,SAACiC,GAAD,OACnB,8BAAoB+xB,EAAkB/xB,IAA5BA,EAAKxN,UAIrB,cAACg+B,GAAD,UACE,cAACzkB,GAAA,EAAD,CAAYxD,QAAQ,KAApB,sCAEO,OAARyoB,QAAQ,IAARA,OAAA,EAAAA,EAAU11B,SAAU,EACnB,cAAC,GAAD,UACE,cAACyQ,GAAA,EAAD,CAAYxD,QAAQ,YAApB,6DAKF,cAACmnB,GAAD,CACEr+B,KAAM2/B,EACNr7B,QAASA,EACTo6B,aAAc,gBAAG/vB,EAAH,EAAGA,KAAH,OAAchH,OAAOgH,EAAMxN,KACzCo9B,aAAc,6BACdD,aAAcA,EACdG,WAAYiC,EACZlC,iBAAkBA,OAsBlB,cAAC,GAAD,U,+pBChLH,IAAMhjB,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,MAIlC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAInCwkC,GAAWl9B,IAAOgW,IAAV,MACL,qBAAGd,MAAkBC,QAAQ,MAUhCspB,GAAYz+B,IAAOgW,IAAV,M,UCsBP0oB,GAjCe,WAAO,IAAD,EACChC,KAA3BrxB,EAD0B,EAC1BA,QAASjC,EADiB,EACjBA,KAAMjH,EADW,EACXA,QACjBiJ,EAASuzB,cAETC,EAAS9Z,SAAS1Z,EAAOpM,IAE/B0B,qBAAU,WACR2K,EAAQuzB,KACP,CAACA,IAEJ,IAAMC,EAAcz1B,EAAKw1B,GAEzB,OAAIz8B,EACK,cAAC,GAAD,CAAiBA,QAASA,IAIjC,qCACE,cAAC,GAAD,CAAQmC,MAAM,yBAAsBmmB,eAAe,WACnD,eAAC,GAAD,WACE,cAACgU,GAAD,UACE,cAAClmB,GAAA,EAAD,CAAYxD,QAAQ,KAApB,gBAA0B8pB,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAav6B,UAEzC,cAAC,GAAD,UACE,cAACiU,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SACGvQ,cAAiB,OAAXq6B,QAAW,IAAXA,OAAA,EAAAA,EAAa5c,OAAQ,e,uqBC/BjC,ICQK6c,GDRCrH,GAAOz3B,YAAO03B,KAAP13B,CAAH,MAOJ++B,GAAgB/+B,IAAOgW,IAAV,MACZ,qBAAGd,MAAkBC,QAAQ,MAG9B6pB,GAAch/B,IAAOgW,IAAV,MAQXipB,GAAgBj/B,YAAO4U,GAAP5U,CAAH,MACP,qBAAGkV,MAAkBC,QAAQ,MCvBnCiQ,ID4BcplB,YAAOuY,KAAPvY,CAAH,MACb,qBAAGkV,MAAkBE,QAAQ3a,MAAMpC,QC7BdgtB,OAAa9D,MAAM,CACjDjd,MAAO+gB,OAAa3C,SAAS,kCAC7BxS,YAAamV,OACV3C,SAAS,wCACT2F,IAAI,IAAM,+DACb6W,cAAe7Z,OACf9f,KAAM8f,OACH3C,SAAS,+BACTkP,UAAU,4C,SAGHkN,K,8CAAAA,E,qCAAAA,E,sCAAAA,E,gEAAAA,E,oDAAAA,E,6CAAAA,E,+DAAAA,E,+DAAAA,E,iDAAAA,E,oDAAAA,E,yCAAAA,E,iBAAAA,Q,KAeL,IAAMK,GAAe,CAC1B,CACE99B,MAAOy9B,GAAkBM,WACzBjnB,MAAO2mB,GAAkBM,YAE3B,CACE/9B,MAAOy9B,GAAkBO,OACzBlnB,MAAO2mB,GAAkBO,QAE3B,CACEh+B,MAAOy9B,GAAkBQ,MACzBnnB,MAAO2mB,GAAkBQ,OAE3B,CACEj+B,MAAOy9B,GAAkBS,kBACzBpnB,MAAO2mB,GAAkBS,mBAE3B,CACEl+B,MAAOy9B,GAAkBU,kBACzBrnB,MAAO2mB,GAAkBU,mBAE3B,CACEn+B,MAAOy9B,GAAkBW,aACzBtnB,MAAO2mB,GAAkBW,cAE3B,CACEp+B,MAAOy9B,GAAkBY,sBACzBvnB,MAAO2mB,GAAkBY,uBAE3B,CACEr+B,MAAOy9B,GAAkBa,iBACzBxnB,MAAO2mB,GAAkBa,kBAE3B,CACEt+B,MAAOy9B,GAAkBc,aACzBznB,MAAO2mB,GAAkBc,cAE3B,CACEv+B,MAAOy9B,GAAkBe,gBACzB1nB,MAAO2mB,GAAkBe,iBAE3B,CAAEx+B,MAAOy9B,GAAkBgB,QAAS3nB,MAAO2mB,GAAkBgB,SAC7D,CAAEz+B,MAAOy9B,GAAkBiB,QAAS5nB,MAAO2mB,GAAkBiB,UC2KhDC,GA1MuC,SAAC,GAOhD,IAAD,ID4BJ7N,EClCA8N,EAMI,EANJA,OACAC,EAKI,EALJA,OACAC,EAII,EAJJA,cACAh1B,EAGI,EAHJA,UACAi1B,EAEI,EAFJA,WACAC,EACI,EADJA,SAEQ99B,EAAaI,qBAAWd,IAAxBU,SAEFwjB,EAA4B,CAChCzhB,ODwBF6tB,ECxBuC,OAAC5vB,QAAD,IAACA,GAAD,UAACA,EAAU+9B,iBAAX,aAAC,EAAqBnO,WD0BtDA,EAAa2M,GAAkB3M,GAAc2M,GAAkBiB,SCzBpE7vB,YAAa,GACb3K,MAAM,IAAID,MAAOi7B,cACjBrB,cAAe,GACfsB,WAAmB,OAARj+B,QAAQ,IAARA,GAAA,UAAAA,EAAUP,YAAV,eAAgBjI,OAAQ,IAG/B0mC,EAAe,uCAAG,WAAOL,EAAwBM,GAA/B,eAAApkC,EAAA,6DAGhBuB,EAAgC,CACpCyG,MAAO87B,EAAW97B,MAClB4L,YAAakwB,EAAWlwB,YACxBywB,mBACuC,IAArCj5B,OAAO04B,EAAWlB,oBACdv7B,EACA+D,OAAO04B,EAAWlB,eACxB35B,KAAM,IAAID,KAAK86B,EAAW76B,MAAMg7B,cAChCp1B,YACAu1B,WAZoB,SAchBT,EAAOpiC,GAdS,2CAAH,wDAiBrB,OACE,cAACkhC,GAAD,UACE,cAAC,KAAD,CACE3Z,iBAAkBA,GAClBW,cAAeqa,GAAcra,EAC7BC,SAAU,SAACC,GAAD,OAAYwa,EAAgBxa,GAAQ,IAC9CI,kBAAkB,EAJpB,SAMG,YAOM,IANLU,EAMI,EANJA,aACAd,EAKI,EALJA,OACA2a,EAII,EAJJA,WACAC,EAGI,EAHJA,aACAnN,EAEI,EAFJA,WACAxN,EACI,EADJA,cAEM4a,EAAiB,uCAAG,oCAAAxkC,EAAA,6DAClByQ,EAAM,IAAIzH,KACVC,EAAO,IAAID,KAAK2gB,EAAO1gB,MACzBw7B,GAAc,EAEZC,EAAqB,WACzB,GAAIz7B,EAAOwH,EAKT,OAJAg0B,GAAc,OACd9/B,IAAMxG,MACJ,yDAMAwmC,EAfkB,+BAAA3kC,EAAA,MAeQ,4BAAAA,EAAA,sEACCukC,IADD,OACxBK,EADwB,OAE9BN,EAAWO,aAAsBD,GAAkB,IACnDF,IACInzB,OAAOC,KAAKozB,GAAkBp5B,OAAS,IACzCi5B,GAAc,GALc,2CAfR,8DAwBlBE,IAxBkB,QA0BR,EACZF,GACFN,EAAgBxa,EAFF,OA1BQ,2CAAH,qDAgCvB,OACE,eAAC,GAAD,WACE,cAAC,KAAD,CAAyB4J,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,cAAC,GAAD,CACErnC,KAAK,OACLoe,MAAM,OACNkpB,YAAY,WACZhgC,MAAO4kB,EAAO1gB,KACdsS,SAAU,SAACtS,GACT2gB,EAAc,OAAQ3gB,GAAM,IAE9BsuB,YAAY,aACZ3b,MAAM,QACNuO,OAAO,SACP7N,KAAK,SACL8N,WAAY,CACV,cAAe,OACfrO,SAAUgoB,GAEZ9Q,OAAQmE,EACRI,gBAAiB,CAAEC,QAAQ,GAC3BsM,SAAUA,EACVhoB,SAAUgoB,MAGd,cAAC,GAAD,CACEtmC,KAAK,QACLoe,MAAM,YACNyb,mBAAoB,CAClB,cAAe,SAEjB1b,MAAM,QACNG,SAAUgoB,EAPZ,SASGlB,GAAa50B,KAAI,SAACiC,GAAD,OAChB,cAAC,GAAD,CAEEnL,MAAOmL,EAAKnL,MACZ6W,MAAM,QAHR,SAKG1L,EAAK2L,OAJD3L,EAAKnL,YAQhB,cAACmlB,GAAD,CACEtO,MAAM,QACNlZ,GAAG,YACH0nB,WAAY,CAAE,cAAe,aAC7BvO,MAAM,8BACNpe,KAAK,YACL0sB,OAAO,SACPzD,aAAa,MACb3K,UAAQ,IAEV,cAAC,GAAD,CACEte,KAAK,gBACLoe,MAAM,gCACNyb,mBAAoB,CAClB,cAAe,iBAEjB1b,MAAM,QACN7W,MAAO4kB,EAAOiZ,cACd7mB,SAAUgoB,EARZ,SAUGF,EAAc51B,KAAI,SAACiC,GAAD,OACjB,cAAC,GAAD,CAA8BnL,MAAOmL,EAAKxN,GAAIkZ,MAAM,QAApD,SACG1L,EAAKzS,MADayS,EAAKxN,SAK9B,cAACwnB,GAAD,CACEtO,MAAM,QACNlZ,GAAG,cACHi1B,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,cAAe4a,UAAW,KACvDnpB,MAAM,kBACNpe,KAAK,cACL0sB,OAAO,SACPzD,aAAa,MACb3K,SAAUgoB,KAEVA,GACA,eAACrB,GAAD,WACE,cAACC,GAAD,CACEte,cAAY,eACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UAJR,kCAQA,cAAC+mB,GAAD,CACEte,cAAY,SACZ/H,KAAK,QACLV,MAAM,UACNG,SAAU0O,EACV3O,QAAS0oB,EALX,sBASA,cAAC7B,GAAD,CACEte,cAAY,SACZvI,QAAS8nB,EACTtnB,KAAK,QACLV,MAAM,UAJR,kCC3NLqpB,GAAsC,SACjDvoC,EACA6E,GAFiD,OAIjD8K,GAAmB3P,EAAO,OAAR,sBAAgB,sBAAAsD,EAAA,+EACzB,CACLuB,KAAMA,EACNiL,WAAY,MAHkB,6CCK9BrL,GAAW,uBAGXuN,GAAoD,CACxD5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA8FM+mC,GA3Fe,SAAC/5B,GAA0B,IAAD,EAC5B8F,GAGxB,CACAC,eAAgBxC,GAChBiC,IAAI,GAAD,OAhBgC,uBAgBhC,YAAuCxF,GAC1CvH,QAAS4M,OAP2C,mBAC/C3M,EAD+C,KACxCM,EADwC,KAUhDlC,EAAOf,sBAAW,uCAAC,WAAOK,GAAP,iBAAAvB,EAAA,sEAErBmE,EAAS,CAAEzC,KAAM,YACX6Q,EAAmB0yB,GAAoCvoC,EAAO6E,GAH/C,SAIEgR,EAAiBpR,GAAUI,GAJ7B,cAIftC,EAJe,OAKrBkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OALxB,kBAMdW,QAAQC,QAAQlD,EAASsC,OANX,yCAQrB4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KARZ,kBASdnL,QAAQE,OAAR,OATc,0DAAD,sDAWrB,IAEG+iC,EAAiBjkC,sBAAW,uCAChC,WAAO2N,EAAWC,GAAlB,eAAA9O,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YAFrB,SAG2BhF,EAAM6F,IAAN,UAGjBpB,GAHiB,uBAGM0N,GAAa,CACxCC,WAPN,cAGU7P,EAHV,OASIkF,EAAS,CAAEzC,KAAM,aAAc2L,QAASpO,EAASsC,OATrD,kBAUWW,QAAQC,QAAQlD,EAASsC,OAVpC,uCAYI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAZrC,kBAaWnL,QAAQE,OAAR,OAbX,yDADgC,wDAiBhC,IAGI2M,EAAU7N,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,sEAExBmE,EAAS,CAAEzC,KAAM,YAFO,SAGDhF,EAAM6F,IAAN,UAAapB,GAAb,YAAyBuB,IAHxB,cAGlBzD,EAHkB,OAIxBkF,EAAS,CAAEzC,KAAM,YAAa2L,QAASpO,EAASsC,OAJxB,kBAKjBW,QAAQC,QAAQlD,EAASsC,OALR,uCAOxB4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPT,kBAQjBnL,QAAQE,OAAR,OARiB,yDAAD,sDAUxB,IAEGgjC,EAAalkC,sBAAW,uCAAC,WAAOwB,GAAP,eAAA1C,EAAA,sEAE3BmE,EAAS,CAAEzC,KAAM,YAFU,SAGJhF,EAAMqG,OAAN,UAAgB5B,GAAhB,YAA4BuB,IAHxB,cAGrBzD,EAHqB,OAI3BkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAJlB,kBAKpBW,QAAQC,QAAQlD,EAASsC,OALL,uCAO3B4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPN,kBAQpBnL,QAAQE,OAAR,OARoB,yDAAD,sDAU3B,IAEG0U,EAAQ5V,sBAAW,uCACvB,WAAOwB,EAAYnB,GAAnB,eAAAvB,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YAFrB,SAG2BhF,EAAMoa,MAAN,UAAe3V,GAAf,YAA2BuB,GAAMnB,GAH5D,OAGUtC,EAHV,OAIIkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAJjD,uDAMI4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KANrC,kBAOWnL,QAAQE,OAAR,OAPX,yDADuB,wDAWvB,IAGF,OAAO,2BACFyB,GADL,IAEE5B,OACAkjC,iBACAp2B,UACAq2B,aACAtuB,W,oJC7GG,IAAMiG,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,MC8E9BwsB,GAjE4B,WAAO,IAAD,EACNruB,KAAjCG,EADuC,EACvCA,oBAAqBtR,EADkB,EAClBA,QACrB5D,EAASijC,KAATjjC,KACA8M,EAAYyrB,KAAZzrB,QACFD,EAASuzB,cACTxzB,EAAY2Z,SAAS1Z,EAAOD,WAC5BoM,EAAUC,cAN+B,EAOjBzV,qBAPiB,mBAOxC61B,EAPwC,KAO/BgK,EAP+B,OAQL7/B,mBACxC,IAT6C,mBAQxCo+B,EARwC,KAQzB0B,EARyB,KAY/CnhC,qBAAU,WACRohC,IACAC,MACC,IAEH,IAAMD,EAAiB,uCAAG,8BAAAxlC,EAAA,sEACKmX,IAAsBvW,OAAM,kBACvD+D,IAAMxG,MAAM,mDAFU,OAClB0lC,EADkB,OAQlB6B,EARkB,CAIkB,CACxChjC,GAAI,EACJjF,KAAM,YANgB,oBAQsBomC,IAC9C0B,EAAiBG,GATO,2CAAH,qDAYjBD,EAAW,uCAAG,4BAAAzlC,EAAA,sEACI+O,EAAQF,GAAWjO,OAAM,kBAC7C+D,IAAMxG,MAAM,0CAFI,OACZm9B,EADY,OAIlBgK,EAAWhK,GAJO,2CAAH,qDAOXqK,EAAU,uCAAG,WAAOpkC,GAAP,SAAAvB,EAAA,+EAETiC,EAAKV,GAFI,OAGfoD,IAAMmlB,QAAQ,iDACd7O,EAAQqJ,SAJO,gDAMfjkB,QAAQC,IAAR,MACAqE,IAAMxG,MACJ,mFARa,yDAAH,sDAahB,OACE,qCACE,cAAC,GAAD,CAAQgwB,eAAe,SAASnmB,MAAK,iBAAKszB,QAAL,IAAKA,OAAL,EAAKA,EAAS79B,QACnD,cAAC,GAAD,UACE,cAAC,GAAD,CACEoR,UAAWA,EACXg1B,cAAeA,EACfD,OAAQ3oB,EAAQqJ,OAChBqf,OAAQgC,MAGZ,cAAC,GAAD,CAAiB9/B,QAASA,Q,2lCCvEzB,IAAMs1B,GAAOz3B,YAAO03B,KAAP13B,CAAH,MAMJ++B,GAAgB/+B,IAAOgW,IAAV,MACZ,qBAAGd,MAAkBC,QAAQ,MAG9B6pB,GAAch/B,IAAOgW,IAAV,MAcXipB,IANSj/B,YAAO4U,GAAP5U,CAAH,MACA,qBAAGkV,MAAkBC,QAAQ,MAKnBnV,YAAO4U,GAAP5U,CAAH,MACP,qBAAGkV,MAAkBC,QAAQ,OAKnC+sB,GAAuBliC,YAAOmiC,KAAPniC,CAAH,MAEpB,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAIvC,qBAAGxH,MAAkBE,QAAQC,QAAQhd,QACpC,qBAAG6c,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBE,QAAQE,OAAOC,SAC/C,qBAAGL,MAAkBE,QAAQC,QAAQhd,QAG7B,qBAAG6c,MAAkBC,QAAQ,MAG9B,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAEzC,qBAAG6c,MAAkBC,QAAQ,MClDhCiQ,GAAmBC,OAAa9D,MAAM,CACjDxnB,KAAMsrB,OAAa3C,SAAS,8BAC5Bwc,cAAe7Z,OAAa3C,SAAS,6BACrCxS,YAAamV,OAAagD,IACxB,IACA,iECqIW+Z,GA7GqC,SAAC,GAK9C,IAJLnC,EAII,EAJJA,OACAC,EAGI,EAHJA,OACAC,EAEI,EAFJA,cACAkC,EACI,EADJA,YACI,EAMsCtgC,mBAAe,IAAIuD,MANzD,mBAMGg9B,EANH,KAMkBC,EANlB,KAQE9B,EAAe,uCAAG,WAAOL,GAAP,eAAA9jC,EAAA,6DAChB4R,EAAwB,CAC5Bs0B,QAASpC,EAAWoC,QACpBzoC,KAAMqmC,EAAWrmC,KACjBmlC,cAAex3B,OAAO04B,EAAWlB,eACjCuD,eAAgBH,EAAc/B,eALV,SAOhBN,EAAO/xB,GAPS,2CAAH,sDAUrB,OACE,cAAC,GAAD,UACE,cAAC,KAAD,CACEkX,iBAAkBA,GAClBW,cArB4B,CAChCmZ,cAAe,GACfsD,QAAS,GACTzoC,KAAM,IAmBFisB,SAAUya,EACVpa,kBAAkB,EAJpB,SAMG,YAAuB,IAApBU,EAAmB,EAAnBA,aACF,OACE,eAAC,GAAD,WACE,cAAC,GAAD,CACEhtB,KAAK,gBACLoe,MAAM,sBACNyb,mBAAoB,CAClB,cAAe,iBAEjB1b,MAAM,UANR,SAQGioB,EAAc51B,KAAI,SAACiC,GAAD,OACjB,cAAC,GAAD,CAA8BnL,MAAOmL,EAAKxN,GAAIkZ,MAAM,UAApD,SACG1L,EAAKzS,MADayS,EAAKxN,SAK9B,cAACwnB,GAAD,CACEtO,MAAM,UACNlZ,GAAG,OACH0nB,WAAY,CAAE,cAAe,OAAQ4a,UAAW,KAChDnpB,MAAM,OACNpe,KAAK,OACL0sB,OAAO,SACPzD,aAAa,QAEf,cAAC,KAAD,CAAyB6M,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,cAACc,GAAD,CACE5S,aAAa,WACb3oB,OAAO,mBACP5M,KAAK,gBACLsH,MAAOihC,EACPjB,YAAY,WACZqB,MAAM,EACNC,QAASN,EACTxqB,SAAU,SAACtS,GACTA,GAAQg9B,EAAiBh9B,QAI/B,cAACihB,GAAD,CACEtO,MAAM,UACNlZ,GAAG,UACHi1B,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,UAAW4a,UAAW,KACnDnpB,MAAM,oBACNpe,KAAK,UACL0sB,OAAO,SACPzD,aAAa,QAEf,eAAC,GAAD,WACE,cAAC,GAAD,CACErC,cAAY,iBACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,EALZ,oBASA,cAAC,GAAD,CACEpG,cAAY,iBACZvI,QAAS8nB,EACTtnB,KAAK,QACLV,MAAM,UAJR,kCCzHHkN,GAAmBC,OAAa9D,MAAM,CACjD2d,cAAe7Z,OAAa3C,SAC1B,kDAEFxS,YAAamV,OAAagD,IACxB,IACA,iEC4HWua,GArGsC,SAAC,GAM/C,IALL3C,EAKI,EALJA,OACAC,EAII,EAJJA,OACAC,EAGI,EAHJA,cACA0C,EAEI,EAFJA,YACAR,EACI,EADJA,YACI,EAMsCtgC,mBAAe,IAAIuD,MANzD,mBAMGg9B,EANH,KAMkBC,EANlB,KAQE9B,EAAe,uCAAG,WAAOL,GAAP,eAAA9jC,EAAA,6DAChB4R,EAAwB,CAC5Bs0B,QAASpC,EAAWoC,QACpBtD,cAAex3B,OAAO04B,EAAWlB,eACjCuD,eAAgBH,EAAc/B,eAJV,SAMhBN,EAAO/xB,GANS,2CAAH,sDASrB,OACE,cAAC,GAAD,UACE,cAAC,KAAD,CACEkX,iBAAkBA,GAClBW,cApB4B,CAChCmZ,cAAe,GACfsD,QAAS,IAmBLxc,SAAUya,EACVpa,kBAAkB,EAJpB,SAMG,YAAuB,IAApBU,EAAmB,EAAnBA,aACF,OACE,eAAC,GAAD,WACE,cAAC,GAAD,CACEhtB,KAAK,gBACLoe,MAAM,4BACNyb,mBAAoB,CAClB,cAAe,iBAEjB1b,MAAM,UANR,SAQGioB,EAAc51B,KAAI,SAACiC,GAAD,OACjB,cAAC,GAAD,CAA8BnL,MAAOmL,EAAKxN,GAAIkZ,MAAM,UAApD,SACG1L,EAAKzS,MADayS,EAAKxN,SAK9B,cAAC,KAAD,CAAyB6wB,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,cAACc,GAAD,CACE5S,aAAa,WACb3oB,OAAO,mBACP5M,KAAK,gBACLsH,MAAOihC,EACPjB,YAAY,WACZqB,MAAM,EACNrT,QAASwT,EACTF,QAASN,EACTxqB,SAAU,SAACtS,GACTA,GAAQg9B,EAAiBh9B,QAI/B,cAACihB,GAAD,CACEtO,MAAM,UACNlZ,GAAG,UACHi1B,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,UAAW4a,UAAW,KACnDnpB,MAAM,oBACNpe,KAAK,UACL0sB,OAAO,SACPzD,aAAa,QAEf,eAAC,GAAD,WACE,cAAC,GAAD,CACErC,cAAY,sBACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,EALZ,oBASA,cAAC,GAAD,CACEpG,cAAY,sBACZvI,QAAS8nB,EACTtnB,KAAK,QACLV,MAAM,UAJR,kC,UCjHH4qB,GAAsB,CACjCC,eAAgB,MAChBC,iBAAkB,MAClBC,eAAgB,MAChBC,YAAa,MACbC,WAAY,MACZC,cAAe,MACfC,kBAAmB,OAGRC,GAAyB,CACpCC,eAAgB,GAChBC,eAAgB,IAGLC,GAAiC,CAC5CC,YAAa,wBACbC,QAAS,QACTC,aAAc,wBACdC,cAAe,oBAUJC,GAAwB,SAACC,GACpC,IAAM1iC,EAAQqG,OAAOq8B,GAErB,OAAKA,GAAYr8B,OAAOs8B,MAAM3iC,GACrB,CAAE4iC,kBAAmB,KAAMC,wBAAyB,MAEzD7iC,EAAQ,GACH,CACL4iC,kBAAmB,EACnBC,yBAAyB,GAGzB7iC,EAAQ,GACH,CACL4iC,kBAAmB,EACnBC,yBAAyB,GAGtB,CACLD,kBAAmB,EACnBC,yBAAyB,IAIhBC,GAAqB,SAACJ,GACjC,IAAM1iC,EAAQqG,OAAOq8B,GAErB,OAAKA,GAAYr8B,OAAOs8B,MAAM3iC,GACrB,CAAE4iC,kBAAmB,KAAMC,wBAAyB,MAEzD7iC,EAAQ,EACH,CACL4iC,mBAAoB,EACpBC,yBAAyB,GAGzB7iC,EAAQ,GACH,CACL4iC,mBAAoB,EACpBC,yBAAyB,GAGzB7iC,EAAQ,GACH,CACL4iC,kBAAmB,EACnBC,yBAAyB,GAGzB7iC,EAAQ,GACH,CACL4iC,kBAAmB,EACnBC,yBAAyB,GAGtB,CACLD,kBAAmB,EACnBC,yBAAyB,IAIhBE,GAA0B,SAACL,GACtC,IAAM1iC,EAAQqG,OAAOq8B,EAAS3/B,QAAQ,IAAK,MAE3C,OAAK2/B,GAAYr8B,OAAOs8B,MAAM3iC,GACrB,CAAE4iC,kBAAmB,KAAMC,wBAAyB,MAEzD7iC,GAAS,GACJ,CACL4iC,mBAAoB,EACpBC,yBAAyB,GAGzB7iC,EAAQ,GACH,CACL4iC,mBAAoB,EACpBC,yBAAyB,GAGzB7iC,EAAQ,KACH,CACL4iC,kBAAmB,EACnBC,yBAAyB,GAGzB7iC,EAAQ,KACH,CACL4iC,kBAAmB,EACnBC,yBAAyB,GAGtB,CACLD,kBAAmB,EACnBC,yBAAyB,IAIhBG,GAAwB,SACnCC,EACAC,EACAC,EACAC,GAEA,IAAMC,EAAch9B,OAAO48B,GAC3B,GAAI58B,OAAOs8B,MAAMU,KAAiBH,EAAoB,MAAO,CAAEN,kBAAmB,KAAMC,wBAAyB,MACjH,IAAMS,EAAMC,aAAkB,IAAIt/B,KAAQ,IAAIA,KAAKi/B,IAEnD,GAAIC,EAAoB,CACtB,GAA0B,iBAAtBC,EAAsC,CACxC,GAAIC,EAAc,GAChB,MAAO,CACLT,mBAAoB,EACpBC,yBAAyB,EACzBO,qBAEJ,GAAIC,GAAe,IACjB,MAAO,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAIN,GAAIE,EAAM,GAAI,CACZ,GAAID,EAAc,GAChB,MAAO,CACLT,mBAAoB,EACpBC,yBAAyB,EACzBO,qBAEJ,GAAIC,GAAe,IACjB,MAAO,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,yBAEC,CACL,GAAIC,EAAc,GAChB,MAAO,CACLT,mBAAoB,EACpBC,yBAAyB,EACzBO,qBAEJ,GAAIC,GAAe,IACjB,MAAO,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAIN,OAAIC,GAAe,IACV,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAGG,CACLR,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAIJ,GAA0B,iBAAtBA,EAAsC,CACxC,GAAIC,EAAc,GAChB,MAAO,CACLT,mBAAoB,EACpBC,yBAAyB,EACzBO,qBAEJ,GAAIC,GAAe,IACjB,MAAO,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAEJ,GAAIC,GAAe,IACjB,MAAO,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAIN,OAAIC,EAAc,GACT,CACLT,mBAAoB,EACpBC,yBAAyB,EACzBO,qBAEAC,GAAe,GACV,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAEAC,GAAe,IACV,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAEAC,GAAe,IACV,CACLT,kBAAmB,EACnBC,yBAAyB,EACzBO,qBAGG,CACLR,kBAAmB,EACnBC,yBAAyB,EACzBO,sBAIG,SAASI,GAAmBd,GACjC,IAAM1iC,EAAQqG,OAAOq8B,EAAS3/B,QAAQ,IAAK,MAE3C,OAAK2/B,GAAYr8B,OAAOs8B,MAAM3iC,GACrB,CAAE4iC,kBAAmB,KAAMC,wBAAyB,MAEzD7iC,EAAQ,IAKRA,EAAQ,IALW,CACrB4iC,kBAAmB,EACnBC,yBAAyB,GAQpB,CACLD,kBAAmB,EACnBC,yBAAyB,GAItB,IAAMY,GAAwB,SACnCC,EACAC,GAEA,IAAMC,EAAgBv9B,OAAOq9B,GAC7B,OAAIr9B,OAAOs8B,MAAMiB,KAAmBA,EAC3B,CACLhB,kBAAmB,KACnBC,wBAAyB,MAGzBe,EAAgB,GACX,CACLhB,kBAAmB,EACnBC,yBAAyB,GAGzBe,EAAgB,IAAMD,EAAgB,EACjC,CACLf,kBAAmB,EACnBC,yBAAyB,GAGzBe,EAAgB,IAAMD,EAAgB,EACjC,CACLf,kBAAmB,EACnBC,yBAAyB,GAGzBe,GAAiB,IACZ,CACLhB,kBAAmB,EACnBC,yBAAyB,GAGzBe,GAAiB,KAMjBA,GAAiB,KAAOD,EAAgB,EALnC,CACLf,kBAAmB,EACnBC,yBAAyB,GASzBe,GAAiB,KAAOD,EAAgB,EACnC,CACLf,kBAAmB,EACnBC,yBAAyB,GAGtB,CACLD,kBAAmB,EACnBC,yBAAyB,I,uOCnUtB,IAAMgB,GAAiBllC,IAAOgW,IAAV,MAIhB,qBAAGd,MAAkBE,QAAQC,QAAQhd,QCwDjC8sC,GA/CX,SAAC,GAAmC,IAAjC9jC,EAAgC,EAAhCA,MAAOwW,EAAyB,EAAzBA,SAAasD,EAAY,qCACrC,OACE,qCACE,eAAC+pB,GAAD,WACE,cAAC1e,GAAD,aACEtO,MAAM,UACNwO,WAAY,CACV,cAAe,mBACf4a,UAAW,KAEbnpB,MAAM,QACNsO,OAAO,SACPzD,aAAa,MACb6Q,YAAY,MACZxyB,MAAOA,EACPwW,SAAU,SAACC,GACT,IAAMstB,EAAiB/gB,GAAkBvM,EAAEC,OAAO1W,OAClDwW,EAASutB,KAEPjqB,IAEL,WAEH,cAAC,GAAD,CACEnc,GAAG,oCACHmZ,MAAM,2BACNpe,KAAK,oBACL65B,mBAAoB,CAClB,cAAe,qCAEjB1b,MAAM,UAPR,SASGrK,OAAOw3B,QAAQ5B,IAAgCl5B,KAAI,mCAAE0C,EAAF,KAAOkL,EAAP,YAClD,cAAC,GAAD,CAEE9W,MAAO4L,EACPiL,MAAM,UACNyI,cAAA,6BAAmC1T,GAJrC,SAMGkL,GANH,mBACmBlL,a,oBC6Ddq4B,GAjGX,SAAC,GAAmC,IAAjCjkC,EAAgC,EAAhCA,MAAOwW,EAAyB,EAAzBA,SAAasD,EAAY,uCAGKpZ,mBAAS,IAHd,mBAG9BkjC,EAH8B,KAGfM,EAHe,OAIOxjC,mBAAS,IAJhB,mBAI9ByjC,EAJ8B,KAIdC,EAJc,KAMrC/kC,qBAAU,WACR,GAAKW,EAAL,CADc,MAGgBA,EAAMiJ,MAAM,KAH5B,mBAGPo7B,EAHO,KAGGC,EAHH,KAKRC,EAAoBC,oBAAS7hB,GAAW0hB,IAG9C,GAFAH,EAAiB//B,OAAOogC,GAAmBh4B,UAAU,EAXnC,IAaO,qBAAd+3B,EAAX,CAEA,IAAMG,EAAqBD,oBAAS7hB,GAAW2hB,IAC/CF,EAAkBjgC,OAAOsgC,GAAoBl4B,UAAU,EAhBrC,QAiBjB,IAEH,IAAMm4B,EAAmB,SAACd,EAAuBO,GAC/C,IAAMQ,EAAiBH,oBAASZ,GAC1BgB,EAAkBJ,oBAASL,GAE3BU,EAAwB1gC,OAAOwgC,GAAgBG,SAvBnC,EAyBhB,KAEIC,EAAyB5gC,OAAOygC,GAAiBE,SA3BrC,EA6BhB,KAGIT,EAAWQ,EAAsBt4B,UACrCs4B,EAAsBp+B,OAAS,EAjCf,GAoCZ69B,EAAYS,EAAuBx4B,UACvCw4B,EAAuBt+B,OAAS,EArChB,GAwClB+P,EAAS,GAAD,OAAI6tB,EAAJ,YAAgBC,KAGpBb,EAAwB,SAACzjC,GAC7B,OAAIA,EAAMyG,OAAS,EAAU,oDACzB+9B,oBAASxkC,IAAU,EAAU,sCAAjC,GAGF,OACE,eAAC6jC,GAAD,WACE,cAAC1e,GAAD,aACExoB,KAAK,OACLka,MAAM,UACN2b,YAAY,MACZ7Q,aAAa,MACbyD,OAAO,SACPplB,MAAO4jC,EACPptB,SAAU,SAACC,GACT,IAAMzW,EAAQwkC,oBAAS7hB,GAAWlM,EAAEC,OAAO1W,QACrCglC,EAAiB7gC,OAAOnE,GAAOuM,UAAU,EA3DnC,GA4DZ23B,EAAiBc,GACjBN,EAAiBM,EAAgBb,IAEnCc,SAAU,kBAAMxB,EAAsBG,IACtCve,WAAY,CACV,cAAe,4BACf4a,UAAW,MAETnmB,IAEN,4BAAI,QACJ,cAACqL,GAAD,aACExoB,KAAK,OACLka,MAAM,UACN2b,YAAY,KACZ7Q,aAAa,MACbyD,OAAO,SACPplB,MAAOmkC,EACP3tB,SAAU,SAACC,GACT,IAAMzW,EAAQwkC,oBAAS7hB,GAAWlM,EAAEC,OAAO1W,QACrCglC,EAAiB7gC,OAAOnE,GAAOuM,UAAU,EAhFnC,GAiFZ63B,EAAkBY,GAClBN,EAAiBd,EAAeoB,IAElCC,SAAU,kBAAMxB,EAAsBU,IACtC9e,WAAY,CACV,cAAe,6BACf4a,UAAW,MAETnmB,IAEL,WCpEQorB,GAzBX,SAAC,GAAmC,IAAjCllC,EAAgC,EAAhCA,MAAOwW,EAAyB,EAAzBA,SAAasD,EAAY,qCACrC,OACE,eAAC+pB,GAAD,WACE,cAAC1e,GAAD,aACEtO,MAAM,UACNwO,WAAY,CACV,cAAe,mBACf4a,UAAW,KAEbnpB,MAAM,QACNsO,OAAO,SACPzD,aAAa,MACb6Q,YAAY,OACZxyB,MAAOA,EACPwW,SAAU,SAACC,GACT,IAAMstB,EAAiBhhB,GAAoBtM,EAAEC,OAAO1W,OACpDwW,EAASutB,KAEPjqB,IAEL,YCKQqrB,GAzBX,SAAC,GAAmC,IAAjCnlC,EAAgC,EAAhCA,MAAOwW,EAAyB,EAAzBA,SAAasD,EAAY,qCACrC,OACE,eAAC+pB,GAAD,WACE,cAAC1e,GAAD,aACEtO,MAAM,UACNwO,WAAY,CACV,cAAe,mBACf4a,UAAW,KAEbnpB,MAAM,QACNsO,OAAO,SACPzD,aAAa,MACb6Q,YAAY,KACZxyB,MAAOA,EACPwW,SAAU,SAACC,GACT,IAAMstB,EAAiB9gB,GAAexM,EAAEC,OAAO1W,OAC/CwW,EAASutB,KAEPjqB,IAEL,UCFQsrB,GAtB+D,SAAC,GAIxE,IAHLplC,EAGI,EAHJA,MACAwW,EAEI,EAFJA,SACGsD,EACC,qCACJ,OACE,cAACqL,GAAD,aACEtO,MAAM,UACNwO,WAAY,CACV,cAAe,mBACf4a,UAAW,KAEbnpB,MAAM,QACNsO,OAAO,SACPzD,aAAa,MACb3hB,MAAOA,EACPwW,SAAU,SAACC,GAAD,OAAOD,EAASC,EAAEC,OAAO1W,SAC/B8Z,KCYKurB,GAzBX,SAAC,GAAmC,IAAjCrlC,EAAgC,EAAhCA,MAAOwW,EAAyB,EAAzBA,SAAasD,EAAY,qCACrC,OACE,eAAC+pB,GAAD,WACE,cAAC1e,GAAD,aACEtO,MAAM,UACNwO,WAAY,CACV,cAAe,mBACf4a,UAAW,KAEbnpB,MAAM,QACNsO,OAAO,SACPzD,aAAa,MACb6Q,YAAY,KACZxyB,MAAOA,EACPwW,SAAU,SAACC,GACT,IAAMstB,EAAiB7gB,GAAczM,EAAEC,OAAO1W,OAC9CwW,EAASutB,KAEPjqB,IAEL,UCKQwrB,GAzBX,SAAC,GAAmC,IAAjCtlC,EAAgC,EAAhCA,MAAOwW,EAAyB,EAAzBA,SAAasD,EAAY,qCACrC,OACE,eAAC+pB,GAAD,WACE,cAAC1e,GAAD,aACEtO,MAAM,UACNwO,WAAY,CACV,cAAe,mBACf4a,UAAW,KAEbnpB,MAAM,QACNsO,OAAO,SACPzD,aAAa,MACb6Q,YAAY,KACZxyB,MAAOA,EACPwW,SAAU,SAACC,GACT,IAAMstB,EAAiB5gB,GAAiB1M,EAAEC,OAAO1W,OACjDwW,EAASutB,KAEPjqB,IAEL,YCOQyrB,GA7B6D,SAAC,GAItE,IAHLvlC,EAGI,EAHJA,MACAwW,EAEI,EAFJA,SACGsD,EACC,qCACJ,OACE,eAAC+pB,GAAD,WACE,cAAC1e,GAAD,aACEtO,MAAM,UACNwO,WAAY,CACV,cAAe,mBACf4a,UAAW,KAEbnpB,MAAM,QACNsO,OAAO,SACPzD,aAAa,MACb6Q,YAAY,KACZxyB,MAAOA,EACPwW,SAAU,SAACC,GACT,IAAMstB,EAAiB3gB,GAAsB3M,EAAEC,OAAO1W,OACtDwW,EAASutB,KAEPjqB,IAEL,SCIQ0rB,GAnBX,SAAC,GAAiC,IAA/B3H,EAA8B,EAA9BA,cAAkB/jB,EAAY,kCACnC,OAAI+jB,IAAkB4D,GAAoBG,eACjC,cAAC,GAAD,eAAwB9nB,IACxB+jB,IAAkB4D,GAAoBE,iBACtC,cAAC,GAAD,eAA0B7nB,IAC1B+jB,IAAkB4D,GAAoBI,YACtC,cAAC,GAAD,eAAqB/nB,IACrB+jB,IAAkB4D,GAAoBK,WACtC,cAAC,GAAD,eAAoBhoB,IACpB+jB,IAAkB4D,GAAoBM,cACtC,cAAC,GAAD,eAAuBjoB,IACvB+jB,IAAkB4D,GAAoBC,eACtC,cAAC,GAAD,eAAwB5nB,IACxB+jB,IAAkB4D,GAAoBO,kBACtC,cAAC,GAAD,eAAiBloB,IAEnB,cAAC,GAAD,eAAkBA,KCnBdiK,GAAmBC,OAAa9D,MAAM,CACjDulB,iBAAkBzhB,OAAa3C,SAC7B,oDAEFwc,cAAe7Z,OAAa3C,SAAS,6BACrCxS,YAAamV,OAAagD,IACxB,IACA,6DAEFoc,kBAAmBpf,OAChB0hB,SACAC,KAAK,gBAAiB,CACrBC,GAAIzhC,OAAOs9B,GAAoBG,gBAC/B9/B,KAAMkiB,OACHC,MACCzX,OAAOC,KAAK21B,IACZ,+CAED/gB,eAIIwkB,GAAsB,SACjC9G,EACA+G,GAEA,IAsBiE,EAtB3DjI,EAAgBx3B,OAAO04B,EAAWlB,eAExC,GAAIA,IAAkB4D,GAAoBG,eAAgB,CAAC,IAAD,EAClDmE,KAAe,OAACD,QAAD,IAACA,GAAD,UAACA,EAAaE,uBAAd,aAAC,EAA8Bt/B,MAClD,SAACu/B,GAAD,MACE,CAAC,gBAAiB,wBAAwB7nC,SAAS+F,OAAO8hC,EAAIC,kBAC9D,CAACjE,GAAuBC,eAAgBD,GAAuBE,gBAAgB/jC,SAAS6nC,EAAIE,gBAEhG,OAAOnD,GACLjE,EAAW0G,iBADe,OAE1BK,QAF0B,IAE1BA,OAF0B,EAE1BA,EAAazV,YACb0V,EACAhH,EAAWqE,mBAER,OAAIvF,IAAkB4D,GAAoBE,iBACxCoB,GAAwBhE,EAAW0G,kBACjC5H,IAAkB4D,GAAoBI,YACxCiB,GAAmB/D,EAAW0G,kBAC5B5H,IAAkB4D,GAAoBK,WACxC0B,GAAkBzE,EAAW0G,kBAC3B5H,IAAkB4D,GAAoBM,cACxCU,GAAsB1D,EAAW0G,kBAC/B5H,IAAkB4D,GAAoBC,eACxC+B,GAAsB1E,EAAW0G,kBAAkB,UAAA1G,EAAWqH,mBAAX,eAAwB3/B,SAAU,QADvF,GC5DI4/B,GAAwB,SACnCC,EACAC,GAFmC,OAInCD,EAASp9B,KAAI,SAACs9B,GAAD,OACXC,GACED,IACEA,EAAQ7oC,OAAO,OAAC4oC,QAAD,IAACA,OAAD,EAACA,EAAYr7B,MAAK,gBAAGvN,EAAH,EAAGA,GAAH,OAAY6oC,EAAQ7oC,KAAOA,WAIvD8oC,GAAgC,SAC3CD,EACAE,GAF2C,MAGvC,CACJ/oC,GAAI6oC,EAAQ7oC,GACZmZ,MAAO0vB,EAAQG,YACfD,QAAO,OAAEA,QAAF,IAAEA,OC+PIE,GAtOqC,SAAC,GAM9C,IALLhI,EAKI,EALJA,OACAC,EAII,EAJJA,OACAC,EAGI,EAHJA,cACA0C,EAEI,EAFJA,YACAR,EACI,EADJA,YACI,EACsCtgC,oBAAS,GAD/C,mBACGmmC,EADH,KACkBC,EADlB,OAEoCpmC,oBAAS,GAF7C,mBAEGqmC,EAFH,KAEiBC,EAFjB,OAG4BtmC,mBAAwB,IAHpD,mBAGG4lC,EAHH,KAGaW,EAHb,OAIsCvmC,mBAAe,IAAIuD,MAJzD,mBAIGg9B,EAJH,KAIkBC,EAJlB,KAKI/6B,EAAoB7E,qBAAWkR,IAA/BrM,gBASFi5B,EAAe,uCAAG,WACtBL,EADsB,wBAAA9jC,EAAA,6DAEpBisC,EAFoB,EAEpBA,UAEIr6B,EAAwB,CAC5Bs0B,QAASpC,EAAWoC,QACpBzoC,KAAMqmC,EAAW0G,iBACjB5H,cAAex3B,OAAO04B,EAAWlB,eACjCuD,eAAgBH,EAAc/B,cAC9BmE,YAAa,CACX8D,YAAY,IAAIljC,MAAOi7B,cACvBuG,iBAAkB1G,EAAW0G,iBAC7B2B,uBAAwBrI,EAAWoC,UAIvCpC,EAAWqH,YAAcE,EAAS59B,QAAO,SAAA89B,GAAO,OAAIA,EAAQE,WACxD3H,EAAWqH,cACbv5B,EAAUw2B,YAAYiD,SAAWvH,EAAWqH,YAAYl9B,KAAI,SAAAs9B,GAAY,MAAQ,CAAE7oC,GAAI6oC,EAAQ7oC,QAI5FohC,EAAWlB,gBAAkB4D,GAAoBC,iBAC7C2F,EAAkBtI,GACR0G,iBAAmB1G,EAAW0G,iBAAiBx8B,MAAM,KAAK,GAC1Eq+B,EAAsBzB,GAAoBwB,EAAD,OAAkBlhC,QAAlB,IAAkBA,OAAlB,EAAkBA,EAAiBowB,UAE5E+Q,EAAsBzB,GAAoB9G,EAAD,OAAa54B,QAAb,IAAaA,OAAb,EAAaA,EAAiBowB,SAGnE+Q,IACJz6B,EAAUw2B,YAAV,2BACKx2B,EAAUw2B,aACViE,IAjCe,SAoChB1I,EAAO/xB,EAAWg6B,GApCF,OAqCtBI,EAAY,IACZC,IAtCsB,4CAAH,wDAdjB,4CA2DJ,8BAAAjsC,EAAA,sEAC6BvD,EAAc8F,IAAI,iBAD/C,OACQ4oC,EADR,OACiE5pC,KACzD+qC,EAAkClB,GAAsBD,GAC9Da,EAAYM,GAHd,4CA3DI,sBAwEJ,OAjBAloC,qBAAU,YAvDN,mCAwDFmoC,KACC,IAgBD,cAAC,GAAD,UACE,cAAC,KAAD,CACEzjB,iBAAkBA,GAClBW,cArE4B,CAChCmZ,cAAe,GACfsD,QAAS,GACTsE,iBAAkB,GAClBrC,kBAAmB,WAkEfze,SAAUya,EACVpa,kBAAkB,EAJpB,SAMG,YAA8C,IAA3CU,EAA0C,EAA1CA,aAAcd,EAA4B,EAA5BA,OAAQC,EAAoB,EAApBA,cACxB,OACE,eAAC,GAAD,WACE,cAAC,GAAD,CACEnsB,KAAK,gBACLoe,MAAM,WACNyb,mBAAoB,CAClB,cAAe,iBAEjB1b,MAAM,UANR,gBAQGioB,QARH,IAQGA,OARH,EAQGA,EAAe51B,KAAI,SAACiC,GAAD,OAClB,cAAC,GAAD,CAA8BnL,MAAOmL,EAAKxN,GAAIkZ,MAAM,UAApD,SACG1L,EAAKzS,MADayS,EAAKxN,SAK9B,cAAC,GAAD,CACEkgC,cAAejZ,EAAOiZ,cACtBrnB,SAAU,SAACxW,GAAD,OACR6kB,EAAc,mBAAoB7kB,IAEpCA,MAAO4kB,EAAO6gB,iBACd/sC,KAAK,mBACLiF,GAAG,qBAEL,cAAC,GAAD,UACGinB,EAAOiZ,gBAAkB4D,GAAoBC,gBAAkB,cAAC,GAAD,CAC9DnqB,KAAK,QACLV,MAAM,UACNG,SAAU0O,EACV3O,QAAS,WACPiwB,GAAgB,IAL4C,kCAWlE,cAAC,KAAD,CAAyBxY,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,cAACc,GAAD,CACE5S,aAAa,WACb3oB,OAAO,mBACP5M,KAAK,gBACLsH,MAAOihC,EACPjB,YAAY,WACZqB,MAAM,EACNrT,QAASwT,EACTF,QAASN,EACTxqB,SAAU,SAACtS,GACTA,GAAQg9B,EAAiBh9B,QAI/B,cAACihB,GAAD,CACEtO,MAAM,UACNlZ,GAAG,UACHi1B,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,UAAW4a,UAAW,KACnDnpB,MAAM,oBACNpe,KAAK,UACL0sB,OAAO,SACPzD,aAAa,QAGd2kB,EAASp9B,KAAI,SAACs9B,EAASt3B,GAAV,OACZ,mCACGs3B,EAAQE,SAAW,cAACxvB,GAAA,EAAD,UAAyBsvB,EAAQ1vB,OAAhB5H,QAIzC,eAAC0E,GAAA,EAAD,CACEsB,KAAM6xB,EACN7Q,QAAS,kBAAM8Q,GAAgB,IAC/BlgB,MAAO,CACL,QAAW,OAJf,UAOE,cAAC3R,GAAA,EAAD,oCACA,cAACC,GAAA,EAAD,UACGkxB,EAASp9B,KAAI,SAACs9B,EAASt3B,GAAV,OACZ,cAACqG,GAAA,EAAD,CAEEuR,MAAO,CAAE5vB,QAAS,SAClByf,QACE,cAAC2d,GAAA,EAAD,CACEoS,QAASF,EAAQE,QACjBlwB,SAAU,kBAtGlC,SAAsBixB,GACpB,IAAMC,EAAcpB,EACdp3B,EAAQw4B,EAAYC,WAAU,SAAAnB,GAAO,OAAIA,EAAQ7oC,KAAO8pC,KAC9DC,EAAYx4B,GAAOw3B,SAAWgB,EAAYx4B,GAAOw3B,QACjDO,EAAYS,EAAYx+B,KAAI,SAAAiC,GAAI,OAAIA,MAkGEy8B,CAAYpB,EAAQ7oC,OAGxCmZ,MAAO0vB,EAAQ1vB,OARV5H,QAYX,cAACiY,GAAA,EAAD,UACE,cAAC,GAAD,UACE,cAAC,GAAD,CACEtQ,MAAM,UACNE,QAAS,kBAAMiwB,GAAgB,IAFjC,6BAUN,eAAC,GAAD,WACE,cAAC,GAAD,CACE1nB,cAAY,qBACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,EACV3O,QAAS,kBAAM+vB,GAAiB,IANlC,qCAUA,cAAC,GAAD,CACExnB,cAAY,qBACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,EACV3O,QAAS,kBAAM+vB,GAAiB,IANlC,gCAUA,cAAC,GAAD,CACExnB,cAAY,qBACZvI,QAAS8nB,EACTtnB,KAAK,QACLV,MAAM,UAJR,kCCxPHgxB,GAAmB,SAC9BC,EACAC,GAEA,IAAIC,EACJ,OAAQF,GACN,IAAK,OACHE,EAAuC,GAAlBD,EAAsB,aAAe,cAC1D,MACF,IAAK,UACHC,EAAuC,GAAlBD,EAAsB,aAAY,cACvD,MACF,IAAK,SACHC,EAAuC,GAAlBD,EAAsB,WAAU,YACrD,MACF,IAAK,QACHC,EAzBmB,SACvBD,GAEA,OAAIA,EACKA,GAAkB,EAAI,OAAS,QAEjC,OAmBkBE,CAAiBF,GACtC,MACF,IAAK,UACHC,EAAuC,GAAlBD,EAAsB,SAAW,UACtD,MACF,IAAK,cACHC,EAAuC,GAAlBD,EAAsB,iBAAgB,kBAC3D,MACF,IAAK,UACHC,EAAuC,GAAlBD,EAAsB,YAAc,cACzD,MACF,IAAK,OACHC,EACoB,GAAlBD,EACI,wBACA,0BACN,MACF,IAAK,KACHC,EAAqB,KACrB,MACF,IAAK,QACHA,EAAuC,GAAlBD,EAAsB,SAAW,WACtD,MACF,IAAK,QACHC,EAAuC,GAAlBD,EAAsB,QAAU,SACrD,MACF,IAAK,QACHC,EACoB,GAAlBD,EAAsB,kBAAoB,qBAC5C,MACF,IAAK,UACHC,EAAuC,GAAlBD,EAAsB,UAAY,WAM3D,OAAOC,GAGIE,GAA6B,SACxCC,GAEA,IAAIC,EACJ,OAAQD,GACN,IAAK,OACHC,EAAkB,OAClB,MACF,IAAK,aACHA,EAAkB,aAClB,MACF,IAAK,eACHA,EAAkB,gBAClB,MACF,IAAK,cACHA,EAAkB,cAClB,MACF,IAAK,gBACHA,EAAkB,gBAClB,MACF,IAAK,OACHA,EAAkB,QAClB,MACF,IAAK,SACHA,EAAkB,QAClB,MACF,IAAK,aACHA,EAAkB,gBAClB,MACF,IAAK,QACHA,EAAkB,aAClB,MACF,IAAK,SACHA,EAAkB,SAClB,MACF,IAAK,YACHA,EAAkB,YAClB,MACF,IAAK,UACHA,EAAkB,UAMtB,OAAOA,G,8bC7GF,IAAMpwB,GAAYrZ,IAAOgW,IAAV,MAGJ,qBAAGd,MAAkBC,QAAQ,MAGlCu0B,GAAgB1pC,IAAOgW,IAAV,MACP,qBAAGd,MAAkBC,QAAQ,MAGnCw0B,GAAO3pC,YAAOuY,KAAPvY,CAAH,MAEN,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAGnColB,GAAQ9d,YAAO2pC,GAAP3pC,CAAH,MACD,qBAAGkV,MAAkB8B,WAAW4yB,kBC6BlCC,GApC6D,SAAC,GAEtE,IAAD,IADJ96B,EACI,EADJA,WAGEq6B,EAKEr6B,EALFq6B,eACAU,EAIE/6B,EAJF+6B,aACAN,EAGEz6B,EAHFy6B,eACAO,EAEEh7B,EAFFg7B,aACAj7B,EACEC,EADFD,YAGIk7B,EAAyBtiC,OAAM,OAACoH,QAAD,IAACA,GAAD,UAACA,EAAa/U,YAAd,aAAC,EAAmB0K,OAAO,QAAU,EACpEwlC,EAAgB,OAAGn7B,QAAH,IAAGA,GAAH,UAAGA,EAAa/U,YAAhB,aAAG,EAAmBkN,MAAM+iC,GAElD,OACE,eAAC,GAAD,WACE,cAACN,GAAD,UACE,cAACC,GAAD,UAAOM,MAET,eAACP,GAAD,WACE,cAAC,GAAD,oCACA,eAACC,GAAD,WACGJ,GAA2BC,GAD9B,SACqDJ,EAAgB,IAClEF,GAAiBY,EAAcV,WAGjCW,GACD,eAACL,GAAD,WACE,cAAC,GAAD,oCACA,cAACC,GAAD,UAAOI,WCvCJ3kB,GAAmBC,OAAa9D,MAAM,CACjD2oB,aAAc7kB,OAAa3C,SAAS,oCACpCxS,YAAamV,OAAagD,IACxB,IACA,iEC8JW8hB,GAnIoC,SAAC,GAM7C,IALLlK,EAKI,EALJA,OACAC,EAII,EAJJA,OACAkK,EAGI,EAHJA,YACAvH,EAEI,EAFJA,YACAR,EACI,EADJA,YACI,EAKsCtgC,mBAAe,IAAIuD,MALzD,mBAKGg9B,EALH,KAKkBC,EALlB,OASAxgC,qBATA,mBAOFsoC,EAPE,KAQFC,EARE,KAWJ5pC,qBAAU,WACH0pC,GACHnpC,IAAMxG,MACJ,gJAGH,IAEH,IAAMgmC,EAAe,uCAAG,WAAOL,GAAP,iBAAA9jC,EAAA,6DAChB4R,EAAwB,CAC5Bs0B,QAASpC,EAAWoC,QACpBC,eAAgBH,EAAc/B,cAC9B2J,aAAcxiC,OAAO04B,EAAW8J,cAChChL,cAAa,UAAEkL,EAAY79B,MACzB,SAACwC,GAAD,OAAgBA,EAAW/P,KAAOohC,EAAW8J,uBADlC,aAAE,EAEZhL,eAPiB,SAShBe,EAAO/xB,GATS,2CAAH,sDAiBrB,OACE,cAAC,GAAD,UACE,cAAC,KAAD,CACEkX,iBAAkBA,GAClBW,cAvC4B,CAChCyc,QAAS,GACT0H,aAAc,IAsCVlkB,SAAUya,EACVpa,kBAAkB,EAJpB,SAMG,YAAuB,IAApBU,EAAmB,EAAnBA,aACF,OACE,eAAC,GAAD,WACE,cAAC,GAAD,CACEhtB,KAAK,eACLoe,MAAM,cACNyb,mBAAoB,CAClB,cAAe,gBAEjB1b,MAAM,UANR,SAQGkyB,EAAY7/B,KAAI,SAACiC,GAAD,aACf,cAAC,GAAD,CAEEnL,MAAOmL,EAAKxN,GACZkZ,MAAM,UACNE,QAAS,kBA7BS,SAAC8xB,GACnC,IAAMn7B,EAAaq7B,EAAY79B,MAAK,qBAAGvN,KAAgBkrC,KACvDI,EAAsBv7B,GA2BSw7B,CAA4B7iC,OAAO8E,EAAKxN,MAJzD,gBAMGwN,QANH,IAMGA,GANH,UAMGA,EAAMsC,mBANT,aAMG,EAAmB/U,MALfyS,EAAKxN,WASbqrC,GACD,cAAC,GAAD,CACEt7B,WAAYs7B,IAGhB,cAAC,KAAD,CAAyBxa,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,cAACc,GAAD,CACE/pB,MAAM,oBACNmX,aAAa,WACb3oB,OAAO,mBACP5M,KAAK,gBACLsH,MAAOihC,EACPjB,YAAY,WACZqB,MAAM,EACNrT,QAASwT,EACTF,QAASN,EACTxqB,SAAU,SAACtS,GACTA,GAAQg9B,EAAiBh9B,QAI/B,cAACihB,GAAD,CACEtO,MAAM,UACNlZ,GAAG,UACHi1B,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,UAAW4a,UAAW,KACnDnpB,MAAM,oBACNpe,KAAK,UACL0sB,OAAO,SACPzD,aAAa,QAEf,eAAC,GAAD,WACE,cAAC,GAAD,CACErC,cAAY,sBACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,EALZ,oBASA,cAAC,GAAD,CACEpG,cAAY,sBACZvI,QAAS8nB,EACTtnB,KAAK,QACLV,MAAM,UAJR,kCCjJHkN,GAAmBC,OAAa9D,MAAM,CACjDxnB,KAAMsrB,OAAamlB,WACnBtL,cAAe7Z,OAAa3C,SAAS,6BACrCxS,YAAamV,OAAagD,IACxB,IACA,iEC2JWoiB,GAlIiC,SAAC,GAM1C,IALLxK,EAKI,EALJA,OACAC,EAII,EAJJA,OACAC,EAGI,EAHJA,cACA0C,EAEI,EAFJA,YACAR,EACI,EADJA,YACI,EACsCtgC,oBAAS,GAD/C,mBACGmmC,EADH,KACkBC,EADlB,OAOsCpmC,mBAAe,IAAIuD,MAPzD,mBAOGg9B,EAPH,KAOkBC,EAPlB,KASE9B,EAAe,uCAAG,WACtBL,EADsB,oBAAA9jC,EAAA,6DAEpBisC,EAFoB,EAEpBA,UAEIr6B,EAAwB,CAC5Bs0B,QAASpC,EAAWoC,QACpBzoC,KAAMqmC,EAAWrmC,KACjBmlC,cAAex3B,OAAO04B,EAAWlB,eACjCuD,eAAgBH,EAAc/B,eARV,SAUhBN,EAAO/xB,EAAWg6B,GAVF,OAWtBK,IAXsB,2CAAH,wDAcrB,OACE,cAAC,GAAD,UACE,cAAC,KAAD,CACEnjB,iBAAkBA,GAClBW,cAzB4B,CAChCmZ,cAAe,GACfsD,QAAS,GACTzoC,KAAM,IAuBFisB,SAAUya,EACVpa,kBAAkB,EAJpB,SAMG,YAAuB,IAApBU,EAAmB,EAAnBA,aACF,OACE,eAAC,GAAD,WACE,cAAC,GAAD,CACEhtB,KAAK,gBACLoe,MAAM,iBACNyb,mBAAoB,CAClB,cAAe,iBAEjB1b,MAAM,UANR,SAQGioB,EAAc51B,KAAI,SAACiC,GAAD,OACjB,cAAC,GAAD,CAA8BnL,MAAOmL,EAAKxN,GAAIkZ,MAAM,UAApD,SACG1L,EAAKzS,MADayS,EAAKxN,SAK9B,cAACwnB,GAAD,CACEtO,MAAM,UACNlZ,GAAG,OACH0nB,WAAY,CAAE,cAAe,OAAQ4a,UAAW,KAChDnpB,MAAM,kBACNpe,KAAK,OACL0sB,OAAO,SACPzD,aAAa,QAEf,cAAC,KAAD,CAAyB6M,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,cAACc,GAAD,CACEhqB,MAAM,UACNoX,aAAa,WACb3oB,OAAO,mBACP5M,KAAK,gBACLsH,MAAOihC,EACPjB,YAAY,WACZqB,MAAM,EACNrT,QAASwT,EACTF,QAASN,EACTxqB,SAAU,SAACtS,GACTA,GAAQg9B,EAAiBh9B,QAI/B,cAACihB,GAAD,CACEtO,MAAM,UACNlZ,GAAG,UACHi1B,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,UAAW4a,UAAW,KACnDnpB,MAAM,oBACNpe,KAAK,UACL0sB,OAAO,SACPzD,aAAa,QAEf,eAAC,GAAD,WACE,cAAC,GAAD,CACErC,cAAY,iBACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,EACV3O,QAAS,kBAAM+vB,GAAiB,IANlC,gCAUA,cAAC,GAAD,CACExnB,cAAY,iBACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,EACV3O,QAAS,kBAAM+vB,GAAiB,IANlC,qCAUA,cAAC,GAAD,CACExnB,cAAY,iBACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,EACV3O,QAAS,kBAAM8nB,KANjB,kC,yuCC1IT,IAAMpS,GAAwB9tB,YAAOwmB,GAAPxmB,CAAH,MAIrBqZ,GAAYrZ,IAAOgW,IAAV,MAOT,qBAAGd,MAAkBC,QAAQ,MACpC,qBAAGD,MAAkBC,QAAQ,MAGtBu1B,GAAO1qC,IAAOgW,IAAV,MAOK,qBAAGd,MAAkBE,QAAQI,UAAU9c,QAC1C,qBAAGwc,MAAkBqM,MAAMC,gBAClC,qBAAGtM,MAAkBC,QAAQ,MAC5B,qBAAGD,MAAkBC,QAAQ,MAI7Bw1B,GAAqB3qC,IAAOgW,IAAV,MAId,qBAAGd,MAAkBC,QAAQ,MAGjCy1B,GAAgB5qC,IAAOgW,IAAV,MAKd,qBAAGd,MAAkBC,QAAQ,MAG5BN,GAAS7U,YAAO4U,GAAP5U,CAAH,MACR,qBAAGkV,MAAkBE,QAAQy1B,KAAKnyC,QAC3B,qBAAGwc,MAAkBE,QAAQy1B,KAAKnyC,QACrC,qBAAGwc,MAAkB8B,WAAWkU,GAAGhU,YAIrC4zB,GAAa9qC,YAAOy3B,KAAPz3B,CAAH,MCjCVolB,GAAmBC,OAAa9D,MAAM,CACjD7mB,QAAS2qB,OAAagD,IACpB,IACA,gEC6DW0iB,GA1DV,SAAC,GAAsD,IAApDhlB,EAAmD,EAAnDA,cAAeC,EAAoC,EAApCA,SAAUmE,EAA0B,EAA1BA,SAAU6gB,EAAgB,EAAhBA,UACjCluB,EAAmBna,qBAAWka,IAA9BC,eACFmuB,EDDwB,WAAkB,IACxC1oC,EAAaI,qBAAWd,IAAxBU,SACR,MAAO,CACL2oC,YAAa,YACbC,SAAU,iDACVhzB,MAAO/R,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MACxB,yBACA,gCACJ6xB,YAAaztB,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAC9B,0DACA,kECTeopC,GACrB,OACE,cAAC,KAAD,CACErlB,cAAeA,EACfX,iBAAkBA,GAClBY,SAAUA,EACVK,kBAAkB,EAClB8D,SAAUA,EALZ,SAOG,SAAC7D,GAAD,OACC,cAACwkB,GAAD,CAAYvkB,YAAU,EAAtB,SACE,eAAC,GAAD,WACE,eAAC,GAAD,WACE,cAACokB,GAAD,UACE,cAACpyB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,UACY,OAATi2B,QAAS,IAATA,OAAA,EAAAA,EAAWG,WAAYF,EAAaE,aAGzC,cAAC,GAAD,CACEloB,GAAIuK,GACJzzB,KAAK,UACLoe,OAAgB,OAAT6yB,QAAS,IAATA,OAAA,EAAAA,EAAW7yB,QAAS8yB,EAAa9yB,MACxC2b,gBAAiB,CAAEC,QAAQ,GAC3BF,aAAsB,OAATmX,QAAS,IAATA,OAAA,EAAAA,EAAWnX,cAAeoX,EAAapX,YACpDpN,OAAO,SACPwN,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,WAC7BrlB,MAAOilB,EAAOL,OAAOvrB,QACrBD,MAAOiQ,QAAQ4b,EAAOzD,OAAOnoB,SAC7BwoB,WAAYoD,EAAOzD,OAAOnoB,QAC1Bmd,SAAU,SAACC,IACT,OAAIkzB,QAAJ,IAAIA,OAAJ,EAAIA,EAAWK,eACbL,EAAUK,aAAavzB,EAAEC,OAAO1W,OAElCilB,EAAO+kB,aAAavzB,WAIzB,OAACkzB,QAAD,IAACA,OAAD,EAACA,EAAWM,eACX,cAACV,GAAD,UACE,cAAC,GAAD,CACE5sC,KAAK,SACLqa,SAAUiO,EAAOS,cAAmC,WAAnBjK,EAFnC,UAIY,OAATkuB,QAAS,IAATA,OAAA,EAAAA,EAAWE,cAAeD,EAAaC,yBCxE7CK,GAAqC,SAChDvyC,EACA6E,GAFgD,OAIhD8K,GAAmB3P,EAAO,QAAR,sBAAiB,sBAAAsD,EAAA,+EAC1B,CAAEuB,OAAMiL,WAAY,MADM,6CCA/BkC,GAAgD,CACpD5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MAqCM+wC,GAlCM,WAAO,IAAD,EACCjrC,qBACxBkJ,KACAuB,IAHuB,mBAClB7K,EADkB,KACXM,EADW,KAMnBgrC,EAAwBjuC,sBAAW,uCACvC,WAAOkuC,EAAqB7tC,GAA5B,iBAAAvB,EAAA,sEAEImE,EAAS,CAAEzC,KAAM,YACX2tC,EAAoBJ,GACxBvyC,EACA6E,GALN,SAO2B8tC,EAAkB,GAAD,OAxB/B,kBAwB+B,YACvBD,EADuB,YAEtC7tC,GATN,cAOUtC,EAPV,OAWIkF,EAAS,CAAEzC,KAAM,SAAU2L,QAASpO,EAASsC,OAXjD,kBAYWW,QAAQC,QAAQlD,IAZ3B,yCAcIkF,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAdrC,kBAeWnL,QAAQE,OAAR,OAfX,0DADuC,wDAmBvC,IAGF,OAAO,2BACFyB,GADL,IAEEsrC,2B,sYC5CG,IAAM3gB,GAAkB9qB,IAAOgW,IAAV,MAWfqD,GAAYrZ,IAAOgW,IAAV,M,oBCeT41B,GAA2B,SAAC,GASU,IARjD19B,EAQgD,EARhDA,UACAU,EAOgD,EAPhDA,UACAw7B,EAMgD,EANhDA,YACAjK,EAKgD,EALhDA,cACA34B,EAIgD,EAJhDA,gBACA4M,EAGgD,EAHhDA,oBACAK,EAEgD,EAFhDA,kBACAH,EACgD,EADhDA,kBAEMu3B,EAAgB,IAAIvmC,KAC1BumC,EAAcC,gBAAgB,GAC9B,IAAMlsC,EAASmsC,GAAmB,CAChCtJ,eAAgBv0B,EAAUu0B,eAC1B7zB,YACA6F,oBACAH,sBAGF,OAAO,2BACFpG,GADL,IAEEtO,SACA0L,QAAS0gC,GAAwBpsC,EAAQ4H,GACzCmkB,iBAAkBsgB,GAChBrsC,EACAwU,GAEFjJ,UAAS,OAAE3D,QAAF,IAAEA,OAAF,EAAEA,EAAiB2D,UAC5BuB,UAAWm/B,EAActL,cACzB2L,gBAAiBL,EAActL,cAE/BxxB,WAAYo9B,GAA0Bj+B,EAAWk8B,GACjD1F,YAAa0H,GAA4Bl+B,EAAW1G,GACpDsH,YAAau9B,GAA4B,CACvCn+B,YACAU,YACAw7B,cACAjK,qBAKOmM,GAAgC,SAC3CC,GAEA,OAAQA,GACN,IAAK,SAEL,IAAK,cACH,MAAO,UACT,IAAK,iBACH,MAAO,eACT,IAAK,cACH,MAAO,aACT,IAAK,UACH,MAAO,cACT,QACE,MAAM,IAAIzoC,MAAM,wBAIhBioC,GAAqB,SAAC,GAUC,IAT3BtJ,EAS0B,EAT1BA,eACA7zB,EAQ0B,EAR1BA,UACA6F,EAO0B,EAP1BA,kBACAH,EAM0B,EAN1BA,kBAOA,GACEk4B,GAAiB/J,EAAgBhuB,IACnB,YAAd7F,EAEA,MAAO,WACF,GACL69B,GAAsBhK,EAAgBnuB,EAAmBG,GAEzD,MAAO,eAGP,MADAxT,IAAMxG,MAAM,8DACN,IAAIqJ,MAAM,uBAId2oC,GAAwB,SAC5BnK,EACAD,EACAQ,GAEA,QAAKP,MAEHO,GACAR,GACAqK,aAAiB,IAAIpnC,KAAKg9B,GAAgB,CACxCh7B,MAAO,IAAIhC,KAAK+8B,GAChBsK,IAAK,IAAIrnC,KAAKu9B,OAKd2J,GAAmB,SACvBlK,EACAsK,GAEA,SAAKA,IAAqBtK,IACnBuK,aAAQ,IAAIvnC,KAAKg9B,GAAgB,IAAIh9B,KAAKsnC,KAG7CZ,GAA0B,SAC9BpsC,EACA4H,GAEA,MAAkB,aAAX5H,GAAA,OAAoC4H,QAApC,IAAoCA,OAAZ7D,EAAY6D,EAAiBxI,IAGxDitC,GAAmC,SACvCrsC,EACAwU,GAEA,MAAkB,aAAXxU,GAAA,OAAoCwU,QAApC,IAAoCA,OAAZzQ,EAAYyQ,EAAqBpV,IAG5DmtC,GAA4B,SAChCj+B,EACAk8B,GAEA,OAAOA,EAAY79B,MACjB,SAACwC,GAAD,OAAgBA,EAAW/P,KAAOkP,EAAUg8B,iBAI1CkC,GAA8B,SAClCl+B,EACA1G,GAEA,OAAO0G,EAAUw2B,YAAV,2BAEEx2B,EAAUw2B,aAFZ,IAGDv5B,UAAS,OAAE3D,QAAF,IAAEA,OAAF,EAAEA,EAAiB2D,UAC5B+zB,cAAa,OAAEhxB,QAAF,IAAEA,OAAF,EAAEA,EAAWgxB,qBAE5Bv7B,GAGA0oC,GAA8B,SAAC,GAUK,IAAD,EATvCn+B,EASuC,EATvCA,UACAU,EAQuC,EARvCA,UACAuxB,EAOuC,EAPvCA,cACAiK,EAMuC,EANvCA,YAOA,MAAqB,eAAdx7B,EAAA,UACHw7B,EAAY79B,MAAK,SAACwC,GAAD,OAAgBA,EAAW/P,KAAOkP,EAAUg8B,uBAD1D,aACH,EACIp7B,YACJqxB,EAAc5zB,MACZ,SAACuC,GAAD,OAAiBA,EAAY9P,KAAOkP,EAAUgxB,kBC4FvC4N,GAzOoB,WAAO,IAAD,EACG/qC,mBACxC,IAFqC,mBAChCo+B,EADgC,KACjB0B,EADiB,OAID9/B,mBAA4B,IAJ3B,mBAIhCqoC,EAJgC,KAInB2C,EAJmB,OAWnCpqC,qBAAWkR,IALbrM,EANqC,EAMrCA,gBACA4M,EAPqC,EAOrCA,oBACAE,EARqC,EAQrCA,kBACAG,EATqC,EASrCA,kBACAE,EAVqC,EAUrCA,uBAEMnG,EAAa7L,qBAAWgR,IAAxBnF,SACFpD,EAASuzB,cACTpnB,EAAUC,cACVw1B,EAlCiB,SAAC/qB,GACxB,OAAQA,GACN,IAAK,SACH,MAAO,SACT,IAAK,cACH,MAAO,cACT,IAAK,iBACH,MAAO,oBACT,IAAK,cACH,MAAO,cACT,IAAK,UACH,MAAO,WACT,IAAK,YACH,MAAO,kBACT,QACE,MAAO,IAmBOgrB,CAAiBznC,OAAO4F,EAAOwD,YAfV,EAsBnC0E,KALFC,EAjBqC,EAiBrCA,mBACAC,EAlBqC,EAkBrCA,eACAC,EAnBqC,EAmBrCA,oBACAC,EApBqC,EAoBrCA,mBACAvR,EArBqC,EAqBrCA,QArBqC,EA0BnCsN,KAFFC,EAxBqC,EAwBrCA,wCACSw9B,EAzB4B,EAyBrC/qC,QAEMwM,EAAqBH,IAArBG,iBACA88B,EAA0BD,KAA1BC,sBA5B+B,EA6BD1pC,qBA7BC,mBA6BhC8gC,EA7BgC,KA6BnBsK,EA7BmB,OA8BDprC,qBA9BC,mBA8BhCsgC,EA9BgC,KA8BnB+K,EA9BmB,KAgCvC1sC,qBAAU,WACJ+T,GACF04B,EAAe14B,EAAkB8rB,eAE/BjsB,GACF84B,EAAe94B,EAAkBisB,iBAElC,CAAC9rB,EAAmBH,IAEvB5T,qBAAU,WACR2sC,MACC,CAACjiC,EAAOwD,YAEX,IAAMy+B,EAAc,WAClB,OAAQjiC,EAAOwD,WACb,IAAK,cACH,OAAO0+B,IACT,IAAK,YACH,MACF,QACE,OAAOC,MAIPD,EAAe,uCAAG,4BAAAhxC,EAAA,sEACIoT,EACxBhI,OAAM,OAACF,QAAD,IAACA,OAAD,EAACA,EAAiB2D,YACxBjO,OAAM,kBAAM+D,IAAMxG,MAAM,oCAHJ,OAChB2vC,EADgB,OAItB2C,EAAe3C,GAJO,2CAAH,qDAOfmD,EAAiB,uCAAG,4BAAAjxC,EAAA,sEACIkxC,IAA6BtwC,OAAM,kBAC7D+D,IAAMxG,MAAM,6BAFU,OAClB0lC,EADkB,OAIxB0B,EAAiB1B,GAJO,2CAAH,qDAOjBqN,EAA6B,WACjC,OAAQpiC,EAAOwD,WACb,IAAK,SACH,OAAO4E,IACT,IAAK,cACH,OAAOD,IACT,IAAK,iBACH,OAAOE,IACT,IAAK,UACH,OAAOC,IACT,QACE,MAAM,IAAI5P,MAAM,wBAIhB2pC,EAAiB,uCAAG,WACxBv/B,EACAg6B,GAFwB,mBAAA5rC,EAAA,6DAIlBsS,EAAY09B,GAA8BlhC,EAAOwD,WACjD8+B,EAAa9B,GAAyB,CAC1Ch9B,YACAV,YACAk8B,cACAjK,gBACA7rB,oBACAG,oBACAjN,kBACA4M,wBAbsB,kBAiBhBzF,EAAiBC,EAAW8+B,GAjBZ,OAkBtBzsC,IAAMmlB,QAAQ,2BACT8hB,GAAe3wB,EAAQqJ,SAnBN,gDAqBtBjkB,QAAQlC,MAAR,MACA2C,IAAA,OACMmC,EAAiBD,GAAoB,EAAD,MAExC2B,IAAMxG,MAAM8E,GAzBQ,yDAAH,wDA8BjBouC,EAAsB,uCAAG,WAAO1nB,GAAP,SAAA3pB,EAAA,+EAErBmvC,EAAsB/jC,OAAM,OAAC0M,QAAD,IAACA,OAAD,EAACA,EAAqBpV,IAAK,CAC3DsM,QAAO,OAAE9D,QAAF,IAAEA,OAAF,EAAEA,EAAiBxI,GAC1BtE,QAASurB,EAAOvrB,UAJS,OAM3Bia,IACA1T,IAAMmlB,QAAQ,0CACd7O,EAAQqJ,SARmB,gDAU3BjkB,QAAQC,IAAR,MACAqE,IAAMxG,MAAM,iEAXe,yDAAH,sDAetBmzC,EAAe,WACnBr2B,EAAQqJ,UAkFV,OACE,mCACE,cAAC,GAAD,UACGze,EACC,cAAC,GAAD,CAAiBA,QAASA,GAAW+qC,IAErC,qCACE,cAAC,GAAD,CAAQziB,eAAe,SAASnmB,MAAK,oBAAe0oC,KACpD,cAAC,GAAD,UAvF0B,SAAC,GAI9B,IAAD,EACJ,OADI,EAHJp+B,WAKE,IAAK,SACH,OACEuxB,GACE,cAAC,GAAD,CACEF,OAAQwN,EACRvN,OAAQ0N,EACRzN,cAAeA,EACf0C,YAAaA,EACbR,YAAaA,IAIrB,IAAK,cACH,OACElC,GACE,cAAC,GAAD,CACEF,OAAQwN,EACRvN,OAAQ0N,EACRzN,cAAeA,EACfkC,YAAaA,IAIrB,IAAK,iBACH,OACElC,GACE,cAAC,GAAD,CACEF,OAAQwN,EACRvN,OAAQ0N,EACRzN,cAAeA,EACf0C,YAAaA,EACbR,YAAaA,IAIrB,IAAK,cACH,OACE+H,GACE,cAAC,GAAD,CACEnK,OAAQwN,EACRvN,OAAQ0N,EACRxD,YAAaA,EACbvH,YAAaA,EACbR,YAAaA,IAIrB,IAAK,UACH,OACElC,GACE,cAAC,GAAD,CACEF,OAAQwN,EACRvN,OAAQ0N,EACRzN,cAAeA,EACf0C,YAAaA,EACbR,YAAaA,IAIrB,IAAK,YACH,OACE,cAAC,GAAD,CACErc,SAAU2nB,EACV5nB,cAAe,CACbrrB,SAA4B,OAAnB0Z,QAAmB,IAAnBA,GAAA,UAAAA,EAAqB1Z,eAArB,eAA8BA,UAAW,MAI1D,QACE,OAAO,8BAaAmzC,CAA4B,CAC3Bj/B,UAAWpJ,OAAO4F,EAAOwD,uB,grCC9QlC,IAAMk/B,GAAkB9tC,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,MAChC,qBAAGD,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAGvD,qBAAGxH,MAAkBE,QAAQI,UAAUnd,QAOvC01C,GAAiB/tC,IAAOgW,IAAV,MAKR,qBAAGd,MAAkBC,QAAQ,MAGnC64B,GAAWhuC,IAAOgW,IAAV,MAKT,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAS7B,qBAAG6c,MAAkBC,SAAS,OAG7B,qBAAGD,MAAkBC,QAAQ,MACpC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QCmBrCu1C,IDdejuC,IAAOgW,IAAV,MACV,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MAIpC,qBAAGD,MAAkBE,QAAQC,QAAQhd,QC1CoC,SAAC,GAKhF,IAJL61C,EAII,EAJJA,iBACAC,EAGI,EAHJA,eACAC,EAEI,EAFJA,cACAC,EACI,EADJA,YAEMC,EAAmB,SAACC,GACxB,OAAIA,EAAiB5nC,YAAO4nC,EAAU,cAC/B,IAGHC,EAAmB,SAACD,GACxB,OAAIA,EAAiB5nC,YAAO4nC,EAAU,SAC/B,IAGT,OACE,cAACT,GAAD,UACE,eAACC,GAAD,WACE,eAACC,GAAD,WACE,cAACz1B,GAAA,EAAD,CAAYL,MAAM,YAAYnD,QAAQ,KAAtC,SACGq5B,IAEH,8BACE,cAAC,KAAD,IACCE,EAAiBJ,MAEpB,8BACE,cAAC,KAAD,IACCM,EAAiBN,SAGtB,eAACF,GAAD,WACE,cAACz1B,GAAA,EAAD,CAAYL,MAAM,YAAYnD,QAAQ,KAAtC,SACGs5B,IAEH,8BACE,cAAC,KAAD,IACCC,EAAiBH,MAEpB,8BACE,cAAC,KAAD,IACCK,EAAiBL,gB,+MCnDvB,IAAMv3B,GAAmB5W,YAAOyuC,KAAPzuC,CAAH,MAIhB,gBAAGuiB,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAC3B,qBAAGrN,MAAkBC,QAAQ,MAG/B,gBAAGoN,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAC3B,qBAAGrN,MAAkBC,QAAQ,MCC7BwB,GALuD,SAAC,GAAD,QACpEuB,aADoE,MAC5D,UAD4D,EAEjEiD,EAFiE,iCAGhE,cAAC,GAAD,aAAkBoH,OAAQrK,GAAWiD,KCY5BuzB,GAtBkB,WAmB/B,MAAO,CAAEnwC,KAlBIf,sBAAW,uCACtB,WAAOmuB,EAAP,sBAAArvB,EAAA,6DAAmCqyC,EAAnC,EAAmCA,QAAStnC,EAA5C,EAA4CA,UAAWunC,EAAvD,EAAuDA,cAAvD,kBAEU51C,EAAMuF,KAAN,gCACqBotB,EADrB,sBAEJ,CACEgjB,UACAtnC,YACAunC,kBAPR,+EAWWpwC,QAAQE,OAAR,OAXX,wDADsB,wDAetB,MC2BWmwC,GA7B6C,SAAC,GAItD,IAHLt4B,EAGI,EAHJA,KACAghB,EAEI,EAFJA,QACAC,EACI,EADJA,UAEA,OACE,cAAC,GAAD,CAAcjhB,KAAMA,EAAMghB,QAASA,EAAnC,SACE,eAAC9gB,GAAA,EAAD,WACE,cAACD,GAAA,EAAD,6CACA,cAAC6gB,GAAA,EAAD,CAAmBjY,MAAM,SAAzB,oFAGA,eAACoJ,GAAA,EAAD,WACE,cAAC,GAAD,CAAcpQ,QAASmf,EAASrf,MAAM,UAAUnD,QAAQ,OAAxD,oBAGA,cAAC,GAAD,CACE4L,cAAY,0CACZvI,QAASof,EACTtf,MAAM,UAHR,gC,miFC5BH,IAAMmB,GAAYrZ,IAAOgW,IAAV,MAMT84B,GAAO9uC,IAAOgW,IAAV,MAGK,qBAAGd,MAAkBE,QAAQE,OAAOC,SAK7Cw5B,GAAwB/uC,IAAOgvC,EAAV,MACvB,qBAAG95B,MAAkBE,QAAQC,QAAQhd,QAKnCo/B,GAAOz3B,YAAO03B,KAAP13B,CAAH,MAIN,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAKzC,qBAAGxH,MAAkBC,SAAS,MAGjC85B,GAAmBjvC,YAAOkvC,KAAPlvC,CAAH,MAGhB,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QAGnC,qBAAG6c,MAAkBC,QAAQ,QACvB,qBAAGD,MAAkBC,QAAQ,MAG7B,qBAAGD,MAAkBC,QAAQ,MAG9B,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAI5C82C,GAAmBnvC,YAAOovC,KAAPpvC,CAAH,MAGhB,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QAGnC,qBAAG6c,MAAkBC,QAAQ,QACvB,qBAAGD,MAAkBC,QAAQ,MAG7B,qBAAGD,MAAkBC,QAAQ,MAG9B,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAI5Cs/B,GAAgB33B,IAAOgW,IAAV,MAKd,qBAAGd,MAAkBC,QAAQ,EAAG,MAG/BN,GAAS7U,YAAO4U,GAAP5U,CAAH,MAINqvC,GAAqBrvC,IAAOgW,IAAV,MAIlBs5B,GAAuBtvC,IAAOgW,IAAV,MAQb,qBAAGd,MAAkBC,QAAQ,MACpC,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAejC,qBAAG6c,MAAkBE,QAAQ3a,MAAMpC,QAMvCk3C,GAAwBvvC,IAAOgW,IAAV,MAKrB,qBAAGd,MAAkBE,QAAQC,QAAQhd,QAKrCm3C,GAAyBxvC,IAAOgW,IAAV,MACnB,qBAAGd,MAAkBC,QAAQ,MC3HhC+5B,GAYT,SAAC,GAA8C,IAA5Cn1C,EAA2C,EAA3CA,KAAMksB,EAAqC,EAArCA,OAAQC,EAA6B,EAA7BA,cAAkBmK,EAAW,kDAChD,OACE,cAAC4e,GAAD,2BACM5e,GADN,IAEE1P,cAAA,eAAqB5mB,GACrBA,KAAMA,EACNsH,MAAO4kB,EAAOlsB,GACd8d,SAAU,SAACtS,GAEL,OAAJA,QAAI,IAAJA,KAAMkqC,SAAS,EAAG,EAAG,EAAG,GACxBvpB,EAAcnsB,EAAMwL,GAAM,IAE5B+pB,aAAa,WACb+R,YAAY,WACZne,WAAY,cAAC,KAAD,CAAcnpB,KAAMA,QAKzBq1C,GAYT,SAAC,GAA8C,IAA5Cr1C,EAA2C,EAA3CA,KAAMksB,EAAqC,EAArCA,OAAQC,EAA6B,EAA7BA,cAAkBmK,EAAW,kDAChD,OACE,cAAC8e,GAAD,2BACM9e,GADN,IAEE1P,cAAA,eAAqB5mB,GACrBA,KAAMA,EACNsH,MAAO4kB,EAAOlsB,GACd8d,SAAU,SAACtS,GACT2gB,EAAcnsB,EAAMwL,GAAM,IAE5B+pB,aAAa,WACb+R,YAAY,WACZne,WAAY,cAAC,KAAD,CAAcnpB,KAAMA,QCZhCqrB,GAAmBoM,OAAajQ,MAAM,CAC1CmuB,cAAele,OAEZG,WACAC,UAAU,wCACVoV,KACC,0BAEA,SAAC2I,EAA6BC,GAA9B,OACED,EACIC,EAAOltB,SAAS,2CAChBktB,KAEVC,cAAere,OAEZG,WACAC,UAAU,wCACVoV,KACC,0BAEA,SAAC2I,EAA6BC,GAA9B,OACED,EACIC,EAAOltB,SAAS,gDAChBktB,KAEVE,YAAate,OAEVG,WACAC,UAAU,wCAEVoV,KAAK,wBAAwB,SAAC+I,EAA2BH,GAA5B,OAC5BG,EACIH,EAAOltB,SAAS,qCAChBktB,KAERI,YAAaxe,OAEVG,WACAC,UAAU,wCAEVoV,KAAK,wBAAwB,SAAC+I,EAA2BH,GAA5B,OAC5BG,EACIH,EAAOltB,SAAS,0CAChBktB,KAERhB,cAAepd,OAEZG,WACAC,UAAU,iDACVlP,SAAS,yCAGRutB,GAKD,SAAC,GAKC,IAJLjqB,EAII,EAJJA,SACAkqB,EAGI,EAHJA,SACAC,EAEI,EAFJA,4BACAC,EACI,EADJA,4BAEA,OACE,cAAC,KAAD,CACE/pB,kBAAkB,EAClBN,cAAe,CACb2pB,cAAe,KACfG,cAAe,KACfC,YAAa,KACbE,YAAa,KACbpB,cAAe,GACfe,wBAAwB,EACxBI,sBAAsB,EACtBM,+BAA+B,GAEjCjrB,iBAAkBA,GAClBY,SAAUA,EAbZ,SAeG,YAOM,IANLe,EAMI,EANJA,aACAd,EAKI,EALJA,OACAC,EAII,EAJJA,cACA+b,EAGI,EAHJA,WACApB,EAEI,EAFJA,aACAyP,EACI,EADJA,gBAmDA,OACE,eAAC,GAAD,CAAM/pB,YAAY,EAAlB,UACE,cAAC,KAAD,CAAyBsJ,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,eAACiO,GAAD,WACE,gCACE,cAACE,GAAD,UACE,cAAC,GAAD,CACEv3B,QACE,cAAC2d,GAAA,EAAD,CACE57B,KAAK,yBACLsH,MAAO4kB,EAAO0pB,uBACd93B,SA5DkB,WAClC,IAAM8S,GAAY1E,EAAO0pB,uBACzBzpB,EAAc,yBAA0ByE,GAEtCA,IACC1E,EAAOypB,eACRS,GACAC,GACAG,GACEJ,EACAC,IAGFlqB,EAAc,gBAAiBiqB,MAkDrBh4B,MAAM,kCAGV,eAACm3B,GAAD,WACE,gCACE,cAAC,KAAD,CAAcl0B,MAAO,KACrB,cAAC,GAAD,CACEzU,OAAO,aACP5M,KAAK,gBACL2sB,WAAY,CACV,cAAe,iBAEjB8pB,YACE,CACE,cAAe,uBAInBtqB,cAAeA,EACfD,OAAQA,EACR5N,UAAW4N,EAAO0pB,uBAClBhN,QAASwN,EACT9gB,QAAS+gB,OAGb,gCACE,cAAC,IAAD,CAAUh1B,MAAO,KACjB,cAAC,GAAD,CACEzU,OAAO,QACP5M,KAAK,gBACL2sB,WAAY,CACV,cAAe,iBAEjB8pB,YACE,CACE,cAAe,uBAInBtqB,cAAeA,EACfD,OAAQA,EACR5N,UAAW4N,EAAO0pB,uBAClBjN,MAAM,aAKd,gCACE,cAAC6M,GAAD,UACE,cAAC,GAAD,CACEv3B,QACE,cAAC2d,GAAA,EAAD,CACE57B,KAAK,uBACLsH,MAAO4kB,EAAO8pB,qBACdl4B,SArGgB,WAChC,IAAM8S,GAAY1E,EAAO8pB,qBACzB7pB,EAAc,uBAAwByE,GAEpCA,IACC1E,EAAO6pB,aACRK,GACAC,GACAG,GACEJ,EACAC,IAGFlqB,EAAc,cAAeiqB,MA2FnBh4B,MAAM,4BAGV,eAACm3B,GAAD,WACE,gCACE,cAAC,KAAD,CAAcl0B,MAAO,KACrB,cAAC,GAAD,CACEzU,OAAO,aACP5M,KAAK,cACL2sB,WAAY,CACV,cAAe,eAEjB8pB,YACE,CACE,cAAe,qBAInBtqB,cAAeA,EACfD,OAAQA,EACR5N,UAAW4N,EAAO8pB,qBAClBpN,QAASwN,EACT9gB,QAAS+gB,OAGb,gCACE,cAAC,IAAD,CAAUh1B,MAAO,KACjB,cAAC,GAAD,CACEzU,OAAO,QACP5M,KAAK,cACL2sB,WAAY,CACV,cAAe,eAEjB8pB,YACE,CACE,cAAe,qBAInBtqB,cAAeA,EACfD,OAAQA,EACR5N,UAAW4N,EAAO8pB,qBAClBrN,MAAM,aAKd,cAAC8M,GAAD,UACE,cAAChpB,GAAD,CACEtO,MAAM,UACNlZ,GAAG,gBACHi1B,WAAS,EACTC,KAAM,EACNxN,WAAY,CACV,cAAe,gBACf+pB,UAAW,KAEbt4B,MAAM,iCACNpe,KAAK,gBACL4oB,WAAS,EACTK,aAAa,MACbN,UAAQ,MAGZ,eAAC,GAAD,WACE,cAAC,GAAD,CAAQ9J,KAAK,SAASV,MAAM,UAAUE,QAAS83B,EAA/C,sBAGA,cAAC,GAAD,CACEt3B,KAAK,SACLV,MAAM,UACNnD,QAAQ,YACRsD,SAAU0O,EACV3O,QAhKY,WACtB,OAAOyoB,IAAe19B,MAAK,SAAC0f,GACRhV,OAAOC,KAAK+U,GAAQ/a,OAAS,EAI7C+F,OAAOC,KAAKmY,GAAQlY,SAAQ,SAAC2iC,GAC3BJ,EAAgBI,MAIlBxqB,EAAc,iCAAiC,OAgJ3C,4BAYN,cAAC,GAAD,CACE3P,KAAM0P,EAAOoqB,8BACb9Y,QAAS,WACPrR,EAAc,iCAAiC,IAEjDsR,UAAW,WACTtR,EAAc,iCAAiC,GAC/C+b,cAUVsO,GAA2B,SAACI,EAAaC,GAC7C,OAAOD,EAAME,YAAcD,EAAMC,WAiLpBC,GA9K0B,WACvC,IAAMv5B,EAAUC,cAD6B,EAEPmnB,cAA9BrzB,EAFqC,EAErCA,QAASqgB,EAF4B,EAE5BA,iBAF4B,EAMnB5pB,qBANmB,mBAMtCwE,EANsC,KAM/BwqC,EAN+B,KAOrCxuC,EAAaI,qBAAWd,IAAxBU,SAPqC,EAQhB0I,KAArBI,EARqC,EAQrCA,QAASlJ,EAR4B,EAQ5BA,QACH6uC,EAA8BtC,KAApCnwC,KAEF0yC,EAAiBxmC,mBACrB,+BACElE,QADF,IACEA,GADF,UACEA,EAAOsB,kBADT,aACE,EAAmB0E,MACjB,SAACvE,GAAD,OAAeA,EAAUhJ,KAAO0I,OAAOikB,QAE3C,CAACplB,IAGH7F,qBAAU,WAAO,IAAD,EACd,GAAKuwC,GAAmB1uC,EAAxB,CAEA,IAAM2uC,IACFD,EAAeE,mBACjBF,EAAeE,kBAAkBrpC,OAAS,EAK5C,KAFEmpC,EAAexpC,cAAgBlF,EAASvD,IAER,OAAOuY,EAAQqJ,SAGjD,IAAMwwB,KAAyC,UAACH,EAAeE,yBAAhB,aAAC,EAAkC5kC,MAChF,qBAAG8kC,cAAkC9uC,EAASvD,OAGhD,OAAIkyC,GAA4BE,EACvB75B,EAAQqJ,cADjB,KAEC,CAACre,EAAUgE,IAEd7F,qBAAU,WACJ4K,GACFD,EAAQ3D,OAAO4D,IAAUnI,MAAK,SAACoD,GAC7BwqC,EAASxqC,QAGZ,CAAC+E,IA9CyC,MAmDzCb,mBAAQ,WAQV,MAAO,CACL0lC,6BARuC,OAAL5pC,QAAK,IAALA,OAAA,EAAAA,EAAOgO,kBACvC,IAAIjP,KAAKiB,EAAMgO,uBACf5Q,EAOFysC,6BANuC,OAAL7pC,QAAK,IAALA,OAAA,EAAAA,EAAOmO,gBACvC,IAAIpP,KAAKiB,EAAMmO,qBACf/Q,KAMH,QAAC4C,QAAD,IAACA,OAAD,EAACA,EAAOgO,iBAAR,OAA0BhO,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAOmO,iBAdlCy7B,EAjD2C,EAiD3CA,4BACAC,EAlD2C,EAkD3CA,4BAeIkB,EAA+B,uCAAG,WAAOrrB,GAAP,2BAAA3pB,EAAA,6DAGpC2pB,EAAO0pB,wBACP1pB,EAAOypB,eACPzpB,EAAO4pB,iBAEPxoC,EAAY,IAAI/B,KAAK2gB,EAAOypB,gBAClBD,SAAV,UAAmBxpB,EAAO4pB,qBAA1B,aAAmB,EAAsB0B,YACzClqC,EAAUmqC,WAAV,UAAqBvrB,EAAO4pB,qBAA5B,aAAqB,EAAsB4B,eAK3CxrB,EAAO8pB,sBACP9pB,EAAO6pB,aACP7pB,EAAO+pB,eAEPrB,EAAU,IAAIrpC,KAAK2gB,EAAO6pB,cAClBL,SAAR,UAAiBxpB,EAAO+pB,mBAAxB,aAAiB,EAAoBuB,YACrC5C,EAAQ6C,WAAR,UAAmBvrB,EAAO+pB,mBAA1B,aAAmB,EAAoByB,eAGnCC,EAIF,CACF9C,cAAe3oB,EAAO2oB,eAGpBvnC,IACFqqC,EAAKrqC,UAAYA,GAGfsnC,IACF+C,EAAK/C,QAAUA,GApCqB,SAuChCqC,EAA0BtpC,OAAOikB,GAAmB+lB,GACvDvuC,MAAK,WACJlC,IAAMmlB,QAAQ,mDACd7O,EAAQqJ,YAET1jB,OAAM,SAACC,GACN,IAAMoC,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,MA9CsB,2CAAH,sDAsD/B+E,EAAgBmG,mBAAQ,WAC5B,IAAKlE,IAAUA,EAAMsB,YAA0C,IAA5BtB,EAAMsB,WAAWC,OAClD,MAAO,gCAET,IAAM6pC,EAAwBC,mBAC5BrrC,EAAMsB,WACN,aACAmhC,WAAU,SAAChhC,GAAD,OAAeA,EAAUhJ,KAAO0I,OAAOikB,MAEnD,OAAIgmB,EAAwB,EAAU,gCAEhC,mDAAN,OAA2CA,EAAwB,KAClE,CAACprC,IAEJ,OAAIpE,EACK,cAAC,GAAD,CAAiBA,SAAO,IAG5BoE,GAAUA,EAAMsB,YAA0C,IAA5BtB,EAAMsB,WAAWC,OAKlD,eAAC,GAAD,WACE,cAAC,GAAD,CAAQxD,MAAOA,IACf,eAACwqC,GAAD,WACE,eAACC,GAAD,mCACuB,uCADvB,4DAIA,cAAC,GAAD,CACEX,cAAc,sBACdF,kBACO,OAAL3nC,QAAK,IAALA,OAAA,EAAAA,EAAOgO,kBACH,IAAIjP,KAAKiB,EAAMgO,uBACf5Q,EAEN0qC,YAAY,gBACZF,gBACO,OAAL5nC,QAAK,IAALA,OAAA,EAAAA,EAAOmO,gBAAiB,IAAIpP,KAAKiB,EAAMmO,qBAAkB/Q,IAG7D,8BACE,cAAC,GAAD,CACEusC,SAhDO,WACf34B,EAAQqJ,UAgDAoF,SAAUsrB,EACVnB,4BAA6BA,EAC7BC,4BAA6BA,YA5B9B,M,wgCCzeJ,IAAMyB,GAAY7xC,YAAO8xC,KAAP9xC,CAAH,MACA,gBAAG+xC,EAAH,EAAGA,iBAAkB78B,EAArB,EAAqBA,MAArB,OAClB68B,EAAgB,WAAOA,GAAqB78B,EAAME,QAAQC,QAAQhd,QAC3D,qBAAG6c,MAAkBE,QAAQE,OAAOC,SAC5B,qBAAGL,MAAkBqM,MAAMC,gBAClC,qBAAGtM,MAAkBC,QAAQ,EAAG,EAAG,MAEjC,qBAAGD,MAAkBC,QAAQ,EAAG,EAAG,MAGpC,qBAAGD,MAAkBE,QAAQE,OAAOC,SAInC,qBAAGL,MAAkBC,QAAQ,EAAG,MAE9B,qBAAGD,MAAkBC,QAAQ,EAAG,MAQnC68B,GAAehyC,YAAO88B,GAAP98B,CAAH,MAGb,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,MAC5B,qBAAGD,MAAkBqM,MAAMC,gBAEjC,qBAAGtM,MAAkBE,QAAQC,QAAQhd,QAOrC45C,GAAejyC,IAAOgW,IAAV,MAKZk8B,GAAelyC,YAAOuY,KAAPvY,CAAH,MACd,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAGnCy5C,GAAiBnyC,YAAOuY,MAAYzD,MAAM,CACrDC,QAAS,WADmB/U,CAAH,MAKhB,gBAAGkV,EAAH,EAAGA,MAAH,SAAUk9B,UACLl9B,EAAME,QAAQgR,QAAQ/tB,KAAO6c,EAAME,QAAQ3a,MAAMiiB,SCkBlD21B,GAxDX,SAAC,GAOE,IANLlgC,EAMI,EANJA,kBACAmgC,EAKI,EALJA,UACAv4C,EAII,EAJJA,KACA0W,EAGI,EAHJA,UACAK,EAEI,EAFJA,cACAF,EACI,EADJA,eAE2B2hC,EAAmCtoC,GAC5D,4BADMU,kBAGR,OACE,eAAC,GAAD,CAAWonC,iBAAkBO,EAA7B,UACE,eAACE,GAAA,EAAD,CAAkBC,WAAY,cAAC,KAAD,IAA9B,UACE,cAACl6B,GAAA,EAAD,UAAaxe,IAEb,cAACwe,GAAA,EAAD,CAAYxD,QAAQ,UAApB,mBAAkCjE,EAAlC,YAAmDF,EAAnD,+BAEF,cAAC8hC,GAAA,EAAD,UACGjiC,EAAUlG,KAAI,SAACmG,EAAUH,GAAW,IAAD,EAC5BoiC,EAAWjiC,EAASE,iBAAmBF,EAASI,cACtD,OACE,eAACkhC,GAAD,WACE,eAACC,GAAD,WACE,cAAC15B,GAAA,EAAD,UACG7H,EAASG,cAAc,GAAG+hC,mBAE7B,cAACV,GAAD,UAAexhC,EAAS3W,OACxB,cAACo4C,GAAD,CAAgBC,UAAWO,EAA3B,SACGA,EAAW,aAAe,yBAG9BJ,IAA8B,OAC7B7hC,QAD6B,IAC7BA,GAD6B,UAC7BA,EAAUG,qBADmB,aAC7B,EAAyB/I,SACvB,cAAC,IAAD,CACE6Y,cAAA,iBAAuBxO,EAAvB,YAA4C5B,EAA5C,IAAqD,EAArD,KACA0I,GAAI,CACFjY,SAAU,aACVb,MAAO,CACLgS,kBAAmBA,EACnBC,cAAe7B,EACfsiC,kBAAmB,IAPzB,yBAZaniC,EAAS1R,a,+RCvCjC,IAAMqa,GAAYrZ,IAAOgW,IAAV,MAIT,qBAAGd,MAAkBC,QAAQ,EAAG,MAIhC24B,GAAkB9tC,IAAOgW,IAAV,MACR,qBAAGd,MAAkBC,QAAQ,MACjC,qBAAGD,MAAkBC,SAAS,QCmD/B29B,GApDoB,WAAO,IAChCtrC,EAAoB7E,qBAAWkR,IAA/BrM,gBAD+B,GAGekK,EADxB/O,qBAAWgR,IAAjCjC,qBACAE,EAH+B,EAG/BA,sBAAuBzI,EAHQ,EAGRA,IAAKC,EAHG,EAGHA,KAAMjH,EAHH,EAGGA,QAW1C,OATAzB,qBAAU,WACR,IAAM4K,EAAU5D,OAAOF,EAAiBxI,IACxC4S,EAAsBtG,GAASpO,OAAM,WACnC+D,IAAMxG,MACJ,2EAGH,CAACmX,IAGF,mCACGzP,EACC,cAAC,GAAD,CAAiBA,QAASA,IAE1B,cAAC,GAAD,UACkB,IAAfgH,EAAIrB,OACH,qCACE,cAAC,GAAD,UACE,cAACyQ,GAAA,EAAD,CAAYxD,QAAQ,QAAQqK,MAAM,SAAlC,sIAKDjW,EAAIoB,KAAI,SAACvL,EAAIuR,GACZ,IAAM/D,EAAOpD,EAAKpK,GAClB,OACE,cAAC,GAAD,2BAEMwN,GAFN,IAGE2F,kBAAmB5B,IAFd/D,EAAKxN,UAQlB,mCACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,YAAYqK,MAAM,SAAtC,2E,+BCpDC,OAA0B,iDCA1B,OAA0B,4CCA1B,OAA0B,sC,oBCU5B2zB,GAAmB,SAC9BzQ,EACAD,EACAQ,GAEA,SACEA,GACAR,GACAqK,aAAiBpK,EAAe,CAC9Bh7B,MAAO,IAAIhC,KAAK+8B,GAChBsK,IAAK,IAAIrnC,KAAKu9B,OCJdmQ,GAAmC,SAACzqB,GACxC,IAAM0qB,EAAY1qB,EAAM2qB,sBAAwB3qB,EAAMka,eAKtD,QAJuB0Q,aACrB,IAAI7tC,KAAJ,UAAY2tC,IACZ,IAAI3tC,OAEgB,KAOX8tC,GAAmC,SAC9C7qB,EACA3pB,GAEA,MAAqB,iBAAjB2pB,EAAM3oB,QAA6B2oB,EAAM9gB,cAAgB7I,GAuKhDy0C,GAjKe,SAC5B9qB,EAD4B,GAWxB,IAAD,EARD+qB,EAQC,EARDA,eACAC,EAOC,EAPDA,gBACAC,EAMC,EANDA,aAOIjuC,EAAOoB,YAAO,IAAIrB,KAAJ,UAAYijB,EAAMka,iBAAmB,SADtD,EAEuC1gC,mBACxCwmB,EAAM3oB,QAHL,mBAEI6zC,EAFJ,KAEmBC,EAFnB,OAKyC3xC,mBAASwmB,EAAMia,SAAW,IALnE,mBAKImR,EALJ,KAKoBC,EALpB,OAM+D7xC,mBAChEixC,GAAiCzqB,IAPhC,mBAMIsrB,EANJ,KAM+BC,EAN/B,KASKvxC,EAAaI,qBAAWd,IAAxBU,SATL,EAU+DR,mBAChEqxC,GAAiC7qB,EAAD,OAAQhmB,QAAR,IAAQA,GAAR,UAAQA,EAAUP,YAAlB,aAAQ,EAAgBhD,KAXvD,mBAUI+0C,EAVJ,KAU+BC,EAV/B,OAa8CrxC,qBAC/CkR,IADMS,EAbL,EAaKA,kBAAmBG,EAbxB,EAawBA,kBAI3B/T,qBAAU,WACR,IAAMuzC,EAA6B32B,aAAY,WAC7C,IAAM42B,EAA0BlB,GAAiCzqB,GAC7D2rB,IAA4BL,GAC9BC,EAA6BI,KAzDa,KA4D9C,OAAO,kBAAM32B,cAAc02B,MAC1B,IAEHvzC,qBAAU,WAER,IAAMwzC,EAA0BlB,GAAiCzqB,GAC7D2rB,IAA4BL,GAC9BC,EAA6BI,KAE9B,CAAC3rB,EAAM2qB,qBAAsB3qB,EAAMka,iBAEtC/hC,qBAAU,WAAO,IAAD,EACdszC,EACEZ,GAAiC7qB,EAAD,OAAQhmB,QAAR,IAAQA,GAAR,UAAQA,EAAUP,YAAlB,aAAQ,EAAgBhD,OAEzD,CAACupB,EAAOhmB,IAEX,IAAM4xC,EAAqB32C,uBACzB,SAAC42C,GACC,GAAKd,EAML,OAAKO,OAQLH,GAAiB,SAACW,GAChB,IAAMC,EACJD,IAAmBD,EAAY,WAAaA,EAI9C,OAFAd,EAAe/qB,EAAMvpB,GAAKs1C,GAEnBA,MAbPrzC,IAAMszC,QAAQ,oCACdtzC,IAAM2c,QACJ,4GACA,CAAE42B,QAAS,iCATb73C,QAAQ83C,KACN,wGAqBN,CAAClsB,EAAMvpB,GAAI60C,EAA2BH,EAAkBJ,IAqE1D,MAAO,CACL/tC,OACAsuC,4BACAE,4BACAz/B,oBACAG,oBACAg/B,gBACAE,iBACAQ,qBACAO,kBA3EwB,SAACC,GACzB,GAAKnB,GAAiBF,EAAtB,CAOA,IAAMsB,EAAwBD,EAC1BA,EAAmBpU,cACnB,MAGFoU,GACC5B,GACC4B,EACArgC,EACAG,IAQJ++B,EAAajrB,EAAMvpB,GAAK41C,GAItBA,GACAC,aAAS,IAAIvvC,KAAKsvC,GAAwB,IAAItvC,OAE9CouC,EAAiB,gBACjBJ,EAAe/qB,EAAMvpB,GAAK,iBAE1B41C,GACA/H,aAAQ,IAAIvnC,KAAKsvC,GAAwBpgC,YAAW,IAAIlP,KAAQ,OAEhEouC,EAAiB,YACjBJ,EAAe/qB,EAAMvpB,GAAK,cAnB1BiC,IAAMxG,MAAM,mEAlBZkC,QAAQ83C,KACN,uHAyEJK,oBAjC0B,SAACC,GACtBxB,GAMLK,EAAkBmB,GAClBxB,EAAgBhrB,EAAMvpB,GAAK+1C,IANzBp4C,QAAQ83C,KACN,yGA+BJO,wBAvB8B,SAACC,GAC/B,OAAIlB,EACKkB,KAEPh0C,IAAMszC,QAAQ,4BACdtzC,IAAM2c,QAAQ,sDAAoD,CAChE42B,QAAS,4B,4oBC/KV,IAAM/c,GAAOz3B,YAAO03B,KAAP13B,CAAH,MAIN,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAKzC,qBAAGxH,MAAkBC,SAAS,MAGjCwiB,GAAgB33B,IAAOgW,IAAV,MAMd,qBAAGd,MAAkBC,QAAQ,EAAG,MAG/BN,GAAS7U,YAAO4U,GAAP5U,CAAH,MAINk1C,GAAcl1C,YAAO4U,GAAP5U,CAAH,MAEL,qBAAGkV,MAAkBC,QAAQ,MCV1CiQ,GAAmBoM,OAAajQ,MAAM,CAC1CihB,QAAShR,OAEN9O,SAAS,0CACT2F,IAAI,IAAK,iEAGR8sB,GAAgB,CACpB3S,QAAS,IAgEI4S,GA7D4B,SAAC,GAOrC,IANLC,EAMI,EANJA,mBACA9d,EAKI,EALJA,QAKI,IAJJ+d,gBAII,SAHJl+B,EAGI,EAHJA,OACA2O,EAEI,EAFJA,cACAwvB,EACI,EADJA,kBAEA,OACE,cAAC/8B,GAAD,CAAmBjC,KAAMa,EAAQ9S,MAAO,6BAAxC,SACE,cAAC,KAAD,CACE+hB,kBAAkB,EAClBN,cAAeA,GAAiBovB,GAChC/vB,iBAAkBA,GAClBY,SAAUqvB,EAJZ,SAMG,YAAuB,IAApBtuB,EAAmB,EAAnBA,aACF,OACE,eAAC,GAAD,CAAMR,YAAY,EAAlB,UACE,cAACC,GAAD,CACExnB,GAAG,cACHkZ,MAAM,QACN+b,WAAS,EACTC,KAAM,EACNxN,WAAY,CAAE,cAAe,UAAW4a,UAAW,KACnDnpB,MAAM,oBACNpe,KAAK,UACL0sB,OAAO,SACPzD,aAAa,QAEf,eAAC,GAAD,WACE,cAAC,GAAD,CAAQpK,KAAK,SAASV,MAAM,UAAUE,QAASmf,EAA/C,sBAGA,cAAC,GAAD,CACEnf,QAAS,WACPi9B,EAAmB,CAAE7S,QAAS,MAEhC5pB,KAAK,SACLV,MAAM,UACNG,UAAWk9B,GAAqBD,EANlC,wBAWF,cAACJ,GAAD,CACEl3C,KAAK,SACL4a,KAAK,SACLV,MAAM,UACNG,SAAU0O,GAAgBuuB,EAJ5B,6B,qBC7Ed,SAAS,KAA2Q,OAA9P,GAAWznC,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,IAAK,CAChD/Y,GAAI,YACJ,YAAa,YACbw2C,UAAW,wBACG,gBAAoB,IAAK,CACvCx2C,GAAI,UACJ,YAAa,UACbw2C,UAAW,qBACG,gBAAoB,IAAK,CACvCx2C,GAAI,eACJ,YAAa,eACbw2C,UAAW,oBACX16B,KAAM,QACQ,gBAAoB,OAAQ,CAC1CD,EAAG,gpBACH2E,OAAQ,SACO,gBAAoB,OAAQ,CAC3C3E,EAAG,81BACH2E,OAAQ,OACR1E,KAAM,UACU,gBAAoB,OAAQ,CAC5C9b,GAAI,qBACJ,YAAa,qBACb6b,EAAG,6MACH26B,UAAW,2BACX16B,KAAM,cAGR,SAAS26B,GAAYz6B,EAAMC,GACzB,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDO,MAAO,6BACPH,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTE,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,IAGpB,IAAI,GAA0B,aAAiBmxC,IAChC,ICtDf,SAAS,KAA2Q,OAA9P,GAAW5nC,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,OAAQ,KAAmB,gBAAoB,QAAS,KAAM,2FAEvG,GAAqB,gBAAoB,IAAK,CAChD29B,UAAW,KACG,gBAAoB,SAAU,CAC5CA,UAAW,IACXC,GAAI,KACJC,GAAI,KACJC,EAAG,OACY,gBAAoB,SAAU,CAC7CH,UAAW,IACXC,GAAI,KACJC,GAAI,KACJC,EAAG,QAGD,GAAqB,gBAAoB,OAAQ,CACnDH,UAAW,IACX76B,EAAG,+NACH26B,UAAW,6BAGb,SAASM,GAAe96B,EAAMC,GAC5B,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDO,MAAO,6BACPH,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTE,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,GAAO,GAAO,IAGlC,IAAI,GAA0B,aAAiBwxC,IAChC,I,w+ECzCR,IAAM9Y,GAAsBh9B,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQE,OAAOC,SAInC,qBAAGL,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAIrC4gC,GAAoB/1C,YAAOg2C,GAAPh2C,CAAH,MAKjBi2C,GAAiBj2C,YAAOk2C,GAAPl2C,CAAH,MAUd+tC,IALuB/tC,YAAOm2C,KAAPn2C,CAAH,MAKHA,IAAOgW,IAAV,MAChB,qBAAGd,MAAkBE,QAAQE,OAAOC,UAIlC6gC,GAAoBp2C,IAAOgW,IAAV,MAEjB,qBAAGd,MAAkBC,QAAQ,MACpB,qBAAGD,MAAkBE,QAAQwI,QAAQlB,SACxC,qBAAGxH,MAAkBC,QAAQ,MAInCkhC,GAAgBr2C,IAAOgW,IAAV,MAUbsgC,GAAuBt2C,IAAOgW,IAAV,MACjB,qBAAGd,MAAkBC,QAAQ,MAGhC+G,GAAkBlc,IAAOgW,IAAV,MAKfugC,GAAiBv2C,IAAOgW,IAAV,MAKd,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGtCP,GAAe5U,YAAO6U,KAAP7U,CAAH,MACd,qBAAGkV,MAAkBE,QAAQE,OAAOC,SACzB,qBAAGL,MAAkBE,QAAQE,OAAOC,SAOzC,qBAAGL,MAAkBC,QAAQ,MAC1C,SAACgG,GAAD,OACAA,EAAMq7B,UACFrnB,YADJ,MAII,MAGKsnB,GAAsBz2C,YAAO4U,GAAP5U,CAAH,MAInB02C,GAAqB12C,IAAOgW,IAAV,MAKlB2gC,GAAwB32C,YAAOuY,KAAPvY,CAAH,MAIrB42C,GAAa52C,IAAO62C,OAAV,MAGX,qBAAG3hC,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC2hC,GAAsB92C,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQE,OAAOC,S,qxCCvGxC,IAAMkiB,GAAOz3B,YAAO03B,KAAP13B,CAAH,MAIN,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAKzC,qBAAGxH,MAAkBC,SAAS,MAejC85B,IAZcjvC,IAAOgW,IAAV,MAQOhW,YAAOuY,KAAPvY,CAAH,MACjB,qBAAGkV,MAAkBE,QAAQE,OAAO2L,SAGfjhB,YAAOmiC,KAAPniC,CAAH,MAEb,qBAAGkV,MAAkBC,QAAQ,MAEhC,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAG5C,qBAAGxH,MAAkBC,QAAQ,QACvB,qBAAGD,MAAkBC,QAAQ,MAG7B,qBAAGD,MAAkBC,QAAQ,MAG9B,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,UAIrDib,GAAgB33B,IAAOgW,IAAV,MAMd,qBAAGd,MAAkBC,QAAQ,EAAG,MAG/BN,GAAS7U,YAAO4U,GAAP5U,CAAH,MAINk1C,GAAcl1C,YAAO4U,GAAP5U,CAAH,MAEL,qBAAGkV,MAAkBC,QAAQ,MChC1CiQ,GAAmBoM,OAAajQ,MAAM,CAC1CozB,mBAAoBnjB,OAEjB9O,SAAS,8BACTiP,WACAC,UAAU,0CA+EAmlB,GA5E+B,SAAC,GAQxC,IAPLrC,EAOI,EAPJA,kBACAnd,EAMI,EANJA,QACAngB,EAKI,EALJA,OACAm+B,EAII,EAJJA,kBACAyB,EAGI,EAHJA,kBACA3nB,EAEI,EAFJA,QACAsT,EACI,EADJA,QAEA,OACE,cAACnqB,GAAD,CAAmBjC,KAAMa,EAAQ9S,MAAO,gCAAxC,SACE,cAAC,KAAD,CACE+hB,kBAAkB,EAClBN,cACEixB,GAAqB,CACnBrC,mBAAoB,IAAIrvC,MAG5B8f,iBAAkBA,GAClBY,SAAU,SAACoa,GACTsU,EAAkBtU,GAClB7I,KAVJ,SAaG,YAA8C,IAA3CxQ,EAA0C,EAA1CA,aAAcd,EAA4B,EAA5BA,OAAQC,EAAoB,EAApBA,cACxB,OACE,eAAC,GAAD,CAAMK,YAAY,EAAlB,UACE,cAAChO,GAAA,EAAD,wDACA,cAAC,KAAD,CAAyBsX,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,cAAC,GAAD,CACEzgB,cAAa,kBACb2O,aAAa,WACb3oB,OAAO,mBACP5M,KAAK,qBACLsH,MAAO4kB,EAAO0uB,mBACdtT,YAAY,WACZhS,QAASA,EACTsT,QAASA,EACTD,MAAM,EACN7qB,SAAU,SAACtS,GACT2gB,EAAc,qBAAsB3gB,GAAM,QAIhD,eAAC,GAAD,WACE,cAAC,GAAD,CAAQqT,KAAK,SAASV,MAAM,UAAUE,QAASmf,EAA/C,sBAGA,cAAC,GAAD,CACEnf,QAAS,WACPs8B,EAAkB,CAAEC,mBAAoB,OACxCpd,KAEF3e,KAAK,SACLV,MAAM,UACNG,UAAWk9B,EAPb,wBAYF,cAAC,GAAD,CACEv3C,KAAK,SACL4a,KAAK,SACLV,MAAM,UACNG,SAAU0O,EAJZ,6B,6MChGP,IAAMkW,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMqL,SC0BzD0zB,GAAwB,cAAC,KAAD,IACxBC,GAAqB,cAAC,KAAD,IACrBC,GAAsB,cAACpB,GAAD,IACtBqB,GAAmB,cAACnB,GAAD,IACnBoB,GAAc,cAACC,GAAA,EAAD,IACdC,GAAqB,qBAAKphC,IAAKqhC,KAC/BC,GAAmB,qBAAKthC,IAAKuhC,KAgMpBC,GA/K8B,SAACpvB,GAAW,IAErDvpB,EAQEupB,EARFvpB,GACAjF,EAOEwuB,EAPFxuB,KACA+U,EAMEyZ,EANFzZ,YACAoB,EAKEqY,EALFrY,YACAojC,EAIE/qB,EAJF+qB,eACAC,EAGEhrB,EAHFgrB,gBACAC,EAEEjrB,EAFFirB,aACAoE,EACErvB,EADFqvB,cAToD,EAuBlDvE,GAAsB9qB,EAAO,CAC/B+qB,iBACAC,kBACAC,iBAbAjuC,EAboD,EAapDA,KACA+O,EAdoD,EAcpDA,kBACAG,EAfoD,EAepDA,kBACAg/B,EAhBoD,EAgBpDA,cACAE,EAjBoD,EAiBpDA,eACAQ,EAlBoD,EAkBpDA,mBACAW,EAnBoD,EAmBpDA,oBACAJ,EApBoD,EAoBpDA,kBACAM,EArBoD,EAqBpDA,wBACAnB,EAtBoD,EAsBpDA,0BAOyBgE,EAA6B5tC,GACtD,4BADMc,kBAGmB+sC,EAAgC7tC,GACzD,2BADMc,kBAGmBgtC,EAA8B9tC,GACvD,iCADMc,kBAnC8C,EAuCA0kB,IAAM1tB,UAAS,GAvCf,mBAuC/Ci2C,EAvC+C,KAuC1BC,EAvC0B,OAwCdxoB,IAAM1tB,UAAS,GAxCD,mBAwC/Cm2C,EAxC+C,KAwCjCC,EAxCiC,KA0CtD,OACE,eAAC,GAAD,CAASx3B,cAAA,0BAAgC3hB,GAAzC,UACGupB,EAAM2qB,sBACL,cAACkD,GAAD,CACEz1B,cAAA,4BAAkC3hB,GADpC,iCAEmB2H,YACjB,IAAIrB,KAAKijB,EAAM2qB,sBACf,YAGJ,eAACmD,GAAD,WACE,cAAC,GAAD,UACG9tB,EAAM2qB,qBACL,cAACyD,GAAD,CAAuB5hC,QAAQ,KAA/B,SAAqCxP,IAErC,cAACgT,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BxP,MAG9B,qBAAK4Q,IAAKiiC,GAAc9zC,MAAK,4BAAuBtF,QAEtD,eAACu3C,GAAD,WACE,eAAC,GAAD,WACE,eAACh+B,GAAA,EAAD,CAAYxD,QAAQ,KAApB,iBACGjG,QADH,IACGA,OADH,EACGA,EAAa/U,KADhB,IACuBA,GAAI,WAAQyL,OAAOzL,GAAMs+C,OAArB,QAE3B,eAAC/B,GAAD,WACE,cAAC/9B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC7E,IAChCyjC,GACC,eAACp7B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsC4+B,QAGzCiE,GACC,cAACd,GAAD,UAAsBc,OAG1B,cAAClB,GAAD,UACG13C,EAAM,GACL,eAAC,GAAD,WACG64C,GACC,cAACpB,GAAD,CACE91B,cAAA,sBAA4B3hB,GAC5BoZ,QAAS,kBACP48B,GAAwB,kBAAMiD,GAAuB,OAHzD,SAMGZ,KAGJU,GACC,cAAC,GAAD,CACEp3B,cAAa,wBACbvI,QAAS,kBACP48B,GAAwB,kBAAMmD,GAAgB,OAHlD,SAMG5vB,EAAM2qB,qBACHuE,GACAF,KAGPO,GACC,qCACE,cAAC,GAAD,CACEn3B,cAAA,wBAA8B3hB,GAC9Bw3C,WAAY3C,EACZz7B,QAAS,WACP48B,GAAwB,kBACtBb,EAAmB,wBALzB,SASqB,qBAAlBV,EACG0D,GACAF,KAEN,cAAC,GAAD,CACEt2B,cAAA,qBAA2B3hB,GAC3Bw3C,WAAY3C,EACZz7B,QAAS,WACP48B,GAAwB,kBACtBb,EAAmB,oBALzB,SASqB,iBAAlBV,EACG2D,GACAF,gBAQjBgB,GAAgBl5C,GACf,cAAC,GAAD,CACEiQ,QAASjQ,EACT01C,kBAAmB,SAACzuB,GAAD,OACjByuB,EAAkBzuB,EAAO0uB,oBAAsB,OAEjDpd,QAAS,kBAAM4gB,GAAgB,IAC/B/gC,OAAQ8gC,EACR3C,oBAAqBhtB,EAAM2qB,qBAC3BvQ,QAAO,OAAEruB,QAAF,IAAEA,OAAF,EAAEA,EAAmBisB,cAC5BlR,QAAO,OAAE5a,QAAF,IAAEA,OAAF,EAAEA,EAAmB8rB,cAC5ByW,kBACEzuB,EAAM2qB,qBACF,CACEyB,mBAAoB,IAAIrvC,KAAKijB,EAAM2qB,4BAErCvvC,IAITq0C,GAAuBh5C,GACtB,cAAC,GAAD,CACEq2C,mBAAoB,SAACpvB,GACnB6uB,EAAoB7uB,EAAOuc,SAC3ByV,GAAuB,IAEzB1gB,QAAS,kBAAM0gB,GAAuB,IACtC7gC,OAAQ4gC,EACR/oC,QAASjQ,EACTu2C,oBAAqB5B,EACrB5tB,cACE4tB,EAAiB,CAAEnR,QAASmR,QAAmBhwC,QChO5C,OAA0B,uC,yLCGlC,IAAMs5B,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAM+D,IAAIS,SCgB7D26B,GAAc,cAACC,GAAA,EAAD,IAgGLgB,GApF+B,SAAC/vB,GAAW,IAEtDvpB,EAKEupB,EALFvpB,GACA8P,EAIEyZ,EAJFzZ,YACAoB,EAGEqY,EAHFrY,YACAqjC,EAEEhrB,EAFFgrB,gBACAqE,EACErvB,EADFqvB,cANqD,EAQDnoB,IAAM1tB,UAAS,GARd,mBAQhDw2C,EARgD,KAQ3BC,EAR2B,KAU5BX,EAA6B5tC,GACtD,4BADMc,kBAV+C,EAmBnDsoC,GAAsB9qB,EAAO,CAC/BgrB,oBALAhuC,EAfqD,EAerDA,KACAouC,EAhBqD,EAgBrDA,eACAmB,EAjBqD,EAiBrDA,oBACAE,EAlBqD,EAkBrDA,wBAKF,OACE,eAAC,GAAD,CAASr0B,cAAA,2BAAiC3hB,GAA1C,UACE,eAACq3C,GAAD,WACE,cAAC,GAAD,UACE,cAAC99B,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BxP,MAE5B,qBAAK4Q,IAAKsiC,GAAWn0C,MAAK,6BAAwBtF,QAEpD,eAACu3C,GAAD,WACE,eAAC,GAAD,WACE,cAACh+B,GAAA,EAAD,CAAYxD,QAAQ,KAApB,gBAA0BjG,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAa/U,OACvC,eAACu8C,GAAD,WACE,cAAC/9B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC7E,IAChCyjC,GACC,eAACp7B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsC4+B,WAI5C,eAACiD,GAAD,WACGgB,GACC,cAACd,GAAD,UAAsBc,IAEvBC,GACC,cAACnB,GAAD,UACG13C,EAAM,GACL,cAAC,GAAD,UACE,cAACy3C,GAAD,CACE91B,cAAA,sBAA4B3hB,GAC5BoZ,QAAS,kBACP48B,GAAwB,kBACtBwD,GAAuB,OAJ7B,SAQGnB,eAQdkB,GAAuBv5C,GACtB,cAAC,GAAD,CACEq2C,mBAAoB,SAACpvB,GACnB6uB,EAAoB7uB,EAAOuc,SAC3BgW,GAAuB,IAEzBjhB,QAAS,kBAAMihB,GAAuB,IACtCphC,OAAQmhC,EACRtpC,QAASjQ,EACTu2C,oBAAqB5B,EACrB5tB,cACE4tB,EAAiB,CAAEnR,QAASmR,QAAmBhwC,QChH5C,OAA0B,6C,weCKlC,IAAMs5B,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAOE,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMwgC,UAK3D,YAAiC,IAA9BxjC,EAA6B,EAA7BA,MACH,OADgC,EAAtByjC,iBAER,IAAK,MACH,OAAOxpB,YAAP,KACuBja,EAAME,QAAQqH,MAAMvE,MAAM+D,IAAIS,OAEvD,IAAK,SACH,OAAOyS,YAAP,KACuBja,EAAME,QAAQqH,MAAMvE,MAAMwgC,YCvB5CE,GAAqB,SAAC1Z,GACjC,OAAQA,GACN,KAAK4D,GAAoBG,eACvB,MAAO,QACT,KAAKH,GAAoBE,iBACvB,MAAO,QACT,KAAKF,GAAoBI,YACvB,MAAO,MACT,KAAKJ,GAAoBK,WACvB,MAAO,MACT,KAAKL,GAAoBM,cACvB,MAAO,QACT,KAAKN,GAAoBC,eACvB,MAAO,OACT,KAAKD,GAAoBO,kBACvB,MAAO,KACT,QACE,MAAO,K,g4CCjBN,IAAMrG,GAAsBh9B,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQE,OAAOC,SAInC,qBAAGL,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC44B,GAAiB/tC,IAAOgW,IAAV,MAChB,qBAAGd,MAAkBE,QAAQE,OAAOC,SAIlC8gC,GAAgBr2C,IAAOgW,IAAV,MAMbsgC,GAAuBt2C,IAAOgW,IAAV,MACjB,qBAAGd,MAAkBC,QAAQ,MAGhC0jC,GAAkB74C,IAAOgW,IAAV,MAGZ,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBC,QAAQ,MAGlCohC,GAAiBv2C,IAAOgW,IAAV,MAOd4gC,GAAa52C,IAAO62C,OAAV,MAIL,qBAAG3hC,MAAkBC,QAAQ,MAC5B,qBAAGD,MAAkBC,QAAQ,MAGnC2hC,GAAsB92C,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQE,OAAOC,S,kiCC9CxC,IAAM0nB,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAIT,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QACnC,qBAAG6c,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAIvD25B,GAAgBr2C,IAAOgW,IAAV,MACJ,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMwgC,UAElD,qBAAGxjC,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAUtCohC,GAAiBv2C,IAAOgW,IAAV,MAKd,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGtCyhC,GAAa52C,IAAO62C,OAAV,MAGX,qBAAG3hC,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC2hC,GAAsB92C,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQ6M,KAAKzM,a,mrECnCtC,IAAM6D,GAAYrZ,IAAOgW,IAAV,MAKF,qBAAGd,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBC,QAAQ,MAGnCihC,GAAoBp2C,IAAOgW,IAAV,MACR,qBAAGd,MAAkBE,QAAQwI,QAAQlB,SAEzC,qBAAGxH,MAAkBC,QAAQ,MAGlC0Y,GAAkB7tB,YAAOuY,KAAPvY,CAAH,MACf,qBAAGkV,MAAkBC,QAAQ,EAAG,MAElC,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMwgC,UAGvCI,GAAe94C,YAAOuY,KAAPvY,CAAH,MAEZ,qBAAGkV,MAAkBC,QAAQ,EAAG,MAGhC0xB,GAAmB7mC,IAAO+4C,MAAV,MACP,qBAAG7jC,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QACvD,qBAAG6c,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGvC,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QAG5CsgD,GAAuBh5C,IAAOgW,IAAV,MAGpB,qBAAGd,MAAkBC,QAAQ,EAAG,MAE7B,qBAAGD,MAAkBC,QAAQ,MAGhC8jC,GAAiBj5C,YAAOuY,KAAPvY,CAAH,MAQdk5C,GAAqBl5C,IAAOo6B,OAAV,MAC3B,YAA2B,IAAxBllB,EAAuB,EAAvBA,MAAOlF,EAAgB,EAAhBA,UACJmpC,EAAanpC,EACfkF,EAAME,QAAQqH,MAAMvE,MAAM+D,IAAI5jB,KAC9B6c,EAAME,QAAQE,OAAOC,MAEnB6jC,EAAYppC,EACdkF,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKiH,MAC/BxH,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAK/c,KAE7B2gD,EAAcrpC,EAChBmpC,EACAjkC,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAK/c,KAEnC,OAAOy2B,YAAP,KAMsBkqB,EACXD,EACWD,EAEVjkC,EAAMC,QAAQ,EAAG,EAAG,EAAG,OAK1B+iB,GAAkBl4B,YAAOm4B,KAAPn4B,CAAH,MAKfs5C,GAAqBt5C,IAAOgW,IAAV,MAC3B,YAA2B,IAAxBd,EAAuB,EAAvBA,MAAOlF,EAAgB,EAAhBA,UACJmpC,EAAanpC,EACfkF,EAAME,QAAQqH,MAAMvE,MAAMqL,MAC1BrO,EAAME,QAAQE,OAAOC,MAEnB6jC,EAAYppC,EACdkF,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKiH,MAC/BxH,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAK/c,KAE7B2gD,EAAcrpC,EAChBmpC,EACAjkC,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAK/c,KAEnC,OAAOy2B,YAAP,KAOsBkqB,EACXD,EACWD,EAEVjkC,EAAMC,QAAQ,EAAG,EAAG,EAAG,OAK1BokC,GAAkBv5C,YAAOw5C,KAAPx5C,CAAH,MAKfy5C,GAAWz5C,IAAO+d,KAAV,MCvGR+kB,GACK,MADLA,GAEO,MAFPA,GAGK,MAHLA,GAIE,MAJFA,GAKC,MALDA,GAMI,MANJA,GAOQ,MAwHN4W,GApFK,SAAC,GASI,IAAD,IARlBzqC,EAQkB,EARtBjQ,GACAY,EAOsB,EAPtBA,OACA4iC,EAMsB,EANtBA,QACAkC,EAKsB,EALtBA,YACAx0B,EAIsB,EAJtBA,YACAgjC,EAGsB,EAHtBA,qBACApkC,EAEsB,EAFtBA,YACA8oC,EACsB,EADtBA,cAEM9Q,GAA8B,OAAXpC,QAAW,IAAXA,OAAA,EAAAA,EAAaoC,mBACvB,OAAXpC,QAAW,IAAXA,OAAA,EAAAA,EAAaoC,kBAAmB,IA5CJ,SAAC5H,GACjC,OAAQA,GACN,KAAK4D,GACH,MAAO,QACT,KAAKA,GACH,MAAO,QACT,KAAKA,GACH,MAAO,MACT,KAAKA,GACH,MAAO,MACT,KAAKA,GACH,MAAO,QACT,KAAKA,GACH,MAAO,OACT,KAAKA,GACH,MAAO,KACT,QACE,MAAO,IA2B+B8V,CAAkB,OAAC9pC,QAAD,IAACA,OAAD,EAACA,EAAa9P,IACtE,GAEJ,OACE,eAAC,GAAD,CACEmpB,MAAO,CACLkxB,aAAwB,OAAX3U,QAAW,IAAXA,OAAA,EAAAA,EAAaR,yBACtB,UACkD,IAAlDyV,KAAKC,KAAe,OAAXlV,QAAW,IAAXA,OAAA,EAAAA,EAAaT,oBAAqB,GACzC,eACAtgC,EACNk2C,aAAwB,OAAXnV,QAAW,IAAXA,OAAA,EAAAA,EAAaR,yBAA0B,aAAUvgC,EAC9Dm2C,aAAwB,OAAXpV,QAAW,IAAXA,OAAA,EAAAA,EAAaR,yBAA0B,WAAQvgC,GARhE,UAWGuvC,GACC,cAAC,GAAD,CAAmBvyB,cAAA,4BAAkC1R,GAArD,SACE,cAACsJ,GAAA,EAAD,CAAYxD,QAAQ,UAApB,mCAAkDpO,YAChD,IAAIrB,KAAK4tC,GACT,cAIN,cAAC,GAAD,CACEn+B,QAAQ,YACRoT,MAAO,CAAEjQ,OAAkB,OAAXwsB,QAAW,IAAXA,OAAA,EAAAA,EAAaR,yBAA0B,eAAYvgC,GAFrE,gBAGGmL,QAHH,IAGGA,GAHH,UAGGA,EAAa/U,YAHhB,aAGG,EAAmBs+C,SAEtB,cAACS,GAAD,CAAc/jC,QAAQ,UAAtB,SAAiC7E,IACjC,cAAC,GAAD,CACElR,GAAE,4BAAuBiQ,GACzB4kB,YAAY,eACZxyB,MAAOylC,EACPzuB,UAAU,IAEZ,eAAC,GAAD,WACE,cAACE,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SACGglC,IAAkC,OAAXrV,QAAW,IAAXA,OAAA,EAAAA,EAAaD,oBAAqB,GAAI31B,MAEpD,OAAX41B,QAAW,IAAXA,OAAA,EAAAA,EAAaiD,YAAuB,OAAXjD,QAAW,IAAXA,GAAA,UAAAA,EAAaiD,gBAAb,eAAuB7/B,QAAS,GACxD,cAACyQ,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiCilC,GAAoB,OAACtV,QAAD,IAACA,OAAD,EAACA,EAAaiD,YAEpEnF,GACC,eAACyW,GAAD,CAAgBlkC,QAAQ,UAAxB,UACE,cAAC0kC,GAAD,mBADF,IAC6BjX,KAG/B,eAACwW,GAAD,WACGpB,EACC,cAAC,GAAD,UAAsBA,IAEtB,wBAEU,qBAAXh4C,GACC,cAACs5C,GAAD,CAAoBlpC,WAAW,EAAMqI,UAAU,EAA/C,SACE,cAAC,GAAD,MAIQ,iBAAXzY,GACC,cAAC05C,GAAD,CACEtpC,WAAW,EACX2Q,cAAA,mBAAyB1R,GAF3B,SAIE,cAACsqC,GAAD,gBCnHDQ,GAAyB,SAACE,EAAmBnrC,GACxD,cAAQA,QAAR,IAAQA,OAAR,EAAQA,EAAa/U,MACnB,IAAK,WACH,OAlBgB,SAACkgD,GACrB,OAAOA,GACL,IAAK,cACH,MAAO,kDACT,IAAK,UACH,MAAO,kCACT,IAAK,eACH,MAAO,kDACT,IAAK,gBACH,MAAO,6CACT,QACE,MAAO,oBAOAC,CAAcD,GACvB,IAAK,4BAEL,IAAK,gCAEL,IAAK,YAEL,IAAK,sBAEL,IAAK,eACH,OAAOA,EAEX,OAAOA,GAGID,GAAuB,SAACrS,GACnC,IAAI3d,EAAS,aAUb,OARQ,OAAR2d,QAAQ,IAARA,KAAU55B,SAAQ,SAAC85B,EAASt3B,GACpBo3B,IAAoB,OAARA,QAAQ,IAARA,OAAA,EAAAA,EAAU7/B,QAAS,GAAKyI,EAAQ,EAC9CyZ,GAAU,KAAO6d,EAAQG,YAEzBhe,GAAW6d,EAAQG,eAIlBhe,GA4CMmwB,GAnCuC,SAAC,GAEhD,IADLC,EACI,EADJA,sBACI,EACwCA,EAAsB,GAA1DC,EADJ,EACIA,gBAAiB5X,EADrB,EACqBA,eAEnB6X,EAAO3zC,YAAO,IAAIrB,KAAJ,UAAYm9B,IAAmB,SAEnD,OACE,eAAC,GAAD,CAAS9hB,cAAA,0BAAgC05B,GAAzC,UACE,eAAC,GAAD,WACE,qBACElkC,IAAKokC,GACLj2C,MAAK,4BAAuB+1C,KAE9B,cAAC,GAAD,UACE,cAAC9hC,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BulC,SAG9B,cAAC,GAAD,iBACGF,QADH,IACGA,OADH,EACGA,EAAuB7vC,KAAI,SAACm6B,GAAiB,IAAD,IAC3C,OACE,8BACE,cAAC,GAAD,2BACMA,GADN,IAEE1lC,GAAI0lC,EAAY1lC,GAChB44C,cAAa,UAAElT,EAAYlE,iBAAd,iBAAE,EAAuBx+B,YAAzB,aAAE,EAA6BjI,SAJtC2qC,EAAY1lC,aC1D5Bq4C,GAAc,cAACC,GAAA,EAAD,IAsHLkD,GAzG8B,SAACjyB,GAAW,IAAD,IAEpDvpB,EAMEupB,EANFvpB,GACA8P,EAKEyZ,EALFzZ,YACA41B,EAIEnc,EAJFmc,YACAx0B,EAGEqY,EAHFrY,YACAqjC,EAEEhrB,EAFFgrB,gBACAqE,EACErvB,EADFqvB,cAPoD,EASAnoB,IAAM1tB,UAAS,GATf,mBAS/Cw2C,EAT+C,KAS1BC,EAT0B,KAU3BX,EAA6B5tC,GACtD,4BADMc,kBAV8C,EAmBlDsoC,GAAsB9qB,EAAO,CAC/BgrB,oBALAhuC,EAfoD,EAepDA,KACAouC,EAhBoD,EAgBpDA,eACAmB,EAjBoD,EAiBpDA,oBACAE,EAlBoD,EAkBpDA,wBAKF,OACE,eAAC,GAAD,CACEr0B,cAAA,0BAAgC3hB,GAChC25C,iBACG,OAACjU,QAAD,IAACA,OAAD,EAACA,EAAaR,yBACX,MACkD,IAAlDyV,KAAKC,IAAL,iBAASlV,QAAT,IAASA,OAAT,EAASA,EAAaT,yBAAtB,QAA2C,GACzC,cACAtgC,EAPV,UAUE,eAAC0yC,GAAD,WACE,cAAC,GAAD,UACE,cAAC99B,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BxP,MAE5B,qBAAK4Q,IAAKokC,GAAgBj2C,MAAK,4BAAuBtF,QAExD,eAACu3C,GAAD,WACE,eAAC,GAAD,WACE,cAACh+B,GAAA,EAAD,CAAYxD,QAAQ,KAApB,gBAA0BjG,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAa/U,OACvC,cAACu8C,GAAD,UACE,eAAC/9B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,qCACoB2vB,QADpB,IACoBA,OADpB,EACoBA,EAAaoC,iBAAkB,IAChD8R,GAAkB,OAAC9pC,QAAD,IAACA,OAAD,EAACA,EAAa9P,SAGrC,eAACs3C,GAAD,WACE,cAAC/9B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC7E,IACjC,cAACqI,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SACGglC,IAAkC,OAAXrV,QAAW,IAAXA,OAAA,EAAAA,EAAaD,oBAAqB,GAAI31B,MAEpD,OAAX41B,QAAW,IAAXA,OAAA,EAAAA,EAAaiD,YAAuB,OAAXjD,QAAW,IAAXA,GAAA,UAAAA,EAAaiD,gBAAb,eAAuB7/B,QAAS,GACxD,cAACyQ,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiCilC,GAAoB,OAACtV,QAAD,IAACA,OAAD,EAACA,EAAaiD,YAEpEgM,GACC,eAACp7B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsC4+B,WAI5C,eAACiD,GAAD,WACGgB,GACC,cAACd,GAAD,UAAsBc,IAEvBC,GACC,cAACnB,GAAD,UACG13C,EAAM,GACL,cAAC,GAAD,UACE,cAACy3C,GAAD,CACE91B,cAAA,sBAA4B3hB,GAC5BoZ,QAAS,kBACP48B,GAAwB,kBACtBwD,GAAuB,OAJ7B,SAQGnB,eAQdkB,GAAuBv5C,GACtB,cAAC,GAAD,CACEq2C,mBAAoB,SAACpvB,GACnB6uB,EAAoB7uB,EAAOuc,SAC3BgW,GAAuB,IAEzBjhB,QAAS,kBAAMihB,GAAuB,IACtCphC,OAAQmhC,EACRtpC,QAASjQ,EACTu2C,oBAAqB5B,EACrB5tB,cACE4tB,EAAiB,CAAEnR,QAASmR,QAAmBhwC,QCxI5C,OAA0B,4C,6MCGlC,IAAMs5B,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQy1B,KAAKxyC,QC+BlD4+C,GAAwB,cAAC,KAAD,IACxBC,GAAqB,cAAC,KAAD,IACrBK,GAAqB,qBAAKphC,IAAKqhC,KAC/BL,GAAsB,cAACpB,GAAD,IACtBqB,GAAmB,cAACnB,GAAD,IACnBwB,GAAmB,qBAAKthC,IAAKuhC,KAC7BL,GAAc,cAACC,GAAA,EAAD,IAsMLmD,GAnL6B,SAAClyB,GAAW,IAEpDvpB,EAUEupB,EAVFvpB,GACAjF,EASEwuB,EATFxuB,KACAqvC,EAQE7gB,EARF6gB,eACAU,EAOEvhB,EAPFuhB,aACAN,EAMEjhB,EANFihB,eACAO,EAKExhB,EALFwhB,aACAuJ,EAIE/qB,EAJF+qB,eACAC,EAGEhrB,EAHFgrB,gBACAC,EAEEjrB,EAFFirB,aACAoE,EACErvB,EADFqvB,cAXmD,EAyBjDvE,GAAsB9qB,EAAO,CAC/B+qB,iBACAC,kBACAC,iBAbAK,EAfmD,EAenDA,0BACAtuC,EAhBmD,EAgBnDA,KACA+O,EAjBmD,EAiBnDA,kBACAG,EAlBmD,EAkBnDA,kBACAg/B,EAnBmD,EAmBnDA,cACAE,EApBmD,EAoBnDA,eACAQ,EArBmD,EAqBnDA,mBACAO,EAtBmD,EAsBnDA,kBACAI,EAvBmD,EAuBnDA,oBACAE,EAxBmD,EAwBnDA,wBAOyB6C,EAA6B5tC,GACtD,4BADMc,kBAGmB+sC,EAAgC7tC,GACzD,2BADMc,kBAGmBgtC,EAA8B9tC,GACvD,iCADMc,kBArC6C,EAyCb0kB,IAAM1tB,UAAS,GAzCF,mBAyC9Cm2C,EAzC8C,KAyChCC,EAzCgC,OA0CC1oB,IAAM1tB,UAAS,GA1ChB,mBA0C9Ci2C,EA1C8C,KA0CzBC,EA1CyB,KA4CrD,OACE,eAAC,GAAD,CAASt3B,cAAA,yBAA+B3hB,GAAxC,UACGupB,EAAM2qB,sBACL,cAACkD,GAAD,CACEz1B,cAAA,4BAAkC3hB,GADpC,iCAEmB2H,YACjB,IAAIrB,KAAKijB,EAAM2qB,sBACf,YAGJ,eAACmD,GAAD,WACE,cAAC,GAAD,UACG9tB,EAAM2qB,qBACL,cAACyD,GAAD,CAAuB5hC,QAAQ,KAA/B,SAAqCxP,IAErC,cAACgT,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BxP,MAG9B,qBAAK4Q,IAAKukC,GAAgBp2C,MAAK,4BAAuBtF,QAExD,eAACu3C,GAAD,WACE,eAAC,GAAD,WACE,cAACh+B,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0Bhb,IAC1B,eAACwe,GAAA,EAAD,CAAYxD,QAAQ,YAApB,UACGq0B,EADH,IACoBF,GAAiBY,EAAcV,MAEnD,eAAC7wB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBACQw0B,GAA2BC,MAEnC,cAACjxB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiCg1B,IAChC4J,GACC,eAACp7B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsC4+B,KAEvCiE,GACC,cAACd,GAAD,UAAsBc,OAG1B,cAAClB,GAAD,UACG13C,EAAM,GACL,eAAC,GAAD,WACG64C,GACC,cAACpB,GAAD,CACE91B,cAAA,sBAA4B3hB,GAC5BoZ,QAAS,kBACP48B,GAAwB,kBAAMiD,GAAuB,OAHzD,SAMGZ,KAGJU,GACC,cAAC,GAAD,CACEp3B,cAAa,uBACbvI,QAAS,kBACP48B,GAAwB,kBAAMmD,GAAgB,OAHlD,SAMG5vB,EAAM2qB,qBACHuE,GACAF,KAGPO,GACC,qCACE,cAAC,GAAD,CACEn3B,cAAA,wBAA8B3hB,GAC9Bw3C,WAAY3C,EACZz7B,QAAS,WACP48B,GAAwB,kBACtBb,EAAmB,wBALzB,SASqB,qBAAlBV,EACG0D,GACAF,KAEN,cAAC,GAAD,CACEt2B,cAAA,qBAA2B3hB,GAC3Bw3C,WAAY3C,EACZz7B,QAAS,WACP48B,GAAwB,kBACtBb,EAAmB,oBALzB,SASqB,iBAAlBV,EACG2D,GACAF,gBAQjBgB,GAAgBl5C,GACf,cAAC,GAAD,CACEiQ,QAASjQ,EACT01C,kBAAmB,SAACzuB,GAAD,OACjByuB,EAAkBzuB,EAAO0uB,oBAAsB,OAEjDpd,QAAS,kBAAM4gB,GAAgB,IAC/B/gC,OAAQ8gC,EACR3C,oBAAqBhtB,EAAM2qB,qBAC3BvQ,QAAO,OAAEruB,QAAF,IAAEA,OAAF,EAAEA,EAAmBisB,cAC5BlR,QAAO,OAAE5a,QAAF,IAAEA,OAAF,EAAEA,EAAmB8rB,cAC5ByW,kBACEzuB,EAAM2qB,qBACF,CACEyB,mBAAoB,IAAIrvC,KAAKijB,EAAM2qB,4BAErCvvC,IAITq0C,GAAuBh5C,GACtB,cAAC,GAAD,CACEq2C,mBAAoB,SAACpvB,GACnB6uB,EAAoB7uB,EAAOuc,SAC3ByV,GAAuB,IAEzB1gB,QAAS,kBAAM0gB,GAAuB,IACtC7gC,OAAQ4gC,EACR/oC,QAASjQ,EACTu2C,oBAAqB5B,EACrB5tB,cACE4tB,EAAiB,CAAEnR,QAASmR,QAAmBhwC,QC3O5C,OAA0B,uC,6MCGlC,IAAMs5B,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMyiC,SC2BzD1D,GAAwB,cAAC,KAAD,IACxBC,GAAqB,cAAC,KAAD,IACrBC,GAAsB,cAACpB,GAAD,IACtBqB,GAAmB,cAACnB,GAAD,IACnBoB,GAAc,cAACC,GAAA,EAAD,IACdC,GAAqB,qBAAKphC,IAAKqhC,KAC/BC,GAAmB,qBAAKthC,IAAKuhC,KAkMpBkD,GAjL0B,SAACryB,GAAW,IAEjDvpB,EAQEupB,EARFvpB,GACAjF,EAOEwuB,EAPFxuB,KACA+U,EAMEyZ,EANFzZ,YACAoB,EAKEqY,EALFrY,YACAojC,EAIE/qB,EAJF+qB,eACAC,EAGEhrB,EAHFgrB,gBACAC,EAEEjrB,EAFFirB,aACAoE,EACErvB,EADFqvB,cATgD,EAuB9CvE,GAAsB9qB,EAAO,CAC/B+qB,iBACAC,kBACAC,iBAbAK,EAbgD,EAahDA,0BACAtuC,EAdgD,EAchDA,KACA+O,EAfgD,EAehDA,kBACAG,EAhBgD,EAgBhDA,kBACAg/B,EAjBgD,EAiBhDA,cACAE,EAlBgD,EAkBhDA,eACAQ,EAnBgD,EAmBhDA,mBACAO,EApBgD,EAoBhDA,kBACAI,EArBgD,EAqBhDA,oBACAE,EAtBgD,EAsBhDA,wBAtBgD,EA6BIvlB,IAAM1tB,UAAS,GA7BnB,mBA6B3Ci2C,EA7B2C,KA6BtBC,EA7BsB,OA8BUxoB,IAAM1tB,UAChE,GA/BgD,mBA8B3C84C,EA9B2C,KA8BnBC,EA9BmB,KAkCvBjD,EAA6B5tC,GACtD,4BADMc,kBAGmB+sC,EAAgC7tC,GACzD,2BADMc,kBAGmBgtC,EAA8B9tC,GACvD,iCADMc,kBAIR,OACE,eAAC,GAAD,CAAS4V,cAAA,sBAA4B3hB,GAArC,UACGupB,EAAM2qB,sBACL,cAACkD,GAAD,CACEz1B,cAAA,4BAAkC3hB,GADpC,iCAEmB2H,YACjB,IAAIrB,KAAKijB,EAAM2qB,sBACf,YAGJ,eAACmD,GAAD,WACE,cAAC,GAAD,UACG9tB,EAAM2qB,qBACL,cAACyD,GAAD,CAAuB5hC,QAAQ,KAA/B,SAAqCxP,IAErC,cAACgT,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BxP,MAG9B,qBAAK4Q,IAAK4kC,GAAWz2C,MAAK,wBAAmBtF,QAE/C,eAACu3C,GAAD,WACE,eAAC,GAAD,WACE,eAACh+B,GAAA,EAAD,CAAYxD,QAAQ,KAApB,iBACGjG,QADH,IACGA,OADH,EACGA,EAAa/U,KADhB,IACuBA,GAAI,WAAQyL,OAAOzL,GAAMs+C,OAArB,QAE3B,cAAC9/B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC7E,IAChCyjC,GACC,eAACp7B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsC4+B,KAEvCiE,GACC,cAACd,GAAD,UAAsBc,OAG1B,cAAClB,GAAD,UACG13C,EAAM,GACL,eAAC,GAAD,WACG64C,GACC,cAACpB,GAAD,CACE91B,cAAA,sBAA4B3hB,GAC5BoZ,QAAS,kBACP48B,GAAwB,kBAAMiD,GAAuB,OAHzD,SAMGZ,KAGJU,GACC,cAAC,GAAD,CACEp3B,cAAa,oBACbvI,QAAS,kBACP48B,GAAwB,kBACtB8F,GAA0B,OAJhC,SAQGvyB,EAAM2qB,qBACHuE,GACAF,KAGPO,GACC,qCACE,cAAC,GAAD,CACEn3B,cAAA,wBAA8B3hB,GAC9Bw3C,WAAY3C,EACZz7B,QAAS,WACP48B,GAAwB,kBACtBb,EAAmB,wBALzB,SASqB,qBAAlBV,EACG0D,GACAF,KAEN,cAAC,GAAD,CACEt2B,cAAA,qBAA2B3hB,GAC3Bw3C,WAAY3C,EACZz7B,QAAS,WACP48B,GAAwB,kBACtBb,EAAmB,oBALzB,SASqB,iBAAlBV,EACG2D,GACAF,gBAQjB2D,GAA0B77C,GACzB,cAAC,GAAD,CACEiQ,QAASjQ,EACT01C,kBAAmB,SAACzuB,GAAD,OACjByuB,EAAkBzuB,EAAO0uB,oBAAsB,OAEjDpd,QAAS,kBAAMujB,GAA0B,IACzC1jC,OAAQyjC,EACRtF,oBAAqBhtB,EAAM2qB,qBAC3BvQ,QAAO,OAAEruB,QAAF,IAAEA,OAAF,EAAEA,EAAmBisB,cAC5BlR,QAAO,OAAE5a,QAAF,IAAEA,OAAF,EAAEA,EAAmB8rB,cAC5ByW,kBACEzuB,EAAM2qB,qBACF,CACEyB,mBAAoB,IAAIrvC,KAAKijB,EAAM2qB,4BAErCvvC,IAITq0C,GAAuBh5C,GACtB,cAAC,GAAD,CACEq2C,mBAAoB,SAACpvB,GACnB6uB,EAAoB7uB,EAAOuc,SAC3ByV,GAAuB,IAEzB1gB,QAAS,kBAAM0gB,GAAuB,IACtC7gC,OAAQ4gC,EACR/oC,QAASjQ,EACTu2C,oBAAqB5B,EACrB5tB,cACE4tB,EAAiB,CAAEnR,QAASmR,QAAmBhwC,QCnO5C,OAA0B,yDCA1B,OAA0B,kD,6gCCGlC,IAAMmyB,GAAc91B,IAAO+4C,MAAV,MAGF,qBAAG7jC,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QACvD,qBAAG6c,MAAkBC,QAAQ,MAG7B6lC,GAASh7C,IAAOgW,IAAV,MAKNilC,GAAMj7C,IAAOgW,IAAV,MAGP,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAC9C,YACA,GADmB,EAAhB+lC,UAED,OAAO/rB,YAAP,SAQOyB,GAAW5wB,YAAOuY,KAAPvY,CAAH,MACV,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMwgC,UACnC,qBAAGxjC,MAAkB8B,WAAW4yB,kBAGxC,qBAAG10B,MAAkBC,QAAQ,OAEzB,qBAAGD,MAAkBE,QAAQ6M,KAAKzM,aAClC,qBAAGN,MAAkBC,QAAQ,MAC5B,qBAAGD,MAAkBC,QAAQ,MAI9BgmC,GAAsBn7C,YAAOuY,KAAPvY,CAAH,MACf,qBAAGkV,MAAkBC,QAAQ,MAGjCimC,GAAiBp7C,YAAO6d,KAAP7d,CAAH,MAGhB,qBAAGkV,MAAkBE,QAAQ6M,KAAK5M,W,yqCC7CtC,IAAM2X,GAAoBhtB,YAAO0X,MAAa5C,OAAM,kBAAkB,CAC3EC,QADyD,EAAGA,SACxC,cADW/U,CAAH,MAMjB,gBAAGuiB,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAI7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAG7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAK7B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAIpB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAGtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAGtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MACpC,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAI/B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAK3B,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAKtB,gBAAGA,EAAH,EAAGA,OAAH,OAAgBP,GAAaO,MAQtCwL,GAAe/tB,YAAOqtB,KAAPrtB,CAAH,MAIV,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MCVtCgY,GAjCkC,SAAC,GAS3C,IARLnuB,EAQI,EARJA,GACAmZ,EAOI,EAPJA,MACAtf,EAMI,EANJA,SACA4B,EAKI,EALJA,MACA4d,EAII,EAJJA,SAII,IAHJH,aAGI,MAHI,UAGJ,MAFJgV,0BAEI,MAFiB,WAEjB,EADD/R,EACC,0FACJ,OACE,eAAC,GAAD,CACEoH,OAAQrK,EACRyK,WAAS,EACTloB,MAAOiQ,QAAQjQ,GACf4d,SAAUA,EACVtD,QAASmY,EALX,UAOE,cAACE,GAAA,EAAD,CAAYpuB,GAAIA,EAAhB,SAAqBmZ,IACrB,cAAC4V,GAAD,yBACEhZ,QAAQ,WACRoD,MAAOA,EACPmV,QAAStuB,EACTqZ,SAAUA,GACN8C,GALN,aAOGtiB,KAEF4B,GAAS,cAAC8yB,GAAA,EAAD,UAAiB9yB,QCzB3B0qC,GAGF,SAAC,EAAkD3pB,GAAS,IAAD,EAAxDkpB,EAAwD,EAAxDA,YAAarjC,EAA2C,EAA3CA,MAAOg6C,EAAoC,EAApCA,WAAYr8C,EAAwB,EAAxBA,GAAIqZ,EAAoB,EAApBA,SAAoB,EACnBtW,mBAASV,GAAS,IADC,mBACtDi6C,EADsD,KACvCC,EADuC,OAKzDx5C,oBAAwD,OAAX2iC,QAAW,IAAXA,OAAA,EAAAA,EAAaD,oBAA2D,WAL5D,mBAG3DA,EAH2D,KAI3D+W,EAJ2D,KAMrDh0C,EAAoB7E,qBAAWkR,IAA/BrM,gBAEFu+B,EAAmB9yB,iCACvB,SAACwoC,EAA0ChX,GACzC,IAAM2P,EAAYqH,EAAoB3U,iBAClC,eACA,WACJuU,EAAWI,EAAqBrH,EAAW3P,KAE7C,KAGI2C,EAAc38B,mBAAQ,WAAO,IAAD,IAChC,SAAQ,OAACjD,QAAD,IAACA,GAAD,UAACA,EAAiBowB,eAAlB,iBAAC,EAA0ByP,uBAA3B,aAAC,EAA2Ct/B,MAClD,SAACu/B,GAAD,MACE,CAAC,gBAAiB,wBAAwB7nC,SACxC+F,OAAO8hC,EAAIC,kBAEb,CACEjE,GAAuBC,eACvBD,GAAuBE,gBACvB/jC,SAAS6nC,EAAIE,kBAElB,QAAChgC,QAAD,IAACA,GAAD,UAACA,EAAiBowB,eAAlB,aAAC,EAA0ByP,kBAE9B,OACE,eAAC4T,GAAD,WACE,cAAC,GAAD,CACEj9C,KAAK,OACLqD,MAAOi6C,EACPzjC,SAAU,SAACC,GAAO,IAAD,EACTstB,EAAiB/gB,GACF,MAAnBvM,EAAEC,OAAO1W,MAAgB,GAAKyjB,SAAShN,EAAEC,OAAO1W,OAAOg9B,YAEnDqd,EAA0BrX,GAC9Be,EADmD,OAEnD59B,QAFmD,IAEnDA,GAFmD,UAEnDA,EAAiBowB,eAFkC,aAEnD,EAA0BlG,YAC1B0V,EACA3C,GAEF8W,EAAiBnW,GACjBW,EAAiBvzB,SAAjB,2BACKkpC,GADL,IAEE5U,iBAAkB1B,IACjBX,IAELpsB,SAAUA,EACVmD,IAAKA,EACLxc,GAAE,UAAKA,EAAL,aAEF28C,QAAQ,SAEV,yCACA,cAAC,GAAD,CACE38C,GAAG,iCACH40B,mBAAoB,CAClB,cAAe,kCAEjBvyB,MAAOojC,EACPvsB,MAAM,QACNL,SAAU,SAACC,GAAO,IAAD,EACT4jC,EAA0BrX,GAC9BiX,EADmD,OAEnD9zC,QAFmD,IAEnDA,GAFmD,UAEnDA,EAAiBowB,eAFkC,aAEnD,EAA0BlG,YAC1B0V,EACAtvB,EAAEC,OAAO1W,OAEX0kC,EAAiBvzB,SAAjB,2BACKkpC,GADL,IAEE5U,iBAAkBwU,IACjBxjC,EAAEC,OAAO1W,OACZm6C,EACE1jC,EAAEC,OAAO1W,QAnBf,SAuBGwM,OAAOw3B,QAAQ5B,IAAgCl5B,KAAI,mCAAE0C,EAAF,KAAOkL,EAAP,YAClD,cAAC,GAAD,CAEE9W,MAAO4L,EACPiL,MAAM,YACNyI,cAAA,6BAAmC1T,GAJrC,SAMGkL,GANH,UACUnZ,EADV,qBACyBiO,aAapBwiB,OAAMa,WAAW6U,I,isECtHPnlC,IAAOgW,IAAV,MAPtB,IAYa4lC,GAAc57C,YAAO67C,KAAP77C,CAAH,MAOX87C,GAAuB97C,IAAOgW,IAAV,MAOX,qBAAGd,MAAkBE,QAAQ+jC,WAAW4C,SAIjD77B,GAASlgB,IAAOgW,IAAV,MAKG,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMwgC,UACpD,qBAAGxjC,MAAkBE,QAAQ+jC,WAAW4C,SAGtCC,GAAiBh8C,IAAOgW,IAAV,MAadmnB,GAAcn9B,IAAOgW,IAAV,MAOf,qBAAGd,MAAkBC,QAAQ,OAGzB8mC,GAAiBj8C,IAAOgW,IAAV,MAOdkmC,GAAkBl8C,IAAOgW,IAAV,MAInB,qBAAGd,MAAkBC,QAAQ,MACnB,qBAAGD,MAAkBC,QAAQ,MAGnCgnC,GAAmBn8C,YAAOuY,KAAPvY,CAAH,MAKhBo8C,GAAiBp8C,YAAO21B,KAAP31B,CAAH,MAId81B,GAAc91B,YAAOq8C,KAAPr8C,CAAH,MAET,qBAAGkV,MAAkB8B,WAAWE,YAGlColC,GAAet8C,YAAO6U,KAAP7U,CAAH,MAErB,gBA7FkCkY,EA6F/BhD,EAAH,EAAGA,MAAH,OA7FkCgD,EA6FUhD,EAAME,QAAQC,QAAQhd,KA7Fd82B,YAAlB,KAChBjX,EAEEA,MA2Fb,qBAAGhD,MAAkBE,QAAQ+jC,WAAW4C,SCxD7CQ,GAAqE,SAAC,GAMrE,IALLv9C,EAKI,EALJA,GACAmZ,EAII,EAJJA,MACA4vB,EAGI,EAHJA,QACAyU,EAEI,EAFJA,MACAC,EACI,EADJA,OAEA,OACE,eAACP,GAAD,CAAiB9jC,QAAS,mBAAQokC,GAASA,EAAMx9C,IAAK2hB,cAAa87B,EAAnE,UACE,cAACL,GAAD,CAAgBrU,QAASA,IACzB,cAACoU,GAAD,CAAkBpnC,QAAQ,QAA1B,SAAmCoD,QAK5BukC,GAAoD,SAAC,GAUpC,IAT5BC,EAS2B,EAT3BA,OACAtlC,EAQ2B,EAR3BA,MACAvH,EAO2B,EAP3BA,QACAxL,EAM2B,EAN3BA,MACAs4C,EAK2B,EAL3BA,yBACAz6C,EAI2B,EAJ3BA,QACA06C,EAG2B,EAH3BA,mBACAC,EAE2B,EAF3BA,yBACAvlB,EAC2B,EAD3BA,QAC2B,EACax1B,mBAEtC,IAHyB,mBACpBg7C,EADoB,KACNC,EADM,OAKaj7C,mBACtC,CACE/C,GAAI,SACJ+oC,SAAS,EACT5vB,MAAO,QACP8kC,eAAe,EACfT,MAAO,kBACLU,GAAgB,gBAAGnV,EAAH,EAAGA,QAAYh4B,EAAf,+CAAC,eACZA,GADW,IAEdg4B,SAAUA,UAdS,mBAKpBoV,EALoB,KAKND,EALM,OAmBqBn7C,mBAAS,IAnB9B,mBAmBpBq7C,EAnBoB,KAmBFC,EAnBE,KAqB3B38C,qBAAU,WACR,GAAKo8C,EAAL,CADc,IAGN99C,EAA6B89C,EAA7B99C,GAAIs+C,EAAyBR,EAAzBQ,YAAavV,EAAY+U,EAAZ/U,QAEzBmV,EAAgB,CACdl+C,GAAE,OAAEA,QAAF,IAAEA,IAAM,SACVs+C,YAAW,OAAEA,QAAF,IAAEA,IAAe,GAC5BvV,QAAO,OAAEA,QAAF,IAAEA,KACT5vB,MAAO,QACP8kC,eAAe,EACfT,MAAO,kBACLU,GAAgB,gBAAGnV,EAAH,EAAGA,QAAYh4B,EAAf,+CAAC,eACZA,GADW,IAEdg4B,SAAUA,UAIhBsV,EAAmB,OAACC,QAAD,IAACA,IAAe,OAClC,CAACR,IAEJp8C,qBAAU,WACRs8C,EAAgBltC,KACf,CAACA,IAEJ,IAAMytC,EAAwB//C,uBAAY,WACxC6Z,IACAkgB,MACC,CAAClgB,EAAOkgB,IAELimB,EAAsBhgD,uBAAY,WACtC,IAAMigD,EAAqB,2BACtBN,GADsB,IAEzBG,YAAaF,IAGVD,EAAapV,QAGhB6U,EAAyB,GAAD,oBACnBG,EAAahzC,QAAO,sBAAGg+B,YADJ,CAEtB0V,KAJFb,EAAyBG,EAAahzC,QAAO,sBAAGg+B,YAOlD1wB,MACC,CACD0lC,EACAH,EACAvlC,EACA8lC,EACAC,IAGF,OACE,qCACGj7C,GAAWw6C,GAAU,cAAC,GAAD,CAAiBx6C,QAASA,IAChD,cAACy5C,GAAD,CACErlC,KAAMomC,EACNe,gBAAiBH,EACjB58B,cAAY,yBAHd,SAKE,eAACm7B,GAAD,WACE,eAAC,GAAD,WACE,cAACE,GAAD,CAAgB5jC,QAASmlC,EAAzB,SACE,cAAC,KAAD,MAEF,cAAC,GAAD,UACE,cAAChlC,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BzQ,SAG9B,cAAC23C,GAAD,CAAgBt7B,cAAY,8BAA5B,SACG,uBAAIo8B,GAAJ,CAAkBI,IAAc5yC,KAAI,SAACwF,EAAQQ,GAAT,OACnC,qCACE,wBAAC,GAAD,2BACMR,GADN,IAEEysC,MACIzsC,EAAOysC,MACLzsC,EAAOysC,MACP,SAACx9C,GAAD,OACEg+C,GAAgB,SAACltC,GAAD,OACdA,EAAQvF,KAAI,gBAAGw9B,EAAH,EAAGA,QAAYh4B,EAAf,+CAAC,eACRA,GADO,IAEVg4B,QAAS/oC,IAAO+Q,EAAO/Q,IAAM+oC,EAAUA,WAInD96B,IAAG,6BAAwBsD,GAC3BksC,OAAM,6BAAwBlsC,QAE7BssC,IACwB,IAAzBM,EAAapV,SACbh4B,EAAO/Q,KAAOm+C,EAAan+C,IACzB,cAAC,GAAD,CACEqC,MAAO+7C,EACPvlC,SAAU,SAACC,GAAD,OAAOulC,EAAoBvlC,EAAEC,OAAO1W,QAC9Csf,cAAY,2CAMxB,uBACA,cAAC27B,GAAD,CAAclkC,QAASolC,EAAvB,iCC7KKG,GAhBkB,CAC/BC,QAAS,MACT7a,eAAgB,MAChB8a,SAAU,MACVC,OAAQ,MACRC,OAAQ,MACR5a,WAAY,MACZD,YAAa,MACb8a,YAAa,MACbC,KAAM,MACNC,oBAAqB,MACrBC,WAAY,MACZC,iBAAkB,MAClBC,wBAAyB,OCHdC,GAAsBj+C,wBAA8B,IAgClDk+C,GAzBiE,SAAC,GAG1E,IAFL1lD,EAEI,EAFJA,SACA2lD,EACI,EADJA,mBACI,EACoCz8C,mBAAyB,IAD7D,mBACG08C,EADH,KACiBC,EADjB,KAGIlvC,GAAoBhB,EADP7L,qBAAWgR,IAAxBnF,YACAgB,gBAYR,OAVA9O,qBAAU,YACmB,OAAG89C,QAAH,IAAGA,OAAH,EAAGA,EAAoBjyC,MAChD,SAACgc,GAAD,OAAWA,EAAM2W,gBAAkBye,GAAkB5a,oBAKvDvzB,IAAkBrM,MAAK,SAACw7C,GAAD,QAAYA,GAAQD,EAAgBC,QAC1D,CAACH,IAGF,cAACF,GAAoBl9C,SAArB,CAA8BC,MAAOo9C,EAArC,SACG5lD,KCQD+lD,GAGF,SAAC,EAAkDpjC,GAAS,IAAzDna,EAAwD,EAAxDA,MAAOg6C,EAAiD,EAAjDA,WAAYr8C,EAAqC,EAArCA,GAAIqZ,EAAiC,EAAjCA,SAAUqsB,EAAuB,EAAvBA,YAAuB,EAEnB3iC,mBAAS,IAFU,mBAEtDkjC,EAFsD,KAEvCM,EAFuC,OAGjBxjC,mBAAS,IAHQ,mBAGtDyjC,EAHsD,KAGtCC,EAHsC,OAIvB1jC,oBAAS,GAJc,mBAItD88C,EAJsD,KAIzCC,EAJyC,OAKP/8C,mBAEpD,IAP2D,mBAKtDg9C,EALsD,KAKjCC,EALiC,KAUrD78C,GAAYqM,EADC7L,qBAAWgR,IAAxBnF,YACArM,QAEF88C,ED/Cet8C,qBAAW27C,ICiDhC59C,qBAAU,WACR,GAAKW,EAAL,CADc,MAGgBA,EAAMiJ,MAAM,KAH5B,mBAGPo7B,EAHO,KAGGC,EAHH,KAKRC,EAAoBC,oBAAS7hB,GAAW0hB,IAG9C,GAFAH,EAAiB//B,OAAOogC,GAAmBh4B,UAAU,IAE5B,qBAAd+3B,EAAX,CAEA,IAAMG,EAAqBD,oBAAS7hB,GAAW2hB,IAC/CF,EAAkBjgC,OAAOsgC,GAAoBl4B,UAAU,QACtD,IAEH,IxEzCiC83B,EwEyC3BK,EAAmB9yB,iCACvB,SACEgyB,EACAO,EACA0Z,EAQAC,GAEA,IAAMnZ,EAAiBH,oBAASZ,GAC1BgB,EAAkBJ,oBAASL,GAG3BE,EAAWlgC,OAAOwgC,GAClBL,EAAYngC,OAAOygC,GAEnBrmC,EACAomC,EAAiB,GAAKC,EAAkB,EAAU,eAElDD,EAAiB,GAAKC,EAAkB,EACnC,mBAEF,WAGT,OAAuB,IAAnBD,GAA4C,IAApBC,GAC1BV,EAAiB,IACjBE,EAAkB,IACX4V,EAAW,yBAEdvU,iBAAkB,IACfoY,GAHU,IAIbC,mBAEFv/C,IAIGy7C,EAAW,yBAEdvU,iBAAiB,GAAD,OAAKpB,EAAL,cAAmBC,IAChCuZ,GAHU,IAIbC,mBAEFv/C,KAGJ,KAGI6nC,EAAch9B,mBAClB,kBACEs0C,EAAoBx0C,KAClB,kBAAG60C,EAAH,EAAGA,aAAcjnC,EAAjB,EAAiBA,MAAOmlC,EAAxB,EAAwBA,YAAxB,iBACG8B,EAAe9B,EAAcnlC,SADhC,QAC0C,QAE9C,CAAC4mC,IAGGjC,EAA2BryC,mBAC/B,+BAAMi6B,QAAN,IAAMA,GAAN,UAAMA,EAAaiD,gBAAnB,aAAM,EAAuBp7B,MAAK,SAACs7B,GAAD,QAAeA,EAAQuX,kBACzD,QAAC1a,QAAD,IAACA,OAAD,EAACA,EAAaiD,WAGVwX,EAAiB10C,mBAAQ,WAAO,IAAD,IAC7B40C,EAA0B3X,GAC9BuX,EADmD,iBAEnDva,QAFmD,IAEnDA,OAFmD,EAEnDA,EAAaiD,gBAFsC,QAE1B,IAGrBwV,EAAY,OAAGzY,QAAH,IAAGA,GAAH,UAAGA,EAAaiD,gBAAhB,aAAG,EAAuBp7B,MAC1C,SAACs7B,GAAD,QAAeA,EAAQuX,gBAGnBE,EAA0BD,EAAwBt1C,QACtD,SAACgG,GAAD,OAA+B,IAAnBA,EAAOg4B,WAGrB,GAAKoV,EAEE,CACL,IAAMM,EAAwB,CAC5Bz+C,GAAE,OAAEm+C,QAAF,IAAEA,OAAF,EAAEA,EAAcn+C,GAClBs+C,YAAW,OAAEH,QAAF,IAAEA,OAAF,EAAEA,EAAcnV,YAC3B7vB,MAAO,QACPinC,cAAc,GAGhBJ,EAAuB,GAAD,oBACjBM,GADiB,CAEpB7B,UAXFuB,EAAuBM,GAezB,OAAOD,IACN,CAACJ,EAAD,OAAqBva,QAArB,IAAqBA,OAArB,EAAqBA,EAAaiD,WAE/B4X,EAA0B/hD,uBAAY,WAC1C,IAAMk+C,EAA0B5W,GAC9BG,EACA8Z,EAAoBj3C,QAEtBi+B,EAAiBvzB,SACfyyB,EACAO,EACAkW,EACAqD,KAED,CAAC9Z,EAAeO,EAAgBuZ,IAEnC,OACE,eAAC/D,GAAD,WACE,eAACC,GAAD,WACE,cAAC,GAAD,CACEj9C,KAAK,OACLqD,MAAO4jC,EACPptB,SAAU,SAACC,GACT,IAAMzW,EAA2B,MAAnByW,EAAEC,OAAO1W,MAAgB,GAAKwkC,oBAAS7hB,GAAWlM,EAAEC,OAAO1W,QACnEglC,EAAiB7gC,OAAOnE,GACxBq6C,EAA0B5W,GAC9BuB,EACA0Y,EAAoBj3C,QAEtBy9B,EAAiBc,GACjBN,EAAiBvzB,SACf6zB,EACAb,EACAkW,EACAqD,IAGJ1mC,SAAUA,EACVmD,IAAKA,EACLxc,GAAE,UAAKA,EAAL,aAEF28C,QAAQ,SAEV,qCACA,cAAC,GAAD,CACE39C,KAAK,OACLqD,MAAOmkC,EACP3tB,SAAU,SAACC,GACT,IAAMzW,EAA2B,MAAnByW,EAAEC,OAAO1W,MAAgB,GAAKwkC,oBAAS7hB,GAAWlM,EAAEC,OAAO1W,QACnEglC,EAAiB7gC,OAAOnE,GACxBq6C,EAA0B5W,GAC9BG,EACA8Z,EAAoBj3C,QAEtB29B,EAAkBY,GAClBN,EAAiBvzB,SACfyyB,EACAoB,EACAqV,EACAqD,IAGJ1mC,SAAUA,EACVrZ,GAAE,UAAKA,EAAL,cAEF28C,QAAQ,SAEV,4CxE/M2BjW,EwEiNTh+B,OAAOu9B,IxEhN9Bv9B,OAAOs8B,MAAM0B,IAAaA,EAAW,IAAMA,EAAW,IAAMA,GAAY,MwEiNnE,cAACuV,GAAD,CACEC,WAAW,EACX9iC,QAAS,WACFjW,GAAS28C,GAAe,IAE/Bn+B,cAAY,iCALd,SAOE,eAACq6B,GAAD,WACE,eAAC,GAAD,CAAUjmC,QAAQ,QAAlB,qBAEI5S,EAAkC,cAACi5C,GAAD,IAAxB,cAACoE,GAAA,EAAD,CAAQpkC,MAAO,QAE7B,eAAC+/B,GAAD,CAAqBpmC,QAAQ,QAA7B,UAC0B,IAAvB0yB,EAAY3/B,QAAgB,4BAC5B2/B,EAAY3/B,OAAS,GAArB,iBAA+B2/B,EAAYgY,KAAK,MAAhD,cAKT,cAAC,GAAD,CACEpoC,MAAO,kBAAMynC,GAAe,IAC5BvnB,QAASgoB,EACT5C,OAAQkC,EACR18C,QAASA,EACTmC,MAAM,sBACNwL,QAASqvC,EACTtC,oBAAkB,EAClBC,yBAA0B,CACxB99C,GAAE,OAAE89C,QAAF,IAAEA,OAAF,EAAEA,EAA0B99C,GAC9B+oC,QAA6C,qBAA7B+U,EAChBQ,YAAW,OAAER,QAAF,IAAEA,OAAF,EAAEA,EAA0B9U,aAEzC4U,yBAA0B,SAAC9sC,GACzB,IAAM4vC,ExE9P6B,SAC3C5vC,GAGA,OAAOA,EAAQvF,KAAI,cAAGw9B,QAAH,EAAYyU,MAAZ,IAAmBx9C,EAAnB,EAAmBA,GAAIi+C,EAAvB,EAAuBA,cAAkBltC,EAAzC,4EAAC,eACfA,GADc,IAEjB/Q,GAAI0I,OAAOs8B,MAAMt8B,OAAO1I,SAAO2E,EAAY+D,OAAO1I,GAClDogD,aAAcnC,OwEuPc0C,CAA8B7vC,GACpDkvC,EAAuBU,GACvB,IAAMhE,EAA0B5W,GAC9BG,EACAya,EAAc53C,QAEhBi+B,EAAiBvzB,SACfyyB,EACAO,EACAkW,EACAgE,UAQGjwB,OAAMa,WAAWsuB,ICvR1BrY,GAGF,SAAC,EAAqC/qB,GAAS,IAA5Cna,EAA2C,EAA3CA,MAAOg6C,EAAoC,EAApCA,WAAYr8C,EAAwB,EAAxBA,GAAIqZ,EAAoB,EAApBA,SAAoB,EACAtW,mBAASV,GAAS,IADlB,mBACzCu+C,EADyC,KACvBC,EADuB,KAG1C9Z,EAAmB9yB,iCACvB,SAACwoC,GACC,IAAMrH,EAAYqH,EAAoB3U,iBAClC,eACA,WACJuU,EAAWI,EAAqBrH,KAElC,KAGF,OACE,eAAC6G,GAAD,WACE,cAAC,GAAD,CACEj9C,KAAK,OACLqD,MAAOu+C,EACP/nC,SAAU,SAACC,GACT,IAAMstB,EAAiBhhB,GAAuC,MAAnBtM,EAAEC,OAAO1W,MAAgB,GAAKyjB,SAAShN,EAAEC,OAAO1W,OAAOg9B,YAC5Fqd,EAA0BtX,GAC9BgB,GAEFya,EAAoBza,GACpBW,EAAiBvzB,SAAjB,2BACKkpC,GADL,IAEE5U,iBAAkB1B,MAGtB/sB,SAAUA,EACVmD,IAAKA,EACLxc,GAAE,UAAKA,EAAL,gBAEF28C,QAAQ,SAEV,6CAKSlsB,OAAMa,WAAWiW,IC3C1BC,GAGF,SAAC,EAAqChrB,GAAS,IAA5Cna,EAA2C,EAA3CA,MAAOg6C,EAAoC,EAApCA,WAAYr8C,EAAwB,EAAxBA,GAAIqZ,EAAoB,EAApBA,SAAoB,EACJtW,mBAASV,GAAS,IADd,mBACzCy+C,EADyC,KACzBC,EADyB,KAG1Cha,EAAmB9yB,iCACvB,SAACwoC,GACC,IAAMrH,EAAYqH,EAAoB3U,iBAClC,eACA,WACJuU,EAAWI,EAAqBrH,KAElC,KAGF,OACE,eAAC6G,GAAD,WACE,cAAC,GAAD,CACEj9C,KAAK,OACLqD,MAAOy+C,EACPjoC,SAAU,SAACC,GACT,IAAMstB,EAAiB9gB,GAAkC,MAAnBxM,EAAEC,OAAO1W,MAAgB,GAAKyjB,SAAShN,EAAEC,OAAO1W,OAAOg9B,YACvFqd,EAA0BvX,GAAmBiB,GACnDW,EAAiBvzB,SAAjB,2BACKkpC,GADL,IAEE5U,iBAAkB1B,KAEpB2a,EAAkB3a,IAEpB/sB,SAAUA,EACVmD,IAAKA,EACLxc,GAAE,UAAKA,EAAL,wBAEF28C,QAAQ,SAEV,2CAKSlsB,OAAMa,WAAWkW,ICzC1BE,GAGF,SAAC,EAAqClrB,GAAS,IAA5Cna,EAA2C,EAA3CA,MAAOg6C,EAAoC,EAApCA,WAAYr8C,EAAwB,EAAxBA,GAAIqZ,EAAoB,EAApBA,SAAoB,EACdtW,mBAASV,GAAS,IADJ,mBACzC2+C,EADyC,KAC9BC,EAD8B,KAG1Cla,EAAmB9yB,iCACvB,SAACwoC,GACC,IAAMrH,EAAYqH,EAAoB3U,iBAClC,eACA,WACJuU,EAAWI,EAAqBrH,KAElC,KAGF,OACE,eAAC6G,GAAD,WACE,cAAC,GAAD,CACEj9C,KAAK,OACLqD,MAAO2+C,EACPnoC,SAAU,SAACC,GACT,IAAMstB,EAAiB7gB,GAAiC,MAAnBzM,EAAEC,OAAO1W,MAAgB,GAAKyjB,SAAShN,EAAEC,OAAO1W,OAAOg9B,YACtFqd,EAA0B7W,GAAkBO,GAClDW,EAAiBvzB,SAAjB,2BACKkpC,GADL,IAEE5U,iBAAkB1B,KAEpB6a,EAAa7a,IAEf/sB,SAAUA,EACVmD,IAAKA,EACLxc,GAAE,UAAKA,EAAL,SAEF28C,QAAQ,SAEV,2CAKSlsB,OAAMa,WAAWoW,ICxC1BwZ,GAGF,SAAC,EAAqC1kC,GAAS,IAA5Cna,EAA2C,EAA3CA,MAAOg6C,EAAoC,EAApCA,WAAYr8C,EAAwB,EAAxBA,GAAIqZ,EAAoB,EAApBA,SAAoB,EACRtW,mBAASV,GAAS,IADV,mBACzC8+C,EADyC,KAC3BC,EAD2B,KAG1Cra,EAAmB9yB,iCACvB,SAACwoC,GACC,IAAMrH,EAAYqH,EAAoB3U,iBAClC,eACA,WACJuU,EAAWI,EAAqBrH,KAElC,KAGF,OACE,eAAC6G,GAAD,WACE,cAAC,GAAD,CACEj9C,KAAK,OACLqD,MAAO8+C,EACPtoC,SAAU,SAACC,GACT,IAAMstB,EAAiB5gB,GACF,MAAnB1M,EAAEC,OAAO1W,MACL,GACAyjB,SAAShN,EAAEC,OAAO1W,OAAS,IAC3B,MACAyjB,SAAShN,EAAEC,OAAO1W,OAAOg9B,YAEzB6gB,EAA0Bpb,GAAsBsB,GACtDW,EAAiBvzB,SAAjB,2BACK0sC,GADL,IAEEpY,iBAAkB1B,KAEpBgb,EAAgBhb,IAElB/sB,SAAUA,EACVmD,IAAKA,EACLxc,GAAE,UAAKA,EAAL,aAEF28C,QAAQ,SAEV,6CAKSlsB,OAAMa,WAAW4vB,ICjD1BG,GAGF,SAAC,EAAqC7kC,GAAS,IAA5Cna,EAA2C,EAA3CA,MAAOg6C,EAAoC,EAApCA,WAAYr8C,EAAwB,EAAxBA,GAAIqZ,EAAoB,EAApBA,SAAoB,EACVtW,mBAASV,GAAS,IADR,mBACzCi/C,EADyC,KAC5BC,EAD4B,KAG1Cxa,EAAmB9yB,iCACvB,SAACwoC,GACC,IAAMrH,EAAYqH,EAAoB3U,iBAClC,eACA,WACJuU,EAAWI,EAAqBrH,KAElC,KAGF,OACE,eAAC6G,GAAD,WACE,cAAC,GAAD,CACEj9C,KAAK,OACLqD,MAAOi/C,EACPzoC,SAAU,SAACC,GACT,IAAMstB,EAAiB3gB,GAAyC,MAAnB3M,EAAEC,OAAO1W,MAAgB,GAAKyjB,SAAShN,EAAEC,OAAO1W,OAAOg9B,YAEpGkiB,EAAenb,GACfW,EAAiBvzB,SAAjB,2BAFgC,IAEhC,IAEEs0B,iBAAkB1B,MAGtB/sB,SAAUA,EACVmD,IAAKA,EACLxc,GAAE,UAAKA,EAAL,aAEJ,0CAKSywB,OAAMa,WAAW+vB,IC/B1BG,GAGF,SAAC,EAA2BhlC,GAAS,IAAlC1M,EAAiC,EAAjCA,YAAgBqM,EAAiB,gCAChCslC,EAAa,2BAAQtlC,GAAR,IAAeK,QAElC,OAAI1M,EAAY9P,KAAO8jC,GAAoBC,eAClC,cAAC,GAAD,eAAmC0d,IACnC3xC,EAAY9P,KAAO8jC,GAAoBE,iBACvC,cAAC,GAAD,eAA0Byd,IAC1B3xC,EAAY9P,KAAO8jC,GAAoBG,eACvC,cAAC,GAAD,eAAwBwd,IACxB3xC,EAAY9P,KAAO8jC,GAAoBI,YACvC,cAAC,GAAD,eAAqBud,IACrB3xC,EAAY9P,KAAO8jC,GAAoBK,WACvC,cAAC,GAAD,eAAoBsd,IACpB3xC,EAAY9P,KAAO8jC,GAAoBM,cACvC,cAAC,GAAD,eAAuBqd,IACvB3xC,EAAY9P,KAAO8jC,GAAoBO,kBACvC,cAAC,GAAD,eAA4Bod,IAE9B,8BAGMhxB,OAAMa,WAAWkwB,IChCnBE,GAAe,SAACC,GAC3B,IAAMC,EAAeD,EAAO52C,QAC1B,SAACwe,GAAD,aACE,UAAAA,EAAMzZ,mBAAN,eAAmB+xC,cAAeC,GAAgB,aAClDv4B,EAAM8xB,mBAEJ0G,EAAiBJ,EAAO52C,QAC5B,SAACwe,GAAD,aACE,UAAAA,EAAMzZ,mBAAN,eAAmB+xC,cAAeC,GAAgB,cACjDv4B,EAAM8xB,mBAOL2G,EAJsBnzC,OAAOoY,OACjCyE,KAAEu2B,QAAQL,EAAc,mBAGwBr2C,KAAI,SAAC22C,GACrD,MAAO,CACL9G,sBAAuB8G,EACvBpyC,YAAaoyC,EAAM,GAAGpyC,gBAwB1B,OApB0CiyC,EAAeI,OACvDH,GAG4CI,MAAK,SAACC,EAAQC,GAC1D,IAAMC,EACJ,0BAA2BF,EACvBA,EAAOjH,sBAAsB,GAAG3X,eAChC4e,EAAO5e,eAEP+e,EACJ,0BAA2BF,EACvBA,EAAOlH,sBAAsB,GAAG3X,eAChC6e,EAAO7e,eAEb,OAAO,IAAIn9B,KAAKi8C,GAAwB,IAAIj8C,KAAKk8C,GAC7C,GACC,MAMIC,GAAkB,uCAAG,WAChCtkD,EACAukD,GAFgC,mBAAAplD,EAAA,yDAI1BqlD,GAAsB,UAAAxkD,EAAI5B,gBAAJ,eAAcsC,KAAK0B,iBAAkB,IAChD,CACf,+CACA,sCACA,gDAEWE,SAASkiD,GAVU,gCAWxBD,IAXwB,gCAYvBzgD,IAAMxG,MAAMknD,IAZW,OAc1BpiD,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,GAfoB,2CAAH,wDAkBlBqiD,GAA4B,SACvC9yC,GAEA,OAAOpE,QACLmD,OAAOoY,OAAO6c,IAAqBv2B,MAAK,SAACvN,GAAD,OAAQA,IAAO8P,EAAY9P,Q,0oGC3EhE,IAAMqa,GAAYrZ,IAAOgW,IAAV,MAGH,qBAAGd,MAAkBC,QAAQ,MAC/B,qBAAGD,MAAkBC,QAAQ,MAG1C,YAAiC,IAA9BD,EAA6B,EAA7BA,MAAOyjC,EAAsB,EAAtBA,gBACV,MAAwB,QAApBA,EACKxpB,YAAP,KACsBja,EAAME,QAAQqH,MAAMvE,MAAM+D,IAAIS,OAE9B,WAApBi8B,EACKxpB,YAAP,KACsBja,EAAME,QAAQqH,MAAMvE,MAAMwgC,aAFlD,KAOStC,GAAoBp2C,IAAOgW,IAAV,MACR,qBAAGd,MAAkBE,QAAQwI,QAAQlB,SAEzC,qBAAGxH,MAAkBC,QAAQ,MAGlC0Y,GAAkB7tB,YAAOuY,KAAPvY,CAAH,MACf,qBAAGkV,MAAkBC,QAAQ,EAAG,MAElC,gBAAGD,EAAH,EAAGA,MAAH,MACa,QADb,EAAUyjC,gBAEbzjC,EAAME,QAAQqH,MAAMvE,MAAM+D,IAAIS,MAC9BxH,EAAME,QAAQqH,MAAMvE,MAAMwgC,UAIrBI,GAAe94C,YAAOuY,KAAPvY,CAAH,MAEZ,qBAAGkV,MAAkBC,QAAQ,EAAG,MAGhC0xB,GAAmB7mC,IAAO+4C,MAAV,MACP,qBAAG7jC,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QACvD,qBAAG6c,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAIrC8jC,GAAiBj5C,YAAOuY,KAAPvY,CAAH,MACP,qBAAGkV,MAAkBC,QAAQ,MAKpC0sC,GAAmB7hD,IAAOgW,IAAV,MAIhB,qBAAGd,MAAkBC,QAAQ,EAAG,MAGhCshC,GAAsBz2C,YAAO6U,KAAP7U,CAAH,MAIrB,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QAC7C,qBAAGwc,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAQrC2sC,GAA2B9hD,IAAOo6B,OAAV,MAQzB,qBAAGllB,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC+jC,GAAqBl5C,IAAOo6B,OAAV,MAC3B,YAA2B,IAAxBllB,EAAuB,EAAvBA,MAAOlF,EAAgB,EAAhBA,UACJmpC,EAAanpC,EACfkF,EAAME,QAAQqH,MAAMvE,MAAM+D,IAAI5jB,KAC9B6c,EAAME,QAAQE,OAAOC,MAEnB6jC,EAAYppC,EACdkF,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKiH,MAC/BxH,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAK/c,KAE7B2gD,EAAcrpC,EAChBmpC,EACAjkC,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAK/c,KAEnC,OAAOy2B,YAAP,KAMsBkqB,EACXD,EACWD,EAEVjkC,EAAMC,QAAQ,EAAG,EAAG,EAAG,OAK1B+iB,GAAkBl4B,YAAOm4B,KAAPn4B,CAAH,MAKfs5C,GAAqBt5C,IAAOgW,IAAV,MAC3B,YAA2B,IAAxBd,EAAuB,EAAvBA,MAAOlF,EAAgB,EAAhBA,UACJmpC,EAAanpC,EACfkF,EAAME,QAAQqH,MAAMvE,MAAMqL,MAC1BrO,EAAME,QAAQE,OAAOC,MAEnB6jC,EAAYppC,EACdkF,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKiH,MAC/BxH,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAK/c,KAE7B2gD,EAAcrpC,EAChBmpC,EACAjkC,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAK/c,KAEnC,OAAOy2B,YAAP,KAMsBkqB,EACXD,EACWD,EAEVjkC,EAAMC,QAAQ,EAAG,EAAG,EAAG,OAK1BokC,GAAkBv5C,YAAOw5C,KAAPx5C,CAAH,MAKfy5C,GAAWz5C,IAAO+d,KAAV,MAIR+4B,GAAsB92C,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQ6M,KAAKzM,aACjC,qBAAGN,MAAkBC,QAAQ,MC8T1BukC,GAhZK,SAAC,GAaI,IAAD,QAZlBzqC,EAYkB,EAZtBjQ,GACAY,EAWsB,EAXtBA,OACA4iC,EAUsB,EAVtBA,QACA/6B,EASsB,EATtBA,YACAmwC,EAQsB,EARtBA,cACAlT,EAOsB,EAPtBA,YACA4Q,EAMsB,EANtBA,SACAplC,EAKsB,EALtBA,YACAgjC,EAIsB,EAJtBA,qBACApkC,EAGsB,EAHtBA,YACAykC,EAEsB,EAFtBA,gBACAwO,EACsB,EADtBA,OAEMxqC,EAAUC,cADM,EAEoBiY,IAAM1tB,SAC9CnC,GAAU,YAHU,mBAEf6zC,EAFe,KAEAC,EAFA,OAKkCjkB,IAAM1tB,SAC5D61C,QAAiBj0C,GANG,mBAKfq+C,EALe,KAKOC,EALP,OAQsBxyB,IAAM1tB,SAASygC,GAAW,IARhD,mBAQfmR,EARe,KAQCC,EARD,OAYlBnkB,IAAM1tB,SAASmxC,GAZG,mBAUpBgP,EAVoB,KAWpBC,EAXoB,OAakB1yB,IAAM1tB,SAAS,CACrDnC,OAAQA,GAAU,WAClB6H,cACAmwC,kBAhBoB,mBAafwK,EAbe,KAaDC,EAbC,KAmBKxK,EAA6B5tC,GACtD,4BADMc,kBAGmBgtC,EAA8B9tC,GACvD,iCADMc,kBAGmBu3C,EAAiCr4C,GAC1D,0BADMc,kBAIFw3C,GAAgC,OAAX7d,QAAW,IAAXA,OAAA,EAAAA,EAAaoC,mBAAoB,GA7BtC,EA8B0BrX,IAAM1tB,SACpDwgD,GA/BoB,mBA8Bfzb,GA9Be,KA8BG0b,GA9BH,QAiC4B/yB,IAAM1tB,SAAN,OAA+D2iC,QAA/D,IAA+DA,OAA/D,EAA+DA,EAAaD,mBAjCxG,qBAiCI+W,IAjCJ,gBAmCoC/rB,IAAM1tB,SAAS,CACvEmiC,wBAAuB,iBAAEQ,QAAF,IAAEA,OAAF,EAAEA,EAAaR,+BAAf,QAA0C,KACjED,kBAAiB,iBAAES,QAAF,IAAEA,OAAF,EAAEA,EAAaT,yBAAf,QAAoC,EACrDQ,kBAAiB,iBAAEC,QAAF,IAAEA,OAAF,EAAEA,EAAaD,yBAAf,QAAoC,gBAtCjC,qBAmCfge,GAnCe,MAmCQC,GAnCR,SAyC0BjzB,IAAM1tB,UAAS,GAzCzC,qBAyCf4gD,GAzCe,MAyCGC,GAzCH,SA0CgCnzB,IAAM1tB,UAAS,GA1C/C,qBA0Cfw2C,GA1Ce,MA0CMC,GA1CN,UA6CiChqC,EADlC7L,qBAAWgR,IAAxBnF,YACAa,GA7Cc,GA6CdA,2BAA4BD,GA7Cd,GA6CcA,eA7Cd,GAqDlBzM,qBAAWkR,IALbrM,GAhDoB,GAgDpBA,gBACA8M,GAjDoB,GAiDpBA,kBACAG,GAlDoB,GAkDpBA,kBACAL,GAnDoB,GAmDpBA,oBACAO,GApDoB,GAoDpBA,uBAEMpS,GAAaI,qBAAWd,IAAxBU,SACF3D,GAAS6L,mBAAQ,yBAAMlI,SAAN,IAAMA,QAAN,EAAMA,GAAUvD,KAAI,CAACuD,KAEtCsgD,GAAWX,EACbzK,GACAqL,GAEEC,GAAoC9vC,cACxC,SACEmhC,EACAqH,EACAjT,GACI,IAAD,IACGr9B,EAAYzD,OAAM,OAACF,SAAD,IAACA,QAAD,EAACA,GAAiB2D,WAE1CkE,GACEJ,EADwB,YAAC,eAGpBmzC,GAHmB,IAItBxiD,OAAQw0C,EACR1P,YAAY,2BACPA,GACA+W,KAGP,CACE77C,OAAQw0C,EACRtN,iBAAgB,oBACd2U,EAAoB3U,wBADN,eAEdpC,QAFc,IAEdA,OAFc,EAEdA,EAAaoC,wBAFC,QAGd,GACF7C,kBAAmBwX,EAAoBxX,kBACvCC,wBAAyBuX,EAAoBvX,wBAC7Cib,eAAgB1D,EAAoB0D,eACpCh0C,YACAq9B,aACA7c,iBAAkBjkB,OAAM,OAAC0M,SAAD,IAACA,QAAD,EAACA,GAAqBpV,IAC9CylC,kBAAmBgX,EAAoBhX,oBAEzCvnC,OAAM,SAACC,GACPskD,GAAmBtkD,EAAD,sBAAM,sBAAAb,EAAA,6DACtBib,EAAQnT,QAAQ,wBADM,SAEhBuQ,KAFgB,iDAM5B,KAGIquC,GAAsBvzB,IAAMvS,OAAgC,MAE5D+lC,GAAqB,SACzBxH,EACA77C,EACAsjD,GACI,IAAD,EACHV,GAAoB/G,EAAoB3U,kBACxC0U,GAAqBC,EAAoBhX,mBACzCwd,EACIxG,EAAoB3U,iBAAtB,OAAyCvkC,SAAzC,IAAyCA,IAAzC,UAAyCA,GAAUP,YAAnD,aAAyC,EAAgBjI,UAAO4J,GAElE,IAAIywC,EAAYx0C,EAEhB,GAAkB,iBAAdw0C,EAOF,OANAV,EAAiBU,QACjB2O,GAAkCvwC,SAChC4hC,EACAqH,GACA,IAAIn2C,MAAOi7B,eAKX6T,IAAcX,GAAkByP,IAClC9O,EAAY,YAGd2O,GAAkCvwC,SAChC4hC,EACAqH,OACA93C,GAEF+vC,EAAiBU,GACjBiO,EAAgB,CAAEziD,OAAQw0C,EAAW3sC,YAAa7I,MAI9C81C,GAAoB,SACxBzlC,EACAgX,GACI,IAAD,MACG1gB,EAAO0gB,EAAO0uB,mBACpB,GAAIpvC,IAASwtC,GAAiBxtC,EAAM+O,GAAmBG,IAErD,OADAxT,IAAMxG,MAAM,+DACL,EAGT2U,GAAeH,EAAS,CACtBikC,sBAAsB,UAAAjtB,EAAO0uB,0BAAP,eAA2BpU,gBAAiB,KAClE5U,iBAAgB,OAAEvX,SAAF,IAAEA,QAAF,EAAEA,GAAqBpV,KAEzCmjD,GACE,UAAAl8B,EAAO0uB,0BAAP,eAA2BpU,qBAAiB58B,GAE9Cs+C,EAAuB,OAAC1/C,SAAD,IAACA,IAAD,UAACA,GAAUP,YAAX,aAAC,EAAgBjI,MACxCsoD,EAAgB,2BAAKD,GAAN,IAAoB36C,YAAa7I,MAChDgkD,IAAoB,IAWhB5N,GAA0B,SAACC,GAC/B,OAAIkO,GAA0Bf,EAAcxjD,IACnCq2C,KAEPh0C,IAAMszC,QAAQ,4BACdtzC,IAAM2c,QAAQ,sDAAoD,CAChE42B,QAAS,0BAMf,OACE,eAAC,GAAD,CACEmE,gBACI8J,GAAsBve,wBACpB,MACsD,IAAtDyV,KAAKC,IAAI6I,GAAsBxe,mBAC/B,cACAtgC,EANR,UASGu+C,GACC,cAAC,GAAD,CAAmBvhC,cAAA,4BAAkC1R,GAArD,SACE,cAACsJ,GAAA,EAAD,CAAYxD,QAAQ,UAApB,mCAAkDpO,YAChD,IAAIrB,KAAK48C,GACT,cAIN,cAAC,GAAD,CACEntC,QAAQ,YACR4jC,gBACI8J,GAAsBve,wBAA0B,WAAQvgC,EAE5Dgd,cAAa,oBALf,gBAOG7R,QAPH,IAOGA,GAPH,UAOGA,EAAa/U,YAPhB,aAOG,EAAmBs+C,SAEtB,cAAC,GAAD,CAActjC,QAAQ,UAAtB,SAAiC7E,KAC/B6xC,GAAUjzC,GAAe8yC,GAA0B9yC,GACnD,cAAC,GAAD,CACE9P,GAAE,4BAAuBiQ,GACzBH,YAAaA,EACb0M,IAAKwnC,GACL3hD,MAAOylC,GACPzuB,SAAUi9B,IAAagN,EACvB5d,YAAaA,EACb2W,WAAY,SACVI,EACA77C,GACI,IAAD,EACD67C,EAAoB3U,iBAClB4b,GAAyB,CACvBze,kBAAiB,UAAEwX,EAAoBxX,yBAAtB,QAA2C,EAC5DC,wBACEuX,EAAoBvX,wBACtBO,kBAAmBgX,EAAoBhX,mBAAqB,gBAE9Die,GAAyB,CACvBze,kBAAmB,EACnBC,yBAAyB,EACzBO,kBAAmB,gBAEzBuQ,IAAwB,kBACtBiO,GAAmBxH,EAAqB77C,GAAQ,SAKtD,cAAC,GAAD,CACEZ,GAAE,4BAAuBiQ,GACzB4kB,YAAY,sBACZrY,IAAKwnC,GACL3hD,MAAOylC,GACPzuB,SAAUi9B,IAAagN,EACvBzqC,SAAU,SAAC0Q,GAAW,IACZlnB,EAAUknB,EAAMxQ,OAAhB1W,MACF+yC,EAAY/yC,EAAQ,eAAiB,WAC3C2zC,IAAwB,kBACtBiO,GACE,CACEnc,iBAAkBzlC,EAClB4iC,kBAAmB,KACnBC,wBAAyB,MAE3BkQ,SAMTT,GACC,eAAC,GAAD,CAAgB5+B,QAAQ,UAAxB,UACE,cAAC,GAAD,mBADF,IAC6B4+B,KAG9BqO,GACC,cAAC,GAAD,UAAsBA,IAExB,eAACH,GAAD,YACIvM,GAAYuC,GACZ,cAAC,GAAD,CACEl3B,cAAA,2CAAiD1R,GACjDmJ,QAAS,kBACP48B,IAAwB,kBAAMwD,IAAuB,OAHzD,SAME,cAAClB,GAAA,EAAD,OAIFhC,GAAYyC,GACZ,cAAC+J,GAAD,CACE9xC,UAA6B,qBAAlByjC,EACX9yB,cAAA,yCAA+C1R,GAC/CoJ,SAAUi9B,EACVl9B,QAAS,WAGC,IAAD,EAFe,iBAAlBq7B,EACFuB,IAAwB,kBAAM4N,IAAoB,OAE/B,OAAnBI,SAAmB,IAAnBA,IAAA,UAAAA,GAAqB3lC,eAArB,SAA8B+lC,QAC9BniD,IAAMxG,MACJ,6EACA,CAAEikB,SAAU,gBAXpB,SAgBE,qBAAKvI,IAAK0sC,SAIXvN,GAA8B,qBAAlB7B,IACb6O,GACE,cAAC,GAAD,CACEtyC,UAA6B,qBAAlByjC,EACX9yB,cAAA,sBAA4B1R,GAC5BoJ,SAAUi9B,IAAagN,EACvBlqC,QAAS,WACH8pC,GAA+BjzC,GACjC+lC,IAAwB,kBACtBN,GAAkBzlC,EAAS,CAAE0lC,mBAAoB,UAGrDK,IAAwB,kBACtBiO,GACE,CACEnc,iBAAkB,GAClB7C,kBAAmB,KACnBC,wBAAyB,MAE3B,wBAjBR,SAsBE,cAAC,GAAD,QAIHoR,GAA8B,iBAAlB7B,IACb6O,GACE,cAAC,GAAD,CACEtyC,UAA6B,iBAAlByjC,EACX9yB,cAAA,mBAAyB1R,GACzBmJ,QAAS,WACgC,IAAD,EAAhB,iBAAlBq7B,IACiB,OAAnBuP,SAAmB,IAAnBA,IAAA,UAAAA,GAAqB3lC,eAArB,SAA8B+lC,QAC9BniD,IAAMxG,MAAM,sDAAiD,CAC3DikB,SAAU,gBAPlB,SAYE,cAAC,GAAD,SAIP65B,IAAuBtpC,GACtB,cAAC,GAAD,CACEomC,mBA7LoB,SAACpvB,GAAoC,IAAD,EAC9DstB,EAAgBtkC,EAASgX,GACzB2tB,EAAkB3tB,EAAOuc,SACzByf,EAAuB,OAAC1/C,SAAD,IAACA,IAAD,UAACA,GAAUP,YAAX,aAAC,EAAgBjI,MACxCsoD,EAAgB,2BAAKD,GAAN,IAAoB36C,YAAa7I,MAChD45C,IAAuB,IAyLjBlD,SAAUA,EACV/d,QAAS,kBAAMihB,IAAuB,IACtCphC,OAAQmhC,GACRtpC,QAASA,EACTsmC,oBAAqB5B,EACrB5tB,cACE4tB,EAAiB,CAAEnR,QAASmR,QAAmBhwC,IAIpDg/C,IACC,cAAC,GAAD,CACE1zC,QAASA,EACTylC,kBAAmB,SAACzuB,GAAD,OACjByuB,GAAkBzlC,EAASgX,IAE7BsR,QAAS,kBAAMqrB,IAAoB,IACnCxrC,OAAQurC,GACRpN,oBAAqB2M,EACrBvf,QAAO,OAAEruB,SAAF,IAAEA,QAAF,EAAEA,GAAmBisB,cAC5BlR,QAAO,OAAE5a,SAAF,IAAEA,QAAF,EAAEA,GAAmB8rB,cAC5ByW,kBACEkL,EACI,CACEvN,mBAAoB,IAAIrvC,KAAK48C,SAE/Bv+C,Q,8iBC1dT,IAAMs5B,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAIT,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QACnC,qBAAG6c,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAGvD25B,GAAgBr2C,IAAOgW,IAAV,MACJ,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMwgC,UAElD,qBAAGxjC,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAUtCohC,GAAiBv2C,IAAOgW,IAAV,MAKd,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MC+BpCglC,GA5CuC,SAAC,GAIhD,IAHLC,EAGI,EAHJA,sBAGI,IAFJ9E,gBAEI,SADJ/B,EACI,EADJA,gBACI,EAKA6G,EAAsB,GAHpBnrC,EAFF,EAEFjQ,GACAq7C,EAHE,EAGFA,gBACA5X,EAJE,EAIFA,eAGI6X,EAAO3zC,YAAO,IAAIrB,KAAJ,UAAYm9B,IAAmB,SAEnD,OACE,eAAC,GAAD,CAAS9hB,cAAA,0BAAgC05B,GAAzC,UACE,eAAC,GAAD,WACE,qBACElkC,IAAKokC,GACLj2C,MAAK,4BAAuB+1C,KAE9B,cAAC,GAAD,UACE,cAAC9hC,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BulC,SAG9B,cAAC,GAAD,iBACGF,QADH,IACGA,OADH,EACGA,EAAuB7vC,KAAI,SAACge,GAAW,IAAD,MACrC,OACE,8BACE,cAAC,GAAD,yBACEqvB,cAAa,OAAErvB,QAAF,IAAEA,GAAF,UAAEA,EAAOiY,iBAAT,iBAAE,EAAkBx+B,YAApB,aAAE,EAAwBjI,MACnCwuB,GAFN,IAGEw5B,OAAM,UAAEx5B,EAAMmc,mBAAR,aAAE,EAAmBqd,OAC3B/iD,GAAIupB,EAAMvpB,GACVs2C,SAAUA,EACV/B,gBAAiBA,MAPXtkC,Y,qaCzCf,IAAMoK,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,MAMhCkuC,GAAUrjD,IAAOgW,IAAV,MACJ,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MAGnC6nB,GAAsBh9B,IAAOgW,IAAV,MAIhB,qBAAGd,MAAkBC,QAAQ,MCHhC2rC,GAAmB,CAC9BwC,QAAS,EACTC,WAAY,EACZC,aAAc,EACdC,YAAa,GAgIAC,GAlHqD,SAAC,GAK9D,IAJL/C,EAII,EAJJA,OACArN,EAGI,EAHJA,eACAC,EAEI,EAFJA,gBACAC,EACI,EADJA,aAEQjxC,EAAaI,qBAAWd,IAAxBU,SAqFFohD,EAAkBl5C,mBAAQ,kBAAMi2C,GAAaC,KAAS,CAACA,IAEvDiD,EAAY,wDAChBx9C,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,MAAQ,aADrB,aAIlB,OACE,cAAC,GAAD,UACG2+C,EAAO74C,OAAS,EACf,mCACG67C,EAAgBp5C,KAAI,SAACge,GAAD,OA9FK,SAACA,GAA4B,IAAD,oBACtDzZ,EAAcyZ,EAAMzZ,YAC1B,cAAQA,QAAR,IAAQA,OAAR,EAAQA,EAAa+xC,YACnB,KAAKC,GAAgB,WACnB,OACE,cAACuC,GAAD,UACE,cAAC,GAAD,2BACM96B,GADN,IAEExuB,KAAM+U,EAAY/U,KAClB+vC,aAAY,UAAEvhB,EAAMxZ,kBAAR,aAAE,EAAkB+6B,aAChCV,eAAc,UAAE7gB,EAAMxZ,kBAAR,aAAE,EAAkBq6B,eAClCI,eAAc,UAAEjhB,EAAMxZ,kBAAR,aAAE,EAAkBy6B,eAClCO,aAAY,UAAExhB,EAAMxZ,kBAAR,aAAE,EAAkBg7B,aAChC6N,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,KACtCu5C,eAAgBA,EAChBC,gBAAiBA,EACjBC,aAAcA,MAXJjrB,EAAMvpB,IAexB,KAAK8hD,GAAgB,aACnB,OACE,cAACuC,GAAD,UACE,cAAC,GAAD,2BACM96B,GADN,IAEEqvB,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,KACtCw5C,gBAAiBA,MAJPhrB,EAAMvpB,IAQxB,KAAK8hD,GAAgB,QACS,IAAD,IAA3B,OAAIhyC,EAAY+0C,UAEZ,cAACR,GAAD,UACE,cAAC,GAAD,2BACM96B,GADN,IAEEqvB,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,KACtCu5C,eAAgBA,EAChBC,gBAAiBA,EACjBC,aAAcA,MANJjrB,EAAMvpB,IAYpB,cAACqkD,GAAD,UACE,cAAC,GAAD,2BACM96B,GADN,IAEEqvB,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,KACtCu5C,eAAgBA,EAChBC,gBAAiBA,EACjBC,aAAcA,MANJjrB,EAAMvpB,IAU1B,KAAK8hD,GAAgB,YACnB,GAAIv4B,EAAM6xB,sBAAuB,CAAC,IAAD,EACzBntC,EAAG,UAAGsb,EAAM6xB,sBAAsB,UAA/B,aAAG,EAAgCC,gBAC5C,OACE,cAACgJ,GAAD,UACE,cAAC,GAAD,CACEjJ,sBAAuB7xB,EAAM6xB,sBAC7B7G,gBAAiB,SAACv0C,EAAD,OAAOwjC,EAAP,EAAOA,QAAP,OACf+Q,EAAgBv0C,EAAIwjC,OAJZv1B,GASV,IAAD,IACL,OACE,cAACo2C,GAAD,UACE,cAAC,GAAD,2BACM96B,GADN,IAEEqvB,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,KACtCw5C,gBAAiBA,MAJPhrB,EAAMvpB,IAS1B,QACE,OAAO,8BAeH8kD,CAA0Bv7B,QAI9B,cAAC,GAAD,UACE,cAAChQ,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC6uC,S,s4BClIpC,IAAMG,GAAyB/jD,YAAO6U,KAAP7U,CAAH,MAMxB,gBAAGkV,EAAH,EAAGA,MAAH,MACe,YADf,EAAU8uC,kBAEb9uC,EAAME,QAAQ+jC,WAAW4C,MACzB7mC,EAAME,QAAQK,KAAK,QACL,gBAAGP,EAAH,EAAGA,MAAH,MACI,YADJ,EAAU8uC,kBAExB9uC,EAAME,QAAQI,UAAU9c,KACxB,iBACW,qBAAGwc,MAAkBC,QAAQ,MACpC,qBAAGD,MAAkBC,QAAQ,MAI5B8uC,GAAmBjkD,IAAOgW,IAAV,MAIV,qBAAGd,MAAkBC,QAAQ,MAGnC+uC,GAAUlkD,IAAOgW,IAAV,MAEd,gBAAGd,EAAH,EAAGA,MAAH,MACsB,YADtB,EAAU8uC,kBAEN9uC,EAAME,QAAQ+jC,WAAW4C,MACzB7mC,EAAME,QAAQK,KAAK,QAGjB,qBAAGP,MAAkBC,QAAQ,MACnC,qBAAGD,MAAkBC,QAAQ,MAGtBgvC,GAA0BnkD,IAAOgW,IAAV,MACzB,gBAAGd,EAAH,EAAGA,MAAH,MACe,YADf,EAAU8uC,kBAEb9uC,EAAME,QAAQ+jC,WAAW4C,MACzB7mC,EAAME,QAAQ6M,KAAK5M,WAMvB,gBAAG+uC,EAAH,EAAGA,SAAH,OAAoBA,EAAD,8BAAwCA,EAAxC,KAAY,M,UCzC5B,IAAMC,GAAgE,SAAC,GAIvE,IAHLpiC,EAGI,EAHJA,KACA+hC,EAEI,EAFJA,kBACAI,EACI,EADJA,SACI,EACgCriD,oBAAS,GADzC,mBACGuiD,EADH,KACeC,EADf,OAG8CxiD,oBAAS,GAHvD,mBAGGyiD,EAHH,KAGsBC,EAHtB,KAKEC,EAAiBlnD,uBAAY,WACjC+mD,GAAc,SAACI,GAAD,OAAeA,KAC7BF,GAAqB,SAACD,GAAD,OAAwBA,OAC5C,CAACD,EAAeE,IAEbG,EAAqBpnD,uBAAY,WACrC+mD,GAAc,GACdE,GAAqB,KACpB,CAACF,EAAeE,IAEnBI,2BAAgB,WAEd,OADA1gD,OAAO2gD,iBAAiB,SAAUF,GAC3B,kBAAMzgD,OAAO4gD,oBAAoB,SAAUH,MACjD,IAlBC,MClBC,SACL/sC,GACC,IAAD,EACgC9V,oBAAkB,GADlD,mBACOijD,EADP,KACiBC,EADjB,KAEMzpC,EAAM0B,iBAAU,MAEhBgoC,EAAc1nD,uBAAY,WAC9B,QAAmBmG,GAAf6X,EAAI6B,QAAR,CAIA,IAAM3P,EACJ8N,EAAI6B,QAAQ8nC,YAAc3pC,EAAI6B,QAAQ+nC,aACtC5pC,EAAI6B,QAAQgoC,aAAe7pC,EAAI6B,QAAQioC,aAErC53C,IAAas3C,IAIjBC,EAAYv3C,GAERmK,GACFA,EAASnK,OAEV,CAAC8N,EAAI6B,QAASxF,EAAUotC,EAAaD,IAWxC,OATAO,aAAkB,CAChBC,UAAWhqC,EACXiqC,SAAUP,IAGZxkD,qBAAU,WACRwkD,OAGK,CAAEF,WAAUxpC,ODGOkqC,GAAlBV,EApBJ,EAoBIA,SAAUxpC,EApBd,EAoBcA,IAElB,OACE,qCACE,cAAC2oC,GAAD,CACEH,kBAAmBA,EACnBrjC,cAAY,2BACZnF,IAAKA,EACL4oC,SAAUE,OAAa3gD,EAAYygD,EAJrC,SAMGniC,KAED+iC,IAAaR,GAAqB,0BAChCQ,KAAcR,IAChB,eAACP,GAAD,WACE,cAACC,GAAD,CAASF,kBAAmBA,IAC5B,eAACD,GAAD,CACEC,kBAAmBA,EACnB5rC,QAASssC,EACT/jC,cAAY,mCAHd,WAKI2jC,GACA,iDACW,cAAC,KAAD,SAGVA,GACD,kDACY,cAAC,KAAD,iB,miBElEnB,IAAMqB,GAAqB3lD,IAAOgW,IAAV,MACT,qBAAGd,MAAkBE,QAAQI,UAAU9c,QAG1C,qBAAGwc,MAAkBC,QAAQ,MACnC,qBAAGD,MAAkBC,QAAQ,MACpC,qBAAGD,MAAkBC,QAAQ,MACvB,qBAAGD,MAAkBC,QAAQ,MACnC,qBAAGD,MAAkBC,QAAQ,MAItBywC,GAAsB5lD,YAAOuY,KAAPvY,CAAH,MACrB,qBAAGkV,MAAkBE,QAAQ+jC,WAAW4C,SCiBpC8J,GAvB0D,SAAC,GAAD,YACvEC,EADuE,EACvEA,iBACG3qC,EAFoE,4CAIvE,eAACwqC,GAAD,2BAAwBxqC,GAAxB,cACE,eAACyqC,GAAD,CACE7wC,QAAQ,QACR4L,cAAA,+BAFF,gBAIM,IACJ,mBAAGA,cAAA,oCAAH,6BACGmlC,EAAiBtlB,iBADpB,iBACG,EAA4Bx+B,YAD/B,aACG,EAAkCjI,YADrC,QAC6C,QAG/C,uBACA,cAAC,GAAD,CACEkoB,KAAI,UAAE6jC,EAAiBprD,eAAnB,QAA8B,GAClC0pD,SAAU,EACVJ,kBAAkB,iBCWT1tC,GAzBmC,SAAC,GAM5C,IALLC,EAKI,EALJA,KACAwvC,EAII,EAJJA,SACAC,EAGI,EAHJA,UACA1hD,EAEI,EAFJA,MACA6mC,EACI,EADJA,SAEA,OACE,cAAC,GAAD,CAAc50B,KAAMA,EAApB,SACE,eAACE,GAAA,EAAD,WACE,cAACD,GAAA,EAAD,UAAclS,IACd,gCAAQ6mC,IACR,eAAC3iB,GAAA,EAAD,WACE,cAAC,GAAD,CAActQ,MAAM,UAAUE,QAAS2tC,EAAvC,oBAGA,cAAC,GAAD,CAAc7tC,MAAM,UAAUE,QAAS4tC,EAAvC,0BCiBKC,GApCV,SAAC,GAAuB,IAArB7uC,EAAoB,EAApBA,OAAQC,EAAY,EAAZA,MACRE,EAAUC,cACRjV,EAAaI,qBAAWd,IAAxBU,SAEO2jD,GAAqBx0C,EADN/O,qBAAWgR,IAAjCjC,qBACAlI,MACmB+oC,EAAmCtoC,GAC5D,4BADMU,kBAaFw7C,EAAiB//C,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAEtCsC,EAAK,oBAAgB6hD,EAAiB,MAAQ,cAC9CC,EAAQ,6CACZD,EAAiB,MAAQ,aADb,KAId,OACE,cAAC,GAAD,CACE5vC,KAAMa,EACN2uC,SAAU,kBAAM1uC,KAChB2uC,UAAW,WAnBTzT,GAAkC2T,EAAmB,EACvD3uC,EAAQjP,KAAK,aAAc,CAAE+9C,kBAAkB,IAG/C9uC,EAAQjP,KAAK,uBAgBbhE,MAAOA,EACP6mC,SAAUib,K,UC1ChB,SAAS,KAA2Q,OAA9P,GAAWv4C,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,OAAQ,KAAmB,gBAAoB,QAAS,KAAM,sDAAoE,gBAAoB,WAAY,CAC7M/Y,GAAI,KACU,gBAAoB,OAAQ,CAC1C02C,UAAW,IACXt6B,MAAO,QACPC,OAAQ,WAGN,GAAqB,gBAAoB,IAAK,CAChDm6B,UAAW,kBACG,gBAAoB,IAAK,CACvCE,UAAW,IACXF,UAAW,kBACG,gBAAoB,OAAQ,CAC1CE,UAAW,IACX76B,EAAG,8uBACH26B,UAAW,wBACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,qiCACH26B,UAAW,6BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,06BACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,w4BACH26B,UAAW,6BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,25BACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,i4BACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,ocACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,ynCACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,gxBACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,ycACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,uxCACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,2+BACH26B,UAAW,yBACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,86BACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,o5BACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,4xCACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,wrCACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,q5BACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,+TACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,gUACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,4XACH26B,UAAW,8BACI,gBAAoB,OAAQ,CAC3CE,UAAW,IACX76B,EAAG,oYACH26B,UAAW,gCAGb,SAAS8Q,GAAsBtrC,EAAMC,GACnC,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDO,MAAO,6BACP6S,WAAY,+BACZhT,MAAO,QACPC,OAAQ,OACRC,QAAS,qBACTE,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,GAAO,IAG3B,IAAI,GAA0B,aAAiBgiD,IAChC,I,8sBCxHR,IAAMjtC,GAAYrZ,IAAOgW,IAAV,MAQT2zB,GAAO3pC,YAAOuY,KAAPvY,CAAH,MACN,SAACmb,GAAD,MACa,UAApBA,EAAMorC,UACF,qBAAGrxC,MAAkBE,QAAQE,OAAOC,OACpC,qBAAGL,MAAkBE,QAAQE,OAAO2L,UAS/BulC,GAAiBxmD,YAAOymD,KAAPzmD,CAAH,MAMd0mD,GAAmB1mD,YAAO2mD,GAAP3mD,CAAH,MAEjB,SAACmb,GAAD,MACc,UAApBA,EAAMorC,UACF,qBAAGrxC,MAAkBE,QAAQE,OAAOC,OACpC,qBAAGL,MAAkBE,QAAQE,OAAO2L,UCf/B2lC,GAfuB,SAAC,GAAmB,IAAjBL,EAAgB,EAAhBA,UAGvC,MAAiB,YAFI9jD,6BAAb5K,SAE2B,KAGjC,cAAC,GAAD,UACE,eAAC,GAAD,CAAM0uD,UAAWA,EAAjB,uBACY,cAACC,GAAD,IADZ,OAEE,cAACE,GAAD,CAAkBH,UAAWA,U,k9CCT9B,IAAMltC,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,MAIzB,qBAAGD,MAAkBC,QAAQ,QAGpC+J,GAAQlf,YAAOuY,MAAYzD,MAAM,CAC5CC,QAAS,KACTqK,MAAO,UAFYpf,CAAH,MAMN,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC0xC,GAAW7mD,YAAOuY,MAAYzD,MAAM,CAC/CC,QAAS,YACTqK,MAAO,QAFepf,CAAH,MAMT,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAarC2xC,IAVW9mD,YAAOsc,KAAPtc,CAAH,MACR,qBAAGkV,MAAkBqH,OAAOC,OAAS,KACvC,qBAAGtH,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAIjB1c,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,MAIRA,IAAOgW,IAAV,MAIP,qBAAGd,MAAkBC,QAAQ,OAGnC4xC,GAAkB/mD,IAAOgW,IAAV,MAGjB,qBAAGd,MAAkBC,QAAQ,QAC5B,qBAAGD,MAAkBC,QAAQ,QAC5B,qBAAGD,MAAkBC,QAAQ,MAKxB,qBAAGD,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBC,QAAQ,MAGjC6xC,GAAahnD,IAAOgW,IAAV,MAKVixC,GAAcjnD,IAAOgW,IAAV,MAKXkxC,GAAoBlnD,YAAO6U,MAAQC,OAAM,kBAAkB,CACtEC,QADoD,EAAGA,SACnC,cADW/U,CAAH,MAGnB,qBAAGkV,MAAkBE,QAAQy1B,KAAKnyC,QAC3B,qBAAGwc,MAAkBE,QAAQy1B,KAAKnyC,QACrC,qBAAGwc,MAAkB8B,WAAWkU,GAAGhU,YCzE3C,SAASiwC,GAAsBjgD,GACpC,OAAQA,GACN,IAAK,SACH,MAAO,gBACT,IAAK,UACH,MAAO,iBACT,IAAK,YACH,MAAO,eACT,IAAK,WACH,MAAO,eACT,IAAK,SACH,MAAO,cACT,IAAK,WACH,MAAO,SACT,IAAK,SACH,MAAO,UACT,QACE,MAAO,IAUN,I,UCzBA,SAASkgD,GAAcjsC,GAA4B,IAChDhQ,EAAcgQ,EAAdhQ,UAD+C,EAEvBpJ,mBAAiB,IAFM,mBAEhD4nB,EAFgD,KAEtCC,EAFsC,KAG/C7qB,EAAsB+3B,KAAtB/3B,kBAEFgrB,EAAuB,uCAAG,WAAO/qB,GAAP,SAAA1C,EAAA,+EAEfyC,EAAkBC,GAAImE,MAAK,gBAAGtF,EAAH,EAAGA,KAAH,cAAcA,QAAd,IAAcA,OAAd,EAAcA,EAAMI,aAFhC,gIAAH,sDAL0B,4CAYvD,4BAAA3B,EAAA,yDACO6O,EADP,iEAEuB4e,EAAwBjF,SAAS,GAAD,OAAI3Z,KAF3D,QAEQ6e,EAFR,SAIIJ,EAAYI,GAJhB,4CAZuD,sBAwBvD,OAJAtpB,qBAAU,YApB6C,mCAqBrDupB,KACC,IAEI,cAACo9B,GAAA,EAAD,CAAQlxC,IAAKwT,ICxBf,SAAS29B,GAAUnsC,GAAwB,IACxC7W,EAAqB6W,EAArB7W,MAAO6G,EAAcgQ,EAAdhQ,UACT+J,EAAQqK,eAEd,OACE,sBAAK4I,MACHhd,EAAY,CACV5S,QAAS,OACTgvD,eAAgB,SAChBj5B,WAAY,SACZk5B,aAActyC,EAAMC,QAAQ,MAC5BsyC,SAAU,SACR,GAPN,UASGt8C,GAAa,cAACi8C,GAAD,CAAej8C,UAAWA,IACvC,cAACoN,GAAA,EAAD,CACGxD,QAAQ,KACRoT,MAAO,CACLu/B,UAAW,SACXxwC,SAAU,OACV3e,QAAS,cACTkvD,SAAU,QACVE,WAAY,OACZvD,SAAU,EACVY,SAAU,UATf,SAYI1gD,OCzBJ,SAAS4b,GAAO/E,GAAqB,IAClC2D,EAA6C3D,EAA7C2D,YAAaC,EAAgC5D,EAAhC4D,cAAeC,EAAiB7D,EAAjB6D,aAC9B4oC,EAAW,kBAAM,qBAAKz/B,MAAO,CAAE9M,OAAQ,OAAQD,MAAO,WACpD0B,EAAmBna,qBAAWka,IAA9BC,eAER,OACE,qCAEE,eAAC0B,GAAA,EAAD,CACE2J,MAAO,CACLzJ,SAAU,SACVmpC,IAAK,EACLxsC,OAAQ,OACRkB,OAAQ,EACRgrC,eAAgB,UANpB,UASE,eAACjpC,GAAA,EAAD,CACE6J,MAAO,CACLo/B,eAAgB,gBAChBhrC,OAAQ,GAHZ,UAMGuC,GAA4B,cAAC8oC,EAAD,IAC5B7oC,GAAgC,cAAC6oC,EAAD,IAChC5oC,GAA8B,cAAC4oC,EAAD,OAEjC,sBACEz/B,MAAO,CACLzJ,SAAU,WACVtD,MAAO,OACPC,OAAQ,OACR2pC,SAAU,SACVj7C,OAAQ,gCANZ,UASE,qBACEoM,IAAI,sCACJgS,MAAO,CACL/M,MAAO,QACPC,OAAQ,QACRwsC,IAAK,SACLC,MAAO,OACPppC,SAAU,WACVnC,OAAQ,KAGZ,qBACEpG,IAAI,uCACJgS,MAAO,CACL/M,MAAO,QACPC,OAAQ,QACRwsC,IAAK,SACLC,MAAO,QACPppC,SAAU,WACVnC,OAAQ,KAGZ,qBACEpG,IAAI,sCACJgS,MAAO,CACL/M,MAAO,QACPC,OAAQ,QACR0sC,OAAQ,SACRC,KAAM,SACNtpC,SAAU,WACVnC,OAAQ,KAGZ,qBACEpG,IAAI,uCACJgS,MAAO,CACL/M,MAAO,QACPC,OAAQ,QACR0sC,OAAQ,SACRC,KAAM,MACNtpC,SAAU,WACVnC,OAAQ,WAOI,YAAnBO,GACC,qBACEqL,MAAO,CACLzJ,SAAU,SACVmpC,IAAK,OACLtrC,OAAQ,EACRnB,MAAO,QALX,SAQE,cAAC,GAAD,SC/FH,SAAS6sC,GAAkB9sC,GAA+B,IACvDgf,EAAmChf,EAAnCgf,KAAM/hB,EAA6B+C,EAA7B/C,QAASqB,EAAoB0B,EAApB1B,gBACjBvE,EAAQqK,eAEd,OACE,cAACnB,GAAA,EAAD,CACE+J,MAAO,CACL/M,MAAO,OACPC,OAAQ,OACRnE,SAAU,OACVgB,MAAOhD,EAAME,QAAQC,QAAQqH,MAC7BjD,gBAAiBA,EACjB+H,aAAc,OACd0mC,QAAS,OAEX9vC,QAASA,EAVX,SAYG+hB,ICrBA,SAASguB,KACd,IAAM5wC,EAAUC,cAEhB,OACE,cAACywC,GAAD,CACE9tB,KAAM,cAAC,GAAD,IACN/hB,QAAS,kBAAMb,EAAQjP,KAAK,yBAC5BmR,gBAAgB,U,ikGCNf,ICmCFse,GDnCQC,GAAeh4B,YAAOi4B,KAAPj4B,CAAH,MASZk4B,GAAkBl4B,YAAOm4B,KAAPn4B,CAAH,MACjB,qBAAGkV,MAAkBE,QAAQE,OAAOC,SAKlC6iB,GAAmBp4B,YAAOq4B,KAAPr4B,CAAH,MAClB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAWnC4/B,IANgBt4B,YAAOu4B,KAAPv4B,CAAH,MACf,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAKhBsH,YAAOw4B,KAAPx4B,CAAH,MAClB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,SAKnC+/B,GAAqBz4B,YAAO04B,KAAP14B,CAAH,MACpB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAKnCigC,GAAiB34B,YAAO44B,KAAP54B,CAAH,MAChB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAKnCmgC,GAAoB74B,YAAO84B,KAAP94B,CAAH,MACnB,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QAKnC2nB,GAAkBhgB,YAAO+4B,KAAP/4B,CAAH,MACN,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAChD,qBAAGwc,MAAkBE,QAAQE,OAAOC,SAC5B,qBAAGL,MAAkBC,QAAQ,QACnC,qBAAGD,MAAkBC,QAAQ,QACzB,qBAAGD,MAAkBC,QAAQ,QAKjC6jB,GAAkBh5B,IAAO2V,IAAIb,OAAM,WAE9C,MAAO,CAAEqB,IADgB1T,6BAAjBguB,gBADqBzwB,CAAH,MAOZ,qBAAGkV,MAAkBC,QAAQ,QAC1B,qBAAGD,MAAkBC,QAAQ,QAGnC8jB,GAAej5B,IAAOgW,IAAV,MACH,qBAAGd,MAAkBE,QAAQC,QAAQhd,QAM9C6gC,GAAal5B,YAAOm5B,KAAPn5B,CAAH,MAIVo5B,GAAiBp5B,YAAOq5B,KAAPr5B,CAAH,MAEH,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAIzD4c,GAAqBt5B,YAAOu5B,KAAPv5B,CAAH,MACpB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAGnCmgB,GAAa7Y,YAAOw5B,IAAPx5B,CAAH,MAIVy5B,GAAiBz5B,YAAO8Y,KAAP9Y,CAAH,MAQd05B,GAAe15B,IAAO+d,KAAV,MACd,qBAAG7I,MAAkBE,QAAQC,QAAQ3c,QAG7B,qBAAGwc,MAAkBC,QAAQ,OAGnCwkB,GAAe35B,IAAO+d,KAAV,MACd,qBAAG7I,MAAkBE,QAAQC,QAAQ3c,QAInCkhC,GAAU55B,IAAO2V,IAAV,MAGH,qBAAGT,MAAkBC,QAAQ,QAGjC0kB,GAAgB75B,IAAOgW,IAAV,MAGT,qBAAGd,MAAkBC,QAAQ,QAGjC2kB,GAAa95B,IAAOgW,IAAV,MAIV+jB,GAAe/5B,IAAOgW,IAAV,MACH,qBAAGd,MAAkBE,QAAQC,QAAQhd,QACvC,qBAAG6c,MAAkBC,QAAQ,MAGpC6kB,GAAeh6B,YAAOoe,KAAPpe,CAAH,MACd,qBAAGkV,MAAkBE,QAAQE,OAAOC,SAOlC0kB,GAAmBj6B,IAAO+d,KAAV,MACZ,qBAAG7I,MAAkBC,QAAQ,ME/IvC,SAAS6D,GAAUmC,GAAuB,IACvChD,EAAyBgD,EAAzBhD,MAAOgiB,EAAkBhf,EAAlBgf,KAAM/hB,EAAY+C,EAAZ/C,QAErB,OACE,eAAC,GAAD,CAAgBgiB,QAAM,EAAChiB,QAASA,EAAhC,UACE,cAACiiB,GAAA,EAAD,UAAeF,IACf,cAAC,GAAD,UAAqBhiB,OCFpB,SAAS+hB,GAAa/e,GAA0B,IAC7ChD,EAAgBgD,EAAhBhD,MAAOgiB,EAAShf,EAATgf,KAEf,OACE,eAAC,GAAD,CAAgBC,QAAM,EAAtB,UACE,cAACC,GAAA,EAAD,UAAeF,IACf,eAAC,GAAD,WACE,cAAC,GAAD,4BACA,cAAC,GAAD,UAAehiB,UFwBhB,SAASiwC,GAASjtC,GAAuB,IAAD,IACrCktC,EAAyCltC,EAAzCktC,qBAAsBC,EAAmBntC,EAAnBmtC,eADe,EAGf3lD,qBAAWd,IAAjCX,EAHqC,EAGrCA,QAASqB,EAH4B,EAG5BA,SACTw0B,EAAWD,KAAXC,OACFxf,EAAUC,cAEV+wC,EAAoB,OAAGhmD,QAAH,IAAGA,GAAH,UAAGA,EAAUP,YAAb,iBAAG,EAAgBgC,YAAnB,aAAG,EAAsBE,kBAPN,EAQOnC,oBAAS,GARhB,mBAQtC04B,EARsC,KAQlBC,EARkB,OASa34B,oBAAS,GATtB,mBAStC44B,EATsC,KASfC,EATe,OAUb74B,mBAAyB,IAVZ,mBAUtC+1B,EAVsC,KAU5B+C,EAV4B,OAWC94B,mBAASg2B,GAAgB+C,SAX1B,mBAWtCC,EAXsC,KAWrBC,EAXqB,KAYpBC,EAA0BhxB,GAAa,aAAc1H,GAAtEuI,gBACiBowB,EAAsCjxB,GAAa,uBAApEa,gBACiBqwB,EAA4BlxB,GAAa,gBAA1Da,gBAdqC,EAeJrI,6BAAjCrK,EAfqC,EAerCA,oBAAqBF,EAfgB,EAehBA,QAEvBkjC,EAAyB,SAACC,GAC9BtE,IACG5zB,MAAK,SAACtF,GACLm9B,EAAmBK,GACnBR,EAAYh9B,GACZ+8B,GAAyB,MAE1B19B,OAAM,WACL+D,IAAMxG,MAAM,2EAIZ6gC,EAA2B,WAC/BZ,GAAuBD,IAYzB,OACE,qCACE,eAAC,GAAD,CACElkB,KAAM+xC,EACN/wB,QAAS,WACP8wB,KAHJ,UAME,eAAC,GAAD,WACE,cAACjqC,GAAA,EAAD,CACEhG,QAAS,WACPiwC,KAFJ,SAKE,cAAC,GAAD,CAAiBnxC,SAAS,YAE5B,cAAC,GAAD,OAEF,cAAC,GAAD,UACE,eAAC,GAAD,WACE,cAAC,GAAD,CAAY+B,GAAI,wBAAhB,SACE,cAAC,GAAD,CAAUkhB,KAAM,cAAC,GAAD,IAAsBhiB,MAAO,kBAE9CgjB,GACC,cAAC,GAAD,CAAYliB,GAAI,uBAAhB,SACE,cAAC,GAAD,CACEkhB,KAAM,cAAC,GAAD,CAASplB,QAAQ,SACvBoD,MAAO,0BAIb,cAAC,GAAD,CAAYc,GAAI,SAAhB,SACE,cAAC,GAAD,CAAUkhB,KAAM,cAAC,GAAD,IAAqBhiB,MAAO,eAE7C8iB,GACC,cAAC,GAAD,CACEd,KAAM,cAAC,GAAD,IACNhiB,MAAM,8BACNC,QAAS,kBAAMgjB,EAAuBrD,GAAgB+C,YAGzDI,GACC,cAAC,GAAD,CACEf,KAAM,cAAC,GAAD,IACNhiB,MAAM,oCACNC,QAAS,kBACPgjB,EAAuBrD,GAAgBwD,wBAI7C,cAAC,GAAD,CACE3F,KAAM,sDADR,SAGE,cAAC,GAAD,CAAUuE,KAAM,cAAC,GAAD,IAAwBhiB,MAAO,iBAEjD,cAAC,GAAD,CACEyd,KAAM,4DADR,SAGE,cAAC,GAAD,CAAUuE,KAAM,cAAC,GAAD,IAAoBhiB,MAAO,oBAE5CzN,QAAQ69C,IACP,cAAC,GAAD,CAAgB3yB,KAAM19B,EAAtB,SACE,cAAC,GAAD,CACEiiC,KAAM,cAAC,GAAD,CAAShkB,IAAK/d,IACpB+f,MAAO,sCAMjB,cAAC,GAAD,UACE,eAAC,GAAD,CACEC,QAAS,WACPkjB,KAFJ,UAKE,cAAC,GAAD,IACA,cAAC,GAAD,oCAIN,cAAC,GAAD,CACE/kB,KAAMkkB,EACNjD,UAAWt2B,EACXq2B,QAAS+D,IAEX,cAAC,GAAD,CACE/kB,KAAMokB,EACNpD,QAjG0B,WAC9BqD,GAAyB,IAiGrB9C,SAAUA,EACV9R,SA/FsB,SAACnoB,GAC3B,IAAMD,EAAG,UAAMm9B,EAAN,YAAyBl9B,EAAK+5B,SACvCrgB,EAAQjP,KAAK1K,SG9EV,SAAS4qD,GAAYrtC,GAAyB,IAC3C/C,EAAY+C,EAAZ/C,QAER,OACE,cAAC6vC,GAAD,CACE9tB,KACE,qBACEhkB,IAAI,yBACJgS,MAAO,CACLjR,SAAU,GACVgB,MAAO,aAIbE,QAASA,K,SHoBV2f,K,sCAAAA,E,2CAAAA,Q,8BIgBE,SAAS0wB,KAAgB,IAAD,IACvBvzC,EAAQqK,cACRhI,EAAUC,cAKhB9W,qBAAU,WACR,IAAMgoD,EAAUnxC,EAAQoxC,OAAM,SAAC5nD,EAAU2I,GAEvC,GAAIk/C,IAgCF,OA/BAC,KAASC,QAAQC,KACf,8BADF,gHAIE,OACA,OACA,WACEL,IACAnxC,EAAQjP,KAAKvH,EAASC,aAExB,cACA,CACEoa,MAAO,QACPoG,aAAc,MACdwnC,qBAAsB,IACtBC,mBAAoB,UACpBC,uBAAwBh0C,EAAME,QAAQI,UAAUnd,KAChDopB,WAAYvM,EAAM8B,WAAWyK,WAC7B0nC,WAAYj0C,EAAME,QAAQ6M,KAAK5M,QAC/B+zC,aAAcl0C,EAAME,QAAQ6M,KAAKzM,UACjCiE,gBAAiBvE,EAAME,QAAQ+jC,WAAW4C,QAI9C3mB,YAAW,WACT,IAAMi0B,EAAej3B,SAASk3B,cAAc,qCACxCD,IACFA,EAAaE,UAAY,gHAA+GF,EAAaE,aAEtJ,KAEI,KAKX,OAAO,WACLb,OAED,CAACnxC,IAlDyB,MAqDKxV,oBAAkB,GArDvB,mBAqDtBynD,EArDsB,KAqDXC,EArDW,OAsDe1nD,oBAAkB,GAtDjC,mBAsDtB2nD,EAtDsB,KAsDNC,EAtDM,OAuDqC5nD,oBAAS,GAvD9C,mBAuDtB6nD,EAvDsB,KAuDKC,EAvDL,KAyDvBjB,EAAgB,WACpB,IAAMpgD,EAAazD,aAAaC,QAvDnB,wBAuDyC,KAEtD,OAD+BE,KAAKV,MAAMgE,GACzBV,OAAS,GAGtBgiD,EAAyB,uCAAG,sBAAAxtD,EAAA,6DAChCmtD,GAAa,GADmB,SAE1B90C,IAF0B,OAGhC80C,GAAa,GAHmB,2CAAH,qDAM/B/oD,qBAAU,WACRopD,MACC,IAvE0B,IAyErBvnD,EAAaI,qBAAWd,IAAxBU,SACAiM,EAAa7L,qBAAWgR,IAAxBnF,SA1EqB,EA2EoB7L,qBAAWkR,IAApDrM,EA3EqB,EA2ErBA,gBAAiB4M,EA3EI,EA2EJA,oBA3EI,EA4E8BzR,qBAAWkR,IAA9Dc,EA5EqB,EA4ErBA,uBAAwBN,EA5EH,EA4EGA,uBA5EH,EAoFzB7F,IANFE,EA9E2B,EA8E3BA,mBACAvF,EA/E2B,EA+E3BA,IACAC,EAhF2B,EAgF3BA,KACA4F,EAjF2B,EAiF3BA,iBACAG,EAlF2B,EAkF3BA,kBACAC,EAnF2B,EAmF3BA,eAEMq8B,EAA0BD,KAA1BC,sBACmBse,EAA2B9/C,GAAa,qBAA3DY,kBACiBm/C,EAAiC//C,GAAa,4BAA/Da,gBACF6gB,EAAgB,OAAGvX,QAAH,IAAGA,OAAH,EAAGA,EAAqBpV,GAExCirD,EAAY,kBAChBhpD,IAAMxG,MAAN,mCAC8B2L,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,YAAc,gBADzE,qCA3F2B,4CAiG7B,4BAAA1F,EAAA,sEAQImtD,GAAa,GACPn+C,EAAU5D,OAAOF,EAAiBxI,IAT5C,SAUU0P,EAAmBpD,GAV7B,uDAYI3O,QAAQC,IAAR,MACAqtD,IAbJ,yBAeIR,GAAa,GAfjB,6EAjG6B,sBAoH7B/oD,qBAAU,YApHmB,mCAqH3BwpD,KACC,IAEH,IAAM1L,EAAqB/zC,mBAAQ,WACjC,OAAKtB,EAIEA,EACJoB,KAAI,SAACvL,GAAD,OAAQoK,EAAKpK,MAGjB+K,QAAO,SAACwe,GAAD,OAAWA,GAASA,EAAMjd,WAP3B,OAQR,CAACnC,IAEEghD,EAAmB3sD,uBAAY,SAACL,GACpCskD,GAAmBtkD,EAAD,sBAAM,sBAAAb,EAAA,6DACtBib,EAAQnT,QAAQ,wBADM,SAEhBuQ,IAFgB,8CAIvB,IAoCGy1C,EAAiCn3C,gCAAoB,uCACzD,WAAOo3C,GAAP,SAAA/tD,EAAA,6DACE+X,EAAuB,2BAClBD,GADiB,IAEpB1Z,QAAQ,2BAAD,OACF0Z,QADE,IACFA,OADE,EACFA,EAAqB1Z,SADnB,IAELA,QAAS2vD,OALf,SASQ5e,EAAsB/jC,OAAM,OAAC0M,QAAD,IAACA,OAAD,EAACA,EAAqBpV,IAAK,CAC3DsM,QAAO,OAAE9D,QAAF,IAAEA,OAAF,EAAEA,EAAiBxI,GAC1BtE,QAAS2vD,IACRntD,OAAM,SAACC,GACRgtD,EAAiBhtD,MAbrB,2CADyD,sDAiBzD,KAGImtD,EAAU3jD,YAAO,IAAIrB,KAAJ,iBAAYkC,QAAZ,IAAYA,OAAZ,EAAYA,EAAiB+M,mBAAqB,KACnEg2C,GAAY5jD,YAAO,IAAIrB,KAAJ,iBAAYkC,QAAZ,IAAYA,OAAZ,EAAYA,EAAiB+M,mBAAqB,MAAO,CAAE3N,OAAQC,MAAc2jD,cAEpGC,GAAc9jD,YAAO,IAAIrB,KAAJ,iBAAYkC,QAAZ,IAAYA,OAAZ,EAAYA,EAAiB+M,mBAAoB,QAEtEm2C,GAAoBjgD,mBAAQ,kBX7NA,SAClClE,EACA6N,GAEA,OAAK7N,GAAUA,EAAMsB,YAA0C,IAA5BtB,EAAMsB,WAAWC,OAEf6iD,kBACnCpkD,EAAMsB,WAAWkC,QACf,SAAC/B,GAAD,QACIA,EAAUtN,WACV0Z,GAAuBpM,EAAUhJ,KAAOoV,EAAoBpV,OAElE,aAG4CuL,KAC5C,qBAAG7P,WAZoE,GWyNjCkwD,CACpCpjD,EACA4M,KAEF,CAAC5M,EAAD,OAAkBA,QAAlB,IAAkBA,OAAlB,EAAkBA,EAAiBK,WAAYuM,IAGjD,OAAKA,EAKH,qCACGo1C,GACC,cAACntC,GAAA,EAAD,CACE9F,KAAMizC,EACNrhC,MAAO,CACL5L,OAAQrH,EAAMqH,OAAOC,OAAS,EAC9BtE,MAAOhD,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKiH,MACtCgC,SAAU,YALd,SAQE,cAACb,GAAA,EAAD,CAAkB3F,MAAM,UAAUyI,cAAY,6BAGlD,cAAC,GAAD,CACE7B,YACE,cAAC,GAAD,CAAY1G,QAAS,kBAAMuxC,GAAkB,MAE/C5qC,cACE,cAACuoC,GAAD,CACEhjD,MAAOkD,EAAe,iBAAMA,QAAN,IAAMA,GAAN,UAAMA,EAAiBowB,eAAvB,aAAM,EAA0B79B,MAAS,OAC/DoR,UAAS,OAAE3D,QAAF,IAAEA,OAAF,EAAEA,EAAiB2D,YAGhC6T,aACE,cAACmpC,GAAD,MAGJ,cAACC,GAAD,CACEE,eAAgBoB,EAChBrB,qBAAsB,kBAAMsB,GAAkB,MAEhD,eAAC,GAAD,WACE,eAAC,GAAD,yBACcvjD,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,UAAY,gBAEvD,cAAC6kD,GAAD,sBACA,eAACC,GAAD,WACE,cAACC,GAAD,UACE,cAACC,GAAD,UACE,eAACzuC,GAAA,EAAD,CAAYxD,QAAQ,YAApB,UACGu1C,EADH,IACaC,UAIjB,cAACtD,GAAD,UACE,cAAC1uC,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SACGoyC,GAAsBsD,WAI7B,cAACI,GAAD,CAA6BrM,mBAAoBA,EAAjD,SACE,cAAC,GAAD,CACElL,eA3HkB,SAACt0C,EAAYo1C,GACvCplC,EAAiBhQ,EAAI,CACnBY,OAAQw0C,EACRzoB,mBACAlkB,YAAW,OAAElF,QAAF,IAAEA,OAAF,EAAEA,EAAUvD,KACtB9B,OAAM,SAACC,GACRgtD,EAAiBhtD,OAsHXo2C,gBAlHmB,SAACv0C,EAAY+1C,GACxC5lC,EAAkBnQ,EAAI,CACpBwjC,QAASuS,EACTppB,mBACAlkB,YAAW,OAAElF,QAAF,IAAEA,OAAF,EAAEA,EAAUvD,KACtB9B,OAAM,SAACC,GACRgtD,EAAiBhtD,OA6GXq2C,aAzGa,SAACx0C,EAAYk0C,GAClC9jC,EAAepQ,EAAI,CACjBk0C,uBACAvnB,mBACAlkB,YAAW,OAAElF,QAAF,IAAEA,OAAF,EAAEA,EAAUvD,KACtB9B,OAAM,SAACC,GACRgtD,EAAiBhtD,OAoGXwjD,OAAQnC,GAAsB,OAGjCkM,GAAkB5iD,OAAS,GAC1B,qCACE,cAAC++C,GAAD,6DACC6D,GAAkBngD,KACjB,SAAC7P,EAAS6V,GAAV,QACI7V,GACA,qCACa,IAAV6V,GAAe,uBAChB,cAAC,GAAD,CACEu1C,iBAAkBprD,EAElBimB,cAAA,iCAAuCpQ,IAHzC,iCAEiCA,aAQ7C,cAAC,GAAD,CACEyV,SAAU,aAGVD,cAAe,CACbrrB,SAA4B,OAAnB0Z,QAAmB,IAAnBA,GAAA,UAAAA,EAAqB1Z,eAArB,eAA8BA,UAAW,IAEpDswC,UAAW,CACTG,SAAU,IACVE,aA9HqB,SAACgf,GAC9BD,EAA+B53C,SAAS63C,IA8HhC/e,cAAc,KAGjB0e,GACC,qCACE,cAACnD,GAAD,uBACA,cAAC,GAAD,OAGHkD,GACC,cAAC7C,GAAD,CACE9uC,QAAS,kBAAMyxC,GAA6B,IAC5CjxC,KAAK,QAFP,uBAOF,cAAC,GAAD,CAAQ2tC,UAAU,aAEpB,cAAC,GAAD,CACEnvC,OAAQwyC,EACRvyC,MAAO,kBAAMwyC,GAA6B,SA/GvC,cAAC,IAAD,CAAU5wC,GAAG,yB,m8ECnQjB,IAAMgkB,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAIP,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAChC,qBAAGD,MAAkBC,QAAQ,MAKnC6nB,GAAsBh9B,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QAKrC,qBAAGwc,MAAkBC,QAAQ,MAGpC+J,GAAQlf,YAAOuY,KAAPvY,CAAH,MACN,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,GAAK,MAKvC0xC,GAAW7mD,YAAOuY,KAAPvY,CAAH,MAMR8qD,GAAc9qD,YAAOuY,KAAPvY,CAAH,MAEL,qBAAGkV,MAAkBC,QAAQ,MAGnC41C,GAAc/qD,YAAOuY,KAAPvY,CAAH,MAOXgrD,GAAiBhrD,IAAOgW,IAAV,MAGV,qBAAGd,MAAkBC,QAAQ,MAGjC81C,GAAuBjrD,IAAO1D,EAAV,MAMX,qBAAG4Y,MAAkBE,QAAQy1B,KAAKxyC,QAI3C,qBAAG6c,MAAkBC,QAAQ,EAAG,MAI9B,qBAAGD,MAAkBC,QAAQ,OACjC,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAI5CwuC,GAA8BlrD,IAAOgW,IAAV,MAKlB,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMqL,SAElD,qBAAGrO,MAAkBC,QAAQ,EAAG,MAGlC,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAI1C,qBAAGxH,MAAkBC,QAAQ,OAG/Bg2C,GAA0BnrD,IAAOgW,IAAV,MAQd,qBAAGd,MAAkBE,QAAQC,QAAQ3c,QAChD,qBAAGwc,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAC5C,qBAAGxH,MAAkBC,QAAQ,EAAG,MAM9B,qBAAGD,MAAkBC,QAAQ,OAG/Bi2C,GAAUprD,IAAOgW,IAAV,MAOA,qBAAGd,MAAkBC,QAAQ,OCSlCk2C,GA7F2B,SAAC,GAUpC,IATLrsD,EASI,EATJA,GACAjF,EAQI,EARJA,KACAuxD,EAOI,EAPJA,oBACAC,EAMI,EANJA,iBACA3tC,EAKI,EALJA,QACA4tC,EAII,EAJJA,QACA/hC,EAGI,EAHJA,YACAgiC,EAEI,EAFJA,KACAC,EACI,EADJA,WAEMx2C,EAAQqK,cACRrH,EAAe,UAAP0F,EACP1I,EAAME,QAAQwI,QAAQlB,MACzB8uC,EACGt2C,EAAME,QAAQqH,MAAMvE,MAAMzC,KAAKiH,MAC/BxH,EAAME,QAAQE,OAAOC,OAEtBo2C,EAAoB/tC,EAAU6L,EAAcxF,GAAU,GAAD,OAAIwF,IAE/D,OACE,eAAC,GAAD,CACE9I,cAAA,uBAA6B3hB,GAC7BmpB,MAAO,CAAE1O,gBAAiBvB,GAF5B,UAIE,eAAC,GAAD,WACE,cAAC,GAAD,CAAOnD,QAAQ,YAAf,SAA4Bhb,IAE3BwxD,GACC,gCACE,cAAC,GAAD,CAAUx2C,QAAQ,YAAlB,6CAGA,cAAC+1C,GAAD,CAAa/1C,QAAQ,QAArB,SAA8Bw2C,OAIjCD,GACC,gCACE,cAAC,GAAD,CAAUv2C,QAAQ,YAAlB,+BACA,cAAC+1C,GAAD,CAAa/1C,QAAQ,QAArB,SAA8Bu2C,OAIjC7hC,GACC,eAAC2hC,GAAD,WACE,cAAC,KAAD,IACA,cAACL,GAAD,CAAah2C,QAAQ,QAArB,SAA8B42C,OAGjCF,GACC,eAACL,GAAD,WACE,cAACQ,GAAA,EAAD,IACA,cAACb,GAAD,CAAah2C,QAAQ,QAArB,SACG02C,EAAKrnD,QAAQ,cAAe,IAAM,oBAK3C,eAAC4mD,GAAD,WACGvhC,GACC,qCACE,eAACwhC,GAAD,CAAsBr1B,KAAI,cAASnM,GAAnC,UACE,cAAC,KAAD,IACA,cAAClR,GAAA,EAAD,CAAYxD,QAAQ,QAApB,SAA6B,eAG5B22C,GACD,eAACR,GAAD,CACE9yC,QAAS,kBACPjU,OAAOoS,KAAP,+CAC0CkT,GACxC,WAJN,UAQE,cAACoiC,GAAA,EAAD,IARF,iBAcLJ,GACC,eAACN,GAAD,CAAyB/yC,QAAS,kBAAMjU,OAAOoS,KAAKk1C,EAAM,WAA1D,UACE,cAACK,GAAA,EAAD,IADF,uB,2fC3GH,IAAMzyC,GAAYrZ,IAAOgW,IAAV,MAKT,qBAAGd,MAAkBC,QAAQ,EAAG,MAShCkH,IANarc,YAAO8Y,IAAP9Y,CAAH,MAMCA,YAAOsc,KAAPtc,CAAH,MACR,qBAAGkV,MAAkBqH,OAAOC,OAAS,KACvC,qBAAGtH,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,UAI5CC,GAA2B3c,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,MCnB/B+rD,GAED,SAAC,GAAkB,IAAhBC,EAAe,EAAfA,SACN,OAAO,cAACC,GAAD,eAA0BD,KA4EpBE,GAvEqB,WAAO,IAAD,EACUlgD,KAA1CC,EADgC,EAChCA,kBAAmB7C,EADa,EACbA,KAAMD,EADO,EACPA,IAAKhH,EADE,EACFA,QAC9BqF,EAAoB7E,qBAAWkR,IAA/BrM,gBAKF2D,EAAS,OAAG3D,QAAH,IAAGA,OAAH,EAAGA,EAAiB2D,UAOnC,OANAzK,qBAAU,WACJ8G,GACFyE,EAAkBd,KAEnB,CAACA,IAEAhJ,EAEA,cAAC,GAAD,CAAUoU,KAAMpU,EAAhB,SACGA,GACC,cAAC,GAAD,CAA0Bwe,cAAY,6BAO5C,qCACE,cAAC,GAAD,CAAkB5B,cAAc,aAChC,eAAC,GAAD,WACE,cAAC,GAAD,CACEitC,SAAU,CACRjyD,KAAM,OACN0vB,YAAa,MACb8hC,iBACE,6FAGN,cAAC,GAAD,CACES,SAAU,CACRjyD,KAAM,YACN0vB,YAAa,MACb8hC,iBACE,qFAGN,cAAC,GAAD,CACES,SAAU,CACRjyD,KAAM,wBACNuxD,oBAAqB,mCACrBG,KA5CR,4EA+CI,cAAC,GAAD,CACEO,SAAU,CACRjyD,KAAM,+CACNuxD,oBAAqB,wCACrB7hC,YAzDY,gBA0DZiiC,YAAY,KAIflkD,GACC2B,EACGoB,KAAI,SAACvL,GAAD,OAAQoK,EAAKpK,MACjBuL,KAAI,SAACyhD,GAAD,OACH,cAAC,GAAD,CAAyCA,SAAUA,GAAvBA,EAAShtD,cC9EtComB,GAAmBoM,OAAajQ,MAAM,CACjDhgB,MAAOiwB,OAEJjwB,MAAM,8BACNi0C,WAAU,SAACn0C,EAAO8qD,GAAR,OAA0BA,EAAc9T,UAClD31B,SAAS,gCAGD8Q,GAAoB,CAC/BjyB,MAAO,I,ygDCRF,IAAM6qD,GAAoBpsD,IAAOgW,IAAV,MAIxB,SAACmF,GAAD,OAAWA,EAAMjG,MAAME,QAAQC,QAAQhd,QACvC,SAAC8iB,GAAD,OAAWA,EAAMjG,MAAME,QAAQI,UAAUnd,QAQlCyyB,GAAkB9qB,IAAOgW,IAAV,MAQfqD,GAAYrZ,IAAOgW,IAAV,MAOL,qBAAGd,MAAkBC,QAAQ,MAIzB,qBAAGD,MAAkBC,QAAQ,MAU9B,qBAAGD,MAAkBC,QAAQ,MAKhC,qBAAGD,MAAkBC,QAAQ,MAEzB,qBAAGD,MAAkBC,QAAQ,MAIrC6nB,GAAsBh9B,IAAOgW,IAAV,MAGb,qBAAGd,MAAkBC,QAAQ,MAGnCk3C,GAAkBrsD,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,MAGnCqb,GAAOxwB,IAAO2V,IAAIb,OAAM,WAEnC,MAAO,CAAEqB,IADgB1T,6BAAjBguB,gBADUzwB,CAAH,MAIL,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,MAGlC+G,GAAkBlc,IAAOgW,IAAV,MAOfs2C,GAAatsD,IAAOgW,IAAV,MACL,qBAAGd,MAAkBC,QAAQ,MCqChCo3C,GA3FkB,WAC/B,IAAM1iC,EAAY3M,mBACZ3F,EAAUC,cAwBhB,OACE,cAAC40C,GAAD,UACE,cAAC,GAAD,UACE,eAAC,GAAD,WACE,cAAC,GAAD,IACA,eAAC,GAAD,WACE,cAACC,GAAD,UACE,cAAC9zC,GAAA,EAAD,CAAYxD,QAAQ,KAApB,+BAEF,cAACwD,GAAA,EAAD,qGAKF,cAAC,KAAD,CACE4R,SAAU,SAAC3O,GAAD,OAAUqO,EAAUxM,QAAU7B,GACxCuK,cAAeyN,GACfpO,iBAAkBA,GAClBY,SAxCW,SACnBC,EADmB,GAGf,IADFE,EACC,EADDA,cAEFA,GAAc,GACd7kB,GAAuB2kB,EAAO1kB,OAC3B4B,MAAK,WACJlC,IAAM4pC,KAAK,iDACXtzB,EAAQqJ,YAET1jB,OAAM,SAACC,GAA+B,IAAD,EACpC,GAAmC,qBAA/B,UAAAA,EAAI5B,gBAAJ,eAAcsC,KAAKnD,SAA+B,CAAC,IAAD,EACpDuG,IAAMxG,MAAM,4BACZ,UAAAovB,EAAUxM,eAAV,SAAmBqY,cAAc,QAAS,gCACrC,CACL,IAAMn2B,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,OAGf8D,SAAQ,kBAAM8iB,GAAc,OAiBzB,SAMG,SAACG,GAAD,OACC,eAAC,KAAD,WACE,cAAC,GAAD,CACEvsB,KAAK,QACLme,MAAM,QACNC,MAAM,SACN9W,MAAOilB,EAAOL,OAAO1kB,MAAM82C,OAC3BxgC,SAAUyO,EAAO+kB,aACjB5wC,MAAOiQ,QAAQ4b,EAAOzD,OAAOthB,OAC7B2hB,WAAYoD,EAAOzD,OAAOthB,MAC1BklB,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,WAE/B,eAAC,GAAD,WACE,cAAC4lC,GAAD,UACE,cAAC,GAAD,CACE3rC,cAAY,OACZ/H,KAAK,QACLV,MAAM,UACNE,QAAS,kBAAMb,EAAQqJ,UACvBvI,SAAUiO,EAAOS,aALnB,sBAUF,cAAC,GAAD,CACEpG,cAAY,SACZ/H,KAAK,QACLV,MAAM,UACNla,KAAK,SACLqa,SAAUiO,EAAOS,aALnB,qCCnFHylC,GAZQ,WAAO,IAAD,EACD7pD,qBAAWd,IAA7BG,EADmB,EACnBA,KAAMd,EADa,EACbA,QACNF,EAAa0B,cAAb1B,SACR,OACE,gCACE,6BAAKA,IACL,qDAAYgB,QAAZ,IAAYA,OAAZ,EAAYA,EAAMyqD,eAClB,wBAAQr0C,QAASlX,EAAjB,sB,kqBCRC,IAAMwrD,GAAe1sD,IAAOgW,IAAV,MAKZ22C,GAAkB3sD,IAAOgW,IAAV,MAQT,qBAAGd,MAAkBC,QAAQ,SAKnC+J,GAAQlf,YAAOuY,MAAYzD,MAAM,CAC5CC,QAAS,MADU/U,CAAH,M,goBClBX,IAAMqZ,GAAYrZ,IAAOgW,IAAV,MAIT,qBAAGd,MAAkBC,QAAQ,EAAG,MACvB,YAAmC,IAAhCD,EAA+B,EAA/BA,MAAO03C,EAAwB,EAAxBA,kBAAwB,EAC7B13C,EAAME,QAAQqH,MAAMvE,MAAnC+D,EAD4C,EAC5CA,IAAKsH,EADuC,EACvCA,MACb,OAAOqpC,EAAoBrpC,EAAQtH,EAAIS,SAIhC,qBAAGxH,MAAkBE,QAAQE,OAAOC,SAQlCs3C,GAAc7sD,IAAOgW,IAAV,MAMXshC,GAAUt3C,YAAOuY,MAAYzD,MAAM,CAAEC,QAAS,WAApC/U,CAAH,MAIP8sD,GAAiB9sD,YAAOuY,MAAYzD,MAAM,CACrDC,QAAS,WADmB/U,CAAH,MCtBrB+sD,GAAmE,SAAC,GAEnE,IADLC,EACI,EADJA,cAEQzqD,EAAaI,qBAAWd,IAAxBU,SADJ,EAEoCI,qBAAWgR,IAA3CnF,EAFJ,EAEIA,SAAUkD,EAFd,EAEcA,kBAFd,ECTyB,SAC7BivC,EACAsM,GAEA,IAAMpvD,EAAO,CAAE2L,MAAO,EAAG0jD,UAAW,GAsBpC,OApBAr/C,OAAOoY,OAAO06B,GAAQt3C,QAAO,SAACC,EAAMif,GAAW,IAAD,IAE5C,OACqC,KAA9B,OAALA,QAAK,IAALA,GAAA,UAAAA,EAAOzZ,mBAAP,eAAoB+xC,aACe,KAA9B,OAALt4B,QAAK,IAALA,GAAA,UAAAA,EAAOzZ,mBAAP,eAAoB+xC,cAItBv3C,EAAKE,OAAS,EAEdF,EAAK4jD,WAA8B,aAAjB3kC,EAAM3oB,OAAwB,EAAI,GAJ3C0J,IAMRzL,GAEHgQ,OAAOoY,OAAOgnC,GAAW5jD,QAAO,SAACC,EAAM0H,GAGrC,OAFA1H,EAAKE,QAAiB,OAARwH,QAAQ,IAARA,OAAA,EAAAA,EAAUJ,iBAAkB,EAC1CtH,EAAK4jD,YAAqB,OAARl8C,QAAQ,IAARA,OAAA,EAAAA,EAAUF,gBAAiB,EACtCxH,IACNzL,GAEIA,EDXsBsvD,CAHA3+C,IAArBpF,KACwBsI,IAAxBtI,MAEAI,EANJ,EAMIA,MAAO0jD,EANX,EAMWA,UACTE,EAA6BzT,KAAK0T,MAAOH,EAAY1jD,EAAS,KAEpE,OACE,eAAC,GAAD,CAAWojD,kBAAmBQ,GAA8B,GAA5D,UACE,eAACP,GAAD,WACE,eAAC,GAAD,gBACKzmD,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,UAAY,aAD9C,kCAICwH,EACC,cAACsjD,GAAD,oBAAoBI,EAApB,YAAiC1jD,EAAjC,aAA2C4jD,EAA3C,0BACE,QAEN,cAAC,GAAD,CACEzsC,cAAY,6BACZzI,MAAM,UACNnD,QAAQ,OACR6D,KAAK,QACLR,QAAS40C,EACTM,QAAS,cAAC,KAAD,IANX,2BAcS79B,OAAM89B,KAAKR,IE5CbS,GAAc,KC8FZC,GAlFiB,WAAO,IAAD,EDVCC,ECUD,EACJ3rD,mBAAS,IADL,mBAC7B4nB,EAD6B,KACnBC,EADmB,KAE5BpiB,EAAoB7E,qBAAWkR,IAA/BrM,gBACFmmD,EAAmBzwC,mBAHW,EAI8Bnb,oBAChE,GALkC,mBAI7B6nD,EAJ6B,KAIFC,EAJE,OAOgC9nD,sBDjB/B2rD,ECkBb,OAAClmD,QAAD,IAACA,OAAD,EAACA,EAAiBkN,iBDjBhCk5C,aAAY,IAAItoD,KAAKooD,GAAUpoD,KAAKyH,QAAUygD,ICSpB,mBAO7BK,EAP6B,KAODC,EAPC,KAW9B/zD,EAAOyN,EAAe,iBAAMA,QAAN,IAAMA,GAAN,UAAMA,EAAiBowB,eAAvB,aAAM,EAA0B79B,MAAS,OAC/DiF,EAAE,OAAGwI,QAAH,IAAGA,OAAH,EAAGA,EAAiB2D,UAEpBpM,EAAsB+3B,KAAtB/3B,kBAEFgrB,EAAuB,uCAAG,WAAO/qB,GAAP,SAAA1C,EAAA,+EAEfyC,EAAkBC,GAAImE,MAAK,gBAAGtF,EAAH,EAAGA,KAAH,cAAcA,QAAd,IAAcA,OAAd,EAAcA,EAAMI,aAFhC,gIAAH,sDAqC7B,OA/BAyC,qBAAU,WAAM,4CACd,4BAAApE,EAAA,sEACuBytB,EAAwBjF,SAAS,GAAD,OAAI9lB,KAD3D,QACQgrB,EADR,SAGIJ,EAAYI,GAHhB,4CADc,uBAAC,WAAD,wBAQdC,KACC,IAEHvpB,qBACE,WACE,GAAI8G,EAAiB,CAAC,IACZkN,EAAmBlN,EAAnBkN,eACFq5C,EAAWH,aAAY,IAAItoD,KAAKoP,GAAkBpP,KAAKyH,OAE7D4gD,EAAiBtwC,QAAU+X,YAAW,WACpC04B,GAA8B,KAC7BC,EAAWP,IAEhB,OAAO,WACDG,EAAiBtwC,UACnB2wC,aAAaL,EAAiBtwC,SAC9BywC,GAA8B,OAIpC,CAACtmD,IAID,qCACE,cAAC,GAAD,CACEuX,cACE,eAAC4tC,GAAD,WACE,cAACD,GAAD,UACG,cAACrF,GAAA,EAAD,CAAQlxC,IAAK3O,EAAkBmiB,EAAW,OAE7C,cAAC,GAAD,CAAOvK,MAAM,SAASrK,QAAQ,KAA9B,SACGhb,SAKR8zD,GACC,qCACE,cAAC,GAAD,CACEb,cAAe,kBAAMnD,GAA6B,MAEpD,cAAC,GAAD,CACEzyC,OAAQwyC,EACRvyC,MAAO,kBAAMwyC,GAA6B,a,4iBCtF/C,IAAMxwC,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,MACjC,qBAAGD,MAAkBC,QAAQ,EAAG,MAM/B84C,GAAoBjuD,IAAOgW,IAAV,MAGnB,qBAAGd,MAAkBE,QAAQC,QAAQ3c,QAGnCw1D,GAAgBluD,IAAOgW,IAAV,MAGR,qBAAGd,MAAkBC,QAAQ,MAGlCkuC,GAAUrjD,IAAOgW,IAAV,MACJ,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MCxBjC,OAA0B,sCCA1B,OAA0B,yC,yLCGlC,IAAM8nB,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMqL,SC6EhDo0B,GArD8B,SAAC,GAWvC,IAVL34C,EAUI,EAVJA,GACAjF,EASI,EATJA,KACA+U,EAQI,EARJA,YACAoB,EAOI,EAPJA,YACAuyB,EAMI,EANJA,eACAyJ,EAKI,EALJA,gBACAtsC,EAII,EAJJA,OACAszC,EAGI,EAHJA,qBACA1Q,EAEI,EAFJA,QACAoV,EACI,EADJA,cAEMuW,EAAYjb,GAAwBzQ,GAAkByJ,EACtDkiB,EAAgBznD,YAAO,IAAIrB,KAAJ,UAAY6oD,IAAc,SACvD,OACE,eAAC,GAAD,CAASxtC,cAAA,0BAAgC3hB,GAAzC,UACE,eAAC,GAAD,WACE,cAAC,GAAD,UACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0Bq5C,MAE5B,qBAAKj4C,IAAKiiC,GAAc9zC,MAAK,4BAAuBtF,QAEtD,eAAC,GAAD,WACE,eAAC,GAAD,WACE,eAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,iBACGjG,QADH,IACGA,OADH,EACGA,EAAa/U,KADhB,IACuBA,GAAI,WAAQyL,OAAOzL,GAAMs+C,OAArB,QAE3B,eAAC,GAAD,WACE,cAAC9/B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC7E,IAChCsyB,GACC,eAACjqB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsCytB,WAI5C,eAAC,GAAD,WACGoV,EACC,cAAC,GAAD,UAAsBA,IAEtB,wBAEF,cAACiB,GAAD,UACa,gBAAVj5C,EACC,qBAAKuW,IAAK+/B,GAAU5xC,MAAO,cAE3B,qBAAK6R,IAAK6/B,GAAa1xC,MAAO,8B,okCCzErC,IAAM24B,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAM+D,IAAIS,SAItDsgB,GAAsBh9B,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQE,OAAOC,SAMnC,qBAAGL,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC44B,GAAiB/tC,IAAOgW,IAAV,MAChB,qBAAGd,MAAkBE,QAAQE,OAAOC,SAIlC8gC,GAAgBr2C,IAAOgW,IAAV,MAMbsgC,GAAuBt2C,IAAOgW,IAAV,MACjB,qBAAGd,MAAkBC,QAAQ,MAGhC2hC,GAAsB92C,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQE,OAAOC,SCsBhC+iC,GArC+B,SAAC,GAOxC,IANLt5C,EAMI,EANJA,GACA8P,EAKI,EALJA,YACAoB,EAII,EAJJA,YACAuyB,EAGI,EAHJA,eACAD,EAEI,EAFJA,QACAoV,EACI,EADJA,cAEMwW,EAAgB3rB,EAClB97B,YAAO,IAAIrB,KAAJ,UAAYm9B,IAAmB,SACtC,GACJ,OACE,eAAC,GAAD,CAAS9hB,cAAA,2BAAiC3hB,GAA1C,UACE,eAAC,GAAD,WACE,cAAC,GAAD,UACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0Bq5C,MAE5B,qBAAKj4C,IAAKsiC,GAAWn0C,MAAK,6BAAwBtF,QAEpD,eAAC,GAAD,WACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,gBAA0BjG,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAa/U,OACvC,eAAC,GAAD,WACE,cAACwe,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC7E,IAChCsyB,GACC,eAACjqB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsCytB,QAGzCoV,EACC,cAAC,GAAD,UAAsBA,IAEtB,+B,gYClDH,IAAM3a,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQy1B,KAAKxyC,QAG3CwgD,GAAkB74C,IAAOgW,IAAV,MAIhB,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAE/B,qBAAGD,MAAkBC,QAAQ,MCmFjCslC,GA9D6B,SAAC,GAYtC,IAXLz7C,EAWI,EAXJA,GACAjF,EAUI,EAVJA,KACAqvC,EASI,EATJA,eACAU,EAQI,EARJA,aACAN,EAOI,EAPJA,eACAO,EAMI,EANJA,aACAtH,EAKI,EALJA,eACA7iC,EAII,EAJJA,OACAszC,EAGI,EAHJA,qBACA1Q,EAEI,EAFJA,QACAoV,EACI,EADJA,cAEMuW,EAAYjb,GAAwBzQ,EACpC2rB,EAAgBznD,YAAO,IAAIrB,KAAJ,UAAY6oD,IAAc,SAEvD,OACE,eAAC,GAAD,CAASxtC,cAAA,yBAA+B3hB,GAAxC,UACE,eAAC,GAAD,WACE,cAAC,GAAD,UACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0Bq5C,MAE5B,qBAAKj4C,IAAKukC,GAAgBp2C,MAAK,2BAAsBtF,QAEvD,eAAC,GAAD,WACE,eAAC,GAAD,WACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0Bhb,IAC1B,eAACwe,GAAA,EAAD,CAAYxD,QAAQ,YAApB,UACGq0B,EADH,IACoBF,GAAiBY,EAAcV,MAEnD,eAAC7wB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBACQw0B,GAA2BC,MAEnC,eAAC,GAAD,WACE,cAACjxB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiCg1B,IAChCvH,GACC,eAACjqB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsCytB,WAI5C,eAAC,GAAD,WACGoV,EACC,cAAC,GAAD,UAAsBA,IAEtB,wBAEF,eAAC,GAAD,WACG1E,GAAmC,iBAAXtzC,GACvB,qBAAKuW,IAAKuhC,GAAe/2B,cAAA,sBAA4B3hB,KAE5C,gBAAVY,EACC,qBAAKuW,IAAK+/B,GAAU5xC,MAAO,cAE3B,qBAAK6R,IAAK6/B,GAAa1xC,MAAO,+B,02BCxFrC,IAAM24B,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMwgC,UAIlD1b,GAAsBh9B,IAAOgW,IAAV,MACrB,qBAAGd,MAAkBE,QAAQE,OAAOC,SAMnC,qBAAGL,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC44B,GAAiB/tC,IAAOgW,IAAV,MAChB,qBAAGd,MAAkBE,QAAQE,OAAOC,SAIlC8gC,GAAgBr2C,IAAOgW,IAAV,MAMbsgC,GAAuBt2C,IAAOgW,IAAV,MACjB,qBAAGd,MAAkBC,QAAQ,MC0C9Bk5C,IDvCgBruD,IAAOgW,IAAV,MAGhB,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MCbN,SAAC,GAStC,IARLnW,EAQI,EARJA,GACA8P,EAOI,EAPJA,YACA41B,EAMI,EANJA,YACAx0B,EAKI,EALJA,YACAuyB,EAII,EAJJA,eACAyJ,EAGI,EAHJA,gBACA1J,EAEI,EAFJA,QACAoV,EACI,EADJA,cAEMwW,EAAgB3rB,EAClB97B,YAAO,IAAIrB,KAAJ,UAAYm9B,IAAmB,SACtC97B,YAAO,IAAIrB,KAAJ,UAAY4mC,IAAoB,SAC3C,OACE,eAAC,GAAD,CAASvrB,cAAA,0BAAgC3hB,GAAzC,UACE,eAAC,GAAD,WACE,cAAC,GAAD,UACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0Bq5C,MAE5B,qBAAKj4C,IAAKokC,GAAgBj2C,MAAK,4BAAuBtF,QAExD,eAAC,GAAD,WACE,eAAC,GAAD,WACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,gBAA0BjG,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAa/U,OACvC,cAAC,GAAD,UACE,eAACwe,GAAA,EAAD,CAAYxD,QAAQ,YAApB,qCACoB2vB,QADpB,IACoBA,OADpB,EACoBA,EAAaoC,iBAAkB,IAChD8R,GAAkB,OAAC9pC,QAAD,IAACA,OAAD,EAACA,EAAa9P,SAGrC,eAAC,GAAD,WACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC7E,IAChCsyB,GACC,eAACjqB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsCytB,WAI5C,cAAC,GAAD,UACGoV,EACC,cAAC,GAAD,UAAsBA,IAEtB,kCCpEG,OAA0B,uC,yLCGlC,IAAM3a,GAAUj9B,YAAO88B,GAAP98B,CAAH,MAKE,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMyiC,SC8EhDC,GAtD0B,SAAC,GAWnC,IAVL57C,EAUI,EAVJA,GACAjF,EASI,EATJA,KACA+U,EAQI,EARJA,YACAoB,EAOI,EAPJA,YACAuyB,EAMI,EANJA,eACAyJ,EAKI,EALJA,gBACAtsC,EAII,EAJJA,OACAszC,EAGI,EAHJA,qBACA1Q,EAEI,EAFJA,QACAoV,EACI,EADJA,cAEMuW,EAAYjb,GAAwBzQ,GAAkByJ,EACtDkiB,EAAgBznD,YAAO,IAAIrB,KAAJ,UAAY6oD,IAAc,SAEvD,OACE,eAAC,GAAD,CAASxtC,cAAA,sBAA4B3hB,GAArC,UACE,eAAC,GAAD,WACE,cAAC,GAAD,UACE,cAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0Bq5C,MAE5B,qBAAKj4C,IAAK4kC,GAAWz2C,MAAK,wBAAmBtF,QAE/C,eAAC,GAAD,WACE,eAAC,GAAD,WACE,eAACuZ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,iBACGjG,QADH,IACGA,OADH,EACGA,EAAa/U,KADhB,IACuBA,GAAI,WAAQyL,OAAOzL,GAAMs+C,OAArB,QAE3B,eAAC,GAAD,WACE,cAAC9/B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SAAiC7E,IAChCsyB,GACC,eAACjqB,GAAA,EAAD,CAAYxD,QAAQ,YAApB,kBAAsCytB,WAI5C,eAAC,GAAD,WACGoV,EACC,cAAC,GAAD,UAAsBA,IAEtB,wBAEF,cAACiB,GAAD,UACa,gBAAVj5C,EACC,qBAAKuW,IAAK+/B,GAAU5xC,MAAO,cAE3B,qBAAK6R,IAAK6/B,GAAa1xC,MAAO,8BC3E/Bw8C,GACF,EADEA,GAEC,EAFDA,GAGG,EAHHA,GAIE,EAGFwN,GAAsC,SACjDC,GAEA,OAAKA,GAAsC,IAAvBA,EAAYzmD,OAezB,CAAE0mD,mBATkBD,EAAYxkD,QAAO,SAACwe,GAE7C,OADoBA,EAAMzZ,YACP+xC,aAAeC,MAOP2N,2BALMF,EAAYxkD,QAAO,SAACwe,GAErD,OADoBA,EAAMzZ,YACP+xC,aAAeC,OAX3B,CACL0N,mBAAoB,GACpBC,2BAA4B,KCuGnBC,GAnGuC,SAAC,GAAuB,IAArB/N,EAAoB,EAApBA,OAAQr8C,EAAY,EAAZA,MA+E/D,OACE,cAAC,GAAD,UAEGq8C,EAAO74C,OAAS,GACf,qCACE,eAACmmD,GAAD,WACE,cAACC,GAAD,UACE,cAAC,KAAD,MAEF,cAAC31C,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BzQ,OAE3Bq8C,EAAOp2C,KAAI,SAACge,GACX,OA1FwB,SAACA,GAA4B,IAAD,oBACtDzZ,EAAcyZ,EAAMzZ,YAC1B,OAAQA,EAAY+xC,YAClB,KAAKC,GACH,OACE,cAAC,GAAD,UACE,cAAC,GAAD,CACE9hD,GAAIupB,EAAMvpB,GACVY,OAAQ2oB,EAAM3oB,OACd7F,KAAM+U,EAAY/U,KAClB+vC,aAAY,UAAEvhB,EAAMxZ,kBAAR,aAAE,EAAkB+6B,aAChCV,eAAc,UAAE7gB,EAAMxZ,kBAAR,aAAE,EAAkBq6B,eAClCI,eAAc,UAAEjhB,EAAMxZ,kBAAR,aAAE,EAAkBy6B,eAClCO,aAAY,UAAExhB,EAAMxZ,kBAAR,aAAE,EAAkBg7B,aAChCmC,gBAAiB3jB,EAAM2jB,gBACvBzJ,eAAgBla,EAAMka,eACtByQ,qBAAsB3qB,EAAM2qB,2BAAwBvvC,EACpD6+B,QAASja,EAAMia,QACfoV,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,QAb5BwuB,EAAMvpB,IAiBxB,KAAK8hD,GACH,OACE,cAAC,GAAD,UACE,cAAC,GAAD,2BACMv4B,GADN,IAEEqvB,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,SAH5BwuB,EAAMvpB,IAOxB,KAAK8hD,GACyB,IAAD,IAA3B,OAAIhyC,EAAY+0C,UAEZ,cAAC,GAAD,UACE,cAAC,GAAD,2BACMt7B,GADN,IAEEqvB,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,SAH5BwuB,EAAMvpB,IASpB,cAAC,GAAD,UACE,cAAC,GAAD,2BACMupB,GADN,IAEEqvB,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,SAH5BwuB,EAAMvpB,IAO1B,KAAK8hD,GACH,GAAIv4B,EAAM6xB,sBAAuB,CAAC,IAAD,UACzBntC,EAAG,2CACLsb,EAAM6xB,sBAAsB,UADvB,aACL,EAAgCC,gBAD3B,sBAC8C9xB,EAAM6xB,6BADpD,iBAC8C,EAA8B,UAD5E,aAC8C,EAAkCp7C,IACzF,OACE,cAAC,GAAD,UACE,cAAC,GAAD,CACEs2C,UAAU,EACV8E,sBAAuB7xB,EAAM6xB,sBAC7BxC,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,QAJ5BkT,GAQV,IAAD,IACL,OACE,cAAC,GAAD,UACE,cAAC,GAAD,2BACMsb,GADN,IAEEqvB,cAAa,UAAErvB,EAAMiY,iBAAR,iBAAE,EAAiBx+B,YAAnB,aAAE,EAAuBjI,SAH5BwuB,EAAMvpB,IAQ1B,QACE,OAAO,8BAgBI2vD,CAA0BpmC,YCvGvCvd,GAAuC,CAC3C5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA0BMm0D,GAvBM,WAAO,IAAD,EACCruD,qBACxBkJ,KACAuB,IAHuB,mBAClB7K,EADkB,KACXM,EADW,KAMnBghC,EAAiBjkC,sBAAW,uCAAC,WAAO2N,GAAP,eAAA7O,EAAA,sEAE/BmE,EAAS,CAAEzC,KAAM,YAFc,SAGRpD,IAAiBiE,IAAjB,UAnBZ,6BAmBY,YAAoCsM,IAH5B,cAGzB5P,EAHyB,OAI/BkF,EAAS,CAAEzC,KAAM,YAAa2L,QAASpO,EAASsC,OAJjB,kBAKxBtC,EAASsC,MALe,gCAO/B4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPF,yDAAD,sDAS/B,IAEH,OAAO,2BACFxJ,GADL,IAEEshC,oB,i3CC1BG,IAAMpoB,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,MAIzB,qBAAGD,MAAkBC,QAAQ,OACrC,qBAAGD,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAGrC05C,GAAc7uD,IAAOgW,IAAV,MACZ,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MAIrC+J,GAAQlf,YAAOuY,MAAYzD,MAAM,CAC5CC,QAAS,KACTqK,MAAO,UAFYpf,CAAH,MAIP,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QACpC,qBAAGwc,MAAkBC,QAAQ,MACtB,qBAAGD,MAAkBC,QAAQ,MAC/B,qBAAGD,MAAkB8B,WAAW4yB,kBAGpC3e,GAAiBjrB,IAAOgW,IAAV,MACV,qBAAGd,MAAkBC,QAAQ,MAC3B,qBAAGD,MAAkBC,QAAQ,MAE5B,qBAAGD,MAAkBC,QAAQ,MACpB,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAGhD,qBAAG6c,MAAkBC,QAAQ,MAIlCkH,GAAWrc,YAAOsc,KAAPtc,CAAH,MACR,qBAAGkV,MAAkBqH,OAAOC,OAAS,KACvC,qBAAGtH,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAI5CC,GAA2B3c,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,MAIxB8uD,GAAwB9uD,IAAOgW,IAAV,MAKtB,qBAAGd,MAAkBC,QAAQ,MAK5BN,GAAS7U,YAAO4U,GAAP5U,CAAH,MACR,qBAAGkV,MAAkBE,QAAQy1B,KAAKnyC,QACvB,qBAAGwc,MAAkBE,QAAQE,OAAOC,SACxC,qBAAGL,MAAkBE,QAAQy1B,KAAKnyC,QACrC,qBAAGwc,MAAkB8B,WAAWkU,GAAGhU,YAK1B,qBAAGhC,MAAkBE,QAAQE,OAAOC,SAC/C,qBAAGL,MAAkBE,QAAQy1B,KAAKnyC,QCwEhCq2D,GAtHa,WAAO,IAAD,EACchtD,mBAAuB,IADrC,mBACzBitD,EADyB,KACRC,EADQ,OAEkBltD,mBAEhD,IAJ8B,mBAEzBmtD,EAFyB,KAENC,EAFM,OAK4BptD,mBAAS,IALrC,mBAKzBqtD,EALyB,KAKDC,EALC,OAMFttD,oBAAS,GANP,mBAMzBI,EANyB,KAMhBC,EANgB,KAQRktD,EAA4BV,KAA5CntB,eAEFlqB,EAAUC,cACRhQ,EAAoB7E,qBAAWkR,IAA/BrM,gBAEF+nD,EAAqB,WACzBh4C,EAAQjP,KAAR,uCAGI2hD,EAAY,kBAChBhpD,IAAMxG,MACJ,oFAnB4B,4CAsBhC,8BAAA6B,EAAA,sEAEI8F,GAAW,GACL+I,EAAYzD,OAAOF,EAAiB2D,WAH9C,SAI4BmkD,EAAwBnkD,GAJpD,QAIUqkD,EAJV,SAOML,EAAqBK,EAAUC,UAC/BR,EAAmBO,EAAU7O,QAC7B0O,EACE1oD,YAAO,IAAIrB,KAAKkqD,EAAUj7C,kBAAoB,IAAK,gBAGrDg7C,IAbN,gDAgBI5yD,QAAQC,IAAR,MACAqtD,IAjBJ,yBAmBI7nD,GAAW,GAnBf,6EAtBgC,sBA6ChC1B,qBAAU,YA7CsB,mCA8C9BwpD,KACC,IA/C6B,MAoD5BoE,GAAoCU,GAFtCR,EAlD8B,EAkD9BA,mBACAC,EAnD8B,EAmD9BA,2BAGIiB,EAAsCjlD,mBAC1C,kBAAMi2C,GAAa+N,KACnB,CAACO,IAGH,OACE,qCACE,cAAC,GAAD,CAAUz4C,KAAMpU,EAAhB,SACGA,GACC,cAAC,GAAD,CAA0Bwe,cAAY,6BAI1C,cAAC,GAAD,IACA,eAAC,GAAD,WACE,eAACkuC,GAAD,WACE,cAAC,GAAD,UAAQ,wDACR,eAACt2C,GAAA,EAAD,CAAYxD,QAAQ,YAApB,0BACe,4BAAIq6C,YAGlBZ,GAAsBA,EAAmB1mD,OAAS,GACnD,cAAC,GAAD,CACE64C,OAAQ6N,GAAsB,GAC9BlqD,MAAM,uBAGPorD,GACHA,EAAoC5nD,OAAS,EAC3C,cAAC,GAAD,CACE64C,OAAQ+O,GAAuC,GAC/CprD,MAAM,eAGR,cAAC,GAAD,UACE,cAACiU,GAAA,EAAD,CAAYxD,QAAQ,KAApB,uDAKHm6C,GAAqBA,EAAkBpnD,OAAS,GAC/C,mCACE,eAAC,GAAD,WACE,cAACyQ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,4DAGCm6C,EAAkB3kD,KAAI,SAAC7P,EAAS6V,GAAV,OACrB,cAAC,GAAD,CACEu1C,iBAAkBprD,EAElBimB,cAAA,iCAAuCpQ,IAHzC,iCAEiCA,eAQ3C,cAACu+C,GAAD,UACE,cAAC,GAAD,CAAQ12C,QAASm3C,EAAjB,8BC5IO,OAA0B,8C,o/ECKlC,IAAMI,GAAa3vD,IAAOgW,IAAV,mBAIM45C,GAJN,MAaVxD,GAAoBpsD,IAAO6vD,QAAV,MAIxB,SAAC10C,GAAD,OAAWA,EAAMjG,MAAME,QAAQC,QAAQhd,QACvC,SAAC8iB,GAAD,OAAWA,EAAMjG,MAAME,QAAQI,UAAUnd,QAQlCyyB,GAAkB9qB,IAAOgW,IAAV,MAUN,qBAAGd,MAAkBC,QAAQ,MAK5B,qBAAGD,MAAkBC,QAAQ,MAK7B,qBAAGD,MAAkBC,QAAQ,MAiBvCkE,GAAYrZ,IAAOgW,IAAV,MAOL,qBAAGd,MAAkBC,QAAQ,MAMzB,qBAAGD,MAAkBC,QAAQ,MAa9B,qBAAGD,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MAO/B,qBAAGD,MAAkBC,QAAQ,MAIrCqN,GAAkBxiB,YAAOqiB,IAAWvN,MAAM,CAAEC,QAAS,YAAnC/U,CAAH,MAEf,qBAAGkV,MAAkBE,QAAQE,OAAOC,SAGpC,qBAAGL,MAAkBE,QAAQE,OAAOC,SAGpC,qBAAGL,MAAkBE,QAAQE,OAAOC,SAGpC,qBAAGL,MAAkBE,QAAQE,OAAOC,SAI3B,qBAAGL,MAAkBE,QAAQE,OAAOC,SAC3C,qBAAGL,MAAkBE,QAAQE,OAAOC,SAG7B,qBAAGL,MAAkBE,QAAQE,OAAOC,SAC3C,qBAAGL,MAAkBE,QAAQE,OAAOC,SAG7B,qBAAGL,MAAkBE,QAAQE,OAAOC,SAC3C,qBAAGL,MAAkBE,QAAQE,OAAOC,SAKtCynB,GAAsBh9B,IAAOgW,IAAV,MAKnBwa,GAAOxwB,IAAO2V,IAAIb,OAAM,WAEnC,MAAO,CAAEqB,IADgB1T,6BAAjBguB,gBADUzwB,CAAH,MAIL,qBAAGkV,MAAkBC,QAAQ,EAAG,EAAG,MC7IlCiQ,GAAmBoM,OAAajQ,MAAM,CACjDxe,IAAKyuB,OAAa9O,SAAS,2BAC1Be,KAAK,aAAc,sCAAmC,SAACpiB,GAAD,OACrDsjB,GAAYtjB,GAAS,OAEvB2B,SAAUwuB,OAEPpJ,IAAI,EAAG,+CACP1F,SAAS,+BAGD8Q,GAAoB,CAC/BzwB,IAAK,GACLC,SAAU,ICgIG8sD,GApHS,WAAO,IAAD,EACY/tD,oBAAS,GADrB,mBACrB2rB,EADqB,KACPC,EADO,OAEI5rB,oBAAS,GAFb,mBAErBguD,EAFqB,KAEXC,EAFW,KAGtBnmC,EAAY3M,mBACZ3F,EAAUC,cAJY,EAMO7U,qBAAWd,IAAtCqB,EANoB,EAMpBA,OAAQzI,EANY,EAMZA,MAAO0H,EANK,EAMLA,QAEvBzB,qBAAU,WACI,IAAD,EACiD,EADxDjG,IACmC,uBAAjC,UAAAA,EAAMc,gBAAN,eAAgBsC,KAAKnD,UACvBuG,IAAMszC,UACNtzC,IAAMxG,MACJ,mHAEF,UAAAovB,EAAUxM,eAAV,SAAmBqY,cACjB,WACA,oDAGFz0B,IAAMxG,MAAM6E,GAAoB7E,OAGnC,CAACA,IAEJiG,qBAAU,YACHjG,GAASs1D,GACZx4C,EAAQnT,QAAQ,uBAEjB,CAAC2rD,IAEJ,IAAME,EAAY,uCAAG,WACnBhqC,EADmB,oBAAA3pB,EAAA,6DAEjB6pB,EAFiB,EAEjBA,cxOkEgC9kB,EwOhES4kB,EAAOljB,IAA5CmtD,ExOiED7uD,EAAM+C,QAAQ,UAAW,IwOhE9B+hB,GAAc,GALK,SAMbjjB,EAAOgtD,EAAcjqC,EAAOjjB,UAAUG,MAAK,kBAAM6sD,GAAY,MANhD,iCxOoEc,IAAC3uD,IwOpEf,OAAH,wDASZ8uD,EAAqB,kBAAMxiC,GAAiBD,IAElD,OACE,eAAC,GAAD,WACE,cAAC,GAAD,CAAiBvrB,QAASuI,QAAQvI,KAClC,eAAC,GAAD,WACE,cAAC,GAAD,IACA,cAAC,GAAD,UACE,cAACoW,GAAA,EAAD,oEAEF,cAAC,KAAD,CACE4R,SAAU,SAAC3O,GAAD,OAAUqO,EAAUxM,QAAU7B,GACxCuK,cAAeyN,GACfpO,iBAAkBA,GAClBY,SAAUiqC,EAJZ,SAMG,SAAC3pC,GAAD,OACC,eAAC,KAAD,WACE,cAAC,GAAD,CACEvsB,KAAK,MACLoe,MAAM,MACNna,KAAK,MACLqD,MAAO0iB,GAAQuC,EAAOL,OAAOljB,KAC7B8U,SAAUyO,EAAO+kB,aACjB5wC,MAAOiQ,QAAQ4b,EAAOzD,OAAO9f,KAC7BmgB,WAAYoD,EAAOzD,OAAO9f,IAC1B0jB,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,SAE/B,cAAC,GAAD,CACE3sB,KAAK,WACLiE,KAAM0vB,EAAe,OAAS,WAC9BvV,MAAM,QACN9W,MAAOilB,EAAOL,OAAOjjB,SACrB6U,SAAUyO,EAAO+kB,aACjB5wC,MAAOiQ,QAAQ4b,EAAOzD,OAAO7f,UAC7BkgB,WAAYoD,EAAOzD,OAAO7f,SAC1ByjB,OAAO,SACP9D,WAAS,EACT+D,WAAY,CAAE,cAAe,YAC7BC,WAAY,CACVC,aACE,cAACC,GAAA,EAAD,CAAgBnI,SAAS,MAAzB,SACE,cAACN,GAAA,EAAD,CACExG,aAAW,6BACXQ,QAAS+3C,EAFX,SAIGziC,EAAe,cAAC,KAAD,IAAiB,cAAC,KAAD,WAM3C,cAAC,GAAD,CACE/M,cAAY,SACZ/H,KAAK,QACLV,MAAM,UACNla,KAAK,SACLqa,SAAUiO,EAAOS,aALnB,0BAYN,cAAC,IAAD,CAAM9N,GAAG,uBAAT,iCACA,cAAC,GAAD,CAAQstC,UAAU,aAEpB,cAAC,GAAD,UACE,cAACoJ,GAAD,UCnIF3kD,GAAqD,CACzD5B,KAAM,GACND,IAAK,GACLK,MAAO,EACPrH,SAAS,EACT1H,MAAO,MA2BM21D,GAxBgB,WAAO,IAAD,EACT7vD,qBACxBkJ,KACAuB,IAHiC,mBAC5B7K,EAD4B,KACrBM,EADqB,KAM7B4vD,EAAS7yD,sBAAW,sBAAC,4BAAAlB,EAAA,sEAEvBmE,EAAS,CAAEzC,KAAM,YAFM,SAGApD,IAAiBiE,IAAjB,UAnBZ,+BAgBY,cAGjBtD,EAHiB,OAIvBkF,EAAS,CAAEzC,KAAM,YAAa2L,QAASpO,EAASsC,OAJzB,kBAKhBtC,EAASsC,MALO,sCAOvB4C,EAAS,CAAEzC,KAAM,QAAS2L,QAAQ,EAAD,KAPV,8DAUxB,IAEH,OAAO,2BACFxJ,GADL,IAEEkwD,Y,uwCC/BG,IAAMvlC,GAAkB9qB,IAAOgW,IAAV,MAQfqD,GAAYrZ,IAAOgW,IAAV,MAOT,qBAAGd,MAAkBC,QAAQ,MACpC,qBAAGD,MAAkBC,QAAQ,MAGtBm7C,GAA0BtwD,IAAOgW,IAAV,MAOd,qBAAGd,MAAkBE,QAAQI,UAAU9c,QAEjD,qBAAGwc,MAAkBC,QAAQ,MAC5B,qBAAGD,MAAkBC,QAAQ,MAG7Bo7C,GAA0BvwD,IAAOgW,IAAV,MACxB,qBAAGd,MAAkBC,QAAQ,OAG5By1B,GAAgB5qC,IAAOgW,IAAV,MAObnB,GAAS7U,YAAO4U,GAAP5U,CAAH,MACR,qBAAGkV,MAAkBE,QAAQy1B,KAAKnyC,QAC3B,qBAAGwc,MAAkBE,QAAQy1B,KAAKnyC,QACrC,qBAAGwc,MAAkB8B,WAAWkU,GAAGhU,YAIrCsZ,GAAOxwB,IAAO2V,IAAIb,OAAM,WAEnC,MAAO,CAAEqB,IADe1T,6BAAhB+tD,eADUxwD,CAAH,MAIA,qBAAGkV,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MCclCs7C,GAxDuB,WAAO,IAAD,EACF1uD,mBAAS,CAAC,KADR,mBACnC2uD,EADmC,KACrBC,EADqB,OAEdP,KAApBC,EAFkC,EAElCA,OAAQluD,EAF0B,EAE1BA,QACVoV,EAAUC,cAEhB9W,qBAAU,WACR2vD,IACGltD,MAAK,SAACytD,GACL,OAAOC,EAAkBD,EAAYl2D,YAEtCyI,MAAK,SAAC2tD,GAAD,OAAWH,EAAgBG,MAChC5zD,OAAM,kBACL+D,IAAMxG,MAAM,iEAEf,IAEH,IAAMo2D,EAAoB,SAACn2D,GAEzB,OADyBA,EAAQ4P,MAAM,OAQzC,OAAInI,EACK,cAAC,GAAD,CAAiBA,QAASA,IAIjC,eAAC,GAAD,WACE,cAAC,GAAD,CACEmC,MAAM,kBACNmmB,eAAe,SACftK,gBAAgB,UAElB,eAAC,GAAD,WACE,cAACmwC,GAAD,UACGI,EAAanmD,KAAI,SAAC7P,GACjB,OACE,mCACE,cAAC61D,GAAD,UAA0B71D,WAMlC,eAAC,GAAD,WACE,cAAC,GAAD,CAAQ0d,QA3BI,WAClBb,EAAQjP,KAAR,aA0BM,wBACA,cAAC,GAAD,cClEV,SAAS,KAA2Q,OAA9P,GAAWuF,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,IAAK,CAChDg5C,SAAU,yBACI,gBAAoB,OAAQ,CAC1CC,SAAU,UACVC,SAAU,UACVp2C,EAAG,0SACHC,KAAM,WAGJ,GAAqB,gBAAoB,OAAQ,KAAmB,gBAAoB,WAAY,CACtG9b,GAAI,mBACU,gBAAoB,OAAQ,CAC1Coc,MAAO,GACPC,OAAQ,GACRP,KAAM,YAGR,SAASo2C,GAAgBl2C,EAAMC,GAC7B,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTR,KAAM,OACNS,MAAO,6BACPC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,GAAO,IAG3B,IAAI,GAA0B,aAAiB4sD,IAChC,I,oMC1CR,IAAMC,GAA4BhiC,YAAH,MACzB,qBAAGja,MAAkBC,QAAQ,GAAK,OAG5B,qBAAGD,MAAkBC,QAAQ,MAGlC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,Q,yaCN5C,IAAMwjB,GAAkBlc,IAAOgW,IAAV,MAKJ,qBAAGd,MAAkBE,QAAQC,QAAQqH,QAEvDy0C,IAIW,qBAAGj8C,MAAkBC,QAAQ,EAAG,OAC3B,qBAAGD,MAAkBC,QAAQ,QAKlC,qBAAGD,MAAkBC,QAAQ,EAAG,OAC1B,qBAAGD,MAAkBC,QAAQ,QCMrCi8C,GAlBiD,SAAC,GAE1D,IADLh5C,EACI,EADJA,QAEA,OACE,cAAC,GAAD,CAAiBA,QAASA,EAASuI,cAAY,wBAA/C,SACE,eAAC9L,GAAA,EAAD,CACEw8C,gBAAc,cACdC,gBAAc,OACdv8C,QAAQ,YACRmD,MAAM,UAJR,UAME,cAAC,GAAD,IACA,qD,u3BClBD,IAAM+kB,GAAUj9B,IAAOgW,IAAV,MACE,SAACmF,GAAD,OAAWA,EAAMjG,MAAME,QAAQE,OAAOC,SAK5C,qBAAGL,MAAkBC,QAAQ,MAKhCo8C,GAAuBvxD,IAAOgW,IAAV,MAOpBw7C,GAAgBxxD,IAAOgW,IAAV,MAGT,qBAAGd,MAAkBC,QAAQ,QAC5B,qBAAGD,MAAkBC,QAAQ,QAIlCs8C,GAAOzxD,YAAOuY,KAAPvY,CAAH,MACN,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QCwC1Cg5D,GArD0B,SAAC,GAAwB,ICf1BhgC,EDeIkG,EAAqB,EAArBA,QACpCrgB,EAAUC,cAD+C,EAE/BzV,mBAAS,IAFsB,mBAExD4nB,EAFwD,KAE9CC,EAF8C,KAGvD7qB,EAAsB+3B,KAAtB/3B,kBAEiB4yD,EAAkC1nD,GACzD,yBADMa,gBAQFif,EAAuB,uCAAG,WAAO/qB,GAAP,eAAA1C,EAAA,0DAC1Bq1D,EAD0B,0CAGb5yD,EAAkBC,GAAImE,MAAK,gBAAGtF,EAAH,EAAGA,KAAH,cAAcA,QAAd,IAAcA,OAAd,EAAcA,EAAMI,aAHlC,wEAMH,gCADjBsB,EAAiBD,GAAoB,EAAD,MAExC2B,IAAMxG,MAAM8E,GAPY,yDAAH,sDAavB0qB,EAA0B,uCAAG,4BAAA3tB,EAAA,sEACZytB,EAAwBjF,SAAS,GAAD,OAAI8S,EAAQ54B,MADhC,OAC3BgrB,EAD2B,OAG/BJ,EADEI,GAGU4nC,IALmB,2CAAH,qDAahC,OAJAlxD,qBAAU,WACRupB,MACC,IAGD,eAAC,GAAD,WACE,eAACsnC,GAAD,CAAsB5wC,cAAA,0BAAgCiX,EAAQ54B,IAA9D,UACE,cAACqoD,GAAA,EAAD,CAAQlxC,IAAKwT,EAAUqC,IAAK4L,EAAQ79B,KAAM4mB,cAAY,WACtD,eAAC6wC,GAAD,WACE,cAACC,GAAD,UAAO75B,EAAQ79B,OACf,eAAC03D,GAAD,YC5D8B//B,ED4DCkG,EAAQlG,YC3DxCkT,aAAkB,IAAIt/B,KAAQ,IAAIA,KAAKosB,GAAe,MD2DrD,iBAGJ,cAAC,GAAD,CAAqBtZ,QAvCoB,WAC3Cb,EAAQjP,KAAR,8BAAoCsvB,EAAQ54B,Y,+WExBzC,IAAM82B,GAAc91B,YAAO+1B,KAAP/1B,CAAH,MACL,qBAAGkV,MAAkBC,QAAQ,QAChC,qBAAGD,MAAkBC,QAAQ,QAClC,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAC1B,qBAAG6c,MAAkBE,QAAQE,OAAOC,SAC7C,qBAAGL,MAAkBC,QAAQ,EAAG,MAEvB,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAI1C,qBAAG6c,MAAkBC,QAAQ,MAC/B,qBAAGD,MAAkBC,QAAQ,EAAG,MC8ChC8gB,GA1CyC,SAAC,GAIlD,IAHLC,EAGI,EAHJA,UACAre,EAEI,EAFJA,SACAue,EACI,EADJA,kBAEM7e,EAAUC,cACV2e,GACH5xB,IAAGC,MAAM+S,EAAQxW,SAAS0D,QAAQyxB,IAAyB,IATb9xB,QAAQ,WAAY,IAY/DmyB,EAAYtjB,cAAqB,SAAC5R,GACtC,IAAMm1B,EAAS,2BACVjyB,IAAGC,MAAM+S,EAAQxW,SAAS0D,SADhB,mBAEZyxB,EAAY70B,EAAK,WAAOA,EAAP,UAAkBsC,IAEhC8yB,EAASlyB,IAAGmyB,aAAa,CAC7B94B,IAAK2Z,EAAQxW,SAASC,SACtBzG,MAAOi8B,IAETjf,EAAQjP,KAAKmuB,GACTL,GAAmBA,EAAkB/0B,KACxC,KAEH,OACE,cAAC,GAAD,CACE80B,aAAcA,EACdte,SAAU,SAACC,GACTye,EAAU/jB,SAASsF,EAAEC,OAAO1W,OACxBwW,GAAUA,EAASC,IAEzB4O,WAAY,CACV,cAAe,eAEjBE,aACE,cAACC,GAAA,EAAD,CAAgBnI,SAAS,MAAzB,SACE,cAACkY,GAAA,EAAD,S,iWCpDH,IAAMvd,GAAYrZ,IAAOgW,IAAV,MAIT,qBAAGd,MAAkBC,QAAQ,EAAG,MACvB,qBAAGD,MAAkBE,QAAQE,OAAOC,SAG7Cs8C,GAAW7xD,IAAOgW,IAAV,MACL,qBAAGd,MAAkBC,QAAQ,MAGlC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QC0FjCo5D,GAzFY,WAAO,IAAD,EACC/vD,mBAAyB,IAD1B,mBACxB+1B,EADwB,KACd+C,EADc,OAEP94B,mBAAS,GAFF,mBAExB27B,EAFwB,KAElBC,EAFkB,OAGW7G,KAAlCE,EAHuB,EAGvBA,cAAe70B,EAHQ,EAGRA,QAASqH,EAHD,EAGCA,MAEPuoD,EAAmC9nD,GAC1D,gBADMa,gBAIFyM,EAAUC,cACVw6C,EAAwBz6C,EAAQxW,SAAS0D,OAE/C/D,qBAAU,WACR,IAAKqxD,EAEH,OADA9wD,IAAMxG,MAAM,kEACL8c,EAAQqJ,WAEhB,CAACmxC,IAEJrxD,qBAAU,WACRuxD,MACC,CAACv0B,EAAMs0B,EAAuBD,IAEjC,IAAME,EAAoB,WACxB,IAAM7mD,EAAS7G,IAAGC,MAAMwtD,GACxBh7B,EAAc,2BACT5rB,GADQ,IAEXsyB,OACAd,MAAO,GACPgV,QAAS,OACTsgB,MAAO,SAEN/uD,MAAK,SAACtF,GACL,IAAMs0D,EAAmBt0D,EAAKmM,QAE5B6wB,EADW,IAAT6C,EACUy0B,EAEA,GAAD,oBAAKr6B,GAAL,aAAkBq6B,QAGhCj1D,OAAM,SAAC4a,GACN7W,IAAMxG,MAAMqd,OAclB,OACE,qCACE,cAAC,GAAD,CACEiH,cACE,cAACoe,GAAD,CAAa/d,MAAM,SAASrK,QAAQ,KAApC,mCAKJ,cAAC,GAAD,CAAiB5S,QAASA,IAC1B,eAAC,GAAD,WACE,cAAC,GAAD,CACE+zB,UAAU,eACVE,kBAnBe,WACR,IAATsH,GACFC,EAAQ,MAmBL7F,EAAShwB,OAAS,EACjBgwB,EAASvtB,KAAI,SAACqtB,GAAD,OACX,cAAC,GAAD,CAAiBA,QAASA,GAAcA,EAAQ54B,OAGlD,cAAC6yD,GAAD,wDAED/5B,EAAShwB,OAAS0B,GACjB,cAACqoD,GAAD,UACE,cAAC,GAAD,CAAcj5C,KAAK,SAASV,MAAM,UAAUE,QAlChC,WACpBulB,EAAQD,EAAO,IAiCP,+BCrFN00B,GAAiB3iC,IAAMa,YAC3B,SAACnV,EAAOK,GAAR,OAAgB,cAAC,IAAD,aAAM2O,SAAU3O,GAASL,OAE3Ci3C,GAAe3F,YAAc,iBAE7B,IAYe4F,GAZ+B,SAAC,GAAD,IAC5Cx5D,EAD4C,EAC5CA,SAD4C,IAE5Ckc,eAF4C,MAElC,WAFkC,EAGzCsb,EAHyC,8CAO5C,aAFA,CAECxb,GAAA,EAAD,yBAAQE,QAASA,GAAasb,GAA9B,IAAoCpH,UAAWmpC,GAA/C,SACGv5D,M,mOCnBE,IAAMy5D,GAAYtyD,YAAO+W,KAAP/W,CAAH,MAEV,qBAAGkV,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBC,QAAQ,MAClB,qBAAGD,MAAkBE,QAAQ+jC,WAAWvhD,WACnD,qBAAGsd,MAAkBE,QAAQC,QAAQ3c,QAG/B,qBAAGwc,MAAkB8B,WAAWu7C,GAAGr7C,YCH9Cs7C,GAAuB/iC,IAAMa,YAGjC,SAACnV,EAAOK,GAAR,OAAgB,cAAC,GAAD,aAAY2O,SAAU3O,GAASL,OACjDq3C,GAAqB/F,YAAc,uBAEnC,IAQe31C,GARiB,SAAC,GAAD,IAAGje,EAAH,EAAGA,SAAaw3B,EAAhB,oCAG9B,aAFA,CAECiiC,GAAD,2BAAejiC,GAAf,IAAqBpH,UAAWoH,EAAKpX,GAAKu5C,QAAuB7uD,EAAjE,SACG9K,M,40BCfE,IAAMwgB,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,MAUhCs9C,GAAezyD,IAAOgW,IAAV,MAEP,qBAAGd,MAAkBC,QAAQ,MAC/B,gBAAGurB,EAAH,EAAGA,QAASxrB,EAAZ,EAAYA,MAAZ,OACZwrB,EAAUxrB,EAAME,QAAQwI,QAAQlB,MAAQxH,EAAME,QAAQC,QAAQhd,QACvD,qBAAGqoC,QAAyB,UAAY,WAGtC1D,GAAsBh9B,IAAOgW,IAAV,MAIhB,qBAAGd,MAAkBC,QAAQ,MAGhCu9C,GAAa1yD,YAAO0qC,MAAM51B,MAAM,CAAE2J,UAAW,GAAhCze,CAAH,MACJ,qBAAGkV,MAAkBC,QAAQ,MAChC,qBAAGD,MAAkBC,QAAQ,MAEhC,qBAAGD,MAAkBE,QAAQy1B,KAAKxyC,QCuChCs6D,ID9BQ3yD,IAAOgW,IAAV,MCxBkD,SAAC,GAEhE,IADL48C,EACI,EADJA,QAEMr7C,EAAUC,cAoChB,OACE,cAAC,GAAD,UACGo7C,EAAQ9qD,OAAS,EAChB,mCAAG8qD,EAAQroD,KAAI,SAACsoD,GAAD,OArCI,SAACA,GAAqC,IAAD,IACtDzE,EAAgBznD,YAAO,IAAIrB,KAAKutD,EAAOttD,MAAQ,IAAK,YACpD4lC,EAAQ,UAAMijB,EAAN,sBAAuByE,EAAOryB,iBAA9B,iBAAuB,EAAkBx+B,YAAzC,aAAuB,EAAwBjI,MAC7D,OACE,eAAC24D,GAAD,CAAY/xC,cAAA,sBAA4BkyC,EAAO7zD,IAA/C,UACE,cAACyzD,GAAD,CAAc/xB,QAASh2B,QAAQmoD,EAAOnyB,SAAtC,SACE,cAACnoB,GAAA,EAAD,CAAYxD,QAAQ,UAApB,SACG89C,EAAOnyB,QAAU,WAAa,gBAGnC,cAACoyB,GAAA,EAAD,CACEnyC,cAAA,sBAA4BkyC,EAAO7zD,IACnCoZ,QAAS,WACPb,EAAQjP,KAAR,qBAA2BuqD,EAAO7zD,MAHtC,SAME,cAAC+zD,GAAA,EAAD,CACEC,qBAAsB,CACpBj+C,QAAS,SAEXk+C,yBAA0B,CACxBl+C,QAAS,UACTmD,MAAO,WAETg7C,OAAQ,cAAC,KAAD,IACRxpD,OAAQ,cAAC,KAAD,IACRpF,MAAOuuD,EAAOvuD,MACd6uD,UAAWhoB,QAvByC0nB,EAAO7zD,IAiCpCo0D,CAAiBP,QAE5C,cAAC,GAAD,UACE,cAACt6C,GAAA,EAAD,CAAYxD,QAAQ,YAApB,yE,oJC7DH,IAAMsE,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MCiGpCk+C,GArFsB,WAAO,IAClC9wD,EAAaI,qBAAWd,IAAxBU,SADiC,EAEEi/B,KAAnCC,EAFiC,EAEjCA,eAAgBt/B,EAFiB,EAEjBA,QAASqH,EAFQ,EAERA,MAC3B4B,EAASuzB,cACTxzB,EAAY2Z,SAAS1Z,EAAOD,WAJO,EAKXpJ,qBALW,mBAKlC61B,EALkC,KAKzBgK,EALyB,OAMjB7/B,mBAAS,GANQ,mBAMlC27B,EANkC,KAM5BC,EAN4B,OAOa57B,mBAEpD,IATuC,mBAOlCuxD,EAPkC,KAObC,EAPa,KAWpBC,EACjBvpD,GAAa,uBADfU,kBAGFjK,qBAAU,WACR+yD,MACC,IAEH/yD,qBAAU,WACRgzD,MACC,CAACh2B,IAEJ,IAAMg2B,EAAuB,uCAAG,sBAAAp3D,EAAA,sDAC1B6O,GACFs2B,EAAet2B,EAAW,CACxBuyB,OACAd,MAAO,GACPgV,QAAS,OACTsgB,MAAO,SAEN/uD,MAAK,SAACtF,GACL,IAAM81D,EAAgB91D,EAAKmM,QAEzBupD,EADW,IAAT71B,EACqBi2B,EAEA,GAAD,oBAAKL,GAAL,aAA6BK,QAGtDz2D,OAAM,kBACL+D,IAAMxG,MAAM,2DAjBY,2CAAH,qDA0BvBg5D,EAAoB,WAAO,IAAD,EACxBG,EAAiB,OAAGrxD,QAAH,IAAGA,GAAH,UAAGA,EAAUP,YAAb,aAAG,EAAgB81B,SACpCF,EAAO,OAAGg8B,QAAH,IAAGA,OAAH,EAAGA,EAAmBrnD,MACjC,SAACqrB,GAAD,OAAaA,EAAQ54B,KAAOmM,KAE9By2B,EAAWhK,IAGb,OACE,qCACE,cAAC,GAAD,CACEtzB,MAAK,6CAAwC,OAAPszB,QAAO,IAAPA,OAAA,EAAAA,EAAS79B,OAAQ,IACvD0wB,eAAe,WAEjB,eAAC,GAAD,WACE,cAAC,GAAD,CAAwBmoC,QAASU,IAChCnxD,GAAW,cAAC,GAAD,CAAiBA,SAAO,IACnCmxD,EAAoBxrD,OAAS0B,GAC5B,cAAC,GAAD,CACEmX,cAAY,YACZ/H,KAAK,SACLV,MAAM,UACNE,QA1BY,WACpBulB,EAAQD,EAAO,IAqBT,sBASD81B,GACC,cAAC,GAAD,CAAKv6C,GAAE,wCAAmC9N,GAA1C,SACE,cAAC,KAAD,a,46BCtFL,IAAMssB,GAAOz3B,YAAO03B,KAAP13B,CAAH,MAOJ++B,GAAgB/+B,IAAOgW,IAAV,MACZ,qBAAGd,MAAkBC,QAAQ,MAiB9B+5B,IAdclvC,IAAOgW,IAAV,MAQKhW,YAAO4U,GAAP5U,CAAH,MACP,qBAAGkV,MAAkBC,QAAQ,MAKtBnV,YAAOovB,GAAPpvB,CAAH,OAOVqiB,GAAYriB,YAAOwmB,GAAPxmB,CAAH,MCwGP6zD,GAlHqC,SAAC,GAG9C,IAFL1zB,EAEI,EAFJA,cACAC,EACI,EADJA,WAEA,OACE,cAAC,GAAD,UACE,cAAC,KAAD,CACEhb,iBAAkBA,GAClBW,cAAeqa,EACf/Z,kBAAkB,EAClBL,SAAU,WACR,OAAOxnB,QAAQC,WALnB,SAQG,YAAoD,IAAjDi1B,EAAgD,EAAhDA,WAAYzN,EAAoC,EAApCA,OAAQC,EAA4B,EAA5BA,cAAerD,EAAa,EAAbA,OACrC,OACE,eAAC,GAAD,WACE,cAAC,KAAD,CAAyBgN,MAAOC,KAAclpB,OAAQw6B,IAAtD,SACE,cAAC,GAAD,CACErnC,KAAK,OACLoe,MAAM,OACNkpB,YAAY,WACZ1gB,cAAa,aACbtf,MAAO4kB,EAAO1gB,KACdsS,SAAU,SAACtS,GACT2gB,EAAc,OAAQ3gB,GAAM,IAE9BsuB,YAAY,aACZ3b,MAAM,QACNuO,OAAO,SACPC,WAAY,CACV,cAAe,OACfrO,UAAU,EACVy7C,kBAAkB,GAEpB5wC,WAAYL,EAAOtd,KACnBgqB,OAAQmE,EACRI,gBAAiB,CAAEC,QAAQ,GAC3BsM,UAAU,EACVhoB,UAAU,EACVtD,QAAQ,SACRua,aAAa,eAGjB,cAAC,GAAD,CACEv1B,KAAK,QACLoe,MAAM,YACNyb,mBAAoB,CAClB,cAAe,SAEjB1b,MAAM,QACNG,UAAU,EACVtD,QAAQ,WACRmY,mBAAmB,WATrB,SAWGiS,GAAa50B,KAAI,SAACiC,GAAD,OAChB,cAAC,GAAD,CAEEnL,MAAOmL,EAAKnL,MACZ6W,MAAM,QAHR,SAKG1L,EAAK2L,OAJD3L,EAAKnL,YAQhB,cAAC,GAAD,CACE6W,MAAM,QACNlZ,GAAG,YACH0nB,WAAY,CAAE,cAAe,aAC7BvO,MAAM,8BACNpe,KAAK,YACL0sB,OAAO,SACPzD,aAAa,MACb3K,UAAQ,EACRtD,QAAQ,aAEV,cAAC,GAAD,CACEhb,KAAK,gBACLoe,MAAM,gCACNyb,mBAAoB,CAClB,cAAe,iBAEjB1b,MAAM,QACN7W,OAAiB,OAAV++B,QAAU,IAAVA,OAAA,EAAAA,EAAYlB,gBAAiBjZ,EAAOiZ,cAC3C7mB,UAAU,EACVtD,QAAQ,WACRmY,mBAAmB,WAVrB,SAYGiT,EAAc51B,KAAI,SAACiC,GAAD,OACjB,cAAC,GAAD,CAA8BnL,MAAOmL,EAAKxN,GAAIkZ,MAAM,QAApD,SACG1L,EAAKzS,MADayS,EAAKxN,SAK9B,cAAC,GAAD,CACEkZ,MAAM,QACNlZ,GAAG,cACHi1B,WAAS,EACTvN,WAAY,CAAE,cAAe,cAAe4a,UAAW,KACvDnpB,MAAM,kBACNpe,KAAK,cACL0sB,OAAO,SACPzD,aAAa,MACb3K,UAAQ,EACRtD,QAAQ,sB,oJClIjB,IAAMsE,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MCAtC4+C,GAAsC,SACjDlB,GACgB,IAAD,MACf,MAAO,CACLryB,WAAiB,OAANqyB,QAAM,IAANA,GAAA,UAAAA,EAAQryB,iBAAR,mBAAmBx+B,YAAnB,eAAyBjI,OAAQ,GAC5CuK,OAAa,OAANuuD,QAAM,IAANA,OAAA,EAAAA,EAAQvuD,QAAS,GACxB4L,aAAmB,OAAN2iD,QAAM,IAANA,OAAA,EAAAA,EAAQ3iD,cAAe,GACpC3K,MAAY,OAANstD,QAAM,IAANA,OAAA,EAAAA,EAAQttD,OAAQ,GACtB25B,eAAqB,OAAN2zB,QAAM,IAANA,GAAA,UAAAA,EAAQmB,wBAAR,eAA0Bh1D,KAAM,EAC/C0hC,SAAe,OAANmyB,QAAM,IAANA,OAAA,EAAAA,EAAQnyB,WAAW,ICsIjBuzB,GA7H0B,WAAO,IAAD,IACvC18C,EAAUC,cAD6B,EAKzClE,KAFFG,EAH2C,EAG3CA,oBACSygD,EAJkC,EAI3C/xD,QAJ2C,EAMGq/B,KAAxCn2B,EANqC,EAMrCA,QAASq2B,EAN4B,EAM5BA,WAAYv/B,EANgB,EAMhBA,QAASiR,EANO,EAMPA,MAChChI,EAASuzB,cACTw1B,EAAWrvC,SAAS1Z,EAAOpM,IARY,EASjB+C,qBATiB,mBAStC8wD,EATsC,KAS9BuB,EAT8B,OAUFryD,qBAVE,mBAUtCsyD,EAVsC,KAUtBC,EAVsB,OAWLvyD,oBAAS,GAXJ,mBAWtCwyD,EAXsC,KAWxBC,EAXwB,OAYHzyD,mBACxC,IAb2C,mBAYtCo+B,EAZsC,KAYvB0B,EAZuB,OAeI53B,GAC/C,uBADMc,EAfqC,EAerCA,kBAAmBH,EAfkB,EAelBA,kBAI3BlK,qBAAU,WACR+zD,MACC,IAEH,IAAMA,EAAwB,uCAAG,sBAAAn4D,EAAA,sDAC3B63D,GACF9oD,EAAQ8oD,GACLhxD,MAAK,SAACtF,GACLu2D,EAAUv2D,GACVy2D,EAAiBP,GAAoCl2D,IACrD62D,EAAoB72D,MAErBX,OAAM,kBACL+D,IAAMxG,MAAM,0DATa,2CAAH,qDAcxBi6D,EAAsB,SAAC7B,GACvBA,EAAOmB,mBAAqBnB,EAAOnyB,QACrCmB,EAAiB,CAACgxB,EAAOmB,mBAEzBlyB,KAIEA,EAAiB,uCAAG,8BAAAxlC,EAAA,sEACKmX,IAAsBvW,OAAM,kBACvD+D,IAAMxG,MAAM,mDAFU,OAClB0lC,EADkB,OAQlB6B,EARkB,CAIkB,CACxChjC,GAAI,EACJjF,KAAM,YANgB,oBAQsBomC,IAC9C0B,EAAiBG,GATO,2CAAH,qDAYjB2yB,EAA8B,uCAAG,WAAO31D,GAAP,SAAA1C,EAAA,yDACrCk4D,GAAgB,IACZx1D,EAFiC,gCAG7B0iC,EAAW1iC,GACdmE,MAAK,SAACyxD,GACL,KAAIA,EAAc,GAGhB,MAAM,IAAI9wD,MAFV7C,IAAMmlB,QAAQ,kDAKjBlpB,OAAM,WACL+D,IAAMxG,MAAM,wEAZmB,OAcnC8c,EAAQqJ,SAd2B,2CAAH,sDAkB9BqvC,EAAY,uCAAG,WAAO7vB,GAAP,SAAA9jC,EAAA,sDACnB8W,EAAM+gD,EAAU/zB,GACbj9B,MAAK,WACJlC,IAAMmlB,QAAQ,iDACd7O,EAAQqJ,YAET1jB,OAAM,kBAAM+D,IAAMxG,MAAM,wDANR,2CAAH,sDASlB,OACE,qCACE,cAAC,GAAD,CACE6J,MAAK,6CAAuC,OAANuuD,QAAM,IAANA,GAAA,UAAAA,EAAQj7B,eAAR,eAAiB79B,OAAQ,IAC/D0wB,eAAe,SACftK,gBACEvV,IAAiB,OAAIypD,QAAJ,IAAIA,OAAJ,EAAIA,EAAgB3zB,SAAU,cAAW/8B,EAE5Dyc,eAAgB,kBAAMo0C,GAAgB,MAExC,eAAC,GAAD,WACGryD,GAAW+xD,IAAyBG,EACnC,cAAC,GAAD,CAAiBlyD,SAAO,IACtBkyD,EAAe3zB,QACjB,cAAC7f,GAAD,CAAgBxI,UAAWtN,EAA3B,SACE,cAAC,GAAD,CACEo1B,cAAeA,EACfC,WAAYi0B,EACZn0B,OAAQ3oB,EAAQqJ,OAChBqf,OAAQgwB,EACR9kD,UAAWzD,OAAM,OAACmrD,QAAD,IAACA,GAAD,UAACA,EAAQj7B,eAAT,aAAC,EAAiB54B,IACnCqhC,UAAWt1B,MAIf,cAAC,GAAD,CACEo1B,cAAeA,EACfC,WAAYi0B,IAGhB,cAAC,GAAD,CACE99C,KAAMg+C,EACNxO,SAAU,kBAAMyO,GAAgB,IAChCxO,UAAW,kBAAM2O,EAA8B,OAAC9B,QAAD,IAACA,OAAD,EAACA,EAAQ7zD,KACxDsF,MAAM,kE,ytDCtIT,IAAM+U,GAAYrZ,YAAO60D,KAAP70D,CAAH,MAKH,qBAAGkV,MAAkBC,QAAQ,MAGnC2/C,GAAc90D,IAAO6vD,QAAV,MAMX3wC,GAAQlf,YAAOuY,KAAPvY,CAAH,MACP,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QAC/B,qBAAG6c,MAAkB8B,WAAW4yB,kBAKpCmR,GAAY/6C,YAAO+0D,KAAP/0D,CAAH,MAGL,qBAAGkV,MAAkBC,QAAQ,MAGjCw0B,GAAO3pC,YAAOuY,KAAPvY,CAAH,MAIb,sBAAGg1D,eAAuC,oCAG1B,qBAAG9/C,MAAkBC,QAAQ,OAIpC8/C,GAAcj1D,IAAOgW,IAAV,MAOXkG,GAAkBlc,IAAOgW,IAAV,MACxB,qBAAGk/C,YACQ,gOAUP,MAMK1M,GAAaxoD,YAAO6U,KAAP7U,CAAH,MACV,qBAAGkV,MAAkBC,QAAQ,GAAK,OAKzC,qBAAGD,MAAkBE,QAAQC,QAAQhd,QACrC,qBAAG6c,MAAkBE,QAAQI,UAAU9c,QAIhC03B,GAAiBpwB,YAAOgZ,KAAPhZ,CAAH,MAChB,qBAAGkV,MAAkBE,QAAQE,OAAOC,SACzB,qBAAGL,MAAkBE,QAAQC,QAAQhd,QAGrD,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QACrC,qBAAG6c,MAAkBE,QAAQI,UAAU9c,QAE1B,qBAAGwc,MAAkBC,QAAQ,QAC7B,qBAAGD,MAAkBC,QAAQ,QAKxB,qBAAGD,MAAkBE,QAAQC,QAAQhd,Q,oBC/EhD88D,GAA6B,SACxChkB,GAEA,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAmBiQ,MAAK,SAAC9kD,EAAG84D,GAAJ,OAC7BC,GAA6B/4D,GAAK+4D,GAA6BD,GAAK,GAAK,MAIvEC,GAA+B,SACnCC,GADmC,OAER,OAAhBA,QAAgB,IAAhBA,OAAA,EAAAA,EAAkB5oD,YAAa,IAoB/B6oD,GAA4B,SAACvtD,GACxC,IAAKA,EAAUX,UAAW,MAAO,GAEjC,IAAMA,EAAY,IAAI/B,KAAK0C,EAAUX,WAE/BC,EAAQX,YAAOU,EAAW,SAEhC,IAAKW,EAAU2mC,QAAS,OAAOrnC,EAE/B,IAAMqnC,EAAU,IAAIrpC,KAAK0C,EAAU2mC,SAE7BhC,EAAMhmC,YAAOgoC,EAAS,SAE5B,MAAM,GAAN,OAAUrnC,EAAV,mBAAuBqlC,IAGZ6oB,GAA4B,SACvCxtD,EACAP,GAEA,SAAKO,IAAcP,IAEZO,EAAUP,cAAgBA,GAGtBguD,GAAuB,SAAC,GAAD,IAClCtkB,EADkC,EAClCA,kBADkC,QAEPA,GAAqBA,EAAkBrpC,OAAS,GCxCvE4tD,GAAaC,aAAW,CAC5B5Z,MAAO,CACLh0B,OAAQ,OACRtO,gBAAiB,gBAHFk8C,EAKhB,SAACx6C,GAAD,OACD,cAACygB,GAAA,EAAD,aACEnd,UAAW,EACXm3C,mBAAoB,KACpBC,aAAc,CACZC,SAAU,SACVC,WAAY,SAEdC,gBAAiB,CACfF,SAAU,MACVC,WAAY,UAEV56C,OAIK86C,GAAwD,SAAC,GAK/D,IAJL1lD,EAII,EAJJA,MACAvI,EAGI,EAHJA,UACAP,EAEI,EAFJA,YACA6D,EACI,EADJA,QACI,EAC4BmkB,IAAM1tB,SAA6B,MAD/D,mBACGm0D,EADH,KACaC,EADb,KAEI5zD,EAAaI,qBAAWd,IAAxBU,SAFJ,EAGgCktB,IAAM1tB,UAAS,GAH/C,mBAGGuiD,EAHH,KAGeC,EAHf,KASEhtC,EAAUC,cAuBV4+C,EAA4B3rD,mBAAQ,WAAO,IACvC0mC,EAA0DnpC,EAA1DmpC,kBAAmBzkC,EAAuC1E,EAAvC0E,UAAWjF,EAA4BO,EAA5BP,YAAa4uD,EAAeruD,EAAfquD,WAEnD,IAAK3pD,EAAW,OAAO,EAEvB,IAAM4pD,IACFnlB,GACFA,EAAkBrpC,OAAS,GAC3BqpC,EAAkB5kC,MAAK,qBAAG8kC,eAA6B,OAAK9uC,QAAL,IAAKA,OAAL,EAAKA,EAAUvD,OAElEu3D,EAAqBC,aAAQC,aAAW,IAAInxD,KAAKoH,IAAa,GAE9DK,EAAM,IAAIzH,KAEhB,OACGgxD,IACAD,GACD5uD,KAAW,OAAKlF,QAAL,IAAKA,OAAL,EAAKA,EAAUvD,KAC1B61C,aAAS9nC,EAAKwpD,KAEf,CAACvuD,EAAWzF,IAEf,OACE,eAAC,GAAD,CAAWoe,cAAA,+BAAqCpQ,GAAhD,UACE,eAACukD,GAAD,WACE,eAAC,GAAD,CAAOn0C,cAAY,6BAAnB,4BACYpQ,EAAQ,EAAG,IACpBklD,GAAqBztD,IACpB,cAAC+yC,GAAD,CAAWp6B,cAAY,uCAG3B,cAAC,GAAD,CACEA,cAAY,4BACZq0C,gBAAiBhtD,EAAUquD,WAF7B,SAIE,4BAAId,GAA0BvtD,UAGjCwtD,GAA0BxtD,EAAWP,IACpC,cAACwtD,GAAD,UACE,eAAC,GAAD,CAAiBC,YAAa5Q,EAA9B,UACE,cAAC,GAAD,CACE+M,gBAAc,cACdC,gBAAc,OACdv8C,QAAQ,YACRmD,MAAM,UACNE,QA1EQ,SAACmQ,GACnB4tC,EAAY5tC,EAAMmuC,eAClBnS,GAAc,IAyEJ5jC,cAAa,mCANf,SAQE,cAAC,KAAD,CAAUzJ,SAAS,YAErB,eAACw+C,GAAD,CACE12D,GAAG,cACHk3D,SAAUA,EACVS,aAAW,EACXpgD,KAAM7L,QAAQwrD,GACd3+B,QA7EQ,WAClB4+B,EAAY,MACZ5R,GAAc,IA4EJqS,cAAY,4BANd,YAQKR,GACD,cAAC,GAAD,CACEh+C,QAAS,YAtEkB,SACzC9M,EACAogC,GAEAn0B,EAAQjP,KAAR,wCACmCgD,EADnC,qBACuDogC,EADvD,UAmEgBmrB,CACEnvD,OAAO4D,GACP5D,OAAOM,EAAUhJ,MAJvB,kCAWF,cAAC,GAAD,CACEoZ,QAAS,kBAxF8B,SACnD9M,EACAogC,GAEAn0B,EAAQjP,KAAR,0CAAgDgD,EAAhD,YAA2DogC,IAqF7CorB,CACEpvD,OAAO4D,GACP5D,OAAOM,EAAUhJ,MAJvB,sC,kcC9JP,IAAMqa,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,MAKnC4hD,GAAgB/2D,IAAOgW,IAAV,MAIN,qBAAGd,MAAkBC,QAAQ,MAGpC+uC,GAAUlkD,IAAOgrB,GAAV,MACE,qBAAG9V,MAAkBE,QAAQE,OAAO2L,SAC/C,qBAAG/L,MAAkBE,QAAQE,OAAO2L,S,0mDCbxC,IAAM+1C,GAAoBh3D,IAAOgW,IAAV,MACjB,gBAAGd,EAAH,EAAGA,MAAO+hD,EAAV,EAAUA,cAAV,OACT/hD,EAAMC,QAAQ,EAAG8hD,EAAgB,EAAI,EAAG,MAG/BC,GAAiBl3D,IAAOgW,IAAV,MAEL,qBAAGd,MAAkBE,QAAQK,KAAK,QAM3C0hD,GAAqBn3D,IAAOgW,IAAV,MAGlB,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,MAGnCiiD,GAAYp3D,IAAOgW,IAAV,MAWTqhD,GAA6Br3D,IAAOgW,IAAV,MAOnC,YAA0B,IAAvBd,EAAsB,EAAtBA,MACH,MAA2B,aADF,EAAfoiD,SACM13D,OACZuvB,YADG,KAEmBja,EAAME,QAAQC,QAAQhd,MAG5C82B,YALG,KAMmBlT,IAAI,SAKxB,qBAAGq7C,SAAwBC,sBAC1B,qBAAGD,SAAwBE,sBAGzBC,GAAkBz3D,IAAOgW,IAAV,MACZ,qBAAGd,MAAkBC,QAAQ,MAIhC,qBAAGD,MAAkBC,QAAQ,QAC1B,qBAAGD,MAAkBC,QAAQ,MAGhCuiD,GAAS13D,IAAOgW,IAAV,MAKN2hD,GAAc33D,IAAO+d,KAAV,MAEX65C,GAAc53D,IAAOgW,IAAV,MAIF,qBAAGkC,SACP,qBAAGhD,MAAkBC,QAAQ,M,oBCtElC0iD,GAAsC,SAACtyD,GAIlD,IAAMuyD,EAAcC,aAAS,IAAIzyD,KAAKC,GAAO,GAM7C,OALsBoB,aAEpBqxD,GAAoBF,GACpB,UAUSG,GAA2C,SACtD1yD,GAKA,IAAMuyD,EAAcC,aAAS,IAAIzyD,KAAKC,GAAO,GAM7C,OALsBoB,aAEpBqxD,GAAoBF,GACpB,aAUSE,GAAsB,SAACzyD,GAAD,OACjCiP,YAAW,IAAIlP,KAAKC,GAAO,IAAID,KAAKC,GAAM2yD,sBC6C7BC,GAlEuD,SAAC,GAGhE,IAFLC,EAEI,EAFJA,SACA7xD,EACI,EADJA,MAEM2O,EAAQqK,cAEd,OAAKhZ,GAAU6xD,EAGb,qCACE,cAACjB,GAAD,YACK5wD,EAAMgO,oBAAsBhO,EAAMmO,gBACnC,qCACE,eAAC0iD,GAAD,WACE,4BACGa,GACC1xD,EAAMgO,oBAGV,4BACGsjD,GAAoCtxD,EAAMgO,uBAG/C,eAAC6iD,GAAD,WACE,4BACGa,GAAyC1xD,EAAMmO,kBAElD,4BAAImjD,GAAoCtxD,EAAMmO,0BAKtD,eAACsiD,GAAD,CACEC,gBAAiB1wD,EAAMgO,oBAAsBhO,EAAMmO,eACnDiM,cAAY,WAFd,UAIE,cAACu2C,GAAD,UACGkB,EAAS7tD,KAAI,SAAC+sD,EAAU/mD,GAAX,OACZ,cAAC8mD,GAAD,CAEE12C,cAAY,qBACZ22C,SAAUA,GAFL/mD,QAMX,eAACknD,GAAD,WACE,eAACC,GAAD,WACE,cAACE,GAAD,CAAa1/C,MAAOhD,EAAME,QAAQK,KAAK,OACvC,cAACkiD,GAAD,uBAEF,eAACD,GAAD,WACE,cAACE,GAAD,CAAa1/C,MAAOhD,EAAME,QAAQC,QAAQhd,OAC1C,cAACs/D,GAAD,yBAEDS,EAASrwD,MAAK,kBAA2B,qBAA3B,EAAGnI,WAChB,eAAC83D,GAAD,WACE,cAACE,GAAD,CAAa1/C,MAAO+D,IAAI,OACxB,cAAC07C,GAAD,oDAnDoB,MCqDnBU,GA/DqB,WAAO,IAAD,EAClC9gD,EAAUC,cACVpM,EAASuzB,cACPp8B,EAAaI,qBAAWd,IAAxBU,SACF+I,EAAUwZ,SAAS1Z,EAAOE,SAJQ,EAMdvJ,qBANc,mBAMjCwE,EANiC,KAM1BwqC,EAN0B,OAOUhvC,wBAEhD4B,GATsC,mBAOjC20D,EAPiC,KAOdC,EAPc,OAUEttD,KAAlCI,EAVgC,EAUhCA,QAASQ,EAVuB,EAUvBA,YAAa1J,EAVU,EAUVA,QAExB+7B,EAAY,WACZ5yB,GACFD,EAAQC,GACLnI,MAAK,SAAC5H,GACLw1C,EN/BiB,SAACxqC,GAC1B,OAAO,2BACFA,GADL,IAEE4qC,kBAAmBgkB,GAA0B,OAAC5uD,QAAD,IAACA,OAAD,EAACA,EAAO4qC,qBM4BtCqnB,CAAYj9D,OAEtB2B,OAAM,SAAC4a,GACN7W,IAAMxG,MAAMqd,OAYpB,OAPApX,qBAAU,WACRw9B,IACAryB,EAAYP,GAASnI,MAAK,SAACtF,GACzB06D,EAAqB16D,QAEtB,CAACyN,IAGF,qCACE,cAAC,GAAD,CACEhH,MAAO,gCACP+b,cAAe,kBAAM9I,EAAQqJ,YAE/B,eAAC,GAAD,WACGze,GAAW,cAAC,GAAD,CAAiBA,SAAO,MACjCoE,KAAW+xD,GACZ,cAAC,GAAD,CAAwB/xD,MAAOA,EAAO6xD,SAAUE,IAElD,cAACvB,GAAD,oBACGpM,kBAAM,OAACpkD,QAAD,IAACA,OAAD,EAACA,EAAOsB,YAAY,qBAAGR,oBADhC,aACG,EAAyDkD,KACxD,SAACvC,EAAWuI,GAAZ,OACE,qCACa,IAAVA,GAAe,cAAC,GAAD,IAChB,cAAC,GAAD,CACEjF,QAASA,EACT7D,YAAW,OAAElF,QAAF,IAAEA,OAAF,EAAEA,EAAUvD,GACvBgJ,UAAWA,EACXuI,MAAOA,GAJT,+BAK+BA,mBCvElCkoD,GAAmB,SAAClzD,GAC/B,OAAKA,EAGEoB,YAAO,IAAIrB,KAAKC,GAAO,aAAc,CAC1CqB,OAAQC,MAHD,wBAME6xD,GAAmB,SAACC,GAC/B,OAAKA,EAGEhyD,YAAO,IAAIrB,KAAKqzD,GAAO,SAFrB,wB,ouECTX,IAAMC,GAAiBzpC,YAAH,MACT,qBAAGja,MAAkBE,QAAQC,QAAQ3c,QAKnCmgE,GAAgB74D,IAAOgW,IAAV,MAKN,qBAAGd,MAAkBC,QAAQ,MAKpC24B,GAAkB9tC,YAAO64D,GAAP74D,CAAH,MACV,qBAAGkV,MAAkBC,QAAQ,EAAG,MAGrC2jD,GAA6B94D,IAAOgW,IAAV,MACjB,qBAAGd,MAAkBE,QAAQK,KAAK,QACrC,qBAAGP,MAAkBC,QAAQ,MAGnC4jD,GAAW/4D,IAAOgW,IAAV,MAGF,qBAAGd,MAAkBC,QAAQ,OAGnC6jD,GAAkBh5D,IAAOgW,IAAV,MAGnB,qBAAGd,MAAkBC,QAAQ,OACnB,qBAAGD,MAAkBC,QAAQ,OAGnC8jD,GAAej5D,YAAOuY,KAAPvY,CAAH,MAGhB,qBAAGkV,MAAkBC,QAAQ,OACnB,qBAAGD,MAAkBC,QAAQ,OAGnC+jD,GAAYl5D,YAAOuY,KAAPvY,CAAH,MACX,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAE/B,qBAAGwc,MAAkB8B,WAAW4yB,kBAG9B,qBAAG10B,MAAkBC,QAAQ,QAInCgkD,GAAcn5D,YAAOuY,KAAPvY,CAAH,MACb,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAG/B,qBAAGwc,MAAkB8B,WAAW4yB,kBACjC,qBAAG10B,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,OAGnCikD,GAAiBp5D,YAAOuY,KAAPvY,CAAH,MAChB,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QAC/B,qBAAG6c,MAAkB8B,WAAW4yB,kBAC9B,qBAAG10B,MAAkBC,QAAQ,OAGnCgnC,GAAmBn8C,YAAOuY,KAAPvY,CAAH,MAIhBq5D,GAAkBr5D,YAAOm8C,GAAPn8C,CAAH,MAMfkkD,GAAUlkD,IAAOgrB,GAAV,MACE,qBAAG9V,MAAkBE,QAAQC,QAAQ3c,QACrC,qBAAGwc,MAAkBE,QAAQC,QAAQ3c,QAC/C,qBAAGwc,MAAkBC,QAAQ,OAI5BmkD,GAAsBt5D,YAAOuY,KAAPvY,CAAH,MACrB,qBAAGkV,MAAkBE,QAAQC,QAAQhd,QAE9B,qBAAG6c,MAAkBC,QAAQ,MAGlCokD,GAAkBv5D,YAAOw5D,KAAPx5D,CAAH,KACxB44D,IAGSa,GAAqBz5D,YAAO05D,KAAP15D,CAAH,KAC3B44D,ICxCWe,GA3C6C,SAAC,GAEtD,IAAD,IADJ1oB,EACI,EADJA,eAEM2oB,EAAgBnB,GAAiBxnB,EAAe5pC,WAChDwyD,EAAgBnB,GAAiBznB,EAAe5pC,WAEhDyyD,EAAcrB,GAAiBxnB,EAAetC,SAC9CorB,EAAcrB,GAAiBznB,EAAetC,SAEpD,OACE,cAACmqB,GAAD,UACE,eAAC,GAAD,WACE,eAACE,GAAD,WACE,eAACD,GAAD,WACE,cAACK,GAAD,mCACA,eAACH,GAAD,CAAct4C,cAAY,6BAA1B,UACE,cAAC84C,GAAD,IADF,IAC0BG,KAE1B,eAACX,GAAD,CAAct4C,cAAY,6BAA1B,UACE,cAAC44C,GAAD,IADF,IACuBM,QAGzB,eAACd,GAAD,WACE,cAACK,GAAD,6BACA,eAACH,GAAD,CAAct4C,cAAY,2BAA1B,UACE,cAAC84C,GAAD,IADF,IAC0BK,KAE1B,eAACb,GAAD,CAAct4C,cAAY,2BAA1B,UACE,cAAC44C,GAAD,IADF,IACuBQ,WAI3B,eAAChB,GAAD,WACE,cAACK,GAAD,6BACA,cAACC,GAAD,iBACGpoB,QADH,IACGA,GADH,UACGA,EAAgBzQ,iBADnB,iBACG,EAA2Bx+B,YAD9B,aACG,EAAiCjI,gBCd/BigE,GAzBmC,SAAC,GAAqB,IAAD,EAAlBC,EAAkB,EAAlBA,YAC7CC,EAAgBzB,GAAiBwB,EAAYvtD,WAC7CytD,EAAgBzB,GAAiBuB,EAAYvtD,WAE7C0tD,GAA2B,OAAXH,QAAW,IAAXA,OAAA,EAAAA,EAAa5D,YAAa,UAAY,aAE5D,OACE,qCACE,eAAC6C,GAAD,CAAWv4C,cAAY,8BAAvB,4BACYy5C,EADZ,KAC6BF,EAD7B,MAC+CC,EAD/C,OAGA,eAACpB,GAAD,WACE,cAACK,GAAD,6BACA,cAACC,GAAD,oBAAkBY,EAAYI,kBAA9B,aAAkB,EAAwBtgE,aAE1C,OAACkgE,QAAD,IAACA,OAAD,EAACA,EAAa5D,aACd,eAAC0C,GAAD,WACE,cAACK,GAAD,4BACA,cAAC,GAAD,UAAmBa,EAAY/pD,qBCsC1BoqD,GAnDmD,SAAC,GAG5D,IAAD,EAFJhF,EAEI,EAFJA,iBACAiF,EACI,EADJA,mBAEMX,EAAgBnB,GAAiBnD,EAAiBjuD,WAClDwyD,EAAgBnB,GAAiBpD,EAAiBjuD,WAElDyyD,EAAcrB,GAAiBnD,EAAiB3mB,SAChDorB,EAAcrB,GAAiBpD,EAAiB3mB,SAEhDurB,EAAgBzB,GAAiBnD,EAAiB5oD,WAClDytD,EAAgBzB,GAAiBpD,EAAiB5oD,WAExD,OACE,qCACE,eAACwsD,GAAD,6BACYqB,EADZ,OACoCL,EADpC,MACsDC,EADtD,OAGA,eAACpB,GAAD,WACE,cAACK,GAAD,6BACA,cAACC,GAAD,oBAAkB/D,EAAiBkF,iBAAnC,aAAkB,EAA4BzgE,UAEhD,eAACi/D,GAAD,WACE,eAACD,GAAD,WACE,cAACK,GAAD,wBACA,eAACH,GAAD,CAAct4C,cAAY,kBAA1B,UACE,cAAC84C,GAAD,IADF,IAC0BG,KAE1B,eAACX,GAAD,CAAct4C,cAAY,kBAA1B,UACE,cAAC44C,GAAD,IADF,IACuBM,QAGzB,eAACd,GAAD,WACE,cAACK,GAAD,kBACA,eAACH,GAAD,CAAct4C,cAAY,gBAA1B,UACE,cAAC84C,GAAD,IACCK,KAEH,eAACb,GAAD,CAAct4C,cAAY,gBAA1B,UACE,cAAC44C,GAAD,IADF,IACuBQ,WAI3B,eAAChB,GAAD,WACE,cAACK,GAAD,4BACA,cAAC,GAAD,UAAmB9D,EAAiB1mB,uBCuD7B6rB,GA/FgC,WAAO,IAAD,MACzB14D,qBADyB,mBAC5CwE,EAD4C,KACrCwqC,EADqC,OAGlBpS,cAAzBrzB,EAH2C,EAG3CA,QAASogC,EAHkC,EAGlCA,YAHkC,EAItBzgC,KAArBI,EAJ2C,EAI3CA,QAASlJ,EAJkC,EAIlCA,QAEjBzB,qBAAU,WACR2K,EAAQ3D,OAAO4D,IAAUnI,MAAK,SAACoD,GAC7BwqC,EAASxqC,QAEV,CAAC+E,IAEJ,IAAMovD,EAA6B,SAAC1yD,GAClC,OAAOA,EAAUhJ,MAAQ0sC,GAGrBivB,EAAmB,SAACC,GACxB,OAAOjQ,kBAAOiQ,GAAY,qBAAGluD,cAGzBukC,EAAc,OAAG1qC,QAAH,IAAGA,GAAH,UAAGA,EAAOsB,kBAAV,aAAG,EAAmB0E,KAAKmuD,GAEzCG,EAAe,OAAGt0D,QAAH,IAAGA,GAAH,UAAGA,EAAOsB,kBAAV,aAAG,EAAmBmhC,UACzC0xB,GAGIvpB,EAAoBwpB,EAAgB,OAAC1pB,QAAD,IAACA,OAAD,EAACA,EAAgBE,mBAErD2pB,EAAeH,EAAgB,OAAC1pB,QAAD,IAACA,OAAD,EAACA,EAAgB6pB,cAEhDC,IAAyB5pB,EAAkBrpC,OAE3CkzD,IAAoBF,EAAahzD,OAEvC,OACE,qCACG3F,GAAW,cAAC,GAAD,CAAiBA,SAAO,IACpC,cAAC,GAAD,CAAQmC,MAAK,yBAAcoD,OAAOmzD,GAAmB,MACnDE,IAAyBC,GACzB,cAAC1B,GAAD,iFAIAyB,GAAwBC,IACxB,qCACE,eAAC,GAAD,WACE,cAACjC,GAAD,UACE,cAAC,GAAD,CAAkB7gD,MAAM,UAAUkH,MAAM,SAAxC,0JAKF,cAAC25C,GAAD,UACE,cAACI,GAAD,qCAGJ,cAAC,GAAD,CACEloB,eAAgBA,IAElB,cAACkoB,GAAD,+DAGJ,eAAC,GAAD,WACG6B,GACC,mCACGF,EACEvwD,KAAI,SAAC0vD,EAAa1pD,GAAd,OACH,qCACE,cAAC,GAAD,CAAc0pD,YAAaA,KACf,IAAV1pD,GAAewqD,IAAyB,cAAC,GAAD,UAG7CE,YAGNF,GACC,mCACG5pB,EACE5mC,KAAI,SAAC+qD,EAAkB/kD,GAAnB,OACH,qCACE,cAAC,GAAD,CACE+kD,iBAAkBA,EAClBiF,mBAAoBhqD,EAAQ,IAEnB,IAAVA,GAAe,cAAC,GAAD,UAGnB0qD,mB,mTC9GR,IAAMnwC,GAAkB9qB,IAAOgW,IAAV,MAOfiV,GAAiBjrB,IAAOgW,IAAV,MAGX,qBAAGd,MAAkBC,QAAQ,MAClC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QC6DjCwiE,GA1De,WAAO,IAAD,IACev4D,qBAC/CkR,IADMrM,EAD0B,EAC1BA,gBAAiB4M,EADS,EACTA,oBADS,EAIMzR,qBAAWgR,IAA3CnF,EAJ0B,EAI1BA,SAAUkD,EAJgB,EAIhBA,kBACVhG,EAAgBT,KAAhBS,YACA+C,EAA6BD,IAA7BC,yBAN0B,EAU9BiD,IAFFe,EARgC,EAQhCA,4BACAd,EATgC,EAShCA,4BAEI4F,EAAUC,cACRjV,EAAaI,qBAAWd,IAAxBU,SAEF44D,EAAiB,uCAAG,WAAOl1C,GAAP,iBAAA3pB,EAAA,6DAClBgP,EAAU9D,EAAiBxI,GAC3B2sB,EAAmBvX,EAAqBpV,GAFtB,kBAGjB0M,EAAYJ,EAAS,CAC1B5Q,QAASurB,EAAOvrB,QAChBqX,oBAAqBU,MAEpBtP,MAAK,WACJsL,IACAkD,IACA4F,EAAQnT,QAAR,kCAAmD,CACjDunB,mBAAkBnkB,uBAIrBtK,OAAM,SAACC,GACNC,IAAwBD,GACxB,IAAMoC,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,OAlBQ,2CAAH,sDAsBjB67D,EAAW,+BACfh1D,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,SAAW,cAEpCsC,EAAQ8B,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,GAAK,yBAEhD,OACE,eAAC,GAAD,WACE,cAAC,GAAD,CAAQsC,MAAO82D,EAAa3wC,eAAe,WAC3C,cAAC,GAAD,UACE,cAAClS,GAAA,EAAD,CAAYxD,QAAQ,KAApB,SAA0BzQ,MAE5B,cAAC,GAAD,CACE0hB,SAAUm1C,EACVnwB,UAAW,CAAEE,YAAa,aAC1BnlB,cAAe,CACbrrB,SAA4B,OAAnB0Z,QAAmB,IAAnBA,GAAA,UAAAA,EAAqB1Z,eAArB,eAA8BA,UAAW,U,i9BC/D5D,IAAM2gE,GAAiBlsC,YAAH,MACF,qBAAGja,MAAkBC,QAAQ,MAKlCib,GAAiBpwB,YAAOgZ,KAAPhZ,CAAH,MAChB,qBAAGkV,MAAkBE,QAAQE,OAAOC,SACzB,qBAAGL,MAAkBE,QAAQC,QAAQhd,QAGrD,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QACrC,qBAAG6c,MAAkBE,QAAQI,UAAU9c,QAI1B,qBAAGwc,MAAkBC,QAAQ,QAC7B,qBAAGD,MAAkBC,QAAQ,QAKxB,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAKhD6jB,GAAkBlc,IAAOgW,IAAV,MACxB,qBAAGk/C,YACQ,gNAUP,MAGO,qBAAGhgD,MAAkBC,QAAQ,GAAK,OAGzC,qBAAGD,MAAkBE,QAAQC,QAAQhd,QACrC,qBAAG6c,MAAkBE,QAAQI,UAAU9c,QAOlC4iE,GAAmBt7D,YAAOm5B,KAAPn5B,CAAH,KACzBq7D,IAGSE,GAAqBv7D,YAAOw7D,KAAPx7D,CAAH,KAC3Bq7D,ICxCE3F,GAAaC,aAAW,CAC5B5Z,MAAO,CACLh0B,OAAQ,OACRtO,gBAAiB,gBAHFk8C,EAKhB,SAACx6C,GAAD,OACD,cAACygB,GAAA,EAAD,aACEnd,UAAW,EACXm3C,mBAAoB,KACpBC,aAAc,CACZC,SAAU,SACVC,WAAY,SAEdC,gBAAiB,CACfF,SAAU,MACVC,WAAY,UAEV56C,OAyFOqtC,GArFqC,SAAC,GAAe,IAAD,EAAZjiD,EAAY,EAAZA,MAC/CgR,EAAUC,cACR1L,EAA6Bb,KAA7Ba,yBACAvJ,EAAaI,qBAAWd,IAAxBU,SACAiF,EAAoB7E,qBAAWkR,IAA/BrM,gBAJyD,EAKjCioB,IAAM1tB,SAA6B,MALF,mBAK1Dm0D,EAL0D,KAKhDC,EALgD,OAM7B1mC,IAAM1tB,UAAS,GANc,mBAM1DuiD,EAN0D,KAM9CC,EAN8C,KAO3D98C,EAAcC,OAAM,OAACnF,QAAD,IAACA,GAAD,UAACA,EAAUP,YAAX,aAAC,EAAgBhD,IAExBy8D,EACfxxD,GAAa,0CADfa,gBAmBI4wD,E/U7B6B,SACnCn1D,EACAvE,EACAwF,GAGA,QADsD,aAAjBjB,EAAM3G,QAGvCyG,GAAYrE,KACZ2F,GAA+B3F,EAAMwF,I+UoBZm0D,CAC3Bp1D,EACAhE,EAAUP,KACVwF,GAGIo0D,IACFh0D,GAAqCrB,EAAOkB,IAC9Cg0D,EAEF,OACGC,GACAE,GACA9vD,EAAyBvF,GAO1B,eAAC,GAAD,CACE2uD,YAAa5Q,EACb3jC,cAAA,sBAA4Bpa,EAAMvH,IAFpC,UAIE,cAAC6V,GAAA,EAAD,CACEw8C,gBAAc,cACdC,gBAAc,OACdv8C,QAAQ,YACRmD,MAAM,UACNE,QA7Cc,SAACmQ,GACnB4tC,EAAY5tC,EAAMmuC,eAClBnS,GAAc,IAsCZ,SAOE,cAAC,KAAD,CAAUrtC,SAAS,YAErB,eAAC,GAAD,CACElY,GAAG,cACHk3D,SAAUA,EACVS,aAAW,EACXpgD,KAAM7L,QAAQwrD,GACd3+B,QAjDc,WAClB4+B,EAAY,MACZ5R,GAAc,IA0CZ,UAOGmX,GACC,eAAC,GAAD,CAAgBtjD,QA/CO,kBAC7Bb,EAAQjP,KAAR,6BAAmC/B,EAAMvH,MA8CnC,UACE,cAACs8D,GAAD,IADF,4BAKDxvD,EAAyBvF,IACxB,eAAC,GAAD,CAAgB6R,QAlDsB,kBAC5Cb,EAAQjP,KAAR,wCAA8C/B,EAAMvH,MAiD9C,UACE,cAACu8D,GAAD,IADF,yCA/BC,M,yzCCpFJ,IAAMM,GAAkB77D,IAAOgW,IAAV,MACjB,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QACtC,qBAAGwc,MAAkBC,QAAQ,MAGnC2mD,GAAqB97D,IAAOgW,IAAV,MACT,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SACxD,qBAAGxH,MAAkBC,QAAQ,KAAM,EAAG,MACrC,qBAAGD,MAAkBC,QAAQ,EAAG,MAGhC4mD,GAAY/7D,IAAOgW,IAAV,MACA,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SACjD,qBAAGxH,MAAkBC,QAAQ,MAC1B,qBAAGsE,mBACZ,qBAAGvE,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,OAGhC6mD,GAAiBh8D,IAAOgW,IAAV,MAErB,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SACjC,qBAAGxH,MAAkBC,QAAQ,MAChC,qBAAGD,MAAkBC,SAAS,MAC1B,qBAAGD,MAAkBC,QAAQ,MAWpC8mD,IALqBj8D,YAAOuY,KAAPvY,CAAH,MAEd,qBAAGkV,MAAkBC,QAAQ,MAGlBnV,YAAOuY,KAAPvY,CAAH,MAEd,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,SAI5C6jE,GAAWl8D,YAAOuY,KAAPvY,CAAH,MACV,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QAG5C8jE,GAAan8D,YAAOuY,KAAPvY,CAAH,MAEZ,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QAG5C+jE,GAAmBp8D,IAAOgW,IAAV,MCkCdqmD,GA3DqC,SAAC,GAAgB,IAAdC,EAAa,EAAbA,OAC7C90D,EAAoB7E,qBAAWkR,IAA/BrM,gBACAjF,EAAaI,qBAAWd,IAAxBU,SAER,OACE,mCACGqH,MAAMC,MAAW,OAANyyD,QAAM,IAANA,OAAA,EAAAA,EAAQj3B,YAAa,IAAI96B,KAAI,YAA+B,IAAD,mBAA5BgyD,EAA4B,KAAdC,EAAc,KAC/DC,EAAW7yD,MAAMC,KAAK2yD,EAASv2C,UAAU,GAAG,GAC5C1gB,EAAO,IAAID,KAAKE,OAAOi3D,EAASloD,mBACtC,OACE,eAACsnD,GAAD,WACE,cAACI,GAAD,UACGt1D,YAAOpB,EAAM,aAAc,CAAEqB,OAAQC,QAEvC+C,MAAMC,KAAK2yD,EAASn3B,WAAW96B,KAAI,YAAyB,IAAD,mBAAtBmyD,EAAsB,KAAZJ,EAAY,KACpDG,EAAWH,EAAO,GAClB/2D,EAAO,IAAID,KAAKE,OAAOi3D,EAASloD,mBACtC,OACE,eAACunD,GAAD,WACE,cAACI,GAAD,UAAWz1D,GAAYlB,KACtB+2D,EAAO/xD,KAAI,SAAChE,GAAW,IAAD,EACrB,OACE,eAACw1D,GAAD,CACEtiD,gBAAiBnT,GAA4BC,GAE7Coa,cAAA,qBAA2Bpa,EAAMvH,IAHnC,UAKE,eAACg9D,GAAD,WACE,cAACG,GAAD,oBACMx1D,YACF,IAAIrB,KAAKiB,EAAMgO,kBAAoB,IACnC,SAHJ,YAKIhO,EAAMxM,OAAN,UAAcwM,EAAMsmB,qBAApB,aAAc,EAAqB9yB,OAAQ,MAG9CwN,GACChB,EACAhE,EAAUP,KACVwF,IACG,cAAC,GAAD,CAAYjB,MAAOA,OAER,aAAjBA,EAAM3G,QACL,cAACw8D,GAAD,UACE,cAAC7jD,GAAA,EAAD,8CApBChS,EAAMvH,SANnB,UAA4Bu9D,GAA5B,OAA2CG,SAR3BH,S,oJCpCzB,IAAMljD,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MCwHpCwnD,GA9GgB,WAAO,IAAD,EACX56D,mBAAS,GADE,mBAC5B27B,EAD4B,KACtBC,EADsB,OAEP57B,mBAAuB,IAFhB,mBAE5Bu6D,EAF4B,KAEpBM,EAFoB,OAGG76D,mBAAS,IAHZ,mBAG5B86D,EAH4B,KAGfC,EAHe,KAI7B1xD,EAASuzB,cACTpnB,EAAUC,cALmB,EAMiBvM,KAA5CC,EAN2B,EAM3BA,wBAAyB1B,EANE,EAMFA,MAAOrH,EANL,EAMKA,QAClCgJ,EAAY2Z,SAAS1Z,EAAOD,WAPC,EAaOpJ,mBAExC,IAAIg7D,KAf6B,mBAa5BC,EAb4B,KAabC,EAba,KAuEnCv8D,qBAAU,YAtDQ,WAChB,IAAM0K,EAAS7G,IAAGC,MAAM+S,EAAQxW,SAAS0D,QACrC0G,GACFD,EAAwBC,EAAD,YAAC,eACnBC,GADkB,IAErBsyB,OACAd,MAAO,GACPgV,QAAS,mBACTsgB,MAAO,UAEN/uD,MAAK,SAAC5H,GACL,IAAM2hE,EAAe3hE,EAASsC,KAAKmM,QAEjC4yD,EADW,IAATl/B,EACQw/B,EAEA,GAAD,oBAAKZ,GAAL,aAAgBY,KAE3BJ,EAAeK,EAAe5hE,EAASsC,KAAKmM,aAE7C9M,OAAM,SAAC4a,GACN7W,IAAMxG,MAAMqd,MAmClBomB,KACC,CAACR,IAEJh9B,qBAAU,YAjCe,WACvB,IAD6B,EACvB6J,EAAM,IAAIwyD,IAAIC,GADS,cAETV,GAFS,yBAElB/1D,EAFkB,QAGrBg2D,EAAe51D,YACnB,IAAIrB,KAAKE,OAAOe,EAAMgO,mBACtB,UAEImoD,EAAW/1D,YAAO,IAAIrB,KAAKE,OAAOe,EAAMgO,mBAAoB,MAElE,GAAIhK,EAAI6yD,IAAIb,GAAe,CACzB,IAAMC,EAAWjyD,EAAI1L,IAAI09D,GACzB,GAAIC,EAASY,IAAIV,GAAW,CAC1B,IAAMJ,EAASE,EAAS39D,IAAI69D,GACvBJ,EAAO/vD,MAAK,SAAC8wD,GAAD,OAAOA,EAAEr+D,KAAOuH,EAAMvH,OACrCw9D,EAASc,IAAIZ,EAAb,uBAA2BJ,GAA3B,CAAmC/1D,UAGrCi2D,EAASc,IAAIZ,EAAU,CAACn2D,SAG1BgE,EAAI+yD,IACFf,EACA,IAAIQ,IAA0B,CAAC,CAACL,EAAU,CAACn2D,QApBjD,2BAA6B,IAFA,8BA0B7B02D,EAAiB1yD,GAQjBgzD,KACC,CAACjB,IAEJ,IAIMa,EAAiB,SAACb,GAAD,aACrB,UAAAA,EAAO,GAAG1kC,eAAV,eAAmB79B,OAAQ,IAE7B,OACE,qCACE,cAAC,GAAD,CACEuK,MAAK,wCAA6Bu4D,GAClCx8C,cAAe,kBAAM9I,EAAQqJ,YAE/B,eAAC,GAAD,WACE,cAAC,GAAD,CAAe07C,OAAQU,IACtB76D,GAAW,cAAC,GAAD,CAAiBA,SAAO,IACnCm6D,EAAOx0D,OAAS0B,GACf,cAAC,GAAD,CACEmX,cAAY,YACZ/H,KAAK,SACLV,MAAM,YACNE,QArBY,WACpBulB,EAAQD,EAAO,IAgBT,6B,2eC1GH,IAAMT,GAAUj9B,IAAOgW,IAAV,MAED,qBAAGd,MAAkBC,QAAQ,MACrC,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKpd,QAC5C,qBAAG6c,MAAkBC,QAAQ,MAG7BqoD,GAAuBx9D,YAAOuY,KAAPvY,CAAH,MAIpBy9D,GAAgBz9D,IAAO09D,GAAV,MAER,qBAAGxoD,MAAkBC,QAAQ,MAGlCwoD,GAAgB39D,YAAOw9D,GAAPx9D,CAAH,MCfnB,SAAS49D,GAAiBvsD,GAC/B,IAAKA,GAAoD,kBAAvBA,EAChC,OAAO,KAIT,IAFA,IAAM4U,EAAiC,GACnC3M,EAAkBjI,EACfiI,GAAoB,UAAbA,EAAItb,MAAkB,CAClC,IAAM6R,EAAgByJ,EAAIxJ,QAAQvD,MAAK,SAACsxD,GAAD,OAAOA,EAAE7tD,aAEhD,GADAiW,EAAO3d,KAAKuH,IACRA,EAAcM,WAGhB,MAFAmJ,EAAMzJ,EAAcM,WAMxB,IAAI2tD,EAA0C,GAK9C,OAJIxkD,GAAoB,UAAbA,EAAItb,OACb8/D,EAAkBxkD,EAAIxJ,QAAQ/F,QAAO,SAAC8zD,GAAD,OAAOA,EAAE7tD,cAI9C,qCACGiW,EAAO1b,KAAI,SAACwzD,GAAD,OACV,qCACE,cAACP,GAAD,CAAsBzoD,QAAQ,QAA9B,SACGgpD,EAAE18D,OADL,gBAAoD08D,EAAE/+D,KAGrD++D,EAAE9tD,iBAAmB8tD,EAAE7tD,aACtB,eAACstD,GAAD,CAAsBzoD,QAAQ,QAA9B,UACE,mDADF,IACuBgpD,EAAE7tD,cADzB,eAAmD6tD,EAAE/+D,WAM3D,cAACy+D,GAAD,UACGK,EAAgBvzD,KAAI,SAACwF,GAAD,OACnB,cAAC4tD,GAAD,CAAe5oD,QAAQ,QAAvB,SACGhF,EAAO1O,OAD0B0O,EAAO/Q,YC7BrD,IAsBe0rC,GAtBmB,SAAC,GAI5B,IAHLpmC,EAGI,EAHJA,MACA0N,EAEI,EAFJA,mBACAd,EACI,EADJA,aAEA,OACE,eAAC,GAAD,WACE,cAACqH,GAAA,EAAD,CAAYxD,QAAQ,QAApB,SACE,4BAAIzQ,MAEN,cAACiU,GAAA,EAAD,UAAarH,IACZc,EACC,cAACuG,GAAA,EAAD,UACGqlD,GAAiB5rD,EAAmBX,sBAGvC,cAACkH,GAAA,EAAD,qC,4nBCzBD,IAAMc,GAAYrZ,IAAOgW,IAAV,MAIT,qBAAGd,MAAkBC,QAAQ,EAAG,MAIhC6oD,GAAch+D,YAAOuY,KAAPvY,CAAH,MACb,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QACxC,qBAAGwc,MAAkBC,QAAQ,MAIjC8oD,GAAgBj+D,IAAOgW,IAAV,MACJ,qBAAGd,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SACxD,qBAAGxH,MAAkBC,QAAQ,GAAI,MAChC,qBAAGD,MAAkBC,QAAQ,EAAG,MAGhCkuC,GAAUrjD,IAAOgW,IAAV,MACJ,qBAAGd,MAAkBC,SAAS,MAC3B,qBAAGD,MAAkBC,QAAQ,MAC1B,SAACgG,GAAD,MAAW,WAAIA,EAAMjD,SAAW,KACzC,qBAAGhD,MAAkBC,QAAQ,EAAG,MAC1B,qBAAGD,MAAkBC,QAAQ,MACrC,qBAAGD,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SC3BzD,SAASwhD,GAAiB7sD,GACxB,OAAQA,EAAmBrT,MACzB,IAAK,QAIH,OAHuBqT,EAAmBvB,QAAQvF,KAChD,SAACwF,GAAD,OAAYA,EAAOC,aAECjI,MAAK,SAAC1G,GAAD,OAAWA,KACxC,IAAK,SACH,IAAMwO,EAAgBwB,EAAmBvB,QAAQvD,MAAK,SAACsxD,GAAD,OAAOA,EAAE7tD,aAC/D,QAAKH,KACAA,EAAcM,YACZ+tD,GAAiBruD,EAAcM,aACxC,QACE,OAAO,GAIb,SAASguD,GACPpsD,GAaA,OAX8BA,EAAoB1I,QAChD,SAAC+0D,EAAOC,GACN,IAAMhtD,EAAqBgtD,EAA0BhtD,mBACrD,OAAKA,GAAoD,kBAAvBA,EAG3B+sD,GAASF,GAAiB7sD,GAAsB,EAAI,GAFlD,IAIX,GAMG,SAASitD,GACdvsD,EACAwsD,GAEA,IAAM5rB,EAAWwrB,GAAgCpsD,GACjD,MAAM,GAAN,OAAU4gC,EAAV,YAAsB4rB,EAAtB,0BC7BF,IAkEeC,GAlEmD,SAChErjD,GAEA,IAAMsjD,EAAiC/zC,KAAEu2B,QACvC9lC,EAAM5U,MAAMm4D,oBAAsB,GAClC,oCAEF,OACE,eAACT,GAAD,WACE,cAACD,GAAD,CAAajpD,QAAQ,QAArB,sBACA,cAAC,GAAD,UACGlH,OAAOw3B,QAAQo5B,GAAgCl0D,KAC9C,YAA8C,IAAD,mBAA3Co0D,EAA2C,KAA3BC,EAA2B,KACrCC,EAAsBD,EACzBr0D,KAAI,SAACu0D,GAAD,yBAASA,EAAI5tD,oBAAb,iBAAS,EAAkBR,gBAA3B,aAAS,EAA4BL,gBACzC9D,MAAK,SAACwyD,GAAD,OAAQv5D,OAAM,OAACu5D,QAAD,IAACA,OAAD,EAACA,EAAI//D,MAAQ2/D,KAE7BK,GACJ7jD,EAAM5U,MAAMwL,qBAAuB,IACnChI,QAAO,SAAC6I,GACR,OAAOgsD,EACJr0D,KAAI,SAACu0D,GAAD,OAASA,EAAI1tD,kBACjB3R,SAASmT,EAAIxB,mBAGlB,OACE,eAAC,GAAD,CAEE8G,MAAK,OAAE2mD,QAAF,IAAEA,OAAF,EAAEA,EAAqBvsB,UAF9B,UAIE,cAAC/5B,GAAA,EAAD,CAAYxD,QAAQ,YAApB,gBACG8pD,QADH,IACGA,OADH,EACGA,EAAqB9kE,OAExB,cAACwe,GAAA,EAAD,CAAYxD,QAAQ,YAApB,SACGupD,GACCU,EACAJ,EAAsB92D,UAGzB82D,EAAsBr0D,KAAI,SAAC00D,GAAuB,IAAD,QAC1CZ,EAAyB,UAAGljD,EAAM5U,MAAMwL,2BAAf,aAAG,EAAiCxF,MACjE,SAACqG,GAAD,OACEA,EAAIxB,iBAAmB6tD,EAAkB7tD,kBAGvC8tD,EAAmB,UACvBD,EAAkB/tD,oBADK,aACvB,EAAgC0hC,iBAElC,OACE,cAAC,GAAD,CAEEtuC,MAAK,UAAE26D,EAAkB/tD,oBAApB,iBAAE,EAAgCR,gBAAlC,aAAE,EAA0C3W,KACjDmX,aAAcguD,EACdltD,mBAAoBqsD,GAJtB,OACOA,QADP,IACOA,OADP,EACOA,EAA2Br/D,SAvBjC2/D,Y,q0CCrCd,IAAMtlD,GAAYrZ,IAAOgW,IAAV,MASA,qBAAGd,MAAkBE,QAAQC,QAAQhd,QAI9C8mE,GAAiBn/D,IAAOo6B,OAAV,MAGL,qBAAGllB,MAAkBE,QAAQC,QAAQhd,QAgB9C,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAO1B,qBAAG6c,MAAkBE,QAAQC,QAAQhd,QAKhD6jB,GAAkBlc,IAAOgW,IAAV,MAMfopD,GAAqBp/D,IAAOgW,IAAV,MCyChBqpD,GA5EiD,SAAC,GAI1D,IAHLh4D,EAGI,EAHJA,UACAkN,EAEI,EAFJA,iBACA+qD,EACI,EADJA,SAEMl0D,EAASuzB,cACT4gC,EAAiBz6C,SAAS1Z,EAAOE,SACjCiM,EAAUC,cAwBVgoD,EAAgC/0D,mBAAQ,WAE5C,OADwB60D,EAASA,EAAS9kD,QAAQ+kD,GAAkB,KAKnE,CAACD,EAAUC,IAERE,EAA4Bh1D,mBAAQ,WAExC,OADoB60D,EAASA,EAAS9kD,QAAQ+kD,GAAkB,KAK/D,CAACD,EAAUC,IAEd,OACE,eAAC,GAAD,WACE,cAAC,GAAD,UACE,cAACJ,GAAD,CACE/mD,QA9BkB,WACxB,IAAMsnD,EAAkBJ,EAASA,EAAS9kD,QAAQ+kD,GAAkB,GACpEhoD,EAAQnT,QAAR,6BAAsCs7D,KA6BhCrnD,SAAUmnD,EACV7+C,cAAY,wBAHd,SAKE,cAAC,KAAD,QAIJ,eAACy+C,GAAD,WACE,+BA7C0B7qD,EAC1B5N,YAAO,IAAIrB,KAAKiP,GAAmB,cACnC,eA4CA,+BApDclN,EACdV,YAAO,IAAIrB,KAAK+B,GAAY,SAC5B,aAqDF,cAAC,GAAD,UACE,cAAC83D,GAAD,CACE/mD,QAxCc,WACpB,IAAMunD,EAAcL,EAASA,EAAS9kD,QAAQ+kD,GAAkB,GAChEhoD,EAAQnT,QAAR,6BAAsCu7D,KAuChCtnD,SAAUonD,EAFZ,SAIE,cAAC,KAAD,Y,y3CC/EH,IAAMpmD,GAAYrZ,IAAOgW,IAAV,MAGA,qBAAGd,MAAkBE,QAAQE,OAAOC,SAC7C,qBAAGL,MAAkBC,QAAQ,MAE/B,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAC5B,qBAAGwc,MAAkBC,QAAQ,OAapC8V,IAVWjrB,YAAOsc,KAAPtc,CAAH,MACR,qBAAGkV,MAAkBqH,OAAOC,OAAS,KACvC,qBAAGtH,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAIjB1c,YAAO4c,MAA0B9H,MAAM,CAC7EoD,MAAO,WAD+BlY,CAAH,MAIPA,IAAOgW,IAAV,MACV,qBAAGd,MAAkBC,QAAQ,MAC3B,qBAAGD,MAAkBC,QAAQ,MAE5B,qBAAGD,MAAkBC,QAAQ,MACpB,qBAAGD,MAAkBE,QAAQC,QAAQhd,QAGhD,qBAAG6c,MAAkBC,QAAQ,OAIlCyqD,GAAwB5/D,YAAOuY,KAAPvY,CAAH,MACvB,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QAI5CmnE,GAAyB7/D,YAAOuY,KAAPvY,CAAH,MACxB,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QACxC,qBAAGwc,MAAkBC,QAAQ,MAOjC2qD,IAJ2B9/D,YAAOuY,KAAPvY,CAAH,MAC1B,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QAGvBsH,YAAOuY,KAAPvY,CAAH,MACpB,qBAAGkV,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAK/c,QAKtC,qBAAGwc,MAAkBC,QAAQ,OAInC4qD,GAAwB//D,IAAOgW,IAAV,MAKtB,qBAAGd,MAAkBC,QAAQ,EAAG,MAG/B6qD,GAAqChgE,YAAOuY,KAAPvY,CAAH,MACpC,qBAAGkV,MAAkBE,QAAQwI,QAAQllB,QC+IjCunE,GAzLe,WAAO,IAAD,QACgBl+D,mBAAS,IADzB,mBAC3Bm+D,EAD2B,KACRC,EADQ,OAEFp+D,mBAAmB,IAFjB,mBAE3Bu9D,EAF2B,KAEjBc,EAFiB,OAGRr+D,qBAHQ,mBAG3BwE,EAH2B,KAGpBwqC,EAHoB,OAIoB9lC,KAA9CI,EAJ0B,EAI1BA,QAASlJ,EAJiB,EAIjBA,QAAS+I,EAJQ,EAIRA,wBAClBnM,EAAsB+3B,KAAtB/3B,kBAL0B,EAMsB4D,qBACtDkR,IADMc,EAN0B,EAM1BA,uBAAwBP,EANE,EAMFA,oBAI1BhJ,EAASuzB,cACT3/B,EAAK8lB,SAAS1Z,EAAOE,SACrBiM,EAAUC,cAEhB9W,qBAAU,WACR,GAAI2F,OACFsO,KAEKP,GAIH,OAHAnT,IAAMxG,MACJ,0FAEK8c,EAAQjP,KAAK,OAGvB,IAEH5H,qBAAU,WACJ1B,GACFqM,EAAQrM,GAAImE,MAAK,SAACoD,GAChBwqC,EAASxqC,IAEA,OAALA,QAAK,IAALA,OAAA,EAAAA,EAAO4E,YAAiC,IAApBm0D,EAASx3D,QAC/Bu4D,EAAe95D,EAAM4E,gBAG1B,CAACnM,IAEJ0B,qBAAU,WACI,IAAD,EAAP6F,GACF+5D,EAA2B54D,OAAM,OAACnB,QAAD,IAACA,GAAD,UAACA,EAAOqxB,eAAR,aAAC,EAAgB54B,KAAKmE,MAAK,SAACvF,GACtDA,GACLuiE,EAAqBviE,QAGxB,CAAC2I,IAEJ,IAAM+5D,EAA0B,uCAAG,WAAOthE,GAAP,SAAA1C,EAAA,+EAElByC,EAAkBC,GAAImE,MACjC,qBAAGtF,KAAQI,aAHkB,wEAO1BuH,OAAO,EAAD,IAAM/F,SAAS,QAAQwB,IAAMxG,MAAN,MAPH,wDAAH,sDAW1B4lE,EAAc,uCAAG,WAAOl1D,GAAP,SAAA7O,EAAA,sDACrB4O,EAAwBC,EAAW,CACjCuyB,KAAM,EACNd,MAAO,IACPgV,QAAS,mBACTsgB,MAAO,SACN/uD,MAAK,SAAC5H,GACP,IAEM+jE,EAFS/jE,EAASsC,KAAKmM,QACAD,QAAO,SAACxD,GAAD,OAAWA,EAAMc,aACtBkD,KAAI,SAAChE,GAAD,OAAWA,EAAMvH,MACpDohE,EAAYd,MAVO,2CAAH,sDA1Dc,EA2E9BhR,GAAmC,OAAC/nD,QAAD,IAACA,OAAD,EAACA,EAAOo6C,QAF7C6N,EAzEgC,EAyEhCA,mBACAC,EA1EgC,EA0EhCA,2BAGIiB,EAAsCjlD,mBAC1C,kBAAMi2C,GAAa+N,KACnB,QAACloD,QAAD,IAACA,OAAD,EAACA,EAAOo6C,SAGV,OAAIx+C,EACK,cAAC,GAAD,CAAiBA,SAAO,IAG5BoE,EAKH,qCACE,cAAC,GAAD,CACEjC,MAAM,6BACN+b,cAAe,kBAAM9I,EAAQqJ,YAE/B,eAAC,GAAD,WACE,eAAC,GAAD,WACE,eAACg/C,GAAD,CAAuB7qD,QAAQ,KAA/B,UACGpO,YAAO,IAAIrB,KAAKiB,EAAMgO,kBAAoB,IAAK,cAC/C,MACA5N,YAAO,IAAIrB,KAAKiB,EAAMgO,kBAAoB,IAAK,OAAQ,CACtD3N,OAAQ25D,SAGZ,cAACX,GAAD,CAAuB7qD,QAAQ,KAA/B,SACGxO,EAAMxM,OAAN,OAAcwM,QAAd,IAAcA,GAAd,UAAcA,EAAOsmB,qBAArB,aAAc,EAAsB9yB,QAEvC,eAACgmE,GAAD,WACE,cAAC1Y,GAAA,EAAD,CACElxC,IAAK+pD,EACLl0C,IAAG,UAAEzlB,EAAMqxB,eAAR,aAAE,EAAe79B,KACpB4mB,cAAY,WAEd,cAACk/C,GAAD,CAAwB9qD,QAAQ,YAAhC,mBACGxO,EAAMqxB,eADT,aACG,EAAe79B,UAGpB,cAAC+lE,GAAD,CAAoB/qD,QAAQ,YAA5B,SACG3N,GAAiBb,OAEjBA,EAAMC,sBACP,cAACw5D,GAAD,0DAMDxR,GAAsBA,EAAmB1mD,OAAS,GACnD,cAAC,GAAD,CACE64C,OAAQ6N,GAAsB,GAC9BlqD,MAAM,wBAGJ,OAALiC,QAAK,IAALA,OAAA,EAAAA,EAAOkpD,YAAiB,OAALlpD,QAAK,IAALA,OAAA,EAAAA,EAAOkpD,SAAS3nD,QAAS,GAC3C,mCACE,eAAC,GAAD,WACE,cAACyQ,GAAA,EAAD,CAAYxD,QAAQ,KAApB,4DAGCxO,EAAMkpD,SAASllD,KAAI,SAAC7P,EAAS6V,GAAV,OAClB,cAAC,GAAD,CACEu1C,iBAAkBprD,EAElBimB,cAAA,iCAAuCpQ,IAHzC,iCAEiCA,YAOtCm/C,GACHA,EAAoC5nD,OAAS,EAC3C,cAAC,GAAD,CACE64C,OAAQ+O,GAAuC,GAC/CprD,MAAM,eAGR,cAAC,GAAD,UACE,cAACiU,GAAA,EAAD,CAAYxD,QAAQ,KAApB,uDAMHxO,EAAMwL,qBAAuBxL,EAAMwL,oBAAoBjK,OAAS,EAC/D,cAAC,GAAD,CAAsBvB,MAAOA,IAE7B,cAAC,GAAD,UACE,cAACgS,GAAA,EAAD,CAAYxD,QAAQ,KAApB,0EAMG,OAARuqD,QAAQ,IAARA,OAAA,EAAAA,EAAUx3D,QAAS,GAClB,cAAC,GAAD,CACEyM,iBAAkB/O,OAAM,OAACe,QAAD,IAACA,OAAD,EAACA,EAAOgO,kBAChClN,UAAS,OAAEd,QAAF,IAAEA,OAAF,EAAEA,EAAOc,UAClBi4D,SAAUA,OA3FT,M,gVCnHJ,IAAMjmD,GAAYrZ,IAAOgW,IAAV,MAMTwqD,GAAUxgE,IAAOgW,IAAV,MAKE,gBAAG+C,EAAH,EAAGA,QAAS7D,EAAZ,EAAYA,MAAZ,OAClB6D,EAAU7D,EAAME,QAAQE,OAAOC,MAAQ,iBACrB,qBAAGL,MAAkBE,QAAQE,OAAOC,SCI3CkrD,GAVqB,SAAC,GAA2B,IAAzBC,EAAwB,EAAxBA,MAAOC,EAAiB,EAAjBA,WAC5C,OACE,cAAC,GAAD,UACG,aAAI,IAAI/2D,MAAM82D,IAAQn2D,KAAI,SAACmgB,EAAGna,GAAJ,OACzB,cAACiwD,GAAD,CAAqBznD,QAASxI,EAAQowD,GAAxBpwD,S,8+CCPf,IAAMqwD,GAAe5gE,YAAO88B,GAAP98B,CAAH,MAGH,gBAAG+xC,EAAH,EAAGA,iBAAkB78B,EAArB,EAAqBA,MAArB,OAClB68B,EAAgB,WAAOA,GAAqB78B,EAAME,QAAQC,QAAQhd,QAC3D,qBAAG6c,MAAkBE,QAAQE,OAAOC,SAC/B,qBAAGL,MAAkBC,QAAQ,MAIhC0rD,GAAiB7gE,IAAOgW,IAAV,MAKd,qBAAGd,MACNC,QACJ,EACA,MAIO2rD,GAAc9gE,YAAOuY,MAAYzD,MAAM,CAAEC,QAAS,WAApC/U,CAAH,MAKX+gE,GAAiB/gE,IAAOgW,IAAV,MACf,qBAAGd,MAAkBC,QAAQ,EAAG,MAC/B,qBAAGD,MAAkBC,QAAQ,EAAG,MAIvB,qBAAGD,MAAkBE,QAAQE,OAAOC,SACvC,qBAAGL,MAAkBqM,MAAMC,gBAO1B,qBAAGtM,MAAkBC,QAAQ,MAC5B,qBAAGD,MAAkBC,QAAQ,MAM7B,qBAAGD,MAAmBC,QAAQ,MAKtC6rD,GAA6BhhE,IAAOgW,IAAV,MAE1BirD,GAAmCjhE,YAAOwiB,IAAiB1N,MAAM,CAC5E6N,WAAW,EACXsR,WAAW,EACX/b,MAAO,SAHuClY,CAAH,MAYhCkkD,GAAUlkD,IAAOgrB,GAAV,MACR,qBAAG9V,MAAkBC,QAAQ,EAAG,MAElB,qBAAGD,MAAkBE,QAAQE,OAAOC,SAGjD2rD,GAAelhE,YAAOuY,KAAPvY,CAAH,MACb,qBAAGkV,MAAkBC,QAAQ,EAAG,MCzDtCgsD,GAA4C1xC,IAAM89B,MACtD,YAA8D,IAA3DvvD,EAA0D,EAA1DA,KAAM8R,EAAoD,EAApDA,QAASuwB,EAA2C,EAA3CA,SAAU+gC,EAAiC,EAAjCA,gBACpBvxD,EAAgBC,EAAQvD,MAAK,SAACwD,GAAD,OAAYA,EAAOC,aAEhDqxD,EAAqB,SAArBA,EACJC,EACAC,GAE4B,IAD5BC,EAC2B,uDADX1xD,EAEV2xD,EAAiBD,EAAcj1D,MAAK,SAACm1D,GAAD,OAAQA,EAAG1iE,KAAOuiE,KAE5D,OAAOC,EAAcj3D,KAAI,SAACwF,GACxB,GAAIA,EAAO/Q,KAAOuiE,EAAU,CAM1B,GAAa,WAATvjE,IAAA,OAAqBsjE,QAArB,IAAqBA,OAArB,EAAqBA,EAAatxD,WAAW,KAEvCG,EAAeJ,EAAfI,WACFwxD,EAAoBxxD,EAAU,2BAE3BA,GAF2B,IAG9BL,QAASuxD,EACPC,OACA39D,EACAwM,EAAWL,gBAGfnM,EACJ,OAAO,2BACFoM,GADL,IAEEC,WAAW,EACXE,iBAAavM,EACbwM,WAAYwxD,IAGhB,OAAO5xD,EAET,OAAO,mDACFA,GACA0xD,GACAH,GAHL,IAKEpxD,aAA2B,OAAduxD,QAAc,IAAdA,OAAA,EAAAA,EAAgBzxD,WACzBsxD,EAAYpxD,iBACZvM,QAKV,OACE,qCACE,eAACo9D,GAAD,WACY,UAAT/iE,GACC8R,EAAQvF,KAAI,SAACwF,GACX,OACE,cAAC,IAAM6xD,SAAP,UACE,cAAC,GAAD,CACE1pD,MAAM,QACNC,MAAOpI,EAAO1O,MACd2W,QACE,cAAC2d,GAAA,EAAD,CACEtd,SAAUgoB,EAEV1f,cAAA,UAAgB5Q,EAAO/Q,GAAvB,UACA+oC,QAASh4B,EAAOC,UAChB6H,SAAU,SAACC,GAAD,OACRspD,EACEC,EACE,CACErxD,UAAW8H,EAAEC,OAAOgwB,SAEtBh4B,EAAO/Q,OAXf,UAEU+Q,EAAO/Q,GAFjB,cALe+Q,EAAO/Q,OA0BxB,WAAThB,GACC,cAAC2Z,GAAA,EAAD,CACEE,SAAU,SAACC,GAAD,OACRspD,EACEC,EACE,CACErxD,WAAW,GAEbF,EAAQvD,MAAK,SAACm1D,GAAD,OAAQA,EAAG1iE,KAAO8Y,EAAEC,OAAO1W,SAAQrC,MAPxD,SAYG8Q,EAAQvF,KAAI,SAACwF,GAAD,OACX,cAAC,IAAM6xD,SAAP,UACE,cAAC,GAAD,CACEjhD,cAAA,UAAgB5Q,EAAO/Q,GAAvB,WACAkZ,MAAM,QACN7W,MAAO0O,EAAO/Q,GACdgZ,QAAS,cAACC,GAAA,EAAD,IACTE,MAAOpI,EAAO1O,MACd0mC,QAASh4B,EAAOC,UAChBqI,SAAUgoB,KARd,UAAwBtwB,EAAO/Q,GAA/B,oBAeP6Q,GAAiBA,EAAcM,YAC9B,qCACE,cAAC,GAAD,IACA,cAACgxD,GAAD,CACE9gC,SAAUA,EACVriC,KAAM6R,EAAcM,WAAWnS,KAC/B8R,QAASD,EAAcM,WAAWL,QAClCsxD,gBAAiB,SAACS,GAChBT,EACEC,EACE,CACElxD,WAAW,2BACNN,EAAcM,YADT,IAERL,QAAS+xD,KAGbhyD,EAAc7Q,WAOzB6Q,GAAiBA,EAAcI,iBAC9B,qCACE,cAAC,GAAD,IACA,cAAC+wD,GAAD,UACE,cAACC,GAAD,CACE9oD,MAAM,mBACN2b,gBAAiB,CAAEC,QAAQ,GAC3BF,YAAY,6DACZxb,SAAUgoB,EACVh/B,MAAOwO,EAAcK,YACrB2H,SAAU,SAACC,GAAD,OACRspD,EACEC,EACE,CACEnxD,YAAa4H,EAAEC,OAAO1W,OAExBwO,EAAc7Q,MAIpB0nB,WAAY,CACV+pB,UAAW,IACX,cAAe,kCAUjC0wB,GAAqB1U,YAAc,uBAEpB0U,UCxKTW,GAAqCryC,IAAM89B,MAC/C,YAQkB,IAPhB9zC,EAOe,EAPfA,gBACArI,EAMe,EANfA,eACAwhC,EAKe,EALfA,iBACAvhC,EAIe,EAJfA,mBACA0wD,EAGe,EAHfA,eACAC,EAEe,EAFfA,YACApxD,EACe,EADfA,eAKMqxD,EAAsBzkE,uBAC1B,SAACsS,GACC,IAAMoyD,EAAyB,2BAC1B7wD,GAD0B,IAE7BvB,YAEFiyD,EAAe3wD,EAAiB8wD,KAElC,CAAC9wD,EAAgBC,IAGnB,OACE,eAACuvD,GAAD,CAAc7uB,iBAAkBt4B,EAAhC,UACE,eAAConD,GAAD,WACE,cAACC,GAAD,oBAAiBkB,EAAjB,YAAgCpxD,KAChC,cAAC,GAAD,CAAO+vD,WAAYqB,EAAatB,MAAO9vD,OAEzC,cAACswD,GAAD,CAAc9hD,MAAM,SAApB,SAA8BwzB,IAC9B,cAAC,GAAD,CACE50C,KAAMqT,EAAmBrT,KACzB8R,QAASuB,EAAmBvB,QAC5BsxD,gBAAiBa,UAM3BH,GAAcrV,YAAc,gBAEbqV,U,gxBChER,IAAMzoD,GAAYrZ,IAAOgW,IAAV,MACT,qBAAGd,MAAkBC,QAAQ,MAI/B,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAGnCwmB,GAAQlf,YAAOuY,MAAYzD,MAAM,CAC5CC,QAAS,KACTqK,MAAO,UAFYpf,CAAH,MAIP,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QACpC,qBAAGwc,MAAkBC,QAAQ,EAAG,MAG/B+G,GAAkBlc,IAAOgW,IAAV,MAOf,qBAAGd,MAAkBE,QAAQC,QAAQ3c,QAChC,qBAAGwc,MAAkBC,QAAQ,MAO7B,qBAAGD,MAAkBC,QAAQ,MAG/B,qBAAGD,MAAkBC,QAAQ,EAAG,MAKnCgtD,GAA0BniE,IAAOgW,IAAV,MACpB,qBAAGd,MAAkBC,QAAQ,MAC1B,qBAAGD,MAAkBC,QAAQ,MCnB1CitD,GAAgC,CACpCjwD,kBAAmB,EACnBC,cAAe,EACfygC,kBAAmB,EACnBwT,kBAAkB,GA6LLgc,GA1LqB,WAAO,IAAD,IAClC9qD,EAAUC,cADwB,EAEF9U,cAA9BvC,aAFgC,MAExBiiE,GAFwB,EAGhC1wD,EAAsB/O,qBAAWgR,IAAjCjC,kBACAnP,EAAaI,qBAAWd,IAAxBU,SAJgC,EAKNmP,IAA1BtI,EALgC,EAKhCA,KAAMD,EAL0B,EAK1BA,IAAK8I,EALqB,EAKrBA,WALqB,EAMUlQ,mBAChD5B,EAAMgS,mBAAqBiwD,GAAkBjwD,mBAPP,mBAMjCA,EANiC,KAMdmwD,EANc,OASEvgE,mBACxC5B,EAAMiS,eAAiBgwD,GAAkBhwD,eAVH,mBASjCA,EATiC,KASlBmwD,EATkB,OAYUxgE,mBAChD5B,EAAM0yC,mBAAqBuvB,GAAkBvvB,mBAbP,mBAYjCA,EAZiC,KAYd2vB,EAZc,KAgBlCT,EAAiBvkE,uBACrB,SAAC0U,EAAYX,GACXU,EAAWC,EAAYX,EAAQ,CAC7BY,kBAAmBzK,OAAOyK,GAC1BC,cAAe1K,OAAO0K,GACtBygC,kBAAmBnrC,OAAOmrC,OAG9B,CAAC1gC,EAAmBC,EAAeygC,IAG/BxiC,EAAejH,EAAKD,EAAIgJ,IAExBzB,EAAQ,OAAGL,QAAH,IAAGA,GAAH,UAAGA,EAAcI,iBAAjB,aAAG,EAA0B2B,GAErClB,EAAY,OAAGR,QAAH,IAAGA,GAAH,UAAGA,EAAUG,qBAAb,aAAG,EAA0BgiC,GAG/C,IAAKxiC,IAAiBK,IAAaQ,EACjC,OAAO,cAAC,IAAD,CAAU+H,GAAG,aAEtB,IAAMwpD,EAAeh4D,mBAAQ,WAC3B,OAAIooC,EAAoBniC,EAAUG,cAAe/I,OAAS,EACjD,CACLqK,oBACAC,gBACAygC,kBAAmBA,EAAoB,GAGvCzgC,EAAgB/B,EAAcI,UAAW3I,OAAS,EAC7C,CACLqK,oBACAC,cAAeA,EAAgB,EAC/BygC,kBAAmB,GAGnB1gC,EAAoBhJ,EAAIrB,OAAS,EAC5B,CACLqK,kBAAmBA,EAAoB,EACvCC,cAAe,EACfygC,kBAAmB,GAGhB,OACN,CAAC1gC,EAAmBC,EAAeygC,IAEhC6vB,EAAmBj4D,mBAAQ,WAC/B,GAAIooC,EAAoB,EACtB,MAAO,CACL1gC,oBACAC,gBACAygC,kBAAmBA,EAAoB,GAG3C,GAAIzgC,EAAgB,EAClB,MAAO,CACLD,oBACAC,cAAeA,EAAgB,EAC/BygC,kBACExiC,EAAcI,UAAU2B,EAAgB,GAAIvB,cAAe/I,OAAS,GAG1E,GAAIqK,EAAoB,EAAG,CACzB,IAAMwwD,EAAuBv5D,EAAKD,EAAIgJ,EAAoB,IACpDywD,EACJD,EAAqBlyD,UACnBkyD,EAAqBlyD,UAAU3I,OAAS,GAE5C,MAAO,CACLqK,kBAAmBA,EAAoB,EACvCC,cAAeuwD,EAAsBlyD,UAAW3I,OAAS,EACzD+qC,kBAAmB+vB,EAAkB/xD,cAAe/I,OAAS,GAGjE,OAAO,OACN,CAACqK,EAAmBC,EAAeygC,IAEhCgwB,EAAmB,WACnBJ,GACFH,EAAqBG,EAAatwD,mBAClCowD,EAAiBE,EAAarwD,eAC9BowD,EAAqBC,EAAa5vB,oBACzB1yC,EAAMkmD,iBACf9uC,EAAQjP,KAAK,sBAEbiP,EAAQqJ,UAYNslC,EAAmBz7C,mBAAQ,WAC/B,IAAMq4D,EAAmB15D,EAAKD,EAAIA,EAAIrB,OAAS,IACzCi7D,EACJD,EAAiBryD,UAAUqyD,EAAiBryD,UAAU3I,OAAS,GAGjE,OADEi7D,EAAalyD,cAAckyD,EAAalyD,cAAc/I,OAAS,GACzCwI,cAAgB,IACvC,CAAC6B,EAAmBC,EAAeygC,IAEtC,OACE,qCACE,cAAC,GAAD,CACEvuC,MACEnE,EAAMkmD,iBAAN,+BAEMjgD,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,SAAW,cAE1C,mBAENyoB,eAAe,WAEjB,eAAC,GAAD,WACGtqB,EAAMkmD,iBACL,cAAC8b,GAAD,UACE,cAAC5pD,GAAA,EAAD,CAAYxD,QAAQ,KAAKqK,MAAM,SAA/B,mDAIA,KACJ,cAAC,GAAD,iBAAQ1O,QAAR,IAAQA,OAAR,EAAQA,EAAU3W,OAClB,cAAC,GAAD,CACE0f,gBAAiBpJ,EAAaiiC,UAC9B0vB,YAAa9wD,EAAaZ,cAAgB,EAC1CM,eAAgBs1C,EAChBtT,iBAAkB1hC,EAAa0hC,iBAC/BxhC,eAAgBF,EAAalS,GAC7B+iE,eAAgBA,EAChB1wD,mBAAoBH,EAAatB,eAEnC,eAAC,GAAD,WACE,gCACG8yD,GACC,cAAC,GAAD,CACE/hD,cAAY,kBACZzI,MAAM,UACNU,KAAK,QACLR,QAtDe,WACvBsqD,IACFJ,EAAoB,OAACI,QAAD,IAACA,OAAD,EAACA,EAAkBvwD,mBACvCowD,EAAgB,OAACG,QAAD,IAACA,OAAD,EAACA,EAAkBtwD,eACnCowD,EAAoB,OAACE,QAAD,IAACA,OAAD,EAACA,EAAkB7vB,qBA8C/B,sBASF,cAAC,GAAD,CACElyB,cAAY,cACZzI,MAAM,UACNU,KAAK,QACLR,QAASyqD,EAJX,2BASF,cAAC,GAAD,CACE3qD,MAAM,UACNnD,QAAQ,OACRqD,QAASyqD,EAHX,6BC7MV,SAAS,KAA2Q,OAA9P,GAAWh1D,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,IAAK,CAChD/Y,GAAI,UACJw2C,UAAW,gBACG,gBAAoB,OAAQ,CAC1Cx2C,GAAI,eACJ,YAAa,eACb6b,EAAG,sMACH26B,UAAW,+BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,mIACH26B,UAAW,+BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,+LACH26B,UAAW,+BACX16B,KAAM,YACS,gBAAoB,IAAK,CACxC9b,GAAI,YACJ,YAAa,YACbw2C,UAAW,uBACG,gBAAoB,OAAQ,CAC1Cx2C,GAAI,eACJ,YAAa,eACb6b,EAAG,wEACH26B,UAAW,oBACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,yEACH26B,UAAW,0BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,iFACH26B,UAAW,8BACX16B,KAAM,aACU,gBAAoB,OAAQ,CAC5C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,iOACH26B,UAAW,8BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,8HACH26B,UAAW,8BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,uHACH26B,UAAW,8BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,oFACH26B,UAAW,sBACX16B,KAAM,YACS,gBAAoB,IAAK,CACxC9b,GAAI,YACJ,YAAa,YACbw2C,UAAW,sBACG,gBAAoB,OAAQ,CAC1Cx2C,GAAI,eACJ,YAAa,eACb6b,EAAG,iGACH26B,UAAW,+BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,gDACH26B,UAAW,sBACX16B,KAAM,aACU,gBAAoB,OAAQ,CAC5C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,mSACH26B,UAAW,uBACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,mMACH26B,UAAW,6BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,8JACH26B,UAAW,8BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,mHACH26B,UAAW,8BACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,mFACH26B,UAAW,qBACX16B,KAAM,YACS,gBAAoB,OAAQ,CAC3C9b,GAAI,eACJ,YAAa,eACb6b,EAAG,0CACH26B,UAAW,qBACX16B,KAAM,aAGR,SAASkoD,GAAUhoD,EAAMC,GACvB,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDO,MAAO,6BACPH,MAAO,IACPC,OAAQ,IACRC,QAAS,cACTE,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,IAGpB,IAAI,GAA0B,aAAiB0+D,IAChC,I,qUChJR,IAAMC,GAA2BjjE,YAAOkjE,GAAPljE,CAAH,MACnB,qBAAGkV,MAAkBC,QAAQ,OAGlCkE,GAAYrZ,IAAOgW,IAAV,MAOT,qBAAGd,MAAkBE,QAAQC,QAAQ3c,QCDnCyqE,GAT4B,WACzC,OACE,eAAC,GAAD,WACE,cAACF,GAAD,CAA0BtiD,cAAY,yBACtC,cAACpI,GAAA,EAAD,0D,oBCRN,SAAS,KAA2Q,OAA9P,GAAW1K,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,IAAK,CAChDg5C,SAAU,yBACI,gBAAoB,OAAQ,CAC1CC,SAAU,UACVC,SAAU,UACVp2C,EAAG,6eACHC,KAAM,WAGJ,GAAqB,gBAAoB,OAAQ,KAAmB,gBAAoB,WAAY,CACtG9b,GAAI,mBACU,gBAAoB,OAAQ,CAC1Coc,MAAO,GACPC,OAAQ,GACRP,KAAM,YAGR,SAASsoD,GAAcpoD,EAAMC,GAC3B,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTR,KAAM,OACNS,MAAO,6BACPC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,GAAO,IAG3B,IAAI,GAA0B,aAAiB8+D,IAChC,IC5Cf,SAAS,KAA2Q,OAA9P,GAAWv1D,OAAO+L,QAAU,SAAU7B,GAAU,IAAK,IAAI8B,EAAI,EAAGA,EAAIC,UAAUhS,OAAQ+R,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5M,KAAO8M,EAAclM,OAAOmM,UAAUC,eAAeC,KAAKH,EAAQ9M,KAAQ8K,EAAO9K,GAAO8M,EAAO9M,IAAY,OAAO8K,IAA2BoC,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9M,EAAK4M,EAAnE9B,EAEzF,SAAuCgC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9M,EAAK4M,EAA5D9B,EAAS,GAAQwC,EAAa1M,OAAOC,KAAKiM,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWzS,OAAQ+R,IAAO5M,EAAMsN,EAAWV,GAAQS,EAASE,QAAQvN,IAAQ,IAAa8K,EAAO9K,GAAO8M,EAAO9M,IAAQ,OAAO8K,EAFxM,CAA8BgC,EAAQO,GAAuB,GAAIzM,OAAO6M,sBAAuB,CAAE,IAAIC,EAAmB9M,OAAO6M,sBAAsBX,GAAS,IAAKF,EAAI,EAAGA,EAAIc,EAAiB7S,OAAQ+R,IAAO5M,EAAM0N,EAAiBd,GAAQS,EAASE,QAAQvN,IAAQ,GAAkBY,OAAOmM,UAAUY,qBAAqBV,KAAKH,EAAQ9M,KAAgB8K,EAAO9K,GAAO8M,EAAO9M,IAAU,OAAO8K,EAMne,IAAI,GAAqB,gBAAoB,OAAQ,CACnD8C,EAAG,8sGACHC,KAAM,UAGR,SAASuoD,GAAQroD,EAAMC,GACrB,IAAI3W,EAAQ0W,EAAK1W,MACb4W,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,CAAC,QAAS,YAErD,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTR,KAAM,OACNS,MAAO,6BACPC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ7W,EAAqB,gBAAoB,QAAS,CAC3DtF,GAAIkc,GACH5W,GAAS,KAAM,IAGpB,IAAI,GAA0B,aAAiB++D,IAChC,I,ipDCrBf,IAAMzK,GAAiBzpC,YAAH,MAGF,qBAAGja,MAAkBC,QAAQ,MAGlC0jD,GAAgB74D,IAAOgW,IAAV,MAEE,qBAAGd,MAAkBE,QAAQK,KAAK,QAC5C,qBAAGP,MAAkBC,QAAQ,QAIlC49C,GAAa/yD,IAAOgW,IAAV,MACD,qBAAGstD,gCAEd,qBAAGpuD,MAAkBE,QAAQE,OAAOC,SAK5B,qBAAGL,MAAkBC,QAAQ,QAC5B,qBAAGD,MAAkBC,QAAQ,MAGpCouD,GAAWvjE,IAAOgW,IAAV,MAIF,qBAAGd,MAAkBC,QAAQ,QAC5B,qBAAGD,MAAkBC,QAAQ,MAOpC+jD,GAAYl5D,YAAOuY,KAAPvY,CAAH,MACX,qBAAGkV,MAAkBE,QAAQy1B,KAAKnyC,QAUhC8qE,GAAWxjE,IAAOgW,IAAV,MACV,qBAAGd,MAAkBE,QAAQy1B,KAAKnyC,QAQhC+qE,GAAazjE,YAAO4U,GAAP5U,CAAH,MACZ,qBAAGkV,MAAkBE,QAAQy1B,KAAKnyC,QAIhCu9C,GAAiBj2C,YAAO0jE,KAAP1jE,CAAH,KACvB44D,IAGS+K,GAAsB3jE,YAAO4jE,GAAP5jE,CAAH,KAC5B44D,IAGSiL,GAAwB7jE,YAAO8jE,KAAP9jE,CAAH,KAC9B44D,IAGSmL,GAAuB/jE,YAAOgkE,GAAPhkE,CAAH,KAC7B44D,ICsDWqL,GAlH6C,SAAC,GAItD,IAHL94D,EAGI,EAHJA,UACA+4D,EAEI,EAFJA,cACAC,EACI,EADJA,iBAEM5sD,EAAUC,cACRsF,EAAmBna,qBAAWka,IAA9BC,eACAwE,EAAgB7e,6BAAhB6e,YAEF8iD,EAAuBz9D,YAC3B,IAAIrB,KAAJ,UAAY4+D,EAAcG,wBAC1B,8BACA,CAAEz9D,OAAQC,MA2DNy9D,EAAiB,uCAAG,WAAO56D,GAAP,SAAApN,EAAA,2DAChBoN,EADgB,OAEjB,UAFiB,OAIjB,WAJiB,OAMjB,WANiB,OAQjB,YARiB,sCAGPy6D,IAHO,wEAKb5sD,EAAQjP,KAAK,aALA,gCAObiP,EAAQjP,KAAR,6BAAmC47D,EAAc54D,WAPpC,gCASbiM,EAAQjP,KAAR,sCAA4C6C,KAT/B,2CAAH,sDAavB,OACE,eAAC,GAAD,CAAewV,cAAA,4BAAkCujD,EAAc54D,SAA/D,UACE,eAAC,GAAD,CACEg4D,6BA3C0B,SAACiB,GAC/B,OAAQA,GACN,IAAK,WACH,OAAOjjD,EAAY7E,MAAMvE,MAAMqL,MACjC,IAAK,aACL,IAAK,YACH,OAAOjC,EAAY7E,MAAMvE,MAAMyiC,MACjC,IAAK,cACH,OAAOr5B,EAAY7E,MAAMvE,MAAMwgC,OACjC,QACE,OAAOp3B,EAAY7E,MAAMvE,MAAMzC,KAAKpd,MAiCNmsE,CAC5BN,EAActkE,QAFlB,UAxD2B,SAACA,GAC9B,OAAQA,GACN,IAAK,WACH,OAAO,cAAC,GAAD,IACT,IAAK,aACL,IAAK,YACH,OAAO,cAAC+jE,GAAD,IACT,IAAK,cACH,OAAO,cAACI,GAAD,IACT,QACE,OAAO,cAACF,GAAD,KAmDNY,CAAuBP,EAActkE,QA5EZ,SAACA,GAC/B,OAAQA,GACN,IAAK,WACH,MAAO,eACT,IAAK,aACH,MAAO,6BACT,IAAK,YACH,MAAO,gBACT,IAAK,cACH,MAAO,eACT,QACE,MAAO,mBAkEN8kE,CAAwBR,EAActkE,WAEzC,eAAC2jE,GAAD,WACE,gCACE,cAAC,GAAD,UAAYW,EAAcS,YAC1B,eAACnB,GAAD,yBAAmBY,UAElBF,EAAcx6D,QAA6B,WAAnBoT,GAAwD,WAAzBonD,EAAcx6D,QACtE,cAAC+5D,GAAD,CACEvrD,MAAM,UACNnD,QAAQ,WACRqD,QAAO,sBAAE,sBAAA9b,EAAA,sEAAkBgoE,EAAkBJ,EAAcx6D,QAAlD,mFACTiX,cAAY,gBAJd,SA1CmB,SAACjX,GAC1B,OAAQA,GACN,IAAK,QACH,MAAO,qBACT,IAAK,SACH,MAAO,uBACT,IAAK,SACH,MAAO,iBACT,IAAK,UACH,MAAO,oBAuCFk7D,CAAmBV,EAAcx6D,iB,q0DC9HvC,IAAM2P,GAAYrZ,IAAOgW,IAAV,MAKF,qBAAGd,MAAkBC,QAAQ,MAGpCgoB,GAAcn9B,YAAOuY,KAAPvY,CAAH,MAWXkf,GAAQlf,YAAOuY,KAAPvY,CAAH,MACA,qBAAGkV,MAAkBC,QAAQ,MAGlC0vD,GAAqB7kE,YAAO4U,GAAP5U,CAAH,MACpB,qBAAGkV,MAAkBE,QAAQy1B,KAAKnyC,QAGzB,qBAAGwc,MAAkBC,QAAQ,MAC9B,qBAAGD,MAAkBC,QAAQ,QAGnC2vD,GAAc9kE,YAAO84B,KAAP94B,CAAH,MACN,qBAAGkV,MAAkBC,QAAQ,OAGlCyK,GAAiB5f,YAAO6f,KAAP7f,CAAH,MAIdme,GAAmBne,YAAOoe,KAAPpe,CAAH,MAKhB+f,GAAiB/f,YAAO8Y,IAAP9Y,CAAH,MACL,qBAAGkV,MAAkBE,QAAQE,OAAOC,SACvC,qBAAGL,MAAkBC,QAAQ,MACrC,qBAAGD,MAAkBC,QAAQ,QAC5B,qBAAGD,MAAkBC,QAAQ,QAQ5Bu3C,GAAe1sD,IAAOgW,IAAV,MAKZ22C,GAAkB3sD,IAAOgW,IAAV,MAQT,qBAAGd,MAAkBC,QAAQ,SCiJjC4vD,GAvLiB,WAAO,IAAD,EAEMhjE,mBACxC,IAHkC,mBAE7BijE,EAF6B,KAEdC,EAFc,OAK4BljE,mBAAS,IALrC,mBAK7BmjE,EAL6B,KAKHC,EALG,OAMUpjE,oBAAS,GANnB,mBAM7BqjE,EAN6B,KAMZC,EANY,OAQoB1iE,qBACtDkR,IADMc,EAR4B,EAQ5BA,uBAAwBP,EARI,EAQJA,oBAGxB7R,EAAaI,qBAAWd,IAAxBU,SACFgV,EAAUC,cACJrM,EAAcwzB,cAAlB3/B,GAb4B,EAmBhC83B,KAJOwuC,EAfyB,EAelCj6D,QACMk6D,EAhB4B,EAgBlCn8D,KACSo8D,EAjByB,EAiBlCrjE,QACApD,EAlBkC,EAkBlCA,kBAlBkC,EAwBhCkM,KAHFM,EArBkC,EAqBlCA,WACAK,EAtBkC,EAsBlCA,4BACS65D,EAvByB,EAuBlCtjE,QAEuBujE,EAAiCz7D,GACxD,qBADMa,gBAIiBmwB,EAA0BhxB,GAAa,aAAc1H,GAAtEuI,gBAERpK,qBAAU,WACHglE,IACHzkE,IAAMxG,MAAM,kEACZ8c,EAAQjP,KAAK,QAEd,CAACo9D,IAEJhlE,qBAAU,WACR4kE,EAAe59D,OAAOyD,IACtBw6D,IACArF,EAA2B54D,OAAOyD,MACjC,CAACA,IAEJ,IAAMysB,EAAU2tC,EAAYp6D,GAEtBw6D,EAAyB,WAC7B/5D,EAA4BlE,OAAOyD,IAChChI,MAAK,SAAC6hE,GACLC,EAAiBD,MAElB9nE,OAAM,SAACC,GACN,IAAMoC,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,OAIZ+gE,EAA0B,uCAAG,WAAOthE,GAAP,SAAA1C,EAAA,+EAElByC,EAAkBC,GAC5BmE,MAAK,qBAAGtF,KAAQI,aAChBkF,MAAK,SAACvF,GACAA,GACLunE,EAA4BvnE,MAND,wEAU1B4H,OAAO,EAAD,IAAM/F,SAAS,QAAQwB,IAAMxG,MAAN,MAVH,wDAAH,sDAc1B0pE,EAAgB,uCAAG,WAAO74D,GAAP,SAAAhP,EAAA,0DACjB8X,EADiB,uBAErBnT,IAAMxG,MACJ,iFAHmB,iCAQvB4qE,GAAmB,GARI,SASjB95D,EAAWD,GACdnI,MAAK,WACJyiE,GAAqB,OAEtBziE,MAAK,WACJ,OAAOwR,OAERxR,MAAK,WACJiD,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MACjBuV,EAAQjP,KAAR,kCACAiP,EAAQjP,KAAR,uBAELpL,OAAM,SAACC,GAA+B,IAAD,EACpC,GAA6B,OAAzB,UAAAA,EAAI5B,gBAAJ,eAAcqE,QAAgB,CAChC,IAAML,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,QAEZ0B,IAAMxG,MAAN,0BACqB2L,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,SAAW,aAD7D,wCAMHqB,SAAQ,WACPgiE,GAAmB,MAjCA,2CAAH,sDAqChB7b,EAAYgc,GAAkBC,GAAwBL,EAE5D,OAAI5b,EACK,cAAC,GAAD,CAAiBrnD,QAASqnD,IAIjC,qCACE,cAAC,GAAD,CACEllD,MAAM,GACNwa,YACE,cAAC,GAAD,CACE4B,KAAK,MACLxI,MAAM,UACNE,QAAS,kBAAMb,EAAQqJ,UAHzB,SAKE,cAAC,GAAD,MAGJ7B,cACE,eAAC,GAAD,WACE,cAAC,GAAD,UACG,cAACsoC,GAAA,EAAD,CAAQlxC,IAAK+uD,MAEhB,cAAC,GAAD,CAAa9lD,MAAM,SAAnB,gBAA6BwY,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAS79B,UAG1CilB,aACE,cAAC,GAAD,CAAgB/F,GAAG,uBAAnB,SACE,cAAC,GAAD,QAIN,eAAC,GAAD,WACE,cAAC,GAAD,CAAOlE,QAAQ,KAAf,mCACCkmB,GACC,eAAC4pC,GAAD,CACE3sD,MAAM,UACNnD,QAAQ,WACRqD,QAAS,WACPb,EAAQjP,KAAR,6CAA4CsvB,QAA5C,IAA4CA,OAA5C,EAA4CA,EAAS54B,MAJzD,UAOE,cAAC8lE,GAAD,IAPF,kCAWAE,EAAcl9D,QAAU,cAAC,GAAD,MACvBk9D,EAAcl9D,QACf,mCACGk9D,EAAcz6D,KAAI,SAACs7D,GAElB,OAAK5qC,GAA2C,aAAjB4qC,EAAMjmE,QAA0C,gBAAjBimE,EAAMjmE,OAKlE,cAAC,GAAD,CAEEuL,UAAWzD,OAAOyD,GAClB+4D,cAAe2B,EACf1B,iBAAgB,sBAAE,sBAAA7nE,EAAA,sEACV6nE,EAAiBz8D,OAAOm+D,EAAMv6D,UADpB,oFAHb5D,OAAOm+D,EAAMv6D,UALb,iB,shBCnMhB,IAAM+N,GAAYrZ,IAAOgW,IAAV,MAKT,qBAAGd,MAAkBC,QAAQ,EAAG,EAAG,EAAG,MACxC,qBAAGD,MAAkBE,QAAQC,QAAQ3c,QAG5BsH,YAAO03B,KAAP13B,CAAH,MAKN,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAGrBsH,IAAOgW,IAAV,M,4VCjBjB,IAAMyhB,GAAOz3B,YAAO03B,KAAP13B,CAAH,MAKN,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAGnCsmC,GAAch/B,IAAOgW,IAAV,M,qBCsET8vD,GA9DV,SAAC,GAA+D,IAA7D//C,EAA4D,EAA5DA,cAAeoE,EAA6C,EAA7CA,SAAUnE,EAAmC,EAAnCA,SAAU+/C,EAAyB,EAAzBA,mBACdC,EAAkC/7D,GAC3D,sBADMc,kBAGmBk7D,EAA+Bh8D,GACxD,0BADMY,kBAGR,OACE,cAAC,KAAD,CACEkb,cAAeA,EACfC,SAAUA,EACVK,kBAAkB,EAClB8D,SAAUA,EAJZ,SAMG,YAA+B,IAA5BlE,EAA2B,EAA3BA,OAAQc,EAAmB,EAAnBA,aACV,OACE,eAAC,GAAD,CAEER,YAAY,EAFd,UAIE,cAACC,GAAD,CACEtO,MAAM,UACNlZ,GAAG,eACH0nB,WAAY,CAAE,cAAe,gBAC7BmN,YAAY,gLACZ95B,KAAK,eACL0sB,OAAO,SACPzD,aAAa,MACbiR,WAAS,EACTC,KAAM,KAER,eAAC,GAAD,WACG8xC,GACC,cAAC,GAAD,CACErlD,cAAY,cACZ3iB,KAAK,SACL4a,KAAK,QACLV,MAAM,UACNG,SAAU0O,GAAgBna,KAAQmZ,EAAeE,GALnD,oBAUDggD,GACC,cAAC,GAAD,CACEtlD,cAAY,cACZvI,QAAS,kBAAM2tD,KACfntD,KAAK,QACLV,MAAM,UACNG,SAAU0O,GAAgBna,KAAQ,GAAIqZ,EAAOigD,cAL/C,gCC6BDC,GAzEgB,WAAO,IAAD,EAQ/BjzD,KANFC,EAFiC,EAEjCA,kBACAhK,EAHiC,EAGjCA,IACAC,EAJiC,EAIjCA,KACAjH,EALiC,EAKjCA,QACAiR,EANiC,EAMjCA,MACAC,EAPiC,EAOjCA,wBAEM7L,EAAoB7E,qBAAWkR,IAA/BrM,gBACmBw+D,EAAkC/7D,GAC3D,sBADMc,kBAIFI,EAAS,OAAG3D,QAAH,IAAGA,OAAH,EAAGA,EAAiB2D,UAEnCzK,qBAAU,WACRyS,EAAkBhI,KACjB,CAACA,IAEJ,IAAMi7D,EAAeh9D,EAAKD,EAAI,IACxBk9D,EAAM,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAcpnE,GACvBwN,EAAO,CACX05D,cAA0B,OAAZE,QAAY,IAAZA,OAAA,EAAAA,EAAcF,cAAd,OAA6BE,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAcF,aAAe,IAG1E,GAAI/jE,EACF,OAAO,cAAC,GAAD,CAAiBA,QAASA,IAyBnC,OACE,qCACE,cAAC,GAAD,IACA,cAAC0e,GAAD,CAAgBxI,UAAW2tD,EAA3B,SACE,eAAC,GAAD,WACE,cAACztD,GAAA,EAAD,CAAYxD,QAAQ,KAApB,8BACA,cAACwD,GAAA,EAAD,CAAYxD,QAAQ,QAAQqK,MAAM,SAAlC,0FAIA,cAAC,GAAD,CACE4G,SAjCW,SAACC,GACpB,OAAO7S,EAAMizD,EAASpgD,GACnB9iB,MAAK,WACJlC,IAAMmlB,QAAQ,kCAEflpB,OAAM,SAACC,GACN,IAAMoC,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,OA2BRwmE,mBAvBiB,WACzB,OAAO1yD,EAAwBgzD,GAC5BljE,MAAK,WACJlC,IAAMmlB,QAAQ,kCAEflpB,OAAM,SAACC,GACN,IAAMoC,EAAiBD,GAAoBnC,GAC3C8D,IAAMxG,MAAM8E,OAiBRwmB,cAAevZ,aCtDZ85D,GArB6C,SAAC,GAAe,IAAbhiE,EAAY,EAAZA,MAAY,EACjCvC,oBAAS,GADwB,mBAClEwyD,EADkE,KACpDC,EADoD,KAGjEtzD,EAAYyB,qBAAWd,IAAvBX,QAEFqlE,EAAqB,WACzB/R,GAAiBD,IAGnB,OACE,qCACE,cAAC,GAAD,CAAQjwD,MAAOA,EAAO+b,cAAekmD,IACrC,cAAC,GAAD,CACEhwD,KAAMg+C,EACNh9B,QAASgvC,EACT/uC,UAAWt2B,Q,okBCpBZ,IAAMmY,GAAYrZ,IAAOgW,IAAV,MAGV,qBAAGd,MAAkBC,QAAQ,MAG5B0jD,GAAgB74D,IAAOgW,IAAV,MAObwwD,GAAWxmE,YAAOuY,KAAPvY,CAAH,MAEH,qBAAGkV,MAAkBC,QAAQ,MAGlC+hB,GAAoBl3B,YAAOymE,KAAPzmE,CAAH,MACnB,qBAAGkV,MAAkBE,QAAQC,QAAQ3c,QAC7B,qBAAGwc,MAAkBC,QAAQ,MC4BjCuxD,GAzC2B,WAAO,IAAD,MACR/jE,qBAAWd,IAAzCU,EADsC,EACtCA,SAAUK,EAD4B,EAC5BA,gBACZ2U,EAAUC,cAEVmvD,EAAyBj/D,OAAM,OAACnF,QAAD,IAACA,GAAD,UAACA,EAAUP,YAAX,iBAAC,EAAgB81B,gBAAjB,aAAC,EAA0BhwB,QAAU,EAEpE8+D,EAAqB,uCAAG,sBAAAtqE,EAAA,+EAEpBsG,IAFoB,sDAI1BjG,QAAQC,IAAR,MAJ0B,wDAAH,qDAgB3B,OARA8D,qBAAU,WACRkmE,IAEID,GACFpvD,EAAQjP,KAAK,OAEd,CAACq+D,IAGF,qCACE,cAAC,GAAD,CAAmBriE,MAAM,KACzB,cAAC,GAAD,UACE,eAAC,GAAD,WACE,cAAC,GAAD,IACA,cAACkiE,GAAD,CAAUtuD,MAAM,UAAUyI,cAAY,cAAtC,+EAGA,cAAC6lD,GAAD,CAAUtuD,MAAM,UAAUyI,cAAY,eAAtC,iICSKkmD,GAxCyB,WAAO,IAAD,IACNlkE,qBAAWd,IAAzCU,EADoC,EACpCA,SAAUK,EAD0B,EAC1BA,gBACZ2U,EAAUC,cAEVsvD,EAAqB,OAAGvkE,QAAH,IAAGA,GAAH,UAAGA,EAAUP,YAAb,aAAG,EAAgBmI,eAExCy8D,EAAqB,uCAAG,sBAAAtqE,EAAA,+EAEpBsG,IAFoB,sDAI1BjG,QAAQC,IAAR,MAJ0B,wDAAH,qDAgB3B,OARA8D,qBAAU,WACRkmE,IAEIE,GACFvvD,EAAQjP,KAAK,OAEd,IAGD,qCACE,cAAC,GAAD,CAAmBhE,MAAM,KACzB,cAAC,GAAD,UACE,eAAC,GAAD,WACE,cAAC,GAAD,CAAmB4T,MAAM,YACzB,eAACsuD,GAAD,CAAUtuD,MAAM,UAAUyI,cAAY,cAAtC,qBACO,4DADP,iCAGA,cAAC6lD,GAAD,CAAUtuD,MAAM,UAAUyI,cAAY,eAAtC,4FCtBJomD,GAID,SAAC,GAIC,IAHLC,EAGI,EAHJA,gBACAC,EAEI,EAFJA,4BACAC,EACI,EADJA,6BACI,EACqCvkE,qBAAWkR,IAA5CO,EADJ,EACIA,oBAAqBjS,EADzB,EACyBA,QACrBI,EAAaI,qBAAWd,IAAxBU,SAGR,OAAIJ,EACK,cAAC,GAAD,CAAiBA,QAASA,IAG/B8kE,IAAgC7yD,GAElCnT,IAAMxG,MAAN,oCAEI2L,GAAU,OAAC7D,QAAD,IAACA,OAAD,EAACA,EAAUP,MAAQ,mBAAqB,sBAFtD,gCAIE,CACEwyC,QAAS,qCAGN,cAAC,IAAD,CAAUv7B,GAAI,CAAEjY,SAAU,2BACxBkmE,GAAkC9yD,EAEpC,cAAC,IAAD,CAAU6E,GAAI,CAAEjY,SAAS,cAEzBgmE,KAsEIG,GAlEY,SAAC,GAKiB,IAAD,UAJ/BC,EAI+B,EAJ1Cn+C,UACAg+C,EAG0C,EAH1CA,4BACAC,EAE0C,EAF1CA,6BACG72C,EACuC,6FACf1tB,qBAAWd,IAA9BG,EADkC,EAClCA,KAAMO,EAD4B,EAC5BA,SACR8kE,EAAkC38D,QACtCu8D,GAA+BC,GAG3BI,GACI,OAAR/kE,QAAQ,IAARA,OAAA,EAAAA,EAAUvD,OAAV,OAAiBuD,QAAjB,IAAiBA,GAAjB,UAAiBA,EAAUP,YAA3B,iBAAiB,EAAgBulE,oBAAjC,aAAiB,EAA8Bl2B,aAC3Cs1B,EAAyBj/D,OAAM,OAACnF,QAAD,IAACA,GAAD,UAACA,EAAUP,YAAX,iBAAC,EAAgB81B,gBAAjB,aAAC,EAA0BhwB,QAAU,EACpEg/D,EAAqB,OAAGvkE,QAAH,IAAGA,GAAH,UAAGA,EAAUP,YAAb,aAAG,EAAgBmI,eAE9C,OACE,cAAC,IAAD,2BACMkmB,GADN,IAEEm3C,OAAQ,SAACrsD,GAEP,OAAKnZ,EAYF2kE,GACAW,GAC2B,yBAA5BnsD,EAAMpa,SAASC,SAOd8lE,GAC2B,6BAA5B3rD,EAAMpa,SAASC,SAKbqmE,EAEA,cAAC,GAAD,CACEJ,4BAA6BA,IAA+B,EAC5DC,6BACEA,IAAgC,EAElCF,gBAAiB,kBAAM,cAACI,EAAD,eAAejsD,OAKrC,cAACisD,EAAD,eAAejsD,IAfb,cAAC,IAAD,CAAUlC,GAAG,2BAA2BC,OAAK,IAR7C,cAAC,IAAD,CAAUD,GAAG,uBAAuBC,OAAK,IAd9C,cAAC,IAAD,CACED,GAAI,CACFjY,SAAU,SACVb,MAAO,CAAE0J,KAAMsR,EAAMpa,kBCvEtB0mE,GAJG,CAChBC,SARmB,SAACC,GAEnBxjE,OAAeyjE,KAAK,QAAS,YAAa,CACzCC,UAAWF,MCcAG,GAbkB,WAC/B,IAAM/mE,EAAW2B,cASjB,OAPAhC,qBAAU,WAGN+mE,GAAUC,SAAS3mE,EAASC,YAE7B,CAACD,IAEG,8BCyBMgnE,GApBc,SAAC,GAGiB,IAFlCX,EAEiC,EAF5Cn+C,UACGoH,EACyC,8BACpCruB,EAASW,qBAAWd,IAApBG,KACA7B,EAAUuC,cAAVvC,MACR,OACE,cAAC,IAAD,2BACMkwB,GADN,IAEEm3C,OAAQ,SAACrsD,GAAD,aACLzQ,QAAQ1I,GAGP,cAAC,IAAD,CAAUiX,IAAS,OAAL9Y,QAAK,IAALA,GAAA,UAAAA,EAAO0J,YAAP,eAAa7I,WAAY,MAFvC,cAAComE,EAAD,eAAejsD,SCwKV6sD,GAnKU,WACvB,OACE,qCACE,cAAC,GAAD,IACA,eAAC,IAAD,WAKE,cAAC,GAAD,CACEhsD,KAAK,YACLiN,UAAWwL,KAEb,cAAC,GAAD,CACEzY,KAAK,sBACLiN,UAAWwL,KAEb,cAAC,GAAD,CACEzY,KAAK,uBACLiN,UAAWsjC,KAEb,cAAC,GAAD,CACEvwC,KAAK,SACLiN,UAAW6mC,KAGb,cAAC,GAAD,CACE52C,OAAK,EACL8C,KAAK,IACLiN,UAAW6oC,GACXoV,8BAA4B,IAG9B,cAAC,GAAD,CACEhuD,OAAK,EACL8C,KAAK,0BACLiN,UAAW87C,KAEb,cAAC,GAAD,CACE7rD,OAAK,EACL8C,KAAK,WACLiN,UAAWujC,KAEb,cAAC,GAAD,CACEtzC,OAAK,EACL8C,KAAK,SACLiN,UAAWijC,KAEb,cAAC,GAAD,CACElwC,KAAK,4CACLiN,UAAW0Y,KAEb,cAAC,GAAD,CACE3lB,KAAK,kCACLiN,UAAWoqC,KAEb,cAAC,GAAD,CACEn6C,OAAK,EACL8C,KAAK,iBACLiN,UAAWgrC,KAEb,cAAC,GAAD,CACEj4C,KAAK,WACLiN,UAAWk9C,GACXc,6BAA2B,IAE7B,cAAC,GAAD,CACE/tD,OAAK,EACL8C,KAAK,YACLiN,UAAWmU,KAEb,cAAC,GAAD,CACElkB,OAAK,EACL8C,KAAK,gBACLiN,UAAWyV,KAEb,cAAC,GAAD,CACE1iB,KAAK,wDACLiN,UAAWwxC,KAEb,cAAC,GAAD,CACEz+C,KAAK,yEACLiN,UAAW6nB,KAEb,cAAC,GAAD,CACE90B,KAAK,0CACLiN,UAAWovC,KAEb,cAAC,GAAD,CACEr8C,KAAK,yCACLiN,UAAW0zC,KAEb,cAAC,GAAD,CACE3gD,KAAK,+BACLiN,UAAWg3C,KAEb,cAAC,GAAD,CACE/mD,OAAK,EACL8C,KAAK,sBACLiN,UAAWoB,KAEb,cAAC,GAAD,CACErO,KAAK,aACLiN,UAAW64C,GACXmF,6BAA2B,IAE7B,cAAC,GAAD,CACE/tD,OAAK,EACL8C,KAAK,uBACLiN,UAAW6oC,KAEb,cAAC,GAAD,CACE54C,OAAK,EACL8C,KAAK,WACLiN,UAAWw/B,GACXwe,6BAA2B,IAE7B,cAAC,GAAD,CACEjrD,KAAK,uCACLiN,UAAW6jB,GACXm6B,6BAA2B,IAE7B,cAAC,GAAD,CACEjrD,KAAK,qCACLiN,UAAWg/C,GACXhB,6BAA2B,IAE7B,cAAC,GAAD,CACEjrD,KAAK,kCACLiN,UAAWi/C,KAEb,cAAC,GAAD,CACElsD,KAAK,qBACLiN,UAAWiyC,GACX+L,6BAA2B,IAE7B,cAAC,GAAD,CACEjrD,KAAK,iCACLiN,UAAWwnC,GACXwW,6BAA2B,IAE7B,cAAC,GAAD,CACEjrD,KAAK,mBACLiN,UAAWk/C,GACXlB,6BAA2B,IAE7B,cAAC,GAAD,CACE/tD,OAAK,EACL8C,KAAK,2BACLiN,UAAW49C,KAEb,cAAC,GAAD,CACE3tD,OAAK,EACL8C,KAAK,uBACLiN,UAAWy9C,KAGb,cAAC,IAAD,CAAUztD,GAAG,a,8WC7Ld,IAAMI,GAAYrZ,IAAOgW,IAAV,MAMTonB,GAAUp9B,IAAOgW,IAAV,MAIA,qBAAGoyD,SACR,OAAS,SACF,qBAAGlzD,MAAkBE,QAAQ+jC,WAAWvhD,WCHxDywE,GAAiB,CACrB,YACA,WACA,QACA,WACA,0BACA,uBACA,yCACA,iCACA,SACA,KAqBaC,GAlBU,WAAO,IACtBtmE,EAASW,qBAAWd,IAApBG,KACFuoB,EAAQg+C,YAAcF,IAEtBG,EAAmB/9D,mBAAQ,WAC/B,OAAOC,QAAQ1I,IAAS0I,QAAO,OAAC6f,QAAD,IAACA,OAAD,EAACA,EAAOk+C,WACtC,CAACzmE,EAAMuoB,IAEV,OACE,eAAC,GAAD,WACE,cAAC,GAAD,CAAS69C,SAAUI,EAAnB,SACE,cAAC,GAAD,MAEDA,GAAoB,cAAC,GAAD,Q,idClCpB,IAAME,GAAQ1oE,YAAO2oE,IAAP3oE,CAAH,MAEA,qBAAGkV,MAAkBE,QAAQy1B,KAAKxyC,QAE1B,qBAAG6c,MAAkBE,QAAQqH,MAAMvE,MAAMzC,KAAKiH,SAItD,qBAAGxH,MAAkBE,QAAQgR,QAAQ/tB,QAGrC,qBAAG6c,MAAkBE,QAAQwI,QAAQvlB,QAIrC,qBAAG6c,MAAkBE,QAAQ3a,MAAMpC,QAE3B,qBAAG6c,MAAkBE,QAAQ3a,MAAMiiB,SCb9CksD,OAJf,WACE,OAAO,cAACF,GAAD,CAAOG,UAAW,IAAOnqD,SAAS,kB,OCC3C,O,OCHe,SAASoqD,KAAe,IAC7B9nE,EAAa0B,cAAb1B,SAMR,OAJAN,qBAAU,WACRyD,OAAO4kE,SAAS,EAAG,KAClB,CAAC/nE,IAEG,K,kdCRMgoE,mBAAf,MCIaC,GAA0Bx5C,IAAMpvB,cAAc,IAE3D4oE,GAAwBxc,YAAc,0BAE/B,IAEMyc,GAAqC,SAAC,GAAkB,IAAhBrwE,EAAe,EAAfA,SAC3CoG,EAAoBb,KAApBa,gBACA+C,EAASW,qBAAWd,IAApBG,KAEFmnE,EAA+B,uCAAG,sBAAA7sE,EAAA,sDAChC,iBAAkB6H,SAEe,WAA5BilE,aAAaC,YAItBD,aAAaE,oBAAoBnmE,MAAK,SAACkmE,GAElB,YAAfA,GACFE,QAVgC,2CAAH,qDAgB/BA,EAAc,uCAAG,4BAAAjtE,EAAA,sEACMO,KADN,YACf2sE,EADe,wCAGbvqE,EAAgB,CAAEG,qBAAsBoqE,IAH3B,2CAAH,qDA8BpB,OAvBA9oE,qBAAU,WACJsB,GACFmnE,IAIF,IAAMrsE,EAAYC,cACc0sE,YAAU3sE,GAAW,SAAC6M,GAAa,IAAD,EAC1D+/D,EAAiB,UAAG//D,EAAQggE,oBAAX,aAAG,EAAsBrlE,MAChD,GAAIolE,EAAmB,CAAC,IAAD,EACfE,EAAsB,CAC1Bl4B,KAAI,UAAE/nC,EAAQggE,oBAAV,aAAE,EAAsBj4B,MAG9B,IAAI03B,aAAaM,EAAmBE,OAIxC,OAAO,eAGN,CAAC5nE,IAGF,cAACinE,GAAwB7nE,SAAzB,CAAkCC,MAAO,GAAzC,SACGxI,MhYA0B,SAACE,GAChC,IAAI8wE,GAAoB,EAExBvsD,YAAW,sBAAC,8BAAAhhB,EAAA,yDAGe,KAFnB2M,EAAYZ,MAEJP,SAAgB+hE,EAHpB,iDAKVA,GAAoB,EACdC,EAAiB7gE,EAAU1C,QAEjCyC,GAAcjQ,EAAe+wE,GAC1B5sE,OAAM,WACL+L,EAAU8gE,OAAO,EAAG,EAAGD,MAExBzmE,SAAQ,WACPkF,GAAcU,GACd4gE,GAAoB,KAdd,2CAgBTG,KiYtDLC,CAAkBjxE,GAElB,IAsCekxE,GAtCO,WAAO,IAAD,EACQhpD,KAA1BE,EADkB,EAClBA,SAAUW,EADQ,EACRA,YADQ,EAEmBtf,6BAArC0nE,EAFkB,EAElBA,eAAgBC,EAFE,EAEFA,iBAOxB,OALA1pE,qBAAU,WACR2pE,qBAAWF,GACXG,sBAAYF,KACX,IAGD,cAAC,EAAD,UACE,cAACG,EAAA,EAAD,CAAgBC,aAAW,EAA3B,SACE,cAACC,EAAA,EAAD,CAAev1D,MAAOkM,EAAtB,SACE,eAAC,IAAD,CAAqBlM,MAAO6M,EAA5B,UACE,cAAC,GAAD,IACA,cAAC,GAAD,UACE,cAAC,GAAD,UACE,cAAC,IAAD,UACE,cAAC,GAAD,UACE,cAAC,GAAD,UACE,cAAC,GAAD,UACE,eAAC2oD,GAAD,WACE,cAAC5B,GAAD,IACA,cAAC,GAAD,IACA,cAAC,GAAD,6BCxCX6B,GAZS,SAACC,GACnBA,GAAeA,aAAuBt9D,UACxC,8BAAqBnK,MAAK,YAAkD,IAA/C0nE,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOD,GACPE,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAQL,OCERM,GAAcxgE,QACW,cAA7BvG,OAAOpD,SAASoqE,UAEe,UAA7BhnE,OAAOpD,SAASoqE,UAEhBhnE,OAAOpD,SAASoqE,SAAS5gD,MACvB,2DA2CN,SAAS6gD,GAAgBC,EAAehvE,GACtCivE,UAAUC,cACPC,SAASH,GACTloE,MAAK,SAACsoE,GACLA,EAAaC,cAAgB,WAC3B,IAAMC,EAAmBF,EAAaG,WACd,MAApBD,IAGJA,EAAiBE,cAAgB,WACA,cAA3BF,EAAiBxrE,QACfmrE,UAAUC,cAAcO,YAG1BnvE,QAAQC,IAAI,oDACZuH,OAAOpD,SAAS60B,KAAOzxB,OAAOpD,SAAS60B,KAAKxxB,QAAQ,OAAQ,IAGxD/H,GAAUA,EAAO0vE,UACnB1vE,EAAO0vE,SAASN,KAMlB9uE,QAAQC,IAAI,sCAGRP,GAAUA,EAAO2vE,WACnB3vE,EAAO2vE,UAAUP,WAO5BvuE,OAAM,SAACzC,GACNkC,QAAQlC,MAAM,4CAA6CA,MC5FjEwxE,IAASzE,OACP,cAAC,IAAM0E,WAAP,UACE,cAAC,GAAD,MAEF95C,SAAS+5C,eAAe,SDiBnB,SAAkB9vE,GACvB,GAA6C,kBAAmBivE,UAAW,CAGzE,GADkB,IAAIniD,IAAI7vB,GAAwB6K,OAAOpD,SAAS60B,MACpDw2C,SAAWjoE,OAAOpD,SAASqrE,OAIvC,OAGFjoE,OAAO2gD,iBAAiB,QAAQ,WAC9B,IAAMumB,EAAK,UAAM/xE,GAAN,sBAEP4xE,KA6DV,SAAiCG,EAAehvE,GAE9CqhB,MAAM2tD,EAAO,CACXlyE,QAAS,CAAE,iBAAkB,YAE5BgK,MAAK,SAAC5H,GAEL,IAAMmC,EAAcnC,EAASpC,QAAQ0F,IAAI,gBAEnB,MAApBtD,EAASqE,QACO,MAAflC,IAA8D,IAAvCA,EAAY8c,QAAQ,cAG5C8wD,UAAUC,cAAcc,MAAMlpE,MAAK,SAACsoE,GAClCA,EAAaa,aAAanpE,MAAK,WAC7BgB,OAAOpD,SAASwrE,eAKpBnB,GAAgBC,EAAOhvE,MAG1Ba,OAAM,WACLP,QAAQC,IACN,oEApFA4vE,CAAwBnB,EAAOhvE,GAI/BivE,UAAUC,cAAcc,MAAMlpE,MAAK,WACjCxG,QAAQC,IACN,+GAMJwuE,GAAgBC,EAAOhvE,OCvC/BowE,GAKA9B,O","file":"static/js/main.bb5bf428.chunk.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setManifest = exports.setFavicon = exports.serverSideScheme = exports.clientSideScheme = void 0;\nconst resolvers_1 = require(\"./src/resolvers\");\nObject.defineProperty(exports, \"clientSideScheme\", { enumerable: true, get: function () { return resolvers_1.clientSideScheme; } });\nObject.defineProperty(exports, \"serverSideScheme\", { enumerable: true, get: function () { return resolvers_1.serverSideScheme; } });\nObject.defineProperty(exports, \"setFavicon\", { enumerable: true, get: function () { return resolvers_1.setFavicon; } });\nObject.defineProperty(exports, \"setManifest\", { enumerable: true, get: function () { return resolvers_1.setManifest; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setManifest = exports.setFavicon = exports.serverSideScheme = exports.clientSideScheme = void 0;\nconst query_string_1 = require(\"query-string\");\nconst schemes_1 = __importDefault(require(\"./schemes\"));\n/**\n * This helper should be used on client-side only in order to resolve current Scheme\n * - If on production environment, it will take in consideration the client's subdomain\n * - Else, it will take in consideration the client's `schemeId` querystring\n */\nexports.clientSideScheme = () => {\n // If not on production, we'll allow query ?schemeId instead of subdomains\n // to make tests easier\n const subdomain = isProduction()\n ? extractAppSubdomain()\n : extractAppQuerystringOrLocalStorage();\n const schemeId = resolveSchemeIdBySubdomain(subdomain);\n return schemes_1.default[schemeId];\n};\n/**\n * This helper usually will be used on server-side in order to resolve current Scheme given organizationId\n */\nexports.serverSideScheme = (organizationId) => {\n const schemeId = resolveSchemeIdByOrganizationid(organizationId);\n return schemes_1.default[schemeId];\n};\nexports.setFavicon = (faviconUrl) => {\n let link = document.querySelector(\"link[rel~='icon']\");\n if (!link) {\n link = document.createElement(\"link\");\n link.rel = \"icon\";\n document.getElementsByTagName(\"head\")[0].appendChild(link);\n }\n link.href = faviconUrl;\n};\nexports.setManifest = (jsonManifest) => {\n let link = document.querySelector(\"link[rel~='manifest']\");\n const stringManifest = JSON.stringify(jsonManifest);\n const blob = new Blob([stringManifest], { type: \"application/json\" });\n const manifestUrl = URL.createObjectURL(blob);\n if (!link) {\n link = document.createElement(\"link\");\n link.rel = \"manifest\";\n document.getElementsByTagName(\"head\")[0].appendChild(link);\n }\n link.setAttribute(\"href\", manifestUrl);\n};\nconst extractAppSubdomain = () => {\n if (!window) {\n throw new Error(\"Not in a browser environment!\");\n }\n const subdomain = window.location.hostname.split(\".\")[0];\n return subdomain;\n};\nconst extractAppQuerystringOrLocalStorage = () => {\n const parsedQS = query_string_1.parse(window.location.search);\n if (parsedQS.schemeId == null) {\n return extractAppLocalStorage();\n }\n else {\n return extractAppQuerystring(parsedQS);\n }\n};\nconst extractAppLocalStorage = () => {\n const localStorageAppScheme = window.localStorage.getItem(\"cuidador-de-confianca-scheme\");\n return localStorageAppScheme || \"default\";\n};\nconst extractAppQuerystring = (parsedQS) => {\n let queryStringAppScheme;\n if (Array.isArray(parsedQS.schemeId)) {\n queryStringAppScheme = parsedQS.schemeId[0];\n }\n else {\n queryStringAppScheme = parsedQS.schemeId;\n }\n if (queryStringAppScheme) {\n window.localStorage.setItem(\"cuidador-de-confianca-scheme\", queryStringAppScheme);\n }\n return queryStringAppScheme;\n};\nconst resolveSchemeIdBySubdomain = (subdomain) => {\n if (!subdomain) {\n return \"default\";\n }\n const matchedScheme = Object.entries(schemes_1.default).find(([_, { appCSubdomain, appFSubdomain }]) => {\n return subdomain === appCSubdomain || subdomain === appFSubdomain;\n });\n if (matchedScheme) {\n return matchedScheme[0];\n }\n else {\n return \"default\";\n }\n};\nconst resolveSchemeIdByOrganizationid = (organizationId) => {\n if (organizationId === 123) {\n return \"ciacuidadores\";\n }\n else if (organizationId === 806) {\n return \"duarte\";\n }\n else if (organizationId === 1134) {\n return \"cmais\";\n }\n else if (organizationId === 1296) {\n return \"amor_cuidado\";\n }\n else {\n return \"default\";\n }\n};\nfunction isProduction() {\n if (!window) {\n throw new Error(\"Not in a browser environment!\");\n }\n return process.env.REACT_APP_ENV === 'production' || process.env.REACT_APP_ENV === 'qa';\n}\n//# sourceMappingURL=resolvers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst schemes = {\n default: {\n schemeId: \"default\",\n organizationName: \"Cuidador de Confiança\",\n organizationEmail: \"contato@cuidadordeconfianca.com.br\",\n appFSubdomain: \"familia\",\n appCSubdomain: \"app\",\n appFUrl: \"https://familia.cuidadordeconfianca.com.br\",\n appCUrl: \"https://app.cuidadordeconfianca.com.br\",\n appFShortcutIconUrl: \"https://storage.googleapis.com/cuidador_white_label/default/logo-white.png\",\n appCShortcutIconUrl: \"https://storage.googleapis.com/cuidador_white_label/default/logo-blue.png\",\n appFFaviconUrl: \"https://storage.googleapis.com/cuidador_white_label/default/appF-favicon.ico\",\n appCFaviconUrl: \"https://storage.googleapis.com/cuidador_white_label/default/appC-favicon.ico\",\n logoDarkUrl: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark.svg\",\n logoDarkPngUrl: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark.png\",\n logoLightUrl: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light.svg\",\n logoLightPngUrl: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light.png\",\n appFJsonManifest: {\n short_name: \"FamÃlia - Cuidador de Confiança\",\n name: \"FamÃlia - Cuidador de Confiança\",\n icons: [\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light-96.png\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light-192.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light-512.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#000000\",\n background_color: \"#ffffff\",\n },\n appCJsonManifest: {\n short_name: \"Cuidador de Confiança\",\n name: \"Cuidador de Confiança\",\n icons: [\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark-96.png\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark-192.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark-512.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#01B1EC\",\n background_color: \"#01B1EC\",\n },\n appCPalette: {\n primary: {\n main: \"#0088D3\",\n dark: \"#004063\",\n },\n secondary: {\n main: \"#2B999F\",\n dark: \"#1876a8\",\n },\n info: {\n main: \"#0088D3\",\n dark: \"#00234d\",\n },\n error: {\n light: \"#a71633\",\n main: \"#5c1221\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n light: \"#fff176\",\n },\n success: {\n main: \"rgb(52, 187, 102)\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#34BB66\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#5c1221\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n ocean: \"#2B999F\",\n },\n },\n },\n appFPalette: {\n primary: {\n main: \"#2B999F\",\n light: \"#DEEBF7\",\n dark: \"#249196\",\n },\n secondary: {\n light: \"#81BEE0\",\n main: \"#1A5C5F\",\n dark: \"#38808f\",\n },\n info: {\n main: \"#0088D3\",\n },\n error: {\n main: \"#5c1221\",\n dark: \"#eb6441\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n },\n success: {\n main: \"#34BB66\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#34BB66\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#eb6441\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n ocean: \"#2B999F\",\n },\n },\n },\n emailPalette: {\n primary: \"#0088D3\",\n },\n reportPalette: {\n primary: \"#0088D3\",\n secondary: \"#2B999F\",\n },\n },\n duarte: {\n schemeId: \"duarte\",\n organizationId: 806,\n organizationName: \"Duarte\",\n organizationEmail: \"financeiro@duartehomecare.com.br\",\n appFSubdomain: \"duarte-familia\",\n appCSubdomain: \"duarte-cuidador\",\n appFUrl: \"https://duarte-familia.cuidadordeconfianca.com.br\",\n appCUrl: \"https://duarte-cuidador.cuidadordeconfianca.com.br\",\n appFShortcutIconUrl: \"https://storage.googleapis.com/cuidador_white_label/duarte/29appF.png\",\n appCShortcutIconUrl: \"https://storage.googleapis.com/cuidador_white_label/duarte/29appC.png\",\n appFFaviconUrl: \"https://storage.googleapis.com/cuidador_white_label/duarte/appF-favicon.ico\",\n appCFaviconUrl: \"https://storage.googleapis.com/cuidador_white_label/duarte/appC-favicon.ico\",\n logoDarkUrl: \"https://storage.googleapis.com/cuidador_white_label/duarte/logo-dark-duarte.svg\",\n logoDarkPngUrl: \"https://storage.googleapis.com/cuidador_white_label/duarte/logo-dark-duarte.png\",\n logoLightUrl: \"https://storage.googleapis.com/cuidador_white_label/duarte/logo-white-duarte.svg\",\n logoLightPngUrl: \"https://storage.googleapis.com/cuidador_white_label/duarte/logo-white-duarte.png\",\n appFJsonManifest: {\n short_name: \"Duarte - Cuidadores de Idosos\",\n name: \"Duarte - Cuidadores de Idosos\",\n icons: [\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/duarte/96appF.png\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/duarte/192appF.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/duarte/512appF.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#000000\",\n background_color: \"#ffffff\",\n },\n appCJsonManifest: {\n short_name: \"Duarte - Cuidadores de Idosos\",\n name: \"Duarte - Cuidadores de Idosos\",\n icons: [\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/duarte/96appC.png\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/duarte/192appC.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/duarte/512appC.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#A362A5\",\n background_color: \"#A362A5\",\n },\n appCPalette: {\n primary: {\n main: \"#40847F\",\n },\n secondary: {\n main: \"#12B0A0\",\n },\n info: {\n main: \"#0088D3\",\n dark: \"#00234d\",\n },\n error: {\n light: \"#a71633\",\n main: \"#5c1221\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n light: \"#fff176\",\n },\n success: {\n main: \"rgb(52, 187, 102)\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#34BB66\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#5c1221\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n ocean: \"#2B999F\",\n },\n },\n },\n appFPalette: {\n primary: {\n main: \"#725CA7\",\n },\n secondary: {\n main: \"#504075\",\n },\n info: {\n main: \"#0088D3\",\n },\n error: {\n main: \"#5c1221\",\n dark: \"#eb6441\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n },\n success: {\n main: \"#34BB66\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#34BB66\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#eb6441\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n ocean: \"#2B999F\",\n },\n },\n },\n emailPalette: {\n primary: \"#6C5CA4\",\n },\n reportPalette: {\n primary: \"#40847F\",\n secondary: \"#6C5CA4\",\n },\n },\n ciacuidadores: {\n schemeId: \"ciacuidadores\",\n appFSubdomain: \"ciacuidadoresF\",\n appCSubdomain: \"ciacuidadoresC\",\n appFUrl: \"https://ciacuidadoresF.cuidadordeconfianca.com.br\",\n appCUrl: \"https://ciacuidadoresC.cuidadordeconfianca.com.br\",\n appFShortcutIconUrl: \"https://storage.googleapis.com/cuidador_white_label/ciacuidadores/cia_appF.png\",\n appCShortcutIconUrl: \"https://storage.googleapis.com/cuidador_white_label/ciacuidadores/cia_appC.png\",\n appFFaviconUrl: \"https://storage.googleapis.com/cuidador_white_label/ciacuidadores/appF-favicon.png\",\n appCFaviconUrl: \"https://storage.googleapis.com/cuidador_white_label/ciacuidadores/appC-favicon.png\",\n logoDarkUrl: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark.svg\",\n logoLightUrl: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light.svg\",\n appFJsonManifest: {\n short_name: \"FamÃlia - Cia Cuidadores\",\n name: \"FamÃlia - Cia Cuidadores\",\n icons: [\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light-96.png\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light-192.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-light-512.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#000000\",\n background_color: \"#ffffff\",\n },\n appCJsonManifest: {\n short_name: \"Cia Cuidadores\",\n name: \"Cia Cuidadores\",\n icons: [\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark-96.png\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark-192.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/default/logo-dark-512.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#000000\",\n background_color: \"#ffffff\",\n },\n appCPalette: {\n primary: {\n main: \"#0088D3\",\n dark: \"#00076D\",\n },\n secondary: {\n main: \"#2B999F\",\n dark: \"#1876a8\",\n },\n info: {\n main: \"#0088D3\",\n dark: \"#00234d\",\n },\n error: {\n light: \"#a71633\",\n main: \"#5c1221\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n light: \"#fff176\",\n },\n success: {\n main: \"rgb(52, 187, 102)\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#25D366\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#5c1221\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n },\n },\n },\n appFPalette: {\n primary: {\n main: \"#2B999F\",\n light: \"#DEEBF7\",\n dark: \"#249196\",\n },\n secondary: {\n light: \"#81BEE0\",\n main: \"#00076D\",\n dark: \"#38808f\",\n },\n info: {\n main: \"#0088D3\",\n },\n error: {\n main: \"#5c1221\",\n dark: \"#eb6441\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n },\n success: {\n main: \"#34BB66\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#25D366\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n },\n },\n },\n },\n cmais: {\n schemeId: \"cmais\",\n organizationId: 1134,\n organizationName: \"CMais Saúde\",\n organizationEmail: \"contato@cmaissaude.com.br\",\n appFSubdomain: \"cmais-familia\",\n appCSubdomain: \"cmais-cuidador\",\n appFUrl: \"https://cmais-familia.cuidadordeconfianca.com.br\",\n appCUrl: \"https://cmais-cuidador.cuidadordeconfianca.com.br\",\n appFShortcutIconUrl: \"https://storage.googleapis.com/cuidador_white_label/cmais/appF_shortcut.png\",\n appCShortcutIconUrl: \"https://storage.googleapis.com/cuidador_white_label/cmais/appC_shortcut.png\",\n appFFaviconUrl: \"https://storage.googleapis.com/cuidador_white_label/cmais/appFfavicon.ico\",\n appCFaviconUrl: \"https://storage.googleapis.com/cuidador_white_label/cmais/appCfavicon.ico\",\n logoDarkUrl: \"https://storage.googleapis.com/cuidador_white_label/cmais/logo_dark.svg\",\n logoDarkPngUrl: \"https://storage.googleapis.com/cuidador_white_label/cmais/logo_dark.png\",\n logoLightUrl: \"https://storage.googleapis.com/cuidador_white_label/cmais/logo_white.svg\",\n logoLightPngUrl: \"https://storage.googleapis.com/cuidador_white_label/cmais/logo_white.png\",\n appFJsonManifest: {\n short_name: \"CMais Saúde - Cuidados Domiciliares\",\n name: \"CMais Saúde - Cuidados Domiciliares\",\n icons: [\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/cmais/inconeAppF_96.png\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/cmais/inconeAppF_192.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/cmais/inconeAppF_512.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#000000\",\n background_color: \"#ffffff\",\n },\n appCJsonManifest: {\n short_name: \"CMais Saúde - Cuidados Domiciliares\",\n name: \"CMais Saúde - Cuidados Domiciliares\",\n icons: [\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/cmais/inconeAppC_96.png\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/cmais/inconeAppC_192.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://storage.googleapis.com/cuidador_white_label/cmais/inconeAppC_512.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#000000\",\n background_color: \"#ffffff\",\n },\n appCPalette: {\n primary: {\n main: \"#64436c\",\n },\n secondary: {\n main: \"#8F619B\",\n },\n info: {\n main: \"#0088D3\",\n dark: \"#00234d\",\n },\n error: {\n light: \"#a71633\",\n main: \"#5c1221\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n light: \"#fff176\",\n },\n success: {\n main: \"rgb(52, 187, 102)\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#34BB66\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#5c1221\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n ocean: \"#2B999F\",\n },\n },\n },\n appFPalette: {\n primary: {\n main: \"#4E9672\",\n },\n secondary: {\n main: \"#376950\",\n },\n info: {\n main: \"#0088D3\",\n },\n error: {\n main: \"#5c1221\",\n dark: \"#eb6441\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n },\n success: {\n main: \"#34BB66\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#34BB66\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#eb6441\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n ocean: \"#2B999F\",\n },\n },\n },\n emailPalette: {\n primary: \"#8F619B\",\n },\n reportPalette: {\n primary: \"#8F619B\",\n secondary: \"#4E9672\",\n },\n },\n amor_cuidado: {\n schemeId: \"amor_cuidado\",\n organizationId: 1296,\n organizationName: \"Amor & Cuidado\",\n organizationEmail: \"\",\n appFSubdomain: \"amor-cuidado-familia\",\n appCSubdomain: \"amor-cuidado-cuidador\",\n appFUrl: \"https://amor-cuidado-familia.cuidadordeconfianca.com.br\",\n appCUrl: \"https://amor-cuidado-cuidador.cuidadordeconfianca.com.br\",\n appFShortcutIconUrl: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoLinkF.png\",\n appCShortcutIconUrl: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoLinkC.png\",\n appFFaviconUrl: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/faviconAzul.ico\",\n appCFaviconUrl: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/faviconRoxo.ico\",\n logoDarkUrl: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoHorizDark.svg\",\n logoDarkPngUrl: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoHorizDark.png\",\n logoLightUrl: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoHorizBranco.svg\",\n logoLightPngUrl: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoHorizBranco.png\",\n appFJsonManifest: {\n short_name: \"Amor & Cuidado - Cuidados Domiciliares\",\n name: \"Amor & Cuidado - Cuidados Domiciliares\",\n icons: [\n {\n src: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logo_96\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoVertical_192.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoVertical_512.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#000000\",\n background_color: \"#ffffff\",\n },\n appCJsonManifest: {\n short_name: \"Amor & Cuidado - Cuidados Domiciliares\",\n name: \"Amor & Cuidado - Cuidados Domiciliares\",\n icons: [\n {\n src: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logo_96\",\n sizes: \"96x96 64x64 32x32 24x24 16x16\",\n type: \"image/png\",\n },\n {\n src: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoVertical_192.png\",\n type: \"image/png\",\n sizes: \"192x192\",\n },\n {\n src: \"https://cuidadores-white-label.s3.sa-east-1.amazonaws.com/public/logoVertical_512.png\",\n type: \"image/png\",\n sizes: \"512x512\",\n },\n ],\n start_url: \"/\",\n display: \"standalone\",\n theme_color: \"#000000\",\n background_color: \"#ffffff\",\n },\n appCPalette: {\n primary: {\n main: \"#b56ca5\",\n },\n secondary: {\n main: \"#965888\",\n },\n info: {\n main: \"#0088D3\",\n dark: \"#00234d\",\n },\n error: {\n light: \"#a71633\",\n main: \"#5c1221\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n light: \"#fff176\",\n },\n success: {\n main: \"rgb(52, 187, 102)\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#34BB66\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#5c1221\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n ocean: \"#2B999F\",\n },\n },\n },\n appFPalette: {\n primary: {\n main: \"#4a77af\",\n },\n secondary: {\n main: \"#446D9E\",\n },\n info: {\n main: \"#0088D3\",\n },\n error: {\n main: \"#5c1221\",\n dark: \"#eb6441\",\n },\n warning: {\n main: \"rgb(254,206,60)\",\n },\n success: {\n main: \"#34BB66\",\n },\n extra: {\n color: {\n grey: {\n main: \"#424242\",\n light: \"#f5f5f5\",\n dark: \"#212121\",\n },\n green: \"#34BB66\",\n red: {\n main: \"#9F0000\",\n light: \"#F36161\",\n dark: \"#eb6441\",\n },\n blue: \"#1876A8\",\n yellow: \"#f6af32\",\n ocean: \"#2B999F\",\n },\n },\n },\n emailPalette: {\n primary: \"#4a77af\",\n },\n reportPalette: {\n primary: \"#4a77af\",\n secondary: \"#446D9E\",\n },\n },\n};\nexports.default = schemes;\n//# sourceMappingURL=schemes.js.map","import React from 'react';\nimport * as Sentry from '@sentry/react';\n\nfunction FallbackComponent() {\n return <div>Ocorreu um erro</div>;\n}\n\nconst ErrorBoundary: React.FC = ({ children }) => {\n return (\n <Sentry.ErrorBoundary fallback={FallbackComponent}>\n {children}\n </Sentry.ErrorBoundary>\n );\n};\n\nexport default ErrorBoundary;\n","import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';\nimport localforage from 'localforage';\nimport { setup as setupCachedAxios } from 'axios-cache-adapter';\n\nconst defaultConfig = {\n timeout: 60000,\n headers: {\n Accept: 'application/json;charset=UTF-8',\n 'Content-Type': 'application/json',\n // To fix CORS problem ?\n // 'Access-Control-Allow-Origin': '*',\n },\n};\n\nexport const axiosInstance = axios.create({\n ...defaultConfig,\n baseURL: `${\n process.env.AMB === 'local'\n ? process.env.LOCAL_GATEWAY_URL\n : process.env.REACT_APP_GATEWAY_URL\n }/api/v1`,\n});\n\nconst forageStore = localforage.createInstance({\n driver: [localforage.INDEXEDDB, localforage.LOCALSTORAGE],\n name: 'cuidador-caregiver-cache',\n});\n\nexport const createCachedAxios = () =>\n setupCachedAxios({\n ...axiosInstance?.defaults,\n cache: {\n maxAge: 1000, // 1 sec to not force cache if connection is ok\n store: forageStore,\n exclude: {\n query: false,\n },\n // on network error, get staled data\n readOnError: (error: Error) => {\n return error.message === 'Network Error';\n },\n clearOnStale: false,\n },\n });\n\nexport const cachedAxiosInstance = createCachedAxios();\n\nexport const getCachedAxios = () => cachedAxiosInstance;\n\nexport const addGlobalRequestInterceptor = (\n onFulfilled: (\n config: AxiosRequestConfig\n ) => AxiosRequestConfig | Promise<AxiosRequestConfig>,\n onRejected?: () => void\n) => {\n const axiosInstanceId = axiosInstance.interceptors.request.use(\n onFulfilled,\n onRejected\n );\n const cachedAxiosInstanceId = cachedAxiosInstance.interceptors.request.use(\n onFulfilled,\n onRejected\n );\n\n return () => {\n axiosInstance.interceptors.request.eject(axiosInstanceId);\n cachedAxiosInstance.interceptors.request.eject(cachedAxiosInstanceId);\n };\n};\n\nexport const addGlobalResponseInterceptor = (\n onFulfilled?: (config: AxiosResponse) => AxiosResponse,\n // axios onRejected default type is any\n onRejected?: (error: any) => any // eslint-disable-line @typescript-eslint/no-explicit-any\n) => {\n const axiosInstanceId = axiosInstance.interceptors.response.use(\n onFulfilled,\n onRejected\n );\n\n const cachedAxiosInstanceId = cachedAxiosInstance.interceptors.response.use(\n onFulfilled,\n onRejected\n );\n\n return () => {\n axiosInstance.interceptors.response.eject(axiosInstanceId);\n cachedAxiosInstance.interceptors.response.eject(cachedAxiosInstanceId);\n };\n};\n\nexport default axiosInstance;\n","import * as Sentry from '@sentry/react';\nimport { AxiosRequestConfig } from 'axios';\nimport { getApp as firebaseGetApp } from 'firebase/app';\nimport firebaseOld from 'firebase/compat/app';\nimport 'firebase/compat/auth';\nimport 'firebase/compat/database';\nimport 'firebase/compat/messaging';\nimport 'firebase/compat/storage';\nimport { getMessaging, getToken } from 'firebase/messaging';\n\nconst firebaseConfig = {\n apiKey: process.env.REACT_APP_FIREBASE_API_KEY,\n authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,\n databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL,\n projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,\n storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,\n messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,\n appId: process.env.REACT_APP_FIREBASE_APP_ID,\n};\n\nfirebaseOld.initializeApp(firebaseConfig);\n\nexport const auth = firebaseOld.auth;\n\nexport const authRequestInterceptor = async (config: AxiosRequestConfig) => {\n try {\n const token = await auth().currentUser?.getIdToken();\n if (token) {\n config.headers.Authorization = `Bearer ${token}`;\n }\n } catch (err) {\n console.log(err);\n }\n return config;\n};\n\nexport const getFCMToken = async (): Promise<string | null> => {\n const messaging = getMessaging(getApp());\n const token = await getToken(messaging).catch((err) => {\n console.error(err);\n Sentry.captureException(err);\n return null;\n });\n return token;\n};\n\nexport const getApp = firebaseGetApp;\n\nexport default firebaseOld;\n","import defaultAxios from 'axios';\nimport { useCallback } from 'react';\n\nimport axios, { getCachedAxios } from '../config/axios';\n\nconst useMedia = () => {\n // Gets PUT signed url\n const getSignedUrl = useCallback(\n (endpoint: string, contentType: string) =>\n axios({\n method: 'put',\n url: endpoint,\n data: null,\n headers: {\n 'Content-Type': contentType,\n },\n }),\n []\n );\n\n // Puts file into Storage bucket\n const uploadMedia = useCallback(async (endpoint: string, file: File) => {\n const {\n data: { signedUrl },\n } = await getSignedUrl(endpoint, file.type);\n return defaultAxios({\n method: 'put',\n data: file,\n url: signedUrl,\n headers: {\n 'Content-Type': file.type,\n },\n });\n }, []);\n\n const getMedia = useCallback(\n (endpoint: string) =>\n getCachedAxios()({\n method: 'get',\n url: endpoint,\n data: null,\n }),\n []\n );\n\n return { uploadMedia, getMedia };\n};\n\nexport default useMedia;\n","import { CaregiverModel, SupporterModel, UserModel } from '@cuidador/database';\nimport { useCallback } from 'react';\nimport axios from '../config/axios';\nimport useMedia from './useMedia';\n\nexport type CompleteSignupBody = {\n userData: UserModel;\n caregiverData?: Omit<CaregiverModel, 'user' | 'supporter'>;\n supporterData?: SupporterModel;\n};\n\nconst endpoint = '/user';\n\nconst useUser = () => {\n const { uploadMedia, getMedia } = useMedia();\n const completeSignup = useCallback(\n async (data: CompleteSignupBody, completeSignupToken: string) => {\n try {\n const response = await axios.post(`${endpoint}/complete-signup`, data, {\n headers: {\n Authorization: `Bearer ${completeSignupToken}`,\n },\n });\n return Promise.resolve(response.data);\n } catch (err) {\n return Promise.reject(err);\n }\n },\n []\n );\n\n const checkSignupStatus = useCallback(async (userId: number) => {\n try {\n const response = await axios.get(\n `${endpoint}/check-signup-status/${userId}`\n );\n return Promise.resolve(response.data);\n } catch (err) {\n return Promise.reject(err);\n }\n }, []);\n\n const uploadProfilePicture = useCallback(\n async (file: File, userId: number) => {\n try {\n const response = await uploadMedia(\n `/media/profile-picture/user/${userId}`,\n file\n );\n return Promise.resolve(response);\n } catch (err) {\n return Promise.reject(err);\n }\n },\n []\n );\n\n const getProfilePicture = useCallback(async (id: number) => {\n try {\n const response = await getMedia(`/media/profile-picture/user/${id}`);\n return Promise.resolve(response);\n } catch (err) {\n return Promise.reject(err);\n }\n }, []);\n\n const putUserFCMToken = useCallback(\n async (data: { fcmRegistrationToken: string }) => {\n try {\n const response = await axios.put(`${endpoint}/fcm-token`, data);\n return Promise.resolve(response.data);\n } catch (err) {\n return Promise.reject(err);\n }\n },\n []\n );\n\n const deleteUserFCMToken = useCallback(\n async (fcmRegistrationToken: string) => {\n try {\n const response = await axios.delete(\n `${endpoint}/fcm-token/${fcmRegistrationToken}`\n );\n return Promise.resolve(response.data);\n } catch (err) {\n return Promise.reject(err);\n }\n },\n []\n );\n\n return {\n completeSignup,\n checkSignupStatus,\n uploadProfilePicture,\n getProfilePicture,\n putUserFCMToken,\n deleteUserFCMToken,\n };\n};\n\nexport default useUser;\n","import { APIError } from '@cuidador/lib';\nimport { AxiosError } from 'axios';\n/**\n * Error handler for cuidador de confianca API\n */\n\n// Returns a default message, give simple response's statusCode\nconst getStatusCodeMessage = (error: AxiosError<APIError>) => {\n const httpStatusCode = error?.response?.status;\n\n switch (httpStatusCode) {\n case 400:\n return 'Um erro ocorreu! Se o problema persistir, contacte o suporte.';\n case 401:\n return 'Erro com as credenciais! Faça login novamente.';\n case 403:\n return 'Você não está autorizado a acessar essas informações! Se acredita que isto é um erro, por favor, contacte o suporte.';\n case 404:\n return 'As informações buscadas não foram encontradas! Se o problema persistir, contacte o suporte.';\n case 500:\n return 'Um problema na comunicação com o servidor ocorreu! Se o problema persistir, contacte o suporte.';\n case 503:\n return 'Esse serviço encontra-se temporariamente indisponÃvel para manutenção! Se o problema persistir, contacte o suporte.';\n default:\n return 'Um erro ocorreu! Se o problema persistir, contacte o suporte.';\n }\n};\n\n// Extracts custom backend error displayMessage if provided\nconst getDisplayMessage = (error: AxiosError<APIError>) => {\n const customErrorData = error?.response?.data.displayMessage as string;\n const messages = [\n 'Você não está com um plantão em andamento. Atualize a página',\n 'Evento não encontrado.',\n ];\n\n if (messages.includes(customErrorData)) {\n return 'Você não está com um plantão em andamento. Atualize a página';\n }\n\n return customErrorData;\n};\n\nconst getConnectivityErrorMessage = () => {\n return 'Erro na conexão! Tente novamente.';\n};\n\n/*\nShows error message acoording to the folowing priority\n1- Network or unknown error\n2- Backend's custom code\n3- Default message, given statusCode\n*/\nexport const resolveErrorMessage = (error: AxiosError<APIError>) => {\n const resolveMessage = (error: AxiosError<APIError>) => {\n // nullish response means connectivity error\n if (!error.response) {\n const connectivityMessage = getConnectivityErrorMessage();\n return connectivityMessage;\n }\n\n // nullish response means connectivity error\n const displayMessage = getDisplayMessage(error);\n if (displayMessage) {\n return displayMessage;\n }\n\n const defaultStatusMessage = getStatusCodeMessage(error);\n if (defaultStatusMessage) {\n return defaultStatusMessage;\n }\n };\n // If backend sent a `displayMessage`, we use it\n // Else, show default message according to statusCode\n return resolveMessage(error);\n};\n","import styled from 'styled-components';\nimport LinearProgress from '@material-ui/core/LinearProgress';\n\nconst StyledLinearProgress = styled(LinearProgress)`\n position: fixed;\n width: 100%;\n z-index: 1;\n`;\n\nexport default StyledLinearProgress;\n","import React, {\n useEffect,\n useReducer,\n createContext,\n useCallback,\n} from 'react';\nimport { toast } from 'react-toastify';\n\nimport LoadingProgress from '../components/LoadingLinearProgress';\nimport { auth, authRequestInterceptor } from '../config/firebase';\nimport * as axios from '../config/axios';\n\nconst reducer = (state: number, { type }: { type: string }) => {\n switch (type) {\n case 'INCREMENT_LOADING':\n return state + 1;\n case 'DECREMENT_LOADING':\n return state - 1;\n default:\n return state;\n }\n};\n\ntype GlobalLoadingContextType = {\n incrementLoading: () => void;\n decrementLoading: () => void;\n};\n\nexport const GlobalLoadingContext = createContext<GlobalLoadingContextType>(\n {} as GlobalLoadingContextType\n);\n\nexport const GlobalLoadingProvider: React.FC = ({ children }) => {\n const [loadingCount, dispatch] = useReducer(reducer, 0);\n\n useEffect(() => {\n const removeRequestInterceptors = axios.addGlobalRequestInterceptor(\n (config) => {\n incrementLoading();\n return config;\n }\n );\n\n const removeResponseInterceptors = axios.addGlobalResponseInterceptor(\n (config) => {\n decrementLoading();\n return config;\n },\n (error) => {\n decrementLoading();\n if (error.response?.status === 401 && location.pathname !== '/login') {\n toast.error('Erro com as credenciais! Faça login novamente.');\n auth().signOut();\n }\n return Promise.reject(error);\n }\n );\n\n const removeFirebaseAuthRequestInterceptors = axios.addGlobalRequestInterceptor(\n authRequestInterceptor\n );\n\n return () => {\n removeRequestInterceptors();\n removeResponseInterceptors();\n removeFirebaseAuthRequestInterceptors();\n };\n }, []);\n\n const incrementLoading = useCallback(() => {\n dispatch({ type: 'INCREMENT_LOADING' });\n }, []);\n\n const decrementLoading = useCallback(() => {\n dispatch({ type: 'DECREMENT_LOADING' });\n }, []);\n\n return (\n <GlobalLoadingContext.Provider\n value={{ incrementLoading, decrementLoading }}\n >\n {loadingCount ? <LoadingProgress /> : null}\n {children}\n </GlobalLoadingContext.Provider>\n );\n};\n\nexport default GlobalLoadingProvider;\n","import { CaregiverModel, UserModel } from '@cuidador/database'\nimport { APIError } from '@cuidador/lib'\nimport { clientSideScheme } from '@cuidador/whitelabel'\nimport * as Sentry from '@sentry/react'\nimport { AxiosError } from 'axios'\nimport qs from 'query-string'\nimport React, { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { toast } from 'react-toastify'\nimport axios from '../config/axios'\nimport firebase, { auth, getFCMToken } from '../config/firebase'\nimport useUser from '../hooks/useUser'\nimport { resolveErrorMessage } from '../utils/error'\nimport { GlobalLoadingContext } from './RequestInterceptor'\nimport jwt from 'jsonwebtoken'\nimport { differenceInHours } from 'date-fns'\n\nexport interface ContextProps {\n user?: firebase.User | null\n userInfo?: CaregiverModel | null\n loading?: boolean\n error?: AxiosError<APIError> | null\n signIn (email: string, password: string): Promise<void>\n signOut?(): void\n setUserInfo: React.Dispatch<React.SetStateAction<CaregiverModel | undefined>>\n refreshUserInfo (): void\n setReloadUser: (value: boolean) => void\n}\n\nexport interface Props {\n children?: React.ReactNode\n}\n\nexport interface FirebaseErrorType {\n code: string\n message: string\n}\n\nexport const sendPasswordResetEmail = async (email: string) => {\n const response = await axios.post(`/auth/password/recover-request`, {\n email,\n userProfile: 'caregiver', // to guarantee the redirection after changing the password\n })\n return response\n}\n\nexport const changePassword = async (\n currentPassword: string,\n newPassword: string\n) => {\n try {\n const response = await axios.post(`auth/password/change`, {\n currentPassword,\n newPassword,\n })\n return Promise.resolve(response)\n } catch (err) {\n return Promise.reject(err)\n }\n}\n\nconst getUserInfo = async () => axios.get<UserModel>('/user/me')\n\nexport const AuthContext = createContext<ContextProps>({} as ContextProps)\n\nexport const AuthProvider: React.FC = ({ children }: Props) => {\n const [user, setUser] = useState<firebase.User | null>(null)\n const [error, setError] = useState<AxiosError<APIError> | null>(null)\n const [loading, setLoading] = useState(true)\n const [reloadUser, setReloadUser] = useState(false)\n const [userInfo, setUserInfo] = useState<CaregiverModel>()\n const { appFUrl } = clientSideScheme()\n const location = useLocation()\n const { incrementLoading, decrementLoading } = useContext(\n GlobalLoadingContext\n )\n const { deleteUserFCMToken } = useUser()\n\n const refreshUserInfo = async () => {\n const response = await getUserInfo()\n setUserInfo(response.data.caregiverAccount)\n }\n\n const requestSignIn = async (cpf: string, password: string) => {\n const response = await axios.post(`/auth/login`, {\n cpf,\n password,\n userProfile: 'caregiver',\n })\n return auth().signInWithCustomToken(response.data.token)\n }\n\n const signIn = async (cpf: string, password: string) => {\n try {\n incrementLoading()\n await requestSignIn(cpf, password)\n setError(null)\n } catch (err) {\n setError(err)\n } finally {\n decrementLoading()\n }\n }\n\n const signOut = () => {\n getFCMToken()\n .then((fcmToken) => {\n if (fcmToken) {\n deleteUserFCMToken(fcmToken)\n }\n })\n .finally(() => {\n auth().signOut()\n })\n }\n\n useEffect(() => {\n const unsubscribe = auth().onAuthStateChanged(async (firebaseUser) => {\n if (firebaseUser) {\n const hasCompletedSignUp = (await axios.get(`/user/check-signup-status/${firebaseUser?.uid}`)).data.hasCompletedSignup\n if (!hasCompletedSignUp) return\n }\n const token = await firebaseUser?.getIdToken()\n axios.defaults.headers.Authorization = firebaseUser\n ? `Bearer ${token}`\n : undefined\n\n if (firebaseUser) {\n try {\n const { claims } = await firebaseUser.getIdTokenResult()\n if (claims.auth !== 'caregiver') {\n // On this case, user has logged in with a token registered with wrong role\n toast.error(\n 'As credenciais utilizadas não são válidas para este aplicativo. Entre em contato com o suporte'\n )\n Sentry.captureException(\n new Error(\n `User with firebaseUser.uid=${firebaseUser.uid} has logged in on appC using a token signed with role=${claims.auth}. This should never happen.`\n )\n )\n signOut()\n return\n }\n\n const response = await getUserInfo()\n const userRole = response.data?.role\n if (!userRole) {\n // On this case, user has no role and should not be allowed to use the app\n toast.error(\n `Você não possui um perfil de acesso configurado! Por favor, entre em contato com o suporte`\n )\n Sentry.captureException(\n new Error(\n `User with firebaseUser.uid=${firebaseUser.uid} has no assigned role. This should never happen.`\n )\n )\n signOut()\n return\n }\n if (!userRole.caregiverAppAccess && userRole.guardianAppAccess) {\n // On this case, user role doesnt have access to caregiver app, but have access to guardian app; will be redirect to guardian app\n signOut()\n return window.location.replace(`${appFUrl}?token=${token}`)\n }\n if (!userRole.caregiverAppAccess) {\n // On this case, user role doesnt have access to caregiver app and should not be allowed to use the app\n const roleTitle = userRole.title\n toast.error(\n `Você possui o perfil de acesso ${roleTitle}, que não te dá acesso ao aplicativo do Cuidador`\n )\n signOut()\n return\n }\n setUserInfo(response.data.caregiverAccount)\n } catch (err) {\n toast.error(resolveErrorMessage(err))\n }\n }\n\n setUser(firebaseUser)\n setLoading(false)\n })\n\n return () => {\n unsubscribe()\n }\n }, [])\n\n useEffect(() => {\n const unsubscribe = auth().onAuthStateChanged(async (firebaseUser) => {\n if (firebaseUser) {\n const hasCompletedSignUp = (await axios.get(`/user/check-signup-status/${firebaseUser?.uid}`)).data.hasCompletedSignup\n if (!hasCompletedSignUp) return\n }\n const token = await firebaseUser?.getIdToken()\n axios.defaults.headers.Authorization = firebaseUser\n ? `Bearer ${token}`\n : undefined\n\n if (firebaseUser) {\n try {\n const { claims } = await firebaseUser.getIdTokenResult()\n if (claims.auth !== 'caregiver') {\n // On this case, user has logged in with a token registered with wrong role\n toast.error(\n 'As credenciais utilizadas não são válidas para este aplicativo. Entre em contato com o suporte'\n )\n Sentry.captureException(\n new Error(\n `User with firebaseUser.uid=${firebaseUser.uid} has logged in on appC using a token signed with role=${claims.auth}. This should never happen.`\n )\n )\n signOut()\n return\n }\n\n const response = await getUserInfo()\n const userRole = response.data?.role\n if (!userRole) {\n // On this case, user has no role and should not be allowed to use the app\n toast.error(\n `Você não possui um perfil de acesso configurado! Por favor, entre em contato com o suporte`\n )\n Sentry.captureException(\n new Error(\n `User with firebaseUser.uid=${firebaseUser.uid} has no assigned role. This should never happen.`\n )\n )\n signOut()\n return\n }\n if (!userRole.caregiverAppAccess && userRole.guardianAppAccess) {\n // On this case, user role doesnt have access to caregiver app, but have access to guardian app; will be redirect to guardian app\n signOut()\n return window.location.replace(`${appFUrl}?token=${token}`)\n }\n if (!userRole.caregiverAppAccess) {\n // On this case, user role doesnt have access to caregiver app and should not be allowed to use the app\n const roleTitle = userRole.title\n toast.error(\n `Você possui o perfil de acesso ${roleTitle}, que não te dá acesso ao aplicativo do Cuidador`\n )\n signOut()\n return\n }\n setUserInfo(response.data.caregiverAccount)\n } catch (err) {\n toast.error(resolveErrorMessage(err))\n }\n }\n\n setUser(firebaseUser)\n setLoading(false)\n setReloadUser(false)\n })\n\n return () => {\n unsubscribe()\n }\n }, [reloadUser])\n\n useEffect(() => {\n (async () => {\n const { token: apiAuthToken } = qs.parse(location.search)\n if (apiAuthToken) {\n try {\n setLoading(true)\n const response = await axios.post(\n '/auth/custom-token',\n { userProfile: 'caregiver' },\n { headers: { Authorization: `Bearer ${apiAuthToken}` } }\n )\n const decodedAuthToken = jwt.decode(apiAuthToken as string) as any\n const localToken = window.localStorage.getItem('completeSignUp')\n\n if (localToken) {\n const decodedLocalToken = JSON.parse(localToken)\n console.log('decodedLocal', decodedAuthToken)\n\n const isSameUser = decodedLocalToken.userId === decodedAuthToken.id\n const isRecent = differenceInHours(new Date(), new Date(decodedLocalToken.date)) <= 1\n\n if (decodedAuthToken && isSameUser && isRecent) {\n await auth().signInWithCustomToken(response.data.token)\n }\n }\n } catch (err) {\n console.error(err)\n Sentry.captureException(err)\n toast.error(resolveErrorMessage(err as AxiosError<APIError>))\n } finally {\n setLoading(false)\n }\n }\n })()\n }, [])\n\n useEffect(() => {\n if (userInfo) {\n Sentry.setUser({\n id: String(userInfo?.id),\n email: userInfo?.user?.email,\n username: userInfo?.user?.name,\n })\n } else {\n Sentry.setUser(null)\n }\n }, [userInfo])\n\n if (loading) return null\n\n return (\n <AuthContext.Provider\n value={{\n user,\n loading,\n error,\n signIn,\n signOut,\n userInfo,\n setUserInfo,\n refreshUserInfo,\n setReloadUser,\n }}\n >\n {children}\n </AuthContext.Provider>\n )\n}\n\nexport default AuthProvider\n","/**\n *\n * This is a copy of familia/src/contexts/permission\n * Any change here might need be reflected there\n *\n */\n\nimport { PermissionModel, UserModel } from '@cuidador/database';\nimport * as Sentry from '@sentry/react';\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport axios, * as axiosModule from '../config/axios';\nimport { AuthContext } from './auth';\n\ninterface UserPermissions {\n [resource: string]: PermissionModel[];\n}\n\nexport const DEFAULT_ROLES = {\n guardian: 1,\n caregiver: 2,\n admin: 3,\n selfCare: 4,\n visualizerGuardian: 5,\n supporter: 6,\n};\n\nexport interface ContextProps {\n loading?: boolean;\n hasLoaded?: boolean;\n error?: Error | null;\n permissions?: UserPermissions;\n refreshPermissions?: () => Promise<UserPermissions | undefined>;\n}\n\nexport const PermissionContext = createContext<ContextProps>(\n {} as ContextProps\n);\n\nexport const PermissionProvider: React.FC = ({ children }) => {\n const [loading, setLoading] = useState(false);\n const [hasLoaded, setHasLoaded] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [permissions, setPermissions] = useState<ContextProps['permissions']>(\n {}\n );\n const { user } = useContext(AuthContext);\n\n useEffect(() => {\n refreshPermissions();\n }, [user]);\n\n useEffect(() => {\n refreshPermissions();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n axiosModule.addGlobalResponseInterceptor(undefined, (error: any) => {\n if (error.response?.status === 403) {\n // Force permissions refresh on 403 response\n refreshPermissions();\n }\n return Promise.reject(error);\n });\n }, []);\n\n const refreshPermissions = useCallback(async (): Promise<\n UserPermissions | undefined\n > => {\n if (!user) {\n // User not logged in; Should not refresh permissions\n return undefined;\n }\n\n setLoading(true);\n try {\n const response = await axios.get(`auth/role/permission/me`);\n setPermissions(response.data);\n setHasLoaded(true);\n return response.data;\n } catch (err) {\n setError(err);\n // Will send to Sentry since Permissions fetch shouldn't fail\n Sentry.captureException(err);\n return Promise.reject(err);\n } finally {\n setLoading(false);\n }\n }, [user, setPermissions, setLoading]);\n\n if (user && !hasLoaded) return null;\n\n return (\n <PermissionContext.Provider\n value={{\n loading,\n hasLoaded,\n error,\n permissions,\n refreshPermissions,\n }}\n >\n {children}\n </PermissionContext.Provider>\n );\n};\n\nexport const usePermission = () => useContext(PermissionContext);\n\nexport default PermissionProvider;\n\nexport const isSupporter = (user?: UserModel) => {\n return user?.role?.id === DEFAULT_ROLES.supporter;\n};\n\nexport const isSelfCare = (user?: UserModel) => {\n return user?.role?.id === DEFAULT_ROLES.selfCare;\n};\n\nexport const isCaregiver = (user?: UserModel) => {\n return user?.role?.id === DEFAULT_ROLES.caregiver;\n};\n","import { ShiftModel, UserModel } from '@cuidador/database';\nimport { format } from 'date-fns';\nimport ptBrLocale from 'date-fns/locale/pt-BR';\nimport { isCaregiver } from '../../contexts/permission';\n\nexport function getShiftCardBackgroundColor(shift: ShiftModel) {\n if (shift.status === 'not_done') return '#C0C0C0';\n if (shift.isAdditionalCoverage) return '#EFC1401A';\n return 'white';\n}\n\nexport function getDayGroup(date: Date) {\n const weekday = format(date, 'EEE', { locale: ptBrLocale });\n const capitalizedWeekday = weekday.charAt(0).toUpperCase() + weekday.slice(1);\n const day = format(date, 'dd', { locale: ptBrLocale });\n const month = format(date, 'MMMM', { locale: ptBrLocale });\n return `${capitalizedWeekday} ${day} de ${month}`;\n}\n\nexport function getShiftRealTime(shift: ShiftModel) {\n if (\n (shift.status !== 'done' && shift.status !== 'done_automatically') ||\n !shift.startedAt\n )\n return;\n const start = format(new Date(shift.startedAt), 'HH:mm');\n return `Horário: ${start}`;\n}\n\nexport const isShiftMenuVisible = (\n shift: ShiftModel,\n user: UserModel,\n shiftInProgress?: ShiftModel | null\n): boolean => {\n const caregiverId = Number(user?.id);\n return !!(\n !isCaregiver(user) ||\n isCaregiverWithInProgressShift(user, shiftInProgress) ||\n caregiverOwnAtLeastOneShiftExecution(shift, caregiverId)\n );\n};\n\nexport const isShiftDetailsVisible = (\n shift: ShiftModel,\n user: UserModel,\n shiftInProgress?: ShiftModel | null\n): boolean => {\n const shiftStatusDiferentOfNotDone = shift.status !== 'not_done';\n return !!(\n shiftStatusDiferentOfNotDone &&\n (!isCaregiver(user) ||\n isCaregiverWithInProgressShift(user, shiftInProgress))\n );\n};\n\nconst isCaregiverWithInProgressShift = (\n user: UserModel,\n shiftInProgress?: ShiftModel | null\n): boolean => {\n return !!(isCaregiver(user) && shiftInProgress);\n};\n\nexport const caregiverOwnAtLeastOneShiftExecution = (\n shift: ShiftModel,\n caregiverId: number\n) => {\n if (!shift.executions || shift.executions.length < 1) return false;\n\n return shift.executions.some(\n (execution) => execution.caregiverId == caregiverId\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nconst QUEUE_KEY = `cuidador_http_queue`;\n\nexport interface QueueData {\n httpMethod: 'post' | 'patch';\n url: string;\n data: any;\n}\n\nexport const addToRequestQueue = async (\n requestQueueData: QueueData\n): Promise<void> => {\n const queuedData = getQueueData();\n queuedData.push(requestQueueData);\n setQueuedData(queuedData);\n};\n\nexport const getQueueData = (): QueueData[] => {\n const stringData = localStorage.getItem(QUEUE_KEY) || '[]';\n const queueData: QueueData[] = JSON.parse(stringData);\n return queueData;\n};\n\nexport const setQueuedData = (data: QueueData[]) => {\n const stringData = JSON.stringify(data);\n localStorage.setItem(QUEUE_KEY, stringData);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport {\n addToRequestQueue,\n getQueueData,\n QueueData,\n setQueuedData,\n} from './offlineQueue';\n\nconst RETRY_SECONDS = 5;\ninterface AxiosOfflineProxy {\n (url: string, data?: any, config?: AxiosRequestConfig): Promise<\n AxiosResponse<any>\n >;\n}\ninterface FakeResponseType {\n (): Promise<{ statusCode: number; data: any }>;\n}\n\n/**\n * Creates a proxy function for httpMethods ('post' or 'patch' only),\n * given an axiosInstance and offline response callback for\n * mocking fake results when user is not connected to the internet\n */\nexport const createOfflineProxy = (\n axiosInstance: AxiosInstance,\n httpMethod: QueueData['httpMethod'],\n offlineResponseCb?: FakeResponseType\n): AxiosOfflineProxy => {\n return async (\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<AxiosResponse<any>> => {\n try {\n const response = await axiosInstance[httpMethod](\n url,\n data || undefined,\n config || axiosInstance.defaults\n );\n return response;\n } catch (error) {\n if (error?.message === 'Network Error') {\n await addToRequestQueue({\n httpMethod,\n url,\n data: data || undefined,\n });\n if (offlineResponseCb) {\n const { statusCode, data } = await offlineResponseCb();\n return {\n config: config || axiosInstance.defaults,\n data,\n status: statusCode,\n headers: [],\n statusText: '',\n };\n }\n }\n throw error;\n }\n };\n};\n\nexport const startQueueChecker = (axiosInstance: AxiosInstance) => {\n let isTryingToRequest = false; // control variable\n\n setInterval(async () => {\n const queueData = getQueueData();\n // could add network connection checking too\n if (queueData.length === 0 || isTryingToRequest) return;\n\n isTryingToRequest = true;\n const firstQueueData = queueData.shift() as QueueData;\n\n sendQueueData(axiosInstance, firstQueueData)\n .catch(() => {\n queueData.splice(0, 0, firstQueueData);\n })\n .finally(() => {\n setQueuedData(queueData);\n isTryingToRequest = false;\n });\n }, RETRY_SECONDS * 1000);\n};\n\nexport const sendQueueData = (\n axiosInstance: AxiosInstance,\n queueData: QueueData\n) => {\n const { httpMethod, url, data } = queueData;\n\n return axiosInstance[httpMethod](\n url,\n data || undefined,\n axiosInstance.defaults\n );\n};\n","export interface PaginatedRequestParams {\n limit?: number;\n page?: number;\n orderBy?: string;\n order?: string;\n}\n\nexport interface ReducerProps<T> extends ReducerData<T> {\n getById?: (id: number) => Promise<void>;\n getPaginated?: (params: PaginatedRequestParams) => Promise<void>;\n post?: (body: Record<string, T>) => Promise<void>;\n patch?: (id: number, body: Record<string, Item<T>>) => Promise<void>;\n remove?: (id: number) => Promise<void>;\n}\n\nexport interface ReducerData<T> {\n byId: Record<string, Item<T>>;\n ids: Array<number>;\n total: number;\n loading: boolean;\n error: Error | null | unknown;\n}\n\nexport type Item<T> = {\n id: number;\n} & T;\n\ntype GET_BY_ID_TYPE = {\n type: 'GET_BY_ID';\n payload: {\n id: number;\n };\n};\n\ntype GET_ALL_TYPE<T> = {\n type: 'GET_ALL';\n payload: Item<T>[];\n};\n\ntype CREATE_TYPE<T> = {\n type: 'CREATE';\n payload: Item<T>;\n};\n\ntype UPDATE_TYPE = {\n type: 'UPDATE';\n payload: {\n id: number;\n };\n};\n\ntype REMOVE_TYPE = {\n type: 'REMOVE';\n payload: {\n id: number;\n };\n};\n\ntype PAGINATION_TYPE<T> = {\n type: 'PAGINATION';\n payload: {\n results: Item<T>[];\n total: number;\n };\n};\n\ntype ERROR_TYPE = {\n type: 'ERROR';\n payload: Error | unknown;\n};\n\ntype SUCCESS_TYPE = {\n type: 'SUCCESS';\n};\n\ntype LOADING_TYPE = {\n type: 'LOADING';\n};\n\nexport type ActionType<T> =\n | GET_ALL_TYPE<T>\n | GET_BY_ID_TYPE\n | CREATE_TYPE<T>\n | UPDATE_TYPE\n | REMOVE_TYPE\n | PAGINATION_TYPE<T>\n | ERROR_TYPE\n | LOADING_TYPE\n | SUCCESS_TYPE;\n\nfunction getIdsAndContent<T>(data: Item<T>[]) {\n const ids: Array<number> = [];\n const byId = data.reduce<Record<string, Item<T>>>((prev, cur) => {\n if (cur.id) {\n ids.push(cur.id);\n prev[cur.id] = cur;\n }\n return prev;\n }, {});\n return { byId, ids, total: ids.length };\n}\n\nexport const createReducer = <T>() => (\n state: ReducerData<T>,\n action: ActionType<T>\n): ReducerProps<T> => {\n switch (action.type) {\n case 'GET_ALL':\n return {\n ...state,\n ...getIdsAndContent<T>(action.payload),\n loading: false,\n };\n case 'GET_BY_ID':\n return {\n ...state,\n ids: Array.from(new Set([...state.ids, action.payload.id])),\n byId: {\n ...state.byId,\n [action.payload.id]: action.payload,\n },\n loading: false,\n };\n case 'CREATE':\n return {\n ...state,\n ids: Array.from(new Set([...state.ids, action.payload.id])),\n byId: { ...state.byId, [action.payload.id]: action.payload },\n total: state.total + 1,\n loading: false,\n };\n case 'UPDATE':\n return {\n ...state,\n ids: Array.from(new Set([...state.ids, action.payload.id])),\n byId: { ...state.byId, [action.payload.id]: action.payload },\n loading: false,\n };\n case 'REMOVE':\n return {\n ...state,\n ids: state.ids.filter((id: number) => id !== action.payload.id),\n byId: { ...state.byId, [action.payload.id]: undefined },\n total: state.total - 1,\n loading: false,\n };\n case 'PAGINATION':\n return {\n ...state,\n ...getIdsAndContent<T>(action.payload.results),\n total: action.payload.total,\n loading: false,\n };\n case 'ERROR':\n return { ...state, error: action.payload, loading: false };\n case 'SUCCESS':\n return { ...state, loading: false };\n case 'LOADING':\n return { ...state, loading: true };\n default:\n return state;\n }\n};\n","/**\n *\n * This is a copy of familia/src/hooks/useCanAccess\n * Any change here might need be reflected there\n *\n */\n\nimport { useMemo } from 'react';\nimport { PermissionAction, PermissionResource } from '@cuidador/database';\nimport { usePermission } from '../contexts/permission';\n\nconst useCanAccess: any = (resource: PermissionResource, userInfo: any = null) => {\n\n if (resource === 'care/shift' && userInfo) {\n const organizationId: number | undefined = userInfo?.user?.organizationId;\n const prohibitedOrganizations: string | undefined = process.env.REACT_APP_VIEW_CARE_SHIFT_PROHIBITED_ORGANIZATIONS; \n\n const prohibitedOrganizationsArray: number[] = prohibitedOrganizations\n ? prohibitedOrganizations.split(',').map(Number)\n : []; \n\n if (organizationId !== undefined && prohibitedOrganizationsArray.includes(organizationId)) {\n return false;\n }\n }\n\n const { loading, permissions } = usePermission();\n\n const allowedActions = useMemo(() => {\n if (!permissions) {\n return [];\n }\n\n const userCanAccessResource = Boolean(permissions[resource]);\n\n if (!userCanAccessResource) {\n return [];\n }\n\n const allowedActions = permissions[resource].map(\n ({ action }) => action as PermissionAction\n );\n return allowedActions;\n }, [permissions]);\n\n const isAllowedToCreate = useMemo(() => {\n return allowedActions.includes('create');\n }, allowedActions);\n\n const isAllowedToDelete = useMemo(() => {\n return allowedActions.includes('delete');\n }, allowedActions);\n\n const isAllowedToInvoke = useMemo(() => {\n return allowedActions.includes('invoke');\n }, allowedActions);\n\n const isAllowedToRead = useMemo(() => {\n return allowedActions.includes('read');\n }, allowedActions);\n\n const isAllowedToUpdate = useMemo(() => {\n return allowedActions.includes('update');\n }, allowedActions);\n\n return {\n loading,\n allowedActions,\n isAllowedToCreate,\n isAllowedToDelete,\n isAllowedToInvoke,\n isAllowedToRead,\n isAllowedToUpdate,\n };\n};\n\nexport default useCanAccess;\n","import {\n CareQuestionAnswerModel,\n ExecutionMessageModel,\n ShiftModel,\n} from '@cuidador/database';\nimport * as Sentry from '@sentry/react';\nimport { useCallback, useContext, useReducer } from 'react';\nimport { caregiverOwnAtLeastOneShiftExecution } from '../../components/ShiftsHistory/utils';\nimport axios, { getCachedAxios } from '../../config/axios';\nimport { sendQueueData } from '../../config/axios/offlineProxy';\nimport {\n getQueueData,\n setQueuedData,\n} from '../../config/axios/offlineProxy/offlineQueue';\nimport { AuthContext } from '../../contexts/auth';\nimport {\n createReducer,\n Item,\n PaginatedRequestParams,\n ReducerData,\n} from '../../utils/store/index';\nimport useCanAccess from '../useCanAccess';\n\nconst endpoint = '/care/shift';\n\nconst initialData: ReducerData<ShiftModel> = {\n byId: {} as Record<string, Item<ShiftModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useShift = () => {\n const [state, dispatch] = useReducer(\n createReducer<ShiftModel>(),\n initialData\n );\n\n const getByPatientIdPaginated = useCallback(\n async (patientId: number, params: PaginatedRequestParams) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get<{\n results: Item<ShiftModel>[];\n total: number;\n }>(`${endpoint}/by-patient/${patientId}`, {\n params,\n });\n dispatch({ type: 'PAGINATION', payload: response.data });\n return Promise.resolve(response);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n const getById = useCallback(async (shiftId: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(`${endpoint}/${shiftId}`);\n dispatch({ type: 'GET_BY_ID', payload: response.data });\n return response.data as ShiftModel;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const startShift = useCallback(async (shiftId: number) => {\n try {\n const response = await axios.post(`${endpoint}/start/${shiftId}`);\n return response.data;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n throw err;\n }\n }, []);\n\n const sendQueueBeforeFinishShift = useCallback(async () => {\n const queueData = getQueueData();\n setQueuedData([]); // clear queue data\n\n for (const queueItem of queueData) {\n try {\n await sendQueueData(axios, queueItem);\n } catch (err) {\n console.log(err);\n Sentry.captureException(err);\n }\n }\n }, []);\n\n const finishShift = useCallback(\n async (\n shiftId: number,\n data: {\n message: ExecutionMessageModel['message'];\n careQuestionAnswers: CareQuestionAnswerModel[];\n }\n ) => {\n try {\n // try to send queue items\n await sendQueueBeforeFinishShift();\n\n const response = await axios.post(\n `${endpoint}/finish/${shiftId}`,\n data\n );\n return response.data;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n throw err;\n }\n },\n []\n );\n\n const getShiftInProgressWithExecutionInProgress = useCallback(async () => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}?shift.status=in_progress&executions.status=in_progress`\n );\n dispatch({ type: 'GET_BY_ID', payload: response.data });\n return response.data.results[0] as ShiftModel;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const getShiftCalendarByPatientId = useCallback(async (patientId: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get(\n `${endpoint}/calendar/by-patient/${patientId}`\n );\n dispatch({ type: 'GET_ALL', payload: response.data });\n return Promise.resolve(response.data);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n const showContestationPageItem = (shift?: ShiftModel): boolean => {\n const {\n isAllowedToCreate: isAllowedToCreateShiftTimeContestation,\n } = useCanAccess('care/shift/execution/time-contestation');\n const { userInfo } = useContext(AuthContext);\n\n const caregiverId = Number(userInfo?.user?.id);\n\n if (!shift || !caregiverId) return false;\n\n return !!(\n !!caregiverOwnAtLeastOneShiftExecution(shift, caregiverId) &&\n isAllowedToCreateShiftTimeContestation\n );\n };\n\n const getTimeline = useCallback(async (shiftId: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get(`${endpoint}/timeline/${shiftId}`);\n dispatch({ type: 'SUCCESS' });\n return response.data;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n throw err;\n }\n }, []);\n\n return {\n ...state,\n startShift,\n finishShift,\n getByPatientIdPaginated,\n getById,\n getShiftCalendarByPatientId,\n getShiftInProgressWithExecutionInProgress,\n showContestationPageItem,\n getTimeline,\n };\n};\n\nexport default useShift;\n","import { useCallback, useReducer } from 'react';\nimport { getCachedAxios } from '../config/axios';\nimport { EmergencyContactModel } from '@cuidador/database';\nimport { createReducer, ReducerData, Item } from '../utils/store/index';\n\nconst endpoint = 'care/emergency-contact';\n\nconst initialData: ReducerData<EmergencyContactModel> = {\n byId: {} as Record<string, Item<EmergencyContactModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useEmergencyContacts = () => {\n const [state, dispatch] = useReducer(\n createReducer<EmergencyContactModel>(),\n initialData\n );\n\n const getAllByPatientId = useCallback(async (id: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}/by-patient/${id}`\n );\n dispatch({ type: 'GET_ALL', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n return {\n ...state,\n getAllByPatientId,\n };\n};\n\nexport default useEmergencyContacts;\n","import { isEqual } from 'date-fns';\nimport { ActionType, Item, ReducerData, ReducerProps } from './';\n\ntype WithCreatedAt<T> = {\n createdAt: string;\n} & Item<T>;\n\nfunction getIdsAndContent<T>(data: Item<T>[], state: ReducerData<T>) {\n const payloadIds: Array<number> = [];\n const payloadById = data.reduce<Record<string, Item<T>>>((prev, cur) => {\n if (cur.id) {\n payloadIds.push(cur.id);\n prev[cur.id] = cur;\n }\n return prev;\n }, {});\n\n /* check for state data that isn't on payload with the same ID,\n * then checks if createdAt field has the same date, so it can be\n * replaced from an \"without ID\" state to a \"backend payload\" state\n */\n const localStorageIds: Array<number> = [];\n const localStorageById = state.ids\n .map((id) => state.byId[id])\n .reduce<Record<string, Item<T>>>((prev, cur) => {\n const currentItem = cur as WithCreatedAt<T>;\n if (cur?.id) {\n const existsOnPayloadById = data.find((item) => item.id == cur.id);\n\n // if it exists on payload by ID, use payload data\n if (existsOnPayloadById) return prev;\n const currentItemDate = new Date(String(currentItem?.createdAt));\n const existsOnPayloadByCreatedAt = (data as WithCreatedAt<T>[])\n .map((item) => new Date(String(item.createdAt)))\n .find((itemDate) => isEqual(itemDate, currentItemDate));\n\n // if createdAt from payload and state is the same, use payload data\n if (existsOnPayloadByCreatedAt) return prev;\n\n // if ID and createdAt is not equal from payload, add item to state\n localStorageIds.push(cur.id);\n prev[cur.id] = cur;\n }\n return prev;\n }, {});\n\n return {\n byId: { ...payloadById, ...localStorageById },\n ids: [...payloadIds, ...localStorageIds],\n total: payloadIds.length + localStorageIds.length,\n };\n}\n\n// returns the current date in ms as a negative value, just to have a valid number as fake ID\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction createOfflineResolvedId<T>(payload: WithCreatedAt<T>): number {\n return -Date.now();\n}\n\nexport const createOfflineReducer = <T>() => (\n state: ReducerData<T>,\n action: ActionType<T>\n): ReducerProps<T> => {\n switch (action.type) {\n case 'GET_ALL':\n return {\n ...state,\n ...getIdsAndContent<T>(action.payload, state),\n loading: false,\n };\n case 'GET_BY_ID':\n return {\n ...state,\n ...getIdsAndContent<T>([action.payload as Item<T>], state),\n loading: false,\n };\n case 'CREATE':\n // if ID is not present on payload, generates one for localStorage\n if (!action.payload?.id) {\n action.payload.id = createOfflineResolvedId<T>(\n action.payload as WithCreatedAt<T>\n );\n }\n return {\n ...state,\n ids: Array.from(new Set([...state.ids, action.payload.id])),\n byId: {\n ...state.byId,\n [action.payload.id]: {\n ...state.byId[action.payload.id],\n ...action.payload,\n },\n },\n total: state.total + 1,\n loading: false,\n };\n case 'UPDATE':\n return {\n ...state,\n ids: Array.from(new Set([...state.ids, action.payload.id])),\n byId: {\n ...state.byId,\n [action.payload.id]: {\n ...state.byId[action.payload.id],\n ...action.payload,\n },\n },\n loading: false,\n };\n case 'REMOVE':\n return {\n ...state,\n ids: state.ids.filter((id: number) => id !== action.payload.id),\n byId: { ...state.byId, [action.payload.id]: undefined },\n total: state.total - 1,\n loading: false,\n };\n case 'PAGINATION':\n return {\n ...state,\n ...getIdsAndContent<T>(action.payload.results, state),\n total: action.payload.total,\n loading: false,\n };\n case 'ERROR':\n return { ...state, error: action.payload, loading: false };\n case 'LOADING':\n return { ...state, loading: true };\n default:\n return state;\n }\n};\n","import { useCallback, useReducer } from 'react';\nimport { getCachedAxios } from '../config/axios';\nimport { EventSubCategoryModel, ShiftModel } from '@cuidador/database';\nimport { createReducer, ReducerData, Item } from '../utils/store/index';\n\nconst endpoint = '/care/event/category/sub';\n\nconst initialData: ReducerData<ShiftModel> = {\n byId: {} as Record<string, Item<ShiftModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nexport enum EventCategoryEnum {\n GENERAL = 1,\n MEDICATION = 2,\n COMPLICATION = 3,\n MESUREMENT = 4,\n}\n\nconst useSubCategory = () => {\n const [state, dispatch] = useReducer(\n createReducer<ShiftModel>(),\n initialData\n );\n\n const getAllAppointments = useCallback(async () => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}?categoryId=${EventCategoryEnum['GENERAL']}&isAppointment=1&orderBy=eventSubCategory.name&order=asc`\n );\n dispatch({ type: 'GET_ALL', payload: response.data });\n return response.data as EventSubCategoryModel[];\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const getAllRoutines = useCallback(async () => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}?categoryId=${EventCategoryEnum['GENERAL']}&isRoutine=1&orderBy=eventSubCategory.name&order=asc`\n );\n dispatch({ type: 'GET_ALL', payload: response.data });\n return response.data as EventSubCategoryModel[];\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const getAllComplications = useCallback(async () => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}?categoryId=${EventCategoryEnum['COMPLICATION']}&orderBy=eventSubCategory.name&order=asc`\n );\n dispatch({ type: 'GET_ALL', payload: response.data });\n return response.data as EventSubCategoryModel[];\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const getAllMeasurements = useCallback(async () => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}?categoryId=${EventCategoryEnum['MESUREMENT']}&orderBy=eventSubCategory.name&order=asc`\n );\n dispatch({ type: 'GET_ALL', payload: response.data });\n return response.data as EventSubCategoryModel[];\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n return {\n ...state,\n getAllAppointments,\n getAllRoutines,\n getAllComplications,\n getAllMeasurements,\n };\n};\n\nexport default useSubCategory;\n","// https://gist.github.com/mattiaerre/8dbd2d8efca3f242c7085a9ce82ecbde\n\nimport { useState } from 'react';\n\nconst useLocalStorage = <T>(\n key: string,\n initialValue: T\n): [T, (state: T) => void] => {\n const [storedValue, setStoredValue] = useState<T>(() => {\n try {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n console.error(error);\n return initialValue;\n }\n });\n\n function setValue(value: T) {\n try {\n const valueToStore =\n value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n } catch (error) {\n console.log(error);\n }\n }\n\n return [storedValue, setValue];\n};\n\nexport default useLocalStorage;\n","// https://gist.github.com/mattiaerre/8dbd2d8efca3f242c7085a9ce82ecbde\n\nimport { useReducer } from 'react';\nimport useLocalStorage from './useLocalStorage';\n\ninterface ReducerWithLocalStorage<T, P> {\n initializerArg: T;\n key: string;\n reducer: (state: T, action: P) => T;\n}\n\nconst useReducerWithLocalStorage = <T, P>({\n initializerArg,\n key,\n reducer,\n}: ReducerWithLocalStorage<T, P>) => {\n const [storedValue, setValue] = useLocalStorage<T>(key, initializerArg);\n\n return useReducer((state: T, action: P): T => {\n const newState = reducer(state, action);\n setValue(newState);\n return newState;\n }, storedValue);\n};\n\nexport default useReducerWithLocalStorage;\n","/**\n * Clear all data that includes `substring` string\n */\nexport const removeLocalStorageItemsByKeySubstring = (substring: string) => {\n const keysToDelete = Object.keys(localStorage).filter((key) =>\n key.includes(substring)\n );\n keysToDelete.forEach((key) => {\n localStorage.removeItem(key);\n });\n};\n","import { EventModel } from '@cuidador/database';\nimport { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport const createOfflinePatchEventComment = (\n axios: AxiosInstance,\n eventData: EventModel\n) =>\n createOfflineProxy(axios, 'patch', async () => {\n return {\n data: eventData,\n statusCode: 200,\n };\n });\n","import { EventModel } from '@cuidador/database';\nimport { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport const createOfflinePatchEventStatus = (\n axios: AxiosInstance,\n eventData: EventModel\n) =>\n createOfflineProxy(axios, 'patch', async () => {\n return {\n data: eventData,\n statusCode: 200,\n };\n });\n","import { EventModel } from '@cuidador/database';\nimport { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport const createOfflinePatchUpdatedTimeHappens = (\n axios: AxiosInstance,\n eventData: EventModel\n) =>\n createOfflineProxy(axios, 'patch', async () => {\n return {\n data: eventData,\n statusCode: 200,\n };\n });\n","import { EventModel } from '@cuidador/database';\nimport { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport const createOfflinePostEvent = (\n axios: AxiosInstance,\n eventData: EventModel\n) =>\n createOfflineProxy(axios, 'post', async () => {\n return {\n data: eventData,\n statusCode: 200,\n };\n });\n","import { EventModel, MeasurementModel } from '@cuidador/database';\nimport { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport type CreateOfflinePostMeasurementEventParam = Prettify<\n Omit<EventModel, 'measurement'> & {\n measurement: PartialNullable<\n MeasurementModel,\n 'complicationLevel' | 'isDangerousComplication'\n >;\n }\n>;\n\nexport const createOfflinePostMeasurement = (\n axios: AxiosInstance,\n eventData: CreateOfflinePostMeasurementEventParam\n) =>\n createOfflineProxy(axios, 'post', async () => {\n return {\n data: eventData,\n statusCode: 200,\n };\n });\n","import { EventModel, MeasurementModel } from '@cuidador/database';\nimport { useCallback } from 'react';\nimport axios, { getCachedAxios } from '../../config/axios';\nimport { ActionType, Item, ReducerData } from '../../utils/store/index';\nimport { createOfflineReducer } from '../../utils/store/offlineStore';\nimport useReducerWithLocalStorage from '../localstorage/useReducerWithLocalStorage';\nimport { removeLocalStorageItemsByKeySubstring } from '../localstorage/utils';\nimport { createOfflinePatchEventComment } from './patchEventCommentOffline';\nimport { createOfflinePatchEventStatus } from './patchEventStatusOffline';\nimport { createOfflinePatchUpdatedTimeHappens } from './patchEventUpdatedTimeHappensOffline';\nimport { createOfflinePostEvent } from './postEventOffline';\nimport {\n CreateOfflinePostMeasurementEventParam,\n createOfflinePostMeasurement,\n} from './postScheduledMeasurementOffline';\nimport { SymptomModel } from '@cuidador/database/src/models/Symptom';\nimport { BloodGlycemiaAdditionalDetailsType } from '../../components/VitalSignsMeasurementInput/utils';\n\ntype UpdateScheduledMeasurementDataType = Prettify<\n {\n status: 'awaiting' | 'accomplished' | 'not_accomplished';\n patientId: number;\n measurementValue: string;\n measuredAt?: string;\n shiftExecutionId: number;\n } & Nullable<\n Required<\n Pick<MeasurementModel, 'complicationLevel' | 'isDangerousComplication'>\n >\n > & {\n symptomOptions?: {\n id?: number;\n label?: string;\n customLabel?: string;\n wasUserInput?: boolean;\n }[];\n } & {\n additionalDetails?: BloodGlycemiaAdditionalDetailsType\n }\n>;\n\nconst endpoint = '/care/event';\nconst SHIFT_EVENTS_LOCAL_KEY = 'caregiver-shift-events';\n\nconst initialData: ReducerData<EventModel> = {\n byId: {} as Record<string, Item<EventModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useEvent = (shiftId?: number) => {\n const [state, dispatch] = useReducerWithLocalStorage<\n ReducerData<EventModel>,\n ActionType<EventModel>\n >({\n initializerArg: initialData,\n key: `${SHIFT_EVENTS_LOCAL_KEY}-${shiftId}`,\n reducer: createOfflineReducer<EventModel>(),\n });\n\n const clearAllLocalShiftEvents = useCallback(() => {\n removeLocalStorageItemsByKeySubstring(`${SHIFT_EVENTS_LOCAL_KEY}`);\n }, []);\n\n const getEventsByShiftId = useCallback(async (shiftId: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}/by-shift/${shiftId}`\n );\n dispatch({ type: 'GET_ALL', payload: response.data });\n return response.data as EventModel[];\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const createShiftEvent = useCallback(\n async (\n eventType: 'complication' | 'general' | 'measurement' | 'medication',\n eventData: EventModel\n ) => {\n try {\n dispatch({ type: 'LOADING' });\n const postOfflineEvent = createOfflinePostEvent(axios, eventData);\n const response = await postOfflineEvent(\n `/care/shift/event/${eventType}`,\n { ...eventData, subCategory: undefined, medication: undefined } // send only event data to backend\n );\n dispatch({ type: 'CREATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n const patchEventStatus = useCallback(\n async (eventId: number, eventData: EventModel) => {\n try {\n dispatch({ type: 'LOADING' });\n const patchOfflineEvent = createOfflinePatchEventStatus(\n axios,\n eventData\n );\n const response = await patchOfflineEvent(\n `${endpoint}/${eventId}/status`,\n eventData\n );\n response.data.id = eventId;\n dispatch({ type: 'UPDATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n const patchEventComment = useCallback(\n async (eventId: number, eventData: EventModel) => {\n try {\n dispatch({ type: 'LOADING' });\n const patchOfflineEvent = createOfflinePatchEventComment(\n axios,\n eventData\n );\n const response = await patchOfflineEvent(\n `${endpoint}/${eventId}/comment`,\n eventData\n );\n dispatch({ type: 'UPDATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n const setUpdatedTime = useCallback(\n async (eventId: number, eventData: EventModel) => {\n try {\n dispatch({ type: 'LOADING' });\n const patchOfflineEvent = createOfflinePatchUpdatedTimeHappens(\n axios,\n eventData\n );\n const response = await patchOfflineEvent(\n `${endpoint}/${eventId}/updated-time`,\n eventData\n );\n response.data.id = eventId;\n dispatch({ type: 'UPDATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n const updateScheduledMeasurement = useCallback(\n async (\n eventId: number,\n eventData: CreateOfflinePostMeasurementEventParam,\n measurementData: UpdateScheduledMeasurementDataType\n ) => {\n try {\n dispatch({ type: 'LOADING' });\n const postOfflineMeasurement = createOfflinePostMeasurement(\n axios,\n eventData\n );\n const response = await postOfflineMeasurement(\n `${endpoint}/measurement/${eventId}`,\n measurementData\n );\n dispatch({ type: 'UPDATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n const getSymptomsList = useCallback(async () => {\n try {\n const response = await axios.get('care/symptom?wasUserInput=false');\n return (response.data ?? []) as SymptomModel[];\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n return {\n ...state,\n getEventsByShiftId,\n createShiftEvent,\n patchEventStatus,\n patchEventComment,\n setUpdatedTime,\n clearAllLocalShiftEvents,\n updateScheduledMeasurement,\n getSymptomsList,\n };\n};\n\nexport default useEvent;\n","import { useCallback, useReducer } from 'react';\nimport { getCachedAxios } from '../config/axios';\nimport { EventSubCategoryModel, ShiftModel } from '@cuidador/database';\nimport { createReducer, ReducerData, Item } from '../utils/store/index';\n\nconst endpoint = '/care/medication';\n\nconst initialData: ReducerData<ShiftModel> = {\n byId: {} as Record<string, Item<ShiftModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useMedication = () => {\n const [state, dispatch] = useReducer(\n createReducer<ShiftModel>(),\n initialData\n );\n\n const getAllMedicationsIfNecessaryByPatientId = useCallback(\n async (id: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}/if-necessary/by-patient/${id}?orderBy=subCategory.name&order=asc`\n );\n dispatch({ type: 'GET_ALL', payload: response.data });\n return response.data as EventSubCategoryModel[];\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n },\n []\n );\n\n return {\n ...state,\n getAllMedicationsIfNecessaryByPatientId,\n };\n};\n\nexport default useMedication;\n","import {\n AnswerConfig,\n AnswerType,\n CareCategoryModel,\n CareLineModel,\n CareQuestionAnswerModel,\n CareQuestionModel,\n} from '@cuidador/database';\n\nexport interface NormalizedCareCategory extends CareCategoryModel {\n totalQuestions: number;\n totalAnswered: number;\n careLines: NormalizedCareLine[];\n}\n\nexport interface NormalizedCareLine extends CareLineModel {\n totalQuestions: number;\n totalAnswered: number;\n careQuestions: NormalizedCareQuestion[];\n}\n\nexport interface NormalizedCareQuestion extends CareQuestionModel {\n questionIndex: number;\n}\n\nexport const isQuestionAnswered = (answerConfig: AnswerType): boolean => {\n if (answerConfig.type === 'single') {\n const checkedOption = answerConfig.options.find(\n (option) => option.isChecked\n );\n\n if (!checkedOption) return false;\n\n if (checkedOption.needDescription && !checkedOption.description)\n return false;\n\n if (checkedOption.nextAnswer)\n return isQuestionAnswered(checkedOption.nextAnswer);\n\n return true;\n }\n return answerConfig.options.some((option) => option.isChecked);\n};\n\n// normalizes care category by adding total questions and answered questions considering its care lines\nexport const normalizeCareCategory = (\n careCategory: CareCategoryModel,\n questionIndex = { index: 0 }\n): NormalizedCareCategory => {\n const normalizedCareLines =\n careCategory.careLines?.map((careLine) =>\n normalizeCareLine(careLine, questionIndex)\n ) || [];\n\n return {\n ...careCategory,\n id: careCategory.id!,\n careLines: normalizedCareLines,\n totalQuestions: normalizedCareLines.reduce(\n (totalQuestions: number, careLine) =>\n (totalQuestions += careLine?.careQuestions?.length || 0),\n 0\n ),\n totalAnswered: normalizedCareLines.reduce(\n (totalAnswered: number, careLine) =>\n (totalAnswered += careLine?.totalAnswered || 0),\n 0\n ),\n };\n};\n\n// normalizes care line by adding total questions and answered questions\nexport const normalizeCareLine = (\n careLine: CareLineModel,\n questionIndex = { index: 0 }\n): NormalizedCareLine => {\n const normalizedCareQuestions =\n careLine.careQuestions?.map((question) =>\n normalizeCareQuestion(question, questionIndex)\n ) || [];\n\n return {\n ...careLine,\n careQuestions: normalizedCareQuestions,\n totalQuestions: normalizedCareQuestions.length || 0,\n totalAnswered:\n normalizedCareQuestions.filter((question) =>\n isQuestionAnswered(question.answerConfig as AnswerConfig)\n ).length || 0,\n };\n};\n\nexport const normalizeCareQuestion = (\n careQuestion: CareQuestionModel,\n questionIndex = { index: 0 }\n): NormalizedCareQuestion => {\n const question: NormalizedCareQuestion = {\n ...careQuestion,\n // used to identify the question position in relation to the shift (considering all care categories and care lines)\n questionIndex: questionIndex.index,\n };\n\n // increments index for next question\n questionIndex.index += 1;\n return question;\n};\n\nexport const normalizeAnswersToApi = (careCategories: CareCategoryModel[]) => {\n const answers: CareQuestionAnswerModel[] = [];\n\n careCategories.forEach((careCategory) => {\n careCategory?.careLines?.forEach((careLine) => {\n const normalizedAnswers = (careLine.careQuestions || []).map(\n normalizeAnswerToApi\n );\n answers.push(...normalizedAnswers);\n });\n });\n\n return answers.filter((cqa) =>\n isQuestionAnswered(cqa.questionAnswerData as AnswerType)\n );\n};\n\nexport const normalizeAnswerToApi = (question: CareQuestionModel) => ({\n careQuestionId: question.id,\n questionAnswerData: question.answerConfig,\n});\n","import { CareQuestionAnswerModel } from '@cuidador/database';\nimport { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport const createOfflinePostAnswer = (\n axios: AxiosInstance,\n answer: CareQuestionAnswerModel\n) =>\n createOfflineProxy(axios, 'post', async () => {\n return {\n data: answer,\n statusCode: 200,\n };\n });\n","import { useCallback } from 'react';\nimport axios, { getCachedAxios } from '../../config/axios';\nimport { ActionType, Item, ReducerData } from '../../utils/store/index';\nimport { createOfflineReducer } from '../../utils/store/offlineStore';\nimport useReducerWithLocalStorage from '../localstorage/useReducerWithLocalStorage';\n\nimport { AnswerType, CareCategoryModel } from '@cuidador/database';\nimport { useDebouncedCallback } from 'use-debounce/lib';\nimport {\n isQuestionAnswered,\n normalizeAnswersToApi,\n normalizeAnswerToApi,\n normalizeCareCategory,\n NormalizedCareCategory,\n} from '../../utils/shiftQuestion';\nimport { removeLocalStorageItemsByKeySubstring } from '../localstorage/utils';\nimport { createOfflinePostAnswer } from './postAnswerOffline';\n\nexport const getEndpoint = (shiftId: number) =>\n `/care/shift/${shiftId}/care-question`;\n\nexport const SHIFT_QUESTIONS_LOCAL_KEY = 'caregiver-shift-questions';\n\nconst initialData: ReducerData<NormalizedCareCategory> = {\n byId: {} as Record<string, Item<NormalizedCareCategory>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useShiftQuestions = (shiftId?: number) => {\n const [state, dispatch] = useReducerWithLocalStorage<\n ReducerData<NormalizedCareCategory>,\n ActionType<NormalizedCareCategory>\n >({\n initializerArg: initialData,\n key: `${SHIFT_QUESTIONS_LOCAL_KEY}-${shiftId}`,\n reducer: createOfflineReducer<NormalizedCareCategory>(),\n });\n\n const clearAllLocalShiftQuestions = useCallback(() => {\n removeLocalStorageItemsByKeySubstring(SHIFT_QUESTIONS_LOCAL_KEY);\n }, []);\n\n const getQuestionsByShiftId = useCallback(\n async (shiftId: number) => {\n // fetch questions once and then get from cache\n if (state.total) return;\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(`${getEndpoint(shiftId)}`);\n const questionIndex = { index: 0 }; // initial question index. it will mutate while normalizing questions\n dispatch({\n type: 'GET_ALL',\n payload: response.data.careCategories.map(\n (careCategory: CareCategoryModel) =>\n normalizeCareCategory(\n // fill care question answer config (careQuestion.answerConfig) with related care question answer (careQuestionAnswer.questionAnswerData) before normalize\n {\n ...careCategory,\n careLines: careCategory.careLines?.map((careline) => ({\n ...careline,\n careQuestions: careline.careQuestions?.map(\n (careQuestion) => ({\n ...careQuestion,\n answerConfig:\n careQuestion.careQuestionAnswers?.find(\n (careQuestionAnswer) =>\n careQuestionAnswer.careQuestionId ===\n careQuestion.id\n )?.questionAnswerData || careQuestion.answerConfig,\n })\n ),\n })),\n },\n questionIndex\n )\n ),\n });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n throw err;\n }\n },\n [state.total]\n );\n\n const saveAnswer = useCallback(\n (questionId, answer, { careCategoryIndex, careLineIndex }) => {\n const careCategory = state.byId[state.ids[careCategoryIndex]];\n\n // index of first question of this category. it will mutate while normalizing questions\n const firstQuestionIndex = {\n index: careCategory.careLines[0].careQuestions[0].questionIndex,\n };\n\n // update counters and save answer locally\n const updatedCategory = normalizeCareCategory(\n {\n ...careCategory,\n careLines: careCategory.careLines.map((careLine, index) =>\n index !== careLineIndex\n ? careLine\n : {\n ...careLine,\n careQuestions: careLine.careQuestions?.map((question) =>\n questionId !== question.id\n ? question\n : { ...question, answerConfig: answer }\n ),\n }\n ),\n },\n firstQuestionIndex\n );\n\n dispatch({\n type: 'UPDATE',\n payload: { ...updatedCategory, id: updatedCategory.id as number },\n });\n\n // if questions is answered, send answer to api (or send to offline queue)\n if (isQuestionAnswered(answer)) {\n sendAnswerDebounce.callback(questionId, answer);\n }\n },\n [state]\n );\n\n const buildNormalizedAnswersToApi = useCallback(() => {\n return normalizeAnswersToApi(state.ids.map((id) => state.byId[id]));\n }, [state]);\n\n const sendAnswer = useCallback(\n async (questionId: number, answer: AnswerType) => {\n const normalizedAnswer = normalizeAnswerToApi({\n id: questionId,\n answerConfig: answer,\n });\n const postOfflineAnswer = createOfflinePostAnswer(\n axios,\n normalizedAnswer\n );\n await postOfflineAnswer(getEndpoint(shiftId!), normalizedAnswer);\n },\n []\n );\n\n const sendAnswerDebounce = useDebouncedCallback(sendAnswer, 500);\n\n return {\n ...state,\n clearAllLocalShiftQuestions,\n getQuestionsByShiftId,\n saveAnswer,\n buildNormalizedAnswersToApi,\n sendAnswer,\n };\n};\n\nexport default useShiftQuestions;\n","import { useCallback, useReducer } from 'react';\nimport axios, { getCachedAxios } from '../config/axios';\nimport { ShoppingListModel } from '@cuidador/database';\nimport { createReducer, ReducerData, Item } from '../utils/store/index';\nimport { AxiosResponse } from 'axios';\n\nconst endpoint = '/care/shopping-list';\n\nconst initialData: ReducerData<ShoppingListModel> = {\n byId: {} as Record<string, Item<ShoppingListModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useShoppingList = () => {\n const [state, dispatch] = useReducer(\n createReducer<ShoppingListModel>(),\n initialData\n );\n\n const getOneByPatientId = useCallback(async (id: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(\n `${endpoint}/by-patient/${id}`\n );\n dispatch({ type: 'GET_BY_ID', payload: response.data });\n return Promise.resolve(response as AxiosResponse<ShoppingListModel>);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const patch = useCallback(\n async (id: number, data: Partial<ShoppingListModel>) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.patch(`${endpoint}/${id}`, data);\n dispatch({ type: 'UPDATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n const postBuyShoppingListById = useCallback(async (id: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.post(`${endpoint}/${id}/buy`);\n dispatch({ type: 'CREATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n return {\n ...state,\n getOneByPatientId,\n patch,\n postBuyShoppingListById,\n };\n};\n\nexport default useShoppingList;\n","import React, { createContext, useContext, useEffect } from 'react';\nimport useEmergencyContacts from '../hooks/useEmergencyContacts';\nimport useEvent from '../hooks/useEvent';\nimport useMedication from '../hooks/useMedication';\nimport useShiftQuestions from '../hooks/useShiftQuestions';\nimport useShoppingList from '../hooks/useShoppingList';\nimport useSubCategory from '../hooks/useSubCategory';\nimport { ShiftInProgressContext } from './ShiftInProgress';\n\nexport type ContextProps = {\n useEvent: () => ReturnType<typeof useEvent>;\n useShiftQuestions: () => ReturnType<typeof useShiftQuestions>;\n};\n\nexport const CurrentShiftDataContext = createContext<ContextProps>(\n {} as ContextProps\n);\n\nexport const useCurrentShift = () => {\n const context = useContext(CurrentShiftDataContext);\n return context;\n};\n\nexport const CurrentShiftDataProvider: React.FC = ({ children }) => {\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n const eventHookData = useEvent(shiftInProgress!.id!);\n const questionHookData = useShiftQuestions(shiftInProgress!.id!);\n const {\n getAllByPatientId: getEmergencyContactsByPatientId,\n } = useEmergencyContacts();\n const {\n getAllAppointments,\n getAllRoutines,\n getAllComplications,\n getAllMeasurements,\n } = useSubCategory();\n const { getAllMedicationsIfNecessaryByPatientId } = useMedication();\n const { getOneByPatientId: getShoppingListByPatientId } = useShoppingList();\n\n useEffect(() => {\n if (shiftInProgress) {\n // cache events\n eventHookData.getEventsByShiftId(shiftInProgress!.id!);\n // cache careQuestions\n questionHookData.getQuestionsByShiftId(shiftInProgress!.id!);\n // cache emergency contacts\n getEmergencyContactsByPatientId(shiftInProgress.patientId!);\n // cache event subcategories\n getAllAppointments();\n getAllRoutines();\n getAllComplications();\n getAllMeasurements();\n // cache event medications\n getAllMedicationsIfNecessaryByPatientId(shiftInProgress.patientId!);\n // cache shopping list\n getShoppingListByPatientId(shiftInProgress.patientId!);\n }\n }, [shiftInProgress]);\n\n return (\n <CurrentShiftDataContext.Provider\n value={{\n useEvent: () => eventHookData,\n useShiftQuestions: () => questionHookData,\n }}\n >\n {children}\n </CurrentShiftDataContext.Provider>\n );\n};\n\nexport default CurrentShiftDataProvider;\n","import { ShiftExecutionModel, ShiftModel } from '@cuidador/database';\nimport { addMinutes } from 'date-fns';\nimport React, { createContext, useContext, useEffect, useState } from 'react';\nimport useShift from '../hooks/useShift';\nimport { AuthContext } from './auth';\nimport { CurrentShiftDataProvider } from './CurrentShiftData';\n\nexport interface ContextProps {\n shiftInProgress?: ShiftModel | null;\n executionInProgress?: ShiftExecutionModel | null;\n refreshShiftInProgress: () => Promise<void>;\n setExecutionInProgress: (value: ShiftExecutionModel | null) => void;\n loading?: boolean;\n minShiftLimitDate?: Date;\n maxShiftLimitDate?: Date;\n}\n\nconst TOLERANCE_LIMIT_BEFORE_SHIFT = -5;\nconst TOLERANCE_LIMIT_AFTER_SHIFT = 10;\n\nexport const ShiftInProgressContext = createContext<ContextProps>({\n loading: true,\n} as ContextProps);\n\nexport const ShiftInProgressProvider: React.FC = ({ children }) => {\n const { user } = useContext(AuthContext);\n const { getShiftInProgressWithExecutionInProgress } = useShift();\n const [loading, setLoading] = useState(true);\n const [shiftInProgress, setShiftInProgress] = useState<ShiftModel | null>(\n null\n );\n const [\n executionInProgress,\n setExecutionInProgress,\n ] = useState<ShiftExecutionModel | null>(null);\n\n const minShiftLimitDate = shiftInProgress?.plannedToStartAt\n ? addMinutes(\n new Date(shiftInProgress.plannedToStartAt),\n TOLERANCE_LIMIT_BEFORE_SHIFT\n )\n : undefined;\n\n const maxShiftLimitDate = shiftInProgress?.plannedToEndAt\n ? addMinutes(\n new Date(shiftInProgress.plannedToEndAt),\n TOLERANCE_LIMIT_AFTER_SHIFT\n )\n : undefined;\n\n useEffect(() => {\n if (user) refreshShiftInProgress();\n }, [user]);\n\n const refreshShiftInProgress = () => {\n return getShiftInProgressWithExecutionInProgress()\n .then((shiftInProgress) => {\n if (shiftInProgress && shiftInProgress.executionInProgress) {\n setShiftInProgress(shiftInProgress);\n setExecutionInProgress(shiftInProgress.executionInProgress);\n } else {\n setShiftInProgress(null);\n setExecutionInProgress(null);\n }\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n return (\n <ShiftInProgressContext.Provider\n value={{\n shiftInProgress,\n executionInProgress,\n refreshShiftInProgress,\n setExecutionInProgress,\n loading,\n minShiftLimitDate,\n maxShiftLimitDate,\n }}\n >\n {shiftInProgress && executionInProgress ? (\n <CurrentShiftDataProvider>{children}</CurrentShiftDataProvider>\n ) : (\n children\n )}\n </ShiftInProgressContext.Provider>\n );\n};\n\nexport default ShiftInProgressProvider;\n","import Button from '@material-ui/core/Button';\nimport styled from 'styled-components';\n\nconst StyledButton = styled(Button).attrs(({ variant }) => ({\n variant: variant || 'outlined',\n}))``;\n\nexport default StyledButton;\n","export default __webpack_public_path__ + \"static/media/Elipseblue.d281caa2.svg\";","export default __webpack_public_path__ + \"static/media/Elipsegreen.c13cac35.svg\";","import Dialog from '@material-ui/core/Dialog';\nimport styled from 'styled-components';\n\nexport const StyledMuiDialog = styled(Dialog)`\n & .MuiPaper-root {\n margin: ${({ theme }) => theme.spacing(2)}px;\n background-color: ${({ theme }) => theme.palette.primary.main};\n border-radius: 21px;\n min-width: 300px;\n color: ${({ theme }) => theme.palette.common.white};\n max-width: 100%;\n }\n & .MuiDialogActions-root {\n justify-content: center;\n padding: ${({ theme }) => theme.spacing(2, 3)};\n }\n & .MuiDialogTitle-root {\n text-align: center;\n }\n & .MuiTypography-colorTextSecondary {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & .MuiDialogTitle-root {\n z-index: 5;\n }\n & .MuiDialogContent-root {\n z-index: 5;\n }\n\n .MuiDialogContent-root {\n ::-webkit-scrollbar {\n width: 8px;\n }\n ::-webkit-scrollbar-track {\n box-shadow: inset 0 0 5px ${({ theme }) => theme.palette.secondary.dark};\n margin-block: 5px;\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${({ theme }) => theme.palette.common.white};\n border-radius: 10px;\n\n &:hover {\n background-color: ${({ theme }) => theme.palette.grey[300]};\n }\n }\n }\n`;\n\nexport const StyledElipseBlueTop = styled.img`\n width: 250px;\n height: 250px;\n top: -190px;\n right: 30px;\n position: absolute;\n z-index: 2;\n`;\n\nexport const StyledElipseGreenTop = styled.img`\n width: 250px;\n height: 250px;\n top: -150px;\n right: -100px;\n position: absolute;\n z-index: 1;\n`;\n\nexport const StyledElipseBlueBot = styled.img`\n width: 250px;\n height: 250px;\n bottom: -150px;\n left: -120px;\n position: absolute;\n z-index: 2;\n`;\n\nexport const StyledElipseGreenBot = styled.img`\n width: 250px;\n height: 250px;\n bottom: -180px;\n left: 20px;\n position: absolute;\n z-index: 1;\n`;\n\nexport const StyledDiv = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: hidden;\n // [TODO]: change to the right images if necessary\n filter: brightness(0.1) opacity(0.1);\n`;\n","import React from 'react';\nimport { DialogProps } from '@material-ui/core/Dialog';\n\nimport elipseBlue from '../../assets/Elipseblue.svg';\nimport elipseGreen from '../../assets/Elipsegreen.svg';\n\nimport {\n StyledMuiDialog,\n StyledElipseBlueTop,\n StyledElipseGreenTop,\n StyledElipseBlueBot,\n StyledElipseGreenBot,\n StyledDiv,\n} from './styles';\n\nconst StyledDialog: React.FC<DialogProps> = ({ children, ...dialogProps }) => {\n return (\n <StyledMuiDialog {...dialogProps}>\n <StyledDiv>\n <StyledElipseBlueTop src={elipseBlue} />\n <StyledElipseGreenTop src={elipseGreen} />\n <StyledElipseBlueBot src={elipseBlue} />\n <StyledElipseGreenBot src={elipseGreen} />\n </StyledDiv>\n {children}\n </StyledMuiDialog>\n );\n};\n\nexport default StyledDialog;\n","import { DialogContent, DialogTitle } from '@material-ui/core';\nimport React from 'react';\nimport StyledDialog from './StyledDialog';\n\nexport type DialogProps = {\n open: boolean;\n title?: string;\n};\n\nconst StyledSimpleDialog: React.FC<DialogProps> = ({\n open,\n title,\n children,\n}) => {\n return (\n <StyledDialog open={open}>\n {title && <DialogTitle>{title}</DialogTitle>}\n <DialogContent>{children}</DialogContent>\n </StyledDialog>\n );\n};\n\nexport default StyledSimpleDialog;\n","import { FormControlLabel } from '@material-ui/core';\nimport MuiFab from '@material-ui/core/Fab';\nimport styled from 'styled-components';\n\nexport const CreateEventDialogContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: ${({ theme }) => theme.spacing(1.5)}px;\n`;\n\nexport const StyledFormControlLabel = styled(FormControlLabel)`\n color: white;\n & .MuiRadio-root {\n color: white;\n }\n`;\n\nexport const CreateDialogBtnContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-evenly;\n margin: ${({ theme }) => theme.spacing(2)}px 0;\n`;\n\nexport const Fab = styled(MuiFab)`\n bottom: ${({ theme }) => theme.spacing(3)}px;\n background-color: ${({ theme }) => theme.palette.primary.dark};\n color: ${({ theme }) => theme.palette.common.white};\n svg {\n font-size: ${({ theme }) => theme.typography.h3.fontSize};\n }\n`;\n","import { FormControl, Radio, RadioGroup, Typography } from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/AddRounded';\nimport React, { useContext, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\nimport StyledButton from '../StyledButton';\nimport StyledSimpleModal from '../StyledSimpleModal';\nimport {\n CreateDialogBtnContainer,\n CreateEventDialogContainer,\n Fab,\n StyledFormControlLabel,\n} from './styles';\n\nconst EventSelectTypeDialog: React.FC<{\n opened: boolean;\n close: () => void;\n}> = ({ opened, close }) => {\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n const [eventType, setEventType] = useState('');\n const history = useHistory();\n const handleCreateEventClick = () => {\n history.push(`/plantao/adicionar-evento/${eventType}`);\n };\n\n const title = shiftInProgress ? undefined : 'Sem plantão ativo';\n const ShiftInProgressDialog = (\n <>\n <CreateEventDialogContainer>\n <FormControl>\n <RadioGroup\n aria-label=\"gender\"\n name=\"gender1\"\n onChange={(e) => setEventType(e.target.value)}\n >\n <StyledFormControlLabel\n value=\"compromisso\"\n control={<Radio color=\"default\" />}\n label=\"Compromisso\"\n />\n <StyledFormControlLabel\n value=\"intercorrencia\"\n control={<Radio color=\"default\" />}\n label=\"Intercorrência\"\n />\n <StyledFormControlLabel\n value=\"medicamento\"\n control={<Radio color=\"default\" />}\n label=\"Medicamento\"\n />\n <StyledFormControlLabel\n value=\"medicao\"\n control={<Radio color=\"default\" />}\n label=\"Controles e sinais vitais\"\n />\n <StyledFormControlLabel\n value=\"rotina\"\n control={<Radio color=\"default\" />}\n label=\"Rotina\"\n />\n <StyledFormControlLabel\n value=\"anotacoes\"\n control={<Radio color=\"default\" />}\n label=\"Anotações e evolução do plantão\"\n />\n </RadioGroup>\n </FormControl>\n </CreateEventDialogContainer>\n <CreateDialogBtnContainer>\n <StyledButton color=\"inherit\" onClick={close}>\n Cancelar\n </StyledButton>\n <StyledButton\n disabled={!eventType}\n color=\"inherit\"\n onClick={handleCreateEventClick}\n >\n Avançar\n </StyledButton>\n </CreateDialogBtnContainer>\n </>\n );\n\n const ShiftNotInProgressDialog = (\n <>\n <CreateEventDialogContainer>\n <Typography variant=\"subtitle1\">\n Para ser possÃvel adicionar um evento, é necessário estar em um\n plantão em andamento.\n </Typography>\n </CreateEventDialogContainer>\n <CreateDialogBtnContainer>\n <StyledButton color=\"inherit\" onClick={close}>\n Entendi\n </StyledButton>\n </CreateDialogBtnContainer>\n </>\n );\n\n return (\n <StyledSimpleModal open={opened} title={title}>\n {shiftInProgress ? ShiftInProgressDialog : ShiftNotInProgressDialog}\n </StyledSimpleModal>\n );\n};\n\nconst CreateEventSelectTypeDialog: React.FC = () => {\n const [isCreateEventDialogOpen, setIsCreateEventDialogOpen] = useState(false);\n\n return (\n <>\n <Fab size=\"large\" onClick={() => setIsCreateEventDialogOpen(true)}>\n <AddIcon />\n </Fab>\n {isCreateEventDialogOpen && (\n <EventSelectTypeDialog\n opened={isCreateEventDialogOpen}\n close={() => setIsCreateEventDialogOpen(false)}\n />\n )}\n </>\n );\n};\n\nexport default CreateEventSelectTypeDialog;\n","import styled from 'styled-components';\nimport { Link } from 'react-router-dom';\n\nimport { MenuItemProps } from './';\n\nexport const StyledLink = styled(Link)<MenuItemProps>`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n align-self: stretch;\n flex: 1;\n font-size: 10px;\n text-decoration: none;\n background-color: ${({ $active, theme }) =>\n $active ? theme.palette.primary.dark : theme.palette.primary.main};\n color: ${({ theme }) => theme.palette.common.white};\n height: 100%;\n\n svg {\n height: 24px;\n margin-bottom: ${({ theme }) => theme.spacing(0.25)}px;\n }\n\n &:first-child {\n border-top-left-radius: 24px;\n }\n\n &:last-child {\n border-top-right-radius: 24px;\n }\n`;\n","import React, { useMemo } from 'react';\nimport { LinkProps, useLocation } from 'react-router-dom';\nimport { StyledLink } from './styles';\n\nexport interface MenuItemProps extends LinkProps {\n $active?: boolean;\n to: string;\n exact?: boolean;\n}\n\nconst MenuItem: React.FC<MenuItemProps> = ({ to, children, exact }) => {\n const location = useLocation();\n\n const isActive = useMemo(() => {\n if (exact) return location.pathname === to && location.pathname !== '/';\n return location.pathname.startsWith(to);\n }, [location.pathname]);\n\n return (\n <StyledLink to={to} $active={isActive}>\n {children}\n </StyledLink>\n );\n};\n\nexport default MenuItem;\n","import styled from 'styled-components';\nimport { Badge } from '@material-ui/core';\n\ninterface StyledBadgeProps {\n backgroundColor: string;\n visible: boolean;\n}\n\nexport const Container = styled.nav`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n bottom: 0px;\n width: 100%;\n height: ${({ theme }) => theme.spacing(7)}px;\n color: ${({ theme }) => theme.palette.common.white};\n background-color: ${({ theme }) => theme.palette.primary.main};\n border-top-left-radius: 24px;\n border-top-right-radius: 24px;\n`;\n\nexport const LogoContainer = styled.div`\n padding: ${({ theme }) => theme.spacing(8)}px\n ${({ theme }) => theme.spacing(4)}px;\n img {\n width: 100%;\n }\n`;\n\nexport const LogoutContainer = styled.div`\n margin: ${({ theme }) => theme.spacing(4)}px;\n`;\n\nexport const StyledBadge = styled(Badge)<StyledBadgeProps>`\n .MuiBadge-anchorOriginTopRightRectangle {\n background-color: ${({ backgroundColor }) => backgroundColor};\n transform: ${({ visible }) => (visible ? 'scale(1)' : 'scale(0)')}\n translate(15%, -15%);\n border-radius: 50%;\n height: 10px;\n width: 10px;\n }\n`;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.9736 13.605L17.1561 17.1486C17.0413 17.6495 16.6009 18 16.0852 18C7.21475 17.9993 0 10.7856 0 1.91613C0 1.40076 0.350506 0.959924 0.851565 0.845672L4.39565 0.0283305C4.91179 -0.091265 5.43919 0.176612 5.65366 0.66533L7.28928 4.47959C7.48048 4.92886 7.35152 5.45231 6.97355 5.76097L5.08056 7.2807C6.27528 9.71409 8.25406 11.6926 10.6885 12.8878L12.2383 10.9965C12.5438 10.6176 13.0713 10.4864 13.5206 10.681L17.3354 12.316C17.7943 12.5574 18.0931 13.0917 17.9736 13.605Z\",\n fill: \"white\"\n});\n\nfunction SvgPhoneIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 18,\n height: 18,\n viewBox: \"0 0 18 18\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPhoneIcon);\nexport default __webpack_public_path__ + \"static/media/phone-icon.8083d8d6.svg\";\nexport { ForwardRef as ReactComponent };","import SchoolIcon from '@material-ui/icons/School';\nimport ShoppingCartIcon from '@material-ui/icons/ShoppingCart';\nimport WatchLaterIcon from '@material-ui/icons/WatchLater';\nimport red from '@material-ui/core/colors/red';\nimport React, { useContext } from 'react';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\n\nimport CreateEventSelectTypeDialog from '../../components/CreateEventSelectTypeDialog';\nimport { AuthContext } from '../../contexts/auth';\nimport useCanAccess from '../../hooks/useCanAccess';\nimport MenuItem from './MenuItem';\nimport { Container, StyledBadge } from './styles';\n\nimport { ReactComponent as PhoneIcon } from '../../assets/phone-icon.svg';\nimport { isSelfCare } from '../../contexts/permission';\n\nconst Tabbar: React.FC = () => {\n const { userInfo } = useContext(AuthContext);\n const { executionInProgress } = useContext(ShiftInProgressContext);\n const { isAllowedToRead: isAllowedToReadNextShifts } = useCanAccess(\n 'care/shift.upnext'\n );\n const { isAllowedToCreate: isAllowedToCreateEvent } = useCanAccess(\n 'care/shift/event'\n );\n const { isAllowedToRead: isAllowedToReadContent } = useCanAccess(\n 'care/content'\n );\n const { isAllowedToRead: isAllowedToReadShoppingList } = useCanAccess(\n 'care/shopping-list'\n );\n const { isAllowedToRead: isAllowedToReadEmergencyContacts } = useCanAccess(\n 'care/emergency-contact'\n );\n const path = executionInProgress ? '/plantao' : '/';\n\n return (\n <Container>\n {(isAllowedToReadNextShifts || executionInProgress) && (\n <MenuItem exact to={path}>\n <StyledBadge\n backgroundColor={red[500]}\n variant=\"dot\"\n visible={!!executionInProgress}\n >\n <WatchLaterIcon />\n </StyledBadge>\n {isSelfCare(userInfo?.user) ? 'Rotina' : 'Plantão'}\n </MenuItem>\n )}\n {isAllowedToReadContent && (\n <MenuItem to=\"/conteudo\">\n <SchoolIcon /> Conteúdo\n </MenuItem>\n )}\n {isAllowedToCreateEvent && <CreateEventSelectTypeDialog />}\n {isAllowedToReadShoppingList && (\n <MenuItem to=\"/compras\">\n <ShoppingCartIcon /> Compras\n </MenuItem>\n )}\n {isAllowedToReadEmergencyContacts && (\n <MenuItem to=\"/ajuda\">\n <PhoneIcon /> Me ajuda\n </MenuItem>\n )}\n </Container>\n );\n};\n\nexport default Tabbar;\n","import {\n Backdrop as MaterialBackdrop,\n CircularProgress as MaterialCircularProgress,\n} from '@material-ui/core';\nimport Tab from '@material-ui/core/Tab';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: ${({ theme }) => theme.spacing(2, 2)};\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n width: 100%;\n border-bottom: 1px solid;\n border-color: ${({ theme }) => theme.palette.primary.main};\n padding: ${({ theme }) => theme.spacing(0, 0, 2, 0)};\n`;\n\nexport const StyledTabItem = styled(Tab)`\n width: ${({ theme }) => theme.spacing(15)}px;\n color: ${({ theme }) => theme.palette.primary.main};\n font-size: ${({ theme }) => theme.spacing(2)}px;\n font-weight: 400;\n border-radius: 5px 5px 0 0;\n`;\n\nexport const Backdrop = styled(MaterialBackdrop)`\n z-index: ${({ theme }) => theme.zIndex.drawer + 1};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n position: absolute;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n","import React, {\n createContext,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nexport interface ContextProps {\n internetStatus?: 'online' | 'offline';\n checkInternetConnection: () => Promise<boolean>;\n}\n\nexport const InternetConnectionContext = createContext<ContextProps>({\n internetStatus: 'online',\n} as ContextProps);\n\n/**\n * Check for internet every 30 seconds\n */\nconst INTERNET_CONNECTION_CHECK_FREQUENCY = 30 * 1000;\n// Primary DNS servers for:\nconst EXTERNAL_INTERNET_TESTING_SERVER_URIS = [\n '8.8.8.8', // Google\n '1.1.1.1', // Cloudflare\n '208.67.222.222', // OpenDNS\n];\n\nexport const InternetConnectionProvider: React.FC = ({ children }) => {\n const intervalRef = useRef<NodeJS.Timeout>();\n const [internetStatus, setInternetStatus] = useState<\n ContextProps['internetStatus']\n >();\n\n useEffect(() => {\n checkInternetConnection().finally(() => {\n intervalRef.current = setInterval(\n checkInternetConnection,\n INTERNET_CONNECTION_CHECK_FREQUENCY\n );\n });\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, []);\n\n const checkInternetConnection = useCallback(async () => {\n const pings = await Promise.all(\n EXTERNAL_INTERNET_TESTING_SERVER_URIS.map(async (uri) => {\n // If server is unreachable, fetch throws an error.\n // By doing this, we count how many errors occured,\n // and therefore how many pings were unreachable\n try {\n await fetch(uri);\n return true;\n } catch {\n return false;\n }\n })\n );\n\n if (pings.some((ping) => ping)) {\n setInternetStatus('online');\n return true;\n } else {\n setInternetStatus('offline');\n return false;\n }\n }, []);\n\n return (\n <InternetConnectionContext.Provider\n value={{ checkInternetConnection, internetStatus }}\n >\n {children}\n </InternetConnectionContext.Provider>\n );\n};\n\nexport default InternetConnectionProvider;\n","import styled from 'styled-components';\nimport Cached from '@material-ui/icons/Cached';\nimport IconButton from '@material-ui/core/IconButton';\nimport MaterialCircularProgress from '@material-ui/core/CircularProgress';\n\nexport const Container = styled.div`\n background-color: ${({ theme }) => theme.palette.warning.light};\n padding: ${({ theme }) => theme.spacing(1, 2)};\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: 1;\n`;\n\nexport const CircularProgress = styled(MaterialCircularProgress).attrs({\n size: 16,\n color: 'inherit',\n})`\n padding: 4px;\n`;\n\nexport const Label = styled.span`\n color: ${({ theme }) => theme.palette.primary.dark};\n fontsize: ${({ theme }) => theme.typography.body2.fontSize}px;\n`;\n\nexport const RefreshIcon = styled(Cached)`\n width: 24px;\n`;\n\nexport const StyledIconButton = styled(IconButton)`\n padding: 0;\n margin: ${({ theme }) => theme.spacing(0, 0, 0, 1)};\n`;\n","import React, { useContext, useState } from 'react';\nimport { InternetConnectionContext } from './InternetConnectionContext';\nimport {\n CircularProgress,\n Container,\n Label,\n RefreshIcon,\n StyledIconButton,\n} from './style';\n\n/**\n * This component will render a warning banner if user's internet connection\n * is not active.\n */\nconst InternetConnectionErrorBanner: React.FC = () => {\n const [loading, setLoading] = useState(false);\n const { checkInternetConnection, internetStatus } = useContext(\n InternetConnectionContext\n );\n\n const handleRefresh = () => {\n setLoading(true);\n\n return checkInternetConnection().finally(() => {\n setLoading(false);\n });\n };\n\n if (internetStatus === 'online') {\n return null;\n }\n\n if (internetStatus === 'offline') {\n return (\n <>\n <Container onClick={() => handleRefresh()}>\n <Label>Você está sem conexão no momento!</Label>\n <StyledIconButton>\n {loading ? <CircularProgress /> : <RefreshIcon />}\n </StyledIconButton> \n </Container> \n </>\n );\n }\n\n return null;\n};\n\n\nexport default InternetConnectionErrorBanner;\n","import { AppBar, Toolbar as MaterialToolbar } from '@material-ui/core';\nimport styled from 'styled-components';\nimport ElipseBlue from '../../../assets/Elipseblue.svg';\nimport ElipseGreen from '../../../assets/Elipsegreen.svg';\n\nexport const Toolbar = styled(MaterialToolbar)`\n justify-content: space-between;\n`;\n\nexport const Container = styled(AppBar).attrs({\n elevation: 0,\n position: 'sticky',\n})`\n & .MuiToolbar-root {\n height: 72px;\n z-index: 5;\n }\n`;\n\nexport const StyledElipseBlueTop = styled.img.attrs({\n src: ElipseBlue,\n})`\n width: 250px;\n height: 250px;\n top: -200px;\n right: 30px;\n position: absolute;\n z-index: 2;\n`;\n\nexport const StyledElipseGreenTop = styled.img.attrs({\n src: ElipseGreen,\n})`\n width: 250px;\n height: 250px;\n top: -180px;\n right: -80px;\n position: absolute;\n z-index: 1;\n`;\n\nexport const StyledElipseBlueBot = styled.img.attrs({\n src: ElipseBlue,\n})`\n width: 250px;\n height: 250px;\n bottom: -150px;\n left: -120px;\n position: absolute;\n z-index: 2;\n`;\n\nexport const StyledElipseGreenBot = styled.img.attrs({\n src: ElipseGreen,\n})`\n width: 250px;\n height: 250px;\n bottom: -220px;\n left: 0px;\n position: absolute;\n z-index: 1;\n`;\n\nexport const StyledDiv = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: hidden;\n // [TODO]: change to the right images if necessary\n filter: brightness(0.1) opacity(0.1);\n`;\n","import React from 'react';\nimport InternetConnectionErrorBanner from '../../InternetConnectionCheck';\n\nimport {\n Container,\n StyledDiv,\n StyledElipseBlueBot,\n StyledElipseBlueTop,\n StyledElipseGreenBot,\n StyledElipseGreenTop,\n Toolbar,\n} from './styles';\n\nexport type HeaderProps = {\n leftContent?: React.ReactNode;\n centerContent?: React.ReactNode;\n rightContent?: React.ReactNode;\n withBackgroundShapes?: boolean;\n};\n\nconst HeaderBase: React.FC<HeaderProps> = ({\n leftContent,\n centerContent,\n rightContent,\n withBackgroundShapes = true,\n children,\n}) => {\n return (\n <Container>\n <Toolbar>\n {leftContent}\n {centerContent}\n {rightContent}\n </Toolbar>\n {withBackgroundShapes && (\n <StyledDiv>\n <StyledElipseBlueTop />\n <StyledElipseGreenTop />\n <StyledElipseBlueBot />\n <StyledElipseGreenBot />\n </StyledDiv>\n )}\n <InternetConnectionErrorBanner />\n {children}\n </Container>\n );\n};\n\nexport default HeaderBase;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Title = styled(Typography).attrs({\n variant: 'h6',\n})`\n text-align: center;\n font-size: 16px;\n display: -webkit-box;\n max-width: 250px;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\n","import React from 'react';\nimport HeaderBase, { HeaderProps as BaseHeaderProps } from '../HeaderBase';\nimport { Title } from './styles';\n\nexport interface HeaderProps extends BaseHeaderProps {\n title: string;\n}\n\nconst HeaderWithTitle: React.FC<HeaderProps> = ({ title, ...props }) => {\n return (\n <HeaderBase\n centerContent={\n <Title align=\"center\" variant=\"h6\">\n {title}\n </Title>\n }\n {...props}\n />\n );\n};\n\nexport default HeaderWithTitle;\n","import { useTheme } from '@material-ui/core'\nimport React from 'react'\n\nconst PscIcon: React.FC<{ variant?: 'main' | 'light' | 'dark' }> = ({\n variant = 'main',\n}) => {\n const theme = useTheme()\n const pscIconColor = theme.palette.primary[variant]\n\n return (\n <svg\n width='24'\n height='22'\n viewBox='0 0 24 22'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n stroke={pscIconColor}\n >\n <path\n d='M16.3582 18.752L15.7182 13.628C15.6275 12.9022 15.2748 12.2346 14.7264 11.7506C14.178 11.2667 13.4717 10.9997 12.7402 11H10.5362C9.80517 11.0002 9.09932 11.2674 8.55133 11.7513C8.00333 12.2352 7.6509 12.9026 7.56024 13.628L6.91924 18.752C6.88407 19.0335 6.90918 19.3193 6.99292 19.5903C7.07666 19.8614 7.21712 20.1116 7.40495 20.3242C7.59279 20.5368 7.8237 20.707 8.08237 20.8235C8.34104 20.94 8.62154 21.0002 8.90524 21H14.3732C14.6569 21.0001 14.9372 20.9398 15.1958 20.8232C15.4543 20.7066 15.6851 20.5364 15.8729 20.3238C16.0606 20.1112 16.201 19.8611 16.2846 19.5901C16.3683 19.3191 16.3934 19.0334 16.3582 18.752V18.752Z'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M11.6392 7C13.296 7 14.6392 5.65685 14.6392 4C14.6392 2.34315 13.296 1 11.6392 1C9.98231 1 8.63916 2.34315 8.63916 4C8.63916 5.65685 9.98231 7 11.6392 7Z'\n strokeWidth='2'\n />\n <path\n d='M3.63916 10C4.74373 10 5.63916 9.10457 5.63916 8C5.63916 6.89543 4.74373 6 3.63916 6C2.53459 6 1.63916 6.89543 1.63916 8C1.63916 9.10457 2.53459 10 3.63916 10Z'\n strokeWidth='2'\n />\n <path\n d='M19.6392 10C20.7437 10 21.6392 9.10457 21.6392 8C21.6392 6.89543 20.7437 6 19.6392 6C18.5346 6 17.6392 6.89543 17.6392 8C17.6392 9.10457 18.5346 10 19.6392 10Z'\n strokeWidth='2'\n />\n <path\n d='M19.6392 13H19.9452C20.4187 12.9999 20.8768 13.1678 21.2381 13.4738C21.5993 13.7798 21.8404 14.204 21.9182 14.671L22.2512 16.671C22.299 16.9575 22.2838 17.2511 22.2067 17.5311C22.1295 17.8112 21.9923 18.0711 21.8045 18.2928C21.6167 18.5144 21.3829 18.6925 21.1194 18.8146C20.8558 18.9368 20.5687 19 20.2782 19H16.6392M3.63925 13H3.33325C2.85981 12.9999 2.4017 13.1678 2.04042 13.4738C1.67914 13.7798 1.43813 14.204 1.36025 14.671L1.02725 16.671C0.979458 16.9575 0.994667 17.2511 1.07181 17.5311C1.14896 17.8112 1.2862 18.0711 1.47397 18.2928C1.66175 18.5144 1.89556 18.6925 2.15914 18.8146C2.42272 18.9368 2.70974 19 3.00025 19H6.63925L3.63925 13Z'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n )\n}\n\nexport default PscIcon\n","import { IconButton } from '@material-ui/core';\nimport ChevronLeftRounded from '@material-ui/icons/ChevronLeftRounded';\nimport PhoneIcon from '@material-ui/icons/Phone';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const StyledBackIcon = styled(ChevronLeftRounded)`\n font-size: 40px;\n`;\n\nexport const StyledBlankDiv = styled.div`\n height: 40px;\n width: 40px;\n`;\n\nexport const StyledIconButton = styled(IconButton)`\n padding: 0;\n margin: 0;\n`;\n\nexport const IconBackground = styled(Link)`\n background-color: ${({ theme }) => theme.palette.common.white};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n width: ${({ theme }) => theme.spacing(3.5)}px;\n height: ${({ theme }) => theme.spacing(3.5)}px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-decoration: none;\n margin-right: 0.5px;\n`;\n\nexport const StyledPhoneIcon = styled(PhoneIcon)`\n color: ${({ theme }) => theme.palette.primary.main};\n`;\n","import DeleteIcon from '@material-ui/icons/Delete';\nimport React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport HeaderWithTitle from '../HeaderWithTitle';\nimport PscIcon from '../../Icons/PscIcon';\nimport {\n IconBackground,\n StyledBackIcon,\n StyledBlankDiv,\n StyledIconButton,\n StyledPhoneIcon,\n} from './styles';\n\nexport type HeaderProps = {\n title: string;\n rightButtonType?: 'phone' | 'remove' | 'psc';\n leftButtonType?: 'goBack';\n rightIconClick?: () => void;\n leftIconClick?: () => void;\n};\n\nconst Header: React.FC<HeaderProps> = ({\n title,\n rightButtonType,\n rightIconClick,\n leftIconClick,\n}: HeaderProps) => {\n const history = useHistory();\n\n const actions = {\n phone: (\n <IconBackground to=\"/ajuda\">\n <StyledPhoneIcon fontSize=\"small\" />\n </IconBackground>\n ),\n remove: <DeleteIcon fontSize=\"large\" />,\n psc: (\n <IconBackground to=\"/pessoas-sob-cuidado\">\n <PscIcon />\n </IconBackground>\n ),\n };\n\n return (\n <>\n <HeaderWithTitle\n leftContent={\n <StyledIconButton\n edge=\"end\"\n color=\"inherit\"\n data-testid=\"back-button\"\n onClick={!leftIconClick ? () => history.goBack() : leftIconClick}\n >\n <StyledBackIcon />\n </StyledIconButton>\n }\n title={title}\n rightContent={\n rightButtonType ? (\n <StyledIconButton\n edge=\"end\"\n color=\"inherit\"\n data-testid={rightButtonType}\n onClick={rightIconClick}\n >\n {actions[rightButtonType]}\n </StyledIconButton>\n ) : (\n <StyledBlankDiv />\n )\n }\n />\n </>\n );\n};\n\nexport default Header;\n","import styled from 'styled-components';\n\nexport const StyledFieldset = styled.fieldset`\n border: none;\n margin: 0;\n padding: 0;\n // !important flag is necessary to override color from StyledTextField and StyledSelectField\n & .MuiOutlinedInput-notchedOutline {\n border-color: ${({ theme, disabled }) =>\n disabled ? theme.palette.extra.color.grey.main + '!important' : ''};\n }\n & input {\n color: ${({ theme, disabled }) =>\n disabled ? theme.palette.extra.color.grey.main + '!important' : ''};\n }\n & label {\n color: ${({ theme, disabled }) =>\n disabled ? theme.palette.extra.color.grey.main + '!important' : ''};\n }\n`;\n","import { Tabs } from '@material-ui/core';\nimport styled from 'styled-components';\n\nconst StyledTabs = styled(Tabs)`\n & .PrivateTabIndicator-colorSecondary-11 {\n background-color: ${({ theme }) => theme.palette.primary.main};\n }\n & .MuiTabs-indicator {\n background-color: ${({ theme }) => theme.palette.primary.main};\n }\n color: ${({ theme }) => theme.palette.common.black};\n padding-left: ${({ theme }) => theme.spacing(2)}px;\n\n & .Mui-selected {\n color: ${({ theme }) => theme.palette.primary.main};\n }\n`;\n\nexport default StyledTabs;\n","import { AppCPalette, clientSideScheme } from '@cuidador/whitelabel';\nimport { createMuiTheme, Theme } from '@material-ui/core/styles';\nimport { Palette } from '@material-ui/core/styles/createPalette';\n\ntype StyledTheme = Theme & {\n palette: AppCPalette;\n};\n\ndeclare module 'styled-components' {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n export interface DefaultTheme extends Theme {\n palette: Palette & AppCPalette;\n }\n}\n\nexport const resolveTheme = () => {\n const scheme = clientSideScheme();\n\n const muiTheme = createMuiTheme({\n palette: scheme.appCPalette,\n shape: {\n borderRadius: 12,\n },\n typography: {\n fontFamily: 'Work Sans',\n fontSize: 14,\n },\n spacing: 8,\n overrides: {\n MuiButton: {\n root: {\n borderRadius: '9px',\n textTransform: 'unset',\n },\n },\n MuiTab: {\n root: {\n textTransform: 'unset',\n },\n },\n },\n });\n\n const styledTheme: StyledTheme = {\n ...muiTheme,\n palette: {\n ...muiTheme.palette,\n extra: scheme.appCPalette.extra,\n },\n };\n\n return {\n muiTheme,\n styledTheme,\n };\n};\n","export type ColorsType = 'primary' | 'secondary' | 'white' | 'text' | 'black';\nimport { resolveTheme } from './theme';\n\ntype ColorMappingType = Record<ColorsType, string>;\n\nconst { muiTheme, styledTheme } = resolveTheme();\nexport const colorMapping: ColorMappingType = {\n primary: muiTheme.palette.primary.main,\n secondary: muiTheme.palette.secondary.main,\n white: muiTheme.palette.common.white,\n text: muiTheme.palette.primary.dark,\n black: styledTheme.palette.extra.color.grey.dark,\n};\n\nexport const hexToRGBArray = (hex: string): number[] => {\n const h = '0123456789ABCDEF';\n const r = h.indexOf(hex[1]) * 16 + h.indexOf(hex[2]);\n const g = h.indexOf(hex[3]) * 16 + h.indexOf(hex[4]);\n const b = h.indexOf(hex[5]) * 16 + h.indexOf(hex[6]);\n return [r, g, b];\n};\n","import MuiTextField from '@material-ui/core/TextField';\nimport styled from 'styled-components';\n\nimport { colorMapping, ColorsType } from '../../styles/colorMapping';\n\nexport const TextField = styled(MuiTextField)<{ $color: ColorsType }>`\n & label:not(.Mui-error) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & label.Mui-disabled {\n color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n & input {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & textarea {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & .MuiInputAdornment-root .MuiIconButton-label {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & .MuiInputAdornment-root .MuiIconButton-label {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & .MuiOutlinedInput-root:not(.Mui-error) {\n & fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n &:hover fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n &.Mui-focused fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n }\n & .MuiOutlinedInput-root.Mui-disabled {\n & input:disabled {\n color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n & fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n }\n`;\n","import React from 'react';\nimport { TextFieldProps } from '@material-ui/core/TextField';\n\nimport { ColorsType } from '../../styles/colorMapping';\nimport { TextField } from './styles';\n\ntype StyledTextFieldProps = Omit<TextFieldProps, 'color'> & {\n color?: ColorsType;\n};\n\nconst StyledTextField: React.FC<StyledTextFieldProps> = ({\n color = 'primary',\n variant = 'outlined',\n ...props\n}) => <TextField $color={color} variant={variant} {...props} />;\n\nexport default StyledTextField;\n","import { TextFieldProps } from '@material-ui/core/TextField';\nimport { ErrorMessage, Field, FieldAttributes, useFormikContext } from 'formik';\nimport React from 'react';\nimport StyledTextField from '../StyledTextField';\n\nconst FormikField = (\n {\n name,\n required = false,\n fullWidth = true,\n ...props\n }: TextFieldProps & { name: string } & FieldAttributes<any> // eslint-disable-line @typescript-eslint/no-explicit-any\n) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { errors, touched } = useFormikContext<any>();\n\n const hasError = touched[name] && errors[name];\n\n return (\n <Field\n required={required}\n autoComplete=\"off\"\n as={StyledTextField}\n name={name}\n error={Boolean(hasError)}\n helperText={<ErrorMessage name={name} />}\n fullWidth={fullWidth}\n {...props}\n />\n );\n};\n\nexport default FormikField;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const RuleContainer = styled.div`\n display: flex;\n align-items: center;\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n`;\n\ninterface RuleTextProps {\n isValid: boolean;\n submitError: boolean;\n}\n\nexport const Title = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.grey.main};\n font-weight: bold;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const RuleText = styled(Typography)<RuleTextProps>`\n color: ${({ isValid, submitError, theme }) =>\n isValid\n ? theme.palette.extra.color.green\n : submitError\n ? theme.palette.extra.color.red.main\n : theme.palette.extra.color.grey.main};\n margin-left: ${({ theme }) => theme.spacing(1)}px;\n font-weight: bold;\n`;\n","import { clientSideScheme } from '@cuidador/whitelabel';\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\nimport CheckBoxOutlined from '@material-ui/icons/CheckBoxOutlined';\nimport CloseIcon from '@material-ui/icons/Close';\nimport React from 'react';\nimport { RuleContainer, RuleText, Title } from './styles';\n\ninterface passwordRule {\n text: string;\n isValid: (value: string) => boolean;\n}\n\nconst passwordRules: passwordRule[] = [\n {\n text: 'Pelo menos 8 caracteres',\n isValid: (password) => password.length >= 8,\n },\n {\n text: 'Uma letra maiúscula',\n isValid: (password) => /[A-Z]/.test(password),\n },\n {\n text: 'Uma letra minúscula',\n isValid: (password) => /[a-z]/.test(password),\n },\n {\n text: 'Um número',\n isValid: (password) => /[0-9]/.test(password),\n },\n {\n text: 'Um caractere especial (!, *, -, ?, @, /)',\n isValid: (password) => /[!@#$%&?.,;/\\* -]/.test(password),\n },\n];\n\ninterface PasswordRequirementsProps {\n password: string;\n validationError?: boolean;\n}\n\nconst PasswordRequirements = ({\n password,\n validationError = false,\n}: PasswordRequirementsProps) => {\n const { appCPalette } = clientSideScheme();\n return (\n <div>\n <Title variant=\"caption\">Critérios para criar sua senha</Title>\n {passwordRules.map((rule, index) => {\n const isValid = rule.isValid(password);\n return (\n <RuleContainer key={index}>\n {isValid ? (\n <CheckBoxIcon htmlColor={appCPalette.extra.color.green} />\n ) : validationError ? (\n <CloseIcon htmlColor={appCPalette.extra.color.red.main} />\n ) : (\n <CheckBoxOutlined htmlColor={appCPalette.extra.color.grey.main} />\n )}\n <RuleText\n variant=\"subtitle2\"\n isValid={isValid}\n submitError={validationError}\n >\n {rule.text}\n </RuleText>\n </RuleContainer>\n );\n })}\n </div>\n );\n};\n\nexport default PasswordRequirements;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n color: ${({ theme }) => theme.palette.primary.dark};\n form {\n display: flex;\n flex: 1;\n flex-direction: column;\n }\n`;\n\nexport const PasswordInstructions = styled(Typography).attrs({\n variant: 'caption',\n})`\n margin: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const FooterContainer = styled.div`\n display: flex;\n justify-content: center;\n flex: 1;\n align-items: flex-end;\n`;\n","/**\n * https://medium.com/trainingcenter/mascara-de-cpf-com-react-javascript-a07719345c93\n * Will be of type ddd.ddd.ddd-dd\n */\nexport const cpfMask = (value: string) => {\n return value\n .replace(/\\D/g, '') // substitui qualquer caracter que nao seja numero por nada\n .replace(/(\\d{3})(\\d)/, '$1.$2') // captura 2 grupos de numero o primeiro de 3 e o segundo de 1, apos capturar o primeiro grupo ele adiciona um ponto antes do segundo grupo de numero\n .replace(/(\\d{3})(\\d)/, '$1.$2')\n .replace(/(\\d{3})(\\d{1,2})/, '$1-$2')\n .replace(/(-\\d{2})\\d+?$/, '$1'); // captura 2 numeros seguidos de um traço e não deixa ser digitado mais nada\n};\n\nexport const numberMask = (value: string) => {\n return value.replace(/\\D/g, ''); // substitui qualquer caracter que nao seja numero por nada\n};\n\n// Will be of type ddddd-ddd\nexport const cepMask = (value: string) => {\n return value\n .replace(/\\D/g, '') // substitui qualquer caracter que nao seja numero por nada\n .replace(/(\\d{5})(\\d{1,3})/, '$1-$2')\n .replace(/(-\\d{3})\\d+?$/, '$1'); // captura 2 numeros seguidos de um traço e não deixa ser digitado mais nada\n};\n\n// Will be of type (dd) ddddd-dddd* or (dd) ddddd-dddd*\n// Or type 0800 ddd dddd\n// Warning: If first 2 digits are \"55\", they will be removed (brazil international code)\nexport const phoneMask = (value: string) => {\n let numberOnly = value.replace(/\\D/g, ''); // substitui qualquer caracter que nao seja numero por nada\n\n // Removes \"55\" if present\n if (value.startsWith('55') && value.length > 10) {\n numberOnly = removeDDI(numberOnly);\n }\n\n // Format 0800 xxx xxxx\n if (value.startsWith('08')) {\n return numberOnly.replace(/(\\d{4})(\\d{3})(\\d{1,4})(\\d*)/, '$1 $2 $3');\n } else if (value.length > 4) {\n return numberOnly\n .replace(/(\\d{2})(\\d{1,5})/, '($1) $2')\n .replace(/(\\d{4,5})(\\d{4})(\\d*)/, '$1-$2');\n }\n return numberOnly;\n};\n\nexport const removeDDI = (value: string) => {\n return value.slice(2);\n};\n\nexport const timeMask = (value: string) => {\n return value.replace(/\\D/g, '').replace(/^(\\d*):(?:[012345]\\d)$/, '');\n};\n\nexport const bodyTemperatureMask = (value: string) => {\n return value.replace(/\\D/g, '').replace(/^(\\d{2})(\\d)\\d*?$/g, '$1,$2');\n};\n\nexport const bloodGlycemiaMask = (value: string) => {\n return value.replace(/\\D/g, '').replace(/^(\\d{3})\\d+?$/, '$1');\n};\n\nexport const breathRateMask = (value: string) => {\n return value.replace(/\\D/g, '').replace(/^(\\d{2})\\d*?$/g, '$1');\n};\n\nexport const heartRateMask = (value: string) => {\n return value.replace(/\\D/g, '').replace(/(\\d{3})\\d+?$/, '$1');\n};\n\nexport const oximetryRateMask = (value: string) => {\n return value.replace(/\\D/g, '').replace(/(\\d{3})\\d+?$/, '$1');\n};\n\nexport const weightMeasurementMask = (value: string) => {\n const formatted = value\n .replace(/[^\\,\\.0-9*]/g, '')\n .replace('.', ',')\n .replace(/^(\\d{3})(\\d)\\d*?$/g, '$1,$2');\n\n /*\n This part limits the amount of digits (formatted.indexOf(',') + 2) after the comma,\n and the limit of the input (3 = 3 digits then the previous lines of code inserts a comma).\n */\n return formatted.substring(\n 0,\n formatted.indexOf(',') > 0 ? formatted.indexOf(',') + 2 : 3\n );\n};\n\n/**\n * https://www.geradorcpf.com/javascript-validar-cpf.htm\n */\nexport function validateCpf(rawCpf = '') {\n const cpf = rawCpf.replace(/[^\\d]+/g, '');\n if (cpf === '') return false;\n // Elimina CPFs invalidos conhecidos\n if (\n cpf.length !== 11 ||\n cpf === '00000000000' ||\n cpf === '11111111111' ||\n cpf === '22222222222' ||\n cpf === '33333333333' ||\n cpf === '44444444444' ||\n cpf === '55555555555' ||\n cpf === '66666666666' ||\n cpf === '77777777777' ||\n cpf === '88888888888' ||\n cpf === '99999999999'\n )\n return false;\n // Valida 1o digito\n let add = 0;\n for (let i = 0; i < 9; i++) add += parseInt(cpf.charAt(i)) * (10 - i);\n let rev = 11 - (add % 11);\n if (rev === 10 || rev === 11) rev = 0;\n if (rev !== parseInt(cpf.charAt(9))) return false;\n // Valida 2o digito\n add = 0;\n for (let i = 0; i < 10; i++) add += parseInt(cpf.charAt(i)) * (11 - i);\n rev = 11 - (add % 11);\n if (rev === 10 || rev === 11) rev = 0;\n if (rev !== parseInt(cpf.charAt(10))) return false;\n return true;\n}\n\nexport const nonAlphanumericString = (value: string) => {\n return value.replace(/[-|. ]/g, '');\n};\n\nexport const validatePasswordStrength = (value: string) => {\n // at least 8 characters\n // at least 1 number\n // at least 1 special character\n // at least 1 letter uppercase and 1 letter lowercase\n const regex = /(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&?.,;/\\* -])[\\da-zA-Z!@#$%&?.,;/\\* -]{8,}/;\n return regex.test(value);\n};\n\n// Will be of type \"d minutos\"\nexport const durationMask = (value: string) => {\n // Resolve for exception when value is 1\n if (value === '1') {\n return '1 minuto';\n }\n // Resolve for other values\n return value\n .replace(/\\D/g, '') // substitui qualquer caracter que nao seja numero por nada\n .replace(/(\\d*)/, '$1 minutos');\n};\n\nexport const UFoptions = [\n { value: 'AC', label: 'AC' },\n { value: 'AL', label: 'AL' },\n { value: 'AP', label: 'AP' },\n { value: 'AM', label: 'AM' },\n { value: 'BA', label: 'BA' },\n { value: 'CE', label: 'CE' },\n { value: 'DF', label: 'DF' },\n { value: 'ES', label: 'ES' },\n { value: 'GO', label: 'GO' },\n { value: 'MA', label: 'MA' },\n { value: 'MT', label: 'MT' },\n { value: 'MS', label: 'MS' },\n { value: 'MG', label: 'MG' },\n { value: 'PA', label: 'PA' },\n { value: 'PB', label: 'PB' },\n { value: 'PR', label: 'PR' },\n { value: 'PE', label: 'PE' },\n { value: 'PI', label: 'PI' },\n { value: 'RJ', label: 'RJ' },\n { value: 'RN', label: 'RN' },\n { value: 'RS', label: 'RS' },\n { value: 'RO', label: 'RO' },\n { value: 'RR', label: 'RR' },\n { value: 'SC', label: 'SC' },\n { value: 'SP', label: 'SP' },\n { value: 'SE', label: 'SE' },\n { value: 'TO', label: 'TO' },\n];\n","import * as Yup from 'yup';\nimport { validatePasswordStrength } from '../../../utils/inputs';\n\nexport interface FormValues {\n currentPassword: string;\n newPassword: string;\n retypePassword: string;\n}\n\nexport const formInitialValue = {\n currentPassword: '',\n newPassword: '',\n retypePassword: '',\n};\n\nexport const validationSchema = Yup.object().shape({\n currentPassword: Yup.string().required('Por favor, insira a senha'),\n newPassword: Yup.string()\n .required('Por favor, insira a nova senha')\n .test(\n 'isValidPassword',\n 'Por favor, insira uma senha que atenda aos critérios listados abaixo',\n (value) => validatePasswordStrength(value || '')\n ),\n retypePassword: Yup.string()\n .required('Por favor, insira a confirmação da senha')\n .oneOf([Yup.ref('newPassword'), ''], 'As senhas devem ser iguais'),\n});\n","import { APIError } from '@cuidador/lib';\nimport IconButton from '@material-ui/core/IconButton';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { AxiosError } from 'axios';\nimport { Form, Formik, FormikHelpers } from 'formik';\nimport React, { useState } from 'react';\nimport { toast } from 'react-toastify';\nimport FormikTextField from '../../../components/Forms/FormikTextField';\nimport PasswordRules from '../../../components/PasswordRules';\nimport StyledButton from '../../../components/StyledButton';\nimport { changePassword } from '../../../contexts/auth';\nimport { resolveErrorMessage } from '../../../utils/error';\nimport { Container, FooterContainer } from './styles';\nimport { formInitialValue, FormValues, validationSchema } from './utils';\n\nconst ChangePassword: React.FC = () => {\n const [showNewPassword, setShowNewPassword] = useState(false);\n const [showRetypePassword, setShowRetypePassword] = useState(false);\n const [validationError, setValidationError] = useState(false);\n\n const handleSubmit = (\n values: FormValues,\n { setFieldValue, setSubmitting }: FormikHelpers<FormValues>\n ) => {\n changePassword(values.currentPassword, values.newPassword)\n .then(() => {\n toast.success('Senha alterada com sucesso');\n setFieldValue('currentPassword', '');\n setFieldValue('newPassword', '');\n setFieldValue('retypePassword', '');\n })\n .catch((err: AxiosError<APIError>) => {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n setSubmitting(false);\n });\n };\n\n const handleShowNewPassword = () => setShowNewPassword(!showNewPassword);\n const handleShowRetypePassword = () =>\n setShowRetypePassword(!showRetypePassword);\n\n return (\n <>\n <Container>\n <Formik\n validationSchema={validationSchema}\n initialValues={formInitialValue}\n onSubmit={handleSubmit}\n validateOnChange={false}\n >\n {(formik) => (\n <Form noValidate={true}>\n <FormikTextField\n color=\"primary\"\n name=\"currentPassword\"\n label=\"Senha antiga\"\n type=\"password\"\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'currentPassword' }}\n />\n <FormikTextField\n color=\"primary\"\n name=\"newPassword\"\n type={showNewPassword ? 'text' : 'password'}\n label=\"Nova senha\"\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'newPassword' }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={handleShowNewPassword}\n >\n {showNewPassword ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n <FormikTextField\n color=\"primary\"\n name=\"retypePassword\"\n type={showRetypePassword ? 'text' : 'password'}\n label=\"Confirmar nova senha\"\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'retypePassword' }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={handleShowRetypePassword}\n >\n {showRetypePassword ? (\n <Visibility />\n ) : (\n <VisibilityOff />\n )}\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n <PasswordRules\n password={formik.values.newPassword}\n validationError={validationError}\n />\n <FooterContainer>\n <StyledButton\n disabled={formik.isSubmitting}\n type=\"submit\"\n size=\"large\"\n color=\"primary\"\n onClick={() => setValidationError(true)}\n >\n Salvar\n </StyledButton>\n </FooterContainer>\n </Form>\n )}\n </Formik>\n </Container>\n </>\n );\n};\n\nexport default ChangePassword;\n","export default __webpack_public_path__ + \"static/media/user.ad8a2890.png\";","import styled from 'styled-components';\nimport MuiFab from '@material-ui/core/Fab';\nimport AvatarEditor from 'react-avatar-editor';\n\nimport { hexToRGBArray } from '../../styles/colorMapping';\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n align-self: center;\n\n img {\n height: 92px;\n width: 92px;\n border-radius: 50%;\n border: solid 1px ${({ theme }) => theme.palette.common.white};\n }\n`;\n\nexport const Fab = styled(MuiFab)`\n position: absolute;\n bottom: 0;\n right: 0;\n width: 30px;\n height: 30px;\n min-height: auto;\n border: solid 1px ${({ theme }) => theme.palette.common.white};\n svg {\n font-size: 18px;\n }\n`;\n\nexport const StyledEditor = styled(AvatarEditor).attrs((props) => ({\n width: 230,\n height: 230,\n borderRadius: 115, // totally round\n color: [...hexToRGBArray(props.theme.palette.primary.main), 0.8],\n}))``;\n","import { DialogActions, DialogContent, Slider } from '@material-ui/core';\nimport AddRoundedIcon from '@material-ui/icons/AddRounded';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport React, { useRef, useState } from 'react';\n\nimport UserDefault from '../../assets/user.png';\nimport useCanAccess from '../../hooks/useCanAccess';\nimport StyledButton from '../StyledButton';\nimport StyledDialog from '../StyledDialog';\nimport { Container, Fab, StyledEditor } from './styles';\n\ntype ProfilePictureProps = {\n onChange: (file: File) => void;\n initialImage?: string;\n isCreation?: boolean;\n};\n\nconst ProfilePicture: React.FC<ProfilePictureProps> = ({\n onChange,\n initialImage,\n isCreation,\n}) => {\n const [editorImage, setEditorImage] = useState('');\n const [openEditor, setOpenEditor] = useState(false);\n const [zoom, setZoom] = useState<number>(1.2);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const editorRef = useRef<any>();\n const originalFile = useRef<File | null>();\n const { isAllowedToUpdate: isAllowedToUpdateProfilePicture } = useCanAccess(\n 'media/profile-picture'\n );\n const chooseImage = (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event!.target!.files![0];\n if (!file) return;\n setEditorImage(URL.createObjectURL(file || ''));\n originalFile.current = file;\n setOpenEditor(true);\n };\n\n const handleZoomChange = (\n event: React.ChangeEvent<unknown>,\n value: number | number[]\n ) => {\n setZoom(value as number);\n };\n\n const handleCancel = () => {\n setOpenEditor(false);\n setEditorImage('');\n };\n\n const handleConfirm = () => {\n const canvasScaled = editorRef.current.getImageScaledToCanvas();\n const croppedImg = canvasScaled.toDataURL();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n canvasScaled.toBlob((blob: any) => {\n onChange(blob);\n initialImage = '';\n setEditorImage(croppedImg);\n }, originalFile!.current!.type);\n setOpenEditor(false);\n };\n\n return (\n <>\n <StyledDialog open={openEditor}>\n <DialogContent>\n <StyledEditor\n ref={editorRef}\n image={editorImage}\n border={10}\n rotate={0}\n scale={zoom}\n />\n <div>\n <label>Zoom</label>\n <Slider\n style={{ color: 'white' }}\n min={1}\n max={10}\n step={0.1}\n value={zoom}\n onChange={handleZoomChange}\n />\n </div>\n <DialogActions>\n <StyledButton color=\"inherit\" onClick={handleCancel}>\n Cancelar\n </StyledButton>\n <StyledButton color=\"inherit\" onClick={handleConfirm}>\n Salvar\n </StyledButton>\n </DialogActions>\n </DialogContent>\n </StyledDialog>\n <Container>\n <img src={editorImage || initialImage || UserDefault} />\n {(isCreation || isAllowedToUpdateProfilePicture) && (\n <>\n <label htmlFor=\"choose-picture\">\n <Fab\n // eslint-disable-next-line\n // @ts-ignore: see https://github.com/mui-org/material-ui/issues/7877\n component=\"span\"\n size=\"small\"\n color=\"primary\"\n aria-label=\"add\"\n >\n {editorImage ? <EditRoundedIcon /> : <AddRoundedIcon />}\n </Fab>\n </label>\n <input\n id=\"choose-picture\"\n data-testid=\"picturePicker\"\n onChange={chooseImage}\n type=\"file\"\n hidden\n accept=\".png, .jpeg\"\n />\n </>\n )}\n </Container>\n </>\n );\n};\n\nexport default ProfilePicture;\n","import { CaregiverModel } from '@cuidador/database';\nimport { useCallback, useReducer } from 'react';\nimport axios from '../config/axios';\nimport { createReducer, Item, ReducerData } from '../utils/store/index';\n\nconst baseEndpoint = '/user';\nconst endpoint = `${baseEndpoint}/caregiver`;\n\nconst initialData: ReducerData<CaregiverModel> = {\n byId: {} as Record<string, Item<CaregiverModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useCaregiver = () => {\n const [state, dispatch] = useReducer(\n createReducer<CaregiverModel>(),\n initialData\n );\n\n const patch = useCallback(async (data: CaregiverModel) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.patch(`${endpoint}/me`, data);\n dispatch({ type: 'UPDATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n return {\n ...state,\n patch,\n };\n};\n\nexport default useCaregiver;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n color: ${({ theme }) => theme.palette.primary.dark};\n form {\n display: flex;\n flex: 1;\n flex-direction: column;\n }\n`;\n\nexport const FooterContainer = styled.div`\n display: flex;\n justify-content: center;\n flex: 1;\n align-items: flex-end;\n`;\n","import { CaregiverModel, UserModel } from '@cuidador/database';\nimport * as Yup from 'yup';\nimport { numberMask, phoneMask } from '../../../utils/inputs';\n\nexport interface FormValues {\n picture?: File;\n name: string;\n cpf: string;\n email: string;\n phoneNumber: string;\n}\n\nexport const userModelToFormData = (user: UserModel): FormValues => ({\n name: user?.name || '',\n cpf: user?.cpf || '',\n email: user?.email || '',\n phoneNumber: user?.phoneNumber ? phoneMask(user.phoneNumber) : '',\n});\n\nexport const formDataToCaregiverModel = (values: FormValues) =>\n ({\n user: {\n name: values.name,\n email: values.email,\n phoneNumber: numberMask(`55${values.phoneNumber}`),\n },\n } as CaregiverModel);\n\nexport const validationSchema = Yup.object().shape({\n name: Yup.string()\n .required('Por favor, insira o nome completo')\n .min(3, 'O nome deve conter ao menos 3 caracteres')\n .test(\n 'isFullName',\n 'Por favor, insira o nome completo',\n (value) => (value || '').split(' ').length > 1\n ),\n email: Yup.string()\n .required('Por favor, insira um email')\n .email('Por favor, insira um e-mail válido'),\n phoneNumber: Yup.string()\n .required('Por favor, insira um celular')\n .min(15, 'Por favor, insira um celular válido')\n .max(15, 'Por favor, insira um celular válido'),\n});\n","import { APIError } from '@cuidador/lib';\nimport { AxiosError } from 'axios';\nimport { Form, Formik, FormikProps } from 'formik';\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport { toast } from 'react-toastify';\nimport FormikTextField from '../../../components/Forms/FormikTextField';\nimport ProfilePicture from '../../../components/ProfilePicture';\nimport StyledButton from '../../../components/StyledButton';\nimport { AuthContext } from '../../../contexts/auth';\nimport useCanAccess from '../../../hooks/useCanAccess';\nimport useCaregiver from '../../../hooks/useCaregiver';\nimport useUser from '../../../hooks/useUser';\nimport { resolveErrorMessage } from '../../../utils/error';\nimport { cpfMask, phoneMask } from '../../../utils/inputs';\nimport { Backdrop, BackdropCircularProgress } from '../styles';\nimport { Container, FooterContainer } from './styles';\nimport {\n formDataToCaregiverModel,\n FormValues,\n userModelToFormData,\n validationSchema,\n} from './utils';\n\nconst Personal: React.FC = () => {\n const [imageUrl, setImageUrl] = useState('');\n const { userInfo, loading, refreshUserInfo } = useContext(AuthContext);\n const { patch } = useCaregiver();\n const { getProfilePicture, uploadProfilePicture } = useUser();\n const formikRef = useRef<FormikProps<FormValues> | null>();\n const { isAllowedToUpdate: isAllowedToUpdateCaregiver } = useCanAccess(\n 'user/caregiver'\n );\n const { isAllowedToUpdate: isAllowedToUpdateProfilePicture } = useCanAccess(\n 'media/profile-picture'\n );\n\n const handleGetProfilePicture = async (id: number) => {\n try {\n return await getProfilePicture(id).then(({ data }) => data?.signedUrl);\n } catch (err) {\n const displayMessage = resolveErrorMessage(err);\n if (displayMessage !== 'Arquivo não encontrado.') {\n toast.error(displayMessage);\n }\n }\n };\n\n useEffect(() => {\n async function fetchPatientProfilePicture() {\n const result = await handleGetProfilePicture(\n parseInt(`${userInfo!.user?.id}`)\n );\n if (result) {\n setImageUrl(result);\n }\n }\n\n fetchPatientProfilePicture();\n refreshUserInfo();\n }, []);\n\n const userData = userInfo?.user;\n const formInitialValue = userModelToFormData(userData!);\n\n const handleSubmit = (values: FormValues) => {\n return Promise.all([\n isAllowedToUpdateProfilePicture && values.picture\n ? uploadProfilePicture(values.picture, userInfo!.id!)\n : undefined,\n patch(formDataToCaregiverModel(values)),\n ])\n .then(() => {\n // reset picture field\n formikRef.current?.setFieldValue('picture', undefined);\n toast.success('Dados alterados com sucesso!');\n return refreshUserInfo();\n })\n .catch((err: AxiosError<APIError>) => {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n });\n };\n\n if (loading) {\n return (\n <Backdrop open={loading}>\n {loading && (\n <BackdropCircularProgress data-testid=\"table-backdrop-spinner\" />\n )}\n </Backdrop>\n );\n }\n\n return (\n <>\n <Container>\n <Formik\n innerRef={(ref) => (formikRef.current = ref)}\n validationSchema={validationSchema}\n initialValues={formInitialValue}\n onSubmit={handleSubmit}\n validateOnChange={false}\n >\n {(formik) => (\n <Form noValidate={true}>\n <ProfilePicture\n onChange={(file) => formik.setFieldValue('picture', file)}\n initialImage={imageUrl}\n />\n <FormikTextField\n color=\"primary\"\n name=\"name\"\n label=\"Nome completo\"\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'name' }}\n />\n <FormikTextField\n color=\"primary\"\n name=\"cpf\"\n label=\"CPF\"\n type=\"tel\" // numeric keyboard without parsing to number\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'cpf' }}\n value={cpfMask(formik.values.cpf)}\n disabled\n />\n <FormikTextField\n color=\"primary\"\n name=\"email\"\n type=\"email\"\n label=\"E-mail\"\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'email' }}\n />\n <FormikTextField\n color=\"primary\"\n name=\"phoneNumber\"\n label=\"Celular\"\n type=\"tel\" // numeric keyboard without parsing to number\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'phoneNumber' }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n formik.setFieldValue(\n 'phoneNumber',\n phoneMask(e.target.value)\n );\n }}\n />\n <FooterContainer>\n <StyledButton\n disabled={!isAllowedToUpdateCaregiver || formik.isSubmitting}\n type=\"submit\"\n size=\"large\"\n color=\"primary\"\n >\n Salvar\n </StyledButton>\n </FooterContainer>\n </Form>\n )}\n </Formik>\n </Container>\n </>\n );\n};\n\nexport default Personal;\n","import React from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { ButtonContainer, Container, StyledTabItem } from './styles';\n\nimport Header from '../../components/Headers/Header';\nimport { StyledFieldset } from '../../components/StyledFieldset';\nimport StyledTabs from '../../components/StyledTabs';\nimport useCanAccess from '../../hooks/useCanAccess';\nimport ChangePassword from './ChangePassword';\nimport Personal from './Personal';\n\nconst Account: React.FC<RouteComponentProps<{ tabId: string }>> = (props) => {\n const currentTab = props.match.params.tabId;\n\n const { isAllowedToUpdate } = useCanAccess('user/caregiver');\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n const handleChange = (_: React.ChangeEvent<{}>, newValue: string) => {\n props.history.replace(`/minha-conta/${newValue}`);\n };\n\n return (\n <>\n <Header leftButtonType=\"goBack\" title=\"Meus dados\" />\n <Container>\n <ButtonContainer>\n <StyledTabs value={currentTab} onChange={handleChange}>\n <StyledTabItem value=\"pessoais\" label=\"Pessoais\" />\n <StyledTabItem value=\"senha\" label=\"Senha\" />\n </StyledTabs>\n </ButtonContainer>\n <StyledFieldset disabled={!isAllowedToUpdate}>\n {currentTab === 'pessoais' && <Personal />}\n </StyledFieldset>\n {currentTab === 'senha' && <ChangePassword />}\n </Container>\n </>\n );\n};\n\nexport default Account;\n","import { useCallback, useReducer } from 'react';\nimport axios from '../../config/axios';\nimport { createOfflinePostCaregiver } from './postCaregiverMoodOffline';\nimport { CaregiverMoodModel } from '@cuidador/database';\nimport { createReducer, ReducerData, Item } from '../../utils/store/index';\n\nconst endpoint = '/care/caregiver/mood';\n\nconst initialData: ReducerData<CaregiverMoodModel> = {\n byId: {} as Record<string, Item<CaregiverMoodModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useCaregiverMood = () => {\n const [state, dispatch] = useReducer(\n createReducer<CaregiverMoodModel>(),\n initialData\n );\n const post = useCallback(async (data: CaregiverMoodModel) => {\n try {\n dispatch({ type: 'LOADING' });\n const offlinePost = createOfflinePostCaregiver(axios);\n const response = await offlinePost(`${endpoint}`, data);\n dispatch({ type: 'CREATE', payload: response.data });\n return Promise.resolve(response);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n return {\n ...state,\n post,\n };\n};\n\nexport default useCaregiverMood;\n","import { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport const createOfflinePostCaregiver = (axios: AxiosInstance) =>\n createOfflineProxy(axios, 'post', async () => {\n return {\n data: {},\n statusCode: 200,\n };\n });\n","import {\n Backdrop as MaterialBackdrop,\n CircularProgress as MaterialCircularProgress,\n} from '@material-ui/core';\nimport styled from 'styled-components';\nimport Button from '../../../components/StyledButton';\n\ninterface MoodImageProps {\n selected?: boolean;\n}\n\nexport const OutterContainer = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: linear-gradient(\n 180deg,\n ${(props) => props.theme.palette.primary.main} 0%,\n ${(props) => props.theme.palette.secondary.main} 100%\n );\n z-index: 10;\n`;\n\nexport const HorizontalLine = styled.hr`\n width: 100%;\n margin: 0;\n border-width: 0.1px;\n opacity: 0.7;\n`;\n\nexport const TitleContainer = styled.div`\n max-width: 100%;\n font-size: ${({ theme }) => theme.typography.h6.fontSize};\n margin-top: ${({ theme }) => theme.spacing(6)}px;\n color: white;\n`;\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 80%;\n color: white;\n padding: 0px ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const MoodIconsLine = styled.div`\n display: flex;\n width: 100%;\n justify-content: space-around;\n align-items: center;\n`;\n\nexport const MoodIconContainer = styled.img<MoodImageProps>`\n width: 75px;\n height: 75px;\n border-radius: 50%;\n border: none;\n margin: ${({ theme }) => theme.spacing(3)}px 0;\n cursor: pointer;\n transition: 0.2s;\n box-shadow: ${(props) =>\n props.selected ? '0px 0px 2px 8px rgba(255, 255, 255, 0.22)' : ''};\n`;\n\nexport const NextButton = styled(Button)`\n color: white;\n border-color: white;\n font-size: ${({ theme }) => theme.typography.body1.fontSize};\n margin-top: ${({ theme }) => theme.spacing(3)}px;\n`;\n\nexport const Backdrop = styled(MaterialBackdrop)`\n z-index: ${({ theme }) => theme.zIndex.drawer + 1};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n position: absolute;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n","export default __webpack_public_path__ + \"static/media/happy-icon.fbe8f524.svg\";","export default __webpack_public_path__ + \"static/media/little-happy-icon.08f22fdf.svg\";","export default __webpack_public_path__ + \"static/media/sad-icon.d733fb26.svg\";","export default __webpack_public_path__ + \"static/media/very-happy-icon.0cb1e322.svg\";","export default __webpack_public_path__ + \"static/media/very-sad-icon.e34abd1b.svg\";","import {\n Backdrop as MaterialBackdrop,\n CircularProgress as MaterialCircularProgress,\n} from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Backdrop = styled(MaterialBackdrop)`\n z-index: ${({ theme }) => theme.zIndex.drawer + 1};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n position: absolute;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n","import { CaregiverMoodModel, ShiftModel } from '@cuidador/database';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Redirect, useHistory, useLocation } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport { AuthContext } from '../../../contexts/auth';\nimport useCaregiverMood from '../../../hooks/useCaregiverMood';\n\nimport Header from '../../../components/Headers/Header';\nimport {\n Backdrop,\n BackdropCircularProgress,\n Container,\n HorizontalLine,\n MoodIconContainer,\n MoodIconsLine,\n NextButton,\n OutterContainer,\n TitleContainer,\n} from './styles';\n\nimport HappyMoodIcon from '../../../assets/caregiver-mood-icons/happy-icon.svg';\nimport LittleHappyMoodIcon from '../../../assets/caregiver-mood-icons/little-happy-icon.svg';\nimport SadMoodIcon from '../../../assets/caregiver-mood-icons/sad-icon.svg';\nimport VeryHappyMoodIcon from '../../../assets/caregiver-mood-icons/very-happy-icon.svg';\nimport VerySadMoodIcon from '../../../assets/caregiver-mood-icons/very-sad-icon.svg';\nimport LoadingBackdrop from '../../../components/LoadingBackdrop';\nimport { ShiftInProgressContext } from '../../../contexts/ShiftInProgress';\nimport useCanAccess from '../../../hooks/useCanAccess';\n\nenum MoodEnum {\n VERY_HAPPY = 5,\n HAPPY = 4,\n LITTLE_HAPPY = 3,\n SAD = 2,\n VERY_SAD = 1,\n}\n\ntype RouteState = {\n shiftExecutionId: number;\n shiftInProgress: ShiftModel;\n};\n\nconst ShiftEnd: React.FC = () => {\n const history = useHistory();\n const { state: { shiftExecutionId, shiftInProgress } = {} } = useLocation<RouteState>();\n const { userInfo } = useContext(AuthContext);\n const {\n refreshShiftInProgress,\n loading: loadingShiftInProgress,\n } = useContext(ShiftInProgressContext);\n const [mood, setMood] = useState(0);\n const { post, loading } = useCaregiverMood();\n const { isAllowedToCreate: isAllowedToCreateCaregiverMood } = useCanAccess(\n 'care/caregiver/mood'\n );\n const { signOut } = useContext(AuthContext);\n\n const handleCaregiverMoodClick = () => {\n const data: CaregiverMoodModel = {\n moodLevel: mood,\n shiftExecutionId,\n shiftPeriod: 'shiftEnd',\n caregiverId: userInfo?.id,\n };\n post(data)\n .then(() => {\n if(shiftInProgress?.shiftSchedule?.logoutUserOnFinishShift && signOut) {\n signOut();\n }\n history.replace(`/`)\n })\n .catch(() =>\n toast.error('Erro ao salvar disposição, tente novamente daqui a pouco')\n );\n };\n\n useEffect(() => {\n refreshShiftInProgress();\n }, []);\n\n if (!isAllowedToCreateCaregiverMood) {\n // If is not allowed to create mood, skip this step\n return <Redirect to={'/pessoas-sob-cuidado'} />;\n }\n\n if (loadingShiftInProgress) {\n return <LoadingBackdrop loading={loadingShiftInProgress} />;\n }\n\n return (\n <>\n <OutterContainer>\n <Header leftButtonType=\"goBack\" title=\"Cuidar do cuidador\" />\n <HorizontalLine />\n <TitleContainer>Como você está se sentindo?</TitleContainer>\n\n <Container>\n <MoodIconsLine>\n <MoodIconContainer\n alt=\"Muito feliz\"\n src={VeryHappyMoodIcon}\n onClick={() => setMood(MoodEnum.VERY_HAPPY)}\n selected={mood === MoodEnum.VERY_HAPPY}\n />\n <MoodIconContainer\n alt=\"Feliz\"\n src={HappyMoodIcon}\n onClick={() => setMood(MoodEnum.HAPPY)}\n selected={mood === MoodEnum.HAPPY}\n />\n </MoodIconsLine>\n\n <MoodIconsLine>\n <MoodIconContainer\n alt=\"Pouco feliz\"\n src={LittleHappyMoodIcon}\n onClick={() => setMood(MoodEnum.LITTLE_HAPPY)}\n selected={mood === MoodEnum.LITTLE_HAPPY}\n />\n </MoodIconsLine>\n\n <MoodIconsLine>\n <MoodIconContainer\n alt=\"Triste\"\n src={SadMoodIcon}\n onClick={() => setMood(MoodEnum.SAD)}\n selected={mood === MoodEnum.SAD}\n />\n <MoodIconContainer\n alt=\"Muito triste\"\n src={VerySadMoodIcon}\n onClick={() => setMood(MoodEnum.VERY_SAD)}\n selected={mood === MoodEnum.VERY_SAD}\n />\n </MoodIconsLine>\n\n <NextButton onClick={handleCaregiverMoodClick} disabled={mood === 0}>\n Próximo\n </NextButton>\n </Container>\n </OutterContainer>\n <Backdrop open={loading}>\n {loading && (\n <BackdropCircularProgress data-testid=\"table-backdrop-spinner\" />\n )}\n </Backdrop>\n </>\n );\n};\n\nexport default ShiftEnd;\n","import React from 'react';\nimport { Backdrop, BackdropCircularProgress } from './styles';\n\nconst LoadingBackdrop: React.FC<{ loading: boolean }> = ({ loading }) => {\n return (\n <Backdrop open={loading}>\n {loading && (\n <BackdropCircularProgress data-testid=\"loading-backdrop-spinner\" />\n )}\n </Backdrop>\n );\n};\n\nexport default LoadingBackdrop;\n","import {\n Backdrop as MaterialBackdrop,\n CircularProgress as MaterialCircularProgress,\n} from '@material-ui/core';\nimport styled from 'styled-components';\nimport Button from '../../../components/StyledButton';\n\ninterface MoodImageProps {\n selected?: boolean;\n}\n\nexport const OutterContainer = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: linear-gradient(\n 180deg,\n ${(props) => props.theme.palette.primary.main} 0%,\n ${(props) => props.theme.palette.secondary.main} 100%\n );\n z-index: 10;\n`;\n\nexport const HorizontalLine = styled.hr`\n width: 100%;\n margin: 0;\n border-width: 0.1px;\n opacity: 0.7;\n`;\n\nexport const TitleContainer = styled.div`\n max-width: 100%;\n font-size: ${({ theme }) => theme.typography.h6.fontSize};\n margin-top: ${({ theme }) => theme.spacing(6)}px;\n color: white;\n`;\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 80%;\n color: white;\n padding: 0px ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const MoodIconsLine = styled.div`\n display: flex;\n width: 100%;\n justify-content: space-around;\n align-items: center;\n`;\n\nexport const MoodIconContainer = styled.img<MoodImageProps>`\n width: 75px;\n height: 75px;\n border-radius: 50%;\n border: none;\n margin: ${({ theme }) => theme.spacing(3)}px 0;\n cursor: pointer;\n transition: 0.2s;\n box-shadow: ${(props) =>\n props.selected ? '0px 0px 2px 8px rgba(255, 255, 255, 0.22)' : ''};\n`;\n\nexport const NextButton = styled(Button)`\n color: white;\n border-color: white;\n font-size: ${({ theme }) => theme.typography.body1.fontSize};\n margin-top: ${({ theme }) => theme.spacing(3)}px;\n`;\n\nexport const Backdrop = styled(MaterialBackdrop)`\n z-index: ${({ theme }) => theme.zIndex.drawer + 1};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n position: absolute;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n","import { CaregiverMoodModel } from '@cuidador/database';\nimport React, { useContext, useState } from 'react';\nimport { Redirect, useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport { AuthContext } from '../../../contexts/auth';\nimport useCaregiverMood from '../../../hooks/useCaregiverMood';\n\nimport Header from '../../../components/Headers/Header';\nimport {\n Backdrop,\n BackdropCircularProgress,\n Container,\n HorizontalLine,\n MoodIconContainer,\n MoodIconsLine,\n NextButton,\n OutterContainer,\n TitleContainer,\n} from './styles';\n\nimport HappyMoodIcon from '../../../assets/caregiver-mood-icons/happy-icon.svg';\nimport LittleHappyMoodIcon from '../../../assets/caregiver-mood-icons/little-happy-icon.svg';\nimport SadMoodIcon from '../../../assets/caregiver-mood-icons/sad-icon.svg';\nimport VeryHappyMoodIcon from '../../../assets/caregiver-mood-icons/very-happy-icon.svg';\nimport VerySadMoodIcon from '../../../assets/caregiver-mood-icons/very-sad-icon.svg';\nimport LoadingBackdrop from '../../../components/LoadingBackdrop';\nimport { ShiftInProgressContext } from '../../../contexts/ShiftInProgress';\nimport useCanAccess from '../../../hooks/useCanAccess';\n\nenum MoodEnum {\n VERY_HAPPY = 5,\n HAPPY = 4,\n LITTLE_HAPPY = 3,\n SAD = 2,\n VERY_SAD = 1,\n}\n\nconst ShiftStart: React.FC = () => {\n const history = useHistory();\n const { userInfo } = useContext(AuthContext);\n const { loading: loadingShiftInProgress, executionInProgress } = useContext(\n ShiftInProgressContext\n );\n const [mood, setMood] = useState(0);\n const { post, loading } = useCaregiverMood();\n const { isAllowedToCreate: isAllowedToCreateCaregiverMood } = useCanAccess(\n 'care/caregiver/mood'\n );\n\n const handleCaregiverMoodClick = () => {\n const data: CaregiverMoodModel = {\n moodLevel: mood,\n shiftExecutionId: Number(executionInProgress?.id),\n shiftPeriod: 'shiftStart',\n caregiverId: userInfo?.id,\n };\n post(data)\n .then(() => history.push(`/plantao/mensagem-de-motivacao`))\n .catch(() =>\n toast.error('Erro ao salvar disposição, tente novamente daqui a pouco')\n );\n };\n\n if (!isAllowedToCreateCaregiverMood) {\n // If is not allowed to create mood, skip this step\n return <Redirect to={'/plantao/mensagem-de-motivacao'} />;\n }\n\n if (loadingShiftInProgress) {\n return <LoadingBackdrop loading={loadingShiftInProgress} />;\n }\n\n return (\n <>\n <OutterContainer>\n <Header leftButtonType=\"goBack\" title=\"Cuidar do cuidador\" />\n <HorizontalLine />\n <TitleContainer>Como você está se sentindo?</TitleContainer>\n\n <Container>\n <MoodIconsLine>\n <MoodIconContainer\n alt=\"Muito feliz\"\n src={VeryHappyMoodIcon}\n onClick={() => setMood(MoodEnum.VERY_HAPPY)}\n selected={mood === MoodEnum.VERY_HAPPY}\n />\n <MoodIconContainer\n alt=\"Feliz\"\n src={HappyMoodIcon}\n onClick={() => setMood(MoodEnum.HAPPY)}\n selected={mood === MoodEnum.HAPPY}\n />\n </MoodIconsLine>\n\n <MoodIconsLine>\n <MoodIconContainer\n alt=\"Pouco feliz\"\n src={LittleHappyMoodIcon}\n onClick={() => setMood(MoodEnum.LITTLE_HAPPY)}\n selected={mood === MoodEnum.LITTLE_HAPPY}\n />\n </MoodIconsLine>\n\n <MoodIconsLine>\n <MoodIconContainer\n alt=\"Triste\"\n src={SadMoodIcon}\n onClick={() => setMood(MoodEnum.SAD)}\n selected={mood === MoodEnum.SAD}\n />\n <MoodIconContainer\n alt=\"Muito triste\"\n src={VerySadMoodIcon}\n onClick={() => setMood(MoodEnum.VERY_SAD)}\n selected={mood === MoodEnum.VERY_SAD}\n />\n </MoodIconsLine>\n\n <NextButton onClick={handleCaregiverMoodClick} disabled={mood === 0}>\n Próximo\n </NextButton>\n </Container>\n </OutterContainer>\n <Backdrop open={loading}>\n {loading && (\n <BackdropCircularProgress data-testid=\"table-backdrop-spinner\" />\n )}\n </Backdrop>\n </>\n );\n};\n\nexport default ShiftStart;\n","import { FormControl } from '@material-ui/core';\nimport styled from 'styled-components';\n\nimport { colorMapping, ColorsType } from '../../styles/colorMapping';\n\nexport const StyledFormControl = styled(FormControl).attrs(({ variant }) => ({\n variant: variant || 'outlined',\n}))<{\n $color: ColorsType;\n}>`\n & .MuiInputBase-root {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & label:not(.Mui-error) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & label.Mui-disabled {\n color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n & input:not(.Mui-disabled) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & textarea:not(.Mui-disabled) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n &\n .MuiInputAdornment-root:not(.Mui-disabled)\n .MuiIconButton-label:not(.Mui-disabled) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & .MuiOutlinedInput-root:not(.Mui-error, .Mui-disabled) {\n & fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n &:hover fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n &.Mui-focused fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n }\n & .MuiOutlinedInput-root.Mui-disabled {\n color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n cursor: default;\n\n & input:disabled {\n color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n\n & fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n }\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n","import { FormHelperText, InputLabel, Select } from '@material-ui/core';\nimport { Field, FieldAttributes, useFormikContext } from 'formik';\nimport React from 'react';\nimport { ColorsType } from '../../styles/colorMapping';\nimport { StyledFormControl } from './styles';\n\ninterface MySelectDisplayProps extends React.HTMLAttributes<HTMLDivElement> {\n 'data-testid'?: string;\n}\n\nconst FormikSelect = ({\n name,\n required = false,\n formControlVariant,\n ...props\n}: FieldAttributes<any> & // eslint-disable-line @typescript-eslint/no-explicit-any\n SelectProps & {\n name: string;\n required?: boolean;\n SelectDisplayProps?: MySelectDisplayProps;\n formControlVariant?: 'standard' | 'outlined' | 'filled';\n }) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { errors, touched } = useFormikContext<any>();\n\n const hasError = touched[name] && errors[name];\n\n return (\n <Field\n type=\"select\"\n id={name}\n required={required}\n as={StyledSelectField}\n name={name}\n error={hasError}\n formControlVariant={formControlVariant}\n {...props}\n />\n );\n};\n\nexport default FormikSelect;\n\ninterface SelectDisplayProps extends React.HTMLAttributes<HTMLDivElement> {\n 'data-testid'?: string;\n}\n\nexport interface SelectProps {\n name?: string;\n label: string;\n value?: string;\n id: string;\n error?: boolean;\n disabled?: boolean;\n color?: ColorsType;\n formControlVariant?: 'standard' | 'outlined' | 'filled';\n onChange?: (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => void;\n SelectDisplayProps?: SelectDisplayProps;\n}\n\nconst StyledSelectField: React.FC<SelectProps> = ({\n id,\n label,\n children,\n error,\n disabled,\n color = 'primary',\n formControlVariant = 'outlined',\n ...props\n}) => {\n return (\n <StyledFormControl\n $color={color}\n fullWidth\n error={Boolean(error)}\n disabled={disabled}\n variant={formControlVariant}\n >\n <InputLabel id={id}>{label}</InputLabel>\n <Select\n variant=\"outlined\"\n label={label}\n labelId={id}\n disabled={disabled}\n {...props}\n >\n {children}\n </Select>\n {error && <FormHelperText>{error}</FormHelperText>}\n </StyledFormControl>\n );\n};\n","import TextField from '@material-ui/core/TextField';\nimport styled from 'styled-components';\n\nconst StyledTextFieldWhite = styled(TextField).attrs({\n variant: 'outlined',\n})`\n & label:not(.Mui-error) {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & input {\n color: ${({ theme }) => theme.palette.common.white};\n ::-webkit-calendar-picker-indicator {\n filter: invert(1);\n }\n }\n & textarea {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & .MuiInputAdornment-root .MuiIconButton-label {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & .MuiOutlinedInput-root:not(.Mui-error) {\n & fieldset {\n border-color: ${({ theme }) => theme.palette.common.white};\n color: ${({ theme }) => theme.palette.common.white};\n }\n &:hover fieldset {\n border-color: ${({ theme }) => theme.palette.common.white};\n color: ${({ theme }) => theme.palette.common.white};\n }\n &.Mui-focused fieldset {\n border-color: ${({ theme }) => theme.palette.common.white};\n color: ${({ theme }) => theme.palette.common.white};\n }\n }\n`;\n\nexport default StyledTextFieldWhite;\n","import { IconButton, InputAdornment } from '@material-ui/core';\nimport { Visibility, VisibilityOff } from '@material-ui/icons';\nimport React, { useState } from 'react';\nimport StyledTextFieldWhite from '../StyledTextFieldWhite';\n\nconst PasswordTextField: React.FC = (props) => {\n const [showPassword, setShowPassword] = useState(false);\n return (\n <StyledTextFieldWhite\n type={showPassword ? 'text' : 'password'}\n {...props}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={() => setShowPassword(!showPassword)}\n >\n {showPassword ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n );\n};\n\nexport default PasswordTextField;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\nimport {\n default as FormikSelect,\n default as StyledSelect,\n} from './Forms/FormikSelect';\nimport FormikTextField from './Forms/FormikTextField';\nimport PasswordTextField from './PasswordField';\n\nexport const FormCardContainer = styled.div`\n width: 80%;\n min-height: ${({ theme }) => theme.spacing(10)}px;\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n padding: ${({ theme }) => theme.spacing(2)}px;\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n flex-direction: column;\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const StyledBoldTitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.common.black};\n font-weight: bold;\n`;\n\nexport const NewStyledSelect = styled(StyledSelect)`\n background-color: ${({ theme }) => theme.palette.common.white};\n border-radius: ${({ theme }) => theme.spacing(0.7)}px;\n`;\n\ninterface TextFieldInterface {\n disabled?: boolean;\n}\n\nexport const StyledFormikTextField = styled(\n FormikTextField\n)<TextFieldInterface>`\n .MuiOutlinedInput-root {\n border-radius: ${({ theme }) => theme.spacing(0.7)}px;\n background-color: ${({ theme }) => theme.palette.common.white};\n }\n`;\n\nexport const StyledFormikTextPassword = styled(PasswordTextField)`\n .MuiOutlinedInput-root {\n border-radius: ${({ theme }) => theme.spacing(0.7)}px;\n background-color: ${({ theme }) => theme.palette.common.white};\n }\n\n & label:not(.Mui-error) {\n color: ${({ theme }) => theme.palette.primary.main};\n }\n & input {\n color: ${({ theme }) => theme.palette.primary.main};\n ::-webkit-calendar-picker-indicator {\n filter: invert(1);\n }\n }\n & textarea {\n color: ${({ theme }) => theme.palette.primary.main};\n }\n & .MuiInputAdornment-root .MuiIconButton-label {\n color: ${({ theme }) => theme.palette.primary.main};\n }\n & .MuiOutlinedInput-root:not(.Mui-error) {\n & fieldset {\n border-color: ${({ theme }) => theme.palette.primary.main};\n color: ${({ theme }) => theme.palette.primary.main};\n }\n &:hover fieldset {\n border-color: ${({ theme }) => theme.palette.primary.main};\n color: ${({ theme }) => theme.palette.primary.main};\n }\n &.Mui-focused fieldset {\n border-color: ${({ theme }) => theme.palette.primary.main};\n color: ${({ theme }) => theme.palette.primary.main};\n }\n }\n`;\n\nexport const StyledFormikSelect = styled(FormikSelect)`\n border-radius: ${({ theme }) => theme.spacing(0.7)}px;\n background-color: ${({ theme }) => theme.palette.common.white};\n width: 100%;\n`;\n\nexport const HelperContainer = styled.span`\n display: flex;\n flex-direction: column;\n`;\n\nexport const HelperText = styled.span`\n color: ${({ theme }) => theme.palette.common.black};\n`;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"image\", {\n id: \"Ret\\\\xE2ngulo_1\",\n \"data-name\": \"Ret\\\\xE2ngulo 1\",\n width: 85,\n height: 90,\n xlinkHref: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N15nBxnfSbw533f6mtOHaN7dIxb9oyxPT4w2FxGXErAGOMs4cgSQyAhsAlJCIGw2SQbFhIS2HCEQBKIk9gbUDhCIOIUhxVsEsxhG/lQy/a4Laul0TWas6ePqnrf/WNGtiRrZnq6q/rtqn6+n48RkqarHkk9/f7qPYUxBkQUP7v37F0BYAjARgAb5v/beM6PvQCOARgFcOScH0////tv2LnDa3Z+IgqXYAFAFB+79+zdDOBGAK8E8HwATgCXHQfwNQBfBvDNG3buKAZwTSKyjAUAUcTt3rP3Usw1+K8E8PSQb1cG8B3MFQO7b9i543jI9yOikLAAIIqg3Xv2pgD8JoC3AchaiqEB/ADAn96wc8e3LGUgojqxACCKkN179koArwfwPgBbLMc503cBvPuGnTvuth2EiGrDAoAoInbv2fvzAP4CwLDtLAswAHYB+MMbdu7I2w5DRItjAUDU4nbv2Xs1gA8CeIHtLDWqAvgkgPffsHPHmO0wRHR+LACIWtTuPXsdAB/G3Fi/sBynHpMAbr5h545/tx2EiJ5K2g5ARE+1e8/elQC+AeDtiGbjD8ztMfBvu/fsfY/tIET0VOwBIGoxu/fsHQSwG8CFtrME6LMA3nzDzh1l20GIaA4LAKIWsnvP3p0APgdghe0sIfgRgJtu2LnjiO0gRMQhAKKWsXvP3t8C8HXEs/EHgGcC+PH8pEYisowFAFEL2L1n74cAfAyAsp0lZBsB3LF7z94X2w5C1O44BEBk2e49e38NwKds52iycQDX3LBzx8O2gxC1KxYARBbt3rP3+QC+DSBhO4sFOQDX3rBzx6TtIETtiEMARJbs3rN3AMAX0Z6NPzB3VPGu+e2NiajJ+I1HZMHuPXu7MbfUr892FsteirldDomoyVgAEDXZ/BPvZwFcYjtLi3jn7j1732g7BFG7YQFA1HzvBfBy2yFazN/u3rP36bZDELUTFgBETbR7z95tAN5tO0cLSgH4iO0QRO2EBQBRc70fQNJ2iBb1vN179r7CdgiidsFlgERNsnvP3isA3I3oHu7TDPsBXHbDzh2+7SBEccceAKLm+Quw8V/KxQDebDsEUTtgDwBRE8xvfftt2zkiYhTAhTfs3FG0HYQoztgDQBSy3Xv2Csw9/VNtNgD4XdshiOKOBQBR+F4N4CrbISLmXbv37G33TZKIQsUCgCh8N9sOEEHdAG6yHYIozlgAEIVo9569XQBeZDtHRN1oOwBRnLEAIArXz2Fukxtavhft3rO303YIorhiAUAULj7F1i+NuQKKiELAAoAoJLv37FUArredI+JYQBGFhAUAUXieB2CV7RARd/18IUVEAWMBQBQePr02bjWA59oOQRRHLACIwsPu/2Dw75EoBI7tAERxtHvPXgngAts5ziWlRMJxoBwFpRxIKeD7Pnxfw/M8uK5rO+L5XGg7AFEcsQAgCsc6AE0Zu04kHKTTaSQTCUgpIaWEkAJSCAACYv74oVrP/RDiyfOKjAEMDIw20FpDGw3f16hWqiiVy9Bah/AneoqNzbgJUbthAUAUjsAbrVQqhXQ6hWQiAeXMPb0LLNWwGyz3vK9zryeAuYJCKgAKSACZdAq9vd0QQsAYwNcanuuiUq2iXC7D8wI9zZcFAFEIWAAQhWNTvS9USs090SeTSKeSkFLCmPM8aRsD22d5ni4WlBRQqSRSqSR6urue6EXw9dzQQqVSRbE4W2+Pwfrde/bKG3buaEp3A1G7YAFAFI6an1qVUshkMujoyCCTySCZTD7la4wx8H0f2vfmfmxO13vdThcGUggkEwkkEwl0d3UCQsD3fJTKZczMFGv9czgA1gI4GmJkorbDAoAoHAsWAEqpJxr7hRr8cwkh4DgO4Mx9yxpjoLU/XxTM/RgJxkApia7ODnR1diynINgIFgBEgWIBQBSOJ4YA5hr8jvkGP11Tg78UIQSUcqDUk9/CvufB8z34nlfzhD/rFikIpqdnzvxzbAJwt8WkRLHDAoAoBEqpLZ2dHejq6kZHR+asmfWh3dNxoBwHSGFuad98QWBafLjgLGcUBN1dnfC1wezsLGZmiltsRyOKGxGZJwWiFpfLFzoAvBzAa40xNwohWmKjLa01PM+F73ktP3dgIUIII5W6Twr5NxD41PBgNpp/EKIWwgKAqAG5fCEJ4OcBvBbAKwC09PG1Zn5Wvuu50eoZOIMQwpNK3S2F/NjwUPaztvMQRRULAKJlyuULEsCLALwOwE0AVthNVB/fn9v5z/c821HqJqR0lZQ/FEL++fBQ9uu28xBFCQsAohrl8oVOAG8E8DsAtttNExxjDDzXhetWozN58DykUmNKyo9CiD/jEAHR0lgAEC0hly9sAvB2AG8BsNJynFD588MDUe4VkFJWpFKfE0L89vBgdsJ2HqJWxQKAaAG5fOEqAL8L4NUAEpbjNJUxGq7rwnPdyPYKCCG0UuoOIeX/GB7MPmg7D1GrYQFAdIb58f0bALwDwPMtx7HOGAPXrUa6EAAApZyHpJS/PzyU/bLtLEStggUAEYBcvpAB8CbEbHw/KDGbJ/Dh4aHtf2Y7C5FtLACorc0/8b8BwPvQwAE+7SI2hYBUk0qpdwwPZf/RdhYiW1gAUNvK5Qs7AXwIwLDtLFETl0JAKfW4VOqXhwez37edhajZWABQ28nlC8OYa/h32s4SfQbVahVutWo7SEOU4/xUSvmLw4PZvO0sRM3CAoDaxvxyvvcDuBlAS2zTGxdGa1SqlUgvHxRCGKWcrwopXj88mJ2ynYcobCwAKPZy+UI3gN/H3JK+jOU4seb7HqqVSmTPHADmthpWjvM3Qojf4YZCFGcsACi2cvmCAPDrAN4LYK3lOG3FrVZRrVYBRPfzRUpZVMp55/BQ9u9sZyEKAwsAiqVcvjAA4J8AXGc5StsyRqNaqcCL8LAAACjH+YmU8iXcVZDihuOgFDu5fOGtAPaBjb9VQkik0hmkMxlIGd2PGt/zrvY879i+3Miv2M5CFCT2AFBs5PKFzQBuAfAS21nobMYYVKsVeK5rO0pDHMf5gZDy54cHszO2sxA1KrplOdEZcvnCGwHcBzb+LUkIgVQqjVQ6AyGE7Th18zzvOb7nndiXG/lF21mIGsUeAIq0XL6wHsCnMLd/P0WAMQaVcgm+79uO0hDHcb4rpHz58GC2bDsLUT1YAFBk5fKF1wL4BIBVtrPQ8rluFdVKxXaMhsyvFHjd8FB2t+0sRMvFAoAiJ5cvdAL4ewCvtZ2FGqO1RqVcivS+AQDgOInPXX7xdr4fKVJYAFCkzC/v+zK4f3+sVCtluBGfIKiUc0AqeTUnCFJUcBIgRUYuX3gBgB+DjX/sJFNppFJp2zEa4vveoO95h/cdGLnUdhaiWrAAoEjI5QtvB7AHwGrbWSgcTiKBdKYj0qsEtNY9nuveuy838nrbWYiWwiEAamm5fCEF4JMA3mQ7CzVHbOYFJBJ/ffnQ9rfbzkG0EBYA1LJy+cIGAF8CcK3tLNRcc0sFy/D9aG8j7DjOD4WUzxsezEb7D0KxxAKAWlIuX3gmgH8DsNF2FrKnWqnAdau2YzREKnVCKfX04cHsIdtZiM7EOQDUcnL5wi8D+D7Y+Le9ZCoV+cmB2vfXeJ73yL4DI9ylkloKCwBqKbl84TcA3AogZTsLtYbTkwOB6E4ONFonPdf95r7cCHespJbBAoBaxvxM/79GlD/pKRRKKaQz0T5HwBgjPc/98r7cyCttZyECWABQi8jlC78D4K9s56DWpZSK/GFC80XAv/IwIWoFLADIuly+8E4AH7Gdg1qfUgrpeBQBn9uXG3md7SzU3lgAkFW5fOHdAP6v7RwUHTIewwHC89zP7MuN/LLtLNS+WACQNbl84T0A/sJ2DooeKWNTBNy6LzfyK7azUHtiAUBW5PKF/wXgA7ZzUHTNFQHR3jp4vgi4ZV9u5NdsZ6H2wwKAmi6XL/wxgPfbzkHRJ6WMSxHwd/tyI2+1nYXaC3cCpKbK5QtvBfA3tnNQvPi+j3Jp1naMhgghjOMkXj48lP267SzUHlgAUNPk8oUXA/gGAMd2Foofz3VRqZRtx2iIENJ1Es4lw4PZh21nofhjAUBNkcsXBgH8EMAK21kovqrVCtxqxM8OkGpSOWrj8GA22l0a1PI4B4BCl8sXVgH4Ktj4U8iSyRQcJ9odTFr7vdrX99jOQfHHAoBClcsXEgD+FcB221moPaTSGUilbMdoiO97F/1s/yO7beegeGMBQGH7JIAdtkNQe0mnMxAy2h9vnue+fF/uEa6WodBwDgCFJpcv/C6Av7Sdg9qT1hrl0iwi/RknhEk4idcMD2W/YDsKxQ8LAApFLl94OYCvgL1MZJHveyiXSrZjNEQI4TuJxBXDg9n7bWeheGEBQIHL5QuXAvgvAF22sxBVKxW4btRXBsgZ5TgbhgezM7azUHzw6YwClcsXkgA+Czb+1CKSqRRkxOcDaK27jNbftp2D4iXa3xXUit4L4DLbIYjOlEpnbEdomOd51+7Ljfy67RwUHxwCoMDk8oVnAbgDQLTXYFEsua6Lajx2Ctw4PJg9aTsLRR97ACgQuXyhA8CtYONPLSqRSEBFfJMgY3RCa3277RwUDywAKCgfBHCh7RBEi0ml0pE+ORAAfM+7dF/ukd+3nYOij0MA1LD5Q372AIj2Jyu1hRgtDRwYHswesp2Foos9ANSQXL7QC+AfwMafIkIpB4lEwnaMhhhjlPb9vbZzULSxAKBG/RWAzbZDEC1HIpmK/lCA71/ws9wjf247B0UXhwCobrl84ZUA/s12DqJ6eK6LSuRXBQjtJBKXDA9mc7azUPSwB4DqMj/r/xO2cxDVy0kkIGW0F60YY6T29Vdt56BoYgFA9XoHgI22QxA1IpVK2Y7QMN/3svtyI6+ynYOihwUALVsuX1gD4N22cxA1SioFJ+ITAgHA1/7f2M5A0cMCgOrxRwB6bIcgCkIyBhMCte/37cuNvNN2DooWTgKkZcnlC1kA+wFE/7GJaJ7rVlGtVGzHaIiUclY5TvfwYFbbzkLRwB4AWq4/BRt/iplEIhmHEwM7jDEftZ2DooM9AFSzXL7wDAB3gZv+UAz5nodyOeo7BErXSTirhgezM7azUOuLdslLzfZBsPGPlV45bTtCy1COE/leAGN0wmhzm+0cFA3RfrdT0+TyhZcB2GE7BwUnJarokxO2Y7SURCJpO0LDfN+7cd+BkU22c1DrYwFAS8rlCxLAX9jOQcFaJSeREB66ZdF2lJbhJBKRXxFgjJFG6y/YzkGtjwUA1eJGAJfaDkHBSQgPPfMN/yo5aTlNa0kko98L4Pn+tfsOjGywnYNaGwsAqsXbbAegYK2UkxCYmwCcERV0iGjviR+khBP9XgAYI4w2H7Edg1obCwBaVC5fuBDAi23noOAkhIcV50z+61PjltK0ICFisTug1v6NtjNQa2MBQEt5KzjzP1bWq5OQOHv5b4coY6WcspSo9cxNBoz2215rnd6XG/kN2zmodbEAoAXl8oU0gDfazkHBWSGn0SnOv9Z9jTqFhPCanKg1CSGQiEcvwLtsZ6DWxQKAFvMaAKtsh6BgJISHterUgr8vYbBBnWhiotYWh2EA3/e37jsw8jTbOag1sQCgxfwP2wEoOHNd/4tvE98hyljBoQAAgJQSUirbMRpmtOZkQDovFgB0Xrl84SoAz7Sdg4KxWNf/udaqcSSFG3KiaHASju0IDfN9/4X7DoxE/w9CgWMBQAvh0r+Y6JazWKfGav56CY3N6igczgeA40R/GMAY48CYP7Sdg1oPCwB6ily+0Avgl2znoMZ1ihI2quNPrPmvVUJ42KKOQsEPKVk0CCGgVPQfnn2tOZxHT8ECgM7nlwB02A5BjekQZWxyji278T8tKVxscY5CLTFvIO7iMAygfX/NvgMjz7Cdg1oLCwA6n1fYDkCNSYsK+p1jT1nvv1wpUUW/c3TJyYNx5jhO9HcGBGC0+W3bGai1sACgs+TyhQ7w1L9IS4kqNgfYaGfmi4l6exKiLx7DAMboF9nOQK2FBQCd64UA0rZDUH2SwsXmELrtO0S5rYuAOAwD+L5ev+/ASI/tHNQ6WADQuV5mOwDVp0vMYqtzBE5IE/c6RQlbndG23C1QqTgMAxjAGG4NTE9gAUDnYgEQQX1qHP3OsdAn7KVFBducIzXvKRAnUkV/UyBtzGtsZ6DWwQKAnpDLFy4BsNV2DqqdgsZm5yj65EQT7+ljs3MUq5t4z1ag4lAA+JrbAtMTWADQma63HYBq1y2LGEgUrD2Nr1Hj2OKMts2ugTGZCJjYd2Bkp+0c1BpYANCZ2P0fAY7w0K+OYZM6Htp4f606RBkDzmH0yYnYTxCUUsZgHgBgtOEunwQAiH5JS4GY3/3vObZz0OJWyimsUeMttS5fwKBPjaNHzmDU70PJxHcRiVIKnhftSZDa6OtsZ6DWwB4AOm0nWBC2rG5ZxIBTwDo11lKN/5mSwsVWZxSb1DGkRNV2nFDEYRhA+/6qfQdG1tnOQfaxAKDTuElIC5pr+A9jkzqOVETG2rvl7BmZ41UIxGElAADAmF+zHYHsi345S0G5zHYAelK3nEWfHI90A9oti+iWRUzrTpzUK1AxSduRGnZ6HoAx0Z7vYAyutZ2B7GMBQKddajtAu0sID71yGr1iJlab7ZwuBEomhUndjSndCR3hzkelHHheNHpjFmKMGbKdgexjAUDI5QubAXCLUAsEDLrlLHrldOw318mICjKqgrXqFKZ0JyZ1N0omZTvWskklgYjXZ8boDbYzkH0sAAjg039TSWh0yDK6xCy6ZbHtjtuV0Fghp7FCTqNqEpgynSjqjsgUA1JGt/fiNK11x74DI87wYDbipQw1ggUAARz/D11SuOgSs+iUJXSIcuzXzNcqKVz0iQn0yQn4UCjqDGZMBkWdgY/WnHAnRfQLgHkvBLDHdgiyhwUAAewBCFxKVJEWVWREGZ2iFKsx/bAo+OiRM+jBDKAMdPEkqrIDZdmFoujGLHrhC/sfWSIGPQAAYIx5MVgAtDX7303UClgA1EnAPNHYp0UFaVFFSlT5hB8AoStI6QpSGEfv/K8Z4cCTGZRlJ0qiB0XRg6rIND2blBJaR3zoxpirbUcgu1gAtLlcvqAAXGw7R6uS0EgIDw78uR/P/P/wkBQeG/smEsZDwp9Gwp9GN47O/6KEL5LwZAau7EBVpOEihYpIo4I0dAhDCXEoAIwxF9rOQHaxAKAsgFju3Sqh4QgfDnw4woOChoCBhIEQBgJ67v+f/rX5X5cwUPDhCL9ld92jMxgNZcpQuowUxp/6+0LCCDX/nzP/ry1hxBn/8kJCGzn3IxQ8kYCL9IJFRByGAYwxa2xnILtYAFCsuv/TooouWUS3mI30JjoUIKMhjIZAvWv3BXyVQVGtximxDhWRictKgNS+AyNdw4PZGdtZyA4WABSL7v9uWcQaOd42R9NSMxkofxY9/ix6cAi+6sKo3Ibjcfj4NHgRgK/YjkF2xOAdTA1abTtAIzpEGWvVKaRFxXYUahPKn0G/fz/WpHrwmLsJRR2N/QsWsMV2ALKHBQBFdgfAPjmBPnWeMV+iJkj5UxhUMyjILTjurbAdp06mz3YCsif6A1nUqN6lv6S1SBhsUsfZ+JN9RqMfBzGQPGo7SV0MwImAbYwFAEWqB0DAYLMzim5ZtB2FaJ7BSn0U25OHbQdZPoOVtiOQPSwAKFI9ABvUSWQ43h9/EdxaoUefwKbEmO0Yy8UCoI2xAKDI9ACslpPokVyxRK1rHQpYpaL0HjWR+f6n4LEAoEj0ACSFizXqlO0YRIszBlvV47ZT1MwA3bYzkD0sACgSBcAaycafokHoKrYkjtuOURtjumxHIHtYALSx+XMAOm3nWEpGVNAtZ23HIKrZahyPyjbSzT9JiVoGC4D2Fonxv9VywnYEomURxsOW5AnbMZZkTDzPAaHasABoby1fAEhodMqS7RhEy9aDSdsRamCSthOQPdwJsL0lmnkzAYOMnkRKF+GgCsfM/afgLrjsSzlJiETLj1IQPYWjS7jYeQgw539zGwh4cOCaBKpIwEUCM6YTZdPUh3I+BLYxFgDtLfRHawGNLv8UuvQYOvUpKOMt7/Uq0vusU1szyCgP8Jc4lVKc/dOySWHS9GLCrEDRdIQXb87yviEpVlgAtLcQCwCDXv8Y+ryDcEwDx/KqpnZSEAVMLP0l50iLCtLiONbhOGZMFw7rDSiasHrBBAuANsYCoL2Vw7holz6FNW4eSRPAzH2hGr8GUUR1iRkMqocxYXpxWG9ExQTcIybYA9DOWAC0t4ALAIO1bh4r/QD3RBccoqQoC2ZP4xViEj1qGnl/KyZNcFt3CMAN7GIUOfx0bWNDA/0aQAP980+SxkN/9YGAG38+/VPELTABsB4SGlmVxzoZ6CZDLADaGAsAangegGOq2Fq9F5064ON5lz98StRigj/VaJM8gi3yUEBXE4E8AFA0sQCghgoAAY1N7oNIGq7VJ2qWPjmG9fJYEJfi0ZptjAUANTQPYL37MNJ6OqgsRFSjjXIUK0SDmw0JFgDtjAUA1f3ovtI7jB4/IoeeEMXQNnUQaVF/DS9CWglE0cBVAFRXAaCMiz7vYNBZzhb88GlgtO/jwR//DKP5xzH62GHMzsxg3eZN2LCtHxddeSlWreuzHTF28gcex+OPHMLRQydw6sQ4+tatxPrN67BtcAs2X7DJdrwFhDuRRUKjXx7GI3623ktw7K6NCRPgLFWKnly+8AMAz17u69a6I1jpHwkh0RmEgujaEO496nD80Cj+/ZZdOPb4+Vc8OAkHO37hZXjmzudBcBljfYyGmZl7f83OlPCtL34P++95aMEvv/yaS/Dim56PVKbFdo6UCUCHP9H+YX87pus42ddxEl+7/OLtLw8hEkUAP51o2U8ACVPGCn80jCwtb/9PfoZb/s9HFmz8AcBzPXznc/+OXR/+NIxmgd2I8ZMT+PQHbl208QeAn931AD79gdswPTHTpGS1as6//yZZdzHOc7bbGAsAWvYY4CqvANHK/fMhmZmcxjdu/SK079f09fkHHsIPv7U33FAxZozB7s98C8WZ2mrUqckZfP1fvhNyqtbUIWbRI+qYjCs4BNDOWADQsj8AuvRYGDla3jdu+yJKxeU9MP3Hv30TY0c5UbIeP/6Pe1B4dHlPtiP789h314MhJWptK8REPS8rBp2DooMFAC2rAMjo6cYO94moarmCh+9dfsPiex5yP9kXQqL4e/CnB+p63QM/zQWcJBp65VQ9L2u1MRNqIhYAtKwhgHZ9+j926AiM0XW99ujBQsBp4k/7Po4dOVnXa48eCmSDnMhJwEWnWF4PlWAPQFtjAUDL6gHo0HV1M0be6GP1N+KNvLZdnThyHL5X30F1pdkyJk/V9TQcgubuZ9297HkAolX+osgCFgC0rALAMe25cVh5tv65Uo28tl2VlznX4imvL7Xn+zSx/LN9uI1nG+NGQLSMT1rTluP/cVD0HEx5SVR8haqWcI2EqyV8I+AIjaTUSMz/l1EeViSqSMr6hjzInqRYdgHQnl16BIAFAAE1T7N2DE8OjQoDYMpNYsJNYtJNwtULd/Z5RsLzJXDG6sZDwBOFwIpkFR2qvu54aq5l9wAIcIZqG2MBQDUPUPPpPxom3CQOlzpR9lVD1yn5Dkq+g9FyB3oTVfRnikir2vZAIDucZfYADA9mF99hiWKNBQDVfLB4O27+EyUzXgKHSx2Y8RKBX3vSTWLKTWJ1qoyN6VkkODzQkpbzPSqEZJdem2MBQJyiHgOFUieOlTOh3sMAOFlJY7yawkDnNHoT7BGKMiEElwC2Oa4CaHNDA/2T4EzgyPKNwCMzPaE3/rbvScETAqdsZyC7WAAQwF6ASKpohdz0Cky6SSv3L5Q68VixiwNDESWEaM8dk+gJLAAIWMY8gOZqnaZFyvo3dJEy+G8zV0scmO5teKJfo8aqaeSL3YFfV6rG/s6EaO4GPNEkDtpOQHZxDgAB7AFY0up1a8/+Balg1m0GNmdhVq0DOrpgMl1ARxeQ6QScBFAqArMzQAL4bqUPncLHOlnBelVBRtQ/m17Pd8EvtrSvmcarKYwqHxvSjW3eM6ETGPVTOKmTmFrfC/2633ry7zSVBsoloDQDMVsESjNAcRri2OMQhUeB8RNPXEdIgZVrehv9Y8WeEHjEdgayiwUAAS3bA9A61mzbDHPpNTBPuxqmPwuzYSuQqK3rfRrAnedsTNcrPayXZWxxSniaM4MVy5iQfXC2C7N+a33rHil1IC19rEzWvgPfIT+DnNuFIzqFo34aZXNOQXPNS877uvP2CxWnIQ6PQBx8CKsOP4hEIviVEPEj7redgOxqrU8RsoU9AOehIfCo14H73W7kMtvh/+q1gV17UjuY1F044HXh21iDTaqMSxLTuMSZRo9ceNOdY+UMTlVTgeUI0mOzXUgrD5lF9go47KfxgNuNB7xuTOkAP346u2EuugLmoitwEsDHTQmX4BguEcexjgfenZ/APbYjkF0sAAhgAXAWA+Bnbg/2VlZjUjfnSfKwn8ZhP41vYw0uT0xhR2oMvef0CnhGYrTc0ZQ89dBGoFDqxIVdTz1fJu914LuVPhz2003JMo4M7sQ23Gm2YQDjeIEYQT947s2ZuAkQsQAgoMYhgNaZkheeB9xu3F5ZjTFtZ2a9AXCv24P73G48PTmJ61Jj6JyfLzBa6oBvWnty25SbxLSXQLczV7wc9tP4bqUPec9e4ZLHSuTN1bgIJ/EC8WjMewRqe39wEyACWADQnJp6ALSI79ulZBS+VFqPR7xO21EAAD4EflRdgX1uN27KHMVWWcaJSnOenhtVmO3EYM8kvldejR9UV9mO84SH0IeHzWrsEHk8D4/ZjhMK39S2KoSbABHAZYCE2jcD8kRrjj03quCn8bfFrS3T+J+pbBR2zW7CV4vrEJXNCTjQUAAAIABJREFUd0/5Sdwys6WlGv/TDARuNxfgs+ZylBC/iYLVGv9M3ASIABYA9KQlewE0JDTsrjsP2v1uN/6xuDnYCWkhuN904S7ZDV1jF+9iBIAO5aEvVcbGzCxWJitIyWAO+ZkSCt9XvTiiW7tYfASr8SnzDEwgXrsZejUXANwEiDgEQE86BODipb7IEykkTWPrvVvFQT+DL5fWB9KoNsNJkcA9shNP1/WNYQsA69OzWJ8uQYqnzuhwtcShUifG61xlUIbEj2Q3qhH5+5xEGp81l+NN4idIIx7HHVdNrb0a3ASI2ANAT6ppHkBFtl43eT3GdBL/MrsRfkQaq9NGRRIPyuVPqEsrH4PdE9iYmT1v4w8ACalxQec0LuichrPA1yzEg8CPZDfKEftIOYkOfN5cBj9iuRdSMrX1aHATIAJYANCT9tfyRdNyddg5muKLpQ0o1zhhqtU8KtI4IWofv1bC4MKuSXQ6tT3lrkxWcMF5lvItZr/swJSI5t/nY1iJO7HVdoyGGQhMmRq3ZRZib6hhKBJYANBpP6nli4pqFUzEnprPlfO6cNRv7THqpTwsah+73pQpIimXN4Ww23GxJlWu6WvLkDgU8QmiPzSbUY74iOi06YZfwxwdIYQBcHv4iajVsQCg0+5GDUv9NRRm5YomxAnPf1Si34txSjgYq6EXoGsZDfm5NmWKSNRQOIzIdGRWKCykAgd3mc22YzRkwtR2/oEQcnx4MBv1fzIKAAsAAgAMDfRPAahpZ7AJZ0PIacIz6qcj//R/2uM1PHWvTFbrvr4SBl3O0vvFRP3p/7R7EN33tQ+FcV1bYS6l4A6ABIAFAJ2tpmGAGbkaJdkTdpZQHLe0w18YZmro7q2lAV9Mp1p83kAJEl7Eh4ROm0Ia1aCXuTbpr+aoXldT9z8AQIgfhJuGooIFAJ2ppgIAAE44A2HmCM2JOBUAQi46ZqOEQccSDfhSlpo4OBPRiX8LGUPrnrWwEBcJnNB9NX+9EOLLIcahCGEBQGequQAoyR7MRHBFwFSTDvdpBh8C7iKPmJ0NPv0DWHKDoFLMPkKmEL3hjCN6A3SN/w5CCDM8mL0z5EgUEfH67qVG3QPUPp/raOJCuCIa+9OftjJGZ6A4MEgu0gewVPd9LRJy8W2SOiI//e9sK1DfhElbTplVGNO1b7kspBwLMQ5FDAsAesLQQH8RQK7Wr/dFAoeTT4vU9sB9smI7QmC6zOJP57Wu+1/KYj0JS2WImtWIzi6XRdOJg/7yVi5IwQmA9CQWAHSumocBAKAiOnE0cVFIUYI/gHidqn9WfKvpxsKNrxImsAJg7SLLCNPQSMTkoOiVKMGJSI+GiwQe9bctf08OIe4IJxFFEQsAOteyCgAAmFZ9OJK4OBI9AWtlBVtUyXaMQGw1C/dmbO2YgSOCacxWJitYmVzkXiZa3eYLuVocth2hJiWTwQHvQrh1nGYohPi3ECJRRLEAoHMtuwAA5oqAx1OXR2JOwPNT0R8GXWNcrDDnf8Jfkyov2mDXY1vHDFYvcM0LdBkq4r0AnajiaoRRAAS7DnDC9OKAfyGqWP5qFiGEHh7M3hVoIIo0FgB0rnuB+o5Gq4hOHExegRnV2qsDLnBmsTXivQAXmbPzCwCrkhUMdk9iS0d9pwUuRgqDbZ3TuLBrEquTFagzDgtKwmDbIr0RUfAccRCJRYZUbNOQOKI34FF/oOYZ/+fiBEA6V7Q3v6bADQ30l3L5woMAhut5vS8SOJx4GjJqEmu9PNJ6OuCEwfiFzCj+vrgF0yZ63wJXyylcnJiGIzQSUsMRGhnl17Rtb6N6Ei56Ei4MgGk3gbJW8I1Eny6j6PfhqInePgtDOIFrajsMs+kMBMb0Kozq9XV1+Z9JClHTgV/UPqL36UfN8BPUWQCcVpK9OJi8At3+CazwjyKjJyFaqJu4R3r4pY7D+MfZzaia6HSEXZ2cwPXp47ZjQGC+GMCTKwRuNiXcUtyMsQhttrQJU7hJPNhS700A8KAwqXtxzKxF2QQzrCaE+H4gF6LYYAFA53MXgDcFcaFptQbTag2k8dClT6FLn0JKF+GgCrnAGHazrFcVvDozis+XNkSiCLg0MY2XtUDjv5CM8PHfOw7jttl+TERgw6W1KOK1Yl+4Xf9m6cLCQMCDA9c4mDFdmDS9mDGdwZ+6KcTngr0gRZ0wNbxBqb3k8oV+AIfCvo+AhmNcSHjnXfEnYLAtdSLsGBjTSXx+dgOO69bcBU7CYGf6JK5JjtuOUpOykfhKaT1yXpftKAu6HKN4mXgo9HF/X6bxkLt1gd8V8IwDtwnPYVLK4pWXDLbuPwhZwQKAziuXL/wYwNU2MwgYDCYea8q9XCPwtfI6/MxtrUOOeqSHX8wcQb+K3lK7H1ZX4tvlPiy+l2BzOdB4qXgIV+JIU+7nyQz2VQebcq/FOI7zncsvvvAltnNQa+EQAC3kK7BcADRTQhi8MnMUVyYn8d1yHw75Gat50kLj2clTuDY5gURA6/mb7drkOAadGdxeWY373R6ro+wSBldgFNeJx9ATse1+gyCE/ITtDNR62ANA55XLFy4DsM9mhmb2AJzrEa8T36v0YdRv7rBAQmhck5zAc5LjSIvWXZa2XMd1Ct8rr8aBJg8LCBhcguPYIR7FKjR/6Wcr9AAIId2rLh2MzsxMahoWALSgXL4wAuACW/e3WQCcdtRP4X6vGw+43aFNbFMw2O4UcUliGoNOEcmIPvHXYlIn8IDXhfvdboz64W0atRmTuEQcw9NwHF2wt/1zKxQAynF+esXFF7ZNbx7VjkMAtJivAHiH7RA2rVcVrFcVvDh1Eof9NB72OjHqpzHqp+reQ8CBwTpVwQZVwWZVwqAzg1SMG/0z9UoXz06O49nJcZzSCRzwunBk/u/zlF7sbMOFCRj0YRbrMY1NYgpDONlC3fz25z9IIW+1nYFaEwsAWozVAiDwZVAN2qTK2HTGZLxZozDqpzGuHZSNQskolI1EGRKekUgLHxmhn/ixU3hYpyrok9UW+5PZsUq6eNYZKxuqRuKYTuGkTqLkA6VqCWUkUIIDFwpJ+EjDQwYu0mLuxzUoYh1mWvYQHyPs/ksLITQE/s5qCGpZLABoMXcCGANgbW9fHxKqRT/cO4SPrFO0HSM2kkJjsyphsyoByoVxj9mO1DBt7B6QJaV6dHgwG58jMClQrb/7CVkzNNDvA/iqzQw6Ahv0UAhiMjfJt3xCppDii1YDUEvjpyst5cs2b+7zLdqeTGv2+iyX7fevEOIvrQaglsZPV1rKHsDC+ql52vITFNnCHoBGKaWODg9mT1oLQC2PBQAtamigfxbAd2zd3+cQQHuKyRCAZ/G0SSHlN6zdnCKBn65UC2vDAPWefU5RF48hAM9iD4AQ4oPWbk6RwE9XqsW/A3YWVtseQyVLYtID4FrqAZBSnRoezOas3Jwig5+utKShgf6TAP7Zxr25CqA9GW33qOiguJaWASolP27lxhQp/HSlWn0EFmZmsQegTcWmAAhn++jFCCmrEOL/NP3GFDn8dKWaDA30Pwjgm82+b9XCByi1AO3aTtA4IVDUzT1MCgCUUp8fHszGYxIFhYoFAC3Hh5t9w7LhIWZtx+hY7APgi+Y3/kIILYT47abfmCKJBQDVbGig/zto8hHBPpS1iVRkSUy6/6sivNMOF6KUunN4MHuq6TemSGIBQMvV9F6ACnsB2ktMCoBZnWn6PYWUv9H0m1JksQCg5doFYLSZNyyb5nelkj1xWQEwpTubej+lnIeGB7P3N/WmFGksAGhZhgb6qwD+upn35DyANqPjcHidwKTf3AJASvnupt6QIo8FANXjbwHMNutmZbAHoK34FdsJGqZlEhqiafeTSp0cHsp+pWk3pFhgAUDLNjTQfwrAPzXrfp5RVrdUpSbyq7HYBbDa5KJVSfl/m3pDigUWAFSvj6KJG7ZzImCbiMHTPwCU0NG0e0kpy8ND2/+iaTek2GABQHUZGuh/GMC/Nut+NmZUU/OZmBQAp/yept1LKnVL025GscICgBrxTgDFZtxoyjTviYosikEBYGQCk35z3q9SqsnLh7b/ZlNuRrHDAoDqNjTQfwhAU/Ycd02CqwHiLibj/0U07+lfKfWGpt2MYocFADXqIwAebMaNppu8rpqay3hWTpwO3DF/dVPuoxznx5z5T41gAUANGRrodwE0ZfexacMCINa8pq0sDU2zuv+FEL6U8obQb0Sxxk3WqWFDA/17c/nCPwN4fZj3qc4PA6RFHDaKWR6vXEFxdAylsQlUJqaR6VuJ3gs2ItXTZTeYMSgeHcNk/jD8iov06l5k+lagc/1qCLmM5wu/EostgJvV/a8c5yPDg9ljTbkZxRYLAArK7wG4AUBvmDeZ1p1Iq/YpAIw2OPqj+3HwO3fBKz/1z925vg8XveqF6Fzf1/Rsx366H/lv/ie80lMn7nWuW43sK65Dz9YNNV3LuNF/+gea0/0vlTp5+dD2d4V+I4o9YWIw6YZaQy5f+E0AHw/zHknh4gKnEOYtWoZbLOGBW7+KmSMnFv066SgMvPQ52HDNpU3J5VeqePjLe3HyvkcW/0IBbHjmpcjecN0SVzQwM6ORPwLYyATuqV4S+n0SyeSLhwez3w39RhR7nANAQfokgLvDvEG1XVYDGOChL353ycYfALTnY2T393HqwGPh5wIwsvuOpRt/ADDA6F33Y/SuJc6n8cqRb/wBYKYJ3f+O4/wHG38KCgsACszQQL8G8DaEvEPghG7eMitbCnfeg/GHH1/Wax796p3Qbrjj6FMHR3H83gPLek3+Gz9A8djYgr9v3KZsJREygcPe2nDvIKQrpHxlqDehtsICgAI1NND/IwCfDvMek7oLnon32QCjd9237NeUx6dwaO9PQ0gzx/gaI7vvWPbrtOfj2I8XWCmqvbkegIgry27M6nD3/3cc9b7hwexEqDehtsICgMLwewAeCOviBgKndKhzDa0qn5pCZWKmrtcW7rgb04VwJoc/fvtPUDx6sq7XTuaPnPfXTXW6kUgt45BX22THeinH+dnw0Pb3hXoTajssAChwQwP9MwBuBHAqrHtM6G74MX37Th0crfu1Rhs89IXvoDoVbLf6+EMHUfh+/b0LxeNjT13FYHwgBrP/q7IL0yGeVSGlOiWlvDa0G1DbiucnKFk3NNA/AuA1APwwrq8hMR7TuQAy2djq3NLYJO7++L/g5P0jDWfRno9Hv3YnHvh/X4PR9a8YEkJAJc7+c809/Ud/FVLBXx/atYWQrnLUM4cHs9EfJ6GWwwKAQjM00P8dzA0HhGLc74GGCOvy1mRWr2j4Gl6pgty/fAu5Xd/CxEhh2Xvs+5Uqjv10P+79xOdx5L/2NdxOp3q7IdQZHzdGAzGY/OfJDkz4IW3GJIRxHOfVw4PZxis5ovPgRkAUqqGB/o/m8oXLAbwx6Gv7UJjU3Vgpp4K+tFWZ1b0QUjT0xH3ayQdGcPKBESS7O7Hm8gvRO7AJqRVdSPV2w0nPL6c0QLU4i8rEDMqnJjG2P49T+/PQXnCdN5k1Zxc1pjoTi4N/RvW60K7tOM4Hh4eyXw7tBtT2WABQM7wVwMUArgn6wqd0L1bIaYgYdCWfJhMO+i7djhP7Hg7smtXpIg7feS8O33nvE7+mUkk4mRSq00UYP9x1+OuuHHryJ8YH3OhP/vNlGieq4UxGdRxn7+VD298TysWJ5nEIgEI3NNBfAXATgPNPBW+Aa5xYzgXov+7K0O/hV6qoTEyH3vinV/ei79LsEz83lclYPP0X9KZQrquUOiKkfFEoFyc6AwsAaoqhgf5RzBUBT904vkEn/ZVwTbw6szrX92HlRVtsxwhE/3OvBMT8XA2/GouZ/yXVizGvO/DrSinLUqmrhgez0d8akVoeCwBqmvlNgt4S9HU1BI76zT8MJ2zbdj4L0on2hked6/uw7qonu/9NZdximoAIhZHq5uAvK4RRjvNzPOWPmoUFADXV0ED/bQDegYDXfxVNBlO6M8hLWte5fjW2/dyzbMeom0w4GHzNS56c/e8WAd+1GyoAx7Ee1YB7nIQQ2nESNw8PZr8f6IWJFsECgJpuaKD/o5hbFRDoxvXH/dWx2xxo47OGsWpwq+0Ydbng+ueiY83KuZ8YPTf2H3Ge7EDBXRPoNYUQnpNIXD88lP3nQC9MtIR4fVpSZMz3BLwKQGAbnHhQOOGvCupyLeOi//YidK4L/5z5IG245lKsv/ppT/zclCdicOKfwIgX7LwMIWXVSSSeOzyY/WagFyaqAQsAsmZooP8rAF4KILA1YRO6GyWTDupyLcHpSOOyN9+IzvXRmOew4drLkL3huid/wZ0FvOhP/JuUfSjq4N5bUsqi4ziXDQ9m7wrsokTLwAKArBoa6N8L4AUA6jtl5jyO+n2x2yHwdBHQtaG1i4CNzxpG9uXPe/IXtBeLiX9appCvbgzselKqceU4Fw4PZh8K7KJEyyRMDNbjUvTl8oUhAHsABDK9ukfOYKM6EcSlWop2PTz69R/g6I9DO2yxLiqVwAXXP++sGf8AYGaPzy39izIhccAfRDGg436VUkekUhcPD2bjtYUlRQ4LAGoZuXxhC4BvA7goiOutVaewSkZ/4tn5nDrwGB7+0u1wiyXbUdCzdQMuetWLkF559oZMpjIFVKPfxh3GNhzzGj+fAQCUch6SSl42PJiNeFVEccACgFpKLl9YA+CrAJ7Z6LUEDDY7R9Eh4nmQmlss4dDtP8HRnzwY6L79tUr2dGLLjqux7uqnQchzhlz8Csxs9HtgJuUajFSD2fHPcZwfXn7xhdFd10mxwwKAWk4uX0gA+BMA70GD81QUfAw4R+CIQFcctpTK1AwO3f5THLt7f+jb+gJAoqsDm59/FdY/45Lzb1Skvbmu/4jP+ndlF+6rbm/4OnNr/J0/GR7a/r4AYhEFhgUAtaxcvvBcALcBGGjkOmlRwVZnNFYHBp1PdaqIE/c9gpP3PYzpwvFAry0dhZUXbcWay7Zj1dA2yMQCG+EYPdf462gXXEYmcJ87BM80thOjUuqoVOr5nOxHrYgFALW0XL7QDeDjAN7QyHVWyGmsV4EtNGh55fEpjD3wKKYLxzBz5CTK45PL2ntRKInOdavRtXENerZtxOqLB6BSiSVfZ2ZPAH7gxz00l5B42L8Q0zrTyEXgJJz/d/nQ9psDy0UUMBYAFAm5fOFVAP4OQN07/axVY1gloz8prR5euYri6ElUp4rwyhV45Qr8chW+68FJJaHSc0cDO+kUMqt70bF21ZNb+NbIlMfntvuNNIEjYguOuivrvoKUsqgc56bhwey3AwxGFDgWABQZuXxhI4B/AvCSeq+xXp3EChn9s+hbTnU6Blv9ChwV/Tji1r/rouM4dwgpdw4PZuM585RihQUARUouXxAAfgvAnwOoa1u2DeoEeuVMoLnaWnVqbslfxB0Xm+re518I6TqO8/bhoezfBRyLKDQsACiScvnCdgDvB/BqYPnb/m1Sx9Eto95dbZ+pTADV6BdTJ8RGHHLXLvt1QgijlNorpHzt8GA22JmXRCFjAUCRlssXrgLwZwB+bjmvEzDYpI6jS0Z/j3pb4jHmD4yJDTjorlv265Tj3C2lfB1n+FNUsQCgWMjlCzswNyxwTa2vETDod46hU9jfTS9aDExpPBYH/IzL9chX1y/rNUo5D0slbx4ezP4wpFhETcECgGIlly/cBOBPAVxcy9ezCFguA1MaA7zoz3GbkOvwaHVDzV+vlDoipXrL8FD2ayHGImoaFgAUO7l8QQG4GXO7CS55gLuAwTo1xtUBSzEGpnQy+uv8IXBM9ONwjbP9pVTjSqnfGx7K/kPIwYiaigUAxVYuX0gBeBOAXwdw+VJfv0pOYq06FXquSDJ6vvGP+Bk2QuExvQ2n/O4lv1QpdVRK9ZHhoewHm5CMqOlYAFBbyOULzwDwawBeB6Broa/rkrPYqI5Dxnzb4GUxPszsSUC7tpM0xMgkHvKyix7rK4TwlFK3CynfPTyYvbeJ8YiajgUAtZVcvtAF4LUA3gLgGef7mrSool8dhSOaf8Jey9He3JN/xPf292QH9rtZuAvs7a+UKkgp/xpCfGh4MBvtU4yIasQCgNpWLl+4HHO9Aq8H0Hvm7znCR786irSIeJd3I9xZmMo4EPHPiLLsRa66Dfqc7SKElFUl1R4hxbuGB7M5S/GIrGEBQG0vly9kAPzi/H8vBNABABIGa9txcqDRMOWJ6C/zEwJjWH/WGn8hhC+lekRK+cnhoexfWUxHZB0LAKIzzE8cvA7AywC8FMBgt5zFenUCCm3QM+xXYMqnAB3t4Q8tUxjxtmFaZyClmpRS/lAIccvwUPYLtrMRtQoWAESLyOULAwBemhTuL6xXYzs6RKmxA+JbmKlMAdXo7+lflKvwqD/wiJHyK0KIjw0PZg/ZzkTUilgAENVo5LHH0hvUiY9lRPnNAohPIaC9uaf+6C/xM1Nq7T/2XrjjzbajEEUBCwCi5SrccQWAz6LG3QZbmjs7d6CPifjwhko9DpV6rshez6d9ohqxACCqR+GONID3APh91HkssVVGzzX8btQn+ikPTvpDYvsr/sB2FKKoYQFA1IjCHVkAf4W5SYPR4JVgKpMRX9svACd9J2TiRpG9nts3EtWBBQBREAp33AjgowC2WU6yML8y1/BHfaxfJU9ApV4nsi//ru0oRFHGAoAoKIU7MgD+AMC7ACy832yzaXeu4Y/6CX7s7icKFAsAoqAV7rgQwHsBvAaAtJZD+zDVKcAtWosQCCENVPq7kM5r2N1PFBwWAERhKdwxCOAPMXcAUfOWDRoNU50GqjNAlA81mmv4vw3pvFFkrx+1HYcoblgAEIXt8dsvhV+9D4mOkG9kgOrMXOMf4WV9BgKeL6YSma6LRPb6Y7bzEMWVYzsAUdyZ4tFHAADVKYhkN+YKAbH4i5Z1Aw24RZjqDGCiu4Wvr4Fq1YdbrUBKWU1e+ho2/kQhYgFAFL651l57MOVxoDIFJDohEp2AbGBkwK/AVIuAV0KUu/pdD6hWqvC8s5YlBlghEdH5sAAgCt+qs35mfKA6NTdBz0lDJLoAp8a9hE4/7bvFSK/jNxCouhrVcgVan3e4InqbKxFFDAsAovCtXfB3vDKMVwakmusRSHQC4jy9Al55rtH3yojy076vJapVF261gsWmHxljWmcZJVFMsQAgCt/CBcBp2p87ja8yBagUhJMBnNTcrn3ubKSf9j1fwPU8eNUqtK6teNHa8LOJKGT21igTtY+lC4Az+RWYygRM8RiMW4KQDqBSgIjGsLgxc+P6syUPU1MlFGeK8139y+u5KN1z24aQIhIR2ANA1AzLKwDOpF0Y7c79f5kAHAcCAkb7gK5i0X70JtKQ8DwNt+rCc92gLjsEgOv/iULCAoAofPUXAGfS7lxBcPrn0gHUfEFgfMB30Yz5AVob+FrA9zV834Pv+QhnPxGzHcDtIVyYiMACgKgZNoVyVe3NLS184hcEjFAolSqQQkJIASHmxvmEMBBCQMqlhxGMMTAGMJAwENDaQM839L4fVmN/vhwYbMqNiNoUCwCi8D2vObcxgPbgVhY/7U8IASEFpJCAEDBGzzX62jStca+F1ubFtjMQxRkLAKIQmf27LgKwxXaOMxljYHwDjdbeLlhrPWQ7A1GccRUAUbj4FFsnrU2qdM9tT7edgyiuWAAQhYsFQAOMMW+xnYEorlgAEIXE7N+lALzAdo4o09q8xHYGorhiAUAUnqsBrLAdIsp8X2+1nYEorlgAEIXntbYDRJ0xRs7efetv2c5BFEcsAIhCYPbvWgngV23niAPf139oOwNRHLEAIArH2wB02Q4RB76v15Tuue1G2zmI4oYFAFHAzP5dKQDstg6Q7+u/tJ2BKG5YABAF72YA62yHiBPP87PcE4AoWCwAiAJk9u8SAN5pO0ccaa0/aTsDUZywACAK1psBHmITBs/zn1G657bn2s5BFBeilQ7/IIoys3/XFgD3AeixlsEYTE2VbN0+dErJCcdRqzNX3tzaBxkQRQB7AIgCMN/1/w+w2Pi3A9/XK7Q2n7OdgygOWAAQBeNtAF5kO0Q78DzvVaV7buMWwUQN4hAAUYPM/l1ZAD8D0Gk9S8yHAE5TSk47jlqVufJmz3YWoqhiDwBRA8z+XQkA/4QWaPzbie/rbq3112znIIoyFgBEdZo/7e8zADgz3QLX9XfO3n3rp23nIIoqFgBEdZif9HcLgF+0naWdVaver87efeuHbecgiiIWAET1+QSAN9gOQUC16r1j9u5b32s7B1HUsAAgWiazf9eHMDfrn1pEter98ezdt/6e7RxEUcJVAEQ1mh/z/wCAd9nOspB2WQVwPkIAiYTzxx1XveF9trMQRQELAKIamP27NgL4LIDn286ymHYuAE5LJNQPpZQvyFx5c9l2FqJWxiEAoiWY/bt+HsC9aPHGHwCEELYjWOe6/rWe5x8v3XPbNbazELUy9gAQLcDs3+UAeD+AdwOITMs6NVUCv68BIYRJJNSfdlz1hj+ynYWoFbEAIDoPs3/XVQA+DuDZtrMs1/R0CVrz+/o0x1H3KSVfnbny5pztLESthAUA0RnM/l2XAXgvgJtsZ6nXzEwZvs/D8s4kBIzjqP+SUr4+c+XNedt5iFoBCwAiAGb/rkEAfwLgNYhQd//5zM5W4Lq+7RgtSQhhHEfulVL+cubKmw/bzkNkEwsAalvzy/qeA+DNAP47AGU3UTBKpSqqVZ6Rs5j5QuB2KeWfZ668+du28xDZwAKA2orZvysDYCeAGwHcAKDPbqLglcsuKhXXdozIkFJUlJI/lVL8PSBuzVx5M8dPqC2wAKDYM/t3bQHwIgCvwFzj32E3Ubg8z0exWLEdI5KEEL5SMiel+FchxKczV95csJ2JKCwsACh2zP5dGwC8YP6/FwK4wG6i5jIGmJqatR0jFqSURaXEA0KIrwH4dMdVbxgxoB+mAAAcwUlEQVS1nYkoKCwAKPLM/l1rAOzAk43+kNVALaBYLMPz2JMdNCnljJTifiHEbmPMLV1Xv/GY7UxE9WIBQJFj9u9aCeA6zD3dvwDApYj4zP2gVSouymXOAwjbfEGwTwjs1tr8Q/czfuW47UxEtWIBQC3P7N/VDeB5eLJL/wpwG+tF+b7GzAy3wm82KcW0lPJuKcVnhBC3Zq68uWo7E9FCWABQyzH7d0nM7cD3Msw1+lcDcKyGiiBuCWyXEMIoJY8oJW9XSn44Ofz6e2xnIjoTCwBqCfP77u8A8N8AvBJar/emSjBaI7Gq2264iOJ+AC3AzP2PEAJSyRkp5X9KKf46c+XNu21HI2IBQNaUv/uJzPSDhf9ZHp/5pdmJ2W2lYlV5vobna3hnvC0FgIQSSCUUkikHnau7sWJoI7ou3gzhcCRgIRwGaB5voojpgycxUTiFydFTmDk5A6PPnoTppBLI9GSQ7s3AEdKklZjsXNX9mZU7nva7K659M4cKqOlYAFBTHfzdN13vGbyvVPEunim5aa+Bt58SQE9XCiu39GHt858G1Z0JLmhMFIsVeB63BQ6D8XyM/exxHPzRI5gdn6n7OolMEmkldYeUh1LGvObyz3zhrgBjEi2IBQCF7uD//s1rvdnKx6YmS1cVq34oY/lSAGvXdmPD8y5GR3Z9GLeIJG4KFLzqyWkUfvgwjjxwCCaEQ5fSCcf0dqUe1o56xbW3fPZA4DcgmscCgEJR+Ns/urR6eOzj0ydnnj1dcpPNvHdvRwJbnjuEnisHmnnblsXTAYMxlTuMkTsPYOb4ZNPumU46ure3Y5/uSv/CtR/7B55iSIFiAUCBOf6vH7pw9sCRj06PTrxwarqctv3OWtmVxNaXDKPzoo2Wk9jluh5mZznEXC9vYhYPfOkuTB2dsJZBCCCTSvor1q34XtcFa187+I4/P2UtDMUGCwBqyP1/8ludmaT6QPnE1BsmJ2Z7dAu+nfpWdmDb9VcitWm17SjWTE+XoTV7AZZFGzz+nftw8CcjtpOcRQiBrs5UuaOv++OTxybf85LPfYn/sFQXFgBUF73nry5G4eSfPXTP4zecnK60/DG6UgD92bXov/EZEE7Lxw0cVwQsz/RDo3jg6/fAnW3t+RNbVnR52aGNn8tcN/Q29dy3TNvOQ9HCAoBqpr/5sRRGx/4nTk79mjk8thGuh7tngUqE3kKZhER2x9PQe1VbnQ8EgMcE10KXqsh96UcYO3jCdpSa9CYSuEBLqIREen33aHLTyvd1/v5f/o3tXBQNLABoSfpT/+vnMVP63+bo+DNRLD+x8L5qgJ9G9NC5tas7se0XrkFiVZftKE3FCYELO/GjR3Dgew88Zf1+K0s6CpeYsxfWJDoSfnpd192qJ/OrXX/y8X2WolEEsACg89IfeHs/Uok/NadmbsL49Hm34hvzgIdau4d0UY4Atl7Wj/Uvvcp2lKbhUMBT+dNl3Pf5/8T0sebN7g+KEAJXyPMvshECSPWkZhOrOj5vTk79xorbPh/Rcp3CwgKAzqI/8s43manZP8DJySyWmNF3sAociUGPcnfaQfalV7TNagGeFPiko3fm8PAdOSDCn4MXOyksteRGKoH0qszjiRWZt3Z/8FPfaE4yanUsAAj6c3+2GicmP2RGx16DiWJHra97rAqMxqQdEQDWb+jFllc+A05PzX8FkdXu5wS4p4q47wv/heJY9OfN1VIAnCm1IlVK96/8dNcvPfd3xMWvYwPQxlgA/P/27jzGrqu+A/j3nLu9+/YZz3i8xUu8JM5mEkrUJaKqREGIIETLIiRaKgoqgoYQ/gjUscElEJCoFEwWcDYSBF3gD9RI6SKQqqKUlkaIEgR2Esd2Esee8Wye5b2Z99699/SPO5OMnfF45m3n3Xu+H2k0cWSPf37vvnO/96wGi777t2/GxMyD6pXRt2C+Ltb659MUABbZAth67WZseOeNEDLd5wxUqzU0GoZtE6wUTv/Hb3Dyf17QXUnbXGu7cNWaP75wfFv5W8o/szf3vTd7+9eSMeuR2ooBwEDRA5/7AKarX1VnJq5ECxOe0hgAFmUdiR1v3Yvy7+zUXUpHmRQCpo+dwbF//xVqlXTNgbje9mC30IxLS8Afyp90Sv6H8/d862ftq4x6HQOAIcJPfcgWOzZ8Tk1VPouJmf52/My0zAFYSX8xgx233oTMFQO6S+mYtB8Y1BifwdEnf4Gps5O6S+mIfZaHdvRVCQF45cyUW/AOFg8/dl8bfiT1OAaAlAs/9aGcuGLwXjU+/eeo1rx2/uykrwJYLQFg45Yytr7nZlj5jO5yOiKNIUA1Arz41C9x9rendZfSMcstA2wHx7frmT7/odIDj9/W9h9OPYMBIKXCAx/vF3n/W+rc+T9BrdGRE/gCBTxj0MIiRwpsvX4LNrzjTfHjUsqkaXXAyH89hxeePtaR0/p6Sb/jYFvUubkqtmeF/mDuH9VU5S/K3/2BubNGU4oBIGWir316M4R4RA1PvB31oOOz2J6dAyrpbmPfIOdauOLmnVj3B1frLqXtgiBEtVpHUtuFmefP4Oi/pm+c/1J2OC7KUefDqO3KyB8q/Is6P/v+8nd/YMaLawAGgJSI7rvzKlRrj6oz47+PIOza4+mZRjwXwES+I7Hlhq0Y/KPrIKz0rBhQSqFarSdnSEApTPzqJZz42fOYO1/RXU3X2JbE9XC6+ndajlT+hsLTUqhbi4e/M93Vv5zajgEg4aIj+2/G+coR9erYm6Chu1Mh7gWoGtYLsJRnCWzeuwlDb9sH6XVktEWLWi0+O6BXm4horo7TPz2K0/93ysjtjbc4Lga78PS/HMsW8DcWf2kXM7fmv/zgGS1FUMsYABIqevTgH2N06n716tiey+3Y12mzEfDrOa0l9ARHCgxt6cPQLVenZtWAUgrz842e2jRo7uUxnPjP32LilXHdpWjjWhauhf6wKS2B7Mbic85Q4d25A4fTs7mCIRgAEiZ6/ItDGJ95Up0aubmVNfztNhIAJ2txjwABRd/B0N5NGLhlL6S//F7tSRJFCrWaxiAQRDj3zIs49fMXUOvxI3o7TQiBXbaLfO98/CFtgdy2/h+X/u6ht+uuhVaPASBBogc+f686NXwbqrWePNB+OoyXBTZavKQEgKyMhxWSfnVaAhgYyGPoLTtRuH6b7nJathgEGo2gK0MD82cncfrnxzF89NXETkyUUkAKgaBNwxRXOB4Geujmv5Sbc4LslQO35790/4O6a6HLYwBIgOihu96pzk58D+fOt2UDn06qK+C5+XhYoBn9FrDNBTIy3mXwVIomGLpSoG9dDn17NqJ8005Y2WT3DARBiEYj/mpbOxJGmHlxBCO/eQXnjg8jTMEuhdfYHjwFjEngbNRoOghIKXCF5aBf07j/qgkgO5Q/620u35I7cPiE7nLo0hgAelj08IH1mKr8s3pp5Hd1j/OvRYR4k6DxAJgK41+vRAIoW8AmBygs6dsYCYATKe3tlQCKORd92wbQf+MOZLas011SS8Iwei0MRGscmgrOVzD5wjBGjr2KyRSO619ne3CWfHyHpcKEClFb5SoLIQQKto2tSl7wc3qdZUvktvc9Vfz6Q7fqroWWxwDQo6Ij+z+oTpz9Hmbn9c/0aUGogMkQmAiBWgQsNnkZET/lF2R887eWeah5vhaHCBP4tkSh5CM3VEJh+3rk9mxK7IoCpRSCIEIYhgvflwSCMMLcmUlMnRrF+EujmHx1IvWb9Wx0XGxY5qm9JoBREWEOCvVIIVDx6yAQDxlkpEAOEuuVgJXgZtorefPZXYM3cJJg72EA6EHR/Xd+U71w5jYkZR12hzxTjXcbNJEAkHUt5BdDwZVDyO3cAOEmIxSoIMLcyRHMnjqHyrlp1C0LY8PnMTM6nZz9Bdok59jYE/XktJ2usV1L5fcOfTR/6L7HdddCr2MA6CHRg593UK09rU4O36y7Ft24tHB5rhTwXAtexoGb8+CVsvD6csgMFOFtKMMu5zpegwoi1EenUDs3hdrELOrnq6jNzKFeraE2H6DeCNGI1CUncCqlEDRCNBoBGkGIKOU9AFIK7BPJnu/RDkIKFHYPfL/4tW9/WHctFGMA6BHRYwe3q9Pjz2BkMh0LyFs0GgDHUzr+30lSxCFBvvYlIa3F7xKWHX+XtgXpWBBSIAoiqDBCtHAzvuArUq99hQvf622ejxJF8fyBoBGiEQRQCZrvsloXzwMwWX5L6Xj5vsd2666DGAB6QvTIgfeo42d+iJm57u7r2cNON4BXUrQCgFYvnlAYIGiECII2rjDQaLftIZ/8f0bbZMqZOX/X4DW5u75xSnctJmMA0Cx66K7b1G9fPoxG0ONre7rrRC1eBUAUNELU6/HeA1FCewd6ee2+Lk7GivLXbLw5d/DwL3TXYqr0nGCSQNHDB/5MHeXNfzlsK2mR7VjI5jIolfMoFLPIZFxImbSmK5nBpZMa86GcPTr8v5Uv336l7lpMlbRPUWpEjxx8tzr68hOo8+a/HF6YtBzbtuBnPZTKORRLOWR8F1YCTmI0ew3ApTXmAll5buS5ylc+M6S7FhP1/icnhaJHD/6heu6VH6HW4M3/EiRfGboMy5LwfQ/FUg6lcg5+1oNt9+at1gIv6Eupzzbs6vPnXqrcc0dedy2mYQDosuixL9yonn/1J726n3+vcNle0hpIKZHJuCgUsyiV88jmMj0VBrIcAVhRbbrmzR0/N1y55w6ul+yiZOwqkhLRd76wRx0/89+YnePrfhk5RlNqkpQCnufA8xxEUYR6LUCt3tC234BtSdgMAJc1PzmfEyfHRnJAn+5aTMFmtkuiJw656tS5ZzBV8XTXkgQMANQOUkpkfBelUg6FYhae50CI7nYv+YmbsKjP3Fi1fP7THz2muw5T8MrslomZf8PYVFF3GUlhCyDPq5PayLbj1QTlvjxyeR+O052OuPWcArgms6enrpo5+KmDuuswAfcB6ILoyP6Pq1+feqgrB6inSJpPA6TeEEUK9XoD9VrjwkOL2sS3bVytGADWynalKtyweVvurm+8oruWNOMzVodFDx/YqE4MP8ib/9oNWLxAqbOkFMhkXBRLC8sKMy5EG5egbBG8+TcjqEdi/tT4s7rrSDu2r502NvU0J/01xxLAZs4Jpi6xLAk/66FcziOXb30VgW/byHNHq6bNjVXL05/7qx/qriPNGAA6KLr/zm+q02Pc5aoFmxwg08WrdLMD7M1wGWLaDNjx+1pY5bXkug4KxSwKxSxcr7kjOrZw7L9lsy+Ov2/2S59+m+460ooBoEOiI/tvVi+e/WvddSSdBLDL686FutMDtrpA2QL62HanykYnfl+v8ePvq2XbFnK5DMrlPHzfg1zl8MAGx+XhP20QhQpzx0ef0l1HWjEAdMrEzPe5zW97FCSwJ4OO7aUmAOzxgPVLBmq6vFKMukQCuDoDrFvjoJyQIl5OWI5XEKw0PLDBcbEx4gXULrWZujv9+U/8g+460ogBoAOiI/vfpV4d36W7jjTps4CrMoDT5nbVl8C1y9wQOGczXZa+nQLA7oXenmYaQNe1UShmUSzl3rCvAG/+nVF9aeIDlXvuYL9cmzEAdIAam/427yDt12cB+3ygvw3NgACwxQFu8IHCMj+P717KXPSGCsTzPfb5QLHJ68my5MIphTlksx42ebz5d0owH8pwssKhgDbjPgBtFh2560Pq2RN/r7uOtJsOgZfrwMwaZ1nbIu7q3+AA3gpt9ck6MNxorUbqHdf7K28sdT6M3+/JcG0/VwAYcuIwaQOoVkLMViJEIdvVdrNdqQr7thRz+++d1V1LWnB5Wpupc5OHdddggqIFXOcDlShutCcDYE4By7W7WRnPIyhYcVf/arq9fD7Ipcrl3s+yFX/NR8BECMyEcbhsLHM9OSK+nvrtuFfKXvKzc3kL2ZyFubkIldkQQcAg0C5BPRLB2MyPAfye7lrSgj0AbRQd2f9J9ezJB3TXYbJAxY22QLyPgCWaG+eaDoHfzLe7OtLBE8BN2eb+bKiAcOG7AODJtU1GXQwCjeWSBK2ZZUsU37R5Q+6ub4zoriUN2APQRursxD26azCdLS58ImtWlrNjUqOV99ISiFfzN3lN+b6E70vUahFmZ0LU6wwCrQiDCI1zMz8BcL3uWtKAAaBNokcOvA+jUyXddVB72CIeMphZ45gw9Z7+HmjlPE/C8yTqdYXKbIj5eW4R2Ky5s9PXlnUXkRJ8zmmXqcqdukug9hrsoUVHtgC2u83PWO+WzU48wbJXCLRn1Ui7uK5AX7+NwfUOfJ/NbzPCRiRm7vrk13XXkQa8AtsgeuKQrYYnb9JdB7XXOrtzmw+t1S4v3s1ut6e7kksrWfHa+h3u2jfa6ZSLJ+n1CtsWKPfFQcDz2AyvVX109i9115AGvPLaYb7+GVRrPfScQe1gi3iJl279S7YmdkXvzk9Yun3ydjceP9et1w+Tsm2B/nU2+vptWL3wgiVEbbzaV/nKHf2660i6Hm1KEmZy9hO6S6DOuMLR+wQpAWy/6Kl/LXvZd1NpSV2uiNfG6zRor7z2v5dkMhKD6x3kCxa3oV6FKFIIp6sP664j6RLy8ehd0eNf7FfDkzzxL6VszTeybe4bNyzqxQCwXM/ERmf1p++1myXi4YgkEQIoFCwMDHJYYDXq52bfqbuGpONV1qpq7RAaPPQnzTY6emaSb7zEhLqi1XvHFQ8s8/oIxAfvdPM450W7vN57jVbrtWGBPpu9ASuoTc37lbtv53LAFjAAtEhNzrxfdw3Uebs9INfFT8s6Ox5HX44AsKkH5iYskojDynJsAeztwCFOK9nq9tbM/2ZlfImBQQd2L85i7AFKAcH56v2660gyBoBWTcyu110Cdd7iMbLdCAGDdvwEu5Ihp7s31ZWsd1Z+2s4I4Jou9QRscuKliGlh2wLrBjgkcCnB9Pw+3TUkGa+qFkSPHvxDzNf5GhrCFfHRwX0derqUAK704pv/5S4qid640VlidXVkJXBDpnNP5gLxa7ctYeP+qyEl0L/ORj6fgm6NNmvM1Iq6a0gy3rxaUWv8qe4SqLssAVyVaf4s+UspLBxuNLSGuQYbnQtn3uuww139WPvia7fDbe/KiqyMg9laXrskKhQtzgu4SFALReUrn9muu46kYgBoRbV2i+4SqPsWz5K/Mdv6hjdZGQ8tXNfk8MJuT99QwKAdf63VBge4yY9XV7Sy9H1xd8Qb/DhAmSDjS6wbcCAlU8CiqFL/rO4akirlmbmz1Ex1l+4aSB9XAHs8oO4Co0H8NbeKLd5dEQeHdVbrNy5HxCHg2DzQzd3lczJ+km+WJYAr3HjMfjIExgPgfHj5f4NE3OsxaMcrM0y8DTpOvEpgYryBiEcKIJydf5vuGpKKAaBJ0ROHMjhfKeiug/RzF8bBNzvxccSzEVCJ4iNkFeIvVwC+jM+lb/dkuJIVz7Q/Vov/zk4rWMBerz07/VkiXkI4YMc3/7no9a8I8Q1eAHBlvKlPdo3H8aaV4wj09TuYGG/A9BPdg5nadt01JBUDQLPqwXsR8Kg4upAt4o16ur1ZT3HhpnysFoeQTilZ8ZBFJ8YOJeKehW4ut0yyxYOFJicCo0NAY7bu664hqfhRa1at8Q7dJRAtVbCAfX5nVilIxOPt13To5k/N8TyJcp/Zz3FhEKFy9+1v0V1HEvGz3Kwg3KS7BKKLuSJ+Qm/nTnilhWBxqc1+SK9MhiFANUIGgCaYfdW0Igz7dJdAdCmDC+PqYwFwthHPSVgLgXii4iaHXfJJ4PsSYWhhZtrMYUkVRjt115BEDADNCsKy7hKIViLw+lK9agRMhfHXbBTPE1g6bCwRT7Qrynj+QsnSewoirV0+b6FWU6jXzFsaoIJwq+4akogBoEmqEeZ110C0WtmFGfRLu/FDBYSIb/R8yE+HctnC2Ghk3PJAFURDumtIIn7umxWEWd0lELXCEvE8ATYC6WFZAqWSec91qhGt011DEvGz36x6cJnjWoiIui/jS/hZs5p2FYQl3TUkkVlXSTvVG5wTTUQ9qVSyYbVjp6aEiNgj2xQGgGbVAr52RNSThIBRSwNVI8roriGJeBNrlmmzbIgoUVxXIGvIUIBSyox/aJvxRSMiSql8weLxwXRJDABERCllWQLZnCFnJdOaMQAQEaVYPs9eAFoeAwARUYpJCeTy7AWgN2IAICJKuXzegmRrTxfhJUFElHJCxCGAaCkGACIiA2RznAtAF2IAICIygBBAJsMmn17Hq4GIyBCmnRFAK+PVQERkCM+TkJLjABRjACAiMgh7AWgRrwQiIoP4Ppt9ivFKICIyiOMI2DaHAYgBgIjIOOwFIIABgIjIOK7Hpp8YAIiIjOM4HAIgBgAiIuMIwRBADABEREZiACAGACIiAzkum3/T8QogIjIQewCIAYCIyECOI3g6oOEYAIiIDMVeALMxABARGUpaDAAmYwAgIjKU5B3AaHz7iYgMxaOBzcYAQERkKN7/zcYAQERkKPYAmI0BgIjIUIJ3AKPx7SciMhR7AMzGAEBEZCiuAjAb334iIkNxJ0CzMQAQEREZiAGAiIjIQAwAREREBmIAICIiMhADABERkYEYAIiIiAzEAEBERGQgBgAiIiIDMQAQEREZyNZdAPUeBWAmBCoRMBvFv85LICeBgsXUSNSrGgqYXvjsViPAW/zcSsDnB5cuwgBAF5iLgOO1+Ma/1PjC96wEdnlxo0JEveNcAJyqA6Fa8j/D1/9zgwNscxng6XUMAPSa0QA4UQOiFX5PNQJ+PQdsd+MGhYj0UgCemwcmw5V/33ADOB8CezNAhmcAEBgGacF8dPmb/yKF+EmjsprfTEQddaZx+Zv/ovkIeLHW2XooORgACABwvL66m/8ihXioQF32dxJRp1Qj4JX62v7MdAicbXSmHkoWBgBCJYon/a1VNYobEyLSYyRoLoQPB20vhRKIAYDeMOFvLTgMQKTPbJMBfD4CAnbfGY8BgFBp4Sm+lfBARM1TiHvhmsXPLjEAEBotPAm08meJqHmBWtu8nYvxs0sMAERERAZiACAiIjIQAwAREZGBGACIiIgMxABARERkIAYAIiIiAzEAEBERGYgBgIiIyEAMAERERAZiACAiIjIQAwAREZGBGACIiIgMxABARERkIAYAIiIiAzEAEBERGYgBgIiIyEAMAERERAZiACAiIjIQAwAREZGBGACIiIgMxABARERkIAYAIiIiAzEAEBERGYgBgIiIyEAMAERERAZiACAiIjIQAwAREZGBGACIiIgMxABARERkIAYAIiIiAzEAEBERGYgBgIiIyEAMAERERAZiACAiIjIQAwAREZGBGACIiIgMxABARERkIAYAIiIiAzEAEBERGYgBgIiIyEAMAERERAZiACAiIjIQAwAREZGBGACIiIgMxABARERkIAYAIiIiAzEAEBERGYgBgIiIyEAMAM3KepHuEoiICLBcu6K7hiRiAGhWKTequwQiIgKsvHdMdw1JxADQJJHLHNVdAxERATLv/kh3DUnEANAs3/2p7hKIiEwnBCAz7rd115FEDADN8r2vor/AcSciIo2ym4ov5fbfO6u7jiRiAGiS/MihebFt6IOw+BISEeng+Hbkbipfp7uOpOLdqwXyY3c/JXZuelJ3HUREphECyO0avI1P/81jAGhVOfdesWfLk+wJICLqDsuRqrh36N78l+5/UHctSWbrLiDp5EcORQDeEz1y8F3qpZF/wsRMTndNRERp5Q9kz2e29b85d+DwCd21JB0DQJvIj939VPTEoQHM1f4Gc/W3qsr8XkxVBlGtsWuAiKhJtmspJ+9WrLx30ipmfli4+4G7ddeUFv8PwhaT+YGKFbYAAAAASUVORK5CYII=\"\n});\n\nfunction SvgElderlyIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: 75,\n height: 90,\n viewBox: \"0 0 75 75\",\n fill: \"url(#pattern0)\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgElderlyIcon);\nexport default __webpack_public_path__ + \"static/media/elderlyIcon.da1af734.svg\";\nexport { ForwardRef as ReactComponent };","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const BalloonContainer = styled.div<{ alignItems?: string }>`\n width: 100%;\n min-height: ${({ theme }) => theme.spacing(15)}px;\n display: flex;\n align-items: ${(props) => props.alignItems || 'center'};\n justify-content: center;\n flex-direction: row;\n`;\n\nexport const Balloon = styled.div`\n width: ${({ theme }) => theme.spacing(25)}px;\n min-height: ${({ theme }) => theme.spacing(11)}px;\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${({ theme }) => theme.spacing(1.5)}px;\n word-break: break-word;\n margin-bottom: 10px;\n`;\n\nexport const Balloons = styled.div`\n flex-direction: column;\n`;\n\nexport const PointBalloon = styled.div<{ marginTop?: string }>`\n width: 0;\n height: 0;\n border-top: ${({ theme }) => theme.spacing(1)}px solid transparent;\n border-bottom: ${({ theme }) => theme.spacing(1)}px solid transparent;\n border-right: ${({ theme }) => theme.spacing(1)}px solid\n ${({ theme }) => theme.palette.extra.color.grey.light};\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n margin-top: ${(props) => props.marginTop || '0'};\n`;\n\nexport const StyledText = styled(Typography)`\n color: ${({ theme }) => theme.palette.common.black};\n line-height: 1.2;\n white-space: pre-wrap;\n`;\n","import React from 'react';\nimport { ReactComponent as ElderlyIcon } from '../../assets/elderlyIcon.svg';\nimport {\n Balloon,\n BalloonContainer,\n Balloons,\n PointBalloon,\n StyledText,\n} from './styles';\n\ninterface Props {\n text?: string | string[];\n}\n\nconst MedicBalloon: React.FC<Props> = ({ text, children }) => {\n const isTextArray = Array.isArray(text);\n const balloonContainerAlignItems = isTextArray ? 'flex-start' : 'center';\n const pointBalloonMarginTop = isTextArray ? '35px' : '0';\n\n return (\n <BalloonContainer\n data-testid=\"medic-ballon\"\n alignItems={balloonContainerAlignItems}\n >\n <ElderlyIcon />\n <PointBalloon marginTop={pointBalloonMarginTop} />\n <Balloons>\n {Array.isArray(text) ? (\n text.map((t) => (\n <Balloon key={t}>\n <StyledText variant=\"subtitle1\">{t}</StyledText>\n </Balloon>\n ))\n ) : (\n <Balloon>\n <StyledText variant=\"subtitle1\">{text}</StyledText>\n {children}\n </Balloon>\n )}\n </Balloons>\n </BalloonContainer>\n );\n};\n\nexport default MedicBalloon;\n","import { FormControl } from '@material-ui/core';\nimport styled, { css } from 'styled-components';\n\nimport { colorMapping, ColorsType } from '../../styles/colorMapping';\nimport type { StyledKeyboardDatePickerProps } from './index';\n\nexport const StyledFormControl = styled(FormControl).attrs(({ variant }) => ({\n variant: variant || 'outlined',\n}))<{\n $color: ColorsType;\n $borderType: StyledKeyboardDatePickerProps['borderType'];\n}>`\n & .MuiInputBase-root {\n color: ${({ $color }) => colorMapping[$color]};\n ${({ $borderType, theme }) =>\n $borderType === 'flat'\n ? css`\n border-radius: ${theme.spacing(0.7)}px;\n `\n : ''}\n\n ${({ $color }) =>\n $color === 'secondary'\n ? css`\n background-color: white;\n `\n : ''}\n }\n & label:not(.Mui-error) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & input {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & textarea {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & .MuiInputAdornment-root .MuiIconButton-label {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & .MuiOutlinedInput-root:not(.Mui-error) {\n & fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n &:hover fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n &.Mui-focused fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n }\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n","import DateFnsUtils from '@date-io/date-fns';\nimport { FormHelperText } from '@material-ui/core';\nimport {\n KeyboardDatePicker,\n MuiPickersUtilsProvider,\n} from '@material-ui/pickers';\nimport { KeyboardDatePickerProps } from '@material-ui/pickers/DatePicker';\nimport { useFormikContext } from 'formik';\nimport React from 'react';\nimport { ColorsType } from '../../styles/colorMapping';\nimport { StyledFormControl } from './styles';\n\nexport type StyledKeyboardDatePickerProps = Omit<\n KeyboardDatePickerProps,\n 'color'\n> & {\n color?: ColorsType;\n maxDate?: string;\n borderType?: 'flat' | 'round';\n};\n\nconst StyledKeyboardDatePicker: React.FC<StyledKeyboardDatePickerProps> = ({\n name,\n label,\n disabled,\n maxDate,\n color = 'primary',\n inputVariant = 'outlined',\n margin = 'normal',\n size = 'small',\n value,\n onChange,\n onBlur,\n borderType = 'round',\n ...props\n}) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { errors, touched } = useFormikContext<any>();\n const hasError = touched[String(name)] && errors[String(name)];\n\n const [selectedDate, setSelectedDate] = React.useState(value || null);\n\n const handleDateChange = (date: Date | null) => {\n onChange(date);\n setSelectedDate(date);\n };\n\n return (\n <StyledFormControl\n $color={disabled ? 'black' : color}\n $borderType={borderType}\n fullWidth\n disabled={disabled}\n error={Boolean(hasError)}\n >\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\n <>\n <KeyboardDatePicker\n format=\"dd/MM/yyyy\"\n invalidDateMessage={true}\n minDateMessage={false}\n maxDateMessage={true}\n name={name}\n margin={margin}\n label={label}\n inputVariant={inputVariant}\n value={selectedDate}\n clearable\n onChange={(date) => handleDateChange(date)}\n onBlur={onBlur}\n error={Boolean(hasError)}\n size={size}\n {...props}\n maxDate={maxDate}\n disabled={disabled}\n />\n {Boolean(hasError) && (\n <FormHelperText>{errors[String(name)]}</FormHelperText>\n )}\n </>\n </MuiPickersUtilsProvider>\n </StyledFormControl>\n );\n};\n\nexport default StyledKeyboardDatePicker;\n","import React, { ForwardRefRenderFunction } from 'react';\nimport MuiMenuItem, { MenuItemProps } from '@material-ui/core/MenuItem';\nimport styled from 'styled-components';\n\nimport { ColorsType, colorMapping } from '../styles/colorMapping';\n\ntype StyledMenuItemProps = {\n color?: ColorsType;\n} & MenuItemProps;\n\nconst MenuItem = styled(MuiMenuItem)<{\n $color: ColorsType;\n}>`\n color: ${({ $color }) => colorMapping[$color]};\n` as React.FC<{\n $color: ColorsType;\n}>;\n\nconst StyledMenuItem: ForwardRefRenderFunction<unknown, StyledMenuItemProps> = (\n { color = 'primary', children, ...rest },\n ref\n) => (\n <MenuItem ref={ref} $color={color} {...rest}>\n {children}\n </MenuItem>\n);\n\nexport default React.forwardRef(StyledMenuItem);\n","import { clientSideScheme } from '@cuidador/whitelabel';\nimport { FormControlLabel, Typography } from '@material-ui/core';\nimport styled from 'styled-components';\nimport { FormCardContainer } from '../../components/FormCardContainer';\nimport PasswordTextField from '../../components/PasswordField';\n\nexport const Screen = styled.div`\n background-color: ${({ theme }) => theme.palette.common.white};\n background-size: cover;\n background-position: center;\n padding: ${({ theme }) => theme.spacing(2)}px;\n display: flex;\n flex: 1;\n flex-direction: column;\n button {\n align-self: center;\n }\n`;\n\nexport const Logo = styled.img.attrs(() => {\n const { logoLightUrl } = clientSideScheme();\n return { src: logoLightUrl };\n})`\n max-width: 500px;\n max-height: 45px;\n width: 100%;\n margin-top: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const LogoContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n`;\n\nexport const Container = styled.div`\n flex-direction: inherit;\n flex: inherit;\n form {\n flex: 1;\n flex-direction: inherit;\n flex: inherit;\n }\n`;\n\nexport const ProfileContainer = styled.div`\n display: flex;\n flex-direction: column;\n margin: ${({ theme }) => theme.spacing(0, 0, 3, 0)};\n`;\n\nexport const Title = styled(Typography).attrs({\n variant: 'h6',\n align: 'center',\n})`\n font-size: 16px;\n font-weight: 500;\n margin: ${({ theme }) => theme.spacing(1, 0)};\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const Subtitle = styled(Typography).attrs({\n variant: 'body2',\n})`\n font-weight: bold;\n margin: ${({ theme }) => theme.spacing(2, 0, 0, 0)};\n`;\n\nexport const TabbedContainer = styled.div`\n padding: ${({ theme }) => theme.spacing(0, 0, 0, 1)};\n box-sizing: border-box;\n width: 100%;\n`;\n\nexport const VisibilityContainer = styled(FormCardContainer)<{\n $active?: boolean;\n}>`\n display: ${({ $active }) => ($active ? 'inherit' : 'none')};\n flex-direction: inherit;\n flex: inherit;\n form {\n flex: 1;\n display: ${({ $active }) => ($active ? 'inherit' : 'none')};\n flex-direction: inherit;\n flex: inherit;\n }\n`;\n\nexport const StyledFormControlLabel = styled(FormControlLabel)`\n color: ${({ theme }) => theme.palette.primary.dark};\n & a,\n & .MuiIconButton-root {\n color: ${({ theme }) => theme.palette.primary.dark};\n }\n`;\n\nexport const PasswordInstructions = styled(Typography).attrs({\n variant: 'caption',\n})`\n margin: 0;\n & ul {\n margin: 0;\n padding-left: ${({ theme }) => theme.spacing(2)}px;\n list-style-position: inside;\n }\n`;\n\nexport const ButtonContainer = styled.div`\n text-align: center;\n button {\n margin: ${({ theme }) => theme.spacing(0, 1)};\n }\n margin: ${({ theme }) => theme.spacing(4)}px;\n`;\n\nexport const FooterContainer = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n padding: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const SuccessContainer = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n button {\n align-self: center;\n }\n`;\n\nexport const StyledFormikTextPassword = styled(PasswordTextField)`\n & label:not(.Mui-error) {\n color: grey;\n }\n & input {\n color: black;\n ::-webkit-calendar-picker-indicator {\n filter: invert(1);\n }\n }\n & textarea {\n color: black;\n }\n & .MuiInputAdornment-root .MuiIconButton-label {\n color: black;\n }\n & .MuiOutlinedInput-root:not(.Mui-error) {\n & fieldset {\n border-color: black;\n color: black;\n }\n &:hover fieldset {\n border-color: black;\n color: black;\n }\n &.Mui-focused fieldset {\n border-color: black;\n color: black;\n }\n }\n`;\n\nexport const StyledError = styled(Typography)`\n color: ${({ theme }) => theme.palette.error.main};\n font-size: 1em;\n`;\n\nexport const MessageContainer = styled.div`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n`;\n\nexport const ContentContainer = styled.div`\n margin-top: ${({ theme }) => theme.spacing(3)}px;\n width: 100%;\n display: flex;\n align-items: center;\n flex-direction: column;\n`;\n","import { CaregiverModel, SupporterModel, UserModel } from '@cuidador/database';\nimport * as Sentry from '@sentry/react';\nimport { format } from 'date-fns';\nimport jwt from 'jsonwebtoken';\nimport * as yup from 'yup';\nimport { CompleteSignupBody } from '../../hooks/useUser';\nimport {\n numberMask,\n phoneMask,\n UFoptions,\n validateCpf,\n validatePasswordStrength,\n} from '../../utils/inputs';\n\nexport type PersonalDataFormValues = typeof personalDataInitialValues;\n\nexport type RegisterFormTypes =\n | 'default'\n | 'caregiver'\n | 'supporter'\n | 'selfCare';\n\nexport const resolveFormTypeByRole = (roleId: number): RegisterFormTypes => {\n if (roleId === 6) {\n return 'supporter';\n } else if (roleId === 4) {\n return 'selfCare';\n } else if (roleId === 2) {\n return 'caregiver';\n } else {\n return 'default';\n }\n};\n\nexport const resolveValidationSchema = (formType: RegisterFormTypes) => {\n if (formType === 'caregiver') {\n return caregiverValidationSchema;\n } else if (formType === 'supporter') {\n return supporterValidationSchema;\n } else if (formType === 'selfCare') {\n return selfCareValidationSchema;\n } else {\n return defaultValidationSchema;\n }\n};\n\nexport const personalDataInitialValues: {\n picture: File | null;\n name: UserModel['name'];\n cpf: NonNullable<UserModel['cpf']>;\n email: UserModel['email'];\n phoneNumber: UserModel['phoneNumber'];\n gender: UserModel['gender'] | '';\n dateOfBirth: UserModel['dateOfBirth'];\n} = {\n picture: null,\n name: '',\n cpf: '',\n email: '',\n phoneNumber: '',\n gender: '',\n dateOfBirth: '',\n};\n\nconst personalDataValidationSchema = {\n name: yup\n .string()\n .required('Por favor, insira o nome completo')\n .min(3, 'O nome deve conter ao menos 3 caracteres')\n .test(\n 'isFullName',\n 'Por favor, insira o nome completo',\n (value) => (value || '').split(' ').length > 1\n ),\n cpf: yup\n .string()\n .required('Por favor, insira o CPF')\n .test('isCpfValid', 'Por favor, insira um CPF válido', (value) =>\n validateCpf(value || '')\n ),\n email: yup\n .string()\n .required('Por favor, insira um email')\n .email('Por favor, insira um e-mail válido'),\n phoneNumber: yup\n .string()\n .required('Por favor, insira um telefone')\n .min(14, 'Por favor, insira um telefone válido')\n .max(15, 'Por favor, insira um telefone válido'),\n gender: yup\n .string()\n .required('Por favor, insira o sexo')\n .oneOf(['male', 'female', 'other']),\n dateOfBirth: yup\n .date()\n .required('Por favor, insira a data de nascimento')\n .max(new Date(), 'Por favor, insira uma data anterior a hoje')\n .nullable()\n .typeError('Por favor, insira uma data válida'),\n};\n\nexport type CaregiverFormValues = typeof caregiverInitialValues;\n\nexport const caregiverInitialValues: {\n worksAsCaregiverForTime: CaregiverModel['worksAsCaregiverForTime'] | '';\n hasTakenProfessionalCourse: CaregiverModel['hasTakenProfessionalCourse'];\n belongsToCaregiverAgency: CaregiverModel['belongsToCaregiverAgency'] | '';\n caregiverAgencyName: CaregiverModel['caregiverAgencyName'];\n} = {\n worksAsCaregiverForTime: '',\n hasTakenProfessionalCourse: '',\n belongsToCaregiverAgency: '',\n caregiverAgencyName: '',\n};\n\nexport const caregiverStepValidationSchema = {\n worksAsCaregiverForTime: yup\n .string()\n .oneOf([\n 'lessThan1Year',\n 'lessThan3Years',\n 'lessThan5Years',\n 'moreThan5Years',\n ]),\n hasTakenProfessionalCourse: yup.string(),\n belongsToCaregiverAgency: yup.boolean(),\n caregiverAgencyName: yup.string(),\n};\n\nexport type SupporterFormValues = typeof supporterInitialValues;\n\nexport const supporterInitialValues: {\n occupation: SupporterModel['occupation'] | '';\n document: SupporterModel['document'] | '';\n documentProvince: SupporterModel['documentProvince'] | '';\n specialty: SupporterModel['specialty'] | '';\n} = {\n occupation: '',\n document: '',\n documentProvince: '',\n specialty: '',\n};\n\nexport const supporterStepValidationSchema = {\n occupation: yup\n .string()\n .oneOf([\n 'doctor',\n 'nurse',\n 'nursingTechnician',\n 'physicalTherapist',\n 'psychologist',\n 'occupationalTherapist',\n 'physicalEducator',\n 'nutritionist',\n 'speechTherapist',\n 'dentist',\n 'another',\n ])\n .required('Por favor, selecione uma profissão'),\n document: yup.string(),\n documentProvince: yup.string().oneOf(UFoptions.map((item) => item.value)),\n specialty: yup.string(),\n};\n\nexport type SelfCareFormValues = typeof selfCareInitialValues;\n\nexport const selfCareInitialValues: {\n educationLevel: CaregiverModel['educationLevel'];\n} = {\n educationLevel: '',\n};\n\nexport const selfCareDataValidationSchema = {\n educationLevel: yup.mixed().nullable(),\n};\n\nexport type PasswordFormValues = {\n password: string;\n passwordConfirmation: string;\n termsAccepted: boolean;\n};\n\nexport const passwordInitialValues = {\n password: '',\n passwordConfirmation: '',\n termsAccepted: false,\n};\n\nconst passwordValidationSchema = {\n password: yup\n .string()\n .required('Por favor, insira a senha')\n .test(\n 'isValidPassword',\n 'Por favor, insira uma senha que atenda aos critérios listados abaixo',\n (value) => validatePasswordStrength(value || '')\n ),\n passwordConfirmation: yup\n .string()\n .required('Por favor, insira a confirmação da senha')\n .oneOf([yup.ref('password'), ''], 'As senhas devem ser iguais'),\n termsAccepted: yup\n .boolean()\n .equals(\n [true],\n 'Por favor, leia e aceite nossos termos e polÃticas de privacidade'\n ),\n};\n\nexport const genderOptions = [\n { value: 'male', label: 'Masculino' },\n { value: 'female', label: 'Feminino' },\n { value: 'other', label: 'N/A' },\n];\n\nexport const worksAsCaregiverForTimeOptions = [\n { value: 'lessThan1Year', label: 'Menos de um ano' },\n { value: 'lessThan3Years', label: 'Entre 1 e 3 anos' },\n { value: 'lessThan5Years', label: 'Entre 3 e 5 anos' },\n { value: 'moreThan5Years', label: 'Mais de 5 anos' },\n];\n\nexport const hasTakenProfessionalCourseOptions = [\n { value: 1, label: 'Sim' },\n { value: 0, label: 'Não' },\n];\n\nexport const occupationOptions = [\n { value: 'doctor', label: 'Medicina' },\n { value: 'nurse', label: 'Enfermagem' },\n { value: 'nursingTechnician', label: 'Técnico em Enfermagem' },\n { value: 'physicalTherapist', label: 'Fisioterapia' },\n { value: 'psychologist', label: 'Psicologia' },\n { value: 'occupationalTherapist', label: 'Terapia Ocupacional' },\n { value: 'physicalEducator', label: 'Educação FÃsica' },\n { value: 'nutritionist', label: 'Nutrição' },\n { value: 'speechTherapist', label: 'Fonoaudiologia' },\n { value: 'dentist', label: 'Odontologia' },\n { value: 'another', label: 'Outra' },\n];\n\nexport const educationLevelOptions = [\n { value: 'none', label: 'Nenhuma (analfabeto)' },\n { value: 'reads-and-writes', label: 'Lê e escreve' },\n { value: 'incomplete-elementary', label: 'Ensino fundamental incompleto' },\n { value: 'complete-elementary', label: 'Ensino fundamental completo' },\n { value: 'incomplete-highschool', label: 'Ensino médio incompleto' },\n { value: 'complete-highschool', label: 'Ensino médio completo' },\n { value: 'incomplete-college', label: 'Ensino superior incompleto' },\n { value: 'complete-college', label: 'Ensino superior completo' },\n];\n\nexport type FormValues = PersonalDataFormValues &\n CaregiverFormValues &\n SupporterFormValues &\n SelfCareFormValues &\n PasswordFormValues;\n\nexport const formDataToCompleteSignupRequest = (\n values: FormValues,\n formType: RegisterFormTypes\n): CompleteSignupBody => ({\n userData: resolveUserData(values),\n caregiverData: resolveCaregiverData(values, formType),\n supporterData: resolveSupporterData(values, formType),\n});\n\nconst resolveUserData = (values: FormValues): UserModel => {\n return {\n name: values.name,\n cpf: numberMask(values.cpf),\n email: values.email,\n phoneNumber: numberMask(`55${values.phoneNumber}`),\n password: values.password,\n gender: values.gender || 'other', // [TODO] Change 'other' to 'not-informed' when exists\n dateOfBirth: format(new Date(values.dateOfBirth || ''), 'yyyy-MM-dd'),\n };\n};\n\nconst resolveCaregiverData = (\n values: FormValues,\n formType: RegisterFormTypes\n): CaregiverModel | undefined => {\n if (formType !== 'caregiver' && formType !== 'selfCare') {\n return undefined;\n }\n return {\n worksAsCaregiverForTime: values.worksAsCaregiverForTime || undefined,\n hasTakenProfessionalCourse: values.hasTakenProfessionalCourse || undefined,\n belongsToCaregiverAgency:\n Boolean(values.belongsToCaregiverAgency) || undefined,\n caregiverAgencyName: !!values.belongsToCaregiverAgency\n ? values.caregiverAgencyName\n : undefined,\n educationLevel: values.educationLevel || undefined,\n };\n};\n\nconst resolveSupporterData = (\n values: FormValues,\n formType: RegisterFormTypes\n): SupporterModel | undefined => {\n if (formType !== 'supporter') {\n return undefined;\n }\n return {\n document: values.document || undefined,\n documentProvince: values.documentProvince || undefined,\n occupation: values.occupation || undefined,\n specialty: values.specialty || undefined,\n };\n};\n\nexport type CompleteSignupTokenPayload = {\n id: number;\n roleId: number;\n name: UserModel['name'];\n cpf: NonNullable<UserModel['cpf']>;\n phoneNumber: UserModel['phoneNumber'];\n email: UserModel['email'];\n};\n\nexport const resolvePendingSignupJWTData = (\n token: string\n): CompleteSignupTokenPayload | null => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const payload = jwt.decode(token) as any;\n return {\n id: payload.id,\n roleId: payload.roleId,\n name: payload.name || '',\n cpf: payload.cpf || '',\n phoneNumber: phoneMask(payload.phoneNumber || ''),\n email: payload.email || '',\n };\n } catch (err) {\n Sentry.captureException(err);\n return null;\n }\n};\n\nconst caregiverValidationSchema = yup.object().shape({\n ...personalDataValidationSchema,\n ...caregiverStepValidationSchema,\n ...passwordValidationSchema,\n});\n\nconst selfCareValidationSchema = yup.object().shape({\n ...personalDataValidationSchema,\n ...selfCareDataValidationSchema,\n ...passwordValidationSchema,\n});\n\nconst supporterValidationSchema = yup.object().shape({\n ...personalDataValidationSchema,\n ...supporterStepValidationSchema,\n ...passwordValidationSchema,\n});\n\nconst defaultValidationSchema = yup.object().shape({\n ...personalDataValidationSchema,\n ...passwordValidationSchema,\n});\n\nexport const formInitialValues = {\n ...personalDataInitialValues,\n ...caregiverInitialValues,\n ...supporterInitialValues,\n ...selfCareInitialValues,\n ...passwordInitialValues,\n};\n","import { APIError } from '@cuidador/lib'\nimport { Checkbox, FormHelperText } from '@material-ui/core'\nimport * as Sentry from '@sentry/react'\nimport { AxiosError } from 'axios'\nimport { format } from 'date-fns'\nimport { Form, Formik, FormikErrors, FormikProps } from 'formik'\nimport qs from 'query-string'\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport { toast } from 'react-toastify'\nimport {\n FormCardContainer,\n StyledBoldTitle,\n StyledFormikSelect,\n StyledFormikTextField,\n StyledFormikTextPassword,\n} from '../../components/FormCardContainer'\nimport FormikSelectField from '../../components/Forms/FormikSelect'\nimport FormikTextField from '../../components/Forms/FormikTextField'\nimport HeaderBase from '../../components/Headers/HeaderBase'\nimport MedicBalloon from '../../components/MedicBalloon'\nimport PasswordRules from '../../components/PasswordRules'\nimport ProfilePicture from '../../components/ProfilePicture'\nimport StyledButton from '../../components/StyledButton'\nimport StyledKeyboardDatePicker from '../../components/StyledKeyboardDatePicker'\nimport StyledMenuItem from '../../components/StyledMenuItem'\nimport { AuthContext } from '../../contexts/auth'\nimport useUser from '../../hooks/useUser'\nimport { resolveErrorMessage } from '../../utils/error'\nimport { cpfMask, numberMask, phoneMask, UFoptions } from '../../utils/inputs'\nimport {\n ButtonContainer,\n Container,\n ContentContainer,\n FooterContainer,\n Logo,\n LogoContainer,\n MessageContainer,\n ProfileContainer,\n Screen,\n StyledFormControlLabel,\n Subtitle,\n TabbedContainer,\n VisibilityContainer,\n} from './styles'\nimport {\n educationLevelOptions,\n formDataToCompleteSignupRequest,\n formInitialValues,\n FormValues,\n genderOptions,\n hasTakenProfessionalCourseOptions,\n occupationOptions,\n resolveFormTypeByRole,\n resolvePendingSignupJWTData,\n resolveValidationSchema,\n worksAsCaregiverForTimeOptions,\n} from './utils'\n\nconst CompleteSignup: React.FC = () => {\n const history = useHistory()\n const location = useLocation()\n const formikFormRef = useRef<FormikProps<FormValues> | null>(null)\n\n const { completeSignup, checkSignupStatus, uploadProfilePicture } = useUser()\n const { signIn, error: signInError, refreshUserInfo, userInfo, setReloadUser } = useContext(AuthContext)\n const [validationError, setValidationError] = useState(false)\n const [submitted, setSubmitted] = useState(false)\n const [loading, setLoading] = useState(false)\n\n const { token: completeSignupToken } = qs.parse(location.search)\n\n useEffect(() => {\n if (userInfo && submitted) {\n setReloadUser(true)\n history.push('/')\n }\n }, [userInfo, submitted])\n\n const completeSignupTokenPayload = useMemo(() => {\n // avoids access without valid token\n if (completeSignupToken == null) {\n redirectToHome()\n return\n }\n\n const payload = resolvePendingSignupJWTData(String(completeSignupToken))\n\n if (!payload) {\n // Invalid token\n }\n\n return payload\n }, [completeSignupToken])\n\n const formType = useMemo(() => {\n if (!completeSignupTokenPayload) {\n return undefined\n }\n return resolveFormTypeByRole(completeSignupTokenPayload?.roleId)\n }, [completeSignupTokenPayload?.roleId])\n\n function redirectToHome () {\n history.replace('/')\n }\n\n const userIdFromTokenPayload = Number(completeSignupTokenPayload?.id)\n\n useEffect(() => {\n checkSignupStatus(userIdFromTokenPayload).then(({ hasCompletedSignup }) => {\n if (hasCompletedSignup) {\n history.push('/login')\n }\n })\n }, [userIdFromTokenPayload])\n\n useEffect(\n function removeLoadingOnSignInError () {\n if (signInError) {\n toast.error(resolveErrorMessage(signInError))\n }\n },\n [signInError]\n )\n\n const handleSignIn = () => {\n const { cpf } = formikFormRef.current?.values as FormValues\n const { password } = formikFormRef.current?.values as FormValues\n return signIn(numberMask(cpf || ''), password)\n }\n\n const handleUploadProfilePicture = (picture: File, caregiverId: number) => {\n return new Promise<void>((resolve) => {\n setTimeout(async () => {\n try {\n await uploadProfilePicture(picture, caregiverId)\n resolve()\n } catch (err) {\n toast.error(\n 'Houve um erro durante o envio de sua imagem, tente novamente acessando seu perfil'\n )\n Sentry.captureException(err)\n }\n }, 0)\n })\n }\n\n const handleCompleteSignupSubmit = async () => {\n const formData = formikFormRef.current?.values as FormValues\n setLoading(true)\n\n if (!formType) return\n\n window.localStorage.setItem('completeSignUp', JSON.stringify({ userId: userIdFromTokenPayload, date: (new Date()).toUTCString() }))\n\n return completeSignup(\n formDataToCompleteSignupRequest(\n {\n ...formData,\n },\n formType\n ),\n String(completeSignupToken)\n )\n .then(async (response) => {\n await handleSignIn()\n return response\n })\n .then(async ({ id }) => {\n if (formData?.picture != null) {\n await handleUploadProfilePicture(formData.picture, id)\n }\n })\n .catch((err: AxiosError<APIError>) => {\n const displayMessage = resolveErrorMessage(err)\n const fieldError = err.response?.data.context?.key\n if (fieldError) {\n if (Object.keys(formInitialValues).includes(fieldError)) {\n formikFormRef.current?.setFieldError(\n fieldError,\n displayMessage || ''\n )\n }\n } else {\n toast.error(displayMessage)\n }\n })\n .finally(async () => {\n await refreshUserInfo()\n setSubmitted(true)\n setLoading(false)\n })\n }\n\n if (!formType) {\n return null\n }\n\n return (\n <>\n <HeaderBase\n centerContent={\n <LogoContainer>\n <Logo />\n </LogoContainer>\n }\n />\n <Screen>\n <MessageContainer>\n <MedicBalloon\n text={\n 'Olá, eu sou a Augusta!\\nSeja bem-vindo ao Cuidador de Confiança.\\n\\nPara começar, crie sua conta! '\n }\n />\n </MessageContainer>\n <Container>\n <Formik\n validateOnChange={false}\n innerRef={(ref) => (formikFormRef.current = ref)}\n initialValues={{\n ...formInitialValues,\n ...completeSignupTokenPayload,\n }}\n validationSchema={resolveValidationSchema(formType)}\n onSubmit={handleCompleteSignupSubmit}\n >\n {({ values, setFieldValue, errors, handleBlur }) => {\n return (\n <Form>\n <ContentContainer>\n <PersonalDataStepContainer\n setFieldValue={setFieldValue}\n values={values}\n handleBlur={handleBlur}\n errors={errors}\n />\n <VisibilityContainer $active={formType === 'selfCare'}>\n <SelfCareStepContainer />\n </VisibilityContainer>\n <VisibilityContainer $active={formType === 'caregiver'}>\n <CaregiverStepContainer values={values} />\n </VisibilityContainer>\n <VisibilityContainer $active={formType === 'supporter'}>\n <SupporterStepContainer values={values} />\n </VisibilityContainer>\n\n <PasswordStepContainer\n values={values}\n validationError={validationError}\n />\n\n <FooterContainer>\n <div>\n <StyledFormControlLabel\n control={\n <Checkbox\n name=\"termsAccepted\"\n value={values.termsAccepted}\n onChange={() =>\n setFieldValue(\n 'termsAccepted',\n !values.termsAccepted\n )\n }\n />\n }\n label={\n <a\n href=\"https://www.cuidadordeconfianca.com.br/termos-e-politicas\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n Eu li e aceito os Termos de Uso e PolÃticas de\n Privacidade\n </a>\n }\n />\n {errors.termsAccepted && (\n <FormHelperText error>\n {errors.termsAccepted}\n </FormHelperText>\n )}\n </div>\n\n <ButtonContainer>\n <StyledButton\n disabled={loading}\n type=\"submit\"\n size=\"large\"\n color=\"inherit\"\n data-testid=\"submit\"\n onClick={() => setValidationError(true)}\n >\n Finalizar\n </StyledButton>\n </ButtonContainer>\n </FooterContainer>\n </ContentContainer>\n </Form>\n )\n }}\n </Formik>\n </Container>\n </Screen>\n </>\n )\n}\n\nconst PersonalDataStepContainer: React.FC<{\n setFieldValue: (field: string, value: string | File | Date | null) => void\n values: FormValues\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleBlur: any\n errors: FormikErrors<FormValues>\n}> = ({ values, setFieldValue, handleBlur }) => {\n const finalDate = format(new Date('12/31/9999'), 'yyyy-MM-dd')\n\n return (\n <>\n <ProfileContainer>\n <ProfilePicture\n onChange={(file) => setFieldValue('picture', file)}\n isCreation={true}\n />\n </ProfileContainer>\n <FormCardContainer>\n <StyledBoldTitle variant=\"subtitle2\">\n Informações pessoais\n </StyledBoldTitle>\n\n <FormikTextField\n as={StyledFormikTextField}\n name=\"name\"\n color=\"primary\"\n label=\"Nome completo\"\n margin=\"normal\"\n inputProps={{ 'data-testid': 'name' }}\n />\n <FormikTextField\n as={StyledFormikTextField}\n name=\"cpf\"\n color=\"primary\"\n label=\"CPF\"\n type=\"tel\" // numeric keyboard without parsing to number\n margin=\"normal\"\n inputProps={{ 'data-testid': 'cpf' }}\n value={cpfMask(values.cpf)}\n />\n <FormikTextField\n as={StyledFormikTextField}\n name=\"email\"\n color=\"primary\"\n type=\"email\"\n label=\"E-mail\"\n margin=\"normal\"\n inputProps={{ 'data-testid': 'email' }}\n />\n <FormikTextField\n as={StyledFormikTextField}\n name=\"phoneNumber\"\n color=\"primary\"\n label=\"Telefone\"\n type=\"tel\"\n margin=\"normal\"\n inputProps={{ 'data-testid': 'phoneNumber' }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setFieldValue('phoneNumber', phoneMask(e.target.value))\n }}\n />\n <FormikSelectField\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n as={(props: any) => <StyledFormikSelect {...props} />}\n name=\"gender\"\n label=\"Sexo\"\n color=\"primary\"\n SelectDisplayProps={{\n 'data-testid': 'gender',\n }}\n >\n {genderOptions.map((item) => (\n <StyledMenuItem key={item.value} value={item.value} color=\"primary\">\n {item.label}\n </StyledMenuItem>\n ))}\n </FormikSelectField>\n <StyledKeyboardDatePicker\n name=\"dateOfBirth\"\n label=\"Data de nascimento\"\n color=\"primary\"\n value={values.dateOfBirth}\n onChange={(date: Date | null) => {\n setFieldValue('dateOfBirth', date)\n }}\n placeholder=\"dd/mm/aaaa\"\n margin=\"normal\"\n size=\"medium\"\n inputProps={{\n 'data-testid': 'dateOfBirth',\n max: finalDate,\n }}\n onBlur={handleBlur}\n InputLabelProps={{ shrink: true }}\n borderType=\"flat\"\n />\n </FormCardContainer>\n </>\n )\n}\n\nconst CaregiverStepContainer: React.FC<{\n values: FormValues\n}> = ({ values }) => {\n return (\n <>\n <StyledBoldTitle variant=\"subtitle2\" data-testid=\"secondStepTitle\">\n Outras informações\n </StyledBoldTitle>\n\n <TabbedContainer>\n <Subtitle>Há quanto tempo trabalha como cuidador?</Subtitle>\n <FormikSelectField\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n as={(props: any) => <StyledFormikSelect {...props} />}\n name=\"worksAsCaregiverForTime\"\n color=\"primary\"\n label=\"Selecione a resposta\"\n SelectDisplayProps={{\n 'data-testid': 'worksAsCaregiverForTime',\n }}\n >\n {worksAsCaregiverForTimeOptions.map((item) => (\n <StyledMenuItem key={item.value} value={item.value} color=\"primary\">\n {item.label}\n </StyledMenuItem>\n ))}\n </FormikSelectField>\n\n <Subtitle>Já realizou algum curso profissionalizante?</Subtitle>\n <FormikTextField\n as={StyledFormikTextField}\n name=\"hasTakenProfessionalCourse\"\n color=\"primary\"\n label=\"Descreva o que já realizou\"\n margin=\"normal\"\n multiline\n rows={4}\n inputProps={{ 'data-testid': 'hasTakenProfessionalCourse' }}\n />\n\n <Subtitle>Faz parte de alguma agência de cuidadores?</Subtitle>\n <FormikSelectField\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n as={(props: any) => <StyledFormikSelect {...props} />}\n name=\"belongsToCaregiverAgency\"\n color=\"primary\"\n label=\"Selecione a resposta\"\n SelectDisplayProps={{\n 'data-testid': 'belongsToCaregiverAgency',\n }}\n >\n {hasTakenProfessionalCourseOptions.map((item) => (\n <StyledMenuItem key={item.value} value={item.value} color=\"primary\">\n {item.label}\n </StyledMenuItem>\n ))}\n </FormikSelectField>\n {!!values.belongsToCaregiverAgency && (\n <FormikTextField\n as={StyledFormikTextField}\n name=\"caregiverAgencyName\"\n color=\"primary\"\n label=\"Qual agência?\"\n margin=\"normal\"\n inputProps={{ 'data-testid': 'caregiverAgencyName' }}\n />\n )}\n </TabbedContainer>\n </>\n )\n}\n\nconst SelfCareStepContainer: React.FC = () => {\n return (\n <>\n <StyledBoldTitle variant=\"subtitle2\" data-testid=\"secondStepTitle\">\n Outras informações\n </StyledBoldTitle>\n\n <FormikSelectField\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n as={(props: any) => <StyledFormikSelect {...props} />}\n name=\"educationLevel\"\n color=\"primary\"\n label=\"Qual a sua escolaridade?\"\n SelectDisplayProps={{\n 'data-testid': 'educationLevel',\n }}\n >\n {educationLevelOptions.map((educationLevelOption) => (\n <StyledMenuItem\n value={educationLevelOption.value}\n key={educationLevelOption.value}\n >\n {educationLevelOption.label}\n </StyledMenuItem>\n ))}\n </FormikSelectField>\n </>\n )\n}\n\nconst SupporterStepContainer: React.FC<{\n values: FormValues\n}> = ({ values }) => {\n return (\n <>\n <StyledBoldTitle variant=\"subtitle2\" data-testid=\"supporterStepTitle\">\n Outras informações\n </StyledBoldTitle>\n\n <FormikSelectField\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n as={(props: any) => <StyledFormikSelect {...props} />}\n name=\"occupation\"\n color=\"primary\"\n label=\"Profissão\"\n SelectDisplayProps={{\n 'data-testid': 'occupation',\n }}\n >\n {occupationOptions.map((item) => (\n <StyledMenuItem key={item.value} value={item.value}>\n {item.label}\n </StyledMenuItem>\n ))}\n </FormikSelectField>\n\n <FormikTextField\n as={StyledFormikTextField}\n name=\"document\"\n color=\"primary\"\n label=\"Número do Conselho\"\n margin=\"normal\"\n type=\"tel\" // numeric keyboard without parsing to number\n inputProps={{ 'data-testid': 'document' }}\n value={numberMask(values.document || '')}\n />\n\n <FormikSelectField\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n as={(props: any) => <StyledFormikSelect {...props} />}\n name=\"documentProvince\"\n color=\"primary\"\n label=\"UF\"\n SelectDisplayProps={{\n 'data-testid': 'documentProvince',\n }}\n >\n {UFoptions.map((item) => (\n <StyledMenuItem key={item.value} value={item.value}>\n {item.label}\n </StyledMenuItem>\n ))}\n </FormikSelectField>\n\n <FormikTextField\n as={StyledFormikTextField}\n name=\"specialty\"\n color=\"primary\"\n label=\"Especialidade\"\n margin=\"normal\"\n inputProps={{ 'data-testid': 'specialty' }}\n />\n </>\n )\n}\n\nconst PasswordStepContainer: React.FC<{\n values: FormValues\n validationError: boolean\n}> = ({ values, validationError }) => {\n return (\n <FormCardContainer>\n <StyledBoldTitle variant=\"subtitle2\">Crie sua senha</StyledBoldTitle>\n\n <FormikTextField\n as={StyledFormikTextPassword}\n color=\"primary\"\n name=\"password\"\n label=\"Senha\"\n margin=\"normal\"\n autoComplete=\"off\"\n inputProps={{\n 'data-testid': 'password',\n autocomplete: 'new-password',\n form: {\n autocomplete: 'off',\n },\n }}\n />\n <FormikTextField\n as={StyledFormikTextPassword}\n color=\"primary\"\n name=\"passwordConfirmation\"\n label=\"Confirmar senha\"\n margin=\"normal\"\n autoComplete=\"off\"\n inputProps={{\n 'data-testid': 'passwordConfirmation',\n autocomplete: 'new-password',\n form: {\n autocomplete: 'off',\n },\n }}\n />\n <PasswordRules\n password={values.password}\n validationError={validationError}\n />\n </FormCardContainer>\n )\n}\n\nexport default CompleteSignup\n","import styled from 'styled-components';\nimport { InputBase } from '@material-ui/core';\n\nexport const StyledInput = styled(InputBase)`\n margin: ${({ theme }) => theme.spacing(1, 0)};\n color: ${({ theme }) => theme.palette.primary.dark};\n border: 1px solid ${({ theme }) => theme.palette.primary.dark};\n padding: ${({ theme }) => theme.spacing(1, 1)};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n width: 100%;\n align-self: center;\n max-height: ${({ theme }) => theme.spacing(4.5)}px;\n input {\n font-size: ${({ theme }) => theme.typography.overline.fontSize};\n width: 100%;\n min-height: ${({ theme }) => theme.spacing(2.5)}px;\n padding: ${({ theme }) => theme.spacing(0, 1)};\n }\n .MuiInputAdornment-positionEnd {\n margin: 0;\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { InputAdornment } from '@material-ui/core';\nimport { Search, Clear } from '@material-ui/icons';\n\nimport { useDebouncedCallback } from 'use-debounce';\nimport qs from 'query-string';\n\nimport { StyledInput } from './styles';\nimport { useHistory } from 'react-router-dom';\n\ntype SearchTextFieldProps = {\n fieldName: string;\n defaultValue?: string;\n onChange?: (\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => void;\n onChangeDebounced?: (value: string) => void;\n};\n\nconst SearchTextField: React.FC<SearchTextFieldProps> = ({\n fieldName,\n defaultValue,\n onChange,\n onChangeDebounced,\n}) => {\n const [inputValue, setInputValue] = useState('');\n\n const history = useHistory();\n\n useEffect(() => setInputValue(defaultValue || ''), [defaultValue]);\n\n const debounced = useDebouncedCallback((value) => {\n const newSearch = {\n ...qs.parse(history.location.search),\n [fieldName]: value ? `%${value}%` : undefined,\n };\n const newUrl = qs.stringifyUrl({\n url: history.location.pathname,\n query: newSearch,\n });\n history.push(newUrl);\n if (onChangeDebounced) onChangeDebounced(value);\n }, 500);\n\n return (\n <StyledInput\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n debounced.callback(e.target.value);\n if (onChange) onChange(e);\n }}\n placeholder=\"Pesquisar conteúdos\"\n inputProps={{\n 'data-testid': 'searchField',\n }}\n endAdornment={\n inputValue ? (\n <InputAdornment position=\"end\">\n <Clear\n onClick={() => {\n setInputValue('');\n debounced.callback('');\n }}\n />\n </InputAdornment>\n ) : (\n <InputAdornment position=\"end\">\n <Search />\n </InputAdornment>\n )\n }\n />\n );\n};\n\nexport default SearchTextField;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 2C3.26522 2 3.51957 1.89464 3.70711 1.70711C3.89464 1.51957 4 1.26522 4 1C4 0.734784 3.89464 0.48043 3.70711 0.292893C3.51957 0.105357 3.26522 0 3 0H1C0.734784 0 0.48043 0.105357 0.292893 0.292893C0.105357 0.48043 0 0.734784 0 1V15C0 15.2652 0.105357 15.5196 0.292893 15.7071C0.48043 15.8946 0.734784 16 1 16H3C3.26522 16 3.51957 15.8946 3.70711 15.7071C3.89464 15.5196 4 15.2652 4 15C4 14.7348 3.89464 14.4804 3.70711 14.2929C3.51957 14.1054 3.26522 14 3 14H2V2H3ZM16.82 7.42L14 3.42C13.8471 3.20441 13.615 3.05814 13.3545 3.01317C13.0941 2.9682 12.8264 3.02818 12.61 3.18C12.5018 3.25579 12.4098 3.35224 12.3391 3.46381C12.2684 3.57537 12.2206 3.69982 12.1982 3.82998C12.1759 3.96015 12.1796 4.09344 12.2091 4.22217C12.2386 4.3509 12.2933 4.47252 12.37 4.58L14.09 7H6C5.73478 7 5.48043 7.10536 5.29289 7.29289C5.10536 7.48043 5 7.73478 5 8C5 8.26522 5.10536 8.51957 5.29289 8.70711C5.48043 8.89464 5.73478 9 6 9H14L12.2 11.4C12.1212 11.5051 12.0639 11.6246 12.0313 11.7518C11.9987 11.879 11.9915 12.0114 12.01 12.1414C12.0286 12.2714 12.0726 12.3965 12.1395 12.5095C12.2064 12.6225 12.2949 12.7212 12.4 12.8C12.5731 12.9298 12.7836 13 13 13C13.1552 13 13.3084 12.9639 13.4472 12.8944C13.5861 12.825 13.7069 12.7242 13.8 12.6L16.8 8.6C16.9281 8.43087 16.999 8.22539 17.0026 8.01326C17.0062 7.80114 16.9423 7.59338 16.82 7.42Z\",\n fill: \"white\"\n});\n\nfunction SvgSignOutIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 18,\n height: 16,\n viewBox: \"0 0 18 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSignOutIcon);\nexport default __webpack_public_path__ + \"static/media/sign-out-icon.d96f48c9.svg\";\nexport { ForwardRef as ReactComponent };","import { PatientModel } from '@cuidador/database';\nimport { useCallback, useReducer } from 'react';\nimport axios, { getCachedAxios } from '../config/axios';\nimport {\n createReducer,\n Item,\n PaginatedRequestParams,\n ReducerData,\n} from '../utils/store/index';\nimport useMedia from './useMedia';\n\nconst endpoint = '/user/patient';\n\nconst initialData: ReducerData<PatientModel> = {\n byId: {} as Record<string, Item<PatientModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst usePatient = () => {\n const { getMedia } = useMedia();\n const [state, dispatch] = useReducer(\n createReducer<PatientModel>(),\n initialData\n );\n\n const post = useCallback(async (data: PatientModel) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.post(`${endpoint}`, data);\n dispatch({ type: 'CREATE', payload: response.data });\n return Promise.resolve(response);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n const getById = useCallback(async (id: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(`${endpoint}/${id}`);\n dispatch({ type: 'GET_BY_ID', payload: response.data });\n return response.data as PatientModel;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const getAll = useCallback(async () => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get(`${endpoint}`);\n dispatch({ type: 'GET_ALL', payload: response.data });\n return response.data;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const getAllRelated = useCallback(async (params: PaginatedRequestParams) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get(`${endpoint}/related`, { params });\n dispatch({ type: 'PAGINATION', payload: response.data });\n return response.data;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n const getProfilePicture = useCallback(async (id: number) => {\n try {\n const response = await getMedia(`/media/profile-picture/patient/${id}`);\n return Promise.resolve(response);\n } catch (err) {\n return Promise.reject(err);\n }\n }, []);\n\n return {\n ...state,\n post,\n getProfilePicture,\n getById,\n getAll,\n getAllRelated,\n };\n};\n\nexport default usePatient;\n","import { DialogContentText } from '@material-ui/core';\nimport { ReportProblemOutlined } from '@material-ui/icons';\nimport styled from 'styled-components';\nimport StyledDialog from '../StyledDialog';\n\nexport const StyledDialogContainer = styled(StyledDialog)`\n .MuiDialogContent-root {\n background-color: ${({ theme }) => theme.palette.primary.main};\n }\n`;\n\nexport const StyledWarningIcon = styled(ReportProblemOutlined)`\n height: 50px;\n width: 50px;\n`;\n\nexport const StyledDialogContentText = styled(DialogContentText)`\n max-width: 380px;\n width: 100%;\n`;\n","import { DialogActions, DialogContent, DialogTitle } from '@material-ui/core';\nimport React from 'react';\nimport StyledButton from '../StyledButton';\nimport {\n StyledDialogContainer,\n StyledDialogContentText,\n StyledWarningIcon,\n} from './styles';\n\ninterface LogoutDialogProps {\n open: boolean;\n onConfirm: (() => void) | undefined;\n onClose: () => void;\n}\n\nconst LogoutDialog: React.FC<LogoutDialogProps> = ({\n open,\n onClose,\n onConfirm,\n}) => {\n return (\n <StyledDialogContainer open={open} onClose={onClose}>\n <DialogContent>\n <DialogTitle>\n <StyledWarningIcon />\n </DialogTitle>\n <StyledDialogContentText align=\"center\">\n Tem certeza de que quer sair da sua conta? Será necessário fazer login\n novamente para acessá-la\n </StyledDialogContentText>\n <DialogActions>\n <StyledButton onClick={onClose} color=\"inherit\">\n Voltar\n </StyledButton>\n <StyledButton onClick={onConfirm} variant=\"text\" color=\"inherit\">\n Sair\n </StyledButton>\n </DialogActions>\n </DialogContent>\n </StyledDialogContainer>\n );\n};\n\nexport default LogoutDialog;\n","import { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\nimport StyledButton from '../StyledButton';\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: ${({ theme }) => theme.spacing(-1)}px;\n`;\n\nexport const StyledOptions = styled.div`\n width: 100%;\n display: flex;\n flex: 1;\n flex-direction: row;\n justify-content: space-between;\n margin: ${({ theme }) => theme.spacing(2, 0)};\n`;\n\nexport const Button = styled(StyledButton)`\n width: 45%;\n`;\n","import { PatientModel } from '@cuidador/database';\nimport { Formik } from 'formik';\nimport React from 'react';\nimport * as yup from 'yup';\nimport * as Yup from 'yup';\nimport StyledSelect from '../Forms/FormikSelect';\nimport StyledMenuItem from '../StyledMenuItem';\nimport StyledSimpleModal from '../StyledSimpleModal';\nimport { Button, Form, StyledOptions } from './styles';\n\ninterface ModalProps {\n patients: PatientModel[];\n onSubmit: (data: FormValues) => void;\n onClose: () => void;\n open: boolean;\n}\n\nexport interface FormValues {\n patient: number | string;\n}\n\nconst initialValues: FormValues = {\n patient: '',\n};\n\nconst validationSchema = yup.object().shape({\n patient: Yup.string().required('Por favor, selecione um paciente.'),\n});\n\nconst SelectPatientModal: React.FC<ModalProps> = ({\n patients,\n onSubmit,\n onClose,\n open,\n}) => {\n return (\n <StyledSimpleModal open={open} title={'Selecione o paciente'}>\n <Formik\n validateOnChange={false}\n initialValues={initialValues}\n validationSchema={validationSchema}\n onSubmit={onSubmit}\n >\n {() => {\n return (\n <Form noValidate={true}>\n <StyledSelect\n name=\"patient\"\n label=\"Paciente\"\n SelectDisplayProps={{\n 'data-testid': 'select-patient',\n }}\n color=\"white\"\n >\n {patients.map((patient) => (\n <StyledMenuItem\n key={patient.id}\n value={patient.id}\n color=\"primary\"\n >\n {patient.name}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <StyledOptions>\n <Button size=\"medium\" color=\"inherit\" onClick={onClose}>\n Cancelar\n </Button>\n <Button type=\"submit\" size=\"medium\" color=\"inherit\">\n Continuar\n </Button>\n </StyledOptions>\n </Form>\n );\n }}\n </Formik>\n </StyledSimpleModal>\n );\n};\n\nexport default SelectPatientModal;\n","import { clientSideScheme } from '@cuidador/whitelabel';\nimport {\n Drawer,\n IconButton,\n Link,\n List,\n ListItem,\n ListItemText,\n} from '@material-ui/core';\nimport {\n AccessibilityNewRounded,\n Assignment,\n Close,\n Facebook,\n History,\n InsertDriveFile,\n Person,\n Phone,\n} from '@material-ui/icons';\nimport { Link as defaultLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const StyledDrawer = styled(Drawer)`\n display: flex;\n\n .MuiDrawer-paper {\n max-width: 300px;\n width: 100%;\n }\n`;\n\nexport const StyledCloseIcon = styled(Close)`\n color: ${({ theme }) => theme.palette.common.white};\n height: 1em;\n width: 1em;\n`;\n\nexport const StyledPersonIcon = styled(Person)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1em;\n width: 1em;\n`;\n\nexport const StyledPscIcon = styled(AccessibilityNewRounded)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1em;\n width: 1em;\n`;\n\nexport const StyledAssessment = styled(Assignment)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1.3em;\n width: 1.3em;\n`;\n\nexport const StyledComunityIcon = styled(Facebook)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1.1em;\n width: 1.1em;\n`;\n\nexport const StyledFileIcon = styled(InsertDriveFile)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1em;\n width: 1em;\n`;\n\nexport const StyledHistoryIcon = styled(History)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1.1em;\n width: 1.1em;\n`;\n\nexport const StyledPhoneIcon = styled(Phone)`\n background-color: ${({ theme }) => theme.palette.primary.dark};\n color: ${({ theme }) => theme.palette.common.white};\n border-radius: ${({ theme }) => theme.spacing(0.75)}px;\n padding: ${({ theme }) => theme.spacing(0.25)}px;\n margin-left: ${({ theme }) => theme.spacing(0.25)}px;\n width: 0.7em;\n height: 0.7em;\n`;\n\nexport const StyledLogoBlock = styled.img.attrs(() => {\n const { logoLightUrl } = clientSideScheme();\n return { src: logoLightUrl };\n})`\n max-width: 200px;\n max-height: 20px;\n width: 100%;\n margin-top: ${({ theme }) => theme.spacing(0.75)}px;\n margin-bottom: ${({ theme }) => theme.spacing(0.75)}px;\n`;\n\nexport const DrawerHeader = styled.div`\n background-color: ${({ theme }) => theme.palette.primary.main};\n display: flex;\n align-items: center;\n max-height: 72px;\n`;\n\nexport const StyledList = styled(List)`\n padding: 0;\n`;\n\nexport const StyledListItem = styled(ListItem)`\n &:hover {\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n }\n`;\n\nexport const StyledListItemText = styled(ListItemText)`\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const StyledLink = styled(defaultLink)`\n text-decoration: none;\n`;\n\nexport const StyledHrefLink = styled(Link)`\n text-decoration: none;\n\n &:hover {\n text-decoration: none;\n }\n`;\n\nexport const AppItemTitle = styled.span`\n color: ${({ theme }) => theme.palette.primary.dark};\n font-size: 16px;\n font-weight: 600;\n margin-bottom: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const AppItemLabel = styled.span`\n color: ${({ theme }) => theme.palette.primary.dark};\n font-size: 12px;\n`;\n\nexport const AppIcon = styled.img`\n height: 25px;\n width: 25px;\n margin-left: ${({ theme }) => theme.spacing(0.25)}px;\n`;\n\nexport const TextContainer = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: ${({ theme }) => theme.spacing(0.25)}px;\n`;\n\nexport const DrawerBody = styled.div`\n flex: 1;\n`;\n\nexport const DrawerFooter = styled.div`\n background-color: ${({ theme }) => theme.palette.primary.main};\n padding-inline: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const DrawerButton = styled(IconButton)`\n color: ${({ theme }) => theme.palette.common.white};\n border-radius: 0;\n font-size: 16px;\n display: flex;\n align-items: center;\n`;\n\nexport const DrawerFooterText = styled.span`\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n`;\n","import { PatientModel } from '@cuidador/database';\nimport { clientSideScheme } from '@cuidador/whitelabel';\nimport { IconButton } from '@material-ui/core';\nimport React, { useContext, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport { ReactComponent as SignOutIcon } from '../../../../assets/sign-out-icon.svg';\nimport { AuthContext } from '../../../../contexts/auth';\nimport useCanAccess from '../../../../hooks/useCanAccess';\nimport usePatient from '../../../../hooks/usePatient';\nimport PscIcon from '../../../Icons/PscIcon';\nimport LogoutDialog from '../../../LogoutDialog';\nimport SelectPatientModal, { FormValues } from '../../../SelectPatientModal';\nimport AppShortcut from './AppShortcut';\nimport MenuItem from './MenuItem';\nimport {\n AppIcon,\n DrawerBody,\n DrawerButton,\n DrawerFooter,\n DrawerFooterText,\n DrawerHeader,\n StyledAssessment,\n StyledCloseIcon,\n StyledComunityIcon,\n StyledDrawer,\n StyledFileIcon,\n StyledHistoryIcon,\n StyledHrefLink,\n StyledLink,\n StyledList,\n StyledLogoBlock,\n StyledPersonIcon,\n StyledPhoneIcon,\n} from './styles';\n\ninterface DrawerProps {\n handleToggleDrawer: () => void;\n isDrawerOpen: boolean;\n}\n\nenum PatientModalUrl {\n HYSTORY = '/historico/plantao/paciente',\n PROFESSIONAL_REPORT = '/avaliacao/paciente',\n}\n\nconst Drawer: React.FC<DrawerProps> = ({\n handleToggleDrawer,\n isDrawerOpen,\n}) => {\n const { signOut, userInfo } = useContext(AuthContext);\n const { getAll } = usePatient();\n const history = useHistory();\n\n const isGuardianAppAccess = userInfo?.user?.role?.guardianAppAccess;\n const [isLogoutDialogOpen, setIsLogoutDialogOpen] = useState(false);\n const [isPatientModalVisible, setIsPatientModalVisible] = useState(false);\n const [patients, setPatients] = useState<PatientModel[]>([]);\n const [patientModalUrl, setPatientModalUrl] = useState(\n PatientModalUrl.HYSTORY\n );\n const { isAllowedToRead: isAllowedToReadShifts } = useCanAccess('care/shift', userInfo);\n const { isAllowedToRead: isAllowedToReadProfessionalReport } = useCanAccess(\n 'report/professional'\n );\n const { isAllowedToRead: isAllowedToReadPatients } = useCanAccess('user/patient');\n const { appFShortcutIconUrl, appFUrl } = clientSideScheme();\n\n const handlePatientDataModal = (modalUrl: PatientModalUrl) => {\n getAll()\n .then((data) => {\n setPatientModalUrl(modalUrl);\n setPatients(data);\n setIsPatientModalVisible(true);\n })\n .catch(() => {\n toast.error(\n 'Erro ao recuperar lista de pacientes. Tente novamente daqui a pouco'\n );\n });\n };\n\n const handleToggleLogoutDialog = () => {\n setIsLogoutDialogOpen(!isLogoutDialogOpen);\n };\n\n const handleClosePatientModal = () => {\n setIsPatientModalVisible(false);\n };\n\n const handlePatientSelect = (data: FormValues) => {\n const url = `${patientModalUrl}/${data.patient}`;\n history.push(url);\n };\n\n return (\n <>\n <StyledDrawer\n open={isDrawerOpen}\n onClose={() => {\n handleToggleDrawer();\n }}\n >\n <DrawerHeader>\n <IconButton\n onClick={() => {\n handleToggleDrawer();\n }}\n >\n <StyledCloseIcon fontSize=\"large\" />\n </IconButton>\n <StyledLogoBlock />\n </DrawerHeader>\n <DrawerBody>\n <StyledList>\n <StyledLink to={'/minha-conta/pessoais'}>\n <MenuItem icon={<StyledPersonIcon />} label={'Minha conta'} />\n </StyledLink>\n {isAllowedToReadPatients && (\n <StyledLink to={'/pessoas-sob-cuidado'}>\n <MenuItem\n icon={<PscIcon variant=\"dark\" />}\n label={'Pessoas sob cuidado'}\n />\n </StyledLink>\n )}\n <StyledLink to={'/ajuda'}>\n <MenuItem icon={<StyledPhoneIcon />} label={'Me ajuda'} />\n </StyledLink>\n {isAllowedToReadShifts && (\n <MenuItem\n icon={<StyledHistoryIcon />}\n label=\"Histórico de plantões\"\n onClick={() => handlePatientDataModal(PatientModalUrl.HYSTORY)}\n />\n )}\n {isAllowedToReadProfessionalReport && (\n <MenuItem\n icon={<StyledAssessment />}\n label=\"Avaliação multiprofissional\"\n onClick={() =>\n handlePatientDataModal(PatientModalUrl.PROFESSIONAL_REPORT)\n }\n />\n )}\n <StyledHrefLink\n href={'https://www.facebook.com/groups/cuidadordeconfianca'}\n >\n <MenuItem icon={<StyledComunityIcon />} label={'Comunidade'} />\n </StyledHrefLink>\n <StyledHrefLink\n href={'https://www.cuidadordeconfianca.com.br/termos-e-politicas'}\n >\n <MenuItem icon={<StyledFileIcon />} label={'Termos de uso'} />\n </StyledHrefLink>\n {Boolean(isGuardianAppAccess) && (\n <StyledHrefLink href={appFUrl}>\n <AppShortcut\n icon={<AppIcon src={appFShortcutIconUrl} />}\n label={'Ir para o app de Gestão'}\n />\n </StyledHrefLink>\n )}\n </StyledList>\n </DrawerBody>\n <DrawerFooter>\n <DrawerButton\n onClick={() => {\n handleToggleLogoutDialog();\n }}\n >\n <SignOutIcon />\n <DrawerFooterText>Sair da conta</DrawerFooterText>\n </DrawerButton>\n </DrawerFooter>\n </StyledDrawer>\n <LogoutDialog\n open={isLogoutDialogOpen}\n onConfirm={signOut}\n onClose={handleToggleLogoutDialog}\n />\n <SelectPatientModal\n open={isPatientModalVisible}\n onClose={handleClosePatientModal}\n patients={patients}\n onSubmit={handlePatientSelect}\n />\n </>\n );\n};\n\nexport default Drawer;\n","import React from 'react';\nimport { ListItemIcon } from '@material-ui/core';\nimport {\n TextContainer,\n StyledListItem,\n AppItemTitle,\n AppItemLabel,\n} from '../styles';\n\ninterface AppShortcutProps {\n label: string;\n icon: JSX.Element;\n}\n\nconst AppShortcut: React.FC<AppShortcutProps> = ({ label, icon }) => {\n return (\n <StyledListItem button>\n <ListItemIcon>{icon}</ListItemIcon>\n <TextContainer>\n <AppItemTitle>Trocar de app</AppItemTitle>\n <AppItemLabel>{label}</AppItemLabel>\n </TextContainer>\n </StyledListItem>\n );\n};\n\nexport default AppShortcut;\n","import { ListItemIcon } from '@material-ui/core';\nimport React from 'react';\nimport { StyledListItem, StyledListItemText } from '../styles';\n\ninterface MenuItemProps {\n label: string;\n icon: JSX.Element;\n onClick?: () => void;\n}\n\nconst MenuItem: React.FC<MenuItemProps> = ({ label, icon, onClick }) => {\n return (\n <StyledListItem button onClick={onClick}>\n <ListItemIcon>{icon}</ListItemIcon>\n <StyledListItemText>{label}</StyledListItemText>\n </StyledListItem>\n );\n};\n\nexport default MenuItem;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 21.4286,\n height: 5,\n rx: 2,\n fill: \"white\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n y: 8,\n width: 21.4286,\n height: 5,\n rx: 2,\n fill: \"white\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"rect\", {\n y: 16,\n width: 21.4286,\n height: 5,\n rx: 2,\n fill: \"white\"\n});\n\nfunction SvgBurgerMenu(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 22,\n height: 21,\n viewBox: \"0 0 22 21\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2, _ref3, _ref4);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBurgerMenu);\nexport default __webpack_public_path__ + \"static/media/burger-menu.a8176db9.svg\";\nexport { ForwardRef as ReactComponent };","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { IconButton } from '@material-ui/core';\nimport { ReactComponent as Menu } from '../../../assets/burger-menu.svg';\n\nexport const IconBackground = styled(Link)`\n background-color: ${({ theme }) => theme.palette.common.white};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n min-width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-decoration: none;\n`;\n\nexport const StyledMenuIcon = styled(Menu)`\n color: ${({ theme }) => theme.palette.common.white};\n height: 1em;\n width: 1em;\n`;\n\nexport const StyledMenuButton = styled(IconButton)`\n padding: 0;\n`;\n","import React, { useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport useCanAccess from '../../../hooks/useCanAccess';\nimport PscIcon from '../../Icons/PscIcon';\nimport HeaderBase, { HeaderProps } from '../HeaderBase';\nimport Drawer from './Drawer';\nimport { IconBackground, StyledMenuButton, StyledMenuIcon } from './styles';\n\nconst HeaderWithDrawer: React.FC<HeaderProps> = ({ ...props }) => {\n const location = useLocation();\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n const { isAllowedToRead: isAllowedToReadPatients } = useCanAccess(\n 'user/patient'\n );\n\n const handleToggleDrawer = () => {\n setIsDrawerOpen(!isDrawerOpen);\n };\n\n return (\n <>\n <HeaderBase\n leftContent={\n <StyledMenuButton\n onClick={() => {\n handleToggleDrawer();\n }}\n >\n <StyledMenuIcon />\n </StyledMenuButton>\n }\n rightContent={\n isAllowedToReadPatients &&\n location.pathname !== '/' && (\n <IconBackground to=\"/pessoas-sob-cuidado\">\n <PscIcon />\n </IconBackground>\n )\n }\n {...props}\n />\n <Drawer\n isDrawerOpen={isDrawerOpen}\n handleToggleDrawer={handleToggleDrawer}\n />\n </>\n );\n};\n\nexport default HeaderWithDrawer;\n","import styled from 'styled-components';\n\nexport const ContainerFlat = styled.div`\n overflow: scroll;\n flex: 1;\n`;\n\nexport const BottomContainer = styled.div`\n display: flex;\n width: 100%;\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n justify-content: center;\n`;\n","import React from 'react';\n\nimport { ContainerFlat, BottomContainer } from './styles';\nimport StyledButton from '../StyledButton';\nimport { CircularProgress as MaterialCircularProgress } from '@material-ui/core';\n\ninterface LoadContainerProps<T> {\n data: Array<T>;\n loading: boolean;\n hasMoreItems: boolean;\n loadMoreText?: string;\n handlePagination: () => void;\n renderItem: (item: T) => JSX.Element;\n keyExtractor: (item: { item: T }) => string;\n}\n\nexport default function LoadMoreContainer<T>({\n data,\n loading,\n hasMoreItems,\n loadMoreText,\n handlePagination,\n renderItem,\n keyExtractor,\n}: LoadContainerProps<T>): JSX.Element {\n return (\n <ContainerFlat>\n {data.map((item) => (\n <div key={keyExtractor({ item })}>{renderItem(item)}</div>\n ))}\n {loading ? (\n <BottomContainer>\n <MaterialCircularProgress />\n </BottomContainer>\n ) : (\n hasMoreItems && (\n <BottomContainer>\n <StyledButton color=\"inherit\" onClick={() => handlePagination()}>\n {loadMoreText ? loadMoreText : 'Carregar mais'}\n </StyledButton>\n </BottomContainer>\n )\n )}\n </ContainerFlat>\n );\n}\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n svg {\n width: 50%;\n height: unset;\n color: ${({ theme }) => theme.palette.primary.main};\n }\n`;\n","import React from 'react';\nimport { Typography } from '@material-ui/core';\nimport { WifiOff } from '@material-ui/icons';\n\nimport { Container } from './styles';\n\nconst OfflineWarning: React.FC = () => {\n return (\n <Container>\n <WifiOff />\n <Typography variant=\"h5\">Sem conexão</Typography>\n <Typography>Fique online para ter acesso a esse recurso</Typography>\n </Container>\n );\n};\n\nexport default OfflineWarning;\n","import { ContentModel } from '@cuidador/database';\nimport { useCallback, useReducer } from 'react';\nimport axios from '../config/axios';\nimport {\n createReducer,\n Item,\n PaginatedRequestParams,\n ReducerData,\n} from '../utils/store/index';\n\nconst endpoint = '/care/content';\n\nconst initialData: ReducerData<ContentModel> = {\n byId: {} as Record<string, Item<ContentModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useContent = () => {\n const [state, dispatch] = useReducer(\n createReducer<ContentModel>(),\n initialData\n );\n\n const getPaginated = useCallback(async (params: PaginatedRequestParams) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get(`${endpoint}?orderBy=title`, {\n params: {\n ...params,\n limit: 10,\n },\n });\n dispatch({ type: 'PAGINATION', payload: response.data });\n return Promise.resolve(response.data);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n const getById = useCallback(async (id: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get(`${endpoint}/${id}`);\n dispatch({ type: 'GET_BY_ID', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n const getAllRecommendedContent = useCallback(async () => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get(`${endpoint}/recommended`);\n return Promise.resolve(response.data);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n return {\n ...state,\n getPaginated,\n getById,\n getAllRecommendedContent,\n };\n};\n\nexport default useContent;\n","import { Paper } from '@material-ui/core';\nimport styled from 'styled-components';\n\nconst StyledPaper = styled(Paper).attrs({ elevation: 0 })`\n color: ${({ theme }) => theme.palette.primary.main};\n padding: ${({ theme }) => theme.spacing(2)}px;\n border-radius: 21px;\n box-shadow: 0px 3px 6px #00000042;\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport default StyledPaper;\n","import {\n CircularProgress as MaterialCircularProgress,\n Typography,\n} from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport StyledPaper from '../../components/StyledPaper';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(2, 2)};\n display: flex;\n flex-direction: column;\n flex: 1;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const MessageContainer = styled.div`\n width: 100%;\n display: flex;\n flex: 1;\n color: ${({ theme }) => theme.palette.primary.dark};\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n text-align: center;\n`;\n\nexport const TypographyContainer = styled.div`\n width: 100%;\n display: flex;\n justify-content: flex-start;\n color: ${({ theme }) => theme.palette.primary.dark};\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const CardContainer = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n border-radius: 10px;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const StyledLink = styled(Link)`\n text-decoration: none;\n width: 100%;\n display: flex;\n`;\n\nexport const TextWrap = styled.div`\n max-width: 70vw;\n word-wrap: break-word;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 3; /* number of lines to show */\n -webkit-box-orient: vertical;\n`;\n\nexport const ContainerFlat = styled.div`\n overflow: scroll;\n flex: 1;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n\nexport const BottomContainer = styled.div`\n display: flex;\n width: 100%;\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n justify-content: center;\n`;\n\nexport const HeaderTitle = styled(Typography).attrs({\n variant: 'h6',\n})`\n text-align: center;\n margin-left: ${({ theme }) => theme.spacing(1)}px;\n flex-grow: 1;\n`;\n","import { ContentModel } from '@cuidador/database';\nimport { Typography } from '@material-ui/core';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport qs from 'query-string';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\n\nimport { APIError } from '@cuidador/lib';\nimport { AxiosError } from 'axios';\nimport ContentSearchTextField from '../../components/ContentSearchTextField';\nimport HeaderWithDrawer from '../../components/Headers/HeaderWithDrawer';\nimport { InternetConnectionContext } from '../../components/InternetConnectionCheck/InternetConnectionContext';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport LoadMoreContainer from '../../components/LoadMoreContainer';\nimport OfflineWarning from '../../components/OfflineWarning';\nimport useContent from '../../hooks/useContent';\nimport { resolveErrorMessage } from '../../utils/error';\nimport {\n CardBox,\n Container,\n HeaderTitle,\n MessageContainer,\n StyledLink,\n TextWrap,\n TypographyContainer,\n} from './styles';\n\nconst Content: React.FC = () => {\n const { internetStatus } = useContext(InternetConnectionContext);\n const [recommendedData, setRecommendedData] = useState<ContentModel[]>([]);\n const [loading, setLoading] = useState(false);\n const [hasMoreItems, setHasMoreItems] = useState(false);\n const [contents, setContents] = useState<ContentModel[]>([]);\n const [page, setPage] = useState(0);\n const [total, setTotal] = useState(0);\n const [searchValue, setSearchValue] = useState('');\n\n const {\n getPaginated,\n loading: loadingContent,\n getAllRecommendedContent,\n } = useContent();\n\n const limit = 10;\n const history = useHistory();\n\n const checkHasMoreItems = (totalActual: number) => {\n return totalActual > limit * (page + 1) ? true : false;\n };\n\n useEffect(() => {\n if (internetStatus === 'online') {\n getAllRecommendedContent().then((data) => {\n setRecommendedData(data);\n });\n }\n }, [internetStatus]);\n\n useEffect(() => {\n if (internetStatus === 'online') {\n fetchData();\n }\n }, [internetStatus, page]);\n\n const fetchData = async () => {\n const params = qs.parse(history.location.search);\n if (params) {\n const searchParam = qs.parse(history.location.search);\n const paramToString = searchParam[`content.title`]?.toString();\n setSearchValue(paramToString?.slice(1, -1) || ''); // using this to set the searchfield value if it comes back from a content item\n }\n getPaginated({\n ...params,\n page,\n })\n .then((data) => {\n if (page === 0) {\n setContents(data.results);\n } else {\n setContents([...contents, ...data.results]);\n }\n setTotal(data.total);\n setHasMoreItems(checkHasMoreItems(data.total));\n })\n .catch((err: AxiosError<APIError>) => {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const onChangeParams = () => {\n if (page === 0) {\n fetchData();\n } else {\n setPage(0);\n }\n };\n\n const handlePagination = () => {\n if (checkHasMoreItems(total)) {\n setLoading(true);\n setPage(page + 1);\n }\n };\n\n const renderContentItem = (item: ContentModel) => {\n return (\n <StyledLink to={`/conteudo/${item.id}`}>\n <CardBox>\n <TextWrap>\n <Typography variant=\"subtitle2\">{item.title}</Typography>\n </TextWrap>\n <ChevronRightIcon />\n </CardBox>\n </StyledLink>\n );\n };\n\n const renderOnlineContent = () => (\n <>\n <ContentSearchTextField\n fieldName=\"content.title\"\n onChangeDebounced={onChangeParams}\n defaultValue={searchValue}\n />\n {recommendedData?.length > 0 && (\n <>\n <TypographyContainer>\n <Typography variant=\"h6\">Conteúdos recomendados</Typography>\n </TypographyContainer>\n {recommendedData.map((item) => (\n <div key={item.id}>{renderContentItem(item)}</div>\n ))}\n </>\n )}\n <TypographyContainer>\n <Typography variant=\"h6\">Lista de conteúdos</Typography>\n </TypographyContainer>\n {contents?.length <= 0 ? (\n <MessageContainer>\n <Typography variant=\"subtitle1\">\n Não há nenhum conteúdo disponÃvel\n </Typography>\n </MessageContainer>\n ) : (\n <LoadMoreContainer\n data={contents}\n loading={loading}\n keyExtractor={({ item }) => String(item!.id)}\n loadMoreText={'Carregar mais conteúdos'}\n hasMoreItems={hasMoreItems}\n renderItem={renderContentItem}\n handlePagination={handlePagination}\n />\n )}\n </>\n );\n\n return (\n <>\n {loadingContent && !loading && (\n <LoadingBackdrop loading={loadingContent} />\n )}\n <HeaderWithDrawer\n centerContent={\n <HeaderTitle align=\"center\" variant=\"h6\">\n Conteúdos de A a Z\n </HeaderTitle>\n }\n />\n <Container>\n {internetStatus === 'online' ? (\n renderOnlineContent()\n ) : (\n <OfflineWarning />\n )}\n </Container>\n </>\n );\n};\n\nexport default Content;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(2, 3)};\n display: flex;\n flex-direction: column;\n flex: 1;\n color: ${({ theme }) => theme.palette.primary.dark};\n align-items: center;\n`;\n\nexport const TextWrap = styled.div`\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n width: 100%;\n word-wrap: break-word;\n text-align: justify;\n -webkit-hyphens: auto;\n -moz-hyphens: auto;\n -ms-hyphens: auto;\n hyphens: auto;\n`;\n\nexport const TitleWrap = styled.div`\n max-width: 100%;\n word-wrap: break-word;\n text-align: justify;\n -webkit-hyphens: auto;\n -moz-hyphens: auto;\n -ms-hyphens: auto;\n hyphens: auto;\n`;\n","import React, { useEffect } from 'react';\nimport { Container, TextWrap, TitleWrap } from './styles';\n\nimport parse from 'html-react-parser';\nimport { useParams } from 'react-router-dom';\nimport useContent from '../../../hooks/useContent';\n\nimport { Typography } from '@material-ui/core';\nimport Header from '../../../components/Headers/Header';\nimport LoadingBackdrop from '../../../components/LoadingBackdrop';\n\nconst ContentItem: React.FC = () => {\n const { getById, byId, loading } = useContent();\n const params = useParams<{ id: string }>();\n\n const itemId = parseInt(params.id);\n\n useEffect(() => {\n getById(itemId);\n }, [itemId]);\n\n const contentItem = byId[itemId];\n\n if (loading) {\n return <LoadingBackdrop loading={loading} />;\n }\n\n return (\n <>\n <Header title=\"Leitura de conteúdo\" leftButtonType=\"goBack\" />\n <Container>\n <TitleWrap>\n <Typography variant=\"h6\">{contentItem?.title}</Typography>\n </TitleWrap>\n <TextWrap>\n <Typography variant=\"subtitle2\">\n {parse(contentItem?.text || '')}\n </Typography>\n </TextWrap>\n </Container>\n </>\n );\n};\n\nexport default ContentItem;\n","import { Typography } from '@material-ui/core';\nimport { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\nimport StyledButton from '../StyledButton';\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n color: #000000;\n`;\n\nexport const FormContainer = styled.div`\n margin: 0 ${({ theme }) => theme.spacing(3)}px; ;\n`;\n\nexport const Centralizer = styled.div`\n align-items: center;\n flex-direction: column;\n display: flex;\n flex: 1;\n justify-content: space-evenly;\n`;\n\nexport const OptionsButton = styled(StyledButton)`\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n width: 100%;\n max-width: 220px;\n`;\n\nexport const StyledError = styled(Typography)`\n color: ${({ theme }) => theme.palette.error.main};\n font-size: 1em;\n`;\n","import * as Yup from 'yup';\n\nexport const validationSchema = Yup.object().shape({\n title: Yup.string().required('Por favor, insira o tÃtulo.'),\n description: Yup.string()\n .required('Por favor, insira a descrição.')\n .max(5000, 'A descrição deve conter no máximo 5000 caracteres.'),\n subCategoryId: Yup.string(),\n date: Yup.date()\n .required('Por favor, insira uma data.')\n .typeError('Por favor, insira uma data válida'),\n});\n\nexport enum TitleByOccupation {\n supervisor = 'Avaliação de supervisão',\n doctor = 'Avaliação de medicina',\n nurse = 'Avaliação de enfermagem',\n nursingTechnician = 'Avaliação de técnico em enfermagem',\n physicalTherapist = 'Avaliação de fisioterapia',\n psychologist = 'Avaliação de psicologia',\n occupationalTherapist = 'Avaliação de terapia ocupacional',\n physicalEducator = 'Avaliação de educação fÃsica',\n nutritionist = 'Avaliação de nutrição',\n speechTherapist = 'Avaliação de fonoaudiologia',\n dentist = 'Avaliação de odontologia',\n another = 'Outra',\n}\n\nexport const titleOptions = [\n {\n value: TitleByOccupation.supervisor,\n label: TitleByOccupation.supervisor\n },\n {\n value: TitleByOccupation.doctor,\n label: TitleByOccupation.doctor\n },\n {\n value: TitleByOccupation.nurse,\n label: TitleByOccupation.nurse\n },\n {\n value: TitleByOccupation.nursingTechnician,\n label: TitleByOccupation.nursingTechnician,\n },\n {\n value: TitleByOccupation.physicalTherapist,\n label: TitleByOccupation.physicalTherapist,\n },\n {\n value: TitleByOccupation.psychologist,\n label: TitleByOccupation.psychologist,\n },\n {\n value: TitleByOccupation.occupationalTherapist,\n label: TitleByOccupation.occupationalTherapist,\n },\n {\n value: TitleByOccupation.physicalEducator,\n label: TitleByOccupation.physicalEducator,\n },\n {\n value: TitleByOccupation.nutritionist,\n label: TitleByOccupation.nutritionist,\n },\n {\n value: TitleByOccupation.speechTherapist,\n label: TitleByOccupation.speechTherapist,\n },\n { value: TitleByOccupation.dentist, label: TitleByOccupation.dentist },\n { value: TitleByOccupation.another, label: TitleByOccupation.another },\n];\n\nexport const handleTitleByPatientOccupation = (\n occupation?: keyof typeof TitleByOccupation\n): string => {\n return occupation ? TitleByOccupation[occupation] : TitleByOccupation.another;\n};\n","import {\n EventSubCategoryModel,\n ProfessionalReportModel,\n} from '@cuidador/database';\nimport DateFnsUtils from '@date-io/date-fns';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ptBr from 'date-fns/locale/pt-BR';\nimport { Formik, setNestedObjectValues } from 'formik';\nimport React, { useContext } from 'react';\nimport { toast } from 'react-toastify';\nimport { AuthContext } from '../../contexts/auth';\nimport StyledSelect from '../Forms/FormikSelect';\nimport FormikTextField from '../Forms/FormikTextField';\nimport StyledKeyboardDatePicker from '../StyledKeyboardDatePicker';\nimport StyledMenuItem from '../StyledMenuItem';\nimport { Centralizer, Form, FormContainer, OptionsButton } from './styles';\nimport {\n handleTitleByPatientOccupation,\n titleOptions,\n validationSchema,\n} from './utils';\n\nexport interface Props {\n submit: (data: ProfessionalReportModel) => Promise<void | string | number>;\n cancel: () => void;\n subCategories: EventSubCategoryModel[];\n patientId: number;\n formValues?: FormValues;\n readOnly?: boolean;\n}\n\nexport interface FormValues {\n title: string;\n description: string;\n subCategoryId?: number | string;\n date: string;\n caregiver: string;\n}\n\nconst CreateProfessionalReportForm: React.FC<Props> = ({\n submit,\n cancel,\n subCategories,\n patientId,\n formValues,\n readOnly,\n}) => {\n const { userInfo } = useContext(AuthContext);\n\n const initialValues: FormValues = {\n title: handleTitleByPatientOccupation(userInfo?.supporter?.occupation),\n description: '',\n date: new Date().toISOString(),\n subCategoryId: '',\n caregiver: userInfo?.user?.name || '',\n };\n\n const formatAndSubmit = async (formValues: FormValues, isDraft: boolean) => {\n /* should never happen subCaregoryId with id 0 */\n\n const data: ProfessionalReportModel = {\n title: formValues.title,\n description: formValues.description,\n eventSubCategoryId:\n Number(formValues.subCategoryId) === 0\n ? undefined\n : Number(formValues.subCategoryId),\n date: new Date(formValues.date).toISOString(),\n patientId,\n isDraft,\n };\n await submit(data);\n };\n\n return (\n <FormContainer>\n <Formik\n validationSchema={validationSchema}\n initialValues={formValues || initialValues}\n onSubmit={(values) => formatAndSubmit(values, true)}\n validateOnChange={false}\n >\n {({\n isSubmitting,\n values,\n setTouched,\n validateForm,\n handleBlur,\n setFieldValue,\n }) => {\n const validateAndSubmit = async () => {\n const now = new Date();\n const date = new Date(values.date);\n let isFormValid = true;\n\n const validateFutureDate = () => {\n if (date > now) {\n isFormValid = false;\n toast.error(\n 'Por favor, escolha a data de hoje ou um dia anterior'\n );\n return;\n }\n };\n\n const triggerCustomValidation = async () => {\n const validationErrors = await validateForm();\n setTouched(setNestedObjectValues(validationErrors, true));\n validateFutureDate();\n if (Object.keys(validationErrors).length > 0) {\n isFormValid = false;\n }\n };\n\n await triggerCustomValidation();\n\n const isDraft = false;\n if (isFormValid) {\n formatAndSubmit(values, isDraft);\n }\n };\n\n return (\n <Form>\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <StyledKeyboardDatePicker\n name=\"date\"\n label=\"Data\"\n cancelLabel=\"Cancelar\"\n value={values.date}\n onChange={(date: Date | null) => {\n setFieldValue('date', date, true);\n }}\n placeholder=\"dd/mm/aaaa\"\n color=\"black\"\n margin=\"normal\"\n size=\"medium\"\n inputProps={{\n 'data-testid': 'date',\n disabled: readOnly,\n }}\n onBlur={handleBlur}\n InputLabelProps={{ shrink: true }}\n readOnly={readOnly}\n disabled={readOnly}\n />\n </MuiPickersUtilsProvider>\n <StyledSelect\n name=\"title\"\n label=\"TÃtulo\"\n SelectDisplayProps={{\n 'data-testid': 'title',\n }}\n color=\"black\"\n disabled={readOnly}\n >\n {titleOptions.map((item) => (\n <StyledMenuItem\n key={item.value}\n value={item.value}\n color=\"black\"\n >\n {item.label}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <FormikTextField\n color=\"black\"\n id=\"caregiver\"\n inputProps={{ 'data-testid': 'caregiver' }}\n label=\"Profissional Responsável\"\n name=\"caregiver\"\n margin=\"normal\"\n autoComplete=\"off\"\n disabled\n />\n <StyledSelect\n name=\"subCategoryId\"\n label=\"Intercorrência relacionada\"\n SelectDisplayProps={{\n 'data-testid': 'subCategoryId',\n }}\n color=\"black\"\n value={values.subCategoryId}\n disabled={readOnly}\n >\n {subCategories.map((item) => (\n <StyledMenuItem key={item.id} value={item.id} color=\"black\">\n {item.name}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <FormikTextField\n color=\"black\"\n id=\"description\"\n multiline\n rows={4}\n inputProps={{ 'data-testid': 'description', maxlength: 5000 }}\n label=\"Descrição\"\n name=\"description\"\n margin=\"normal\"\n autoComplete=\"off\"\n disabled={readOnly}\n />\n {!readOnly && (\n <Centralizer>\n <OptionsButton\n data-testid=\"draft-submit\"\n type=\"submit\"\n size=\"large\"\n color=\"inherit\"\n >\n Salvar como rascunho\n </OptionsButton>\n <OptionsButton\n data-testid=\"submit\"\n size=\"large\"\n color=\"inherit\"\n disabled={isSubmitting}\n onClick={validateAndSubmit}\n >\n Publicar\n </OptionsButton>\n <OptionsButton\n data-testid=\"cancel\"\n onClick={cancel}\n size=\"large\"\n color=\"inherit\"\n >\n Cancelar\n </OptionsButton>\n </Centralizer>\n )}\n </Form>\n );\n }}\n </Formik>\n </FormContainer>\n );\n};\n\nexport default CreateProfessionalReportForm;\n","import { ProfessionalReportModel } from '@cuidador/database';\nimport { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport const createOfflinePostProfessionalReport = (\n axios: AxiosInstance,\n data: ProfessionalReportModel\n) =>\n createOfflineProxy(axios, 'post', async () => {\n return {\n data: data,\n statusCode: 200,\n };\n });\n","import { ProfessionalReportModel } from '@cuidador/database';\nimport { useCallback } from 'react';\nimport axios from '../../config/axios';\nimport {\n ActionType,\n Item,\n PaginatedRequestParams,\n ReducerData,\n} from '../../utils/store/index';\nimport { createOfflineReducer } from '../../utils/store/offlineStore';\nimport useReducerWithLocalStorage from '../localstorage/useReducerWithLocalStorage';\nimport { createOfflinePostProfessionalReport } from './postOfflineProfessionalReport';\n\nconst endpoint = '/report/professional';\nconst PROFESSIONAL_REPORTS_LOCAL_KEY = 'professional-reports';\n\nconst initialData: ReducerData<ProfessionalReportModel> = {\n byId: {} as Record<string, Item<ProfessionalReportModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useProfessionalReport = (caregiverId?: number) => {\n const [state, dispatch] = useReducerWithLocalStorage<\n ReducerData<ProfessionalReportModel>,\n ActionType<ProfessionalReportModel>\n >({\n initializerArg: initialData,\n key: `${PROFESSIONAL_REPORTS_LOCAL_KEY}-${caregiverId}`,\n reducer: createOfflineReducer<ProfessionalReportModel>(),\n });\n\n const post = useCallback(async (data: ProfessionalReportModel) => {\n try {\n dispatch({ type: 'LOADING' });\n const postOfflineEvent = createOfflinePostProfessionalReport(axios, data);\n const response = await postOfflineEvent(endpoint, data);\n dispatch({ type: 'CREATE', payload: response.data });\n return Promise.resolve(response.data as ProfessionalReportModel);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n const getByPatientId = useCallback(\n async (patientId, params: PaginatedRequestParams) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get<{\n results: Item<ProfessionalReportModel>[];\n total: number;\n }>(`${endpoint}/by-patient/${patientId}`, {\n params,\n });\n dispatch({ type: 'PAGINATION', payload: response.data });\n return Promise.resolve(response.data);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n const getById = useCallback(async (id: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.get(`${endpoint}/${id}`);\n dispatch({ type: 'GET_BY_ID', payload: response.data });\n return Promise.resolve(response.data as ProfessionalReportModel);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n const deleteById = useCallback(async (id: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.delete(`${endpoint}/${id}`);\n dispatch({ type: 'REMOVE', payload: response.data });\n return Promise.resolve(response.data as number);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n }, []);\n\n const patch = useCallback(\n async (id: number, data: ProfessionalReportModel) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await axios.patch(`${endpoint}/${id}`, data);\n dispatch({ type: 'UPDATE', payload: response.data });\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n return {\n ...state,\n post,\n getByPatientId,\n getById,\n deleteById,\n patch,\n };\n};\n\nexport default useProfessionalReport;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\n","import {\n EventSubCategoryModel,\n PatientModel,\n ProfessionalReportModel,\n} from '@cuidador/database';\nimport React, { useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport CreateProfessionalReportForm from '../../components/CreateProfessionalReportForm';\nimport Header from '../../components/Headers/Header';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport usePatient from '../../hooks/usePatient';\nimport useProfessionalReport from '../../hooks/useProfessionalReport/indexs';\nimport useSubCategory from '../../hooks/useSubCategory';\nimport { Container } from './styles';\n\nconst CreateProfessionalReport: React.FC = () => {\n const { getAllComplications, loading } = useSubCategory();\n const { post } = useProfessionalReport();\n const { getById } = usePatient();\n const params = useParams<{ patientId: string }>();\n const patientId = parseInt(params.patientId);\n const history = useHistory();\n const [patient, setPatient] = useState<PatientModel>();\n const [subCategories, setSubCategories] = useState<EventSubCategoryModel[]>(\n []\n );\n\n useEffect(() => {\n loadComplications();\n loadPatient();\n }, []);\n\n const loadComplications = async () => {\n const subCategories = (await getAllComplications().catch(() =>\n toast.error('Erro ao carregar lista de intercorrências')\n )) as EventSubCategoryModel[];\n const noneOption: EventSubCategoryModel = {\n id: 0,\n name: 'Nenhuma',\n };\n const subCategoriesWithNone = [noneOption, ...subCategories];\n setSubCategories(subCategoriesWithNone);\n };\n\n const loadPatient = async () => {\n const patient = await getById(patientId).catch(() =>\n toast.error('Erro ao carregar dados do paciente.')\n );\n setPatient(patient as PatientModel);\n };\n\n const submitForm = async (data: ProfessionalReportModel) => {\n try {\n await post(data);\n toast.success('Avaliação multiprofissional adicionada!');\n history.goBack();\n } catch (error) {\n console.log(error);\n toast.error(\n 'Erro ao criar avaliação multiprofissional, tente novamente daqui a pouco.'\n );\n }\n };\n\n return (\n <>\n <Header leftButtonType=\"goBack\" title={`${patient?.name}`} />\n <Container>\n <CreateProfessionalReportForm\n patientId={patientId}\n subCategories={subCategories}\n cancel={history.goBack}\n submit={submitForm}\n />\n </Container>\n <LoadingBackdrop loading={loading} />\n </>\n );\n};\n\nexport default CreateProfessionalReport;\n","import { DateTimePicker } from '@material-ui/pickers';\nimport { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\nimport StyledButton from '../StyledButton';\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\nexport const FormContainer = styled.div`\n margin: 0 ${({ theme }) => theme.spacing(3)}px; ;\n`;\n\nexport const Centralizer = styled.div`\n align-items: center;\n flex-direction: column;\n display: flex;\n flex: 1;\n justify-content: space-evenly;\n`;\n\nexport const Button = styled(StyledButton)`\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n width: 100%;\n max-width: 220px;\n`;\n\nexport const OptionsButton = styled(StyledButton)`\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n width: 100%;\n max-width: 220px;\n`;\n\nexport const StyledDateTimePicker = styled(DateTimePicker)`\n & .MuiInputBase-root {\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n }\n & .MuiOutlinedInput-input,\n label {\n border-color: ${({ theme }) => theme.palette.primary.main};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n background-color: ${({ theme }) => theme.palette.common.white};\n color: ${({ theme }) => theme.palette.primary.main};\n }\n & .MuiOutlinedInput-root {\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n }\n & .MuiOutlinedInput-notchedOutline {\n border-color: ${({ theme }) => theme.palette.primary.main};\n }\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n`;\n","import * as Yup from 'yup';\n\nexport const validationSchema = Yup.object().shape({\n name: Yup.string().required('Por favor, insira um nome.'),\n subCategoryId: Yup.string().required('Por favor, insira o tipo.'),\n description: Yup.string().max(\n 2000,\n 'A descrição deve conter no máximo 2000 caracteres.'\n ),\n});\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\nimport DateFnsUtils from '@date-io/date-fns';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ptBr from 'date-fns/locale/pt-BR';\nimport { Formik } from 'formik';\nimport React, { useState } from 'react';\nimport StyledSelect from '../../Forms/FormikSelect';\nimport FormikTextField from '../../Forms/FormikTextField';\nimport StyledMenuItem from '../../StyledMenuItem';\nimport {\n Centralizer,\n Form,\n FormContainer,\n OptionsButton,\n StyledDateTimePicker,\n} from '../styles';\nimport { validationSchema } from './utils';\n\nexport interface Props {\n submit: (eventData: EventModel) => Promise<void>;\n cancel: () => void;\n subCategories: EventSubCategoryModel[];\n minDateTime?: Date | string;\n}\n\ninterface FormValues {\n comment: string;\n name: string;\n subCategoryId: number | string;\n}\n\nconst CreateAppointmentEventForm: React.FC<Props> = ({\n submit,\n cancel,\n subCategories,\n minDateTime,\n}) => {\n const initialValues: FormValues = {\n subCategoryId: '',\n comment: '',\n name: '',\n };\n const [dateTimeEvent, setDateTimeEvent] = useState<Date>(new Date());\n\n const formatAndSubmit = async (formValues: FormValues) => {\n const eventData: EventModel = {\n comment: formValues.comment,\n name: formValues.name,\n subCategoryId: Number(formValues.subCategoryId),\n eventHappensAt: dateTimeEvent.toISOString(),\n };\n await submit(eventData);\n };\n\n return (\n <FormContainer>\n <Formik\n validationSchema={validationSchema}\n initialValues={initialValues}\n onSubmit={formatAndSubmit}\n validateOnChange={false}\n >\n {({ isSubmitting }) => {\n return (\n <Form>\n <StyledSelect\n name=\"subCategoryId\"\n label=\"Tipo de compromisso\"\n SelectDisplayProps={{\n 'data-testid': 'subCategoryId',\n }}\n color=\"primary\"\n >\n {subCategories.map((item) => (\n <StyledMenuItem key={item.id} value={item.id} color=\"primary\">\n {item.name}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <FormikTextField\n color=\"primary\"\n id=\"name\"\n inputProps={{ 'data-testid': 'name', maxlength: 255 }}\n label=\"Nome\"\n name=\"name\"\n margin=\"normal\"\n autoComplete=\"off\"\n />\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <StyledDateTimePicker\n inputVariant=\"outlined\"\n format=\"dd/MM/yyyy HH:mm\"\n name=\"dateTimeEvent\"\n value={dateTimeEvent}\n cancelLabel=\"Cancelar\"\n ampm={false}\n minDate={minDateTime}\n onChange={(date: Date | null) => {\n date && setDateTimeEvent(date);\n }}\n />\n </MuiPickersUtilsProvider>\n <FormikTextField\n color=\"primary\"\n id=\"comment\"\n multiline\n rows={4}\n inputProps={{ 'data-testid': 'comment', maxlength: 2000 }}\n label=\"Observações\"\n name=\"comment\"\n margin=\"normal\"\n autoComplete=\"off\"\n />\n <Centralizer>\n <OptionsButton\n data-testid=\"submit-general\"\n type=\"submit\"\n size=\"large\"\n color=\"primary\"\n disabled={isSubmitting}\n >\n Salvar\n </OptionsButton>\n <OptionsButton\n data-testid=\"submit-general\"\n onClick={cancel}\n size=\"large\"\n color=\"primary\"\n >\n Cancelar\n </OptionsButton>\n </Centralizer>\n </Form>\n );\n }}\n </Formik>\n </FormContainer>\n );\n};\n\nexport default CreateAppointmentEventForm;\n","import * as Yup from 'yup';\n\nexport const validationSchema = Yup.object().shape({\n subCategoryId: Yup.string().required(\n 'Por favor, insira o tipo de intercorrência.'\n ),\n description: Yup.string().max(\n 2000,\n 'A descrição deve conter no máximo 2000 caracteres.'\n ),\n});\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\nimport DateFnsUtils from '@date-io/date-fns';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ptBr from 'date-fns/locale/pt-BR';\nimport { Formik } from 'formik';\nimport React, { useState } from 'react';\nimport StyledSelect from '../../Forms/FormikSelect';\nimport FormikTextField from '../../Forms/FormikTextField';\nimport StyledMenuItem from '../../StyledMenuItem';\nimport {\n Centralizer,\n Form,\n FormContainer,\n OptionsButton,\n StyledDateTimePicker,\n} from '../styles';\nimport { validationSchema } from './utils';\n\nexport interface Props {\n submit: (eventData: EventModel) => Promise<void>;\n cancel: () => void;\n subCategories: EventSubCategoryModel[];\n maxDateTime?: Date | string;\n minDateTime?: Date | string;\n}\n\ninterface FormValues {\n comment: string;\n subCategoryId: number | string;\n}\n\nconst CreateComplicationEventForm: React.FC<Props> = ({\n submit,\n cancel,\n subCategories,\n maxDateTime,\n minDateTime,\n}) => {\n const initialValues: FormValues = {\n subCategoryId: '',\n comment: '',\n };\n\n const [dateTimeEvent, setDateTimeEvent] = useState<Date>(new Date());\n\n const formatAndSubmit = async (formValues: FormValues) => {\n const eventData: EventModel = {\n comment: formValues.comment,\n subCategoryId: Number(formValues.subCategoryId),\n eventHappensAt: dateTimeEvent.toISOString(),\n };\n await submit(eventData);\n };\n\n return (\n <FormContainer>\n <Formik\n validationSchema={validationSchema}\n initialValues={initialValues}\n onSubmit={formatAndSubmit}\n validateOnChange={false}\n >\n {({ isSubmitting }) => {\n return (\n <Form>\n <StyledSelect\n name=\"subCategoryId\"\n label=\"Tipo de intercorrência\"\n SelectDisplayProps={{\n 'data-testid': 'subCategoryId',\n }}\n color=\"primary\"\n >\n {subCategories.map((item) => (\n <StyledMenuItem key={item.id} value={item.id} color=\"primary\">\n {item.name}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <StyledDateTimePicker\n inputVariant=\"outlined\"\n format=\"dd/MM/yyyy HH:mm\"\n name=\"dateTimeEvent\"\n value={dateTimeEvent}\n cancelLabel=\"Cancelar\"\n ampm={false}\n maxDate={maxDateTime}\n minDate={minDateTime}\n onChange={(date: Date | null) => {\n date && setDateTimeEvent(date);\n }}\n />\n </MuiPickersUtilsProvider>\n <FormikTextField\n color=\"primary\"\n id=\"comment\"\n multiline\n rows={4}\n inputProps={{ 'data-testid': 'comment', maxlength: 2000 }}\n label=\"Observações\"\n name=\"comment\"\n margin=\"normal\"\n autoComplete=\"off\"\n />\n <Centralizer>\n <OptionsButton\n data-testid=\"submit-complication\"\n type=\"submit\"\n size=\"large\"\n color=\"primary\"\n disabled={isSubmitting}\n >\n Salvar\n </OptionsButton>\n <OptionsButton\n data-testid=\"submit-complication\"\n onClick={cancel}\n size=\"large\"\n color=\"primary\"\n >\n Cancelar\n </OptionsButton>\n </Centralizer>\n </Form>\n );\n }}\n </Formik>\n </FormContainer>\n );\n};\n\nexport default CreateComplicationEventForm;\n","import { differenceInYears } from 'date-fns'\n\nexport const subCategoryIdMapper = {\n BLOOD_PRESSURE: 35231,\n BODY_TEMPERATURE: 35237,\n BLOOD_GLYCEMIA: 35230,\n BREATH_RATE: 35236,\n HEART_RATE: 35235,\n OXIMETRY_RATE: 35232,\n WEIGHT_MEASURMENT: 35233,\n}\n\nexport const staticCareLineIdMapper = {\n DIABETES_TYPE1: 36,\n DIABETES_TYPE2: 37,\n}\n\nexport const bloodGlycemiaAdditionalDetails = {\n preprandial: 'pré-refeição',\n fasting: 'jejum',\n postprandial: 'pós-refeição',\n not_available: 'não informado',\n} as const\nexport type BloodGlycemiaAdditionalDetailsType = keyof typeof bloodGlycemiaAdditionalDetails\n\ninterface PutMeasurementValidInputValueReturnType {\n complicationLevel: 3 | 2 | 1 | 0 | -1 | -2 | -3 | null\n isDangerousComplication: boolean | null\n additionalDetails?: BloodGlycemiaAdditionalDetailsType\n}\n\nexport const validateOxymetryInput = (rawValue: string): PutMeasurementValidInputValueReturnType => {\n const value = Number(rawValue)\n\n if (!rawValue || Number.isNaN(value))\n return { complicationLevel: null, isDangerousComplication: null }\n\n if (value < 90)\n return {\n complicationLevel: 3,\n isDangerousComplication: true,\n }\n\n if (value < 95)\n return {\n complicationLevel: 2,\n isDangerousComplication: true,\n }\n\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n }\n}\n\nexport const validateBreathRate = (rawValue: string): PutMeasurementValidInputValueReturnType => {\n const value = Number(rawValue)\n\n if (!rawValue || Number.isNaN(value))\n return { complicationLevel: null, isDangerousComplication: null }\n\n if (value < 7)\n return {\n complicationLevel: -3,\n isDangerousComplication: true,\n }\n\n if (value < 12)\n return {\n complicationLevel: -2,\n isDangerousComplication: true,\n }\n\n if (value > 25)\n return {\n complicationLevel: 3,\n isDangerousComplication: true,\n }\n\n if (value > 20)\n return {\n complicationLevel: 2,\n isDangerousComplication: true,\n }\n\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n }\n}\n\nexport const validateBodyTemperature = (rawValue: string): PutMeasurementValidInputValueReturnType => {\n const value = Number(rawValue.replace(',', '.'))\n\n if (!rawValue || Number.isNaN(value))\n return { complicationLevel: null, isDangerousComplication: null }\n\n if (value <= 35)\n return {\n complicationLevel: -3,\n isDangerousComplication: true,\n }\n\n if (value < 36)\n return {\n complicationLevel: -2,\n isDangerousComplication: true,\n }\n\n if (value > 37.7)\n return {\n complicationLevel: 3,\n isDangerousComplication: true,\n }\n\n if (value > 37.2)\n return {\n complicationLevel: 2,\n isDangerousComplication: true,\n }\n\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n }\n}\n\nexport const validateBloodGlycemia = (\n rawMeasurement: string,\n patientDateOfBirth: string | undefined,\n patientHasDiabetes: boolean,\n additionalDetails: BloodGlycemiaAdditionalDetailsType,\n): PutMeasurementValidInputValueReturnType => {\n const measurement = Number(rawMeasurement)\n if (Number.isNaN(measurement) || !patientDateOfBirth) return { complicationLevel: null, isDangerousComplication: null }\n const age = differenceInYears(new Date(), new Date(patientDateOfBirth))\n\n if (patientHasDiabetes) {\n if (additionalDetails === 'postprandial') {\n if (measurement < 70)\n return {\n complicationLevel: -2,\n isDangerousComplication: true,\n additionalDetails,\n }\n if (measurement <= 180)\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n additionalDetails,\n }\n }\n\n if (age < 65) {\n if (measurement < 80)\n return {\n complicationLevel: -1,\n isDangerousComplication: false,\n additionalDetails,\n }\n if (measurement <= 130)\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n additionalDetails,\n }\n } else {\n if (measurement < 90)\n return {\n complicationLevel: -1,\n isDangerousComplication: false,\n additionalDetails,\n }\n if (measurement <= 150)\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n additionalDetails,\n }\n }\n\n if (measurement <= 250)\n return {\n complicationLevel: 2,\n isDangerousComplication: true,\n additionalDetails,\n }\n\n return {\n complicationLevel: 3,\n isDangerousComplication: true,\n additionalDetails,\n }\n }\n\n if (additionalDetails === 'postprandial') {\n if (measurement < 80)\n return {\n complicationLevel: -1,\n isDangerousComplication: false,\n additionalDetails,\n }\n if (measurement <= 126)\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n additionalDetails,\n }\n if (measurement <= 139)\n return {\n complicationLevel: 1,\n isDangerousComplication: false,\n additionalDetails,\n }\n }\n\n if (measurement < 65)\n return {\n complicationLevel: -3,\n isDangerousComplication: true,\n additionalDetails,\n }\n if (measurement <= 99)\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n additionalDetails,\n }\n if (measurement <= 125)\n return {\n complicationLevel: 1,\n isDangerousComplication: false,\n additionalDetails,\n }\n if (measurement <= 199)\n return {\n complicationLevel: 2,\n isDangerousComplication: true,\n additionalDetails,\n }\n\n return {\n complicationLevel: 3,\n isDangerousComplication: true,\n additionalDetails,\n }\n}\n\nexport function validateHeartRate (rawValue: string): PutMeasurementValidInputValueReturnType {\n const value = Number(rawValue.replace(',', '.'))\n\n if (!rawValue || Number.isNaN(value))\n return { complicationLevel: null, isDangerousComplication: null }\n\n if (value < 60) return {\n complicationLevel: 2,\n isDangerousComplication: true,\n }\n\n if (value > 100) return {\n complicationLevel: 2,\n isDangerousComplication: true,\n }\n\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n }\n}\n\nexport const validateBloodPressure = (\n rawSystolicValue: string,\n symptomsCount: number,\n): PutMeasurementValidInputValueReturnType => {\n const systolicValue = Number(rawSystolicValue)\n if (Number.isNaN(systolicValue) || !systolicValue)\n return {\n complicationLevel: null,\n isDangerousComplication: null,\n }\n\n if (systolicValue < 80)\n return {\n complicationLevel: 3,\n isDangerousComplication: true,\n }\n\n if (systolicValue < 90 && symptomsCount > 0)\n return {\n complicationLevel: 2,\n isDangerousComplication: true,\n }\n\n if (systolicValue < 90 && symptomsCount < 1)\n return {\n complicationLevel: 1,\n isDangerousComplication: false,\n }\n\n if (systolicValue >= 170)\n return {\n complicationLevel: 3,\n isDangerousComplication: true,\n }\n\n if (systolicValue >= 140)\n return {\n complicationLevel: 2,\n isDangerousComplication: true,\n }\n\n if (systolicValue >= 130 && symptomsCount > 0)\n return {\n complicationLevel: 2,\n isDangerousComplication: true,\n }\n\n if (systolicValue >= 130 && symptomsCount < 1)\n return {\n complicationLevel: 1,\n isDangerousComplication: false,\n }\n\n return {\n complicationLevel: 0,\n isDangerousComplication: false,\n }\n}\n","import styled from 'styled-components';\n\nexport const InputContainer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n color: ${({ theme }) => theme.palette.primary.main};\n\n div {\n max-width: 95%;\n }\n\n p {\n margin-right: 2.5%;\n }\n`;\n","import React from 'react';\nimport { bloodGlycemiaMask } from '../../../../../utils/inputs';\nimport FormikTextField from '../../../../Forms/FormikTextField';\nimport StyledMenuItem from '../../../../StyledMenuItem';\nimport StyledSelect from '../../../../Forms/FormikSelect';\nimport { bloodGlycemiaAdditionalDetails } from '../../../../VitalSignsMeasurementInput/utils';\nimport { InputContainer } from '../styles';\n\ninterface BloodGlycemiaInputProps {\n value?: string;\n onChange: (value: string) => void;\n}\n\nconst BloodGlycemiaInput: React.FC<\n BloodGlycemiaInputProps & Partial<HTMLInputElement>\n> = ({ value, onChange, ...props }) => {\n return (\n <>\n <InputContainer>\n <FormikTextField\n color=\"primary\"\n inputProps={{\n 'data-testid': 'measurementInput',\n maxlength: 255,\n }}\n label=\"Valor\"\n margin=\"normal\"\n autoComplete=\"off\"\n placeholder=\"100\"\n value={value}\n onChange={(e) => {\n const formattedValue = bloodGlycemiaMask(e.target.value);\n onChange(formattedValue);\n }}\n {...props}\n />\n {'mg/dL'}\n </InputContainer>\n <StyledSelect\n id=\"measurementInputAdditionalDetails\"\n label=\"Momento da medição\"\n name=\"additionalDetails\"\n SelectDisplayProps={{\n 'data-testid': 'measurementInputAdditionalDetails',\n }}\n color=\"primary\"\n >\n {Object.entries(bloodGlycemiaAdditionalDetails).map(([key, label]) => (\n <StyledMenuItem\n key={`glycemia-${key}`}\n value={key}\n color=\"primary\"\n data-testid={`additional-details-${key}`}\n >\n {label}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n </>\n );\n};\n\nexport default BloodGlycemiaInput;\n","import { toNumber } from 'lodash';\nimport React, { useEffect, useState } from 'react';\nimport { numberMask } from '../../../../../utils/inputs';\nimport FormikTextField from '../../../../Forms/FormikTextField';\nimport { InputContainer } from '../styles';\n\ninterface BloodPressureInputProps {\n value?: string;\n onChange: (value: string) => void;\n}\n\nconst BloodPressureInput: React.FC<\n BloodPressureInputProps & Partial<HTMLInputElement>\n> = ({ value, onChange, ...props }) => {\n const inputLength = 3;\n\n const [systolicValue, setSystolicValue] = useState('');\n const [diastolicValue, setDiastolicValue] = useState('');\n\n useEffect(() => {\n if (!value) return;\n\n const [systolic, diastolic] = value.split('x');\n\n const sanitizedSystolic = toNumber(numberMask(systolic));\n setSystolicValue(String(sanitizedSystolic).substring(0, inputLength));\n\n if (typeof diastolic === 'undefined') return;\n\n const sanitizedDiastolic = toNumber(numberMask(diastolic));\n setDiastolicValue(String(sanitizedDiastolic).substring(0, inputLength));\n }, []);\n\n const onChangeAnyValue = (systolicValue: string, diastolicValue: string) => {\n const systolicNumber = toNumber(systolicValue);\n const diastolicNumber = toNumber(diastolicValue);\n\n const systolicWithLeftZeros = String(systolicNumber).padStart(\n inputLength,\n '0'\n );\n const diastolicWithLeftZeros = String(diastolicNumber).padStart(\n inputLength,\n '0'\n );\n\n const systolic = systolicWithLeftZeros.substring(\n systolicWithLeftZeros.length - 1 - inputLength\n );\n\n const diastolic = diastolicWithLeftZeros.substring(\n diastolicWithLeftZeros.length - 1 - inputLength\n );\n\n onChange(`${systolic}x${diastolic}`);\n };\n\n const validateBloodPressure = (value: string) => {\n if (value.length < 2) return 'Pressão arterial requer ao menos 2 dÃgitos.';\n if (toNumber(value) <= 0) return 'Valor deve ser maior que zero.';\n };\n\n return (\n <InputContainer>\n <FormikTextField\n type=\"text\"\n color=\"primary\"\n placeholder=\"120\"\n autoComplete=\"off\"\n margin=\"normal\"\n value={systolicValue}\n onChange={(e) => {\n const value = toNumber(numberMask(e.target.value));\n const sanitizedValue = String(value).substring(0, inputLength);\n setSystolicValue(sanitizedValue);\n onChangeAnyValue(sanitizedValue, diastolicValue);\n }}\n validate={() => validateBloodPressure(systolicValue)}\n inputProps={{\n 'data-testid': 'measurementInput-systolic',\n maxlength: 255,\n }}\n {...props}\n />\n <p>{' x '}</p>\n <FormikTextField\n type=\"text\"\n color=\"primary\"\n placeholder=\"80\"\n autoComplete=\"off\"\n margin=\"normal\"\n value={diastolicValue}\n onChange={(e) => {\n const value = toNumber(numberMask(e.target.value));\n const sanitizedValue = String(value).substring(0, inputLength);\n setDiastolicValue(sanitizedValue);\n onChangeAnyValue(systolicValue, sanitizedValue);\n }}\n validate={() => validateBloodPressure(diastolicValue)}\n inputProps={{\n 'data-testid': 'measurementInput-diastolic',\n maxlength: 255,\n }}\n {...props}\n />\n {'mmHg'}\n </InputContainer>\n );\n};\n\nexport default BloodPressureInput;\n","import React from 'react';\nimport { bodyTemperatureMask } from '../../../../../utils/inputs';\nimport FormikTextField from '../../../../Forms/FormikTextField';\nimport { InputContainer } from '../styles';\n\ninterface BodyTemperatureInputProps {\n value?: string;\n onChange: (value: string) => void;\n}\n\nconst BodyTemperatureInput: React.FC<\n BodyTemperatureInputProps & Partial<HTMLInputElement>\n> = ({ value, onChange, ...props }) => {\n return (\n <InputContainer>\n <FormikTextField\n color=\"primary\"\n inputProps={{\n 'data-testid': 'measurementInput',\n maxlength: 255,\n }}\n label=\"Valor\"\n margin=\"normal\"\n autoComplete=\"off\"\n placeholder=\"36,5\"\n value={value}\n onChange={(e) => {\n const formattedValue = bodyTemperatureMask(e.target.value);\n onChange(formattedValue);\n }}\n {...props}\n />\n {'°C'}\n </InputContainer>\n );\n};\n\nexport default BodyTemperatureInput;\n","import React from 'react';\nimport { breathRateMask } from '../../../../../utils/inputs';\nimport FormikTextField from '../../../../Forms/FormikTextField';\nimport { InputContainer } from '../styles';\n\ninterface BreathRateInputProps {\n value?: string;\n onChange: (value: string) => void;\n}\n\nconst BreathRateInput: React.FC<\n BreathRateInputProps & Partial<HTMLInputElement>\n> = ({ value, onChange, ...props }) => {\n return (\n <InputContainer>\n <FormikTextField\n color=\"primary\"\n inputProps={{\n 'data-testid': 'measurementInput',\n maxlength: 255,\n }}\n label=\"Valor\"\n margin=\"normal\"\n autoComplete=\"off\"\n placeholder=\"16\"\n value={value}\n onChange={(e) => {\n const formattedValue = breathRateMask(e.target.value);\n onChange(formattedValue);\n }}\n {...props}\n />\n {'mrm'}\n </InputContainer>\n );\n};\n\nexport default BreathRateInput;\n","import React from 'react';\nimport FormikTextField from '../../../../Forms/FormikTextField';\n\ninterface DefaultInputProps {\n value?: string;\n onChange: (value: string) => void;\n}\n\nconst DefaultInput: React.FC<DefaultInputProps & Partial<HTMLInputElement>> = ({\n value,\n onChange,\n ...props\n}) => {\n return (\n <FormikTextField\n color=\"primary\"\n inputProps={{\n 'data-testid': 'measurementInput',\n maxlength: 255,\n }}\n label=\"Valor\"\n margin=\"normal\"\n autoComplete=\"off\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n {...props}\n />\n );\n};\n\nexport default DefaultInput;\n","import React from 'react';\nimport { heartRateMask } from '../../../../../utils/inputs';\nimport FormikTextField from '../../../../Forms/FormikTextField';\nimport { InputContainer } from '../styles';\n\ninterface HeartRateInputProps {\n value?: string;\n onChange: (value: string) => void;\n}\n\nconst HeartRateInput: React.FC<\n HeartRateInputProps & Partial<HTMLInputElement>\n> = ({ value, onChange, ...props }) => {\n return (\n <InputContainer>\n <FormikTextField\n color=\"primary\"\n inputProps={{\n 'data-testid': 'measurementInput',\n maxlength: 255,\n }}\n label=\"Valor\"\n margin=\"normal\"\n autoComplete=\"off\"\n placeholder=\"80\"\n value={value}\n onChange={(e) => {\n const formattedValue = heartRateMask(e.target.value);\n onChange(formattedValue);\n }}\n {...props}\n />\n {'bpm'}\n </InputContainer>\n );\n};\n\nexport default HeartRateInput;\n","import React from 'react';\nimport { oximetryRateMask } from '../../../../../utils/inputs';\nimport FormikTextField from '../../../../Forms/FormikTextField';\nimport { InputContainer } from '../styles';\n\ninterface OximetryRateInputProps {\n value?: string;\n onChange: (value: string) => void;\n}\n\nconst OximetryRateInput: React.FC<\n OximetryRateInputProps & Partial<HTMLInputElement>\n> = ({ value, onChange, ...props }) => {\n return (\n <InputContainer>\n <FormikTextField\n color=\"primary\"\n inputProps={{\n 'data-testid': 'measurementInput',\n maxlength: 255,\n }}\n label=\"Valor\"\n margin=\"normal\"\n autoComplete=\"off\"\n placeholder=\"96\"\n value={value}\n onChange={(e) => {\n const formattedValue = oximetryRateMask(e.target.value);\n onChange(formattedValue);\n }}\n {...props}\n />\n {'%SaO2'}\n </InputContainer>\n );\n};\n\nexport default OximetryRateInput;\n","import React from 'react';\nimport { weightMeasurementMask } from '../../../../../utils/inputs';\nimport FormikTextField from '../../../../Forms/FormikTextField';\nimport { InputContainer } from '../styles';\n\ninterface WeightInputProps {\n value?: string;\n onChange: (value: string) => void;\n}\n\nconst WeightInput: React.FC<WeightInputProps & Partial<HTMLInputElement>> = ({\n value,\n onChange,\n ...props\n}) => {\n return (\n <InputContainer>\n <FormikTextField\n color=\"primary\"\n inputProps={{\n 'data-testid': 'measurementInput',\n maxlength: 255,\n }}\n label=\"Valor\"\n margin=\"normal\"\n autoComplete=\"off\"\n placeholder=\"62\"\n value={value}\n onChange={(e) => {\n const formattedValue = weightMeasurementMask(e.target.value);\n onChange(formattedValue);\n }}\n {...props}\n />\n {'Kg'}\n </InputContainer>\n );\n};\n\nexport default WeightInput;\n","import React from 'react';\nimport { subCategoryIdMapper } from '../../../VitalSignsMeasurementInput/utils';\nimport BloodGlycemiaInput from './BloodGlycemiaInput';\nimport BloodPressureInput from './BloodPressureInput';\nimport BodyTemperatureInput from './BodyTemperatureInput';\nimport BreathRateInput from './BreathRateInput';\nimport DefaultInput from './DefaultInput';\nimport HeartRateInput from './HeartRateInput';\nimport OximetryRateInput from './OximetryRateInput';\nimport WeightInput from './WeightInput';\n\ninterface MeasurementInputProps {\n subCategoryId?: number | string;\n onChange: (value: string) => void;\n value?: string;\n}\n\nconst MeasurementInput: React.FC<\n MeasurementInputProps & Partial<HTMLInputElement>\n> = ({ subCategoryId, ...props }) => {\n if (subCategoryId === subCategoryIdMapper.BLOOD_GLYCEMIA)\n return <BloodGlycemiaInput {...props} />;\n else if (subCategoryId === subCategoryIdMapper.BODY_TEMPERATURE)\n return <BodyTemperatureInput {...props} />;\n else if (subCategoryId === subCategoryIdMapper.BREATH_RATE)\n return <BreathRateInput {...props} />;\n else if (subCategoryId === subCategoryIdMapper.HEART_RATE)\n return <HeartRateInput {...props} />;\n else if (subCategoryId === subCategoryIdMapper.OXIMETRY_RATE)\n return <OximetryRateInput {...props} />;\n else if (subCategoryId === subCategoryIdMapper.BLOOD_PRESSURE)\n return <BloodPressureInput {...props} />;\n else if (subCategoryId === subCategoryIdMapper.WEIGHT_MEASURMENT)\n return <WeightInput {...props} />;\n\n return <DefaultInput {...props} />;\n};\n\nexport default MeasurementInput;\n","import { Patient } from '@cuidador/database'\nimport * as Yup from 'yup'\nimport { FormValues } from '.'\nimport {\n bloodGlycemiaAdditionalDetails,\n BloodGlycemiaAdditionalDetailsType,\n staticCareLineIdMapper,\n subCategoryIdMapper,\n validateBloodGlycemia,\n validateBloodPressure,\n validateBodyTemperature,\n validateBreathRate,\n validateHeartRate,\n validateOxymetryInput,\n} from '../../VitalSignsMeasurementInput/utils'\n\nexport const validationSchema = Yup.object().shape({\n measurementValue: Yup.string().required(\n 'Por favor, insira um valor para a medição.'\n ),\n subCategoryId: Yup.string().required('Por favor, insira o tipo.'),\n description: Yup.string().max(\n 2000,\n 'O comentário deve conter no máximo 2000 caracteres.'\n ),\n additionalDetails: Yup.string()\n .ensure()\n .when('subCategoryId', {\n is: String(subCategoryIdMapper.BLOOD_GLYCEMIA),\n then: Yup.string()\n .oneOf(\n Object.keys(bloodGlycemiaAdditionalDetails),\n 'Por favor, preencha os detalhes adicionais.'\n )\n .required(),\n }),\n})\n\nexport const validateSubCategory = (\n formValues: FormValues,\n patientData: Patient | undefined\n) => {\n const subCategoryId = Number(formValues.subCategoryId)\n\n if (subCategoryId === subCategoryIdMapper.BLOOD_GLYCEMIA) {\n const hasDiabetes = !!patientData?.staticCareLines?.some(\n (scl) =>\n ['dysfunctional', 'severe_dysfunctional'].includes(String(scl.classification)) &&\n [staticCareLineIdMapper.DIABETES_TYPE1, staticCareLineIdMapper.DIABETES_TYPE2].includes(scl.careLineId!),\n )\n return validateBloodGlycemia(\n formValues.measurementValue,\n patientData?.dateOfBirth,\n hasDiabetes,\n formValues.additionalDetails as BloodGlycemiaAdditionalDetailsType,\n )\n } else if (subCategoryId === subCategoryIdMapper.BODY_TEMPERATURE) {\n return validateBodyTemperature(formValues.measurementValue)\n } else if (subCategoryId === subCategoryIdMapper.BREATH_RATE) {\n return validateBreathRate(formValues.measurementValue)\n } else if (subCategoryId === subCategoryIdMapper.HEART_RATE) {\n return validateHeartRate(formValues.measurementValue)\n } else if (subCategoryId === subCategoryIdMapper.OXIMETRY_RATE) {\n return validateOxymetryInput(formValues.measurementValue)\n } else if (subCategoryId === subCategoryIdMapper.BLOOD_PRESSURE) {\n return validateBloodPressure(formValues.measurementValue, formValues.symptomList?.length || 0)\n } else if (subCategoryId === subCategoryIdMapper.WEIGHT_MEASURMENT) {\n return undefined\n }\n\n return undefined\n}\n","import Symptom, { SymptomModel } from '@cuidador/database/src/models/Symptom';\nimport { MultiselectModalOptionsType } from './MultiselectModal';\nimport { NewMeasurementValue } from '../../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement';\n\nexport const formatSymptomsOptions = (\n symptoms: SymptomModel[],\n checkedIds?: SymptomModel[]\n) =>\n symptoms.map((symptom) =>\n formatSingleSymptomIntoOption(\n symptom,\n !!symptom.id && !!checkedIds?.find(({ id }) => symptom.id === id)\n )\n );\n\nexport const formatSingleSymptomIntoOption = (\n symptom: Symptom | SymptomModel,\n checked?: boolean\n) => ({\n id: symptom.id!,\n label: symptom.symptomName!,\n checked: checked ?? false,\n});\n\nexport const formatOptionIntoSymptomOption = (\n options: MultiselectModalOptionsType[]\n): NonNullable<NewMeasurementValue['symptomOptions']> => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return options.map(({ checked, check, id, isCustomInput, ...option }) => ({\n ...option,\n id: Number.isNaN(Number(id)) ? undefined : Number(id),\n wasUserInput: isCustomInput,\n }));\n};\n\nexport const shouldShowSymptoms = (systolic: number) =>\n !Number.isNaN(systolic) && systolic > 0 && (systolic < 90 || systolic >= 130);\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database'\nimport DateFnsUtils from '@date-io/date-fns'\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers'\nimport ptBr from 'date-fns/locale/pt-BR'\nimport { Formik, FormikHelpers } from 'formik'\nimport React, { useContext, useEffect, useState } from 'react'\nimport { ShiftInProgressContext } from '../../../contexts/ShiftInProgress'\nimport StyledSelect from '../../Forms/FormikSelect'\nimport FormikTextField from '../../Forms/FormikTextField'\nimport StyledMenuItem from '../../StyledMenuItem'\nimport {\n Centralizer,\n Form,\n FormContainer,\n OptionsButton,\n StyledDateTimePicker,\n} from '../styles'\nimport MeasurementInput from './MeasurementInput'\nimport { validateSubCategory, validationSchema } from './utils'\nimport { formatSymptomsOptions } from '../../VitalSignsMeasurementInput/BloodPressureMeasurementInput/utils'\nimport axiosInstance from '../../../config/axios'\nimport { Button, Checkbox, Dialog, DialogActions, DialogContent, DialogTitle, FormControlLabel, Typography } from '@material-ui/core'\nimport { subCategoryIdMapper } from '../../VitalSignsMeasurementInput/utils'\n\nexport interface Props {\n submit: (eventData: EventModel, continuousAdd?: boolean) => Promise<void>\n cancel: () => void\n subCategories: EventSubCategoryModel[]\n maxDateTime?: Date | string\n minDateTime?: Date | string\n}\n\nexport interface FormValues {\n comment: string\n measurementValue: string\n subCategoryId: number | string\n additionalDetails: string\n symptomList?: SymptomList[]\n}\n\ntype SymptomList = {\n id: number\n label: string\n checked: boolean\n}\n\nconst CreateMeasurementEventForm: React.FC<Props> = ({\n submit,\n cancel,\n subCategories,\n maxDateTime,\n minDateTime,\n}) => {\n const [continuousAdd, setContinuousAdd] = useState(false)\n const [showSymptoms, setShowSymptoms] = useState(false)\n const [symptoms, setSymptoms] = useState<SymptomList[]>([])\n const [dateTimeEvent, setDateTimeEvent] = useState<Date>(new Date())\n const { shiftInProgress } = useContext(ShiftInProgressContext)\n\n const initialValues: FormValues = {\n subCategoryId: '',\n comment: '',\n measurementValue: '',\n additionalDetails: 'fasting',\n }\n\n const formatAndSubmit = async (\n formValues: FormValues,\n { resetForm }: FormikHelpers<FormValues>,\n ) => {\n const eventData: EventModel = {\n comment: formValues.comment,\n name: formValues.measurementValue,\n subCategoryId: Number(formValues.subCategoryId),\n eventHappensAt: dateTimeEvent.toISOString(),\n measurement: {\n measuredAt: new Date().toISOString(),\n measurementValue: formValues.measurementValue,\n measurementDescription: formValues.comment,\n },\n }\n\n formValues.symptomList = symptoms.filter(symptom => symptom.checked)\n if (formValues.symptomList) {\n eventData.measurement.symptoms = formValues.symptomList.map(symptom => {return ({ id: symptom.id })})\n }\n let vitalSignValidation\n\n if (formValues.subCategoryId === subCategoryIdMapper.BLOOD_PRESSURE) {\n const extraFormValues = formValues\n extraFormValues.measurementValue = formValues.measurementValue.split('x')[0]\n vitalSignValidation = validateSubCategory(extraFormValues, shiftInProgress?.patient)\n } else {\n vitalSignValidation = validateSubCategory(formValues, shiftInProgress?.patient)\n }\n\n if (!!vitalSignValidation)\n eventData.measurement = {\n ...eventData.measurement,\n ...vitalSignValidation,\n }\n\n await submit(eventData, continuousAdd)\n setSymptoms([])\n resetForm()\n }\n\n useEffect(() => {\n getSymptoms()\n }, [])\n\n async function getSymptoms () {\n const symptomList = (await axiosInstance.get('/care/symptom')).data\n const formatedSymptoms: SymptomList[] = formatSymptomsOptions(symptomList)\n setSymptoms(formatedSymptoms)\n }\n\n function flipSymptom (symptomId: number) {\n const newSymptoms = symptoms\n const index = newSymptoms.findIndex(symptom => symptom.id === symptomId)\n newSymptoms[index].checked = !newSymptoms[index].checked\n setSymptoms(newSymptoms.map(item => item))\n }\n\n return (\n <FormContainer>\n <Formik\n validationSchema={validationSchema}\n initialValues={initialValues}\n onSubmit={formatAndSubmit}\n validateOnChange={false}\n >\n {({ isSubmitting, values, setFieldValue }) => {\n return (\n <Form>\n <StyledSelect\n name='subCategoryId'\n label='Controle'\n SelectDisplayProps={{\n 'data-testid': 'subCategoryId',\n }}\n color='primary'\n >\n {subCategories?.map((item) => (\n <StyledMenuItem key={item.id} value={item.id} color='primary'>\n {item.name}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <MeasurementInput\n subCategoryId={values.subCategoryId}\n onChange={(value: string) =>\n setFieldValue('measurementValue', value)\n }\n value={values.measurementValue}\n name='measurementValue'\n id='measurementValue'\n />\n <Centralizer>\n {values.subCategoryId === subCategoryIdMapper.BLOOD_PRESSURE && <OptionsButton\n size='large'\n color='primary'\n disabled={isSubmitting}\n onClick={() => {\n setShowSymptoms(true)\n }}\n >\n Adicionar sintomas\n </OptionsButton>}\n </Centralizer>\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <StyledDateTimePicker\n inputVariant='outlined'\n format='dd/MM/yyyy HH:mm'\n name='dateTimeEvent'\n value={dateTimeEvent}\n cancelLabel='Cancelar'\n ampm={false}\n maxDate={maxDateTime}\n minDate={minDateTime}\n onChange={(date: Date | null) => {\n date && setDateTimeEvent(date)\n }}\n />\n </MuiPickersUtilsProvider>\n <FormikTextField\n color='primary'\n id='comment'\n multiline\n rows={4}\n inputProps={{ 'data-testid': 'comment', maxlength: 2000 }}\n label='Observações'\n name='comment'\n margin='normal'\n autoComplete='off'\n />\n\n {symptoms.map((symptom, index) => (\n <>\n {symptom.checked && <Typography key={index}>{symptom.label}</Typography>}\n </>\n ))}\n\n <Dialog\n open={showSymptoms}\n onClose={() => setShowSymptoms(false)}\n style={{\n 'padding': '8px',\n }}\n >\n <DialogTitle>Selecione os sintomas</DialogTitle>\n <DialogContent>\n {symptoms.map((symptom, index) => (\n <FormControlLabel\n key={index}\n style={{ display: 'block' }}\n control={\n <Checkbox\n checked={symptom.checked}\n onChange={() => flipSymptom(symptom.id)}\n />\n }\n label={symptom.label}\n />\n ))}\n </DialogContent>\n <DialogActions>\n <Centralizer>\n <OptionsButton\n color='primary'\n onClick={() => setShowSymptoms(false)}\n >\n Concluir\n </OptionsButton>\n </Centralizer>\n </DialogActions>\n </Dialog>\n\n <Centralizer>\n <OptionsButton\n data-testid='submit-measurement'\n type='submit'\n size='large'\n color='primary'\n disabled={isSubmitting}\n onClick={() => setContinuousAdd(true)}\n >\n Salvar e adicionar novo\n </OptionsButton>\n <OptionsButton\n data-testid='submit-measurement'\n type='submit'\n size='large'\n color='primary'\n disabled={isSubmitting}\n onClick={() => setContinuousAdd(false)}\n >\n Salvar e finalizar\n </OptionsButton>\n <OptionsButton\n data-testid='submit-measurement'\n onClick={cancel}\n size='large'\n color='primary'\n >\n Cancelar\n </OptionsButton>\n </Centralizer>\n </Form>\n )\n }}\n </Formik>\n </FormContainer>\n )\n}\n\nexport default CreateMeasurementEventForm\n","import { MedicationModel } from '@cuidador/database';\n\nconst handleDropsLabel = (\n dosageQuantity: MedicationModel['dosageQuantity']\n) => {\n if (dosageQuantity) {\n return dosageQuantity <= 1 ? 'gota' : 'gotas';\n }\n return 'gota';\n};\n\nexport const handleFormatDose = (\n doseFormat?: MedicationModel['dosageFormat'],\n dosageQuantity?: MedicationModel['dosageQuantity']\n) => {\n let doseFormatFormated;\n switch (doseFormat) {\n case 'pill':\n doseFormatFormated = dosageQuantity == 1 ? 'comprimido' : 'comprimidos';\n break;\n case 'capsule':\n doseFormatFormated = dosageQuantity == 1 ? 'capsúla' : 'capsúlas';\n break;\n case 'sachet':\n doseFormatFormated = dosageQuantity == 1 ? 'sachê' : 'sachês';\n break;\n case 'drops':\n doseFormatFormated = handleDropsLabel(dosageQuantity);\n break;\n case 'ampoule':\n doseFormatFormated = dosageQuantity == 1 ? 'ampola' : 'ampolas';\n break;\n case 'suppository':\n doseFormatFormated = dosageQuantity == 1 ? 'supositório' : 'supositórios';\n break;\n case 'inhaled':\n doseFormatFormated = dosageQuantity == 1 ? 'jato/puff' : 'jatos/puffs';\n break;\n case 'unit':\n doseFormatFormated =\n dosageQuantity == 1\n ? 'unidade internacional'\n : 'unidades internacionais';\n break;\n case 'ml':\n doseFormatFormated = 'ml';\n break;\n case 'spoon':\n doseFormatFormated = dosageQuantity == 1 ? 'colher' : 'colheres';\n break;\n case 'grams':\n doseFormatFormated = dosageQuantity == 1 ? 'grama' : 'gramas';\n break;\n case 'strip':\n doseFormatFormated =\n dosageQuantity == 1 ? 'placa/tira/fita' : 'placas/tiras/fitas';\n break;\n case 'sticker':\n doseFormatFormated = dosageQuantity == 1 ? 'adesivo' : 'adesivos';\n break;\n default:\n break;\n }\n\n return doseFormatFormated;\n};\n\nexport const handleFormatAdministeredBy = (\n administeredBy?: MedicationModel['administeredBy']\n) => {\n let viaTypeFormated;\n switch (administeredBy) {\n case 'oral':\n viaTypeFormated = 'Oral';\n break;\n case 'sublingual':\n viaTypeFormated = 'Sublingual';\n break;\n case 'subcutaneous':\n viaTypeFormated = 'Subcutânea';\n break;\n case 'intravenous':\n viaTypeFormated = 'Intravenosa';\n break;\n case 'intramuscular':\n viaTypeFormated = 'Intramuscular';\n break;\n case 'tube':\n viaTypeFormated = 'Sonda';\n break;\n case 'rectal':\n viaTypeFormated = 'Retal';\n break;\n case 'inhalation':\n viaTypeFormated = 'Inalatório';\n break;\n case 'topic':\n viaTypeFormated = 'Cutânea';\n break;\n case 'ocular':\n viaTypeFormated = 'Ocular';\n break;\n case 'auricular':\n viaTypeFormated = 'Auricular';\n break;\n case 'vaginal':\n viaTypeFormated = 'Vaginal';\n break;\n default:\n break;\n }\n\n return viaTypeFormated;\n};\n","import styled from 'styled-components';\nimport { Typography } from '@material-ui/core';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n margin-block: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const ContainerText = styled.div`\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const Text = styled(Typography)`\n display: inline;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const Label = styled(Text)`\n font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n`;\n","import { MedicationModel } from '@cuidador/database';\nimport React from 'react';\nimport {\n handleFormatDose,\n handleFormatAdministeredBy,\n} from '../../../../utils/medication';\nimport { Container, ContainerText, Label, Text } from './styles';\n\ninterface MedicationInformationCardProps {\n medication: MedicationModel;\n}\n\nconst MedicationInformationCard: React.FC<MedicationInformationCardProps> = ({\n medication,\n}) => {\n const {\n dosageQuantity,\n dosageFormat,\n administeredBy,\n medicalNotes,\n subCategory,\n } = medication;\n\n const stringFirstNumberIndex = Number(subCategory?.name?.search(/\\d+/)) - 1;\n const medicationDosage = subCategory?.name?.slice(stringFirstNumberIndex);\n\n return (\n <Container>\n <ContainerText>\n <Text>{medicationDosage}</Text>\n </ContainerText>\n <ContainerText>\n <Label>Administração: </Label>\n <Text>\n {handleFormatAdministeredBy(administeredBy)}, via {dosageQuantity}{' '}\n {handleFormatDose(dosageFormat, dosageQuantity)}\n </Text>\n </ContainerText>\n {!!medicalNotes && (\n <ContainerText>\n <Label>Recomendações: </Label>\n <Text>{medicalNotes}</Text>\n </ContainerText>\n )}\n </Container>\n );\n};\n\nexport default MedicationInformationCard;\n","import * as Yup from 'yup';\n\nexport const validationSchema = Yup.object().shape({\n medicationId: Yup.string().required('Por favor, insira o medicamento.'),\n description: Yup.string().max(\n 2000,\n 'A descrição deve conter no máximo 2000 caracteres.'\n ),\n});\n","import { EventModel, MedicationModel } from '@cuidador/database';\nimport DateFnsUtils from '@date-io/date-fns';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ptBr from 'date-fns/locale/pt-BR';\nimport { Formik } from 'formik';\nimport React, { useEffect, useState } from 'react';\nimport { toast } from 'react-toastify';\nimport StyledSelect from '../../Forms/FormikSelect';\nimport FormikTextField from '../../Forms/FormikTextField';\nimport MedicationInformationCard from './MedicationInformationCard';\nimport StyledMenuItem from '../../StyledMenuItem';\nimport {\n Centralizer,\n Form,\n FormContainer,\n OptionsButton,\n StyledDateTimePicker,\n} from '../styles';\nimport { validationSchema } from './utils';\n\nexport interface Props {\n submit: (eventData: EventModel) => Promise<void>;\n cancel: () => void;\n medications: MedicationModel[];\n maxDateTime?: Date | string;\n minDateTime?: Date | string;\n}\n\ninterface FormValues {\n comment: string;\n medicationId: number | string;\n}\n\nconst CreateMedicationEventForm: React.FC<Props> = ({\n submit,\n cancel,\n medications,\n maxDateTime,\n minDateTime,\n}) => {\n const initialValues: FormValues = {\n comment: '',\n medicationId: '',\n };\n const [dateTimeEvent, setDateTimeEvent] = useState<Date>(new Date());\n const [\n selectedMedication,\n setSelectedMedication,\n ] = useState<MedicationModel>();\n\n useEffect(() => {\n if (!medications) {\n toast.error(\n 'Nenhum medicamento está cadastrado. Caso tenha necessidade, solicite ao familiar o cadastro de medicamento para uso \"se necessário\".'\n );\n }\n }, []);\n\n const formatAndSubmit = async (formValues: FormValues) => {\n const eventData: EventModel = {\n comment: formValues.comment,\n eventHappensAt: dateTimeEvent.toISOString(),\n medicationId: Number(formValues.medicationId),\n subCategoryId: medications.find(\n (medication) => medication.id === formValues.medicationId\n )?.subCategoryId,\n };\n await submit(eventData);\n };\n\n const handleGetSelectedMedication = (medicationId: number) => {\n const medication = medications.find(({ id }) => id === medicationId);\n setSelectedMedication(medication);\n };\n\n return (\n <FormContainer>\n <Formik\n validationSchema={validationSchema}\n initialValues={initialValues}\n onSubmit={formatAndSubmit}\n validateOnChange={false}\n >\n {({ isSubmitting }) => {\n return (\n <Form>\n <StyledSelect\n name=\"medicationId\"\n label=\"Medicamento\"\n SelectDisplayProps={{\n 'data-testid': 'medicationId',\n }}\n color=\"primary\"\n >\n {medications.map((item) => (\n <StyledMenuItem\n key={item.id}\n value={item.id}\n color=\"primary\"\n onClick={() => handleGetSelectedMedication(Number(item.id))}\n >\n {item?.subCategory?.name}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n {!!selectedMedication && (\n <MedicationInformationCard\n medication={selectedMedication as MedicationModel}\n />\n )}\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <StyledDateTimePicker\n label=\"Data e horário\"\n inputVariant=\"outlined\"\n format=\"dd/MM/yyyy HH:mm\"\n name=\"dateTimeEvent\"\n value={dateTimeEvent}\n cancelLabel=\"Cancelar\"\n ampm={false}\n maxDate={maxDateTime}\n minDate={minDateTime}\n onChange={(date: Date | null) => {\n date && setDateTimeEvent(date);\n }}\n />\n </MuiPickersUtilsProvider>\n <FormikTextField\n color=\"primary\"\n id=\"comment\"\n multiline\n rows={4}\n inputProps={{ 'data-testid': 'comment', maxlength: 2000 }}\n label=\"Observações\"\n name=\"comment\"\n margin=\"normal\"\n autoComplete=\"off\"\n />\n <Centralizer>\n <OptionsButton\n data-testid=\"submit-complication\"\n type=\"submit\"\n size=\"large\"\n color=\"primary\"\n disabled={isSubmitting}\n >\n Salvar\n </OptionsButton>\n <OptionsButton\n data-testid=\"submit-complication\"\n onClick={cancel}\n size=\"large\"\n color=\"primary\"\n >\n Cancelar\n </OptionsButton>\n </Centralizer>\n </Form>\n );\n }}\n </Formik>\n </FormContainer>\n );\n};\n\nexport default CreateMedicationEventForm;\n","import * as Yup from 'yup';\n\nexport const validationSchema = Yup.object().shape({\n name: Yup.string().optional(),\n subCategoryId: Yup.string().required('Por favor, insira o tipo.'),\n description: Yup.string().max(\n 2000,\n 'A descrição deve conter no máximo 2000 caracteres.'\n ),\n});\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\nimport DateFnsUtils from '@date-io/date-fns';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ptBr from 'date-fns/locale/pt-BR';\nimport { Formik, FormikHelpers } from 'formik';\nimport React, { useState } from 'react';\nimport StyledSelect from '../../Forms/FormikSelect';\nimport FormikTextField from '../../Forms/FormikTextField';\nimport StyledMenuItem from '../../StyledMenuItem';\nimport {\n Centralizer,\n Form,\n FormContainer,\n OptionsButton,\n StyledDateTimePicker,\n} from '../styles';\nimport { validationSchema } from './utils';\n\nexport interface Props {\n submit: (eventData: EventModel, constinuosAdd?: boolean) => Promise<void>;\n cancel: () => void;\n subCategories: EventSubCategoryModel[];\n maxDateTime?: Date | string;\n minDateTime?: Date | string;\n}\n\ninterface FormValues {\n comment: string;\n name: string;\n subCategoryId: number | string;\n}\n\nconst CreateRoutineEventForm: React.FC<Props> = ({\n submit,\n cancel,\n subCategories,\n maxDateTime,\n minDateTime,\n}) => {\n const [continuousAdd, setContinuousAdd] = useState(false);\n const initialValues: FormValues = {\n subCategoryId: '',\n comment: '',\n name: '',\n };\n const [dateTimeEvent, setDateTimeEvent] = useState<Date>(new Date());\n\n const formatAndSubmit = async (\n formValues: FormValues,\n { resetForm }: FormikHelpers<FormValues>\n ) => {\n const eventData: EventModel = {\n comment: formValues.comment,\n name: formValues.name,\n subCategoryId: Number(formValues.subCategoryId),\n eventHappensAt: dateTimeEvent.toISOString(),\n };\n await submit(eventData, continuousAdd);\n resetForm();\n };\n\n return (\n <FormContainer>\n <Formik\n validationSchema={validationSchema}\n initialValues={initialValues}\n onSubmit={formatAndSubmit}\n validateOnChange={false}\n >\n {({ isSubmitting }) => {\n return (\n <Form>\n <StyledSelect\n name=\"subCategoryId\"\n label=\"Tipo de rotina\"\n SelectDisplayProps={{\n 'data-testid': 'subCategoryId',\n }}\n color=\"primary\"\n >\n {subCategories.map((item) => (\n <StyledMenuItem key={item.id} value={item.id} color=\"primary\">\n {item.name}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <FormikTextField\n color=\"primary\"\n id=\"name\"\n inputProps={{ 'data-testid': 'name', maxlength: 255 }}\n label=\"Nome (opcional)\"\n name=\"name\"\n margin=\"normal\"\n autoComplete=\"off\"\n />\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <StyledDateTimePicker\n color=\"primary\"\n inputVariant=\"outlined\"\n format=\"dd/MM/yyyy HH:mm\"\n name=\"dateTimeEvent\"\n value={dateTimeEvent}\n cancelLabel=\"Cancelar\"\n ampm={false}\n maxDate={maxDateTime}\n minDate={minDateTime}\n onChange={(date: Date | null) => {\n date && setDateTimeEvent(date);\n }}\n />\n </MuiPickersUtilsProvider>\n <FormikTextField\n color=\"primary\"\n id=\"comment\"\n multiline\n rows={4}\n inputProps={{ 'data-testid': 'comment', maxlength: 2000 }}\n label=\"Observações\"\n name=\"comment\"\n margin=\"normal\"\n autoComplete=\"off\"\n />\n <Centralizer>\n <OptionsButton\n data-testid=\"submit-general\"\n type=\"submit\"\n size=\"large\"\n color=\"primary\"\n disabled={isSubmitting}\n onClick={() => setContinuousAdd(false)}\n >\n Salvar e finalizar\n </OptionsButton>\n <OptionsButton\n data-testid=\"submit-general\"\n type=\"submit\"\n size=\"large\"\n color=\"primary\"\n disabled={isSubmitting}\n onClick={() => setContinuousAdd(true)}\n >\n Salvar e adicionar nova\n </OptionsButton>\n <OptionsButton\n data-testid=\"submit-general\"\n type=\"submit\"\n size=\"large\"\n color=\"primary\"\n disabled={isSubmitting}\n onClick={() => cancel()}\n >\n Cancelar\n </OptionsButton>\n </Centralizer>\n </Form>\n );\n }}\n </Formik>\n </FormContainer>\n );\n};\n\nexport default CreateRoutineEventForm;\n","import { Form } from 'formik';\nimport styled from 'styled-components';\nimport FormikTextField from '../Forms/FormikTextField';\nimport StyledButton from '../StyledButton';\n\nexport const StyledFormikTextField = styled(FormikTextField)`\n width: 100%;\n`;\n\nexport const Container = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n color: white;\n padding: ${({ theme }) => theme.spacing(1)}px\n ${({ theme }) => theme.spacing(3)}px;\n`;\n\nexport const Card = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n color: white;\n text-align: center;\n background-color: ${({ theme }) => theme.palette.secondary.dark};\n border-radius: ${({ theme }) => theme.shape.borderRadius}px;\n margin: ${({ theme }) => theme.spacing(2)}px 0;\n padding: ${({ theme }) => theme.spacing(2)}px;\n box-shadow: 0px 3px 6px #00000042;\n`;\n\nexport const CardTitleContainer = styled.div`\n display: flex;\n align-items: flex-start;\n width: 100%;\n text-indent: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const FooterContent = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const Button = styled(StyledButton)`\n color: ${({ theme }) => theme.palette.info.dark};\n border-color: ${({ theme }) => theme.palette.info.dark};\n font-size: ${({ theme }) => theme.typography.h6.fontSize};\n font-weight: 400;\n`;\n\nexport const StyledForm = styled(Form)`\n display: flex;\n flex: 1;\n`;\n","import { useContext } from 'react';\nimport * as Yup from 'yup';\nimport { AuthContext } from '../../contexts/auth';\nimport { isSelfCare } from '../../contexts/permission';\n\nexport interface FormValues {\n message: string;\n}\n\nexport interface FormProps {\n subTitle?: string;\n label?: string;\n placeholder?: string;\n buttonLabel?: string;\n // eslint-disable-next-line\n handleChange?: (value: any) => void;\n hiddenButton?: boolean;\n}\n\nexport const formInitialValues = {\n message: '',\n};\n\nexport const validationSchema = Yup.object().shape({\n message: Yup.string().max(\n 5000,\n 'A anotação deve conter no máximo 5000 caracteres.'\n ),\n});\n\nexport const defaultFormProps = (): FormProps => {\n const { userInfo } = useContext(AuthContext);\n return {\n buttonLabel: 'Adicionar',\n subTitle: 'Anotações e evolução do plantão',\n label: isSelfCare(userInfo?.user)\n ? 'Anotações do dia'\n : 'Anotações do plantão',\n placeholder: isSelfCare(userInfo?.user)\n ? 'Digite todas as informações relevantes deste dia.'\n : 'Digite todas as informações relevantes deste plantão.',\n };\n};\n","import Typography from '@material-ui/core/Typography';\nimport { Formik, FormikHelpers, FormikProps } from 'formik';\nimport React, { useContext } from 'react';\nimport { InternetConnectionContext } from '../InternetConnectionCheck/InternetConnectionContext';\nimport StyledTextFieldWhite from '../StyledTextFieldWhite';\nimport {\n Button,\n Card,\n CardTitleContainer,\n Container,\n FooterContent,\n StyledForm,\n StyledFormikTextField,\n} from './styles';\nimport {\n defaultFormProps,\n FormProps,\n FormValues,\n validationSchema,\n} from './utils';\n\nconst ExecutionMessageForm: React.FC<{\n initialValues: FormValues;\n innerRef?: React.Ref<FormikProps<FormValues>>;\n formProps?: FormProps;\n onSubmit: (\n values: FormValues,\n formikHelpers: FormikHelpers<FormValues>\n ) => void | Promise<void>;\n}> = ({ initialValues, onSubmit, innerRef, formProps }) => {\n const { internetStatus } = useContext(InternetConnectionContext);\n const defaultProps = defaultFormProps();\n return (\n <Formik\n initialValues={initialValues}\n validationSchema={validationSchema}\n onSubmit={onSubmit}\n validateOnChange={false}\n innerRef={innerRef}\n >\n {(formik) => (\n <StyledForm noValidate>\n <Container>\n <Card>\n <CardTitleContainer>\n <Typography variant=\"subtitle1\">\n {formProps?.subTitle || defaultProps.subTitle}\n </Typography>\n </CardTitleContainer>\n <StyledFormikTextField\n as={StyledTextFieldWhite}\n name=\"message\"\n label={formProps?.label || defaultProps.label}\n InputLabelProps={{ shrink: true }}\n placeholder={formProps?.placeholder || defaultProps.placeholder}\n margin=\"normal\"\n multiline\n rows={6}\n inputProps={{ 'data-testid': 'message' }}\n value={formik.values.message}\n error={Boolean(formik.errors.message)}\n helperText={formik.errors.message}\n onChange={(e) => {\n if (formProps?.handleChange) {\n formProps.handleChange(e.target.value);\n }\n formik.handleChange(e);\n }}\n />\n </Card>\n {!formProps?.hiddenButton && (\n <FooterContent>\n <Button\n type=\"submit\"\n disabled={formik.isSubmitting || internetStatus !== 'online'} // Must be online\n >\n {formProps?.buttonLabel || defaultProps.buttonLabel}\n </Button>\n </FooterContent>\n )}\n </Container>\n </StyledForm>\n )}\n </Formik>\n );\n};\n\nexport default ExecutionMessageForm;\n","import { ExecutionMessageModel } from '@cuidador/database';\nimport { AxiosInstance } from 'axios';\nimport { createOfflineProxy } from '../../config/axios/offlineProxy';\n\nexport const createOfflinePatchExecutionMessage = (\n axios: AxiosInstance,\n data: Partial<ExecutionMessageModel>\n) =>\n createOfflineProxy(axios, 'patch', async () => {\n return { data, statusCode: 200 };\n });\n","import { ExecutionMessageModel, ShiftExecutionModel } from '@cuidador/database';\nimport { useCallback, useReducer } from 'react';\nimport axios from '../../config/axios';\nimport { createReducer, Item, ReducerData } from '../../utils/store/index';\nimport { createOfflinePatchExecutionMessage } from './patchExecutionNotesOffline';\n\nconst endpoint = '/care/execution';\n\nconst initialData: ReducerData<ShiftExecutionModel> = {\n byId: {} as Record<string, Item<ShiftExecutionModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useExecution = () => {\n const [state, dispatch] = useReducer(\n createReducer<ShiftExecutionModel>(),\n initialData\n );\n\n const patchExecutionMessage = useCallback(\n async (executionId: number, data: Partial<ExecutionMessageModel>) => {\n try {\n dispatch({ type: 'LOADING' });\n const patchOfflineNotes = createOfflinePatchExecutionMessage(\n axios,\n data\n );\n const response = await patchOfflineNotes(\n `${endpoint}/${executionId}/message`,\n data\n );\n dispatch({ type: 'UPDATE', payload: response.data });\n return Promise.resolve(response);\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n return Promise.reject(err);\n }\n },\n []\n );\n\n return {\n ...state,\n patchExecutionMessage,\n };\n};\n\nexport default useExecution;\n","import styled from 'styled-components';\n\nexport const OutterContainer = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: white;\n z-index: 10;\n`;\n\nexport const Container = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\n","import {\n EventModel,\n EventSubCategoryModel,\n MeasurementModel,\n MedicationModel,\n ShiftExecutionModel,\n ShiftModel,\n} from '@cuidador/database';\nimport { isAfter, isWithinInterval } from 'date-fns';\nimport { toast } from 'react-toastify';\n\ninterface ResolveEventCreationBodyParams {\n eventData: EventModel;\n eventType: AvailableEventTypes;\n shiftInProgress?: ShiftModel | null;\n executionInProgress?: ShiftExecutionModel | null;\n medications: MedicationModel[];\n subCategories: EventSubCategoryModel[];\n minShiftLimitDate?: Date | string;\n maxShiftLimitDate?: Date | string;\n}\n\nexport type AvailableEventTypes =\n | 'complication'\n | 'general'\n | 'measurement'\n | 'medication';\n\nexport const resolveEventCreationBody = ({\n eventData,\n eventType,\n medications,\n subCategories,\n shiftInProgress,\n executionInProgress,\n maxShiftLimitDate,\n minShiftLimitDate,\n}: ResolveEventCreationBodyParams): EventModel => {\n const createdAtDate = new Date();\n createdAtDate.setMilliseconds(0); // helps resolver accuracy\n const status = resolveEventStatus({\n eventHappensAt: eventData.eventHappensAt,\n eventType,\n maxShiftLimitDate,\n minShiftLimitDate,\n });\n\n return {\n ...eventData,\n status,\n shiftId: resolveEventShiftIdData(status, shiftInProgress),\n shiftExecutionId: resolveEventShiftExecutionIdData(\n status,\n executionInProgress\n ),\n patientId: shiftInProgress?.patientId,\n createdAt: createdAtDate.toISOString(),\n eventNotifiedAt: createdAtDate.toISOString(),\n // populates medication, measurement and subCategory so the offline data can return it\n medication: resolveEventMedicatonData(eventData, medications),\n measurement: resolveEventMeasurementData(eventData, shiftInProgress),\n subCategory: resolveEventSubCategoryData({\n eventData,\n eventType,\n medications,\n subCategories,\n }),\n };\n};\n\nexport const resolveParamToProperEventType = (\n eventTypeParam: string\n): AvailableEventTypes => {\n switch (eventTypeParam) {\n case 'rotina':\n return 'general';\n case 'compromisso':\n return 'general';\n case 'intercorrencia':\n return 'complication';\n case 'medicamento':\n return 'medication';\n case 'medicao':\n return 'measurement';\n default:\n throw new Error('Invalid event type');\n }\n};\n\nconst resolveEventStatus = ({\n eventHappensAt,\n eventType,\n maxShiftLimitDate,\n minShiftLimitDate,\n}: {\n eventHappensAt?: string;\n eventType: AvailableEventTypes;\n maxShiftLimitDate?: Date | string;\n minShiftLimitDate?: Date | string;\n}): EventModel['status'] => {\n if (\n isDateAfterShift(eventHappensAt, maxShiftLimitDate) &&\n eventType === 'general'\n ) {\n return 'awaiting';\n } else if (\n isDateAtShiftInterval(eventHappensAt, minShiftLimitDate, maxShiftLimitDate)\n ) {\n return 'accomplished';\n } else {\n toast.error('O horário deve estar dentro do horário do plantão');\n throw new Error('Invalid event date');\n }\n};\n\nconst isDateAtShiftInterval = (\n dateTimeEvent?: string,\n minDateTime?: Date | string,\n maxDateTime?: Date | string\n): boolean => {\n if (!dateTimeEvent) return false;\n return !!(\n maxDateTime &&\n minDateTime &&\n isWithinInterval(new Date(dateTimeEvent), {\n start: new Date(minDateTime),\n end: new Date(maxDateTime),\n })\n );\n};\n\nconst isDateAfterShift = (\n dateTimeEvent?: string,\n shiftMaxDateTime?: Date | string\n): boolean => {\n if (!shiftMaxDateTime || !dateTimeEvent) return false;\n return isAfter(new Date(dateTimeEvent), new Date(shiftMaxDateTime));\n};\n\nconst resolveEventShiftIdData = (\n status: EventModel['status'],\n shiftInProgress?: ShiftModel | null\n): EventModel['shiftId'] => {\n return status === 'awaiting' ? undefined : shiftInProgress?.id;\n};\n\nconst resolveEventShiftExecutionIdData = (\n status: EventModel['status'],\n executionInProgress?: ShiftExecutionModel | null\n): EventModel['shiftId'] => {\n return status === 'awaiting' ? undefined : executionInProgress?.id;\n};\n\nconst resolveEventMedicatonData = (\n eventData: EventModel,\n medications: MedicationModel[]\n): MedicationModel | undefined => {\n return medications.find(\n (medication) => medication.id === eventData.medicationId\n );\n};\n\nconst resolveEventMeasurementData = (\n eventData: EventModel,\n shiftInProgress?: ShiftModel | null\n): MeasurementModel | undefined => {\n return eventData.measurement\n ? {\n ...eventData.measurement,\n patientId: shiftInProgress?.patientId,\n subCategoryId: eventData?.subCategoryId,\n }\n : undefined;\n};\n\nconst resolveEventSubCategoryData = ({\n eventData,\n eventType,\n subCategories,\n medications,\n}: {\n eventData: EventModel;\n eventType: AvailableEventTypes;\n subCategories: EventSubCategoryModel[];\n medications: MedicationModel[];\n}): EventSubCategoryModel | undefined => {\n return eventType === 'medication'\n ? medications.find((medication) => medication.id === eventData.medicationId)\n ?.subCategory\n : subCategories.find(\n (subCategory) => subCategory.id === eventData.subCategoryId\n );\n};\n","import {\n EventModel,\n EventSubCategoryModel,\n MedicationModel,\n} from '@cuidador/database';\nimport * as Sentry from '@sentry/react';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport CreateAppointmentEventForm from '../../components/CreateShiftEvent/CreateAppointmentEventForm';\nimport CreateComplicationEventForm from '../../components/CreateShiftEvent/CreateComplicationEventForm';\nimport CreateMeasurementEventForm from '../../components/CreateShiftEvent/CreateMeasurementEventForm';\nimport CreateMedicationEventForm from '../../components/CreateShiftEvent/CreateMedicationEventForm';\nimport CreateRoutineEventForm from '../../components/CreateShiftEvent/CreateRoutineEventForm';\nimport ExecutionMessageForm from '../../components/ExecutionMessageForm';\nimport { FormValues } from '../../components/ExecutionMessageForm/utils';\nimport Header from '../../components/Headers/Header';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport { CurrentShiftDataContext } from '../../contexts/CurrentShiftData';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\nimport useExecution from '../../hooks/useExecution/index';\nimport useMedication from '../../hooks/useMedication';\nimport useSubCategory from '../../hooks/useSubCategory';\nimport { resolveErrorMessage } from '../../utils/error';\nimport { Container, OutterContainer } from './styles';\nimport {\n resolveEventCreationBody,\n resolveParamToProperEventType,\n} from './utils';\n\nconst resolveTitleText = (text: string) => {\n switch (text) {\n case 'rotina':\n return 'rotina';\n case 'compromisso':\n return 'compromisso';\n case 'intercorrencia':\n return 'intercorrência';\n case 'medicamento':\n return 'medicamento';\n case 'medicao':\n return 'controle';\n case 'anotacoes':\n return 'anotações';\n default:\n return '';\n }\n};\n\nconst CreateShiftEvent: React.FC = () => {\n const [subCategories, setSubCategories] = useState<EventSubCategoryModel[]>(\n []\n );\n const [medications, setMedications] = useState<MedicationModel[]>([]);\n const {\n shiftInProgress,\n executionInProgress,\n minShiftLimitDate,\n maxShiftLimitDate,\n refreshShiftInProgress,\n } = useContext(ShiftInProgressContext);\n const { useEvent } = useContext(CurrentShiftDataContext);\n const params = useParams<{ eventType: string }>();\n const history = useHistory();\n const titleText = resolveTitleText(String(params.eventType));\n const {\n getAllAppointments,\n getAllRoutines,\n getAllComplications,\n getAllMeasurements,\n loading,\n } = useSubCategory();\n const {\n getAllMedicationsIfNecessaryByPatientId,\n loading: loadingMedication,\n } = useMedication();\n const { createShiftEvent } = useEvent();\n const { patchExecutionMessage } = useExecution();\n const [maxDateTime, setMaxDateTime] = useState<string>();\n const [minDateTime, setMinDateTime] = useState<string>();\n\n useEffect(() => {\n if (maxShiftLimitDate) {\n setMaxDateTime(maxShiftLimitDate.toISOString());\n }\n if (minShiftLimitDate) {\n setMinDateTime(minShiftLimitDate.toISOString());\n }\n }, [maxShiftLimitDate, minShiftLimitDate]);\n\n useEffect(() => {\n resolveLoad();\n }, [params.eventType]);\n\n const resolveLoad = () => {\n switch (params.eventType) {\n case 'medicamento':\n return loadMedications();\n case 'anotacoes':\n break;\n default:\n return loadSubCategories();\n }\n };\n\n const loadMedications = async () => {\n const medications = await getAllMedicationsIfNecessaryByPatientId(\n Number(shiftInProgress?.patientId)\n ).catch(() => toast.error('Erro ao carregar medicamentos'));\n setMedications(medications as MedicationModel[]);\n };\n\n const loadSubCategories = async () => {\n const subCategories = await resolveGetAllSubCategories().catch(() =>\n toast.error('Erro ao carregar tipos')\n );\n setSubCategories(subCategories as EventSubCategoryModel[]);\n };\n\n const resolveGetAllSubCategories = () => {\n switch (params.eventType) {\n case 'rotina':\n return getAllRoutines();\n case 'compromisso':\n return getAllAppointments();\n case 'intercorrencia':\n return getAllComplications();\n case 'medicao':\n return getAllMeasurements();\n default:\n throw new Error('Invalid event type');\n }\n };\n\n const handleCreateEvent = async (\n eventData: EventModel,\n continuousAdd?: boolean\n ) => {\n const eventType = resolveParamToProperEventType(params.eventType);\n const dataToSend = resolveEventCreationBody({\n eventType,\n eventData,\n medications,\n subCategories,\n minShiftLimitDate,\n maxShiftLimitDate,\n shiftInProgress,\n executionInProgress,\n });\n\n try {\n await createShiftEvent(eventType, dataToSend);\n toast.success('Adicionado com sucesso!');\n if (!continuousAdd) history.goBack();\n } catch (error) {\n console.error(error);\n Sentry.captureException(error);\n const displayMessage = resolveErrorMessage(error);\n if (displayMessage) {\n toast.error(displayMessage);\n }\n }\n };\n\n const handleExecutionMessage = async (values: FormValues) => {\n try {\n await patchExecutionMessage(Number(executionInProgress?.id), {\n shiftId: shiftInProgress?.id,\n message: values.message,\n });\n refreshShiftInProgress();\n toast.success('Anotação adicionada com sucesso!');\n history.goBack();\n } catch (error) {\n console.log(error);\n toast.error('Erro ao salvar anotação, tente novamente daqui a pouco.');\n }\n };\n\n const handleCancel = () => {\n history.goBack();\n };\n\n const renderCreateEventShiftForms = ({\n eventType,\n }: {\n eventType: string;\n }) => {\n switch (eventType) {\n case 'rotina':\n return (\n subCategories && (\n <CreateRoutineEventForm\n submit={handleCreateEvent}\n cancel={handleCancel}\n subCategories={subCategories}\n maxDateTime={maxDateTime}\n minDateTime={minDateTime}\n />\n )\n );\n case 'compromisso':\n return (\n subCategories && (\n <CreateAppointmentEventForm\n submit={handleCreateEvent}\n cancel={handleCancel}\n subCategories={subCategories}\n minDateTime={minDateTime}\n />\n )\n );\n case 'intercorrencia':\n return (\n subCategories && (\n <CreateComplicationEventForm\n submit={handleCreateEvent}\n cancel={handleCancel}\n subCategories={subCategories}\n maxDateTime={maxDateTime}\n minDateTime={minDateTime}\n />\n )\n );\n case 'medicamento':\n return (\n medications && (\n <CreateMedicationEventForm\n submit={handleCreateEvent}\n cancel={handleCancel}\n medications={medications}\n maxDateTime={maxDateTime}\n minDateTime={minDateTime}\n />\n )\n );\n case 'medicao':\n return (\n subCategories && (\n <CreateMeasurementEventForm\n submit={handleCreateEvent}\n cancel={handleCancel}\n subCategories={subCategories}\n maxDateTime={maxDateTime}\n minDateTime={minDateTime}\n />\n )\n );\n case 'anotacoes':\n return (\n <ExecutionMessageForm\n onSubmit={handleExecutionMessage}\n initialValues={{\n message: executionInProgress?.message?.message || '',\n }}\n />\n );\n default:\n return <></>;\n }\n };\n\n return (\n <>\n <OutterContainer>\n {loading ? (\n <LoadingBackdrop loading={loading || loadingMedication} />\n ) : (\n <>\n <Header leftButtonType=\"goBack\" title={`Adicionar ${titleText}`} />\n <Container>\n {renderCreateEventShiftForms({\n eventType: String(params.eventType),\n })}\n </Container>\n </>\n )}\n </OutterContainer>\n </>\n );\n};\n\nexport default CreateShiftEvent;\n","import styled from 'styled-components';\n\nexport const HeaderContainer = styled.div`\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n padding: 0 8px ${({ theme }) => theme.spacing(1)}px 8px;\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n\n h6 {\n color: ${({ theme }) => theme.palette.secondary.main};\n text-align: center;\n font-family: 'Work Sans';\n font-weight: bold;\n }\n`;\n\nexport const TimerContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-direction: row;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const TimerBox = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: center;\n flex-direction: column;\n margin: ${({ theme }) => theme.spacing(2, 2, 0, 2)};\n\n h6 {\n color: ${({ theme }) => theme.palette.primary.main};\n font-family: 'Work Sans';\n font-weight: bold;\n }\n\n p {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: ${({ theme }) => theme.spacing(-0.1)}px;\n\n svg {\n margin-right: ${({ theme }) => theme.spacing(1)}px;\n color: ${({ theme }) => theme.palette.primary.dark};\n }\n }\n`;\n\nexport const HeaderSubtitle = styled.div`\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n padding-bottom: ${({ theme }) => theme.spacing(2)}px;\n\n h6 {\n text-align: left;\n color: ${({ theme }) => theme.palette.primary.main};\n }\n\n p {\n margin: 0;\n }\n`;\n","import { Typography } from '@material-ui/core';\nimport TimerIcon from '@material-ui/icons/AccessTime';\nimport CalendarIcon from '@material-ui/icons/DateRange';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport { HeaderContainer, TimerBox, TimerContainer } from './styles';\n\ninterface ShiftTimeContestationDateBlockProps {\n startingDatetime?: Date;\n endingDatetime?: Date;\n startingLabel: string;\n endingLabel: string;\n}\n\nconst ShiftTimeContestationDateBlock: React.FC<ShiftTimeContestationDateBlockProps> = ({\n startingDatetime,\n endingDatetime,\n startingLabel,\n endingLabel,\n}) => {\n const getFormattedDate = (dateTime?: Date) => {\n if (dateTime) return format(dateTime, 'dd/MM/yyyy');\n return '';\n };\n\n const getFormattedTime = (dateTime?: Date) => {\n if (dateTime) return format(dateTime, 'HH:mm');\n return '';\n };\n\n return (\n <HeaderContainer>\n <TimerContainer>\n <TimerBox>\n <Typography color=\"secondary\" variant=\"h6\">\n {startingLabel}\n </Typography>\n <p>\n <CalendarIcon />\n {getFormattedDate(startingDatetime)}\n </p>\n <p>\n <TimerIcon />\n {getFormattedTime(startingDatetime)}\n </p>\n </TimerBox>\n <TimerBox>\n <Typography color=\"secondary\" variant=\"h6\">\n {endingLabel}\n </Typography>\n <p>\n <CalendarIcon />\n {getFormattedDate(endingDatetime)}\n </p>\n <p>\n <TimerIcon />\n {getFormattedTime(endingDatetime)}\n </p>\n </TimerBox>\n </TimerContainer>\n </HeaderContainer>\n );\n};\n\nexport default ShiftTimeContestationDateBlock;\n","import MuiFormControlLabel from '@material-ui/core/FormControlLabel';\nimport styled from 'styled-components';\n\nimport { colorMapping, ColorsType } from '../../styles/colorMapping';\n\nexport const FormControlLabel = styled(MuiFormControlLabel)<{\n $color: ColorsType;\n}>`\n & .MuiRadio-root {\n color: ${({ $color }) => colorMapping[$color]};\n padding: ${({ theme }) => theme.spacing(1)}px;\n }\n & .MuiCheckbox-root {\n color: ${({ $color }) => colorMapping[$color]};\n padding: ${({ theme }) => theme.spacing(1)}px;\n }\n`;\n","import React from 'react';\nimport { FormControlLabelProps } from '@material-ui/core/FormControlLabel';\n\nimport { ColorsType } from '../../styles/colorMapping';\nimport { FormControlLabel } from './styles';\n\ntype StyledFormControlLabelProps = {\n color?: ColorsType;\n} & FormControlLabelProps;\n\nconst StyledFormControlLabel: React.FC<StyledFormControlLabelProps> = ({\n color = 'primary',\n ...props\n}) => <FormControlLabel $color={color} {...props} />;\n\nexport default StyledFormControlLabel;\n","import { useCallback } from 'react';\nimport axios from '../config/axios';\n\nconst useShiftTimeContestation = () => {\n const post = useCallback(\n async (shiftExecutionId: number, { endedAt, startedAt, justification }) => {\n try {\n await axios.post(\n `/care/shift/execution/${shiftExecutionId}/time-contestation`,\n {\n endedAt,\n startedAt,\n justification,\n }\n );\n } catch (err) {\n return Promise.reject(err);\n }\n },\n []\n );\n\n return { post };\n};\n\nexport default useShiftTimeContestation;\n","import React from 'react';\nimport {\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from '@material-ui/core';\nimport { DialogProps } from '@material-ui/core/Dialog';\n\nimport StyledDialog from '../../../components/StyledDialog';\nimport StyledButton from '../../../components/StyledButton';\n\ninterface ConfirmSaveDialogProps extends DialogProps {\n onConfirm: (() => void) | undefined;\n onClose: () => void;\n}\n\nconst ConfirmSaveDialog: React.FC<ConfirmSaveDialogProps> = ({\n open,\n onClose,\n onConfirm,\n}) => {\n return (\n <StyledDialog open={open} onClose={onClose}>\n <DialogContent>\n <DialogTitle>Tem certeza que deseja salvar?</DialogTitle>\n <DialogContentText align=\"center\">\n Você não poderá fazer outra alteração nesse plantão.\n </DialogContentText>\n <DialogActions>\n <StyledButton onClick={onClose} color=\"inherit\" variant=\"text\">\n Voltar\n </StyledButton>\n <StyledButton\n data-testid=\"confirm-time-contestation-submit-button\"\n onClick={onConfirm}\n color=\"inherit\"\n >\n Confirmar\n </StyledButton>\n </DialogActions>\n </DialogContent>\n </StyledDialog>\n );\n};\n\nexport default ConfirmSaveDialog;\n","import { DatePicker, TimePicker } from '@material-ui/pickers';\nimport { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\nimport StyledButton from '../../components/StyledButton';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nexport const Body = styled.div`\n display: flex;\n flex: 1;\n background-color: ${({ theme }) => theme.palette.common.white};\n flex-direction: column;\n max-width: 600px;\n`;\n\nexport const TopGuidelineParagraph = styled.p`\n color: ${({ theme }) => theme.palette.primary.main};\n padding: 8px 24px 8px;\n text-align: center;\n`;\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n width: 100%;\n height: 100%;\n justify-content: center;\n align-items: center;\n margin-top: ${({ theme }) => theme.spacing(-1)}px;\n`;\n\nexport const StyledDatePicker = styled(DatePicker)`\n width: 100%;\n & .MuiInputBase-root {\n color: ${({ theme }) => theme.palette.primary.main};\n }\n & .MuiOutlinedInput-input {\n padding: ${({ theme }) => theme.spacing(1.5)}px;\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n }\n & .MuiOutlinedInput-root {\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n }\n & .MuiOutlinedInput-notchedOutline {\n border-color: ${({ theme }) => theme.palette.primary.main};\n }\n`;\n\nexport const StyledTimePicker = styled(TimePicker)`\n width: 100%;\n & .MuiInputBase-root {\n color: ${({ theme }) => theme.palette.primary.main};\n }\n & .MuiOutlinedInput-input {\n padding: ${({ theme }) => theme.spacing(1.5)}px;\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n }\n & .MuiOutlinedInput-root {\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n }\n & .MuiOutlinedInput-notchedOutline {\n border-color: ${({ theme }) => theme.palette.primary.main};\n }\n`;\n\nexport const StyledOptions = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n justify-content: space-between;\n margin: ${({ theme }) => theme.spacing(2, 0)};\n`;\n\nexport const Button = styled(StyledButton)`\n width: 45%;\n`;\n\nexport const FormInnerContainer = styled.div`\n padding: 12px 24px 24px 24px;\n`;\n\nexport const DateTimePickersGroup = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0 16px;\n margin-block: 0 16px;\n margin-inline: 16px;\n\n svg {\n margin-right: ${({ theme }) => theme.spacing(1)}px;\n color: ${({ theme }) => theme.palette.primary.main};\n }\n\n > div {\n display: flex;\n flex-direction: row;\n align-items: center;\n img {\n margin-right: 8px;\n margin-top: 12px;\n }\n\n > div {\n margin-bottom: 0;\n > p {\n color: ${({ theme }) => theme.palette.error.main};\n }\n }\n }\n`;\n\nexport const DateTimeCheckboxGroup = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n span {\n color: ${({ theme }) => theme.palette.primary.main};\n font-weight: bold;\n }\n`;\n\nexport const JustificationContainer = styled.div`\n margin-top: ${({ theme }) => theme.spacing(4)}px;\n`;\n","import { DatePickerProps, TimePickerProps } from '@material-ui/pickers';\nimport { ErrorMessage } from 'formik';\nimport React from 'react';\nimport { StyledDatePicker, StyledTimePicker } from '../styles';\n\nexport const DatePicker: React.FC<\n Omit<DatePickerProps, 'value' | 'onChange'> & {\n name: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: any;\n setFieldValue: (\n field: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n shouldValidate?: boolean | undefined\n ) => void;\n }\n> = ({ name, values, setFieldValue, ...rest }) => {\n return (\n <StyledDatePicker\n {...rest}\n data-testid={`data-${name}`}\n name={name}\n value={values[name]}\n onChange={(date: Date | null) => {\n // Since it's a Date only picker, lets set hours, minutes, seconds and milliseconds to 0\n date?.setHours(0, 0, 0, 0);\n setFieldValue(name, date, true);\n }}\n inputVariant=\"outlined\"\n cancelLabel=\"Cancelar\"\n helperText={<ErrorMessage name={name} />}\n />\n );\n};\n\nexport const TimePicker: React.FC<\n Omit<TimePickerProps, 'value' | 'onChange'> & {\n name: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: any;\n setFieldValue: (\n field: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n shouldValidate?: boolean | undefined\n ) => void;\n }\n> = ({ name, values, setFieldValue, ...rest }) => {\n return (\n <StyledTimePicker\n {...rest}\n data-testid={`data-${name}`}\n name={name}\n value={values[name]}\n onChange={(date: Date | null) => {\n setFieldValue(name, date, true);\n }}\n inputVariant=\"outlined\"\n cancelLabel=\"Cancelar\"\n helperText={<ErrorMessage name={name} />}\n />\n );\n};\n","import { ShiftModel } from '@cuidador/database';\nimport DateFnsUtils from '@date-io/date-fns';\nimport { Checkbox } from '@material-ui/core';\nimport CalendarIcon from '@material-ui/icons/DateRange';\nimport TimeIcon from '@material-ui/icons/WatchLater';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ptBr from 'date-fns/locale/pt-BR';\nimport { Formik } from 'formik';\nimport { orderBy } from 'lodash';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport * as yup from 'yup';\nimport FormikTextField from '../../components/Forms/FormikTextField';\nimport Header from '../../components/Headers/Header';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport ShiftTimeContestationDateBlock from '../../components/ShiftTimeContestationDateBlock';\nimport StyledFormControlLabel from '../../components/StyledFormControlLabel';\nimport { AuthContext } from '../../contexts/auth';\nimport useShift from '../../hooks/useShift';\nimport useShiftTimeContestation from '../../hooks/useShiftExecutionTimeContestation';\nimport { resolveErrorMessage } from '../../utils/error';\nimport ConfirmSaveDialog from './ConfirmSaveDialog';\nimport { DatePicker, TimePicker } from './DateTimePickers';\nimport {\n Body,\n Button,\n Container,\n DateTimeCheckboxGroup,\n DateTimePickersGroup,\n Form,\n FormInnerContainer,\n JustificationContainer,\n StyledOptions,\n TopGuidelineParagraph,\n} from './styles';\n\nexport type FormValues = {\n startedAtDate: Date | null | undefined;\n startedAtTime: Date | null | undefined;\n endedAtDate: Date | null | undefined;\n endedAtTime: Date | null | undefined;\n justification: string;\n startedDatetimeEnabled: boolean;\n endedDatetimeEnabled: boolean;\n isSubmitConfirmationModalOpen: boolean;\n};\n\nconst validationSchema = yup.object().shape({\n startedAtDate: yup\n .date()\n .nullable()\n .typeError('Por favor, insira uma data válida')\n .when(\n 'startedDatetimeEnabled',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (startedDatetimeEnabled: any, schema: any) =>\n startedDatetimeEnabled\n ? schema.required('Por favor, insira uma data de inÃcio')\n : schema\n ),\n startedAtTime: yup\n .date()\n .nullable()\n .typeError('Por favor, insira uma data válida')\n .when(\n 'startedDatetimeEnabled',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (startedDatetimeEnabled: any, schema: any) =>\n startedDatetimeEnabled\n ? schema.required('Por favor, insira um horário de inÃcio')\n : schema\n ),\n endedAtDate: yup\n .date()\n .nullable()\n .typeError('Por favor, insira uma data válida')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .when('endedDatetimeEnabled', (endedDatetimeEnabled: any, schema: any) =>\n endedDatetimeEnabled\n ? schema.required('Por favor, insira uma data de fim')\n : schema\n ),\n endedAtTime: yup\n .date()\n .nullable()\n .typeError('Por favor, insira uma data válida')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .when('endedDatetimeEnabled', (endedDatetimeEnabled: any, schema: any) =>\n endedDatetimeEnabled\n ? schema.required('Por favor, insira um horário de fim')\n : schema\n ),\n justification: yup\n .string()\n .nullable()\n .typeError('Por favor, insira uma justificativa válida')\n .required('Por favor, insira uma justificativa'),\n});\n\nconst CreateTimeContestationForm: React.FC<{\n onSubmit: (values: FormValues) => void;\n onCancel: () => void;\n minTimeContestationDatetime?: Date;\n maxTimeContestationDatetime?: Date;\n}> = ({\n onSubmit,\n onCancel,\n minTimeContestationDatetime,\n maxTimeContestationDatetime,\n}) => {\n return (\n <Formik\n validateOnChange={false}\n initialValues={{\n startedAtDate: null,\n startedAtTime: null,\n endedAtDate: null,\n endedAtTime: null,\n justification: '',\n startedDatetimeEnabled: false,\n endedDatetimeEnabled: false,\n isSubmitConfirmationModalOpen: false,\n }}\n validationSchema={validationSchema}\n onSubmit={onSubmit}\n >\n {({\n isSubmitting,\n values,\n setFieldValue,\n submitForm,\n validateForm,\n setFieldTouched,\n }) => {\n const handleStartedDatetimeToogle = () => {\n const newValue = !values.startedDatetimeEnabled;\n setFieldValue('startedDatetimeEnabled', newValue);\n if (\n newValue &&\n !values.startedAtDate &&\n minTimeContestationDatetime &&\n maxTimeContestationDatetime &&\n checkIfDatesDaysAreEqual(\n minTimeContestationDatetime,\n maxTimeContestationDatetime\n )\n ) {\n setFieldValue('startedAtDate', minTimeContestationDatetime);\n }\n };\n const handleEndedDatetimeToogle = () => {\n const newValue = !values.endedDatetimeEnabled;\n setFieldValue('endedDatetimeEnabled', newValue);\n if (\n newValue &&\n !values.endedAtDate &&\n minTimeContestationDatetime &&\n maxTimeContestationDatetime &&\n checkIfDatesDaysAreEqual(\n minTimeContestationDatetime,\n maxTimeContestationDatetime\n )\n ) {\n setFieldValue('endedAtDate', minTimeContestationDatetime);\n }\n };\n\n const handleSaveClick = () => {\n return validateForm().then((errors) => {\n const hasErrors = Object.keys(errors).length > 0;\n if (hasErrors) {\n // If errors exist, set all fields as \"touched\", so validation errors\n // are displayed\n Object.keys(values).forEach((field) => {\n setFieldTouched(field);\n });\n } else {\n // If no errors exist, open confirmation modal\n setFieldValue('isSubmitConfirmationModalOpen', true);\n }\n });\n };\n\n return (\n <Form noValidate={true}>\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <FormInnerContainer>\n <div>\n <DateTimeCheckboxGroup>\n <StyledFormControlLabel\n control={\n <Checkbox\n name=\"startedDatetimeEnabled\"\n value={values.startedDatetimeEnabled}\n onChange={handleStartedDatetimeToogle}\n />\n }\n label=\"InÃcio da execução\"\n />\n </DateTimeCheckboxGroup>\n <DateTimePickersGroup>\n <div>\n <CalendarIcon width={20} />\n <DatePicker\n format=\"dd/MM/yyyy\"\n name=\"startedAtDate\"\n inputProps={{\n 'data-testid': 'startedAtDate',\n }}\n DialogProps={\n {\n 'data-testid': 'startedAtDateDialog',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any // 'data-testid' isn't typed on current DialogProps interface\n }\n setFieldValue={setFieldValue}\n values={values}\n disabled={!values.startedDatetimeEnabled}\n minDate={minTimeContestationDatetime}\n maxDate={maxTimeContestationDatetime}\n />\n </div>\n <div>\n <TimeIcon width={20} />\n <TimePicker\n format=\"HH:mm\"\n name=\"startedAtTime\"\n inputProps={{\n 'data-testid': 'startedAtTime',\n }}\n DialogProps={\n {\n 'data-testid': 'startedAtTimeDialog',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any // 'data-testid' isn't typed on current DialogProps interface\n }\n setFieldValue={setFieldValue}\n values={values}\n disabled={!values.startedDatetimeEnabled}\n ampm={false}\n />\n </div>\n </DateTimePickersGroup>\n </div>\n <div>\n <DateTimeCheckboxGroup>\n <StyledFormControlLabel\n control={\n <Checkbox\n name=\"endedDatetimeEnabled\"\n value={values.endedDatetimeEnabled}\n onChange={handleEndedDatetimeToogle}\n />\n }\n label=\"Fim da execução\"\n />\n </DateTimeCheckboxGroup>\n <DateTimePickersGroup>\n <div>\n <CalendarIcon width={20} />\n <DatePicker\n format=\"dd/MM/yyyy\"\n name=\"endedAtDate\"\n inputProps={{\n 'data-testid': 'endedAtDate',\n }}\n DialogProps={\n {\n 'data-testid': 'endedAtDateDialog',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any // 'data-testid' isn't typed on current DialogProps interface\n }\n setFieldValue={setFieldValue}\n values={values}\n disabled={!values.endedDatetimeEnabled}\n minDate={minTimeContestationDatetime}\n maxDate={maxTimeContestationDatetime}\n />\n </div>\n <div>\n <TimeIcon width={20} />\n <TimePicker\n format=\"HH:mm\"\n name=\"endedAtTime\"\n inputProps={{\n 'data-testid': 'endedAtTime',\n }}\n DialogProps={\n {\n 'data-testid': 'endedAtTimeDialog',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any // 'data-testid' isn't typed on current DialogProps interface\n }\n setFieldValue={setFieldValue}\n values={values}\n disabled={!values.endedDatetimeEnabled}\n ampm={false}\n />\n </div>\n </DateTimePickersGroup>\n </div>\n <JustificationContainer>\n <FormikTextField\n color=\"primary\"\n id=\"justification\"\n multiline\n rows={4}\n inputProps={{\n 'data-testid': 'justification',\n maxLength: 2000,\n }}\n label=\"Justificativa (obrigatória)\"\n name=\"justification\"\n fullWidth\n autoComplete=\"off\"\n required\n />\n </JustificationContainer>\n <StyledOptions>\n <Button size=\"medium\" color=\"primary\" onClick={onCancel}>\n Cancelar\n </Button>\n <Button\n size=\"medium\"\n color=\"primary\"\n variant=\"contained\"\n disabled={isSubmitting}\n onClick={handleSaveClick}\n >\n Salvar\n </Button>\n </StyledOptions>\n </FormInnerContainer>\n </MuiPickersUtilsProvider>\n <ConfirmSaveDialog\n open={values.isSubmitConfirmationModalOpen}\n onClose={() => {\n setFieldValue('isSubmitConfirmationModalOpen', false);\n }}\n onConfirm={() => {\n setFieldValue('isSubmitConfirmationModalOpen', false);\n submitForm();\n }}\n />\n </Form>\n );\n }}\n </Formik>\n );\n};\n\nconst checkIfDatesDaysAreEqual = (dateA: Date, dateB: Date) => {\n return dateA.getDate() === dateB.getDate();\n};\n\nconst CreateTimeContestation: React.FC = () => {\n const history = useHistory();\n const { shiftId, shiftExecutionId } = useParams<{\n shiftId: string;\n shiftExecutionId: string;\n }>();\n const [shift, setShift] = useState<ShiftModel>();\n const { userInfo } = useContext(AuthContext);\n const { getById, loading } = useShift();\n const { post: postShiftTimeContestation } = useShiftTimeContestation();\n\n const shiftExecution = useMemo(\n () =>\n shift?.executions?.find(\n (execution) => execution.id === Number(shiftExecutionId)\n ),\n [shift]\n );\n\n useEffect(() => {\n if (!shiftExecution || !userInfo) return;\n\n const executionHasContestation =\n !!shiftExecution.timeContestations &&\n shiftExecution.timeContestations.length > 0;\n\n const executionBelongsToCaregiver =\n shiftExecution.caregiverId === userInfo.id;\n\n if (!executionBelongsToCaregiver) return history.goBack();\n\n // Caregivers can only contest an execution once\n const caregiverHasAlreadyContestedExecution = !!shiftExecution.timeContestations?.find(\n ({ createdById }) => createdById === userInfo.id\n );\n\n if (executionHasContestation && caregiverHasAlreadyContestedExecution)\n return history.goBack();\n }, [userInfo, shift]);\n\n useEffect(() => {\n if (shiftId) {\n getById(Number(shiftId)).then((shift) => {\n setShift(shift as ShiftModel);\n });\n }\n }, [shiftId]);\n\n const {\n minTimeContestationDatetime,\n maxTimeContestationDatetime,\n } = useMemo(() => {\n const minTimeContestationDatetime = shift?.plannedToStartAt\n ? new Date(shift.plannedToStartAt)\n : undefined;\n const maxTimeContestationDatetime = shift?.plannedToEndAt\n ? new Date(shift.plannedToEndAt)\n : undefined;\n\n return {\n minTimeContestationDatetime,\n maxTimeContestationDatetime,\n };\n }, [shift?.plannedToStartAt, shift?.plannedToEndAt]);\n\n const handleTimeContestationSubmitted = async (values: FormValues) => {\n let startedAt;\n if (\n values.startedDatetimeEnabled &&\n values.startedAtDate &&\n values.startedAtTime\n ) {\n startedAt = new Date(values.startedAtDate);\n startedAt.setHours(values.startedAtTime?.getHours());\n startedAt.setMinutes(values.startedAtTime?.getMinutes());\n }\n\n let endedAt;\n if (\n values.endedDatetimeEnabled &&\n values.endedAtDate &&\n values.endedAtTime\n ) {\n endedAt = new Date(values.endedAtDate);\n endedAt.setHours(values.endedAtTime?.getHours());\n endedAt.setMinutes(values.endedAtTime?.getMinutes());\n }\n\n const body: {\n justification: string;\n startedAt?: Date;\n endedAt?: Date;\n } = {\n justification: values.justification,\n };\n\n if (startedAt) {\n body.startedAt = startedAt;\n }\n\n if (endedAt) {\n body.endedAt = endedAt;\n }\n\n await postShiftTimeContestation(Number(shiftExecutionId), body)\n .then(() => {\n toast.success('Correção de horários feita com sucesso');\n history.goBack();\n })\n .catch((err) => {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n });\n };\n\n const onCancel = () => {\n history.goBack();\n };\n\n const title: string = useMemo(() => {\n if (!shift || !shift.executions || shift.executions.length === 0)\n return 'Correção de horários';\n\n const currentExecutionIndex = orderBy(\n shift.executions,\n 'createdAt'\n ).findIndex((execution) => execution.id === Number(shiftExecutionId));\n\n if (currentExecutionIndex < 0) return 'Correção de horários';\n\n return `Correção de horários da Execução ${currentExecutionIndex + 1}`;\n }, [shift]);\n\n if (loading) {\n return <LoadingBackdrop loading />;\n }\n\n if (!shift || !shift.executions || shift.executions.length === 0) {\n return null;\n }\n\n return (\n <Container>\n <Header title={title} />\n <Body>\n <TopGuidelineParagraph>\n Selecione e preencha <b>apenas</b> o perÃodo (data e horário) que\n deseja corrigir.\n </TopGuidelineParagraph>\n <ShiftTimeContestationDateBlock\n startingLabel=\"InÃcio planejado\"\n startingDatetime={\n shift?.plannedToStartAt\n ? new Date(shift.plannedToStartAt)\n : undefined\n }\n endingLabel=\"Fim planejado\"\n endingDatetime={\n shift?.plannedToEndAt ? new Date(shift.plannedToEndAt) : undefined\n }\n />\n <div>\n <CreateTimeContestationForm\n onCancel={onCancel}\n onSubmit={handleTimeContestationSubmitted}\n minTimeContestationDatetime={minTimeContestationDatetime}\n maxTimeContestationDatetime={maxTimeContestationDatetime}\n />\n </div>\n </Body>\n </Container>\n );\n};\n\nexport default CreateTimeContestation;\n","import styled from 'styled-components';\nimport { Typography, Accordion as MuiAccordion } from '@material-ui/core';\n\nimport StyledPaper from '../StyledPaper';\n\nexport const Accordion = styled(MuiAccordion)<{ $backgroundColor?: string }>`\n background-color: ${({ $backgroundColor, theme }) =>\n $backgroundColor ? `#${$backgroundColor}` : theme.palette.primary.main};\n color: ${({ theme }) => theme.palette.common.white};\n border-radius: ${({ theme }) => theme.shape.borderRadius}px;\n margin: ${({ theme }) => theme.spacing(0, 0, 2)};\n &.Mui-expanded {\n margin: ${({ theme }) => theme.spacing(0, 0, 2)};\n }\n & .MuiAccordionSummary-expandIcon {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & .MuiAccordionSummary-content {\n flex-direction: column;\n margin: ${({ theme }) => theme.spacing(2, 0)};\n &.Mui-expanded {\n margin: ${({ theme }) => theme.spacing(2, 0)};\n }\n }\n & .MuiAccordionDetails-root {\n flex-direction: column;\n }\n`;\n\nexport const CareLineCard = styled(StyledPaper)`\n display: flex;\n align-items: center;\n margin: ${({ theme }) => theme.spacing(0, 0, 2)};\n border-radius: ${({ theme }) => theme.shape.borderRadius}px;\n a {\n color: ${({ theme }) => theme.palette.primary.main};\n }\n :last-child {\n margin: 0px;\n }\n`;\n\nexport const CareLineInfo = styled.div`\n flex: 1;\n flex-direction: column;\n`;\n\nexport const CareLineName = styled(Typography)`\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const CareLineStatus = styled(Typography).attrs({\n variant: 'caption',\n})<{\n $answered?: boolean;\n}>`\n color: ${({ theme, $answered }) =>\n $answered ? theme.palette.success.main : theme.palette.error.light};\n`;\n","import AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport useCanAccess from '../../hooks/useCanAccess';\nimport { NormalizedCareCategory } from '../../utils/shiftQuestion';\nimport {\n Accordion,\n CareLineCard,\n CareLineInfo,\n CareLineName,\n CareLineStatus,\n} from './styles';\n\nconst CareCategoryAccordion: React.FC<\n NormalizedCareCategory & { careCategoryIndex: number }\n> = ({\n careCategoryIndex,\n colorHexa,\n name,\n careLines,\n totalAnswered,\n totalQuestions,\n}) => {\n const { isAllowedToCreate: isAllowedToCreateCareQuestions } = useCanAccess(\n 'care/shift/care-question'\n );\n return (\n <Accordion $backgroundColor={colorHexa}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography>{name}</Typography>\n\n <Typography variant=\"caption\">{`${totalAnswered}/${totalQuestions} perguntas respondidas`}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n {careLines.map((careLine, index) => {\n const answered = careLine.totalQuestions === careLine.totalAnswered;\n return (\n <CareLineCard key={careLine.id}>\n <CareLineInfo>\n <Typography>\n {careLine.careQuestions[0].careQuestionText}\n </Typography>\n <CareLineName>{careLine.name}</CareLineName>\n <CareLineStatus $answered={answered}>\n {answered ? 'Respondida' : 'Não respondida'}\n </CareLineStatus>\n </CareLineInfo>\n {isAllowedToCreateCareQuestions &&\n careLine?.careQuestions?.length && (\n <Link\n data-testid={`answer[${careCategoryIndex}-${index}-${0}]`}\n to={{\n pathname: '/perguntas',\n state: {\n careCategoryIndex: careCategoryIndex,\n careLineIndex: index as number,\n careQuestionIndex: 0,\n },\n }}\n >\n Responder\n </Link>\n )}\n </CareLineCard>\n );\n })}\n </AccordionDetails>\n </Accordion>\n );\n};\n\nexport default CareCategoryAccordion;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: ${({ theme }) => theme.spacing(2, 2)};\n color: black;\n`;\n\nexport const HeaderContainer = styled.div`\n padding-bottom: ${({ theme }) => theme.spacing(2)}px;\n margin-top: ${({ theme }) => theme.spacing(-2.5)}px;\n`;\n","import React, { useContext, useEffect } from 'react';\nimport { toast } from 'react-toastify';\n\nimport CareCategoryAccordion from '../CareCategoryAccordion';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\n\nimport { Container, HeaderContainer } from './styles';\nimport { Typography } from '@material-ui/core';\nimport LoadingBackdrop from '../LoadingBackdrop';\nimport { CurrentShiftDataContext } from '../../contexts/CurrentShiftData';\n\nconst CareCategoryList: React.FC = () => {\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n const { useShiftQuestions } = useContext(CurrentShiftDataContext);\n const { getQuestionsByShiftId, ids, byId, loading } = useShiftQuestions();\n\n useEffect(() => {\n const shiftId = Number(shiftInProgress!.id);\n getQuestionsByShiftId(shiftId).catch(() => {\n toast.error(\n 'Erro ao recuperar lista de cuidados. Tente novamente daqui a pouco'\n );\n });\n }, [getQuestionsByShiftId]);\n\n return (\n <>\n {loading ? (\n <LoadingBackdrop loading={loading} />\n ) : (\n <Container>\n {ids.length !== 0 ? (\n <>\n <HeaderContainer>\n <Typography variant=\"body2\" align=\"center\">\n Plano de cuidado criado sob medida para orientar o cuidado\n diário, porque entendemos que cada pessoa é única.\n </Typography>\n </HeaderContainer>\n {ids.map((id, index) => {\n const item = byId[id];\n return (\n <CareCategoryAccordion\n key={item.id}\n {...item}\n careCategoryIndex={index}\n />\n );\n })}\n </>\n ) : (\n <>\n <Typography variant=\"subtitle1\" align=\"center\">\n Não há perguntas de cuidado a serem respondidas.\n </Typography>\n </>\n )}\n </Container>\n )}\n </>\n );\n};\n\nexport default CareCategoryList;\n","export default __webpack_public_path__ + \"static/media/Icon-coloredCalendar.95678941.svg\";","export default __webpack_public_path__ + \"static/media/Icon-time-color.d646ab35.svg\";","export default __webpack_public_path__ + \"static/media/Icon-time.baf80537.svg\";","import { isWithinInterval } from 'date-fns';\n\nexport const getEventDateByTime = (time: string): string => {\n const [hour, minute] = time.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n return date.toISOString();\n};\n\nexport const isDateAtInterval = (\n dateTimeEvent: Date,\n minDateTime?: Date | string,\n maxDateTime?: Date | string\n): boolean => {\n return !!(\n maxDateTime &&\n minDateTime &&\n isWithinInterval(dateTimeEvent, {\n start: new Date(minDateTime),\n end: new Date(maxDateTime),\n })\n );\n};\n","import { EventModel } from '@cuidador/database';\nimport {\n addMinutes,\n differenceInMinutes,\n format,\n isAfter,\n isBefore,\n} from 'date-fns';\nimport { useCallback, useContext, useEffect, useState } from 'react';\nimport { toast } from 'react-toastify';\nimport { isDateAtInterval } from '../components/CreateShiftEvent/utils';\nimport { AuthContext } from '../contexts/auth';\nimport { ShiftInProgressContext } from '../contexts/ShiftInProgress';\n\nconst STATUS_TOGGLE_TIME_ALLOWED_CHECK_INTERVAL = 10000; // 10000ms\n\nconst checkIfStatusToggleTimeIsAllowed = (event: EventModel) => {\n const eventTime = event.updatedTimeHappensAt || event.eventHappensAt;\n const minutesToEvent = differenceInMinutes(\n new Date(`${eventTime}`),\n new Date()\n );\n if (minutesToEvent >= 20) {\n return false;\n } else {\n return true;\n }\n};\n\nexport const checkIfUserIsAllowedToPatchEvent = (\n event: EventModel,\n userId?: number\n) => {\n if (event.status === 'accomplished' && event.caregiverId !== userId) {\n return false;\n }\n return true;\n};\n\nconst useShiftEventHandling = (\n event: EventModel,\n {\n onChangeStatus,\n onChangeComment,\n onChangeTime,\n }: {\n onChangeStatus?: (id: number, newStatus: EventModel['status']) => void;\n onChangeComment?: (id: number, newComment: string) => void;\n onChangeTime?: (id: number, updatedTimeHappensAt: string | null) => void;\n }\n) => {\n const date = format(new Date(`${event.eventHappensAt}`), 'HH:mm');\n const [currentStatus, setCurrentStatus] = useState<EventModel['status']>(\n event.status\n );\n const [currentComment, setCurrentComment] = useState(event.comment || '');\n const [isStatusToggleTimeAllowed, setIsStatusToggleTimeAllowed] = useState(\n checkIfStatusToggleTimeIsAllowed(event)\n );\n const { userInfo } = useContext(AuthContext);\n const [isUserAllowedToPatchEvent, setIsUserAllowedToPatchEvent] = useState(\n checkIfUserIsAllowedToPatchEvent(event, userInfo?.user?.id)\n );\n const { minShiftLimitDate, maxShiftLimitDate } = useContext(\n ShiftInProgressContext\n );\n\n useEffect(() => {\n const intervalId: NodeJS.Timeout = setInterval(() => {\n const statusToggleTimeAllowed = checkIfStatusToggleTimeIsAllowed(event);\n if (statusToggleTimeAllowed !== isStatusToggleTimeAllowed) {\n setIsStatusToggleTimeAllowed(statusToggleTimeAllowed);\n }\n }, STATUS_TOGGLE_TIME_ALLOWED_CHECK_INTERVAL);\n return () => clearInterval(intervalId);\n }, []);\n\n useEffect(() => {\n // Force status refresh if event time changed\n const statusToggleTimeAllowed = checkIfStatusToggleTimeIsAllowed(event);\n if (statusToggleTimeAllowed !== isStatusToggleTimeAllowed) {\n setIsStatusToggleTimeAllowed(statusToggleTimeAllowed);\n }\n }, [event.updatedTimeHappensAt, event.eventHappensAt]);\n\n useEffect(() => {\n setIsUserAllowedToPatchEvent(\n checkIfUserIsAllowedToPatchEvent(event, userInfo?.user?.id)\n );\n }, [event, userInfo]);\n\n const handleStatusToggle = useCallback(\n (newStatus: 'accomplished' | 'not_accomplished') => {\n if (!onChangeStatus) {\n console.warn(\n 'useShiftEventHandling.handleStatusToggle should not be used if onChangeStatus props is not defined'\n );\n return;\n }\n if (!isStatusToggleTimeAllowed) {\n toast.dismiss('status-toggle-warning-toast');\n toast.warning(\n 'Evento ainda não disponÃvel. Para registro com horário alterado, clique no botão \"relógio\"',\n { toastId: 'status-toggle-warning-toast' }\n );\n return;\n }\n setCurrentStatus((previousStatus) => {\n const toggledStatus =\n previousStatus === newStatus ? 'awaiting' : newStatus;\n\n onChangeStatus(event.id!, toggledStatus);\n\n return toggledStatus;\n });\n },\n [event.id, isStatusToggleTimeAllowed, setCurrentStatus, onChangeStatus]\n );\n\n const handleUpdatedTime = (updatedTimeHappens: Date | null) => {\n if (!onChangeTime || !onChangeStatus) {\n console.warn(\n 'useShiftEventHandling.handleUpdatedTime should not be used if onChangeTime or onChangeStatus props are not defined'\n );\n return;\n }\n\n const isoUpdatedTimeHappens = updatedTimeHappens\n ? updatedTimeHappens.toISOString()\n : null;\n\n if (\n updatedTimeHappens &&\n !isDateAtInterval(\n updatedTimeHappens,\n minShiftLimitDate,\n maxShiftLimitDate\n )\n ) {\n toast.error('O horário deve estar dentro do horário do plantão');\n return;\n }\n\n // Updates time\n onChangeTime(event.id!, isoUpdatedTimeHappens);\n\n // If time is in the past, updates status to 'accomplished'\n if (\n isoUpdatedTimeHappens &&\n isBefore(new Date(isoUpdatedTimeHappens), new Date())\n ) {\n setCurrentStatus('accomplished');\n onChangeStatus(event.id!, 'accomplished');\n } else if (\n isoUpdatedTimeHappens &&\n isAfter(new Date(isoUpdatedTimeHappens), addMinutes(new Date(), 20))\n ) {\n setCurrentStatus('awaiting');\n onChangeStatus(event.id!, 'awaiting');\n }\n };\n\n const handleCommentChange = (newComment: string) => {\n if (!onChangeComment) {\n console.warn(\n 'useShiftEventHandling.handleCommentChange should not be used if onChangeComment props is not defined'\n );\n return;\n }\n setCurrentComment(newComment);\n onChangeComment(event.id!, newComment);\n };\n\n const handleAllowedPatchEvent = (callbackFn: () => void) => {\n if (isUserAllowedToPatchEvent) {\n return callbackFn();\n } else {\n toast.dismiss('patch-warning-toast');\n toast.warning('Apenas quem registrou esse evento pode editá-lo.', {\n toastId: 'patch-warning-toast',\n });\n return;\n }\n };\n\n return {\n date,\n isStatusToggleTimeAllowed,\n isUserAllowedToPatchEvent,\n minShiftLimitDate,\n maxShiftLimitDate,\n currentStatus,\n currentComment,\n handleStatusToggle,\n handleUpdatedTime,\n handleCommentChange,\n handleAllowedPatchEvent,\n };\n};\n\nexport default useShiftEventHandling;\n","import { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\nimport StyledButton from '../../../StyledButton';\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n width: 100%;\n height: 100%;\n justify-content: center;\n align-items: center;\n margin-top: ${({ theme }) => theme.spacing(-1)}px;\n`;\n\nexport const StyledOptions = styled.div`\n width: 100%;\n display: flex;\n flex: 1;\n flex-direction: row;\n justify-content: space-between;\n margin: ${({ theme }) => theme.spacing(2, 0)};\n`;\n\nexport const Button = styled(StyledButton)`\n width: 45%;\n`;\n\nexport const LargeButton = styled(StyledButton)`\n width: 100%;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n","import { Formik } from 'formik';\nimport React from 'react';\nimport * as yup from 'yup';\nimport FormikTextField from '../../../Forms/FormikTextField';\nimport StyledSimpleModal from '../../../StyledSimpleModal';\nimport { Button, Form, LargeButton, StyledOptions } from './styles';\n\nexport type ModalProps = {\n handleEventComment: (values: FormValues) => void;\n onClose: () => void;\n readonly?: boolean;\n eventId: number;\n opened: boolean;\n initialValues?: FormValues;\n allowRemoveButton?: boolean;\n};\n\nexport type FormValues = {\n comment: string;\n};\n\nconst validationSchema = yup.object().shape({\n comment: yup\n .string()\n .required('Por favor, insira uma observação')\n .max(500, 'A observação deve conter no máximo 500 caracteres.'),\n});\n\nconst defaultValues = {\n comment: '',\n};\n\nconst CommentModal: React.FC<ModalProps> = ({\n handleEventComment,\n onClose,\n readonly = false,\n opened,\n initialValues,\n allowRemoveButton,\n}) => {\n return (\n <StyledSimpleModal open={opened} title={'Adicionar observação'}>\n <Formik\n validateOnChange={false}\n initialValues={initialValues || defaultValues}\n validationSchema={validationSchema}\n onSubmit={handleEventComment}\n >\n {({ isSubmitting }) => {\n return (\n <Form noValidate={true}>\n <FormikTextField\n id=\"description\"\n color=\"white\"\n multiline\n rows={4}\n inputProps={{ 'data-testid': 'comment', maxlength: 255 }}\n label=\"Observações\"\n name=\"comment\"\n margin=\"normal\"\n autoComplete=\"off\"\n />\n <StyledOptions>\n <Button size=\"medium\" color=\"inherit\" onClick={onClose}>\n Cancelar\n </Button>\n <Button\n onClick={() => {\n handleEventComment({ comment: '' });\n }}\n size=\"medium\"\n color=\"inherit\"\n disabled={!allowRemoveButton || readonly}\n >\n Remover\n </Button>\n </StyledOptions>\n <LargeButton\n type=\"submit\"\n size=\"medium\"\n color=\"inherit\"\n disabled={isSubmitting || readonly}\n >\n Salvar\n </LargeButton>\n </Form>\n );\n }}\n </Formik>\n </StyledSimpleModal>\n );\n};\n\nexport default CommentModal;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Grupo_472\",\n \"data-name\": \"Grupo 472\",\n transform: \"translate(-306 -116)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"_Check_\",\n \"data-name\": \"\\\"Check\\\"\",\n transform: \"translate(137 47)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Caminho_2520\",\n \"data-name\": \"Caminho 2520\",\n transform: \"translate(169 69)\",\n fill: \"#fff\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 14.5 28 C 10.89402008056641 28 7.503870010375977 26.59576034545898 4.954060077667236 24.04594039916992 C 2.404239892959595 21.49612998962402 1 18.10597991943359 1 14.5 C 1 10.89402008056641 2.404239892959595 7.503870010375977 4.954060077667236 4.954060077667236 C 7.503870010375977 2.404239892959595 10.89402008056641 1 14.5 1 C 18.10597991943359 1 21.49612998962402 2.404239892959595 24.04594039916992 4.954060077667236 C 26.59576034545898 7.503870010375977 28 10.89402008056641 28 14.5 C 28 18.10597991943359 26.59576034545898 21.49612998962402 24.04594039916992 24.04594039916992 C 21.49612998962402 26.59576034545898 18.10597991943359 28 14.5 28 Z\",\n stroke: \"none\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 14.5 2 C 11.16113090515137 2 8.022100448608398 3.300230026245117 5.661159515380859 5.661159515380859 C 3.300230026245117 8.022100448608398 2 11.16113090515137 2 14.5 C 2 17.83887100219727 3.300230026245117 20.9778995513916 5.661159515380859 23.33884048461914 C 8.022100448608398 25.69976997375488 11.16113090515137 27 14.5 27 C 17.83887100219727 27 20.9778995513916 25.69976997375488 23.33884048461914 23.33884048461914 C 25.69976997375488 20.9778995513916 27 17.83887100219727 27 14.5 C 27 11.16113090515137 25.69976997375488 8.022100448608398 23.33884048461914 5.661159515380859 C 20.9778995513916 3.300230026245117 17.83887100219727 2 14.5 2 M 14.5 0 C 22.50812911987305 0 29 6.491870880126953 29 14.5 C 29 22.50812911987305 22.50812911987305 29 14.5 29 C 6.491870880126953 29 0 22.50812911987305 0 14.5 C 0 6.491870880126953 6.491870880126953 0 14.5 0 Z\",\n stroke: \"none\",\n fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Icon_awesome-check\",\n \"data-name\": \"Icon awesome-check\",\n d: \"M5.547,16.517.239,11.209a.817.817,0,0,1,0-1.155L1.394,8.9a.817.817,0,0,1,1.155,0l3.576,3.576,7.659-7.659a.817.817,0,0,1,1.155,0l1.155,1.155a.817.817,0,0,1,0,1.155L6.7,16.517A.817.817,0,0,1,5.547,16.517Z\",\n transform: \"translate(175.47 73.328)\",\n fill: \"#01b425\"\n})));\n\nfunction SvgIconDone(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 30,\n height: 30,\n viewBox: \"1 0 27 29\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconDone);\nexport default __webpack_public_path__ + \"static/media/Icon-done.3d33e061.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null, \".a{fill:#fff;stroke:#fff;stroke-width:2px;}.b{fill:red;}.c{stroke:none;}.d{fill:none;}\"));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"a\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n className: \"c\",\n cx: 14.5,\n cy: 14.5,\n r: 14.5\n}), /*#__PURE__*/React.createElement(\"circle\", {\n className: \"d\",\n cx: 14.5,\n cy: 14.5,\n r: 13.5\n}));\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"b\",\n d: \"M20.555,18.781l5.353-5.353a1.254,1.254,0,0,0-1.774-1.774l-5.353,5.353-5.353-5.353a1.254,1.254,0,1,0-1.774,1.774l5.353,5.353-5.353,5.353a1.254,1.254,0,1,0,1.774,1.774l5.353-5.353,5.353,5.353a1.254,1.254,0,1,0,1.774-1.774Z\",\n transform: \"translate(-4.654 -4.293)\"\n});\n\nfunction SvgIconNotdone(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 30,\n height: 30,\n viewBox: \"1 0 27 29\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2, _ref3, _ref4);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconNotdone);\nexport default __webpack_public_path__ + \"static/media/Icon-notdone.4c6fd7eb.svg\";\nexport { ForwardRef as ReactComponent };","import { Typography } from '@material-ui/core';\nimport Button from '@material-ui/core/Button';\nimport AccessibleSharpIcon from '@material-ui/icons/AccessibleSharp';\nimport styled, { css } from 'styled-components';\nimport { ReactComponent as DoneIcon } from '../../../assets/Icon-done.svg';\nimport { ReactComponent as NotDoneIcon } from '../../../assets/Icon-notdone.svg';\n\nexport const TypographyContainer = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n display: flex;\n flex-direction: column;\n word-wrap: break-word;\n margin: ${({ theme }) => theme.spacing(0, 2, 2, 2)};\n min-height: 60px;\n`;\n\nexport const StyledNotDoneIcon = styled(NotDoneIcon)`\n width: 30px;\n height: 30px;\n`;\n\nexport const StyledDoneIcon = styled(DoneIcon)`\n width: 30px;\n height: 30px;\n`;\n\nexport const StyledAccessTimeIcon = styled(AccessibleSharpIcon)`\n width: 30px;\n height: 30px;\n`;\n\nexport const TimerContainer = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n align-self: center;\n`;\n\nexport const RealTimeContainer = styled.div`\n width: 100%;\n padding: ${({ theme }) => theme.spacing(1)}px;\n background-color: ${({ theme }) => theme.palette.warning.light};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n color: black;\n`;\n\nexport const LeftContainer = styled.div`\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n img {\n width: 75px;\n height: 75px;\n }\n`;\n\nexport const DescriptionContainer = styled.div`\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n align-self: flex-end;\n`;\n\nexport const RightContainer = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n padding: ${({ theme }) => theme.spacing(0, 2, 1, 0)};\n`;\n\nexport const StyledButton = styled(Button)<{ $disabled?: boolean }>`\n color: ${({ theme }) => theme.palette.common.white};\n border: 2px solid ${({ theme }) => theme.palette.common.white};\n border-radius: 100%;\n padding: 0;\n min-width: 0px;\n width: 30px;\n height: 30px;\n align-self: flex-end;\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n ${(props) =>\n props.$disabled\n ? css`\n opacity: 0.3;\n `\n : ''}\n`;\n\nexport const StyledCommentButton = styled(StyledButton)`\n border: none;\n`;\n\nexport const StyledChangeStatus = styled.div`\n display: flex;\n align-self: flex-end;\n`;\n\nexport const LineThroughTypography = styled(Typography)`\n text-decoration: line-through;\n`;\n\nexport const CardFooter = styled.footer`\n display: flex;\n align-items: center;\n margin: ${({ theme }) => theme.spacing(1, 1, 0, 2)};\n`;\n\nexport const CaregiverTypography = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n font-size: 15px;\n font-weight: 600;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &::before {\n content: 'por ';\n font-weight: 400;\n }\n`;\n","import { Typography } from '@material-ui/core';\nimport { DateTimePicker } from '@material-ui/pickers';\nimport { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\nimport StyledButton from '../../../StyledButton';\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n width: 100%;\n height: 100%;\n justify-content: center;\n align-items: center;\n margin-top: ${({ theme }) => theme.spacing(-1)}px;\n`;\n\nexport const Centralizer = styled.div`\n align-items: center;\n flex-direction: column;\n display: flex;\n flex: 1;\n justify-content: flex-end;\n`;\n\nexport const StyledBoldTitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.common.black};\n`;\n\nexport const StyledDatePicker = styled(DateTimePicker)`\n width: 100%;\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n & .MuiInputBase-root {\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n }\n & .MuiOutlinedInput-input {\n padding: ${({ theme }) => theme.spacing(1.5)}px;\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n }\n & .MuiOutlinedInput-root {\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n }\n & .MuiOutlinedInput-notchedOutline {\n border-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n }\n`;\n\nexport const StyledOptions = styled.div`\n width: 100%;\n display: flex;\n flex: 1;\n flex-direction: row;\n justify-content: space-between;\n margin: ${({ theme }) => theme.spacing(2, 0)};\n`;\n\nexport const Button = styled(StyledButton)`\n width: 45%;\n`;\n\nexport const LargeButton = styled(StyledButton)`\n width: 100%;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n","import DateFnsUtils from '@date-io/date-fns';\nimport { Typography } from '@material-ui/core';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ptBr from 'date-fns/locale/pt-BR';\nimport { Formik } from 'formik';\nimport React from 'react';\nimport * as yup from 'yup';\nimport StyledSimpleModal from '../../../StyledSimpleModal';\nimport {\n Button,\n Form,\n LargeButton,\n StyledDatePicker,\n StyledOptions,\n} from './styles';\n\nexport type ModalProps = {\n handleUpdatedTime: (values: FormValues) => void;\n onClose: () => void;\n eventId: number;\n opened: boolean;\n allowRemoveButton?: boolean;\n initialFormValues?: FormValues;\n maxDate?: string;\n minDate?: string;\n};\n\nexport type FormValues = {\n updatedTimeHappens: Date | null | undefined;\n};\n\nconst validationSchema = yup.object().shape({\n updatedTimeHappens: yup\n .date()\n .required('Por favor, insira uma data')\n .nullable()\n .typeError('Por favor, insira uma data válida'),\n});\n\nconst UpdateTimeModal: React.FC<ModalProps> = ({\n handleUpdatedTime,\n onClose,\n opened,\n allowRemoveButton,\n initialFormValues,\n maxDate,\n minDate,\n}) => {\n return (\n <StyledSimpleModal open={opened} title={'Alteração de horário'}>\n <Formik\n validateOnChange={false}\n initialValues={\n initialFormValues || {\n updatedTimeHappens: new Date(),\n }\n }\n validationSchema={validationSchema}\n onSubmit={(formValues) => {\n handleUpdatedTime(formValues);\n onClose();\n }}\n >\n {({ isSubmitting, values, setFieldValue }) => {\n return (\n <Form noValidate={true}>\n <Typography>Para qual horário gostaria de alterar?</Typography>\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <StyledDatePicker\n data-testid={'data-late-input'}\n inputVariant=\"outlined\"\n format=\"dd/MM/yyyy HH:mm\"\n name=\"updatedTimeHappens\"\n value={values.updatedTimeHappens}\n cancelLabel=\"Cancelar\"\n maxDate={maxDate}\n minDate={minDate}\n ampm={false}\n onChange={(date: Date | null) => {\n setFieldValue('updatedTimeHappens', date, true);\n }}\n />\n </MuiPickersUtilsProvider>\n <StyledOptions>\n <Button size=\"medium\" color=\"inherit\" onClick={onClose}>\n Cancelar\n </Button>\n <Button\n onClick={() => {\n handleUpdatedTime({ updatedTimeHappens: null });\n onClose();\n }}\n size=\"medium\"\n color=\"inherit\"\n disabled={!allowRemoveButton}\n >\n Remover\n </Button>\n </StyledOptions>\n <LargeButton\n type=\"submit\"\n size=\"medium\"\n color=\"inherit\"\n disabled={isSubmitting}\n >\n Salvar\n </LargeButton>\n </Form>\n );\n }}\n </Formik>\n </StyledSimpleModal>\n );\n};\n\nexport default UpdateTimeModal;\n","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.extra.color.green};\n padding: 0;\n flex-wrap: wrap;\n`;\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\nimport { Typography } from '@material-ui/core';\nimport { Message } from '@material-ui/icons';\nimport CheckIcon from '@material-ui/icons/Check';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport CalendarIcon from '../../../../assets/Icon-coloredCalendar.svg';\nimport TimeColorIcon from '../../../../assets/Icon-time-color.svg';\nimport TimeIcon from '../../../../assets/Icon-time.svg';\nimport useCanAccess from '../../../../hooks/useCanAccess';\nimport useShiftEventHandling from '../../../../hooks/useShiftEventHandling';\nimport CommentModal, {\n FormValues as CommentModalFormValues,\n} from '../CommentModal';\nimport {\n ButtonContainer,\n CaregiverTypography,\n DescriptionContainer,\n LeftContainer,\n LineThroughTypography,\n RealTimeContainer,\n RightContainer,\n StyledButton,\n StyledChangeStatus,\n StyledCommentButton,\n StyledDoneIcon,\n StyledNotDoneIcon,\n TimerContainer,\n TypographyContainer,\n} from '../styles';\nimport UpdateTimeModal from '../UpdateTimeModal';\nimport { CardBox } from './styles';\n\nconst UnselectedNotDoneIcon = <CloseIcon />;\nconst UnselectedDoneIcon = <CheckIcon />;\nconst SelectedNotDoneIcon = <StyledNotDoneIcon />;\nconst SelectedDoneIcon = <StyledDoneIcon />;\nconst CommentIcon = <Message />;\nconst UnselectedTimeIcon = <img src={TimeIcon} />;\nconst SelectedTimeIcon = <img src={TimeColorIcon} />;\n\ninterface CardProps {\n id?: number;\n name?: string;\n subCategory?: EventSubCategoryModel;\n eventHappensAt?: string;\n description?: string;\n status?: EventModel['status'];\n updatedTimeHappensAt?: string | null;\n comment?: string;\n caregiverName?: string;\n onChangeStatus: (id: number, newStatus: EventModel['status']) => void;\n onChangeComment: (id: number, newComment: string) => void;\n onChangeTime: (id: number, updatedTimeHappensAt: string | null) => void;\n}\n\nconst AppointmentCard: React.FC<CardProps> = (event) => {\n const {\n id,\n name,\n subCategory,\n description,\n onChangeStatus,\n onChangeComment,\n onChangeTime,\n caregiverName,\n } = event;\n\n const {\n date,\n minShiftLimitDate,\n maxShiftLimitDate,\n currentStatus,\n currentComment,\n handleStatusToggle,\n handleCommentChange,\n handleUpdatedTime,\n handleAllowedPatchEvent,\n isStatusToggleTimeAllowed,\n } = useShiftEventHandling(event, {\n onChangeStatus,\n onChangeComment,\n onChangeTime,\n });\n\n const { isAllowedToUpdate: isAllowedToUpdateComment } = useCanAccess(\n 'care/shift/event.comment'\n );\n const { isAllowedToUpdate: isAllowedToUpdateDoneStatus } = useCanAccess(\n 'care/shift/event.status'\n );\n const { isAllowedToUpdate: isAllowedToUpdateRealTime } = useCanAccess(\n 'care/shift/event.updated-time'\n );\n\n const [commentModalVisible, setCommentModalVisible] = React.useState(false);\n const [visibleModal, setVisibleModal] = React.useState(false);\n\n return (\n <CardBox data-testid={`appointmentCard-${id}`}>\n {event.updatedTimeHappensAt && (\n <RealTimeContainer\n data-testid={`realTimeContainer-${id}`}\n >{`Alterado para ${format(\n new Date(event.updatedTimeHappensAt),\n 'HH:mm'\n )}`}</RealTimeContainer>\n )}\n <LeftContainer>\n <TimerContainer>\n {event.updatedTimeHappensAt ? (\n <LineThroughTypography variant=\"h6\">{date}</LineThroughTypography>\n ) : (\n <Typography variant=\"h6\">{date}</Typography>\n )}\n </TimerContainer>\n <img src={CalendarIcon} title={`appointment-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">\n {subCategory?.name} {name && `(${String(name).trim()})`}\n </Typography>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">{description}</Typography>\n {currentComment && (\n <Typography variant=\"subtitle2\">Obs: {currentComment}</Typography>\n )}\n </DescriptionContainer>\n {caregiverName && (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n )}\n </TypographyContainer>\n <StyledChangeStatus>\n {id! > 0 && (\n <ButtonContainer>\n {isAllowedToUpdateComment && (\n <StyledCommentButton\n data-testid={`comment-set-${id}`}\n onClick={() =>\n handleAllowedPatchEvent(() => setCommentModalVisible(true))\n }\n >\n {CommentIcon}\n </StyledCommentButton>\n )}\n {isAllowedToUpdateRealTime && (\n <StyledButton\n data-testid={'timer-set-appointment'}\n onClick={() =>\n handleAllowedPatchEvent(() => setVisibleModal(true))\n }\n >\n {event.updatedTimeHappensAt\n ? SelectedTimeIcon\n : UnselectedTimeIcon}\n </StyledButton>\n )}\n {isAllowedToUpdateDoneStatus && (\n <>\n <StyledButton\n data-testid={`notDoneButton-${id}`}\n $disabled={!isStatusToggleTimeAllowed}\n onClick={() => {\n handleAllowedPatchEvent(() =>\n handleStatusToggle('not_accomplished')\n );\n }}\n >\n {currentStatus === 'not_accomplished'\n ? SelectedNotDoneIcon\n : UnselectedNotDoneIcon}\n </StyledButton>\n <StyledButton\n data-testid={`doneButton-${id}`}\n $disabled={!isStatusToggleTimeAllowed}\n onClick={() => {\n handleAllowedPatchEvent(() =>\n handleStatusToggle('accomplished')\n );\n }}\n >\n {currentStatus === 'accomplished'\n ? SelectedDoneIcon\n : UnselectedDoneIcon}\n </StyledButton>\n </>\n )}\n </ButtonContainer>\n )}\n </StyledChangeStatus>\n </RightContainer>\n {visibleModal && id && (\n <UpdateTimeModal\n eventId={id}\n handleUpdatedTime={(values) =>\n handleUpdatedTime(values.updatedTimeHappens || null)\n }\n onClose={() => setVisibleModal(false)}\n opened={visibleModal}\n allowRemoveButton={!!event.updatedTimeHappensAt}\n minDate={minShiftLimitDate?.toISOString()}\n maxDate={maxShiftLimitDate?.toISOString()}\n initialFormValues={\n event.updatedTimeHappensAt\n ? {\n updatedTimeHappens: new Date(event.updatedTimeHappensAt),\n }\n : undefined\n }\n />\n )}\n {commentModalVisible && id && (\n <CommentModal\n handleEventComment={(values: CommentModalFormValues) => {\n handleCommentChange(values.comment);\n setCommentModalVisible(false);\n }}\n onClose={() => setCommentModalVisible(false)}\n opened={commentModalVisible}\n eventId={id}\n allowRemoveButton={!!currentComment}\n initialValues={\n currentComment ? { comment: currentComment } : undefined\n }\n />\n )}\n </CardBox>\n );\n};\n\nexport default AppointmentCard;\n","export default __webpack_public_path__ + \"static/media/Icon-alert.adcc333b.svg\";","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.extra.color.red.light};\n padding: 0;\n`;\n","import { EventSubCategoryModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { Message } from '@material-ui/icons';\nimport React from 'react';\nimport AlertIcon from '../../../../assets/Icon-alert.svg';\nimport useCanAccess from '../../../../hooks/useCanAccess';\nimport useShiftEventHandling from '../../../../hooks/useShiftEventHandling';\nimport CommentModal, {\n FormValues as CommentModalFormValues,\n} from '../CommentModal';\nimport {\n ButtonContainer,\n CardFooter,\n CaregiverTypography,\n DescriptionContainer,\n LeftContainer,\n RightContainer,\n StyledChangeStatus,\n StyledCommentButton,\n TimerContainer,\n TypographyContainer,\n} from '../styles';\nimport { CardBox } from './styles';\n\nconst CommentIcon = <Message />;\n\ninterface CardProps {\n id?: number;\n subCategory?: EventSubCategoryModel;\n eventHappensAt?: string;\n description?: string;\n comment?: string;\n caregiverName?: string;\n onChangeComment: (id: number, newComment: string) => void;\n}\n\nconst ComplicationCard: React.FC<CardProps> = (event) => {\n const {\n id,\n subCategory,\n description,\n onChangeComment,\n caregiverName,\n } = event;\n const [visibleCommentModal, setVisibleCommentModal] = React.useState(false);\n\n const { isAllowedToUpdate: isAllowedToUpdateComment } = useCanAccess(\n 'care/shift/event.comment'\n );\n\n const {\n date,\n currentComment,\n handleCommentChange,\n handleAllowedPatchEvent,\n } = useShiftEventHandling(event, {\n onChangeComment,\n });\n\n return (\n <CardBox data-testid={`complicationCard-${id}`}>\n <LeftContainer>\n <TimerContainer>\n <Typography variant=\"h6\">{date}</Typography>\n </TimerContainer>\n <img src={AlertIcon} title={`complication-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">{subCategory?.name}</Typography>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">{description}</Typography>\n {currentComment && (\n <Typography variant=\"subtitle2\">Obs: {currentComment}</Typography>\n )}\n </DescriptionContainer>\n </TypographyContainer>\n <CardFooter>\n {caregiverName && (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n )}\n {isAllowedToUpdateComment && (\n <StyledChangeStatus>\n {id! > 0 && (\n <ButtonContainer>\n <StyledCommentButton\n data-testid={`comment-set-${id}`}\n onClick={() =>\n handleAllowedPatchEvent(() =>\n setVisibleCommentModal(true)\n )\n }\n >\n {CommentIcon}\n </StyledCommentButton>\n </ButtonContainer>\n )}\n </StyledChangeStatus>\n )}\n </CardFooter>\n </RightContainer>\n {visibleCommentModal && id && (\n <CommentModal\n handleEventComment={(values: CommentModalFormValues) => {\n handleCommentChange(values.comment);\n setVisibleCommentModal(false);\n }}\n onClose={() => setVisibleCommentModal(false)}\n opened={visibleCommentModal}\n eventId={id}\n allowRemoveButton={!!currentComment}\n initialValues={\n currentComment ? { comment: currentComment } : undefined\n }\n />\n )}\n </CardBox>\n );\n};\n\nexport default ComplicationCard;\n","export default __webpack_public_path__ + \"static/media/Icon-measurement.91a35613.svg\";","import styled, { css } from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport type HighlightVariants = 'red' | 'yellow' | undefined;\n\nexport const CardBox = styled(StyledPaper)<{\n styledHighlight?: HighlightVariants;\n}>`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.extra.color.yellow};\n border-bottom-left-radius: 10px;\n padding: 0;\n outline-offset: 3px;\n\n ${({ theme, styledHighlight }) => {\n switch (styledHighlight) {\n case 'red':\n return css`\n outline: solid 3px ${theme.palette.extra.color.red.light};\n `;\n case 'yellow':\n return css`\n outline: solid 3px ${theme.palette.extra.color.yellow};\n `;\n }\n }}\n`;\n","import { subCategoryIdMapper } from '../../../VitalSignsMeasurementInput/utils';\n\nexport const getMeasurementUnit = (subCategoryId?: number): string => {\n switch (subCategoryId) {\n case subCategoryIdMapper.BLOOD_GLYCEMIA:\n return 'mg/dL';\n case subCategoryIdMapper.BODY_TEMPERATURE:\n return '°C';\n case subCategoryIdMapper.BREATH_RATE:\n return 'mrm';\n case subCategoryIdMapper.HEART_RATE:\n return 'bpm';\n case subCategoryIdMapper.OXIMETRY_RATE:\n return '%SaO2';\n case subCategoryIdMapper.BLOOD_PRESSURE:\n return 'mmHg';\n case subCategoryIdMapper.WEIGHT_MEASURMENT:\n return 'Kg';\n default:\n return '';\n }\n};\n","import styled from 'styled-components';\n\nexport const TypographyContainer = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n display: flex;\n flex-direction: column;\n word-wrap: break-word;\n margin: ${({ theme }) => theme.spacing(0, 2, 2, 2)};\n`;\n\nexport const TimerContainer = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n align-self: center;\n`;\n\nexport const LeftContainer = styled.div`\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n`;\n\nexport const DescriptionContainer = styled.div`\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const StatusContainer = styled.div`\n display: flex;\n align-self: flex-end;\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n margin-right: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const RightContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 0;\n`;\n\nexport const CardFooter = styled.footer`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-left: ${({ theme }) => theme.spacing(2)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const CaregiverTypography = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n font-size: 15px;\n font-weight: 600;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &::before {\n content: 'por ';\n font-weight: 400;\n }\n`;\n","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n display: flex;\n min-height: 120px;\n padding: 0;\n color: ${({ theme }) => theme.palette.extra.color.grey.main};\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n margin-top: 0px;\n`;\n\nexport const LeftContainer = styled.div`\n background-color: ${({ theme }) => theme.palette.extra.color.yellow};\n display: flex;\n padding: ${({ theme }) => theme.spacing(2, 0, 0, 0)};\n flex-direction: column;\n\n img {\n width: 75px;\n height: 75px;\n }\n border-radius: 4px;\n`;\n\nexport const RightContainer = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n padding: ${({ theme }) => theme.spacing(1, 1, 0, 1)};\n`;\n\nexport const CardFooter = styled.footer`\n display: flex;\n flex-direction: column;\n margin: ${({ theme }) => theme.spacing(1, 1, 0, 1)};\n`;\n\nexport const CaregiverTypography = styled.div`\n color: ${({ theme }) => theme.palette.text.secondary};\n font-weight: 600;\n font-size: 15px;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &::before {\n content: 'por ';\n font-weight: 400;\n }\n`;\n","import { Typography } from '@material-ui/core';\nimport { Close } from '@material-ui/icons';\nimport CheckIcon from '@material-ui/icons/Check';\nimport styled, { css } from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n background-color: #fff;\n border-radius: 4px;\n padding-bottom: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const RealTimeContainer = styled.div`\n background-color: ${({ theme }) => theme.palette.warning.light};\n color: black;\n padding-left: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const StyledBoldTitle = styled(Typography)`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n font-weight: bold;\n color: ${({ theme }) => theme.palette.extra.color.yellow};\n`;\n\nexport const Instructions = styled(Typography)`\n line-height: 14px;\n padding: ${({ theme }) => theme.spacing(0, 1)};\n`;\n\nexport const MeasurementInput = styled.input`\n border: 1px solid ${({ theme }) => theme.palette.extra.color.grey.main};\n padding: ${({ theme }) => theme.spacing(1)}px;\n margin: ${({ theme }) => theme.spacing(1, 1, 0, 1)};\n border-radius: 4px;\n opacity: 1;\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n`;\n\nexport const InformationContainer = styled.div`\n display: flex;\n justify-content: space-between;\n padding: ${({ theme }) => theme.spacing(0, 1)};\n align-items: center;\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const NoteTypography = styled(Typography)`\n line-height: 1.2;\n`;\n\ninterface CheckButtonProps {\n isChecked: boolean;\n}\n\nexport const CloseIconContainer = styled.button<CheckButtonProps>`\n ${({ theme, isChecked }) => {\n const background = isChecked\n ? theme.palette.extra.color.red.main\n : theme.palette.common.white;\n\n const iconColor = isChecked\n ? theme.palette.extra.color.grey.light\n : theme.palette.extra.color.grey.dark;\n\n const borderColor = isChecked\n ? background\n : theme.palette.extra.color.grey.dark;\n\n return css`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: 2px solid ${borderColor};\n color: ${iconColor};\n background-color: ${background};\n border-radius: 100%;\n margin: ${theme.spacing(0, 0, 0, 1)};\n `;\n }}\n`;\n\nexport const StyledCloseIcon = styled(Close)`\n width: 15px;\n height: 15px;\n`;\n\nexport const CheckIconContainer = styled.div<CheckButtonProps>`\n ${({ theme, isChecked }) => {\n const background = isChecked\n ? theme.palette.extra.color.green\n : theme.palette.common.white;\n\n const iconColor = isChecked\n ? theme.palette.extra.color.grey.light\n : theme.palette.extra.color.grey.dark;\n\n const borderColor = isChecked\n ? background\n : theme.palette.extra.color.grey.dark;\n\n return css`\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n width: 20px;\n height: 20px;\n border: 2px solid ${borderColor};\n color: ${iconColor};\n background-color: ${background};\n border-radius: 100%;\n margin: ${theme.spacing(0, 0, 0, 1)};\n `;\n }}\n`;\n\nexport const StyledCheckIcon = styled(CheckIcon)`\n width: 15px;\n height: 15px;\n`;\n\nexport const BoldText = styled.span`\n font-weight: bold;\n`;\n","import { EventSubCategoryModel, MeasurementModel } from '@cuidador/database'\nimport { Typography } from '@material-ui/core'\nimport { format } from 'date-fns'\nimport React from 'react'\nimport { CardFooter, CaregiverTypography } from '../styles'\n\nimport {\n BoldText,\n CheckIconContainer,\n CloseIconContainer,\n Container,\n InformationContainer,\n Instructions,\n MeasurementInput,\n NoteTypography,\n RealTimeContainer,\n StyledBoldTitle,\n StyledCheckIcon,\n StyledCloseIcon,\n} from './styles'\nimport { getConditionWithDetail, getFormattedSymptoms } from '..'\n\nexport const subCategoryIdMapper = {\n BLOOD_PRESSURE: 35231,\n BODY_TEMPERATURE: 35237,\n BLOOD_GLYCEMIA: 35230,\n BREATH_RATE: 35236,\n HEART_RATE: 35235,\n OXIMETRY_RATE: 35232,\n WEIGHT_MEASURMENT: 35233,\n};\n\nexport const getMeasurementUnit = (subCategoryId?: number): string => {\n switch (subCategoryId) {\n case subCategoryIdMapper.BLOOD_GLYCEMIA:\n return 'mg/dL';\n case subCategoryIdMapper.BODY_TEMPERATURE:\n return '°C';\n case subCategoryIdMapper.BREATH_RATE:\n return 'mrm';\n case subCategoryIdMapper.HEART_RATE:\n return 'bpm';\n case subCategoryIdMapper.OXIMETRY_RATE:\n return '%SaO2';\n case subCategoryIdMapper.BLOOD_PRESSURE:\n return 'mmHg';\n case subCategoryIdMapper.WEIGHT_MEASURMENT:\n return 'Kg';\n default:\n return '';\n }\n};\n\ninterface MeasurementProps {\n id: number\n name?: string\n description?: string\n status?: string\n comment?: string\n measurement?: MeasurementModel\n updatedTimeHappensAt?: string | null\n subCategory?: EventSubCategoryModel\n caregiverName?: string\n}\n\nconst Measurement = ({\n id: eventId,\n status,\n comment,\n measurement,\n description,\n updatedTimeHappensAt,\n subCategory,\n caregiverName,\n}: MeasurementProps) => {\n const measurementValue = measurement?.measurementValue\n ? measurement?.measurementValue + ' ' + getMeasurementUnit(subCategory?.id)\n : ''\n\n return (\n <Container\n style={{\n borderColor: measurement?.isDangerousComplication\n ? '#f36161'\n : Math.abs(measurement?.complicationLevel || 0) === 1\n ? '#fdb62e'\n : undefined,\n borderStyle: measurement?.isDangerousComplication ? 'solid' : undefined,\n borderWidth: measurement?.isDangerousComplication ? '5px' : undefined\n }}\n >\n {updatedTimeHappensAt && (\n <RealTimeContainer data-testid={`realTimeContainer-${eventId}`}>\n <Typography variant=\"caption\">{`Atualizado para ${format(\n new Date(updatedTimeHappensAt),\n 'HH:mm'\n )}`}</Typography>\n </RealTimeContainer>\n )}\n <StyledBoldTitle\n variant=\"subtitle1\"\n style={{ color: measurement?.isDangerousComplication ? '#f36161' : undefined }}>\n {subCategory?.name?.trim()}\n </StyledBoldTitle>\n <Instructions variant=\"caption\">{description}</Instructions>\n <MeasurementInput\n id={`measurement-input-${eventId}`}\n placeholder=\"sem registro\"\n value={measurementValue}\n disabled={true}\n />\n <CardFooter>\n <Typography variant='subtitle2'>\n {getConditionWithDetail(measurement?.additionalDetails || '', subCategory)}\n </Typography>\n {measurement?.symptoms && measurement?.symptoms?.length > 0 && (\n <Typography variant='subtitle2'>{getFormattedSymptoms(measurement?.symptoms)}</Typography>\n )}\n {comment && (\n <NoteTypography variant=\"caption\">\n <BoldText>Obs:</BoldText> {comment}\n </NoteTypography>\n )}\n <InformationContainer>\n {caregiverName ? (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n ) : (\n <div></div>\n )}\n {status === 'not_accomplished' && (\n <CloseIconContainer isChecked={true} disabled={true}>\n <StyledCloseIcon />\n </CloseIconContainer>\n )}\n\n {status === 'accomplished' && (\n <CheckIconContainer\n isChecked={true}\n data-testid={`doneIcon-${eventId}`}\n >\n <StyledCheckIcon />\n </CheckIconContainer>\n )}\n </InformationContainer>\n </CardFooter>\n </Container>\n )\n}\n\nexport default Measurement\n","import { EventModel, EventSubCategoryModel, SymptomModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport MesurementIcon from '../../../../assets/Icon-measurement.svg';\nimport { TimerContainer } from '../styles';\nimport Measurement from './Measurement';\n\nimport { CardBox, LeftContainer, RightContainer } from './styles';\n\nconst foodCondition = (condition: string) => {\n switch(condition) {\n case 'preprandial':\n return 'Condição alimentar: pré-refeição'\n case 'fasting':\n return 'Condição alimentar: jejum'\n case 'postprandial':\n return 'Condição alimentar: pós-refeição'\n case 'not_available':\n return 'Condição alimentar: não informado'\n default:\n return 'não informado'\n }\n}\n\nexport const getConditionWithDetail = (condition: string, subCategory?: EventSubCategoryModel) => {\n switch (subCategory?.name){\n case 'Glicemia':\n return foodCondition(condition)\n case 'Frequência cardÃaca':\n return condition\n case 'Frequência respiratória':\n return condition\n case 'Oximetria':\n return condition\n case 'Pressão arterial':\n return condition\n case 'Temperatura ':\n return condition\n }\n return condition\n}\n\nexport const getFormattedSymptoms = (symptoms?: SymptomModel[]) => {\n let result = 'Sintomas: '\n\n symptoms?.forEach((symptom, index) => {\n if (symptoms && symptoms?.length > 1 && index > 0) {\n result += '; ' + symptom.symptomName\n } else {\n result += symptom.symptomName\n }\n })\n\n return result\n}\n\ninterface CardProps {\n scheduledMeasurements: EventModel[];\n readonly?: boolean;\n caregiverName?: string;\n}\n\nconst ScheduledMeasurementCard: React.FC<CardProps> = ({\n scheduledMeasurements,\n}) => {\n const { eventScheduleId, eventHappensAt } = scheduledMeasurements[0];\n\n const hour = format(new Date(`${eventHappensAt}`), 'HH:mm');\n\n return (\n <CardBox data-testid={`measurementCard-${eventScheduleId}`}>\n <LeftContainer>\n <img\n src={MesurementIcon}\n title={`measurement-image-${eventScheduleId}`}\n />\n <TimerContainer>\n <Typography variant=\"h6\">{hour}</Typography>\n </TimerContainer>\n </LeftContainer>\n <RightContainer>\n {scheduledMeasurements?.map((measurement) => {\n return (\n <div key={measurement.id}>\n <Measurement\n {...measurement}\n id={measurement.id!}\n caregiverName={measurement.caregiver?.user?.name}\n />\n </div>\n );\n })}\n </RightContainer>\n </CardBox>\n );\n};\n\nexport default ScheduledMeasurementCard;\n","import { EventSubCategoryModel, MeasurementModel } from '@cuidador/database'\nimport Typography from '@material-ui/core/Typography'\nimport { Message } from '@material-ui/icons'\nimport React from 'react'\nimport MesurementIcon from '../../../../assets/Icon-measurement.svg'\nimport useCanAccess from '../../../../hooks/useCanAccess'\nimport useShiftEventHandling from '../../../../hooks/useShiftEventHandling'\nimport CommentModal, {\n FormValues as CommentModalFormValues,\n} from '../CommentModal'\nimport {\n ButtonContainer,\n CardFooter,\n CaregiverTypography,\n DescriptionContainer,\n LeftContainer,\n RightContainer,\n StyledChangeStatus,\n StyledCommentButton,\n TimerContainer,\n TypographyContainer,\n} from '../styles'\nimport { CardBox } from './styles'\nimport { getMeasurementUnit } from './utils'\nimport { getConditionWithDetail, getFormattedSymptoms } from '../../../ShiftEventList/LastShiftCards/ScheduledMeasurementCard'\n\nconst CommentIcon = <Message />\n\ninterface CardProps {\n id?: number\n subCategory?: EventSubCategoryModel\n measurement?: MeasurementModel\n eventHappensAt?: string\n description?: string\n comment?: string\n caregiverName?: string\n onChangeComment: (id: number, newComment: string) => void\n}\n\nconst MeasurementCard: React.FC<CardProps> = (event) => {\n const {\n id,\n subCategory,\n measurement,\n description,\n onChangeComment,\n caregiverName,\n } = event\n const [visibleCommentModal, setVisibleCommentModal] = React.useState(false)\n const { isAllowedToUpdate: isAllowedToUpdateComment } = useCanAccess(\n 'care/shift/event.comment'\n )\n\n const {\n date,\n currentComment,\n handleCommentChange,\n handleAllowedPatchEvent,\n } = useShiftEventHandling(event, {\n onChangeComment,\n })\n\n return (\n <CardBox\n data-testid={`measurementCard-${id}`}\n styledHighlight={\n !!measurement?.isDangerousComplication\n ? 'red'\n : Math.abs(measurement?.complicationLevel ?? 0) === 1\n ? 'yellow'\n : undefined\n }\n >\n <LeftContainer>\n <TimerContainer>\n <Typography variant=\"h6\">{date}</Typography>\n </TimerContainer>\n <img src={MesurementIcon} title={`measurement-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">{subCategory?.name}</Typography>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">\n Valores medidos: {measurement?.measurementValue}{' '}\n {getMeasurementUnit(subCategory?.id)}\n </Typography>\n </DescriptionContainer>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">{description}</Typography>\n <Typography variant='subtitle2'>\n {getConditionWithDetail(measurement?.additionalDetails || '', subCategory)}\n </Typography>\n {measurement?.symptoms && measurement?.symptoms?.length > 0 && (\n <Typography variant='subtitle2'>{getFormattedSymptoms(measurement?.symptoms)}</Typography>\n )}\n {currentComment && (\n <Typography variant=\"subtitle2\">Obs: {currentComment}</Typography>\n )}\n </DescriptionContainer>\n </TypographyContainer>\n <CardFooter>\n {caregiverName && (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n )}\n {isAllowedToUpdateComment && (\n <StyledChangeStatus>\n {id! > 0 && (\n <ButtonContainer>\n <StyledCommentButton\n data-testid={`comment-set-${id}`}\n onClick={() =>\n handleAllowedPatchEvent(() =>\n setVisibleCommentModal(true)\n )\n }\n >\n {CommentIcon}\n </StyledCommentButton>\n </ButtonContainer>\n )}\n </StyledChangeStatus>\n )}\n </CardFooter>\n </RightContainer>\n {visibleCommentModal && id && (\n <CommentModal\n handleEventComment={(values: CommentModalFormValues) => {\n handleCommentChange(values.comment)\n setVisibleCommentModal(false)\n }}\n onClose={() => setVisibleCommentModal(false)}\n opened={visibleCommentModal}\n eventId={id}\n allowRemoveButton={!!currentComment}\n initialValues={\n currentComment ? { comment: currentComment } : undefined\n }\n />\n )}\n </CardBox>\n )\n}\n\nexport default MeasurementCard\n","export default __webpack_public_path__ + \"static/media/Icon-medication.2f3fb281.svg\";","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.info.main};\n padding: 0;\n flex-wrap: wrap;\n`;\n","import { EventModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { Message } from '@material-ui/icons';\nimport CheckIcon from '@material-ui/icons/Check';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport MedicationIcon from '../../../../assets/Icon-medication.svg';\nimport TimeColorIcon from '../../../../assets/Icon-time-color.svg';\nimport TimeIcon from '../../../../assets/Icon-time.svg';\nimport useCanAccess from '../../../../hooks/useCanAccess';\nimport useShiftEventHandling from '../../../../hooks/useShiftEventHandling';\nimport {\n handleFormatAdministeredBy,\n handleFormatDose,\n} from '../../../../utils/medication';\nimport CommentModal, {\n FormValues as CommentModalFormValues,\n} from '../CommentModal';\nimport {\n ButtonContainer,\n CaregiverTypography,\n LeftContainer,\n LineThroughTypography,\n RealTimeContainer,\n RightContainer,\n StyledButton,\n StyledChangeStatus,\n StyledCommentButton,\n StyledDoneIcon,\n StyledNotDoneIcon,\n TimerContainer,\n TypographyContainer,\n} from '../styles';\nimport UpdateTimeModal, {\n FormValues as MedicationModalFormValues,\n} from '../UpdateTimeModal';\nimport { CardBox } from './styles';\n\nconst UnselectedNotDoneIcon = <CloseIcon />;\nconst UnselectedDoneIcon = <CheckIcon />;\nconst UnselectedTimeIcon = <img src={TimeIcon} />;\nconst SelectedNotDoneIcon = <StyledNotDoneIcon />;\nconst SelectedDoneIcon = <StyledDoneIcon />;\nconst SelectedTimeIcon = <img src={TimeColorIcon} />;\nconst CommentIcon = <Message />;\n\ninterface CardProps {\n id?: number;\n name?: string;\n dosageQuantity?: number;\n dosageFormat?: string;\n administeredBy?: string;\n medicalNotes?: string;\n eventHappensAt?: string;\n status?: EventModel['status'];\n updatedTimeHappensAt?: string | null;\n comment?: string;\n caregiverName?: string;\n onChangeStatus: (id: number, newStatus: EventModel['status']) => void;\n onChangeComment: (id: number, newComment: string) => void;\n onChangeTime: (id: number, updatedTimeHappensAt: string | null) => void;\n}\n\nconst MedicationCard: React.FC<CardProps> = (event) => {\n const {\n id,\n name,\n dosageQuantity,\n dosageFormat,\n administeredBy,\n medicalNotes,\n onChangeStatus,\n onChangeComment,\n onChangeTime,\n caregiverName,\n } = event;\n\n const {\n isStatusToggleTimeAllowed,\n date,\n minShiftLimitDate,\n maxShiftLimitDate,\n currentStatus,\n currentComment,\n handleStatusToggle,\n handleUpdatedTime,\n handleCommentChange,\n handleAllowedPatchEvent,\n } = useShiftEventHandling(event, {\n onChangeStatus,\n onChangeComment,\n onChangeTime,\n });\n\n const { isAllowedToUpdate: isAllowedToUpdateComment } = useCanAccess(\n 'care/shift/event.comment'\n );\n const { isAllowedToUpdate: isAllowedToUpdateDoneStatus } = useCanAccess(\n 'care/shift/event.status'\n );\n const { isAllowedToUpdate: isAllowedToUpdateRealTime } = useCanAccess(\n 'care/shift/event.updated-time'\n );\n\n const [visibleModal, setVisibleModal] = React.useState(false);\n const [commentModalVisible, setCommentModalVisible] = React.useState(false);\n\n return (\n <CardBox data-testid={`medicationCard-${id}`}>\n {event.updatedTimeHappensAt && (\n <RealTimeContainer\n data-testid={`realTimeContainer-${id}`}\n >{`Alterado para ${format(\n new Date(event.updatedTimeHappensAt),\n 'HH:mm'\n )}`}</RealTimeContainer>\n )}\n <LeftContainer>\n <TimerContainer>\n {event.updatedTimeHappensAt ? (\n <LineThroughTypography variant=\"h6\">{date}</LineThroughTypography>\n ) : (\n <Typography variant=\"h6\">{date}</Typography>\n )}\n </TimerContainer>\n <img src={MedicationIcon} title={`appointment-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">{name}</Typography>\n <Typography variant=\"subtitle2\">\n {dosageQuantity} {handleFormatDose(dosageFormat, dosageQuantity)}\n </Typography>\n <Typography variant=\"subtitle2\">\n Via: {handleFormatAdministeredBy(administeredBy)}\n </Typography>\n <Typography variant=\"subtitle2\">{medicalNotes}</Typography>\n {currentComment && (\n <Typography variant=\"subtitle2\">Obs: {currentComment}</Typography>\n )}\n {caregiverName && (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n )}\n </TypographyContainer>\n <StyledChangeStatus>\n {id! > 0 && (\n <ButtonContainer>\n {isAllowedToUpdateComment && (\n <StyledCommentButton\n data-testid={`comment-set-${id}`}\n onClick={() =>\n handleAllowedPatchEvent(() => setCommentModalVisible(true))\n }\n >\n {CommentIcon}\n </StyledCommentButton>\n )}\n {isAllowedToUpdateRealTime && (\n <StyledButton\n data-testid={'timer-set-medication'}\n onClick={() =>\n handleAllowedPatchEvent(() => setVisibleModal(true))\n }\n >\n {event.updatedTimeHappensAt\n ? SelectedTimeIcon\n : UnselectedTimeIcon}\n </StyledButton>\n )}\n {isAllowedToUpdateDoneStatus && (\n <>\n <StyledButton\n data-testid={`notDoneButton-${id}`}\n $disabled={!isStatusToggleTimeAllowed}\n onClick={() => {\n handleAllowedPatchEvent(() =>\n handleStatusToggle('not_accomplished')\n );\n }}\n >\n {currentStatus === 'not_accomplished'\n ? SelectedNotDoneIcon\n : UnselectedNotDoneIcon}\n </StyledButton>\n <StyledButton\n data-testid={`doneButton-${id}`}\n $disabled={!isStatusToggleTimeAllowed}\n onClick={() => {\n handleAllowedPatchEvent(() =>\n handleStatusToggle('accomplished')\n );\n }}\n >\n {currentStatus === 'accomplished'\n ? SelectedDoneIcon\n : UnselectedDoneIcon}\n </StyledButton>\n </>\n )}\n </ButtonContainer>\n )}\n </StyledChangeStatus>\n </RightContainer>\n {visibleModal && id && (\n <UpdateTimeModal\n eventId={id}\n handleUpdatedTime={(values: MedicationModalFormValues) =>\n handleUpdatedTime(values.updatedTimeHappens || null)\n }\n onClose={() => setVisibleModal(false)}\n opened={visibleModal}\n allowRemoveButton={!!event.updatedTimeHappensAt}\n minDate={minShiftLimitDate?.toISOString()}\n maxDate={maxShiftLimitDate?.toISOString()}\n initialFormValues={\n event.updatedTimeHappensAt\n ? {\n updatedTimeHappens: new Date(event.updatedTimeHappensAt),\n }\n : undefined\n }\n />\n )}\n {commentModalVisible && id && (\n <CommentModal\n handleEventComment={(values: CommentModalFormValues) => {\n handleCommentChange(values.comment);\n setCommentModalVisible(false);\n }}\n onClose={() => setCommentModalVisible(false)}\n opened={commentModalVisible}\n eventId={id}\n allowRemoveButton={!!currentComment}\n initialValues={\n currentComment ? { comment: currentComment } : undefined\n }\n />\n )}\n </CardBox>\n );\n};\n\nexport default MedicationCard;\n","export default __webpack_public_path__ + \"static/media/Icon-clock.50f2643c.svg\";","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.extra.color.ocean};\n padding: 0;\n flex-wrap: wrap;\n`;\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { Message } from '@material-ui/icons';\nimport CheckIcon from '@material-ui/icons/Check';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport ClockIcon from '../../../../assets/Icon-clock.svg';\nimport TimeColorIcon from '../../../../assets/Icon-time-color.svg';\nimport TimeIcon from '../../../../assets/Icon-time.svg';\nimport useCanAccess from '../../../../hooks/useCanAccess';\nimport useShiftEventHandling from '../../../../hooks/useShiftEventHandling';\nimport CommentModal, {\n FormValues as CommentModalFormValues,\n} from '../CommentModal';\nimport {\n ButtonContainer,\n CaregiverTypography,\n LeftContainer,\n LineThroughTypography,\n RealTimeContainer,\n RightContainer,\n StyledButton,\n StyledChangeStatus,\n StyledCommentButton,\n StyledDoneIcon,\n StyledNotDoneIcon,\n TimerContainer,\n TypographyContainer,\n} from '../styles';\nimport UpdateTimeModal, {\n FormValues as UpdatedTimeModalFormValues,\n} from '../UpdateTimeModal';\nimport { CardBox } from './styles';\n\nconst UnselectedNotDoneIcon = <CloseIcon />;\nconst UnselectedDoneIcon = <CheckIcon />;\nconst SelectedNotDoneIcon = <StyledNotDoneIcon />;\nconst SelectedDoneIcon = <StyledDoneIcon />;\nconst CommentIcon = <Message />;\nconst UnselectedTimeIcon = <img src={TimeIcon} />;\nconst SelectedTimeIcon = <img src={TimeColorIcon} />;\n\ninterface CardProps {\n id?: number;\n name?: string;\n subCategory?: EventSubCategoryModel;\n eventHappensAt?: string;\n description?: string;\n status?: EventModel['status'];\n updatedTimeHappensAt?: string | null;\n comment?: string;\n caregiverName?: string;\n onChangeStatus: (id: number, newStatus: EventModel['status']) => void;\n onChangeComment: (id: number, newComment: string) => void;\n onChangeTime: (id: number, updatedTimeHappensAt: string | null) => void;\n}\n\nconst RoutineCard: React.FC<CardProps> = (event) => {\n const {\n id,\n name,\n subCategory,\n description,\n onChangeStatus,\n onChangeComment,\n onChangeTime,\n caregiverName,\n } = event;\n\n const {\n isStatusToggleTimeAllowed,\n date,\n minShiftLimitDate,\n maxShiftLimitDate,\n currentStatus,\n currentComment,\n handleStatusToggle,\n handleUpdatedTime,\n handleCommentChange,\n handleAllowedPatchEvent,\n } = useShiftEventHandling(event, {\n onChangeStatus,\n onChangeComment,\n onChangeTime,\n });\n\n const [commentModalVisible, setCommentModalVisible] = React.useState(false);\n const [updateTimeModalVisible, setUpdateTimeModalVisible] = React.useState(\n false\n );\n\n const { isAllowedToUpdate: isAllowedToUpdateComment } = useCanAccess(\n 'care/shift/event.comment'\n );\n const { isAllowedToUpdate: isAllowedToUpdateDoneStatus } = useCanAccess(\n 'care/shift/event.status'\n );\n const { isAllowedToUpdate: isAllowedToUpdateRealTime } = useCanAccess(\n 'care/shift/event.updated-time'\n );\n\n return (\n <CardBox data-testid={`routineCard-${id}`}>\n {event.updatedTimeHappensAt && (\n <RealTimeContainer\n data-testid={`realTimeContainer-${id}`}\n >{`Alterado para ${format(\n new Date(event.updatedTimeHappensAt),\n 'HH:mm'\n )}`}</RealTimeContainer>\n )}\n <LeftContainer>\n <TimerContainer>\n {event.updatedTimeHappensAt ? (\n <LineThroughTypography variant=\"h6\">{date}</LineThroughTypography>\n ) : (\n <Typography variant=\"h6\">{date}</Typography>\n )}\n </TimerContainer>\n <img src={ClockIcon} title={`routine-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">\n {subCategory?.name} {name && `(${String(name).trim()})`}\n </Typography>\n <Typography variant=\"subtitle2\">{description}</Typography>\n {currentComment && (\n <Typography variant=\"subtitle2\">Obs: {currentComment}</Typography>\n )}\n {caregiverName && (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n )}\n </TypographyContainer>\n <StyledChangeStatus>\n {id! > 0 && (\n <ButtonContainer>\n {isAllowedToUpdateComment && (\n <StyledCommentButton\n data-testid={`comment-set-${id}`}\n onClick={() =>\n handleAllowedPatchEvent(() => setCommentModalVisible(true))\n }\n >\n {CommentIcon}\n </StyledCommentButton>\n )}\n {isAllowedToUpdateRealTime && (\n <StyledButton\n data-testid={'timer-set-routine'}\n onClick={() =>\n handleAllowedPatchEvent(() =>\n setUpdateTimeModalVisible(true)\n )\n }\n >\n {event.updatedTimeHappensAt\n ? SelectedTimeIcon\n : UnselectedTimeIcon}\n </StyledButton>\n )}\n {isAllowedToUpdateDoneStatus && (\n <>\n <StyledButton\n data-testid={`notDoneButton-${id}`}\n $disabled={!isStatusToggleTimeAllowed}\n onClick={() => {\n handleAllowedPatchEvent(() =>\n handleStatusToggle('not_accomplished')\n );\n }}\n >\n {currentStatus === 'not_accomplished'\n ? SelectedNotDoneIcon\n : UnselectedNotDoneIcon}\n </StyledButton>\n <StyledButton\n data-testid={`doneButton-${id}`}\n $disabled={!isStatusToggleTimeAllowed}\n onClick={() => {\n handleAllowedPatchEvent(() =>\n handleStatusToggle('accomplished')\n );\n }}\n >\n {currentStatus === 'accomplished'\n ? SelectedDoneIcon\n : UnselectedDoneIcon}\n </StyledButton>\n </>\n )}\n </ButtonContainer>\n )}\n </StyledChangeStatus>\n </RightContainer>\n {updateTimeModalVisible && id && (\n <UpdateTimeModal\n eventId={id}\n handleUpdatedTime={(values: UpdatedTimeModalFormValues) =>\n handleUpdatedTime(values.updatedTimeHappens || null)\n }\n onClose={() => setUpdateTimeModalVisible(false)}\n opened={updateTimeModalVisible}\n allowRemoveButton={!!event.updatedTimeHappensAt}\n minDate={minShiftLimitDate?.toISOString()}\n maxDate={maxShiftLimitDate?.toISOString()}\n initialFormValues={\n event.updatedTimeHappensAt\n ? {\n updatedTimeHappens: new Date(event.updatedTimeHappensAt),\n }\n : undefined\n }\n />\n )}\n {commentModalVisible && id && (\n <CommentModal\n handleEventComment={(values: CommentModalFormValues) => {\n handleCommentChange(values.comment);\n setCommentModalVisible(false);\n }}\n onClose={() => setCommentModalVisible(false)}\n opened={commentModalVisible}\n eventId={id}\n allowRemoveButton={!!currentComment}\n initialValues={\n currentComment ? { comment: currentComment } : undefined\n }\n />\n )}\n </CardBox>\n );\n};\n\nexport default RoutineCard;\n","export default __webpack_public_path__ + \"static/media/Icon-time-measurement-orange.dbc34e5d.svg\";","export default __webpack_public_path__ + \"static/media/Icon-time-measurement.c48ae2ab.svg\";","import styled, { css } from 'styled-components';\nimport { CircularProgress, Typography } from '@material-ui/core';\n\nexport const StyledInput = styled.input`\n border-radius: 4px;\n width: 35px;\n border: 1px solid ${({ theme }) => theme.palette.extra.color.grey.main};\n padding: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const Column = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nexport const Row = styled.div<{ clickable?: boolean }>`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spacing(1)}px;\n margin: ${({ theme }) => theme.spacing(1, 0, 0, 1)};\n ${({ clickable }) => {\n if (!!clickable)\n return css`\n &:hover {\n cursor: pointer;\n }\n `;\n }}\n`;\n\nexport const Subtitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.yellow};\n font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spacing(0.5)}px;\n & > svg {\n color: ${({ theme }) => theme.palette.text.secondary};\n width: ${({ theme }) => theme.spacing(2)}px;\n height: ${({ theme }) => theme.spacing(2)}px;\n }\n`;\n\nexport const SymptomsDescription = styled(Typography)`\n margin-left: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const LoadingSpinner = styled(CircularProgress)`\n max-width: 10px;\n max-height: 10px;\n color: ${({ theme }) => theme.palette.text.primary};\n`;\n","import { FormControl, Select } from '@material-ui/core';\nimport styled from 'styled-components';\n\nimport { colorMapping, ColorsType } from '../../styles/colorMapping';\n\nexport const StyledFormControl = styled(FormControl).attrs(({ variant }) => ({\n variant: variant || 'outlined',\n}))<{\n $color: ColorsType;\n}>`\n & .MuiInputBase-root {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & label:not(.Mui-error) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & label.Mui-disabled {\n color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n & input:not(.Mui-disabled) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & textarea:not(.Mui-disabled) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n &\n .MuiInputAdornment-root:not(.Mui-disabled)\n .MuiIconButton-label:not(.Mui-disabled) {\n color: ${({ $color }) => colorMapping[$color]};\n }\n & .MuiOutlinedInput-root:not(.Mui-error, .Mui-disabled) {\n & fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n &:hover fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n &.Mui-focused fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n color: ${({ $color }) => colorMapping[$color]};\n }\n }\n & .MuiOutlinedInput-root.Mui-disabled {\n color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n cursor: default;\n\n & input:disabled {\n color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n\n & fieldset {\n border-color: ${({ $color }) => colorMapping[$color]};\n opacity: 65%;\n }\n }\n\n width: fit-content;\n`;\n\nexport const StyledSelect = styled(Select)`\n border-radius: 4px;\n\n & .MuiSelect-select {\n padding: ${({ theme }) => theme.spacing(1, 4, 1, 2)};\n }\n`;\n","import React from 'react';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport { StyledFormControl, StyledSelect } from './styles';\nimport { ColorsType } from '../../styles/colorMapping';\n\ninterface SelectDisplayProps extends React.HTMLAttributes<HTMLDivElement> {\n 'data-testid'?: string;\n}\n\nexport interface SelectProps {\n name?: string;\n label?: string;\n value?: string;\n id: string;\n error?: boolean;\n disabled?: boolean;\n color?: ColorsType;\n formControlVariant?: 'standard' | 'outlined' | 'filled';\n onChange?: (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => void;\n SelectDisplayProps?: SelectDisplayProps;\n}\n\nconst StyledSelectField: React.FC<SelectProps> = ({\n id,\n label,\n children,\n error,\n disabled,\n color = 'primary',\n formControlVariant = 'outlined',\n ...props\n}) => {\n return (\n <StyledFormControl\n $color={color}\n fullWidth\n error={Boolean(error)}\n disabled={disabled}\n variant={formControlVariant}\n >\n <InputLabel id={id}>{label}</InputLabel>\n <StyledSelect\n variant=\"outlined\"\n label={label}\n labelId={id}\n disabled={disabled}\n {...props}\n >\n {children}\n </StyledSelect>\n {error && <FormHelperText>{error}</FormHelperText>}\n </StyledFormControl>\n );\n};\n\nexport default StyledSelectField;\n","import React, { useContext, useMemo, useState } from 'react'\nimport { useDebouncedCallback } from 'use-debounce/lib'\nimport { bloodGlycemiaMask } from '../../../utils/inputs'\nimport { Row, StyledInput } from '../styles'\nimport { NewMeasurementValue } from '../../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement'\nimport {\n bloodGlycemiaAdditionalDetails,\n BloodGlycemiaAdditionalDetailsType,\n staticCareLineIdMapper,\n validateBloodGlycemia,\n} from '../utils'\nimport { ShiftInProgressContext } from '../../../contexts/ShiftInProgress'\nimport StyledMenuItem from '../../StyledMenuItem'\nimport StyledSelectField from '../../StyledSelectField'\nimport { MeasurementModel } from '@cuidador/database'\n\ninterface BloodGlycemiaInputProps {\n measurement?: MeasurementModel;\n value?: string;\n patchEvent: (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished',\n additionalDetails?: BloodGlycemiaAdditionalDetailsType\n ) => void;\n id?: string;\n disabled?: boolean;\n}\n\nconst BloodGlycemiaInput: React.ForwardRefRenderFunction<\n HTMLInputElement,\n BloodGlycemiaInputProps\n> = ({ measurement, value, patchEvent, id, disabled }, ref) => {\n const [glycemiaValue, setGlycemiaValue] = useState(value || '')\n const [\n additionalDetails,\n setAdditionalDetails,\n ] = useState<BloodGlycemiaAdditionalDetailsType>(measurement?.additionalDetails as BloodGlycemiaAdditionalDetailsType || 'fasting')\n const { shiftInProgress } = useContext(ShiftInProgressContext)\n\n const onChangeAnyValue = useDebouncedCallback(\n (newMeasurementValue: NewMeasurementValue, additionalDetails?: BloodGlycemiaAdditionalDetailsType) => {\n const newStatus = newMeasurementValue.measurementValue\n ? 'accomplished'\n : 'awaiting'\n patchEvent(newMeasurementValue, newStatus, additionalDetails)\n },\n 400,\n )\n\n const hasDiabetes = useMemo(() => {\n return !!shiftInProgress?.patient?.staticCareLines?.some(\n (scl) =>\n ['dysfunctional', 'severe_dysfunctional'].includes(\n String(scl.classification),\n ) &&\n [\n staticCareLineIdMapper.DIABETES_TYPE1,\n staticCareLineIdMapper.DIABETES_TYPE2,\n ].includes(scl.careLineId!),\n )\n }, [shiftInProgress?.patient?.staticCareLines])\n\n return (\n <Row>\n <StyledInput\n type='text'\n value={glycemiaValue}\n onChange={(e) => {\n const formattedValue = bloodGlycemiaMask(\n e.target.value === '0' ? '' : parseInt(e.target.value).toString(),\n )\n const complicationMeasurement = validateBloodGlycemia(\n formattedValue,\n shiftInProgress?.patient?.dateOfBirth,\n hasDiabetes,\n additionalDetails,\n )\n setGlycemiaValue(formattedValue)\n onChangeAnyValue.callback({\n ...complicationMeasurement,\n measurementValue: formattedValue,\n }, additionalDetails)\n }}\n disabled={disabled}\n ref={ref}\n id={`${id}-glycemia`}\n // The bellow attribute makes the input keyboard be set to only numbers on smartphones.\n pattern='\\d*'\n />\n <span>mg/dL</span>\n <StyledSelectField\n id='bloodGlycemiaAdditionalDetails'\n SelectDisplayProps={{\n 'data-testid': 'bloodGlycemiaAdditionalDetails',\n }}\n value={additionalDetails}\n color='black'\n onChange={(e) => {\n const complicationMeasurement = validateBloodGlycemia(\n glycemiaValue,\n shiftInProgress?.patient?.dateOfBirth,\n hasDiabetes,\n e.target.value as BloodGlycemiaAdditionalDetailsType,\n )\n onChangeAnyValue.callback({\n ...complicationMeasurement,\n measurementValue: glycemiaValue,\n }, e.target.value as BloodGlycemiaAdditionalDetailsType)\n setAdditionalDetails(\n e.target.value as BloodGlycemiaAdditionalDetailsType,\n )\n }}\n >\n {Object.entries(bloodGlycemiaAdditionalDetails).map(([key, label]) => (\n <StyledMenuItem\n key={`${id}-glycemia-${key}`}\n value={key}\n color='secondary'\n data-testid={`additional-details-${key}`}\n >\n {label}\n </StyledMenuItem>\n ))}\n </StyledSelectField>\n </Row>\n )\n}\n\nexport default React.forwardRef(BloodGlycemiaInput)\n","import styled, { css } from 'styled-components';\nimport { Button, Checkbox, Input, Modal, Typography } from '@material-ui/core';\n\nconst makeBackgroundColorWithHover = (color: string) => css`\n background-color: ${color};\n &:hover {\n background-color: ${color};\n }\n`;\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: row-reverse;\n`;\n\nexport const StyledModal = styled(Modal)`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nexport const MultiselectContainer = styled.div`\n max-height: 80vh;\n width: 80vw;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: ${({ theme }) => theme.palette.background.paper};\n border-radius: 10px;\n`;\n\nexport const Header = styled.div`\n display: flex;\n width: 100%;\n border-top-left-radius: 10px;\n border-top-right-radius: 9px;\n background-color: ${({ theme }) => theme.palette.extra.color.yellow};\n color: ${({ theme }) => theme.palette.background.paper};\n`;\n\nexport const HeaderLeftIcon = styled.div`\n display: flex;\n width: 60px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n\n & > svg {\n width: 100%;\n height: 36px;\n }\n`;\n\nexport const HeaderTitle = styled.div`\n display: flex;\n width: 100%;\n margin-right: 60px;\n height: 60px;\n align-items: center;\n justify-content: center;\n gap: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const OptionsSection = styled.div`\n display: flex;\n flex-direction: column;\n overflow-y: scroll;\n width: 85%;\n`;\n\nexport const OptionContainer = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n gap: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const StyledTypography = styled(Typography)`\n text-overflow: clip;\n overflow-x: hidden;\n`;\n\nexport const StyledCheckbox = styled(Checkbox)`\n padding: 0;\n`;\n\nexport const StyledInput = styled(Input)`\n width: 100%;\n font-size: ${({ theme }) => theme.typography.fontSize}px;\n`;\n\nexport const FooterButton = styled(Button)`\n width: 100%;\n ${({ theme }) => makeBackgroundColorWithHover(theme.palette.primary.main)};\n color: ${({ theme }) => theme.palette.background.paper};\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n`;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Typography } from '@material-ui/core';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\nimport {\n MultiselectContainer,\n OptionContainer,\n StyledModal,\n StyledCheckbox,\n StyledTypography,\n OptionsSection,\n HeaderTitle,\n Header,\n HeaderLeftIcon,\n FooterButton,\n StyledInput,\n} from './styles';\nimport LoadingBackdrop from '../../../LoadingBackdrop';\n\nexport type MultiselectModalOptionsType = {\n id: number | string;\n label: string;\n checked: boolean;\n customLabel?: string;\n check?: (id: number | string) => void;\n isCustomInput?: boolean;\n};\n\nexport interface MultiselectModalProps {\n isOpen: boolean;\n close: () => void;\n onClose: () => void;\n options: MultiselectModalOptionsType[];\n title: string;\n onFinishOptionsSelection: (options: MultiselectModalOptionsType[]) => void;\n loading: boolean;\n hasCustomUserInput?: boolean;\n customOptionInitialValue?: Partial<\n Pick<MultiselectModalOptionsType, 'id' | 'checked' | 'customLabel'>\n >;\n}\n\nconst Option: React.FC<MultiselectModalOptionsType & { testid: string }> = ({\n id,\n label,\n checked,\n check,\n testid,\n}) => {\n return (\n <OptionContainer onClick={() => !!check && check(id)} data-testid={testid}>\n <StyledCheckbox checked={checked} />\n <StyledTypography variant=\"body2\">{label}</StyledTypography>\n </OptionContainer>\n );\n};\n\nexport const MultiselectModal: React.FC<MultiselectModalProps> = ({\n isOpen,\n close,\n options,\n title,\n onFinishOptionsSelection,\n loading,\n hasCustomUserInput,\n customOptionInitialValue,\n onClose,\n}: MultiselectModalProps) => {\n const [localOptions, setLocalOptions] = useState<\n MultiselectModalOptionsType[]\n >([]);\n\n const [customOption, setCustomOption] = useState<MultiselectModalOptionsType>(\n {\n id: 'custom',\n checked: false,\n label: 'Outro',\n isCustomInput: true,\n check: () =>\n setCustomOption(({ checked, ...option }) => ({\n ...option,\n checked: !checked,\n })),\n }\n );\n\n const [customOptionName, setCustomOptionName] = useState('');\n\n useEffect(() => {\n if (!customOptionInitialValue) return;\n\n const { id, customLabel, checked } = customOptionInitialValue;\n\n setCustomOption({\n id: id ?? 'custom',\n customLabel: customLabel ?? '',\n checked: checked ?? false,\n label: 'Outro',\n isCustomInput: true,\n check: () =>\n setCustomOption(({ checked, ...option }) => ({\n ...option,\n checked: !checked,\n })),\n });\n\n setCustomOptionName(customLabel ?? '');\n }, [customOptionInitialValue]);\n\n useEffect(() => {\n setLocalOptions(options);\n }, [options]);\n\n const closeWithOnCloseEvent = useCallback(() => {\n close();\n onClose();\n }, [close, onClose]);\n\n const onSelectButtonClick = useCallback(() => {\n const formattedCustomOption = {\n ...customOption,\n customLabel: customOptionName,\n };\n\n if (!customOption.checked)\n onFinishOptionsSelection(localOptions.filter(({ checked }) => !!checked));\n else\n onFinishOptionsSelection([\n ...localOptions.filter(({ checked }) => !!checked),\n formattedCustomOption,\n ]);\n\n close();\n }, [\n localOptions,\n onFinishOptionsSelection,\n close,\n customOption,\n customOptionName,\n ]);\n\n return (\n <>\n {loading && isOpen && <LoadingBackdrop loading={loading} />}\n <StyledModal\n open={isOpen}\n onBackdropClick={closeWithOnCloseEvent}\n data-testid=\"multiselect-modal-root\"\n >\n <MultiselectContainer>\n <Header>\n <HeaderLeftIcon onClick={closeWithOnCloseEvent}>\n <ChevronLeft />\n </HeaderLeftIcon>\n <HeaderTitle>\n <Typography variant=\"h6\">{title}</Typography>\n </HeaderTitle>\n </Header>\n <OptionsSection data-testid=\"multiselect-options-section\">\n {[...localOptions, customOption].map((option, index) => (\n <>\n <Option\n {...option}\n check={\n !!option.check\n ? option.check\n : (id: MultiselectModalOptionsType['id']) =>\n setLocalOptions((options) =>\n options.map(({ checked, ...option }) => ({\n ...option,\n checked: id === option.id ? !checked : checked,\n }))\n )\n }\n key={`multiselect-option-${index}`}\n testid={`multiselect-option-${index}`}\n />\n {!!hasCustomUserInput &&\n customOption.checked === true &&\n option.id === customOption.id && (\n <StyledInput\n value={customOptionName}\n onChange={(e) => setCustomOptionName(e.target.value)}\n data-testid=\"multiselect-symptom-name-input\"\n />\n )}\n </>\n ))}\n </OptionsSection>\n <br />\n <FooterButton onClick={onSelectButtonClick}>Selecionar</FooterButton>\n </MultiselectContainer>\n </StyledModal>\n </>\n );\n};\n","export const SUB_CATEGORY_ENUM = {\n GLICEMY: 35230,\n BLOOD_PRESSURE: 35231,\n OXIMETRY: 35232,\n WEIGHT: 35233,\n HEIGHT: 35234,\n HEART_RATE: 35235,\n BREATH_RATE: 35236,\n TEMPERATURE: 35237,\n PAIN: 35238,\n URINARY_ELIMINATION: 35297,\n EVACUATION: 35298,\n HIDRIC_INGESTION: 35299,\n ABDOMINAL_CIRCUMFERENCE: 35300,\n};\n\nexport default SUB_CATEGORY_ENUM;\n","import { EventModel, SymptomModel } from '@cuidador/database';\nimport React, { createContext, useContext, useEffect, useState } from 'react';\nimport SUB_CATEGORY_ENUM from '../utils/subCategoryEnum';\nimport { CurrentShiftDataContext } from './CurrentShiftData';\nimport { Item } from '../utils/store';\n\ninterface SymptomsListContextProviderProps {\n currentShiftEvents: Item<EventModel>[] | null;\n}\n\nexport const SymptomsListContext = createContext<SymptomModel[]>([]);\n\nexport const useSymptomsListContext = () => {\n const symptomsList = useContext(SymptomsListContext);\n return symptomsList;\n};\n\nconst SymptomsListContextProvider: React.FC<SymptomsListContextProviderProps> = ({\n children,\n currentShiftEvents,\n}) => {\n const [symptomsList, setSymptomsList] = useState<SymptomModel[]>([]);\n const { useEvent } = useContext(CurrentShiftDataContext);\n const { getSymptomsList } = useEvent();\n\n useEffect(() => {\n const anyBloodPressureEvent = currentShiftEvents?.find(\n (event) => event.subCategoryId === SUB_CATEGORY_ENUM.BLOOD_PRESSURE\n );\n\n if (!anyBloodPressureEvent) return;\n\n getSymptomsList().then((list) => !!list && setSymptomsList(list));\n }, [currentShiftEvents]);\n\n return (\n <SymptomsListContext.Provider value={symptomsList}>\n {children}\n </SymptomsListContext.Provider>\n );\n};\n\nexport default SymptomsListContextProvider;\n","import { numberMask } from '@cuidador/frontend-caregiver/src/utils/inputs';\nimport { toNumber } from 'lodash';\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useDebouncedCallback } from 'use-debounce/lib';\nimport {\n Column,\n LoadingSpinner,\n Row,\n StyledInput,\n Subtitle,\n SymptomsDescription,\n} from '../styles';\nimport { MeasurementModel } from '@cuidador/database';\nimport { NewMeasurementValue } from '../../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement';\nimport { Create } from '@material-ui/icons';\nimport {\n formatOptionIntoSymptomOption,\n formatSymptomsOptions,\n shouldShowSymptoms,\n} from './utils';\nimport {\n MultiselectModal,\n MultiselectModalOptionsType,\n} from './MultiselectModal';\nimport { useSymptomsListContext } from '../../../contexts/SymptomsList';\nimport { CurrentShiftDataContext } from '../../../contexts/CurrentShiftData';\nimport { validateBloodPressure } from '../utils';\n\ninterface BloodPressureMeasurementInputProps {\n value?: string;\n patchEvent: (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished'\n ) => void;\n id?: string;\n disabled?: boolean;\n measurement?: MeasurementModel;\n}\n\nconst BloodPressureMeasurementInput: React.ForwardRefRenderFunction<\n HTMLInputElement,\n BloodPressureMeasurementInputProps\n> = ({ value, patchEvent, id, disabled, measurement }, ref) => {\n\n const [systolicValue, setSystolicValue] = useState('');\n const [diastolicValue, setDiastolicValue] = useState('');\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [symptomOptionsToPut, setSymptomOptionsToPut] = useState<\n NonNullable<NewMeasurementValue['symptomOptions']>\n >([]);\n\n const { useEvent } = useContext(CurrentShiftDataContext);\n const { loading } = useEvent();\n\n const symptomOptionsList = useSymptomsListContext();\n\n useEffect(() => {\n if (!value) return;\n\n const [systolic, diastolic] = value.split('x');\n\n const sanitizedSystolic = toNumber(numberMask(systolic));\n setSystolicValue(String(sanitizedSystolic).substring(0));\n\n if (typeof diastolic === 'undefined') return;\n\n const sanitizedDiastolic = toNumber(numberMask(diastolic));\n setDiastolicValue(String(sanitizedDiastolic).substring(0));\n }, []);\n\n const onChangeAnyValue = useDebouncedCallback(\n (\n systolicValue: string,\n diastolicValue: string,\n measurementComplication: Nullable<\n Required<\n Pick<\n MeasurementModel,\n 'complicationLevel' | 'isDangerousComplication'\n >\n >\n >,\n symptomOptions: NonNullable<NewMeasurementValue['symptomOptions']>\n ) => {\n const systolicNumber = toNumber(systolicValue);\n const diastolicNumber = toNumber(diastolicValue);\n\n\n const systolic = String(systolicNumber)\n const diastolic = String(diastolicNumber)\n\n const status = (() => {\n if (systolicNumber > 0 && diastolicNumber > 0) return 'accomplished';\n\n if (systolicNumber > 0 || diastolicNumber > 0)\n return 'not_accomplished';\n\n return 'awaiting';\n })();\n\n if (systolicNumber === 0 && diastolicNumber === 0) {\n setSystolicValue('');\n setDiastolicValue('');\n return patchEvent(\n {\n measurementValue: '',\n ...measurementComplication,\n symptomOptions,\n },\n status\n );\n }\n\n return patchEvent(\n {\n measurementValue: `${systolic} x ${diastolic}`,\n ...measurementComplication,\n symptomOptions,\n },\n status\n );\n },\n 400,\n );\n\n const symptomList = useMemo(\n () =>\n symptomOptionsToPut.map(\n ({ wasUserInput, label, customLabel }) =>\n (wasUserInput ? customLabel : label) ?? ''\n ),\n [symptomOptionsToPut]\n );\n\n const customOptionInitialValue = useMemo(\n () => measurement?.symptoms?.find((symptom) => !!symptom.wasUserInput),\n [measurement?.symptoms]\n );\n\n const symptomOptions = useMemo(() => {\n const formattedSymptomOptions = formatSymptomsOptions(\n symptomOptionsList,\n measurement?.symptoms ?? []\n );\n\n const customOption = measurement?.symptoms?.find(\n (symptom) => !!symptom.wasUserInput\n );\n\n const formattedCheckedOptions = formattedSymptomOptions.filter(\n (option) => option.checked === true\n );\n\n if (!customOption) {\n setSymptomOptionsToPut(formattedCheckedOptions);\n } else {\n const formattedCustomOption = {\n id: customOption?.id,\n customLabel: customOption?.symptomName,\n label: 'Outro',\n wasUserInput: true,\n };\n\n setSymptomOptionsToPut([\n ...formattedCheckedOptions,\n formattedCustomOption,\n ]);\n }\n\n return formattedSymptomOptions;\n }, [symptomOptionsList, measurement?.symptoms]);\n\n const onCloseWithoutSelection = useCallback(() => {\n const complicationMeasurement = validateBloodPressure(\n systolicValue,\n symptomOptionsToPut.length\n );\n onChangeAnyValue.callback(\n systolicValue,\n diastolicValue,\n complicationMeasurement,\n symptomOptionsToPut\n );\n }, [systolicValue, diastolicValue, symptomOptionsToPut]);\n\n return (\n <Column>\n <Row>\n <StyledInput\n type=\"text\"\n value={systolicValue}\n onChange={(e) => {\n const value = e.target.value === '0' ? '' : toNumber(numberMask(e.target.value));\n const sanitizedValue = String(value);\n const complicationMeasurement = validateBloodPressure(\n sanitizedValue,\n symptomOptionsToPut.length\n );\n setSystolicValue(sanitizedValue);\n onChangeAnyValue.callback(\n sanitizedValue,\n diastolicValue,\n complicationMeasurement,\n symptomOptionsToPut\n );\n }}\n disabled={disabled}\n ref={ref}\n id={`${id}-systolic`}\n // The bellow attribute makes the input keyboard be set to only numbers on smartphones.\n pattern=\"\\d*\"\n />\n <span>x</span>\n <StyledInput\n type=\"text\"\n value={diastolicValue}\n onChange={(e) => {\n const value = e.target.value === '0' ? '' : toNumber(numberMask(e.target.value));\n const sanitizedValue = String(value);\n const complicationMeasurement = validateBloodPressure(\n systolicValue,\n symptomOptionsToPut.length\n );\n setDiastolicValue(sanitizedValue);\n onChangeAnyValue.callback(\n systolicValue,\n sanitizedValue,\n complicationMeasurement,\n symptomOptionsToPut\n );\n }}\n disabled={disabled}\n id={`${id}-diastolic`}\n // The bellow attribute makes the input keyboard be set to only numbers on smartphones.\n pattern=\"\\d*\"\n />\n <span>mmHg</span>\n </Row>\n {shouldShowSymptoms(Number(systolicValue)) && (\n <Row\n clickable={true}\n onClick={() => {\n if (!loading) setIsModalOpen(true);\n }}\n data-testid=\"open-symptom-multiselect-modal\"\n >\n <Column>\n <Subtitle variant=\"body2\">\n Sintomas\n {!loading ? <Create width={10} /> : <LoadingSpinner />}\n </Subtitle>\n <SymptomsDescription variant=\"body2\">\n {symptomList.length === 0 && 'Nenhum sintoma registado.'}\n {symptomList.length > 0 && `• ${symptomList.join(', ')}.`}\n </SymptomsDescription>\n </Column>\n </Row>\n )}\n <MultiselectModal\n close={() => setIsModalOpen(false)}\n onClose={onCloseWithoutSelection}\n isOpen={isModalOpen}\n loading={loading}\n title=\"Escolha os sintomas\"\n options={symptomOptions}\n hasCustomUserInput\n customOptionInitialValue={{\n id: customOptionInitialValue?.id,\n checked: typeof customOptionInitialValue !== 'undefined',\n customLabel: customOptionInitialValue?.symptomName,\n }}\n onFinishOptionsSelection={(options: MultiselectModalOptionsType[]) => {\n const symptomsToPut = formatOptionIntoSymptomOption(options);\n setSymptomOptionsToPut(symptomsToPut);\n const complicationMeasurement = validateBloodPressure(\n systolicValue,\n symptomsToPut.length\n );\n onChangeAnyValue.callback(\n systolicValue,\n diastolicValue,\n complicationMeasurement,\n symptomsToPut\n );\n }}\n />\n </Column>\n );\n};\n\nexport default React.forwardRef(BloodPressureMeasurementInput);\n","import React, { useState } from 'react';\nimport { useDebouncedCallback } from 'use-debounce/lib';\nimport { bodyTemperatureMask } from '../../../utils/inputs';\nimport { Row, StyledInput } from '../styles';\nimport { validateBodyTemperature } from '../utils';\nimport { NewMeasurementValue } from '../../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement';\n\ninterface BodyTemperatureInputProps {\n value?: string;\n patchEvent: (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished'\n ) => void;\n id?: string;\n disabled?: boolean;\n}\n\nconst BodyTemperatureInput: React.ForwardRefRenderFunction<\n HTMLInputElement,\n BodyTemperatureInputProps\n> = ({ value, patchEvent, id, disabled }, ref) => {\n const [temperatureValue, setTemperatureValue] = useState(value || '');\n\n const onChangeAnyValue = useDebouncedCallback(\n (newMeasurementValue: NewMeasurementValue) => {\n const newStatus = newMeasurementValue.measurementValue\n ? 'accomplished'\n : 'awaiting';\n patchEvent(newMeasurementValue, newStatus);\n },\n 400\n );\n\n return (\n <Row>\n <StyledInput\n type=\"text\"\n value={temperatureValue}\n onChange={(e) => {\n const formattedValue = bodyTemperatureMask(e.target.value === '0' ? '' : parseInt(e.target.value).toString());\n const complicationMeasurement = validateBodyTemperature(\n formattedValue\n );\n setTemperatureValue(formattedValue);\n onChangeAnyValue.callback({\n ...complicationMeasurement,\n measurementValue: formattedValue,\n });\n }}\n disabled={disabled}\n ref={ref}\n id={`${id}-temperature`}\n // The bellow attribute makes the input keyboard be set to only numbers on smartphones.\n pattern=\"\\d*\"\n />\n <span>°C</span>\n </Row>\n );\n};\n\nexport default React.forwardRef(BodyTemperatureInput);\n","import React, { useState } from 'react';\nimport { useDebouncedCallback } from 'use-debounce/lib';\nimport { breathRateMask } from '../../../utils/inputs';\nimport { Row, StyledInput } from '../styles';\nimport { validateBreathRate } from '../utils';\nimport { NewMeasurementValue } from '../../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement';\n\ninterface BreathRateInputProps {\n value?: string;\n patchEvent: (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished'\n ) => void;\n id?: string;\n disabled?: boolean;\n}\n\nconst BreathRateInput: React.ForwardRefRenderFunction<\n HTMLInputElement,\n BreathRateInputProps\n> = ({ value, patchEvent, id, disabled }, ref) => {\n const [frequencyValue, setFrequencyValue] = useState(value || '');\n\n const onChangeAnyValue = useDebouncedCallback(\n (newMeasurementValue: NewMeasurementValue) => {\n const newStatus = newMeasurementValue.measurementValue\n ? 'accomplished'\n : 'awaiting';\n patchEvent(newMeasurementValue, newStatus);\n },\n 400\n );\n\n return (\n <Row>\n <StyledInput\n type=\"text\"\n value={frequencyValue}\n onChange={(e) => {\n const formattedValue = breathRateMask(e.target.value === '0' ? '' : parseInt(e.target.value).toString());\n const complicationMeasurement = validateBreathRate(formattedValue);\n onChangeAnyValue.callback({\n ...complicationMeasurement,\n measurementValue: formattedValue,\n });\n setFrequencyValue(formattedValue);\n }}\n disabled={disabled}\n ref={ref}\n id={`${id}-breathing-frequency`}\n // The bellow attribute makes the input keyboard be set to only numbers on smartphones.\n pattern=\"\\d*\"\n />\n <span>mrm</span>\n </Row>\n );\n};\n\nexport default React.forwardRef(BreathRateInput);\n","import React, { useState } from 'react'\nimport { useDebouncedCallback } from 'use-debounce/lib'\nimport { heartRateMask } from '../../../utils/inputs'\nimport { Row, StyledInput } from '../styles'\nimport { NewMeasurementValue } from '../../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement'\nimport { validateHeartRate } from '../utils'\n\ninterface HeartRateInputProps {\n value?: string\n patchEvent: (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished'\n ) => void\n id?: string\n disabled?: boolean\n}\n\nconst HeartRateInput: React.ForwardRefRenderFunction<\n HTMLInputElement,\n HeartRateInputProps\n> = ({ value, patchEvent, id, disabled }, ref) => {\n const [heartRate, setHeartRate] = useState(value || '')\n\n const onChangeAnyValue = useDebouncedCallback(\n (newMeasurementValue: NewMeasurementValue) => {\n const newStatus = newMeasurementValue.measurementValue\n ? 'accomplished'\n : 'awaiting'\n patchEvent(newMeasurementValue, newStatus)\n },\n 400,\n )\n\n return (\n <Row>\n <StyledInput\n type='text'\n value={heartRate}\n onChange={(e) => {\n const formattedValue = heartRateMask(e.target.value === '0' ? '' : parseInt(e.target.value).toString())\n const complicationMeasurement = validateHeartRate(formattedValue)\n onChangeAnyValue.callback({\n ...complicationMeasurement,\n measurementValue: formattedValue,\n })\n setHeartRate(formattedValue)\n }}\n disabled={disabled}\n ref={ref}\n id={`${id}-rate`}\n // The bellow attribute makes the input keyboard be set to only numbers on smartphones.\n pattern='\\d*'\n />\n <span>bpm</span>\n </Row>\n )\n}\n\nexport default React.forwardRef(HeartRateInput)\n","import React, { useState } from 'react';\nimport { useDebouncedCallback } from 'use-debounce/lib';\nimport { oximetryRateMask } from '../../../utils/inputs';\nimport { Row, StyledInput } from '../styles';\nimport { validateOxymetryInput } from '../utils';\nimport { NewMeasurementValue } from '../../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement';\nimport { parse } from 'path';\n\ninterface OximetryRateProps {\n value?: string;\n patchEvent: (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished'\n ) => void;\n id?: string;\n disabled?: boolean;\n}\n\nconst OximetryRate: React.ForwardRefRenderFunction<\n HTMLInputElement,\n OximetryRateProps\n> = ({ value, patchEvent, id, disabled }, ref) => {\n const [oximetryRate, setOximetryRate] = useState(value || '');\n\n const onChangeAnyValue = useDebouncedCallback(\n (newMeasurementValue: NewMeasurementValue) => {\n const newStatus = newMeasurementValue.measurementValue\n ? 'accomplished'\n : 'awaiting';\n patchEvent(newMeasurementValue, newStatus);\n },\n 400\n );\n\n return (\n <Row>\n <StyledInput\n type=\"text\"\n value={oximetryRate}\n onChange={(e) => {\n const formattedValue = oximetryRateMask(\n e.target.value === '0'\n ? ''\n : parseInt(e.target.value) > 100\n ? '100'\n : parseInt(e.target.value).toString()\n );\n const measurementComplication = validateOxymetryInput(formattedValue);\n onChangeAnyValue.callback({\n ...measurementComplication,\n measurementValue: formattedValue,\n });\n setOximetryRate(formattedValue);\n }}\n disabled={disabled}\n ref={ref}\n id={`${id}-oximetry`}\n // The bellow attribute makes the input keyboard be set to only numbers on smartphones.\n pattern=\"\\d*\"\n />\n <span>%SaO2</span>\n </Row>\n );\n};\n\nexport default React.forwardRef(OximetryRate);\n","import React, { useState } from 'react';\nimport { useDebouncedCallback } from 'use-debounce/lib';\nimport { weightMeasurementMask } from '../../../utils/inputs';\nimport { Row, StyledInput } from '../styles';\nimport { NewMeasurementValue } from '../../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement';\n\ninterface WeightMeasurementInputProps {\n value?: string;\n patchEvent: (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished'\n ) => void;\n id?: string;\n disabled?: boolean;\n}\n\nconst WeightMeasurementInput: React.ForwardRefRenderFunction<\n HTMLInputElement,\n WeightMeasurementInputProps\n> = ({ value, patchEvent, id, disabled }, ref) => {\n const [weightValue, setWeightValue] = useState(value || '');\n\n const onChangeAnyValue = useDebouncedCallback(\n (newMeasurementValue: NewMeasurementValue) => {\n const newStatus = newMeasurementValue.measurementValue\n ? 'accomplished'\n : 'awaiting';\n patchEvent(newMeasurementValue, newStatus);\n },\n 400\n );\n\n return (\n <Row>\n <StyledInput\n type=\"text\"\n value={weightValue}\n onChange={(e) => {\n const formattedValue = weightMeasurementMask(e.target.value === '0' ? '' : parseInt(e.target.value).toString());\n const complicationMeasurement = {};\n setWeightValue(formattedValue);\n onChangeAnyValue.callback({\n ...complicationMeasurement,\n measurementValue: formattedValue,\n });\n }}\n disabled={disabled}\n ref={ref}\n id={`${id}-weight`}\n />\n <span>Kg</span>\n </Row>\n );\n};\n\nexport default React.forwardRef(WeightMeasurementInput);\n","import { EventSubCategoryModel, MeasurementModel } from '@cuidador/database';\nimport React from 'react';\nimport BloodGlycemiaInput from './BloodGlycemiaInput';\nimport BloodPressureMeasurementInput from './BloodPressureMeasurementInput';\nimport BodyTemperatureInput from './BodyTemperatureInput';\nimport BreathRateInput from './BreathRateInput';\nimport HeartRateInput from './HeartRateInput';\nimport OximetryRateInput from './OximetryRateInput';\nimport WeightMeasurementInput from './WeightMeasurementInput';\nimport { subCategoryIdMapper } from './utils';\nimport { NewMeasurementValue } from '../CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/Measurement';\n\ninterface VitalSignsMeasurementInputProps {\n subCategory: EventSubCategoryModel;\n patchEvent: (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished'\n ) => void;\n value?: string;\n id?: string;\n disabled?: boolean;\n measurement?: MeasurementModel;\n}\n\nconst VitalSignsMeasurementInput: React.ForwardRefRenderFunction<\n HTMLInputElement,\n VitalSignsMeasurementInputProps\n> = ({ subCategory, ...props }, ref) => {\n const childrenProps = { ...props, ref };\n\n if (subCategory.id === subCategoryIdMapper.BLOOD_PRESSURE)\n return <BloodPressureMeasurementInput {...childrenProps} />;\n else if (subCategory.id === subCategoryIdMapper.BODY_TEMPERATURE)\n return <BodyTemperatureInput {...childrenProps} />;\n else if (subCategory.id === subCategoryIdMapper.BLOOD_GLYCEMIA)\n return <BloodGlycemiaInput {...childrenProps} />;\n else if (subCategory.id === subCategoryIdMapper.BREATH_RATE)\n return <BreathRateInput {...childrenProps} />;\n else if (subCategory.id === subCategoryIdMapper.HEART_RATE)\n return <HeartRateInput {...childrenProps} />;\n else if (subCategory.id === subCategoryIdMapper.OXIMETRY_RATE)\n return <OximetryRateInput {...childrenProps} />;\n else if (subCategory.id === subCategoryIdMapper.WEIGHT_MEASURMENT)\n return <WeightMeasurementInput {...childrenProps} />;\n\n return <></>;\n};\n\nexport default React.forwardRef(VitalSignsMeasurementInput);\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\nimport { APIError } from '@cuidador/lib';\nimport { AxiosError } from 'axios';\nimport _ from 'lodash';\nimport { toast } from 'react-toastify';\nimport { categoryIdMapper } from '../..';\nimport { resolveErrorMessage } from '../../../../utils/error';\nimport { subCategoryIdMapper } from '../../../VitalSignsMeasurementInput/utils';\n\ntype GroupedMeasurements = {\n scheduledMeasurements: EventModel[];\n subCategory: EventSubCategoryModel | undefined;\n};\n\ntype FormattedEvent = GroupedMeasurements | EventModel;\n\nexport const formatEvents = (events: EventModel[]) => {\n const measurements = events.filter(\n (event) =>\n event.subCategory?.categoryId === categoryIdMapper['MEASUREMENT'] &&\n event.eventScheduleId\n );\n const filteredEvents = events.filter(\n (event) =>\n event.subCategory?.categoryId !== categoryIdMapper['MEASUREMENT'] ||\n !event.eventScheduleId\n );\n\n const groupedMeasurements = Object.values(\n _.groupBy(measurements, 'eventHappensAt')\n );\n\n const formattedMeasurements = groupedMeasurements.map((group) => {\n return {\n scheduledMeasurements: group,\n subCategory: group[0].subCategory,\n };\n });\n\n const formattedEvents: FormattedEvent[] = filteredEvents.concat(\n formattedMeasurements\n );\n\n const formattedSortedEvents = formattedEvents.sort((event1, event2) => {\n const dateEvent1 =\n 'scheduledMeasurements' in event1\n ? event1.scheduledMeasurements[0].eventHappensAt\n : event1.eventHappensAt;\n\n const dateEvent2 =\n 'scheduledMeasurements' in event2\n ? event2.scheduledMeasurements[0].eventHappensAt\n : event2.eventHappensAt;\n\n return new Date(dateEvent1 as string) > new Date(dateEvent2 as string)\n ? 1\n : -1;\n });\n\n return formattedSortedEvents;\n};\n\nexport const toastErrorRedirect = async (\n err: AxiosError<APIError>,\n beforeOpen: () => Promise<void>\n) => {\n const responseDataMessage = err.response?.data.displayMessage || '';\n const messages = [\n 'O plantão foi finalizado automaticamente.',\n 'Você foi removido do plantão.',\n 'Você já finalizou esta execução.',\n ];\n if (messages.includes(responseDataMessage)) {\n await beforeOpen();\n return toast.error(responseDataMessage);\n }\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n};\n\nexport const subCategoryHasCustomInput = (\n subCategory: EventSubCategoryModel\n): boolean => {\n return Boolean(\n Object.values(subCategoryIdMapper).find((id) => id === subCategory.id)\n );\n};\n","import { Button, Typography } from '@material-ui/core';\nimport { Close } from '@material-ui/icons';\nimport CheckIcon from '@material-ui/icons/Check';\nimport styled, { css } from 'styled-components';\n\ninterface StyleForComplication {\n styledHighlight: 'red' | 'orange' | undefined;\n}\n\nexport const Container = styled.div<StyleForComplication>`\n display: flex;\n flex-direction: column;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n padding-top: ${({ theme }) => theme.spacing(1)}px;\n background-color: #fff;\n border-radius: 4px;\n ${({ theme, styledHighlight }) => {\n if (styledHighlight === 'red')\n return css`\n border: 5px solid ${theme.palette.extra.color.red.light};\n `;\n if (styledHighlight === 'orange')\n return css`\n border: 5px solid ${theme.palette.extra.color.yellow};\n `;\n }}\n`;\n\nexport const RealTimeContainer = styled.div`\n background-color: ${({ theme }) => theme.palette.warning.light};\n color: black;\n padding-left: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const StyledBoldTitle = styled(Typography)<StyleForComplication>`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n font-weight: bold;\n color: ${({ theme, styledHighlight }) =>\n styledHighlight === 'red'\n ? theme.palette.extra.color.red.light\n : theme.palette.extra.color.yellow};\n line-height: 1rem;\n`;\n\nexport const Instructions = styled(Typography)`\n line-height: 14px;\n padding: ${({ theme }) => theme.spacing(0, 1)};\n`;\n\nexport const MeasurementInput = styled.input`\n border: 1px solid ${({ theme }) => theme.palette.extra.color.grey.main};\n padding: ${({ theme }) => theme.spacing(1)}px;\n margin: ${({ theme }) => theme.spacing(1, 1, 0, 1)};\n border-radius: 4px;\n`;\n\nexport const NoteTypography = styled(Typography)`\n padding-inline: ${({ theme }) => theme.spacing(1)}px;\n line-height: 1.2;\n word-break: break-all;\n`;\n\nexport const ActionsContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n padding: ${({ theme }) => theme.spacing(0, 1)};\n`;\n\nexport const StyledCommentButton = styled(Button)`\n border: none;\n min-width: 0px;\n padding: 0;\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n margin: ${({ theme }) => theme.spacing(1, 0, 1, 1)};\n align-self: flex-end;\n`;\n\ninterface CheckButtonProps {\n isChecked: boolean;\n}\n\nexport const SelectedAccessTimeButton = styled.button<CheckButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n align-self: center;\n margin: ${({ theme }) => theme.spacing(1, 0, 1, 1)};\n`;\n\nexport const CloseIconContainer = styled.button<CheckButtonProps>`\n ${({ theme, isChecked }) => {\n const background = isChecked\n ? theme.palette.extra.color.red.main\n : theme.palette.common.white;\n\n const iconColor = isChecked\n ? theme.palette.extra.color.grey.light\n : theme.palette.extra.color.grey.dark;\n\n const borderColor = isChecked\n ? background\n : theme.palette.extra.color.grey.dark;\n\n return css`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: 2px solid ${borderColor};\n color: ${iconColor};\n background-color: ${background};\n border-radius: 100%;\n margin: ${theme.spacing(1, 0, 1, 1)};\n `;\n }}\n`;\n\nexport const StyledCloseIcon = styled(Close)`\n width: 15px;\n height: 15px;\n`;\n\nexport const CheckIconContainer = styled.div<CheckButtonProps>`\n ${({ theme, isChecked }) => {\n const background = isChecked\n ? theme.palette.extra.color.green\n : theme.palette.common.white;\n\n const iconColor = isChecked\n ? theme.palette.extra.color.grey.light\n : theme.palette.extra.color.grey.dark;\n\n const borderColor = isChecked\n ? background\n : theme.palette.extra.color.grey.dark;\n\n return css`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 2px solid ${borderColor};\n color: ${iconColor};\n background-color: ${background};\n border-radius: 100%;\n margin: ${theme.spacing(1, 0, 1, 1)};\n `;\n }}\n`;\n\nexport const StyledCheckIcon = styled(CheckIcon)`\n width: 15px;\n height: 15px;\n`;\n\nexport const BoldText = styled.span`\n font-weight: bold;\n`;\n\nexport const CaregiverTypography = styled.div`\n color: ${({ theme }) => theme.palette.text.secondary};\n margin: ${({ theme }) => theme.spacing(1)}px;\n font-weight: 600;\n font-size: 15px;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &::before {\n content: 'por ';\n font-weight: 400;\n }\n`;\n","import {\n EventModel,\n EventSubCategoryModel,\n MeasurementModel,\n} from '@cuidador/database'\nimport { Typography } from '@material-ui/core'\nimport { Message } from '@material-ui/icons'\nimport { format } from 'date-fns'\nimport React, { useContext, useMemo } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { toast } from 'react-toastify'\nimport { useDebouncedCallback } from 'use-debounce'\nimport SelectedTimeIcon from '../../../../../assets/Icon-time-measurement-orange.svg'\nimport UnSelectedTimeIcon from '../../../../../assets/Icon-time-measurement.svg'\nimport { CurrentShiftDataContext } from '../../../../../contexts/CurrentShiftData'\nimport { ShiftInProgressContext } from '../../../../../contexts/ShiftInProgress'\nimport { AuthContext } from '../../../../../contexts/auth'\nimport useCanAccess from '../../../../../hooks/useCanAccess'\nimport { checkIfUserIsAllowedToPatchEvent as userIsAllowedToPatchEvent } from '../../../../../hooks/useShiftEventHandling'\nimport { isDateAtInterval } from '../../../../CreateShiftEvent/utils'\nimport VitalSignsMeasurementInput from '../../../../VitalSignsMeasurementInput'\nimport CommentModal, {\n FormValues as CommentModalFormValues,\n} from '../../CommentModal'\nimport UpdateTimeModal, {\n FormValues as UpdatedTimeModalFormValues,\n} from '../../UpdateTimeModal'\nimport { subCategoryHasCustomInput, toastErrorRedirect } from '../utils'\nimport {\n ActionsContainer,\n BoldText,\n CaregiverTypography,\n CheckIconContainer,\n CloseIconContainer,\n Container,\n Instructions,\n MeasurementInput,\n NoteTypography,\n RealTimeContainer,\n SelectedAccessTimeButton,\n StyledBoldTitle,\n StyledCheckIcon,\n StyledCloseIcon,\n StyledCommentButton,\n} from './styles'\nimport { BloodGlycemiaAdditionalDetailsType } from '../../../../VitalSignsMeasurementInput/utils'\n\ninterface MeasurementProps {\n id: number;\n name?: string;\n description?: string;\n status?: string;\n comment?: string;\n caregiverId?: number;\n caregiverName?: string;\n measurement?: MeasurementModel;\n readonly: boolean;\n subCategory?: EventSubCategoryModel;\n updatedTimeHappensAt?: string | null;\n onChangeComment: (id: number, values: CommentModalFormValues) => void;\n legacy?: boolean;\n additionalDetails?: string\n}\n\nexport type NewMeasurementValue = Prettify<\n PartialNullable<\n Required<\n Pick<\n MeasurementModel,\n 'complicationLevel' | 'isDangerousComplication' | 'measurementValue'\n >\n >,\n 'complicationLevel' | 'isDangerousComplication'\n > & {\n symptomOptions?: {\n id?: number;\n label?: string;\n customLabel?: string;\n wasUserInput?: boolean;\n }[];\n } & {\n additionalDetails?: BloodGlycemiaAdditionalDetailsType\n }\n>;\n\nconst Measurement = ({\n id: eventId,\n status,\n comment,\n caregiverId,\n caregiverName,\n measurement,\n readonly,\n description,\n updatedTimeHappensAt,\n subCategory,\n onChangeComment,\n legacy,\n}: MeasurementProps) => {\n const history = useHistory()\n const [currentStatus, setCurrentStatus] = React.useState(\n status || 'awaiting',\n )\n const [currentCaregiverName, setCurrentCaregiverName] = React.useState(\n caregiverName || undefined,\n )\n const [currentComment, setCurrentComment] = React.useState(comment || '')\n const [\n currentUpdatedTimeHappensAt,\n setCurrentUpdatedTimeHappensAt,\n ] = React.useState(updatedTimeHappensAt)\n const [currentEvent, setCurrentEvent] = React.useState({\n status: status || 'awaiting',\n caregiverId,\n caregiverName,\n } as EventModel)\n\n const { isAllowedToUpdate: isAllowedToUpdateComment } = useCanAccess(\n 'care/shift/event.comment',\n )\n const { isAllowedToUpdate: isAllowedToUpdateRealTime } = useCanAccess(\n 'care/shift/event.updated-time',\n )\n const { isAllowedToUpdate: isAllowedToUpdateMeasurement } = useCanAccess(\n 'care/event/measurement',\n )\n\n const initialMeasurement = measurement?.measurementValue || ''\n const [measurementValue, setMeasurementValue] = React.useState<string>(\n initialMeasurement,\n )\n const [additionalDetails, setAdditionalDetails] = React.useState<BloodGlycemiaAdditionalDetailsType | undefined>(measurement?.additionalDetails as BloodGlycemiaAdditionalDetailsType)\n\n const [measurementValidation, setMeasurementValidation] = React.useState({\n isDangerousComplication: measurement?.isDangerousComplication ?? null,\n complicationLevel: measurement?.complicationLevel ?? 0,\n additionalDetails: measurement?.additionalDetails ?? 'preprandial',\n })\n\n const [visibleTimeModal, setVisibleTimeModal] = React.useState(false)\n const [visibleCommentModal, setVisibleCommentModal] = React.useState(false)\n\n const { useEvent } = useContext(CurrentShiftDataContext)\n const { updateScheduledMeasurement, setUpdatedTime } = useEvent()\n\n const {\n shiftInProgress,\n minShiftLimitDate,\n maxShiftLimitDate,\n executionInProgress,\n refreshShiftInProgress,\n } = useContext(ShiftInProgressContext)\n const { userInfo } = useContext(AuthContext)\n const userId = useMemo(() => userInfo?.id, [userInfo])\n\n const timeIcon = currentUpdatedTimeHappensAt\n ? SelectedTimeIcon\n : UnSelectedTimeIcon\n\n const delayedUpdateScheduledMeasurement = useDebouncedCallback(\n (\n newStatus: 'awaiting' | 'accomplished' | 'not_accomplished',\n newMeasurementValue: NewMeasurementValue,\n measuredAt?: string,\n ) => {\n const patientId = Number(shiftInProgress?.patientId)\n\n updateScheduledMeasurement(\n eventId,\n {\n ...currentEvent,\n status: newStatus,\n measurement: {\n ...measurement,\n ...newMeasurementValue,\n },\n },\n {\n status: newStatus,\n measurementValue:\n newMeasurementValue.measurementValue ??\n measurement?.measurementValue ??\n '',\n complicationLevel: newMeasurementValue.complicationLevel,\n isDangerousComplication: newMeasurementValue.isDangerousComplication,\n symptomOptions: newMeasurementValue.symptomOptions,\n patientId,\n measuredAt,\n shiftExecutionId: Number(executionInProgress?.id),\n additionalDetails: newMeasurementValue.additionalDetails,\n },\n ).catch((err) => {\n toastErrorRedirect(err, async () => {\n history.replace('/pessoas-sob-cuidado')\n await refreshShiftInProgress()\n })\n })\n },\n 500,\n )\n\n const measurementInputRef = React.useRef<HTMLInputElement | null>(null)\n\n const handleChangeStatus = (\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished',\n overrideStatus?: boolean,\n ) => {\n setMeasurementValue(newMeasurementValue.measurementValue)\n setAdditionalDetails(newMeasurementValue.additionalDetails)\n setCurrentCaregiverName(\n !!newMeasurementValue.measurementValue ? userInfo?.user?.name : undefined,\n )\n let newStatus = status\n\n if (newStatus === 'accomplished') {\n setCurrentStatus(newStatus)\n delayedUpdateScheduledMeasurement.callback(\n newStatus,\n newMeasurementValue,\n new Date().toISOString(),\n )\n return\n }\n\n if (newStatus === currentStatus && !overrideStatus) {\n newStatus = 'awaiting'\n }\n\n delayedUpdateScheduledMeasurement.callback(\n newStatus,\n newMeasurementValue,\n undefined,\n )\n setCurrentStatus(newStatus)\n setCurrentEvent({ status: newStatus, caregiverId: userId })\n return\n }\n\n const handleUpdatedTime = (\n eventId: number,\n values: UpdatedTimeModalFormValues,\n ) => {\n const date = values.updatedTimeHappens as Date\n if (date && !isDateAtInterval(date, minShiftLimitDate, maxShiftLimitDate)) {\n toast.error('O horário deve estar dentro do horário do plantão')\n return false\n }\n\n setUpdatedTime(eventId, {\n updatedTimeHappensAt: values.updatedTimeHappens?.toISOString() || null,\n shiftExecutionId: executionInProgress?.id,\n })\n setCurrentUpdatedTimeHappensAt(\n values.updatedTimeHappens?.toISOString() || undefined,\n )\n setCurrentCaregiverName(userInfo?.user?.name)\n setCurrentEvent({ ...currentEvent, caregiverId: userId })\n setVisibleTimeModal(false)\n }\n\n const handleChangeComment = (values: CommentModalFormValues) => {\n onChangeComment(eventId, values)\n setCurrentComment(values.comment)\n setCurrentCaregiverName(userInfo?.user?.name)\n setCurrentEvent({ ...currentEvent, caregiverId: userId })\n setVisibleCommentModal(false)\n }\n\n const handleAllowedPatchEvent = (callbackFn: () => void) => {\n if (userIsAllowedToPatchEvent(currentEvent, userId)) {\n return callbackFn()\n } else {\n toast.dismiss('patch-warning-toast')\n toast.warning('Apenas quem registrou esse evento pode editá-lo.', {\n toastId: 'patch-warning-toast',\n })\n return\n }\n }\n\n return (\n <Container\n styledHighlight={\n !!measurementValidation.isDangerousComplication\n ? 'red'\n : Math.abs(measurementValidation.complicationLevel) === 1\n ? 'orange'\n : undefined\n }\n >\n {currentUpdatedTimeHappensAt && (\n <RealTimeContainer data-testid={`realTimeContainer-${eventId}`}>\n <Typography variant='caption'>{`Atualizado para ${format(\n new Date(currentUpdatedTimeHappensAt),\n 'HH:mm',\n )}`}</Typography>\n </RealTimeContainer>\n )}\n <StyledBoldTitle\n variant='subtitle1'\n styledHighlight={\n !!measurementValidation.isDangerousComplication ? 'red' : undefined\n }\n data-testid={'measurement-title'}\n >\n {subCategory?.name?.trim()}\n </StyledBoldTitle>\n <Instructions variant='caption'>{description}</Instructions>\n {!legacy && subCategory && subCategoryHasCustomInput(subCategory) ? (\n <VitalSignsMeasurementInput\n id={`measurement-input-${eventId}`}\n subCategory={subCategory}\n ref={measurementInputRef}\n value={measurementValue}\n disabled={readonly || !isAllowedToUpdateMeasurement}\n measurement={measurement}\n patchEvent={(\n newMeasurementValue: NewMeasurementValue,\n status: 'awaiting' | 'accomplished' | 'not_accomplished',\n ) => {\n !!newMeasurementValue.measurementValue\n ? setMeasurementValidation({\n complicationLevel: newMeasurementValue.complicationLevel ?? 0,\n isDangerousComplication:\n newMeasurementValue.isDangerousComplication,\n additionalDetails: newMeasurementValue.additionalDetails || 'preprandial',\n })\n : setMeasurementValidation({\n complicationLevel: 0,\n isDangerousComplication: false,\n additionalDetails: 'preprandial',\n })\n handleAllowedPatchEvent(() =>\n handleChangeStatus(newMeasurementValue, status, true),\n )\n }}\n />\n ) : (\n <MeasurementInput\n id={`measurement-input-${eventId}`}\n placeholder='digite o valor aqui'\n ref={measurementInputRef}\n value={measurementValue}\n disabled={readonly || !isAllowedToUpdateMeasurement}\n onChange={(event) => {\n const { value } = event.target\n const newStatus = value ? 'accomplished' : 'awaiting'\n handleAllowedPatchEvent(() =>\n handleChangeStatus(\n {\n measurementValue: value,\n complicationLevel: null,\n isDangerousComplication: null,\n },\n newStatus,\n ),\n )\n }}\n />\n )}\n {currentComment && (\n <NoteTypography variant='caption'>\n <BoldText>Obs:</BoldText> {currentComment}\n </NoteTypography>\n )}\n {currentCaregiverName && (\n <CaregiverTypography>{currentCaregiverName}</CaregiverTypography>\n )}\n <ActionsContainer>\n {!readonly && isAllowedToUpdateComment && (\n <StyledCommentButton\n data-testid={`measurementScheduleCommentButton-${eventId}`}\n onClick={() =>\n handleAllowedPatchEvent(() => setVisibleCommentModal(true))\n }\n >\n <Message />\n </StyledCommentButton>\n )}\n\n {!readonly && isAllowedToUpdateRealTime && (\n <SelectedAccessTimeButton\n isChecked={currentStatus === 'not_accomplished'}\n data-testid={`measurementScheduleTimerButton-${eventId}`}\n disabled={readonly}\n onClick={() => {\n if (currentStatus === 'accomplished') {\n handleAllowedPatchEvent(() => setVisibleTimeModal(true))\n } else {\n measurementInputRef?.current?.focus()\n toast.error(\n 'Digite o valor da medição antes de clicar no botão de horário.',\n { position: 'top-right' },\n )\n }\n }}\n >\n <img src={timeIcon} />\n </SelectedAccessTimeButton>\n )}\n\n {(!readonly || currentStatus === 'not_accomplished') &&\n isAllowedToUpdateMeasurement && (\n <CloseIconContainer\n isChecked={currentStatus === 'not_accomplished'}\n data-testid={`notDoneIcon-${eventId}`}\n disabled={readonly || !isAllowedToUpdateMeasurement}\n onClick={() => {\n if (currentUpdatedTimeHappensAt && eventId) {\n handleAllowedPatchEvent(() =>\n handleUpdatedTime(eventId, { updatedTimeHappens: null }),\n )\n }\n handleAllowedPatchEvent(() =>\n handleChangeStatus(\n {\n measurementValue: '',\n complicationLevel: null,\n isDangerousComplication: null,\n },\n 'not_accomplished',\n ),\n )\n }}\n >\n <StyledCloseIcon />\n </CloseIconContainer>\n )}\n\n {(!readonly || currentStatus === 'accomplished') &&\n isAllowedToUpdateMeasurement && (\n <CheckIconContainer\n isChecked={currentStatus === 'accomplished'}\n data-testid={`doneIcon-${eventId}`}\n onClick={() => {\n if (currentStatus !== 'accomplished') {\n measurementInputRef?.current?.focus()\n toast.error('Digite o valor da medição no campo destacado.', {\n position: 'top-right',\n })\n }\n }}\n >\n <StyledCheckIcon />\n </CheckIconContainer>\n )}\n </ActionsContainer>\n {visibleCommentModal && eventId && (\n <CommentModal\n handleEventComment={handleChangeComment}\n readonly={readonly}\n onClose={() => setVisibleCommentModal(false)}\n opened={visibleCommentModal}\n eventId={eventId}\n allowRemoveButton={!!currentComment}\n initialValues={\n currentComment ? { comment: currentComment } : undefined\n }\n />\n )}\n {visibleTimeModal && (\n <UpdateTimeModal\n eventId={eventId}\n handleUpdatedTime={(values: UpdatedTimeModalFormValues) =>\n handleUpdatedTime(eventId, values)\n }\n onClose={() => setVisibleTimeModal(false)}\n opened={visibleTimeModal}\n allowRemoveButton={!!currentUpdatedTimeHappensAt}\n minDate={minShiftLimitDate?.toISOString()}\n maxDate={maxShiftLimitDate?.toISOString()}\n initialFormValues={\n currentUpdatedTimeHappensAt\n ? {\n updatedTimeHappens: new Date(currentUpdatedTimeHappensAt),\n }\n : undefined\n }\n />\n )}\n </Container>\n )\n}\n\nexport default Measurement\n","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n display: flex;\n min-height: 120px;\n padding: 0;\n color: ${({ theme }) => theme.palette.extra.color.grey.main};\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n`;\n\nexport const LeftContainer = styled.div`\n background-color: ${({ theme }) => theme.palette.extra.color.yellow};\n display: flex;\n padding: ${({ theme }) => theme.spacing(2, 0, 0, 0)};\n flex-direction: column;\n\n img {\n width: 75px;\n height: 75px;\n }\n border-radius: 4px;\n`;\n\nexport const RightContainer = styled.div`\n display: flex;\n flex-direction: column;\n\n flex: 1;\n padding: ${({ theme }) => theme.spacing(1, 1, 0, 1)};\n`;\n","import { EventModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport MesurementIcon from '../../../../assets/Icon-measurement.svg';\nimport { FormValues as CommentModalFormValues } from '../CommentModal';\nimport { TimerContainer } from '../styles';\nimport Measurement from './Measurement';\nimport { CardBox, LeftContainer, RightContainer } from './styles';\n\ninterface CardProps {\n scheduledMeasurements: EventModel[];\n readonly?: boolean;\n onChangeComment?: (id: number, values: CommentModalFormValues) => void;\n}\n\nconst ScheduledMeasurementCard: React.FC<CardProps> = ({\n scheduledMeasurements,\n readonly = false,\n onChangeComment,\n}) => {\n const {\n id: eventId,\n eventScheduleId,\n eventHappensAt,\n } = scheduledMeasurements[0];\n\n const hour = format(new Date(`${eventHappensAt}`), 'HH:mm');\n\n return (\n <CardBox data-testid={`measurementCard-${eventScheduleId}`}>\n <LeftContainer>\n <img\n src={MesurementIcon}\n title={`measurement-image-${eventScheduleId}`}\n />\n <TimerContainer>\n <Typography variant=\"h6\">{hour}</Typography>\n </TimerContainer>\n </LeftContainer>\n <RightContainer>\n {scheduledMeasurements?.map((event) => {\n return (\n <div key={eventId}>\n <Measurement\n caregiverName={event?.caregiver?.user?.name}\n {...event}\n legacy={event.measurement?.legacy}\n id={event.id!}\n readonly={readonly}\n onChangeComment={onChangeComment!}\n />\n </div>\n );\n })}\n </RightContainer>\n </CardBox>\n );\n};\n\nexport default ScheduledMeasurementCard;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\n\nexport const CardDiv = styled.div`\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const TypographyContainer = styled.div`\n width: 100%;\n text-align: center;\n color: black;\n margin-top: ${({ theme }) => theme.spacing(6)}px;\n`;\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\nimport { Typography } from '@material-ui/core';\nimport React, { useContext, useMemo } from 'react';\nimport { AuthContext } from '../../contexts/auth';\nimport { isSelfCare } from '../../contexts/permission';\nimport AppointmentCard from './CurrentShiftCards/AppointmentCard';\nimport ComplicationCard from './CurrentShiftCards/ComplicationCard';\nimport MeasurementCard from './CurrentShiftCards/MeasurementCard';\nimport MedicationCard from './CurrentShiftCards/MedicationCard';\nimport RoutineCard from './CurrentShiftCards/RoutineCard';\nimport ScheduledMeasurementCard from './CurrentShiftCards/ScheduledMeasurementCard';\nimport { formatEvents } from './CurrentShiftCards/ScheduledMeasurementCard/utils';\nimport { CardDiv, Container, TypographyContainer } from './styles';\n\n// todo: export from @cuidador/database\nexport const categoryIdMapper = {\n GENERAL: 1,\n MEDICATION: 2,\n COMPLICATION: 3,\n MEASUREMENT: 4,\n};\n\nexport type CurrentShiftEventListProps = {\n events: EventModel[];\n onChangeStatus: (id: number, newStatus: EventModel['status']) => void;\n onChangeComment: (id: number, newComment: string) => void;\n onChangeTime: (id: number, updatedTimeHappensAt: string | null) => void;\n};\n\nexport type FormattedEvents = EventModel & {\n scheduledMeasurements?: EventModel[];\n};\n\nconst CurrentShiftEventList: React.FC<CurrentShiftEventListProps> = ({\n events,\n onChangeStatus,\n onChangeComment,\n onChangeTime,\n}) => {\n const { userInfo } = useContext(AuthContext);\n const renderActivityCardByEvent = (event: FormattedEvents) => {\n const subCategory = event.subCategory as EventSubCategoryModel;\n switch (subCategory?.categoryId) {\n case categoryIdMapper['MEDICATION']:\n return (\n <CardDiv key={event.id}>\n <MedicationCard //[TODO] Add status and eventNotifiedAt\n {...event}\n name={subCategory.name}\n dosageFormat={event.medication?.dosageFormat}\n dosageQuantity={event.medication?.dosageQuantity}\n administeredBy={event.medication?.administeredBy}\n medicalNotes={event.medication?.medicalNotes}\n caregiverName={event.caregiver?.user?.name}\n onChangeStatus={onChangeStatus}\n onChangeComment={onChangeComment}\n onChangeTime={onChangeTime}\n />\n </CardDiv>\n );\n case categoryIdMapper['COMPLICATION']:\n return (\n <CardDiv key={event.id}>\n <ComplicationCard\n {...event}\n caregiverName={event.caregiver?.user?.name}\n onChangeComment={onChangeComment}\n />\n </CardDiv>\n );\n case categoryIdMapper['GENERAL']:\n if (subCategory.isRoutine) {\n return (\n <CardDiv key={event.id}>\n <RoutineCard\n {...event}\n caregiverName={event.caregiver?.user?.name}\n onChangeStatus={onChangeStatus}\n onChangeComment={onChangeComment}\n onChangeTime={onChangeTime}\n />\n </CardDiv>\n );\n } else\n return (\n <CardDiv key={event.id}>\n <AppointmentCard\n {...event}\n caregiverName={event.caregiver?.user?.name}\n onChangeStatus={onChangeStatus}\n onChangeComment={onChangeComment}\n onChangeTime={onChangeTime}\n />\n </CardDiv>\n );\n case categoryIdMapper['MEASUREMENT']:\n if (event.scheduledMeasurements) {\n const key = event.scheduledMeasurements[0]?.eventScheduleId;\n return (\n <CardDiv key={key}>\n <ScheduledMeasurementCard\n scheduledMeasurements={event.scheduledMeasurements}\n onChangeComment={(id, { comment }) =>\n onChangeComment(id, comment)\n }\n />\n </CardDiv>\n );\n } else {\n return (\n <CardDiv key={event.id}>\n <MeasurementCard\n {...event}\n caregiverName={event.caregiver?.user?.name}\n onChangeComment={onChangeComment}\n />\n </CardDiv>\n );\n }\n default:\n return <></>;\n }\n };\n\n const formattedEvents = useMemo(() => formatEvents(events), [events]);\n\n const emptyMessage = `Não existe nenhum evento cadastrado para o ${\n isSelfCare(userInfo?.user) ? 'dia' : 'plantão'\n } de hoje.`;\n\n return (\n <Container>\n {events.length > 0 ? (\n <>\n {formattedEvents.map((event: FormattedEvents) =>\n renderActivityCardByEvent(event)\n )}\n </>\n ) : (\n <TypographyContainer>\n <Typography variant=\"subtitle1\">{emptyMessage}</Typography>\n </TypographyContainer>\n )}\n </Container>\n );\n};\n\nexport default CurrentShiftEventList;\n","import { Button } from '@material-ui/core';\nimport styled from 'styled-components';\nimport { CollapsibleCardContentProps } from '.';\n\ntype BackgroundVariant = Pick<CollapsibleCardContentProps, 'backgroundVariant'>;\n\ntype Content = BackgroundVariant & {\n maxLines?: number;\n};\n\nexport const CardActionAreaCentered = styled(Button)<BackgroundVariant>`\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n width: 100%;\n color: ${({ theme, backgroundVariant }) =>\n backgroundVariant === 'primary'\n ? theme.palette.background.paper\n : theme.palette.grey[400]};\n background-color: ${({ theme, backgroundVariant }) =>\n backgroundVariant === 'primary'\n ? theme.palette.secondary.dark\n : 'transparent'};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n height: ${({ theme }) => theme.spacing(2)}px;\n font-size: 12px;\n`;\n\nexport const CollapseCentered = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const Divider = styled.div<BackgroundVariant>`\n border-top: 1px solid\n ${({ theme, backgroundVariant }) =>\n backgroundVariant === 'primary'\n ? theme.palette.background.paper\n : theme.palette.grey[400]};\n width: 90%;\n height: 0;\n margin: ${({ theme }) => theme.spacing(2)}px 0\n ${({ theme }) => theme.spacing(1)}px 5%;\n`;\n\nexport const CardContentColorVariant = styled.div<Content>`\n color: ${({ theme, backgroundVariant }) =>\n backgroundVariant === 'primary'\n ? theme.palette.background.paper\n : theme.palette.text.primary};\n word-wrap: break-word;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n ${({ maxLines }) => (!maxLines ? '' : `-webkit-line-clamp: ${maxLines};`)}\n`;\n","import React, { useCallback, useLayoutEffect, useState } from 'react';\nimport ArrowDropDownOutlinedIcon from '@material-ui/icons/ArrowDropDownOutlined';\nimport ArrowDropUpOutlinedIcon from '@material-ui/icons/ArrowDropUpOutlined';\nimport {\n CardActionAreaCentered,\n CollapseCentered,\n Divider,\n CardContentColorVariant,\n} from './styles';\nimport { useOverflowDetector } from '../../hooks/useOverflowDetector';\n\nexport interface CollapsibleCardContentProps {\n text: string;\n maxLines?: number;\n backgroundVariant?: 'clear' | 'primary';\n}\n\nexport const CollapsibleCardContent: React.FC<CollapsibleCardContentProps> = ({\n text,\n backgroundVariant,\n maxLines,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const [hasPressedSeeMore, setHasPressedSeeMore] = useState(false);\n\n const toggleCollapse = useCallback(() => {\n setIsExpanded((expanded) => !expanded);\n setHasPressedSeeMore((hasPressedSeeMore) => !hasPressedSeeMore);\n }, [setIsExpanded, setHasPressedSeeMore]);\n\n const resetStateOnResize = useCallback(() => {\n setIsExpanded(false);\n setHasPressedSeeMore(false);\n }, [setIsExpanded, setHasPressedSeeMore]);\n\n useLayoutEffect(() => {\n window.addEventListener('resize', resetStateOnResize);\n return () => window.removeEventListener('resize', resetStateOnResize);\n }, []);\n\n const { overflow, ref } = useOverflowDetector<HTMLDivElement>();\n\n return (\n <>\n <CardContentColorVariant\n backgroundVariant={backgroundVariant}\n data-testid=\"collapsible-card-content\"\n ref={ref}\n maxLines={isExpanded ? undefined : maxLines}\n >\n {text}\n </CardContentColorVariant>\n {!overflow && !hasPressedSeeMore && <br />}\n {(!!overflow || !!hasPressedSeeMore) && (\n <CollapseCentered>\n <Divider backgroundVariant={backgroundVariant} />\n <CardActionAreaCentered\n backgroundVariant={backgroundVariant}\n onClick={toggleCollapse}\n data-testid=\"collapsible-card-see-more-button\"\n >\n {!isExpanded && (\n <>\n Ver Mais <ArrowDropDownOutlinedIcon />\n </>\n )}\n {!!isExpanded && (\n <>\n Ver Menos <ArrowDropUpOutlinedIcon />\n </>\n )}\n </CardActionAreaCentered>\n </CollapseCentered>\n )}\n </>\n );\n};\n\nexport default CollapsibleCardContent;\n","import { useCallback, useState, useRef, useEffect } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nexport function useOverflowDetector<T extends HTMLElement>(\n onChange?: (overflow: boolean) => void\n) {\n const [overflow, setOverflow] = useState<boolean>(false);\n const ref = useRef<T>(null);\n\n const updateState = useCallback(() => {\n if (ref.current == undefined) {\n return;\n }\n\n const newState =\n ref.current.offsetWidth < ref.current.scrollWidth ||\n ref.current.offsetHeight < ref.current.scrollHeight;\n\n if (newState === overflow) {\n return;\n }\n\n setOverflow(newState);\n\n if (onChange) {\n onChange(newState);\n }\n }, [ref.current, onChange, setOverflow, overflow]);\n\n useResizeDetector({\n targetRef: ref as React.MutableRefObject<HTMLElement>,\n onResize: updateState,\n });\n\n useEffect(() => {\n updateState();\n });\n\n return { overflow, ref };\n}\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const CardWithBackground = styled.div`\n background-color: ${({ theme }) => theme.palette.secondary.dark};\n display: flex;\n flex-direction: column;\n border-radius: ${({ theme }) => theme.spacing(2)}px;\n padding: ${({ theme }) => theme.spacing(1)}px\n ${({ theme }) => theme.spacing(2)}px 0;\n margin: ${({ theme }) => theme.spacing(0)}px\n ${({ theme }) => theme.spacing(1)}px;\n box-shadow: 0px 3px 6px #00000042;\n`;\n\nexport const TypographyWhiteText = styled(Typography)`\n color: ${({ theme }) => theme.palette.background.paper};\n word-wrap: break-word;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2; /* number of lines to show */\n -webkit-box-orient: vertical;\n`;\n","import { ExecutionMessage } from '@cuidador/database';\nimport React from 'react';\nimport { CollapsibleCardContent } from '../CollapsibleCardContent';\nimport { CardWithBackground, TypographyWhiteText } from './styles';\n\ninterface ExecutionMessageCardProps {\n executionMessage: ExecutionMessage;\n 'data-testid'?: string;\n}\n\nexport const ExecutionMessageCard: React.FC<ExecutionMessageCardProps> = ({\n executionMessage,\n ...props\n}) => (\n <CardWithBackground {...props}>\n <TypographyWhiteText\n variant=\"body1\"\n data-testid={`execution-message-card-title`}\n >\n por{' '}\n <b data-testid={`execution-message-card-title-bold`}>\n {executionMessage.caregiver?.user?.name ?? ''}\n </b>\n </TypographyWhiteText>\n <br />\n <CollapsibleCardContent\n text={executionMessage.message ?? ''}\n maxLines={3}\n backgroundVariant=\"primary\"\n />\n </CardWithBackground>\n);\n\nexport default ExecutionMessageCard;\n","import React from 'react';\nimport { DialogActions, DialogContent, DialogTitle } from '@material-ui/core';\n\nimport StyledButton from './StyledButton';\nimport StyledDialog from './StyledDialog';\n\nexport type DialogProps = {\n open: boolean;\n handleNo: () => void;\n handleYes: () => void;\n title: string;\n subTitle?: string;\n};\n\nconst StyledSimpleDialog: React.FC<DialogProps> = ({\n open,\n handleNo,\n handleYes,\n title,\n subTitle,\n}) => {\n return (\n <StyledDialog open={open}>\n <DialogContent>\n <DialogTitle>{title}</DialogTitle>\n <label>{subTitle}</label>\n <DialogActions>\n <StyledButton color=\"inherit\" onClick={handleNo}>\n Não\n </StyledButton>\n <StyledButton color=\"inherit\" onClick={handleYes}>\n Sim\n </StyledButton>\n </DialogActions>\n </DialogContent>\n </StyledDialog>\n );\n};\n\nexport default StyledSimpleDialog;\n","import React, { useContext } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { AuthContext } from '../contexts/auth';\nimport { CurrentShiftDataContext } from '../contexts/CurrentShiftData';\nimport { isSelfCare } from '../contexts/permission';\nimport useCanAccess from '../hooks/useCanAccess';\nimport StyledSimpleDialog from './StyledSimpleDialog';\n\nconst FinishShiftConfirmDialog: React.FC<{\n opened: boolean;\n close: () => void;\n}> = ({ opened, close }) => {\n const history = useHistory();\n const { userInfo } = useContext(AuthContext);\n const { useShiftQuestions } = useContext(CurrentShiftDataContext);\n const { total: totalOfQuestions } = useShiftQuestions();\n const { isAllowedToCreate: isAllowedToCreateCareQuestions } = useCanAccess(\n 'care/shift/care-question'\n );\n\n const handleFinishShift = () => {\n if (isAllowedToCreateCareQuestions && totalOfQuestions > 0) {\n history.push('/perguntas', { isFinishingShift: true });\n } else {\n // if there are no questions, go to shift finish page\n history.push('/plantao/finalizar');\n }\n };\n\n const isUserSelfCare = isSelfCare(userInfo?.user);\n\n const title = `Finalizar ${isUserSelfCare ? 'dia' : 'plantão'}`;\n const subtitle = `Tem certeza que deseja finalizar o ${\n isUserSelfCare ? 'dia' : 'plantão'\n }?`;\n\n return (\n <StyledSimpleDialog\n open={opened}\n handleNo={() => close()}\n handleYes={() => handleFinishShift()}\n title={title}\n subTitle={subtitle}\n />\n );\n};\n\nexport default FinishShiftConfirmDialog;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null, \".a{fill:none;}.b{clip-path:url(#a);}.c{fill:#fff;}\"), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"a\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n className: \"a\",\n width: 578.875,\n height: 53.053\n})));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n className: \"b\",\n transform: \"translate(0 0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M27.683,16.1l.059-2.43a8.618,8.618,0,0,0-2.7-6.817,10.125,10.125,0,0,0-7.261-2.667A10.771,10.771,0,0,0,8.625,8.717Q5.275,13.251,5.276,21.2q0,8.24,3.675,12.982a10.947,10.947,0,0,0,9.188,4.208,11.656,11.656,0,0,0,5.72-1.452,8.9,8.9,0,0,0,3.883-4.12,12.533,12.533,0,0,0,.83-4.86q.058-2.726,2.253-2.728,2.43,0,2.43,2.786a13.343,13.343,0,0,1-4.416,10.315,16.1,16.1,0,0,1-11.292,4.031A15.888,15.888,0,0,1,4.772,36.725Q0,31.1,0,21.669q0-9.661,4.89-15.56A15.927,15.927,0,0,1,17.783.21q6.342,0,9.9,4.032.118.178.83,1.007-.06-.71-.089-1.155c-.02-.3-.03-.484-.03-.563q-.119-.948-.119-1.246a1.7,1.7,0,0,1,1.9-1.955q2.015,0,2.015,2.43,0,.829-.237,2.9a38.133,38.133,0,0,0-.3,4.03q0,1.661.356,5.573a2.85,2.85,0,0,1,.059.652q0,2.609-2.193,2.608-2.253,0-2.193-2.43\",\n transform: \"translate(0 -0.033)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M68.485,41.606V39.769A11.056,11.056,0,0,1,59.179,44.1q-6.935,0-9.721-4.327a7,7,0,0,1-1.215-2.994,64.112,64.112,0,0,1-.207-6.669v-4.92a34.582,34.582,0,0,0-.474-6.935q-.3-1.185-1.186-1.186a6.827,6.827,0,0,0-1.186.148A6.68,6.68,0,0,1,44,17.362q-2.076,0-2.075-1.956,0-1.9,2.549-1.9.118,0,1.541.119t1.956.119a15.853,15.853,0,0,0,1.838-.178,8.462,8.462,0,0,1,1.126-.059q1.778,0,1.778,2.253,0,.06-.119,3.438t-.119,5.987V29.04q0,6.344,1.3,8.358,1.778,2.787,6.106,2.786a8.62,8.62,0,0,0,4.416-1.156,6.217,6.217,0,0,0,2.756-3.053q.889-2.134.889-8.714V20.148q-.3-2.9-1.482-2.9a7.9,7.9,0,0,0-.948.089,7.926,7.926,0,0,1-.948.089q-2.016,0-2.015-1.9,0-2.134,2.312-2.015l1.482.059q.356,0,1.008.059t.889.059q.474,0,1.393-.089t1.393-.089q1.778,0,1.778,1.9c0,.04-.04.5-.119,1.363q-.3,3.2-.3,6.58v9.129q0,3.557.059,4.031.3,3.143,1.66,3.142A7.734,7.734,0,0,0,75.3,39.5a7.848,7.848,0,0,1,1.245-.148A1.729,1.729,0,0,1,78.5,41.31q0,2.016-2.49,2.015a9.414,9.414,0,0,1-1.541-.119,15.065,15.065,0,0,0-1.838-.237,6.545,6.545,0,0,0-1.245.178,6.561,6.561,0,0,1-1.245.178q-1.66,0-1.66-1.719\",\n transform: \"translate(-6.423 -2.069)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M92.9,28.991v-9.84q-.3-3.912-1.719-3.912a14.686,14.686,0,0,0-1.541.237,4.112,4.112,0,0,1-1.186.178q-2.076,0-2.075-1.9,0-2.015,2.608-2.015.474,0,1.6.118,1.659.178,2.49.178a10.656,10.656,0,0,0,1.452-.147,10.68,10.68,0,0,1,1.452-.148q1.659,0,1.66,2.193,0,.889-.059,1.541-.238,2.609-.237,8.654v4.861a60.3,60.3,0,0,0,.267,7.5Q97.878,38,98.945,38q.118,0,1.541-.3a5.059,5.059,0,0,1,.948-.119q2.192,0,2.193,1.957a1.752,1.752,0,0,1-.771,1.423,2.846,2.846,0,0,1-1.778.593,23.821,23.821,0,0,1-2.9-.268,23.85,23.85,0,0,0-2.964-.266,24.521,24.521,0,0,0-3.32.236,25.588,25.588,0,0,1-3.26.3q-2.253,0-2.253-2.015a1.756,1.756,0,0,1,2.015-1.957,9.109,9.109,0,0,1,1.452.178,8.9,8.9,0,0,0,1.452.178q1.3,0,1.6-3.912ZM94.143,1.96a3.345,3.345,0,0,1,2.4,1.008A3.143,3.143,0,0,1,97.581,5.28,3.2,3.2,0,0,1,96.6,7.622a3.132,3.132,0,0,1-2.282.978A3.188,3.188,0,0,1,91.98,7.532,3.391,3.391,0,0,1,90.942,5.1a3.011,3.011,0,0,1,.948-2.194,3.081,3.081,0,0,1,2.253-.948\",\n transform: \"translate(-13.231 -0.301)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M130.549,15.068V9.08a20.371,20.371,0,0,0-.119-2.9q-.3-1.9-1.6-1.9-.059,0-1.718.3a4.089,4.089,0,0,1-1.009.119q-2.192,0-2.192-1.9,0-1.956,2.964-1.955.591,0,1.837.118t1.838.119q.889,0,1.482-.058Q133.276.9,133.632.9q1.659,0,1.66,2.43,0,1.661-.237,8.358-.119,3.322-.119,4.446V22q0,11.8.178,13.4.238,2.255,1.66,2.253c.158,0,.572-.038,1.245-.118s1.126-.119,1.363-.119q2.076,0,2.076,1.957,0,2.016-2.668,2.015a11.081,11.081,0,0,1-1.719-.178,11.326,11.326,0,0,0-1.838-.178,6.993,6.993,0,0,0-1.334.178,7.153,7.153,0,0,1-1.333.178q-1.721,0-1.6-2.193l.059-1.246q-3.143,4.21-9.129,4.21A12.074,12.074,0,0,1,112.2,37.77q-3.705-4.386-3.7-11.5t3.646-11.441a11.977,11.977,0,0,1,9.633-4.327,9.7,9.7,0,0,1,8.773,4.565m-8.357-.653a7.673,7.673,0,0,0-6.55,3.171q-2.342,3.172-2.341,8.743,0,5.454,2.46,8.684a7.877,7.877,0,0,0,6.609,3.231q5.1,0,7.053-3.972,1.067-2.191,1.067-7.943,0-6.224-1.482-8.417a7.736,7.736,0,0,0-6.816-3.5\",\n transform: \"translate(-16.62 -0.129)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M182.765,34.609l-.059,3.379q-.119,5.689-6.046,5.691-4.861,0-6.046-4.209-2.965,4.446-9.425,4.446a11.715,11.715,0,0,1-7.647-2.372,7.764,7.764,0,0,1-2.9-6.342,7.769,7.769,0,0,1,4.209-7.232,21.373,21.373,0,0,1,7.41-1.838q4.8-.535,6.106-1.246a3.76,3.76,0,0,0,1.838-3.615A4.549,4.549,0,0,0,167.946,17a8,8,0,0,0-4.09-1.067,9.178,9.178,0,0,0-4,.919q-1.927.92-1.927,1.867c0,.119.2.317.593.592a2.241,2.241,0,0,1,.83,1.957,2.472,2.472,0,0,1-.889,1.955,3.226,3.226,0,0,1-2.193.771,3.448,3.448,0,0,1-2.579-1.066,3.6,3.6,0,0,1-1.037-2.608,6.823,6.823,0,0,1,3.29-5.662,13.392,13.392,0,0,1,7.973-2.341q5.571,0,8.536,3.082,2.312,2.372,2.312,7.232V34.609q0,3.794.563,4.624a1.74,1.74,0,0,0,1.512.829q2.134,0,2.134-3.793v-2.9a1.677,1.677,0,0,1,1.9-1.9q1.9,0,1.9,2.844ZM170.08,31.882l.059-4.21q-1.956,1.956-8,2.549-6.7.654-6.7,4.861a4.373,4.373,0,0,0,1.63,3.617,6.876,6.876,0,0,0,4.416,1.3,8.719,8.719,0,0,0,6.254-2.164,8,8,0,0,0,2.341-5.957\",\n transform: \"translate(-23.075 -1.888)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M214.057,15.068V9.08a20.523,20.523,0,0,0-.118-2.9q-.3-1.9-1.6-1.9-.06,0-1.719.3a4.077,4.077,0,0,1-1.008.119q-2.194,0-2.193-1.9,0-1.956,2.964-1.955.592,0,1.838.118t1.837.119q.889,0,1.482-.058Q216.784.9,217.14.9q1.659,0,1.66,2.43,0,1.661-.237,8.358-.119,3.322-.119,4.446V22q0,11.8.178,13.4.236,2.255,1.66,2.253c.158,0,.572-.038,1.245-.118s1.126-.119,1.363-.119q2.074,0,2.075,1.957,0,2.016-2.667,2.015a11.07,11.07,0,0,1-1.719-.178,11.326,11.326,0,0,0-1.838-.178,6.993,6.993,0,0,0-1.334.178,7.151,7.151,0,0,1-1.334.178q-1.72,0-1.6-2.193l.059-1.246q-3.143,4.21-9.129,4.21a12.074,12.074,0,0,1-9.692-4.387q-3.705-4.386-3.7-11.5t3.646-11.441a11.974,11.974,0,0,1,9.633-4.327,9.7,9.7,0,0,1,8.773,4.565m-8.358-.653a7.675,7.675,0,0,0-6.55,3.171q-2.342,3.172-2.342,8.743,0,5.454,2.46,8.684a7.879,7.879,0,0,0,6.609,3.231q5.1,0,7.054-3.972Q214,32.081,214,26.329q0-6.224-1.482-8.417a7.738,7.738,0,0,0-6.817-3.5\",\n transform: \"translate(-29.412 -0.129)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M246.967,12.25q7.231,0,10.907,5.216A17.861,17.861,0,0,1,260.9,27.959q0,7.231-3.883,11.588A13.176,13.176,0,0,1,246.671,43.9a12.317,12.317,0,0,1-9.9-4.328Q233.1,35.25,233.1,27.9q0-7.052,3.794-11.352a12.78,12.78,0,0,1,10.077-4.3m.059,3.912a7.815,7.815,0,0,0-7.054,3.734,14.962,14.962,0,0,0-2.075,8.18q0,5.573,2.341,8.744a7.557,7.557,0,0,0,6.432,3.171,8.3,8.3,0,0,0,6.965-3.171q2.459-3.172,2.46-8.862a15.552,15.552,0,0,0-2.1-8.506q-2.1-3.291-6.965-3.291\",\n transform: \"translate(-35.706 -1.877)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M279.169,14.988v1.6a10.017,10.017,0,0,1,8.3-4.268,9.612,9.612,0,0,1,6.669,2.312,7.734,7.734,0,0,1,2.578,6.046,6.455,6.455,0,0,1-1.3,4.208,4.156,4.156,0,0,1-3.379,1.6,3.462,3.462,0,0,1-2.312-.8,2.5,2.5,0,0,1-.948-1.986,2.392,2.392,0,0,1,.682-1.719,2.178,2.178,0,0,1,1.63-.711c.039,0,.3.04.771.119a3.2,3.2,0,0,0,.415-1.3,3.5,3.5,0,0,0-1.541-2.845,5.947,5.947,0,0,0-3.734-1.186,6.192,6.192,0,0,0-5.809,3.259q-1.364,2.431-1.363,8.536v3.913q0,3.912.059,4.446.3,3.379,1.838,3.379a5.815,5.815,0,0,0,1.6-.237,4.373,4.373,0,0,1,1.126-.178,1.7,1.7,0,0,1,1.956,1.9,1.913,1.913,0,0,1-.682,1.452,2.336,2.336,0,0,1-1.63.622q-.356,0-2.964-.356a23.884,23.884,0,0,0-2.845-.119,32.483,32.483,0,0,0-3.735.178,32.844,32.844,0,0,1-3.438.3,2.4,2.4,0,0,1-1.63-.593,1.881,1.881,0,0,1-.682-1.482,1.71,1.71,0,0,1,.652-1.334,2.365,2.365,0,0,1,1.6-.563,6.491,6.491,0,0,1,1.3.207,6.418,6.418,0,0,0,1.3.207q1.363,0,1.541-2.075.178-1.9.178-7.41V26.191a68.2,68.2,0,0,0-.3-6.994q-.238-2.313-1.66-2.313a7.08,7.08,0,0,0-1.334.179,7.079,7.079,0,0,1-1.334.178,1.676,1.676,0,0,1-1.9-1.9q0-2.015,2.549-2.015.592,0,1.749.119t1.749.118q.474,0,1.541-.118t1.245-.119q1.481,0,1.482,1.66\",\n transform: \"translate(-41.174 -1.888)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M381.154,16.1l.058-2.43a8.617,8.617,0,0,0-2.7-6.817,10.125,10.125,0,0,0-7.261-2.667,10.773,10.773,0,0,0-9.159,4.535q-3.35,4.533-3.349,12.478,0,8.24,3.675,12.982a10.947,10.947,0,0,0,9.188,4.208,11.655,11.655,0,0,0,5.72-1.452,8.89,8.89,0,0,0,3.883-4.12,12.517,12.517,0,0,0,.83-4.86q.06-2.726,2.253-2.728,2.431,0,2.431,2.786a13.344,13.344,0,0,1-4.417,10.315,16.1,16.1,0,0,1-11.292,4.031,15.888,15.888,0,0,1-12.774-5.632q-4.771-5.63-4.771-15.056,0-9.661,4.89-15.56A15.93,15.93,0,0,1,371.254.21q6.342,0,9.9,4.032c.078.119.356.455.829,1.007-.039-.473-.069-.859-.088-1.155s-.03-.484-.03-.563a12.5,12.5,0,0,1-.119-1.246,1.7,1.7,0,0,1,1.9-1.955q2.014,0,2.015,2.43,0,.829-.237,2.9a38.165,38.165,0,0,0-.3,4.03q0,1.661.356,5.573a2.846,2.846,0,0,1,.06.652q0,2.609-2.193,2.608-2.255,0-2.193-2.43\",\n transform: \"translate(-54.145 -0.033)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M411.932,12.25q7.231,0,10.908,5.216a17.871,17.871,0,0,1,3.022,10.493q0,7.231-3.883,11.588A13.175,13.175,0,0,1,411.635,43.9a12.318,12.318,0,0,1-9.9-4.328Q398.06,35.25,398.061,27.9q0-7.052,3.793-11.352a12.782,12.782,0,0,1,10.078-4.3m.059,3.912a7.813,7.813,0,0,0-7.054,3.734,14.953,14.953,0,0,0-2.075,8.18q0,5.573,2.341,8.744a7.559,7.559,0,0,0,6.432,3.171,8.3,8.3,0,0,0,6.965-3.171q2.458-3.172,2.46-8.862a15.553,15.553,0,0,0-2.1-8.506q-2.1-3.291-6.965-3.291\",\n transform: \"translate(-60.975 -1.877)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M444.194,15.106v1.66a14.648,14.648,0,0,1,2.668-2.608,11.6,11.6,0,0,1,6.817-1.838,11.3,11.3,0,0,1,8.536,3.616q2.192,2.312,2.193,7.291V34.49q0,2.549.058,2.964.3,2.076,1.542,2.075a5.378,5.378,0,0,0,1.3-.178,12.684,12.684,0,0,1,1.3-.119,1.651,1.651,0,0,1,1.9,1.838,1.884,1.884,0,0,1-.682,1.482,2.487,2.487,0,0,1-1.69.593,31.07,31.07,0,0,1-3.171-.237,31.36,31.36,0,0,0-3.171-.237,25.49,25.49,0,0,0-2.845.237,25.308,25.308,0,0,1-2.845.237q-2.312,0-2.312-2.075,0-1.837,1.956-1.838a7.286,7.286,0,0,1,1.126.119l1.423.237q1.067,0,1.3-1.3a61.694,61.694,0,0,0,.356-8.6V25.183q0-4.386-1.068-6.165-1.777-2.963-5.986-2.964a7.347,7.347,0,0,0-6.7,3.379q-1.482,2.373-1.482,7.825v4.861q0,5.632.356,6.461.473,1.068,1.3,1.067a5.743,5.743,0,0,0,1.363-.237,5.784,5.784,0,0,1,1.364-.237q1.777,0,1.777,2.015,0,1.956-2.372,1.956a27.347,27.347,0,0,1-3.081-.356,20.048,20.048,0,0,0-2.906-.178,22.71,22.71,0,0,0-3.32.237,21.6,21.6,0,0,1-2.964.3q-2.49,0-2.49-2.015a1.677,1.677,0,0,1,1.9-1.9,6.252,6.252,0,0,1,1.1.178,7.231,7.231,0,0,0,1.571.178q1.6,0,1.838-2.667,0,.238.06-2.964t.059-4.327V24.887q0-3.437-.178-5.75t-1.778-2.312a10.714,10.714,0,0,0-1.482.178,2.517,2.517,0,0,1-.889.119q-2.194,0-2.193-1.956,0-1.9,2.608-1.9a2.843,2.843,0,0,1,.652.059l2.846.3a9.446,9.446,0,0,0,1.333-.148,9.594,9.594,0,0,1,1.392-.148q1.6,0,1.6,1.778\",\n transform: \"translate(-66.444 -1.888)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M485.178,10.788V9.662q0-4.624,2.49-7.143T494.781,0a10.314,10.314,0,0,1,5.928,1.541,4.69,4.69,0,0,1,2.253,4.031,2.949,2.949,0,0,1-.8,2.134,2.788,2.788,0,0,1-2.105.83,2.733,2.733,0,0,1-1.927-.741,2.37,2.37,0,0,1-.8-1.808,2.52,2.52,0,0,1,.532-1.541,4.084,4.084,0,0,0-2.9-.948,5.128,5.128,0,0,0-4.031,1.66,6.515,6.515,0,0,0-1.482,4.5v1.126a.681.681,0,0,0,.771.771H494.9q1.9,0,1.9,2.135,0,2.074-1.956,2.074h-4.327q-1.067,0-1.067,1.126v6.225q0,11.736.178,13.129t1.3,1.393c-.08,0,.435-.079,1.541-.236a5.189,5.189,0,0,1,1.245-.179,1.756,1.756,0,0,1,2.016,1.956q0,2.076-2.43,2.075a28.473,28.473,0,0,1-3.022-.237,28.914,28.914,0,0,0-3.083-.237,25.074,25.074,0,0,0-3.2.178q-2.313.3-3.024.3-2.55,0-2.548-2.075a1.835,1.835,0,0,1,.621-1.363,2.04,2.04,0,0,1,1.452-.593,5.508,5.508,0,0,1,1.422.207,5.155,5.155,0,0,0,1.3.207q.949,0,1.185-.533a11.314,11.314,0,0,0,.473-3.853q.119-2.548.12-10.433V16.894q0-1.125-1.067-1.126h-2.964a1.86,1.86,0,0,1-2.075-2.134,1.861,1.861,0,0,1,2.135-2.075h3.378a.681.681,0,0,0,.771-.771\",\n transform: \"translate(-73.285 0)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M509.091,28.991v-9.84q-.3-3.912-1.719-3.912a14.649,14.649,0,0,0-1.54.237,4.122,4.122,0,0,1-1.186.178q-2.076,0-2.075-1.9,0-2.015,2.608-2.015.472,0,1.6.118,1.659.178,2.489.178a10.67,10.67,0,0,0,1.453-.147,10.69,10.69,0,0,1,1.452-.148q1.659,0,1.66,2.193,0,.889-.059,1.541-.237,2.609-.237,8.654v4.861a60.244,60.244,0,0,0,.267,7.5Q514.071,38,515.137,38q.118,0,1.54-.3a5.076,5.076,0,0,1,.949-.119q2.192,0,2.193,1.957a1.752,1.752,0,0,1-.771,1.423,2.845,2.845,0,0,1-1.778.593,23.8,23.8,0,0,1-2.9-.268,23.85,23.85,0,0,0-2.964-.266,24.515,24.515,0,0,0-3.32.236,25.583,25.583,0,0,1-3.261.3q-2.252,0-2.251-2.015a1.756,1.756,0,0,1,2.015-1.957,9.108,9.108,0,0,1,1.452.178,8.9,8.9,0,0,0,1.452.178q1.3,0,1.6-3.912ZM510.335,1.96a3.344,3.344,0,0,1,2.4,1.008,3.144,3.144,0,0,1,1.037,2.313,3.2,3.2,0,0,1-.978,2.341,3.134,3.134,0,0,1-2.282.978,3.191,3.191,0,0,1-2.342-1.068,3.393,3.393,0,0,1-1.037-2.43,3.012,3.012,0,0,1,.948-2.194,3.083,3.083,0,0,1,2.253-.948\",\n transform: \"translate(-76.984 -0.301)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M558.008,34.609l-.06,3.379q-.119,5.689-6.046,5.691-4.861,0-6.047-4.209-2.964,4.446-9.425,4.446a11.715,11.715,0,0,1-7.647-2.372,7.766,7.766,0,0,1-2.9-6.342,7.767,7.767,0,0,1,4.209-7.232,21.365,21.365,0,0,1,7.409-1.838q4.8-.535,6.105-1.246a3.76,3.76,0,0,0,1.839-3.615A4.55,4.55,0,0,0,543.188,17a8,8,0,0,0-4.09-1.067,9.178,9.178,0,0,0-4,.919q-1.927.92-1.927,1.867c0,.119.2.317.593.592a2.241,2.241,0,0,1,.83,1.957,2.47,2.47,0,0,1-.89,1.955A3.223,3.223,0,0,1,531.51,24a3.449,3.449,0,0,1-2.578-1.066,3.6,3.6,0,0,1-1.037-2.608,6.824,6.824,0,0,1,3.29-5.662,13.393,13.393,0,0,1,7.973-2.341q5.57,0,8.536,3.082Q550,17.774,550,22.634V34.609q0,3.794.564,4.624a1.738,1.738,0,0,0,1.512.829q2.134,0,2.134-3.793v-2.9a1.676,1.676,0,0,1,1.9-1.9q1.9,0,1.9,2.844Zm-12.685-2.727.059-4.21q-1.957,1.956-8,2.549-6.7.654-6.7,4.861a4.375,4.375,0,0,0,1.63,3.617,6.876,6.876,0,0,0,4.416,1.3,8.714,8.714,0,0,0,6.253-2.164,8,8,0,0,0,2.342-5.957\",\n transform: \"translate(-80.555 -1.888)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M574.811,15.106v1.66a14.668,14.668,0,0,1,2.667-2.608A11.6,11.6,0,0,1,584.3,12.32a11.305,11.305,0,0,1,8.536,3.616q2.191,2.312,2.193,7.291V34.49q0,2.549.058,2.964.3,2.076,1.542,2.075a5.376,5.376,0,0,0,1.3-.178,12.7,12.7,0,0,1,1.3-.119,1.651,1.651,0,0,1,1.9,1.838,1.881,1.881,0,0,1-.682,1.482,2.484,2.484,0,0,1-1.688.593,31.085,31.085,0,0,1-3.172-.237,31.327,31.327,0,0,0-3.171-.237,25.471,25.471,0,0,0-2.845.237,25.327,25.327,0,0,1-2.846.237q-2.312,0-2.312-2.075,0-1.837,1.956-1.838a7.283,7.283,0,0,1,1.126.119l1.423.237q1.067,0,1.3-1.3a61.816,61.816,0,0,0,.356-8.6V25.183q0-4.386-1.068-6.165-1.777-2.963-5.986-2.964a7.347,7.347,0,0,0-6.7,3.379q-1.484,2.373-1.482,7.825v4.861q0,5.632.356,6.461.474,1.068,1.3,1.067a5.758,5.758,0,0,0,1.364-.237,5.774,5.774,0,0,1,1.363-.237q1.778,0,1.777,2.015,0,1.956-2.371,1.956a27.327,27.327,0,0,1-3.082-.356,20.033,20.033,0,0,0-2.9-.178,22.709,22.709,0,0,0-3.32.237,21.62,21.62,0,0,1-2.964.3q-2.491,0-2.49-2.015a1.676,1.676,0,0,1,1.9-1.9,6.223,6.223,0,0,1,1.1.178,7.229,7.229,0,0,0,1.571.178q1.6,0,1.837-2.667,0,.238.06-2.964t.06-4.327V24.887q0-3.437-.179-5.75t-1.778-2.312A10.723,10.723,0,0,0,567.46,17a2.514,2.514,0,0,1-.888.119q-2.195,0-2.193-1.956,0-1.9,2.608-1.9a2.856,2.856,0,0,1,.652.059l2.845.3a9.415,9.415,0,0,0,1.333-.148,9.6,9.6,0,0,1,1.393-.148q1.6,0,1.6,1.778\",\n transform: \"translate(-86.452 -1.888)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M620.654,47.224l1.423-3.439a13.2,13.2,0,0,1-5.039-1.777q-6.461-4.21-6.461-13.635,0-7.29,3.852-11.706a12.868,12.868,0,0,1,10.2-4.417,11.847,11.847,0,0,1,7.826,2.608,8.139,8.139,0,0,1,3.142,6.521,5.34,5.34,0,0,1-1.216,3.646,3.941,3.941,0,0,1-3.111,1.394,3.547,3.547,0,0,1-2.431-.889,2.812,2.812,0,0,1-1.007-2.193q0-2.37,2.964-2.728a4.026,4.026,0,0,0-1.008-2.489,7.13,7.13,0,0,0-5.276-1.957,7.888,7.888,0,0,0-6.639,3.32,14.369,14.369,0,0,0-2.49,8.833q0,5.395,2.4,8.536a7.742,7.742,0,0,0,6.492,3.142,7.219,7.219,0,0,0,4.534-1.482,7.432,7.432,0,0,0,2.638-4.032q.474-1.835.624-2.223a1.432,1.432,0,0,1,.444-.622,1.966,1.966,0,0,1,1.482-.711,2.23,2.23,0,0,1,2.312,2.311,9.089,9.089,0,0,1-.918,3.557,11.882,11.882,0,0,1-2.223,3.437,12.972,12.972,0,0,1-8.18,3.676l-.771,1.838a7.934,7.934,0,0,1,1.542-.178,5.242,5.242,0,0,1,3.586,1.333,4.1,4.1,0,0,1,1.511,3.171,4.172,4.172,0,0,1-1.9,3.469,7.7,7.7,0,0,1-4.683,1.393,8.675,8.675,0,0,1-4.328-1.067q-1.9-1.067-1.9-2.371,0-1.423,1.365-1.424.533,0,1.659,1.126a4.171,4.171,0,0,0,3.083,1.127,3.584,3.584,0,0,0,2.223-.652,1.955,1.955,0,0,0,.86-1.6q0-2.074-2.668-2.075a11.6,11.6,0,0,0-2.845.712,2.092,2.092,0,0,1-.653.119c-.473,0-.711-.218-.711-.652a3.255,3.255,0,0,1,.3-.948\",\n transform: \"translate(-93.529 -1.877)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M677.774,34.609l-.059,3.379q-.119,5.689-6.045,5.691-4.862,0-6.046-4.209-2.965,4.446-9.424,4.446a11.718,11.718,0,0,1-7.647-2.372,7.766,7.766,0,0,1-2.9-6.342,7.768,7.768,0,0,1,4.21-7.232,21.362,21.362,0,0,1,7.409-1.838q4.8-.535,6.1-1.246a3.761,3.761,0,0,0,1.838-3.615A4.548,4.548,0,0,0,662.955,17a7.994,7.994,0,0,0-4.09-1.067,9.182,9.182,0,0,0-4,.919q-1.927.92-1.926,1.867c0,.119.2.317.594.592a2.243,2.243,0,0,1,.83,1.957,2.473,2.473,0,0,1-.89,1.955,3.226,3.226,0,0,1-2.193.771,3.45,3.45,0,0,1-2.578-1.066,3.6,3.6,0,0,1-1.037-2.608q0-3.32,3.29-5.662a13.387,13.387,0,0,1,7.972-2.341q5.571,0,8.536,3.082,2.312,2.372,2.312,7.232V34.609q0,3.794.563,4.624a1.741,1.741,0,0,0,1.512.829q2.134,0,2.134-3.793v-2.9a1.676,1.676,0,0,1,1.9-1.9q1.9,0,1.9,2.844Zm-12.685-2.727.059-4.21q-1.955,1.956-8,2.549-6.7.654-6.7,4.861a4.373,4.373,0,0,0,1.631,3.617A6.875,6.875,0,0,0,656.5,40a8.719,8.719,0,0,0,6.253-2.164,8,8,0,0,0,2.34-5.957\",\n transform: \"translate(-98.901 -1.888)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M319.9,22.079V44.012h-2.1V41.725a7.851,7.851,0,0,1-5.828,2.6,7.408,7.408,0,0,1-5.577-2.35,8.228,8.228,0,0,1-2.225-5.8,8.1,8.1,0,0,1,2.225-5.766,7.327,7.327,0,0,1,5.577-2.38,7.573,7.573,0,0,1,5.828,2.6V22.079Zm-13.662,14.1a6.036,6.036,0,0,0,1.88,4.481,6.435,6.435,0,0,0,9.682-.753V32.419a6.424,6.424,0,0,0-11.562,3.76\",\n transform: \"translate(-46.593 -3.382)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"a\",\n d: \"M319.9,22.079V44.012h-2.1V41.725a7.851,7.851,0,0,1-5.828,2.6,7.408,7.408,0,0,1-5.577-2.35,8.228,8.228,0,0,1-2.225-5.8,8.1,8.1,0,0,1,2.225-5.766,7.327,7.327,0,0,1,5.577-2.38,7.573,7.573,0,0,1,5.828,2.6V22.079Zm-13.662,14.1a6.036,6.036,0,0,0,1.88,4.481,6.435,6.435,0,0,0,9.682-.753V32.419a6.424,6.424,0,0,0-11.562,3.76Z\",\n transform: \"translate(-46.593 -3.382)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"c\",\n d: \"M343.085,37.254v.69H329.11a5.952,5.952,0,0,0,1.943,4.2,6.165,6.165,0,0,0,4.325,1.692,7.306,7.306,0,0,0,5.327-2.162l1.159,1.034A9.254,9.254,0,0,1,335.22,45.4a8.13,8.13,0,0,1-8.147-8.147,8.021,8.021,0,0,1,2.319-5.765,7.623,7.623,0,0,1,5.671-2.381,7.711,7.711,0,0,1,8.022,8.146m-12.22-4.794a6.132,6.132,0,0,0-1.755,4.387h11.97c0-3.447-2.256-6.2-5.984-6.2a5.7,5.7,0,0,0-4.231,1.817\",\n transform: \"translate(-50.101 -4.459)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: \"a\",\n d: \"M343.085,37.254v.69H329.11a5.952,5.952,0,0,0,1.943,4.2,6.165,6.165,0,0,0,4.325,1.692,7.306,7.306,0,0,0,5.327-2.162l1.159,1.034A9.254,9.254,0,0,1,335.22,45.4a8.13,8.13,0,0,1-8.147-8.147,8.021,8.021,0,0,1,2.319-5.765,7.623,7.623,0,0,1,5.671-2.381A7.711,7.711,0,0,1,343.085,37.254Zm-12.22-4.794a6.132,6.132,0,0,0-1.755,4.387h11.97c0-3.447-2.256-6.2-5.984-6.2A5.7,5.7,0,0,0,330.864,32.461Z\",\n transform: \"translate(-50.101 -4.459)\"\n})));\n\nfunction SvgLogoCuidadorInline(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: 578.875,\n height: 53.053,\n viewBox: \"0 0 578.875 53.053\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2, _ref3);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoCuidadorInline);\nexport default __webpack_public_path__ + \"static/media/logo-cuidador-inline.b16aae05.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\nimport { Typography } from '@material-ui/core';\nimport { Favorite } from '@material-ui/icons';\nimport { MadeByProps } from '.';\nimport { ReactComponent as LogoInline } from '../../assets/logo-cuidador-inline.svg';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-end;\n height: 100%;\n`;\n\nexport const Text = styled(Typography)<MadeByProps>`\n color: ${(props) =>\n props.mainColor === 'white'\n ? ({ theme }) => theme.palette.common.white\n : ({ theme }) => theme.palette.common.black};\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n width: 100%;\n`;\n\nexport const StyledFavorite = styled(Favorite)`\n margin-inline: 5px;\n height: 15px;\n width: 15px;\n`;\n\nexport const StyledLogoInline = styled(LogoInline)<MadeByProps>`\n & .c {\n fill: ${(props) =>\n props.mainColor === 'white'\n ? ({ theme }) => theme.palette.common.white\n : ({ theme }) => theme.palette.common.black};\n }\n margin-top: 2.5px;\n margin-inline: 5px;\n height: 15px;\n width: auto;\n`;\n","import React from 'react';\nimport { clientSideScheme } from '@cuidador/whitelabel';\nimport { Text, StyledFavorite, StyledLogoInline, Container } from './styles';\n\nexport interface MadeByProps {\n mainColor: 'white' | 'black';\n}\n\nconst MadeBy: React.FC<MadeByProps> = ({ mainColor }) => {\n const { schemeId } = clientSideScheme();\n\n if (schemeId === 'default') return null;\n\n return (\n <Container>\n <Text mainColor={mainColor}>\n Feito com <StyledFavorite /> por\n <StyledLogoInline mainColor={mainColor} />\n </Text>\n </Container>\n );\n};\n\nexport default MadeBy;\n","import {\n Backdrop as MaterialBackdrop,\n Button,\n CircularProgress as MaterialCircularProgress,\n Typography,\n} from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n display: flex;\n flex-direction: column;\n flex: 1;\n padding-bottom: ${({ theme }) => theme.spacing(4.5)}px;\n`;\n\nexport const Title = styled(Typography).attrs({\n variant: 'h6',\n align: 'center',\n})`\n color: black;\n font-weight: bold;\n margin: ${({ theme }) => theme.spacing(2, 0, 2, 0)};\n`;\n\nexport const SubTitle = styled(Typography).attrs({\n variant: 'subtitle1',\n align: 'left',\n})`\n color: black;\n font-weight: bold;\n margin: ${({ theme }) => theme.spacing(2, 0, 2, 1)};\n`;\n\nexport const Backdrop = styled(MaterialBackdrop)`\n z-index: ${({ theme }) => theme.zIndex.drawer + 1};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n position: absolute;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n\nexport const DateContainer = styled.div`\n display: flex;\n flex-direction: row;\n color: black;\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const CircleContainer = styled.div`\n display: flex;\n border-radius: 10%;\n width: ${({ theme }) => theme.spacing(8.5)}px;\n height: ${({ theme }) => theme.spacing(3.5)}px;\n padding: ${({ theme }) => theme.spacing(0)}px;\n border: 1px solid black;\n color: black;\n\n align-items: center;\n margin-right: ${({ theme }) => theme.spacing(1)}px;\n margin-left: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const DateInside = styled.div`\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const DateOutside = styled.div`\n margin-top: auto;\n margin-bottom: auto;\n`;\n\nexport const FinishShiftButton = styled(Button).attrs(({ variant }) => ({\n variant: variant || 'outlined',\n}))`\n color: ${({ theme }) => theme.palette.info.dark};\n border-color: ${({ theme }) => theme.palette.info.dark};\n font-size: ${({ theme }) => theme.typography.h6.fontSize};\n font-weight: 400;\n align-self: center;\n`;\n","import {\n ExecutionMessage,\n Shift,\n ShiftExecutionModel,\n} from '@cuidador/database';\nimport { sortBy } from 'lodash';\n\nexport function formatFullWeekdayName(day: string) {\n switch (day) {\n case 'Monday':\n return 'Segunda-feira';\n case 'Tuesday':\n return 'Terça-Feira';\n case 'Wednesday':\n return 'Quarta-Feira';\n case 'Thursday':\n return 'Quinta-Feira';\n case 'Friday':\n return 'Sexta-feira';\n case 'Saturday':\n return 'Sabado';\n case 'Sunday':\n return 'Domingo';\n default:\n return '';\n }\n}\n\nexport interface FormValues {\n id: number;\n status: string;\n updatedTime?: string;\n}\n\nexport const getExecutionMessages = (\n shift: Shift | null | undefined,\n executionInProgress: ShiftExecutionModel | null | undefined\n) => {\n if (!shift || !shift.executions || shift.executions.length === 0) return [];\n\n const filteredAndOrderedExecutions = sortBy(\n shift.executions.filter(\n (execution) =>\n !!execution.message &&\n (!executionInProgress || execution.id !== executionInProgress.id)\n ),\n 'startedAt'\n );\n\n const messages = filteredAndOrderedExecutions.map(\n ({ message }) => message\n ) as ExecutionMessage[];\n\n return messages;\n};\n","import React from 'react'\nimport { useEffect, useState } from 'react'\nimport usePatient from '../../hooks/usePatient'\nimport { Avatar } from '@material-ui/core'\n\nexport type PatientAvatarProps = {\n patientId: number\n}\n\nexport function PatientAvatar(props: PatientAvatarProps) {\n const { patientId } = props\n const [imageUrl, setImageUrl] = useState<string>('')\n const { getProfilePicture } = usePatient()\n\n const handleGetProfilePicture = async (id: number) => {\n try {\n return await getProfilePicture(id).then(({ data }) => data?.signedUrl)\n } catch (err) {\n // console.log('error')\n }\n }\n async function fetchPatientProfilePicture() {\n if (!patientId) return\n const result = await handleGetProfilePicture(parseInt(`${patientId}`))\n if (result) {\n setImageUrl(result)\n }\n }\n\n useEffect(() => {\n fetchPatientProfilePicture()\n }, [])\n\n return <Avatar src={imageUrl} />\n}\n","import { Typography, useTheme } from '@material-ui/core'\nimport React from 'react'\nimport { PatientAvatar } from '../PatientAvatar'\n\nexport type PageTitleProps = {\n title: string\n patientId?: number\n}\n\nexport function PageTitle(props: PageTitleProps) {\n const { title, patientId } = props\n const theme = useTheme()\n\n return (\n <div style={\n patientId ? {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n marginInline: theme.spacing(1.55),\n maxWidth: '350px',\n } : {}\n } >\n {patientId && <PatientAvatar patientId={patientId} />}\n <Typography\n variant='h6'\n style={{\n textAlign: 'center',\n fontSize: '16px',\n display: '-webkit-box',\n maxWidth: '250px',\n marginLeft: '10px',\n maxLines: 2,\n overflow: 'hidden',\n }}\n >\n {title}\n </Typography>\n </div>\n )\n}\n","import React, { useContext } from 'react';\nimport InternetConnectionErrorBanner from '../InternetConnectionCheck';\nimport { InternetConnectionContext } from '../../components/InternetConnectionCheck/InternetConnectionContext';\nimport { AppBar, Toolbar } from '@material-ui/core';\n\nexport type HeaderProps = {\n leftContent?: React.ReactNode;\n centerContent?: React.ReactNode;\n rightContent?: React.ReactNode;\n};\n\nexport function Header(props: HeaderProps) {\n const { leftContent, centerContent, rightContent } = props;\n const BlankDiv = () => <div style={{ height: '40px', width: '40px' }} />;\n const { internetStatus } = useContext(InternetConnectionContext);\n\n return (\n <>\n {/* AppBar fixo no topo */}\n <AppBar\n style={{\n position: 'sticky',\n top: 0,\n height: '72px',\n zIndex: 5,\n justifyContent: 'center',\n }}\n >\n <Toolbar\n style={{\n justifyContent: 'space-between',\n zIndex: 3,\n }}\n >\n {leftContent ? leftContent : <BlankDiv />}\n {centerContent ? centerContent : <BlankDiv />}\n {rightContent ? rightContent : <BlankDiv />}\n </Toolbar>\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n filter: 'brightness(0.1) opacity(0.1)',\n }}\n >\n <img\n src=\"images/headerElipses/ElipseBlue.svg\"\n style={{\n width: '250px',\n height: '250px',\n top: '-200px',\n right: '30px',\n position: 'absolute',\n zIndex: 2,\n }}\n />\n <img\n src=\"images/headerElipses/Elipsegreen.svg\"\n style={{\n width: '250px',\n height: '250px',\n top: '-180px',\n right: '-80px',\n position: 'absolute',\n zIndex: 1,\n }}\n />\n <img\n src=\"images/headerElipses/ElipseBlue.svg\"\n style={{\n width: '250px',\n height: '250px',\n bottom: '-150px',\n left: '-120px',\n position: 'absolute',\n zIndex: 2,\n }}\n />\n <img\n src=\"images/headerElipses/Elipsegreen.svg\"\n style={{\n width: '250px',\n height: '250px',\n bottom: '-220px',\n left: '0px',\n position: 'absolute',\n zIndex: 1,\n }}\n />\n </div>\n </AppBar>\n\n {/* InternetConnectionErrorBanner fixo abaixo do AppBar */}\n {internetStatus === 'offline' && (\n <div\n style={{\n position: 'sticky',\n top: '72px', // Posição ajustada para ficar logo abaixo do AppBar\n zIndex: 4, // Menor que o AppBar para evitar sobreposição\n width: '100%',\n }}\n >\n <InternetConnectionErrorBanner />\n </div>\n )}\n </>\n );\n}\n","import { IconButton, useTheme } from '@material-ui/core'\nimport React from 'react'\n\nexport type IconButtonStyledProps = {\n icon: React.ReactNode\n onClick?: () => void\n backgroundColor?: string\n}\n\nexport function IconButtonStyled (props: IconButtonStyledProps) {\n const { icon, onClick, backgroundColor } = props\n const theme = useTheme()\n\n return (\n <IconButton\n style={{\n width: '40px',\n height: '40px',\n fontSize: '40px',\n color: theme.palette.primary.light,\n backgroundColor: backgroundColor,\n borderRadius: '16px',\n padding: '8px',\n }}\n onClick={onClick}\n >\n {icon}\n </IconButton>\n )\n}\n","import React from 'react'\nimport PscIcon from '../Icons/PscIcon'\nimport { useHistory } from 'react-router-dom'\nimport { IconButtonStyled } from '../IconButtonStyled'\n\nexport function PscButton () {\n const history = useHistory()\n\n return (\n <IconButtonStyled\n icon={<PscIcon />}\n onClick={() => history.push('/pessoas-sob-cuidado')}\n backgroundColor='white'\n />\n )\n}\n","import { clientSideScheme } from '@cuidador/whitelabel'\nimport { Drawer, IconButton, Link, List, ListItem, ListItemText } from '@material-ui/core'\nimport { AccessibilityNewRounded, Assignment, Close, Facebook, History, InsertDriveFile, Person, Phone } from '@material-ui/icons'\nimport { Link as defaultLink } from 'react-router-dom'\nimport styled from 'styled-components'\n\nexport const StyledDrawer = styled(Drawer)`\n display: flex;\n\n .MuiDrawer-paper {\n max-width: 300px;\n width: 100%;\n };\n`\n\nexport const StyledCloseIcon = styled(Close)`\n color: ${({ theme }) => theme.palette.common.white};\n height: 1em;\n width: 1em;\n`\n\nexport const StyledPersonIcon = styled(Person)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1em;\n width: 1em;\n`\n\nexport const StyledPscIcon = styled(AccessibilityNewRounded)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1em;\n width: 1em;\n`\n\nexport const StyledAssessment = styled(Assignment)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1.3em;\n width: 1.3em;\n`\n\nexport const StyledComunityIcon = styled(Facebook)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1.1em;\n width: 1.1em;\n`\n\nexport const StyledFileIcon = styled(InsertDriveFile)`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 1em;\n width: 1em;\n`\n\nexport const StyledHistoryIcon = styled(History)`\n color: ${({ theme }) => theme.palette.primary.main};\n height: 1.1em;\n width: 1.1em;\n`\n\nexport const StyledPhoneIcon = styled(Phone)`\n background-color: ${({ theme }) => theme.palette.primary.dark};\n color: ${({ theme }) => theme.palette.common.white};\n border-radius: ${({ theme }) => theme.spacing(0.75)}px;\n padding: ${({ theme }) => theme.spacing(0.25)}px;\n margin-left: ${({ theme }) => theme.spacing(0.25)}px;\n width: 0.7em;\n height: 0.7em;\n`\n\nexport const StyledLogoBlock = styled.img.attrs(() => {\n const { logoLightUrl } = clientSideScheme()\n return { src: logoLightUrl }\n})`\n max-width: 200px;\n max-height: 20px;\n width: 100%;\n margin-top: ${({ theme }) => theme.spacing(0.75)}px;\n margin-bottom: ${({ theme }) => theme.spacing(0.75)}px;\n`\n\nexport const DrawerHeader = styled.div`\n background-color: ${({ theme }) => theme.palette.primary.main};\n display: flex;\n align-items: center;\n max-height: 72px;\n`\n\nexport const StyledList = styled(List)`\n padding: 0;\n`\n\nexport const StyledListItem = styled(ListItem)`\n &:hover {\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n }\n`\n\nexport const StyledListItemText = styled(ListItemText)`\n color: ${({ theme }) => theme.palette.primary.dark};\n`\n\nexport const StyledLink = styled(defaultLink)`\n text-decoration: none;\n`\n\nexport const StyledHrefLink = styled(Link)`\n text-decoration: none;\n\n &:hover {\n text-decoration: none;\n };\n`\n\nexport const AppItemTitle = styled.span`\n color: ${({ theme }) => theme.palette.primary.dark};\n font-size: 16px;\n font-weight: 600;\n margin-bottom: ${({ theme }) => theme.spacing(0.5)}px;\n`\n\nexport const AppItemLabel = styled.span`\n color: ${({ theme }) => theme.palette.primary.dark};\n font-size: 12px;\n`\n\nexport const AppIcon = styled.img`\n height: 25px;\n width: 25px;\n margin-left: ${({ theme }) => theme.spacing(0.25)}px;\n`\n\nexport const TextContainer = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: ${({ theme }) => theme.spacing(0.25)}px;\n`\n\nexport const DrawerBody = styled.div`\n flex: 1\n`\n\nexport const DrawerFooter = styled.div`\n background-color: ${({ theme }) => theme.palette.primary.main};\n padding-inline: ${({ theme }) => theme.spacing(2)}px;\n`\n\nexport const DrawerButton = styled(IconButton)`\n color: ${({ theme }) => theme.palette.common.white};\n border-radius: 0;\n font-size: 16px;\n display: flex;\n align-items: center;\n`\n\nexport const DrawerFooterText = styled.span`\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n`\n","import { clientSideScheme } from '@cuidador/whitelabel'\nimport { IconButton } from '@material-ui/core'\nimport React, { useContext, useState } from 'react'\nimport { ReactComponent as SignOutIcon } from '../../assets/sign-out-icon.svg'\nimport {\n AppIcon,\n DrawerBody,\n DrawerButton,\n DrawerFooter,\n DrawerFooterText,\n DrawerHeader,\n StyledAssessment,\n StyledCloseIcon,\n StyledComunityIcon,\n StyledDrawer,\n StyledFileIcon,\n StyledHistoryIcon,\n StyledHrefLink,\n StyledLink,\n StyledList,\n StyledLogoBlock,\n StyledPersonIcon,\n StyledPhoneIcon,\n} from './styles'\nimport { AuthContext } from '../../contexts/auth'\nimport LogoutDialog from '../LogoutDialog'\nimport useCanAccess from '../../hooks/useCanAccess'\nimport usePatient from '../../hooks/usePatient'\nimport { useHistory } from 'react-router-dom'\nimport { PatientModel } from '@cuidador/database'\nimport { toast } from 'react-toastify'\nimport PscIcon from '../Icons/PscIcon'\nimport SelectPatientModal, { FormValues } from '../SelectPatientModal'\nimport { MenuItem } from './MenuItem'\nimport { AppShortcut } from './AppSchortcut'\n\nexport type SideMenuProps = {\n handleToggleSideMenu: () => void\n isSideMenuOpen: boolean\n}\n\nenum PatientModalUrl {\n HYSTORY = '/historico/plantao/paciente',\n PROFESSIONAL_REPORT = '/avaliacao/paciente',\n}\n\nexport function SideMenu(props: SideMenuProps) {\n const { handleToggleSideMenu, isSideMenuOpen } = props\n\n const { signOut, userInfo } = useContext(AuthContext)\n const { getAll } = usePatient()\n const history = useHistory()\n\n const canAccessGuardianApp = userInfo?.user?.role?.guardianAppAccess\n const [isLogoutDialogOpen, setIsLogoutDialogOpen] = useState(false)\n const [isPatientModalVisible, setIsPatientModalVisible] = useState(false)\n const [patients, setPatients] = useState<PatientModel[]>([])\n const [patientModalUrl, setPatientModalUrl] = useState(PatientModalUrl.HYSTORY)\n const { isAllowedToRead: isAllowedToReadShifts } = useCanAccess('care/shift', userInfo);\n const { isAllowedToRead: isAllowedToReadProfessionalReport } = useCanAccess('report/professional')\n const { isAllowedToRead: isAllowedToReadPatients } = useCanAccess('user/patient')\n const { appFShortcutIconUrl, appFUrl } = clientSideScheme()\n\n const handlePatientDataModal = (modalUrl: PatientModalUrl) => {\n getAll()\n .then((data) => {\n setPatientModalUrl(modalUrl)\n setPatients(data)\n setIsPatientModalVisible(true)\n })\n .catch(() => {\n toast.error('Erro ao recuperar lista de pacientes. Tente novamente daqui a pouco')\n })\n }\n\n const handleToggleLogoutDialog = () => {\n setIsLogoutDialogOpen(!isLogoutDialogOpen)\n }\n\n const handleClosePatientModal = () => {\n setIsPatientModalVisible(false)\n }\n\n const handlePatientSelect = (data: FormValues) => {\n const url = `${patientModalUrl}/${data.patient}`\n history.push(url)\n }\n\n return (\n <>\n <StyledDrawer\n open={isSideMenuOpen}\n onClose={() => {\n handleToggleSideMenu()\n }}\n >\n <DrawerHeader>\n <IconButton\n onClick={() => {\n handleToggleSideMenu()\n }}\n >\n <StyledCloseIcon fontSize='large' />\n </IconButton>\n <StyledLogoBlock />\n </DrawerHeader>\n <DrawerBody>\n <StyledList>\n <StyledLink to={'/minha-conta/pessoais'}>\n <MenuItem icon={<StyledPersonIcon />} label={'Minha conta'} />\n </StyledLink>\n {isAllowedToReadPatients && (\n <StyledLink to={'/pessoas-sob-cuidado'}>\n <MenuItem\n icon={<PscIcon variant='dark' />}\n label={'Pessoas sob cuidado'}\n />\n </StyledLink>\n )}\n <StyledLink to={'/ajuda'}>\n <MenuItem icon={<StyledPhoneIcon />} label={'Me ajuda'} />\n </StyledLink>\n {isAllowedToReadShifts && (\n <MenuItem\n icon={<StyledHistoryIcon />}\n label='Histórico de plantões'\n onClick={() => handlePatientDataModal(PatientModalUrl.HYSTORY)}\n />\n )}\n {isAllowedToReadProfessionalReport && (\n <MenuItem\n icon={<StyledAssessment />}\n label='Avaliação multiprofissional'\n onClick={() =>\n handlePatientDataModal(PatientModalUrl.PROFESSIONAL_REPORT)\n }\n />\n )}\n <StyledHrefLink\n href={'https://www.facebook.com/groups/cuidadordeconfianca'}\n >\n <MenuItem icon={<StyledComunityIcon />} label={'Comunidade'} />\n </StyledHrefLink>\n <StyledHrefLink\n href={'https://www.cuidadordeconfianca.com.br/termos-e-politicas'}\n >\n <MenuItem icon={<StyledFileIcon />} label={'Termos de uso'} />\n </StyledHrefLink>\n {Boolean(canAccessGuardianApp) && (\n <StyledHrefLink href={appFUrl}>\n <AppShortcut\n icon={<AppIcon src={appFShortcutIconUrl} />}\n label={'Ir para o app de Gestão'}\n />\n </StyledHrefLink>\n )}\n </StyledList>\n </DrawerBody>\n <DrawerFooter>\n <DrawerButton\n onClick={() => {\n handleToggleLogoutDialog()\n }}\n >\n <SignOutIcon />\n <DrawerFooterText>Sair da conta</DrawerFooterText>\n </DrawerButton>\n </DrawerFooter>\n </StyledDrawer>\n <LogoutDialog\n open={isLogoutDialogOpen}\n onConfirm={signOut}\n onClose={handleToggleLogoutDialog}\n />\n <SelectPatientModal\n open={isPatientModalVisible}\n onClose={handleClosePatientModal}\n patients={patients}\n onSubmit={handlePatientSelect}\n />\n </>\n )\n}\n","import { ListItemIcon } from '@material-ui/core'\nimport React from 'react'\nimport { StyledListItem, StyledListItemText } from '../styles'\n\ninterface MenuItemProps {\n label: string\n icon: JSX.Element\n onClick?: () => void\n}\n\nexport function MenuItem (props: MenuItemProps) {\n const { label, icon, onClick } = props\n\n return (\n <StyledListItem button onClick={onClick}>\n <ListItemIcon>{icon}</ListItemIcon>\n <StyledListItemText>{label}</StyledListItemText>\n </StyledListItem>\n )\n}\n","import React from 'react'\nimport { ListItemIcon } from '@material-ui/core'\nimport {\n TextContainer,\n StyledListItem,\n AppItemTitle,\n AppItemLabel,\n} from '../styles'\n\ninterface AppShortcutProps {\n label: string\n icon: JSX.Element\n}\n\nexport function AppShortcut (props: AppShortcutProps) {\n const { label, icon } = props\n\n return (\n <StyledListItem button>\n <ListItemIcon>{icon}</ListItemIcon>\n <TextContainer>\n <AppItemTitle>Trocar de app</AppItemTitle>\n <AppItemLabel>{label}</AppItemLabel>\n </TextContainer>\n </StyledListItem>\n )\n}\n","import React from 'react'\nimport { IconButtonStyled } from '../IconButtonStyled'\n\nexport type MenuButtonProps = {\n onClick: () => void\n}\n\nexport function MenuButton (props: MenuButtonProps) {\n const { onClick } = props\n\n return (\n <IconButtonStyled\n icon={\n <img\n src='images/burger-menu.svg'\n style={{\n fontSize: 40,\n color: 'inherit',\n }}\n />\n }\n onClick={onClick}\n />\n )\n}\n","import { EventModel, ExecutionMessage, Shift } from '@cuidador/database'\nimport { APIError } from '@cuidador/lib'\nimport { Backdrop, CircularProgress, Typography } from '@material-ui/core'\nimport { AxiosError } from 'axios'\nimport { format } from 'date-fns'\nimport ptBrLocale from 'date-fns/locale/pt-BR'\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport { Redirect, useHistory } from 'react-router-dom'\nimport { toast } from 'react-toastify'\nimport { useDebouncedCallback } from 'use-debounce/lib'\nimport CareCategoryList from '../../components/CareCategoriesList'\nimport CurrentShiftEventList from '../../components/CurrentShiftEventList'\nimport { toastErrorRedirect } from '../../components/CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/utils'\nimport ExecutionMessageCard from '../../components/ExecutionMessageCard'\nimport ExecutionMessageForm from '../../components/ExecutionMessageForm'\nimport FinishShiftConfirmDialog from '../../components/FinishShiftConfirmDialog'\nimport MadeBy from '../../components/MadeBy'\nimport { AuthContext } from '../../contexts/auth'\nimport { CurrentShiftDataContext } from '../../contexts/CurrentShiftData'\nimport { isSelfCare } from '../../contexts/permission'\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress'\nimport useCanAccess from '../../hooks/useCanAccess'\nimport useExecution from '../../hooks/useExecution'\nimport {\n CircleContainer,\n Container,\n DateContainer,\n DateInside,\n DateOutside,\n FinishShiftButton,\n SubTitle,\n Title,\n} from './styles'\nimport { formatFullWeekdayName, getExecutionMessages } from './utils'\nimport SymptomsListContextProvider from '../../contexts/SymptomsList'\nimport { useTheme } from 'styled-components'\nimport { PageTitle } from '../../components/PageTitle'\nimport { Header } from '../../components/Header'\nimport { PscButton } from '../../components/PscButton'\nimport { SideMenu } from '../../components/SideMenu'\nimport { MenuButton } from '../../components/MenuButton'\nimport Notiflix from 'notiflix';\nimport { QueueData } from '../../config/axios/offlineProxy/offlineQueue';\n//import { hotjar } from 'react-hotjar';\n\n\n/**\n * This component needs to act as a middle man because when the user logs out\n * on a shift execution in progress and log back after it ended,\n * an exception will be caused.\n */\nexport function CurrentShift() {\n const theme = useTheme()\n const history = useHistory()\n const QUEUE_KEY = `cuidador_http_queue`;\n const dev = process.env.REACT_APP_ENV !== 'production';\n // const hotjarUsers = [330]\n\n useEffect(() => {\n const unblock = history.block((location, action) => {\n\n if (hasQueueItems()) {\n Notiflix.Confirm.show(\n 'âš ï¸ Sem conexão',\n `Ao sair dessa tela as marcações serão perdidas. \n Permanecer e manter as marcações?`, // Texto\n 'Sair',\n 'Sim',\n () => {\n unblock(); // Permite a navegação\n history.push(location.pathname); // Realiza a navegação para o novo caminho\n },\n () => {},\n {\n width: '320px',\n borderRadius: '8px',\n cssAnimationDuration: 300,\n okButtonBackground: '#FF0000', // Cor do botão \"Sair\"\n cancelButtonBackground: theme.palette.secondary.main, // Cor do botão \"Cancelar\"\n fontFamily: theme.typography.fontFamily, // Fonte do projeto\n titleColor: theme.palette.text.primary, // Cor do tÃtulo\n messageColor: theme.palette.text.secondary, // Cor da mensagem\n backgroundColor: theme.palette.background.paper // Cor do fundo\n }\n );\n\n setTimeout(() => {\n const titleElement = document.querySelector('.notiflix-confirm .notiflix-title');\n if (titleElement) {\n titleElement.innerHTML = '<img src=\"path/to/your-icon.png\" alt=\"Ãcone\" style=\"width:24px; vertical-align:middle; margin-right:8px;\">' + titleElement.innerHTML;\n }\n }, 10); \n\n return false;\n }\n });\n\n // Limpa o bloqueio ao desmontar o componente\n return () => {\n unblock();\n };\n }, [history]);\n\n\n const [isLoading, setIsLoading] = useState<boolean>(true)\n const [isOpenSideMenu, setIsOpenSideMenu] = useState<boolean>(false)\n const [isFinishShiftDialogOpened, setIsFinishShiftDialogOpened] = useState(false)\n\n const hasQueueItems = (): boolean => {\n const stringData = localStorage.getItem(QUEUE_KEY) || '[]';\n const queueData: QueueData[] = JSON.parse(stringData);\n return queueData.length > 0;\n };\n\n const refreshAndEnsurePageLoads = async () => {\n setIsLoading(true)\n await refreshShiftInProgress()\n setIsLoading(false)\n }\n\n useEffect(() => {\n refreshAndEnsurePageLoads()\n }, [])\n\n const { userInfo } = useContext(AuthContext)\n const { useEvent } = useContext(CurrentShiftDataContext)\n const { shiftInProgress, executionInProgress } = useContext(ShiftInProgressContext)\n const { refreshShiftInProgress, setExecutionInProgress } = useContext(ShiftInProgressContext)\n const {\n getEventsByShiftId,\n ids,\n byId,\n patchEventStatus,\n patchEventComment,\n setUpdatedTime,\n } = useEvent()\n const { patchExecutionMessage } = useExecution()\n const { isAllowedToInvoke: isAllowedToFinishShift } = useCanAccess('care/shift.finish')\n const { isAllowedToRead: isAllowedToReadCareQuestions } = useCanAccess('care/shift/care-question')\n const shiftExecutionId = executionInProgress?.id\n\n const showError = () =>\n toast.error(\n `Erro ao carregar eventos ${isSelfCare(userInfo?.user) ? 'da rotina' : 'do plantão'}. Tente novamente daqui a pouco`,\n )\n\n\n\n async function loadPageData() {\n\n // if (userInfo?.id && hotjarUsers.includes(userInfo.id)) {\n // console.log('Hotjar inicializado');\n // hotjar.initialize(2488113, 6);\n // }\n\n try {\n setIsLoading(true)\n const shiftId = Number(shiftInProgress!.id)\n await getEventsByShiftId(shiftId)\n } catch (err) {\n console.log(err)\n showError()\n } finally {\n setIsLoading(false)\n }\n }\n\n useEffect(() => {\n loadPageData()\n }, [])\n\n const currentShiftEvents = useMemo(() => {\n if (!ids) {\n return null\n }\n\n return ids\n .map((id) => byId[id])\n // Undefined events could happen on shiftId transition (id still not matching byId)\n // Events with non-null shiftId are the ones belonging to current shift\n .filter((event) => event && event.shiftId)\n }, [ids])\n\n const showToastOnError = useCallback((err) => {\n toastErrorRedirect(err, async () => {\n history.replace('/pessoas-sob-cuidado')\n await refreshShiftInProgress()\n })\n }, [])\n\n const patchNewEventStatus = (id: number, newStatus: EventModel['status']) => {\n patchEventStatus(id, {\n status: newStatus,\n shiftExecutionId,\n caregiverId: userInfo?.id,\n }).catch((err: AxiosError<APIError>) => {\n showToastOnError(err)\n })\n }\n\n const patchNewEventComment = (id: number, newComment: string) => {\n patchEventComment(id, {\n comment: newComment,\n shiftExecutionId,\n caregiverId: userInfo?.id,\n }).catch((err: AxiosError<APIError>) => {\n showToastOnError(err)\n })\n }\n\n const patchEventTime = (id: number, updatedTimeHappensAt: string | null) => {\n setUpdatedTime(id, {\n updatedTimeHappensAt,\n shiftExecutionId,\n caregiverId: userInfo?.id,\n }).catch((err) => {\n showToastOnError(err)\n })\n }\n\n const handleExecutionMessage = (newMessage: string) => {\n patchExecutionMessageDebounced.callback(newMessage)\n }\n\n const patchExecutionMessageDebounced = useDebouncedCallback(\n async (newMessage: string) => {\n setExecutionInProgress({\n ...executionInProgress,\n message: {\n ...executionInProgress?.message,\n message: newMessage,\n } as ExecutionMessage,\n })\n\n await patchExecutionMessage(Number(executionInProgress?.id), {\n shiftId: shiftInProgress?.id,\n message: newMessage,\n }).catch((err) => {\n showToastOnError(err)\n })\n },\n 500,\n )\n\n const dateDay = format(new Date(`${shiftInProgress?.plannedToStartAt}`), 'd')\n const dateMonth = format(new Date(`${shiftInProgress?.plannedToStartAt}`), 'MMM', { locale: ptBrLocale }).toLowerCase()\n\n const dateWeekDay = format(new Date(`${shiftInProgress?.plannedToStartAt}`),'EEEE')\n\n const executionMessages = useMemo(() => getExecutionMessages(\n shiftInProgress as Shift,\n executionInProgress,\n ),\n [shiftInProgress, shiftInProgress?.executions, executionInProgress],\n )\n\n if (!executionInProgress) {\n return <Redirect to='/pessoas-sob-cuidado' />\n }\n\n return (\n <>\n {isLoading && (\n <Backdrop\n open={isLoading}\n style={{\n zIndex: theme.zIndex.drawer + 1,\n color: theme.palette.extra.color.grey.light,\n position: 'absolute',\n }}\n >\n <CircularProgress color='inherit' data-testid='table-backdrop-spinner' />\n </Backdrop>\n )}\n <Header\n leftContent={\n <MenuButton onClick={() => setIsOpenSideMenu(true)} />\n }\n centerContent={\n <PageTitle\n title={shiftInProgress ? `${shiftInProgress?.patient?.name}` : 'Menu'}\n patientId={shiftInProgress?.patientId}\n />\n }\n rightContent={\n <PscButton />\n }\n />\n <SideMenu\n isSideMenuOpen={isOpenSideMenu}\n handleToggleSideMenu={() => setIsOpenSideMenu(false)}\n />\n <Container>\n <Title>\n Roteiro do {isSelfCare(userInfo?.user) ? 'meu dia' : 'plantão'}\n </Title>\n <SubTitle>Rotinas</SubTitle>\n <DateContainer>\n <CircleContainer>\n <DateInside>\n <Typography variant='subtitle2'>\n {dateDay}/{dateMonth}\n </Typography>\n </DateInside>\n </CircleContainer>\n <DateOutside>\n <Typography variant='subtitle2'>\n {formatFullWeekdayName(dateWeekDay)}\n </Typography>\n </DateOutside>\n </DateContainer>\n <SymptomsListContextProvider currentShiftEvents={currentShiftEvents}>\n <CurrentShiftEventList\n onChangeStatus={patchNewEventStatus}\n onChangeComment={patchNewEventComment}\n onChangeTime={patchEventTime}\n events={currentShiftEvents || []}\n />\n </SymptomsListContextProvider>\n {executionMessages.length > 0 && (\n <>\n <SubTitle>Anotações e evolução do plantão</SubTitle>\n {executionMessages.map(\n (message, index) =>\n !!message && (\n <>\n {index !== 0 && <br />}\n <ExecutionMessageCard\n executionMessage={message}\n key={`execution-message-card-${index}`}\n data-testid={`execution-message-card-${index}`}\n />\n </>\n ),\n )}\n </>\n )}\n <ExecutionMessageForm\n onSubmit={() => {\n return\n }}\n initialValues={{\n message: executionInProgress?.message?.message || '',\n }}\n formProps={{\n subTitle: ' ',\n handleChange: handleExecutionMessage,\n hiddenButton: true,\n }}\n />\n {isAllowedToReadCareQuestions && (\n <>\n <SubTitle>Cuidados</SubTitle>\n <CareCategoryList />\n </>\n )}\n {isAllowedToFinishShift && (\n <FinishShiftButton\n onClick={() => setIsFinishShiftDialogOpened(true)}\n size='small'\n >\n Finalizar\n </FinishShiftButton>\n )}\n <MadeBy mainColor='black' />\n </Container>\n <FinishShiftConfirmDialog\n opened={isFinishShiftDialogOpened}\n close={() => setIsFinishShiftDialogOpened(false)}\n />\n </>\n )\n}\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\nimport StyledPaper from '../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n display: flex;\n justify-content: space-between;\n margin: 0;\n padding: ${({ theme }) => theme.spacing(0, 0, 0, 2)};\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n overflow: hidden;\n width: 100%;\n`;\n\nexport const TypographyContainer = styled.div`\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n overflow: hidden;\n padding-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const Title = styled(Typography)`\n margin: ${({ theme }) => theme.spacing(1, 0, 0.5, 0)};\n font-weight: bold;\n line-height: 1;\n`;\n\nexport const SubTitle = styled(Typography)`\n color: #696969;\n font-weight: bold;\n line-height: 1;\n`;\n\nexport const Instruction = styled(Typography)`\n line-height: 1;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const ContactText = styled(Typography)`\n line-height: 1;\n font-weight: normal;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\nexport const LinksContainer = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const StyledPhoneContainer = styled.a`\n display: flex;\n flex: 1;\n min-height: 0;\n flex-direction: column;\n text-decoration: none;\n background-color: ${({ theme }) => theme.palette.info.main};\n text-align: center;\n justify-content: center;\n align-items: center;\n padding: ${({ theme }) => theme.spacing(2, 1)};\n &:hover {\n cursor: pointer;\n }\n min-width: ${({ theme }) => theme.spacing(10)}px;\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n text-decoration: none;\n`;\n\nexport const StyledOpenWhatsappContainer = styled.div`\n display: flex;\n flex: 1;\n flex-basis: 0;\n min-height: 0;\n background-color: ${({ theme }) => theme.palette.extra.color.green};\n flex-direction: column;\n padding: ${({ theme }) => theme.spacing(2, 1)};\n justify-content: center;\n align-items: center;\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n &:hover {\n cursor: pointer;\n }\n min-width: ${({ theme }) => theme.spacing(10)}px;\n`;\n\nexport const StyledOpenLinkContainer = styled.div`\n display: flex;\n flex: 1;\n flex-basis: 0;\n min-height: 0;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: ${({ theme }) => theme.palette.primary.dark};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n padding: ${({ theme }) => theme.spacing(2, 1)};\n white-space: nowrap;\n\n &:hover {\n cursor: pointer;\n }\n min-width: ${({ theme }) => theme.spacing(10)}px;\n`;\n\nexport const Contact = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n svg {\n width: 16px;\n height: 16px;\n margin-right: ${({ theme }) => theme.spacing(0.5)}px;\n }\n`;\n","import Typography from '@material-ui/core/Typography';\nimport { Language, Launch, Phone, WhatsApp } from '@material-ui/icons';\nimport React from 'react';\nimport { useTheme } from 'styled-components';\nimport { phoneMask } from '../../utils/inputs';\nimport {\n CardBox,\n Contact,\n ContactText,\n Instruction,\n LinksContainer,\n StyledOpenLinkContainer,\n StyledOpenWhatsappContainer,\n StyledPhoneContainer,\n SubTitle,\n Title,\n TypographyContainer,\n} from './styles';\n\ninterface CardProps {\n id?: string | number;\n name?: string;\n relevantInformation?: string;\n callingCondition?: string;\n warning?: boolean;\n support?: boolean;\n phoneNumber?: string;\n link?: string;\n isWhatsapp?: boolean;\n}\n\nconst ContactsCard: React.FC<CardProps> = ({\n id,\n name,\n relevantInformation,\n callingCondition,\n warning,\n support,\n phoneNumber,\n link,\n isWhatsapp,\n}) => {\n const theme = useTheme();\n const color = warning\n ? `${theme.palette.warning.light}`\n : support\n ? `${theme.palette.extra.color.grey.light}`\n : `${theme.palette.common.white}`;\n\n const maskedPhoneNumber = warning ? phoneNumber : phoneMask(`${phoneNumber}`);\n\n return (\n <CardBox\n data-testid={`contactsCard-${id}`}\n style={{ backgroundColor: color }}\n >\n <TypographyContainer>\n <Title variant=\"subtitle1\">{name}</Title>\n\n {callingCondition && (\n <div>\n <SubTitle variant=\"subtitle2\">\n Em qual caso entrar em contato?\n </SubTitle>\n <Instruction variant=\"body2\">{callingCondition}</Instruction>\n </div>\n )}\n\n {relevantInformation && (\n <div>\n <SubTitle variant=\"subtitle2\">Observação:</SubTitle>\n <Instruction variant=\"body2\">{relevantInformation}</Instruction>\n </div>\n )}\n\n {phoneNumber && (\n <Contact>\n <Phone />\n <ContactText variant=\"body1\">{maskedPhoneNumber}</ContactText>\n </Contact>\n )}\n {link && (\n <Contact>\n <Language />\n <ContactText variant=\"body1\">\n {link.replace(/https?:\\/\\//, '') + '/consulta'}\n </ContactText>\n </Contact>\n )}\n </TypographyContainer>\n <LinksContainer>\n {phoneNumber && (\n <>\n <StyledPhoneContainer href={`tel:${phoneNumber}`}>\n <Phone />\n <Typography variant=\"body1\">{'Ligar'}</Typography>\n </StyledPhoneContainer>\n\n {!!isWhatsapp && (\n <StyledOpenWhatsappContainer\n onClick={() =>\n window.open(\n `https://api.whatsapp.com/send/?phone=${phoneNumber}`,\n '_blank'\n )\n }\n >\n <WhatsApp />\n Whatsapp\n </StyledOpenWhatsappContainer>\n )}\n </>\n )}\n {link && (\n <StyledOpenLinkContainer onClick={() => window.open(link, '_blank')}>\n <Launch />\n Abrir Link\n </StyledOpenLinkContainer>\n )}\n </LinksContainer>\n </CardBox>\n );\n};\n\nexport default ContactsCard;\n","import {\n Backdrop as MaterialBackdrop,\n CircularProgress as MaterialCircularProgress,\n} from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n align-items: center;\n padding: ${({ theme }) => theme.spacing(2, 4)};\n`;\n\nexport const StyledLink = styled(Link)`\n text-decoration: none;\n width: 100%;\n display: flex;\n`;\n\nexport const Backdrop = styled(MaterialBackdrop)`\n z-index: ${({ theme }) => theme.zIndex.drawer + 1};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n position: absolute;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n","import { EmergencyContactModel } from '@cuidador/database';\nimport React, { useContext, useEffect } from 'react';\nimport EmergencyContactCard from '../../components/EmergencyContactCard';\nimport HeaderWithDrawer from '../../components/Headers/HeaderWithDrawer';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\nimport useEmergencyContacts from '../../hooks/useEmergencyContacts';\nimport { Backdrop, BackdropCircularProgress, Container } from './styles';\n\nconst EmergencyContactsCard: React.FC<{\n contacts: EmergencyContactModel;\n}> = ({ contacts }) => {\n return <EmergencyContactCard {...contacts} />;\n};\n\nconst WHATSAPP_NUMBER = '5511919006699';\n\nconst EmergencyContacts: React.FC = () => {\n const { getAllByPatientId, byId, ids, loading } = useEmergencyContacts();\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n const FAQ_URL =\n 'https://www.cuidadordeconfianca.com.br/perguntas-frequentes-aplicativo';\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n const patientId = shiftInProgress?.patientId!;\n useEffect(() => {\n if (shiftInProgress) {\n getAllByPatientId(patientId);\n }\n }, [patientId]);\n\n if (loading) {\n return (\n <Backdrop open={loading}>\n {loading && (\n <BackdropCircularProgress data-testid=\"table-backdrop-spinner\" />\n )}\n </Backdrop>\n );\n }\n\n return (\n <>\n <HeaderWithDrawer centerContent=\"Me Ajuda\" />\n <Container>\n <EmergencyContactsCard\n contacts={{\n name: 'Samu',\n phoneNumber: '192',\n callingCondition:\n 'Ligar em caso de acidente, crises convulsivas, falta de ar, suspeita de infarto ou AVC.',\n }}\n />\n <EmergencyContactsCard\n contacts={{\n name: 'Bombeiros',\n phoneNumber: '193',\n callingCondition:\n 'Ligar em caso de afogamento, choque elétrico, queda e acidente doméstico.',\n }}\n />\n <EmergencyContactsCard\n contacts={{\n name: 'Dúvidas frequentes',\n relevantInformation: 'Dicas sobre o uso do aplicativo.',\n link: FAQ_URL,\n }}\n />\n <EmergencyContactsCard\n contacts={{\n name: 'Central de Apoio ao Cuidador de Confiança',\n relevantInformation: 'Dicas de cuidado e uso do aplicativo.',\n phoneNumber: WHATSAPP_NUMBER,\n isWhatsapp: true,\n }}\n />\n\n {shiftInProgress &&\n ids\n .map((id) => byId[id])\n .map((contacts) => (\n <EmergencyContactsCard key={contacts.id} contacts={contacts} />\n ))}\n </Container>\n </>\n );\n};\n\nexport default EmergencyContacts;\n","import * as yup from 'yup';\n\nexport const validationSchema = yup.object().shape({\n email: yup\n .string()\n .email('Insira um e-mail válido')\n .transform((value, originalValue) => originalValue.trim())\n .required('E-mail é obrigatório'),\n});\n\nexport const formInitialValues = {\n email: '',\n};\n\nexport interface FormValues {\n email: string;\n}\n","import { clientSideScheme } from '@cuidador/whitelabel';\nimport styled from 'styled-components';\n\nexport const BackgroundOverlay = styled.div`\n height: 100vh;\n background: linear-gradient(\n 180deg,\n ${(props) => props.theme.palette.primary.main} 0%,\n ${(props) => props.theme.palette.secondary.main} 100%\n );\n width: 100%;\n display: flex;\n justify-content: center;\n position: absolute;\n`;\n\nexport const OutterContainer = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 80%;\n max-width: 500px;\n color: white;\n padding: 0px ${({ theme }) => theme.spacing(2)}px;\n\n img {\n width: 100%;\n margin-bottom: ${({ theme }) => theme.spacing(6)}px;\n }\n\n form {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n\n .MuiButton-root {\n margin-top: ${({ theme }) => theme.spacing(4)}px;\n }\n }\n\n a {\n font-size: ${({ theme }) => theme.spacing(2)}px;\n color: white;\n margin-bottom: ${({ theme }) => theme.spacing(6)}px;\n }\n`;\n\nexport const TypographyContainer = styled.div`\n max-width: 100%;\n text-align: center;\n margin-bottom: ${({ theme }) => theme.spacing(3)}px;\n`;\n\nexport const TitleTypography = styled.div`\n margin-bottom: ${({ theme }) => theme.spacing(3)}px;\n`;\n\nexport const Logo = styled.img.attrs(() => {\n const { logoLightUrl } = clientSideScheme();\n return { src: logoLightUrl };\n})`\n margin: ${({ theme }) => theme.spacing(0, 2, 0)};\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n justify-content: center;\n flex: 1;\n align-items: flex-end;\n`;\n\nexport const BackButton = styled.div`\n margin-right: ${({ theme }) => theme.spacing(2)}px;\n`;\n","import React, { useRef } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport Typography from '@material-ui/core/Typography';\nimport { Formik, Form, FormikHelpers, FormikProps } from 'formik';\n\nimport StyledTextField from '../../components/StyledTextField';\n\nimport Button from '../../components/StyledButton';\nimport { sendPasswordResetEmail } from '../../contexts/auth';\nimport { toast } from 'react-toastify';\nimport { AxiosError } from 'axios';\nimport { APIError } from '@cuidador/lib';\nimport { resolveErrorMessage } from '../../utils/error';\n\nimport { validationSchema, formInitialValues, FormValues } from './utils';\n\nimport {\n Container,\n TypographyContainer,\n BackgroundOverlay,\n OutterContainer,\n Logo,\n TitleTypography,\n ButtonContainer,\n BackButton,\n} from './styles';\n\nconst ForgotPassword: React.FC = () => {\n const formikRef = useRef<FormikProps<FormValues> | null>();\n const history = useHistory();\n\n const handleSubmit = (\n values: FormValues,\n { setSubmitting }: FormikHelpers<FormValues>\n ) => {\n setSubmitting(true);\n sendPasswordResetEmail(values.email)\n .then(() => {\n toast.info('E-mail de redefinição de senha enviado.');\n history.goBack();\n })\n .catch((err: AxiosError<APIError>) => {\n if (err.response?.data.message === 'User not found.') {\n toast.error('E-mail não cadastrado');\n formikRef.current?.setFieldError('email', 'E-mail não cadastrado');\n } else {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n }\n })\n .finally(() => setSubmitting(false));\n };\n\n return (\n <BackgroundOverlay>\n <OutterContainer>\n <Container>\n <Logo />\n <TypographyContainer>\n <TitleTypography>\n <Typography variant=\"h6\">Recuperar senha</Typography>\n </TitleTypography>\n <Typography>\n Informe seu e-mail para que as instruções de recuperar a senha\n sejam enviadas\n </Typography>\n </TypographyContainer>\n <Formik\n innerRef={(ref) => (formikRef.current = ref)}\n initialValues={formInitialValues}\n validationSchema={validationSchema}\n onSubmit={handleSubmit}\n >\n {(formik) => (\n <Form>\n <StyledTextField\n name=\"email\"\n color=\"white\"\n label=\"E-mail\"\n value={formik.values.email.trim()}\n onChange={formik.handleChange}\n error={Boolean(formik.errors.email)}\n helperText={formik.errors.email}\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'email' }}\n />\n <ButtonContainer>\n <BackButton>\n <Button\n data-testid=\"back\"\n size=\"large\"\n color=\"inherit\"\n onClick={() => history.goBack()}\n disabled={formik.isSubmitting}\n >\n Voltar\n </Button>\n </BackButton>\n <Button\n data-testid=\"submit\"\n size=\"large\"\n color=\"inherit\"\n type=\"submit\"\n disabled={formik.isSubmitting}\n >\n Enviar\n </Button>\n </ButtonContainer>\n </Form>\n )}\n </Formik>\n </Container>\n </OutterContainer>\n </BackgroundOverlay>\n );\n};\n\nexport default ForgotPassword;\n","import React, { useContext } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { AuthContext } from '../../contexts/auth';\n\nconst Home: React.FC = () => {\n const { user, signOut } = useContext(AuthContext);\n const { pathname } = useLocation();\n return (\n <div>\n <h1>{pathname}</h1>\n <h2>{`Olá ${user?.displayName}`}</h2>\n <button onClick={signOut}>Sair</button>\n </div>\n );\n};\n\nexport default Home;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const PhotoElement = styled.div`\n display: flex;\n justify-content: center;\n`;\n\nexport const CenterContainer = styled.div`\n display: grid;\n align-items: center;\n grid-template-columns: 1fr 4fr 0.5fr;\n grid-template-rows: 1fr;\n grid-column-gap: 0px;\n grid-row-gap: 0px;\n flex-grow: 1;\n margin-inline: ${({ theme }) => theme.spacing(1.55)}px;\n max-width: 350px;\n width: 100%;\n`;\n\nexport const Title = styled(Typography).attrs({\n variant: 'h6',\n})`\n text-align: center;\n font-size: 16px;\n display: -webkit-box;\n max-width: 200px;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Container = styled.div<{ $isAlmostComplete: boolean }>`\n position: sticky;\n top: 72px; // header height\n z-index: 1;\n padding: ${({ theme }) => theme.spacing(1, 2)};\n background-color: ${({ theme, $isAlmostComplete }) => {\n const { red, green } = theme.palette.extra.color;\n return $isAlmostComplete ? green : red.light;\n }};\n display: flex;\n align-items: center;\n color: ${({ theme }) => theme.palette.common.white};\n\n a {\n text-decoration: underline;\n font-weight: 400;\n }\n`;\n\nexport const LeftContent = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n\nexport const Message = styled(Typography).attrs({ variant: 'caption' })`\n font-weight: 300;\n`;\n\nexport const CompletedTasks = styled(Typography).attrs({\n variant: 'caption',\n})``;\n","import ChevronRightRoundedIcon from '@material-ui/icons/ChevronRightRounded';\nimport React, { useContext } from 'react';\n\nimport { AuthContext } from '../../contexts/auth';\nimport { CurrentShiftDataContext } from '../../contexts/CurrentShiftData';\nimport { isSelfCare } from '../../contexts/permission';\nimport Button from '../StyledButton';\nimport { CompletedTasks, Container, LeftContent, Message } from './styles';\nimport { getTasksSummary } from './utils';\n\nconst ShiftHeaderNotification: React.FC<{ onFinishClick: () => void }> = ({\n onFinishClick,\n}) => {\n const { userInfo } = useContext(AuthContext);\n const { useEvent, useShiftQuestions } = useContext(CurrentShiftDataContext);\n const { byId: eventsById } = useEvent();\n const { byId: questionsById } = useShiftQuestions();\n\n const { total, completed } = getTasksSummary(eventsById, questionsById);\n const completedTasksInPercentage = Math.round((completed / total) * 100);\n\n return (\n <Container $isAlmostComplete={completedTasksInPercentage >= 80}>\n <LeftContent>\n <Message>\n O {isSelfCare(userInfo?.user) ? 'seu dia' : 'plantão'} termina em\n menos de 1 hora.\n </Message>\n {total ? (\n <CompletedTasks>{`${completed}/${total} (${completedTasksInPercentage}%) tarefas completas`}</CompletedTasks>\n ) : null}\n </LeftContent>\n <Button\n data-testid=\"notification-finish-button\"\n color=\"inherit\"\n variant=\"text\"\n size=\"small\"\n onClick={onFinishClick}\n endIcon={<ChevronRightRoundedIcon />}\n >\n FINALIZAR\n </Button>\n </Container>\n );\n};\n\nexport default React.memo(ShiftHeaderNotification);\n","import { EventModel } from '@cuidador/database';\nimport { NormalizedCareCategory } from '../../utils/shiftQuestion';\n\nexport const getTasksSummary = (\n events: Record<number | string, Partial<EventModel>>,\n questions: Record<number | string, Partial<NormalizedCareCategory>>\n) => {\n const data = { total: 0, completed: 0 };\n\n Object.values(events).reduce((prev, event) => {\n // ignores events which is not general and medication\n if (\n event?.subCategory?.categoryId !== 1 &&\n event?.subCategory?.categoryId !== 2\n ) {\n return prev;\n }\n prev.total += 1;\n // accomplished and not accomplished\n prev.completed += event.status !== 'awaiting' ? 1 : 0;\n return prev;\n }, data);\n\n Object.values(questions).reduce((prev, question) => {\n prev.total += question?.totalQuestions || 0;\n prev.completed += question?.totalAnswered || 0;\n return prev;\n }, data);\n\n return data;\n};\n","import getDiffInMs from 'date-fns/differenceInMilliseconds';\n\nexport const TIMER_IN_MS = 1000 * 60 * 60; // 1 hour\n\nexport const shouldShowNotification = (endTime?: string) =>\n endTime ? getDiffInMs(new Date(endTime), Date.now()) <= TIMER_IN_MS : false;\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport { CenterContainer, PhotoElement, Title } from './styles';\n\nimport { Avatar } from '@material-ui/core';\nimport getDiffInMs from 'date-fns/differenceInMilliseconds';\n\nimport { ShiftInProgressContext } from '../../../contexts/ShiftInProgress';\nimport usePatient from '../../../hooks/usePatient';\nimport FinishShiftConfirmDialog from '../../FinishShiftConfirmDialog';\nimport ShiftHeaderNotification from '../../ShiftHeaderNotification';\nimport { shouldShowNotification, TIMER_IN_MS } from './utils';\n\nimport HeaderWithDrawer from '../HeaderWithDrawer';\n\nconst PatientHeader: React.FC = () => {\n const [imageUrl, setImageUrl] = useState('');\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n const shiftEndingTimer = useRef<NodeJS.Timeout>();\n const [isFinishShiftDialogOpened, setIsFinishShiftDialogOpened] = useState(\n false\n );\n const [isShiftNotificationVisible, setIsShiftNotificationVisible] = useState(\n shouldShowNotification(shiftInProgress?.plannedToEndAt)\n );\n\n const name = shiftInProgress ? `${shiftInProgress?.patient?.name}` : 'Menu';\n const id = shiftInProgress?.patientId;\n\n const { getProfilePicture } = usePatient();\n\n const handleGetProfilePicture = async (id: number) => {\n try {\n return await getProfilePicture(id).then(({ data }) => data?.signedUrl);\n } catch (err) {}\n };\n\n useEffect(() => {\n async function fetchPatientProfilePicture() {\n const result = await handleGetProfilePicture(parseInt(`${id}`));\n if (result) {\n setImageUrl(result);\n }\n }\n\n fetchPatientProfilePicture();\n }, []);\n\n useEffect(\n function handleNotification() {\n if (shiftInProgress) {\n const { plannedToEndAt } = shiftInProgress;\n const diffInMs = getDiffInMs(new Date(plannedToEndAt!), Date.now());\n\n shiftEndingTimer.current = setTimeout(() => {\n setIsShiftNotificationVisible(true);\n }, diffInMs - TIMER_IN_MS);\n }\n return () => {\n if (shiftEndingTimer.current) {\n clearTimeout(shiftEndingTimer.current);\n setIsShiftNotificationVisible(false);\n }\n };\n },\n [shiftInProgress]\n );\n\n return (\n <>\n <HeaderWithDrawer\n centerContent={\n <CenterContainer>\n <PhotoElement>\n {<Avatar src={shiftInProgress ? imageUrl : ''} />}\n </PhotoElement>\n <Title align=\"center\" variant=\"h6\">\n {name}\n </Title>\n </CenterContainer>\n }\n />\n {isShiftNotificationVisible && (\n <>\n <ShiftHeaderNotification\n onFinishClick={() => setIsFinishShiftDialogOpened(true)}\n />\n <FinishShiftConfirmDialog\n opened={isFinishShiftDialogOpened}\n close={() => setIsFinishShiftDialogOpened(false)}\n />\n </>\n )}\n </>\n );\n};\n\nexport default PatientHeader;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n margin: ${({ theme }) => theme.spacing(2, 0)};\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\n\nexport const SubTitleContainer = styled.div`\n display: flex;\n flex-direction: row;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const IconContainer = styled.div`\n display: flex;\n align-items: center;\n margin-right: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const CardDiv = styled.div`\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n","export default __webpack_public_path__ + \"static/media/Icon-done.3d33e061.svg\";","export default __webpack_public_path__ + \"static/media/Icon-notdone.4c6fd7eb.svg\";","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.extra.color.green};\n padding: 0;\n`;\n","import { EventSubCategoryModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport CalendarIcon from '../../../../assets/Icon-coloredCalendar.svg';\nimport DoneIcon from '../../../../assets/Icon-done.svg';\nimport NotDoneIcon from '../../../../assets/Icon-notdone.svg';\nimport {\n CardFooter,\n CaregiverTypography,\n DescriptionContainer,\n LeftContainer,\n RightContainer,\n StatusContainer,\n TimerContainer,\n TypographyContainer,\n} from '../styles';\nimport { CardBox } from './styles';\n\ninterface CardProps {\n id?: number;\n name?: string;\n subCategory?: EventSubCategoryModel;\n eventHappensAt?: string;\n eventNotifiedAt?: string;\n description?: string;\n status?: string;\n comment?: string;\n updatedTimeHappensAt?: string | null;\n caregiverName?: string;\n}\n\nconst AppointmentCard: React.FC<CardProps> = ({\n id,\n name,\n subCategory,\n description,\n eventHappensAt,\n eventNotifiedAt,\n status,\n updatedTimeHappensAt,\n comment,\n caregiverName,\n}) => {\n const eventDate = updatedTimeHappensAt || eventHappensAt || eventNotifiedAt;\n const formattedDate = format(new Date(`${eventDate}`), 'HH:mm');\n return (\n <CardBox data-testid={`appointmentCard-${id}`}>\n <LeftContainer>\n <TimerContainer>\n <Typography variant=\"h6\">{formattedDate}</Typography>\n </TimerContainer>\n <img src={CalendarIcon} title={`appointment-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">\n {subCategory?.name} {name && `(${String(name).trim()})`}\n </Typography>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">{description}</Typography>\n {comment && (\n <Typography variant=\"subtitle2\">Obs: {comment}</Typography>\n )}\n </DescriptionContainer>\n </TypographyContainer>\n <CardFooter>\n {caregiverName ? (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n ) : (\n <div></div>\n )}\n <StatusContainer>\n {status == 'accomplished' ? (\n <img src={DoneIcon} title={'done-icon'} />\n ) : (\n <img src={NotDoneIcon} title={'not-done-icon'} />\n )}\n </StatusContainer>\n </CardFooter>\n </RightContainer>\n </CardBox>\n );\n};\n\nexport default AppointmentCard;\n","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.extra.color.red.light};\n padding: 0;\n`;\n\nexport const TypographyContainer = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n display: flex;\n flex-direction: column;\n\n width: 100%;\n word-wrap: break-word;\n margin: ${({ theme }) => theme.spacing(0, 2, 2, 2)};\n`;\n\nexport const TimerContainer = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n align-self: center;\n`;\n\nexport const LeftContainer = styled.div`\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n`;\n\nexport const DescriptionContainer = styled.div`\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const CaregiverTypography = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n font-size: 15px;\n font-weight: 600;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-top: auto;\n\n &::before {\n content: 'por ';\n font-weight: 400;\n }\n`;\n","import { EventSubCategoryModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport AlertIcon from '../../../../assets/Icon-alert.svg';\nimport {\n CardBox,\n CaregiverTypography,\n DescriptionContainer,\n LeftContainer,\n TimerContainer,\n TypographyContainer,\n} from './styles';\n\ninterface CardProps {\n id?: number;\n subCategory?: EventSubCategoryModel;\n eventHappensAt?: string | null;\n description?: string;\n comment?: string;\n caregiverName?: string;\n}\n\nconst ComplicationCard: React.FC<CardProps> = ({\n id,\n subCategory,\n description,\n eventHappensAt,\n comment,\n caregiverName,\n}) => {\n const formattedDate = eventHappensAt\n ? format(new Date(`${eventHappensAt}`), 'HH:mm')\n : '';\n return (\n <CardBox data-testid={`complicationCard-${id}`}>\n <LeftContainer>\n <TimerContainer>\n <Typography variant=\"h6\">{formattedDate}</Typography>\n </TimerContainer>\n <img src={AlertIcon} title={`complication-image-${id}`} />\n </LeftContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">{subCategory?.name}</Typography>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">{description}</Typography>\n {comment && (\n <Typography variant=\"subtitle2\">Obs: {comment}</Typography>\n )}\n </DescriptionContainer>\n {caregiverName ? (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n ) : (\n <div></div>\n )}\n </TypographyContainer>\n </CardBox>\n );\n};\n\nexport default ComplicationCard;\n","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.info.main};\n padding: 0;\n`;\nexport const StatusContainer = styled.div`\n display: flex;\n align-self: flex-end;\n align-items: initial;\n margin: ${({ theme }) => theme.spacing(0, 2, 1, 0)};\n & img {\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n }\n`;\n","import { MedicationModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport DoneIcon from '../../../../assets/Icon-done.svg';\nimport MedicationIcon from '../../../../assets/Icon-medication.svg';\nimport NotDoneIcon from '../../../../assets/Icon-notdone.svg';\nimport TimeColorIcon from '../../../../assets/Icon-time-color.svg';\nimport {\n handleFormatAdministeredBy,\n handleFormatDose,\n} from '../../../../utils/medication';\nimport {\n CardFooter,\n CaregiverTypography,\n DescriptionContainer,\n LeftContainer,\n RightContainer,\n TimerContainer,\n TypographyContainer,\n} from '../styles';\nimport { CardBox, StatusContainer } from './styles';\n\ninterface CardProps {\n id?: number;\n name?: string;\n dosageQuantity?: MedicationModel['dosageQuantity'];\n dosageFormat?: MedicationModel['dosageFormat'];\n administeredBy?: MedicationModel['administeredBy'];\n medicalNotes?: MedicationModel['medicalNotes'];\n eventNotifiedAt?: string;\n eventHappensAt?: string;\n status?: string;\n updatedTimeHappensAt?: string | null;\n comment?: string;\n caregiverName?: string;\n}\n\nconst MedicationCard: React.FC<CardProps> = ({\n id,\n name,\n dosageQuantity,\n dosageFormat,\n administeredBy,\n medicalNotes,\n eventHappensAt,\n status,\n updatedTimeHappensAt,\n comment,\n caregiverName,\n}) => {\n const eventDate = updatedTimeHappensAt || eventHappensAt;\n const formattedDate = format(new Date(`${eventDate}`), 'HH:mm');\n\n return (\n <CardBox data-testid={`medicationCard-${id}`}>\n <LeftContainer>\n <TimerContainer>\n <Typography variant=\"h6\">{formattedDate}</Typography>\n </TimerContainer>\n <img src={MedicationIcon} title={`medication-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">{name}</Typography>\n <Typography variant=\"subtitle2\">\n {dosageQuantity} {handleFormatDose(dosageFormat, dosageQuantity)}\n </Typography>\n <Typography variant=\"subtitle2\">\n Via: {handleFormatAdministeredBy(administeredBy)}\n </Typography>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">{medicalNotes}</Typography>\n {comment && (\n <Typography variant=\"subtitle2\">Obs: {comment}</Typography>\n )}\n </DescriptionContainer>\n </TypographyContainer>\n <CardFooter>\n {caregiverName ? (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n ) : (\n <div></div>\n )}\n <StatusContainer>\n {updatedTimeHappensAt && status === 'accomplished' && (\n <img src={TimeColorIcon} data-testid={`delayedIcon-${id}`} />\n )}\n {status == 'accomplished' ? (\n <img src={DoneIcon} title={'done-icon'} />\n ) : (\n <img src={NotDoneIcon} title={'not-done-icon'} />\n )}\n </StatusContainer>\n </CardFooter>\n </RightContainer>\n </CardBox>\n );\n};\n\nexport default MedicationCard;\n","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.extra.color.yellow};\n padding: 0;\n`;\n\nexport const TypographyContainer = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n display: flex;\n flex-direction: column;\n\n width: 100%;\n word-wrap: break-word;\n margin: ${({ theme }) => theme.spacing(0, 2, 2, 2)};\n`;\n\nexport const TimerContainer = styled.div`\n color: ${({ theme }) => theme.palette.common.white};\n align-self: center;\n`;\n\nexport const LeftContainer = styled.div`\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n`;\n\nexport const DescriptionContainer = styled.div`\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const StatusContainer = styled.div`\n display: flex;\n align-self: flex-end;\n margin: ${({ theme }) => theme.spacing(0, 2, 1, 0)};\n`;\n","import { EventSubCategoryModel, MeasurementModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport MesurementIcon from '../../../../assets/Icon-measurement.svg';\nimport { getMeasurementUnit } from '../../../CurrentShiftEventList/CurrentShiftCards/MeasurementCard/utils';\nimport { CardFooter, CaregiverTypography, RightContainer } from '../styles';\nimport {\n CardBox,\n DescriptionContainer,\n LeftContainer,\n TimerContainer,\n TypographyContainer,\n} from './styles';\n\ninterface CardProps {\n id?: number;\n subCategory?: EventSubCategoryModel;\n measurement?: MeasurementModel;\n eventHappensAt?: string;\n eventNotifiedAt?: string;\n description?: string;\n status?: string;\n comment?: string;\n caregiverName?: string;\n}\n\nconst MesurementCard: React.FC<CardProps> = ({\n id,\n subCategory,\n measurement,\n description,\n eventHappensAt,\n eventNotifiedAt,\n comment,\n caregiverName,\n}) => {\n const formattedDate = eventHappensAt\n ? format(new Date(`${eventHappensAt}`), 'HH:mm')\n : format(new Date(`${eventNotifiedAt}`), 'HH:mm');\n return (\n <CardBox data-testid={`measurementCard-${id}`}>\n <LeftContainer>\n <TimerContainer>\n <Typography variant=\"h6\">{formattedDate}</Typography>\n </TimerContainer>\n <img src={MesurementIcon} title={`measurement-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">{subCategory?.name}</Typography>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">\n Valores medidos: {measurement?.measurementValue}{' '}\n {getMeasurementUnit(subCategory?.id)}\n </Typography>\n </DescriptionContainer>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">{description}</Typography>\n {comment && (\n <Typography variant=\"subtitle2\">Obs: {comment}</Typography>\n )}\n </DescriptionContainer>\n </TypographyContainer>\n <CardFooter>\n {caregiverName ? (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n ) : (\n <div></div>\n )}\n </CardFooter>\n </RightContainer>\n </CardBox>\n );\n};\n\nexport default MesurementCard;\n","export default __webpack_public_path__ + \"static/media/Icon-watch.ffb4561b.svg\";","import styled from 'styled-components';\nimport StyledPaper from '../../../StyledPaper';\n\nexport const CardBox = styled(StyledPaper)`\n width: 100%;\n display: flex;\n margin: 0;\n min-height: 120px;\n background-color: ${({ theme }) => theme.palette.extra.color.ocean};\n padding: 0;\n`;\n","import { EventSubCategoryModel } from '@cuidador/database';\nimport Typography from '@material-ui/core/Typography';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport DoneIcon from '../../../../assets/Icon-done.svg';\nimport NotDoneIcon from '../../../../assets/Icon-notdone.svg';\nimport ClockIcon from '../../../../assets/Icon-watch.svg';\nimport {\n CardFooter,\n CaregiverTypography,\n DescriptionContainer,\n LeftContainer,\n RightContainer,\n StatusContainer,\n TimerContainer,\n TypographyContainer,\n} from '../styles';\nimport { CardBox } from './styles';\n\ninterface CardProps {\n id?: number;\n name?: string;\n subCategory?: EventSubCategoryModel;\n eventHappensAt?: string;\n eventNotifiedAt?: string;\n description?: string;\n status?: string;\n updatedTimeHappensAt?: string | null;\n comment?: string;\n caregiverName?: string;\n}\n\nconst RoutineCard: React.FC<CardProps> = ({\n id,\n name,\n subCategory,\n description,\n eventHappensAt,\n eventNotifiedAt,\n status,\n updatedTimeHappensAt,\n comment,\n caregiverName,\n}) => {\n const eventDate = updatedTimeHappensAt || eventHappensAt || eventNotifiedAt;\n const formattedDate = format(new Date(`${eventDate}`), 'HH:mm');\n\n return (\n <CardBox data-testid={`routineCard-${id}`}>\n <LeftContainer>\n <TimerContainer>\n <Typography variant=\"h6\">{formattedDate}</Typography>\n </TimerContainer>\n <img src={ClockIcon} title={`routine-image-${id}`} />\n </LeftContainer>\n <RightContainer>\n <TypographyContainer>\n <Typography variant=\"h6\">\n {subCategory?.name} {name && `(${String(name).trim()})`}\n </Typography>\n <DescriptionContainer>\n <Typography variant=\"subtitle2\">{description}</Typography>\n {comment && (\n <Typography variant=\"subtitle2\">Obs: {comment}</Typography>\n )}\n </DescriptionContainer>\n </TypographyContainer>\n <CardFooter>\n {caregiverName ? (\n <CaregiverTypography>{caregiverName}</CaregiverTypography>\n ) : (\n <div></div>\n )}\n <StatusContainer>\n {status == 'accomplished' ? (\n <img src={DoneIcon} title={'done-icon'} />\n ) : (\n <img src={NotDoneIcon} title={'not-done-icon'} />\n )}\n </StatusContainer>\n </CardFooter>\n </RightContainer>\n </CardBox>\n );\n};\n\nexport default RoutineCard;\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\n\nexport const categoryIdMapper = {\n GENERAL: 1,\n MEDICATION: 2,\n COMPLICATION: 3,\n MEASUREMENT: 4,\n};\n\nexport const separateComplicationsFromActivities = (\n shiftEvents: EventModel[] | undefined\n) => {\n if (!shiftEvents || shiftEvents.length === 0)\n return {\n complicationEvents: [],\n eventsWithoutComplications: [],\n };\n\n const complicationEvents = shiftEvents.filter((event) => {\n const subCategory = event.subCategory as EventSubCategoryModel;\n return subCategory.categoryId === categoryIdMapper['COMPLICATION'];\n });\n const eventsWithoutComplications = shiftEvents.filter((event) => {\n const subCategory = event.subCategory as EventSubCategoryModel;\n return subCategory.categoryId !== categoryIdMapper['COMPLICATION'];\n });\n\n return { complicationEvents, eventsWithoutComplications };\n};\n","import { EventModel, EventSubCategoryModel } from '@cuidador/database';\nimport { Typography } from '@material-ui/core';\nimport RightIcon from '@material-ui/icons/ChevronRight';\nimport React from 'react';\nimport { CardDiv, Container, IconContainer, SubTitleContainer } from './styles';\nimport AppointmentCard from './LastShiftCards/AppointmentCard';\nimport ComplicationCard from './LastShiftCards/ComplicationCard';\nimport MedicationCard from './LastShiftCards/MedicationCard';\nimport ScheduledMeasurementCard from './LastShiftCards/ScheduledMeasurementCard';\nimport MeasurementCard from './LastShiftCards/MeasurementCard';\nimport { FormattedEvents } from '../CurrentShiftEventList';\nimport RoutineCard from './LastShiftCards/RoutineCard';\nimport { categoryIdMapper } from './utils';\n\nexport type ShiftEventListProps = {\n events: EventModel[];\n title: string;\n};\n\nconst ShiftEventList: React.FC<ShiftEventListProps> = ({ events, title }) => {\n const RenderActivityCardByEvent = (event: FormattedEvents) => {\n const subCategory = event.subCategory as EventSubCategoryModel;\n switch (subCategory.categoryId) {\n case categoryIdMapper['MEDICATION']:\n return (\n <CardDiv key={event.id}>\n <MedicationCard\n id={event.id}\n status={event.status}\n name={subCategory.name}\n dosageFormat={event.medication?.dosageFormat}\n dosageQuantity={event.medication?.dosageQuantity}\n administeredBy={event.medication?.administeredBy}\n medicalNotes={event.medication?.medicalNotes}\n eventNotifiedAt={event.eventNotifiedAt}\n eventHappensAt={event.eventHappensAt}\n updatedTimeHappensAt={event.updatedTimeHappensAt || undefined}\n comment={event.comment}\n caregiverName={event.caregiver?.user?.name}\n />\n </CardDiv>\n );\n case categoryIdMapper['COMPLICATION']:\n return (\n <CardDiv key={event.id}>\n <ComplicationCard\n {...event}\n caregiverName={event.caregiver?.user?.name}\n />\n </CardDiv>\n );\n case categoryIdMapper['GENERAL']:\n if (subCategory.isRoutine) {\n return (\n <CardDiv key={event.id}>\n <RoutineCard\n {...event}\n caregiverName={event.caregiver?.user?.name}\n />\n </CardDiv>\n );\n } else\n return (\n <CardDiv key={event.id}>\n <AppointmentCard\n {...event}\n caregiverName={event.caregiver?.user?.name}\n />\n </CardDiv>\n );\n case categoryIdMapper['MEASUREMENT']:\n if (event.scheduledMeasurements) {\n const key = `schedule-\n ${event.scheduledMeasurements[0]?.eventScheduleId}-${event.scheduledMeasurements?.[0]?.id}`;\n return (\n <CardDiv key={key}>\n <ScheduledMeasurementCard\n readonly={true}\n scheduledMeasurements={event.scheduledMeasurements}\n caregiverName={event.caregiver?.user?.name}\n />\n </CardDiv>\n );\n } else {\n return (\n <CardDiv key={event.id}>\n <MeasurementCard\n {...event}\n caregiverName={event.caregiver?.user?.name}\n />\n </CardDiv>\n );\n }\n default:\n return <></>;\n }\n };\n\n return (\n <Container>\n {/* Activities */}\n {events.length > 0 && (\n <>\n <SubTitleContainer>\n <IconContainer>\n <RightIcon />\n </IconContainer>\n <Typography variant=\"h6\">{title}</Typography>\n </SubTitleContainer>\n {events.map((event) => {\n return RenderActivityCardByEvent(event);\n })}\n </>\n )}\n </Container>\n );\n};\n\nexport default ShiftEventList;\n","import { ShiftModel } from '@cuidador/database';\nimport { useCallback, useReducer } from 'react';\nimport { getCachedAxios } from '../config/axios';\nimport { createReducer, Item, ReducerData } from '../utils/store/index';\n\nconst endpoint = '/care/lastshift/by-patient';\n\nconst initialData: ReducerData<ShiftModel> = {\n byId: {} as Record<string, Item<ShiftModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useLastShift = () => {\n const [state, dispatch] = useReducer(\n createReducer<ShiftModel>(),\n initialData\n );\n\n const getByPatientId = useCallback(async (patientId: number) => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(`${endpoint}/${patientId}`);\n dispatch({ type: 'GET_BY_ID', payload: response.data });\n return response.data as ShiftModel;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n }\n }, []);\n\n return {\n ...state,\n getByPatientId,\n };\n};\n\nexport default useLastShift;\n","import {\n Backdrop as MaterialBackdrop,\n CircularProgress as MaterialCircularProgress,\n Typography,\n} from '@material-ui/core';\nimport styled from 'styled-components';\nimport StyledButton from '../../components/StyledButton';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n display: flex;\n flex-direction: column;\n flex: 1;\n padding-bottom: ${({ theme }) => theme.spacing(10)}px;\n margin: ${({ theme }) => theme.spacing(4, 0, 0, 0)};\n`;\n\nexport const ShiftHeader = styled.div`\n margin: ${({ theme }) => theme.spacing(0, 0, 4, 0)};\n text-align: center;\n`;\n\nexport const Title = styled(Typography).attrs({\n variant: 'h5',\n align: 'center',\n})`\n color: ${({ theme }) => theme.palette.primary.dark};\n margin: ${({ theme }) => theme.spacing(3)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n`;\n\nexport const TitleContainer = styled.div`\n margin-left: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n text-align: left;\n padding-bottom: ${({ theme }) => theme.spacing(2)}px;\n border-bottom: 1px solid ${({ theme }) => theme.palette.primary.main};\n\n div {\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n }\n`;\n\nexport const Backdrop = styled(MaterialBackdrop)`\n z-index: ${({ theme }) => theme.zIndex.drawer + 1};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n position: absolute;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n\nexport const ButtonBottomContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: ${({ theme }) => theme.spacing(9)}px;\n position: fixed;\n bottom: 0;\n`;\n\nexport const Button = styled(StyledButton)`\n color: ${({ theme }) => theme.palette.info.dark};\n background-color: ${({ theme }) => theme.palette.common.white};\n border-color: ${({ theme }) => theme.palette.info.dark};\n font-size: ${({ theme }) => theme.typography.h6.fontSize};\n font-weight: 400;\n transition: 0.3s;\n\n &:hover {\n background-color: ${({ theme }) => theme.palette.common.white};\n color: ${({ theme }) => theme.palette.info.dark};\n opacity: 85%;\n }\n`;\n","import {\n EventModel,\n ExecutionMessage,\n ExecutionMessageModel,\n} from '@cuidador/database';\nimport { Typography } from '@material-ui/core';\nimport { format } from 'date-fns';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport { formatEvents } from '../../components/CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/utils';\nimport ExecutionMessageCard from '../../components/ExecutionMessageCard';\nimport PatientHeader from '../../components/Headers/PatientHeader';\nimport ShiftEventList from '../../components/ShiftEventList';\nimport { separateComplicationsFromActivities } from '../../components/ShiftEventList/utils';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\nimport useLastShift from '../../hooks/useLastShift';\nimport {\n Backdrop,\n BackdropCircularProgress,\n Button,\n ButtonBottomContainer,\n Container,\n ShiftHeader,\n Title,\n TitleContainer,\n} from './styles';\n\nconst LastShift: React.FC = () => {\n const [lastShiftEvents, setLastShiftEvents] = useState<EventModel[]>([]);\n const [lastShiftMessages, setLastShiftMessages] = useState<\n ExecutionMessageModel[]\n >([]);\n const [lastShiftFormattedDate, setLastShiftFormattedDate] = useState('');\n const [loading, setLoading] = useState(false);\n\n const { getByPatientId: getLastShiftByPatientId } = useLastShift();\n\n const history = useHistory();\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n\n const handleNextRedirect = () => {\n history.push(`/plantao/cuidar-do-cuidador/inicio`);\n };\n\n const showError = () =>\n toast.error(\n 'Erro ao carregar eventos do último plantão. Tente novamente daqui a pouco'\n );\n\n async function loadPageData() {\n try {\n setLoading(true);\n const patientId = Number(shiftInProgress!.patientId);\n const lastShift = await getLastShiftByPatientId(patientId);\n if (lastShift) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setLastShiftMessages(lastShift.messages as ExecutionMessageModel[]);\n setLastShiftEvents(lastShift.events as EventModel[]);\n setLastShiftFormattedDate(\n format(new Date(lastShift.plannedToStartAt || ''), 'dd/MM/yyyy')\n );\n } else {\n handleNextRedirect();\n }\n } catch (err) {\n console.log(err);\n showError();\n } finally {\n setLoading(false);\n }\n }\n\n useEffect(() => {\n loadPageData();\n }, []);\n\n const {\n complicationEvents,\n eventsWithoutComplications,\n } = separateComplicationsFromActivities(lastShiftEvents);\n\n const formattedEventsWithoutComplications = useMemo(\n () => formatEvents(eventsWithoutComplications),\n [lastShiftEvents]\n );\n\n return (\n <>\n <Backdrop open={loading}>\n {loading && (\n <BackdropCircularProgress data-testid=\"table-backdrop-spinner\" />\n )}\n </Backdrop>\n {/* Cached only GET signed URL */}\n <PatientHeader />\n <Container>\n <ShiftHeader>\n <Title>{'Veja o que aconteceu na última rotina de cuidado'}</Title>\n <Typography variant=\"subtitle1\">\n Realizado em <b>{lastShiftFormattedDate}</b>\n </Typography>\n </ShiftHeader>\n {!!complicationEvents && complicationEvents.length > 0 && (\n <ShiftEventList\n events={complicationEvents || []}\n title=\"Intercorrências\"\n />\n )}\n {!!formattedEventsWithoutComplications &&\n formattedEventsWithoutComplications.length > 0 ? (\n <ShiftEventList\n events={formattedEventsWithoutComplications || []}\n title=\"Atividades\"\n />\n ) : (\n <TitleContainer>\n <Typography variant=\"h6\">\n Nenhum evento registrado no plantão.\n </Typography>\n </TitleContainer>\n )}\n {lastShiftMessages && lastShiftMessages.length > 0 && (\n <>\n <TitleContainer>\n <Typography variant=\"h6\">\n Anotações e evolução do plantão\n </Typography>\n {lastShiftMessages.map((message, index) => (\n <ExecutionMessageCard\n executionMessage={message as ExecutionMessage}\n key={`execution-message-card-${index}`}\n data-testid={`execution-message-card-${index}`}\n />\n ))}\n </TitleContainer>\n </>\n )}\n </Container>\n <ButtonBottomContainer>\n <Button onClick={handleNextRedirect}>Próximo</Button>\n </ButtonBottomContainer>\n </>\n );\n};\n\nexport default LastShift;\n","export default __webpack_public_path__ + \"static/media/senior-background.2e80d736.png\";","import { clientSideScheme } from '@cuidador/whitelabel';\nimport styled from 'styled-components';\nimport BackgroundImage from '../../assets/senior-background.png';\nimport TextField from '../../components/StyledTextField';\n\nexport const Background = styled.div`\n height: 100%;\n min-height: 100vh;\n width: 100vw;\n background-image: ${`url(${BackgroundImage})`};\n background-size: cover;\n background-position: center;\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: 0.13;\n`;\n\nexport const BackgroundOverlay = styled.section`\n height: 100vh;\n background: linear-gradient(\n 180deg,\n ${(props) => props.theme.palette.primary.main} 0%,\n ${(props) => props.theme.palette.secondary.main} 100%\n );\n display: flex;\n justify-content: center;\n position: absolute;\n z-index: 9;\n`;\n\nexport const OutterContainer = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n\n @media (max-height: 675px) {\n form {\n .MuiButton-root {\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n }\n }\n\n a {\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n }\n\n img {\n max-height: 95px;\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n }\n\n p:last-child {\n position: inherit;\n }\n\n section {\n height: 200%;\n }\n\n section > div {\n height: 100%;\n }\n }\n`;\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 80%;\n max-width: 500px;\n color: white;\n padding: 0px ${({ theme }) => theme.spacing(2)}px;\n\n z-index: 10;\n\n img {\n width: 100%;\n margin-bottom: ${({ theme }) => theme.spacing(6)}px;\n }\n\n form {\n display: flex;\n flex-direction: column;\n align-items: center;\n max-width: 100%;\n text-align: center;\n justify-content: center;\n align-items: center;\n\n .MuiButton-root {\n margin-top: ${({ theme }) => theme.spacing(4)}px;\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n }\n }\n\n a {\n font-size: 14px;\n color: white;\n margin-bottom: ${({ theme }) => theme.spacing(6)}px;\n }\n`;\n\nexport const StyledTextField = styled(TextField).attrs({ variant: 'outlined' })`\n & label:not(.Mui-error) {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & input {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & textarea {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & .MuiInputAdornment-root .MuiIconButton-label {\n color: ${({ theme }) => theme.palette.common.white};\n }\n & .MuiOutlinedInput-root:not(.Mui-error) {\n & fieldset {\n border-color: ${({ theme }) => theme.palette.common.white};\n color: ${({ theme }) => theme.palette.common.white};\n }\n &:hover fieldset {\n border-color: ${({ theme }) => theme.palette.common.white};\n color: ${({ theme }) => theme.palette.common.white};\n }\n &.Mui-focused fieldset {\n border-color: ${({ theme }) => theme.palette.common.white};\n color: ${({ theme }) => theme.palette.common.white};\n }\n }\n`;\n\nexport const TypographyContainer = styled.div`\n max-width: 100%;\n text-align: center;\n`;\n\nexport const Logo = styled.img.attrs(() => {\n const { logoLightUrl } = clientSideScheme();\n return { src: logoLightUrl };\n})`\n margin: ${({ theme }) => theme.spacing(0, 2, 0)};\n`;\n","import * as yup from 'yup';\nimport { validateCpf } from '../../utils/inputs'\n\nexport const validationSchema = yup.object().shape({\n cpf: yup.string().required('CPF é obrigatório')\n .test('isCpfValid', 'Por favor, insira um CPF válido', (value) =>\n validateCpf(value || '')\n ),\n password: yup\n .string()\n .min(8, 'A senha deve conter pelo menos 8 caracteres')\n .required('Senha é obrigatória'),\n});\n\nexport const formInitialValues = {\n cpf: '',\n password: '',\n};\n\nexport interface FormValues {\n cpf: string;\n password: string;\n}\n","import IconButton from '@material-ui/core/IconButton';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport Typography from '@material-ui/core/Typography';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\nimport { Form, Formik, FormikHelpers, FormikProps } from 'formik';\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport { Link, useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\n\nimport MadeBy from '../../components/MadeBy';\nimport Button from '../../components/StyledButton';\nimport { AuthContext } from '../../contexts/auth';\nimport { resolveErrorMessage } from '../../utils/error';\nimport { cpfMask, nonAlphanumericString } from '../../utils/inputs';\n\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport {\n Background,\n BackgroundOverlay,\n Container,\n Logo,\n OutterContainer,\n StyledTextField,\n TypographyContainer,\n} from './styles';\nimport { formInitialValues, FormValues, validationSchema } from './utils';\n\nconst Login: React.FC = () => {\n const [showPassword, setShowPassword] = useState(false);\n const [redirect, setRedirect] = useState(false);\n const formikRef = useRef<FormikProps<FormValues> | null>();\n const history = useHistory()\n\n const { signIn, error, loading } = useContext(AuthContext);\n\n useEffect(() => {\n if (error) {\n if (error.response?.data.message === 'Wrong credentials') {\n toast.dismiss();\n toast.error(\n 'Identificação e/ou senha não reconhecidos. Se você for gestor, verifique se o link está correto.'\n );\n formikRef.current?.setFieldError(\n 'password',\n 'Senha incorreta ou usuário não encontrado'\n );\n } else {\n toast.error(resolveErrorMessage(error));\n }\n }\n }, [error]);\n\n useEffect(() => {\n if (!error && redirect) {\n history.replace('/gestao/pacientes')\n }\n }, [redirect])\n\n const handleSubmit = async (\n values: FormValues,\n { setSubmitting }: FormikHelpers<FormValues>\n ) => {\n const formattedCpf = nonAlphanumericString(values.cpf);\n setSubmitting(true);\n await signIn(formattedCpf, values.password).then(() => setRedirect(true))\n };\n\n const handleShowPassword = () => setShowPassword(!showPassword);\n\n return (\n <OutterContainer>\n <LoadingBackdrop loading={Boolean(loading)} />\n <Container>\n <Logo />\n <TypographyContainer>\n <Typography>Insira as informações para acessar sua conta!</Typography>\n </TypographyContainer>\n <Formik\n innerRef={(ref) => (formikRef.current = ref)}\n initialValues={formInitialValues}\n validationSchema={validationSchema}\n onSubmit={handleSubmit}\n >\n {(formik) => (\n <Form>\n <StyledTextField\n name=\"cpf\"\n label=\"CPF\"\n type=\"tel\" // numeric keyboard without parsing to number\n value={cpfMask(formik.values.cpf)}\n onChange={formik.handleChange}\n error={Boolean(formik.errors.cpf)}\n helperText={formik.errors.cpf}\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'cpf' }}\n />\n <StyledTextField\n name=\"password\"\n type={showPassword ? 'text' : 'password'}\n label=\"Senha\"\n value={formik.values.password}\n onChange={formik.handleChange}\n error={Boolean(formik.errors.password)}\n helperText={formik.errors.password}\n margin=\"normal\"\n fullWidth\n inputProps={{ 'data-testid': 'password' }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={handleShowPassword}\n >\n {showPassword ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n <Button\n data-testid=\"submit\"\n size=\"large\"\n color=\"inherit\"\n type=\"submit\"\n disabled={formik.isSubmitting}\n >\n Entrar\n </Button>\n </Form>\n )}\n </Formik>\n <Link to=\"/esqueci-minha-senha\">Esqueci minha senha</Link>\n <MadeBy mainColor=\"white\" />\n </Container>\n <BackgroundOverlay>\n <Background />\n </BackgroundOverlay>\n </OutterContainer>\n );\n};\n\nexport default Login;\n","import { useCallback, useReducer } from 'react';\nimport { getCachedAxios } from '../config/axios';\nimport { MotivationalMessageModel } from '@cuidador/database';\nimport { createReducer, ReducerData, Item } from '../utils/store/index';\n\nconst endpoint = '/care/motivational-message';\n\nconst initialData: ReducerData<MotivationalMessageModel> = {\n byId: {} as Record<string, Item<MotivationalMessageModel>>,\n ids: [] as Array<number>,\n total: 0,\n loading: false,\n error: null,\n};\n\nconst useMotivationalMessage = () => {\n const [state, dispatch] = useReducer(\n createReducer<MotivationalMessageModel>(),\n initialData\n );\n\n const getOne = useCallback(async () => {\n try {\n dispatch({ type: 'LOADING' });\n const response = await getCachedAxios().get(`${endpoint}`);\n dispatch({ type: 'GET_BY_ID', payload: response.data });\n return response.data;\n } catch (err) {\n dispatch({ type: 'ERROR', payload: err });\n throw err;\n }\n }, []);\n\n return {\n ...state,\n getOne,\n };\n};\n\nexport default useMotivationalMessage;\n","import { clientSideScheme } from '@cuidador/whitelabel';\nimport styled from 'styled-components';\nimport StyledButton from '../../components/StyledButton';\n\nexport const OutterContainer = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n`;\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n height: 100%;\n color: white;\n padding: ${({ theme }) => theme.spacing(1)}px\n ${({ theme }) => theme.spacing(4)}px;\n`;\n\nexport const MotivationalMessageCard = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n color: white;\n text-align: center;\n background-color: ${({ theme }) => theme.palette.secondary.dark};\n border-radius: 13px;\n margin: ${({ theme }) => theme.spacing(2)}px 0;\n padding: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const MotivationalMessageLine = styled.div`\n margin: ${({ theme }) => theme.spacing(0.5)}px 0;\n`;\n\nexport const FooterContent = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nexport const Button = styled(StyledButton)`\n color: ${({ theme }) => theme.palette.info.dark};\n border-color: ${({ theme }) => theme.palette.info.dark};\n font-size: ${({ theme }) => theme.typography.h6.fontSize};\n font-weight: 400;\n`;\n\nexport const Logo = styled.img.attrs(() => {\n const { logoDarkUrl } = clientSideScheme();\n return { src: logoDarkUrl };\n})`\n padding-top: ${({ theme }) => theme.spacing(5)}px;\n padding-bottom: ${({ theme }) => theme.spacing(1)}px;\n width: 100%;\n max-height: 21px;\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport Header from '../../components/Headers/Header';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport useMotivationalMessage from '../../hooks/useMotivationalMessage';\n\nimport {\n Button,\n Container,\n FooterContent,\n Logo,\n MotivationalMessageCard,\n MotivationalMessageLine,\n OutterContainer,\n} from './styles';\n\nconst MotivationalMessage: React.FC = () => {\n const [messageLines, setMessageLines] = useState(['']);\n const { getOne, loading } = useMotivationalMessage();\n const history = useHistory();\n\n useEffect(() => {\n getOne()\n .then((messageData) => {\n return breakMessageLines(messageData.message!);\n })\n .then((lines) => setMessageLines(lines))\n .catch(() =>\n toast.error('Erro ao buscar mensagem, tente novamente daquia a pouco.')\n );\n }, []);\n\n const breakMessageLines = (message: string) => {\n const formattedMessage = message.split('\\n');\n return formattedMessage;\n };\n\n const handleClick = () => {\n history.push(`/plantao`);\n };\n\n if (loading) {\n return <LoadingBackdrop loading={loading} />;\n }\n\n return (\n <OutterContainer>\n <Header\n title=\"Mensagem do dia\"\n leftButtonType=\"goBack\"\n rightButtonType=\"phone\"\n />\n <Container>\n <MotivationalMessageCard>\n {messageLines.map((message) => {\n return (\n <>\n <MotivationalMessageLine>{message}</MotivationalMessageLine>\n </>\n );\n })}\n </MotivationalMessageCard>\n\n <FooterContent>\n <Button onClick={handleClick}>Próximo</Button>\n <Logo />\n </FooterContent>\n </Container>\n </OutterContainer>\n );\n};\n\nexport default MotivationalMessage;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_6780_1074)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.75 4.375C1.75 3.4125 2.5375 2.625 3.5 2.625H4.375V0.875H6.125V2.625H14.875V0.875H16.625V2.625H17.5C18.4625 2.625 19.25 3.4125 19.25 4.375V18.375C19.25 19.3375 18.4625 20.125 17.5 20.125H3.5C2.5375 20.125 1.75 19.3375 1.75 18.375V4.375ZM3.5 18.375H17.5V8.75H3.5V18.375ZM3.5 7H17.5V4.375H3.5V7Z\",\n fill: \"white\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_6780_1074\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 21,\n height: 21,\n fill: \"white\"\n})));\n\nfunction SvgCalendarIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 21,\n height: 21,\n viewBox: \"0 0 21 21\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2, _ref3);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCalendarIcon);\nexport default __webpack_public_path__ + \"static/media/calendar-icon.4f48007e.svg\";\nexport { ForwardRef as ReactComponent };","import { css } from 'styled-components';\n\nexport const ButtonContainerBaseStyles = css`\n padding: ${({ theme }) => theme.spacing(0.5, 0.1)};\n min-width: 35px;\n min-height: 35px;\n margin-inline: ${({ theme }) => theme.spacing(1)}px;\n\n svg path {\n stroke: ${({ theme }) => theme.palette.primary.dark};\n }\n`;\n","import styled from 'styled-components';\nimport { ButtonContainerBaseStyles } from '../styles';\n\nexport const ButtonContainer = styled.div`\n button,\n button:hover,\n path[fill-rule='evenodd'],\n button:hover path[fill-rule='evenodd'] {\n background-color: ${({ theme }) => theme.palette.primary.light};\n stroke: none;\n ${ButtonContainerBaseStyles}\n min-width: 70px;\n\n span {\n padding: ${({ theme }) => theme.spacing(0, 0.7)};\n padding-left: ${({ theme }) => theme.spacing(0.35)}px;\n font-weight: bold;\n }\n\n svg {\n padding: ${({ theme }) => theme.spacing(0, 0.7)};\n padding-right: ${({ theme }) => theme.spacing(0.35)}px;\n }\n }\n`;\n","import { Button } from '@material-ui/core';\nimport React from 'react';\nimport { ReactComponent as CalendarIcon } from '../../../../assets/calendar-icon.svg';\nimport { ButtonContainer } from './styles';\n\ninterface ShiftCalendarButtonProps {\n onClick?: () => void;\n}\n\nconst ShiftCalendarButton: React.FC<ShiftCalendarButtonProps> = ({\n onClick,\n}) => {\n return (\n <ButtonContainer onClick={onClick} data-testid=\"shift-schedule-button\">\n <Button\n aria-controls=\"button-menu\"\n aria-haspopup=\"true\"\n variant=\"contained\"\n color=\"primary\"\n >\n <CalendarIcon />\n <span>Plantões</span>\n </Button>\n </ButtonContainer>\n );\n};\n\nexport default ShiftCalendarButton;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const CardBox = styled.div`\n background-color: ${(props) => props.theme.palette.common.white};\n display: grid;\n grid-template-columns: 2fr repeat(2, auto);\n align-items: center;\n justify-content: space-between;\n min-height: ${({ theme }) => theme.spacing(8)}px;\n box-sizing: border-box;\n width: 100%;\n`;\n\nexport const PatientInfoContainer = styled.div`\n max-width: 400px;\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nexport const InfoContainer = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: ${({ theme }) => theme.spacing(1.5)}px;\n margin-right: ${({ theme }) => theme.spacing(1.5)}px;\n width: 100%;\n`;\n\nexport const Info = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n font-size: clamp(0.95rem, 75%, 2rem);\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n`;\n","import { PatientModel } from '@cuidador/database';\nimport { Avatar } from '@material-ui/core';\nimport React, { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport userBaseImage from '../../assets/user.png';\nimport useCanAccess from '../../hooks/useCanAccess';\nimport usePatient from '../../hooks/usePatient';\nimport { resolveErrorMessage } from '../../utils/error';\nimport ShiftCalendarButton from './Buttons/ShiftCalendarButton';\nimport { CardBox, Info, InfoContainer, PatientInfoContainer } from './styles';\nimport { formatDifferenceInYears } from './utils';\n\ninterface Props {\n patient: PatientModel;\n}\n\nconst PatientCardItem: React.FC<Props> = ({ patient }: Props) => {\n const history = useHistory();\n const [imageUrl, setImageUrl] = useState('');\n const { getProfilePicture } = usePatient();\n\n const { isAllowedToRead: isAllowedToReadProfilePicture } = useCanAccess(\n 'media/profile-picture'\n );\n\n const handleRedirectToPatientShiftCalendar = () => {\n history.push(`/agenda-de-plantoes/${patient.id}`);\n };\n\n const handleGetProfilePicture = async (id: number) => {\n if (isAllowedToReadProfilePicture) {\n try {\n return await getProfilePicture(id).then(({ data }) => data?.signedUrl);\n } catch (err) {\n const displayMessage = resolveErrorMessage(err);\n if (displayMessage !== 'Arquivo não encontrado.') {\n toast.error(displayMessage);\n }\n }\n }\n };\n\n const fetchPatientProfilePicture = async () => {\n const result = await handleGetProfilePicture(parseInt(`${patient.id}`));\n if (result) {\n setImageUrl(result);\n } else {\n setImageUrl(userBaseImage);\n }\n };\n\n useEffect(() => {\n fetchPatientProfilePicture();\n }, []);\n\n return (\n <CardBox>\n <PatientInfoContainer data-testid={`patientCardItem-${patient.id}`}>\n <Avatar src={imageUrl} alt={patient.name} data-testid=\"avatar\" />\n <InfoContainer>\n <Info>{patient.name}</Info>\n <Info>{formatDifferenceInYears(patient.dateOfBirth)} anos</Info>\n </InfoContainer>\n </PatientInfoContainer>\n <ShiftCalendarButton onClick={handleRedirectToPatientShiftCalendar} />\n </CardBox>\n );\n};\n\nexport default PatientCardItem;\n","import { differenceInYears } from 'date-fns';\n\nexport const formatDifferenceInYears = (dateOfBirth?: string) => {\n return differenceInYears(new Date(), new Date(dateOfBirth || ''));\n};\n","import { InputBase } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const StyledInput = styled(InputBase)`\n margin-bottom: ${({ theme }) => theme.spacing(2.5)}px;\n margin-top: ${({ theme }) => theme.spacing(1.5)}px;\n color: ${({ theme }) => theme.palette.primary.main};\n background-color: ${({ theme }) => theme.palette.common.white};\n padding: ${({ theme }) => theme.spacing(1, 1)};\n border-radius: 9px;\n border: 1px solid ${({ theme }) => theme.palette.primary.main};\n max-width: 100%;\n\n input {\n font-size: ${({ theme }) => theme.spacing(2)}px;\n padding: ${({ theme }) => theme.spacing(0, 1)};\n }\n\n .MuiInputAdornment-positionEnd {\n margin: 0;\n }\n`;\n","import React from 'react';\nimport { InputAdornment } from '@material-ui/core';\nimport { Search } from '@material-ui/icons';\nimport { useDebouncedCallback } from 'use-debounce';\nimport qs from 'query-string';\n\nimport { StyledInput } from './styles';\nimport { useHistory } from 'react-router-dom';\n\ntype SearchTextFieldProps = {\n fieldName: string;\n onChange?: (\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => void;\n onChangeDebounced?: (value: string) => void;\n};\n\nconst getSearchValueFromUrl = (url: string) => url.replace(/^\\%|\\%$/g, '');\n\nconst SearchTextField: React.FC<SearchTextFieldProps> = ({\n fieldName,\n onChange,\n onChangeDebounced,\n}) => {\n const history = useHistory();\n const defaultValue = getSearchValueFromUrl(\n (qs.parse(history.location.search)[fieldName] as string) || ''\n );\n\n const debounced = useDebouncedCallback((value) => {\n const newSearch = {\n ...qs.parse(history.location.search),\n [fieldName]: value ? `%${value}%` : undefined,\n };\n const newUrl = qs.stringifyUrl({\n url: history.location.pathname,\n query: newSearch,\n });\n history.push(newUrl);\n if (onChangeDebounced) onChangeDebounced(value);\n }, 500);\n\n return (\n <StyledInput\n defaultValue={defaultValue}\n onChange={(e) => {\n debounced.callback(e.target.value);\n if (onChange) onChange(e);\n }}\n inputProps={{\n 'data-testid': 'searchField',\n }}\n endAdornment={\n <InputAdornment position=\"end\">\n <Search />\n </InputAdornment>\n }\n />\n );\n};\n\nexport default SearchTextField;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: ${({ theme }) => theme.spacing(2, 2)};\n background-color: ${({ theme }) => theme.palette.common.white};\n`;\n\nexport const EmptyDiv = styled.div`\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n margin-right: auto;\n margin-left: auto;\n color: ${({ theme }) => theme.palette.primary.dark};\n text-align: center;\n`;\n","import { PatientModel } from '@cuidador/database';\nimport qs from 'query-string';\nimport React, { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport HeaderWithDrawer from '../../components/Headers/HeaderWithDrawer';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport PatientCardItem from '../../components/PatientCardItem';\nimport SearchTextField from '../../components/SearchTextField';\nimport StyledButton from '../../components/StyledButton';\nimport useCanAccess from '../../hooks/useCanAccess';\nimport usePatient from '../../hooks/usePatient';\nimport { HeaderTitle } from '../Content/styles';\nimport { Container, EmptyDiv } from './styles';\n\nconst Patients: React.FC = () => {\n const [patients, setPatients] = useState<PatientModel[]>([]);\n const [page, setPage] = useState(0);\n const { getAllRelated, loading, total } = usePatient();\n\n const { isAllowedToRead: isAllowedToReadRelatedPatients } = useCanAccess(\n 'user/patient'\n );\n\n const history = useHistory();\n const historyLocationSearch = history.location.search;\n\n useEffect(() => {\n if (!isAllowedToReadRelatedPatients) {\n toast.error('Você não tem permissão para visualizar essa página');\n return history.goBack();\n }\n }, [isAllowedToReadRelatedPatients]);\n\n useEffect(() => {\n handleGetPatients();\n }, [page, historyLocationSearch, isAllowedToReadRelatedPatients]);\n\n const handleGetPatients = () => {\n const params = qs.parse(historyLocationSearch);\n getAllRelated({\n ...params,\n page,\n limit: 10,\n orderBy: 'name',\n order: 'asc',\n })\n .then((data) => {\n const patientsToInsert = data.results;\n if (page === 0) {\n setPatients(patientsToInsert);\n } else {\n setPatients([...patients, ...patientsToInsert]);\n }\n })\n .catch((e) => {\n toast.error(e);\n });\n };\n\n const pageIncrement = () => {\n setPage(page + 1);\n };\n\n const onChangeParams = () => {\n if (page !== 0) {\n setPage(0);\n }\n };\n\n return (\n <>\n <HeaderWithDrawer\n centerContent={\n <HeaderTitle align=\"center\" variant=\"h6\">\n Pessoas sob cuidado\n </HeaderTitle>\n }\n />\n <LoadingBackdrop loading={loading} />\n <Container>\n <SearchTextField\n fieldName=\"patient.name\"\n onChangeDebounced={onChangeParams}\n />\n {patients.length > 0 ? (\n patients.map((patient) => (\n <PatientCardItem patient={patient} key={patient.id} />\n ))\n ) : (\n <EmptyDiv>Não existem pessoas sob o seu cuidado.</EmptyDiv>\n )}\n {patients.length < total && (\n <EmptyDiv>\n <StyledButton size=\"medium\" color=\"primary\" onClick={pageIncrement}>\n Ver mais\n </StyledButton>\n </EmptyDiv>\n )}\n </Container>\n </>\n );\n};\n\nexport default Patients;\n","import React from 'react';\nimport { Link, LinkProps } from 'react-router-dom';\nimport Button, { ButtonProps } from '@material-ui/core/Button';\nimport { LocationDescriptor } from 'history';\n\nexport interface ButtonLinkProps extends ButtonProps {\n to: LocationDescriptor;\n}\n\nconst LinkForwardRef = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (props, ref) => <Link innerRef={ref} {...props} />\n);\nLinkForwardRef.displayName = 'LinkForwardRef';\n\nconst ButtonLink: React.FC<ButtonLinkProps> = ({\n children,\n variant = 'outlined',\n ...rest\n}) => (\n // eslint-disable-next-line\n // @ts-ignore: see https://github.com/mui-org/material-ui/issues/7877\n <Button variant={variant} {...rest} component={LinkForwardRef}>\n {children}\n </Button>\n);\n\nexport default ButtonLink;\n","import MuiFab from '@material-ui/core/Fab';\nimport styled from 'styled-components';\n\nexport const StyledFab = styled(MuiFab)`\n position: fixed;\n bottom: ${({ theme }) => theme.spacing(8)}px;\n right: ${({ theme }) => theme.spacing(2)}px;\n background-color: ${({ theme }) => theme.palette.background.default};\n color: ${({ theme }) => theme.palette.primary.dark};\n border: solid 1px;\n svg {\n font-size: ${({ theme }) => theme.typography.h2.fontSize};\n }\n`;\n","import React from 'react';\nimport { FabProps as MuiFabProps } from '@material-ui/core/Fab';\n\nimport ButtonLink, { ButtonLinkProps } from '../ButtonLink';\nimport { StyledFab } from './styles';\n\ntype FabProps = MuiFabProps & ButtonLinkProps;\n\nconst ButtonLinkForwardRef = React.forwardRef<\n HTMLAnchorElement,\n ButtonLinkProps\n>((props, ref) => <ButtonLink innerRef={ref} {...props} />);\nButtonLinkForwardRef.displayName = 'ButtonLinkForwardRef';\n\nconst Fab: React.FC<FabProps> = ({ children, ...rest }) => (\n // eslint-disable-next-line\n // @ts-ignore: see https://github.com/mui-org/material-ui/issues/7877\n <StyledFab {...rest} component={rest.to ? ButtonLinkForwardRef : undefined}>\n {children}\n </StyledFab>\n);\n\nexport default Fab;\n","import Card from '@material-ui/core/Card';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(0, 1)};\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\n\ninterface ReportStatusProps {\n isDraft: boolean;\n}\n\nexport const ReportStatus = styled.div<ReportStatusProps>`\n border-radius: 5px;\n padding-left: ${({ theme }) => theme.spacing(1)}px;\n background: ${({ isDraft, theme }) =>\n isDraft ? theme.palette.warning.light : theme.palette.primary.main};\n color: ${({ isDraft }) => (isDraft ? 'inherit' : '#fff;')};\n`;\n\nexport const TypographyContainer = styled.div`\n width: 100%;\n text-align: center;\n color: black;\n margin-top: ${({ theme }) => theme.spacing(6)}px;\n`;\n\nexport const ReportCard = styled(Card).attrs({ elevation: 3 })`\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n & .MuiCardHeader-avatar {\n color: ${({ theme }) => theme.palette.info.main};\n width: 20px;\n }\n & .MuiCardHeader-action {\n margin: 0;\n align-self: center;\n }\n`;\n\nexport const DateBox = styled.div``;\n","import { ProfessionalReportModel } from '@cuidador/database';\nimport { CardActionArea, CardHeader, Typography } from '@material-ui/core';\nimport ChevronRightRoundedIcon from '@material-ui/icons/ChevronRightRounded';\nimport LibraryBooksIcon from '@material-ui/icons/LibraryBooks';\nimport { format } from 'date-fns';\nimport React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport {\n Container,\n ReportStatus,\n ReportCard,\n TypographyContainer,\n} from './styles';\n\ninterface ProfessionalReportListProps {\n reports: ProfessionalReportModel[];\n}\n\nconst ProfessionalReportList: React.FC<ProfessionalReportListProps> = ({\n reports,\n}) => {\n const history = useHistory();\n\n const renderReportCard = (report: ProfessionalReportModel) => {\n const formattedDate = format(new Date(report.date || ''), 'dd/MM/yy');\n const subTitle = `${formattedDate} ${report.caregiver?.user?.name}`;\n return (\n <ReportCard data-testid={`report-card-${report.id}`} key={report.id}>\n <ReportStatus isDraft={Boolean(report.isDraft)}>\n <Typography variant=\"caption\">\n {report.isDraft ? 'Rascunho' : 'Publicada'}\n </Typography>\n </ReportStatus>\n <CardActionArea\n data-testid={`card-action-${report.id}`}\n onClick={() => {\n history.push(`/avaliacao/${report.id}`);\n }}\n >\n <CardHeader\n titleTypographyProps={{\n variant: 'body1',\n }}\n subheaderTypographyProps={{\n variant: 'caption',\n color: 'inherit',\n }}\n avatar={<LibraryBooksIcon />}\n action={<ChevronRightRoundedIcon />}\n title={report.title}\n subheader={subTitle}\n />\n </CardActionArea>\n </ReportCard>\n );\n };\n\n return (\n <Container>\n {reports.length > 0 ? (\n <>{reports.map((report) => renderReportCard(report))}</>\n ) : (\n <TypographyContainer>\n <Typography variant=\"subtitle1\">\n Nenhuma avaliação multiprofissional encontrada.\n </Typography>\n </TypographyContainer>\n )}\n </Container>\n );\n};\n\nexport default ProfessionalReportList;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(1, 1, 2, 1)};\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\n","import { PatientModel, ProfessionalReportModel } from '@cuidador/database';\nimport AddIcon from '@material-ui/icons/AddRounded';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport Fab from '../../components/Fab';\nimport Header from '../../components/Headers/Header';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport ProfessionalReportList from '../../components/ProfessionalReportList';\nimport StyledButton from '../../components/StyledButton';\nimport { AuthContext } from '../../contexts/auth';\nimport useCanAccess from '../../hooks/useCanAccess';\nimport useProfessionalReport from '../../hooks/useProfessionalReport/indexs';\nimport { Container } from './styles';\n\nconst ProfessionalReport: React.FC = () => {\n const { userInfo } = useContext(AuthContext);\n const { getByPatientId, loading, total } = useProfessionalReport();\n const params = useParams<{ patientId: string }>();\n const patientId = parseInt(params.patientId);\n const [patient, setPatient] = useState<PatientModel>();\n const [page, setPage] = useState(0);\n const [professionalReports, setProfessionalReports] = useState<\n ProfessionalReportModel[]\n >([]);\n const {\n isAllowedToCreate: isAllowedToCreateProfessionalReport,\n } = useCanAccess('report/professional');\n\n useEffect(() => {\n handlePatientName();\n }, []);\n\n useEffect(() => {\n loadProfessionalReports();\n }, [page]);\n\n const loadProfessionalReports = async () => {\n if (patientId) {\n getByPatientId(patientId, {\n page,\n limit: 10,\n orderBy: 'date',\n order: 'DESC',\n })\n .then((data) => {\n const loadedReports = data.results;\n if (page === 0) {\n setProfessionalReports(loadedReports);\n } else {\n setProfessionalReports([...professionalReports, ...loadedReports]);\n }\n })\n .catch(() =>\n toast.error('Erro ao carregar avaliações multiprofissional.')\n );\n }\n };\n\n const pageIncrement = () => {\n setPage(page + 1);\n };\n\n const handlePatientName = () => {\n const caregiverPatients = userInfo?.user?.patients;\n const patient = caregiverPatients?.find(\n (patient) => patient.id === patientId\n );\n setPatient(patient);\n };\n\n return (\n <>\n <Header\n title={`Avaliação Multiprofissional ${patient?.name || ''}`}\n leftButtonType=\"goBack\"\n />\n <Container>\n <ProfessionalReportList reports={professionalReports} />\n {loading && <LoadingBackdrop loading />}\n {professionalReports.length < total && (\n <StyledButton\n data-testid=\"show-more\"\n size=\"medium\"\n color=\"default\"\n onClick={pageIncrement}\n >\n Ver mais\n </StyledButton>\n )}\n {isAllowedToCreateProfessionalReport && (\n <Fab to={`/avaliacao/adicionar/paciente/${patientId}`}>\n <AddIcon />\n </Fab>\n )}\n </Container>\n </>\n );\n};\n\nexport default ProfessionalReport;\n","import { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\nimport StyledButton from '../StyledButton';\nimport StyledKeyboardDatePicker from '../StyledKeyboardDatePicker';\nimport FormikTextField from '../Forms/FormikTextField';\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n color: #000000;\n`;\n\nexport const FormContainer = styled.div`\n margin: 0 ${({ theme }) => theme.spacing(3)}px; ;\n`;\n\nexport const Centralizer = styled.div`\n align-items: center;\n flex-direction: column;\n display: flex;\n flex: 1;\n justify-content: space-evenly;\n`;\n\nexport const OptionsButton = styled(StyledButton)`\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n width: 100%;\n max-width: 220px;\n`;\n\nexport const DatePicker = styled(StyledKeyboardDatePicker)`\n input[type='text'][disabled] {\n color: #000000;\n opacity: 1;\n }\n`;\n\nexport const TextField = styled(FormikTextField)`\n input[type='text'][disabled] {\n color: #000000;\n opacity: 1;\n }\n textarea[disabled] {\n color: #000000;\n opacity: 1;\n }\n`;\n","import { EventSubCategoryModel } from '@cuidador/database';\nimport DateFnsUtils from '@date-io/date-fns';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport ptBr from 'date-fns/locale/pt-BR';\nimport { Formik } from 'formik';\nimport React from 'react';\nimport StyledSelect from '../Forms/FormikSelect';\nimport StyledMenuItem from '../StyledMenuItem';\nimport { Form, FormContainer, DatePicker, TextField } from './styles';\nimport {\n titleOptions,\n validationSchema,\n} from '../CreateProfessionalReportForm/utils';\n\nexport interface Props {\n subCategories: EventSubCategoryModel[];\n formValues: FormValues;\n}\n\nexport interface FormValues {\n title: string;\n description: string;\n subCategoryId?: number | string;\n date: string;\n caregiver: string;\n isDraft: boolean;\n}\n\nconst ViewProfessionalReportForm: React.FC<Props> = ({\n subCategories,\n formValues,\n}) => {\n return (\n <FormContainer>\n <Formik\n validationSchema={validationSchema}\n initialValues={formValues}\n validateOnChange={false}\n onSubmit={() => {\n return Promise.resolve();\n }}\n >\n {({ handleBlur, values, setFieldValue, errors }) => {\n return (\n <Form>\n <MuiPickersUtilsProvider utils={DateFnsUtils} locale={ptBr}>\n <DatePicker\n name=\"date\"\n label=\"Data\"\n cancelLabel=\"Cancelar\"\n data-testid={'date-input'}\n value={values.date}\n onChange={(date: Date | null) => {\n setFieldValue('date', date, true);\n }}\n placeholder=\"dd/mm/aaaa\"\n color=\"black\"\n margin=\"normal\"\n inputProps={{\n 'data-testid': 'date',\n disabled: true,\n disableUnderline: true,\n }}\n helperText={errors.date}\n onBlur={handleBlur}\n InputLabelProps={{ shrink: true }}\n readOnly={true}\n disabled={true}\n variant=\"dialog\"\n inputVariant=\"standard\"\n />\n </MuiPickersUtilsProvider>\n <StyledSelect\n name=\"title\"\n label=\"TÃtulo\"\n SelectDisplayProps={{\n 'data-testid': 'title',\n }}\n color=\"black\"\n disabled={true}\n variant=\"standard\"\n formControlVariant=\"standard\"\n >\n {titleOptions.map((item) => (\n <StyledMenuItem\n key={item.value}\n value={item.value}\n color=\"black\"\n >\n {item.label}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <TextField\n color=\"black\"\n id=\"caregiver\"\n inputProps={{ 'data-testid': 'caregiver' }}\n label=\"Profissional Responsável\"\n name=\"caregiver\"\n margin=\"normal\"\n autoComplete=\"off\"\n disabled\n variant=\"standard\"\n />\n <StyledSelect\n name=\"subCategoryId\"\n label=\"Intercorrência relacionada\"\n SelectDisplayProps={{\n 'data-testid': 'subCategoryId',\n }}\n color=\"black\"\n value={formValues?.subCategoryId || values.subCategoryId}\n disabled={true}\n variant=\"standard\"\n formControlVariant=\"standard\"\n >\n {subCategories.map((item) => (\n <StyledMenuItem key={item.id} value={item.id} color=\"black\">\n {item.name}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n <TextField\n color=\"black\"\n id=\"description\"\n multiline\n inputProps={{ 'data-testid': 'description', maxlength: 5000 }}\n label=\"Descrição\"\n name=\"description\"\n margin=\"normal\"\n autoComplete=\"off\"\n disabled\n variant=\"standard\"\n />\n </Form>\n );\n }}\n </Formik>\n </FormContainer>\n );\n};\n\nexport default ViewProfessionalReportForm;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(1, 1, 2, 1)};\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\n","import { ProfessionalReportModel } from '@cuidador/database';\nimport { FormValues } from '../../../components/ViewProfessionalReportForm';\n\nexport const ProfessionalReportModelToFormValues = (\n report: ProfessionalReportModel\n): FormValues => {\n return {\n caregiver: report?.caregiver?.user?.name || '',\n title: report?.title || '',\n description: report?.description || '',\n date: report?.date || '',\n subCategoryId: report?.eventSubCategory?.id || 0,\n isDraft: report?.isDraft || false,\n };\n};\n","import {\n EventSubCategoryModel,\n ProfessionalReportModel,\n} from '@cuidador/database';\nimport React, { useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport CreateProfessionalReportForm from '../../../components/CreateProfessionalReportForm';\nimport Header from '../../../components/Headers/Header';\nimport LoadingBackdrop from '../../../components/LoadingBackdrop';\nimport { StyledFieldset } from '../../../components/StyledFieldset';\nimport StyledSimpleDialog from '../../../components/StyledSimpleDialog';\nimport ViewProfessionalReportForm, {\n FormValues,\n} from '../../../components/ViewProfessionalReportForm';\nimport useCanAccess from '../../../hooks/useCanAccess';\nimport useProfessionalReport from '../../../hooks/useProfessionalReport/indexs';\nimport useSubCategory from '../../../hooks/useSubCategory';\nimport { Container } from './styles';\nimport { ProfessionalReportModelToFormValues } from './utils';\n\nconst ProfessionalReportItem: React.FC = () => {\n const history = useHistory();\n const {\n getAllComplications,\n loading: loadingComplications,\n } = useSubCategory();\n const { getById, deleteById, loading, patch } = useProfessionalReport();\n const params = useParams<{ id: string }>();\n const reportId = parseInt(params.id);\n const [report, setReport] = useState<ProfessionalReportModel>();\n const [reportFormData, setReporFormData] = useState<FormValues>();\n const [dialogStatus, setDialogStatus] = useState(false);\n const [subCategories, setSubCategories] = useState<EventSubCategoryModel[]>(\n []\n );\n const { isAllowedToUpdate, isAllowedToDelete } = useCanAccess(\n 'report/professional'\n );\n\n useEffect(() => {\n handleProfessionalReport();\n }, []);\n\n const handleProfessionalReport = async () => {\n if (reportId) {\n getById(reportId)\n .then((data) => {\n setReport(data);\n setReporFormData(ProfessionalReportModelToFormValues(data));\n handleSubcategories(data);\n })\n .catch(() =>\n toast.error('Erro ao carregar avaliação multiprofissional.')\n );\n }\n };\n\n const handleSubcategories = (report: ProfessionalReportModel) => {\n if (report.eventSubCategory && !report.isDraft) {\n setSubCategories([report.eventSubCategory]);\n } else {\n loadComplications();\n }\n };\n\n const loadComplications = async () => {\n const subCategories = (await getAllComplications().catch(() =>\n toast.error('Erro ao carregar lista de intercorrências')\n )) as EventSubCategoryModel[];\n const noneOption: EventSubCategoryModel = {\n id: 0,\n name: 'Nenhuma',\n };\n const subCategoriesWithNone = [noneOption, ...subCategories];\n setSubCategories(subCategoriesWithNone);\n };\n\n const handleRemoveProfessionalReport = async (id?: number) => {\n setDialogStatus(false);\n if (id) {\n await deleteById(id)\n .then((rowsDeleted) => {\n if (rowsDeleted > 0)\n toast.success('Avaliação multiprofissional removida.');\n else {\n throw new Error();\n }\n })\n .catch(() => {\n toast.error('Avaliação já publicada, não é possÃvel excluir.');\n });\n history.goBack();\n }\n };\n\n const handleSubmit = async (formValues: ProfessionalReportModel) => {\n patch(reportId, formValues)\n .then(() => {\n toast.success('Avaliação multiprofissional atualizada!');\n history.goBack();\n })\n .catch(() => toast.error('Erro ao editar avaliação multiprofissional.'));\n };\n\n return (\n <>\n <Header\n title={`Avaliação Multiprofissional ${report?.patient?.name || ''}`}\n leftButtonType=\"goBack\"\n rightButtonType={\n isAllowedToDelete && reportFormData?.isDraft ? 'remove' : undefined\n }\n rightIconClick={() => setDialogStatus(true)}\n />\n <Container>\n {loading || loadingComplications || !reportFormData ? (\n <LoadingBackdrop loading />\n ) : reportFormData.isDraft ? (\n <StyledFieldset disabled={!isAllowedToUpdate}>\n <CreateProfessionalReportForm\n subCategories={subCategories}\n formValues={reportFormData}\n cancel={history.goBack}\n submit={handleSubmit}\n patientId={Number(report?.patient?.id)}\n readOnly={!isAllowedToUpdate}\n />\n </StyledFieldset>\n ) : (\n <ViewProfessionalReportForm\n subCategories={subCategories}\n formValues={reportFormData}\n />\n )}\n <StyledSimpleDialog\n open={dialogStatus}\n handleNo={() => setDialogStatus(false)}\n handleYes={() => handleRemoveProfessionalReport(report?.id)}\n title=\"Excluir rascunho de avaliação multiprofissional?\"\n />\n </Container>\n </>\n );\n};\n\nexport default ProfessionalReportItem;\n","import styled from 'styled-components';\nimport { Grid, Typography, Button } from '@material-ui/core';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport AccessTimeIcon from '@material-ui/icons/AccessTime';\n\nexport const Container = styled(Grid)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding-block: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const TextSection = styled.section`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n`;\n\nexport const Title = styled(Typography)`\n color: ${({ theme }) => theme.palette.primary.main};\n font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n display: flex;\n align-items: center;\n`;\n\nexport const ClockIcon = styled(AccessTimeIcon)`\n max-width: 16px;\n max-height: 16px;\n margin-left: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const Text = styled(Typography)<{ strikethrough?: boolean }>`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n ${({ strikethrough }) => !!strikethrough && 'text-decoration: line-through;'}\n\n b {\n margin-right: ${({ theme }) => theme.spacing(0.5)}px;\n }\n`;\n\nexport const MenuSection = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n max-width: 60px;\n`;\n\nexport const ButtonContainer = styled.div<{ $isExpanded?: boolean }>`\n ${({ $isExpanded }) =>\n $isExpanded\n ? `\n &::before {\n content: '';\n position: fixed;\n top: 0; right: 0; bottom: 0; left: 0;\n background-color: black;\n opacity: 0.4; \n }\n `\n : ''}\n width: 100%;\n display: flex;\n justify-content: center;\n`;\n\nexport const MenuButton = styled(Button)`\n padding: ${({ theme }) => theme.spacing(0.5, 0.1)};\n min-width: 38px;\n min-height: 38px;\n background-image: linear-gradient(\n to bottom right,\n ${({ theme }) => theme.palette.primary.main},\n ${({ theme }) => theme.palette.secondary.dark}\n );\n`;\n\nexport const StyledMenuItem = styled(MenuItem)`\n color: ${({ theme }) => theme.palette.common.white};\n background-color: ${({ theme }) => theme.palette.primary.main};\n background-image: linear-gradient(\n to bottom right,\n ${({ theme }) => theme.palette.primary.main},\n ${({ theme }) => theme.palette.secondary.dark}\n );\n margin-bottom: ${({ theme }) => theme.spacing(0.75)}px;\n border-radius: ${({ theme }) => theme.spacing(1.5)}px;\n font-weight: bold;\n min-height: initial;\n\n &:hover {\n background-color: ${({ theme }) => theme.palette.primary.main};\n opacity: 0.7;\n }\n`;\n","import {\n ShiftExecutionModel,\n ShiftModel,\n ShiftTimeContestationModel,\n} from '@cuidador/database';\nimport { addDays, endOfMonth, format } from 'date-fns';\n\nexport const formatShift = (shift: ShiftModel): ShiftModel => {\n return {\n ...shift,\n timeContestations: sortDescShiftContestations(shift?.timeContestations),\n } as ShiftModel;\n};\n\nexport const sortDescShiftContestations = (\n timeContestations?: ShiftTimeContestationModel[]\n): ShiftTimeContestationModel[] | undefined => {\n return timeContestations?.sort((a, b) =>\n getTimeContestationCreatedAt(a) < getTimeContestationCreatedAt(b) ? 1 : -1\n );\n};\n\nconst getTimeContestationCreatedAt = (\n timeContestation: ShiftTimeContestationModel\n): string => timeContestation?.createdAt || '';\n\nexport const isContestedOrHaveBeenAnnulledShift = (\n shift?: ShiftModel\n): boolean => {\n return !!(\n (shift?.timeContestations && shift?.timeContestations.length > 0) ||\n (shift?.annullations && shift?.annullations.length > 0)\n );\n};\n\nexport const isContestationCreationEnabled = (shift?: ShiftModel) => {\n const now = new Date();\n const endOfMonthDateTime = endOfMonth(\n new Date(shift?.plannedToStartAt || '')\n );\n const maxContestationDateTime = addDays(endOfMonthDateTime, 1);\n return now < maxContestationDateTime && !shift?.isAnnulled;\n};\n\nexport const getShiftExecutionRealTime = (execution: ShiftExecutionModel) => {\n if (!execution.startedAt) return '';\n\n const startedAt = new Date(execution.startedAt);\n\n const start = format(startedAt, 'HH:mm');\n\n if (!execution.endedAt) return start;\n\n const endedAt = new Date(execution.endedAt);\n\n const end = format(endedAt, 'HH:mm');\n\n return `${start} até ${end}`;\n};\n\nexport const isCaregiverExecutionOwner = (\n execution: ShiftExecutionModel,\n caregiverId: ShiftExecutionModel['caregiverId']\n) => {\n if (!execution || !caregiverId) return false;\n\n return execution.caregiverId === caregiverId;\n};\n\nexport const isExecutionContested = ({\n timeContestations,\n}: ShiftExecutionModel) => !!timeContestations && timeContestations.length > 0;\n","import React, { useContext, useMemo } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport MenuIcon from '@material-ui/icons/MoreVert';\nimport { Menu, MenuProps, withStyles } from '@material-ui/core';\nimport {\n MenuButton,\n ButtonContainer,\n Container,\n MenuSection,\n StyledMenuItem,\n Text,\n TextSection,\n Title,\n ClockIcon,\n} from './styles';\nimport { ShiftExecutionModel, ShiftModel } from '@cuidador/database';\nimport {\n getShiftExecutionRealTime,\n isCaregiverExecutionOwner,\n isExecutionContested,\n} from '../utils';\nimport { AuthContext } from '../../../contexts/auth';\nimport { addDays, endOfMonth, isBefore } from 'date-fns';\n\ninterface ShiftExecutionCardTypes {\n index: number;\n execution: ShiftExecutionModel;\n caregiverId: ShiftExecutionModel['caregiverId'];\n shiftId: ShiftModel['id'];\n}\n\nconst StyledMenu = withStyles({\n paper: {\n border: 'none',\n backgroundColor: 'transparent',\n },\n})((props: MenuProps) => (\n <Menu\n elevation={0}\n getContentAnchorEl={null}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n {...props}\n />\n));\n\nexport const ShiftExecutionCard: React.FC<ShiftExecutionCardTypes> = ({\n index,\n execution,\n caregiverId,\n shiftId,\n}) => {\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const { userInfo } = useContext(AuthContext);\n const [isExpanded, setIsExpanded] = React.useState(false);\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n setIsExpanded(true);\n };\n\n const history = useHistory();\n\n const handleClose = () => {\n setAnchorEl(null);\n setIsExpanded(false);\n };\n\n const handleRedirectToExecutionHistoryContestation = (\n shiftId: number,\n executionId: number\n ) => {\n history.push(`/correcao-de-horarios/historico/${shiftId}/${executionId}`);\n };\n\n const handleRedirectToCreateContestation = (\n shiftId: number,\n executionId: number\n ) => {\n history.push(\n `/correcao-de-horarios/plantao/${shiftId}/execucao/${executionId}/novo`\n );\n };\n\n const shouldBeAbleToContestTime = useMemo(() => {\n const { timeContestations, createdAt, caregiverId, isAnnulled } = execution;\n\n if (!createdAt) return false;\n\n const hasPreviouslyContested =\n !!timeContestations &&\n timeContestations.length > 0 &&\n timeContestations.find(({ createdById }) => createdById === userInfo?.id);\n\n const endOfContestPeriod = addDays(endOfMonth(new Date(createdAt)), 1);\n\n const now = new Date();\n\n return (\n !hasPreviouslyContested &&\n !isAnnulled &&\n caregiverId === userInfo?.id &&\n isBefore(now, endOfContestPeriod)\n );\n }, [execution, userInfo]);\n\n return (\n <Container data-testid={`shift-execution-card-${index}`}>\n <TextSection>\n <Title data-testid=\"shift-execution-card-title\">\n Execução {index + 1}{' '}\n {isExecutionContested(execution) && (\n <ClockIcon data-testid=\"shift-execution-card-clock-icon\" />\n )}\n </Title>\n <Text\n data-testid=\"shift-execution-card-text\"\n strikethrough={!!execution.isAnnulled}\n >\n <b>{getShiftExecutionRealTime(execution)}</b>\n </Text>\n </TextSection>\n {isCaregiverExecutionOwner(execution, caregiverId) && (\n <MenuSection>\n <ButtonContainer $isExpanded={isExpanded}>\n <MenuButton\n aria-controls=\"button-menu\"\n aria-haspopup=\"true\"\n variant=\"contained\"\n color=\"primary\"\n onClick={handleClick}\n data-testid={'shift-execution-card-menu-button'}\n >\n <MenuIcon fontSize=\"small\" />\n </MenuButton>\n <StyledMenu\n id=\"button-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n data-testId=\"shift-execution-menu-list\"\n >\n {!!shouldBeAbleToContestTime && (\n <StyledMenuItem\n onClick={() => {\n handleRedirectToCreateContestation(\n Number(shiftId),\n Number(execution.id)\n );\n }}\n >\n Corrigir horários\n </StyledMenuItem>\n )}\n <StyledMenuItem\n onClick={() =>\n handleRedirectToExecutionHistoryContestation(\n Number(shiftId),\n Number(execution.id)\n )\n }\n >\n Histórico\n </StyledMenuItem>\n </StyledMenu>\n </ButtonContainer>\n </MenuSection>\n )}\n </Container>\n );\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(1, 1, 2)};\n display: flex;\n flex-direction: column;\n`;\n\nexport const ExecutionList = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-inline: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const Divider = styled.hr`\n background-color: ${({ theme }) => theme.palette.common.black};\n color: ${({ theme }) => theme.palette.common.black};\n width: 100%;\n margin: 0;\n`;\n","import styled, { css } from 'styled-components';\nimport { ExecutionTimelineSlot } from '..';\nimport red from '@material-ui/core/colors/red';\n\nexport const TimelineContainer = styled.div<{ hasTimestamps: boolean }>`\n padding: ${({ theme, hasTimestamps }) =>\n theme.spacing(0, hasTimestamps ? 4 : 1, 2)};\n`;\n\nexport const ParentTimeline = styled.div`\n position: relative;\n background-color: ${({ theme }) => theme.palette.grey[300]};\n height: 30px;\n width: 100%;\n overflow: hidden;\n`;\n\nexport const BoundaryTimestamps = styled.div`\n display: flex;\n justify-content: space-between;\n padding: ${({ theme }) => theme.spacing(0, 1, 1)};\n`;\n\nexport const Timestamp = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n font-size: 12px;\n\n p {\n margin: 0;\n }\n`;\n\nexport const ExecutionTimelineSlotBlock = styled.div<{\n timeslot: ExecutionTimelineSlot;\n}>`\n position: absolute;\n height: 100%;\n min-width: 2px;\n top: 0;\n ${({ theme, timeslot }) => {\n return timeslot.status === 'occupied'\n ? css`\n background-color: ${theme.palette.primary.main};\n z-index: 1;\n `\n : css`\n background-color: ${red[500]};\n z-index: 2;\n `;\n }}\n\n left: ${({ timeslot }) => timeslot.startsAtPercentage}%;\n width: ${({ timeslot }) => timeslot.durationPercentage}%;\n`;\n\nexport const LegendContainer = styled.div`\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n row-gap: ${({ theme }) => theme.spacing(1.5)}px;\n column-gap: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const Legend = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const LegendLabel = styled.span``;\n\nexport const LegendColor = styled.div<{ color: string }>`\n width: 40px;\n min-width: 40px;\n height: 20px;\n background-color: ${({ color }) => color};\n margin-right: ${({ theme }) => theme.spacing(1)}px;\n`;\n","import { addMinutes, subHours } from 'date-fns';\nimport { format } from 'date-fns-tz';\n\n/**\n * Receives a ISODateTime, and format to a time\n * with America/Sao_Paulo timezone (GMT -3),\n * e.g, 2022-06-06T13:00:00.000Z returns 10:00\n */\nexport const formatTimeToAmericaSaoPauloTimezone = (date: string): string => {\n /**\n * It removes 3 hours because the database holds the datetime as America/Sao_Paulo timezone.\n */\n const utcDatePtBr = subHours(new Date(date), 3);\n const formattedDate = format(\n // Removes timezone of the local machine that was introduced in Date instance above.\n timezoneUnawareDate(utcDatePtBr),\n 'HH:mm'\n );\n return formattedDate;\n};\n\n/**\n * Receives a ISODateTime, and format to a Date\n * with America/Sao_Paulo timezone (GMT -3),\n * e.g, 2022-06-06T12:24:45.255Z returns 06/06/2022\n */\nexport const formatShortDateToAmericaSaoPauloTimezone = (\n date: string\n): string => {\n /**\n * It removes 3 hours because the database holds the datetime as America/Sao_Paulo timezone.\n */\n const utcDatePtBr = subHours(new Date(date), 3);\n const formattedDate = format(\n // Removes timezone of the local machine that was introduced in Date instance above.\n timezoneUnawareDate(utcDatePtBr),\n 'dd/MM/yy'\n );\n return formattedDate;\n};\n\n/**\n * This method will ignore time and timezone from a date, an use only the date\n * part, no matter the current local timezone for the machine running the code\n * Useful for \"fixed\" dates, like birthdates\n */\nexport const timezoneUnawareDate = (date: number | string | Date) =>\n addMinutes(new Date(date), new Date(date).getTimezoneOffset());\n","import React from 'react';\nimport { ShiftModel } from '@cuidador/database';\nimport {\n BoundaryTimestamps,\n ExecutionTimelineSlotBlock,\n Legend,\n LegendColor,\n LegendContainer,\n LegendLabel,\n ParentTimeline,\n TimelineContainer,\n Timestamp,\n} from './styles';\nimport { useTheme } from 'styled-components';\nimport {\n formatShortDateToAmericaSaoPauloTimezone,\n formatTimeToAmericaSaoPauloTimezone,\n} from '../../../utils/dates';\nimport red from '@material-ui/core/colors/red';\nimport { ExecutionTimeline } from '..';\n\ninterface ShiftExecutionTimelineProps {\n timeline: ExecutionTimeline | undefined;\n shift: ShiftModel;\n}\n\nconst ShiftExecutionTimeline: React.FC<ShiftExecutionTimelineProps> = ({\n timeline,\n shift,\n}) => {\n const theme = useTheme();\n\n if (!shift || !timeline) return null;\n\n return (\n <>\n <BoundaryTimestamps>\n {!!shift.plannedToStartAt && !!shift.plannedToEndAt && (\n <>\n <Timestamp>\n <p>\n {formatShortDateToAmericaSaoPauloTimezone(\n shift.plannedToStartAt\n )}\n </p>\n <p>\n {formatTimeToAmericaSaoPauloTimezone(shift.plannedToStartAt)}\n </p>\n </Timestamp>\n <Timestamp>\n <p>\n {formatShortDateToAmericaSaoPauloTimezone(shift.plannedToEndAt)}\n </p>\n <p>{formatTimeToAmericaSaoPauloTimezone(shift.plannedToEndAt)}</p>\n </Timestamp>\n </>\n )}\n </BoundaryTimestamps>\n <TimelineContainer\n hasTimestamps={!!shift.plannedToStartAt && !!shift.plannedToEndAt}\n data-testid=\"timeline\"\n >\n <ParentTimeline>\n {timeline.map((timeslot, index) => (\n <ExecutionTimelineSlotBlock\n key={index}\n data-testid=\"timeline-execution\"\n timeslot={timeslot}\n />\n ))}\n </ParentTimeline>\n <LegendContainer>\n <Legend>\n <LegendColor color={theme.palette.grey[300]} />\n <LegendLabel>Livre</LegendLabel>\n </Legend>\n <Legend>\n <LegendColor color={theme.palette.primary.main} />\n <LegendLabel>Ocupado</LegendLabel>\n </Legend>\n {timeline.some(({ status }) => status === 'in_another_shift') && (\n <Legend>\n <LegendColor color={red[500]} />\n <LegendLabel>Ocupado em outro paciente</LegendLabel>\n </Legend>\n )}\n </LegendContainer>\n </TimelineContainer>\n </>\n );\n};\n\nexport default ShiftExecutionTimeline;\n","import React, { useContext, useEffect, useState } from 'react';\nimport { ShiftModel } from '@cuidador/database';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport { sortBy } from 'lodash';\nimport Header from '../../components/Headers/Header';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport { AuthContext } from '../../contexts/auth';\nimport useShift from '../../hooks/useShift';\nimport { ShiftExecutionCard } from './ShiftExecutionCard';\nimport { Container, Divider, ExecutionList } from './styles';\nimport { formatShift } from './utils';\nimport ShiftExecutionTimeline from './ExecutionTimeline';\n\nexport interface ExecutionTimelineSlot {\n status: 'occupied' | 'in_another_shift';\n startsAtPercentage: number;\n durationPercentage: number;\n}\n\nexport type ExecutionTimeline = ExecutionTimelineSlot[];\n\nconst ShiftContestation: React.FC = () => {\n const history = useHistory();\n const params = useParams<{ shiftId: string }>();\n const { userInfo } = useContext(AuthContext);\n const shiftId = parseInt(params.shiftId);\n\n const [shift, setShift] = useState<ShiftModel>();\n const [executionTimeline, setExecutionTimeline] = useState<\n ExecutionTimeline | undefined\n >(undefined);\n const { getById, getTimeline, loading } = useShift();\n\n const fetchData = () => {\n if (shiftId) {\n getById(shiftId)\n .then((response) => {\n setShift(formatShift(response as ShiftModel));\n })\n .catch((e) => {\n toast.error(e);\n });\n }\n };\n\n useEffect(() => {\n fetchData();\n getTimeline(shiftId).then((data) => {\n setExecutionTimeline(data);\n });\n }, [shiftId]);\n\n return (\n <>\n <Header\n title={'Correção de horários'}\n leftIconClick={() => history.goBack()}\n />\n <Container>\n {loading && <LoadingBackdrop loading />}\n {!!shift && !!executionTimeline && (\n <ShiftExecutionTimeline shift={shift} timeline={executionTimeline} />\n )}\n <ExecutionList>\n {sortBy(shift?.executions, ({ startedAt }) => startedAt)?.map(\n (execution, index) => (\n <>\n {index !== 0 && <Divider />}\n <ShiftExecutionCard\n shiftId={shiftId}\n caregiverId={userInfo?.id}\n execution={execution}\n index={index}\n key={`shift-execution-card-${index}`}\n />\n </>\n )\n )}\n </ExecutionList>\n </Container>\n </>\n );\n};\n\nexport default ShiftContestation;\n","import { format } from 'date-fns';\nimport ptBrLocale from 'date-fns/locale/pt-BR';\n\nexport const handleFormatDate = (date: string | null) => {\n if (!date) {\n return 'Sem alterações';\n }\n return format(new Date(date), 'MM/dd/yyyy', {\n locale: ptBrLocale,\n });\n};\nexport const handleFormatTime = (time: string | null) => {\n if (!time) {\n return 'Sem alterações';\n }\n return format(new Date(time), 'HH:mm');\n};\n","import styled, { css } from 'styled-components';\nimport { Typography } from '@material-ui/core';\nimport { WatchLater, DateRange } from '@material-ui/icons';\n\nconst iconBaseStyles = css`\n color: ${({ theme }) => theme.palette.primary.dark};\n height: 20px;\n width: 20px;\n`;\n\nexport const CardContainer = styled.div`\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n margin: 0 auto;\n padding-inline: ${({ theme }) => theme.spacing(2)}px;\n width: 100%;\n max-width: 800px;\n`;\n\nexport const HeaderContainer = styled(CardContainer)`\n margin-block: ${({ theme }) => theme.spacing(2, 1)};\n`;\n\nexport const OriginalSchedulesContainer = styled.div`\n background-color: ${({ theme }) => theme.palette.grey[100]};\n padding-block: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const CardItem = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const CardItemJustify = styled.div`\n display: flex;\n justify-content: space-between;\n gap: ${({ theme }) => theme.spacing(0.5)}px;\n margin-bottom: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const CardTimeText = styled(Typography)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spacing(0.5)}px;\n margin-bottom: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const CardTitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.primary.dark};\n font-size: 1rem;\n font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n\n & ~ div {\n margin-left: ${({ theme }) => theme.spacing(1.5)}px;\n }\n`;\n\nexport const StyledTitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.primary.dark};\n text-align: center;\n font-size: 1.2rem;\n font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n margin-bottom: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const StyledSubtitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.primary.main};\n font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n margin-bottom: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const StyledTypography = styled(Typography)`\n font-size: 0.95rem;\n`;\n\nexport const StyledCreatedBy = styled(StyledTypography)`\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nexport const Divider = styled.hr`\n background-color: ${({ theme }) => theme.palette.primary.dark};\n border: 1px solid ${({ theme }) => theme.palette.primary.dark};\n margin: ${({ theme }) => theme.spacing(0.5)}px 0;\n height: 0.2px;\n`;\n\nexport const NoRegistrationsText = styled(Typography)`\n color: ${({ theme }) => theme.palette.primary.main};\n text-align: center;\n margin-block: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const StyledClockIcon = styled(WatchLater)`\n ${iconBaseStyles}\n`;\n\nexport const StyledCalendarIcon = styled(DateRange)`\n ${iconBaseStyles}\n`;\n","import React from 'react';\nimport { ShiftExecution } from '@cuidador/database';\nimport { handleFormatDate, handleFormatTime } from '../utils';\nimport {\n OriginalSchedulesContainer,\n CardContainer,\n CardItemJustify,\n CardItem,\n CardTimeText,\n StyledSubtitle,\n StyledCreatedBy,\n StyledCalendarIcon,\n StyledClockIcon,\n} from '../styles';\n\ninterface OriginalSchedulesProps {\n shiftExecution: ShiftExecution;\n}\n\nconst OriginalSchedules: React.FC<OriginalSchedulesProps> = ({\n shiftExecution,\n}) => {\n const dateStartedAt = handleFormatDate(shiftExecution.startedAt!);\n const timeStartedAt = handleFormatTime(shiftExecution.startedAt!);\n\n const dateEndedAt = handleFormatDate(shiftExecution.endedAt!);\n const timeEndedAt = handleFormatTime(shiftExecution.endedAt!);\n\n return (\n <OriginalSchedulesContainer>\n <CardContainer>\n <CardItemJustify>\n <CardItem>\n <StyledSubtitle>InÃcio registrado</StyledSubtitle>\n <CardTimeText data-testid=\"registered-date-started-at\">\n <StyledCalendarIcon /> {dateStartedAt}\n </CardTimeText>\n <CardTimeText data-testid=\"registered-time-started-at\">\n <StyledClockIcon /> {timeStartedAt}\n </CardTimeText>\n </CardItem>\n <CardItem>\n <StyledSubtitle>Fim registrado</StyledSubtitle>\n <CardTimeText data-testid=\"registered-date-ended-at\">\n <StyledCalendarIcon /> {dateEndedAt}\n </CardTimeText>\n <CardTimeText data-testid=\"registered-time-ended-at\">\n <StyledClockIcon /> {timeEndedAt}\n </CardTimeText>\n </CardItem>\n </CardItemJustify>\n <CardItem>\n <StyledSubtitle>Responsável</StyledSubtitle>\n <StyledCreatedBy>\n {shiftExecution?.caregiver?.user?.name}\n </StyledCreatedBy>\n </CardItem>\n </CardContainer>\n </OriginalSchedulesContainer>\n );\n};\n\nexport default OriginalSchedules;\n","import React from 'react';\nimport { handleFormatDate, handleFormatTime } from '../utils';\nimport {\n CardTitle,\n CardItem,\n StyledSubtitle,\n StyledCreatedBy,\n StyledTypography,\n} from '../styles';\nimport { ShiftAnnullation } from '@cuidador/database';\n\ninterface AnnulledCardProps {\n annullation: ShiftAnnullation;\n}\n\nconst AnnulledCard: React.FC<AnnulledCardProps> = ({ annullation }) => {\n const dateCreatedAt = handleFormatDate(annullation.createdAt!);\n const timeCreatedAt = handleFormatTime(annullation.createdAt!);\n\n const executionType = annullation?.isAnnulled ? 'anulada' : 'restaurada';\n\n return (\n <>\n <CardTitle data-testid=\"annulled-restored-execution\">\n Execução {executionType} ({dateCreatedAt} - {timeCreatedAt})\n </CardTitle>\n <CardItem>\n <StyledSubtitle>Responsável</StyledSubtitle>\n <StyledCreatedBy>{annullation.annulledBy?.name}</StyledCreatedBy>\n </CardItem>\n {!!annullation?.isAnnulled && (\n <CardItem>\n <StyledSubtitle>Justificativa</StyledSubtitle>\n <StyledTypography>{annullation.description}</StyledTypography>\n </CardItem>\n )}\n </>\n );\n};\n\nexport default AnnulledCard;\n","import React from 'react';\nimport { ShiftTimeContestation } from '@cuidador/database';\nimport { handleFormatDate, handleFormatTime } from '../utils';\nimport {\n CardItem,\n CardItemJustify,\n CardTimeText,\n CardTitle,\n StyledSubtitle,\n StyledTypography,\n StyledCreatedBy,\n StyledCalendarIcon,\n StyledClockIcon,\n} from '../styles';\n\ninterface TimeContestationCardProps {\n timeContestation: ShiftTimeContestation;\n contestationNumber: number;\n}\n\nconst TimeContestationCard: React.FC<TimeContestationCardProps> = ({\n timeContestation,\n contestationNumber,\n}) => {\n const dateStartedAt = handleFormatDate(timeContestation.startedAt!);\n const timeStartedAt = handleFormatTime(timeContestation.startedAt!);\n\n const dateEndedAt = handleFormatDate(timeContestation.endedAt!);\n const timeEndedAt = handleFormatTime(timeContestation.endedAt!);\n\n const dateCreatedAt = handleFormatDate(timeContestation.createdAt!);\n const timeCreatedAt = handleFormatTime(timeContestation.createdAt!);\n\n return (\n <>\n <CardTitle>\n Correção {contestationNumber} - ({dateCreatedAt} - {timeCreatedAt})\n </CardTitle>\n <CardItem>\n <StyledSubtitle>Responsável</StyledSubtitle>\n <StyledCreatedBy>{timeContestation.createdBy?.name}</StyledCreatedBy>\n </CardItem>\n <CardItemJustify>\n <CardItem>\n <StyledSubtitle>InÃcio</StyledSubtitle>\n <CardTimeText data-testid=\"date-started-at\">\n <StyledCalendarIcon /> {dateStartedAt}\n </CardTimeText>\n <CardTimeText data-testid=\"time-started-at\">\n <StyledClockIcon /> {timeStartedAt}\n </CardTimeText>\n </CardItem>\n <CardItem>\n <StyledSubtitle>Fim</StyledSubtitle>\n <CardTimeText data-testid=\"date-ended-at\">\n <StyledCalendarIcon />\n {dateEndedAt}\n </CardTimeText>\n <CardTimeText data-testid=\"time-ended-at\">\n <StyledClockIcon /> {timeEndedAt}\n </CardTimeText>\n </CardItem>\n </CardItemJustify>\n <CardItem>\n <StyledSubtitle>Justificativa</StyledSubtitle>\n <StyledTypography>{timeContestation.justification}</StyledTypography>\n </CardItem>\n </>\n );\n};\n\nexport default TimeContestationCard;\n","import React, { useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { sortBy } from 'lodash';\nimport { ShiftExecution, ShiftModel } from '@cuidador/database';\nimport useShift from '../../hooks/useShift';\nimport Header from '../../components/Headers/Header';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport OriginalSchedules from './OriginalSchedules';\nimport AnnulledCard from './AnnulledCard';\nimport TimeContestationCard from './TimeContestationCard';\nimport {\n HeaderContainer,\n CardContainer,\n CardItem,\n StyledTitle,\n Divider,\n NoRegistrationsText,\n StyledTypography,\n} from './styles';\n\ninterface RouteParams {\n shiftId: string;\n executionId: string;\n}\n\nconst ExecutionHistoryContestation: React.FC = () => {\n const [shift, setShift] = useState<ShiftModel>();\n\n const { shiftId, executionId } = useParams<RouteParams>();\n const { getById, loading } = useShift();\n\n useEffect(() => {\n getById(Number(shiftId)).then((shift) => {\n setShift(shift as ShiftModel);\n });\n }, [shiftId]);\n\n const findExecutionByExecutionId = (execution: ShiftExecution) => {\n return execution.id === +executionId;\n };\n\n const orderByCreatedAt = (collection?: unknown[]) => {\n return sortBy(collection, ({ createdAt }) => createdAt);\n };\n\n const shiftExecution = shift?.executions?.find(findExecutionByExecutionId);\n\n const executionNumber = shift?.executions?.findIndex(\n findExecutionByExecutionId\n );\n\n const timeContestations = orderByCreatedAt(shiftExecution?.timeContestations);\n\n const annullations = orderByCreatedAt(shiftExecution?.annullations);\n\n const hasTimeContestations = !!timeContestations.length;\n\n const hasAnnullations = !!annullations.length;\n\n return (\n <>\n {loading && <LoadingBackdrop loading />}\n <Header title={`Execução ${Number(executionNumber) + 1}`} />\n {!hasTimeContestations && !hasAnnullations && (\n <NoRegistrationsText>\n Ainda não foi cadastrada nenhuma correção de horários\n </NoRegistrationsText>\n )}\n {(hasTimeContestations || hasAnnullations) && (\n <>\n <HeaderContainer>\n <CardItem>\n <StyledTypography color=\"primary\" align=\"center\">\n Aqui você pode registrar a correção dos horários do inÃcio e\n final do plantão. Para inclusão, clique no botão (+).\n </StyledTypography>\n </CardItem>\n <CardItem>\n <StyledTitle>Registro original</StyledTitle>\n </CardItem>\n </HeaderContainer>\n <OriginalSchedules\n shiftExecution={shiftExecution as ShiftExecution}\n />\n <StyledTitle>Histórico de correção de horários</StyledTitle>\n </>\n )}\n <CardContainer>\n {hasAnnullations && (\n <>\n {annullations\n .map((annullation, index) => (\n <>\n <AnnulledCard annullation={annullation} />\n {(index !== 0 || hasTimeContestations) && <Divider />}\n </>\n ))\n .reverse()}\n </>\n )}\n {hasTimeContestations && (\n <>\n {timeContestations\n .map((timeContestation, index) => (\n <>\n <TimeContestationCard\n timeContestation={timeContestation}\n contestationNumber={index + 1}\n />\n {index !== 0 && <Divider />}\n </>\n ))\n .reverse()}\n </>\n )}\n </CardContainer>\n </>\n );\n};\n\nexport default ExecutionHistoryContestation;\n","import styled from 'styled-components';\n\nexport const OutterContainer = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nexport const TitleContainer = styled.div`\n max-width: 100%;\n text-align: center;\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n","import Typography from '@material-ui/core/Typography';\nimport * as Sentry from '@sentry/react';\nimport React, { useContext } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport ExecutionMessageForm from '../../components/ExecutionMessageForm';\nimport { FormValues } from '../../components/ExecutionMessageForm/utils';\nimport Header from '../../components/Headers/Header';\nimport { AuthContext } from '../../contexts/auth';\nimport { CurrentShiftDataContext } from '../../contexts/CurrentShiftData';\nimport { isSelfCare } from '../../contexts/permission';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\nimport useShift from '../../hooks/useShift';\nimport { resolveErrorMessage } from '../../utils/error';\nimport { OutterContainer, TitleContainer } from './styles';\n\nconst ShiftFinish: React.FC = () => {\n const { shiftInProgress, executionInProgress } = useContext(\n ShiftInProgressContext\n );\n const { useEvent, useShiftQuestions } = useContext(CurrentShiftDataContext);\n const { finishShift } = useShift();\n const { clearAllLocalShiftEvents } = useEvent();\n const {\n buildNormalizedAnswersToApi,\n clearAllLocalShiftQuestions,\n } = useShiftQuestions();\n const history = useHistory();\n const { userInfo } = useContext(AuthContext);\n\n const handleShiftFinish = async (values: FormValues) => {\n const shiftId = shiftInProgress!.id!;\n const shiftExecutionId = executionInProgress!.id!;\n return finishShift(shiftId, {\n message: values.message,\n careQuestionAnswers: buildNormalizedAnswersToApi(),\n })\n .then(() => {\n clearAllLocalShiftEvents();\n clearAllLocalShiftQuestions();\n history.replace(`/plantao/cuidar-do-cuidador/fim`, {\n shiftExecutionId, shiftInProgress\n });\n\n })\n .catch((err) => {\n Sentry.captureException(err);\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n });\n };\n\n const headerTitle = `Finalização de ${\n isSelfCare(userInfo?.user) ? 'rotina' : 'plantão'\n }`;\n const title = isSelfCare(userInfo?.user) ? '' : 'Passagem de plantão';\n\n return (\n <OutterContainer>\n <Header title={headerTitle} leftButtonType=\"goBack\" />\n <TitleContainer>\n <Typography variant=\"h6\">{title}</Typography>\n </TitleContainer>\n <ExecutionMessageForm\n onSubmit={handleShiftFinish}\n formProps={{ buttonLabel: 'Finalizar' }}\n initialValues={{\n message: executionInProgress?.message?.message || '',\n }}\n />\n </OutterContainer>\n );\n};\n\nexport default ShiftFinish;\n","import styled, { css } from 'styled-components';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { AccessTime, List } from '@material-ui/icons';\n\nconst baseIconStyles = css`\n margin-right: ${({ theme }) => theme.spacing(1)}px;\n height: 20px;\n width: 20px;\n`;\n\nexport const StyledMenuItem = styled(MenuItem)`\n color: ${({ theme }) => theme.palette.common.white};\n background-color: ${({ theme }) => theme.palette.primary.main};\n background-image: linear-gradient(\n to bottom right,\n ${({ theme }) => theme.palette.primary.main},\n ${({ theme }) => theme.palette.secondary.dark}\n );\n display: flex;\n align-items: center;\n margin-bottom: ${({ theme }) => theme.spacing(0.75)}px;\n border-radius: ${({ theme }) => theme.spacing(1.5)}px;\n font-weight: bold;\n min-height: initial;\n\n &:hover {\n background-color: ${({ theme }) => theme.palette.primary.main};\n opacity: 0.7;\n }\n`;\n\nexport const ButtonContainer = styled.div<{ $isExpanded?: boolean }>`\n ${({ $isExpanded }) =>\n $isExpanded\n ? `\n &::before {\n content: '';\n position: fixed;\n top: 0; right: 0; bottom: 0; left: 0;\n background-color: black;\n opacity: 0.4; \n }\n `\n : ''}\n\n button {\n padding: ${({ theme }) => theme.spacing(0.5, 0.1)};\n background-image: linear-gradient(\n to bottom right,\n ${({ theme }) => theme.palette.primary.main},\n ${({ theme }) => theme.palette.secondary.dark}\n );\n min-width: 30px;\n min-height: 30px;\n }\n`;\n\nexport const ShiftDetailsIcon = styled(List)`\n ${baseIconStyles}\n`;\n\nexport const TimeCorrectionIcon = styled(AccessTime)`\n ${baseIconStyles}\n`;\n","import { ShiftModel } from '@cuidador/database';\nimport Button from '@material-ui/core/Button';\nimport Menu, { MenuProps } from '@material-ui/core/Menu';\nimport { withStyles } from '@material-ui/core/styles';\nimport MenuIcon from '@material-ui/icons/MoreVert';\nimport React, { useContext } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { AuthContext } from '../../../contexts/auth';\nimport { ShiftInProgressContext } from '../../../contexts/ShiftInProgress';\nimport useCanAccess from '../../../hooks/useCanAccess';\nimport useShift from '../../../hooks/useShift';\nimport {\n caregiverOwnAtLeastOneShiftExecution,\n isShiftDetailsVisible,\n} from '../utils';\nimport {\n ButtonContainer,\n StyledMenuItem,\n ShiftDetailsIcon,\n TimeCorrectionIcon,\n} from './styles';\n\nconst StyledMenu = withStyles({\n paper: {\n border: 'none',\n backgroundColor: 'transparent',\n },\n})((props: MenuProps) => (\n <Menu\n elevation={0}\n getContentAnchorEl={null}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n {...props}\n />\n));\n\nconst MenuButton: React.FC<{ shift: ShiftModel }> = ({ shift }) => {\n const history = useHistory();\n const { showContestationPageItem } = useShift();\n const { userInfo } = useContext(AuthContext);\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const [isExpanded, setIsExpanded] = React.useState(false);\n const caregiverId = Number(userInfo?.user?.id);\n const {\n isAllowedToRead: isAllowedToReadShiftTimeContestation,\n } = useCanAccess('care/shift/execution/time-contestation');\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n setIsExpanded(true);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n setIsExpanded(false);\n };\n\n const redirectToShiftDetails = () =>\n history.push(`/historico/plantao/${shift.id}`);\n\n const redirectToShiftExecutionsContestation = () =>\n history.push(`/correcao-de-horarios/plantao/${shift.id}`);\n\n const showShiftDetailsItem = isShiftDetailsVisible(\n shift,\n userInfo!.user!,\n shiftInProgress\n );\n\n const showTimeContestationReadItem =\n !!caregiverOwnAtLeastOneShiftExecution(shift, caregiverId) &&\n isAllowedToReadShiftTimeContestation;\n\n if (\n !showShiftDetailsItem &&\n !showTimeContestationReadItem &&\n !showContestationPageItem(shift)\n ) {\n // If no item is visible, don't show menu button\n return null;\n }\n\n return (\n <ButtonContainer\n $isExpanded={isExpanded}\n data-testid={`menu-button-${shift.id}`}\n >\n <Button\n aria-controls=\"button-menu\"\n aria-haspopup=\"true\"\n variant=\"contained\"\n color=\"primary\"\n onClick={handleClick}\n >\n <MenuIcon fontSize=\"small\" />\n </Button>\n <StyledMenu\n id=\"button-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n {showShiftDetailsItem && (\n <StyledMenuItem onClick={redirectToShiftDetails}>\n <ShiftDetailsIcon />\n Detalhes do plantão\n </StyledMenuItem>\n )}\n {showContestationPageItem(shift) && (\n <StyledMenuItem onClick={redirectToShiftExecutionsContestation}>\n <TimeCorrectionIcon />\n Correção de horários\n </StyledMenuItem>\n )}\n </StyledMenu>\n </ButtonContainer>\n );\n};\n\nexport default MenuButton;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const ContainerShifts = styled.div`\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const ContainerDayShifts = styled.div`\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n margin: ${({ theme }) => theme.spacing(1.5, -1, 0)};\n padding: ${({ theme }) => theme.spacing(1, 2)};\n`;\n\nexport const ShiftCard = styled.div<{ backgroundColor: string }>`\n border: 2px solid ${({ theme }) => theme.palette.extra.color.grey.light};\n border-radius: ${({ theme }) => theme.spacing(2)}px;\n background-color: ${({ backgroundColor }) => backgroundColor};\n padding: ${({ theme }) => theme.spacing(2)}px;\n margin-top: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const ShiftCardTitle = styled.div`\n border-bottom: 2px solid\n ${({ theme }) => theme.palette.extra.color.grey.light};\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n margin-top: ${({ theme }) => theme.spacing(-1)}px;\n padding-bottom: ${({ theme }) => theme.spacing(1)}px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const ShiftCardTitleName = styled(Typography)`\n font-weight: bold;\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const StyledYYYYMM = styled(Typography)`\n font-weight: 600;\n color: ${({ theme }) => theme.palette.extra.color.grey.main};\n text-transform: capitalize;\n`;\n\nexport const StyledDD = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.grey.main};\n`;\n\nexport const StyledName = styled(Typography)`\n font-weight: 600;\n color: ${({ theme }) => theme.palette.extra.color.grey.main};\n`;\n\nexport const ShiftBodyDetails = styled.div`\n flex-direction: column;\n display: flex;\n align-items: start;\n justify-content: space-between;\n`;\n","import { ShiftModel } from '@cuidador/database';\nimport { Typography } from '@material-ui/core';\nimport { format } from 'date-fns';\nimport ptBrLocale from 'date-fns/locale/pt-BR';\nimport React, { useContext } from 'react';\nimport { AuthContext } from '../../contexts/auth';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\nimport MenuButton from './MenuButton';\nimport {\n ContainerDayShifts,\n ContainerShifts,\n ShiftBodyDetails,\n ShiftCard,\n ShiftCardTitle,\n StyledDD,\n StyledName,\n StyledYYYYMM,\n} from './styles';\nimport {\n getDayGroup,\n getShiftCardBackgroundColor,\n isShiftMenuVisible,\n} from './utils';\n\ninterface ShiftsHistoryProps {\n shifts?: Map<string, Map<string, ShiftModel[]>>;\n}\n\nconst ShiftsHistory: React.FC<ShiftsHistoryProps> = ({ shifts }) => {\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n const { userInfo } = useContext(AuthContext);\n\n return (\n <>\n {Array.from(shifts?.entries() || []).map(([mapKeyYYYYMM, innerMap]) => {\n const anyShift = Array.from(innerMap.values())[0][0];\n const date = new Date(String(anyShift.plannedToStartAt));\n return (\n <ContainerShifts key={mapKeyYYYYMM}>\n <StyledYYYYMM>\n {format(date, 'MMMM, yyyy', { locale: ptBrLocale })}\n </StyledYYYYMM>\n {Array.from(innerMap.entries()).map(([mapKeyDD, shifts]) => {\n const anyShift = shifts[0];\n const date = new Date(String(anyShift.plannedToStartAt));\n return (\n <ContainerDayShifts key={`${mapKeyYYYYMM}${mapKeyDD}`}>\n <StyledDD>{getDayGroup(date)}</StyledDD>\n {shifts.map((shift) => {\n return (\n <ShiftCard\n backgroundColor={getShiftCardBackgroundColor(shift)}\n key={shift.id}\n data-testid={`shift-card-${shift.id}`}\n >\n <ShiftCardTitle>\n <StyledName>\n {`${format(\n new Date(shift.plannedToStartAt || ''),\n 'HH:mm'\n )} ${\n shift.name || shift.shiftSchedule?.name || ''\n }`}\n </StyledName>\n {isShiftMenuVisible(\n shift,\n userInfo!.user!,\n shiftInProgress\n ) && <MenuButton shift={shift} />}\n </ShiftCardTitle>\n {shift.status === 'not_done' && (\n <ShiftBodyDetails>\n <Typography>Plantão não iniciado.</Typography>\n </ShiftBodyDetails>\n )}\n </ShiftCard>\n );\n })}\n </ContainerDayShifts>\n );\n })}\n </ContainerShifts>\n );\n })}\n </>\n );\n};\nexport default ShiftsHistory;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(1, 1, 2, 1)};\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\n","import { ShiftModel } from '@cuidador/database';\nimport format from 'date-fns/format';\nimport qs from 'query-string';\nimport React, { useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport Header from '../../components/Headers/Header';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport ShiftsHistory from '../../components/ShiftsHistory';\nimport StyledButton from '../../components/StyledButton';\nimport useShift from '../../hooks/useShift';\nimport { Container } from './styles';\n\nconst ShiftHistory: React.FC = () => {\n const [page, setPage] = useState(0);\n const [shifts, setShifts] = useState<ShiftModel[]>([]);\n const [patientName, setPatientName] = useState('');\n const params = useParams<{ patientId: string }>();\n const history = useHistory();\n const { getByPatientIdPaginated, total, loading } = useShift();\n const patientId = parseInt(params.patientId);\n\n /**\n * groupBy year + month, then group by day\n * Map<'YYYYMM', Map<'DD', ShiftModel>>\n */\n const [groupedShifts, setGroupedShifts] = useState<\n Map<string, Map<string, ShiftModel[]>>\n >(new Map<string, Map<string, ShiftModel[]>>());\n\n const fetchData = () => {\n const params = qs.parse(history.location.search);\n if (patientId) {\n getByPatientIdPaginated(patientId, {\n ...params,\n page,\n limit: 10,\n orderBy: 'plannedToStartAt',\n order: 'DESC',\n })\n .then((response) => {\n const loadedShifts = response.data.results;\n if (page === 0) {\n setShifts(loadedShifts);\n } else {\n setShifts([...shifts, ...loadedShifts]);\n }\n setPatientName(getPatientName(response.data.results));\n })\n .catch((e) => {\n toast.error(e);\n });\n }\n };\n\n const handleShiftGroup = () => {\n const map = new Map(groupedShifts);\n for (const shift of shifts) {\n const mapKeyYYYYMM = format(\n new Date(String(shift.plannedToStartAt)),\n 'yyyyMM'\n );\n const mapKeyDD = format(new Date(String(shift.plannedToStartAt)), 'dd');\n\n if (map.has(mapKeyYYYYMM)) {\n const innerMap = map.get(mapKeyYYYYMM)!;\n if (innerMap.has(mapKeyDD)) {\n const shifts = innerMap.get(mapKeyDD)!;\n if (!shifts.find((s) => s.id === shift.id)) {\n innerMap.set(mapKeyDD, [...shifts, shift]);\n }\n } else {\n innerMap.set(mapKeyDD, [shift]);\n }\n } else {\n map.set(\n mapKeyYYYYMM,\n new Map<string, ShiftModel[]>([[mapKeyDD, [shift]]])\n );\n }\n }\n setGroupedShifts(map);\n };\n\n useEffect(() => {\n fetchData();\n }, [page]);\n\n useEffect(() => {\n handleShiftGroup();\n }, [shifts]);\n\n const pageIncrement = () => {\n setPage(page + 1);\n };\n\n const getPatientName = (shifts: ShiftModel[]) =>\n shifts[0].patient?.name || '';\n\n return (\n <>\n <Header\n title={`Histórico de Plantões - ${patientName}`}\n leftIconClick={() => history.goBack()}\n />\n <Container>\n <ShiftsHistory shifts={groupedShifts} />\n {loading && <LoadingBackdrop loading />}\n {shifts.length < total && (\n <StyledButton\n data-testid=\"show-more\"\n size=\"medium\"\n color=\"secondary\"\n onClick={pageIncrement}\n >\n Ver mais\n </StyledButton>\n )}\n </Container>\n </>\n );\n};\n\nexport default ShiftHistory;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const CardBox = styled.div`\n background-color: white;\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n color: ${({ theme }) => theme.palette.extra.color.grey.main};\n padding: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const AnswerLineTypography = styled(Typography)`\n line-height: 1.3;\n`;\n\nexport const MultiAnswerUl = styled.ul`\n margin: 0;\n padding-left: ${({ theme }) => theme.spacing(3)}px;\n`;\n\nexport const MultiAnswerLi = styled(AnswerLineTypography)`\n list-style-type: disc;\n display: list-item;\n`;\n","import { AnswerType, QuestionAnswerOption } from '@cuidador/database';\nimport React from 'react';\nimport { AnswerLineTypography, MultiAnswerLi, MultiAnswerUl } from './styles';\n\nexport function getAnswerContent(questionAnswerData?: string | AnswerType) {\n if (!questionAnswerData || typeof questionAnswerData === 'string')\n return null;\n\n const values: QuestionAnswerOption[] = [];\n let nav: AnswerType = questionAnswerData;\n while (nav && nav.type !== 'multi') {\n const checkedOption = nav.options.find((o) => o.isChecked)!;\n values.push(checkedOption);\n if (checkedOption.nextAnswer) {\n nav = checkedOption.nextAnswer;\n } else {\n break;\n }\n }\n\n let selectedOptions: QuestionAnswerOption[] = [];\n if (nav && nav.type === 'multi') {\n selectedOptions = nav.options.filter((o) => o.isChecked);\n }\n\n return (\n <>\n {values.map((v) => (\n <>\n <AnswerLineTypography variant=\"body2\" key={`value-${v.id}`}>\n {v.value}\n </AnswerLineTypography>\n {v.needDescription && v.description && (\n <AnswerLineTypography variant=\"body2\" key={`desc-${v.id}`}>\n <b>Observações:</b> {v.description}\n </AnswerLineTypography>\n )}\n </>\n ))}\n <MultiAnswerUl>\n {selectedOptions.map((option) => (\n <MultiAnswerLi variant=\"body2\" key={option.id}>\n {option.value}\n </MultiAnswerLi>\n ))}\n </MultiAnswerUl>\n </>\n );\n}\n","import { CareQuestionAnswer } from '@cuidador/database';\nimport { Typography } from '@material-ui/core';\nimport React from 'react';\nimport { CardBox } from './styles';\nimport { getAnswerContent } from './utils';\n\ntype CardProps = {\n title?: string;\n careQuestionAnswer?: CareQuestionAnswer;\n careQuestion?: string;\n};\n\nconst Card: React.FC<CardProps> = ({\n title,\n careQuestionAnswer,\n careQuestion,\n}) => {\n return (\n <CardBox>\n <Typography variant=\"body1\">\n <b>{title}</b>\n </Typography>\n <Typography>{careQuestion}</Typography>\n {careQuestionAnswer ? (\n <Typography>\n {getAnswerContent(careQuestionAnswer.questionAnswerData)}\n </Typography>\n ) : (\n <Typography>Não respondida.</Typography>\n )}\n </CardBox>\n );\n};\n\nexport default Card;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: ${({ theme }) => theme.spacing(2, 2)};\n color: black;\n`;\n\nexport const TitleHeader = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n font-weight: bold;\n`;\n\nexport const StyledSection = styled.div`\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n margin: ${({ theme }) => theme.spacing(1, -2)};\n padding: ${({ theme }) => theme.spacing(1, 2)};\n`;\n\nexport const CardDiv = styled.div<{ color?: string }>`\n margin-top: ${({ theme }) => theme.spacing(-1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(2)}px;\n background-color: ${(props) => `#${props.color}` || 'inherit'};\n padding: ${({ theme }) => theme.spacing(1, 2)};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n`;\n","import { AnswerType, CareQuestionAnswer } from '@cuidador/database';\n\nfunction isDeeplyAnswered(questionAnswerData: AnswerType): boolean {\n switch (questionAnswerData.type) {\n case 'multi':\n const isCheckedArray = questionAnswerData.options.map(\n (option) => option.isChecked\n );\n return isCheckedArray.some((value) => value);\n case 'single':\n const checkedOption = questionAnswerData.options.find((o) => o.isChecked);\n if (!checkedOption) return false;\n if (!checkedOption.nextAnswer) return true;\n return isDeeplyAnswered(checkedOption.nextAnswer);\n default:\n return false;\n }\n}\n\nfunction countAnsweredShiftCareQuestions(\n careQuestionAnswers: CareQuestionAnswer[]\n) {\n const answeredQuestionCount = careQuestionAnswers.reduce(\n (count, currentCareQuestionAnswer) => {\n const questionAnswerData = currentCareQuestionAnswer.questionAnswerData;\n if (!questionAnswerData || typeof questionAnswerData === 'string')\n return 0;\n\n return count + (isDeeplyAnswered(questionAnswerData) ? 1 : 0);\n },\n 0\n );\n\n return answeredQuestionCount;\n}\n\nexport function getCareCategoryCardStatusMessage(\n careQuestionAnswers: CareQuestionAnswer[],\n careQuestionCount: number\n) {\n const answered = countAnsweredShiftCareQuestions(careQuestionAnswers);\n return `${answered}/${careQuestionCount} perguntas respondidas`;\n}\n","import { ShiftModel } from '@cuidador/database';\nimport { Typography } from '@material-ui/core';\nimport _ from 'lodash';\nimport React from 'react';\nimport Card from './Card';\nimport { CardDiv, Container, StyledSection, TitleHeader } from './styles';\nimport { getCareCategoryCardStatusMessage } from './utils';\n\ninterface CareCategoriesViewerProps {\n shift: ShiftModel;\n}\n\nconst CareCategoriesViewer: React.FC<CareCategoriesViewerProps> = (\n props: CareCategoriesViewerProps\n) => {\n const questionsGroupedByCareCategory = _.groupBy(\n props.shift.shiftCareQuestions || [],\n 'careQuestion.careLine.categoryId'\n );\n return (\n <StyledSection>\n <TitleHeader variant=\"body1\">Cuidados</TitleHeader>\n <Container>\n {Object.entries(questionsGroupedByCareCategory).map(\n ([careCategoryId, shiftCareQuestionList]) => {\n const currentCareCategory = shiftCareQuestionList\n .map((scq) => scq.careQuestion?.careLine?.careCategory)\n .find((cq) => String(cq?.id) === careCategoryId);\n\n const filteredCareQuestions = (\n props.shift.careQuestionAnswers || []\n ).filter((cqa) => {\n return shiftCareQuestionList\n .map((scq) => scq.careQuestionId)\n .includes(cqa.careQuestionId);\n });\n\n return (\n <CardDiv\n key={careCategoryId}\n color={currentCareCategory?.colorHexa}\n >\n <Typography variant=\"subtitle1\">\n {currentCareCategory?.name}\n </Typography>\n <Typography variant=\"subtitle2\">\n {getCareCategoryCardStatusMessage(\n filteredCareQuestions,\n shiftCareQuestionList.length\n )}\n </Typography>\n {shiftCareQuestionList.map((shiftCareQuestion) => {\n const currentCareQuestionAnswer = props.shift.careQuestionAnswers?.find(\n (cqa) =>\n cqa.careQuestionId === shiftCareQuestion.careQuestionId\n );\n\n const currentCareQuestion =\n shiftCareQuestion.careQuestion?.careQuestionText;\n\n return (\n <Card\n key={currentCareQuestionAnswer?.id}\n title={shiftCareQuestion.careQuestion?.careLine?.name}\n careQuestion={currentCareQuestion}\n careQuestionAnswer={currentCareQuestionAnswer}\n />\n );\n })}\n </CardDiv>\n );\n }\n )}\n </Container>\n </StyledSection>\n );\n};\n\nexport default CareCategoriesViewer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n position: fixed;\n bottom: 0;\n display: flex;\n justify-content: center;\n\n width: 100%;\n height: 73px;\n\n background-color: ${({ theme }) => theme.palette.primary.main};\n border-radius: 21px 21px 0 0;\n`;\n\nexport const PreviousButton = styled.button`\n border: 1px solid #ffffff;\n border-radius: 5px;\n background-color: ${({ theme }) => theme.palette.primary.main};\n color: #ffffff;\n height: 2.5rem;\n font-size: 12px;\n font-weight: bold;\n\n display: flex;\n align-items: center;\n\n svg {\n width: 2rem;\n }\n\n transition: 0.3s;\n\n &:hover {\n color: ${({ theme }) => theme.palette.primary.main};\n background-color: #ffffff;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n background-color: ${({ theme }) => theme.palette.primary.main};\n color: #ffffff;\n }\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const ShiftDataContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n font-size: 14px;\n font-weight: bold;\n line-height: 1.2rem;\n padding: 0 0.5rem;\n width: 10rem;\n text-align: center;\n\n /* Medium screen */\n @media only screen and (min-width: 768px) {\n width: 30rem;\n }\n`;\n","import { ChevronLeft, ChevronRight } from '@material-ui/icons';\nimport { format } from 'date-fns';\nimport React, { useMemo } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport {\n ButtonContainer,\n Container,\n PreviousButton,\n ShiftDataContainer,\n} from './styles';\n\ninterface PreviousOrNextShiftProps {\n startedAt?: string;\n plannedToStartAt?: string;\n shiftIds: number[];\n}\n\nconst PreviousOrNextShift: React.FC<PreviousOrNextShiftProps> = ({\n startedAt,\n plannedToStartAt,\n shiftIds,\n}) => {\n const params = useParams<{ shiftId: string }>();\n const currentShiftId = parseInt(params.shiftId);\n const history = useHistory();\n const getShiftStartTime = () => {\n const startTime = startedAt\n ? format(new Date(startedAt), 'HH:mm')\n : '--:--';\n return startTime;\n };\n const getShiftPlannedStartDate = () => {\n const shiftPlannedStartDate = plannedToStartAt\n ? format(new Date(plannedToStartAt), 'dd/MM/yyyy')\n : '--/--/----';\n return shiftPlannedStartDate;\n };\n\n const goToPreviousShift = () => {\n const previousShiftId = shiftIds[shiftIds.indexOf(currentShiftId) + 1];\n history.replace(`/historico/plantao/${previousShiftId}`);\n };\n\n const goToNextShift = () => {\n const nextShiftId = shiftIds[shiftIds.indexOf(currentShiftId) - 1];\n history.replace(`/historico/plantao/${nextShiftId}`);\n };\n\n const isPreviousShiftButtonDisabled = useMemo(() => {\n const previousShiftId = shiftIds[shiftIds.indexOf(currentShiftId) + 1];\n if (!previousShiftId) {\n return true;\n }\n return false;\n }, [shiftIds, currentShiftId]);\n\n const isNextShiftButtonDisabled = useMemo(() => {\n const nextShiftId = shiftIds[shiftIds.indexOf(currentShiftId) - 1];\n if (!nextShiftId) {\n return true;\n }\n return false;\n }, [shiftIds, currentShiftId]);\n\n return (\n <Container>\n <ButtonContainer>\n <PreviousButton\n onClick={goToPreviousShift}\n disabled={isPreviousShiftButtonDisabled}\n data-testid=\"previous-shift-button\"\n >\n <ChevronLeft />\n </PreviousButton>\n </ButtonContainer>\n\n <ShiftDataContainer>\n <span>{getShiftPlannedStartDate()}</span>\n <span>{getShiftStartTime()}</span>\n </ShiftDataContainer>\n\n <ButtonContainer>\n <PreviousButton\n onClick={goToNextShift}\n disabled={isNextShiftButtonDisabled}\n >\n <ChevronRight />\n </PreviousButton>\n </ButtonContainer>\n </Container>\n );\n};\n\nexport default PreviousOrNextShift;\n","import {\n Backdrop as MaterialBackdrop,\n CircularProgress as MaterialCircularProgress,\n Typography,\n} from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex: 1;\n background-color: ${({ theme }) => theme.palette.common.white};\n padding: ${({ theme }) => theme.spacing(2)}px;\n flex-direction: column;\n color: ${({ theme }) => theme.palette.primary.dark};\n padding-bottom: ${({ theme }) => theme.spacing(11)}px;\n`;\n\nexport const Backdrop = styled(MaterialBackdrop)`\n z-index: ${({ theme }) => theme.zIndex.drawer + 1};\n color: ${({ theme }) => theme.palette.extra.color.grey.light};\n position: absolute;\n`;\n\nexport const BackdropCircularProgress = styled(MaterialCircularProgress).attrs({\n color: 'inherit',\n})``;\n\nexport const TitleContainer = styled.div`\n margin-left: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n text-align: left;\n padding-bottom: ${({ theme }) => theme.spacing(2)}px;\n border-bottom: 1px solid ${({ theme }) => theme.palette.primary.main};\n\n div {\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n }\n`;\n\nexport const StyledTypographyTitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n font-weight: bold;\n`;\n\nexport const StyledTypographyAvatar = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n margin-left: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const StyledTypographySubTitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n`;\n\nexport const TypographyWithIcon = styled(Typography)`\n color: ${({ theme }) => theme.palette.extra.color.grey.dark};\n display: flex;\n align-items: center;\n\n svg {\n margin-left: ${({ theme }) => theme.spacing(1)}px;\n }\n`;\n\nexport const ShiftPatientContainer = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n align-items: center;\n margin: ${({ theme }) => theme.spacing(1, 0)};\n`;\n\nexport const StyledTypographyAdditionalCoverage = styled(Typography)`\n color: ${({ theme }) => theme.palette.warning.dark};\n`;\n","import { ShiftModel } from '@cuidador/database';\nimport { Avatar, Typography } from '@material-ui/core';\nimport { format } from 'date-fns';\nimport { ptBR } from 'date-fns/locale';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport CareCategoriesViewer from '../../../components/CareCategoriesViewer';\nimport { formatEvents } from '../../../components/CurrentShiftEventList/CurrentShiftCards/ScheduledMeasurementCard/utils';\nimport ExecutionMessageCard from '../../../components/ExecutionMessageCard';\nimport Header from '../../../components/Headers/Header';\nimport LoadingBackdrop from '../../../components/LoadingBackdrop';\nimport ShiftEventList from '../../../components/ShiftEventList';\nimport { separateComplicationsFromActivities } from '../../../components/ShiftEventList/utils';\nimport { getShiftRealTime } from '../../../components/ShiftsHistory/utils';\nimport { isCaregiver } from '../../../contexts/permission';\nimport { ShiftInProgressContext } from '../../../contexts/ShiftInProgress';\nimport usePatient from '../../../hooks/usePatient';\nimport useShift from '../../../hooks/useShift';\nimport PreviousOrNextShift from './PreviousOrNextShift';\nimport {\n Container,\n ShiftPatientContainer,\n StyledTypographyAdditionalCoverage,\n StyledTypographyAvatar,\n StyledTypographyTitle,\n TitleContainer,\n TypographyWithIcon,\n} from './styles';\n\nconst FollowShift: React.FC = () => {\n const [patientPictureURL, setPatientPictureURL] = useState('');\n const [shiftIds, setShiftIds] = useState<number[]>([]);\n const [shift, setShift] = useState<ShiftModel>();\n const { getById, loading, getByPatientIdPaginated } = useShift();\n const { getProfilePicture } = usePatient();\n const { refreshShiftInProgress, executionInProgress } = useContext(\n ShiftInProgressContext\n );\n\n const params = useParams<{ shiftId: string }>();\n const id = parseInt(params.shiftId);\n const history = useHistory();\n\n useEffect(() => {\n if (isCaregiver()) {\n refreshShiftInProgress();\n\n if (!executionInProgress) {\n toast.error(\n 'Como cuidador você só pode ter acesso a essa tela com um plantão em andamento'\n );\n return history.push('/');\n }\n }\n }, []);\n\n useEffect(() => {\n if (id) {\n getById(id).then((shift) => {\n setShift(shift as ShiftModel);\n\n if (shift?.patientId && shiftIds.length === 0)\n fetchShiftList(shift.patientId);\n });\n }\n }, [id]);\n\n useEffect(() => {\n if (shift) {\n handleGetProfilePictureURL(Number(shift?.patient?.id)).then((url) => {\n if (!url) return;\n setPatientPictureURL(url);\n });\n }\n }, [shift]);\n\n const handleGetProfilePictureURL = async (id: number) => {\n try {\n return await getProfilePicture(id).then(\n ({ data: { signedUrl } }) => signedUrl\n );\n } catch (err) {\n // ignore patient without profile picture error\n if (!String(err).includes('404')) toast.error(err);\n }\n };\n\n const fetchShiftList = async (patientId: number) => {\n getByPatientIdPaginated(patientId, {\n page: 0,\n limit: 100,\n orderBy: 'plannedToStartAt',\n order: 'DESC',\n }).then((response) => {\n const shifts = response.data.results;\n const startedShifts = shifts.filter((shift) => shift.startedAt);\n const shiftIds = startedShifts.map((shift) => shift.id);\n setShiftIds(shiftIds);\n });\n };\n\n const {\n complicationEvents,\n eventsWithoutComplications,\n } = separateComplicationsFromActivities(shift?.events);\n\n const formattedEventsWithoutComplications = useMemo(\n () => formatEvents(eventsWithoutComplications),\n [shift?.events]\n );\n\n if (loading) {\n return <LoadingBackdrop loading />;\n }\n\n if (!shift) {\n return null;\n }\n\n return (\n <>\n <Header\n title=\"Histórico de plantão\"\n leftIconClick={() => history.goBack()}\n />\n <Container>\n <TitleContainer>\n <StyledTypographyTitle variant=\"h6\">\n {format(new Date(shift.plannedToStartAt || ''), 'dd/MM/yyyy')}\n {' - '}\n {format(new Date(shift.plannedToStartAt || ''), 'EEEE', {\n locale: ptBR,\n })}\n </StyledTypographyTitle>\n <StyledTypographyTitle variant=\"h6\">\n {shift.name || shift?.shiftSchedule?.name}\n </StyledTypographyTitle>\n <ShiftPatientContainer>\n <Avatar\n src={patientPictureURL}\n alt={shift.patient?.name}\n data-testid=\"avatar\"\n />\n <StyledTypographyAvatar variant=\"subtitle1\">\n {shift.patient?.name}\n </StyledTypographyAvatar>\n </ShiftPatientContainer>\n <TypographyWithIcon variant=\"subtitle1\">\n {getShiftRealTime(shift)}\n </TypographyWithIcon>\n {!!shift.isAdditionalCoverage && (\n <StyledTypographyAdditionalCoverage>\n *Essa é uma hora-extra / cobertura.\n </StyledTypographyAdditionalCoverage>\n )}\n </TitleContainer>\n\n {!!complicationEvents && complicationEvents.length > 0 && (\n <ShiftEventList\n events={complicationEvents || []}\n title=\"Intercorrências\"\n />\n )}\n {shift?.messages && shift?.messages.length > 0 && (\n <>\n <TitleContainer>\n <Typography variant=\"h6\">\n Anotações e evolução do plantão\n </Typography>\n {shift.messages.map((message, index) => (\n <ExecutionMessageCard\n executionMessage={message}\n key={`execution-message-card-${index}`}\n data-testid={`execution-message-card-${index}`}\n />\n ))}\n </TitleContainer>\n </>\n )}\n {!!formattedEventsWithoutComplications &&\n formattedEventsWithoutComplications.length > 0 ? (\n <ShiftEventList\n events={formattedEventsWithoutComplications || []}\n title=\"Atividades\"\n />\n ) : (\n <TitleContainer>\n <Typography variant=\"h6\">\n Nenhum evento registrado no plantão.\n </Typography>\n </TitleContainer>\n )}\n\n {shift.careQuestionAnswers && shift.careQuestionAnswers.length > 0 ? (\n <CareCategoriesViewer shift={shift} />\n ) : (\n <TitleContainer>\n <Typography variant=\"h6\">\n Nenhuma pergunta de cuidado relacionada ao plantão.\n </Typography>\n </TitleContainer>\n )}\n </Container>\n {shiftIds?.length > 0 && (\n <PreviousOrNextShift\n plannedToStartAt={String(shift?.plannedToStartAt)}\n startedAt={shift?.startedAt}\n shiftIds={shiftIds}\n />\n )}\n </>\n );\n};\n\nexport default FollowShift;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n`;\n\nexport const StepDot = styled.div<{ $active: boolean }>`\n height: 6px;\n width: 6px;\n margin: 3px;\n border-radius: 50%;\n background-color: ${({ $active, theme }) =>\n $active ? theme.palette.common.white : 'transparent'};\n border: solid 1px ${({ theme }) => theme.palette.common.white};\n`;\n","import React from 'react';\n\nimport { Container, StepDot } from './styles';\n\ntype StepsProps = {\n steps: number;\n activeStep: number;\n};\n\nconst Steps: React.FC<StepsProps> = ({ steps, activeStep }) => {\n return (\n <Container>\n {[...new Array(steps)].map((_, index) => (\n <StepDot key={index} $active={index < activeStep} />\n ))}\n </Container>\n );\n};\n\nexport default Steps;\n","import styled from 'styled-components';\nimport { Typography } from '@material-ui/core';\n\nimport StyledTextField from '../../components/StyledTextField';\nimport StyledPaper from '../../components/StyledPaper';\n\nexport const QuestionCard = styled(StyledPaper)<{\n $backgroundColor?: string;\n}>`\n background-color: ${({ $backgroundColor, theme }) =>\n $backgroundColor ? `#${$backgroundColor}` : theme.palette.primary.main};\n color: ${({ theme }) => theme.palette.common.white};\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n align-items: center;\n`;\n\nexport const StepsContainer = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: center;\n position: relative;\n padding: ${({ theme }) =>\n theme.spacing(\n 0,\n 5\n )}; // enough space to show \"99/99\" without overlapping the step dots\n`;\n\nexport const StepCounter = styled(Typography).attrs({ variant: 'caption' })`\n position: absolute;\n left: 0;\n`;\n\nexport const OptionsWrapper = styled.div`\n margin: ${({ theme }) => theme.spacing(1, 0)};\n padding: ${({ theme }) => theme.spacing(1, 2)};\n display: flex;\n flex-direction: column;\n justify-content: center;\n border: solid 1px ${({ theme }) => theme.palette.common.white};\n border-radius: ${({ theme }) => theme.shape.borderRadius}px;\n\n & .MuiFormControlLabel-root {\n margin: 0px;\n text-align: justify;\n\n :not(:first-child) {\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n padding-top: ${({ theme }) => theme.spacing(1)}px;\n border-top: solid 1px rgba(255, 255, 255, 0.3);\n }\n\n & .MuiRadio-root,\n .MuiCheckbox-root {\n margin-left: ${({ theme }) => -theme.spacing(1)}px;\n }\n }\n`;\n\nexport const OptionDescriptionContainer = styled.div``;\n\nexport const StyledOptionDescriptionTextField = styled(StyledTextField).attrs({\n fullWidth: true,\n multiline: true,\n color: 'white',\n})`\n & .MuiInputBase-input {\n &::placeholder {\n opacity: 0.7;\n }\n }\n`;\n\nexport const Divider = styled.hr`\n margin: ${({ theme }) => theme.spacing(2, 1)};\n border: 0;\n border-top: solid 1px ${({ theme }) => theme.palette.common.white};\n`;\n\nexport const QuestionText = styled(Typography)`\n margin: ${({ theme }) => theme.spacing(2, 0)};\n`;\n","import React from 'react';\nimport { Checkbox, Radio, RadioGroup } from '@material-ui/core';\nimport {\n AnswerConfig,\n AnswerType,\n QuestionAnswerOption,\n} from '@cuidador/database';\n\nimport StyledFormControlLabel from '../../../components/StyledFormControlLabel';\nimport {\n OptionsWrapper,\n OptionDescriptionContainer,\n StyledOptionDescriptionTextField,\n Divider,\n} from '../styles';\n\ntype FormProps = {\n readOnly?: boolean;\n type: AnswerType['type'];\n options: AnswerType['options'];\n onOptionsChange: (option: QuestionAnswerOption[]) => void;\n};\n\nconst ShiftQuestionOptions: React.FC<FormProps> = React.memo(\n ({ type, options, readOnly, onOptionsChange }: FormProps) => {\n const checkedOption = options.find((option) => option.isChecked);\n\n const buildChangeOptions = (\n changedData: Partial<QuestionAnswerOption>,\n optionId?: string,\n answerOptions = options\n ): QuestionAnswerOption[] => {\n const optionToChange = answerOptions.find((op) => op.id === optionId);\n\n return answerOptions.map((option) => {\n if (option.id !== optionId) {\n /**\n * if changed option was single and checked,\n * the other options must have isChecked false\n * and must not have description.\n */\n if (type === 'single' && changedData?.isChecked) {\n // remove nextAnswer values recursively\n const { nextAnswer } = option;\n const updatedNextAnswer = nextAnswer\n ? {\n ...nextAnswer,\n options: buildChangeOptions(\n changedData,\n undefined,\n nextAnswer.options\n ),\n }\n : undefined;\n return {\n ...option,\n isChecked: false,\n description: undefined,\n nextAnswer: updatedNextAnswer,\n };\n }\n return option;\n }\n return {\n ...option,\n ...optionToChange,\n ...changedData,\n // if option to change is not checked, remove description\n description: optionToChange?.isChecked\n ? changedData.description\n : undefined,\n };\n });\n };\n\n return (\n <>\n <OptionsWrapper>\n {type === 'multi' &&\n options.map((option) => {\n return (\n <React.Fragment key={option.id}>\n <StyledFormControlLabel\n color=\"white\"\n label={option.value}\n control={\n <Checkbox\n disabled={readOnly}\n key={`${option.id}-multi`}\n data-testid={`${option.id}-multi`}\n checked={option.isChecked}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n onOptionsChange(\n buildChangeOptions(\n {\n isChecked: e.target.checked,\n },\n option.id\n )\n )\n }\n />\n }\n />\n </React.Fragment>\n );\n })}\n {type === 'single' && (\n <RadioGroup\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n onOptionsChange(\n buildChangeOptions(\n {\n isChecked: true,\n },\n options.find((op) => op.id === e.target.value)!.id\n )\n )\n }\n >\n {options.map((option) => (\n <React.Fragment key={`${option.id}-single`}>\n <StyledFormControlLabel\n data-testid={`${option.id}-single`}\n color=\"white\"\n value={option.id}\n control={<Radio />}\n label={option.value}\n checked={option.isChecked}\n disabled={readOnly}\n />\n </React.Fragment>\n ))}\n </RadioGroup>\n )}\n </OptionsWrapper>\n {checkedOption && checkedOption.nextAnswer && (\n <>\n <Divider />\n <ShiftQuestionOptions\n readOnly={readOnly}\n type={checkedOption.nextAnswer.type}\n options={checkedOption.nextAnswer.options}\n onOptionsChange={(updatedOptions) => {\n onOptionsChange(\n buildChangeOptions(\n {\n nextAnswer: {\n ...checkedOption.nextAnswer,\n options: updatedOptions,\n } as AnswerConfig,\n },\n checkedOption.id\n )\n );\n }}\n />\n </>\n )}\n {checkedOption && checkedOption.needDescription && (\n <>\n <Divider />\n <OptionDescriptionContainer>\n <StyledOptionDescriptionTextField\n label=\"Observação\"\n InputLabelProps={{ shrink: true }}\n placeholder=\"Digite alguma observação sobre a pergunta de cuidado\"\n disabled={readOnly}\n value={checkedOption.description}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n onOptionsChange(\n buildChangeOptions(\n {\n description: e.target.value,\n },\n checkedOption.id\n )\n )\n }\n inputProps={{\n maxLength: 200,\n 'data-testid': 'optionDescription',\n }}\n />\n </OptionDescriptionContainer>\n </>\n )}\n </>\n );\n }\n);\nShiftQuestionOptions.displayName = 'ShiftQuestionOptions';\n\nexport default ShiftQuestionOptions;\n","import React, { useCallback } from 'react';\nimport { AnswerType, QuestionAnswerOption } from '@cuidador/database';\n\nimport Steps from '../Steps';\nimport ShiftQuestionOptions from './ShiftQuestionOptions';\nimport {\n QuestionCard,\n StepsContainer,\n StepCounter,\n QuestionText,\n} from './styles';\n\ntype FormProps = {\n backgroundColor?: string;\n careQuestionId?: number;\n careQuestionText?: string;\n questionAnswerData: AnswerType;\n onAnswerChange: (\n careQuestionId: number,\n questionAnswerData: AnswerType\n ) => void;\n totalQuestions: number;\n currentStep: number;\n};\n\nconst ShiftQuestion: React.FC<FormProps> = React.memo(\n ({\n backgroundColor,\n careQuestionId,\n careQuestionText,\n questionAnswerData,\n onAnswerChange,\n currentStep,\n totalQuestions,\n }: FormProps) => {\n /**\n * Build new answer when any option changes\n */\n const handleOptionsChange = useCallback(\n (options: QuestionAnswerOption[]) => {\n const newAnswerData: AnswerType = {\n ...questionAnswerData,\n options,\n };\n onAnswerChange(careQuestionId!, newAnswerData);\n },\n [careQuestionId, questionAnswerData]\n );\n\n return (\n <QuestionCard $backgroundColor={backgroundColor}>\n <StepsContainer>\n <StepCounter>{`${currentStep}/${totalQuestions}`}</StepCounter>\n <Steps activeStep={currentStep} steps={totalQuestions} />\n </StepsContainer>\n <QuestionText align=\"center\">{careQuestionText}</QuestionText>\n <ShiftQuestionOptions\n type={questionAnswerData.type}\n options={questionAnswerData.options}\n onOptionsChange={handleOptionsChange}\n />\n </QuestionCard>\n );\n }\n);\nShiftQuestion.displayName = 'ShiftQuestion';\n\nexport default ShiftQuestion;\n","import { Typography } from '@material-ui/core';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: ${({ theme }) => theme.spacing(1)}px;\n display: flex;\n flex-direction: column;\n flex: 1;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const Title = styled(Typography).attrs({\n variant: 'h5',\n align: 'center',\n})`\n color: ${({ theme }) => theme.palette.primary.dark};\n margin: ${({ theme }) => theme.spacing(1, 0)};\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n\n button {\n color: ${({ theme }) => theme.palette.primary.dark};\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n width: fit-content;\n }\n\n & > div {\n display: flex;\n justify-content: center;\n margin-top: ${({ theme }) => theme.spacing(2)}px;\n\n button {\n margin: ${({ theme }) => theme.spacing(0, 1)};\n }\n }\n`;\n\nexport const FinishingShiftHeaderDiv = styled.div`\n margin-top: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1)}px;\n`;\n","import { AnswerConfig } from '@cuidador/database';\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\nimport { Redirect, useHistory, useLocation } from 'react-router';\n\nimport { Typography } from '@material-ui/core';\nimport Header from '../../components/Headers/Header';\nimport ShiftQuestion from '../../components/ShiftQuestion';\nimport StyledButton from '../../components/StyledButton';\nimport { AuthContext } from '../../contexts/auth';\nimport { CurrentShiftDataContext } from '../../contexts/CurrentShiftData';\nimport { isSelfCare } from '../../contexts/permission';\nimport {\n ButtonContainer,\n Container,\n FinishingShiftHeaderDiv,\n Title,\n} from './styles';\n\ntype RouteState = {\n careCategoryIndex: number;\n careLineIndex: number;\n careQuestionIndex: number;\n isFinishingShift?: boolean;\n};\n\nconst defaultRouteState: RouteState = {\n careCategoryIndex: 0,\n careLineIndex: 0,\n careQuestionIndex: 0,\n isFinishingShift: false,\n};\n\nconst ShiftQuestionPage: React.FC = () => {\n const history = useHistory();\n const { state = defaultRouteState } = useLocation<RouteState>();\n const { useShiftQuestions } = useContext(CurrentShiftDataContext);\n const { userInfo } = useContext(AuthContext);\n const { byId, ids, saveAnswer } = useShiftQuestions();\n const [careCategoryIndex, setCareCategoryIndex] = useState(\n state.careCategoryIndex || defaultRouteState.careCategoryIndex\n );\n const [careLineIndex, setCareLineIndex] = useState(\n state.careLineIndex || defaultRouteState.careLineIndex\n );\n const [careQuestionIndex, setCareQuestionIndex] = useState(\n state.careQuestionIndex || defaultRouteState.careQuestionIndex\n );\n\n const onAnswerChange = useCallback(\n (questionId, answer) => {\n saveAnswer(questionId, answer, {\n careCategoryIndex: Number(careCategoryIndex),\n careLineIndex: Number(careLineIndex),\n careQuestionIndex: Number(careQuestionIndex),\n });\n },\n [careCategoryIndex, careLineIndex, careQuestionIndex]\n );\n\n const careCategory = byId[ids[careCategoryIndex]];\n\n const careLine = careCategory?.careLines?.[careLineIndex];\n\n const careQuestion = careLine?.careQuestions?.[careQuestionIndex];\n\n // it doesn't have careCategory or careLine or careQuestion\n if (!careCategory || !careLine || !careQuestion)\n return <Redirect to=\"/plantao\" />;\n\n const nextQuestion = useMemo(() => {\n if (careQuestionIndex < careLine!.careQuestions!.length - 1) {\n return {\n careCategoryIndex,\n careLineIndex,\n careQuestionIndex: careQuestionIndex + 1,\n };\n }\n if (careLineIndex < careCategory!.careLines!.length - 1) {\n return {\n careCategoryIndex,\n careLineIndex: careLineIndex + 1,\n careQuestionIndex: 0,\n };\n }\n if (careCategoryIndex < ids.length - 1) {\n return {\n careCategoryIndex: careCategoryIndex + 1,\n careLineIndex: 0,\n careQuestionIndex: 0,\n };\n }\n return null;\n }, [careCategoryIndex, careLineIndex, careQuestionIndex]);\n\n const previousQuestion = useMemo(() => {\n if (careQuestionIndex > 0) {\n return {\n careCategoryIndex,\n careLineIndex,\n careQuestionIndex: careQuestionIndex - 1,\n };\n }\n if (careLineIndex > 0) {\n return {\n careCategoryIndex,\n careLineIndex: careLineIndex - 1,\n careQuestionIndex:\n careCategory!.careLines[careLineIndex - 1]!.careQuestions!.length - 1,\n };\n }\n if (careCategoryIndex > 0) {\n const previousCareCategory = byId[ids[careCategoryIndex - 1]];\n const previousCareLine =\n previousCareCategory.careLines[\n previousCareCategory.careLines.length - 1\n ];\n return {\n careCategoryIndex: careCategoryIndex - 1,\n careLineIndex: previousCareCategory!.careLines!.length - 1,\n careQuestionIndex: previousCareLine!.careQuestions!.length - 1,\n };\n }\n return null;\n }, [careCategoryIndex, careLineIndex, careQuestionIndex]);\n\n const goToNextQuestion = () => {\n if (nextQuestion) {\n setCareCategoryIndex(nextQuestion.careCategoryIndex);\n setCareLineIndex(nextQuestion.careLineIndex);\n setCareQuestionIndex(nextQuestion.careQuestionIndex);\n } else if (state.isFinishingShift) {\n history.push('/plantao/finalizar');\n } else {\n history.goBack();\n }\n };\n\n const goToPreviousQuestion = () => {\n if (previousQuestion) {\n setCareCategoryIndex(previousQuestion?.careCategoryIndex);\n setCareLineIndex(previousQuestion?.careLineIndex);\n setCareQuestionIndex(previousQuestion?.careQuestionIndex);\n }\n };\n\n const totalOfQuestions = useMemo(() => {\n const lastCareCategory = byId[ids[ids.length - 1]];\n const lastCareLine =\n lastCareCategory.careLines[lastCareCategory.careLines.length - 1];\n const lastCareQuestion =\n lastCareLine.careQuestions[lastCareLine.careQuestions.length - 1];\n return lastCareQuestion.questionIndex + 1; // index of last question of this shift\n }, [careCategoryIndex, careLineIndex, careQuestionIndex]);\n\n return (\n <>\n <Header\n title={\n state.isFinishingShift\n ? `Finalização de ${\n isSelfCare(userInfo?.user) ? 'rotina' : 'plantão'\n }`\n : 'Plano de cuidado'\n }\n leftButtonType=\"goBack\"\n />\n <Container>\n {state.isFinishingShift ? (\n <FinishingShiftHeaderDiv>\n <Typography variant=\"h6\" align=\"center\">\n Revisão das perguntas de cuidado\n </Typography>\n </FinishingShiftHeaderDiv>\n ) : null}\n <Title>{careLine?.name}</Title>\n <ShiftQuestion\n backgroundColor={careCategory.colorHexa}\n currentStep={careQuestion.questionIndex + 1}\n totalQuestions={totalOfQuestions}\n careQuestionText={careQuestion.careQuestionText}\n careQuestionId={careQuestion.id}\n onAnswerChange={onAnswerChange}\n questionAnswerData={careQuestion.answerConfig as AnswerConfig}\n />\n <ButtonContainer>\n <div>\n {previousQuestion && (\n <StyledButton\n data-testid=\"previous-button\"\n color=\"inherit\"\n size=\"large\"\n onClick={goToPreviousQuestion}\n >\n Anterior\n </StyledButton>\n )}\n <StyledButton\n data-testid=\"next-button\"\n color=\"inherit\"\n size=\"large\"\n onClick={goToNextQuestion}\n >\n Próximo\n </StyledButton>\n </div>\n <StyledButton\n color=\"inherit\"\n variant=\"text\"\n onClick={goToNextQuestion}\n >\n Pular\n </StyledButton>\n </ButtonContainer>\n </Container>\n </>\n );\n};\n\nexport default ShiftQuestionPage;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"old-man\",\n transform: \"translate(0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2369\",\n \"data-name\": \"Caminho 2369\",\n d: \"M299,384.031H278.761a4.336,4.336,0,0,1-4.336-4.336V336.336A4.336,4.336,0,0,1,278.761,332h26.016a4.336,4.336,0,0,1,3.262,1.48c.823.94.381,5.953.216,7.192l-4.961,39.6A4.336,4.336,0,0,1,299,384.031Z\",\n transform: \"translate(-195.099 -236.031)\",\n fill: \"#0d8ebc\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2370\",\n \"data-name\": \"Caminho 2370\",\n d: \"M365.206,332h-5.781v52.031a4.336,4.336,0,0,0,4.3-3.763l4.961-39.6c.165-1.239.607-6.252-.216-7.192A4.336,4.336,0,0,0,365.206,332Z\",\n transform: \"translate(-255.529 -236.031)\",\n fill: \"#0a617d\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2371\",\n \"data-name\": \"Caminho 2371\",\n d: \"M443.68,341.375a4.336,4.336,0,0,1-4.336-4.336V285.008a4.336,4.336,0,0,0-8.672,0V287.9a4.336,4.336,0,1,1-8.672,0v-2.891a13.008,13.008,0,1,1,26.016,0v52.031A4.336,4.336,0,0,1,443.68,341.375Z\",\n transform: \"translate(-300.016 -193.375)\",\n fill: \"#6b5c59\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Grupo_318\",\n \"data-name\": \"Grupo 318\",\n transform: \"translate(0 84.406)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2372\",\n \"data-name\": \"Caminho 2372\",\n d: \"M32.367,292,17.05,349.164A8.672,8.672,0,1,1,.3,344.675l13.495-50.363Z\",\n transform: \"translate(0 -292)\",\n fill: \"#d5d3ea\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2373\",\n \"data-name\": \"Caminho 2373\",\n d: \"M64.124,292l15.317,57.164a8.672,8.672,0,1,0,16.753-4.489L82.7,294.313Z\",\n transform: \"translate(-45.588 -292)\",\n fill: \"#e2dff4\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2374\",\n \"data-name\": \"Caminho 2374\",\n d: \"M118.868,298.816,115,298.334v53.055l.611,2.278a8.672,8.672,0,0,0,16.753-4.489Z\",\n transform: \"translate(-81.758 -296.503)\",\n fill: \"#d5d3ea\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2375\",\n \"data-name\": \"Caminho 2375\",\n d: \"M319.231,131.768l-38.5-38.5A4.335,4.335,0,0,0,277.667,92a33.24,33.24,0,0,0-33.237,32.815c0,.018,0,.036,0,.054l0,16.071v24.771a4.336,4.336,0,0,0,4.336,4.336h38.165l8.374-37.682,11.667,11.667a8.672,8.672,0,0,0,12.263-12.264Z\",\n transform: \"translate(-173.771 -65.406)\",\n fill: \"#acceff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2376\",\n \"data-name\": \"Caminho 2376\",\n d: \"M368.684,170.047l8.374-37.682,11.667,11.667a8.672,8.672,0,0,0,12.263-12.264l-38.5-38.5A4.335,4.335,0,0,0,359.425,92v78.047Z\",\n transform: \"translate(-255.529 -65.406)\",\n fill: \"#989dec\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2377\",\n \"data-name\": \"Caminho 2377\",\n d: \"M336.3,168.725a4.336,4.336,0,0,0,0,6.132l21.185,21.185,2.23-10.033h0l-17.283-17.283A4.336,4.336,0,0,0,336.3,168.725Z\",\n transform: \"translate(-238.186 -119.05)\",\n fill: \"#989dec\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2378\",\n \"data-name\": \"Caminho 2378\",\n d: \"M321.39,30.93a15.465,15.465,0,1,1,15.465-15.465A15.482,15.482,0,0,1,321.39,30.93Z\",\n transform: \"translate(-217.494)\",\n fill: \"#ffddce\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"Grupo_319\",\n \"data-name\": \"Grupo 319\",\n transform: \"translate(103.896)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2379\",\n \"data-name\": \"Caminho 2379\",\n d: \"M359.425,170.765v12.226l15.4,15.4,2.229-10.033h0l-17.283-17.283A4.4,4.4,0,0,0,359.425,170.765Z\",\n transform: \"translate(-359.425 -121.403)\",\n fill: \"#6e75e2\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2380\",\n \"data-name\": \"Caminho 2380\",\n d: \"M359.425,0V30.93a15.465,15.465,0,1,0,0-30.93Z\",\n transform: \"translate(-359.425)\",\n fill: \"#ffbca7\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2381\",\n \"data-name\": \"Caminho 2381\",\n d: \"M84.588,125.559a8.617,8.617,0,0,0-5.248-4.064l-31.662-8.635L37.007,94.185A4.335,4.335,0,0,0,33.242,92,33.28,33.28,0,0,0,0,125.242v40.469a4.336,4.336,0,0,0,4.336,4.336H41.914a4.336,4.336,0,0,0,4.336-4.336v-31.6l.589-3.5,27.937,7.619a8.711,8.711,0,0,0,2.3.31,8.675,8.675,0,0,0,7.515-12.978Z\",\n transform: \"translate(0 -65.406)\",\n fill: \"#f9f9f9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2382\",\n \"data-name\": \"Caminho 2382\",\n d: \"M123.672,170.047a4.336,4.336,0,0,0,4.336-4.336v-31.6l.589-3.5,27.937,7.619a8.711,8.711,0,0,0,2.3.31,8.674,8.674,0,0,0,2.268-17.042l-31.662-8.635L118.764,94.185A4.335,4.335,0,0,0,115,92v78.047Z\",\n transform: \"translate(-81.758 -65.406)\",\n fill: \"#e2dff4\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2383\",\n \"data-name\": \"Caminho 2383\",\n d: \"M91.054,194.095a7.245,7.245,0,0,1-4.513-3.644l-1.452-2.8a4.336,4.336,0,1,0-7.7,3.993l1.452,2.8a15.941,15.941,0,0,0,9.93,8.017l12.151,3.314v-5.327l.589-3.5Z\",\n transform: \"translate(-54.674 -131.745)\",\n fill: \"#e2dff4\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2384\",\n \"data-name\": \"Caminho 2384\",\n d: \"M115,209.479v9.9c.283.095.568.183.857.262l12.151,3.314v-5.327l.589-3.5-10.459-2.852a7.239,7.239,0,0,1-3.138-1.8Z\",\n transform: \"translate(-81.758 -148.926)\",\n fill: \"#d5d3ea\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2385\",\n \"data-name\": \"Caminho 2385\",\n d: \"M76.965,30.93A15.465,15.465,0,1,1,92.43,15.465,15.482,15.482,0,0,1,76.965,30.93Z\",\n transform: \"translate(-43.723)\",\n fill: \"#ffddce\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Caminho_2386\",\n \"data-name\": \"Caminho 2386\",\n d: \"M115,0V30.93A15.465,15.465,0,0,0,115,0Z\",\n transform: \"translate(-81.758)\",\n fill: \"#ffbca7\"\n}));\n\nfunction SvgOldMan(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 148,\n height: 148,\n viewBox: \"0 0 148 148\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOldMan);\nexport default __webpack_public_path__ + \"static/media/old-man.023e753d.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\nimport { ReactComponent as OldMan } from '../../../assets/old-man.svg';\n\nexport const StyledOldManIllustration = styled(OldMan)`\n margin-block: ${({ theme }) => theme.spacing(10)}px;\n`;\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n p {\n color: ${({ theme }) => theme.palette.primary.dark};\n text-align: center;\n }\n`;\n","import React from 'react';\nimport { Typography } from '@material-ui/core';\nimport { Container, StyledOldManIllustration } from './styles';\n\nconst UnregistredShiftsMessage: React.FC = () => {\n return (\n <Container>\n <StyledOldManIllustration data-testid=\"old-man-illustration\" />\n <Typography>Não há nenhum plantão agendado</Typography>\n </Container>\n );\n};\n\nexport default UnregistredShiftsMessage;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_6787_1391)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M21.6666 13.0001C21.6666 8.22258 17.7775 4.33341 13 4.33341C8.22246 4.33341 4.33329 8.22258 4.33329 13.0001C4.33329 17.7776 8.22246 21.6667 13 21.6667C17.7775 21.6667 21.6666 17.7776 21.6666 13.0001ZM2.16663 13.0001C2.16663 7.02008 7.01996 2.16675 13 2.16675C18.98 2.16675 23.8333 7.02008 23.8333 13.0001C23.8333 18.9801 18.98 23.8334 13 23.8334C7.01996 23.8334 2.16663 18.9801 2.16663 13.0001ZM13 8.66675L18.4166 13.0001L13 17.3334V8.66675ZM9.74996 8.66675H11.9166V17.3334H9.74996V8.66675Z\",\n fill: \"white\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_6787_1391\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n width: 26,\n height: 26,\n fill: \"white\"\n})));\n\nfunction SvgNotStarted(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 26,\n height: 26,\n viewBox: \"0 0 26 26\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2, _ref3);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgNotStarted);\nexport default __webpack_public_path__ + \"static/media/not-started.f9a77e5a.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.08955 0.179729C7.03294 0.122761 6.96567 0.07756 6.8916 0.0467181C6.81753 0.0158762 6.73811 0 6.65791 0C6.57771 0 6.49829 0.0158762 6.42422 0.0467181C6.35015 0.07756 6.28288 0.122761 6.22627 0.179729L2.99252 3.40363L1.83978 2.27723C1.78317 2.22026 1.7159 2.17506 1.64182 2.14421C1.56775 2.11337 1.48834 2.0975 1.40814 2.0975C1.32794 2.0975 1.24852 2.11337 1.17445 2.14421C1.10038 2.17506 1.03311 2.22026 0.976497 2.27723L0.179231 3.07773C0.122421 3.1345 0.077345 3.20195 0.0465886 3.27623C0.0158322 3.35051 0 3.43014 0 3.51057C0 3.59099 0.0158322 3.67063 0.0465886 3.7449C0.077345 3.81918 0.122421 3.88664 0.179231 3.94341L2.59591 6.35713C2.71654 6.47212 2.87661 6.53623 3.04304 6.53623C3.20947 6.53623 3.36954 6.47212 3.49017 6.35713L4.28185 5.56172L7.94826 1.88563C8.0625 1.77099 8.12705 1.6158 8.1279 1.45373C8.12876 1.29167 8.06585 1.1358 7.95283 1.01995L7.08955 0.179729ZM7.08955 8.28607C7.03294 8.22911 6.96567 8.18391 6.8916 8.15306C6.81753 8.12222 6.73811 8.10635 6.65791 8.10635C6.57771 8.10635 6.49829 8.12222 6.42422 8.15306C6.35015 8.18391 6.28288 8.22911 6.22627 8.28607L2.99252 11.5309L1.83978 10.4055C1.78317 10.3485 1.7159 10.3033 1.64182 10.2725C1.56775 10.2416 1.48834 10.2257 1.40814 10.2257C1.32794 10.2257 1.24852 10.2416 1.17445 10.2725C1.10038 10.3033 1.03311 10.3485 0.976497 10.4055L0.179231 11.2044C0.122421 11.2612 0.077345 11.3287 0.0465886 11.4029C0.0158322 11.4772 0 11.5569 0 11.6373C0 11.7177 0.0158322 11.7973 0.0465886 11.8716C0.077345 11.9459 0.122421 12.0134 0.179231 12.0701L2.58982 14.4889C2.71036 14.6039 2.87035 14.668 3.03669 14.668C3.20304 14.668 3.36303 14.6039 3.48357 14.4889L4.28084 13.69L7.94725 10.0123C8.06105 9.8985 8.12538 9.74418 8.12623 9.58299C8.12709 9.42181 8.0644 9.26681 7.95182 9.15176L7.08955 8.28607ZM3.24998 17.1114C1.90478 17.1114 0.782513 18.2063 0.782513 19.5557C0.782513 20.9052 1.9058 22 3.24998 22C3.89644 22 4.51643 21.7425 4.97355 21.2841C5.43067 20.8257 5.68748 20.204 5.68748 19.5557C5.68748 18.9075 5.43067 18.2857 4.97355 17.8274C4.51643 17.369 3.89644 17.1114 3.24998 17.1114ZM25.1875 17.9262H10.5625C10.347 17.9262 10.1403 18.012 9.98796 18.1648C9.83559 18.3176 9.74998 18.5249 9.74998 18.741V20.3705C9.74998 20.5866 9.83559 20.7938 9.98796 20.9466C10.1403 21.0994 10.347 21.1852 10.5625 21.1852H25.1875C25.403 21.1852 25.6097 21.0994 25.762 20.9466C25.9144 20.7938 26 20.5866 26 20.3705V18.741C26 18.5249 25.9144 18.3176 25.762 18.1648C25.6097 18.012 25.403 17.9262 25.1875 17.9262ZM25.1875 1.63102H10.5625C10.347 1.63102 10.1403 1.71686 9.98796 1.86966C9.83559 2.02245 9.74998 2.22969 9.74998 2.44578V4.0753C9.74998 4.29138 9.83559 4.49862 9.98796 4.65142C10.1403 4.80422 10.347 4.89006 10.5625 4.89006H25.1875C25.403 4.89006 25.6097 4.80422 25.762 4.65142C25.9144 4.49862 26 4.29138 26 4.0753V2.44578C26 2.22969 25.9144 2.02245 25.762 1.86966C25.6097 1.71686 25.403 1.63102 25.1875 1.63102ZM25.1875 9.77861H10.5625C10.347 9.77861 10.1403 9.86445 9.98796 10.0172C9.83559 10.17 9.74998 10.3773 9.74998 10.5934V12.2229C9.74998 12.439 9.83559 12.6462 9.98796 12.799C10.1403 12.9518 10.347 13.0376 10.5625 13.0376H25.1875C25.403 13.0376 25.6097 12.9518 25.762 12.799C25.9144 12.6462 26 12.439 26 12.2229V10.5934C26 10.3773 25.9144 10.17 25.762 10.0172C25.6097 9.86445 25.403 9.77861 25.1875 9.77861Z\",\n fill: \"white\"\n});\n\nfunction SvgList(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 26,\n height: 22,\n viewBox: \"0 0 26 22\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgList);\nexport default __webpack_public_path__ + \"static/media/list.5d35f23f.svg\";\nexport { ForwardRef as ReactComponent };","import styled, { css } from 'styled-components';\nimport { Typography } from '@material-ui/core';\nimport { Done, AlarmOff } from '@material-ui/icons';\nimport StyledButton from '../../../components/StyledButton';\nimport { ReactComponent as NotStartedIcon } from '../../../assets/not-started.svg';\nimport { ReactComponent as ListIcon } from '../../../assets/list.svg';\n\ninterface CardHeaderProps {\n backgroundColorByStatusTitle?: string;\n}\n\nconst iconBaseStyles = css`\n width: 25px;\n height: 25px;\n margin-right: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const CardContainer = styled.div`\n border-radius: 10px;\n box-shadow: 0 4px 4px 0 ${({ theme }) => theme.palette.grey[400]};\n margin-block: ${({ theme }) => theme.spacing(1.5)}px;\n width: 100%;\n`;\n\nexport const CardHeader = styled.div<CardHeaderProps>`\n background-color: ${({ backgroundColorByStatusTitle }) =>\n backgroundColorByStatusTitle};\n color: ${({ theme }) => theme.palette.common.white};\n font-weight: 500;\n border-radius: 10px 10px 0 0;\n display: flex;\n align-items: center;\n padding-block: ${({ theme }) => theme.spacing(1.5)}px;\n padding-inline: ${({ theme }) => theme.spacing(2)}px;\n`;\n\nexport const CardBody = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n padding-block: ${({ theme }) => theme.spacing(1.5)}px;\n padding-inline: ${({ theme }) => theme.spacing(2)}px;\n\n & + div {\n width: 60%;\n }\n`;\n\nexport const CardTitle = styled(Typography)`\n color: ${({ theme }) => theme.palette.info.dark};\n font-weight: 500;\n max-width: 50vw;\n display: inline-block;\n text-overflow: ellipsis;\n overflow: hidden;\n word-wrap: break-word;\n white-space: nowrap;\n`;\n\nexport const CardTime = styled.div`\n color: ${({ theme }) => theme.palette.info.dark};\n font-size: clamp(0.7rem, 2vw, 1rem);\n\n span {\n font-weight: 500;\n }\n`;\n\nexport const CardButton = styled(StyledButton)`\n color: ${({ theme }) => theme.palette.info.dark};\n font-size: clamp(12px, 1vw, 0.8rem);\n`;\n\nexport const StyledDoneIcon = styled(Done)`\n ${iconBaseStyles}\n`;\n\nexport const StyledAvailableIcon = styled(NotStartedIcon)`\n ${iconBaseStyles}\n`;\n\nexport const StyledUnavailableIcon = styled(AlarmOff)`\n ${iconBaseStyles}\n`;\n\nexport const StyledInProgressIcon = styled(ListIcon)`\n ${iconBaseStyles}\n`;\n","import { CalendarEntryDataType } from '@cuidador/database';\nimport { clientSideScheme } from '@cuidador/whitelabel';\nimport { format } from 'date-fns';\nimport ptBrLocale from 'date-fns/locale/pt-BR';\nimport React, { useContext } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { InternetConnectionContext } from '../../../components/InternetConnectionCheck/InternetConnectionContext';\nimport {\n CardBody,\n CardButton,\n CardContainer,\n CardHeader,\n CardTime,\n CardTitle,\n StyledAvailableIcon,\n StyledDoneIcon,\n StyledInProgressIcon,\n StyledUnavailableIcon,\n} from './styles';\n\ninterface ShiftCalendarCardProps {\n patientId: number;\n calendarEntry: CalendarEntryDataType;\n handleStartShift: () => Promise<void>;\n}\n\nconst ShiftCalendarCard: React.FC<ShiftCalendarCardProps> = ({\n patientId,\n calendarEntry,\n handleStartShift,\n}) => {\n const history = useHistory();\n const { internetStatus } = useContext(InternetConnectionContext);\n const { appCPalette } = clientSideScheme();\n\n const formattedDateToStart = format(\n new Date(`${calendarEntry.shiftPlannedToStartAt}`),\n \"EEEE, dd/MM 'à s' HH'h'mm\",\n { locale: ptBrLocale }\n );\n\n const resolveShiftStatusTitle = (status: string) => {\n switch (status) {\n case 'finished':\n return 'ConcluÃdo';\n case 'incomplete':\n return 'DisponÃvel (Incompleto)';\n case 'available':\n return 'DisponÃvel';\n case 'in_progress':\n return 'Em andamento';\n default:\n return 'IndisponÃvel';\n }\n };\n\n const resolveShiftStatusIcon = (status: string) => {\n switch (status) {\n case 'finished':\n return <StyledDoneIcon />;\n case 'incomplete':\n case 'available':\n return <StyledAvailableIcon />;\n case 'in_progress':\n return <StyledInProgressIcon />;\n default:\n return <StyledUnavailableIcon />;\n }\n };\n\n const resolveShiftStatusColor = (statusTitle: string) => {\n switch (statusTitle) {\n case 'finished':\n return appCPalette.extra.color.green;\n case 'incomplete':\n case 'available':\n return appCPalette.extra.color.ocean;\n case 'in_progress':\n return appCPalette.extra.color.yellow;\n default:\n return appCPalette.extra.color.grey.main;\n }\n };\n\n const resolveButtonLabel = (action: CalendarEntryDataType['action']) => {\n switch (action) {\n case 'start':\n return 'Iniciar plantão';\n case 'return':\n return 'Voltar ao plantão';\n case 'follow':\n return 'Ver plantão';\n case 'history':\n return 'Ver histórico';\n }\n };\n\n const handleClickButton = async (action: CalendarEntryDataType['action']) => {\n switch (action) {\n case 'start':\n return await handleStartShift();\n case 'return':\n return history.push('/plantao');\n case 'follow':\n return history.push(`/historico/plantao/${calendarEntry.shiftId}`);\n case 'history':\n return history.push(`/historico/plantao/paciente/${patientId}`);\n }\n };\n\n return (\n <CardContainer data-testid={`shiftCalendarCard-${calendarEntry.shiftId}`}>\n <CardHeader\n backgroundColorByStatusTitle={resolveShiftStatusColor(\n calendarEntry.status\n )}\n >\n {resolveShiftStatusIcon(calendarEntry.status)}\n {resolveShiftStatusTitle(calendarEntry.status)}\n </CardHeader>\n <CardBody>\n <div>\n <CardTitle>{calendarEntry.shiftName}</CardTitle>\n <CardTime>InÃcio: {formattedDateToStart}</CardTime>\n </div>\n {!!calendarEntry.action && internetStatus === 'online' && calendarEntry.action !== 'follow' && (\n <CardButton\n color=\"inherit\"\n variant=\"outlined\"\n onClick={async () => await handleClickButton(calendarEntry.action)}\n data-testid=\"action-button\"\n >\n {resolveButtonLabel(calendarEntry.action)}\n </CardButton>\n )}\n </CardBody>\n </CardContainer>\n );\n};\n\nexport default ShiftCalendarCard;\n","import styled from 'styled-components';\nimport StyledButton from '../../components/StyledButton';\nimport { IconButton, Typography } from '@material-ui/core';\nimport { ChevronLeftRounded, History } from '@material-ui/icons';\nimport { Link } from 'react-router-dom';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding-inline: ${({ theme }) => theme.spacing(4)}px;\n`;\n\nexport const HeaderTitle = styled(Typography)`\n text-align: center;\n font-size: 16px;\n font-weight: 500;\n display: -webkit-box;\n max-width: 200px;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\n\nexport const Title = styled(Typography)`\n margin-block: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const ShiftHistoryButton = styled(StyledButton)`\n color: ${({ theme }) => theme.palette.info.dark};\n font-weight: bold;\n align-self: flex-start;\n padding-inline: ${({ theme }) => theme.spacing(1)}px;\n margin-bottom: ${({ theme }) => theme.spacing(1.5)}px;\n`;\n\nexport const HistoryIcon = styled(History)`\n margin-right: ${({ theme }) => theme.spacing(0.5)}px;\n`;\n\nexport const StyledBackIcon = styled(ChevronLeftRounded)`\n font-size: 40px;\n`;\n\nexport const StyledIconButton = styled(IconButton)`\n padding: 0;\n margin: 0;\n`;\n\nexport const IconBackground = styled(Link)`\n background-color: ${({ theme }) => theme.palette.common.white};\n border-radius: ${({ theme }) => theme.spacing(1)}px;\n width: ${({ theme }) => theme.spacing(3.5)}px;\n height: ${({ theme }) => theme.spacing(3.5)}px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-decoration: none;\n padding: 0.5px 1.5px;\n`;\n\nexport const PhotoElement = styled.div`\n display: flex;\n justify-content: center;\n`;\n\nexport const CenterContainer = styled.div`\n display: grid;\n align-items: center;\n grid-template-columns: 1fr 4fr auto;\n grid-template-rows: 1fr;\n grid-column-gap: 0px;\n grid-row-gap: 0px;\n flex-grow: 1;\n margin-inline: ${({ theme }) => theme.spacing(1.55)}px;\n max-width: 350px;\n width: 100%;\n\n @media only screen and (max-width: 480px) {\n grid-template-columns: 1fr 4fr 0.9fr;\n }\n`;\n","import { APIError } from '@cuidador/lib';\nimport { Avatar } from '@material-ui/core';\nimport { AxiosError } from 'axios';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport HeaderWithTitle from '../../components/Headers/HeaderWithTitle';\nimport PscIcon from '../../components/Icons/PscIcon';\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\nimport UnregistredShiftsMessage from './UnregistredShiftsMessage';\nimport { setQueuedData as setOfflineQueuedData } from '../../config/axios/offlineProxy/offlineQueue';\nimport { AuthContext } from '../../contexts/auth';\nimport { isSelfCare } from '../../contexts/permission';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\nimport useCanAccess from '../../hooks/useCanAccess';\nimport usePatient from '../../hooks/usePatient';\nimport useShift from '../../hooks/useShift';\nimport { resolveErrorMessage } from '../../utils/error';\nimport ShiftCalendarCard from './ShiftCalendarCard';\nimport { CalendarEntryDataType } from '@cuidador/database';\nimport {\n CenterContainer,\n Container,\n HeaderTitle,\n HistoryIcon,\n IconBackground,\n PhotoElement,\n ShiftHistoryButton,\n StyledBackIcon,\n StyledIconButton,\n Title,\n} from './styles';\n\ninterface RouteParams {\n id: string;\n}\n\nconst ShiftCalendar: React.FC = () => {\n\n const [shiftCalendar, setShiftCalendar] = useState<CalendarEntryDataType[]>(\n []\n );\n const [patientProfilePictureURL, setPatientProfilePictureURL] = useState('');\n const [isStartingShift, setIsStartingShift] = useState(false);\n\n const { refreshShiftInProgress, executionInProgress } = useContext(\n ShiftInProgressContext\n );\n const { userInfo } = useContext(AuthContext);\n const history = useHistory();\n const { id: patientId } = useParams<RouteParams>();\n const {\n getById: getPatientById,\n byId: patientById,\n loading: loadingPatient,\n getProfilePicture,\n } = usePatient();\n const {\n startShift,\n getShiftCalendarByPatientId,\n loading: loadingShiftCalendar,\n } = useShift();\n const { isAllowedToRead: isAllowedToReadShiftCalendar } = useCanAccess(\n 'care/shift.upnext'\n );\n\n const { isAllowedToRead: isAllowedToReadShifts } = useCanAccess('care/shift', userInfo);\n\n useEffect(() => {\n if (!isAllowedToReadShiftCalendar) {\n toast.error('Você não tem permissão para visualizar essa página');\n history.push('/');\n }\n }, [isAllowedToReadShiftCalendar]);\n\n useEffect(() => {\n getPatientById(Number(patientId));\n handleGetShiftCalendar();\n handleGetProfilePictureURL(Number(patientId));\n }, [patientId]);\n\n const patient = patientById[patientId];\n\n const handleGetShiftCalendar = () => {\n getShiftCalendarByPatientId(Number(patientId))\n .then((shiftCalendar) => {\n setShiftCalendar(shiftCalendar);\n })\n .catch((err: AxiosError<APIError>) => {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n });\n };\n\n const handleGetProfilePictureURL = async (id: number) => {\n try {\n return await getProfilePicture(id)\n .then(({ data: { signedUrl } }) => signedUrl)\n .then((url) => {\n if (!url) return;\n setPatientProfilePictureURL(url);\n });\n } catch (err) {\n // ignore patient without profile picture error\n if (!String(err).includes('404')) toast.error(err);\n }\n };\n\n const handleStartShift = async (shiftId: number) => {\n if (!!executionInProgress) {\n toast.error(\n 'Você já tem um plantão em andamento. Encerre este para iniciar outro'\n );\n return;\n }\n\n setIsStartingShift(true);\n await startShift(shiftId)\n .then(() => {\n setOfflineQueuedData([]);\n })\n .then(() => {\n return refreshShiftInProgress();\n })\n .then(() => {\n isSelfCare(userInfo?.user)\n ? history.push(`/plantao/mensagem-de-motivacao`)\n : history.push(`/plantao/passado`);\n })\n .catch((err: AxiosError<APIError>) => {\n if (err.response?.status === 400) {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n } else {\n toast.error(\n `Erro ao iniciar ${isSelfCare(userInfo?.user) ? 'rotina' : 'plantão'\n }, tente novamente daqui a pouco.`\n );\n }\n })\n .finally(() => {\n setIsStartingShift(false);\n });\n };\n\n const isLoading = loadingPatient || loadingShiftCalendar || isStartingShift;\n\n if (isLoading) {\n return <LoadingBackdrop loading={isLoading} />;\n }\n\n return (\n <>\n <HeaderWithTitle\n title=\"\"\n leftContent={\n <StyledIconButton\n edge=\"end\"\n color=\"inherit\"\n onClick={() => history.goBack()}\n >\n <StyledBackIcon />\n </StyledIconButton>\n }\n centerContent={\n <CenterContainer>\n <PhotoElement>\n {<Avatar src={patientProfilePictureURL} />}\n </PhotoElement>\n <HeaderTitle align=\"center\">{patient?.name}</HeaderTitle>\n </CenterContainer>\n }\n rightContent={\n <IconBackground to=\"/pessoas-sob-cuidado\">\n <PscIcon />\n </IconBackground>\n }\n />\n <Container>\n <Title variant=\"h6\">Agenda de plantões</Title>\n {isAllowedToReadShifts && (\n <ShiftHistoryButton\n color=\"inherit\"\n variant=\"outlined\"\n onClick={() => {\n history.push(`/historico/plantao/paciente/${patient?.id}`);\n }}\n >\n <HistoryIcon />\n Histórico de plantões\n </ShiftHistoryButton>\n )}\n {!shiftCalendar.length && <UnregistredShiftsMessage />}\n {!!shiftCalendar.length && (\n <>\n {shiftCalendar.map((entry) => {\n // Verifica se o status não é \"finished\" ou \"unavailable\" para ocultar\n if (!isAllowedToReadShifts && (entry.status === \"finished\" || entry.status === \"unavailable\")) {\n return null;\n }\n\n return (\n <ShiftCalendarCard\n key={Number(entry.shiftId)}\n patientId={Number(patientId)}\n calendarEntry={entry}\n handleStartShift={async () =>\n await handleStartShift(Number(entry.shiftId))\n }\n />\n );\n })}\n </>\n )}\n\n </Container>\n </>\n );\n};\n\nexport default ShiftCalendar;\n","import { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n align-items: center;\n padding: ${({ theme }) => theme.spacing(2, 2, 0, 2)};\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n width: 100%;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const Centralizer = styled.div`\n align-items: center;\n flex-direction: column;\n display: flex;\n flex: 1;\n justify-content: flex-end;\n`;\n","import { Form as FormikForm } from 'formik';\nimport styled from 'styled-components';\n\nexport const Form = styled(FormikForm)`\n display: flex;\n flex: 1;\n flex-direction: column;\n width: 100%;\n color: ${({ theme }) => theme.palette.primary.dark};\n`;\n\nexport const Centralizer = styled.div`\n align-items: center;\n flex-direction: row;\n display: flex;\n flex: 1;\n justify-content: space-around;\n`;\n","import React from 'react';\nimport { Centralizer, Form } from './styles';\n\nimport { Formik, FormikHelpers, FormikProps } from 'formik';\nimport isEqual from 'lodash/isEqual';\nimport { FormValues } from './utils';\n\nimport useCanAccess from '../../hooks/useCanAccess';\nimport FormikTextField from '../Forms/FormikTextField';\nimport StyledButton from '../StyledButton';\n\nconst ShoppingListUpsertForm: React.FC<{\n initialValues: FormValues;\n innerRef?: React.Ref<FormikProps<FormValues>>;\n handleBoughtSubmit: () => void | Promise<void>;\n onSubmit: (\n values: FormValues,\n formikHelpers: FormikHelpers<FormValues>\n ) => void | Promise<void>;\n}> = ({ initialValues, innerRef, onSubmit, handleBoughtSubmit }) => {\n const { isAllowedToUpdate: isAllowedToUpdateShoppingList } = useCanAccess(\n 'care/shopping-list'\n );\n const { isAllowedToInvoke: isAllowedToBuyShoppingList } = useCanAccess(\n 'care/shopping-list.buy'\n );\n return (\n <Formik\n initialValues={initialValues}\n onSubmit={onSubmit}\n validateOnChange={false}\n innerRef={innerRef}\n >\n {({ values, isSubmitting }) => {\n return (\n <Form\n // noValidate disables browser default validation\n noValidate={true}\n >\n <FormikTextField\n color=\"primary\"\n id=\"shoppingText\"\n inputProps={{ 'data-testid': 'shoppingText' }}\n placeholder=\"Exemplo: medicamentos (com dosagem e demais informações importantes), fraldas, alimentos, suplementos, equipamentos (bengala, cadeira de rodas, cadeira de banho), etc.\"\n name=\"shoppingText\"\n margin=\"normal\"\n autoComplete=\"off\"\n multiline\n rows={10}\n />\n <Centralizer>\n {isAllowedToUpdateShoppingList && (\n <StyledButton\n data-testid=\"submit-list\"\n type=\"submit\"\n size=\"large\"\n color=\"inherit\"\n disabled={isSubmitting || isEqual(initialValues, values)}\n >\n Salvar\n </StyledButton>\n )}\n {isAllowedToBuyShoppingList && (\n <StyledButton\n data-testid=\"bought-list\"\n onClick={() => handleBoughtSubmit()}\n size=\"large\"\n color=\"inherit\"\n disabled={isSubmitting || isEqual('', values.shoppingText)}\n >\n Comprado\n </StyledButton>\n )}\n </Centralizer>\n </Form>\n );\n }}\n </Formik>\n );\n};\n\nexport default ShoppingListUpsertForm;\n","import React, { useContext, useEffect } from 'react';\nimport { Container } from './styles';\n\nimport { APIError } from '@cuidador/lib';\nimport { AxiosError } from 'axios';\nimport { toast } from 'react-toastify';\nimport { ShiftInProgressContext } from '../../contexts/ShiftInProgress';\nimport { resolveErrorMessage } from '../../utils/error';\n\nimport LoadingBackdrop from '../../components/LoadingBackdrop';\n\nimport { Typography } from '@material-ui/core';\nimport PatientHeader from '../../components/Headers/PatientHeader';\nimport ShoppingListUpsertForm from '../../components/ShoppingListUpsertForm';\nimport { FormValues } from '../../components/ShoppingListUpsertForm/utils';\nimport { StyledFieldset } from '../../components/StyledFieldset';\nimport useCanAccess from '../../hooks/useCanAccess';\nimport useShoppingList from '../../hooks/useShoppingList';\n\nconst ShoppingList: React.FC = () => {\n const {\n getOneByPatientId,\n ids,\n byId,\n loading,\n patch,\n postBuyShoppingListById,\n } = useShoppingList();\n const { shiftInProgress } = useContext(ShiftInProgressContext);\n const { isAllowedToUpdate: isAllowedToUpdateShoppingList } = useCanAccess(\n 'care/shopping-list'\n );\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n const patientId = shiftInProgress?.patientId!;\n\n useEffect(() => {\n getOneByPatientId(patientId);\n }, [patientId]);\n\n const shoppingList = byId[ids[0]];\n const listId = shoppingList?.id;\n const item = {\n shoppingText: shoppingList?.shoppingText ? shoppingList?.shoppingText : '',\n };\n\n if (loading) {\n return <LoadingBackdrop loading={loading} />;\n }\n\n const handleSubmit = (values: FormValues) => {\n return patch(listId!, values)\n .then(() => {\n toast.success('Lista alterada com sucesso!');\n })\n .catch((err: AxiosError<APIError>) => {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n });\n };\n\n const handleBoughtSubmit = () => {\n return postBuyShoppingListById(listId!)\n .then(() => {\n toast.success('Lista comprada com sucesso!');\n })\n .catch((err: AxiosError<APIError>) => {\n const displayMessage = resolveErrorMessage(err);\n toast.error(displayMessage);\n });\n };\n\n return (\n <>\n <PatientHeader />\n <StyledFieldset disabled={!isAllowedToUpdateShoppingList}>\n <Container>\n <Typography variant=\"h6\">Lista de compras</Typography>\n <Typography variant=\"body2\" align=\"center\">\n Anote aqui a lista de itens que precisam ser providenciados pela\n famÃlia.\n </Typography>\n <ShoppingListUpsertForm\n onSubmit={handleSubmit}\n handleBoughtSubmit={handleBoughtSubmit}\n initialValues={item}\n />\n </Container>\n </StyledFieldset>\n </>\n );\n};\n\nexport default ShoppingList;\n","import React, { useContext, useState } from 'react';\nimport { AuthContext } from '../../../contexts/auth';\nimport Header from '../Header';\nimport LogoutDialog from '../../LogoutDialog';\n\ninterface HeaderWithSignOutProps {\n title: string;\n}\n\nconst HeaderWithSignOut: React.FC<HeaderWithSignOutProps> = ({ title }) => {\n const [dialogStatus, setDialogStatus] = useState(false);\n\n const { signOut } = useContext(AuthContext);\n\n const handleToggleDialog = () => {\n setDialogStatus(!dialogStatus);\n };\n\n return (\n <>\n <Header title={title} leftIconClick={handleToggleDialog} />\n <LogoutDialog\n open={dialogStatus}\n onClose={handleToggleDialog}\n onConfirm={signOut}\n />\n </>\n );\n};\n\nexport default HeaderWithSignOut;\n","import styled from 'styled-components';\nimport { Typography } from '@material-ui/core';\nimport { Warning } from '@material-ui/icons';\n\nexport const Container = styled.div`\n display: flex;\n justify-content: center;\n margin: ${({ theme }) => theme.spacing(3)}px;\n`;\n\nexport const CardContainer = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n max-width: 500px;\n`;\n\nexport const CardText = styled(Typography)`\n text-align: center;\n margin-block: ${({ theme }) => theme.spacing(1)}px;\n`;\n\nexport const StyledWarningIcon = styled(Warning)`\n color: ${({ theme }) => theme.palette.primary.dark};\n margin-bottom: ${({ theme }) => theme.spacing(3)}px;\n width: 60px;\n height: 60px;\n`;\n","import React, { useContext, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport HeaderWithSignOut from '../../../components/Headers/HeaderWithSignOut';\nimport { AuthContext } from '../../../contexts/auth';\nimport {\n Container,\n CardContainer,\n CardText,\n StyledWarningIcon,\n} from '../styles';\n\nconst NoPatientRelationsBlock: React.FC = () => {\n const { userInfo, refreshUserInfo } = useContext(AuthContext);\n const history = useHistory();\n\n const userHasRelatedPatients = Number(userInfo?.user?.patients?.length) > 0;\n\n const handleRefreshUserInfo = async () => {\n try {\n await refreshUserInfo();\n } catch (e) {\n console.log(e);\n }\n };\n\n useEffect(() => {\n handleRefreshUserInfo();\n\n if (userHasRelatedPatients) {\n history.push('/');\n }\n }, [userHasRelatedPatients]);\n\n return (\n <>\n <HeaderWithSignOut title=\"\" />\n <Container>\n <CardContainer>\n <StyledWarningIcon />\n <CardText color=\"primary\" data-testid=\"first-block\">\n Você não está vinculado a nenhuma rede de cuidado ainda.\n </CardText>\n <CardText color=\"primary\" data-testid=\"second-block\">\n Para começar a usar o app, entre em contato com a pessoa que\n adicionou você e solicite o vÃnculo.\n </CardText>\n </CardContainer>\n </Container>\n </>\n );\n};\n\nexport default NoPatientRelationsBlock;\n","import React, { useContext, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport HeaderWithSignOut from '../../../components/Headers/HeaderWithSignOut';\nimport { AuthContext } from '../../../contexts/auth';\nimport {\n Container,\n CardContainer,\n CardText,\n StyledWarningIcon,\n} from '../styles';\n\nconst NoOrganizationIdBlock: React.FC = () => {\n const { userInfo, refreshUserInfo } = useContext(AuthContext);\n const history = useHistory();\n\n const userHasOrganizationId = userInfo?.user?.organizationId;\n\n const handleRefreshUserInfo = async () => {\n try {\n await refreshUserInfo();\n } catch (e) {\n console.log(e);\n }\n };\n\n useEffect(() => {\n handleRefreshUserInfo();\n\n if (userHasOrganizationId) {\n history.push('/');\n }\n }, []);\n\n return (\n <>\n <HeaderWithSignOut title=\"\" />\n <Container>\n <CardContainer>\n <StyledWarningIcon color=\"primary\" />\n <CardText color=\"primary\" data-testid=\"first-block\">\n Você <b>não está vinculado(a)</b> a nenhuma rede de cuidado.\n </CardText>\n <CardText color=\"primary\" data-testid=\"second-block\">\n Para voltar a usar o aplicativo, solicite o vÃnculo a um paciente.\n </CardText>\n </CardContainer>\n </Container>\n </>\n );\n};\n\nexport default NoOrganizationIdBlock;\n","import React, { useContext } from 'react';\nimport {\n Redirect,\n Route,\n RouteComponentProps,\n RouteProps,\n} from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport LoadingBackdrop from '../components/LoadingBackdrop';\nimport { AuthContext } from '../contexts/auth';\nimport { isSelfCare } from '../contexts/permission';\nimport { ShiftInProgressContext } from '../contexts/ShiftInProgress';\n\ninterface AuthenticatedRouteProps extends RouteProps {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: React.FC<RouteComponentProps<any, any, unknown>>;\n executionInProgressRequired?: boolean;\n executionInProgressForbidden?: boolean;\n}\n\nconst ExecutionInProgressRedirects: React.FC<{\n renderComponent: () => JSX.Element;\n executionInProgressRequired?: boolean;\n executionInProgressForbidden?: boolean;\n}> = ({\n renderComponent,\n executionInProgressRequired,\n executionInProgressForbidden,\n}) => {\n const { executionInProgress, loading } = useContext(ShiftInProgressContext);\n const { userInfo } = useContext(AuthContext);\n\n // Still loading current shift\n if (loading) {\n return <LoadingBackdrop loading={loading} />;\n }\n\n if (executionInProgressRequired && !executionInProgress) {\n // Should have execution, but is not. Will be redirected\n toast.error(\n `Você tem que estar com ${\n isSelfCare(userInfo?.user) ? 'uma rotina ativa' : 'um plantão ativo'\n } para acessar essa página`,\n {\n toastId: 'shift-in-progress-required-toast',\n }\n );\n return <Redirect to={{ pathname: '/pessoas-sob-cuidado' }} />;\n } else if (executionInProgressForbidden && !!executionInProgress) {\n // Should not be on Shift, but is. Will be redirected\n return <Redirect to={{ pathname: `/plantao` }} />;\n } else {\n return renderComponent();\n }\n};\n\nconst AuthenticatedRoute = ({\n component: Component,\n executionInProgressRequired,\n executionInProgressForbidden,\n ...rest\n}: AuthenticatedRouteProps): JSX.Element => {\n const { user, userInfo } = useContext(AuthContext);\n const shouldCheckIfHasShiftInProgress = Boolean(\n executionInProgressRequired || executionInProgressForbidden\n );\n\n const isUserOrganizationOwner =\n userInfo?.id === userInfo?.user?.organization?.createdById;\n const userHasRelatedPatients = Number(userInfo?.user?.patients?.length) > 0;\n const userHasOrganizationId = userInfo?.user?.organizationId;\n\n return (\n <Route\n {...rest}\n render={(props) => {\n // redirect unauthenticated user to login\n if (!user)\n return (\n <Redirect\n to={{\n pathname: '/login',\n state: { from: props.location },\n }}\n />\n );\n\n // redirect users who do not own an organization and are not related to any patients\n if (\n !userHasRelatedPatients &&\n !isUserOrganizationOwner &&\n props.location.pathname !== '/usuario-sem-vinculo'\n ) {\n return <Redirect to=\"/usuario-sem-vinculo\" exact />;\n }\n\n // redirect user who do not have an organization_id\n if (\n !userHasOrganizationId &&\n props.location.pathname !== '/usuario-sem-organizacao'\n ) {\n return <Redirect to=\"/usuario-sem-organizacao\" exact />;\n }\n\n if (shouldCheckIfHasShiftInProgress) {\n return (\n <ExecutionInProgressRedirects\n executionInProgressRequired={executionInProgressRequired || false}\n executionInProgressForbidden={\n executionInProgressForbidden || false\n }\n renderComponent={() => <Component {...props} />}\n />\n );\n }\n\n return <Component {...props} />;\n }}\n />\n );\n};\n\nexport default AuthenticatedRoute;\n","const sendPageView = (pagePath: string) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).gtag('event', 'page_view', {\n page_path: pagePath,\n });\n};\n\nconst analytics = {\n pageview: sendPageView,\n};\n\nexport default analytics;\n","import React, { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport analytics from '../config/googleAnalytics';\n\nconst RouteAnalytics: React.FC = () => {\n const location = useLocation();\n\n useEffect(() => {\n const dev = process.env.REACT_APP_ENV !== 'production';\n if (!dev) {\n analytics.pageview(location.pathname);\n }\n }, [location]);\n\n return <></>;\n};\n\nexport default RouteAnalytics;\n","import React, { useContext } from 'react';\nimport {\n Route,\n Redirect,\n RouteComponentProps,\n RouteProps,\n useLocation,\n} from 'react-router-dom';\n\nimport { AuthContext } from '../contexts/auth';\n\ninterface UnauthenticatedRouteProps extends RouteProps {\n component: React.FC<RouteComponentProps>;\n}\n\ninterface LocationType {\n from: { pathname: string };\n}\n\nconst UnauthenticatedRoute = ({\n component: Component,\n ...rest\n}: UnauthenticatedRouteProps): JSX.Element => {\n const { user } = useContext(AuthContext);\n const { state } = useLocation<LocationType>();\n return (\n <Route\n {...rest}\n render={(props) =>\n !Boolean(user) ? (\n <Component {...props} />\n ) : (\n <Redirect to={state?.from?.pathname || '/'} />\n )\n }\n />\n );\n};\n\nexport default UnauthenticatedRoute;\n","import React from 'react'\nimport { Redirect, Switch } from 'react-router-dom'\nimport Account from '../pages/Account'\nimport CaregiverMoodShiftEnd from '../pages/CaregiverMood/ShiftEnd'\nimport CaregiverMoodShiftStart from '../pages/CaregiverMood/ShiftStart'\nimport CompleteSignup from '../pages/CompleteSignup'\nimport Content from '../pages/Content'\nimport ContentItem from '../pages/Content/ContentItem'\nimport CreateProfessionalReport from '../pages/CreateProfessionalReport'\nimport CreateShiftEvent from '../pages/CreateShiftEvent'\nimport CreateTimeContestation from '../pages/CreateShiftExecutionTimeContestation'\nimport { CurrentShift } from '../pages/CurrentShift'\nimport EmergencyContacts from '../pages/EmergencyContacts'\nimport ForgotPassword from '../pages/ForgotPassword'\nimport Home from '../pages/Home'\nimport LastShiftEvents from '../pages/LastShiftEvents'\nimport Login from '../pages/Login'\nimport MotivationalMessage from '../pages/MotivationalMessage'\nimport Patients from '../pages/Patients'\nimport ProfessionalReport from '../pages/ProfessionalReport'\nimport ProfessionalReportItem from '../pages/ProfessionalReport/ProfessionalReportItem'\nimport ShiftContestation from '../pages/ShiftContestation'\nimport ExecutionHistoryContestation from '../pages/ExecutionHistoryContestation'\nimport ShiftFinish from '../pages/ShiftFinish'\nimport ShiftHistory from '../pages/ShiftHistory'\nimport FollowShift from '../pages/ShiftHistory/Shift'\nimport ShiftQuestion from '../pages/ShiftQuestion'\nimport ShiftCalendar from '../pages/ShiftCalendar'\nimport ShoppingList from '../pages/ShoppingList'\nimport NoPatientRelationsBlock from '../pages/BlockPages/NoPatientRelationsBlock'\nimport NoOrganizationIdBlock from '../pages/BlockPages/NoOrganizationIdBlock'\nimport AuthenticatedRoute from './AuthenticatedRoute'\nimport RouteAnalytics from './RoutesAnalytics'\nimport UnauthenticatedRoute from './UnauthenticatedRoute'\n\nconst Routes: React.FC = () => {\n return (\n <>\n <RouteAnalytics />\n <Switch>\n {/*\n TODO: Remove '/cadastro' since it's a copy of '/completar-cadastro', used only to keep\n the system backwards compatible after migration to RBAC\n */}\n <UnauthenticatedRoute\n path='/cadastro'\n component={CompleteSignup}\n />\n <UnauthenticatedRoute\n path='/completar-cadastro'\n component={CompleteSignup}\n />\n <UnauthenticatedRoute\n path='/esqueci-minha-senha'\n component={ForgotPassword}\n />\n <UnauthenticatedRoute\n path='/login'\n component={Login}\n />\n\n <AuthenticatedRoute\n exact\n path='/'\n component={Patients}\n executionInProgressForbidden\n />\n\n <AuthenticatedRoute\n exact\n path='/agenda-de-plantoes/:id'\n component={ShiftCalendar}\n />\n <AuthenticatedRoute\n exact\n path='/agendar'\n component={Home}\n />\n <AuthenticatedRoute\n exact\n path='/ajuda'\n component={EmergencyContacts}\n />\n <AuthenticatedRoute\n path='/avaliacao/adicionar/paciente/:patientId/'\n component={CreateProfessionalReport}\n />\n <AuthenticatedRoute\n path='/avaliacao/paciente/:patientId/'\n component={ProfessionalReport}\n />\n <AuthenticatedRoute\n exact\n path='/avaliacao/:id'\n component={ProfessionalReportItem}\n />\n <AuthenticatedRoute\n path='/compras'\n component={ShoppingList}\n executionInProgressRequired\n />\n <AuthenticatedRoute\n exact\n path='/conteudo'\n component={Content}\n />\n <AuthenticatedRoute\n exact\n path='/conteudo/:id'\n component={ContentItem}\n />\n <AuthenticatedRoute\n path='/correcao-de-horarios/historico/:shiftId/:executionId'\n component={ExecutionHistoryContestation}\n />\n <AuthenticatedRoute\n path='/correcao-de-horarios/plantao/:shiftId/execucao/:shiftExecutionId/novo'\n component={CreateTimeContestation}\n />\n <AuthenticatedRoute\n path='/correcao-de-horarios/plantao/:shiftId/'\n component={ShiftContestation}\n />\n <AuthenticatedRoute\n path='/historico/plantao/paciente/:patientId'\n component={ShiftHistory}\n />\n <AuthenticatedRoute\n path='/historico/plantao/:shiftId/'\n component={FollowShift}\n />\n <AuthenticatedRoute\n exact\n path='/minha-conta/:tabId'\n component={Account}\n />\n <AuthenticatedRoute\n path='/perguntas'\n component={ShiftQuestion}\n executionInProgressRequired\n />\n <AuthenticatedRoute\n exact\n path='/pessoas-sob-cuidado'\n component={Patients}\n />\n <AuthenticatedRoute\n exact\n path='/plantao'\n component={CurrentShift}\n executionInProgressRequired\n />\n <AuthenticatedRoute\n path='/plantao/adicionar-evento/:eventType'\n component={CreateShiftEvent}\n executionInProgressRequired\n />\n <AuthenticatedRoute\n path='/plantao/cuidar-do-cuidador/inicio'\n component={CaregiverMoodShiftStart}\n executionInProgressRequired\n />\n <AuthenticatedRoute\n path='/plantao/cuidar-do-cuidador/fim'\n component={CaregiverMoodShiftEnd}\n />\n <AuthenticatedRoute\n path='/plantao/finalizar'\n component={ShiftFinish}\n executionInProgressRequired\n />\n <AuthenticatedRoute\n path='/plantao/mensagem-de-motivacao'\n component={MotivationalMessage}\n executionInProgressRequired\n />\n <AuthenticatedRoute\n path='/plantao/passado'\n component={LastShiftEvents}\n executionInProgressRequired\n />\n <AuthenticatedRoute\n exact\n path='/usuario-sem-organizacao'\n component={NoOrganizationIdBlock}\n />\n <AuthenticatedRoute\n exact\n path='/usuario-sem-vinculo'\n component={NoPatientRelationsBlock}\n />\n\n <Redirect to='/' />\n </Switch>\n </>\n )\n}\n\nexport default Routes\n","import styled from 'styled-components';\nimport { ContentProps } from '.';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n`;\n\nexport const Content = styled.div<ContentProps>`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding-bottom: ${({ withTabs }) =>\n withTabs ? '84px' : '0px'}; // 84 = Tabbar height (56) + FAB height / 2\n background-color: ${({ theme }) => theme.palette.background.default};\n`;\n","import React, { useMemo, useContext } from 'react';\n\nimport Tabbar from '../Tabbar';\nimport Routes from '../../routes/Routes';\nimport { Container, Content } from './styles';\nimport { AuthContext } from '../../contexts/auth';\nimport { useRouteMatch } from 'react-router-dom';\n\nexport interface ContentProps {\n withTabs: boolean;\n}\n\nconst routesWithMenu = [\n '/conteudo',\n '/compras',\n '/menu',\n '/plantao',\n '/agenda-de-plantoes/:id',\n '/pessoas-sob-cuidado',\n '/historico/plantao/paciente/:patientId',\n '/avaliacao/paciente/:patientId',\n '/ajuda',\n '/',\n];\n\nconst Layout: React.FC = () => {\n const { user } = useContext(AuthContext);\n const match = useRouteMatch(routesWithMenu);\n\n const shouldRenderTabs = useMemo(() => {\n return Boolean(user) && Boolean(match?.isExact);\n }, [user, match]);\n\n return (\n <Container>\n <Content withTabs={shouldRenderTabs}>\n <Routes />\n </Content>\n {shouldRenderTabs && <Tabbar />}\n </Container>\n );\n};\n\nexport default Layout;\n","import { ToastContainer } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport styled from 'styled-components';\n\nexport const Toast = styled(ToastContainer)`\n .Toastify__toast--info {\n background: ${({ theme }) => theme.palette.info.main};\n .Toastify__progress-bar {\n background-color: ${({ theme }) => theme.palette.extra.color.grey.light};\n }\n }\n .Toastify__toast--success {\n background: ${({ theme }) => theme.palette.success.main};\n }\n .Toastify__toast--warning {\n background: ${({ theme }) => theme.palette.warning.main};\n color: #000000;\n }\n .Toastify__toast--error {\n background: ${({ theme }) => theme.palette.error.main};\n .Toastify__progress-bar {\n background-color: ${({ theme }) => theme.palette.error.light};\n }\n }\n`;\n","import React from 'react';\n\nimport { Toast } from './styles';\n\nfunction ToastContainerCustom() {\n return <Toast autoClose={10000} position=\"bottom-right\" />;\n}\n\nexport default ToastContainerCustom;\n","import { hotjar } from 'react-hotjar';\n\nconst dev = process.env.REACT_APP_ENV !== 'production';\nif (!dev) {\n // hotjar.initialize(2488113, 6);\n}\nexport default hotjar;\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nexport default function ScrollToTop() {\n const { pathname } = useLocation();\n\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [pathname]);\n\n return null;\n}\n","import { createGlobalStyle } from 'styled-components';\n\nexport default createGlobalStyle`\n body, #root {\n min-height: 100vh;\n margin: 0px;\n font-family: 'Work Sans', 'Helvetica';\n }\n\n input:-webkit-autofill,\n input:-webkit-autofill:hover,\n input:-webkit-autofill:focus,\n input:-webkit-autofill:active {\n transition: background-color 5000s ease-in-out 0s,\n color 5000s ease-in-out 0s;\n transition-delay: background-color 5000s, color 5000s;\n }\n`;\n","import { getMessaging, onMessage } from 'firebase/messaging';\nimport React, { useContext, useEffect } from 'react';\nimport { getFCMToken } from '../config/firebase';\nimport useUser from '../hooks/useUser';\nimport { AuthContext } from './auth';\n\nexport const PushNotificationContext = React.createContext({});\n\nPushNotificationContext.displayName = 'PushNotificationContext';\n\nexport const usePushNotification = () => useContext(PushNotificationContext);\n\nexport const PushNotificationProvider: React.FC = ({ children }) => {\n const { putUserFCMToken } = useUser();\n const { user } = useContext(AuthContext);\n\n const handlePermissionAndTokenRequest = async () => {\n if (!('Notification' in window)) {\n // Browser does not support Push Notifications. Ignore\n } else if (Notification.permission === 'denied') {\n // Browser supports Push Notification, but user has already denied it's permission\n } else {\n // We need to ask the user for permission\n Notification.requestPermission().then((permission) => {\n // If the user accepts, let's create a notification\n if (permission === 'granted') {\n handlePutToken();\n }\n });\n }\n };\n\n const handlePutToken = async () => {\n const currentToken = await getFCMToken();\n if (currentToken) {\n await putUserFCMToken({ fcmRegistrationToken: currentToken });\n }\n };\n\n useEffect(() => {\n if (user) {\n handlePermissionAndTokenRequest();\n }\n\n // Foreground listnener will show notifications when app is in foreground\n const messaging = getMessaging();\n const fcmOnMessageUnsubscribe = onMessage(messaging, (payload) => {\n const notificationTitle = payload.notification?.title;\n if (notificationTitle) {\n const notificationOptions = {\n body: payload.notification?.body,\n };\n\n new Notification(notificationTitle, notificationOptions);\n }\n });\n\n return () => {\n fcmOnMessageUnsubscribe;\n };\n }, [user]);\n\n return (\n <PushNotificationContext.Provider value={{}}>\n {children}\n </PushNotificationContext.Provider>\n );\n};\n","import {\n clientSideScheme,\n setFavicon,\n setManifest,\n} from '@cuidador/whitelabel';\nimport { StylesProvider, ThemeProvider } from '@material-ui/core/styles';\n\nimport React, { useEffect } from 'react';\nimport { BrowserRouter } from 'react-router-dom';\nimport { ThemeProvider as StyledThemeProvider } from 'styled-components';\n\nimport ErrorBoundary from './components/ErrorBoundary';\nimport Layout from './components/Layout';\nimport Toast from './components/Toast';\nimport './config/hotjar';\nimport './config/sentry';\nimport { AuthProvider } from './contexts/auth';\nimport { PermissionProvider } from './contexts/permission';\nimport { GlobalLoadingProvider } from './contexts/RequestInterceptor';\nimport ScrollToTop from './routes/ScrollToTop';\nimport GlobalStyle from './styles/globalStyle';\nimport { resolveTheme } from './styles/theme';\n\n// handle offline queue requests\nimport InternetConnectionProvider from './components/InternetConnectionCheck/InternetConnectionContext';\nimport axios from './config/axios';\nimport { startQueueChecker } from './config/axios/offlineProxy';\nimport { PushNotificationProvider } from './contexts/PushNotification';\nimport ShiftInProgressProvider from './contexts/ShiftInProgress';\nstartQueueChecker(axios);\n\nconst App: React.FC = () => {\n const { muiTheme, styledTheme } = resolveTheme();\n const { appCFaviconUrl, appCJsonManifest } = clientSideScheme();\n\n useEffect(() => {\n setFavicon(appCFaviconUrl);\n setManifest(appCJsonManifest);\n }, []);\n\n return (\n <ErrorBoundary>\n <StylesProvider injectFirst>\n <ThemeProvider theme={muiTheme}>\n <StyledThemeProvider theme={styledTheme}>\n <GlobalStyle />\n <GlobalLoadingProvider>\n <InternetConnectionProvider>\n <BrowserRouter>\n <AuthProvider>\n <PermissionProvider>\n <PushNotificationProvider>\n <ShiftInProgressProvider>\n <ScrollToTop />\n <Toast />\n <Layout />\n </ShiftInProgressProvider>\n </PushNotificationProvider>\n </PermissionProvider>\n </AuthProvider>\n </BrowserRouter>\n </InternetConnectionProvider>\n </GlobalLoadingProvider>\n </StyledThemeProvider>\n </ThemeProvider>\n </StylesProvider>\n </ErrorBoundary>\n );\n};\nexport default App;\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n/* eslint-enable @typescript-eslint/explicit-module-boundary-types */\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://cra.link/PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // and we'll force app refresh\n console.log('New content is available; Refreshing user app...');\n window.location.href = window.location.href.replace(/#.*$/, '');\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://cra.link/PWA\nserviceWorkerRegistration.register();\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}