{"version":3,"sources":["lookupConfiguration/selectors/TimezoneSelector.tsx","matterSummary/MatterSummaryContextProvider.tsx","matterSummary/dialogs/BillTheMatterDialog.tsx","matterSummary/dialogs/WriteOffWipDialog.tsx","matterSummary/dialogs/WriteOffDebtorsDialog.tsx","matterSummary/dialogs/TransferTustToPayInvoiceDialog.tsx","matterSummary/dialogs/ArchiveMatterDialog.tsx","matterSummary/dialogs/CloseMatterDialog.tsx","lookupConfiguration/selectors/TaskTypeGroupSelector.tsx","lookupConfiguration/tabs/LookupNameTagTypeMaintenance.tsx","lookupConfiguration/tabs/LookupMatterFollowUpActionMaintenance.tsx","matterSummary/selectors/MatterCountrySelector.tsx","matterSummary/selectors/MatterPropertySelector.tsx","matterSummary/drawers/MatterForecastsDrawer.tsx","lookupConfiguration/hooks/useOtherPartyQuery.tsx","matterDetails/financials/FinancialByDayChart.tsx","matterDetails/financials/EstimateVsBilledFeesChart.tsx","matterDetails/financials/FinancialsInfo.tsx","lookupConfiguration/common/tabsStyle.tsx","matterManagement/MatterManagementContext.tsx","matterSummary/common/DialogTitleExtension.tsx","matterSummary/fields/MatterGroupField.tsx","lookupConfiguration/selectors/PanelSelector.tsx","matterManagement/MatterManagementRepository.tsx","matterSummary/MatterSummaryCellRenderer.tsx","lookupConfiguration/hooks/useRoleListQuery.tsx","lookupConfiguration/selectors/POBoxTypeSelector.tsx","matterSummary/dialogs/UploadDocumentDialog.tsx","lookupConfiguration/selectors/FirmTeamSelector.tsx","lookupConfiguration/selectors/TaskTypeSelector.tsx","lookupConfiguration/selectors/AvailableTeamMemberSelector.tsx","lookupConfiguration/selectors/AvailableOfficeMemberSelector.tsx","lookupConfiguration/selectors/AvailableDepartmentMemberSelector.tsx","lookupConfiguration/selectors/OtherPartyTypeSelector.tsx","lookupConfiguration/selectors/RoleSelector.tsx","matterSummary/selectors/MatterCategorySelector.tsx","matterSummary/dialogs/MatterFollowUpDialog.tsx","matterSummary/cellRenderer/MatterTaskAction.tsx","matterSummary/MatterSummaryHeader.tsx","matterSummary/selectors/MatterClientSelector.tsx","matterSummary/selectors/PriorityCountrySelector.tsx","matterSummary/selectors/StaffSelector.tsx","matterSummary/dialogs/AdvancedFilterDialog.tsx","matterSummary/MatterSummaryPageX.tsx","matterSummary/selectors/MatterTypeSelector.tsx","matterSummary/MatterSummaryRepository.tsx","lookupConfiguration/selectors/CorrespondenceActivitySelector.tsx","lookupConfiguration/selectors/FirmOfficeSelector.tsx","lookupConfiguration/selectors/FirmDepartmentSelector.tsx","matterSummary/MatterSummaryControlPanel.tsx","matterSummary/selectors/MatterStatusSelector.tsx","matterSummary/MatterSummaryColumns.tsx"],"names":["TimezoneSelector","props","isLoading","data","state","setState","fetchData","retrieveTimezoneOptionData","onRetrieveData","reason","options","timezoneOption","map","source","value","timezoneValue","label","displayName","secondaryValue","baseUtcOffset","handleChange","event","onSelection","name","getInputProps","params","InputProps","endAdornment","Fragment","color","size","multiple","style","className","loading","disabled","onChange","disablePortal","getOptionLabel","option","defaultValue","onBlur","renderInput","variant","fullWidth","margin","required","error","helperText","renderOption","inputValue","matches","parts","part","index","key","fontWeight","highlight","text","refreshData","onSuccess","onError","fetchPolicy","query","TimezoneSelectorQuery","variables","then","results","catch","MatterSummaryContext","undefined","MatterSummaryContextProvider","children","pageKey","setPageKey","isMatterForcastFormOpen","setIsMatterForcastFormOpen","matterId","setMatterId","matterGuid","setMatterGuid","onMatterForcastFormClose","onMaterForcastFormOpen","refreshPage","prevKey","Provider","useMatterSummaryContext","context","Error","useStyles","theme","root","width","textField","commendField","dialogTitle","TemplateColor","Primary","customGrid","display","alignItems","justifyContent","generatedContainer","flex","padding","gridCenter","buttonContainer","BillTheMatterDialog","classes","generateBillMatterRequest","billMatterTask","mutate","mutation","billFeesAmount","fees","billDisbursementsAmount","disbursements","applyTrustAmount","applyTrust","writeOffFeesAmount","writeOffFees","writeOffDisbursementsAmount","writeOffdisbursements","comments","taskInput","getTaskInput","updateBillMatterRequest","taskRequestGuid","taskGuid","task","ownerGuid","owner","allocatedToEntityType","user","assignedTo","assignedBy","description","priority","category","taskCategory","dueDate","estimatedEffort","startDate","completionDate","duration","completionNotes","onBillTheMatterClosed","onDialogClose","onSubmit","values","formAction","initialValues","pendingWriteOffFeesAmount","pendingWriteOffDisbAmount","defaultPriority","loggedInUser","feesAmount","disbursementAmount","writeOffDisbursementAmount","toDate","subscription","submitting","pristine","render","handleSubmit","form","id","open","onClose","title","subTitle","client","matterTitle","dividers","container","spacing","item","xs","onClick","unBilledFees","change","unbilledDisbursements","onBillAll","onClear","prefix","currencyDetails","currencySymbol","component","maxValue","currentTrustBalance","HasAccess","hasWriteOffWIP","displayStyle","Decimal","format","currency","outstandingDebtors","billedFees","feeEstimate","percentageEstimate","input","meta","touched","selection","isUser","batch","team","onDropDownSelect","visible","role","multiline","validating","type","submit","reset","WriteOffWipDialog","writeOffWipTaskRequest","writeOffWipTask","closeMatterAfterWriteOff","isCloseMatterAfterWriteOff","updateWriteOffWipTaskRequest","onWriteOffWipClosed","hasCloseMatter","control","target","checked","canClose","WriteOffDebtorsDialog","writeOffDebtorsRequest","writeOffDebtorsTask","writeOffDebtorsAmount","debtors","updateWriteOffDebtorsRequest","onWriteOffDebtorsClosed","debtorsAmount","TransferTustToPayInvoiceDialog","transferTrustToPayInvoiceRequest","transferTrustToPayInvoiceTask","trustTransferAmount","transfer","invoiceToApply","invoiceNumber","updateTransferTrustToPayInvoiceRequest","onTransferTrustToPayInvoiceClosed","trustAmount","ArchiveMatterDialog","archiveMatterRequest","archiveMatterTask","archive","isArchiveMatter","updateArchiveMatterRequest","onArchiveMatterClosed","archiveMatter","closedDate","CloseMatterDialog","closeMatterRequest","closeMatterTask","close","isCloseMatter","updateCloseMatterRequest","onCloseMatterClosed","closeMatter","minWidth","autocompletePopper","lineHeight","TaskTypeGroupSelector","searchValue","TaskTypeGroupQuery","taskGroupTypeId","retrieveTaskTypeGroupData","prevState","taskTypeGroupList","userTasks","taskTypeGroups","taskTypeGroupItems","taskTypeGroup","forEach","taskTypeGroupItem","taskType","taskTypeItem","push","guidID","groupBy","notes","autoCompleteValue","toString","popper","paper","marginBottom","position","loadingWrapper","zIndex","top","right","left","bottom","backgroundColor","icon","BrandColors","TemplatePrimary","tableCell","paddingTop","paddingBottom","maxWidth","dragIcon","marginLeft","marginRight","tableContentWrapper","cursor","useToolbarStyles","paddingLeft","paddingRight","palette","secondary","main","light","primary","dark","rightToolbarWrapper","tableTitle","tableHeading","chip","EnhancedTableToolbar","search","setSearch","count","placeholder","startAdornment","fontSize","onSearch","onClickAdd","LookupNameTagTypeMaintenance","ClientAndContactTagTypesQuery","items","isAdd","isEdit","isDelete","lookup","clientAndContactTagType","guidId","sequence","tagEntity","tagsCount","sort","a","b","subscribeFirmObj","subscribeFirm","unsubscribe","onDragEndComponent","subscribe","firmSubscription","next","lookupNotification","status","message","includes","tdata","temp","length","err","console","onEditRowEnable","indexOf","onCancelEditRow","onEditRow","UpdateClientAndContactTagTypeMutation","onDeleteRowEnable","onCancelDeleteRow","onDeleteRow","DeleteClientAndContactTagTypeMutation","tItems","splice","onClickTagCounts","DraggableComponent","draggableId","provided","snapshot","ref","innerRef","draggableProps","dragHandleProps","isDragging","draggableStyle","background","align","badgeContent","colSpan","result","destination","list","startIndex","endIndex","Array","from","removed","reorder","UpdateClientAndContactTagTypeSequences","lookupSequences","onDragEnd","droppableId","direction","droppableProps","CreateClientAndContactTagTypeMutation","filteredItems","filter","toLowerCase","getDraggableRows","LookupMatterFollowUpActionMaintenance","LookupActionMessageQuery","actionMessage","UpdateActionMessageMutation","DeleteActionMessageMutation","UpdateActionMessageSequencesMutation","CreateActionMessageMutation","MatterCountrySelector","matterCountryQuery","CountryQuery","isApplyMatterAccess","country","cntry","renderTags","getTagProps","substring","MatterPropertySelector","matterPropertyQuery","MatterPropertyQuery","matterProperty","mProperty","buttonWrapper","gap","loaderWrapper","agWrapper","flexFlow","border","infoBody","learnMoreContainer","infoContainer","infoWrapper","infoTitle","infoValue","cardContainer","cardWrapper","card","height","textAlign","cardTitle","cardValue","cardInfo","tooltip","fontFamily","MatterForecastsDrawer","history","useState","changes","setChanges","isSubmitting","setIsSubmitting","showConfirm","setShowConfirm","currencyQuery","forecastQuery","MatterForecastQuery","MatterForecastMutation","forecastMutate","forecastResult","matter","matterForecast","update","subcribeForecastObj","subscribeToForecast","updateMatterForecastNotification","refetch","gridOptions","rowBuffer","cacheOverflowSize","maxConcurrentDatasourceRequests","maxBlocksInCache","suppressPropertyNamesCheck","excelStyles","suppressAggFuncInHeader","groupIncludeTotalFooter","rowClass","suppressAutoSize","onGridReady","rowData","forecasts","api","setRowData","currentMonthYear","rowIndex","findIndex","row","ensureIndexVisible","setFocusedCell","onCellValueChanged","existingChangeIndex","prevChanges","onLearnMore","pathname","MatterForecast","content","show","isAgree","agree","disAgreeLabel","agreeLabel","anchor","fileNumber","financials","symbol","billedTimeAndFees","unbilledTimeAndFees","totalFutureFeesBilled","totalFutureFeesCollected","totalFutureHours","remianingEstimate","isEstimatedFeesRed","isRemaningEstimateRed","isFeesCollectedRed","startIcon","elevation","modules","columnDefs","headerName","field","valueFormatter","date","Date","toLocaleString","month","getFullYear","editable","valueParser","newValue","Number","isNaN","oldValue","initializeComponent","tempChanges","guid","periodType","feesBilled","feesCollected","hours","matterForecasts","useOtherPartyQuery","OtherPartyTypeQuery","register","BarWrapper","div","maxHeight","BarContainer","minHeight","LoadWrapper","onPan","chartRef","current","scales","x","min","formatNumber","bind","componentDidMount","componentWillUnmount","CurrencySymbol","getSelectedItem","_index","labels","datasets","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","indexAxis","elements","bar","responsive","maintainAspectRatio","suggestedMax","beginAtZero","ticks","maxTicksLimit","callback","tickValue","plugins","legend","MatterTerminology","TotalOwing","zoom","pan","enabled","wheel","callbacks","formattedValue","currentValue","toFixed","replace","FinancialWrapper","TextPrimary","opacity","Opacity","cat3","Font","Main","FontSize","PX","size1","FontWeight","FiveHundred","letterSpacing","LineHeight","Large","NeutralColors","LightGrey1","size4","Regular2","Card","boxShadow","borderRadius","FormattedCurrencyWrapper","getCurrencySymbol","formatCurrencyAndForeignCurrency","log","this","PageNotFound","foreignCurrencySybmol","showForeignCurrencyAmount","showBilledTimeAndFees","showBalanceDue","showUnbilledTimeAndFees","showBilledDisbursements","showUnbilledDisbursements","billedTimeAndFeesCurrencySymbol","balanceDueCurrencySymbol","unbilledTimeAndFeesCurrencySymbol","billedDisbursementsCurrencySymbol","unbilledDisbursementsCurrencySymbol","sourceSystem","toLocaleLowerCase","foreignCurrency","sybmol","Currencies","find","currencyItem","isInternalUser","costAgreementReceivedColor","costAgreementReceived","estimatedFeesColour","estimatedCosts","t","Grid","centered","Row","columns","md","Column","computer","tablet","mobile","largeScreen","widescreen","verticalAlign","EstimatedCosts","FormattedCurrency","CurrencyDisplayStyle","Integer","Billed","BilledTimeAndFees","showLocalCurrency","localCurrency","localValue","showForeignCurrency","foreignValue","foreignCurrencyBilledTimeAndFees","balanceDue","foreignCurrencyBalanceDue","UserFeature","hasMatterWIPInformation","Unbilled","UnbilledTimeAndFees","foreignCurrencyUnbilledTimeAndFees","BillingMethod","billingMethod","lastTrustTransactionDate","homeCountry","FormattedDateTime","ShortDate","CostAgreementReceived","Disbursements","billedDisbursements","foreignCurrencyBilledDisbursements","trustGeneralBalance","foreignCurrencyUnbilledDisbursements","TrustControlledMoneyBalance","trustControlledMoneyBalance","lastTrustTransactionType","agedDebtorCurrent","agedDebtor30Days","agedDebtor60Days","agedDebtor90Days","FinancialsInfoData","FinancialsInfo","fill","avatar","textTransform","hidden","actions","dialogBox","breadcrumbs","breadcrumbsTitle","totalAvatar","customToolbar","totalWrapper","tableAvatar","chips","flexWrap","breadcrumbsWrapper","requiredText","personIcons","isActive","customRoot","checkIcon","chipRoot","chipLabel","whiteSpace","expandedRoot","MatterManagementContext","createContext","MatterManagementContextProvider","create","batchGuidId","setBatchGuidId","currencyData","setCurrencyData","isWriteOffWipOpen","isWriteOffDebtorsOpen","isBillTheMatterOpen","isTransferTrustToPayInvoiceOpen","isArchiveMatterOpen","isCloseMatterOpen","contextState","setContextState","currentSummaryViewSelectionId","setCurrentSummaryViewSelectionId","mattersDisplayed","mattersToProcess","tasksToProcess","matterSummaryHeader","setMatterSummaryHeader","selectedMatter","setSelectedMatter","matterTasks","setMatterTasks","currentMatterTask","setCurrentMatterTask","menuDisable","setMenuDisable","fieldDisable","setFieldDisable","handleCurrencyFetch","updateMatterTasks","currentTask","newMatterTasks","remove","onMatterTasksChanged","tasks","handleUpdateCloseValuesInTasks","getIsCloseDisabled","handleRemoveTask","currentTaskNew","handleDisableContextMenu","isCloseDisabledDueToAmounts","isClosed","menu","isWriteOffWipTaskDisabled","isWriteOffDebtorsTaskDisabled","isBillMatterTaskDisabled","isTransferTrustToPayInvoiceTaskDisabled","isCloseMatterTaskDisabled","handleDisableFields","fields","fieldDisableState","isFieldDisableStateChanged","isBillMatterWriteOffFeeDisabled","isBillMatterWriteOffDisbDisabled","isWriteOffCloseDisabled","isWriteOffDebtorsCloseDisabled","isWriteOffFeeDisabled","isWriteOffDisbursementsDisabled","currentTasks","matterTask","matterData","selectedMatterAmounts","getCurrentMatterAmounts","unBilledDisbs","trustBalance","getIsCloseDisabledForFeeWriteOffDialog","writeOffFee","writeOffDisb","unbilledFees","onMatterSelected","matterGuidId","onWriteOffWipSave","isSaved","onWriteOffDebtorsSave","onBillTheMatterSave","onTransferTustToPlayInvoiceSave","onArchiveMatterSave","isArchived","onCloseMatterSave","onWriteOffWipOpen","onWriteOffDebtorsOpen","onBillTheMatterOpen","onTransferTrustToPayInvoiceOpen","onArchiveMatterOpen","onCloseMatterOpen","onUnBilledFeesExists","onUnBilledDisbursementsExists","onDebtorsExists","onTrustExists","onHandleTextChange","transferTrustMatterTask","currentTarget","onHandleTextChangeNumeric","writeOffDebtorTask","disb","billFee","billDisb","transferTrust","onHandleCheckBoxChange","writeOffWipDebtorTask","isCurrentTaskSaved","isWriteOffFeeClose","isArchive","getTextBoxDisabled","getFieldDisabled","calculateMatterSummaryHeader","hasTasks","getIsCloseDisabledForFeeWriteOffDebtorDialog","writeOffDebtors","getWriteOffWipFee","getWriteOffWipDisb","getWriteOffWipDebtors","getBillFees","getBillDisb","getApplyTrust","getTransferTrust","getTransferInvoice","getIsClosed","getIsArchived","getTrustMaxValue","maxTrustAmount","usedTrustAmount","fetchCurrencyDetails","secondaryDescription","overflow","textOverflow","DialogTitleExtension","heading","typography","pxToRem","headerIcon","commentField","TimePickerComp","compProps","inputComponent","inputProps","autoComplete","TimePickerCompDisabled","MatterGroupField","DateTimePickerComp","animateYearScrolling","autoOk","allowKeyboardControl","InputLabelProps","shrink","initialFocusedDate","setHours","DateTimePickerCompDisabled","defaultExpanded","expandIcon","validate","PanelSelectorUseByEnum","listPaper","PanelSelector","DashboardPanelQuery","retrieveDashboardPaneleData","dashboardPanelUsedBy","resData","dashboardPanel","fetchAppUserData","UserData","fetchCurrencyData","CurrencyData","ArchiveMatterRequestMutation","BillMatterRequestMutation","CloseMatterRequestMutation","TransferMatterTrustToInvoiceRequestMutation","WriteOffMatterDebtorsRequestMutation","WriteOffMatterWIPRequestMutation","FinaliseTaskBatchRequestMutation","MatterManagementTaskNotification","CheckboxContainer","size5","ButtonContainer","DateContainer","NumberContainer","CurrencyValue","CurrencyContainer","PercentageContainer","ImageContainer","ImageDiv","backgroundSize","backgroundRepeat","backgroundPosition","PercentageValue","LongTextContainer","EditorViewContainer","dateContainer","lCurrency","lTenant","tenant","lAppUser","appUser","isInternal","Component","convertedLocalTime","parse","locale","formats","defaultLocale","day","year","ShortTime","DisplayInUTC","ShortDateTime","hourOffset","getTimezoneOffset","getHours","hour","minute","hour12","getGroupColumnHeader","iconName","column","columnApi","getColumn","node","getColDef","backgroundImage","tempValue","dangerouslySetInnerHTML","__html","onCheck","colId","getColId","setDataValue","editorState","createEmpty","contentBlock","contentState","createFromBlockArray","contentBlocks","createWithContent","readOnly","ChipCellRenderer","isArray","JSON","chipData","getChips","RatingCellRenderer","parseInt","getRating","useRoleListQuery","RoleListQuery","isExternal","POBoxTypeSelector","retrievePOBoxTypeData","onRetrievePOBoxType","poBoxType","disableCloseOnSelect","getOptionSelected","PoBoxTypeQuery","dropzone","matterLabel","UploadDocumentDialog","currentUser","filesKey","Math","random","roleListQuery","defaultRole","roleList","roleIdString","rolename","initialValue","files","roles","isChanged","confirmSubmit","isDisableSave","getUploadMatterDocumentInput","GetFiles","roleGuids","join","document","file","onSubmitConfirmationChanges","onUpload","scroll","Promise","resolve","setTimeout","initialValuesEqual","keepDirtyOnReinitialize","changeProps","onFormValueChanged","maxFileSize","showFileNames","useChipsForPreview","filesLimit","existingFiles","newFiles","some","documentFile","url","onDelete","filteredFiles","onDrop","rows","FirmTeamSelector","retrieveTeamData","isMyTeamOnly","onlyUsedByTasks","taskOnly","onlyUsedByFinancials","financialOnly","onlyUsedByEnquiries","enquiryOnly","firm","teams","FirmTeamList","TaskTypeSelector","TaskTypeList","retrieveTaskTypeData","taskTypes","rowCount","offset","onSelectedItem","onRemoveItem","selectedCode","selectedLabel","intitialSelectedLabel","vm","FeeEarnerData","first","isNotExistsInTeam","groupGuid","groupId","firmData","availableMembers","availableMember","feeEarner","staffId","staffName","selectedItems","itemsToShow","isShowUserActiveStatusIcons","itemId","itemList","isNotExistsInOffice","firmOffices","isNotExistsInDepartment","departments","OtherPartyTypeSelector","otherPartyTypeQuery","otherPartyType","RoleSelector","MatterCategorySelector","matterCategoryQuery","MatterCategoryQuery","matterCategory","mCategory","makeStyles","createStyles","dialogPaper","formControlWrapper","actionMessageWrapper","button","formGroupWrapper","noteWrapper","dialogContentWrapper","floatLoadingWrapper","MatterFollowUpDialog","lookupActionMessageQuery","personActing","personResponsible","onClickMessage","hasMatterEmailPersonActing","hasMatterEmailPersonResponsible","followUpActionEmailBodyParams","actionMessageGuidId","includePersonActing","includePersonResponsible","mailto","responsibleEmail","actingEmail","MatterFollowUpActionEmailBodyQuery","retrieveFollowUpActionEmailBodyData","bodyData","mail","createElement","href","encodeURIComponent","matterFollowUpActionEmailBody","click","onChangePerson","Dialog","DialogTitle","FormGroup","FormControlLabel","Checkbox","localStorage","getItem","LocalStorageEnum","PersonActing","PersonResponsible","DialogContent","CircularProgress","Button","DialogActions","MatterTaskActionEnum","doneIcon","MatterTaskAction","setOpen","anchorRef","useRef","setMatterData","setIsLoading","isBillMatterOpen","isWriteOffUnbilledFeesOpen","isCreateTaskOpen","isUploadDocumentOpen","isMatterFollowUpOpen","fetchUser","fetchPriority","handleMatterDataFetch","handleUserDataFetch","userId","handlePriorityDataFetch","priorityData","archorEvent","contains","handleClickMenu","BillMatter","WriteOffUnbilledFees","onWriteOffUnbilledFeesOpen","TransferTrustToPayInvoice","WriteOffDebtors","CloseMatter","ArchiveMatter","CreateTask","onCreateMatterTaskOpen","UploadDocument","onUploadDocumentOpen","MatterFollowUpAction","onMatterFollowUpOpen","MatterForecasts","onMatterForecastsOpen","handleClose","handleListKeyDown","preventDefault","prevOpen","useEffect","focus","IconButton","Popper","anchorEl","transition","TransitionProps","placement","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","hasBillMatter","MenuItem","canBillMatter","hasBillMatterTask","canWriteOffUnbilledFees","hasWriteOffUnbilledFeesTask","hasTransferMatterTrust","canTransferTrustToPayInvoice","hasTransferTrustToPayInvoiceTask","hasWriteOffDebtors","canWriteOffDebtors","hasWriteOffDebtorsTask","canCloseMatter","hasCloseMatterTask","hasArchiveMatter","canArchiveMatter","hasArchiveMatterTask","addUserMatterAccessActivity","sessionStorage","setItem","createHref","matterManagementState","window","onMatterDetailOpen","hasCreateTask","hasAdHocTask","hasMatterTask","hasFollowUpMatterTask","hasUploadMatterDocument","hasMatterForecast","pendingWriteOffFeesAmountInBillMatterTask","pendingWriteOffFeesAmountInWriteOffWipTask","pendingWriteOffDisbAmountInBillMatterTask","pendingWriteOffDisbAmountInWriteOffWipTask","TasksSummaryFormDialog","isOpen","taskGuidID","isCreate","matterFileNumber","getMatterTaskActions","size8","ExtraLarge","transform","size10","buttonGroupWrapper","MatterSummaryHeader","useCurrentUser","Label","Heading4","hasMatterLearnMore","Matter_Searching_Client_Internal_User","Matter_Searching_Client","iconSelected","flexShrink","marginTop","flexGrow","renderWrapper","customRenderWrapper","MatterClientSelector","delayedonInputChange","hasNextPage","isNextPageLoading","isClear","NAME_SUMMARY_QUERY","isClientsOnly","isMatterOwnersOnly","includeIndividual","includeOrganisation","includeStaff","businessTypeList","countryList","stateList","tagsList","retrieveNameSummaryData","onRetrieveClientList","nameSummaryData","party","nameSummaries","nameSummary","recordCount","itemsList","LightTooltip","withStyles","common","white","shadows","arrow","Tooltip","shortingTitle","limit","InfiniteAutocomplete","itemSize","isMultiple","loadNextPage","disableListWrap","onOpen","onInputChange","Chip","isStaff","textLimit","email","TextField","PriorityCountrySelector","priorityCountryQuery","PriorityCountryQuery","priorityCountry","Autocomplete","StaffSelector","StaffQuery","retrieveStaffListData","staffSummaryData","staffSummaries","staffSummary","staffGuid","dialogRoot","header","textFieldRight","dateField","addButton","clientSelector","removedAvatar","addProperyWrapperGrid","divider","switchLabel","textFieldWithToggleWrapper","AdvancedFilterDialog","useTenant","onSubmitLoading","showDiscard","defaultMatterCountry","matterCountry","exclude","defaultCaseType","caseType","defaultMatterProperty","defaultMatterCategory","defaultMatterClient","matterClient","defaultMatterOwner","matterOwner","defaultMatterStatus","matterStatus","defaultPriorityCountry","defaultPersonActings","defaultPersonResponsibles","defaultValues","ourReference","yourReference","matterCountries","caseTypes","matterProperties","matterCategories","matterClients","matterOwners","matterStatuses","filingDateFrom","filingDateTo","applicationNumber","grantAndRegistrationDateFrom","grantAndRegistrationDateTo","registrationNumber","priorityDateFrom","priorityDateTo","class","goodsAndServices","priorityCountries","completionDateFrom","completionDateTo","instructionDateFrom","instructionDateTo","personActings","personResponsibles","feesBilledVsEstimatePercentage","isMatterEstimateZero","filterValues","hasFilter","isMatch","closePanel","onReset","setConfig","actionButton","caseTypeField","isInprotech","MatterTypeSelector","Switch","matterCategoryField","matterClientField","matterStatusField","MatterStatusSelector","DialogBox","mutators","autocomplete","maxDate","minDate","suffix","CurrencyInput","GridWrapper","ContentWrapper","StyledSummaryContent","BackgroundWhite","BackgroundGrey4","SummaryViewWrapper","resize","summarySectionNode","findDOMNode","Element","summaryGridRect","getBoundingClientRect","summarySectionHeight","innerHeight","onAdvancedFilter","showAdvancedFilter","isSubscribed","handleSummarySectionRef","onIncludeCompleted","onRefreshData","onViewStyle","onViewSelected","onSaveCurrentView","onViewConfigChanged","onToggleGrouping","onToggleTools","onToggleConfigs","onCellClicked","onMatterCounts","initSummaryViewConfigs","onExport","onPrint","handleLoading","fetchColumnConfigData","fetchIsMatterSummaryNewEnabled","onInMemoryChanged","onMatterDownloadChanged","onColumnFilterChanged","subscribeToSummaryViewConfig","onAdvancedSearch","onFormatFilterValuesForSearchCriteria","onExportLoading","viewDisplayStyle","List","showGroupPanel","showToolPanel","showConfigPanel","includeCompleted","inRefreshData","totalMatterCount","matterLoadedCount","summaryViewSelections","currentSummaryViewConfig","isInMemory","isDownloadMatter","isNewMatterSummaryEnabled","isForceDownload","searchCriterias","isExportLoading","componentDidUpdate","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","nextProps","location","columnFilterLength","columnFilterModel","Object","keys","addEventListener","subscribeToMatterTasks","subscribeToTasks","removeEventListener","summaryViewConfigSubscription","matterTaskSubscription","taskSubscription","forecastSubscription","rvClassName","Matters","MatterSummaryControlPanel","showViewLayouts","views","initialIncludeCompleted","loadedMatterCount","searchFilter","isShowViewPanel","entityType","orientation","animation","drawerContent","SummaryViewConfig","configType","ViewConfigType","matterSummary","isAdministrator","onRowSelected","viewConfig","viewConfigId","onViewUpdated","isNewMatterSummary","refreshSummaryData","showTools","showGrouping","showCompleted","onLoading","nameId","isReferredMatters","searchCriteriasJson","include","handleColumnConfigFetch","handleMatterSummaryNewEnabledFetch","matterSummaryNewEnabled","boolValue","columnConfigList","summaryViewConfig","summaryViewDefault","defaultConfigId","currentConfigLayout","isDefault","isRoleDefault","isTenantDefault","configId","layoutConfiguration","isPrivate","replaceState","jQuery","currentSummaryView","view","config","columnConfigs","cloneDeepWith","matterColumnConfig","AddUserMatterAccessActivity","matterSummaryPageXState","nameSummaryState","isSearchCriteriaFromAdvancedFilter","filterModel","totalMatters","CSV","EventSystem","emit","summaryViewConfigNotification","matterManagementTaskNotification","taskNotification","hasOwnProperty","property","operator","comparison","_operator","_comparison","dateFrom","dateTo","convertToJson","stringify","contextType","MatterSummary","matterTypeQuery","MATTER_TYPE_QUERY","matterType","mType","MatterStatus","retrieveMatterSummaryData","MatterSummaryData","sortColumn","sortDirection","retrieveMatterSummaryXData","MatterSummaryXDataQuery","isIncludeCompleted","clientName","personActingId","personResponsibleId","wipBalanceGreaterThanAmount","debtorBalanceGreaterThanAmount","isIncludeMattersWithTrustBalance","MatterSummaryOptions","ColumnConfigData","fetchMatterSummaryNewEnabled","MatterSummaryNewEnabledData","fetchMatterDetailsData","matterDetailsData","fetchBasicMatterDetailsData","basicMatterDetailsData","UpdateArchiveMatterRequestMutation","UpdateBillMatterRequestMutation","UpdateCloseMatterRequestMutation","UpdateTransferMatterTrustToInvoiceRequestMutation","UpdateWriteOffMatterDebtorsRequestMutation","UpdateWriteOffMatterWIPRequestMutation","MatterTaskNotification","UploadMatterDocumentMutation","UploadMatterDocumentNotification","fetchCurrencySymbolData","CurrencySymbolQuery","fetcTenantData","TenantDataQuery","MatterForecastSubscription","CorrespondenceActivitySelector","correspondenceActivityQuery","isSystem","correspondenceActivity","FirmOfficeSelector","retrieveOfficeData","isMyOfficeOnly","showAllOffice","hasFirmDashboardOfficeView","hasFirmDashboardMyOfficeOnly","firmOffice","PopperComponent","FirmOfficeList","FirmDepartmentSelector","retrieveDepartmentData","isMyDepartmentOnly","hasFirmDashboardDepartmentView","hasFirmDashboardMyDepartmentOnly","department","FirmDepartmentList","ExportType","ViewDisplayStyle","searchContentWrapper","searchWrapper","breakpoints","down","BackgroundGrey1","BackgroundGrey2","checkboxWrapper","showingWrapper","up","menuWrapper","stroke","downlaod","customButton","advancedFilter","advancedFilterButton","disabledShare","enabledShare","downloadMatterLink","viewStyle","group","refresh","share","tools","isDownloading","isPaused","setValue","delayedSearch","viewCount","viewMenuItems","prevValue","handleMatterDownload","hint","SearchMatters","searchAction","showClear","IncludeDead","IncludeCompleted","isChecked","invisible","hasMatterExport","rvKey","rvbuttonType","split","rvIcon","rvMenuProps","Excel","hasMatterSummaryViewManagement","menuProps","MatterStatusQuery","mStatus","cellClassEnum","menuTabs","nonFilterMenuTabs","defaultExcelStyles","stringType","dataType","alignment","horizontal","vertical","dateType","numberFormat","dateTimeType","currencyType","currencyWithoutDecimalsType","percentageType","booleanType","numberType","durationType","dueDateType","checkboxType","filterParamsOptions","filterOptions","inRangeInclusive","comparator","filterLocalDateAtMidnight","cellValue","dateParts","cellDate","getTime","ConvertViewConfigToLayout","columncfgs","columncfg","getFilterForDataType","showMenuTab","ContextMenu","isDateFilter","DateTime","applyCellRendererToColumn","checkboxSelection","filterParams","hide","pinned","isLocked","enableRowGroup","sortable","tooltipField","String","aggFunc","enableValue","valueGetter","cellClass","headerCheckboxSelection","ConvertViewLayoutToConfig","viewLayout","columnConfig","columnCfg","colDef","getActualWidth","getDataTypeForColumn","isVisible","isRowGroupActive","getSort","ConvertColumnsToConfig","cellRendererFramework","Currency","CurrencyWithoutDecimals","Boolean","Image","Percentage","DueDate","LongText","cellRenderer","DefaultColumnConfig","MatterSummaryColumns","DefaultColumnConfigNew","MatterSummaryColumnsNew","MatterId","Default","canSearch","cardDisplay","actionType","Logo","imageType","FileNumber","MatterCategory","Type","Stage","Client","Title","OtherSide","LastMessage","Last3Messages","Status","SettlementDate","InstructionDate","NextAction","NextActionDate","NextActionItem","LastUpdate","NextRenewalDate","UnbilledShort","BilledInxTax","Debtors","State","Country","BrandFamily","Property","Owner","PropertyType","ClientReference","FIRB","InProgress","Completed","IsAwaitingInstructions","Injury","GuidId","LongTitle","CountryId","CategoryId","Category","TypeId","TypeClassification","TypeState","SubTypeID","SubType","PropertyLabel","CompletionDate","FileLocation","PublishedDate","IsVip","SyncSystemID","ResponsibleID","ResponsibleShort","ResponsibleEmail","ResponsiblePhone","ActingID","Acting","ActingEmail","ActingPhone","AssistingID","Assisting","AssistingEmail","AssistingPhone","Price","Deposit","BilledFees","UnbilledFees","UnbilledDisbursementsShort","PercentageEstimateShort","PercentageExposure","TrustBalance","ExchangeDate","CoolingOffDate","DepositDueDate","DepositPaidDate","EarliestPriorityDate","ApplicationNumber","PublicationDate","PublicationNumber","GrantNumber","Class","GoodsAndServices","CostAgreementReceivedDate","CostAgreementRequired","Referrer","PotentialTransfer","PriorityCountry","ReviewDate","InjuryDate","ProceedingsIssuedDate","SunsetOrLimitationDate","HearingDate","Trustee","TrusteeEmail","ClientType","LastTrustTransactionDate","LastTrustTransactionType","FundsRecovered","ForecastFeesBilledThisMonth","ForecastFeesBilledNextThreeMonths","ForecastFeesBilledNextSixMonths","ForecastFeesCollectedThisMonth","ForecastFeesCollectedNextThreeMonths","ForecastFeesCollectedNextSixMonths","ForecastHoursThisMonth","ForecastHoursNextThreeMonths","ForecastHoursNextSixMonths","ExpectedFutureFees","ArchivedDate","MatterSummaryAggFuncs","getCustomAggFuncValue","percentageTotal","valueOne","valueTwo","createValueObject","exposure","unbilled"],"mappings":"gkBA6CaA,EAAoD,SAAAC,GAIvD,MAAoB,mBAAgC,CACtDC,WAAW,EACXC,KAAM,KAFHC,EAAK,KAAEC,EAAQ,KAKtB,qBAAU,WACNC,MAED,IAEH,IAAMA,EAAY,WAEdD,EAAS,EAAD,KACDD,GAAK,CACRF,WAAW,KAEfK,GACI,GAEA,SAACJ,GAAS,OAAAK,EAAeL,MAEzB,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrCD,EAAiB,SAACL,GACpBE,EAAS,EAAD,KACDD,GAAK,CACRD,KAAMA,EAAKO,QAAQC,eAAeC,KAAI,SAACC,GAA2B,cAC3DA,GAAM,CACTC,MAAOD,EAAOE,cACdC,MAAOH,EAAOI,YACdC,eAAgBL,EAAOM,mBAE3BjB,WAAW,MAKbkB,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,oCACM1B,EAAM8B,SAEA,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDwB,aAAcvC,EAAMuC,aACpBC,OAAQxC,EAAMwC,OAEdC,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDwB,aAAcvC,EAAMuC,aACpBC,OAAQxC,EAAMwC,OAEdC,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,UAIrBE,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,eAanC,SAASnD,EACZoD,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOC,EACPC,UAAW,GACXH,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MAqBpB,I,EAAMuD,EAAwB,IAAG,sd,kCCvPjC,0HAcaK,EAAuB,6BAAqDC,GAQ5EC,EAA4E,SAAC,G,IAAEC,EAAQ,WAE5F,EAAwB,mBAAS,GAAhCC,EAAO,KAAEC,EAAU,KAEpB,EAAwD,oBAAS,GAAhEC,EAAuB,KAAEC,EAA0B,KAEpD,EAA0B,mBAAwB,MAAjDC,EAAQ,KAAEC,EAAW,KAEtB,EAA8B,mBAAwB,MAArDC,EAAU,KAAEC,EAAa,KAE1BC,EAA2B,uBAAY,WAC3CL,GAA2B,KAE1B,IAGGM,EAAyB,uBAAY,SAACL,EAAkBE,GAC5DD,EAAYD,GACZG,EAAcD,GACdH,GAA2B,KAE1B,IAEGO,EAAc,uBAAY,WAC9BT,GAAW,SAAAU,GAAW,OAAAA,EAAU,OAE/B,IAEH,OACE,kBAACf,EAAqBgB,SAAQ,CAC5BvE,MAAO,CACL+D,SAAQ,EACRE,WAAU,EACVN,QAAO,EACPU,YAAW,EACXR,wBAAuB,EACvBO,uBAAsB,EACtBD,yBAAwB,IAGzBT,IAMMc,EAA0B,WACrC,IAAMC,EAAU,qBAAWlB,GAE3B,IAAKkB,EACH,MAAM,IAAIC,MAAM,8EAGlB,MAAO,CACLX,SAAUU,EAAQV,SAClBE,WAAYQ,EAAQR,WACpBN,QAASc,EAAQd,QACjBU,YAAaI,EAAQJ,YACrBR,wBAAyBY,EAAQZ,wBACjCO,uBAAwBK,EAAQL,uBAChCD,yBAA0BM,EAAQN,4B,4gBCjDhCQ,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXC,UAAW,GAGXC,aAAc,CACVF,MAAO,QAEXG,YAAa,CACTlE,MAAO,IAAUmE,cAAcC,SAEnCC,WAAY,CACRC,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpBC,mBAAoB,CAChBH,QAAS,OACTE,eAAgB,gBAChBxD,OAAQ,UACR0D,KAAM,EACN,SAAU,CACNC,QAAS,UAEb,WAAY,CACRhD,WAAY,MAGpBiD,WAAY,CACRN,QAAS,OACTC,WAAY,UAEhBM,gBAAiB,CACbP,QAAS,OACTE,eAAgB,iBAgEfM,EAA0D,SAAE1G,GACrE,IAAM2G,EAAUnB,IA2BVoB,EAA4B,SAACC,GAC/B,SACKC,OAAO,CACJC,SAAU,IACV/C,UAAW,CACPc,WAAY9E,EAAM8E,WAClBkC,eAAgBH,EAAeI,KAC/BC,wBAAyBL,EAAeM,cACxCC,iBAAkBP,EAAeQ,WACjCC,mBAAoBT,EAAeU,aACnCC,4BAA6BX,EAAeY,sBAC5CC,SAAUb,EAAea,SACzBC,UAAWC,EAAaf,MAI/B5C,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YACI,gCACAoB,EAAQhE,KAAK4C,MACb,SAGJ,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,gCAAiCA,EAAQ,aAIhEqH,EAA0B,SAAChB,GAC7B,SACKC,OAAO,CACJC,SAAU,IACV/C,UAAW,CACP8D,gBAAiB9H,EAAM+H,SACvBjD,WAAY9E,EAAM8E,WAClBkC,eAAgBH,EAAeI,KAC/BC,wBAAyBL,EAAeM,cACxCC,iBAAkBP,EAAeQ,WACjCC,mBAAoBT,EAAeU,aACnCC,4BAA6BX,EAAeY,sBAC5CC,SAAUb,EAAea,SACzBC,UAAWC,EAAaf,MAI/B5C,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YACI,uCACAoB,EAAQhE,KAAK4C,MACb,SAGJ,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,uCAAwCA,EAAQ,aAIvEoH,EAAe,SAACI,G,kBACdC,EAAYD,EAAKE,MACfF,EAAKE,MAAMrH,MACXmH,EAAKG,wBAA0B,IAAsBC,KAChDJ,EAAKK,WAAaL,EAAKK,WAAWxH,MAAQ,KAC1CmH,EAAKM,WAAaN,EAAKM,WAAWzH,MAAQ,KAErD,MAAO,CACH0H,YAAa,GACbC,UAAuB,QAAb,EAAAR,EAAKQ,gBAAQ,eAAEzH,OAAqB,QAAb,EAAAiH,EAAKQ,gBAAQ,eAAEzH,MAAQ,KACxD0H,UAA2B,QAAjB,EAAAT,EAAKU,oBAAY,eAAE3H,OAAyB,QAAjB,EAAAiH,EAAKU,oBAAY,eAAE3H,MAAQ,KAChE4H,QAASX,EAAKW,QAAUX,EAAKW,QAAU,KACvCC,gBAAiBZ,EAAKY,gBAAkBZ,EAAKY,gBAAkB,KAC/DC,UAAWb,EAAKa,UAAYb,EAAKa,UAAY,KAC7CC,eAAgBd,EAAKc,eAAiBd,EAAKc,eAAiB,KAC5DC,SAAUf,EAAKe,SAAWf,EAAKe,SAAW,KAC1CT,WAA2B,QAAf,EAAAN,EAAKM,kBAAU,eAAEzH,MAC7BmI,gBAAiBhB,EAAKc,eAAiBd,EAAKgB,gBAAkB,KAC9DX,YAA2B,QAAf,EAAAL,EAAKK,kBAAU,eAAExH,OAAuB,QAAf,EAAAmH,EAAKK,kBAAU,eAAExH,MAAQ,KAC9DqH,MAAOD,EACPE,sBAAuBH,EAAKG,wBAI9Bc,EAAwB,WACtBjJ,EAAMkJ,eACNlJ,EAAMkJ,iBAqEd,OACI,kBAAC,IAAMvH,SAAQ,KACX,kBAAC,IAAI,CACDwH,SAnLK,SAACC,GACW,WAArBpJ,EAAMqJ,WACNzC,EAA0BwC,GAE1BvB,EAAwBuB,GAG5BH,KA6KQK,cApEiB,WAArBtJ,EAAMqJ,WACC,CACHpC,UAAM5C,EACN8C,mBAAe9C,EACfgD,gBAAYhD,EACZkD,aAAcvH,EAAMuJ,0BAA4BvJ,EAAMuJ,+BAA4BlF,EAClFoD,sBAAuBzH,EAAMwJ,0BAA4BxJ,EAAMwJ,+BAA4BnF,EAC3FqD,SAAU,GACVc,SAAUxI,EAAMyJ,gBAChBnB,WAAYtI,EAAM0J,aAElBrB,WAAY,KACZH,MAAO,KACPC,sBAAuB,MAIpB,CACHlB,KAAMjH,EAAM2J,WACZxC,cAAenH,EAAM4J,mBACrBvC,WAAYrH,EAAMoH,iBAClBG,aAAcvH,EAAMsH,mBACFtH,EAAMsH,mBACLtH,EAAMuJ,0BAA4BvJ,EAAMuJ,+BAA4BlF,EACvFoD,sBAAuBzH,EAAM6J,2BACX7J,EAAM6J,2BACL7J,EAAMwJ,0BAA4BxJ,EAAMwJ,+BAA4BnF,EACvFqD,SAAU1H,EAAM0H,SAEhBc,SAAUxI,EAAMwI,SAAWxI,EAAMwI,SAAWxI,EAAMyJ,gBAClDf,aAAc1I,EAAM0I,aACpBC,QAAS3I,EAAM2I,QAAU,IAAO3I,EAAM2I,SAASmB,SAAW,KAC1DlB,gBAAiB5I,EAAM4I,gBACvBC,UAAW7I,EAAM6I,UAAY,IAAO7I,EAAM6I,WAAWiB,SAAW,KAChEhB,eAAgB9I,EAAM8I,eAAiB,IAAO9I,EAAM8I,gBAAgBgB,SAAW,KAC/Ed,gBAAiBhJ,EAAMgJ,gBACvBD,SAAU/I,EAAM+I,SAChBT,WAAYtI,EAAMsI,WAAatI,EAAMsI,WAAatI,EAAM0J,aAExDrB,WAAYrI,EAAMqI,WAClBH,MAAOlI,EAAMkI,MACbC,sBAAuBnI,EAAMmI,uBA4B7B4B,aAAc,CAACC,YAAY,EAAMC,UAAU,GAC3CC,OAAQ,SAAC,G,IAACC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAEC,EAAQ,WAAQ,SAAM,OAC5D,0BAAMd,SAAU,SAAA/H,GAAS,OAAA+I,EAAa/I,IAAQiJ,GAAG,uBAC7C,kBAAC,IAAM,CACHC,MAAM,EACNC,QAAStB,EAAqB,kBACd,oBAChBjH,UAAW2E,EAAQjB,MAEnB,kBAAC,IAAW,CACR2E,GAAG,oBACHrI,UAAW2E,EAAQb,aAEnB,kBAAC,IAAoB,CACjB0E,MAAM,cACNC,SAAUzK,EAAM0K,OAChBnC,YAAavI,EAAM2K,eAG3B,kBAAC,IAAa,CAACC,UAAU,GACrB,6BACI,kBAAC,IAAI,CAACC,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQF,iBACpB,kBAAC,IAAM,CAACwE,QAAS,WAAM,OA5NjD,SAAC7B,EAAuBgB,GAClCpK,EAAMkL,cACNd,EAAKe,OAAO,OAAQnL,EAAMkL,cAG1BlL,EAAMoL,uBACNhB,EAAKe,OAAO,gBAAiBnL,EAAMoL,uBAsNwBC,CAAUjC,EAAQgB,IAAOxI,MAAM,WAAS,YAG/D,kBAAC,IAAM,CAACqJ,QAAS,WAAM,OArNnD,SAAC7B,EAAuBgB,GACpCA,EAAKe,OAAO,YAAQ9G,GACpB+F,EAAKe,OAAO,qBAAiB9G,GAmNkCiH,CAAQlC,EAAQgB,IAAOxI,MAAM,WAAS,WAKrE,kBAAC,IAAI,CAACmJ,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,OACLP,MAAO,OACPgC,WAAY,qBACZwI,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB8F,UAAW,OAInB,kBAAC,IAAI,CAACX,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,gBACLP,MAAO,gBACPgC,WAAY,8BACZwI,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB8F,UAAW,OAInB,kBAAC,IAAI,CAACX,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,aACLP,MAAO,cACPgC,WAAY,gCACZwI,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB+F,SAAU3L,EAAM4L,oBAAsB5L,EAAM4L,oBAAsB,EAClEF,UAAW,IACXxJ,UAAUlC,EAAM4L,uBAAwB5L,EAAM4L,oBAAsB,MAG3E,IAAYC,UAAU,IAAgBC,gBAE/B,kBAAC,IAAMnK,SAAQ,KACX,kBAAC,IAAI,CAACoJ,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,eACLP,MAAO,iBACPgC,WAAY,0BACZwI,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB+F,SAAU3L,EAAMkL,aAAelL,EAAMkL,aAAe,EACpDQ,UAAW,IAEXxJ,SAAUlC,EAAMuJ,0BAA4B,GAA4B,IAAvBvJ,EAAMkL,iBAIrE,OAId,kBAAC,IAAI,CAACH,MAAM,EAAMC,GAAI,EAAGhJ,UAAW2E,EAAQH,YACxC,kBAAC,IAAI,CAACqE,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,kBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMkL,aAAelL,EAAMkL,aAAe,EACjDa,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,2BAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMoL,sBAAwBpL,EAAMoL,sBAAwB,EACnEW,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,wBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMmM,mBAAqBnM,EAAMmM,mBAAqB,EAC7DJ,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,0BAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAM4L,oBAAsB5L,EAAM4L,oBAAsB,EAC/DG,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,8BAEJ,kBAAC,IAAI,CAACD,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,gBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMoM,WAAapM,EAAMoM,WAAa,EAC7CL,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,iBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMqM,YAAcrM,EAAMqM,YAAc,EAC/CN,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,eAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAmB,CAChBnB,MAAOb,EAAMsM,mBAAqBtM,EAAMsM,mBAAqB,SAOrF,kBAAC,IAAI,CAACvB,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAK,CACF1J,KAAK,wBACLP,MAAO,0BACPgC,WAAY,mCACZwI,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB+F,SAAU3L,EAAMoL,sBAAwBpL,EAAMoL,sBAAwB,EACtEM,UAAW,IAEXxJ,SAAUlC,EAAMwJ,0BAA4B,GAAqC,IAAhCxJ,EAAMoL,yBAG/D,kBAAC,IAAI,CAACL,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,eAGJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAA8B,KACvBD,EAAK,CACTxL,MAAM,cACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAW,GAAG2E,EAAQf,UACtB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,EAAcqL,GACtD,OAvP/C,SAACvC,EAA8BhB,EAAmBmD,EAEjDG,EAAoCpL,EAAcqL,GACxE,GAAa,eAATrL,EAAuB,CACvB,IAAI,EAAaoL,GAAaA,EAAU7L,OAAS6L,EAAU3L,MACrC,CAAEF,MAAQ6L,EAAU7L,MAAOE,MAAO2L,EAAU3L,OAC5C,KACtBqJ,EAAKwC,OAAM,WACPxC,EAAKe,OAAO,aAAc,GAC1Bf,EAAKe,OAAO,wBAAyBwB,EAC/B,IAAsBvE,KACtB,IAAsByE,UA4OgCC,CAAiB1C,EAAMhB,EAAQmD,EAAOG,EAAWpL,EAAMqL,IAG3D5J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,0BACA,GAEVM,QAAS,CACLC,MAAM,UAM1B,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,UAEJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAAsB,KACfD,EAAK,CACTxL,MAAM,QACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAc2E,EAAQf,UAAS,IAC/B9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,GACxC,OAAAiL,EAAMpK,SAASuK,IAEnB3J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,uBACA,GAEVM,QAAS,CACLC,MAAM,cAU1C,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,WACLyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAElD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAS,KACFA,EAAK,CACTxL,MAAM,WACNkM,WAAW,EACXjL,UAAW2E,EAAQd,oBAMnC,kBAAC,IAAI,CAACkF,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAACX,QAAQ,EAAM8D,YAAY,KAE7C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAgB,CACbA,OAAQA,EACRC,WAAYrJ,EAAMqJ,WAClBlB,sBAAuBiB,EAAOjB,+BAS1D,kBAAC,IAAa,KACV,kBAAC,IAAM,CACHjG,SAAU8H,GAAcC,EACxBkD,KAAK,SACLlC,QAAS,WAAM,OAAAb,EAAKgD,UACpBxL,MAAM,WAEgB,WAArB5B,EAAMqJ,WAA0B,OAAS,UAE9C,kBAAC,IAAM,CACH4B,QAAS,WAAM,OAAAb,EAAKiD,SACpBnL,SAAU8H,GAAcC,EACxBrI,MAAM,WAAS,SAInB,kBAAC,IAAM,CACHqJ,QAAShC,EACTrH,MAAM,WAAS,mB,mhBChnB7C4D,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXC,UAAW,GAGXC,aAAc,CACVF,MAAO,QAEXG,YAAa,CACTlE,MAAO,IAAUmE,cAAcC,SAEnCC,WAAY,CACRC,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpBC,mBAAoB,CAChBH,QAAS,OACTE,eAAgB,gBAChBxD,OAAQ,UACR0D,KAAM,EACN,SAAU,CACNC,QAAS,UAEb,WAAY,CACRhD,WAAY,MAGpBiD,WAAY,CACRN,QAAS,OACTC,WAAY,eA0DXmH,EAAsD,SAAEtN,GACjE,IAAM2G,EAAUnB,IAYV+H,EAAyB,SAACC,GAC5B,SACK1G,OAAO,CACJC,SAAU,IACV/C,UAAW,CACPc,WAAY9E,EAAM8E,WAClBwC,mBAAoBkG,EAAgBvG,KACpCO,4BAA6BgG,EAAgBrG,cAC7CsG,yBAA0BD,EAAgBE,2BAC1ChG,SAAU8F,EAAgB9F,SAC1BC,UAAWC,EAAa4F,MAI/BvJ,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAiB,qCAAsCoB,EAAQhE,KAAK4C,MAAO,SAE3E,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,qCAAsCA,EAAQ,aAIrEmN,EAA+B,SAACH,GAClC,SACK1G,OAAO,CACJC,SAAU,IACV/C,UAAW,CACP8D,gBAAiB9H,EAAM+H,SACvBjD,WAAY9E,EAAM8E,WAClBwC,mBAAoBkG,EAAgBvG,KACpCO,4BAA6BgG,EAAgBrG,cAC7CsG,yBAA0BD,EAAgBE,2BAC1ChG,SAAU8F,EAAgB9F,SAC1BC,UAAWC,EAAa4F,MAI/BvJ,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAiB,4CAA6CoB,EAAQhE,KAAK4C,MAAO,SAElF,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,4CAA6CA,EAAQ,aAI5EoH,EAAe,SAACI,G,kBACdC,EAAYD,EAAKE,MACfF,EAAKE,MAAMrH,MACXmH,EAAKG,wBAA0B,IAAsBC,KAChDJ,EAAKK,WAAaL,EAAKK,WAAWxH,MAAQ,KAC1CmH,EAAKM,WAAaN,EAAKM,WAAWzH,MAAQ,KAErD,MAAO,CACH0H,YAAa,GACbC,UAAuB,QAAb,EAAAR,EAAKQ,gBAAQ,eAAEzH,OAAqB,QAAb,EAAAiH,EAAKQ,gBAAQ,eAAEzH,MAAQ,KACxD0H,UAA2B,QAAjB,EAAAT,EAAKU,oBAAY,eAAE3H,OAAyB,QAAjB,EAAAiH,EAAKU,oBAAY,eAAE3H,MAAQ,KAChE4H,QAASX,EAAKW,QAAUX,EAAKW,QAAU,KACvCC,gBAAiBZ,EAAKY,gBAAkBZ,EAAKY,gBAAkB,KAC/DC,UAAWb,EAAKa,UAAYb,EAAKa,UAAY,KAC7CC,eAAgBd,EAAKc,eAAiBd,EAAKc,eAAiB,KAC5DC,SAAUf,EAAKe,SAAWf,EAAKe,SAAW,KAC1CT,WAA2B,QAAf,EAAAN,EAAKM,kBAAU,eAAEzH,MAC7BmI,gBAAiBhB,EAAKc,eAAiBd,EAAKgB,gBAAkB,KAC9DX,YAA2B,QAAf,EAAAL,EAAKK,kBAAU,eAAExH,OAAuB,QAAf,EAAAmH,EAAKK,kBAAU,eAAExH,MAAQ,KAC9DqH,MAAOD,EACPE,sBAAuBH,EAAKG,wBAI9ByF,EAAsB,WACpB5N,EAAMkJ,eACNlJ,EAAMkJ,iBA+Dd,OACI,kBAAC,IAAMvH,SAAQ,KACX,kBAAC,IAAI,CACDwH,SAjKK,SAACC,GACW,WAArBpJ,EAAMqJ,WACNkE,EAAuBnE,GAEvBuE,EAA6BvE,GAGjCwE,KA2JQtE,cA9DiB,WAArBtJ,EAAMqJ,WACC,CACHpC,KAAMjH,EAAMuJ,0BAA4BvJ,EAAMuJ,+BAA4BlF,EAC1E8C,cAAenH,EAAMwJ,0BAA4BxJ,EAAMwJ,+BAA4BnF,EACnFqJ,4BAA4B,EAC5BhG,SAAU,GACVc,SAAUxI,EAAMyJ,gBAChBnB,WAAYtI,EAAM0J,aAElBrB,WAAY,KACZH,MAAO,KACPC,sBAAuB,MAGpB,CACHlB,KAAMjH,EAAMsH,mBACFtH,EAAMsH,mBACNtH,EAAMuJ,0BAA4BvJ,EAAMuJ,+BAA4BlF,EAC9E8C,cAAenH,EAAM6J,2BACX7J,EAAM6J,2BACN7J,EAAMwJ,0BAA4BxJ,EAAMwJ,+BAA4BnF,EAC9EqJ,2BAA4B1N,EAAMyN,yBAClC/F,SAAU1H,EAAM0H,SAChBc,SAAUxI,EAAMwI,SAAWxI,EAAMwI,SAAWxI,EAAMyJ,gBAClDf,aAAc1I,EAAM0I,aACpBC,QAAS3I,EAAM2I,QAAU,IAAO3I,EAAM2I,SAASmB,SAAW,KAC1DlB,gBAAiB5I,EAAM4I,gBACvBC,UAAW7I,EAAM6I,UAAY,IAAO7I,EAAM6I,WAAWiB,SAAW,KAChEhB,eAAgB9I,EAAM8I,eAAiB,IAAO9I,EAAM8I,gBAAgBgB,SAAW,KAC/Ed,gBAAiBhJ,EAAMgJ,gBACvBD,SAAU/I,EAAM+I,SAChBT,WAAYtI,EAAMsI,WAAatI,EAAMsI,WAAatI,EAAM0J,aAExDrB,WAAYrI,EAAMqI,WAClBH,MAAOlI,EAAMkI,MACbC,sBAAuBnI,EAAMmI,uBA4B7B4B,aAAc,CAACC,YAAY,EAAMC,UAAU,GAC3CC,OAAQ,SAAC,G,IAACC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAEC,EAAQ,WAAQ,SAAM,OAC5D,0BAAMd,SAAU,SAAA/H,GAAS,OAAA+I,EAAa/I,IAAQiJ,GAAG,qBAC7C,kBAAC,IAAM,CACHC,MAAM,EACNC,QAASqD,EAAmB,kBACZ,oBAChB5L,UAAW2E,EAAQjB,MAEnB,kBAAC,IAAW,CACR2E,GAAG,oBACHrI,UAAW2E,EAAQb,aAEnB,kBAAC,IAAoB,CACjB0E,MAAM,iBACNC,SAAUzK,EAAM0K,OAChBnC,YAAavI,EAAM2K,eAG3B,kBAAC,IAAa,CAACC,UAAU,GACrB,6BACI,kBAAC,IAAI,CAACC,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,OACLP,MAAO,OACPgC,WAAY,0BACZgH,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,GACnD0K,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB+F,SAAU3L,EAAMkL,aAAelL,EAAMkL,aAAe,EACpDQ,UAAW,IAEXxJ,SAAUlC,EAAMuJ,0BAA4B,GAA4B,IAAvBvJ,EAAMkL,gBAG/D,kBAAC,IAAI,CAACH,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,gBACLP,MAAO,gBACPgC,WAAY,mCACZgH,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,GACnD0K,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB+F,SAAU3L,EAAMoL,sBAAwBpL,EAAMoL,sBAAwB,EACtEM,UAAW,IAEXxJ,SAAUlC,EAAMwJ,0BAA4B,GAAqC,IAAhCxJ,EAAMoL,yBAG9D,IAAYS,UAAU,IAAgBgC,gBAE/B,kBAAC,IAAI,CAAC9C,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAAEX,QAAQ,KAE5B,SAAC,GAAQ,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,+BACP,SAAC,G,IAAEiL,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAgB,CACbuB,QACI,kBAAC,IAAQ,CACLxM,KAAK,6BACLa,SAAU,SAACf,GAAU,OAAAmL,EAAMpK,SAASf,EAAM2M,OAAOC,UACjDA,QAASzB,EAAM1L,MACfqB,UAAWlC,EAAMiO,WAGzBlN,MAAM,wCAOhC,KAEN,kBAAC,IAAI,CAACgK,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,eAGJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAA8B,KACvBD,EAAK,CACTxL,MAAM,cACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAW,GAAG2E,EAAQf,UACtB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,EAAcqL,GACtD,OApHvC,SAACvC,EAA4BhB,EAAmBmD,EAE/CG,EAAoCpL,EAAcqL,GACxE,GAAa,eAATrL,EAAuB,CACvB,IAAI,EAAaoL,GAAaA,EAAU7L,OAAS6L,EAAU3L,MACrC,CAAEF,MAAQ6L,EAAU7L,MAAOE,MAAO2L,EAAU3L,OAC5C,KACtBqJ,EAAKwC,OAAM,WACPxC,EAAKe,OAAO,aAAc,GAC1Bf,EAAKe,OAAO,wBAAyBwB,EAC/B,IAAsBvE,KACtB,IAAsByE,UAyGwBC,CAAiB1C,EAAMhB,EAAQmD,EAAOG,EAAWpL,EAAMqL,IAG3D5J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,0BACA,GAEVM,QAAS,CACLC,MAAM,UAM1B,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,UAEJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAAsB,KACfD,EAAK,CACTxL,MAAM,QACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAc2E,EAAQf,UAAS,IAC/B9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,GACxC,OAAAiL,EAAMpK,SAASuK,IAEnB3J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,uBACA,GAEVM,QAAS,CACLC,MAAM,YAQlC,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,EAAGhJ,UAAW2E,EAAQH,YACxC,kBAAC,IAAI,CAACqE,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,kBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMkL,aAAelL,EAAMkL,aAAe,EACjDa,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IACtB,yBAAKhJ,UAAW2E,EAAQN,oBAChB,yBAAKrE,UAAU,aAAW,2BAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMoL,sBAAwBpL,EAAMoL,sBAAwB,EACnEW,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,wBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMmM,mBAAqBnM,EAAMmM,mBAAqB,EAC7DJ,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,gBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMoM,WAAapM,EAAMoM,WAAa,EAC7CL,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,gBAOtD,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,WACLyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAElD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAS,KACFA,EAAK,CACTxL,MAAM,WACNkM,WAAW,EACXjL,UAAW2E,EAAQd,oBAMnC,kBAAC,IAAI,CAACkF,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAACX,QAAQ,EAAM8D,YAAY,KAE7C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAgB,CACbA,OAAQA,EACRC,WAAYrJ,EAAMqJ,WAClBlB,sBAAuBiB,EAAOjB,+BAS1D,kBAAC,IAAa,KACV,kBAAC,IAAM,CACHjG,SAAU8H,GAAcC,EACxBrI,MAAM,UACNuL,KAAK,SACLlC,QAAS,WAAM,OAAAb,EAAKgD,WAEE,WAArBpN,EAAMqJ,WAA0B,OAAS,UAE9C,kBAAC,IAAM,CACH4B,QAAS,WAAM,OAAAb,EAAKiD,SACpBnL,SAAU8H,GAAcC,EACxBrI,MAAM,WAAS,SAInB,kBAAC,IAAM,CACHqJ,QAAS2C,EACThM,MAAM,WAAS,mB,mhBC7f7C4D,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXC,UAAW,GAGXC,aAAc,CACVF,MAAO,QAEXG,YAAa,CACTlE,MAAO,IAAUmE,cAAcC,SAEnCC,WAAY,CACRC,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpBC,mBAAoB,CAChBH,QAAS,OACTE,eAAgB,gBAChBxD,OAAQ,UACR0D,KAAM,EACN,SAAU,CACNC,QAAS,UAEb,WAAY,CACRhD,WAAY,MAGpBiD,WAAY,CACRN,QAAS,OACTC,WAAY,eAqDX+H,EAA8D,SAAElO,GACzE,IAAM2G,EAAUnB,IAYV2I,EAAyB,SAACC,GAC5B,SACKtH,OAAO,CACJC,SAAU,IACV/C,UAAW,CACPc,WAAY9E,EAAM8E,WAClBuJ,sBAAuBD,EAAoBE,QAC3Cb,yBAA0BW,EAAoBV,2BAC9ChG,SAAU0G,EAAoB1G,SAC9BC,UAAWC,EAAawG,MAI/BnK,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAiB,4CAA6CoB,EAAQhE,KAAK4C,MAAO,SAElF,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,4CAA6CA,EAAQ,aAI5E+N,EAA+B,SAACH,GAClC,SACKtH,OAAO,CACJC,SAAU,IACV/C,UAAW,CACP8D,gBAAiB9H,EAAM+H,SACvBjD,WAAY9E,EAAM8E,WAClBuJ,sBAAuBD,EAAoBE,QAC3Cb,yBAA0BW,EAAoBV,2BAC9ChG,SAAU0G,EAAoB1G,SAC9BC,UAAWC,EAAawG,MAI/BnK,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAiB,mDAAoDoB,EAAQhE,KAAK4C,MAAO,SAEzF,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,mDAAoDA,EAAQ,aAInFoH,EAAe,SAACI,G,kBACdC,EAAYD,EAAKE,MACfF,EAAKE,MAAMrH,MACXmH,EAAKG,wBAA0B,IAAsBC,KAChDJ,EAAKK,WAAaL,EAAKK,WAAWxH,MAAQ,KAC1CmH,EAAKM,WAAaN,EAAKM,WAAWzH,MAAQ,KAErD,MAAO,CACH0H,YAAa,GACbC,UAAuB,QAAb,EAAAR,EAAKQ,gBAAQ,eAAEzH,OAAqB,QAAb,EAAAiH,EAAKQ,gBAAQ,eAAEzH,MAAQ,KACxD0H,UAA2B,QAAjB,EAAAT,EAAKU,oBAAY,eAAE3H,OAAyB,QAAjB,EAAAiH,EAAKU,oBAAY,eAAE3H,MAAQ,KAChE4H,QAASX,EAAKW,QAAUX,EAAKW,QAAU,KACvCC,gBAAiBZ,EAAKY,gBAAkBZ,EAAKY,gBAAkB,KAC/DC,UAAWb,EAAKa,UAAYb,EAAKa,UAAY,KAC7CC,eAAgBd,EAAKc,eAAiBd,EAAKc,eAAiB,KAC5DC,SAAUf,EAAKe,SAAWf,EAAKe,SAAW,KAC1CT,WAA2B,QAAf,EAAAN,EAAKM,kBAAU,eAAEzH,MAC7BmI,gBAAiBhB,EAAKc,eAAiBd,EAAKgB,gBAAkB,KAC9DX,YAA2B,QAAf,EAAAL,EAAKK,kBAAU,eAAExH,OAAuB,QAAf,EAAAmH,EAAKK,kBAAU,eAAExH,MAAQ,KAC9DqH,MAAOD,EACPE,sBAAuBH,EAAKG,wBAI9BqG,EAA0B,WACxBxO,EAAMkJ,eACNlJ,EAAMkJ,iBAyDd,OACI,kBAAC,IAAI,CACDC,SAxJS,SAACC,GACW,WAArBpJ,EAAMqJ,WACN8E,EAAuB/E,GAEvBmF,EAA6BnF,GAGjCoF,KAkJIlF,cAvDqB,WAArBtJ,EAAMqJ,WACC,CACHiF,aAASjK,EACTqJ,4BAA4B,EAC5BhG,SAAU,GACVc,SAAUxI,EAAMyJ,gBAChBnB,WAAYtI,EAAM0J,aAElBrB,WAAY,KACZH,MAAO,KACPC,sBAAuB,MAGpB,CACHmG,QAAStO,EAAMyO,cACff,2BAA4B1N,EAAMyN,yBAClC/F,SAAU1H,EAAM0H,SAChBc,SAAUxI,EAAMwI,SAAWxI,EAAMwI,SAAWxI,EAAMyJ,gBAClDf,aAAc1I,EAAM0I,aACpBC,QAAS3I,EAAM2I,QAAU,IAAO3I,EAAM2I,SAASmB,SAAW,KAC1DlB,gBAAiB5I,EAAM4I,gBACvBC,UAAW7I,EAAM6I,UAAY,IAAO7I,EAAM6I,WAAWiB,SAAW,KAChEhB,eAAgB9I,EAAM8I,eAAiB,IAAO9I,EAAM8I,gBAAgBgB,SAAW,KAC/Ed,gBAAiBhJ,EAAMgJ,gBACvBD,SAAU/I,EAAM+I,SAChBT,WAAYtI,EAAMsI,WAAatI,EAAMsI,WAAatI,EAAM0J,aAExDrB,WAAYrI,EAAMqI,WAClBH,MAAOlI,EAAMkI,MACbC,sBAAuBnI,EAAMmI,uBA2BjC4B,aAAc,CAACC,YAAY,EAAMC,UAAU,GAC3CC,OAAQ,SAAC,G,IAACC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAEC,EAAQ,WAAQ,SAAM,OAC5D,0BAAMd,SAAUgB,GACZ,kBAAC,IAAM,CACHG,MAAM,EACNC,QAASiE,EAAuB,kBAChB,oBAChBxM,UAAW2E,EAAQjB,MAEnB,kBAAC,IAAW,CACR2E,GAAG,oBACHrI,UAAW2E,EAAQb,aAEnB,kBAAC,IAAoB,CACjB0E,MAAM,oBACNC,SAAUzK,EAAM0K,OAChBnC,YAAavI,EAAM2K,eAG3B,kBAAC,IAAa,CAACC,UAAU,GACrB,6BACI,kBAAC,IAAI,CAACC,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,UACLP,MAAO,UACPgC,WAAY,8BACZgH,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,GACnD0K,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB+F,SAAU3L,EAAMmM,mBAAqBnM,EAAMmM,mBAAqB,EAChET,UAAW,OAIlB,IAAYG,UAAU,IAAgBgC,gBAE/B,kBAAC,IAAI,CAAC9C,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAAEX,QAAQ,KAE5B,SAAC,GAAQ,SAAO,OACb,kBAAC,IAAK,CACF9H,KAAK,+BAIJ,SAAC,G,IAAEiL,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAgB,CACbuB,QACI,kBAAC,IAAQ,CACLxM,KAAK,6BACLa,SAAU,SAACf,GAAU,OAAAmL,EAAMpK,SAASf,EAAM2M,OAAOC,UACjDA,QAASzB,EAAM1L,MACfqB,UAAWlC,EAAMiO,WAGzBlN,MAAM,wCAOhC,MAGV,kBAAC,IAAI,CAACgK,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,eAGJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAA8B,KACvBD,EAAK,CACTxL,MAAM,cACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAW,GAAG2E,EAAQf,UACtB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,EAAcqL,GACtD,OAzG/B,SAACvC,EAA+BhB,EAAmBmD,EAElDG,EAAoCpL,EAAcqL,GACxE,GAAa,eAATrL,EAAuB,CACvB,IAAI,EAAaoL,GAAaA,EAAU7L,OAAS6L,EAAU3L,MACrC,CAAEF,MAAQ6L,EAAU7L,MAAOE,MAAO2L,EAAU3L,OAC5C,KACtBqJ,EAAKwC,OAAM,WACPxC,EAAKe,OAAO,aAAc,GAC1Bf,EAAKe,OAAO,wBAAyBwB,EAC/B,IAAsBvE,KACtB,IAAsByE,UA8FgBC,CAAiB1C,EAAMhB,EAAQmD,EAAOG,EAAWpL,EAAMqL,IAG3D5J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,0BACA,GAEVM,QAAS,CACLC,MAAM,UAM1B,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,UAEJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAAsB,KACfD,EAAK,CACTxL,MAAM,QACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAc2E,EAAQf,UAAS,IAC/B9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,GACxC,OAAAiL,EAAMpK,SAASuK,IAEnB3J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,uBACA,GAEVM,QAAS,CACLC,MAAM,WAO9B,kBAAC,IAAI,CACDjC,MAAM,EACNC,GAAI,EACJhJ,UAAW2E,EAAQH,YAEnB,kBAAC,IAAI,CAACqE,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,kBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMkL,aAAelL,EAAMkL,aAAe,EACjDa,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,2BAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMkL,aAAelL,EAAMkL,aAAe,EACjDa,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,wBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMmM,mBAAqBnM,EAAMmM,mBAAqB,EAC7DJ,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,gBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMoM,WAAapM,EAAMoM,WAAa,EAC7CL,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,gBAOtD,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,WAELyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAElD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAS,KACFA,EAAK,CACTxL,MAAM,WACNkM,WAAW,EACXjL,UAAW2E,EAAQd,oBAMnC,kBAAC,IAAI,CAACkF,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAACX,QAAQ,EAAM8D,YAAY,KAE7C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAgB,CACbA,OAAQA,EACRC,WAAYrJ,EAAMqJ,WAClBlB,sBAAuBiB,EAAOjB,+BAS1D,kBAAC,IAAa,KACV,kBAAC,IAAM,CACHjG,SAAU8H,GAAcC,EACxBrI,MAAM,UACNuL,KAAK,SACLlC,QAAS,WAAM,OAAAb,EAAKgD,WAEE,WAArBpN,EAAMqJ,WAA0B,OAAS,UAE9C,kBAAC,IAAM,CACH4B,QAAS,WAAM,OAAAb,EAAKiD,SACpBnL,SAAU8H,GAAcC,EACxBrI,MAAM,WAAS,SAInB,kBAAC,IAAM,CACHqJ,QAASuD,EACT5M,MAAM,WAAS,kB,2fC5ezC4D,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXC,UAAW,GAGXC,aAAc,CACVF,MAAO,QAEXG,YAAa,CACTlE,MAAO,IAAUmE,cAAcC,SAEnCC,WAAY,CACRC,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpBC,mBAAoB,CAChBH,QAAS,OACTE,eAAgB,gBAChBxD,OAAQ,UACR0D,KAAM,EACN,SAAU,CACNC,QAAS,UAEb,WAAY,CACRhD,WAAY,MAGpBiD,WAAY,CACRN,QAAS,OACTC,WAAY,eAkDXuI,EAAgF,SAAE1O,GAC3F,IAAM2G,EAAUnB,IAYVmJ,EAAmC,SAACC,GACtC,SACK9H,OAAO,CACJC,SAAU,IACV/C,UAAW,CACPc,WAAY9E,EAAM8E,WAClB+J,oBAAqBD,EAA8BE,SACnDC,eAAgBH,EAA8BI,cAC9CtH,SAAUkH,EAA8BlH,SACxCC,UAAWC,EAAagH,MAI/B3K,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAiB,yDAA0DoB,EAAQhE,KAAK4C,MAAO,SAE/F,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,yDAA0DA,EAAQ,aAIzFyO,EAAyC,SAACL,GAC5C,SACK9H,OAAO,CACJC,SAAU,IACV/C,UAAW,CACP8D,gBAAiB9H,EAAM+H,SACvBjD,WAAY9E,EAAM8E,WAClB+J,oBAAqBD,EAA8BE,SACnDC,eAAgBH,EAA8BI,cAC9CtH,SAAUkH,EAA8BlH,SACxCC,UAAWC,EAAagH,MAI/B3K,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAiB,gEAAiEoB,EAAQhE,KAAK4C,MAAO,SAEtG,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,gEAAiEA,EAAQ,aAIhGoH,EAAe,SAACI,G,kBACdC,EAAYD,EAAKE,MACfF,EAAKE,MAAMrH,MACXmH,EAAKG,wBAA0B,IAAsBC,KAChDJ,EAAKK,WAAaL,EAAKK,WAAWxH,MAAQ,KAC1CmH,EAAKM,WAAaN,EAAKM,WAAWzH,MAAQ,KAErD,MAAO,CACH0H,YAAa,GACbC,UAAuB,QAAb,EAAAR,EAAKQ,gBAAQ,eAAEzH,OAAqB,QAAb,EAAAiH,EAAKQ,gBAAQ,eAAEzH,MAAQ,KACxD0H,UAA2B,QAAjB,EAAAT,EAAKU,oBAAY,eAAE3H,OAAyB,QAAjB,EAAAiH,EAAKU,oBAAY,eAAE3H,MAAQ,KAChE4H,QAASX,EAAKW,QAAUX,EAAKW,QAAU,KACvCC,gBAAiBZ,EAAKY,gBAAkBZ,EAAKY,gBAAkB,KAC/DC,UAAWb,EAAKa,UAAYb,EAAKa,UAAY,KAC7CC,eAAgBd,EAAKc,eAAiBd,EAAKc,eAAiB,KAC5DC,SAAUf,EAAKe,SAAWf,EAAKe,SAAW,KAC1CT,WAA2B,QAAf,EAAAN,EAAKM,kBAAU,eAAEzH,MAC7BmI,gBAAiBhB,EAAKc,eAAiBd,EAAKgB,gBAAkB,KAC9DX,YAA2B,QAAf,EAAAL,EAAKK,kBAAU,eAAExH,OAAuB,QAAf,EAAAmH,EAAKK,kBAAU,eAAExH,MAAQ,KAC9DqH,MAAOD,EACPE,sBAAuBH,EAAKG,wBAI9B+G,EAAoC,WAClClP,EAAMkJ,eACNlJ,EAAMkJ,iBAyDd,OACI,kBAAC,IAAMvH,SAAQ,KACX,kBAAC,IAAI,CACDwH,SAzJK,SAACC,GACW,WAArBpJ,EAAMqJ,WACNsF,EAAiCvF,GAEjC6F,EAAuC7F,GAG3C8F,KAmJQ5F,cAxDiB,WAArBtJ,EAAMqJ,WACC,CACHyF,cAAUzK,EACV2K,cAAe,GACftH,SAAU,GACVc,SAAUxI,EAAMyJ,gBAChBnB,WAAYtI,EAAM0J,aAElBrB,WAAY,KACZH,MAAO,KACPC,sBAAuB,MAGpB,CACH2G,SAAU9O,EAAMmP,YAChBH,cAAehP,EAAMgP,cACrBtH,SAAU1H,EAAM0H,SAChBc,SAAUxI,EAAMwI,SAAWxI,EAAMwI,SAAWxI,EAAMyJ,gBAClDf,aAAc1I,EAAM0I,aACpBC,QAAS3I,EAAM2I,QAAU,IAAO3I,EAAM2I,SAASmB,SAAW,KAC1DlB,gBAAiB5I,EAAM4I,gBACvBC,UAAW7I,EAAM6I,UAAY,IAAO7I,EAAM6I,WAAWiB,SAAW,KAChEhB,eAAgB9I,EAAM8I,eAAiB,IAAO9I,EAAM8I,gBAAgBgB,SAAW,KAC/Ed,gBAAiBhJ,EAAMgJ,gBACvBD,SAAU/I,EAAM+I,SAChBT,WAAYtI,EAAMsI,WAAatI,EAAMsI,WAAatI,EAAM0J,aAExDrB,WAAYrI,EAAMqI,WAClBH,MAAOlI,EAAMkI,MACbC,sBAAuBnI,EAAMmI,uBA4B7B4B,aAAc,CAACC,YAAY,EAAMC,UAAU,GAC3CC,OAAQ,SAAC,G,IAACC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAEC,EAAQ,WAAQ,SAAM,OAC5D,0BAAMd,SAAU,SAAA/H,GAAS,OAAA+I,EAAa/I,IAAQiJ,GAAG,mCAC7C,kBAAC,IAAM,CACHC,MAAM,EACNC,QAAS2E,EAAiC,kBAC1B,oBAChBlN,UAAW2E,EAAQjB,MAEnB,kBAAC,IAAW,CACR2E,GAAG,oBACHrI,UAAW2E,EAAQb,aAEnB,kBAAC,IAAoB,CACjB0E,MAAM,+BACNC,SAAUzK,EAAM0K,OAChBnC,YAAavI,EAAM2K,eAG3B,kBAAC,IAAa,CAACC,UAAU,GACrB,6BACI,kBAAC,IAAI,CAACC,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,WACLP,MAAO,WACPgC,WAAY,2BACZgH,aAAc,CAAC0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,GAClD0K,OAAQvL,EAAMwL,gBAAgBC,eAC9BzJ,UAAW2E,EAAQf,UACnB+F,SAAU3L,EAAM4L,oBAAsB5L,EAAM4L,oBAAsB,EAClEF,UAAW,OAInB,kBAAC,IAAI,CAACX,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,gBACLyI,aAAc,CAAC0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAEjD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAS,KACFA,EAAK,CACTxL,MAAM,iBACNiB,UAAW2E,EAAQf,UACnB7C,WAAW,oCAM3B,kBAAC,IAAI,CAACgI,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,eAGJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAA8B,KACvBD,EAAK,CACTxL,MAAM,cACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAW,GAAG2E,EAAQf,UACtB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,EAAcqL,GACtD,OA3FvC,SAACvC,EAA0ChB,EAAmBmD,EAE7DG,EAAoCpL,EAAcqL,GACxE,GAAa,eAATrL,EAAuB,CACvB,IAAI,EAAaoL,GAAaA,EAAU7L,OAAS6L,EAAU3L,MACrC,CAAEF,MAAQ6L,EAAU7L,MAAOE,MAAO2L,EAAU3L,OAC5C,KACtBqJ,EAAKwC,OAAM,WACPxC,EAAKe,OAAO,aAAc,GAC1Bf,EAAKe,OAAO,wBAAyBwB,EAC/B,IAAsBvE,KACtB,IAAsByE,UAgFwBC,CAAiB1C,EAAMhB,EAAQmD,EAAOG,EAAWpL,EAAMqL,IAG3D5J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,0BACA,GAEVM,QAAS,CACLC,MAAM,UAM1B,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,UAEJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAAsB,KACfD,EAAK,CACTxL,MAAM,QACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAc2E,EAAQf,UAAS,IAC/B9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,GACxC,OAAAiL,EAAMpK,SAASuK,IAEnB3J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,uBACA,GAEVM,QAAS,CACLC,MAAM,YAQlC,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,EAAGhJ,UAAW2E,EAAQH,YACxC,kBAAC,IAAI,CAACqE,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,wBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMmM,mBAAqBnM,EAAMmM,mBAAqB,EAC7DJ,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAK9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,0BAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAM4L,oBAAsB5L,EAAM4L,oBAAsB,EAC/DG,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,gBAOtD,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,WACLyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAElD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAS,KACFA,EAAK,CACTxL,MAAM,WACNkM,WAAW,EACXjL,UAAW2E,EAAQd,oBAMnC,kBAAC,IAAI,CAACkF,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAACX,QAAQ,EAAM8D,YAAY,KAE7C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAgB,CACbA,OAAQA,EACRC,WAAYrJ,EAAMqJ,WAClBlB,sBAAuBiB,EAAOjB,+BAS1D,kBAAC,IAAa,KACV,kBAAC,IAAM,CACHjG,SAAU8H,GAAcC,EACxBrI,MAAM,UACNuL,KAAK,SACLlC,QAAS,WAAM,OAAAb,EAAKgD,WAEE,WAArBpN,EAAMqJ,WAA0B,OAAS,UAE9C,kBAAC,IAAM,CACH4B,QAAS,WAAM,OAAAb,EAAKiD,SACpBnL,SAAU8H,GAAcC,EACxBrI,MAAM,WAAS,SAInB,kBAAC,IAAM,CACHqJ,QAASiE,EACTtN,MAAM,WAAS,mB,mgBCvb7C4D,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXC,UAAW,GAGXC,aAAc,CACVF,MAAO,QAEXG,YAAa,CACTlE,MAAO,IAAUmE,cAAcC,SAEnCC,WAAY,CACRC,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpBC,mBAAoB,CAChBH,QAAS,OACTE,eAAgB,gBAChBxD,OAAQ,UACR0D,KAAM,EACN,SAAU,CACNC,QAAS,UAEb,WAAY,CACRhD,WAAY,MAGpBiD,WAAY,CACRN,QAAS,OACTC,WAAY,eAgDXiJ,EAA0D,SAAEpP,GACrE,IAAM2G,EAAUnB,IAYV6J,EAAuB,SAACC,GAC1B,SACKxI,OAAO,CACJC,SAAU,IACV/C,UAAW,CACPc,WAAY9E,EAAM8E,WAClByK,QAASD,EAAkBE,gBAC3B9H,SAAU4H,EAAkB5H,SAC5BC,UAAWC,EAAa0H,MAI/BrL,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAkB,mCAAoCoB,EAAQhE,KAAK4C,MAAO,SAE1E,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,mCAAoCA,EAAQ,aAInEiP,EAA6B,SAACH,GAChC,SACKxI,OAAO,CACJC,SAAU,IACV/C,UAAW,CACP8D,gBAAiB9H,EAAM+H,SACvBjD,WAAY9E,EAAM8E,WAClByK,QAASD,EAAkBE,gBAC3B9H,SAAU4H,EAAkB5H,SAC5BC,UAAWC,EAAa0H,MAI/BrL,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAkB,0CAA2CoB,EAAQhE,KAAK4C,MAAO,SAEjF,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,0CAA2CA,EAAQ,aAI1EoH,EAAe,SAACI,G,kBACdC,EAAYD,EAAKE,MACfF,EAAKE,MAAMrH,MACXmH,EAAKG,wBAA0B,IAAsBC,KAChDJ,EAAKK,WAAaL,EAAKK,WAAWxH,MAAQ,KAC1CmH,EAAKM,WAAaN,EAAKM,WAAWzH,MAAQ,KAErD,MAAO,CACH0H,YAAa,GACbC,UAAuB,QAAb,EAAAR,EAAKQ,gBAAQ,eAAEzH,OAAqB,QAAb,EAAAiH,EAAKQ,gBAAQ,eAAEzH,MAAQ,KACxD0H,UAA2B,QAAjB,EAAAT,EAAKU,oBAAY,eAAE3H,OAAyB,QAAjB,EAAAiH,EAAKU,oBAAY,eAAE3H,MAAQ,KAChE4H,QAASX,EAAKW,QAAUX,EAAKW,QAAU,KACvCC,gBAAiBZ,EAAKY,gBAAkBZ,EAAKY,gBAAkB,KAC/DC,UAAWb,EAAKa,UAAYb,EAAKa,UAAY,KAC7CC,eAAgBd,EAAKc,eAAiBd,EAAKc,eAAiB,KAC5DC,SAAUf,EAAKe,SAAWf,EAAKe,SAAW,KAC1CT,WAA2B,QAAf,EAAAN,EAAKM,kBAAU,eAAEzH,MAC7BmI,gBAAiBhB,EAAKc,eAAiBd,EAAKgB,gBAAkB,KAE9DX,YAA2B,QAAf,EAAAL,EAAKK,kBAAU,eAAExH,OAAuB,QAAf,EAAAmH,EAAKK,kBAAU,eAAExH,MAAQ,KAC9DqH,MAAOD,EACPE,sBAAuBH,EAAKG,wBAI9BuH,EAAwB,WACtB1P,EAAMkJ,eACNlJ,EAAMkJ,iBAuDd,OACI,kBAAC,IAAMvH,SAAQ,KACX,kBAAC,IAAI,CACAwH,SAtJI,SAACC,GACW,WAArBpJ,EAAMqJ,WACNgG,EAAqBjG,GAErBqG,EAA2BrG,GAG/BsG,KAgJSpG,cAtDgB,WAArBtJ,EAAMqJ,WACC,CACHmG,iBAAiB,EACjB9H,SAAU,GACVc,SAAUxI,EAAMyJ,gBAChBnB,WAAYtI,EAAM0J,aAElBrB,WAAY,KACZH,MAAO,KACPC,sBAAuB,MAGpB,CACHqH,gBAAiBxP,EAAM2P,cACvBjI,SAAU1H,EAAM0H,SAChBc,SAAUxI,EAAMwI,SAAWxI,EAAMwI,SAAWxI,EAAMyJ,gBAClDf,aAAc1I,EAAM0I,aACpBC,QAAS3I,EAAM2I,QAAU,IAAO3I,EAAM2I,SAASmB,SAAW,KAC1DlB,gBAAiB5I,EAAM4I,gBACvBC,UAAW7I,EAAM6I,UAAY,IAAO7I,EAAM6I,WAAWiB,SAAW,KAChEhB,eAAgB9I,EAAM8I,eAAiB,IAAO9I,EAAM8I,gBAAgBgB,SAAW,KAC/Ed,gBAAiBhJ,EAAMgJ,gBACvBD,SAAU/I,EAAM+I,SAChBT,WAAYtI,EAAMsI,WAAatI,EAAMsI,WAAatI,EAAM0J,aAExDrB,WAAYrI,EAAMqI,WAClBH,MAAOlI,EAAMkI,MACbC,sBAAuB,MA4BtB4B,aAAc,CAACC,YAAY,EAAMC,UAAU,GAC3CC,OAAQ,SAAC,G,IAACC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAEC,EAAQ,WAAQ,SAAM,OAC7D,0BAAMd,SAAU,SAAA/H,GAAS,OAAA+I,EAAa/I,IAAQiJ,GAAG,uBAC7C,kBAAC,IAAM,CACHC,MAAM,EACNC,QAASmF,EAAqB,kBACd,oBAChB1N,UAAW2E,EAAQjB,MAEnB,kBAAC,IAAW,CACR2E,GAAG,oBACHrI,UAAW2E,EAAQb,aAEnB,kBAAC,IAAoB,CACjB0E,MAAM,iBACNC,SAAUzK,EAAM0K,OAChBnC,YAAavI,EAAM2K,eAG3B,kBAAC,IAAa,CAACC,UAAU,GACrB,6BACI,kBAAC,IAAI,CAACC,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,kBACLyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAElD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAgB,CACbuB,QACI,kBAAC,IAAQ,CACLxM,KAAK,kBACLa,SAAU,SAACf,GAAU,OAAAmL,EAAMpK,SAASf,EAAM2M,OAAOC,UACjDA,QAASzB,EAAM1L,QAIvBE,MAAM,uBAKtB,kBAAC,IAAI,CAACgK,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,eAGJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAA8B,KACvBD,EAAK,CACTxL,MAAM,cACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAW,GAAG2E,EAAQf,UACtB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,EAAcqL,GACtD,OAlFvC,SAACvC,EAA8BhB,EAAmBmD,EAEjDG,EAAoCpL,EAAcqL,GACxE,GAAa,eAATrL,EAAuB,CACvB,IAAI,EAAaoL,GAAaA,EAAU7L,OAAS6L,EAAU3L,MACrC,CAAEF,MAAQ6L,EAAU7L,MAAOE,MAAO2L,EAAU3L,OAC5C,KACtBqJ,EAAKwC,OAAM,WACPxC,EAAKe,OAAO,aAAc,GAC1Bf,EAAKe,OAAO,wBAAyBwB,EAC/B,IAAsBvE,KACtB,IAAsByE,UAuEwBC,CAAiB1C,EAAMhB,EAAQmD,EAAOG,EAAWpL,EAAMqL,IAG3D5J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,0BACA,GAEVM,QAAS,CACLC,MAAM,UAM1B,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,IACtB,kBAAC,IAAK,CACF1J,KAAK,UAEJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAAsB,KACfD,EAAK,CACTxL,MAAM,QACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAc2E,EAAQf,UAAS,IAC/B9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,GACxC,OAAAiL,EAAMpK,SAASuK,IAEnB3J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,uBACA,GAEVM,QAAS,CACLC,MAAM,YAQ9B,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,EAAGhJ,UAAW2E,EAAQH,YACxC,kBAAC,IAAI,CAACqE,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,gBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMoM,WAAapM,EAAMoM,WAAa,EAC7CL,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,cAM9C,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,gBAG1B,yBAAKA,UAAU,aACVhC,EAAM4P,WACD,IAAO5P,EAAM4P,YAAY3D,OAAO,oBAChC5H,OAO1B,kBAAC,IAAI,CAAC0G,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,WACLyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAElD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAS,KACFA,EAAK,CACTxL,MAAM,WACNkM,WAAW,EACXjL,UAAW2E,EAAQd,oBAMnC,kBAAC,IAAI,CAACkF,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAACX,QAAQ,EAAM8D,YAAY,KAE7C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAgB,CACbA,OAAQA,EACRC,WAAYrJ,EAAMqJ,WAClBlB,sBAAuBiB,EAAOjB,+BAS1D,kBAAC,IAAa,KACV,kBAAC,IAAM,CACHjG,SAAU8H,GAAcC,EACxBrI,MAAM,UACNuL,KAAK,SACLlC,QAAS,WAAM,OAAAb,EAAKgD,WAEE,WAArBpN,EAAMqJ,WAA0B,OAAS,UAG9C,kBAAC,IAAM,CACH4B,QAAS,WAAM,OAAAb,EAAKiD,SACpBnL,SAAU8H,GAAcC,EACxBrI,MAAM,WAAS,SAInB,kBAAC,IAAM,CACHqJ,QAASyE,EACT9N,MAAM,WAAS,mB,mgBC1a7C4D,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXC,UAAW,GAGXC,aAAc,CACVF,MAAO,QAEXG,YAAa,CACTlE,MAAO,IAAUmE,cAAcC,SAEnCC,WAAY,CACRC,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpBC,mBAAoB,CAChBH,QAAS,OACTE,eAAgB,gBAChBxD,OAAQ,UACR0D,KAAM,EACN,SAAU,CACNC,QAAS,UAEb,WAAY,CACRhD,WAAY,MAGpBiD,WAAY,CACRN,QAAS,OACTC,WAAY,eA+CX0J,EAAsD,SAAE7P,GACjE,IAAM2G,EAAUnB,IAYVsK,EAAqB,SAACC,GACxB,SACKjJ,OAAO,CACJC,SAAU,IACV/C,UAAW,CACPc,WAAY9E,EAAM8E,WAClBkL,MAAOD,EAAgBE,cACvBvI,SAAUqI,EAAgBrI,SAC1BC,UAAWC,EAAamI,MAI/B9L,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAiB,iCAAkCoB,EAAQhE,KAAK4C,MAAO,SAEvE,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,iCAAkCA,EAAQ,aAIjE0P,EAA2B,SAACH,GAC9B,SACKjJ,OAAO,CACJC,SAAU,IACV/C,UAAW,CACP8D,gBAAiB9H,EAAM+H,SACvBjD,WAAY9E,EAAM8E,WAClBkL,MAAOD,EAAgBE,cACvBvI,SAAUqI,EAAgBrI,SAC1BC,UAAWC,EAAamI,MAI/B9L,MAAK,SAACC,GACCA,EAAQhE,YACmBmE,IAAvBH,EAAQhE,KAAK4C,MACb,YAAiB,wCAAyCoB,EAAQhE,KAAK4C,MAAO,SAE9E,YAAiB,KAAM,yBAA0B,YAK5DqB,OAAM,SAAC3D,GACJ,YAAiB,wCAAyCA,EAAQ,aAIxEoH,EAAe,SAACI,G,kBACdC,EAAYD,EAAKE,MACfF,EAAKE,MAAMrH,MACXmH,EAAKG,wBAA0B,IAAsBC,KAChDJ,EAAKK,WAAaL,EAAKK,WAAWxH,MAAQ,KAC1CmH,EAAKM,WAAaN,EAAKM,WAAWzH,MAAQ,KAErD,MAAO,CACH0H,YAAa,GACbC,UAAuB,QAAb,EAAAR,EAAKQ,gBAAQ,eAAEzH,OAAqB,QAAb,EAAAiH,EAAKQ,gBAAQ,eAAEzH,MAAQ,KACxD0H,UAA2B,QAAjB,EAAAT,EAAKU,oBAAY,eAAE3H,OAAyB,QAAjB,EAAAiH,EAAKU,oBAAY,eAAE3H,MAAQ,KAChE4H,QAASX,EAAKW,QAAUX,EAAKW,QAAU,KACvCC,gBAAiBZ,EAAKY,gBAAkBZ,EAAKY,gBAAkB,KAC/DC,UAAWb,EAAKa,UAAYb,EAAKa,UAAY,KAC7CC,eAAgBd,EAAKc,eAAiBd,EAAKc,eAAiB,KAC5DC,SAAUf,EAAKe,SAAWf,EAAKe,SAAW,KAC1CT,WAA2B,QAAf,EAAAN,EAAKM,kBAAU,eAAEzH,MAC7BmI,gBAAiBhB,EAAKc,eAAiBd,EAAKgB,gBAAkB,KAC9DX,YAA2B,QAAf,EAAAL,EAAKK,kBAAU,eAAExH,OAAuB,QAAf,EAAAmH,EAAKK,kBAAU,eAAExH,MAAQ,KAC9DqH,MAAOD,EACPE,sBAAuBH,EAAKG,wBAI9BgI,EAAsB,WACpBnQ,EAAMkJ,eACNlJ,EAAMkJ,iBAuDd,OACI,kBAAC,IAAMvH,SAAQ,KACX,kBAAC,IAAI,CACDwH,SArJK,SAACC,GACW,WAArBpJ,EAAMqJ,WACNyG,EAAmB1G,GAEnB8G,EAAyB9G,GAG7B+G,KA+IQ7G,cAtDiB,WAArBtJ,EAAMqJ,WACC,CACH4G,eAAe,EACfvI,SAAU,GACVc,SAAUxI,EAAMyJ,gBAChBnB,WAAYtI,EAAM0J,aAElBrB,WAAY,KACZH,MAAO,KACPC,sBAAuB,MAGpB,CACH8H,cAAejQ,EAAMoQ,YACrB1I,SAAU1H,EAAM0H,SAChBc,SAAUxI,EAAMwI,SAAWxI,EAAMwI,SAAWxI,EAAMyJ,gBAClDf,aAAc1I,EAAM0I,aACpBC,QAAS3I,EAAM2I,QAAU,IAAO3I,EAAM2I,SAASmB,SAAW,KAC1DlB,gBAAiB5I,EAAM4I,gBACvBC,UAAW7I,EAAM6I,UAAY,IAAO7I,EAAM6I,WAAWiB,SAAW,KAChEhB,eAAgB9I,EAAM8I,eAAiB,IAAO9I,EAAM8I,gBAAgBgB,SAAW,KAC/Ed,gBAAiBhJ,EAAMgJ,gBACvBD,SAAU/I,EAAM+I,SAChBT,WAAYtI,EAAMsI,WAAatI,EAAMsI,WAAatI,EAAM0J,aAExDrB,WAAYrI,EAAMqI,WAClBH,MAAOlI,EAAMkI,MACbC,sBAAuBnI,EAAMmI,uBA4B7B4B,aAAc,CAACC,YAAY,EAAMC,UAAU,GAC3CC,OAAQ,SAAC,G,IAACC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAEC,EAAQ,WAAQ,SAAM,OAC7D,0BAAMd,SAAU,SAAA/H,GAAS,OAAA+I,EAAa/I,IAAQiJ,GAAG,qBAC5C,kBAAC,IAAM,CACHC,MAAM,EACNC,QAAS4F,EAAmB,kBACZ,oBAChBnO,UAAW2E,EAAQjB,MAEnB,kBAAC,IAAW,CACR2E,GAAG,oBACHrI,UAAW2E,EAAQb,aAEnB,kBAAC,IAAoB,CACjB0E,MAAM,eACNC,SAAUzK,EAAM0K,OAChBnC,YAAavI,EAAM2K,eAG3B,kBAAC,IAAa,CAACC,UAAU,GACrB,6BACI,kBAAC,IAAI,CAACC,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,gBACLyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAElD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAgB,CACbuB,QACI,kBAAC,IAAQ,CACLxM,KAAK,gBACLa,SAAU,SAACf,GAAU,OAAAmL,EAAMpK,SAASf,EAAM2M,OAAOC,UACjDA,QAASzB,EAAM1L,QAIvBE,MAAM,uBAO9B,kBAAC,IAAI,CAACgK,MAAM,EAAMC,GAAI,EAAGhJ,UAAW2E,EAAQH,YACxC,kBAAC,IAAI,CAACqE,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,yBAAKhJ,UAAW2E,EAAQN,oBACpB,yBAAKrE,UAAU,aAAW,gBAG1B,yBAAKA,UAAU,aACX,kBAAC,IAAiB,CACdnB,MAAOb,EAAMoM,WAAapM,EAAMoM,WAAa,EAC7CL,aAAc,IAAqBC,QACnCC,OAAQjM,EAAMwL,gBAAgBU,gBAOtD,kBAAC,IAAI,CAACnB,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,WACLyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAElD,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAS,KACFA,EAAK,CACTxL,MAAM,WACNkM,WAAW,EACXjL,UAAW2E,EAAQd,oBAMnC,kBAAC,IAAI,CAACkF,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAK,CACF1J,KAAK,eAGJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAA8B,KACvBD,EAAK,CACTxL,MAAM,cACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAW,GAAG2E,EAAQf,UACtB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,EAAcqL,GACtD,OAxHvC,SAACvC,EAA4BhB,EAAmBmD,EAE/CG,EAAoCpL,EAAcqL,GACxE,GAAa,eAATrL,EAAuB,CACvB,IAAI,EAAaoL,GAAaA,EAAU7L,OAAS6L,EAAU3L,MACrC,CAAEF,MAAQ6L,EAAU7L,MAAOE,MAAO2L,EAAU3L,OAC5C,KACtBqJ,EAAKwC,OAAM,WACPxC,EAAKe,OAAO,aAAc,GAC1Bf,EAAKe,OAAO,wBAAyBwB,EAC/B,IAAsBvE,KACtB,IAAsByE,UA6GwBC,CAAiB1C,EAAMhB,EAAQmD,EAAOG,EAAWpL,EAAMqL,IAG3D5J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,0BACA,GAEVM,QAAS,CACLC,MAAM,UAM1B,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAK,CACF1J,KAAK,UAEJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAAsB,KACfD,EAAK,CACTxL,MAAM,QACNF,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCuB,eAAe,EAEfJ,UAAc2E,EAAQf,UAAS,IAC/B9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BpL,YAAa,SAACqL,EAA8BpL,GACxC,OAAAiL,EAAMpK,SAASuK,IAEnB3J,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,uBACA,GAEVM,QAAS,CACLC,MAAM,YAQlC,kBAAC,IAAI,CAACjC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAACX,QAAQ,EAAM8D,YAAY,KAE7C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAgB,CACbA,OAAQA,EACRC,WAAYrJ,EAAMqJ,WAClBlB,sBAAuBiB,EAAOjB,+BAS1D,kBAAC,IAAa,KACV,kBAAC,IAAM,CACHjG,SAAU8H,GAAcC,EACxBrI,MAAM,UACNuL,KAAK,SACLlC,QAAS,WAAM,OAAAb,EAAKgD,WAEE,WAArBpN,EAAMqJ,WAA0B,OAAS,UAE9C,kBAAC,IAAM,CACH4B,QAAS,WAAM,OAAAb,EAAKiD,SACpBnL,SAAU8H,GAAcC,EACxBrI,MAAM,WAAS,SAInB,kBAAC,IAAM,CACHqJ,QAASkF,EACTvO,MAAM,WAAS,mB,mfCnb7C4D,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACF2K,SAAU,SAEdC,mBAAoB,CAChB,2BAA4B,CACxBC,WAAY,cAwCfC,EAA8D,SAAAxQ,GACvE,IAAM2G,EAAUnB,IAEV,EAAoB,mBAAqC,CAC3DvF,WAAW,EACXC,KAAM,GACNW,MAAOb,EAAMa,MACb4P,iBAAapM,IAJVlE,EAAK,KAAEC,EAAQ,KAOtB,qBAAU,WACNC,MAED,IAEH,IAAMA,EAAY,WAEdD,EAAS,EAAD,KACDD,GAAK,CACRF,WAAW,MAkLhB,SACH6D,EACAJ,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAO4M,EACP1M,UAAW,CACP2M,gBAAiB7M,EAAM6M,iBAE3B9M,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MAjMZoQ,CAJiD,CAC7CD,gBAAiB,OAKjB,GACA,SAACzQ,GAAS,OAAAK,EAAeL,MAEzB,SAAUM,GACN,YAAiB,KAAMA,EAAQ,SAE/BJ,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ5Q,WAAW,WAOzBM,EAAiB,SAACL,GACpB,IAAM4Q,EAAoB5Q,EAAK6Q,UAAUC,eAkBrCC,EAAsD,GAE1DH,EAAkBI,cAAcC,SAAQ,SAACC,GACjCA,EAAkBC,UAClBD,EAAkBC,SAASF,SAAQ,SAACG,GAChCL,EAAmBM,KAAK,CACpBtQ,eAAgBmQ,EAAkBI,OAClCC,QAASL,EAAkB7I,YAC3B1H,MAAOyQ,EAAaE,OACpBzQ,MAAOuQ,EAAa/I,YACpBK,gBAAiB0I,EAAa1I,gBAC9B8I,MAAOJ,EAAaI,cAMpCtR,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ5Q,WAAW,EACXC,KAAM+Q,QAkBZ1P,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMnC,OACI,yBAAKM,UAAc2E,EAAQjB,KAAI,IAAI1F,EAAMgC,WACrC,kBAAC,IAAY,CACTD,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAhCS,SAACf,EAA8BP,GAChD,GAAIb,EAAMqB,YAAa,CACnB,IAAIsQ,OAAiB,EAEjBA,EADA9Q,EACoB,CAAEA,MAAOA,EAAMA,MAAOE,MAAOF,EAAME,MAAO6H,gBAAiB/H,EAAM+H,gBAAiB8I,MAAO7Q,EAAM6Q,YAE/FrN,EAExBrE,EAAMqB,YAAYsQ,EAAmB3R,EAAMsB,QAyBvCb,QAASN,EAAMD,KACfuR,QAAS,SAACnP,GAAW,OAAAA,EAAOmP,QAAUnP,EAAOmP,QAAQG,WAAa,IAClExP,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtD4F,QAAS,CACLkL,OAAQlL,EAAQ2J,oBAGpB7N,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,UAIrBE,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,eAsE1C,I,EAAMiN,EAAqB,IAAG,w8B,i/BCzOxBlL,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXmM,MAAO,CACHnM,MAAO,OACPoM,aAActM,EAAMqF,QAAQ,GAC5BkH,SAAU,YAEdC,eAAgB,CACZD,SAAU,WACVE,OAAQ,EACRC,IAAK,EACLC,MAAO,EACPC,KAAM,EACNC,OAAQ,EACRpM,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBmM,gBAAiB,0BAErBC,KAAM,CACF5Q,MAAO,IAAU6Q,YAAYC,iBAEjCC,UAAW,CACPC,WAAY,EACZC,cAAe,EACf,UAAW,CACP,eAAgB,CACZjR,MAAO,IAAU6Q,YAAYC,mBAIzC9M,UAAW,CACPyK,SAAU,IACVyC,SAAU,QAEdC,SAAU,CACNC,WAAY,QACZC,YAAa,GACbrR,MAAO,WAEXsR,oBAAqB,CACjBhN,QAAS,OACTC,WAAY,UAEhBoC,YAAa,CACT4K,OAAQ,gBAKdC,GAAmB,aAAW,SAAC3N,GACjC,mBAAa,CACTC,KAAM,CACF2N,YAAa5N,EAAMqF,QAAQ,GAC3BwI,aAAc7N,EAAMqF,QAAQ,GAC5B5E,QAAS,OACTE,eAAgB,iBAEpB5C,UACuB,UAAvBiC,EAAM8N,QAAQpG,KACR,CACEvL,MAAO6D,EAAM8N,QAAQC,UAAUC,KAC/BlB,gBAAiB,YAAQ9M,EAAM8N,QAAQC,UAAUE,MAAO,MAE1D,CACE9R,MAAO6D,EAAM8N,QAAQ9P,KAAKkQ,QAC1BpB,gBAAiB9M,EAAM8N,QAAQC,UAAUI,MAEjDpJ,MAAO,CACHlE,KAAM,YAEVkM,KAAM,CACF5Q,MAAO,IAAU6Q,YAAYC,iBAEjCmB,oBAAqB,CACjB3N,QAAS,OACTC,WAAY,UAEhB2N,WAAY,CACR5N,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpB2N,aAAc,CACVnS,MAAO,IAAU6Q,YAAYC,iBAEjCsB,KAAM,CACFhB,WAAY,YAYlBiB,GAAuB,SAACjU,GAE1B,IAAM2G,EAAUyM,KAEV,EAAsB,mBAAS,IAA9Bc,EAAM,KAAEC,EAAS,KAkBxB,OACI,kBAAC,IAAO,CACJnS,UAAW2E,EAAQjB,MAEnB,yBAAK1D,UAAW2E,EAAQmN,YACpB,kBAAC,IAAU,CAAC9R,UAAW2E,EAAQoN,cAAe/T,EAAMwK,OACpD,kBAAC,IAAI,CAACxI,UAAW2E,EAAQqN,KAAMjT,MAAOf,EAAMoU,SAEhD,yBAAKpS,UAAW2E,EAAQkN,qBACpB,kBAAC,I,CAEGQ,YAAY,SACZxT,MAAOqT,EACPzS,WAAY,CACR6S,eACI,kBAAC,IAAc,CAACtC,SAAS,SACrB,kBAAC,IAAU,CAACuC,SAAS,QAAQvS,UAAW2E,EAAQ6L,QAGxD9Q,aACI,kBAAC,IAAc,CAACsQ,SAAS,SACrB,kBAAC,IAAU,CACP/G,QA7BZ,WAChBkJ,EAAU,IACNnU,EAAMwU,UACNxU,EAAMwU,SAAS,KA2BS3S,KAAK,SAEL,kBAAC,IAAS,CAAC0S,SAAS,QAAQvS,UAAW2E,EAAQ6L,UAK/DrQ,SA9CK,SAACf,GAElB+S,EAAU/S,EAAM2M,OAAOlN,OAEnBb,EAAMwU,UACNxU,EAAMwU,SAASpT,EAAM2M,OAAOlN,UA2CxB,kBAAC,IAAO,CAAC2J,MAAM,OACX,kBAAC,IAAU,cACI,cACXS,QAASjL,EAAMyU,YAEf,kBAAC,IAAiB,CAACzS,UAAW2E,EAAQ6L,YAqB/C,SAASkC,KAEpB,IAAM/N,EAAUnB,IAEV,EAA2B,YAAsCmP,IAA/D1S,EAAO,UAAEa,EAAK,QAAE5C,EAAI,OAEtB,EAAoB,mBAA4C,CAClE0U,MAAO,GACPC,OAAO,EACPX,OAAQ,GACRY,QAAQ,EACRC,UAAU,IALP5U,EAAK,KAAEC,EAAQ,KAUtB,qBAAU,YACD0C,GAAS5C,GAAQA,EAAK8U,QACvB5U,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ+D,MAAO1U,EAAM8U,OAAOC,wBAAwBtU,KAAI,SAACE,GAC7C,MAAO,CACHqU,OAAQrU,EAAMqU,OACd3M,YAAa1H,EAAM0H,YACnB4M,SAAUtU,EAAMsU,SAChBC,UAAWvU,EAAMuU,UACjBC,UAAWxU,EAAMwU,UACjBN,UAAU,EACVD,QAAQ,MAEbQ,MAAK,SAACC,EAAGC,GAAM,OAAAD,EAAEJ,SAAWK,EAAEL,UAAY,EAAII,EAAEJ,SAAWK,EAAEL,SAAW,EAAI,YAK5F,CAACjV,EAAM4C,EAAOb,IAEjB,qBAAU,WAEN,IAAMwT,EAAmBC,IAEzB,OAAO,WACHD,EAAiBE,iBAGtB,IAEH,IAkX4BC,EAlXtBF,EAAgB,WAClB,OAEI,SACKG,UAAU,CACPhS,YAAa,WACbC,MAAOgS,GACP9R,UAAW,KAEd6R,UAAU,CAEPE,KAAA,SAAK7R,GACD,GAAIA,EAAQhE,KAAK8V,mBAAmBC,OAAQ,CAEhC,MAAuB/R,EAAQhE,KAAI,mBAE3C,YAAiB,UAAW,EAAmBgW,QAAS,QAEpD,EAAmBA,QAAQC,SAAS,yBAEpC/V,GAAS,SAACyQ,GAEN,IAAMuF,EAAQ,EAAH,GAAOvF,EAAU+D,OAAK,GAE3ByB,EAAOD,EAAMA,EAAME,OAAS,GAOlC,OALAF,EAAMA,EAAME,OAAS,GAAK,EAAH,KAChBD,GAAI,CACPnB,OAAQ,EAAmBA,SAGxB,EAAP,KACOrE,GAAS,CACZ+D,MAAOwB,YAMnB,YAAiB,SAAUlS,EAAQhE,KAAK8V,mBAAmBE,QAAS,UAI5EpT,MAAA,SAAMyT,GAEFC,QAAQ1T,MAAMyT,GACd,YAAiB,KAAMA,EAAK,aAM5C3Q,EAAY,GA+GV6Q,EAAkB,SAAC1L,GAA2C,kBAChE,IAAM6J,EAAQ,EAAH,GAAOzU,EAAMyU,OAAK,GAEvBvR,EAAQuR,EAAM8B,QAAQ3L,GAE5B6J,EAAMvR,GAAOyR,QAAS,EAEtB1U,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ+D,MAAK,EACLE,QAAQ,SAKd6B,EAAkB,SAAC5L,GAA2C,kBAEhE,IAAM6J,EAAQ,EAAH,GAAOzU,EAAMyU,OAAK,GAEvBvR,EAAQuR,EAAM8B,QAAQ3L,GAE5B6J,EAAMvR,GAAOyR,QAAS,EAEtB1U,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ+D,MAAK,EACLE,QAAQ,SAKd8B,EAAY,SAAC7L,EAAwC1H,GAAkB,kBAErEuC,GAEAxF,GAAS,SAACyQ,GACN,SACC/J,OAAO,CACJC,SAAU8P,GACV7S,UAAW,CACPkR,OAAQnK,EAAKmK,OACb3M,YAAa3C,KAIpB3B,MAAK,SAACC,GACCA,EAAQhE,WACmBmE,IAAvBH,EAAQhE,KAAK4C,OACb,YAAkB,4BAA6BoB,EAAQhE,KAAK4C,MAAO,YAK9EqB,OAAM,SAAC3D,GACJ,YAAiB,4BAA6BA,EAAQ,YAG1D,IAAM4V,EAAQ,EAAH,GAAOvF,EAAU+D,OAAK,GAIjC,OAHAwB,EAAMA,EAAMM,QAAQ3L,IAAO+J,QAAS,EACpCsB,EAAMA,EAAMM,QAAQ3L,IAAOxC,YAAc3C,EAElC,EAAP,KACOiL,GAAS,CACZ3Q,KAAMkW,EACNtB,QAAQ,SAMlBgC,EAAoB,SAAC/L,GAA2C,kBAElE3K,GAAS,SAACyQ,GAEN,IAAM+D,EAAQ,EAAH,GAAO/D,EAAU+D,OAAK,GAE3BvR,EAAQuR,EAAM8B,QAAQ3L,GAI5B,OAFA6J,EAAMvR,GAAO0R,UAAW,EAEjB,EAAP,KACOlE,GAAS,CACZ+D,MAAK,EACLG,UAAU,SAKhBgC,EAAoB,SAAChM,GAA2C,kBAGlE3K,GAAS,SAACyQ,GAEN,IAAM+D,EAAQ,EAAH,GAAO/D,EAAU+D,OAAK,GAE3BvR,EAAQuR,EAAM8B,QAAQ3L,GAI5B,OAFA6J,EAAMvR,GAAO0R,UAAW,EAEjB,EAAP,KACOlE,GAAS,CACZ+D,MAAK,EACLG,UAAU,SAKhBiC,EAAc,SAACjM,GAA2C,kBAE5D3K,GAAS,SAACyQ,GAEN,SACC/J,OAAO,CACJC,SAAUkQ,GACVjT,UAAW,CACPkR,OAAQnK,EAAKmK,OACb3M,YAAawC,EAAKxC,eAIzBtE,MAAK,SAACC,GACCA,EAAQhE,WACmBmE,IAAvBH,EAAQhE,KAAK4C,OACb,YAAkB,4BAA6BoB,EAAQhE,KAAK4C,MAAO,YAK9EqB,OAAM,SAAC3D,GACJ,YAAiB,4BAA6BA,EAAQ,YAG1D,IAAM0W,EAAS,EAAH,GAAOrG,EAAU+D,OAAK,GAGlC,OAFAsC,EAAOC,OAAOD,EAAOR,QAAQ3L,GAAO,GAE7B,EAAP,KACO8F,GAAS,CACZkE,UAAU,EACVH,MAAOsC,SAsDbE,EAAmB,SAACrM,GAA2C,kBACjE,IAAewG,KAAK,qCAAqCxG,EAAKxC,YAAW,QAAQwC,EAAKmK,UA8BpFmC,EAAqB,SAACtM,EAAwC1H,GAAkB,gBAACrD,GACnF,OACI,kBAAC,YAAS,CAACsX,YAAavM,EAAKmK,OAAQ7R,MAAOA,IACvC,SAACkU,EAAUC,GAAa,OACrB,kBAAC,IAAQ,GACLC,IAAKF,EAASG,UACVH,EAASI,eACTJ,EAASK,gBAAe,CAC5B7V,OAjRE8V,EAiRkBL,EAASK,WAjRNC,EAiRkBP,EAASI,eAAe5V,MAjRlB,SAE5D+V,GAECD,GAAc,CACdE,WAAY,qBACd,CACF/F,SAAU,SACVE,OAAQ,MA2QYlS,KAEC+K,EAAKgK,UAAahK,EAAK+J,SACvB,oCACG,kBAAC,IAAS,CAAC9S,UAAW2E,EAAQgM,WAC1B,yBAAK3Q,UAAW2E,EAAQuM,qBACpB,kBAAC,IAAiB,CAACqB,SAAS,QAAQvS,UAAc2E,EAAQoM,SAAQ,eAClE,yBACI9H,QAASmM,EAAiBrM,GAC1B/I,UAAW2E,EAAQ4B,aAElBwC,EAAKxC,eAIlB,kBAAC,IAAS,CAACvG,UAAW2E,EAAQgM,UAAWqF,MAAM,UAC3C,kBAAC,IAAU,CACP/M,QAASmM,EAAiBrM,IAE1B,kBAAC,IAAK,CAACnJ,MAAM,UAAUqW,aAAclN,EAAKsK,WACtC,kBAAC,IAAsB,CAACzT,MAAM,eAI1C,kBAAC,IAAS,CAACI,UAAW2E,EAAQgM,UAAWqF,MAAM,SAC3C,kBAAC,IAAU,cACI,OACX9V,SAAU/B,EAAM0U,OAAS1U,EAAM2U,QAAU3U,EAAM4U,SAC/CnT,MAAM,UACNqJ,QAASwL,EAAgB1L,IAEzB,kBAAC,IAAI,OAET,kBAAC,IAAU,cACI,SACX7I,SAAU/B,EAAM0U,OAAS1U,EAAM2U,QAAU3U,EAAM4U,SAC/CnT,MAAM,UACNqJ,QAAS6L,EAAkB/L,IAE3B,kBAAC,IAAa,YAM1BA,EAAKgK,WAAY5U,EAAM4U,WACvB,oCACI,kBAAC,IAAS,CAAC/S,UAAW2E,EAAQgM,UAAWuF,QAAS,GAAC,6CAGnD,kBAAC,IAAS,CAAClW,UAAW2E,EAAQgM,UAAWqF,MAAM,SAC3C,kBAAC,IAAU,cACI,KAEXpW,MAAM,UACNqJ,QAAS+L,EAAYjM,IAErB,kBAAC,IAAK,OAEV,kBAAC,IAAU,cACI,SAEXnJ,MAAM,UACNqJ,QAAS8L,EAAkBhM,IAE3B,kBAAC,IAAS,YAKtBA,EAAK+J,SAAU3U,EAAM2U,SACrB,oCACI,kBAAC,IAAS,CAAC9S,UAAW2E,EAAQgM,UAAWuF,QAAS,GAC9C,kBAAC,IAAS,CACN7D,YA1fP,cA2fO9R,aAAcwI,EAAKxC,YACnBpG,SAjH8C,SAACf,GAC/EwE,EAAYxE,EAAM2M,OAAOlN,OAiHOmB,UAAW2E,EAAQf,aAG3B,kBAAC,IAAS,CAAC5D,UAAW2E,EAAQgM,UAAWqF,MAAM,SAC3C,kBAAC,IAAU,cACI,KACX9V,SAAU/B,EAAM0U,MAChBjT,MAAM,UACNqJ,QAAS2L,EAAU7L,IAEnB,kBAAC,IAAK,OAEV,kBAAC,IAAU,cACI,SACX7I,SAAU/B,EAAM0U,MAChBjT,MAAM,UACNqJ,QAAS0L,EAAgB5L,IAEzB,kBAAC,IAAS,UAlXzB,IAAC8M,EAAqBC,OAmZ3C,OACI,yBAAK9V,UAAW,GAAG2E,EAAQjB,MACvB,kBAAC,IAAK,CAAC1D,UAAW2E,EAAQmL,SACnB7P,GACC,yBAAKD,UAAW2E,EAAQsL,gBACpB,kBAAC,IAAgB,OAGzB,kBAACgC,GAAoB,CACjBzJ,MAAM,WACN4J,MAAOjU,EAAMyU,MAAM0B,OACnB7B,WAnZG,WACfrU,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZgE,OAAO,QAgZHL,SAhYC,SAACN,GACd9T,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZqD,OAAM,UA8XN,kBAAC,IAAc,KACX,kBAAC,IAAK,KACF,kBAAC,IAAS,KACN,kBAAC,IAAQ,KACL,kBAAC,IAAS,aACV,kBAAC,IAAS,CAAC8D,MAAM,UAAQ,cACzB,kBAAC,IAAS,CAACA,MAAM,SAAO,aAGhC,kBAAC,IAAS,CAACtM,WAnLHkK,EAlTV,SAACuC,EAAoBZ,GAEnC,GAAKY,EAAOC,YAAZ,CAIA,IAAMxD,EAdM,SAACyD,EAA0CC,EAAoBC,GAC3E,IAAMJ,EAASK,MAAMC,KAAKJ,GACnBK,EAAWP,EAAOhB,OAAOmB,EAAY,GAAE,GAG9C,OAFAH,EAAOhB,OAAOoB,EAAU,EAAGG,GAEpBP,EASOQ,CACVxY,EAAMyU,MACNuD,EAAOvX,OAAOyC,MACd8U,EAAOC,YAAY/U,OACrB1C,KAAI,SAACoK,EAAwC1H,GAC3C,OAAO,EAAP,KACO0H,GAAI,CACPoK,SAAU9R,OAIlBjD,GAAS,SAACyQ,GA2BN,OAzBA,SACC/J,OAAO,CACJC,SAAU6R,GACV5U,UAAW,CACP6U,gBAAiBjE,EAAMjU,KAAI,SAACoK,GACxB,MAAO,CACHmK,OAAQnK,EAAKmK,OACbC,SAAUpK,EAAKoK,gBAM9BlR,MAAK,SAACC,GACCA,EAAQhE,WACmBmE,IAAvBH,EAAQhE,KAAK4C,OACb,YAAkB,oCAAqCoB,EAAQhE,KAAK4C,MAAO,YAKtFqB,OAAM,SAAC3D,GACJ,YAAiB,oCAAqCA,EAAQ,YAG3D,EAAP,KACOqQ,GAAS,CACZ+D,MAAK,SAoQ6F,SAAC5U,GAC3G,OACI,kBAAC,kBAAe,CAAC8Y,UAAWlD,GACxB,kBAAC,YAAS,CAACmD,YAAa,IAAKC,UAAU,aAClC,SAACzB,GACE,OACI,kBAAC,IAAS,GAACE,IAAKF,EAASG,UAAcH,EAAS0B,eAAoBjZ,GAC/DA,EAAMuE,SACNgT,EAASlD,sBA4KXlU,EAAM0U,OACL,kBAAC,IAAQ,KACL,kBAAC,IAAS,CAAC7S,UAAW2E,EAAQgM,UAAWuF,QAAS,GAC9C,kBAAC,IAAS,CACN7D,YA5kBX,cA6kBWrS,UAAW2E,EAAQf,UACnBzD,SA/LpB,SAACf,GACjBwE,EAAYxE,EAAM2M,OAAOlN,UAiMG,kBAAC,IAAS,CAACmB,UAAW2E,EAAQgM,UAAWqF,MAAM,SAC3C,kBAAC,IAAO,CAACxN,MAAM,QACX,kBAAC,IAAU,cACI,OACXS,QA/P1B,WAEVrF,GAEAxF,GAAS,SAACyQ,GAEN,SACC/J,OAAO,CACJC,SAAUmS,GACVlV,UAAW,CACPuE,YAAa3C,EACbuP,SAAUtE,EAAU+D,MAAM0B,UAIjCrS,MAAK,SAACC,GACCA,EAAQhE,WACmBmE,IAAvBH,EAAQhE,KAAK4C,OACb,YAAkB,4BAA6BoB,EAAQhE,KAAK4C,MAAO,YAK9EqB,OAAM,SAAC3D,GACJ,YAAiB,4BAA6BA,EAAQ,YAG1D,IAAM0W,EAAS,EAAH,GAAOrG,EAAU+D,OAAK,GAYlC,OAVAsC,EAAO3F,KAAK,CACR2D,OAAQ,GACR3M,YAAa3C,EACbuP,SAAUtE,EAAU+D,MAAM0B,OAC1BxB,QAAQ,EACRC,UAAU,EACVK,UAAW,EACXC,UAAW,IAGR,EAAP,KACOxE,GAAS,CACZgE,OAAO,EACPD,MAAOsC,SAuNqB,kBAAC,IAAK,CAAClV,UAAW2E,EAAQ6L,SAGlC,kBAAC,IAAO,CAAChI,MAAM,UACX,kBAAC,IAAU,cACI,SACXS,QA5atB,WAClB7K,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZgE,OAAO,EACPC,QAAQ,EACRC,UAAU,SAwasB,kBAAC,IAAS,CAAC/S,UAAW2E,EAAQ6L,WApEjD,WACrB,IAAI2G,EAAgBhZ,EAAMyU,MAQ1B,OANIzU,EAAM+T,SACNiF,EAAgBhZ,EAAMyU,MAAMwE,QAAO,SAACrO,GAChC,OAAOA,EAAKxC,YAAY8Q,cAAc3C,QAAQvW,EAAM+T,SAAW,MAKnE,IAAEvT,IAAIwY,GAAe,SAACpO,EAAM1H,GACxB,OACI,kBAAC,IAAQ,CACLqI,UAAW2L,EAAmBtM,EAAM1H,GACpCC,IAAKyH,EAAKmK,YA6DFoE,QA4BhC,I,kBAAM3E,GAAgC,IAAG,qiBAcnCuE,GAAwC,IAAG,+XAM3CrC,GAAwC,IAAG,yXAM3CI,GAAwC,IAAG,qYAO3C2B,GAAyC,IAAG,mYAMrC9C,GAAmB,IAAG,4Y,q9BC/2B7BtQ,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXmM,MAAO,CACHnM,MAAO,OACPoM,aAActM,EAAMqF,QAAQ,GAC5BkH,SAAU,YAEdC,eAAgB,CACZD,SAAU,WACVE,OAAQ,EACRC,IAAK,EACLC,MAAO,EACPC,KAAM,EACNC,OAAQ,EACRpM,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBmM,gBAAiB,0BAErBC,KAAM,CACF5Q,MAAO,IAAU6Q,YAAYC,iBAEjCC,UAAW,CACPC,WAAY,EACZC,cAAe,EACf,UAAW,CACP,eAAgB,CACZjR,MAAO,IAAU6Q,YAAYC,mBAIzC9M,UAAW,CACPyK,SAAU,IACVyC,SAAU,QAEdC,SAAU,CACNC,WAAY,QACZC,YAAa,GACbrR,MAAO,WAEXsR,oBAAqB,CACjBhN,QAAS,OACTC,WAAY,eAKlBiN,EAAmB,aAAW,SAAC3N,GACjC,mBAAa,CACTC,KAAM,CACF2N,YAAa5N,EAAMqF,QAAQ,GAC3BwI,aAAc7N,EAAMqF,QAAQ,GAC5B5E,QAAS,OACTE,eAAgB,iBAEpB5C,UACuB,UAAvBiC,EAAM8N,QAAQpG,KACR,CACEvL,MAAO6D,EAAM8N,QAAQC,UAAUC,KAC/BlB,gBAAiB,YAAQ9M,EAAM8N,QAAQC,UAAUE,MAAO,MAE1D,CACE9R,MAAO6D,EAAM8N,QAAQ9P,KAAKkQ,QAC1BpB,gBAAiB9M,EAAM8N,QAAQC,UAAUI,MAEjDpJ,MAAO,CACHlE,KAAM,YAEVkM,KAAM,CACF5Q,MAAO,IAAU6Q,YAAYC,iBAEjCmB,oBAAqB,CACjB3N,QAAS,OACTC,WAAY,UAEhB2N,WAAY,CACR5N,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpB2N,aAAc,CACVnS,MAAO,IAAU6Q,YAAYC,iBAEjCsB,KAAM,CACFhB,WAAY,YAYlBiB,EAAuB,SAACjU,GAE1B,IAAM2G,EAAUyM,IAEV,EAAsB,mBAAS,IAA9Bc,EAAM,KAAEC,EAAS,KAkBxB,OACI,kBAAC,IAAO,CACJnS,UAAW2E,EAAQjB,MAEnB,yBAAK1D,UAAW2E,EAAQmN,YACpB,kBAAC,IAAU,CAAC9R,UAAW2E,EAAQoN,cAAe/T,EAAMwK,OACpD,kBAAC,IAAI,CAACxI,UAAW2E,EAAQqN,KAAMjT,MAAOf,EAAMoU,SAEhD,yBAAKpS,UAAW2E,EAAQkN,qBACpB,kBAAC,I,CAEGQ,YAAY,SACZxT,MAAOqT,EACPzS,WAAY,CACR6S,eACI,kBAAC,IAAc,CAACtC,SAAS,SACrB,kBAAC,IAAU,CAACuC,SAAS,QAAQvS,UAAW2E,EAAQ6L,QAGxD9Q,aACI,kBAAC,IAAc,CAACsQ,SAAS,SACrB,kBAAC,IAAU,CACP/G,QA7BZ,WAChBkJ,EAAU,IACNnU,EAAMwU,UACNxU,EAAMwU,SAAS,KA2BS3S,KAAK,SAEL,kBAAC,IAAS,CAAC0S,SAAS,QAAQvS,UAAW2E,EAAQ6L,UAK/DrQ,SA9CK,SAACf,GAElB+S,EAAU/S,EAAM2M,OAAOlN,OAEnBb,EAAMwU,UACNxU,EAAMwU,SAASpT,EAAM2M,OAAOlN,UA2CxB,kBAAC,IAAO,CAAC2J,MAAM,OACX,kBAAC,IAAU,cACI,cACXS,QAASjL,EAAMyU,YAEf,kBAAC,IAAiB,CAACzS,UAAW2E,EAAQ6L,YAqB/C,SAAS+G,IAEpB,IAAM5S,EAAUnB,IAEV,EAA2B,YAAkCgU,IAA3DvX,EAAO,UAAEa,EAAK,QAAE5C,EAAI,OAEtB,EAAoB,mBAAqD,CAC3E0U,MAAO,GACPC,OAAO,EACPX,OAAQ,GACRY,QAAQ,EACRC,UAAU,IALP5U,EAAK,KAAEC,EAAQ,KAQtB,qBAAU,YACD0C,GAAS5C,GAAQA,EAAK8U,QACvB5U,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ+D,MAAO1U,EAAM8U,OAAOyE,cAAc9Y,KAAI,SAACE,GACnC,MAAO,CACHqU,OAAQrU,EAAMqU,OACd3M,YAAa1H,EAAM0H,YACnB4M,SAAUtU,EAAMsU,SAChBJ,UAAU,EACVD,QAAQ,MAEbQ,MAAK,SAACC,EAAGC,GAAM,OAAAD,EAAEJ,SAAWK,EAAEL,UAAY,EAAII,EAAEJ,SAAWK,EAAEL,SAAW,EAAI,YAK5F,CAACjV,EAAM4C,EAAOb,IAEjB,qBAAU,WAEN,IAAMwT,EAAmBC,IAEzB,OAAO,WACHD,EAAiBE,iBAGtB,IAEH,IA4W4BC,EA5WtBF,EAAgB,WAClB,OAEI,SACKG,UAAU,CACPhS,YAAa,WACbC,MAAO,IACPE,UAAW,KAEd6R,UAAU,CAEPE,KAAA,SAAK7R,GACD,GAAIA,EAAQhE,KAAK8V,mBAAmBC,OAAQ,CAEhC,MAAuB/R,EAAQhE,KAAI,mBAE3C,YAAiB,UAAW,EAAmBgW,QAAS,QAEpD,EAAmBA,QAAQC,SAAS,yBAEpC/V,GAAS,SAACyQ,GAEN,IAAMuF,EAAQ,EAAH,GAAOvF,EAAU+D,OAAK,GAE3ByB,EAAOD,EAAMA,EAAME,OAAS,GAOlC,OALAF,EAAMA,EAAME,OAAS,GAAK,EAAH,KAChBD,GAAI,CACPnB,OAAQ,EAAmBA,SAGxB,EAAP,KACOrE,GAAS,CACZ+D,MAAOwB,YAMnB,YAAiB,SAAUlS,EAAQhE,KAAK8V,mBAAmBE,QAAS,UAI5EpT,MAAA,SAAMyT,GAEFC,QAAQ1T,MAAMyT,GACd,YAAiB,KAAMA,EAAK,aAM5C3Q,EAAY,GA+GV6Q,EAAkB,SAAC1L,GAAoD,kBACzE,IAAM6J,EAAQ,EAAH,GAAOzU,EAAMyU,OAAK,GAEvBvR,EAAQuR,EAAM8B,QAAQ3L,GAE5B6J,EAAMvR,GAAOyR,QAAS,EAEtB1U,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ+D,MAAK,EACLE,QAAQ,SAKd6B,EAAkB,SAAC5L,GAAoD,kBAEzE,IAAM6J,EAAQ,EAAH,GAAOzU,EAAMyU,OAAK,GAEvBvR,EAAQuR,EAAM8B,QAAQ3L,GAE5B6J,EAAMvR,GAAOyR,QAAS,EAEtB1U,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ+D,MAAK,EACLE,QAAQ,SAKd8B,EAAY,SAAC7L,EAAiD1H,GAAkB,kBAE9EuC,GAEAxF,GAAS,SAACyQ,GACN,SACC/J,OAAO,CACJC,SAAU2S,GACV1V,UAAW,CACPkR,OAAQnK,EAAKmK,OACb3M,YAAa3C,KAIpB3B,MAAK,SAACC,GACCA,EAAQhE,WACmBmE,IAAvBH,EAAQhE,KAAK4C,OACb,YAAkB,kCAAmCoB,EAAQhE,KAAK4C,MAAO,YAKpFqB,OAAM,SAAC3D,GACJ,YAAiB,kCAAmCA,EAAQ,YAGhE,IAAM4V,EAAQ,EAAH,GAAOvF,EAAU+D,OAAK,GAIjC,OAHAwB,EAAMA,EAAMM,QAAQ3L,IAAO+J,QAAS,EACpCsB,EAAMA,EAAMM,QAAQ3L,IAAOxC,YAAc3C,EAElC,EAAP,KACOiL,GAAS,CACZ3Q,KAAMkW,EACNtB,QAAQ,SAMlBgC,EAAoB,SAAC/L,GAAoD,kBAE3E3K,GAAS,SAACyQ,GAEN,IAAM+D,EAAQ,EAAH,GAAO/D,EAAU+D,OAAK,GAE3BvR,EAAQuR,EAAM8B,QAAQ3L,GAI5B,OAFA6J,EAAMvR,GAAO0R,UAAW,EAEjB,EAAP,KACOlE,GAAS,CACZ+D,MAAK,EACLG,UAAU,SAKhBgC,EAAoB,SAAChM,GAAoD,kBAG3E3K,GAAS,SAACyQ,GAEN,IAAM+D,EAAQ,EAAH,GAAO/D,EAAU+D,OAAK,GAE3BvR,EAAQuR,EAAM8B,QAAQ3L,GAI5B,OAFA6J,EAAMvR,GAAO0R,UAAW,EAEjB,EAAP,KACOlE,GAAS,CACZ+D,MAAK,EACLG,UAAU,SAKhBiC,EAAc,SAACjM,GAAoD,kBAErE3K,GAAS,SAACyQ,GAEN,SACC/J,OAAO,CACJC,SAAU4S,GACV3V,UAAW,CACPkR,OAAQnK,EAAKmK,OACb3M,YAAawC,EAAKxC,eAIzBtE,MAAK,SAACC,GACCA,EAAQhE,WACmBmE,IAAvBH,EAAQhE,KAAK4C,OACb,YAAkB,kCAAmCoB,EAAQhE,KAAK4C,MAAO,YAKpFqB,OAAM,SAAC3D,GACJ,YAAiB,kCAAmCA,EAAQ,YAGhE,IAAM0W,EAAS,EAAH,GAAOrG,EAAU+D,OAAK,GAGlC,OAFAsC,EAAOC,OAAOD,EAAOR,QAAQ3L,GAAO,GAE7B,EAAP,KACO8F,GAAS,CACZkE,UAAU,EACVH,MAAOsC,SA+EbG,EAAqB,SAACtM,EAAiD1H,GAAkB,gBAACrD,GAC5F,OACI,kBAAC,YAAS,CAACsX,YAAavM,EAAKmK,OAAQ7R,MAAOA,IACvC,SAACkU,EAAUC,GAAa,OACrB,kBAAC,IAAQ,GACLC,IAAKF,EAASG,UACVH,EAASI,eACTJ,EAASK,gBAAe,CAC5B7V,OA3QE8V,EA2QkBL,EAASK,WA3QNC,EA2QkBP,EAASI,eAAe5V,MA3QlB,SAE5D+V,GAECD,GAAc,CACdE,WAAY,qBACd,CACF/F,SAAU,SACVE,OAAQ,MAqQYlS,KAEC+K,EAAKgK,UAAahK,EAAK+J,SACvB,oCACG,kBAAC,IAAS,CAAC9S,UAAW2E,EAAQgM,WAC1B,yBAAK3Q,UAAW2E,EAAQuM,qBACpB,kBAAC,IAAiB,CAACqB,SAAS,QAAQvS,UAAc2E,EAAQoM,SAAQ,eAClE,6BAAMhI,EAAKxC,eAGnB,kBAAC,IAAS,CAACvG,UAAW2E,EAAQgM,UAAWqF,MAAM,SAC3C,kBAAC,IAAU,cACI,OACX9V,SAAU/B,EAAM0U,OAAS1U,EAAM2U,QAAU3U,EAAM4U,SAC/CnT,MAAM,UACNqJ,QAASwL,EAAgB1L,IAEzB,kBAAC,IAAI,OAET,kBAAC,IAAU,cACI,SACX7I,SAAU/B,EAAM0U,OAAS1U,EAAM2U,QAAU3U,EAAM4U,SAC/CnT,MAAM,UACNqJ,QAAS6L,EAAkB/L,IAE3B,kBAAC,IAAa,YAM1BA,EAAKgK,WAAY5U,EAAM4U,WACvB,oCACI,kBAAC,IAAS,CAAC/S,UAAW2E,EAAQgM,WAAS,6CAGvC,kBAAC,IAAS,CAAC3Q,UAAW2E,EAAQgM,UAAWqF,MAAM,SAC3C,kBAAC,IAAU,cACI,KAEXpW,MAAM,UACNqJ,QAAS+L,EAAYjM,IAErB,kBAAC,IAAK,OAEV,kBAAC,IAAU,cACI,SAEXnJ,MAAM,UACNqJ,QAAS8L,EAAkBhM,IAE3B,kBAAC,IAAS,YAKtBA,EAAK+J,SAAU3U,EAAM2U,SACrB,oCACI,kBAAC,IAAS,CAAC9S,UAAW2E,EAAQgM,WAC1B,kBAAC,IAAS,CACN0B,YAAY,UACZ9R,aAAcwI,EAAKxC,YACnBpG,SAnGuD,SAACf,GACxFwE,EAAYxE,EAAM2M,OAAOlN,OAmGOmB,UAAW2E,EAAQf,aAG3B,kBAAC,IAAS,CAAC5D,UAAW2E,EAAQgM,UAAWqF,MAAM,SAC3C,kBAAC,IAAU,cACI,KACX9V,SAAU/B,EAAM0U,MAChBjT,MAAM,UACNqJ,QAAS2L,EAAU7L,IAEnB,kBAAC,IAAK,OAEV,kBAAC,IAAU,cACI,SACX7I,SAAU/B,EAAM0U,MAChBjT,MAAM,UACNqJ,QAAS0L,EAAgB5L,IAEzB,kBAAC,IAAS,UA9VzB,IAAC8M,EAAqBC,OA+X3C,OACI,yBAAK9V,UAAW,GAAG2E,EAAQjB,MACvB,kBAAC,IAAK,CAAC1D,UAAW2E,EAAQmL,SACnB7P,GACC,yBAAKD,UAAW2E,EAAQsL,gBACpB,kBAAC,IAAgB,OAGzB,kBAACgC,EAAoB,CACjBzJ,MAAM,0BACN4J,MAAOjU,EAAMyU,MAAM0B,OACnB7B,WA/XG,WACfrU,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZgE,OAAO,QA4XHL,SA5WC,SAACN,GACd9T,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZqD,OAAM,UA0WN,kBAAC,IAAc,KACX,kBAAC,IAAK,KACF,kBAAC,IAAS,KACN,kBAAC,IAAQ,KACL,kBAAC,IAAS,gBACV,kBAAC,IAAS,CAAC8D,MAAM,SAAO,aAGhC,kBAAC,IAAS,CAACtM,WApKHkK,EA5SV,SAACuC,EAAoBZ,GAEnC,GAAKY,EAAOC,YAAZ,CAIA,IAAMxD,EAdM,SAACyD,EAAmDC,EAAoBC,GACpF,IAAMJ,EAASK,MAAMC,KAAKJ,GACnBK,EAAWP,EAAOhB,OAAOmB,EAAY,GAAE,GAG9C,OAFAH,EAAOhB,OAAOoB,EAAU,EAAGG,GAEpBP,EASOQ,CACVxY,EAAMyU,MACNuD,EAAOvX,OAAOyC,MACd8U,EAAOC,YAAY/U,OACrB1C,KAAI,SAACoK,EAAiD1H,GACpD,OAAO,EAAP,KACO0H,GAAI,CACPoK,SAAU9R,OAIlBjD,GAAS,SAACyQ,GA2BN,OAzBA,SACC/J,OAAO,CACJC,SAAU6S,GACV5V,UAAW,CACP6U,gBAAiBjE,EAAMjU,KAAI,SAACoK,GACxB,MAAO,CACHmK,OAAQnK,EAAKmK,OACbC,SAAUpK,EAAKoK,gBAM9BlR,MAAK,SAACC,GACCA,EAAQhE,WACmBmE,IAAvBH,EAAQhE,KAAK4C,OACb,YAAkB,0CAA2CoB,EAAQhE,KAAK4C,MAAO,YAK5FqB,OAAM,SAAC3D,GACJ,YAAiB,0CAA2CA,EAAQ,YAGjE,EAAP,KACOqQ,GAAS,CACZ+D,MAAK,SA8P6F,SAAC5U,GAC3G,OACI,kBAAC,kBAAe,CAAC8Y,UAAWlD,GACxB,kBAAC,YAAS,CAACmD,YAAa,IAAKC,UAAU,aAClC,SAACzB,GACE,OACI,kBAAC,IAAS,GAACE,IAAKF,EAASG,UAAcH,EAAS0B,eAAoBjZ,GAC/DA,EAAMuE,SACNgT,EAASlD,sBA6JXlU,EAAM0U,OACL,kBAAC,IAAQ,KACL,kBAAC,IAAS,CAAC7S,UAAW2E,EAAQgM,WAC1B,kBAAC,IAAS,CACN0B,YAAY,UACZrS,UAAW2E,EAAQf,UACnBzD,SAhLpB,SAACf,GACjBwE,EAAYxE,EAAM2M,OAAOlN,UAkLG,kBAAC,IAAS,CAACmB,UAAW2E,EAAQgM,UAAWqF,MAAM,SAC3C,kBAAC,IAAO,CAACxN,MAAM,QACX,kBAAC,IAAU,cACI,OACXS,QA1O1B,WAEVrF,GAEAxF,GAAS,SAACyQ,GAEN,SACC/J,OAAO,CACJC,SAAU8S,GACV7V,UAAW,CACPuE,YAAa3C,EACbuP,SAAUtE,EAAU+D,MAAM0B,UAIjCrS,MAAK,SAACC,GACCA,EAAQhE,WACmBmE,IAAvBH,EAAQhE,KAAK4C,OACb,YAAkB,kCAAmCoB,EAAQhE,KAAK4C,MAAO,YAKpFqB,OAAM,SAAC3D,GACJ,YAAiB,kCAAmCA,EAAQ,YAGhE,IAAM0W,EAAS,EAAH,GAAOrG,EAAU+D,OAAK,GAUlC,OARAsC,EAAO3F,KAAK,CACR2D,OAAQ,GACR3M,YAAa3C,EACbuP,SAAUtE,EAAU+D,MAAM0B,OAC1BxB,QAAQ,EACRC,UAAU,IAGP,EAAP,KACOlE,GAAS,CACZgE,OAAO,EACPD,MAAOsC,SAoMqB,kBAAC,IAAK,CAAClV,UAAW2E,EAAQ6L,SAGlC,kBAAC,IAAO,CAAChI,MAAM,UACX,kBAAC,IAAU,cACI,SACXS,QAvZtB,WAClB7K,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZgE,OAAO,EACPC,QAAQ,EACRC,UAAU,SAmZsB,kBAAC,IAAS,CAAC/S,UAAW2E,EAAQ6L,WAnEjD,WACrB,IAAI2G,EAAgBhZ,EAAMyU,MAQ1B,OANIzU,EAAM+T,SACNiF,EAAgBhZ,EAAMyU,MAAMwE,QAAO,SAACrO,GAChC,OAAOA,EAAKxC,YAAY8Q,cAAc3C,QAAQvW,EAAM+T,SAAW,MAKnE,IAAEvT,IAAIwY,GAAe,SAACpO,EAAM1H,GACxB,OACI,kBAAC,IAAQ,CACLqI,UAAW2L,EAAmBtM,EAAM1H,GACpCC,IAAKyH,EAAKmK,YA4DFoE,QAwBzB,I,eAAME,GAA2B,IAAG,2aAYrCK,GAA8B,IAAG,uVAMjCH,GAA8B,IAAG,2ZAMjCC,GAA8B,IAAG,iVAMjCC,GAAuC,IAAG,4V,ueCt0BnCE,EAA8D,SAAC9Z,GAGlE,MAAoB,mBAAqC,CAC3DE,KAAM,KADHC,EAAK,KAAEC,EAAQ,KAIhB2Z,EAAqB,YAAiDC,EAAc,CACtFhW,UAAW,CACPiW,oBAAqBja,EAAMia,qBAE/BpW,YAAa,gBAGjB,mBAAQ,YACCkW,EAAmB9X,UAAY8X,EAAmBjX,OAASiX,EAAmB7Z,MAAQ6Z,EAAmB7Z,KAAK8U,QAAU+E,EAAmB7Z,KAAK8U,OAAOkF,SACxJ9Z,GAAS,SAACyQ,GACE,IAEF+D,EAFcmF,EAAmB7Z,KAAM8U,OAAM,QAEFrU,KAAI,SAACwZ,GAClD,OAAO,EAAP,KACOA,GAAK,CACRpZ,MAAOoZ,EAAMD,QACbrZ,MAAOsZ,EAAMD,aAGrB,OAAO,EAAP,KACOrJ,GAAS,CACZ3Q,KAAM0U,SAKnB,CAACmF,EAAmB9X,QAAS8X,EAAmB7Z,KAAM6Z,EAAmBjX,QAG5E,IAAM3B,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAO,EAAP,KACOuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBA2BnC,OAAI1B,EAAM8B,SAEF,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS8X,EAAmB9X,QAC5BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAAoC,OAAAA,EAAOvB,OAE5DyB,OAAQxC,EAAMwC,OACdV,UAAU,EACVsY,WArCS,SAACvZ,EAAkCwZ,GAkBpD,OAjBsBxZ,EAAMF,KAAI,SAAC2B,EAAiCe,GAC9D,IAAItC,EAAQuB,EAAOvB,MAKnB,OAJIuB,EAAOvB,MAAMuV,OAAS,KACtBvV,EAAWuB,EAAOvB,MAAMuZ,UAAU,EAAG,IAAG,OAIxC,kBAAC,IAAI,KACGD,EAAY,CAAEhX,MAAK,IAAG,CAC1BC,IAAKD,EACLtC,MAAOA,EAEPc,KAAK,eAyBTY,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQuY,EAAmB9X,SACrDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAUlC,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS8X,EAAmB9X,QAC5BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAAoC,OAAAA,EAAOvB,OAE5DyB,OAAQxC,EAAMwC,OACdC,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQuY,EAAmB9X,SACrDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,cA6BhCuW,EAAe,IAAG,sjB,ueC5LXO,EAAgE,SAACva,GAGpE,MAAoB,mBAAsC,CAC5DE,KAAM,KADHC,EAAK,KAAEC,EAAQ,KAIhBoa,EAAsB,YAAmDC,EAAqB,CAChGzW,UAAW,CACPiW,oBAAqBja,EAAMia,qBAE/BpW,YAAa,gBAGjB,mBAAQ,YAEC2W,EAAoBvY,UACpBuY,EAAoB1X,OACrB0X,EAAoBta,MACpBsa,EAAoBta,KAAK8U,QACzBwF,EAAoBta,KAAK8U,OAAO0F,gBAEhCta,GAAS,SAACyQ,GACE,IACF+D,EADqB4F,EAAoBta,KAAM8U,OAAM,eACIrU,KAAI,SAACga,GAChE,OAAO,EAAP,KACOA,GAAS,CACZ5Z,MAAO4Z,EAAUpS,YACjB1H,MAAO8Z,EAAUpS,iBAGzB,OAAO,EAAP,KACOsI,GAAS,CACZ3Q,KAAM0U,SAKnB,CAAC4F,EAAoBvY,QAASuY,EAAoBta,KAAMsa,EAAoB1X,QAG/E,IAAM3B,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAO,EAAP,KACOuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBA2BnC,OAAI1B,EAAM8B,SAEF,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAASuY,EAAoBvY,QAC7BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA2C,OAAAA,EAAOvB,OAEnEyB,OAAQxC,EAAMwC,OACdV,UAAU,EACVsY,WArCS,SAACvZ,EAAyCwZ,GAkB3D,OAjBsBxZ,EAAMF,KAAI,SAAC2B,EAAwCe,GACrE,IAAItC,EAAQuB,EAAOvB,MAKnB,OAJIuB,EAAOvB,MAAMuV,OAAS,KACtBvV,EAAWuB,EAAOvB,MAAMuZ,UAAU,EAAG,IAAG,OAIxC,kBAAC,IAAI,KACGD,EAAY,CAAEhX,MAAK,IAAG,CAC1BC,IAAKD,EACLtC,MAAOA,EAEPc,KAAK,eAyBTY,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQgZ,EAAoBvY,SACtDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAWlC,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAASuY,EAAoBvY,QAC7BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA2C,OAAAA,EAAOvB,OAEnEyB,OAAQxC,EAAMwC,OACdC,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQgZ,EAAoBvY,SACtDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,cA2BhCgX,EAAsB,IAAG,4e,ynBC7MzBjV,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFoN,SAAU,SACVvM,QAAS,OACT8J,SAAU,SAEduK,cAAe,CACXhI,WAAY,OACZ1M,QAAS,OACTE,eAAgB,gBAChByU,IAAK,QAETC,cAAe,CACXxU,KAAM,EACNJ,QAAS,OACTC,WAAY,SACZC,eAAgB,UAEpB2U,UAAW,CACPzU,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACVH,IAAK,OACL,uBAAwB,CACpBvU,KAAM,GAEV,mBAAoB,CAChB2U,OAAQ,SAGhBC,SAAU,CACNhV,QAAS,OACTE,eAAgB,gBAChByU,IAAK,OACL1U,WAAY,cAEhBgV,mBAAoB,CAChB5U,QAAS,QAEb6U,cAAe,CACXlV,QAAS,OACT8U,SAAU,SACVH,IAAK,MACLhI,cAAe,QAEnBwI,YAAa,CACTnV,QAAS,OACTC,WAAY,SACZ0U,IAAK,OACLtG,SAAU,QAEd+G,UAAW,CACP/X,WAAY,QAGhBgY,UAAW,GAGXC,cAAe,CACXtV,QAAS,OACT8U,SAAU,SACVH,IAAK,QAETY,YAAa,CACTvV,QAAS,OACT8U,SAAU,WACV7U,WAAY,SACZ0U,IAAK,OACLvU,KAAM,GAEVoV,KAAM,CACFpV,KAAM,EACNC,QAAS,YACTL,QAAS,OACT8U,SAAU,SACVH,IAAK,MACLzU,eAAgB,SAChBD,WAAY,SACZ2M,SAAU,QACV6I,OAAQ,OACRC,UAAW,SACX5J,SAAU,YAEd6J,UAAW,CACPja,MAAO,IAAUmE,cAAcC,SAEnC8V,UAAW,CACPvH,SAAU,QAGdwH,SAAU,CACN5J,IAAK,MACLC,MAAO,MACPJ,SAAU,WACVpQ,MAAO,UAEXoa,QAAS,CACLzH,SAAU,OACVhO,QAAS,OACT0V,WAAY,6CAiBXC,EAA8D,SAAElc,GACzE,IAAM2G,EAAUnB,IAEV2W,EAAU,cAEV,EAA2B,cAAzB3X,EAAO,UAAEU,EAAW,cAEtB,EAAwB,IAAMkX,SAAuB,IAApDC,EAAO,KAAEC,EAAU,KAEpB,EAAkC,IAAMF,UAAS,GAAhDG,EAAY,KAAEC,EAAe,KAE9B,EAAgC,IAAMJ,UAAkB,GAAvDK,EAAW,KAAEC,EAAc,KAE5BC,EAAgB,cAEhBC,EAAgB,YAAmDC,EAAqB,CAC1F7Y,UAAW,CACPY,SAAU5E,EAAM4E,YAIlB,EAAmC,YAAsDkY,GAAxFC,EAAc,KAAEC,EAAc,KAErC,qBAAU,cAGP,CAACxY,IAEJ,qBAAU,W,OACiB,QAAnB,EAAAwY,EAAe9c,YAAI,eAAE+c,OAAOC,eAAeC,OAAOlH,UAClD,YAAiB,KAAM,uBAAwB,QAC/CuG,GAAgB,GAChBF,EAAW,KAEXU,EAAela,QACf,YAAiB,KAAMka,EAAela,MAAMoT,QAAS,SACrDsG,GAAgB,MAGrB,CAACQ,EAAe9c,KAAM8c,EAAe/a,QAAS+a,EAAela,QAG/D,qBAAU,WAEP,IAAMsa,EAAsBC,IAG5B,OAAO,WACHD,EAAoBzH,iBAGzB,IAEH,IAAM0H,EAAsB,WACxB,OACI,SACKxH,UAA0C,CACvChS,YAAa,eACbC,MAAO,IACPE,UAAW,KAEd6R,UAAU,CAEPE,KAAA,SAAK7R,G,MACD,GAAgB,QAAZ,EAAAA,EAAQhE,YAAI,eAAEod,iCAAiCrH,OAC/C,YAAiB,UAAW/R,EAAQhE,KAAKod,iCAAiCpH,QAAS,QACnF0G,EAAcW,QAAQ,CAClB3Y,SAAU5E,EAAM4E,WAIpBM,QACG,CAEH,IAAKhB,EAAQhE,KACT,OAGJ,YAAiB,SAAUgE,EAAQhE,KAAKod,iCAAiCpH,QAAS,WAI1FpT,MAAA,SAAMyT,GAEFC,QAAQ1T,MAAMyT,GACd,YAAiB,KAAMA,EAAK,aAuC1ChM,EAAU,WACR8R,EAAQ/F,OAAS,EACjBoG,GAAe,GAEX1c,EAAMuK,SACNvK,EAAMuK,WAKZiT,EAA2B,CAE7BC,UAAW,EACXC,kBAAmB,EACnBC,gCAAiC,EACjCC,iBAAkB,IAClBC,4BAA4B,EAM5BC,YAAa,IAEbC,yBAAyB,EACzBC,yBAAyB,EAEzBC,SAAU,qBACVC,kBAAkB,GAqBhBC,EAAc,SAAC3c,G,QAEX4c,GAA4B,QAAlB,EAAAxB,EAAc1c,YAAI,eAAE+c,OAAOoB,UAAUnB,iBAAkB,GAEvE1b,EAAO8c,IAAIC,YAA6B,QAAlB,EAAA3B,EAAc1c,YAAI,eAAE+c,OAAOoB,UAAUnB,iBAAkB,IAE7E,IAAMsB,EAAmB,MAASvS,OAAO,WAEnCwS,EAAWL,EAAQM,WAAU,SAAAC,GAE/B,OADqB,IAAOA,EAAI9V,WAAWoD,OAAO,aAC1BuS,MAGV,IAAdC,IACAjd,EAAO8c,IAAIM,mBAAmBH,EAAU,OACxCjd,EAAO8c,IAAIO,eAAeJ,EAAU,WAKtCK,EAAqB,SAACtd,GAExB,IAAMud,EAAsB1C,EAAQqC,WAAU,SAAAvT,GAAU,OAAAA,EAAOtC,YAAcrH,EAAOtB,KAAK2I,aAIrFyT,GAFyB,IAAzByC,EAEW,SAAAC,GAAe,OAAAA,EAAYre,KAAI,SAACwK,EAAQ9H,GAC/C,OAAAA,IAAU0b,EAAsBvd,EAAOtB,KAAOiL,MAIvC,SAAA6T,GAAe,cAAIA,GAAa,GAAF,CAAExd,EAAOtB,OAAI,MAKxD+e,EAAc,WAChB9C,EAAQ5K,KAAK,CACT2N,SAAU,aAAa,gBAAc,gBAAcC,mBAuR3D,OACI,oCACK1C,GACG,kBAAC,IAAS,CACNjS,MAAM,YAEN4U,QAAS,kCACTC,KAAM5C,EACN6C,QA7XO,SAACC,GAChBA,GAASvf,EAAMuK,SACfvK,EAAMuK,UAEVmS,GAAe,IA0XH8C,cAAe,KACfC,WAAY,QAGpB,kBAAC,IAAM,CACHnV,KAAMtK,EAAMsK,OAAQ,EACpBC,QAASA,EACT5D,QAAS,CACLmL,MAAOnL,EAAQjB,MAEnBga,OAAO,SAtSS,W,QACxB,GAAI9C,EAAc3a,SAAW0a,EAAc1a,QACvC,OACI,yBAAKD,UAAW2E,EAAQmU,eACpB,kBAAC,IAAQ,OAMX,OAAyE,QAAlB,EAAA8B,EAAc1c,YAAI,eAAE+c,SAAU,GAAnF,EAAM,SAAE0C,EAAU,aAAEnV,EAAK,QAAEoV,EAAU,aAAEvB,EAAS,YAElD,EAA2B,QAAlB,EAAA1B,EAAczc,YAAI,eAAEO,QAAQgL,eAAeoU,OAEpDxT,EAAcuT,EAAaA,EAAWvT,YAAc,EACpDyT,EAAoBF,EAAaA,EAAWE,kBAAoB,EAChEC,EAAsBH,EAAaA,EAAWG,oBAAsB,EACpE3U,EAAwBwU,EAAaA,EAAWxU,sBAAwB,EACxE,EAAwEiT,GAAa,GAAnF2B,EAAqB,wBAAEC,EAAwB,2BAAEC,EAAgB,mBAEnEC,EAAoB9T,EAAcyT,EAElCM,EAAqBN,EAAoBzT,EAE3CgU,GAAwB,EAExBC,GAAqB,EAUzB,OARIN,IACAK,EAAwBL,EAAwBG,GAGhDF,GAA4BD,IAC5BM,EAAqBN,IAA0BC,GAI/C,oCACI,yBAAKje,UAAW2E,EAAQoU,WACpB,yBAAK/Y,UAAW2E,EAAQuU,UACpB,yBAAKlZ,UAAW2E,EAAQyU,eACpB,kBAAC,IAAU,CACPrZ,MAAO,CAAEwS,SAAU,OAAQhR,WAAY,SAEtCiH,GAEL,yBAAKxI,UAAW2E,EAAQ0U,aACpB,yBAAKrZ,UAAW2E,EAAQ2U,WAAYqE,GACpC,yBAAK3d,UAAW2E,EAAQ4U,WAAY,KAG5C,yBAAKvZ,UAAW2E,EAAQwU,oBACpB,kBAAC,IAAM,CACHzY,QAAQ,OACRd,MAAM,UACNC,KAAK,QACLoJ,QAASgU,EACTsB,UAAW,kBAAC,IAAwB,OAAG,gBAMnD,yBAAKve,UAAW2E,EAAQ6U,eACpB,yBAAKxZ,UAAW2E,EAAQ8U,aACpB,kBAAC,IAAK,CACF+E,UAAW,EACXxe,UAAW2E,EAAQ+U,MAElB0E,EACG,kBAAC,IAAY,CACTzZ,QAAS,CACLqV,QAASrV,EAAQqV,SAErBxR,MAAM,uCAEN,kBAAC,IAAQ,CACLxI,UAAW2E,EAAQoV,YAG3B,KACJ,kBAAC,IAAU,CAAC/Z,UAAW2E,EAAQkV,WAAS,kBACxC,kBAAC,IAAU,CACP7Z,UAAW2E,EAAQmV,UACnB/Z,MAAO,CACHH,MAAOwe,EAAqB,MAAQ,YAGvC,GAAG,EAAS,YAAa/T,EAAa,KAG/C,kBAAC,IAAK,CACFmU,UAAW,EACXxe,UAAW2E,EAAQ+U,MAEnB,kBAAC,IAAU,CAAC1Z,UAAW2E,EAAQkV,WAAS,sBACxC,kBAAC,IAAU,CAAC7Z,UAAW2E,EAAQmV,WAAY,GAAG,EAAS,YAAagE,EAAmB,KAE3F,kBAAC,IAAK,CACFU,UAAW,EACXxe,UAAW2E,EAAQ+U,MAElB2E,EACG,kBAAC,IAAY,CACT1Z,QAAS,CACLqV,QAASrV,EAAQqV,SAErBxR,MAAM,6DAEN,kBAAC,IAAQ,CACLxI,UAAW2E,EAAQoV,YAG3B,KACJ,kBAAC,IAAU,CAAC/Z,UAAW2E,EAAQkV,WAAS,sBACxC,kBAAC,IAAU,CACP7Z,UAAW2E,EAAQmV,UACnB/Z,MAAO,CACHH,MAAOye,EAAwB,MAAQ,YAG1C,GAAG,EAAS,YAAaF,GAAqB,EAAIA,EAAoB,EAAG,KAGlF,kBAAC,IAAK,CACFK,UAAW,EACXxe,UAAW2E,EAAQ+U,MAEnB,kBAAC,IAAU,CAAC1Z,UAAW2E,EAAQkV,WAAS,8BACxC,kBAAC,IAAU,CAAC7Z,UAAW2E,EAAQmV,WAAY,GAAG,EAAS,YAAakE,GAAyB,EAAG,MAGxG,yBAAKhe,UAAW2E,EAAQ8U,aACpB,kBAAC,IAAK,CACF+E,UAAW,EACXxe,UAAW2E,EAAQ+U,MAEnB,kBAAC,IAAU,CAAC1Z,UAAW2E,EAAQkV,WAAS,wBACxC,kBAAC,IAAU,CAAC7Z,UAAW2E,EAAQmV,WAAY,GAAG,EAAS,YAAaiE,EAAqB,KAE7F,kBAAC,IAAK,CACFS,UAAW,EACXxe,UAAW2E,EAAQ+U,MAEnB,kBAAC,IAAU,CAAC1Z,UAAW2E,EAAQkV,WAAS,0BACxC,kBAAC,IAAU,CAAC7Z,UAAW2E,EAAQmV,WAAY,GAAG,EAAS,YAAa1Q,EAAuB,KAE/F,kBAAC,IAAK,CACFoV,UAAW,EACXxe,UAAW2E,EAAQ+U,MAEnB,kBAAC,IAAU,CAAC1Z,UAAW2E,EAAQkV,WAAS,wBACxC,kBAAC,IAAU,CAAC7Z,UAAW2E,EAAQmV,WAAY,GAAG,YAAaoE,GAAoB,EAAG,KAEtF,kBAAC,IAAK,CACFM,UAAW,EACXxe,UAAW2E,EAAQ+U,MAElB4E,EACG,kBAAC,IAAY,CACT3Z,QAAS,CACLqV,QAASrV,EAAQqV,SAErBxR,MAAM,kFAEN,kBAAC,IAAQ,CACLxI,UAAW2E,EAAQoV,YAG3B,KACJ,kBAAC,IAAU,CAAC/Z,UAAW2E,EAAQkV,WAAS,+BACxC,kBAAC,IAAU,CACP7Z,UAAW2E,EAAQmV,UACnB/Z,MAAO,CACHH,MAAO0e,EAAqB,MAAQ,YAGvC,GAAG,EAAS,YAAaL,GAA4B,EAAG,OAKzE,yBAAKje,UAAU,qBACX,kBAAC,cAAW,CACRye,QAAS,IACTjD,YAAaA,EACbW,YAAaA,EAEbW,mBAAoBA,EACpB4B,WAAY,CACR,CACIC,WAAY,QACZC,MAAO,YACPC,eAAgB,SAAArf,GACZ,IAAMsf,EAAO,IAAIC,KAAKvf,EAAOX,OAC7B,OAAUigB,EAAKE,eAAe,UAAW,CAAEC,MAAO,SAAS,IAAIH,EAAKI,gBAG5E,CACIP,WAAY,QACZC,MAAO,QACPO,UAAU,EACV/H,OAAQ,uBACRgI,YAAa,SAAA5f,GACT,IAAM6f,EAAWC,OAAO9f,EAAO6f,UAC/B,OAAIE,MAAMF,GACC7f,EAAOggB,SACPhgB,EAAO6f,UAAY,IACnB,IAEA7f,EAAO6f,UAGtBR,eAAgB,SAAArf,GACZ,OAAI+f,MAAM/f,EAAOX,QAA2B,IAAjBW,EAAOX,MACvB,GAEA,GAAG,YAAaygB,OAAO9f,EAAOX,OAAQ,KAIzD,CACI8f,WAAY,cACZC,MAAO,aACPO,UAAU,EACV/H,OAAQ,uBACRgI,YAAa,SAAA5f,GACT,IAAM6f,EAAWC,OAAO9f,EAAO6f,UAC/B,OAAIE,MAAMF,GACC7f,EAAOggB,SACPhgB,EAAO6f,SAAS/K,OAAS,EACzB,aAEA9U,EAAO6f,UAGtBR,eAAgB,SAAArf,GACZ,OAAI+f,MAAM/f,EAAOX,QAA2B,IAAjBW,EAAOX,MACvB,GAEA,IAAS,OAAN,QAAM,IAAN,IAAU,KAAM,YAAaygB,OAAO9f,EAAOX,UAIjE,CACI8f,WAAY,iBACZC,MAAO,gBACPO,UAAU,EACV/H,OAAQ,uBACRgI,YAAa,SAAA5f,GACT,IAAM6f,EAAWC,OAAO9f,EAAO6f,UAC/B,OAAIE,MAAMF,GACC7f,EAAOggB,SACPhgB,EAAO6f,SAAS/K,OAAS,EACzB,aAEA9U,EAAO6f,UAGtBR,eAAgB,SAAArf,GACZ,OAAI+f,MAAM/f,EAAOX,QAA2B,IAAjBW,EAAOX,MACvB,GAEA,IAAS,OAAN,QAAM,IAAN,IAAU,KAAM,YAAaygB,OAAO9f,EAAOX,gBAiCpF4gB,GACD,yBAAKzf,UAAW2E,EAAQiU,eACpB,kBAAC,IAAM,CACH3P,QAvaL,WAEXuR,GAAgB,GAEhB,IAAMkF,EAA2CrF,EAAQ1b,KAAI,SAAAwK,GACzD,MAAO,CACHwW,KAAMxW,EAAOwW,KACb9Y,UAAWsC,EAAOtC,UAClB+Y,WAAYzW,EAAOyW,WACnBC,WAAY1W,EAAO0W,WACnBC,cAAe3W,EAAO2W,cACtBC,MAAO5W,EAAO4W,UAKtBhF,EAAe,CACX/Y,UAAW,CACPuI,MAAO,CACHzH,WAAY9E,EAAM8E,WAClBkd,gBAAiBN,OAoZbhf,QAAQ,YACRR,SAAUqa,GAAmC,IAAnBF,EAAQ/F,QAAY,QAIlD,kBAAC,IAAM,CACHrL,QAASV,EACT7H,QAAQ,aAAW,aA6DrCma,EAAsB,IAAG,+pEA6EzBC,EAAyB,IAAG,siB,mMCryBrBmF,EAAqB,SAACpe,GACzB,MAA2B,YAA6Bqe,EAAqB,CAC/Ere,YAAaA,IAGjB,MAAO,CACH3D,KALQ,OAMR4C,MANe,QAOfb,QAPwB,YAyBnBigB,EAAsB,IAAG,gZ,8vBCnBtC,IAAQC,SAAS,IAAe,IAAa,IAAY,IAAO,IAAS,IAAQ,KAEjF,I,EAAMC,EAAa,IAAUC,KAAwB,SAACriB,GAAU,OAC5DgS,SAAU,WACVa,cAAe,OACfvM,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACVlI,SAAU,OACVwP,UAAW,OACX3G,OAAQ,OACRC,UAAW,aAGT2G,EAAe,IAAUF,KAAwB,SAACriB,G,QAAU,UAC9DuG,QAAS,qBAETic,UAAW,QACXlc,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACV5U,eAAgB,SAChBD,WAAY,SACZmc,UAAW,QACXxP,SAAU,OACVd,SAAU,aACT,qBAAsB,GACnB4J,UAAW,SACX1V,QAAS,eACTP,MAAO,OACPY,QAAS,SACR,YAAkB,CACfgO,SAAU,OACVhR,WAAY,IACZ2C,QAAS,QACT6L,aAAc,QAElB,EAAC,YAAkB,CACfwC,SAAU,OACVhR,WAAY,IACZ2C,QAAS,QACT6L,aAAc,QAElB,EAAC,sBAA4B,CACzBwC,SAAU,OACVhR,WAAY,IACZ2C,QAAS,QACT6L,aAAc,Q,QAKpB0Q,EAAc,IAAUJ,KAAwB,SAACriB,GAAU,OAC7DuG,QAAS,OACTL,QAAS,OACTE,eAAgB,SAChBD,WAAY,SACZwV,OAAQ,W,EAeZ,YAII,WAAY3b,EAAmBG,GAA/B,MACI,YAAMH,EAAOG,IAAM,K,OA0Jf,EAAAuiB,MAAQ,SAACpd,GACb,EAAKqd,SAASC,QAAQniB,QAAQoiB,OAAOC,EAAEC,IAAM,EAC7C,EAAKJ,SAASC,QAAQzF,UA3JtB,EAAK6F,aAAe,EAAKA,aAAaC,KAAK,GAC3C,EAAKP,MAAQ,EAAKA,MAAMO,KAAK,GAE7B,EAAKN,SAAW,c,EA0JxB,OAnKiD,OAYtC,YAAAO,kBAAP,aAIO,YAAAC,qBAAP,aAIO,YAAAjZ,OAAP,sBACI,OACI,gBAAC,WAAc,KACX,gBAACkY,EAAU,KACP,gBAACG,EAAY,KAET,gBAAC,IAAK,CAAMze,MAAOsf,IACd,SAAC,G,IAEEnhB,EAAO,UACPa,EAAK,QACL5C,EAAI,OAEJ,GAAI+B,EACA,OACI,gBAACwgB,EAAW,CAACzgB,UAAU,gBACnB,gBAAC,IAAQ,CAACH,KAAK,WAK3B,IAAM4J,EAAiBxJ,GAAWa,EAAQ,KAAO5C,EAAKO,QAAQgL,eAExDoU,EAASpU,EAAiBA,EAAeoU,OAAS,KACxD,OACI,gBAAC,IAAG,CACApI,IAAK,EAAKkL,SAEV1X,QAAS,SAAC7J,GAEN,GADc,YAAkB,EAAKuhB,SAASC,QAASxhB,GAC7CkV,OAAS,GAAK,EAAKtW,MAAMqjB,gBAAiB,CAChD,IAAMC,EAAS,YAAkB,EAAKX,SAASC,QAASxhB,GAAO,GAAGiC,MAE5D0H,EAAO,EAAK/K,MAAMujB,OAAOD,GAE/B,GAAI,EAAKtjB,MAAMqjB,gBACX,OAAO,EAAKrjB,MAAMqjB,gBAAgBtY,KAI9C7K,KAAM,CACFqjB,OAAQ,YAAU,EAAKvjB,MAAMujB,QAC7BC,SAAU,CACN,CACIziB,MAAO,aACPwR,gBAAiB,CAAC,UAAW,UAAW,UAAW,WACnDkR,YAAa,CAAC,UAAW,UAAW,UAAW,WAC/CC,YAAa,EACbC,qBAAsB,CAAC,UAAW,UAAW,UAAW,WACxDC,iBAAkB,CAAC,UAAW,UAAW,UAAW,WACpD1jB,KAAM,EAAKF,MAAME,QAI7BO,QAAS,CACLojB,UAAW,IACXC,SAAU,CACNC,IAAK,CACDL,YAAa,IAGrBM,YAAY,EACZC,qBAAqB,EACrBpB,OAAQ,CACJC,EAAG,CAECoB,aAAc,YAAoB,EAAKlkB,MAAME,MAC7CikB,aAAa,EACbC,MAAO,CACHC,cAAe,YAAgB,EAAKrkB,MAAME,MAC1CokB,SAAU,SAAuBC,EAAmBlhB,EAAe+gB,GAC/D,MAAO,GAAGvE,EAAS,YAAa0E,OAShDC,QAAS,CACLC,OAAQ,CACJzS,SAAU,SACV9L,SAAS,GAEbsE,MAAO,CACHtE,SAAS,EACTzC,KAAMihB,EAAA,EAAkBC,YAE5BC,KAAM,CACFC,IAAK,CACDC,SAAS,EACTpC,MAAO,EAAKA,OAEhBkC,KAAM,CACFG,MAAO,CACHD,SAAS,KAOrB9I,QAAS,CACLgJ,UAAW,CAEPjkB,MAAO,SAAUuE,GAIT,IAAA2f,EAEA3f,EAAO,eAEP4f,EAAe,YAA4BD,GAE/C,MAAO,GAAGpF,EAAS,YAAaqF,iBAgBhF,YAAAlC,aAAR,SAAqBniB,GACjB,OAAOA,EACFskB,QAAQ,GACRvT,WACAwT,QAAQ,wBAAyB,MAO9C,EAnKA,CAAiD,aAqK3ChC,EAAiB,IAAG,qS,2jBC9O1B,IAAQjB,SAAS,IAAe,IAAa,IAAY,IAAO,IAAS,IAAQ,KAEjF,I,EAAM,EAAa,IAAUE,KAAwB,SAACriB,GAAU,OAC5DgS,SAAU,WACVa,cAAe,OACfvM,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACVlI,SAAU,OACVwP,UAAW,OACX3G,OAAQ,OACRC,UAAW,aAGT,EAAe,IAAUyG,KAAwB,SAACriB,G,QAAU,UAC9DuG,QAAS,qBAETic,UAAW,QACXlc,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACV5U,eAAgB,SAChBD,WAAY,SACZmc,UAAW,QACXxP,SAAU,OACVd,SAAU,aACT,qBAAsB,GACnB4J,UAAW,SACX1V,QAAS,eACTP,MAAO,OACPY,QAAS,SACR,YAAkB,CACfgO,SAAU,OACVhR,WAAY,IACZ2C,QAAS,QACT6L,aAAc,QAElB,EAAC,YAAkB,CACfwC,SAAU,OACVhR,WAAY,IACZ2C,QAAS,QACT6L,aAAc,QAElB,EAAC,sBAA4B,CACzBwC,SAAU,OACVhR,WAAY,IACZ2C,QAAS,QACT6L,aAAc,Q,QAKpB,EAAc,IAAUsQ,KAAwB,SAACriB,GAAU,OAC7DuG,QAAS,OACTL,QAAS,OACTE,eAAgB,SAChBD,WAAY,SACZwV,OAAQ,W,EAeZ,YAII,WAAY3b,EAAmBG,GAA/B,MACI,YAAMH,EAAOG,IAAM,K,OAkJf,EAAAuiB,MAAQ,SAACpd,GACb,EAAKqd,SAASC,QAAQniB,QAAQoiB,OAAOC,EAAEC,IAAM,EAC7C,EAAKJ,SAASC,QAAQzF,UAnJtB,EAAKuF,MAAQ,EAAKA,MAAMO,KAAK,GAE7B,EAAKN,SAAW,c,EAmJxB,OA3JuD,OAW5C,YAAAO,kBAAP,aAIO,YAAAC,qBAAP,aAIO,YAAAjZ,OAAP,sBACI,OACI,gBAAC,WAAc,KACX,gBAAC,EAAU,KACP,gBAAC,EAAY,KAET,gBAAC,IAAK,CAAMpG,MAAO,IACd,SAAC,G,IAEE7B,EAAO,UACPa,EAAK,QACL5C,EAAI,OAEJ,GAAI+B,EACA,OACI,gBAAC,EAAW,CAACD,UAAU,gBACnB,gBAAC,IAAQ,CAACH,KAAK,WAK3B,IAAM4J,EAAiBxJ,GAAWa,EAAQ,KAAO5C,EAAKO,QAAQgL,eAExDoU,EAASpU,EAAiBA,EAAeoU,OAAS,KACxD,OACI,gBAAC,IAAG,CACApI,IAAK,EAAKkL,SAEV1X,QAAS,SAAC7J,GAEN,GADc,YAAkB,EAAKuhB,SAASC,QAASxhB,GAC7CkV,OAAS,GAAK,EAAKtW,MAAMqjB,gBAAiB,CAChD,IAAMC,EAAS,YAAkB,EAAKX,SAASC,QAASxhB,GAAO,GAAGiC,MAE5D0H,EAAO,EAAK/K,MAAMujB,OAAOD,GAE/B,GAAI,EAAKtjB,MAAMqjB,iBAA4B,OAATtY,EAC9B,OAAO,EAAK/K,MAAMqjB,gBAAgBtY,KAI9C7K,KAAM,CACFqjB,OAAQ,YAAU,EAAKvjB,MAAMujB,QAC7BC,SAAU,CACN,CACIziB,MAAO,OACPwR,gBAAiB,CAAC,UAAW,WAC7BkR,YAAa,CAAC,UAAW,WACzBC,YAAa,EACbC,qBAAsB,CAAC,UAAW,WAClCC,iBAAkB,CAAC,UAAW,WAC9B1jB,KAAM,EAAKF,MAAME,QAI7BO,QAAS,CACLojB,UAAW,IACXC,SAAU,CACNC,IAAK,CACDL,YAAa,IAGrBM,YAAY,EACZC,qBAAqB,EACrBpB,OAAQ,CACJC,EAAG,CAECoB,aAAc,YAAoB,EAAKlkB,MAAME,MAC7CikB,aAAa,EACbC,MAAO,CACHC,cAAe,YAAgB,EAAKrkB,MAAME,MAC1CokB,SAAU,SAAuBC,EAAmBlhB,EAAe+gB,GAC/D,MAAO,GAAGvE,EAAS,YAAa0E,OAShDC,QAAS,CACLC,OAAQ,CACJzS,SAAU,SACV9L,SAAS,GAEbsE,MAAO,CACHtE,SAAS,EACTzC,KAAM,2BAEVmhB,KAAM,CACFC,IAAK,CACDC,SAAS,EACTpC,MAAO,EAAKA,OAEhBkC,KAAM,CACFG,MAAO,CACHD,SAAS,KAOrB9I,QAAS,CACLgJ,UAAW,CAEPjkB,MAAO,SAAUuE,GAIT,IAAA2f,EAEA3f,EAAO,eAEP4f,EAAe,YAA4BD,GAE/C,MAAO,GAAGpF,EAAS,YAAaqF,iBAoB5F,EA3JA,CAAuD,aA6JjD,EAAiB,IAAG,qS,wqBCpNpBG,EAAmB,IAAUhD,KAAqB,SAACriB,G,YAAU,UAC/DuG,QAAS,qBACR,kBAAmB,GAEhBqV,UAAW,QACX1V,QAAS,kBACTE,eAAgB,WAChBxE,MAAO5B,EAAMyF,MAAMgN,YAAY6S,YAC/BC,QAASvlB,EAAMyF,MAAM+f,QAAQC,KAC7BxJ,WAAYjc,EAAMyF,MAAMigB,KAAKC,KAC7BpR,SAAUvU,EAAMyF,MAAMmgB,SAASC,GAAGC,MAClCviB,WAAYvD,EAAMyF,MAAMsgB,WAAWC,YACnCC,cAAe,MACf1V,WAAYvQ,EAAMyF,MAAMygB,WAAWC,QAClC,cAAoB,CACjB7S,aAAc,Q,GAGtB,EAAC,qBAA2B,CACxBA,aAAc,QAElB,EAAC,aAAc,MACV,aAAc,GACXqI,OAAQ,OACRzV,QAAS,eACTP,MAAO,OACP,mBAAoB,CAChB4M,gBAAiBvS,EAAMyF,MAAM2gB,cAAcC,cAE9C,WAAiB,CACdlgB,WAAY,U,MAIxB,EAAC,YAAkB,CACfvE,MAAO5B,EAAMyF,MAAMgN,YAAY6S,YAC/B/Q,SAAUvU,EAAMyF,MAAMmgB,SAASC,GAAGS,MAAQ,cAC1C/V,WAAYvQ,EAAMyF,MAAMygB,WAAWK,UAEvC,EAAC,cAAoB,CACjBhjB,WAAYvD,EAAMyF,MAAMsgB,WAAWC,YACnCC,cAAe,MACf1V,WAAYvQ,EAAMyF,MAAMygB,WAAWC,MACnCvkB,MAAO5B,EAAMyF,MAAMgN,YAAY6S,a,KAoBjCkB,EAAO,IAAUnE,KAAqB,SAACriB,G,MAAU,UACnDkG,QAAS,OACT8U,SAAU,cACVwH,UAAW,OACXzK,WAAY,OACZpS,MAAO,OACP8gB,UAAW,kCACXC,aAAc,MACd3U,aAAc,OACdxL,QAAS,YACT0V,WAAY,WACX,YAAkB,CACf1Y,WAAY,MACZwO,aAAc,OACdnQ,MAAO5B,EAAMyF,MAAMgN,YAAYC,iBAGnC,EAAC,YAAkB,CACfkJ,UAAW,SACXrY,WAAY,MACZgR,SAAU,QAEd,EAAC,mBAAyB,CACtBqH,UAAW,SACXrY,WAAY,MACZgR,SAAU,U,KAKZoS,EAA2B,IAAUtE,KAAqB,SAACriB,GAAU,OACvEuU,SAAU,OACVhR,WAAY,IACZqY,UAAW,aAkEf,cACI,WAAY5b,GAAZ,MACI,YAAMA,IAAM,K,OAEZ,EAAK4mB,kBAAoB,EAAKA,kBAAkB3D,KAAK,GACrD,EAAK4D,iCAAmC,EAAKA,iCAAiC5D,KAAK,G,EAsmB3F,OA3mBqC,OAQjC,YAAA/Y,OAAA,WAMI,GAFAsM,QAAQsQ,IAAI,SAAUC,KAAK/mB,MAAMyL,gBAE7Bsb,KAAK/mB,MAAME,KAAK+B,QAChB,OAAO,gBAAC,IAAQ,CAACJ,KAAK,UAG1B,IAAI+d,EAAamH,KAAK/mB,MAAME,KAAK+c,OAAO2C,WACxC,IAAKA,EACD,OAAO,gBAACoH,EAAA,EAAY,MAGxB,IAAIC,EAAwBF,KAAK/mB,MAAMyL,eACnCyb,GAA4B,EAC5BC,GAAwB,EACxBC,GAAiB,EACjBC,GAA0B,EAC1BC,GAA0B,EAC1BC,GAA4B,EAE5BC,EAAkCT,KAAKH,kBAAkBG,KAAK/mB,MAAMyL,gBACpEgc,EAA2BV,KAAKH,kBAAkBG,KAAK/mB,MAAMyL,gBAC7Dic,EAAoCX,KAAKH,kBAAkBG,KAAK/mB,MAAMyL,gBACtEkc,EAAoCZ,KAAKH,kBAAkBG,KAAK/mB,MAAMyL,gBAEtEmc,EAAsCb,KAAKH,kBAAkBG,KAAK/mB,MAAMyL,gBAE5E,GAAoD,cAAhDsb,KAAK/mB,MAAM6nB,aAAaC,oBAAqC,CAG7D,GAAIlI,GAAcA,EAAWmI,gBAAiB,CAE1C,IAAIC,EAASC,EAAA,EAAeC,MAAK,SAACC,GAAiB,OAAAA,EAAajc,SAASmN,cAAclD,SAASyJ,EAAYmI,gBAAgB1O,kBAExH2O,IACAf,EAAwBe,EAAO9b,UAGnCgb,GAA4B,GAGE,IAA9BH,KAAK/mB,MAAMooB,gBAGPlB,IACAC,GAAwB,EACxBC,GAAiB,EACjBC,GAA0B,EAC1BC,GAA0B,EAC1BC,GAA4B,GAKxC,IAAIc,EAAiDzI,EAAW0I,2BAAwBjkB,EAAY,UAMhGkkB,GAJoB3I,EAAWE,kBAAoBF,EAAWE,kBAAoB,IAC5DF,EAAWG,oBAAsBH,EAAWG,oBAAsB,IACxEH,EAAW4I,eAAiB5I,EAAW4I,eAAiB,GAE4B,WAAQnkB,EAGxGokB,EAAM1B,KAAK/mB,MAElB,EAED,OACI,gBAACqlB,EAAgB,CAACrjB,UAAU,cACxB,gBAAC0mB,EAAA,EAAI,CAACC,UAAU,GACZ,gBAACD,EAAA,EAAKE,IAAG,CAACC,QAAS,EAAGC,GAAI,IACtB,gBAACJ,EAAA,EAAKK,OAAM,CAACC,SAAU,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,YAAa,EAAGC,WAAY,EAAGC,cAAc,SAASV,UAAU,GAC/G,gBAACD,EAAA,EAAI,KACD,gBAACA,EAAA,EAAKE,IAAG,CAACC,QAAS,GACf,gBAACH,EAAA,EAAKK,OAAM,CAACC,SAAU,EAAGC,OAAQ,GAAIC,OAAQ,GAAIC,YAAa,EAAGC,WAAY,GAC1E,gBAAC5C,EAAI,KACD,uBAAKxkB,UAAU,SAAS0iB,EAAA,EAAkB4E,gBAC1C,uBAAKtnB,UAAU,QAAQD,MAAO,CAAEH,MAAO2mB,IACnC,gBAACgB,EAAA,E,CAEG1oB,MAAO+e,EAAW4I,eAAiB5I,EAAW4I,eAlFxE,MAmF0Bzc,aAAcyd,EAAA,EAAqBC,QACnCxd,OAAQ8a,KAAK/mB,MAAMyL,mBAK/B,gBAAC+a,EAAI,KACD,uBAAKxkB,UAAU,SAAS0iB,EAAA,EAAkBgF,OAAS,IAAMhF,EAAA,EAAkBiF,mBAC3E,uBAAK3nB,UAAU,SACX,gBAAC2kB,EAAwB,KACpBI,KAAKF,iCAAiC,CACnC+C,kBAAmBzC,EACnB0C,cAAerC,EACfsC,WAAYlK,EAAWE,kBACvBiK,oBAAqB7C,EACrBa,gBAAiBd,EACjB+C,aAAcpK,EAAWqK,sCA4BzC,gBAACzD,EAAI,KACD,uBAAKxkB,UAAU,SAAS0iB,EAAA,EAAkBC,YAC1C,uBAAK3iB,UAAU,SACX,gBAAC2kB,EAAwB,KACpBI,KAAKF,iCAAiC,CACnC+C,kBAAmBxC,EACnByC,cAAepC,EACfqC,WAAYlK,EAAWsK,WACvBH,oBAAqB7C,EACrBa,gBAAiBd,EACjB+C,aAAcpK,EAAWuK,+BA6BxCC,EAAA,EAAYve,UAAUue,EAAA,EAAgBC,0BACnC,gBAAC7D,EAAI,KACD,uBAAKxkB,UAAU,SAGP0iB,EAAA,EAAkB4F,SAAW,IAAM5F,EAAA,EAAkB6F,qBAG7D,uBAAKvoB,UAAU,SACX,gBAAC2kB,EAAwB,KACpBI,KAAKF,iCAAiC,CACnC+C,kBAAmBvC,EACnBwC,cAAenC,EACfoC,WAAYlK,EAAWG,oBACvBgK,oBAAqB7C,EACrBa,gBAAiBd,EACjB+C,aAAcpK,EAAW4K,wCA6B3CtD,EAKE,KAJA,gBAACV,EAAI,KACD,uBAAKxkB,UAAU,SAAS0iB,EAAA,EAAkB+F,eAC1C,uBAAKzoB,UAAU,gBAAgB4d,EAAW8K,gBAIjD9K,EAAW+K,yBACR,gBAACnE,EAAI,KACD,uBAAKxkB,UAAU,SACVymB,EAAE,SAAiD,OAAzC1B,KAAK/mB,MAAM4qB,YAAYvR,cAAyB,QAAU,kBAAgB,sBAEzF,uBAAKrX,UAAU,SACX,gBAAC6oB,EAAA,EAAiB,CAAChqB,MAAO+e,EAAW+K,yBAA0B5e,aAAc,IAAqB+e,cAG1G,MAER,gBAACpC,EAAA,EAAKK,OAAM,CAACC,SAAU,EAAGC,OAAQ,GAAIC,OAAQ,GAAIC,YAAa,EAAGC,WAAY,GAC1E,gBAAC5C,EAAI,KACD,uBAAKxkB,UAAU,SAAS0iB,EAAA,EAAkBqG,uBAC1C,uBAAK/oB,UAAU,eAAeD,MAAO,CAAEH,MAAOymB,IAGtCzI,EAAW0I,sBAAwB,IAAO1I,EAAW0I,uBAAuBrc,OAAO,cAAgB,OAI/G,gBAACua,EAAI,KACD,uBAAKxkB,UAAU,SAAS0iB,EAAA,EAAkBgF,OAAS,IAAMhF,EAAA,EAAkBsG,eAC3E,uBAAKhpB,UAAU,SACX,gBAAC2kB,EAAwB,KACpBI,KAAKF,iCAAiC,CACnC+C,kBAAmBtC,EACnBuC,cAAelC,EACfmC,WAAYlK,EAAWqL,oBACvBlB,oBAAqB7C,EACrBa,gBAAiBd,EACjB+C,aAAcpK,EAAWsL,wCAgCzC,gBAAC1E,EAAI,KACD,uBAAKxkB,UAAU,SAASymB,EAAE,kBAC1B,uBAAKzmB,UAAU,SACX,gBAACunB,EAAA,E,CAEG1oB,MAAO+e,EAAWuL,oBAAsBvL,EAAWuL,oBA9R7E,MA+R0Bpf,aAAcyd,EAAA,EAAqBC,QACnCxd,OAAQ8a,KAAK/mB,MAAMyL,mBAI9B2e,EAAA,EAAYve,UAAUue,EAAA,EAAgBC,0BACnC,gBAAC7D,EAAI,KACD,uBAAKxkB,UAAU,SAAS0iB,EAAA,EAAkB4F,SAAW,IAAM5F,EAAA,EAAkBsG,eAC7E,uBAAKhpB,UAAU,SACX,gBAAC2kB,EAAwB,KACpBI,KAAKF,iCAAiC,CACnC+C,kBAAmBrC,EACnBsC,cAAejC,EACfkC,WAAYlK,EAAWxU,sBACvB2e,oBAAqB7C,EACrBa,gBAAiBd,EACjB+C,aAAcpK,EAAWwL,0CAgC3ClE,EAWE,GAVA,gBAACV,EAAI,KACD,uBAAKxkB,UAAU,SAAS0iB,EAAA,EAAkB2G,6BAC1C,uBAAKrpB,UAAU,SACX,gBAACunB,EAAA,EAAiB,CACd1oB,MAAO+e,EAAW0L,4BAClBvf,aAAcyd,EAAA,EAAqBC,QACnCxd,OAAQ8a,KAAK/mB,MAAMyL,mBAQlCmU,EAAW2L,yBACR,gBAAC/E,EAAI,KACD,uBAAKxkB,UAAU,SAAS,SAAiD,OAAzC+kB,KAAK/mB,MAAM4qB,YAAYvR,cAAyB,QAAU,kBAAgB,qBAC1G,uBAAKrX,UAAU,gBAAgB4d,EAAW2L,2BAE9C,SAKpB,gBAAC7C,EAAA,EAAKK,OAAM,CAACC,SAAU,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,YAAa,EAAGC,WAAY,EAAGC,cAAc,SAASV,UAAU,GAC/G,gBAACD,EAAA,EAAI,KACD,gBAACA,EAAA,EAAKE,IAAG,KACL,gBAACF,EAAA,EAAKK,OAAM,KACR,gBAAC,EAAyB,CACtBxF,OAAQ,CAAC,iBAAkB,sBAC3BrjB,KAAM,CAEF0f,EAAW4I,eAAiB5I,EAAW4I,eAhX7D,MAkXsB5I,EAAWE,kBAAoBF,EAAWE,kBAlXhE,WAgbM,gBAAC4I,EAAA,EAAKE,IAAG,KACL,gBAACF,EAAA,EAAKK,OAAM,KACR,gBAAC,EAAmB,CAChBxF,OAAQ,CAAC,UAAW,UAAW,UAAW,YAC1CrjB,KAAM,CACF0f,EAAW4L,kBAAoB5L,EAAW4L,kBAAoB,EAC9D5L,EAAW6L,iBAAmB7L,EAAW6L,iBAAmB,EAC5D7L,EAAW8L,iBAAmB9L,EAAW8L,iBAAmB,EAC5D9L,EAAW+L,iBAAmB/L,EAAW+L,iBAAmB,aAkIhG,YAAA/E,kBAAR,SAA0B1a,G,MACtB,OAAkH,QAA3G,EAAA+b,EAAA,EAAeC,MAAK,SAACC,GAAiB,OAAAA,EAAajc,SAASmN,cAAclD,SAASjK,EAASmN,yBAAe,eAAEwG,QAGhH,YAAAgH,iCAAR,SAAyCta,GAQ7B,IAAAwb,EAAqGxb,EAAK,gBAAzFyd,EAAoFzd,EAAK,aAA3Esd,EAAsEtd,EAAK,cAA5Dud,EAAuDvd,EAAK,WAAhDwd,EAA2Cxd,EAAK,oBAA3Bqd,EAAsBrd,EAAK,kBAElH,OAAIqd,GAAqBE,EAAa,GAAKC,GAAuBC,EAAe,EACtE,GAAGH,EAAgB,YAAaC,GAAW,IAAI/B,EAAkB,YAAaiC,GAGpFJ,GAAqBE,EAAa,GAAKC,GAAwC,IAAjBC,GAAwBJ,GAAqBE,EAAa,IAAMC,EACxH,GAAGF,EAAgB,YAAaC,IAGrCF,GAAoC,IAAfE,GAAoBC,GAAuBC,EAAe,IAAQJ,GAAqBG,GAAuBC,EAAe,EAC7I,GAAGjC,EAAkB,YAAaiC,GAGxCJ,GAAoC,IAAfE,GAAqBC,GAAwC,IAAjBC,GAIhEJ,GAAqBE,EAAa,GAAKC,GAAwC,IAAjBC,EACzD,GAAGH,EAAgB,YAAaC,IAGrCF,GAAqBG,GAAwC,IAAjBC,GAAwBJ,GAAqBG,GAAsC,IAAfD,GAAqC,IAAjBE,EAC5HH,EAAa,IAGpB,GAXI,GAAGA,EAAgB,YAAaC,IAanD,EA3mBA,CAAqC,aA6mBxB8B,EAAqB,IAAG,+iEAqCxBC,EAAiB,cAAkB,YAC3CD,EAAoB,CACjBnrB,QAAS,SAAC,GAAW,OAAGuD,UAAW,CAAEqG,GAAvB,SAF0B,CAI3C,K,iCCn1BL,sDAGa7E,EAAY,aAAW,SAACC,GAAU,OAC3CC,KAAM,CACF,qBAAsB,CAClB9D,MAAO,WAEX,sBAAuB,CACnBA,MAAO,IAAU6Q,YAAYC,iBAGjC,mBAAoB,CAChBxM,QAAS,OACT8U,SAAU,SACV,uBAAwB,CACpB,gCAAiC,CAC7BpZ,MAAO,uBAGf,4BAA6B,CACzBsE,QAAS,OACTI,KAAM,EACN,wBAAyB,CACrBJ,QAAS,OACTI,KAAM,EACNH,WAAY,UACZ,yBAA0B,CACtBI,QAAS,WAGjB,gCAAiC,CAC7BL,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBT,MAAO,mBAEX,oCAAqC,CACjCA,MAAO,kBACPO,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBiK,SAAU,SAEd,8BAA+B,CAC3B/J,KAAM,EACNJ,QAAS,OACTC,WAAY,SACZR,MAAO,oBAGf,4BAA6B,CACzBW,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACV,wBAAyB,CACrB9U,QAAS,OACTI,KAAM,EACNH,WAAY,UACZwV,OAAQ,mBAEZ,uBAAwB,CACpBhW,MAAO,OACPY,QAAS,SACT,gCAAiC,CAC7B3E,MAAO,kCAEX,kBAAmB,CACfA,MAAO,WAEX,uBAAwB,CACpBA,MAAO,YAGf,oCAAqC,CACjC,uBAAwB,CACpB2E,QAAS,SAGjB,gCAAiC,CAC7BL,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBT,MAAO,mBAEX,4BAA6B,CACzBW,KAAM,EACNJ,QAAS,OACTC,WAAY,YAIxB,iBAAkB,CACd,qBAAsB,CAClB2lB,KAAM,IAAUrZ,YAAYC,mBAIxCF,KAAM,CACF5Q,MAAO,IAAU6Q,YAAYC,iBAEjC9M,UAAW,CACPD,MAAO,QAEXomB,OAAQ,CACJC,cAAe,aAEnBC,OAAQ,CACJ/lB,QAAS,QAEb1C,UAAW,CACP+O,gBAAiB,eAErB2Z,QAAS,CACL,qBAAsB,CAClBtqB,MAAO,IAAU6Q,YAAYC,kBAGrCyZ,UAAW,CACP9b,SAAU,SAEd+b,YAAa,GAGbC,iBAAkB,CACdzqB,MAAO,IAAU6Q,YAAYC,iBAEjCqB,aAAc,CACVnS,MAAO,IAAU6Q,YAAYC,iBAEjC4Z,YAAa,CACT3mB,MAAO,OACPgW,OAAQ,OACR/Y,OAAQ,QACR2R,SAAU,QAEdgY,cAAe,CACXrmB,QAAS,OACT8U,SAAU,UAEdwR,aAAc,CACVtmB,QAAS,OACTC,WAAY,SACZC,eAAgB,WAChBG,QAAS,gBAEbuN,WAAY,CACR5N,QAAS,OACTC,WAAY,SACZC,eAAgB,YAEpBqmB,YAAa,CACT9mB,MAAOF,EAAMqF,QAAQ,GACrB6Q,OAAQlW,EAAMqF,QAAQ,IAE1BkJ,KAAM,CACFhB,WAAY,OAEhB0Z,MAAO,CACHxmB,QAAS,OACTymB,SAAU,QAEdC,mBAAoB,CAChB1mB,QAAS,OACTC,WAAY,UAEhB0mB,aAAc,CACVlnB,MAAO,OACP/D,MAAO,OACP2E,QAAS,UAEbumB,YAAa,CACTlrB,MAAO,WAEXmrB,SAAU,CACNnrB,MAAO,SAEXorB,WAAY,CACR,uBAAwB,CACpB,sBAAuB,CACnB,kBAAmB,CACf,UAAW,CACP9mB,QAAS,OACT8U,SAAU,mBAM9BiS,UAAW,CACPrrB,MAAO,IAAU6Q,YAAYC,gBAC7B9P,OAAQ,SAEZsqB,SAAU,CACNtqB,OAAQ,UACR+Y,OAAQ,QAEZwR,UAAW,CACPC,WAAY,WACZxa,WAAY,MACZC,cAAe,OAEnBwa,aAAc,CACVva,SAAU,0B,kXC5LLwa,EAA0B,IAAMC,cAA8C,IAoK9EC,EAA0D,SAACxtB,GAE9D,MAAgC,mBAAiB,OAAKytB,SAAS7b,YAA9D8b,EAAW,KAAEC,EAAc,KAE5B,EAAkC,qBAAjCC,EAAY,KAAEC,EAAe,KAK9B,EAAkC,mBAAuB,CAC3DC,mBAAmB,EACnBC,uBAAuB,EACvBC,qBAAqB,EACrBC,iCAAiC,EACjCC,qBAAqB,EACrBC,mBAAmB,IANhBC,EAAY,KAAEC,EAAe,KAS9B,EAAoE,qBAAnEC,EAA6B,KAAEC,EAAgC,KAGhE,EAAgD,mBAA8B,CAChFC,iBAAkB,EAClBC,iBAAkB,EAClBC,eAAgB,IAHbC,EAAmB,KAAEC,EAAsB,KAO5C,EAAsC,qBAArCC,EAAc,KAAEC,EAAiB,KAGlC,EAAgC,mBAAuB,IAAtDC,EAAW,KAAEC,EAAc,KAG5B,EAA4C,qBAA3CC,EAAiB,KAAEC,EAAoB,KAExC,EAAgC,mBAA+B,IAA9DC,EAAW,KAAEC,EAAc,KAE5B,EAAkC,mBAAyB,IAA1DC,EAAY,KAAEC,EAAe,KAc9BC,EAAsB,SAACrvB,GACrBA,IAASA,EAAK+B,SAAW/B,EAAKO,SAC1BP,EAAKO,QAAQgL,gBAAkBvL,EAAKO,QAAQopB,eAC5CgE,EAAgB,CACZ3hB,SAAUhM,EAAKO,QAAQopB,cAAc3d,SACrCT,eAAgBvL,EAAKO,QAAQgL,eAAeoU,UAuPtD2P,EAAoB,SAACC,GAMvB,GAJyBV,EAAY7G,MAAK,SAACnd,GACvC,OAAOA,EAAKnG,YAAwB,OAAX6qB,QAAW,IAAXA,OAAW,EAAXA,EAAa7qB,aAGlB,CAEpB,IAAM8qB,EAAiB,IAAEC,OAAOZ,GAAa,SAAChkB,GAAsB,OAAOA,EAAKnG,YAAwB,OAAX6qB,QAAW,IAAXA,OAAW,EAAXA,EAAa7qB,aAEtG6qB,IAAiBA,EAAYjiB,iBAAmBiiB,EAAYrhB,qBAAuBqhB,EAAY5oB,gBAC5F4oB,EAAY7gB,+BAAiC6gB,EAAYngB,mBAAqBmgB,EAAY1f,kBACzF2f,EAAene,KAAKke,GAG5BT,EAAeU,GACfE,EAAqBF,QAIlB,GAAID,IAAiBA,EAAYjiB,iBAAmBiiB,EAAYrhB,qBAAuBqhB,EAAY5oB,gBACnG4oB,EAAY7gB,+BAAiC6gB,EAAYngB,mBAAqBmgB,EAAY1f,iBAE7Fgf,EAAYxd,KAAKke,GAEjBT,EAAeD,GACfa,EAAqBb,OAIlB,CAEGW,EAAiB,IAAEC,OAAOZ,GAAa,SAAChkB,GAC1C,YAAyB1G,IAAlB0G,EAAKnG,YAGhBoqB,EAAeU,GACfE,EAAqBF,KAOvBE,EAAuB,SAACC,GAC1B,IAAIpB,EAAmB,EACnBC,EAAiB,EAErBmB,EAAM1e,SAAQ,SAAAnJ,GACVymB,GAAsC,EAElCzmB,EAAKwF,kBACLkhB,GAAkC,GAElC1mB,EAAKoG,sBACLsgB,GAAkC,GAElC1mB,EAAKnB,iBACL6nB,GAAkC,GAElC1mB,EAAK4G,gCACL8f,GAAkC,GAElC1mB,EAAKsH,oBACLof,GAAkC,GAElC1mB,EAAK+H,kBACL2e,GAAkC,MAI1CE,EAAuB,EAAD,KACfD,GAAmB,CACtBF,iBAAkBA,EAClBC,eAAgBA,MA6XlBoB,EAAiC,SAACL,GAChCA,IACsBM,EAAmBN,EAAY7qB,SAAU6qB,KAGvDA,EAAYjiB,kBACZiiB,EAAYjiB,gBAAgBE,gCAA6BrJ,GAEzDorB,EAAYrhB,sBACZqhB,EAAYrhB,oBAAoBV,gCAA6BrJ,GAE7DorB,EAAY1f,kBACZ0f,EAAY1f,qBAAkB1L,KAK1C,OAAOorB,GAmHLO,EAAmB,SAACP,GACtB,IAAIQ,EAAiBR,EAGrB,GAAIQ,GAAkBA,EAAeziB,gBAAiB,CAClD,IAAMA,EAAkByiB,EAAeziB,gBAEnCA,IACCA,EAAgBvG,MAAQuG,EAAgBrG,eACpCqG,EAA0C,8BAI3CyiB,EAAeziB,qBAAkBnJ,GAI7C,GAAI4rB,GAAkBA,EAAe7hB,oBAAqB,CACtD,IAAMA,EAAsB6hB,EAAe7hB,oBAEvCA,IACEA,EAAoBE,SAChBF,EAA8C,8BAIhD6hB,EAAe7hB,yBAAsB/J,GAIjD,GAAI4rB,GAAkBA,EAAeppB,eAAgB,CACjD,IAAMA,EAAiBopB,EAAeppB,eAElCA,IACCA,EAAeI,MAAQJ,EAAeM,eAChCN,EAAeQ,YAAcR,EAAeU,cAAgBV,EAAeY,yBAI9EwoB,EAAeppB,oBAAiBxC,GAI5C,GAAI4rB,GAAkBA,EAAerhB,8BAA+B,CAChE,IAAMA,EAAgCqhB,EAAerhB,8BAEjDA,IACCA,EAA8BE,UAAYF,EAA8BI,iBAIrEihB,EAAerhB,mCAAgCvK,GAI3D,GAAI4rB,GAAkBA,EAAe3gB,kBAAmB,CACpD,IAAMA,EAAoB2gB,EAAe3gB,kBAErCA,GAAsBA,EAA4B,aAG9C2gB,EAAe3gB,uBAAoBjL,GAI/C,GAAI4rB,GAAkBA,EAAelgB,gBAAiB,CAClD,IAAMA,EAAkBkgB,EAAelgB,gBAEnCA,GAAoBA,EAA6B,gBAG7CkgB,EAAelgB,qBAAkB1L,GAI7C,OAAO4rB,GAILC,EAA2B,SAACT,EAA0BU,G,UAIxD,GAAIV,EAAa,CAEb,IAAIW,GAAW,EAEf,IAAET,OAAOR,GAAa,SAACkB,GACnB,OAAOA,EAAKzrB,WAAa6qB,EAAY7qB,YAGrC6qB,EAAY1f,iBAAmB0f,EAAYjiB,iBAAmBiiB,EAAYrhB,uBAC3C,QAA3B,EAAAqhB,EAAY1f,uBAAe,eAAEE,iBAEK,QAA3B,EAAAwf,EAAYjiB,uBAAe,eAAEE,8BAEE,QAA/B,EAAA+hB,EAAYrhB,2BAAmB,eAAEV,+BAHxC0iB,GAAW,GAOXA,GACAjB,EAAY5d,KAAK,CACb3M,SAAU6qB,EAAY7qB,SACtB0rB,+BAA2DjsB,IAAhCorB,EAAYjiB,gBACvC+iB,mCAAmElsB,IAApCorB,EAAYrhB,oBAC3CoiB,8BAAyDnsB,IAA/BorB,EAAY5oB,eACtC4pB,6CAAuFpsB,IAA9CorB,EAAY7gB,8BACrD8hB,6BAA2BP,IAA+D,IAAhCA,SAEQ9rB,IAAhCorB,EAAY1f,kBAGlDqf,EAAeD,IAEfC,EAAeD,IAGnBC,EAAeD,KAOrBwB,EAAsB,SAAClB,G,YACzB,GAAIA,GAAeA,EAAY7qB,SAAU,CACrC,IAAE+qB,OAAON,GAAc,SAACuB,GACpB,OAAOA,EAAOhsB,WAAa6qB,EAAY7qB,YAG3C,IAAIisB,EAAkC,CAClCjsB,SAAU6qB,EAAY7qB,UAGtBksB,GAA6B,EAE7BrB,EAAYjiB,kBACRiiB,EAAYjiB,gBAAgBvG,OAC5B4pB,EAAkBE,iCAAkC,EACpDD,GAA6B,GAE7BrB,EAAYjiB,gBAAgBrG,gBAC5B0pB,EAAkBG,kCAAmC,EACrDF,GAA6B,IAE7BrB,EAAYjiB,gBAAgBvG,MAAQwoB,EAAYjiB,gBAAgBrG,gBAC5DsoB,EAAYjiB,gBAAgBE,+BACO,QAA/B,EAAA+hB,EAAYrhB,2BAAmB,eAAEV,8BAAyD,QAA3B,EAAA+hB,EAAY1f,uBAAe,eAAEE,kBAC5F4gB,EAAkBI,yBAA0B,EAC5CH,GAA6B,IAKzCrB,EAAYrhB,qBACRqhB,EAAYrhB,oBAAoBE,UAAYmhB,EAAYrhB,oBAAoBV,8BAC7C,QAA3B,EAAA+hB,EAAYjiB,uBAAe,eAAEE,8BAAyD,QAA3B,EAAA+hB,EAAY1f,uBAAe,eAAEE,kBACxF4gB,EAAkBK,gCAAiC,EACnDJ,GAA6B,GAKrCrB,EAAY5oB,iBACR4oB,EAAY5oB,eAAeU,eAC3BspB,EAAkBM,uBAAwB,EAC1CL,GAA6B,GAE7BrB,EAAY5oB,eAAeY,wBAC3BopB,EAAkBO,iCAAkC,EACpDN,GAA6B,IAIjCA,IACAzB,EAAa9d,KAAKsf,GAClBvB,EAAgBD,MA8CtBU,EAAqB,SAACnrB,EAAmBysB,EAA2BxC,GAItE,IAAIgB,EAUJ,IAPIA,EADAwB,GAGQ,IAAEnJ,KAAK6G,GAAa,SAACuC,GACzB,OAAOA,EAAW1sB,WAAaA,OAI1BirB,EAAM0B,WAAY,CAE3B,IAEIrmB,GAFAsmB,EAAwBC,EAAwB5B,EAAM0B,aAEjBrmB,aACrCwmB,EAAgBF,EAAsBE,cACtCpjB,EAAUkjB,EAAsBljB,QAChCqjB,EAAeH,EAAsBG,aAqCzC,GAnCI9B,EAAMriB,kBACFqiB,EAAMriB,gBAAgBvG,OACtBiE,GAA8B2kB,EAAMriB,gBAAgBvG,MAEpD4oB,EAAMriB,gBAAgBrG,gBACtBuqB,GAAgC7B,EAAMriB,gBAAgBrG,gBAI1D0oB,EAAMhpB,iBACFgpB,EAAMhpB,eAAeU,eACrB2D,GAA8B2kB,EAAMhpB,eAAeU,cAEnDsoB,EAAMhpB,eAAeI,OACrBiE,GAA8B2kB,EAAMhpB,eAAeI,MAEnD4oB,EAAMhpB,eAAeY,wBACrBiqB,GAAgC7B,EAAMhpB,eAAeY,uBAErDooB,EAAMhpB,eAAeM,gBACrBuqB,GAAgC7B,EAAMhpB,eAAeM,eAErD0oB,EAAMhpB,eAAeQ,aACrBsqB,GAA8B9B,EAAMhpB,eAAeQ,aAIvDwoB,EAAMzhB,qBAAuByhB,EAAMzhB,oBAAoBE,UACvDA,GAAoBuhB,EAAMzhB,oBAAoBE,SAG9CuhB,EAAMjhB,+BAAiCihB,EAAMjhB,8BAA8BE,WAC3E6iB,GAA8B9B,EAAMjhB,8BAA8BE,UAGhE5D,EAAewmB,EAAgBpjB,EAAUqjB,IAAkB,EAE7D,OADAzB,EAAyBL,GAAO,IACzB,EAGPK,EAAyBL,GAAO,QAEjC,GAAIhB,EAAgB,CACvB,IAAI2C,EAOJ,IALItmB,GAFAsmB,EAAwBC,EAAwB5C,IAEX3jB,eACrCwmB,EAAgBF,EAAsBE,gBACtCpjB,EAAUkjB,EAAsBljB,UAChCqjB,EAAeH,EAAsBG,gBAEwB,EAE7D,OADAzB,EAAyBL,GAAO,IACzB,EAGPK,EAAyBL,GAAO,GAIxC,OAAO,GAIL+B,EAAyC,SAAChtB,EAAmBitB,EAAsBC,GAIrF,IAAMjC,EAAQ,IAAE3H,KAAK6G,GAAa,SAACuC,GAC/B,OAAOA,EAAW1sB,WAAaA,KAGnC,GAAIirB,GAASA,EAAM0B,WAAY,CAE3B,IAAIC,EAAwBC,EAAwB5B,EAAM0B,YAEtDrmB,EAAesmB,EAAsBtmB,aACrCwmB,EAAgBF,EAAsBE,cACtCpjB,EAAUkjB,EAAsBljB,QAChCqjB,EAAeH,EAAsBG,aAoCzC,GAlCIE,IAAgBtQ,MAAMsQ,KACtB3mB,GAA8BoW,OAAOuQ,IAGrCC,IAAiBvQ,MAAMuQ,KACvBJ,GAAgCpQ,OAAOwQ,IAGvCjC,EAAMhpB,iBACFgpB,EAAMhpB,eAAeU,eACrB2D,GAA8B2kB,EAAMhpB,eAAeU,cAEnDsoB,EAAMhpB,eAAeI,OACrBiE,GAA8B2kB,EAAMhpB,eAAeI,MAEnD4oB,EAAMhpB,eAAeY,wBACrBiqB,GAAgC7B,EAAMhpB,eAAeY,uBAErDooB,EAAMhpB,eAAeM,gBACrBuqB,GAAgC7B,EAAMhpB,eAAeM,eAErD0oB,EAAMhpB,eAAeQ,aACrBsqB,GAA8B9B,EAAMhpB,eAAeQ,aAIvDwoB,EAAMzhB,qBAAuByhB,EAAMzhB,oBAAoBE,UACvDA,GAAoBuhB,EAAMzhB,oBAAoBE,SAG9CuhB,EAAMjhB,+BAAiCihB,EAAMjhB,8BAA8BE,WAC3E6iB,GAA8B9B,EAAMjhB,8BAA8BE,UAGhE5D,EAAewmB,EAAgBpjB,EAAUqjB,IAAkB,EAC7D,OAAO,EAMf,OADAzB,EAAyBL,GAAO,IACzB,GAgGL4B,EAA0B,SAACF,GAe7B,MAPmD,CAC/CrmB,aAPeoW,OAAOiQ,EAAWQ,aAAa5M,QAAQ,IAQtDuM,cANgBpQ,OAAOiQ,EAAWnmB,sBAAsB+Z,QAAQ,IAOhE7W,QANUgT,OAAOiQ,EAAWjjB,QAAQ6W,QAAQ,IAO5CwM,aANerQ,OAAOiQ,EAAWI,aAAaxM,QAAQ,MA+O9D,OACI,kBAACmI,EAAwBloB,SAAQ,CAC7BvE,MAAK,OACEutB,GAAY,CACfV,YAAW,EACXiB,oBAAmB,EACnBE,eAAc,EACdI,kBAAiB,EACjBF,YAAW,EACXI,YAAW,EAEXvB,aAAY,EACZU,8BAA6B,EAE7BX,eAAgBA,EAEhBiB,uBAAwBA,EACxBE,kBAAmBA,EACnBI,qBAAsBA,EACtBF,eAAgBA,EAChBT,iCAAkCA,EAElCyD,iBAj8Ca,SAAC/U,EAAiC7b,GACvD,IAAMkwB,EAAavC,EAAY3V,QAAO,SAACrO,GACnC,OAAOA,EAAKnG,WAAaqY,EAAO5S,MAG9BwlB,EAA8B,IAAtByB,EAAWhb,YAAejS,EAAYitB,EAAW,GAG/DpC,EAAqB,CACjBtqB,SAAUqY,EAAO5S,GACjBvF,WAAYmY,EAAOgV,aACnB7jB,oBAAqByhB,EAAQA,EAAMzhB,yBAAsB/J,EACzDmJ,gBAAiBqiB,EAAQA,EAAMriB,qBAAkBnJ,EACjDwC,eAAgBgpB,EAAQA,EAAMhpB,oBAAiBxC,EAC/CuK,8BAA+BihB,EAAQA,EAAMjhB,mCAAgCvK,EAC7EiL,kBAAmBugB,EAAQA,EAAMvgB,uBAAoBjL,EACrD0L,gBAAiB8f,EAAQA,EAAM9f,qBAAkB1L,EACjDktB,WAAYtU,IAGhB6R,EAAkB7R,IA86CViV,kBA36Cc,SAAC9oB,GAIvB,IAAMqmB,EAAc,EAAH,KACVR,GAAiB,CACpBzhB,gBAAiB,CACb2kB,SAAS,EACTlrB,KAAMmC,EAAOnC,KACbE,cAAeiC,EAAOjC,cACtBuG,2BAA4BtE,EAAOsE,2BACnChG,SAAU0B,EAAO1B,YAKrBuoB,EAAiBD,EAAiBP,GACtCS,EAAyBD,GACzBU,EAAoBV,GACpBf,EAAqBO,GACrBD,EAAkBC,IAw5CV2C,sBAr5CkB,SAAChpB,GAI3B,IAAMqmB,EAAW,OACVR,GAAiB,CACpB7gB,oBAAqB,CACjB+jB,SAAS,EACT7jB,QAASlF,EAAOkF,QAChBZ,2BAA4BtE,EAAOsE,2BACnChG,SAAU0B,EAAO1B,YAKrBuoB,EAAiBD,EAAiBP,GACtCS,EAAyBD,GACzBU,EAAoBV,GACpBf,EAAqBO,GACrBD,EAAkBC,IAm4CV4C,oBAh4CgB,SAACjpB,GAIzB,IAAMqmB,EAAW,OACVR,GAAiB,CACpBpoB,eAAgB,CACZsrB,SAAS,EACTlrB,KAAMmC,EAAOnC,KACbE,cAAeiC,EAAOjC,cACtBE,WAAY+B,EAAO/B,WACnBE,aAAc6B,EAAO7B,aACrBE,sBAAuB2B,EAAO3B,sBAC9BC,SAAU0B,EAAO1B,YAKrBuoB,EAAiBD,EAAiBP,GACtCS,EAAyBD,GACzBU,EAAoBV,GACpBf,EAAqBO,GACrBD,EAAkBC,IA22CV6C,gCAx2C4B,SAAClpB,GAIrC,IAAMqmB,EAAW,OACVR,GAAiB,CACpBrgB,8BAA+B,CAC3BujB,SAAS,EACTrjB,SAAU1F,EAAO0F,SACjBE,cAAe5F,EAAO4F,cACtBtH,SAAU0B,EAAO1B,YAKrBuoB,EAAiBD,EAAiBP,GACtCS,EAAyBD,GACzBU,EAAoBV,GACpBf,EAAqBO,GACrBD,EAAkBC,IAs1CV8C,oBAn1CgB,SAACnpB,GAIzB,IAAMqmB,EAAW,OACVR,GAAiB,CACpB3f,kBAAmB,CACf6iB,SAAS,EACTK,WAAYppB,EAAOoG,gBACnB9H,SAAU0B,EAAO1B,YAKrBuoB,EAAiBD,EAAiBP,GACtCS,EAAyBD,GACzBU,EAAoBV,GACpBf,EAAqBO,GACrBD,EAAkBC,IAk0CVgD,kBA/zCc,SAACrpB,GAIvB,IAAMqmB,EAAW,OACVR,GAAiB,CACpBlf,gBAAiB,CACboiB,SAAS,EACTliB,cAAe7G,EAAO6G,cACtBvI,SAAU0B,EAAO1B,YAKrBuoB,EAAiBD,EAAiBP,GACtCS,EAAyBD,GACzBU,EAAoBV,GACpBf,EAAqBO,GACrBD,EAAkBC,IA+yCViD,kBA7hDc,WACtBrE,EAAgB,EAAD,KACRD,GAAY,CACfN,mBAAmB,MA2hDflgB,oBAvhDgB,WACxBygB,EAAgB,EAAD,KACRD,GAAY,CACfN,mBAAmB,MAqhDf6E,sBAjhDkB,WAC1BtE,EAAgB,EAAD,KACRD,GAAY,CACfL,uBAAuB,MA+gDnBvf,wBA3gDoB,WAC5B6f,EAAgB,EAAD,KACRD,GAAY,CACfL,uBAAuB,MAygDnB6E,oBArgDgB,WACxBvE,EAAgB,EAAD,KACRD,GAAY,CACfJ,qBAAqB,MAmgDjB/kB,sBA//CkB,WAC1BolB,EAAgB,EAAD,KACRD,GAAY,CACfJ,qBAAqB,MA6/CjB6E,gCAz/C4B,WACpCxE,EAAgB,EAAD,KACRD,GAAY,CACfH,iCAAiC,MAu/C7B/e,kCAn/C8B,WACtCmf,EAAgB,EAAD,KACRD,GAAY,CACfH,iCAAiC,MAi/C7B6E,oBA7+CgB,WACxBzE,EAAgB,EAAD,KACRD,GAAY,CACfF,qBAAqB,MA2+CjBxe,sBAv+CkB,WAC1B2e,EAAgB,EAAD,KACRD,GAAY,CACfF,qBAAqB,MAq+CjB6E,kBAj+Cc,WACtB1E,EAAgB,EAAD,KACRD,GAAY,CACfD,mBAAmB,MA+9Cfhe,oBA39CgB,WACxBke,EAAgB,EAAD,KACRD,GAAY,CACfD,mBAAmB,MA09Cf6E,qBA7rCiB,SAAC9yB,GAC1B,QAAIA,MACIA,EAAK6xB,cACE7xB,EAAK6xB,aAAe,IA2rC3BkB,8BAlrC0B,SAAC/yB,GACnC,QAAIA,MACIA,EAAKkL,uBACElL,EAAKkL,sBAAwB,IAgrCpC8nB,gBAvqCY,SAAChzB,GACrB,QAAIA,MACIA,EAAKoO,SACEpO,EAAKoO,QAAU,IAqqCtB6kB,cA5pCU,SAACjzB,GACnB,QAAIA,MACIA,EAAKyxB,cACEzxB,EAAKyxB,aAAe,IA2pC3ByB,mBAlpCe,SAAChyB,GAGxB,IAAIquB,EAAW,KAAoBR,GAK7BoE,EAA2C,OAAjBpE,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBrgB,8BAsGnD,GAAiC,oBAA7BxN,EAAMkyB,cAAchyB,KAA4B,CAChD,IAAM0N,EAAgB5N,EAAMkyB,cAAczyB,OAASO,EAAMkyB,cAAczyB,MAAMyV,OAAS,EAAIlV,EAAMkyB,cAAczyB,WAAQwD,EAEtHorB,EAAc,EAAH,KACJR,GAAiB,CACpBrgB,8BAA+B,CAC3BujB,SAAS,EACTrjB,SAAiC,OAAvBukB,QAAuB,IAAvBA,OAAuB,EAAvBA,EAAyBvkB,SACnCE,cAAeA,EACftH,SAAiC,OAAvB2rB,QAAuB,IAAvBA,OAAuB,EAAvBA,EAAyB3rB,YAM/C,IAAIuoB,EAAiBD,EAAiBP,GAEtCQ,EAAiBH,EAA+BG,GAChDU,EAAoBV,GACpBf,EAAqBe,GACrBT,EAAkBS,IAihCVsD,0BA9gCsB,SAACjyB,EAAcT,GAG7C,IAAI4uB,EAAW,KAAoBR,GAE7BzhB,EAAmC,OAAjByhB,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBzhB,gBACrCgmB,EAAsC,OAAjBvE,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB7gB,oBACxCvH,EAAkC,OAAjBooB,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBpoB,eACpCwsB,EAA2C,OAAjBpE,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBrgB,8BAEnD,GAAa,mBAATtN,EAA2B,CAC3B,IAAM2F,EAAOpG,GAASA,EAAQ,EAAIygB,OAAOzgB,QAASwD,EAG9CorB,EAAc,EAAH,KACJR,GAFPpoB,EAEwB,CACpBA,eAAgB,CACZsrB,SAAS,EACTlrB,KAAoB,OAAdJ,QAAc,IAAdA,OAAc,EAAdA,EAAgBI,KACtBE,cAA6B,OAAdN,QAAc,IAAdA,OAAc,EAAdA,EAAgBM,cAC/BE,WAA0B,OAAdR,QAAc,IAAdA,OAAc,EAAdA,EAAgBQ,WAC5BE,aAAcN,EACdQ,sBAAqC,OAAdZ,QAAc,IAAdA,OAAc,EAAdA,EAAgBY,sBACvCC,SAAwB,OAAdb,QAAc,IAAdA,OAAc,EAAdA,EAAgBa,WAKV,CACpB8F,gBAAiB,CACb2kB,SAAS,EACTlrB,KAAMA,EACNE,cAA8B,OAAfqG,QAAe,IAAfA,OAAe,EAAfA,EAAiBrG,cAChCuG,4BAA0G,IAA9EkkB,EAAwD,OAAjB3C,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBrqB,SAAUqC,IAE3E,OAAfuG,QAAe,IAAfA,OADAnJ,EACAmJ,EAAiBE,2BACvBhG,SAAyB,OAAf8F,QAAe,IAAfA,OAAe,EAAfA,EAAiB9F,iBAIpC,GAAa,oBAATpG,EAA4B,CACnC,IAAMmyB,EAAO5yB,GAASA,EAAQ,EAAIygB,OAAOzgB,QAASwD,EAG9CorB,EAAc,EAAH,KACJR,GAFPpoB,EAEwB,CACpBA,eAAgB,CACZsrB,SAAS,EACTlrB,KAAoB,OAAdJ,QAAc,IAAdA,OAAc,EAAdA,EAAgBI,KACtBE,cAA6B,OAAdN,QAAc,IAAdA,OAAc,EAAdA,EAAgBM,cAC/BE,WAA0B,OAAdR,QAAc,IAAdA,OAAc,EAAdA,EAAgBQ,WAC5BE,aAA4B,OAAdV,QAAc,IAAdA,OAAc,EAAdA,EAAgBU,aAC9BE,sBAAuBgsB,EACvB/rB,SAAwB,OAAdb,QAAc,IAAdA,OAAc,EAAdA,EAAgBa,WAKV,CACpB8F,gBAAiB,CACb2kB,SAAS,EACTlrB,KAAqB,OAAfuG,QAAe,IAAfA,OAAe,EAAfA,EAAiBvG,KACvBE,cAAessB,EACf/lB,2BAA2C,OAAfF,QAAe,IAAfA,OAAe,EAAfA,EAAiBE,2BAC7ChG,SAAyB,OAAf8F,QAAe,IAAfA,OAAe,EAAfA,EAAiB9F,iBAKpC,GAAa,uBAATpG,EAA+B,CACtC,IAAMgN,EAAUzN,GAASA,EAAQ,EAAIygB,OAAOzgB,QAASwD,EAErDorB,EAAc,EAAH,KACJR,GAAiB,CACpB7gB,oBAAqB,CACjB+jB,SAAS,EACT7jB,QAASA,EACTZ,2BAA8C,OAAlB8lB,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoB9lB,2BAChDhG,SAA4B,OAAlB8rB,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoB9rB,iBAGnC,GAAa,aAATpG,EAAqB,CAC5B,IAAMoyB,EAAU7yB,GAASA,EAAQ,EAAIygB,OAAOzgB,QAASwD,EAErDorB,EAAc,EAAH,KACJR,GAAiB,CACpBpoB,eAAgB,CACZsrB,SAAS,EACTlrB,KAAMysB,EACNvsB,cAA6B,OAAdN,QAAc,IAAdA,OAAc,EAAdA,EAAgBM,cAC/BE,WAA0B,OAAdR,QAAc,IAAdA,OAAc,EAAdA,EAAgBQ,WAC5BE,aAA4B,OAAdV,QAAc,IAAdA,OAAc,EAAdA,EAAgBU,aAC9BE,sBAAqC,OAAdZ,QAAc,IAAdA,OAAc,EAAdA,EAAgBY,sBACvCC,SAAwB,OAAdb,QAAc,IAAdA,OAAc,EAAdA,EAAgBa,iBAG/B,GAAa,aAATpG,EAAqB,CAC5B,IAAMqyB,EAAW9yB,GAASA,EAAQ,EAAIygB,OAAOzgB,QAASwD,EAEtDorB,EAAc,EAAH,KACJR,GAAiB,CACpBpoB,eAAgB,CACZsrB,SAAS,EACTlrB,KAAoB,OAAdJ,QAAc,IAAdA,OAAc,EAAdA,EAAgBI,KACtBE,cAAewsB,EACftsB,WAA0B,OAAdR,QAAc,IAAdA,OAAc,EAAdA,EAAgBQ,WAC5BE,aAA4B,OAAdV,QAAc,IAAdA,OAAc,EAAdA,EAAgBU,aAC9BE,sBAAqC,OAAdZ,QAAc,IAAdA,OAAc,EAAdA,EAAgBY,sBACvCC,SAAwB,OAAdb,QAAc,IAAdA,OAAc,EAAdA,EAAgBa,iBAG/B,GAAa,eAATpG,EAAuB,CAC9B,IAAM+F,EAAaxG,GAASA,EAAQ,EAAIygB,OAAOzgB,QAASwD,EAExDorB,EAAc,EAAH,KACJR,GAAiB,CACpBpoB,eAAgB,CACZsrB,SAAS,EACTlrB,KAAoB,OAAdJ,QAAc,IAAdA,OAAc,EAAdA,EAAgBI,KACtBE,cAA6B,OAAdN,QAAc,IAAdA,OAAc,EAAdA,EAAgBM,cAC/BE,WAAYA,EACZE,aAA4B,OAAdV,QAAc,IAAdA,OAAc,EAAdA,EAAgBU,aAC9BE,sBAAqC,OAAdZ,QAAc,IAAdA,OAAc,EAAdA,EAAgBY,sBACvCC,SAAwB,OAAdb,QAAc,IAAdA,OAAc,EAAdA,EAAgBa,iBAG/B,GAAa,kBAATpG,EAA0B,CACjC,IAAMsyB,EAAgB/yB,GAASA,EAAQ,EAAIygB,OAAOzgB,QAASwD,EAE3DorB,EAAc,EAAH,KACJR,GAAiB,CACpBrgB,8BAA+B,CAC3BujB,SAAS,EACTrjB,SAAU8kB,EACV5kB,cAAsC,OAAvBqkB,QAAuB,IAAvBA,OAAuB,EAAvBA,EAAyBrkB,cACxCtH,SAAwB,OAAdb,QAAc,IAAdA,OAAc,EAAdA,EAAgBa,YAMtC,IAAIuoB,EAAiBD,EAAiBP,GAEtCQ,EAAiBH,EAA+BG,GAChDU,EAAoBV,GACpBf,EAAqBe,GACrBT,EAAkBS,IA63BV4D,uBAr2BmB,SAACzyB,EAA0CwD,EAAkBqtB,GAExF,IAAIxC,EAAW,KAAgCR,GAE/C,QAA6B5qB,IAAzBorB,EAAY7qB,eAAoDP,IAAzBorB,EAAY7qB,UAA0B6qB,EAAY7qB,WAAaA,EAAY,CAClH6qB,OAAcprB,EAGd,IAAMqrB,EAAiB,IAAExH,KAAK6G,GAAa,SAAChkB,GAAsB,OAAOA,EAAKnG,WAAaA,KAEvF8qB,IACAD,EAAcC,GAItB,GAAkC,mBAAzB,OAALtuB,QAAK,IAALA,OAAK,EAALA,EAAOkyB,cAAchyB,MAA0B,CAC/C,IAAM8uB,EAAgB,OAALhvB,QAAK,IAALA,OAAK,EAALA,EAAOkyB,cAActlB,QAChC+B,EAA6B,OAAX0f,QAAW,IAAXA,OAAW,EAAXA,EAAa1f,gBAC/BvC,EAA6B,OAAXiiB,QAAW,IAAXA,OAAW,EAAXA,EAAajiB,gBAC/BsmB,EAAmC,OAAXrE,QAAW,IAAXA,OAAW,EAAXA,EAAarhB,oBACvC2lB,GAAqB,EAiBzB,QAfwB1vB,IAApB0L,QAAqD1L,IAApBmJ,QAA2DnJ,IAA1ByvB,IAClErE,EAAc,EAAH,KACJA,GAAW,CACd7qB,SAAUA,EACVE,WAAYmtB,EACZliB,gBAAiB,CACboiB,SAAS,EACTliB,cAAemgB,EACf1oB,cAAUrD,KAIlB0vB,GAAqB,IAGpBA,EACD,GAAIhkB,GAAmBA,EAAgBE,cACnCwf,EAAc,EAAH,KACJA,GAAW,CACd7qB,SAAUA,EACVE,WAAYmtB,EACZliB,gBAAiB,CACboiB,SAAS,EACTliB,cAAemgB,EACf1oB,SAAUqI,EAAgBrI,gBAG/B,CAEH,IAAIssB,OAA0C3vB,GAC3B,OAAfmJ,QAAe,IAAfA,OAAe,EAAfA,EAAiBE,8BACjBsmB,GAAqB,IAGA,OAArBF,QAAqB,IAArBA,OAAqB,EAArBA,EAAuBpmB,8BACvBsmB,GAAqB,GAIrBvE,EAAc,EAAH,KACJA,QAFgBprB,IAAvB2vB,IAA2D,IAAvBA,EAElB,CACdpvB,SAAUA,EACVE,WAAYmtB,EACZzkB,gBAAiB,CACb2kB,SAAS,EACTzkB,2BAA4B0iB,EAC5BnpB,KAAqB,OAAfuG,QAAe,IAAfA,OAAe,EAAfA,EAAiBvG,KACvBE,cAA8B,OAAfqG,QAAe,IAAfA,OAAe,EAAfA,EAAiBrG,cAChCO,SAAyB,OAAf8F,QAAe,IAAfA,OAAe,EAAfA,EAAiB9F,WAKjB,CACd9C,SAAUA,EACVE,WAAYmtB,EACZ7jB,oBAAqB,CACjB+jB,SAAS,EACTzkB,2BAA4B0iB,EAC5B9hB,QAA8B,OAArBwlB,QAAqB,IAArBA,OAAqB,EAArBA,EAAuBxlB,QAChC5G,SAA+B,OAArBosB,QAAqB,IAArBA,OAAqB,EAArBA,EAAuBpsB,kBAMlD,GAAkC,qBAAzB,OAALtG,QAAK,IAALA,OAAK,EAALA,EAAOkyB,cAAchyB,MAA4B,CACxD,IAAM2yB,EAAiB,OAAL7yB,QAAK,IAALA,OAAK,EAALA,EAAOkyB,cAActlB,QACjCsB,EAA+B,OAAXmgB,QAAW,IAAXA,OAAW,EAAXA,EAAangB,kBAEvCmgB,EAAc,EAAH,KACJA,GAAW,CACd7qB,SAAUA,EACVE,WAAYmtB,EACZ3iB,kBAAmB,CACf6iB,SAAS,EACTK,WAAYyB,EACZvsB,SAA2B,OAAjB4H,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB5H,YAMzC,IAAIuoB,EAAiBD,EAAiBP,GAEtCkB,EAAoBV,GACpBf,EAAqBe,GACrBT,EAAkBS,IAyvBViE,mBAhkBe,SAACtvB,EAAkB/D,G,UAGpCgvB,EAAQ,IAAE3H,KAAK6G,GAAa,SAACuC,GAC/B,OAAOA,EAAW1sB,WAAaA,KAG/BwrB,GAAW,EAYf,OAVIP,IAAUA,EAAM9f,iBAAmB8f,EAAMriB,iBAAmBqiB,EAAMzhB,wBACzC,QAArB,EAAAyhB,EAAM9f,uBAAe,eAAEE,iBAEK,QAArB,EAAA4f,EAAMriB,uBAAe,eAAEE,8BAEE,QAAzB,EAAAmiB,EAAMzhB,2BAAmB,eAAEV,+BAHlC0iB,GAAW,MAQfA,QAAsB/rB,IAAVxD,IA8iBRszB,iBAviBa,SAACvvB,EAAkBgc,GACxC,IAAMiQ,EAAoB,IAAE3I,KAAKmH,GAAc,SAACtkB,GAC5C,OAAOA,EAAKnG,WAAaA,KAG7B,QAAIisB,MACOA,EAAkBjQ,IAASiQ,EAAkBjQ,KAkiBhDwT,6BArvCyB,WACjC,IAAI3F,EAAmB,EACnBC,EAAiB,EAErBK,EAAY5d,SAAQ,SAAAnJ,GAChBymB,GAAsC,EAElCzmB,EAAKwF,kBACLkhB,GAAkC,GAElC1mB,EAAKoG,sBACLsgB,GAAkC,GAElC1mB,EAAKnB,iBACL6nB,GAAkC,GAElC1mB,EAAK4G,gCACL8f,GAAkC,GAElC1mB,EAAKsH,oBACLof,GAAkC,GAElC1mB,EAAK+H,kBACL2e,GAAkC,MAI1CE,EAAuB,EAAD,KACfD,GAAmB,CACtBF,iBAAkBA,EAClBC,eAAgBA,MAwtCZ2F,SAptCK,SAACzvB,GACd,IAAM0sB,EAAavC,EAAY3V,QAAO,SAACrO,GACnC,OAAOA,EAAKnG,WAAaA,KAG7B,SAAI0sB,GAAcA,EAAWhb,OAAS,IAitC9ByZ,mBAAoBA,EACpB6B,uCAAwCA,EACxC0C,6CA5YyC,SAAC1vB,EAAmB2vB,GAIrE,IAAM1E,EAAQ,IAAE3H,KAAK6G,GAAa,SAACuC,GAC/B,OAAOA,EAAW1sB,WAAaA,KAGnC,GAAIirB,GAASA,EAAM0B,WAAY,CAE3B,IAAIC,EAAwBC,EAAwB5B,EAAM0B,YAEtDrmB,EAAesmB,EAAsBtmB,aACrCwmB,EAAgBF,EAAsBE,cACtCpjB,EAAUkjB,EAAsBljB,QAChCqjB,EAAeH,EAAsBG,aAqCzC,GAnCI9B,EAAMriB,kBACFqiB,EAAMriB,gBAAgBvG,OACtBiE,GAA8B2kB,EAAMriB,gBAAgBvG,MAEpD4oB,EAAMriB,gBAAgBrG,gBACtBuqB,GAAgC7B,EAAMriB,gBAAgBrG,gBAI1D0oB,EAAMhpB,iBACFgpB,EAAMhpB,eAAeU,eACrB2D,GAA8B2kB,EAAMhpB,eAAeU,cAEnDsoB,EAAMhpB,eAAeI,OACrBiE,GAA8B2kB,EAAMhpB,eAAeI,MAEnD4oB,EAAMhpB,eAAeY,wBACrBiqB,GAAgC7B,EAAMhpB,eAAeY,uBAErDooB,EAAMhpB,eAAeM,gBACrBuqB,GAAgC7B,EAAMhpB,eAAeM,eAErD0oB,EAAMhpB,eAAeQ,aACrBsqB,GAA8B9B,EAAMhpB,eAAeQ,aAIvDktB,IAAoBhT,MAAMgT,KAC1BjmB,GAAoBgT,OAAOiT,IAG3B1E,EAAMjhB,+BAAiCihB,EAAMjhB,8BAA8BE,WAC3E6iB,GAA8B9B,EAAMjhB,8BAA8BE,UAGhE5D,EAAewmB,EAAgBpjB,EAAUqjB,IAAkB,EAC7D,OAAO,EAGPzB,EAAyBL,GAAO,GAIxC,OAAO,GAkVC2E,kBA/Rc,SAAC5vB,GACvB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,OAAI0sB,EACIA,EAAW9jB,iBAAmB8jB,EAAW9jB,gBAAgBvG,KAClDqqB,EAAW9jB,gBAAgBvG,KAC3BqqB,EAAWzqB,gBAAkByqB,EAAWzqB,eAAeU,aACvD+pB,EAAWzqB,eAAeU,aAE1B,GAGJ,GAIf,MAAO,IA6QCktB,mBA1Qe,SAAC7vB,GACxB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,OAAI0sB,EACIA,EAAW9jB,iBAAmB8jB,EAAW9jB,gBAAgBrG,cAClDmqB,EAAW9jB,gBAAgBrG,cAC3BmqB,EAAWzqB,gBAAkByqB,EAAWzqB,eAAeY,sBACvD6pB,EAAWzqB,eAAeY,sBAE1B,GAGJ,GAIf,MAAO,IAwPCitB,sBArPkB,SAAC9vB,GAC3B,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,OAAI0sB,GACIA,EAAWljB,qBAAuBkjB,EAAWljB,oBAAoBE,QAC1DgjB,EAAWljB,oBAAoBE,QAKnC,GAIf,MAAO,IAqOCqmB,YAlOQ,SAAC/vB,GACjB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,OAAI0sB,GACIA,EAAWzqB,gBAAkByqB,EAAWzqB,eAAeI,KAChDqqB,EAAWzqB,eAAeI,KAK9B,GAIf,MAAO,IAkNC2tB,YA/MQ,SAAChwB,GACjB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,OAAI0sB,GACIA,EAAWzqB,gBAAkByqB,EAAWzqB,eAAeM,cAChDmqB,EAAWzqB,eAAeM,cAK9B,GAIf,MAAO,IA+LC0tB,cA5LU,SAACjwB,GACnB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,OAAI0sB,GACIA,EAAWzqB,gBAAkByqB,EAAWzqB,eAAeQ,WAChDiqB,EAAWzqB,eAAeQ,WAK9B,GAIf,MAAO,IA4KCytB,iBAzKa,SAAClwB,GACtB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,OAAI0sB,GAAcA,EAAW1iB,+BAAiC0iB,EAAW1iB,8BAA8BE,SAC5FwiB,EAAW1iB,8BAA8BE,SAEzC,GAIf,MAAO,IA6JCimB,mBA1Je,SAACnwB,GACxB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,OAAI0sB,GAAcA,EAAW1iB,+BAAiC0iB,EAAW1iB,8BAA8BI,cAC5FsiB,EAAW1iB,8BAA8BI,cAEzC,GAIf,MAAO,IA8ICgmB,YA3IQ,SAACpwB,GACjB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,QAAI0sB,IACIA,EAAWvhB,iBAAmBuhB,EAAWvhB,gBAAgBE,cAClDqhB,EAAWvhB,gBAAgBE,cAC3BqhB,EAAW9jB,iBAAmB8jB,EAAW9jB,gBAAgBE,2BACzD4jB,EAAW9jB,gBAAgBE,8BAC3B4jB,EAAWljB,sBAAuBkjB,EAAWljB,oBAAoBV,6BACjE4jB,EAAWljB,oBAAoBV,4BASlD,OAAO,GAuHCunB,cApHU,SAACrwB,GACnB,GAAImqB,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAG7B,QAAI0sB,OACIA,EAAWhiB,oBAAqBgiB,EAAWhiB,kBAAkBkjB,aACtDlB,EAAWhiB,kBAAkBkjB,YAShD,OAAO,GAoGC0C,iBAjGa,SAACtwB,EAAkB+sB,EAAsB/Q,GAC9D,GAAImO,EAAa,CACb,IAAIuC,EAAavC,EAAY7G,MAAK,SAACnd,GAC/B,OAAOA,EAAKnG,WAAaA,KAGzBuwB,EAAiB7T,OAAOqQ,GACxByD,EAAkB,EAWtB,GATI9D,IACIA,EAAW1iB,+BAAiC0iB,EAAW1iB,8BAA8BE,UAAsB,eAAV8R,IACjGwU,GAAoC9T,OAAOgQ,EAAW1iB,8BAA8BE,WAEpFwiB,EAAWzqB,gBAAkByqB,EAAWzqB,eAAeQ,YAAwB,kBAAVuZ,IACrEwU,GAAoC9T,OAAOgQ,EAAWzqB,eAAeQ,cAIzE8tB,EAAiB,EAEjB,OADAA,GAAkCC,EAK1C,OAAO,GA0ECC,qBA7lDiB,gBACJhxB,IAAjBupB,GACA,aAAkB,GACA,SAAC1tB,GACCqvB,EAAoBrvB,MAEtB,SAACM,GACK,YAAiB,oCAAqCA,EAAQ,gBAylDrFR,EAAMuE,Y,kCC3zDnB,8EAQMiB,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFQ,QAAS,OACTC,WAAY,SACZvD,OAAQ,WAEZ4H,MAAO,CACHjE,QAAS,SACTgO,SAAU,GACV3S,MAAO,IAAU6Q,YAAYC,iBAEjC4iB,qBAAsB,CAClBhvB,KAAM,EACNC,QAAS,SACTuM,SAAU,OACVyiB,SAAU,UAEd9qB,SAAU,CACN8J,SAAU,GACVghB,SAAU,SACVC,aAAc,WACdpI,WAAY,SACZta,SAAU,MACVlR,MAAO,aAEX2G,YAAa,CACTgM,SAAU,GACVghB,SAAU,SACVC,aAAc,WACdpI,WAAY,SACZta,SAAU,MACVlR,MAAO,kBAcN6zB,EAA4D,SAAEz1B,GAEvE,IAAM2G,EAAUnB,IAEhB,OACI,yBAAKxD,UAAW2E,EAAQjB,MACpB,yBAAK1D,UAAW2E,EAAQ6D,OAAQxK,EAAMwK,OACtC,yBAAKxI,UAAW2E,EAAQ2uB,sBACpB,yBAAKtzB,UAAW2E,EAAQ8D,UAAWzK,EAAMyK,UACzC,yBAAKzI,UAAW2E,EAAQ4B,aAAcvI,EAAMuI,iB,wdCnCtD/C,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTG,UAAW,CACPD,MAAO,QAEX+vB,QAAS,CACLnhB,SAAU9O,EAAMkwB,WAAWC,QAAQ,IAEnCh0B,MAAO,IAAU6Q,YAAYC,iBAEjCmjB,WAAY,CACR5iB,YAAa,GACbrR,MAAO,IAAU6Q,YAAYC,iBAEjCojB,aAAc,CACVnwB,MAAO,aA0BnB,SAASowB,EAAeC,GACZ,IAAAzpB,EAAgBypB,EAAS,MAAlBxpB,EAASwpB,EAAS,KAC3BrvB,EAAUnB,IAChB,OACI,kBAAC,IAAS,KACF+G,EAAK,CACTxL,MAAOi1B,EAAUj1B,MACjBU,WAAY,CAERw0B,eAAgB,KAEpBj0B,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1B1J,WAAYyJ,EAAK1J,MAAQkzB,EAAUjzB,gBAAasB,EAChDgQ,YAAY,QACZ6hB,WAAY,CAACC,aAAc,OAC3BtzB,SAAUmzB,EAAUnzB,YAMhC,SAASuzB,EAAuBJ,GACpB,IAAAzpB,EAAgBypB,EAAS,MAAlBxpB,EAASwpB,EAAS,KAC3BrvB,EAAUnB,IAChB,OACI,kBAAC,IAAS,KACF+G,EAAK,CACTxL,MAAOi1B,EAAUj1B,MACjBU,WAAY,CAERw0B,eAAgB,KAEpB/zB,UAAU,EACVF,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1B1J,WAAYyJ,EAAK1J,MAAQkzB,EAAUjzB,gBAAasB,EAChDgQ,YAAY,QACZ6hB,WAAY,CAACC,aAAc,OAC3BtzB,SAAUmzB,EAAUnzB,YAMzB,IAAMwzB,EAAoD,SAAEr2B,GAC/D,IAAM2G,EAAUnB,IAQV3C,EAAW,SAAChC,GACd,OAAOA,OAAQwD,EAAY,YAsEzBiyB,EAAqB,SAACN,GAChB,IAAAzpB,EAAgBypB,EAAS,MAAlBxpB,EAASwpB,EAAS,KACjC,OACI,kBAAC,yBAAsB,KACfzpB,EAAK,CACTvK,UAAW2E,EAAQf,UACnBqG,OAAO,qBACPoI,YAAY,qBACZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SAETwzB,WAAY,CAACC,aAAc,OAC3BO,gBAAiB,CAAEC,QAAQ,GAC3B7zB,MAAO0J,EAAK1J,MACZ/B,MAAOi1B,EAAUj1B,MACjBgC,WAAYyJ,EAAK1J,MAAQkzB,EAAUjzB,gBAAasB,EAChDxB,SAAUmzB,EAAUnzB,SACpB+zB,mBAAmC,YAAfrqB,EAAMjL,MAAqB,IAAIyf,MAAO8V,SAAS,GAAI,EAAG,EAAG,GAAK,IAAI9V,SAM5F+V,EAA6B,SAACd,GACxB,IAAAzpB,EAAgBypB,EAAS,MAAlBxpB,EAASwpB,EAAS,KACjC,OACI,kBAAC,yBAAsB,KACfzpB,EAAK,CACTvK,UAAW2E,EAAQf,UACnBqG,OAAO,qBACPoI,YAAY,qBACZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SAETwzB,WAAY,CAACC,aAAc,OAC3BO,gBAAiB,CAAEC,QAAQ,GAC3Bz0B,UAAU,EACVY,MAAO0J,EAAK1J,MACZ/B,MAAOi1B,EAAUj1B,MACjBgC,WAAYyJ,EAAK1J,MAAQkzB,EAAUjzB,gBAAasB,EAChDxB,SAAUmzB,EAAUnzB,SACpB+zB,mBAAmC,YAAfrqB,EAAMjL,MAAqB,IAAIyf,MAAO8V,SAAS,GAAI,EAAG,EAAG,GAAK,IAAI9V,SAKlG,OACI,oCACI,kBAAC,IAAS,CACNgW,gBAAsC,WAArB/2B,EAAMqJ,YAEvB,kBAAC,IAAgB,CACb2tB,WAAY,kBAAC,IAAc,OAE3B,kBAAC,IAAc,CAACh1B,UAAW2E,EAAQkvB,aACnC,kBAAC,IAAU,CAAC7zB,UAAW2E,EAAQ+uB,SAAO,iBAE1C,kBAAC,IAAgB,KACb,kBAAC,IAAI,CAAC7qB,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAK,CACFxnB,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,WAAa,UAC7CP,MAAM,MACN2K,UAAW4qB,KAMnB,kBAAC,IAAI,CAACvrB,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAK,CACFxnB,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,mBAAqB,kBACrDP,MAAM,mBACN2K,UAAWqqB,KAMnB,kBAAC,IAAI,CAAChrB,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAK,CACFxnB,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,YAAc,WAC9CoK,UA5JP,SAACsqB,GAClB,IAAAzpB,EAAgBypB,EAAS,MAAlBxpB,EAASwpB,EAAS,KAEjC,OACI,kBAAC,IAAgB,KACTzpB,EAAK,CACT1L,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCqB,SAAU8zB,EAAU9zB,SACpBa,WAAYyJ,EAAK1J,MAAQkzB,EAAUjzB,gBAAasB,EAChDtD,MAAM,WACNiB,UAAW2E,EAAQf,UACnBvE,YAAa,SAACR,EAA0BS,GACpCiL,EAAMpK,SAAStB,IAEnBiC,MAAO0J,EAAK1J,MACZD,SAAUmzB,EAAUnzB,SACpBT,eAAe,MA6IS60B,SAAUp0B,EACVA,UAAU,EACVE,WAAY,0BAGpB,kBAAC,IAAI,CAACgI,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAK,CACFxnB,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,gBAAkB,eAClDoK,UA/IH,SAACsqB,GACtB,IAAAzpB,EAAgBypB,EAAS,MAAlBxpB,EAASwpB,EAAS,KACjC,OACI,kBAAC,IAAoB,KACbzpB,EAAK,CACT1L,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCqB,SAAU8zB,EAAU9zB,SACpBa,WAAYyJ,EAAK1J,MAAQkzB,EAAUjzB,gBAAasB,EAChDtD,MAAM,WACNiB,UAAW2E,EAAQf,UACnBvE,YAAa,SAACR,EAA0BS,GACpCiL,EAAMpK,SAAStB,IAEnBiC,MAAO0J,EAAK1J,MACZD,SAAUmzB,EAAUnzB,SAEpBT,eAAe,SAqIC,kBAAC,IAAI,CAAC2I,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAK,CACFxnB,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,aAAe,YAC/CP,MAAM,QACN2K,UAAW1L,EAAMmI,wBAA0B,IAAsBC,KAC3D0uB,EACAR,KAMd,kBAAC,IAAI,CAACvrB,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAK,CACFxnB,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,kBAAoB,iBACpDP,MAAM,aACN2K,UAAW1L,EAAMmI,wBAA0B,IAAsBC,KAC3D0uB,EACAR,KAMd,kBAAC,IAAI,CAACvrB,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAK,CACFxnB,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,YAAc,WAC9CP,MAAM,gBACN2K,UAAW1L,EAAMmI,wBAA0B,IAAsBC,KAC3DguB,EACAL,KAMd,kBAAC,IAAI,CAAChrB,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAK,CACFxnB,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,cAAgB,aAChDoK,UAtKD,SAACsqB,GACxB,IAAAzpB,EAAgBypB,EAAS,MAAlBxpB,EAASwpB,EAAS,KACjC,OACI,kBAAC,IAAsB,KACfzpB,EAAK,CACT1L,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KACnCqB,SAAU8zB,EAAU9zB,SACpBa,WAAYyJ,EAAK1J,MAAQkzB,EAAUjzB,gBAAasB,EAChDtD,MAAM,cACNiB,UAAW2E,EAAQf,UACnBvE,YAAa,SAACR,EAA0BS,GACpCiL,EAAMpK,SAAStB,IAEnBiC,MAAO0J,EAAK1J,MACZD,SAAUmzB,EAAUnzB,SAEpBT,eAAe,MAuJS60B,SAAUp0B,EACVA,UAAU,EACVE,WAAY,6BAGpB,kBAAC,IAAI,CAACgI,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CACJjB,aAAc,CAACX,QAAQ,EAAM8D,YAAY,KAGxC,SAAC,GAAe,OAAP,SACCpE,eACH,kBAAC,IAAK,CACFxH,KAAMtB,EAAMsB,KAAUtB,EAAMsB,KAAI,mBAAqB,oBAEpD,SAAC,G,IAAEiL,EAAK,QAAM,OAAO,OAClB,kBAAC,IAAS,KACFA,EAAK,CACTxL,MAAM,mBACNkM,WAAW,EACXjL,UAAW2E,EAAQmvB,mBAM7B,iB,yGCnVtCoB,E,2aAbN1xB,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,GAGNyxB,UAAW,CACP,SAAU,CACN7U,UAAW,0BAM3B,SAAY4U,GACR,qCACA,qCACA,+CACA,qCACA,yCALJ,CAAYA,MAAsB,KA+B3B,IAAME,EAA8C,SAAAp3B,GAEvD,IAAM2G,EAAUnB,IAEV,EAAoB,mBAA6B,CACnDvF,WAAW,EACX6C,MAAO9C,EAAM8C,MACb5C,KAAM,KAHHC,EAAK,KAAEC,EAAQ,KAMtB,qBAAU,WACNC,MAED,IAEH,IAAMA,EAAY,WAEdD,EAAS,EAAD,KACDD,GAAK,CACRF,WAAW,KAyLhB,SACHuB,EACAkC,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOuzB,EACPrzB,UAAW,CACPmJ,KAAM3L,EAAO2L,MAEjBtJ,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MAxMZ82B,CAJ6C,CACzCnqB,KAAM+pB,EAAuBl3B,EAAMu3B,wBAKnC,GAEA,SAACr3B,GAAS,OAAAK,EAAeL,MAEzB,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrCD,EAAiB,SAACL,GACpB,IAAIs3B,EAA+B,GAEnCA,EAAQjmB,KAAK,CACTxQ,MAAO,OACPF,MAAO,QAGXX,EAAK8U,OAAOyiB,eAAetmB,SAAQ,SAACvQ,GAChC42B,EAAQjmB,KAAK,CACTxQ,MAAOH,EAAO2H,YACd1H,MAAOD,EAAOsU,YAItB9U,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ3Q,KAAMs3B,EACNv3B,WAAW,QAMjBkB,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,oCACM1B,EAAM8B,SAEA,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAchC,EAAMgC,UAAS,IAAI2E,EAAQjB,KACzC7E,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtD4F,QAAS,CACLmL,MAAOnL,EAAQwwB,WAGnB10B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO3C,EAAM2C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAchC,EAAMgC,UAAS,IAAI2E,EAAQjB,KACzC7E,MAAOb,EAAMa,MACboB,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtD4F,QAAS,CACLmL,MAAOnL,EAAQwwB,WAGnB10B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO3C,EAAM2C,UAIrBE,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,eA6D1C,I,EAAM4zB,EAAsB,IAAG,w4B,kfCtKxB,SAASK,EAAiBh0B,EACAC,EAEAC,GAE7B,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cAEvE,SAAOI,MAAM,CACTA,MAAO6zB,EACP3zB,UAAW,GACXH,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAGhC,SAASo3B,EAAkBl0B,EACAC,EAEAC,GAE9B,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cAEvE,SAAOI,MAAM,CACTA,MAAO+zB,EACP7zB,UAAW,GACXH,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAGhC,I,oBAAMm3B,EAAW,IAAG,mOASdE,EAAe,IAAG,6RAYlBC,EAA+B,IAAG,myBAgBlCC,EAA4B,IAAG,qlDAwB/BC,EAA6B,IAAG,+wBAgBhCC,EAA8C,IAAG,+jCAkBjDC,EAAuC,IAAG,6mCAkB1CC,EAAmC,IAAG,yzCAoBtCC,EAAmC,IAAG,iQAKtCC,EAAmC,IAAG,oW,01CCvR7CC,EAAoB,IAAUjW,KAAqB,SAACriB,G,MAAU,UAChEkG,QAAS,OACTE,eAAgB,SAChBD,WAAY,WACX,qBAA2B,CACxBoO,SAAUvU,EAAMyF,MAAMmgB,SAASC,GAAG0S,O,KAKpCC,EAAkB,IAAUnW,KAAqB,SAACriB,GAAU,OAC9DkG,QAAS,eACTP,MAAO,OACPgW,OAAQ,WAGN8c,EAAgB,IAAUpW,KAAwB,SAACriB,GAAU,OAC/DkG,QAAS,OACTE,eAAgB,SAChBD,WAAY,aAGVuyB,EAAkB,IAAUrW,KAAwB,SAACriB,GAAU,OACjEkG,QAAS,OACTE,eAAgB,SAChBD,WAAY,aAGVwyB,EAAgB,YAAU,IAAV,EAAiD,SAAC34B,GAAU,OAC7E4b,UAAW,YAGVgd,EAAoB,IAAUvW,KAAwB,SAACriB,GAAU,OACnEkG,QAAS,eACTP,MAAO,OACPiW,UAAW,YAGTid,EAAsB,IAAUxW,KAAwB,SAACriB,GAAU,OACrEkG,QAAS,eACTP,MAAO,OACPiW,UAAW,aAGTkd,EAAiB,IAAUzW,KAAwB,SAACriB,GAAU,OAChEkG,QAAS,OACTE,eAAgB,SAChBD,WAAY,SAEZwV,OAAQ,WAGNod,EAAW,IAAU1W,KAAwB,SAACriB,GAAU,OAC1D2F,MAAO,OACP6c,UAAW,OACXwW,eAAgB,UAChBC,iBAAkB,YAClBC,mBAAoB,oBAGlBC,EAAkB,YAAU,IAAV,EAAmD,SAACn5B,GAAU,OAClF4b,UAAW,YAGTwd,EAAoB,IAAU/W,KAAwB,SAACriB,GAAU,OACnEkG,QAAS,eACTP,MAAO,OACP,oBAAqB,CACjBO,QAAS,OACTP,MAAO,YAIT0zB,EAAsB,IAAUhX,KAAwB,SAACriB,GAAU,OACrEkG,QAAS,eACTP,MAAO,OACP,oBAAqB,CACjBO,QAAS,OACTP,MAAO,QAEX,kCAAmC,CAC/B/C,OAAQ,OAIV4C,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFS,WAAY,SACZD,QAAS,OACTyV,OAAQ,OACRvV,eAAgB,SAChB4L,SAAU,SAEdgC,KAAM,CACFpR,OAAQ6C,EAAMqF,UAAY,GAE9B4hB,MAAO,CACHxmB,QAAS,OACTymB,SAAU,QAEd2M,cAAe,CACXpzB,QAAS,OACTE,eAAgB,SAChBD,WAAY,eAKxB,cAGI,WAAYnG,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAyDtB,OA9DsC,OASlC,YAAAkK,OAAA,sBAEI,OACI,kBAAC0uB,EAAiB,KAEW,GAArB7R,KAAKvlB,OAAOX,MAIJ,kBAAC,IAAK,CACFiD,MAAO+lB,GACPhmB,YAAY,gBAEX,SAAC,G,IAAC5B,EAAO,UAAEa,EAAK,QAAE5C,EAAI,OACbq5B,EAAct3B,GAAWa,EAAU,KAAO5C,EAAKO,QAAQopB,cACzD3d,EAAWqtB,EAAYA,EAAUrtB,SAAW,KAE1CstB,EAAYv3B,GAAWa,EAAU,KAAO5C,EAAKu5B,OAC7C5R,EAAe2R,EAAUA,EAAQ3R,aAAe,KAEhD6R,EAAaz3B,GAAWa,EAAU,KAAO5C,EAAKy5B,QAC9CC,EAAaF,EAAWA,EAASE,WAAa,KAEpD,GAAI,EAAKp4B,OAAOtB,KAAM,CAClB,IAAI,EAAkB,EAAKsB,OAAOtB,KAAK6nB,gBAIvC,GAAIF,GAAqD,cAArCA,EAAaC,qBAAuC,IAAoB8R,EAAY,CACpG,IAAM3S,EAAwB,IAAeiB,MAAK,SAAAC,GAAgB,OAAAA,EAAajc,WAAa,KACxF+a,IACA/a,EAAW+a,EAAsB/a,WAK7C,OACI,kBAACysB,EAAa,CACV93B,MAAO,EAAKW,OAAOX,MACnBkL,aAAc,IAAqBC,QACnCC,OAAQC,OAOhC,gCAMpB,EA9DA,CAAsC,IAAM2tB,WAgE5C,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAoCtB,OAzCoD,OAShD,YAAAkK,OAAA,sBAEI,OACI,kBAAC0uB,EAAiB,KAEV7R,KAAKvlB,OAAOX,MAAQ,EAIZ,kBAAC,IAAK,CACFiD,MAAO+lB,KAEN,SAAC,G,IAAC5nB,EAAO,UAAEa,EAAK,QAAE5C,EAAI,OACbq5B,EAAct3B,GAAWa,EAAU,KAAO5C,EAAKO,QAAQopB,cACvD3d,EAAWqtB,EAAYA,EAAUrtB,SAAW,KAClD,OACI,kBAACysB,EAAa,CACV93B,MAAO,EAAKW,OAAOX,MACnBkL,aAAc,IAAqB0d,QACnCxd,OAAQC,OAOhC,gCAMpB,EAzCA,CAAoD,IAAM2tB,WA2C1D,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAuBtB,OA5BoC,OAShC,YAAAkK,OAAA,WAEI,OACI,kBAACwuB,EAAe,KAER3R,KAAKvlB,OAAOX,MAAQ,EAGZ,8BACKkmB,KAAKvlB,OAAOX,MAAM+Q,WAAWwT,QAAQ,wBAAyB,MAI3E,gCAMpB,EA5BA,CAAoC,IAAMyU,WA8B1C,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAoBtB,OAzBwC,OASpC,YAAAkK,OAAA,WAEI,OACI,kBAAC2uB,EAAmB,KAEZ9R,KAAKvlB,OAAOX,MAAQ,EAEhB,kBAACs4B,EAAe,CACZt4B,MAAOkmB,KAAKvlB,OAAOX,QAG3B,gCAKpB,EAzBA,CAAwC,IAAMg5B,WA2B9C,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAuCtB,OA5CkC,OAS9B,YAAAkK,OAAA,WACI,GAAI6c,KAAKvlB,OAAOX,MAAO,CAKnB,IAAIi5B,EAAqB,IAAI/Y,KAAKA,KAAKgZ,MAAMhT,KAAKvlB,OAAOX,MAAM+Q,aAI/D,OACI,kBAAC6mB,EAAa,KACV,6BACI,kBAAC,IAAY,CACTuB,OAAO,QACPC,QAAS,GACTC,cAAc,MAEd,8BACI,kBAAC,I,CAEGr5B,MAAOi5B,EACPK,IAAK,UACLlZ,MAAO,QACPmZ,KAAM,gBASlC,OAAO,+BAEf,EA5CA,CAAkC,IAAMP,WAwExC,GA1BA,YAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EALY,OAS9B,YAAAkK,OAAA,WAEI,OAAI6c,KAAKvlB,OAAOX,MAER,kBAAC43B,EAAa,KACV,kBAAC,IAAiB,CACd53B,MAAOkmB,KAAKvlB,OAAOX,MACnBkL,aAAc,IAAqBsuB,UACnCC,cAAc,KAKvB,+BAtBf,CAAkC,IAAMT,WA0BxC,YAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAuBtB,OA5BsC,OASlC,YAAAkK,OAAA,WAEI,OAAI6c,KAAKvlB,OAAOX,OAASkmB,KAAKvlB,OAAOX,MAAMA,MAEnC,kBAAC43B,EAAa,KACT1R,KAAKvlB,OAAOX,MAAMA,OAIpBkmB,KAAKvlB,OAAOX,YAAqCwD,IAA5B0iB,KAAKvlB,OAAOX,MAAMA,MAE1C,kBAAC43B,EAAa,KACT1R,KAAKvlB,OAAOX,OAKlB,+BAEf,EA5BA,CAAsC,IAAMg5B,YA8B5C,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAmBtB,OAxBsC,OASlC,YAAAkK,OAAA,WAEI,OAAI6c,KAAKvlB,OAAOX,MAER,kBAAC43B,EAAa,KACV,kBAAC,IAAiB,CACd53B,MAAOkmB,KAAKvlB,OAAOX,MACnBkL,aAAc,IAAqBwuB,cACnCD,cAAc,KAKvB,+BAEf,EAxBA,CAAsC,IAAMT,WA0B5C,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EA4CtB,OAjD2C,OASvC,YAAAkK,OAAA,WAEI,GAAI6c,KAAKvlB,OAAOX,MAAO,CAKnB,IAAIi5B,EAAqB,IAAI/Y,KAAKA,KAAKgZ,MAAMhT,KAAKvlB,OAAOX,MAAM+Q,aAC3D4oB,EAAaV,EAAmBW,oBAAsB,GAG1D,OAFAX,EAAmBjD,SAAUiD,EAAmBY,WAAaF,GAGzD,kBAAC/B,EAAa,KACV,6BACI,kBAAC,IAAY,CACTuB,OAAO,QACPC,QAAS,GACTC,cAAc,MAEd,8BACI,kBAAC,I,CAEGr5B,MAAOi5B,EACPK,IAAK,UACLlZ,MAAO,QACPmZ,KAAM,UACNO,KAAM,UACNC,OAAQ,UACRC,QAAQ,QAUpC,OAAO,+BAEf,EAjDA,CAA2C,IAAMhB,WAmDjD,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,EAEd,EAAK86B,qBAAuB,EAAKA,qBAAqB7X,KAAK,G,EAqCnE,OA5CkC,OAU9B,YAAA/Y,OAAA,WACI,YAA0B7F,IAAtB0iB,KAAKvlB,OAAOX,MAER,kBAACy3B,EAAiB,KACbvR,KAAK+T,wBACL/T,KAAKvlB,SAAiC,IAAtBulB,KAAKvlB,OAAOX,OAAwC,SAAtBkmB,KAAKvlB,OAAOX,MAMvD,GALA,kBAAC,IAAI,CACDk6B,SAAU,aACV/4B,UAAU,oBASvB,+BAIH,YAAA84B,qBAAR,WACI,GAAI/T,KAAKvlB,QAAgC,SAAtBulB,KAAKvlB,OAAOX,MAAkB,CAC7C,IAAIm6B,EAASjU,KAAKvlB,OAAOy5B,UAAUC,UAAUnU,KAAKvlB,OAAO25B,KAAKva,OAE9D,YAAevc,IAAX22B,GAAmC,OAAXA,EAClBA,EAAOI,YAAYza,WAAa,IAE/B,8BAGX,OAAO,+BAGnB,EA5CA,CAAkC,IAAMkZ,WAoExC,GAtBA,YAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,EAGdwW,QAAQsQ,IAAI,EAAKtlB,OAAOX,O,EARI,OAWhC,YAAAqJ,OAAA,WACI,OACI,kBAACsuB,EAAe,KACZ,kBAAC,IAAM,CAAC91B,QAAQ,YAAYb,KAAK,QAAQD,MAAM,aAAW,eAd1E,CAAoC,IAAMi4B,WAsB1C,YAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAyBtB,OA9BmC,OAS/B,YAAAkK,OAAA,WACI,YAA0B7F,IAAtB0iB,KAAKvlB,OAAOX,MAER,kBAACi4B,EAAc,KACX,kBAACC,EAAQ,CACL/2B,UAAU,aACVD,MAAO,CAAEs5B,gBAAiB,OAAOtU,KAAKvlB,OAAOX,MAAK,QAa3D,+BAEf,EA9BA,CAAmC,IAAMg5B,YAgCzC,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAqBtB,OA1BsC,OASlC,YAAAkK,OAAA,WACI,YAA0B7F,IAAtB0iB,KAAKvlB,OAAOX,MAER,kBAACu4B,EAAiB,CAACp3B,UAAU,uBACzB,kBAAC,IAAW,CACRod,QAAS2H,KAAKvlB,OAAOX,MAGrBwJ,GAAI0c,KAAKvlB,OAAOX,OAEfkmB,KAAKvlB,OAAOX,QAKtB,+BAEf,EA1BA,CAAsC,IAAMg5B,WA4B5C,cAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EA8BtB,OAnC8C,OAS1C,YAAAkK,OAAA,WACI,QAA0B7F,IAAtB0iB,KAAKvlB,OAAOX,OAA6C,OAAtBkmB,KAAKvlB,OAAOX,MAAgB,CAE/D,IAAMy6B,EAAYvU,KAAKvlB,OAAOX,OAAS,GAEvC,OACI,kBAACu4B,EAAiB,CAACp3B,UAAU,uBACzB,kBAAC,IAAW,CACRod,QACI,yBACImc,wBAAyB,CACrBC,OAAQF,KAMpBjxB,GAAa,OAATixB,QAAS,IAATA,SAAaj3B,GAEhBi3B,EAAUlW,QAAQ,UAAW,OAK9C,OAAO,+BAEf,EAnCA,CAA8C,IAAMyU,WAqCpD,eAII,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,EACd,EAAKy7B,QAAU,EAAKA,QAAQxY,KAAK,G,EAmCzC,OA1C0C,OAUtC,YAAAwY,QAAA,SAAQr6B,GACJ,IAAI4M,EAAU5M,EAAM2M,OAAOC,QACvB0tB,EAAQ3U,KAAKvlB,OAAOw5B,OAAOW,WAC/B5U,KAAKvlB,OAAO25B,KAAKS,aAAaF,EAAO1tB,IAGzC,YAAA9D,OAAA,sBACI,YAA0B7F,IAAtB0iB,KAAKvlB,OAAOX,MAQR,kBAAC,IAAQ,CACLS,KAAK,gBACLa,SAAU,SAACf,GAAU,SAAKq6B,QAAQr6B,IAClC4M,QAAS+Y,KAAKvlB,OAAOX,QAKzB,kBAAC,IAAQ,CACLS,KAAK,gBACLa,SAAU,SAACf,GAAU,SAAKq6B,QAAQr6B,IAClC4M,SAAS,KAM7B,EA1CA,CAA0C,IAAM6rB,WA4ChD,eAGI,WAAY75B,GAAZ,MACI,YAAMA,IAAM,K,OACZ,EAAKwB,OAASxB,E,EAoCtB,OAzCwC,OASpC,YAAAkK,OAAA,WACI,GAAI6c,KAAKvlB,OAAOX,MAAO,CAEnB,IAAIg7B,EAAc,cAAYC,cACxBC,EAAe,IAAYhV,KAAKvlB,OAAOX,OAC7C,GAAIk7B,EAAc,CACd,IAAMC,EAAe,eAAaC,qBAAqBF,EAAaG,eACpEL,EAAc,cAAYM,kBAAkBH,GAKhD,OACI,kBAAC3C,EAAmB,CAACr3B,UAAU,uBAO3B,kBAAC,SAAM,CACH65B,YAAaA,EACbO,UAAU,EACVj6B,SAAU,WAAM,gBAOhC,OAAO,+BAEf,EAzCA,CAAwC,IAAM03B,WA2CjCwC,GAAkD,SAAC,G,IAACx7B,EAAK,QAC5D8F,EAAUnB,IAqChB,OACI,kBAAC,IAAM7D,SAAQ,KApCF,WACb,GAAId,EAAO,CACP,IAAI,EAAa,GA2BjB,OA1BK2X,MAAM8jB,QAAQz7B,GAMf,EAAaA,EAJb07B,KAAKxC,MAAMl5B,GAAOsQ,SAAS,SAACpG,GACxB,EAAWwG,KAAKxG,MAOpB,yBAAK/I,UAAW2E,EAAQ+lB,OAGhB,EAAW/rB,KAAI,SAAC67B,GACZ,OAEI,kBAAC,IAAI,CACDx6B,UAAW2E,EAAQqN,KACnB1Q,IAAKk5B,EAAS37B,MACdE,MAAOy7B,EAASz7B,YASxC,OAAO,KAMN07B,KAKAC,GAAoD,SAAC,G,IAAC77B,EAAK,QAkCpE,OACI,kBAAC,IAAMc,SAAQ,KAhCD,WAEd,IAAKd,EACD,OAAO,KAGX,IAAIy6B,EAAY,EAsBhB,OAjBQA,EAHa,kBAAVz6B,EAEH0gB,MAAMob,SAAS97B,IACHA,EAAMyV,OAGNqmB,SAAS97B,GAGbA,EAIZ,6BACI,kBAAC,IAAM,CACHu7B,UAAU,EACVv7B,MAAOy6B,KASdsB,KAwBP/S,GAAgB,IAAG,gZ,mMCzzBZgT,EAAmB,SAACr7B,EAAwBqC,GAC/C,MAA2B,YAAuCi5B,EAAe,CACnFj5B,YAAaA,EACbG,UAAW,CACP+4B,WAAYv7B,EAAOu7B,cAG3B,MAAO,CACH78B,KAPQ,OAQR4C,MARe,QASfb,QATwB,YAiC1B66B,EAAgB,IAAG,8e,ohBCzBnBt3B,EAAY,aAAW,SAACC,GAC5B,mBAAa,CACXC,KAAM,CACFC,MAAO,aA2BFq3B,EAAsD,SAAAh9B,GAE/D,IAAM2G,EAAUnB,IAEV,EAAoB,mBAAiC,CACvDvF,WAAW,EACXQ,QAAS,KAFNN,EAAK,KAAEC,EAAQ,KAKtB,qBAAU,WACNC,MAED,IAEH,IAAMA,EAAY,WAEdD,EAAS,EAAD,KACDD,GAAK,CACRF,WAAW,KAGfg9B,GACI,GAEA,SAAC/8B,GAAS,OAAAg9B,EAAoBh9B,MAE9B,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrC08B,EAAsB,SAACh9B,GACzBE,EAAS,EAAD,KACDD,GAAK,CACRM,QAASP,EAAK8U,OAAOmoB,UAChBx8B,KAAK,SAACC,GAAsB,cAAKA,GAAM,CAAEC,MAAOD,EAAO2H,YAAaxH,MAAOH,EAAO2H,iBAClF+M,MAAK,SAACC,EAAGC,GAAM,OAAAD,EAAEJ,SAAWK,EAAEL,UAAY,EAAII,EAAEJ,SAAWK,EAAEL,SAAW,EAAI,KACjFlV,WAAW,MAKbkB,EAAe,SAACC,EAA8BP,GAEhD2V,QAAQsQ,IAAI,WAAYjmB,GACpBb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,KAAOtB,EAAMsB,KAAO,YAIrDC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,yBAAKM,UAAc2E,EAAQjB,KAAI,IAAI1F,EAAMgC,WACnChC,EAAM8B,SAEA,kBAAC,IAAY,CACTjB,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMM,QACf28B,qBAAsBp9B,EAAMo9B,qBAC5Bh7B,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAA,EAAMA,QAAUyB,EAAOzB,OAC7D2B,OAAQxC,EAAMwC,OAEdC,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MAAQf,EAAMe,MAAQ,cACnC2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACT5C,MAAOb,EAAMa,MACboB,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMM,QACf28B,qBAAsBp9B,EAAMo9B,qBAC5Bh7B,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAA,EAAMA,QAAUyB,EAAOzB,OAC7D2B,OAAQxC,EAAMwC,OAEdC,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MAAQf,EAAMe,MAAQ,cACnC2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,eAanC,SAASw5B,EACZv5B,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOw5B,EACPt5B,UAAW,GACXH,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MAoBpB,I,EAAM88B,EAAiB,IAAG,wa,msBCpNpB93B,EAAY,aAAW,SAACC,GAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,QAEXC,UAAW,CACPD,MAAO,QAEXE,aAAc,CACVF,MAAO,QAEXG,YAAa,CACTlE,MAAO,IAAUmE,cAAcC,SAEnCu3B,SAAU,CACN3qB,WAAY,GACZC,cAAe,IAEnB2qB,YAAa,CACTt3B,QAAS,OACTC,WAAY,SACZwV,OAAQ,QAEZb,cAAe,CACXzK,SAAU,QACVmS,UAAW,YACXtc,QAAS,OACTC,WAAY,SACZC,eAAgB,eAuBfq3B,EAA4D,SAAEz9B,G,MACjE2G,EAAUnB,IAEVk4B,EAAc,cAEbC,EAAY,mBAAiBC,KAAKC,SAASjsB,YAAW,GAEvDksB,EAAgB,YAAiB,CAAEf,YAAY,GAAQ,eAEvDgB,EAAmCD,EAAc59B,KAAyB,QAAlB,EAAA49B,EAAc59B,YAAI,eAAE89B,SAAShxB,KAC1ErM,KAAI,SAACC,GAAiB,OAAEC,MAAOD,EAAOq9B,aAAcl9B,MAAOH,EAAOs9B,aAClE9kB,QAAO,SAACrO,GAAS,MAAe,WAAfA,EAAKhK,SAA6C,GAE9Eo9B,EAA0C,CAC5Crd,KAAM,IAAIC,KACVqd,MAAO,GACP1sB,MAAO,KACPuL,OAAQjd,EAAMid,OAASjd,EAAMid,OAAS,KACtCohB,MAAON,EACPO,WAAW,EACXC,eAAe,EACfC,eAAe,GAmDbC,EAA+B,SAACr1B,G,MAClC,MAAO,CACHtE,WAAyB,QAAb,EAAAsE,EAAO6T,cAAM,eAAEpc,MAC3Bu9B,MAAOM,EAASt1B,EAAOg1B,OACvB1sB,MAAOgsB,EAAYx9B,KAAMy5B,QAAQC,WAAa,KAAOxwB,EAAOsI,MAC5DitB,UAAWjB,EAAYx9B,KAAMy5B,QAAQC,WAAaxwB,EAAOi1B,MAAM19B,KAAI,SAACqM,GAA4B,OAAAA,EAAKnM,SAAO+9B,KAAK,KAAO,OAI1HF,EAAW,SAACN,GACd,OAAOA,EAAMz9B,KAAI,SAACk+B,GACd,MAAO,CACHC,KAAMD,EAASC,KACfx9B,KAAMu9B,EAASv9B,KACfkQ,OAAQqtB,EAASrtB,OACjByE,OAAQ4oB,EAAS5oB,YAavB8oB,EAA8B,SAACxf,EAAgBnV,EAA0ChB,GACvFmW,GACAnV,EAAKwC,OAAM,WACPxC,EAAKe,OAAO,iBAAiB,GAC7Bf,EAAKe,OAAO,iBAAiB,MAnExB,SAACf,EAA0ChB,GAExD,SACKtC,OAAO,CACJC,SAAU,IACV/C,UAAW,CACPuI,MAAOkyB,EAA6Br1B,MAI3CnF,MAAK,SAACC,GACCA,EAAQhE,OACmB,OAAvBgE,EAAQhE,KAAK4C,YAAyCuB,IAAvBH,EAAQhE,KAAK4C,OAC5C,YAAiB,KAAM,yBAA0B,QAEjDsH,EAAKe,OAAO,iBAAiB,GACzBnL,EAAMuK,SACNvK,EAAMuK,WAGV,YAAiB,6BAA8BrG,EAAQhE,KAAK4C,MAAO,aAM9EqB,OAAM,SAAC3D,GACJ4J,EAAKe,OAAO,iBAAiB,GAC7B,YAAiB,6BAA8B3K,EAAQ,YAyC3Dw+B,CAAS50B,EAAMhB,IAEfgB,EAAKe,OAAO,iBAAiB,IAK/BtI,EAAW,SAAChC,GACd,OAAOA,OAAQwD,EAAY,YAoQ/B,OACI,kBAAC,IAAM1C,SAAQ,KACX,kBAAC,IAAM,CACH2I,MAAM,EACNC,QAASvK,EAAMuK,QACfvI,UAAW2E,EAAQjB,KACnBu5B,OAAQ,SAER,kBAAC,IAAW,CACR50B,GAAG,oBACHrI,UAAW2E,EAAQb,aAAW,mBAzQtC43B,EAAYz7B,SAAW67B,EAAc77B,QAEjC,kBAAC,IAAa,CAAC2I,UAAU,EAAM5I,UAAW2E,EAAQmU,eAC9C,6BACI,kBAAC,IAAQ,QAOrB,kBAAC,IAAI,CACD3R,SAAU,SAACC,EAAQgB,GAA6C,OA3G3D,SAACA,EAA0ChB,GAKxD,OAHAoN,QAAQsQ,IAAI,YACZ1c,EAAKe,OAAO,iBAAiB,GAEtB,IAAI+zB,SAAc,SAAAC,GACrBC,YAAW,WACPD,MAED,QAkGiEh2B,CAASiB,IACzEd,cAAe60B,EACfkB,mBAAoB,WAAM,UAC1BC,yBAAyB,EACzBv1B,aAAc,CAACC,YAAY,EAAMC,UAAU,GAC3CC,OAAQ,SAAC,G,IAACC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAwB,OAAd,WAAQ,SACtD,0BAAMb,SAAU,SAAA/H,GAAS,OAAA+I,EAAa/I,IAAQiJ,GAAG,wBAC7C,kBAAC,IAAO,CACJN,aAAc,CAAEE,UAAU,EAAMb,QAAQ,GAExCjH,SAAU,SAAAnC,IAhDP,SAACoK,EAA0Cm1B,GAC7DA,EAAYt1B,UACbG,EAAKe,OAAO,aAAa,GA+CLq0B,CAAmBp1B,EAAMpK,MAGjC,kBAAC,IAAO,CAAC+J,aAAc,CAAEX,QAAQ,KAE5B,SAAC,G,IAAEA,EAAM,SAAO,OACb,kBAAC,IAAS,CACNoB,MAAM,+BAEN4U,QAAS,iDAAgDhW,EAAOg1B,MAAMhqB,MAAQ,EAAI,YAAc,YAAU,KAC1GiL,KAAMjW,EAAOm1B,cACbjf,QAAS,SAACC,GAAmB,OAAAwf,EAA4Bxf,EAAOnV,EAAMhB,IACtEoW,cAAe,KACfC,WAAY,WAIpB,kBAAC,IAAa,CAAC7U,UAAU,GACrB,kBAAC,IAAI,CAACC,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAI,CAACH,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GACjBhL,EAAMid,OACH,uBAAGjb,UAAW2E,EAAQ62B,aAAcx9B,EAAMid,OAAOlc,OAEjD,kBAAC,IAAK,CACFO,KAAK,WAEJ,SAAC,G,IAAEiL,EAAK,QAAa,OAAP,OACX,kBAAC,IAA0B,CACvBxL,MAAM,SACNO,KAAK,SACLuB,UAAU,EACVxB,YAAa,SAACqL,EAA8BpL,GACxC,OAAAiL,EAAMpK,SAASuK,IAEnB7L,MAAO0L,EAAM1L,MAAQ0L,EAAM1L,MAAQ,WAMvD,kBAAC,IAAI,CAACkK,MAAM,EAAMC,GAAI,GAClB,kBAAC,IAAK,CACF1J,KAAK,SAGJ,SAAC,G,IAAEiL,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,yBAAsB,KACfD,EAAK,CACTvK,UAAW2E,EAAQf,UACnB7E,MAAM,OACNkL,OAAO,aACPoI,YAAY,aACZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BypB,WAAY,CAACC,aAAc,OAC3BO,gBAAiB,CAAEC,QAAQ,GAC3B5zB,WACIyJ,EAAK1J,OACL0J,EAAKC,QACC,mBACA,GAGVmqB,oBAAoB,IAAI7V,MAAO8V,SAAS,GAAI,EAAG,EAAG,YAOzE6G,EAAYx9B,KAAMy5B,QAAQC,YACvB,kBAAC,IAAI,CAAC7uB,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,QACL21B,SAAUp0B,IAET,SAAC,G,IAAE0J,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,IAAY,KACLD,EAAK,CACTxL,MAAM,QACNe,UAAU,EACVE,UAAW2E,EAAQf,UACnBvE,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnB5J,MAAO0J,EAAK1J,MACZC,WAAYyJ,EAAK1J,MACjBD,UAAU,EACVk6B,YAAY,SAMhC,kBAAC,IAAI,CAAChyB,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAK,CACF1J,KAAK,UAGJ,SAAC,G,IAAEiL,EAAK,QAAa,OAAP,OACX,yBAAKvK,UAAW2E,EAAQ42B,UACpB,kBAAC,IAAY,KACLhxB,EAAK,CACTjJ,IAAKq6B,EACL8B,YAAa,KAEbC,eAAe,EACfC,oBAAoB,EACpBC,WAAY,GACZz9B,SAAU,SAACi8B,GACP,IAAIyB,EAAa,KAAuBtzB,EAAM1L,OAAK,GAC7Ci/B,EAAW1B,EAAMhlB,QAAO,SAAC0lB,GAC3B,OAAQe,EAAcE,MAAK,SAACh1B,GACxB,OAAOA,EAAKzJ,OAASw9B,EAAKx9B,MAAwB,IAAhByJ,EAAKkL,aAG3C6pB,GAAYA,EAASxpB,OAAS,IAC9BwpB,EAAS3uB,SAAQ,SAAC2tB,GACd,IAAMkB,EAA6B,CAC/BxuB,OAAQ,KACRstB,KAAMA,EACN7oB,OAAQ,EACR3U,KAAMw9B,EAAKx9B,KACX2+B,IAAK,IAETJ,EAActuB,KAAKyuB,MAEvBzzB,EAAMpK,SAAS09B,KAGvBK,SAAU,SAACpB,GACP,IAAIe,EAAa,KAAuBtzB,EAAM1L,OAAK,GAEnDg/B,EAAcl/B,KAAI,SAACoK,GACX+zB,EAAKx9B,OAASyJ,EAAKzJ,OACnByJ,EAAK+zB,KAAOA,EACZ/zB,EAAKkL,OAAS,MAItB,IAAMkqB,EAAgBN,EAAczmB,QAAO,SAACrO,GACxC,OAAuB,IAAhBA,EAAKkL,QAAgC,OAAhBlL,EAAKyG,UAErCjF,EAAMpK,SAASg+B,IAGnBC,OAAQ,SAAChC,EAAeh9B,GAKpBoV,QAAQsQ,IAAI1lB,aAOlCs8B,EAAYx9B,KAAMy5B,QAAQC,YACxB,kBAAC,IAAI,CAAC7uB,MAAM,EAAMC,GAAI,IAClB,kBAAC,IAAO,CAACjB,aAAc,CAAEX,QAAQ,KAE5B,SAAC,GAAe,OAAP,SACN,kBAAC,IAAK,CACF9H,KAAK,UAEJ,SAAC,G,IAAEiL,EAAK,QAAa,OAAP,OACX,kBAAC,IAAS,KACFA,EAAK,CACT7J,QAAQ,WACR3B,MAAM,QACNkM,WAAW,EACXjL,UAAW2E,EAAQf,UACnBy6B,KAAM,cAY1C,kBAAC,IAAa,KACV,kBAAC,IAAO,CAACt2B,aAAc,CAAEX,QAAQ,EAAMa,UAAU,EAAMD,YAAY,KAE9D,SAAC,G,IAAEZ,EAAM,SAAEa,EAAQ,WAAO,OACvB,oCACI,kBAAC,I,CAEG/H,SAAU8H,GAAcC,KAAcb,EAAO0X,MAAQ1X,EAAO6T,QAAU7T,EAAOg1B,MAAM9nB,OAAS,IAAMlN,EAAOo1B,cACzG58B,MAAM,UACNuL,KAAK,SACLlC,QAAS,WAAM,OAAAb,EAAKgD,WAAQ,MAchC,kBAAC,IAAM,CACHnC,QAASjL,EAAMuK,QACf3I,MAAM,WAAS,uB,ohBC3azD4D,EAAY,aAAW,SAACC,GAC5B,mBAAa,CACXC,KAAM,CACF2K,SAAU,cAqCLiwB,EAAoD,SAAAtgC,GAE7D,IAAM2G,EAAUnB,IAEV,EAAoB,mBAAgC,CACtDvF,WAAW,EACXC,KAAM,KAFHC,EAAK,KAAEC,EAAQ,KAKtB,qBAAU,WACNC,MAED,IAEH,IAAMA,EAAY,WAEdD,EAAS,EAAD,KACDD,GAAK,CACRF,WAAW,KAcfsgC,EAX6B,CACzBC,aAAexgC,EAAMwgC,aACrBC,gBAAiBzgC,EAAM0gC,SACvBC,qBAAsB3gC,EAAM4gC,cAC5BC,oBAAqB7gC,EAAM8gC,cAS3B,GAEA,SAAC5gC,GAAS,OAAAK,EAAeL,MAEzB,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrCD,EAAiB,SAACL,GACpBE,EAAS,EAAD,KACDD,GAAK,CACRD,KAAMA,EAAK6gC,KAAKC,MAAMn0B,KAAKlM,KAAI,SAACC,GAAiB,OAAEC,MAAOD,EAAO4Q,OAAQzQ,MAAOH,EAAO2H,gBACvFtI,WAAW,MAKbkB,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,yBAAKM,UAAc2E,EAAQjB,KAAI,IAAI1F,EAAMgC,WACnChC,EAAM8B,SAEA,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OAEtD0B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OAEtD0B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,UAIrBE,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,eAanC,SAAS88B,EACZz8B,EACAJ,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOm9B,EACPj9B,UAAW,CACPw8B,aAAc18B,EAAQA,EAAM08B,aAAe,KAC3CC,gBAAiB38B,EAAQA,EAAM28B,gBAAkB,KACjDI,oBAAqB/8B,EAAQA,EAAM+8B,oBAAsB,KACzDF,qBAAsB78B,EAAQA,EAAM68B,qBAAuB,MAG/D98B,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MAIpB,I,EAAMygC,EAAe,IAAG,srC,mfC5OlBz7B,EAAY,aAAW,SAACC,GAC5B,mBAAa,CACXC,KAAM,CACF2K,SAAU,cA0BL6wB,EAAoD,SAAAlhC,GAE7D,IAAM2G,EAAUnB,IAEV,EAAoB,mBAAgC,CACtDvF,WAAW,EACXC,KAAM,KAFHC,EAAK,KAAEC,EAAQ,KAKtB,qBAAU,WACNC,MAED,IAEH,IAAMA,EAAY,WAEdD,EAAS,EAAD,KACDD,GAAK,CACRF,WAAW,KAgJhB,SACH6D,EACAJ,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOq9B,EACPn9B,UAAW,GAGXH,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MA5JZ4gC,CACI/8B,GACA,GAEA,SAACnE,GAAS,OAAAK,EAAeL,MAEzB,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrCD,EAAiB,SAACL,GACpBE,EAAS,EAAD,KACDD,GAAK,CACRD,KAAMA,EAAK8H,KAAKq5B,UAAU1gC,KAAI,SAACC,GAAqB,OAAEC,MAAOD,EAAOsU,OAAQnU,MAAOH,EAAO2H,gBAC1FtI,WAAW,MAKbkB,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,yBAAKM,UAAc2E,EAAQjB,KAAI,IAAI1F,EAAMgC,WACnChC,EAAM8B,SAEA,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OAEtD0B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OAEtD0B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,UAIrBE,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,eAuC1C,I,EAAM09B,EAAe,IAAG,gS,urBCrMxB,cAOI,WAAYnhC,EAAiCG,GAA7C,MACI,YAAMH,EAAOG,IAAM,K,OAPhB,EAAAmhC,SAAmB,EACnB,EAAAC,OAAiB,EACjB,EAAAnoB,OAAiB,GAEhB,EAAAf,KAAY,GAIhB,EAAKmpB,eAAiB,EAAKA,eAAeve,KAAK,GAC/C,EAAKwe,aAAe,EAAKA,aAAaxe,KAAK,GAE3C,EAAK9iB,MAAQ,CACTuhC,kBAAcr9B,EACds9B,cAAe,EAAK3hC,MAAM4hC,uB,EA8EtC,OA5FiD,OAkBtC,YAAA13B,OAAP,WACI,IAAI23B,EAAK9a,KACT,OAEI,gBAAC,IAAK,CACFjjB,MAAOg+B,EACPj+B,YAAa,eACbG,UAAW,CACPoV,OAAQ,GACR2oB,MA7BW,IA8BXR,OAAQxa,KAAKwa,OACbS,mBAAmB,EACnBC,UAAWlb,KAAK/mB,MAAMkiC,WAGzB,SAAC,G,IAAEjgC,EAAO,UAAEa,EAAK,QAAE5C,EAAI,OAEpB,QAAamE,IAATnE,IAA0B,OAAJA,QAAI,IAAJA,OAAI,EAAJA,EAAM+B,SAC5B,OAAQ,gBAAC,IAAQ,MAIrB,IAAMkgC,EAAqBjiC,EAU3B,OATA2hC,EAAGxpB,KAAQpW,GAAWa,EAChB,KACAq/B,EAASpB,KAAKC,MAAMoB,iBAAiBC,gBAAgB1hC,KAAK,SAAC2hC,GAAyB,OAE9Ej4B,GAAIi4B,EAAUC,QACdh6B,YAAa+5B,EAAUE,UACvBzV,SAAUuV,EAAUvV,aAI5B,gBAAC,IAAW,CACR7qB,SAAU2/B,EAAG7hC,MAAMkC,SACnBnB,MAAO8gC,EAAG7hC,MAAMe,MAChBO,KAAMugC,EAAG7hC,MAAMsB,KACfQ,UAAU,EACV0/B,eAAgBK,EAAGL,eACnBC,aAAcI,EAAGJ,aACjB7sB,MAAOitB,EAAGxpB,KACVoqB,cAAeZ,EAAG7hC,MAAMa,MACxBgC,SAAUg/B,EAAG7hC,MAAM6C,SACnBE,WAAY8+B,EAAG7hC,MAAM+C,WACrBD,MAAO++B,EAAG7hC,MAAM8C,MAChB4/B,YAAa,GACbC,6BAA6B,QAQ7C,YAAAlB,aAAR,SAAqBmB,EAAgBthC,GAC7BylB,KAAK/mB,MAAMyhC,cACX1a,KAAK/mB,MAAMyhC,aAAamB,EAAQthC,IAIhC,YAAAkgC,eAAR,SAAuBqB,EAAoBvhC,GAEvC,GAAIylB,KAAK1O,KAAM,CAEX,IAGMoqB,EAHQ1b,KAAK1O,KAAKe,QAAO,SAACxY,GAAgB,OAAAiiC,EAAS1sB,SAASvV,EAAOyJ,OAG7C1J,KAAI,SAACC,GAAgB,OAAEC,MAAOD,EAAOyJ,GAAItJ,MAAOH,EAAO2H,gBAE/Ewe,KAAK/mB,MAAMwhC,gBACXza,KAAK/mB,MAAMwhC,eAAeiB,EAAenhC,KAIzD,EA5FA,CAAiD,aA8F3CwgC,EAAgB,IAAG,oxC,urBC9FzB,cAOI,WAAY9hC,EAAmCG,GAA/C,MACI,YAAMH,EAAOG,IAAM,K,OAPhB,EAAAmhC,SAAmB,EACnB,EAAAC,OAAiB,EACjB,EAAAnoB,OAAiB,GAEhB,EAAAf,KAAY,GAIhB,EAAKmpB,eAAiB,EAAKA,eAAeve,KAAK,GAC/C,EAAKwe,aAAe,EAAKA,aAAaxe,KAAK,GAE3C,EAAK9iB,MAAQ,CACTuhC,kBAAcr9B,EACds9B,cAAe,EAAK3hC,MAAM4hC,uB,EA8EtC,OA5FmD,OAkBxC,YAAA13B,OAAP,WACI,IAAI23B,EAAK9a,KACT,OAEI,gBAAC,IAAK,CACFjjB,MAAOg+B,EACPj+B,YAAa,eACbG,UAAW,CACPoV,OAAQ,GACR2oB,MA7BW,IA8BXR,OAAQxa,KAAKwa,OACbuB,qBAAqB,EACrBb,UAAWlb,KAAK/mB,MAAMkiC,WAGzB,SAAC,G,IAAEjgC,EAAO,UAAEa,EAAK,QAAE5C,EAAI,OAEpB,QAAamE,IAATnE,IAA0B,OAAJA,QAAI,IAAJA,OAAI,EAAJA,EAAM+B,SAC5B,OAAQ,gBAAC,IAAQ,MAIrB,IAAMkgC,EAAqBjiC,EAU3B,OATA2hC,EAAGxpB,KAAQpW,GAAWa,EAChB,KACAq/B,EAASpB,KAAKgC,YAAYX,iBAAiBC,gBAAgB1hC,KAAK,SAAC2hC,GAAyB,OAEpFj4B,GAAIi4B,EAAUC,QACdh6B,YAAa+5B,EAAUE,UACvBzV,SAAUuV,EAAUvV,aAI5B,gBAAC,IAAW,CACR7qB,SAAU2/B,EAAG7hC,MAAMkC,SACnBnB,MAAO8gC,EAAG7hC,MAAMe,MAChBO,KAAMugC,EAAG7hC,MAAMsB,KACfQ,UAAU,EACV0/B,eAAgBK,EAAGL,eACnBC,aAAcI,EAAGJ,aACjB7sB,MAAOitB,EAAGxpB,KACVoqB,cAAeZ,EAAG7hC,MAAMa,MACxBgC,SAAUg/B,EAAG7hC,MAAM6C,SACnBE,WAAY8+B,EAAG7hC,MAAM+C,WACrBD,MAAO++B,EAAG7hC,MAAM8C,MAChB4/B,YAAa,GACbC,6BAA6B,QAQ7C,YAAAlB,aAAR,SAAqBmB,EAAgBthC,GAC7BylB,KAAK/mB,MAAMyhC,cACX1a,KAAK/mB,MAAMyhC,aAAamB,EAAQthC,IAIhC,YAAAkgC,eAAR,SAAuBqB,EAAoBvhC,GAEvC,GAAIylB,KAAK1O,KAAM,CAEX,IAGMoqB,EAHQ1b,KAAK1O,KAAKe,QAAO,SAACxY,GAAgB,OAAAiiC,EAAS1sB,SAASvV,EAAOyJ,OAG7C1J,KAAI,SAACC,GAAgB,OAAEC,MAAOD,EAAOyJ,GAAItJ,MAAOH,EAAO2H,gBAE/Ewe,KAAK/mB,MAAMwhC,gBACXza,KAAK/mB,MAAMwhC,eAAeiB,EAAenhC,KAIzD,EA5FA,CAAmD,aA8F7CwgC,EAAgB,IAAG,gzC,urBC9FzB,cAOI,WAAY9hC,EAAuCG,GAAnD,MACI,YAAMH,EAAOG,IAAM,K,OAPhB,EAAAmhC,SAAmB,EACnB,EAAAC,OAAiB,EACjB,EAAAnoB,OAAiB,GAEhB,EAAAf,KAAY,GAIhB,EAAKmpB,eAAiB,EAAKA,eAAeve,KAAK,GAC/C,EAAKwe,aAAe,EAAKA,aAAaxe,KAAK,GAE3C,EAAK9iB,MAAQ,CACTuhC,kBAAcr9B,EACds9B,cAAe,EAAK3hC,MAAM4hC,uB,EA6EtC,OA3FuD,OAkB5C,YAAA13B,OAAP,WACI,IAAI23B,EAAK9a,KACT,OAEI,gBAAC,IAAK,CACFjjB,MAAOg+B,EACPj+B,YAAa,eACbG,UAAW,CACPoV,OAAQ,GACR2oB,MA7BW,IA8BXR,OAAQxa,KAAKwa,OACbyB,yBAAyB,EACzBf,UAAWlb,KAAK/mB,MAAMkiC,WAGzB,SAAC,G,IAAEjgC,EAAO,UAAEa,EAAK,QAAE5C,EAAI,OACpB,QAAamE,IAATnE,IAA0B,OAAJA,QAAI,IAAJA,OAAI,EAAJA,EAAM+B,SAC5B,OAAQ,gBAAC,IAAQ,MAIrB,IAAMkgC,EAAqBjiC,EAU3B,OATA2hC,EAAGxpB,KAAQpW,GAAWa,EAChB,KACAq/B,EAASpB,KAAKkC,YAAYb,iBAAiBC,gBAAgB1hC,KAAK,SAAC2hC,GAAyB,OAEpFj4B,GAAIi4B,EAAUC,QACdh6B,YAAa+5B,EAAUE,UACvBzV,SAAUuV,EAAUvV,aAI5B,gBAAC,IAAW,CACR7qB,SAAU2/B,EAAG7hC,MAAMkC,SACnBnB,MAAO8gC,EAAG7hC,MAAMe,MAChBO,KAAMugC,EAAG7hC,MAAMsB,KACfQ,UAAU,EACV0/B,eAAgBK,EAAGL,eACnBC,aAAcI,EAAGJ,aACjB7sB,MAAOitB,EAAGxpB,KACVoqB,cAAeZ,EAAG7hC,MAAMa,MACxBgC,SAAUg/B,EAAG7hC,MAAM6C,SACnBE,WAAY8+B,EAAG7hC,MAAM+C,WACrBD,MAAO++B,EAAG7hC,MAAM8C,MAChB4/B,YAAa,GACbC,6BAA6B,QAQ7C,YAAAlB,aAAR,SAAqBmB,EAAgBthC,GAC7BylB,KAAK/mB,MAAMyhC,cACX1a,KAAK/mB,MAAMyhC,aAAamB,EAAQthC,IAIhC,YAAAkgC,eAAR,SAAuBqB,EAAoBvhC,GAEvC,GAAIylB,KAAK1O,KAAM,CAEX,IAGMoqB,EAHQ1b,KAAK1O,KAAKe,QAAO,SAACxY,GAAgB,OAAAiiC,EAAS1sB,SAASvV,EAAOyJ,OAG7C1J,KAAI,SAACC,GAAgB,OAAEC,MAAOD,EAAOyJ,GAAItJ,MAAOH,EAAO2H,gBAE/Ewe,KAAK/mB,MAAMwhC,gBACXza,KAAK/mB,MAAMwhC,eAAeiB,EAAenhC,KAIzD,EA3FA,CAAuD,aA6FjDwgC,EAAgB,IAAG,g1C,6XCrHnBt8B,EAAY,aAAW,SAACC,GAC5B,mBAAa,CACXC,KAAM,CACFC,MAAO,aA0BFu9B,EAAgE,SAAAljC,GAEzE,IAAM2G,EAAUnB,IAEV,EAAoB,mBAAsC,CAC5D/E,QAAS,KADNN,EAAK,KAAEC,EAAQ,KAIhB+iC,EAAsB,YAAmB,eAE/C,qBAAU,WAEN,IAAKA,EAAoBlhC,UAAYkhC,EAAoBrgC,OAASqgC,EAAoBjjC,KAAM,CAEhF,MAASijC,EAAmB,KACpC/iC,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZpQ,QAAS,EAAKuU,OAAOouB,eAAeziC,KAAK,SAACC,GAA2B,cAAKA,GAAM,CAAEC,MAAOD,EAAO2H,YAAaxH,MAAOH,EAAO2H,iBACtF+M,MAAK,SAACC,EAAGC,GAAM,OAAAD,EAAEJ,SAAWK,EAAEL,UAAY,EAAII,EAAEJ,SAAWK,EAAEL,SAAW,EAAI,aAKvH,CAACguB,EAAoBjjC,KAAMijC,EAAoBrgC,MAAOqgC,EAAoBlhC,UAGpF,IAAMd,EAAe,SAACC,EAA8BP,GAEhD2V,QAAQsQ,IAAI,WAAYjmB,GACpBb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,KAAOtB,EAAMsB,KAAO,YAIrDC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,oCACM1B,EAAM8B,SAEA,kBAAC,IAAY,CACTE,UAAW2E,EAAQjB,KACnB7E,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAASkhC,EAAoBlhC,QAC7BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMM,QACf28B,qBAAsBp9B,EAAMo9B,qBAC5Bh7B,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAA,EAAMA,QAAUyB,EAAOzB,OAC7D2B,OAAQxC,EAAMwC,OAEdC,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MAAQf,EAAMe,MAAQ,mBACnC2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQ2hC,EAAoBlhC,SACtDa,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACTzB,UAAW2E,EAAQjB,KACnB7E,MAAOb,EAAMa,MACboB,QAASkhC,EAAoBlhC,QAC7BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMM,QACf28B,qBAAsBp9B,EAAMo9B,qBAC5Bh7B,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAA,EAAMA,QAAUyB,EAAOzB,OAC7D2B,OAAQxC,EAAMwC,OAEdC,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MAAQf,EAAMe,MAAQ,mBACnC2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQ2hC,EAAoBlhC,SACtDa,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,gB,mXC7I7B4/B,EAA4C,SAAArjC,G,MAI/C,EAAoB,mBAA4B,CAClDC,WAAW,EACXC,KAAM,KAFHC,EAAK,KAAEC,EAAQ,KAKhB09B,EAAgB,YAAiB,CAAEf,WAA4B,QAAhB,EAAA/8B,EAAM+8B,kBAAU,QAAI,MAAQ,eAEjF,qBAAU,WACDe,EAAc77B,SAAY67B,EAAch7B,QAASg7B,EAAc59B,MAChEE,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ3Q,KAAM49B,EAAc59B,KAAM89B,SAAShxB,KAAKrM,KAAI,SAACC,GAAiB,OAAEC,MAAOD,EAAOq9B,aAAcl9B,MAAOH,EAAOs9B,kBAIlHJ,EAAch7B,OACd,YAAiB,KAAMg7B,EAAch7B,MAAMoT,QAAS,WAElD,CAAC4nB,EAAc59B,KAAM49B,EAAc77B,QAAS67B,EAAch7B,QAGpE,IAAM3B,EAAe,SAACC,EAA8BP,GAEhD,IAAIy6B,EAAYz6B,EAUZb,EAAMqB,aACNrB,EAAMqB,YAAYi6B,EAAWt7B,EAAMsB,OAIrCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,oCACM1B,EAAM8B,SAEA,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS67B,EAAc77B,QACvBC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAyB,EAAOzB,QAAUA,EAAMA,OAE7D4B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQs8B,EAAc77B,SAChDa,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS67B,EAAc77B,QACvBC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAyB,EAAOzB,QAAUA,EAAMA,OAE7D4B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQs8B,EAAc77B,SAChDa,MAAO9C,EAAM8C,UAIrBE,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,gB,seC7H7B6/B,EAAgE,SAACtjC,GAGpE,MAAoB,mBAAsC,CAC5DE,KAAM,KADHC,EAAK,KAAEC,EAAQ,KAIhBmjC,EAAsB,YAAmDC,EAAqB,CAChGx/B,UAAW,CACPiW,oBAAqBja,EAAMia,qBAE/BpW,YAAa,gBAGjB,mBAAQ,YAEC0/B,EAAoBthC,UACpBshC,EAAoBzgC,OACrBygC,EAAoBrjC,MACpBqjC,EAAoBrjC,KAAK8U,QACzBuuB,EAAoBrjC,KAAK8U,OAAOyuB,gBAEhCrjC,GAAS,SAACyQ,GACE,IAEF+D,EAFqB2uB,EAAoBrjC,KAAM8U,OAAM,eAEIrU,KAAI,SAAC+iC,GAChE,OAAO,EAAP,KACOA,GAAS,CACZ3iC,MAAO2iC,EAAUn7B,YACjB1H,MAAO6iC,EAAUn7B,iBAEtB+M,MAAK,SAACC,EAAGC,GACR,OAAID,EAAExU,MAAQyU,EAAEzU,OACJ,EACDwU,EAAExU,MAAQyU,EAAEzU,MACZ,EAEA,KAIf,OAAO,EAAP,KACO8P,GAAS,CACZ3Q,KAAM0U,SAKnB,CAAC2uB,EAAoBthC,QAASshC,EAAoBrjC,KAAMqjC,EAAoBzgC,QAG/E,IAAM3B,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAO,EAAP,KACOuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBA2BnC,OAAI1B,EAAM8B,SAEF,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAASshC,EAAoBthC,QAC7BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA2C,OAAAA,EAAOvB,OAEnEyB,OAAQxC,EAAMwC,OACdV,UAAU,EACVsY,WArCS,SAACvZ,EAAyCwZ,GAkB3D,OAjBsBxZ,EAAMF,KAAI,SAAC2B,EAAwCe,GACrE,IAAItC,EAAQuB,EAAOvB,MAKnB,OAJIuB,EAAOvB,MAAMuV,OAAS,KACtBvV,EAAWuB,EAAOvB,MAAMuZ,UAAU,EAAG,IAAG,OAIxC,kBAAC,IAAI,KACGD,EAAY,CAAEhX,MAAK,IAAG,CAC1BC,IAAKD,EACLtC,MAAOA,EAEPc,KAAK,eAyBTu7B,qBAAsBp9B,EAAMo9B,qBAC5B36B,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQ+hC,EAAoBthC,SACtDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAWlC,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAASshC,EAAoBthC,QAC7BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA2C,OAAAA,EAAOvB,OAEnEyB,OAAQxC,EAAMwC,OACd46B,qBAAsBp9B,EAAMo9B,qBAC5B36B,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQ+hC,EAAoBthC,SACtDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,cA4BhC+/B,EAAsB,IAAG,kiB,0vBCjOzBh+B,EAAY,OAAAm+B,EAAA,IAAW,SAACl+B,GAC1B,cAAAm+B,EAAA,GAAa,CACTl+B,KAAM,CACFC,MAAO,QAEXG,YAAa,CACTH,MAAO,QAEX6E,MAAO,CACHjE,QAAS,mBACTgO,SAAU,GACV3S,MAAO,IAAU6Q,YAAYC,gBAC7BkJ,UAAW,UAEfioB,YAAa,CACTxzB,SAAU,KAEdyzB,mBAAoB,CAChBn+B,MAAO,QAEXo+B,qBAAsB,CAClB79B,QAAS,OACT8U,SAAU,SACVhJ,SAAU,YAEdgyB,OAAQ,CACJjyB,aAAc,GACdia,cAAe,QAEnBiY,iBAAkB,CACd79B,eAAgB,UAEpB89B,YAAa,CACTtoB,UAAW,SACX/I,cAAe,GACfjR,MAAO6D,EAAM8N,QAAQI,QAAQF,KAC7Bc,SAAU,IAEd4vB,qBAAsB,CAClBnyB,SAAU,YAEdC,eAAgB,CACZ/L,QAAS,OACTC,WAAY,SACZC,eAAgB,UAEpBg+B,oBAAqB,CACjBl+B,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChB4L,SAAU,WACVG,IAAK,EACLC,MAAO,EACPC,KAAM,EACNC,OAAQ,EACRC,gBAAiB,2BACjBL,OAAQ,QAkBPmyB,EAA4D,SAAErkC,GACvE,IAAM2G,EAAUnB,IAEV8+B,EAA2B,YAAkC,KAE7D,EAAoB,mBAAoC,CAC1DC,cAAc,EACdC,mBAAmB,EACnBtkC,KAAM,GACND,WAAW,IAJRE,EAAK,KAAEC,EAAQ,KAOtB,qBAAU,YACDkkC,EAAyBxhC,OAASwhC,EAAyBpkC,MAAQokC,EAAyBpkC,KAAK8U,QAClG5U,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CAEZ3Q,KAAMokC,EAAyBpkC,KAAM8U,OAAOyE,cAAcnE,MAAK,SAACC,EAAGC,GAAM,OAAAD,EAAEJ,SAAWK,EAAEL,UAAY,EAAII,EAAEJ,SAAWK,EAAEL,SAAW,EAAI,YAKnJ,CAACmvB,EAAyBpkC,KAAMokC,EAAyBxhC,MAAOwhC,EAAyBriC,UAE5F,IAAMsI,EAAU,WACRvK,EAAMuK,SACNvK,EAAMuK,WAKRk6B,EAAiB,SAAC15B,GAA+B,gBAAC3J,G,YAEpDhB,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZ5Q,WAAW,OAInB,IAAMykC,EAA6Bta,EAAA,EAAYve,UAAUue,EAAA,EAAgBsa,4BACnEC,EAAkCva,EAAA,EAAYve,UAAUue,EAAA,EAAgBua,iCAExEC,EAA+D,CACjE3S,aAAcjyB,EAAMuxB,WAAWzsB,WAC/B+/B,oBAAqB95B,EAAOA,EAAKmK,OAAS,KAC1C4vB,oBAAqBJ,EAA6BvkC,EAAMokC,aAAe,KACvEQ,yBAA0BJ,EAAkCxkC,EAAMqkC,kBAAoB,MAGtFQ,EAAS,GAET7kC,EAAMqkC,mBAAqBrkC,EAAMokC,aACjCS,GAA4B,QAAhB,EAAAhlC,EAAMuxB,kBAAU,eAAE0T,kBAAgB,KAAoB,QAAhB,EAAAjlC,EAAMuxB,kBAAU,eAAE2T,aAC7D/kC,EAAMokC,aACbS,EAAyB,QAAhB,EAAAhlC,EAAMuxB,kBAAU,eAAE2T,YACpB/kC,EAAMqkC,oBACbQ,EAAyB,QAAhB,EAAAhlC,EAAMuxB,kBAAU,eAAE0T,kBAyKhC,SACHnhC,EACAJ,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOqhC,GACPnhC,UAAW,CACPiuB,aAAcnuB,EAAMmuB,aACpB4S,oBAAqB/gC,EAAM+gC,oBAC3BC,oBAAqBhhC,EAAMghC,oBAC3BC,yBAA0BjhC,EAAMihC,0BAEpClhC,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MA/LZ4kC,CACIR,GACA,GAEA,SAACS,GAAa,OAAA9kC,EAAe8kC,EAAUt6B,EAAMi6B,MAE7C,SAAUxkC,GACN,YAAiB,KAAMA,EAAQ,cAMrCD,EAAiB,SAAC8kC,EAAuCt6B,EAA4Bi6B,GAEvF5kC,GAAS,SAACyQ,G,UAEFy0B,EAAOzG,SAAS0G,cAAc,KAMlC,OAJAD,EAAKE,KAAO,WAAUR,GAAkB,IAAE,eAAeS,mBAAmC,QAAhB,EAAAzlC,EAAMuxB,kBAAU,eAAE7mB,QAAO,MAAM+6B,mBAAmC,QAAhB,EAAAzlC,EAAMuxB,kBAAU,eAAEhpB,aAAY,MAAqB,QAAhB,EAAAvI,EAAMuxB,kBAAU,eAAE5R,YAAU,UAAU0lB,EAASK,8BAChNJ,EAAKK,QACLp7B,IAEO,EAAP,KACOsG,GAAS,CACZ5Q,WAAW,QAMjB2lC,EAAiB,SAACxkC,GACpB,IAAME,EAAOF,EAAM2M,OAAOzM,KACpB0M,EAAU5M,EAAM2M,OAAOC,QACzB1M,GACAlB,GAAS,SAACyQ,G,MACN,GAAa,iBAATvP,GACA,IAAK0M,IAAY7N,EAAMqkC,kBACnB,OAAO,EAAP,KACO3zB,GAAS,CACZ0zB,aAAcv2B,EACdw2B,mBAAmB,SAGxB,GAAa,sBAATljC,IACF0M,IAAY7N,EAAMokC,aACnB,OAAO,EAAP,KACO1zB,GAAS,CACZ0zB,cAAc,EACdC,kBAAmBx2B,IAI/B,OAAO,EAAP,KACO6C,KAAS,MACXvP,GAAO0M,EAAO,QAM/B,OACI,kBAAC63B,EAAA,EAAM,CACHv7B,MAAM,EACNC,QAASA,EAAO,kBACA,oBAChBvI,UAAW2E,EAAQjB,KACnBiB,QAAS,CACLmL,MAAOnL,EAAQk9B,cAGnB,kBAACiC,EAAA,EAAW,CACRz7B,GAAG,oBACHrI,UAAW2E,EAAQb,aAEnB,yBAAK9D,UAAW2E,EAAQ6D,OAAK,mBAC7B,kBAACu7B,EAAA,EAAS,CAACpnB,KAAK,EAAM3c,UAAW2E,EAAQs9B,kBACpC7Z,EAAA,EAAYve,UAAUue,EAAA,EAAgBsa,6BACnC,kBAACsB,EAAA,EAAgB,CACbl4B,QACI,kBAACm4B,EAAA,EAAQ,CACLrkC,MAAM,UACNN,KAAK,eACL0M,QAAS7N,EAAMokC,aACfpiC,SAAUyjC,IAGlB7kC,MAAOmlC,aAAaC,QAAQC,EAAA,EAAiBC,cAAgB,mBAGpEjc,EAAA,EAAYve,UAAUue,EAAA,EAAgBua,kCACnC,kBAACqB,EAAA,EAAgB,CACbl4B,QACI,kBAACm4B,EAAA,EAAQ,CACLrkC,MAAM,UACNN,KAAK,oBACL0M,QAAS7N,EAAMqkC,kBACfriC,SAAUyjC,IAGlB7kC,MAAOmlC,aAAaC,QAAQC,EAAA,EAAiBE,mBAAqB,0BAKlF,kBAACC,EAAA,EAAa,CAAC37B,UAAU,EAAM5I,UAAW2E,EAAQw9B,sBAC5CG,EAAyBriC,QAgCvB,yBAAKD,UAAW2E,EAAQsL,gBACpB,kBAACu0B,EAAA,EAAgB,OAhCrB,oCACI,yBAAKxkC,UAAW2E,EAAQu9B,aAAW,uCAGnC,yBAAKliC,UAAW2E,EAAQo9B,wBACjB5jC,EAAMF,WACL,yBAAK+B,UAAW2E,EAAQy9B,qBACpB,kBAACoC,EAAA,EAAgB,OAGxBrmC,EAAMD,KAAKS,KAAI,SAACoK,GAAwB,OACrC,kBAAC07B,EAAA,EAAM,CACH/jC,QAAQ,WACRd,MAAM,UACNI,UAAW2E,EAAQq9B,OACnB/4B,QAASw5B,EAAe15B,IAEvBA,EAAKxC,gBAGd,kBAACk+B,EAAA,EAAM,CACH/jC,QAAQ,WACRd,MAAM,UACNI,UAAW2E,EAAQq9B,OACnB/4B,QAASw5B,EAAe,OAAK,YAYjD,kBAACiC,EAAA,EAAa,KACV,kBAACD,EAAA,EAAM,CACHx7B,QAASV,EACT3I,MAAM,WAAS,aAiDnC,I,GAAMujC,GAAqC,IAAG,6wB,iSCrRlCwB,G,iNA5BN,GAAY,OAAAhD,EAAA,IAAW,SAACl+B,GAC1B,cAAAm+B,EAAA,GAAa,CACTl+B,KAAM,CACFQ,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBuV,OAAQ,QAEZirB,SAAU,CACN3zB,YAAa,QAEjB6H,cAAe,CACX9I,SAAU,WACVG,IAAK,EACLG,OAAQ,EACRF,MAAO,EACPC,KAAM,EACNnM,QAAS,OACTC,WAAY,SACZC,eAAgB,UAEpBoM,KAAM,CACFS,YAAa,OACbrR,MAAO,IAAU6Q,YAAYC,uBAKzC,SAAYi0B,GACR,+BACA,mDACA,6DACA,yCACA,iCACA,qCACA,+BACA,+BACA,6CACA,wDACA,wCACA,oDACA,0CAbJ,CAAYA,QAAoB,KA6CzB,IAAME,GAAoD,SAAE7mC,GAC/D,IAAM2G,EAAU,KACVwV,EAAU,cACV,EAAkB,IAAMC,UAAS,GAAhC9R,EAAI,KAAEw8B,EAAO,KACdC,EAAY,IAAMC,OAA0B,MAE1C/hC,EAA2B,eAAyB,uBAEtD,EAAkC,qBAAjC2oB,EAAY,KAAEC,EAAe,KAC9B,EAA8B,qBAA7B0D,EAAU,KAAE0V,EAAa,KAC1B,EAA4B,oBAAkB,GAA7ChnC,EAAS,KAAEinC,EAAY,KACxB,EAAoB,mBAAgC,CACtDC,kBAAkB,EAClBC,4BAA4B,EAC5BnZ,iCAAiC,EACjCF,uBAAuB,EACvBI,mBAAmB,EACnBD,qBAAqB,EACrBmZ,kBAAkB,EAClBC,sBAAsB,EACtBC,sBAAsB,EACtB79B,aAAc,KACdD,gBAAiB,OAXdtJ,EAAK,KAAEC,EAAQ,KAchBwE,EAAmB5E,EAAM4E,SACzB5E,EAAM4E,SACL5E,EAAME,MAAQF,EAAME,KAAKmK,GAAMrK,EAAME,KAAKmK,GAAK,EAEtD,qBAAU,WACNgrB,IACAmS,IACAC,OAED,IAEH,IAAMpS,EAAuB,gBACJhxB,IAAjBupB,GACA,aAAkB,GACA,SAAC1tB,GACCqvB,EAAoBrvB,MAEtB,SAACM,GACK,YAAiB,oCAAqCA,EAAQ,aAKxF+uB,EAAsB,SAACrvB,GACrBA,IAASA,EAAK+B,SAAW/B,EAAKO,SAC1BP,EAAKO,QAAQgL,gBAAkBvL,EAAKO,QAAQopB,eAC5CgE,EAAgB,CACZ3hB,SAAUhM,EAAKO,QAAQopB,cAAc3d,SACrCT,eAAgBvL,EAAKO,QAAQgL,eAAeoU,UAkBtD6nB,EAAwB,SAACxnC,GACvBA,IAASA,EAAK+B,SAAW/B,EAAK+c,QAC1B/c,EAAK+c,SACLgqB,EAAc/mC,EAAK+c,QAEnBiqB,GAAa,KAKnBM,EAAY,WACd,aACI,GACA,SAACtnC,GAAsB,OAAAynC,GAAoBznC,MAE3C,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrCmnC,GAAsB,SAACznC,GACzBE,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZnH,aAAc,CAAE3I,MAAOb,EAAKy5B,QAAQr4B,KAAMT,MAAOX,EAAKy5B,QAAQiO,QAC9D3nC,WAAW,QAKjBwnC,GAAgB,WAClB,aACI,GAEA,SAACvnC,GAAS,OAAA2nC,GAAwB3nC,MAElC,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrCqnC,GAA0B,SAAC3nC,GAE7B,IAAM4nC,EAAe5nC,EAAK8U,OAAOxM,SAAS4Q,QAAO,SAAAvY,GAC7C,MAA6B,gBAAtBA,EAAM0H,eAGbu/B,GAAgBA,EAAaxxB,OAAS,GACtClW,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZpH,gBAAiB,CAAE1I,MAAO+mC,EAAa,GAAGv/B,YAAa1H,MAAOinC,EAAa,GAAG5yB,QAC9EjV,WAAW,QAarB8nC,GAAc,SAAC3mC,IACb2lC,EAAUnkB,SACVmkB,EAAUnkB,QAAQolB,SAAS5mC,EAAM2M,SAKnCk6B,GAAkB,SAAC5X,GAA+B,gBAACjvB,GACrD,IAAI2lC,EAAUnkB,UACVmkB,EAAUnkB,QAAQolB,SAAS5mC,EAAM2M,QAKrC,OAAQsiB,GACJ,KAAKsW,GAAqBuB,WACtBpB,GAAQ,GACRlU,GAAoBxxB,GACpB,MAEJ,KAAKulC,GAAqBwB,qBACtBrB,GAAQ,GACRsB,GAA2BhnC,GAC3B,MAEJ,KAAKulC,GAAqB0B,0BACtBvB,GAAQ,GACRjU,GAAgCzxB,GAChC,MAEJ,KAAKulC,GAAqB2B,gBACtBxB,GAAQ,GACRnU,GAAsBvxB,GACtB,MAEJ,KAAKulC,GAAqB4B,YACtBzB,GAAQ,GACR/T,GAAkB3xB,GAClB,MAEJ,KAAKulC,GAAqB6B,cACtB1B,GAAQ,GACRhU,GAAoB1xB,GACpB,MAEJ,KAAKulC,GAAqB8B,WACtB3B,GAAQ,GACR4B,GAAuBtnC,GACvB,MAEJ,KAAKulC,GAAqBgC,eACtB7B,GAAQ,GACR8B,GAAqBxnC,GACrB,MAEJ,KAAKulC,GAAqBkC,qBACtB/B,GAAQ,GACRgC,GAAqB1nC,GACrB,MAEJ,KAAKulC,GAAqBoC,gBACtBjC,GAAQ,GACRkC,GAAsBpkC,EAAU2sB,EAAYzsB,WAAY1D,GACxD,MAEJ,QACI0lC,GAAQ,MAMdlU,GAAsB,SAACxxB,GACzB2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACRgnC,kBAAkB,MAIpBiB,GAA6B,SAAChnC,GAChC2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACRinC,4BAA4B,MAI9BvU,GAAkC,SAACzxB,GACrC2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACR8tB,iCAAiC,MAInC0E,GAAwB,SAACvxB,GAC3B2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACR4tB,uBAAuB,MAIzBgF,GAAoB,SAAC3xB,GACvB2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACRguB,mBAAmB,MAIrB2E,GAAsB,SAAC1xB,GACzB2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACR+tB,qBAAqB,MAIvBwa,GAAyB,SAACtnC,GAC5B2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACRknC,kBAAkB,MAIpBuB,GAAuB,SAACxnC,GAC1B2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACRmnC,sBAAsB,MAIxBwB,GAAuB,SAAC1nC,GAC1B2mC,GAAY3mC,GACZ0lC,GAAQ,GAER1mC,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZ02B,sBAAsB,QAK5ByB,GAAwB,SAACpkC,EAAkBE,EAAoB1D,GACjE2mC,GAAY3mC,GACZ0lC,GAAQ,GAER7hC,EAAuBL,EAAUE,IA8B/BoE,GAAgB,WAClB49B,GAAQ,GAER1mC,EAAS,SACFD,GAAK,CACRgnC,kBAAkB,EAClBC,4BAA4B,EAC5BnZ,iCAAiC,EACjCF,uBAAuB,EACvBI,mBAAmB,EACnBD,qBAAqB,EACrBmZ,kBAAkB,EAClBC,sBAAsB,EACtBC,sBAAsB,MAsCxB0B,GAAc,SAAC7nC,GAEb2lC,EAAUnkB,SACVmkB,EAAUnkB,QAAQolB,SAAS5mC,EAAM2M,SAKrC+4B,GAAQ,IAGZ,SAASoC,GAAkB9nC,GACL,QAAdA,EAAMkC,MACNlC,EAAM+nC,iBACNrC,GAAQ,IAKhB,IAAMsC,GAAW,IAAMpC,OAAO18B,GAC9B,IAAM++B,WAAU,YACa,IAArBD,GAASxmB,UAA6B,IAATtY,GAC7By8B,EAAUnkB,QAAS0mB,QAGvBF,GAASxmB,QAAUtY,IAEpB,CAACA,IA4YJ,OACI,kBAAC,IAAM3I,SAAQ,UAEQ0C,IAAfrE,EAAME,MACF,yBAAK8B,UAAW2E,EAAQjB,KAAO,4BAC3B,kBAAC6jC,EAAA,EAAU,CACP3nC,MAAM,UACN6V,IAAKsvB,EAAS,gBACCz8B,EAAO,sBAAmBjG,EAAS,gBACpC,OACd4G,QAjrBH,WAEjB67B,GAAQ,SAACsC,GAAa,OAACA,KACvBlC,GAAa,GA1Eb,aAAuB,EACAtiC,GACA,SAAC1E,GACIwnC,EAAsBxnC,MAE3B,SAACM,GACI,YAAiB,oCAAqCA,EAAQ,cAovBtE,kBAAC,IAAqB,OAItBP,EA7OhB,yBAAK+B,UAAW2E,EAAQmU,eACpB,kBAAC,IAAQ,OAMbyW,EAEI,kBAAC,IAAM5vB,SAAQ,KACX,kBAAC6nC,EAAA,EAAM,CACHl/B,KAAMA,EACNm/B,SAAU1C,EAAUnkB,QACpB5V,UAAM3I,EACNqlC,YAAY,EACZtnC,eAAe,EACfL,MAAO,CACHiR,WAAY,WAGf,SAAC,G,IAAE22B,EAAe,kBAAEC,EAAS,YAAO,OACjC,kBAACC,EAAA,EAAI,MACGF,EAAe,CACnB5nC,MAAO,CACH+nC,gBACkB,WAAdF,EACM,aACA,mBAGd,kBAAC,IAAMjoC,SAAQ,KACX,kBAACooC,EAAA,EAAK,KACF,kBAACC,EAAA,EAAiB,CAACC,YAAahB,IAC5B,kBAACiB,EAAA,EAAQ,CACLC,cAAe7/B,EACfD,GAAG,iBACH+/B,UAAWlB,IAGP9e,EAAA,EAAYve,UAAUue,EAAA,EAAgBigB,gBACtC,kBAACC,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqBuB,YAC9ChmC,UAAWqvB,EAAWrF,QAAQqe,eAE7BhZ,EAAWrF,QAAQse,mBAChB,kBAAC,IAAQ,CACLj2B,SAAS,QACTvS,UAAW2E,EAAQigC,WAG3B,kBAAC,KAA8B,CAACryB,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,oBAKxE4X,EAAA,EAAYve,UAAUue,EAAA,EAAgBte,iBACtC,kBAACw+B,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqBwB,sBAC9CjmC,UAAWqvB,EAAWrF,QAAQue,yBAE7BlZ,EAAWrF,QAAQwe,6BAChB,kBAAC,IAAQ,CACLn2B,SAAS,QACTvS,UAAW2E,EAAQigC,WAG3B,kBAAC,KAAsB,CAACryB,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,kBAKhE4X,EAAA,EAAYve,UAAUue,EAAA,EAAgBugB,yBACtC,kBAACL,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqB0B,2BAC9CnmC,UAAWqvB,EAAWrF,QAAQ0e,8BAE7BrZ,EAAWrF,QAAQ2e,kCAChB,kBAAC,IAAQ,CACLt2B,SAAS,QACTvS,UAAW2E,EAAQigC,WAG3B,kBAAC,KAAgC,CAACryB,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,kCAM1E4X,EAAA,EAAYve,UAAUue,EAAA,EAAgB0gB,qBACtC,kBAACR,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqB2B,iBAC9CpmC,UAAWqvB,EAAWrF,QAAQ6e,oBAE7BxZ,EAAWrF,QAAQ8e,wBAChB,kBAAC,IAAQ,CACLz2B,SAAS,QACTvS,UAAW2E,EAAQigC,WAG3B,kBAAC,KAAgB,CAACryB,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,sBAK1D4X,EAAA,EAAYve,UAAUue,EAAA,EAAgBvc,iBAEtC,kBAACy8B,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqB4B,aAC9CrmC,UAAWqvB,EAAWrF,QAAQ+e,gBAE7B1Z,EAAWrF,QAAQgf,oBAChB,kBAAC,IAAQ,CACL32B,SAAS,QACTvS,UAAW2E,EAAQigC,WAG3B,kBAAC,KAA8B,CAACryB,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,iBAKxE4X,EAAA,EAAYve,UAAUue,EAAA,EAAgB+gB,mBACtC,kBAACb,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqB6B,eAC9CtmC,UAAWqvB,EAAWrF,QAAQkf,kBAE7B7Z,EAAWrF,QAAQmf,sBAChB,kBAAC,IAAQ,CACL92B,SAAS,QACTvS,UAAW2E,EAAQigC,WAG3B,kBAAC,KAAmB,CAACryB,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,mBAKhExS,EAAME,MAAQF,EAAME,KAAKmK,IACtB,kBAACigC,EAAA,EAAQ,CACLr/B,QAAS,SAAC7J,GACN,OAxX7B,SAACA,GACxB2mC,GAAY3mC,GACZ0lC,GAAQ,GAER,SAAOhgC,OAAO,CACVC,SAAU,8BACV/C,UAAW,CACPY,SAAUA,KAEfX,MAAK,SAACC,IAK4C,IAA7CA,EAAQhE,KAAKorC,6BAEb90B,QAAQsQ,IAAI,kDAIpBykB,eAAeC,QAAQ,aAAc,UAGrC,IAAIhG,EAAOrpB,EAAQsvB,WAAW,CAC1BvsB,SAAU,iBAAmBta,EAC7BtB,IAAK,mBACLnD,MAAO,CACHurC,sBAAuB,WAI/BC,OAAOrhC,KAAKk7B,EAAM,UAyVkCoG,CAAmBxqC,KAGvB,kBAAC,KAAsB,CAACmT,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,gBAKhE4X,EAAA,EAAYve,UAAUue,EAAA,EAAgByhB,gBAAkBzhB,EAAA,EAAYve,UAAUue,EAAA,EAAgB0hB,eAC9F,kBAACxB,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqB8B,YAC9CvmC,UAAU,GAETqvB,EAAWrF,QAAQ6f,eAChB,kBAAC,IAAQ,CACLx3B,SAAS,QACTvS,UAAW2E,EAAQigC,WAG3B,kBAAC,KAAuB,CAACryB,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,sBAKjE4X,EAAA,EAAYve,UAAUue,EAAA,EAAgB4hB,wBACtC,kBAAC1B,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqBkC,uBAE9C,kBAAC,KAA6B,CAACt0B,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,cAuBvE4X,EAAA,EAAYve,UAAUue,EAAA,EAAgB6hB,0BACtC,kBAAC3B,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqBgC,gBAC9CzmC,UAAU,GAEV,kBAAC,KAAmB,CAACqS,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,oBAGhE4X,EAAA,EAAYve,UAAUue,EAAA,EAAgB8hB,oBACnC,kBAAC5B,EAAA,EAAQ,CACLr/B,QAASg9B,GAAgBtB,GAAqBoC,iBAC9C7mC,UAAU,GAEV,kBAAC,KAAgB,CAACqS,SAAS,QAAQvS,UAAW2E,EAAQ6L,O,8BAa3F,KArYc,SAAC5N,GAC1B,GAAI2sB,GAAc3D,EAAc,CAC5B,IAAM1iB,EAAeqmB,EAAW3R,WAAa2R,EAAW3R,WAAWG,oBAAsB,EACnF3U,EAAyBmmB,EAAW3R,WAAa2R,EAAW3R,WAAWxU,sBAAwB,EAC/Fe,EAAsBolB,EAAW3R,WAAa2R,EAAW3R,WAAWtR,QAAU,EAC9E1C,EAAsB2lB,EAAW3R,WAAa2R,EAAW3R,WAAW+R,aAAe,EACnFvlB,EAAamlB,EAAW3R,WAAa2R,EAAW3R,WAAWE,kBAAoB,EAC/EzT,EAAcklB,EAAW3R,WAAa2R,EAAW3R,WAAWvT,YAAc,EAC1EC,EAAqBilB,EAAW3R,WAAa2R,EAAW3R,WAAWtT,mBAAqB,EACxF6/B,EAA4C5a,EAAW3R,WACP2R,EAAWrF,QAAQigB,0CACnB,EAChDC,EAA6C7a,EAAW3R,WACR2R,EAAWrF,QAAQkgB,2CACnB,EAChDC,EAA4C9a,EAAW3R,WACP2R,EAAWrF,QAAQmgB,0CACnB,EAChDC,EAA6C/a,EAAW3R,WACR2R,EAAWrF,QAAQogB,2CACnB,EAEhD3hC,EAAc,GAAG4mB,EAAWhpB,YAElC,OACI,kBAAC,IAAM5G,SAAQ,KACVxB,EAAMgnC,kBACH,kBAACzgC,EAAA,EAAmB,CAChB8E,gBAAiBoiB,EACjBhpB,SAAUA,EACVE,WAAYysB,EAAWzsB,WACvB6F,YAAaA,EACbD,OAAQ6mB,EAAW7mB,OACnBxB,cAAeA,GACfgC,aAAcA,EACdE,sBAAuBA,EACvBe,mBAAoBA,EACpBP,oBAAqBA,EACrBQ,WAAYA,EACZC,YAAaA,EACbC,mBAAoBA,EACpB/C,0BAA2B6iC,EAC3B5iC,0BAA2B8iC,EAC3B5iC,aAAcvJ,EAAMuJ,aACpBD,gBAAiBtJ,EAAMsJ,gBACvBJ,WAAY,WAInBlJ,EAAMinC,4BACH,kBAAC95B,EAAA,EAAiB,CACd9B,gBAAiBoiB,EACjBhpB,SAAUA,EACVE,WAAYysB,EAAWzsB,WACvB6F,YAAaA,EACbD,OAAQ6mB,EAAW7mB,OACnBxB,cAAeA,GACfgC,aAAcA,EACdE,sBAAuBA,EACvBe,mBAAoBA,EACpBC,WAAYA,EACZ6B,SAAUsjB,EAAWrF,QAAQ+e,eAC7B1hC,0BAA2B4iC,EAC3B3iC,0BAA2B6iC,EAC3B3iC,aAAcvJ,EAAMuJ,aACpBD,gBAAiBtJ,EAAMsJ,gBACvBJ,WAAY,WAInBlJ,EAAM4tB,uBACH,kBAAC7f,EAAA,EAAqB,CAClB1C,gBAAiBoiB,EACjBhpB,SAAUA,EACVE,WAAYysB,EAAWzsB,WACvB6F,YAAaA,EACbD,OAAQ6mB,EAAW7mB,OACnBxB,cAAeA,GACfgC,aAAcA,EACdE,sBAAuBA,EACvBe,mBAAoBA,EACpBC,WAAYA,EACZ6B,SAAUsjB,EAAWrF,QAAQ+e,eAC7BvhC,aAAcvJ,EAAMuJ,aACpBD,gBAAiBtJ,EAAMsJ,gBACvBJ,WAAY,WAInBlJ,EAAM8tB,iCACH,kBAACvf,EAAA,EAA8B,CAC3BlD,gBAAiBoiB,EACjBhpB,SAAUA,EACVE,WAAYysB,EAAWzsB,WACvB6F,YAAaA,EACbD,OAAQ6mB,EAAW7mB,OACnBxB,cAAeA,GACfiD,mBAAoBA,EACpBP,oBAAqBA,EACrBlC,aAAcvJ,EAAMuJ,aACpBD,gBAAiBtJ,EAAMsJ,gBACvBJ,WAAY,WAInBlJ,EAAM+tB,qBACH,kBAAC9e,EAAA,EAAmB,CAChB5D,gBAAiBoiB,EACjBhpB,SAAUA,EACVE,WAAYysB,EAAWzsB,WACvB6F,YAAaA,EACbD,OAAQ6mB,EAAW7mB,OACnBxB,cAAeA,GACfkD,WAAYA,EACZwD,WAAY2hB,EAAWzoB,eACvBY,aAAcvJ,EAAMuJ,aACpBD,gBAAiBtJ,EAAMsJ,gBACvBJ,WAAY,WAInBlJ,EAAMguB,mBACH,kBAACte,EAAA,EAAiB,CACdrE,gBAAiBoiB,EACjBhpB,SAAUA,EACVE,WAAYysB,EAAWzsB,WACvB6F,YAAaA,EACbD,OAAQ6mB,EAAW7mB,OACnBxB,cAAeA,GACfkD,WAAYA,EACZ1C,aAAcvJ,EAAMuJ,aACpBD,gBAAiBtJ,EAAMsJ,gBACvBJ,WAAY,WAInBlJ,EAAMknC,kBACH,kBAACkF,EAAA,EAAsB,CACnBC,OAAQrsC,EAAMknC,iBACd98B,QAASrB,GACTyY,KAAM3hB,EAAME,KAAOF,EAAME,KAAKusC,WAAa,KAC3CC,UAAU,EACVC,iBAAkBpb,EAAW5R,WAC7B7a,WAAYysB,EAAWzsB,WACvB6F,YAAa4mB,EAAW/mB,MACxBf,gBAAiBtJ,EAAMsJ,kBAG9BtJ,EAAMmnC,sBACH,kBAAC7J,EAAA,qBAAoB,CACjBlzB,QAASrB,GACT+T,OAAQ,CACJlc,MAAUwwB,EAAW5R,WAAU,KAAK4R,EAAW/mB,MAAK,IACpD3J,MAAO0wB,EAAWzsB,cAI7B3E,EAAMonC,sBACH,kBAAClD,EAAoB,CACjB95B,QAASrB,GACTqoB,WAAYA,KAM5B,OAAO,KAwPMqb,CAAqBhoC,O,iMC56BxCY,EAAY,OAAAm+B,EAAA,IAAW,SAACl+B,GAC1B,cAAAm+B,EAAA,GAAa,CACTl+B,KAAM,CACFC,MAAO,OACPY,QAAS,UAEbsE,UAAW,GACXpE,gBAAiB,CACbuL,SAAU,WACVzL,QAAS,YACTL,QAAS,OAETC,WAAY,SACZvE,MAAO,IAAU6Q,YAAY6S,YAC7B,6BAA8B,CAC1B/e,QAAS,aAEb,aAAc,CACVD,KAAM,EAEN2V,WAAY,IAAUyJ,KAAKC,KAC3BpR,SAAU,IAAUqR,SAASC,GAAGgnB,MAChC5mB,cAAe,SACf1V,WAAY,IAAU2V,WAAW4mB,YAErC,iBAAkB,CACdx5B,aAAc,OACdtB,SAAU,WACVG,IAAK,MACL46B,UAAW,mBACX,eAAgB,CACZpnC,MAAO,OACPgW,OAAQ,QAEZ,oBAAqB,CACjBpH,SAAU,IAAUqR,SAASC,GAAGmnB,OAChCprC,MAAO,IAAU6Q,YAAYC,mBAIzCu6B,mBAAoB,CAChB/mC,QAAS,OACTC,WAAY,SACZvD,OAAQ,UACR,aAAc,CACVA,OAAQ,WAGhBohC,OAAQ,CACJphC,OAAQ,SACRopB,cAAe,OACfzX,SAAU,aAST24B,EAA6C,SAAC,G,MAAE1iC,EAAK,QACxD7D,EAAUnB,IAEVk4B,EAAc,OAAAyP,EAAA,KAEdhxB,EAAU,cAEhB,GAAIuhB,EAAYz7B,QACZ,OACI,yBAAKD,UAAW2E,EAAQjB,MACpB,kBAAC,IAAQ,OAKrB,IAAMk0B,EAA6B,QAAhB,EAAA8D,EAAYx9B,YAAI,eAAEy5B,QAAQC,WAsB7C,OACI,yBAAK53B,UAAW2E,EAAQjB,MACpB,yBAAK1D,UAAW2E,EAAQkE,WACpB,yBAAK7I,UAAW2E,EAAQF,iBACpB,kBAAC,IAAO,CAAC1F,MAAOyJ,EAAOzI,MAAOqrC,EAAA,EAAWC,WACzC,yBAAKrrC,UAAW2E,EAAQsmC,oBACnB7iB,EAAA,EAAYve,UAAUue,EAAA,EAAgBkjB,qBACnC,kBAAC7G,EAAA,EAAM,CAAC/jC,QAAQ,OAAOd,MAAM,UAAUC,KAAK,QAAQG,UAAW2E,EAAQq9B,OAAQ/4B,QA3BnF,WACX2uB,EAMDzd,EAAQ5K,KAAK,CACT2N,SAAU,cAAc,gBAAc,gBAAcquB,yCANxDpxB,EAAQ5K,KAAK,CACT2N,SAAU,cAAc,gBAAc,gBAAcsuB,4BAwB6DjtB,UAAW,kBAAC,IAAwB,OAAG,cAI/I6J,EAAA,EAAYve,UAAUue,EAAA,EAAgBkjB,qBAAuB1T,GAC1D,kBAAC6M,EAAA,EAAM,CAAC/jC,QAAQ,OAAOd,MAAM,UAAUC,KAAK,QAAQG,UAAW2E,EAAQq9B,OAAQ/4B,QAlBnF,WAChBkR,EAAQ5K,KAAK,CACT2N,SAAU,4BAgB2GqB,UAAW,kBAAC,IAAgB,OAAG,kB,44BC7G1J,GAAY,OAAAojB,EAAA,IAAW,SAACl+B,GAC1B,cAAAm+B,EAAA,GAAa,CACTl+B,KAAM,CACF2K,SAAU,SAEdzK,UAAW,CACPD,MAAO,QAEX8nC,aAAc,CACV9nC,MAAO,GACPgW,OAAQ,GACR1I,YAAa,EACbD,YAAa,GAEjBpR,MAAO,CACH+D,MAAO,GACPgW,OAAQ,GACR+xB,WAAY,EACZhnB,aAAc,EACdzT,YAAa,EACb06B,UAAW,GAEflqC,KAAM,CACFmqC,SAAU,GAEd59B,MAAO,CACHuV,QAAS,GACT5f,MAAO,GACPgW,OAAQ,IAEZkyB,cAAe,CACXtnC,QAAS,UAEbunC,oBAAqB,CACjB5nC,QAAS,OACTtD,OAAQ,UACR+C,MAAO,OACP,UAAW,CACPY,QAAS,SACT0V,WAAY,uCACZ1Y,WAAY,KAEhB,kBAAmB,CACf2C,QAAS,OACTC,WAAY,UAEhB,WAAY,CACRG,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACV,aAAc,CACVzG,SAAU,OACVhE,WAAY,IACZ0V,cAAe,aAEnB,eAAgB,CACZrkB,MAAO,sBACP2S,SAAU,WACVhE,WAAY,KACZ0V,cAAe,oBAqDtB8nB,GAA4D,SAAC/tC,GACtE,IAAM2G,EAAU,KAGTqnC,EAAwB,iCAE3B,SAAC5sC,EAA8BP,EAAeL,GAK3B,UAAXA,GAIAH,EAHSQ,EAJA,GAKC,KAMlB,KACH,GAEK,EAAoB,mBAAoC,CAC1DotC,aAAa,EACbC,mBAAmB,EACnB3M,OAAQ,EACRnoB,OAAQ,GACRxE,MAAO,KALJzU,EAAK,KAAEC,EAAQ,KAoBhBC,EAAY,SAAC+Y,EAAgBmoB,EAAgB4M,GAC/C/tC,GAAS,SAACyQ,GACN,OAAO,GAAP,MACOA,GAAS,CACZq9B,mBAAmB,OA+O5B,SACHpqC,EACAJ,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOsqC,GACPpqC,UAAW,CACPoV,OAAQtV,EAAMsV,OACd2oB,MAAOj+B,EAAMi+B,MACbR,OAAQz9B,EAAMy9B,OACd8M,cAAevqC,EAAMuqC,cACrBC,mBAAoBxqC,EAAMwqC,mBAC1BC,kBAAmBzqC,EAAMyqC,kBACzBC,oBAAqB1qC,EAAM0qC,oBAC3BC,aAAc3qC,EAAM2qC,aACpBC,iBAAkB5qC,EAAM4qC,iBACxBC,YAAa7qC,EAAM6qC,YACnBC,UAAW9qC,EAAM8qC,UACjBC,SAAU/qC,EAAM+qC,SAChB50B,oBAAqBnW,EAAMmW,qBAE/BpW,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MA7PZsuC,CAhBgD,CAC5C11B,OAAQA,EACR2oB,MAlDe,GAmDfR,OAAQA,EACR8M,cAAeruC,EAAMquC,cACrBC,mBAAoBtuC,EAAMsuC,mBAC1BC,kBAAmBvuC,EAAMuuC,kBACzBC,oBAAqBxuC,EAAMwuC,oBAC3BC,aAAczuC,EAAMyuC,aACpBC,iBAAkB1uC,EAAM0uC,iBACxBC,YAAa3uC,EAAM2uC,YACnBC,UAAW5uC,EAAM4uC,UACjBC,SAAU7uC,EAAM6uC,SAChB50B,oBAAqBja,EAAMia,sBAK3B,GAEA,SAAC/Z,GAAS,OAAA6uC,EAAqB7uC,EAAMkZ,EAAQmoB,EAAQ4M,MAErD,SAAU3tC,GACN,YAAiB,KAAMA,EAAQ,SAE/BJ,GAAS,SAACyQ,GACN,OAAO,GAAP,MACOA,GAAS,CACZq9B,mBAAmB,EACnBjuC,WAAW,WAOzB8uC,EAAuB,SAAC7uC,EAAuBkZ,EAAgBmoB,EAAgB4M,GACjF,IAAMa,EAAkB9uC,EAAK+uC,MAAMC,cAAcC,YAC3CC,EAAclvC,EAAK+uC,MAAMC,cAAcE,YAGzCC,EAA2C,GAE3Cz6B,EAAQzU,EAAMyU,MAQlB,GANKu5B,EAGDv5B,EAAQ,GAFRy6B,EAAY,GAAH,GAAOlvC,EAAMyU,OAAK,GAKV,IAAjBA,EAAM0B,OACN+4B,EAAYL,EAAgBruC,KAAI,SAACC,GAAwB,gBAClDA,GAAM,CACTC,MAAOD,EAAO4Q,OACdzQ,MAAOH,EAAOU,eAIlB,I,eAAW6tC,GAIU,IAFAv6B,EAAMwE,QAAO,SAACrO,GAAsC,OAAAA,EAAKlK,MAAMwY,cAAclD,SAASg5B,EAAY39B,WAAS8E,QAGxH+4B,EAAU99B,KAAK,GAAD,MACP49B,GAAW,CACdtuC,MAAOsuC,EAAY39B,OACnBzQ,MAAOouC,EAAY7tC,SARL,MAAA0tC,EAAA,eAAiB,C,EAArB,MAc1B5uC,GAAS,SAACyQ,GACN,OAAO,GAAP,MACOA,GAAS,CACZuI,OAAQA,EACR80B,mBAAmB,EACnBt5B,MAAOy6B,EACP9N,OAAQA,EA/HG,GAgIX0M,YAAwC,IAA3Be,EAAgB14B,QAAgBirB,EAhIlC,GAgI4D6N,EACvEnvC,WAAW,QAsCjBqvC,EAAe,OAAAC,GAAA,IAAW,SAAC9pC,GAAiB,OAC9CuW,QAAS,CACLzJ,gBAAiB9M,EAAM8N,QAAQi8B,OAAOC,MACtC7tC,MAAO,sBACP6kB,UAAWhhB,EAAMiqC,QAAQ,GACzBn7B,SAAU,IAEdo7B,MAAO,CACH,WAAY,CACR10B,OAAQ,qBAEZrZ,MAAO6D,EAAM8N,QAAQi8B,OAAOC,UAXf,CAajBG,GAAA,GAEEC,EAAgB,SAACrlC,EAAeslC,GAClC,YAAczrC,IAAVyrC,GAAiC,OAAVA,QAENzrC,IAAVmG,GAAiC,OAAVA,GAEvBA,EAAM8L,OAASw5B,EAHftlC,EAOH,kBAAC8kC,EAAY,CAAC9kC,MAAOA,EAAK,aAAa,SAASmlC,OAAO,EAAM/F,UAAU,SACnE,8BAAUp/B,EAAM8P,UAAU,EAAGw1B,GAAM,SAM7CvuC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAO,GAAP,MACOuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAACumC,GAAA,EAAgB,CAAC5kC,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBA2BnC,OACI,kBAACquC,GAAA,EAAoB,CACjB1lC,GAAIrK,EAAMqK,GACV2lC,SAAU,GACV/tC,QAAS9B,EAAM+tC,kBACf9rC,cAAepC,EAAMoC,cACrBd,KAAMtB,EAAMsB,KACZ2uC,WAAYjwC,EAAM8B,SAClBjB,MAAOb,EAAMa,MACbotC,YAAa9tC,EAAM8tC,YACnBC,kBAAmB/tC,EAAM+tC,kBACzBt5B,MAAOzU,EAAMyU,MACbs7B,aAjNa,W,IAAC,sDACd/vC,EAAM8tC,cAAgB9tC,EAAM+tC,mBAC5B7tC,EAAUF,EAAMiZ,OAAQjZ,EAAMohC,QAAQ,IAiNtCv/B,UAAc2E,EAAQf,UAAS,IAAI5F,EAAMgC,UACzCmuC,iBAAiB,EACjB9uC,YAjHY,SAACqL,EAAwEpL,GAUrFtB,EAAMqB,aACNrB,EAAMqB,YAAYqL,EAAWpL,IAuG7BiJ,QAnGQ,SAACnJ,GACbhB,GAAS,SAACyQ,GACN,OAAO,GAAP,MACOA,GAAS,CACZq9B,mBAAmB,EACnBD,aAAa,EACb70B,OAAQ,GACRmoB,OAAQ,EACR3sB,MAAO,SA4FXw7B,OAvFO,SAAChvC,GAEZf,EAAUF,EAAMiZ,OAAQ,GAAG,IAsFvB/W,eAAgB,SAACC,GAAwC,OAAAA,EAAOvB,OAChEs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAA,EAAMA,QAAUyB,EAAOzB,OAC7DwvC,cAAerC,EACfxrC,OAAQxC,EAAMwC,OACd4X,WA5Ca,SAACvZ,EAAsCwZ,GAkBxD,OAjBsBxZ,EAAMF,KAAI,SAAC2B,EAAqCe,GAClE,IAAItC,EAAQuB,EAAOvB,MAKnB,OAJIuB,EAAOvB,MAAMuV,OAAS,KACtBvV,EAAWuB,EAAOvB,MAAMuZ,UAAU,EAAG,IAAG,OAIxC,kBAACg2B,GAAA,EAAI,MACGj2B,EAAY,CAAEhX,MAAK,IAAG,CAC1BC,IAAKD,EACLtC,MAAOA,EAEPc,KAAK,eAgCbmB,aAAc,SAACV,EAAQ,G,QAAU,WAC7B,OACI,yBAAKN,UAAW2E,EAAQmnC,qBACpB,yBAAK9rC,UAAU,gBAAgBM,EAAOiuC,QAAU,kBAAC,KAAU,CAACh8B,SAAS,UAAa,kBAAC,KAAkB,CAACA,SAAS,WAC/G,yBAAKvS,UAAU,SACX,yBAAKA,UAAU,WAAW6tC,EAAcvtC,EAAOvB,MAAsB,QAAf,EAAAf,EAAMwwC,iBAAS,eAAEzvC,QACvE,yBAAKiB,UAAU,aAAa6tC,EAAcvtC,EAAOmuC,MAAsB,QAAf,EAAAzwC,EAAMwwC,iBAAS,eAAEC,WAKzFhuC,YAAa,SAACjB,GAAW,OACrB,kBAACkvC,EAAA,EAAS,MACFlvC,EAAM,CACVkB,QAAS1C,EAAM0C,QACf3B,MAAOf,EAAMe,MACb8B,SAAU7C,EAAM6C,SAChBF,WAAW,EACXlB,WAAYF,EAAcC,EAAQrB,EAAM+tC,mBACxCprC,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,WAClBlB,KAAM7B,EAAM6B,YAkIhC,I,MAAMusC,GAAqB,IAAG,w8L,4YC1ejBuC,GAAkE,SAAC3wC,GAGtE,MAAoB,mBAAuC,CAC7DE,KAAM,KADHC,EAAK,KAAEC,EAAQ,KAIhBwwC,EAAuB,aAAqDC,GAAsB,CACpG7sC,UAAW,CACPiW,oBAAqBja,EAAMia,qBAE/BpW,YAAa,gBAGjB,mBAAQ,YAEC+sC,EAAqB3uC,UACrB2uC,EAAqB9tC,OACtB8tC,EAAqB1wC,MACrB0wC,EAAqB1wC,KAAK8U,QAC1B47B,EAAqB1wC,KAAK8U,OAAO87B,iBAEjC1wC,GAAS,SAACyQ,GACE,IAEF+D,EAFsBg8B,EAAqB1wC,KAAM8U,OAAM,gBAEIrU,KAAI,SAACuZ,GAClE,OAAO,SACAA,GAAO,CACVnZ,MAAOmZ,EAAQ3R,YACf1H,MAAOqZ,EAAQ3R,iBAGvB,OAAO,SACAsI,GAAS,CACZ3Q,KAAM0U,SAKnB,CAACg8B,EAAqB3uC,QAAS2uC,EAAqB1wC,KAAM0wC,EAAqB9tC,QAGlF,IAAM3B,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAO,SACAuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAACumC,GAAA,EAAgB,CAAC5kC,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBA2BnC,OAAI1B,EAAM8B,SAEF,kBAACivC,GAAA,EAAY,CACThvC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS2uC,EAAqB3uC,QAC9BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA4C,OAAAA,EAAOvB,OAEpEyB,OAAQxC,EAAMwC,OACdV,UAAU,EACVsY,WArCS,SAACvZ,EAA0CwZ,GAkB5D,OAjBsBxZ,EAAMF,KAAI,SAAC2B,EAAyCe,GACtE,IAAItC,EAAQuB,EAAOvB,MAKnB,OAJIuB,EAAOvB,MAAMuV,OAAS,KACtBvV,EAAWuB,EAAOvB,MAAMuZ,UAAU,EAAG,IAAG,OAIxC,kBAACg2B,GAAA,EAAI,MACGj2B,EAAY,CAAEhX,MAAK,IAAG,CAC1BC,IAAKD,EACLtC,MAAOA,EAEPc,KAAK,eAyBTY,YAAa,SAACjB,GAAW,OACrB,kBAACkvC,EAAA,EAAS,MACFlvC,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQovC,EAAqB3uC,SACvDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,KAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,KAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAWlC,kBAACstC,GAAA,EAAY,CACThvC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS2uC,EAAqB3uC,QAC9BC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA4C,OAAAA,EAAOvB,OAEpEyB,OAAQxC,EAAMwC,OACdC,YAAa,SAACjB,GAAW,OACrB,kBAACkvC,EAAA,EAAS,MACFlvC,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQovC,EAAqB3uC,SACvDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,KAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,KAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,cA2BhCotC,GAAuB,IAAG,0f,sfC/N1B,GAAY,OAAAlN,EAAA,IAAW,SAACl+B,GAC1B,cAAAm+B,EAAA,GAAa,CACTl+B,KAAM,CACF2K,SAAU,SAEdzK,UAAW,CACPD,MAAO,QAEX8nC,aAAc,CACV9nC,MAAO,GACPgW,OAAQ,GACR1I,YAAa,EACbD,YAAa,GAEjBpR,MAAO,CACH+D,MAAO,GACPgW,OAAQ,GACR+xB,WAAY,EACZhnB,aAAc,EACdzT,YAAa,EACb06B,UAAW,GAEflqC,KAAM,CACFmqC,SAAU,GAEd59B,MAAO,CACHuV,QAAS,GACT5f,MAAO,GACPgW,OAAQ,IAEZkyB,cAAe,CACXtnC,QAAS,UAEbunC,oBAAqB,CACjB5nC,QAAS,OACTtD,OAAQ,UACR+C,MAAO,OACP,UAAW,CACPY,QAAS,SACT0V,WAAY,uCACZ1Y,WAAY,KAEhB,kBAAmB,CACf2C,QAAS,OACTC,WAAY,UAEhB,WAAY,CACRG,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACV,aAAc,CACVzG,SAAU,OACVhE,WAAY,IACZ0V,cAAe,aAEnB,eAAgB,CACZrkB,MAAO,sBACP2S,SAAU,WACVhE,WAAY,KACZ0V,cAAe,oBAwCtB+qB,GAA8C,SAAChxC,GACxD,IAAM2G,EAAU,KAGTqnC,EAAwB,iCAE3B,SAAC5sC,EAA8BP,EAAeL,GAK3B,UAAXA,GAIAH,EAHSQ,EAJA,GAKC,KAMlB,KACH,GAEK,EAAoB,mBAA6B,CACnDotC,aAAa,EACbC,mBAAmB,EACnB3M,OAAQ,EACRnoB,OAAQ,GACRxE,MAAO,KALJzU,EAAK,KAAEC,EAAQ,KAoBhBC,EAAY,SAAC+Y,EAAgBmoB,EAAgB4M,GAC/C/tC,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZq9B,mBAAmB,OAsO5B,SACHpqC,EACAJ,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOmtC,GACPjtC,UAAW,CACPoV,OAAQtV,EAAMsV,OACd2oB,MAAOj+B,EAAMi+B,MACbR,OAAQz9B,EAAMy9B,QAElB19B,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MApPZ0wC,CAN0C,CACtC93B,OAAQA,EACR2oB,MAlDe,GAmDfR,OAAQA,IAKR,GAEA,SAACrhC,GAAS,OAAA6uC,EAAqB7uC,EAAMkZ,EAAQmoB,EAAQ4M,MAErD,SAAU3tC,GACN,YAAiB,KAAMA,EAAQ,SAE/BJ,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZq9B,mBAAmB,EACnBjuC,WAAW,WAOzB8uC,EAAuB,SAAC7uC,EAAqBkZ,EAAgBmoB,EAAgB4M,GAC/E,IAAMgD,EAAmBjxC,EAAK+uC,MAAMmC,eAAeC,aAC7CjC,EAAclvC,EAAK+uC,MAAMmC,eAAehC,YAG1CC,EAA4C,GAE5Cz6B,EAAQzU,EAAMyU,MAQlB,GANKu5B,EAGDv5B,EAAQ,GAFRy6B,EAAY,MAAIlvC,EAAMyU,OAAK,GAKV,IAAjBA,EAAM0B,OACN+4B,EAAY8B,EAAiBxwC,KAAI,SAACC,GAAyB,OAAC,SACrDA,GAAM,CACTC,MAAOD,EAAO0wC,UACdvwC,MAAOH,EAAOU,eAIlB,I,eAAW+vC,GAIU,IAFAz8B,EAAMwE,QAAO,SAACrO,GAAuC,OAAAA,EAAKlK,MAAMwY,cAAclD,SAASk7B,EAAaC,cAAYh7B,QAG7H+4B,EAAU99B,KAAK,SACR8/B,GAAY,CACfxwC,MAAOwwC,EAAaC,UACpBvwC,MAAOswC,EAAa/vC,SARL,MAAA6vC,EAAA,eAAkB,C,EAAtB,MAc3B/wC,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZuI,OAAQA,EACR80B,mBAAmB,EACnBt5B,MAAOy6B,EACP9N,OAAQA,EArHG,GAsHX0M,YAAyC,IAA5BkD,EAAiB76B,QAAgBirB,EAtHnC,GAsH6D6N,EACxEnvC,WAAW,QAsCjBqvC,EAAe,OAAAC,GAAA,IAAW,SAAC9pC,GAAiB,OAC9CuW,QAAS,CACLzJ,gBAAiB9M,EAAM8N,QAAQi8B,OAAOC,MACtC7tC,MAAO,sBACP6kB,UAAWhhB,EAAMiqC,QAAQ,GACzBn7B,SAAU,IAEdo7B,MAAO,CACH,WAAY,CACR10B,OAAQ,qBAEZrZ,MAAO6D,EAAM8N,QAAQi8B,OAAOC,UAXf,CAajBG,GAAA,GAEEC,EAAgB,SAACrlC,EAAeslC,GAClC,YAAczrC,IAAVyrC,GAAiC,OAAVA,QAENzrC,IAAVmG,GAAiC,OAAVA,GAEvBA,EAAM8L,OAASw5B,EAHftlC,EAOH,kBAAC8kC,EAAY,CAAC9kC,MAAOA,EAAK,aAAa,SAASmlC,OAAO,EAAM/F,UAAU,SACnE,8BAAUp/B,EAAM8P,UAAU,EAAGw1B,GAAM,SAM7CvuC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAO,SACAuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAACumC,GAAA,EAAgB,CAAC5kC,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBA2BnC,OACI,kBAACquC,GAAA,EAAoB,CACjB1lC,GAAIrK,EAAMqK,GACV2lC,SAAU,GACV/tC,QAAS9B,EAAM+tC,kBACf9rC,cAAepC,EAAMoC,cACrBd,KAAMtB,EAAMsB,KACZ2uC,WAAYjwC,EAAM8B,SAClBjB,MAAOb,EAAMa,MACbotC,YAAa9tC,EAAM8tC,YACnBC,kBAAmB/tC,EAAM+tC,kBACzBt5B,MAAOzU,EAAMyU,MACbs7B,aAvMa,W,IAAC,sDACd/vC,EAAM8tC,cAAgB9tC,EAAM+tC,mBAC5B7tC,EAAUF,EAAMiZ,OAAQjZ,EAAMohC,QAAQ,IAuMtCv/B,UAAc2E,EAAQf,UAAS,IAAI5F,EAAMgC,UACzCmuC,iBAAiB,EACjB9uC,YAjHY,SAACqL,EAA0EpL,GAUvFtB,EAAMqB,aACNrB,EAAMqB,YAAYqL,EAAWpL,IAuG7BiJ,QAnGQ,SAACnJ,GACbhB,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZq9B,mBAAmB,EACnBD,aAAa,EACb70B,OAAQ,GACRmoB,OAAQ,EACR3sB,MAAO,SA4FXw7B,OAvFO,SAAChvC,GAEZf,EAAUF,EAAMiZ,OAAQ,GAAG,IAsFvB/W,eAAgB,SAACC,GAAyC,OAAAA,EAAOvB,OACjEs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAA,EAAMA,QAAUyB,EAAOzB,OAC7DwvC,cAAerC,EACfxrC,OAAQxC,EAAMwC,OACd4X,WA5Ca,SAACvZ,EAAuCwZ,GAkBzD,OAjBsBxZ,EAAMF,KAAI,SAAC2B,EAAsCe,GACnE,IAAItC,EAAQuB,EAAOvB,MAKnB,OAJIuB,EAAOvB,MAAMuV,OAAS,KACtBvV,EAAWuB,EAAOvB,MAAMuZ,UAAU,EAAG,IAAG,OAIxC,kBAACg2B,GAAA,EAAI,MACGj2B,EAAY,CAAEhX,MAAK,IAAG,CAC1BC,IAAKD,EACLtC,MAAOA,EAEPc,KAAK,eAgCbmB,aAAc,SAACV,EAAQ,GAAU,WAC7B,OACI,yBAAKN,UAAW2E,EAAQmnC,qBACpB,yBAAK9rC,UAAU,gBACVM,EAAOiuC,QAAU,kBAAC,KAAU,CAACh8B,SAAS,UAAY,kBAAC,KAAkB,CAACA,SAAS,WAEpF,yBAAKvS,UAAU,SACX,yBAAKA,UAAU,WAAW6tC,EAAcvtC,EAAOvB,QAC/C,yBAAKiB,UAAU,aAAa6tC,EAAcvtC,EAAOmuC,WAKjEhuC,YAAa,SAACjB,GAAW,OACrB,kBAACkvC,EAAA,EAAS,MACFlvC,EAAM,CACVkB,QAAS1C,EAAM0C,QACf3B,MAAOf,EAAMe,MACb8B,SAAU7C,EAAM6C,SAChBF,WAAW,EACXlB,WAAYF,EAAcC,EAAQrB,EAAM+tC,mBACxCprC,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,WAClBlB,KAAM7B,EAAM6B,YA8DhC,I,GAAMovC,GAAa,IAAG,szB,qOCrahB,GAAY,OAAAtN,EAAA,IAAW,SAACl+B,GAC1B,cAAAm+B,EAAA,GAAa,CACT2N,WAAY,CACR,uBAAwB,CACpBjrC,KAAM,EACNC,QAAS,IAGjBirC,OAAQ,CACJxlB,cAAe,cAEnBpmB,UAAW,CACPD,MAAO,QAEX8rC,eAAgB,CACZ,wBAAyB,CACrB71B,UAAW,UAGnB81B,UAAW,CACP/rC,MAAO,QAEXyZ,QAAS,CACL9Y,KAAM,GAEVG,gBAAiB,CACbP,QAAS,OACTE,eAAgB,iBAGpB49B,OAAQ,CACJphC,OAAQ6C,EAAMqF,QAAQ,GACtBuF,SAAU,QAEdshC,UAAW,CACP3lB,cAAe,QAEnB4lB,eAAgB,CACZtrC,KAAM,GAEVurC,cAAe,CACX/+B,SAAU,OACVwP,UAAW,QAEfwvB,sBAAuB,CACnB5rC,QAAS,OACTC,WAAY,WACZI,QAAS,OAEbwrC,QAAS,CACLpsC,MAAO,QAEXqsC,YAAa,CACTpvC,OAAQ,GAEZqvC,2BAA4B,CACxB/rC,QAAS,OACTC,WAAY,UAEhB8L,eAAgB,CACZ/L,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBT,MAAO,OACP6c,UAAW,cAoGV0vB,GAA4D,SAAClyC,GACtE,IAAM2G,EAAU,KAEV8yB,EAAS,OAAA0Y,GAAA,KAET,EAAoB,mBAAoC,CAC1DC,iBAAiB,EACjBC,aAAa,EACb/T,WAAW,IAHRn+B,EAAK,KAAEC,EAAQ,KAMhBkyC,EAAsC,CACxCC,cAAe,GACfC,SAAS,GAGPC,EAA4B,CAC9BC,SAAU,GACVF,SAAS,GAGPG,EAAwC,CAC1Cj4B,eAAgB,GAChB83B,SAAS,GAGPI,EAAwC,CAC1CnP,eAAgB,GAChB+O,SAAS,GAGPK,EAAoC,CACtCC,aAAc,GACdN,SAAS,GAGPO,EAAkC,CACpCC,YAAa,GACbR,SAAS,GAGPS,EAAoC,CACtCC,aAAc,GACdV,SAAS,GAGPW,EAA0C,CAC5CrC,gBAAiB,GACjB0B,SAAS,GAGPY,EAAqC,CACvC7O,aAAc,GACdiO,SAAS,GAGPa,EAA+C,CACjD7O,kBAAmB,GACnBgO,SAAS,GAGPc,EAAoC,CACtCC,kBAAclvC,EACdmvC,mBAAenvC,EACfovC,gBAAiBnB,EACjBoB,UAAWjB,EACXkB,iBAAkBhB,EAClBiB,iBAAkBhB,EAClBiB,cAAehB,EACfiB,aAAcf,EACdgB,eAAgBd,EAChBe,oBAAgB3vC,EAChB4vC,kBAAc5vC,EACd6vC,uBAAmB7vC,EACnB8vC,kCAA8B9vC,EAC9B+vC,gCAA4B/vC,EAC5BgwC,wBAAoBhwC,EACpBiwC,sBAAkBjwC,EAClBkwC,oBAAgBlwC,EAChBmG,WAAOnG,EACPmwC,WAAOnwC,EACPowC,sBAAkBpwC,EAClBqwC,kBAAmBvB,EACnBwB,wBAAoBtwC,EACpBuwC,sBAAkBvwC,EAClBwwC,yBAAqBxwC,EACrBywC,uBAAmBzwC,EACnB0wC,cAAe3B,EACf4B,mBAAoB3B,EACpB4B,+BAAgC,EAChCC,sBAAsB,GAGtB5rC,EAAa,MACVgqC,GAGHtzC,EAAMm1C,eACN7rC,EAAgBtJ,EAAMm1C,cAM1B,IAAMhsC,EAAW,SAACiB,EAAmChB,GAGjD,IAAIgsC,GAAY,EAEX,IAAEC,QAAQ/B,EAAelqC,KAC1BgsC,GAAY,GAEZp1C,EAAMwU,UACNxU,EAAMwU,SAASpL,EAAQgsC,GAEvBp1C,EAAMuK,SACNvK,EAAMuK,WAIR+qC,EAAa,WAEf,GAAIt1C,EAAMuK,QACN,OAAOvK,EAAMuK,WAyDfgrC,EAAU,SAACnrC,GAAsC,kBACnDA,EAAKorC,UAAU,2BAA2B,GAC1CprC,EAAKwC,OAAM,WACPxC,EAAKe,OAAO,oBAAgB9G,GAC5B+F,EAAKe,OAAO,qBAAiB9G,GAC7B+F,EAAKe,OAAO,kBAAmBmnC,GAC/BloC,EAAKe,OAAO,YAAasnC,GACzBroC,EAAKe,OAAO,mBAAoBwnC,GAChCvoC,EAAKe,OAAO,mBAAoBynC,GAChCxoC,EAAKe,OAAO,gBAAiB0nC,GAC7BzoC,EAAKe,OAAO,eAAgB4nC,GAC5B3oC,EAAKe,OAAO,iBAAkB8nC,GAC9B7oC,EAAKe,OAAO,sBAAkB9G,GAC9B+F,EAAKe,OAAO,oBAAgB9G,GAC5B+F,EAAKe,OAAO,yBAAqB9G,GACjC+F,EAAKe,OAAO,oCAAgC9G,GAC5C+F,EAAKe,OAAO,kCAA8B9G,GAC1C+F,EAAKe,OAAO,0BAAsB9G,GAClC+F,EAAKe,OAAO,wBAAoB9G,GAChC+F,EAAKe,OAAO,sBAAkB9G,GAC9B+F,EAAKe,OAAO,aAAS9G,GACrB+F,EAAKe,OAAO,aAAS9G,GACrB+F,EAAKe,OAAO,wBAAoB9G,GAChC+F,EAAKe,OAAO,oBAAqBgoC,GACjC/oC,EAAKe,OAAO,0BAAsB9G,GAClC+F,EAAKe,OAAO,wBAAoB9G,GAChC+F,EAAKe,OAAO,2BAAuB9G,GACnC+F,EAAKe,OAAO,yBAAqB9G,GACjC+F,EAAKe,OAAO,wBAAwB,GACpCf,EAAKe,OAAO,sCAAkC9G,GAE9C+F,EAAKe,OAAO,gBAAiBioC,GAC7BhpC,EAAKe,OAAO,qBAAsBkoC,MAEtCjpC,EAAKorC,UAAU,2BAA2B,KAGxCC,EAAe,SAEjBrrC,EACAJ,EACAC,EAEAb,GAEA,OACI,yBAAKpH,UAAW2E,EAAQF,iBAEpB,6BACI,kBAACggC,EAAA,EAAM,CACH7kC,MAAM,UACNuL,KAAK,SACLnL,UAAW2E,EAAQq9B,OACnB/4B,QAAS,aAGT/I,SAAU8H,GAAcC,GAAY9J,EAAMiyC,iBAAe,WAKjE,6BACI,kBAAC3L,EAAA,EAAM,CACH7kC,MAAM,UACNuL,KAAK,SACLnL,UAAW2E,EAAQq9B,OACnB/4B,QAASsqC,EAAQnrC,IAAK,UAM9B,6BACI,kBAACq8B,EAAA,EAAM,CAAC7kC,MAAM,UAAUuL,KAAK,SAASnL,UAAW2E,EAAQq9B,OAAQ/4B,QAASqqC,GAAU,aAwF9FI,EAAgB,SAACtrC,EAAmCJ,EAAqBC,EAAmBb,GAC9F,IAAMusC,EAAuE,cAAzDlc,EAAOv5B,KAAMu5B,OAAO5R,aAAaC,oBAErD,OACI,yBAAK9lB,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,qBAAsByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACjF,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACopC,GAAA,EAAkB,MACXrpC,EAAK,CACTxL,MAAO40C,EAAc,YAAc,cACnCjzC,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACdV,UAAU,EACVmY,qBAAqB,QAIjC,kBAAC,IAAK,CAAC3Y,KAAM,oBAAqByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAChF,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aA0CxB+0C,EAAsB,SAAC1rC,EAAmCJ,EAAqBC,EAAmBb,GACpG,IAAMusC,EAAuE,cAAzDlc,EAAOv5B,KAAMu5B,OAAO5R,aAAaC,oBAErD,OACI,yBAAK9lB,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,kCAAmCyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC9F,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC82B,GAAA,EAAsB,MACf/2B,EAAK,CACTxL,MAAO40C,EAAc,gBAAkB,kBACvCjzC,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACdV,UAAU,EACVmY,qBAAqB,QAIjC,kBAAC,IAAK,CAAC3Y,KAAM,2BAA4ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACvF,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aAQxBg1C,EAAoB,SAAC3rC,EAAmCJ,EAAqBC,EAAmBb,GAClG,OACI,yBAAKpH,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,6BAA8ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACzF,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACuhC,GAAoB,MACbxhC,EAAK,CACT1L,MAAO0L,EAAM1L,MACbE,MAAM,SACN2B,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACd6rC,eAAe,EACfE,mBAAmB,EACnBC,qBAAqB,EACrB1sC,UAAU,EACVwsC,oBAAoB,EACpBr0B,qBAAqB,QAIjC,kBAAC,IAAK,CAAC3Y,KAAM,wBAAyByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACpF,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aAgDxBi1C,EAAoB,SAAC5rC,EAAmCJ,EAAqBC,EAAmBb,GAClG,OACI,yBAAKpH,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,8BAA+ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC1F,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACypC,GAAA,EAAoB,MACb1pC,EAAK,CACTxL,MAAM,SACN2B,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACdV,UAAU,EACVmY,qBAAqB,QAKjC,kBAAC,IAAK,CAAC3Y,KAAM,yBAA0ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACrF,SAAC,G,IAAE0L,EAAK,QAAM,OAAO,OAClB,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aAwwB9B,OACI,oCACI,kBAACm1C,EAAA,EAAS,CACN1rC,MAAM,WAEN4U,QAAS,2CACTC,KAAMlf,EAAMkyC,YACZ/yB,QA1qCa,SAACC,GAClBA,GACAnf,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZwhC,aAAa,OAIjBryC,EAAMuK,SACNvK,EAAMuK,WAGVnK,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZwhC,aAAa,QA2pCjB7yB,cAAe,KACfC,WAAY,QAGhB,kBAAComB,EAAA,EAAM,CAACv7B,KAAMtK,EAAMsK,KAAMC,QA9rClB,WACRpK,EAAMm+B,UACNl+B,GAAS,SAACyQ,GACN,OAAO,SACAA,GAAS,CACZwhC,aAAa,OAIjBryC,EAAMuK,SACNvK,EAAMuK,WAorCkCuI,SAAS,KAAKnQ,WAAW,EAAMX,UAAW2E,EAAQ4qC,WAAYtS,OAAQ,SAC9G,kBAAC6G,EAAA,EAAW,CAAC9jC,UAAW2E,EAAQ6qC,QAAM,mBACrC/X,EAAOx3B,QACJ,kBAACskC,EAAA,EAAa,KACV,yBAAKvkC,UAAW2E,EAAQsL,gBACpB,kBAAC,IAAQ,QApMgC,cAAzDwnB,EAAOv5B,KAAMu5B,OAAO5R,aAAaC,oBAE7B,kBAAC,IAAI,CACD3e,SAAU,SAACC,EAAQgB,GAAsC,OAAAjB,EAASiB,EAAMhB,IACxE+sC,SAAQ,MAAO,KACf7sC,cAAeA,EACfS,aAAc,CAAEC,YAAY,EAAMC,UAAU,GAC5Cq1B,yBAAyB,EACzBp1B,OAAQ,SAAC,G,IAAEC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAEC,EAAQ,WAAe,OAAP,SACvD,0BAAMd,SAAUgB,GACZ,kBAACo8B,EAAA,EAAa,CAAC37B,UAAU,GACrB,kBAAC8d,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,kBAACJ,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GA73B9D,kBAAC,IAAK,CAACxnB,KAAM,eAAgByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC3E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACkkC,EAAA,EAAS,MACFnkC,EAAK,CACTxL,MAAM,qBACNoM,KAAK,OACLzK,QAAQ,WACRV,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1B5K,KAAK,eAs3Be,kBAAC6mB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GA72B9D,kBAAC,IAAK,CAACxnB,KAAM,gBAAiByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC5E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACkkC,EAAA,EAAS,MACFnkC,EAAK,CACTxL,MAAM,mBACNoM,KAAK,OACLzK,QAAQ,WACRV,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1B5K,KAAK,eAs2Be,kBAAC6mB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GA71B9D,yBAAK9mB,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,gCAAiCyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC5F,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACsN,GAAA,EAAqB,MACdvN,EAAK,CACTxL,MAAM,UACN2B,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACdV,UAAU,EACVmY,qBAAqB,QAIjC,kBAAC,IAAK,CAAC3Y,KAAM,0BAA2ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACtF,SAAC,G,IAAE0L,EAAK,QAAa,OAAP,OACX,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,eA00BE,kBAAC2nB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,kBAACJ,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GACzB4sB,KAEL,kBAAChtB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAjyB9D,yBAAK9mB,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,kCAAmCyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC9F,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC+N,GAAA,EAAsB,MACfhO,EAAK,CACTxL,MAAM,gBACN2B,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACdV,UAAU,EACVmY,qBAAqB,QAIjC,kBAAC,IAAK,CAAC3Y,KAAM,2BAA4ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACvF,SAAC,G,IAAE0L,EAAK,QAAa,OAAP,OACX,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aA4wBU,kBAAC2nB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GACzBgtB,OAIb,kBAACptB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,kBAACJ,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GACzBitB,KAEL,kBAACrtB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAjsB9D,yBAAK9mB,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,2BAA4ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACvF,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACuhC,GAAoB,MACbxhC,EAAK,CACT1L,MAAO0L,EAAM1L,MACbE,MAAM,QACN2B,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACd6rC,eAAe,EACfC,oBAAoB,EACpBC,mBAAmB,EACnBC,qBAAqB,EACrB1sC,UAAU,EACVmY,qBAAqB,QAKjC,kBAAC,IAAK,CAAC3Y,KAAM,uBAAwByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACnF,SAAC,G,IAAE0L,EAAK,QAAa,OAAP,OACX,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aAsqBU,kBAAC2nB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GACzBktB,OAIb,kBAACttB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,kBAACJ,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAxjB9D,kBAAC,IAAK,CAACxnB,KAAK,oBAAoByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC9E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACkkC,EAAA,EAAS,MACFnkC,EAAK,CACTxL,MAAM,qBACNoM,KAAK,OACLzK,QAAQ,WACRV,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1B5K,KAAK,eAijBe,kBAAC6mB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAnoB9D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,iBAAiByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC3E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,mBACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLw0C,QAASjtC,EAAO6qC,aAAe7qC,EAAO6qC,kBAAe5vC,YA6mBzC,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAlmB9D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,eAAeyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACzE,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,iBACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLy0C,QAASltC,EAAO4qC,eAAiB5qC,EAAO4qC,oBAAiB3vC,cA8kBrD,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,kBAACJ,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GA1e9D,kBAAC,IAAK,CAACxnB,KAAK,qBAAqByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC/E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACkkC,EAAA,EAAS,MACFnkC,EAAK,CACTxL,MAAM,4BACNoM,KAAK,OACLzK,QAAQ,WACRV,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1B5K,KAAK,eAmee,kBAAC6mB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GArjB9D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,+BAA+ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACzF,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,+BACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLw0C,QAASjtC,EAAOgrC,2BAA6BhrC,EAAOgrC,gCAA6B/vC,YA+hBrE,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAphB9D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,6BAA6ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACvF,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,6BACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLy0C,QAASltC,EAAO+qC,6BAA+B/qC,EAAO+qC,kCAA+B9vC,cAggBjF,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,kBAACJ,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GA5Z9D,yBAAK9mB,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,oCAAqCyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAChG,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACmkC,GAAuB,MAChBpkC,EAAK,CACTxL,MAAM,mBACN2B,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACdV,UAAU,EACVmY,qBAAqB,QAIjC,kBAAC,IAAK,CAAC3Y,KAAM,4BAA6ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACxF,SAAC,G,IAAE0L,EAAK,QAAa,OAAP,OACX,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aAuYU,kBAAC2nB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAve9D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,mBAAmByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC7E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,qBACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLw0C,QAASjtC,EAAOmrC,eAAiBnrC,EAAOmrC,oBAAiBlwC,YAid7C,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAtc9D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,iBAAiByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC3E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,mBACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLy0C,QAASltC,EAAOkrC,iBAAmBlrC,EAAOkrC,sBAAmBjwC,cAkbzD,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,kBAACJ,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAvY9D,kBAAC,IAAK,CAACxnB,KAAK,QAAQyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAClE,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACkkC,EAAA,EAAS,MACFnkC,EAAK,CACTxL,MAAM,aACNoM,KAAK,OACLzK,QAAQ,WACRV,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1B5K,KAAK,eAgYe,kBAAC6mB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAvX9D,kBAAC,IAAK,CAACxnB,KAAK,QAAQyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAClE,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACkkC,EAAA,EAAS,MACFnkC,EAAK,CACTxL,MAAM,QACNoM,KAAK,OACLzK,QAAQ,WACRV,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1B5K,KAAK,eAgXe,kBAAC6mB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAvW9D,kBAAC,IAAK,CAACxnB,KAAK,mBAAmByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC7E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACkkC,EAAA,EAAS,MACFnkC,EAAK,CACTxL,MAAM,qBACNoM,KAAK,OACLzK,QAAQ,WACRV,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1B5K,KAAK,mBAoWD,kBAAC6kC,EAAA,EAAa,KAAE+O,EAAarrC,EAAMJ,EAAYC,QAQ/D,kBAAC,IAAI,CACDd,SAAU,SAACC,EAAQgB,GAAsC,OAAAjB,EAASiB,EAAMhB,IACxE+sC,SAAQ,MAAO,KACf7sC,cAAeA,EACfS,aAAc,CAAEC,YAAY,EAAMC,UAAU,GAC5Cq1B,yBAAyB,EACzBp1B,OAAQ,SAAC,G,IAAEC,EAAY,eAAEC,EAAI,OAAEJ,EAAU,aAAEC,EAAQ,WAAe,OAAP,SACvD,0BAAMd,SAAUgB,GACZ,kBAACo8B,EAAA,EAAa,CAAC37B,UAAU,GACrB,kBAAC8d,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,kBAACJ,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GACzBitB,KAEL,kBAACrtB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GACzBktB,KAEL,kBAACttB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GACzB4sB,MAGT,kBAAChtB,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GA1O1D,yBAAK9mB,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,6BAA8ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACzF,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACwkC,GAAa,MACNzkC,EAAK,CACT1L,MAAO0L,EAAM1L,MACbE,MAAOmlC,aAAaC,QAAQC,GAAA,EAAiBC,eAAiB,gBAC9D3jC,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACdV,UAAU,QAKtB,kBAAC,IAAK,CAACR,KAAM,wBAAyByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACpF,SAAC,G,IAAE0L,EAAK,QAAa,OAAP,OACX,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aAoNM,kBAAC2nB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GA1M1D,yBAAK9mB,UAAW2E,EAAQsrC,4BACpB,kBAAC,IAAK,CAAC3wC,KAAM,uCAAwCyI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACnG,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAACwkC,GAAa,MACNzkC,EAAK,CACT1L,MAAO0L,EAAM1L,MACbE,MAAOmlC,aAAaC,QAAQC,GAAA,EAAiBE,oBAAsB,qBACnE5jC,QAAQ,WACRb,KAAK,QACLG,UAAW2E,EAAQf,UACnB9C,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAC1BpL,YAAa,SAACqL,GACVH,EAAMpK,SAASuK,IAEnBlK,OAAQ+J,EAAM/J,OACdV,UAAU,QAKtB,kBAAC,IAAK,CAACR,KAAM,6BAA8ByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACzF,SAAC,G,IAAE0L,EAAK,QAAa,OAAP,OACX,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAAC+nC,EAAA,EAAM,MAAKtpC,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACjGd,MAAM,aAoLM,kBAAC2nB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GACzBgtB,MAGT,kBAACptB,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GArY1D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,sBAAsByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAChF,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,wBACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLw0C,QAASjtC,EAAO0rC,kBAAoB1rC,EAAO0rC,uBAAoBzwC,YA+WvD,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GApW1D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,oBAAoByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC9E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,sBACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLy0C,QAASltC,EAAOyrC,oBAAsBzrC,EAAOyrC,yBAAsBxwC,YA8U3D,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GArL1D,kBAAC,IAAK,CAACxnB,KAAM,uBAAwByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KACnF,SAAC,G,IAAE0L,EAAK,QAAa,OAAP,OACX,kBAACy5B,EAAA,EAAgB,CACbhkC,UAAW2E,EAAQqrC,YACnBlkC,QAAS,kBAACm4B,EAAA,EAAQ,MAAK15B,EAAK,CAAEyB,QAASzB,EAAM1L,MAAOsB,SAAUoK,EAAMpK,SAAUP,MAAM,UAAUC,KAAK,WACnGd,MAAM,iCAoLM,kBAAC2nB,EAAA,EAAI,CAAC7d,WAAW,EAAMC,QAAS,GAC5B,kBAAC4d,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAxU1D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,qBAAqByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC/E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,uBACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLw0C,QAASjtC,EAAOwrC,iBAAmBxrC,EAAOwrC,sBAAmBvwC,YAkTrD,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAvS1D,kBAAC,IAAO,CAAC/e,aAAc,CAAEX,QAAQ,EAAM8D,YAAY,KAE9C,SAAC,G,IAAE9D,EAAM,SAAO,OACb,kBAAC,IAAK,CAAC9H,KAAK,mBAAmByI,aAAc,CAAE0C,SAAS,EAAM3J,OAAO,EAAMjC,OAAO,KAC7E,SAAC,G,IAAE0L,EAAK,QAAEC,EAAI,OAAO,OAClB,kBAAC,sBAAkB,MACXD,EAAK,CACT1L,MAAO0L,GAASA,EAAM1L,MAAQ0L,EAAM1L,MAAQ,KAC5CmB,UAAW2E,EAAQ+qC,UACnB3wC,MAAM,qBACNkL,OAAO,aACPoI,YAAY,aAGZkiB,sBAAsB,EAEtBC,QAAQ,EACRC,sBAAsB,EACtB/zB,QAAS,SACTI,MAAO0J,EAAK1J,OAAS0J,EAAKC,QAE1BypB,WAAY,CAAEkgB,aAAc,OAC5B1f,gBAAiB,CAAEC,QAAQ,GAE3B90B,KAAK,QACLy0C,QAASltC,EAAOurC,mBAAqBvrC,EAAOurC,wBAAqBtwC,YAiRzD,kBAACqkB,EAAA,EAAI,CAAC3d,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAlL1D,kBAAC,IAAK,CACFxnB,KAAK,iCACLP,MAAO,wCAEPw1C,OAAO,IACPv0C,UAAc2E,EAAQf,UAAS,IAAIe,EAAQ8qC,eAC3C/lC,UAAW8qC,GAAA,EACX30C,KAAK,eAkLG,kBAAC6kC,EAAA,EAAa,KAAE+O,EAAarrC,EAAMJ,EAAYC,W,orBCp7CjEwsC,GAAc,IAAUp0B,KAAwB,SAACriB,G,QAAU,UAC7DkG,QAAS,OACT8U,SAAU,SACV1U,KAAM,EACN,sBAAuB,CACnBX,MAAO,QAEX,uBAAwB,CACpBA,MAAO,OACPW,KAAM,EACNJ,QAAS,OACT8U,SAAU,YAEb,iBAAkB,GACfua,SAAU,YACT,cAAoB,CACjBpjB,IAAK,iBACLxM,MAAO,oB,GAGf,EAAC,cAAoB,CAGjBY,QAAS,G,KAKXmwC,GAAiB,IAAUr0B,KAAwB,SAACriB,GAAU,OAChEuG,QAAS,SACTD,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACV,6BAA8B,CAC1BzU,QAAS,OAKXowC,GAAuB,IAAUt0B,KAAqB,SAACriB,GAAU,OACnE0mB,aAAc,MACdnU,gBAAiBvS,EAAMyF,MAAM2gB,cAAcwwB,gBAC3CnwB,UAAW,cAAgBzmB,EAAMyF,MAAM2gB,cAAcywB,gBAGrDvwC,KAAM,EACNJ,QAAS,OACT8U,SAAU,aAGR87B,GAAqB,IAAUz0B,KAAwB,SAACriB,GAAU,OACpEqT,YAAa,OACbC,aAAc,OACdT,cAAe,OACfvM,KAAM,EACNJ,QAAS,OACT8U,SAAU,SACV,gBAAiB,CACb1U,KAAM,GAEV,mBAAoB,CAChBJ,QAAS,OACT8U,SAAU,UAEd,uBAAwB,CACpB1U,KAAM,EACNqV,OAAQ,OACRzV,QAAS,OACT8U,SAAU,UAEd,yBAA0B,CACtB1U,KAAM,EACNJ,QAAS,OACT8U,SAAU,cAiDlB,eAeI,WAAYhb,EAAmCG,GAA/C,MACI,YAAMH,EAAOG,IAAM,K,OAHf,EAAAqE,QAAkB,EA+W1B,EAAAuyC,OAAS,oBAAS,WACd,GAAI,EAAKC,mBAAoB,CAEzB,IAAI7b,EAAO,IAAS8b,YAAY,EAAKD,oBAErC,GAAI7b,aAAgB+b,QAAS,CACzB,IAAIC,EAAkBhc,EAAKic,wBAE3B,EAAKh3C,SAAS,CAEVi3C,qBAAsB1L,OAAO2L,YAAcH,EAAgBhlC,IAAM,IAAM,WAKpF,IAgdK,EAAAolC,iBAAmB,SAACl4B,GAAkB,kBAC1C,EAAKjf,SAAS,CACVo3C,mBAAoBn4B,MA50BxB,EAAKo4B,cAAe,EAEpB,EAAKC,wBAA0B,EAAKA,wBAAwBz0B,KAAK,GACjE,EAAK00B,mBAAqB,EAAKA,mBAAmB10B,KAAK,GACvD,EAAKzO,SAAW,EAAKA,SAASyO,KAAK,GACnC,EAAK20B,cAAgB,EAAKA,cAAc30B,KAAK,GAC7C,EAAK40B,YAAc,EAAKA,YAAY50B,KAAK,GACzC,EAAK60B,eAAiB,EAAKA,eAAe70B,KAAK,GAC/C,EAAK80B,kBAAoB,EAAKA,kBAAkB90B,KAAK,GACrD,EAAK+0B,oBAAsB,EAAKA,oBAAoB/0B,KAAK,GACzD,EAAKg1B,iBAAmB,EAAKA,iBAAiBh1B,KAAK,GACnD,EAAKi1B,cAAgB,EAAKA,cAAcj1B,KAAK,GAC7C,EAAKk1B,gBAAkB,EAAKA,gBAAgBl1B,KAAK,GACjD,EAAK+O,iBAAmB,EAAKA,iBAAiB/O,KAAK,GACnD,EAAKm1B,cAAgB,EAAKA,cAAcn1B,KAAK,GAC7C,EAAKo1B,eAAiB,EAAKA,eAAep1B,KAAK,GAC/C,EAAKq1B,uBAAyB,EAAKA,uBAAuBr1B,KAAK,GAC/D,EAAKs1B,SAAW,EAAKA,SAASt1B,KAAK,GACnC,EAAKu1B,QAAU,EAAKA,QAAQv1B,KAAK,GACjC,EAAKw1B,cAAgB,EAAKA,cAAcx1B,KAAK,GAC7C,EAAKy1B,sBAAwB,EAAKA,sBAAsBz1B,KAAK,GAC7D,EAAK01B,+BAAiC,EAAKA,+BAA+B11B,KAAK,GAC/E,EAAK21B,kBAAoB,EAAKA,kBAAkB31B,KAAK,GACrD,EAAK41B,wBAA0B,EAAKA,wBAAwB51B,KAAK,GACjE,EAAK61B,sBAAwB,EAAKA,sBAAsB71B,KAAK,GAE7D,EAAK81B,6BAA+B,EAAKA,6BAA6B91B,KAAK,GAC3E,EAAKs0B,iBAAmB,EAAKA,iBAAiBt0B,KAAK,GACnD,EAAK+1B,iBAAmB,EAAKA,iBAAiB/1B,KAAK,GACnD,EAAKg2B,sCAAwC,EAAKA,sCAAsCh2B,KAAK,GAC7F,EAAKi2B,gBAAkB,EAAKA,gBAAgBj2B,KAAK,GAEjD,EAAKhjB,WAAY,EAEjB,EAAKE,MAAQ,CACTg5C,iBAAkB,IAAiBC,KACnCC,gBAAgB,EAChBC,eAAe,EACfC,iBAAiB,EACjBrlC,OAAQ,CACJkF,OAAQ,GACRogC,kBAAkB,GAEtBnC,qBAAsB,GACtBp3C,WAAW,EACXw5C,eAAe,EACfC,iBAAkB,EAClBC,kBAAmB,EACnBC,sBAAuB,IAAIphC,MAC3B8V,8BAA+B,EAC/BurB,yBAA0B,GAC1Brb,eAAe,EACfsb,YAAY,EACZC,kBAAkB,EAClBC,2BAA2B,EAC3BC,iBAAiB,EACjBzC,oBAAoB,EACpBpC,WAAW,EACX8E,qBAAiB71C,EACjB81C,iBAAiB,G,EAu9B7B,OAniCgC,QAgFrB,YAAAC,mBAAP,WAEY,IAAA51C,EAAYuiB,KAAKzhB,QAAO,QAI5Bd,IAAYuiB,KAAKviB,UACjBuiB,KAAKviB,QAAUA,EACfuiB,KAAK6wB,kBAIN,YAAAyC,0BAAP,WACItzB,KAAK9mB,WAAY,EACjB8mB,KAAK4xB,kCAGF,YAAA2B,iCAAP,SAAwCC,GACpC,GAAIxzB,KAAK/mB,MAAMw6C,eAA0Cn2C,IAA9B0iB,KAAK/mB,MAAMw6C,SAASr6C,OAAqD,OAA9B4mB,KAAK/mB,MAAMw6C,SAASr6C,OAAkB4mB,KAAK5mB,QAAU4mB,KAAK/mB,MAAMw6C,SAASr6C,MAAO,CAGlJqW,QAAQsQ,IAAI,0BAA2BC,KAAK/mB,MAAMw6C,SAASr6C,MAAM25C,YAEjE,IAAIW,EAAqB,EACrB1zB,KAAK/mB,MAAMw6C,SAASr6C,MAAMu6C,oBAC1BD,EAAqBE,OAAOC,KAAK7zB,KAAK/mB,MAAMw6C,SAASr6C,MAAMu6C,mBAAmBpkC,QAGlF,IAkDMg9B,EAAoC,CACtCC,kBAAclvC,EACdmvC,mBAAenvC,EACfovC,gBArDwC,CACxClB,cAAe,GACfC,SAAS,GAoDTkB,UAjD8B,CAC9BhB,SAAU,GACVF,SAAS,GAgDTmB,iBA7C0C,CAC1Cj5B,eAAgB,GAChB83B,SAAS,GA4CToB,iBAzC0C,CAC1CnQ,eAAgB,GAChB+O,SAAS,GAwCTqB,cArCsC,CACtCf,aAAc,GACdN,SAAS,GAoCTsB,aAjCoC,CACpCd,YAAa,GACbR,SAAS,GAgCTuB,eA7BsC,CACtCb,aAAc,GACdV,SAAS,GA4BTwB,oBAAgB3vC,EAChB4vC,kBAAc5vC,EACd6vC,uBAAmB7vC,EACnB8vC,kCAA8B9vC,EAC9B+vC,gCAA4B/vC,EAC5BgwC,wBAAoBhwC,EACpBiwC,sBAAkBjwC,EAClBkwC,oBAAgBlwC,EAChBmG,WAAOnG,EACPmwC,WAAOnwC,EACPowC,sBAAkBpwC,EAClBqwC,kBApC4C,CAC5C5D,gBAAiB,GACjB0B,SAAS,GAmCTmC,wBAAoBtwC,EACpBuwC,sBAAkBvwC,EAClBwwC,yBAAqBxwC,EACrBywC,uBAAmBzwC,EACnB0wC,cApCuC,CACvCxQ,aAAc,GACdiO,SAAS,GAmCTwC,mBAhCiD,CACjDxQ,kBAAmB,GACnBgO,SAAS,GA+BTyC,+BAAgC,EAChCC,sBAAsB,GAGtBE,GAAY,EAEX,IAAEC,QAAQ/B,EAAevsB,KAAK/mB,MAAMw6C,SAASr6C,MAAMg1C,gBACpDC,GAAY,GAGhBruB,KAAK3mB,SAAS,CACVw5C,sBAAuB,IAAIphC,MAC3BwhC,0BAA2BjzB,KAAK/mB,MAAMw6C,SAASr6C,MAAM65C,0BACrDH,yBAA0B9yB,KAAK/mB,MAAMw6C,SAASr6C,MAAM05C,yBACpDvrB,8BAA+BvH,KAAK/mB,MAAMw6C,SAASr6C,MAAMmuB,8BACzDpa,OAAQ,CACJkF,OAAQ2N,KAAK/mB,MAAMw6C,SAASr6C,MAAM+T,OAAOkF,OACzCogC,iBAAkBzyB,KAAK/mB,MAAMw6C,SAASr6C,MAAM+T,OAAOslC,kBAEvDkB,kBAAmB3zB,KAAK/mB,MAAMw6C,SAASr6C,MAAMu6C,kBAC7CT,iBAA0D,IAAzClzB,KAAK/mB,MAAMw6C,SAASr6C,MAAM25C,YAAuBW,EAAqB,EACvFtF,aAAcpuB,KAAK/mB,MAAMw6C,SAASr6C,MAAMg1C,aACxCC,UAAWA,EACX8E,gBAAiBnzB,KAAKkyB,sCAAsClyB,KAAK/mB,MAAMw6C,SAASr6C,MAAMg1C,kBAK3F,YAAAjyB,kBAAP,WAEI6D,KAAKgwB,SACLpL,OAAOkP,iBAAiB,SAAU9zB,KAAKgwB,QAIlChwB,KAAK0wB,eACN1wB,KAAK0wB,cAAe,EACpB1wB,KAAKgyB,+BACLhyB,KAAK+zB,yBACL/zB,KAAKg0B,qBAKN,YAAA53B,qBAAP,WAEIwoB,OAAOqP,oBAAoB,SAAUj0B,KAAKgwB,QAEtChwB,KAAKk0B,+BACLl0B,KAAKk0B,8BAA8BtlC,cAGnCoR,KAAKm0B,wBACLn0B,KAAKm0B,uBAAuBvlC,cAG5BoR,KAAKo0B,kBACLp0B,KAAKo0B,iBAAiBxlC,cAGtBoR,KAAKq0B,sBACLr0B,KAAKq0B,qBAAqBzlC,eAI3B,YAAAzL,OAAP,WAEU,MAA8E6c,KAAKzhB,QAAjFV,EAAQ,WAAEE,EAAU,aAAEJ,EAAuB,0BAAEM,EAAwB,2BAE/E,OAAI+hB,KAAK/mB,MAAME,MAAQ6mB,KAAK/mB,MAAME,KAAK+B,SAGnC8kB,KAAK9mB,UAFE,KAOP,gCACKyE,GAA2BI,GAAcF,GACtC,gBAACsX,GAAA,EAAqB,CAClB5R,KAAM5F,EACN6F,QAASvF,EACTJ,SAAUA,EACVE,WAAYA,IAGpB,gBAAC2xC,GAAW,CAACz0C,UAAU,sCAChB+kB,KAAK5mB,MAAMq3C,oBACV,gBAACtF,GAAoB,CACjB5nC,KAAMyc,KAAK5mB,MAAMq3C,mBACjBjtC,QAASwc,KAAKwwB,kBAAiB,GAC/B/iC,SAAUuS,KAAKiyB,iBACf7D,aAAcpuB,KAAK5mB,MAAMg1C,eAGjC,gBAAC,IAAW,CAACkG,YAAY,oBAErB,gBAACnO,EAAmB,CAChB1iC,MAAOka,GAAA,EAAkB42B,WAGjC,gBAAC,IAAW,CAACD,YAAY,qBACrB,gBAAC3E,GAAc,CAAC10C,UAAU,mBACtB,gBAAC20C,GAAoB,CAAC30C,UAAU,mBAC5B,gBAACu5C,EAAA,EAAyB,CACtBj4C,IAAI,OACJk4C,iBAAiB,EACjBC,MAAO10B,KAAK5mB,MAAMy5C,sBAClB35C,UAAW8mB,KAAK5mB,MAAMF,UACtBy7C,wBAAyB30B,KAAK5mB,MAAM+T,OAAOslC,iBAC3CmC,kBAAmB50B,KAAK5mB,MAAMw5C,kBAC9BD,iBAAkB3yB,KAAK5mB,MAAMu5C,iBAC7BP,iBAAkBpyB,KAAK5mB,MAAMg5C,iBAC7BxB,mBAAoB5wB,KAAK4wB,mBACzBnjC,SAAUuS,KAAKvS,SACfonC,aAAc70B,KAAK5mB,MAAM+T,OAAOkF,OAChCy+B,YAAa9wB,KAAK8wB,YAClBC,eAAgB/wB,KAAK+wB,eACrBC,kBAAmBhxB,KAAKgxB,kBACxBE,iBAAkBlxB,KAAKkxB,iBACvBC,cAAenxB,KAAKmxB,cACpBC,gBAAiBpxB,KAAKoxB,gBACtBP,cAAe7wB,KAAK6wB,cACpBW,SAAUxxB,KAAKwxB,SACfC,QAASzxB,KAAKyxB,QACdqD,gBAAiB90B,KAAK5mB,MAAMo5C,gBAC5B/a,cAAezX,KAAK5mB,MAAMq+B,cAC1Bsb,WAAY/yB,KAAK5mB,MAAM25C,WACvBjB,wBAAyB9xB,KAAK8xB,wBAC9BiD,WAAY/0B,KAAK/mB,MAAM87C,WACvB95C,UAAU,gBACVi4C,gBAAiBlzB,KAAK5mB,MAAM85C,gBAC5B1C,iBAAkBxwB,KAAKwwB,kBAAiB,GACxCnC,UAAWruB,KAAK5mB,MAAMi1C,UACtB+E,gBAAiBpzB,KAAK5mB,MAAMg6C,kBAEhC,gBAACrD,GAAkB,CAAC90C,UAAU,uBAC1B,gBAAC,IAAQ,CACLsB,IAAI,OACJyJ,QAASga,KAAK5mB,MAAMo5C,gBACpBwC,YAAY,QACZC,UAAU,aACVC,cACI,gBAACC,EAAA,EAAiB,CACdC,WAAYC,EAAA,EAAeC,cAC3BC,gBAAiBv1B,KAAK/mB,MAAME,KAAKy5B,QAAQ2iB,gBACzC/xC,QAASwc,KAAKoxB,gBACdoE,cAAex1B,KAAK+wB,eACpB2D,MAAO10B,KAAK5mB,MAAMy5C,sBAClB4C,WAAYz1B,KAAK5mB,MAAM05C,yBACvB4C,aAAc11B,KAAK5mB,MAAMmuB,8BACzBouB,cAAe31B,KAAK2xB,sBACpBiE,mBAAoB51B,KAAK5mB,MAAM65C,4BAGvCr0C,MAAM,QAEN,gBAAC,KAAiB,CACdrC,IAAI,MACJg5C,gBAAiBv1B,KAAK/mB,MAAME,KAAKy5B,QAAQ2iB,gBACzCG,aAAc11B,KAAK5mB,MAAMmuB,8BACzBkuB,WAAYz1B,KAAK5mB,MAAM05C,yBACvB+C,mBAAoB71B,KAAK5mB,MAAMs5C,cAC/BN,iBAAkBpyB,KAAK5mB,MAAMg5C,iBAC7B0D,UAAW91B,KAAK5mB,MAAMm5C,cACtBwD,aAAc/1B,KAAK5mB,MAAMk5C,eACzBjgC,OAAQ2N,KAAK5mB,MAAM+T,OAAOkF,OAC1B2jC,cAAeh2B,KAAK5mB,MAAM+T,OAAOslC,iBACjCxnB,iBAAkBjL,KAAKiL,iBACvBqmB,eAAgBtxB,KAAKsxB,eACrBL,oBAAqBjxB,KAAKixB,oBAC1BgF,UAAWj2B,KAAK0xB,cAChBG,kBAAmB7xB,KAAK6xB,kBACxBmB,iBAAkBhzB,KAAK5mB,MAAM45C,iBAC7BC,0BAA2BjzB,KAAK5mB,MAAM65C,0BACtCiD,OAAQl2B,KAAK/mB,MAAMi9C,OACnBC,kBAAmBn2B,KAAK/mB,MAAMk9C,kBAC9B9E,cAAerxB,KAAKqxB,cACpBU,sBAAuB/xB,KAAK+xB,sBAC5B4B,kBAAmB3zB,KAAK5mB,MAAMu6C,kBAC9ByC,oBAAqBp2B,KAAK5mB,MAAM+5C,gBAChChB,gBAAiBnyB,KAAKmyB,0BA8BtD,YAAAxB,wBAAR,SAAgCvc,GAC5BpU,KAAKiwB,mBAAqB7b,GAGtB,YAAAwc,mBAAR,SAA2ByF,GACvBr2B,KAAK3mB,SAAS,CACV8T,OAAQ,CACJslC,iBAAkB4D,EAClBhkC,OAAQ2N,KAAK5mB,MAAM+T,OAAOkF,WAK9B,YAAA5E,SAAR,SAAiB4E,GACb2N,KAAK3mB,SAAS,CACV8T,OAAQ,CACJslC,iBAAkBzyB,KAAK5mB,MAAM+T,OAAOslC,iBACpCpgC,OAAQA,MAKZ,YAAAy+B,YAAR,SAAoB91C,GAChBglB,KAAK3mB,SAAS,CAAE+4C,iBAAkBp3C,KAG9B,YAAA22C,sBAAR,sBACI,aACI,EACA0D,EAAA,EAAeC,eACf,SAACn8C,GACG,EAAKm9C,wBAAwBn9C,MAEjC,SAACM,GACG,YAAiB,4BAA6BA,EAAQ,aAK1D,YAAAm4C,+BAAR,sBACI,aACI,GACA,SAACz4C,GACG,EAAKo9C,mCAAmCp9C,MAE5C,SAACM,GACG,EAAKk4C,wBACL,YAAiB,oDAAqDl4C,EAAQ,aAKlF,YAAA88C,mCAAR,SAA2Cp9C,GAC3B,MAARA,QAAiCmE,IAAjBnE,EAAKO,cAA4E4D,IAAnDnE,EAAKO,QAAQ88C,wBAAwBC,UACnFz2B,KAAK3mB,SAAS,CACV45C,0BAA2B95C,EAAKO,QAAQ88C,wBAAwBC,YAGpEz2B,KAAK3mB,SAAS,CACV45C,2BAA2B,IAInCjzB,KAAK9mB,WAAY,EAGjB8mB,KAAK2xB,yBAGD,YAAA2E,wBAAR,SAAgCn9C,GAEhB,MAARA,QAA0CmE,IAA1BnE,EAAKu9C,iBACrB12B,KAAKuxB,uBAAuBp4C,EAAKu9C,iBAAiBC,mBAElD32B,KAAKuxB,uBAAuB,IAAI9/B,QAIhC,YAAA8/B,uBAAR,SAA+BoF,GAE3B,IAGIC,EAHAC,EAAkB,EAClBC,EAAsB,QAUCx5C,KAL3Bs5C,EAAqB,IAAEz1B,KAAKw1B,GAAmB,SAAC3yC,GAC5C,OAA0B,IAAnBA,EAAK+yC,gBAKZH,EAAqB,IAAEz1B,KAAKw1B,GAAmB,SAAC3yC,GAC5C,OAA8B,IAAvBA,EAAKgzC,uBAKO15C,IAAvBs5C,IACAA,EAAqB,IAAEz1B,KAAKw1B,GAAmB,SAAC3yC,GAC5C,OAAgC,IAAzBA,EAAKizC,yBAIO35C,IAAvBs5C,EACAC,EAAkB,GAElBA,EAAkBD,EAAmBM,SACrCJ,EAAsBF,EAAmBO,qBAG7C,IAAI1f,GAAgBmf,IAAsB52B,KAAK/mB,MAAME,KAAKy5B,QAAQ2iB,kBAAoBqB,EAAmBQ,UAErGp3B,KAAK/mB,MAAME,KAAKy5B,QAAQ2iB,kBACxB9d,GAAgB,GAGwB,KAAxCzX,KAAK5mB,MAAM05C,0BAAgF,IAA7C9yB,KAAK5mB,MAAMmuB,8BACzDvH,KAAK3mB,SAAS,CACVw5C,sBAAuB8D,EACvBpvB,8BAA+BsvB,EAC/B/D,yBAA0BgE,EAC1Brf,cAAeA,IAGnBzX,KAAK3mB,SAAS,CACVw5C,sBAAuB8D,EACvBlf,cAAeA,KAKnB,YAAAoZ,cAAR,WAEI7wB,KAAK3mB,SAAS,CACVq5C,eAAe,EACfiB,uBAAmBr2C,IAIvBsnC,OAAOxvB,QAAQiiC,aAAa,KAAM,IAIlCr3B,KAAK0xB,eAAc,IAGf,YAAAR,iBAAR,SAAyB54B,GACrB0H,KAAK3mB,SAAS,CAAEi5C,eAAgBh6B,KAG5B,YAAA64B,cAAR,SAAsB74B,GAClB0H,KAAK3mB,SAAS,CAAEk5C,cAAej6B,IAE/BssB,OAAO0S,OAAO,iCAAiCn2B,KAAK,oBAAoByH,UAGpE,YAAAwoB,gBAAR,SAAwB94B,GACpB0H,KAAK3mB,SAAS,CACVm5C,gBAAiBl6B,KAKjB,YAAA04B,kBAAR,sBACQuG,EAAqB,IAAEp2B,KAAKnB,KAAK5mB,MAAMy5C,uBAAuB,SAAC7uC,GAC/D,OAAOA,EAAKkzC,WAAa,EAAK99C,MAAMmuB,sCAGbjqB,IAAvBi6C,GACA,YACIv3B,KAAK5mB,MAAMmuB,8BACXgwB,EAAmBh9C,MACnB,EACAg9C,EAAmBH,UACnBG,EAAmBR,UACnBQ,EAAmBN,gBACnB5B,EAAA,EAAeC,cACft1B,KAAK5mB,MAAM05C,0BACX,EACA9yB,KAAK5mB,MAAM65C,2BACX,WAEI,YAAiB,KAAM,yBAA0B,WAErD,SAACx5C,GACG,YAAiB,0BAA2BA,EAAQ,aAM5D,YAAAs3C,eAAR,SAAuBmG,GACnB,IAAIJ,EAAsB,GACtBrf,GAAgB,EAEpB,GAAIzX,KAAK5mB,MAAMy5C,sBAAuB,CAElC,IAAIltC,EAAYqa,KAAK5mB,MAAMy5C,sBAAsB1xB,MAAK,SAACq2B,GAAS,OAAAA,EAAKN,WAAaA,KAClFJ,EAAsBnxC,EAAYA,EAAUwxC,oBAAsB,GAClE1f,GAAgB9xB,IAAaqa,KAAK/mB,MAAME,KAAKy5B,QAAQ2iB,kBAAoB5vC,EAAUyxC,UAGvFp3B,KAAK3mB,SAAS,CACVkuB,8BAA+B2vB,EAC/BpE,yBAA0BgE,EAC1Brf,cAAeA,KAIf,YAAAwZ,oBAAR,SAA4BwG,GAA5B,WAEQC,EAAgB,IAAEC,cAAc33B,KAAK5mB,MAAMy5C,uBAE3C+E,EAAqBF,EAAcv2B,MAAK,SAACnd,GACzC,OAAOA,EAAKkzC,WAAa,EAAK99C,MAAMmuB,sCAGbjqB,IAAvBs6C,IACAA,EAAmBT,oBAAsBM,EAAO5sC,WAEhD,IAAET,QAAQstC,GAAe,SAAC1zC,GAClBA,EAAKkzC,WAAa,EAAK99C,MAAMmuB,oCACFjqB,IAAvBs6C,IACA5zC,EAAO4zC,OAOvB53B,KAAK3mB,SAAS,CACVw5C,sBAAuB6E,EACvB5E,yBAA0B2E,KAI1B,YAAAxsB,iBAAR,SAAyBptB,KA8BjB,YAAAwzC,cAAR,SAAsBh3C,GACC,OAAfA,EAAMlB,WAAgCmE,IAAfjD,EAAMlB,WAAwCmE,IAAlBjD,EAAMlB,KAAKmK,IAAsC,OAAlBjJ,EAAMlB,KAAKmK,KAC7F,SACKvD,OAAO,CACJC,SAAU63C,GACV56C,UAAW,CACPY,SAAUxD,EAAMlB,KAAKmK,MAG5BpG,MACG,SAACC,IAKoD,IAA7CA,EAAQhE,KAAKorC,6BAEb90B,QAAQsQ,IAAI,kDAO5BykB,eAAeC,QAAQ,aAAc,IAErC,IAAej6B,KAAK,CAChB2N,SAAU,iBAAmB9d,EAAMlB,KAAKmK,GAExClK,MAAO,CAEH0+C,wBAAyB93B,KAAK5mB,MAC9B88C,OAAQl2B,KAAK/mB,MAAMi9C,OACnBnB,WAAY/0B,KAAK/mB,MAAM87C,WACvBgD,iBAAkB/3B,KAAK/mB,MAAM8+C,iBAC7BC,oCAAoC,OAO5C,YAAAjG,sBAAR,SAA8BkG,GAC1Bj4B,KAAK3mB,SAAS,CACVs6C,kBAAmBsE,EACnB/E,iBAAiB,KAIjB,YAAA5B,eAAR,SAAuBsB,EAA2BsF,EAAsBh/C,GACpE8mB,KAAK3mB,SAAS,CACVu5C,kBAAmBA,EACnBD,iBAAkBuF,EAClBh/C,UAAWA,EACXw5C,eAAe,KAIf,YAAAhB,cAAR,SAAsBx4C,GAClB8mB,KAAK3mB,SAAS,CACVH,UAAWA,KAIX,YAAAs4C,SAAR,SAAiBprC,GACTA,IAAS,IAAW+xC,IACpBC,EAAA,EAAYC,KAAK,oBAEjBD,EAAA,EAAYC,KAAK,uBAIjB,YAAA5G,QAAR,WACI2G,EAAA,EAAYC,KAAK,iBAGb,YAAArG,6BAAR,WACI,IAAMlX,EAAK9a,KACXA,KAAKk0B,8BAAgC,SAChCplC,UAAU,CACP/R,MAAO,MAEV+R,UAAU,CAEPE,KAAA,SAAK7R,GAEDsS,QAAQsQ,IAAI5iB,GACRA,EAAQhE,KAAKm/C,8BAA8BppC,QAC3C,YAAiB,UAAW/R,EAAQhE,KAAKm/C,8BAA8BnpC,QAAS,QAChF2rB,EAAG6W,yBAEH,YAAiB,SAAUx0C,EAAQhE,KAAKm/C,8BAA8BnpC,QAAS,UAIvFpT,MAAA,SAAMyT,GAEFC,QAAQ1T,MAAMyT,GACd,YAAiB,KAAMA,EAAK,aAKpC,YAAAukC,uBAAR,WACI/zB,KAAKm0B,uBAAyB,SACzBrlC,UAAU,CACP/R,MAAO,MAEV+R,UAAU,CAEPE,KAAA,SAAK7R,GAEDsS,QAAQsQ,IAAI5iB,GACRA,EAAQhE,KAAKo/C,iCAAiCrpC,OAC9C,YAAiB,UAAW/R,EAAQhE,KAAKo/C,iCAAiCppC,QAAS,QAEnF,YAAiB,SAAUhS,EAAQhE,KAAKo/C,iCAAiCppC,QAAS,UAI1FpT,MAAA,SAAMyT,GAEFC,QAAQ1T,MAAMyT,GACd,YAAiB,KAAMA,EAAK,aA8BpC,YAAAwkC,iBAAR,WACIh0B,KAAKo0B,iBAAmB,SACnBtlC,UAAU,CACP/R,MAAO,MAEV+R,UAAU,CAEPE,KAAA,SAAK7R,GAEDsS,QAAQsQ,IAAI5iB,GACRA,EAAQhE,KAAKq/C,iBAAiBtpC,OAC9B,YAAiB,UAAW/R,EAAQhE,KAAKq/C,iBAAiBrpC,QAAS,QAEnE,YAAiB,SAAUhS,EAAQhE,KAAKq/C,iBAAiBrpC,QAAS,UAI1EpT,MAAA,SAAMyT,GAEFC,QAAQ1T,MAAMyT,GACd,YAAiB,KAAMA,EAAK,aAKpC,YAAAqiC,kBAAR,SAA0BkB,GACtB/yB,KAAK3mB,SAAS,CACV05C,WAAYA,EACZC,kBAAkBD,GAAqB/yB,KAAK5mB,MAAM45C,mBAItDpO,OAAOxvB,QAAQiiC,aAAa,KAAM,KAG9B,YAAAvF,wBAAR,SAAgCkB,GAC5BhzB,KAAK3mB,SAAS,CACV25C,iBAAkBA,EAClBE,iBAAiB,KAUjB,YAAAjB,iBAAR,SAAyB5/B,EAA4Bg8B,GACjDruB,KAAK3mB,SAAS,CACVg1C,UAAWA,EACXD,aAAc/7B,EACd8gC,gBAAiBnzB,KAAKkyB,sCAAsC7/B,MAI5D,YAAA6/B,sCAAR,SAA8C9D,GAC1C,IAAM+E,EAAkB,IAAI1hC,MAE5B,GAAI28B,EAAc,CAUd,GARIA,EAAaqK,eAAe,iBAAmBrK,EAAa5B,cAC5D2G,EAAgB3oC,KAAK,CAAEkuC,SAAU,eAAgBC,SAAU,OAAQC,WAAYxK,EAAa5B,eAG5F4B,EAAaqK,eAAe,kBAAoBrK,EAAa3B,eAC7D0G,EAAgB3oC,KAAK,CAAEkuC,SAAU,gBAAiBC,SAAU,OAAQC,WAAYxK,EAAa3B,gBAG7F2B,EAAaqK,eAAe,oBAAsBrK,EAAa1B,gBAAgBlB,cAAcj8B,OAAS,EAAG,CACzG,IAAMspC,EAAYzK,EAAa1B,gBAAgBjB,QAAU,QAAU,KAC7DqN,EAAc1K,EAAa1B,gBAAgBlB,cAAc5xC,KAAI,SAAC2B,GAAoC,OAAAA,EAAOzB,SAAO+9B,KAAK,KAE3Hsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,UAAWC,SAAUE,EAAWD,WAAYE,IAGjF,GAAI1K,EAAaqK,eAAe,cAAgBrK,EAAazB,UAAUhB,SAASp8B,OAAS,EAAG,CAClFspC,EAAYzK,EAAazB,UAAUlB,QAAU,QAAU,KACvDqN,EAAc1K,EAAazB,UAAUhB,SAAS/xC,KAAI,SAAC2B,GAA2C,OAAAA,EAAOzB,SAAO+9B,KAAK,KAEvHsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,WAAYC,SAAUE,EAAWD,WAAYE,IAGlF,GAAI1K,EAAaqK,eAAe,qBAAuBrK,EAAaxB,iBAAiBj5B,eAAepE,OAAS,EAAG,CACtGspC,EAAYzK,EAAaxB,iBAAiBnB,QAAU,QAAU,KAC9DqN,EAAc1K,EAAaxB,iBAAiBj5B,eAAe/Z,KAAI,SAAC2B,GAA2C,OAAAA,EAAOzB,SAAO+9B,KAAK,KAEpIsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,WAAYC,SAAUE,EAAWD,WAAYE,IAGlF,GAAI1K,EAAaqK,eAAe,qBAAuBrK,EAAavB,iBAAiBnQ,eAAentB,OAAS,EAAG,CACtGspC,EAAYzK,EAAavB,iBAAiBpB,QAAU,QAAU,KAC9DqN,EAAc1K,EAAavB,iBAAiBnQ,eAAe9iC,KAAI,SAAC2B,GAA2C,OAAAA,EAAOzB,SAAO+9B,KAAK,KAEpIsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,eAAgBC,SAAUE,EAAWD,WAAYE,IAGtF,GAAI1K,EAAaqK,eAAe,kBAAoBrK,EAAatB,cAAcf,aAAax8B,OAAS,EAAG,CAC9FspC,EAAYzK,EAAatB,cAAcrB,QAAU,QAAU,KAC3DqN,EAAc1K,EAAatB,cAAcf,aAAanyC,KAAI,SAAC2B,GAAwC,OAAAA,EAAOzB,SAAO+9B,KAAK,KAE5Hsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,SAAUC,SAAUE,EAAWD,WAAYE,IAGhF,GAAI1K,EAAaqK,eAAe,iBAAmBrK,EAAarB,aAAad,YAAY18B,OAAS,EAAG,CAC3FspC,EAAYzK,EAAarB,aAAatB,QAAU,QAAU,KAC1DqN,EAAc1K,EAAarB,aAAad,YAAYryC,KAAI,SAAC2B,GAAwC,OAAAA,EAAOzB,SAAO+9B,KAAK,KAE1Hsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,QAASC,SAAUE,EAAWD,WAAYE,IAG/E,GAAI1K,EAAaqK,eAAe,mBAAqBrK,EAAapB,eAAeb,aAAa58B,OAAS,EAAG,CAChGspC,EAAYzK,EAAapB,eAAevB,QAAU,QAAU,KAC5DqN,EAAc1K,EAAapB,eAAeb,aAAavyC,KAAI,SAAC2B,GAAyC,OAAAA,EAAOzB,SAAO+9B,KAAK,KAE9Hsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,SAAUC,SAAUE,EAAWD,WAAYE,IAGhF,GAAI1K,EAAaqK,eAAe,mBAAqBrK,EAAanB,eAAgB,CAC9E,IAAM8L,EAAW,KAAO3K,EAAanB,gBAAgB/nC,OAAO,cAE5DiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,aAAcC,SAAU,OAAQC,WAAYG,IAEjF,GAAI3K,EAAaqK,eAAe,iBAAmBrK,EAAalB,aAAc,CAC1E,IAAM8L,EAAS,KAAO5K,EAAalB,cAAchoC,OAAO,cAExDiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,aAAcC,SAAU,OAAQC,WAAYI,IAOjF,GAJI5K,EAAaqK,eAAe,sBAAwBrK,EAAajB,mBACjEgG,EAAgB3oC,KAAK,CAAEkuC,SAAU,oBAAqBC,SAAU,OAAQC,WAAYxK,EAAajB,oBAGjGiB,EAAaqK,eAAe,iCAAmCrK,EAAahB,6BAA8B,CACpG2L,EAAW,KAAO3K,EAAahB,8BAA8BloC,OAAO,cAE1EiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,mBAAoBC,SAAU,OAAQC,WAAYG,IAGvF,GAAI3K,EAAaqK,eAAe,+BAAiCrK,EAAaf,2BAA4B,CAChG2L,EAAS,KAAO5K,EAAaf,4BAA4BnoC,OAAO,cAEtEiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,mBAAoBC,SAAU,OAAQC,WAAYI,IAOvF,GAJI5K,EAAaqK,eAAe,uBAAyBrK,EAAad,oBAClE6F,EAAgB3oC,KAAK,CAAEkuC,SAAU,qBAAsBC,SAAU,OAAQC,WAAYxK,EAAad,qBAGlGc,EAAaqK,eAAe,qBAAuBrK,EAAab,iBAAkB,CAC5EwL,EAAW,KAAO3K,EAAab,kBAAkBroC,OAAO,cAE9DiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,eAAgBC,SAAU,OAAQC,WAAYG,IAEnF,GAAI3K,EAAaqK,eAAe,mBAAqBrK,EAAaZ,eAAgB,CACxEwL,EAAS,KAAO5K,EAAaZ,gBAAgBtoC,OAAO,cAE1DiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,eAAgBC,SAAU,OAAQC,WAAYI,IAGnF,GAAI5K,EAAaqK,eAAe,sBAAwBrK,EAAaT,kBAAkB5D,gBAAgBx6B,OAAS,EAAG,CACzGspC,EAAYzK,EAAaT,kBAAkBlC,QAAU,QAAU,KAC/DqN,EAAc1K,EAAaT,kBAAkB5D,gBAAgBnwC,KAAI,SAAC2B,GAA4C,OAAAA,EAAOzB,SAAO+9B,KAAK,KAEvIsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,kBAAmBC,SAAUE,EAAWD,WAAYE,IAgBzF,GAbI1K,EAAaqK,eAAe,UAAYrK,EAAa3qC,OACrD0vC,EAAgB3oC,KAAK,CAAEkuC,SAAU,QAASC,SAAU,OAAQC,WAAYxK,EAAa3qC,QAGrF2qC,EAAaqK,eAAe,UAAYrK,EAAaX,OACrD0F,EAAgB3oC,KAAK,CAAEkuC,SAAU,QAASC,SAAU,OAAQC,WAAYxK,EAAaX,QAGrFW,EAAaqK,eAAe,qBAAuBrK,EAAaV,kBAChEyF,EAAgB3oC,KAAK,CAAEkuC,SAAU,kBAAmBC,SAAU,OAAQC,WAAYxK,EAAaV,mBAI/FU,EAAaqK,eAAe,uBAAyBrK,EAAaR,mBAAoB,CAChFmL,EAAW,KAAO3K,EAAaR,oBAAoB1oC,OAAO,cAEhEiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,iBAAkBC,SAAU,OAAQC,WAAYG,IAErF,GAAI3K,EAAaqK,eAAe,qBAAuBrK,EAAaP,iBAAkB,CAC5EmL,EAAS,KAAO5K,EAAaP,kBAAkB3oC,OAAO,cAE5DiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,iBAAkBC,SAAU,OAAQC,WAAYI,IAIrF,GAAI5K,EAAaqK,eAAe,wBAA0BrK,EAAaN,oBAAqB,CAClFiL,EAAW,KAAO3K,EAAaN,qBAAqB5oC,OAAO,cAEjEiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,kBAAmBC,SAAU,OAAQC,WAAYG,IAEtF,GAAI3K,EAAaqK,eAAe,sBAAwBrK,EAAaL,kBAAmB,CAC9EiL,EAAS,KAAO5K,EAAaL,mBAAmB7oC,OAAO,cAE7DiuC,EAAgB3oC,KAAK,CAAEkuC,SAAU,kBAAmBC,SAAU,OAAQC,WAAYI,IAItF,GAAI5K,EAAaqK,eAAe,kBAAoBrK,EAAaJ,cAAcxQ,aAAajuB,OAAS,EAAG,CAC9FspC,EAAYzK,EAAaJ,cAAcvC,QAAU,QAAU,KAC3DqN,EAAc1K,EAAaJ,cAAcxQ,aAAa5jC,KAAI,SAAC2B,GAAyC,OAAAA,EAAOigC,WAAS3D,KAAK,KAE/Hsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,SAAUC,SAAUE,EAAWD,WAAYE,IAIhF,GAAI1K,EAAaqK,eAAe,uBAAyBrK,EAAaH,mBAAmBxQ,kBAAkBluB,OAAS,EAAG,CAC7GspC,EAAYzK,EAAaH,mBAAmBxC,QAAU,QAAU,KAChEqN,EAAc1K,EAAaH,mBAAmBxQ,kBAAkB7jC,KAAI,SAAC2B,GAAyC,OAAAA,EAAOigC,WAAS3D,KAAK,KAEzIsb,EAAgB3oC,KAAK,CAAEkuC,SAAU,cAAeC,SAAUE,EAAWD,WAAYE,IAGjF1K,EAAaqK,eAAe,yBAA2BrK,EAAaD,sBACpEgF,EAAgB3oC,KAAK,CAAEkuC,SAAU,iBAAkBC,SAAU,KAAMC,WAAY,MAG/ExK,EAAaqK,eAAe,mCAAqCrK,EAAaF,gCAC9EiF,EAAgB3oC,KAAK,CAAEkuC,SAAU,8BAA+BC,SAAU,KAAMC,WAAYxK,EAAaF,+BAA+BrjC,aAG5I,IAAMouC,EAAgBzjB,KAAK0jB,UAAU/F,GAErC,GAAIA,EAAgB5jC,OAAS,EACzB,OAAO0pC,IAOX,YAAA9G,gBAAR,SAAwBj5C,GACpB8mB,KAAK3mB,SAAS,CACV+5C,gBAAiBl6C,KA9hClB,EAAAigD,YAAc,KAiiCzB,EAniCA,CAAgC,aAsiC1BC,GAAgB,YAA8C,IAA9C,CAAoE,IAI7EvB,IAFE,aAE4B,IAAG,wR,seCxqCjChJ,EAAwD,SAAC51C,GAG5D,MAAoB,mBAAkC,CACxDE,KAAM,KADHC,EAAK,KAAEC,EAAQ,KAIhBggD,EAAkB,YAA2CC,EAAmB,CAClFr8C,UAAW,CACPiW,oBAAqBja,EAAMia,qBAE/BpW,YAAa,gBAGjB,mBAAQ,YACCu8C,EAAgBn+C,UAAYm+C,EAAgBt9C,OAASs9C,EAAgBlgD,MAAQkgD,EAAgBlgD,KAAK8U,QAAUorC,EAAgBlgD,KAAK8U,OAAOsrC,YACzIlgD,GAAS,SAACyQ,GACE,IAEF+D,EAFiBwrC,EAAgBlgD,KAAM8U,OAAM,WAEQrU,KAAI,SAAC4/C,GAC5D,OAAO,EAAP,KACOA,GAAK,CACRx/C,MAAOw/C,EAAMh4C,YACb1H,MAAO0/C,EAAMh4C,iBAElB+M,MAAK,SAACC,EAAGC,GACR,OAAID,EAAExU,MAAQyU,EAAEzU,OACJ,EACDwU,EAAExU,MAAQyU,EAAEzU,MACZ,EAEA,KAIf,OAAO,EAAP,KACO8P,GAAS,CACZ3Q,KAAM0U,SAKnB,CAACwrC,EAAgBn+C,QAASm+C,EAAgBlgD,KAAMkgD,EAAgBt9C,QAGnE,IAAM3B,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAO,EAAP,KACOuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBA2BnC,OAAI1B,EAAM8B,SAEF,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAASm+C,EAAgBn+C,QACzBC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA2C,OAAAA,EAAOvB,OAEnEyB,OAAQxC,EAAMwC,OACdV,UAAU,EACVsY,WArCS,SAACvZ,EAAyCwZ,GAkB3D,OAjBsBxZ,EAAMF,KAAI,SAAC2B,EAAwCe,GACrE,IAAItC,EAAQuB,EAAOvB,MAKnB,OAJIuB,EAAOvB,MAAMuV,OAAS,KACtBvV,EAAWuB,EAAOvB,MAAMuZ,UAAU,EAAG,IAAG,OAIxC,kBAAC,IAAI,KACGD,EAAY,CAAEhX,MAAK,IAAG,CAC1BC,IAAKD,EACLtC,MAAOA,EAEPc,KAAK,eAyBTu7B,qBAAsBp9B,EAAMo9B,qBAC5B36B,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQ4+C,EAAgBn+C,SAClDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,KACZkB,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAWlC,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAASm+C,EAAgBn+C,QACzBC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA2C,OAAAA,EAAOvB,OAEnEyB,OAAQxC,EAAMwC,OACd46B,qBAAsBp9B,EAAMo9B,qBAC5B36B,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQ4+C,EAAgBn+C,SAClDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,KACZkB,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,cA+BhC48C,EAAoB,IAAG,4qB,u3BC1BjBG,E,yHAKL,SAASC,EAA0B38C,EACAJ,EACAC,EAEAC,GAEtC,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SAAOI,MAAM,CACTA,MAAO48C,EACP18C,UAAW,CACPu9B,OAAQz9B,EAAMy9B,OACdQ,MAAOj+B,EAAMi+B,MACb3oB,OAAQtV,EAAMsV,OACdogC,iBAAkB11C,EAAM01C,iBACxBmH,WAAY78C,EAAM68C,WAClBC,cAAe98C,EAAM88C,eAEzB/8C,YAAaA,IAGhBI,MAAK,SAACC,GACCP,EAAUO,EAAQhE,SAGzBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAIhC,SAASqgD,EAA2B/8C,EACAJ,EAEAC,EAEAC,GAEvC,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SAAOI,MAAM,CACTA,MAAOg9C,EACP98C,UAAW,CACPu9B,OAAQz9B,EAAMy9B,OACdQ,MAAOj+B,EAAMi+B,MACb3oB,OAAQtV,EAAMsV,OACd2nC,mBAAoBj9C,EAAMi9C,mBAC1BJ,WAAY78C,EAAM68C,WAClBC,cAAe98C,EAAM88C,cACrBI,WAAYl9C,EAAMk9C,WAClB9N,aAAcpvC,EAAMovC,aACpB+N,eAAgBn9C,EAAMm9C,eACtBC,oBAAqBp9C,EAAMo9C,oBAC3BC,4BAA6Br9C,EAAMq9C,4BACnCC,+BAAgCt9C,EAAMs9C,+BACtCC,iCAAkCv9C,EAAMu9C,iCACxCpE,OAAQn5C,EAAMm5C,OACdC,kBAAmBp5C,EAAMo5C,kBACzBC,oBAAqBr5C,EAAMq5C,oBAAsBr5C,EAAMq5C,oBAAsB,MAEjFt5C,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,OArEhB,SAAYggD,GACR,2BACA,4BAFJ,CAAYA,MAAY,KAyExB,IAAME,EAAoB,IAAG,+sGA2DhBI,EAA0B,IAAG,i7SA2I7BQ,EAAuB,IAAG,qcAahC,SAAS5I,EAAsBh1C,EACAy4C,EACAx4C,EAEAC,GAE9B,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cAEvE,SAAOI,MAAM,CACGA,MAAOy9C,EACPv9C,UAAW,CACCm4C,WAAYA,GAExBt4C,YAAaA,IAGxBI,MAAK,SAACC,GACCP,EAAUO,EAAQhE,SAGzBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAIxC,IAAM+gD,EAAmB,IAAG,+wBAiB5B,SAASC,EAA6B99C,EACAC,EAEAC,GAErC,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cAEvE,SAAOI,MAAM,CACTA,MAAO29C,EACPz9C,UAAW,GACXH,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGjBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAexC,IAAMihD,EAA8B,IAAG,yQAQjB,IAAG,qJAQzB,SAASC,EAAuBh+C,EACAkB,EACAjB,EAEAC,GAEnC,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cAEvE,SAAOI,MAAM,CACTA,MAAO69C,EACP39C,UAAW,CAACY,SAAUA,GACtBf,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAGhC,IAAMmhD,EAAoB,IAAG,ukFA+C7B,SAASC,EACZl+C,EACAkB,EACAjB,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cAEvE,SAAOI,MAAM,CACTA,MAAO+9C,EACP79C,UAAW,CAACY,SAAUA,GACtBf,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAGhC,IAAMqhD,EAAyB,IAAG,+VAW5B/pB,EAA+B,IAAG,2pBAclCC,EAA4B,IAAG,28CAsB/BC,EAA6B,IAAG,qoBAchCC,EAA8C,IAAG,q7BAgBjDC,EAAuC,IAAG,m+BAgB1CC,EAAmC,IAAG,+qCAkBtC2pB,EAAqC,IAAG,i1BAgBxCC,EAAkC,IAAG,qoDAwBrCC,EAAmC,IAAG,+zBAgBtCC,EAAoD,IAAG,+mCAkBvDC,EAA6C,IAAG,6pCAkBhDC,EAAyC,IAAG,y2CAoB5CC,EAAyB,IAAG,iVAU5BC,EAA+B,IAAG,yVAQlCC,EAAmC,IAAG,qWAsB5C,SAASC,EACZ7+C,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cAEvE,SAAOI,MAAM,CACTA,MAAO0+C,EACPx+C,UAAW,GACXH,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAGhC,IAAMgiD,EAAsB,IAAG,iSAU/B,SAASC,EACZ/+C,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cAEvE,SAAOI,MAAM,CACTA,MAAO4+C,GACP1+C,UAAW,GACXH,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GAAmBoD,EAAQpD,MAGhC,I,+DAAMkiD,GAAkB,IAAG,mUAqBrBC,GAA6B,IAAG,0W,4XCr/BvCn9C,EAAY,aAAW,SAACC,GAC5B,mBAAa,CACXC,KAAM,CACFC,MAAO,aA4BFi9C,EAAgF,SAAA5iD,G,MAEnF2G,EAAUnB,IAEV,EAAoB,mBAA8C,CACpE/E,QAAS,KADNN,EAAK,KAAEC,EAAQ,KAIhByiD,EAA8B,YAA0B,CAAEC,SAAwB,QAAd,EAAA9iD,EAAM8iD,gBAAQ,QAAI,MAAQ,eAEpG,qBAAU,WAEN,IAAKD,EAA4B5gD,UAAY4gD,EAA4B//C,OAAS+/C,EAA4B3iD,KAAM,CAExG,MAAS2iD,EAA2B,KAC5CziD,GAAS,SAACyQ,GACN,OAAO,EAAP,KACOA,GAAS,CACZpQ,QAAS,EAAKuU,OAAO+tC,uBAAuBpiD,KAAK,SAACC,GAAmC,cAAKA,GAAM,CAAEC,MAAOD,EAAO+gB,KAAM5gB,MAAOH,EAAO2H,iBAC/F+M,MAAK,SAACC,EAAGC,GAAM,OAAAD,EAAEJ,SAAWK,EAAEL,UAAY,EAAII,EAAEJ,SAAWK,EAAEL,SAAW,EAAI,aAKvH,CAAC0tC,EAA4B3iD,KAAM2iD,EAA4B//C,MAAO+/C,EAA4B5gD,UAG5G,IAAMd,EAAe,SAACC,EAA8BP,GAEhD2V,QAAQsQ,IAAI,WAAYjmB,GACpBb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,KAAOtB,EAAMsB,KAAO,YAIrDC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,oCACM1B,EAAM8B,SAEA,kBAAC,IAAY,CACTE,UAAW2E,EAAQjB,KACnB3D,MAAO/B,EAAM+B,MACblB,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS4gD,EAA4B5gD,QACrCC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMM,QACf28B,qBAAsBp9B,EAAMo9B,qBAC5Bh7B,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAA,EAAMA,QAAUyB,EAAOzB,OAC7D2B,OAAQxC,EAAMwC,OAEdC,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQqhD,EAA4B5gD,SAC9Da,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACTzB,UAAW2E,EAAQjB,KACnB3D,MAAO/B,EAAM+B,MACblB,MAAOb,EAAMa,MACboB,QAAS4gD,EAA4B5gD,QACrCC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMM,QACf28B,qBAAsBp9B,EAAMo9B,qBAC5Bh7B,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDs8B,kBAAmB,SAAC/6B,EAAQzB,GAAU,OAAAA,EAAMA,QAAUyB,EAAOzB,OAC7D2B,OAAQxC,EAAMwC,OAEdC,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQqhD,EAA4B5gD,SAC9Da,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,gB,2gBCtI7Bu/C,EAAwD,SAAAhjD,GAI3D,MAAoB,mBAAkC,CACxDC,WAAW,EACXC,KAAM,KAFHC,EAAK,KAAEC,EAAQ,KAKtB,qBAAU,WACNC,MAED,IAEH,IAAMA,EAAY,WAEdD,EAAS,EAAD,KACDD,GAAK,CACRF,WAAW,KAcfgjD,EAX+B,CAC3BC,eAAiBljD,EAAMmjD,gBAAyC,IAAxBnjD,EAAMmjD,eAG1B,IAAYt3C,UAAU,IAAgBu3C,4BAFxC,KAII,IAAYv3C,UAAU,IAAgBw3C,gCAO5D,GAEA,SAACnjD,GAAS,OAAAK,EAAeL,MAEzB,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrCD,EAAiB,SAACL,GACpBE,EAAS,EAAD,KACDD,GAAK,CACRD,KAAMA,EAAK6gC,KAAKgC,YAAYugB,WAAW3iD,KAAI,SAACC,GAAmB,cAAMA,GAAM,CAAEC,MAAOD,EAAO4Q,OAAQzQ,MAAOH,EAAO2H,iBACjHtI,WAAW,MAKbkB,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,oCACM1B,EAAM8B,SAEA,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVqB,OAAQxC,EAAMwC,OACd/B,QAASN,EAAMD,KAEfkC,mBAAuCiC,IAAxBrE,EAAMoC,eAA8BpC,EAAMoC,cAEzDC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OACtDwiD,gBAAiBvjD,EAAMujD,gBAEvB9gD,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVqB,OAAQxC,EAAMwC,OACd/B,QAASN,EAAMD,KAEfkC,mBAAuCiC,IAAxBrE,EAAMoC,eAA8BpC,EAAMoC,cAEzDC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OAEtDwiD,gBAAiBvjD,EAAMujD,gBACvB9gD,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO9C,EAAM8C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,eAanC,SAASw/C,EACZn/C,EACAJ,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAO0/C,EACPx/C,UAAW,CACPk/C,eAAgBp/C,EAAQA,EAAMo/C,eAAiB,MAEnDr/C,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MAIpB,I,EAAMgjD,EAAiB,IAAG,wtB,2gBClMbC,EAAgE,SAAAzjD,GAInE,MAAoB,mBAAsC,CAC5DC,WAAW,EACX6C,MAAO9C,EAAM8C,MACb5C,KAAM,KAHHC,EAAK,KAAEC,EAAQ,KAMtB,qBAAU,WACNC,MAED,IAEH,IAAMA,EAAY,WAEdD,EAAS,EAAD,KACDD,GAAK,CACRF,WAAW,KASfyjD,EANmC,CAC/BC,mBAAoB,IAAY93C,UAAU,IAAgB+3C,gCACpC,KACA,IAAY/3C,UAAU,IAAgBg4C,oCAK5D,GAEA,SAAC3jD,GAAS,OAAAK,EAAeL,MAEzB,SAAUM,GACN,YAAiB,KAAMA,EAAQ,aAKrCD,EAAiB,SAACL,GACpBE,EAAS,EAAD,KACDD,GAAK,CACRD,KAAMA,EAAK6gC,KAAKkC,YAAY6gB,WAAWnjD,KAAI,SAACC,GAAuB,OAAEC,MAAOD,EAAO4Q,OAAQzQ,MAAOH,EAAO2H,gBACzGtI,WAAW,MAKbkB,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAS,EAAD,KACDuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACZ1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBAMjC,OACI,oCACM1B,EAAM8B,SAEA,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACbiB,UAAU,EACVG,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,eAAe,EAEfC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OAEtD0B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO3C,EAAM2C,MACbC,WAAY/C,EAAM+C,eAI1BC,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAU9B,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAAS9B,EAAMF,UACfiC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,eAAe,EAEfC,eAAgB,SAACC,GAA8B,OAAAA,EAAOvB,OAEtD0B,YAAa,SAAAjB,GAAU,OACnB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAQ,WACRC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQrB,EAAMF,WACxC6C,MAAO3C,EAAM2C,UAIrBE,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACCC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MAC7DJ,EAAKK,eAanC,SAASigD,EACZ5/C,EACAJ,EACAC,EAEAC,GAEA,IAAIC,GAA2C,IAAhBH,EAAuB,eAAiB,cACvE,SACKI,MAAM,CACHA,MAAOigD,EACP//C,UAAW,CACP2/C,mBAAoB7/C,EAAQA,EAAM6/C,mBAAqB,MAE3D9/C,YAAaA,IAGhBI,MAAK,SAACC,GACHP,EAAUO,EAAQhE,SAGrBiE,OAAM,SAAC3D,GACJoD,EAAQpD,MAIpB,I,EAAMujD,EAAqB,IAAG,knB,0ICvDlBC,EAKAC,E,+XAzKNz+C,EAAY,aAAW,SAACC,G,wBAC1B,mBAAa,CACTC,KAAM,CACFC,MAAO,OACPY,QAAS,QAEb29C,qBAAsB,CAClBh+C,QAAS,OACTtD,OAAQ,WAEZuhD,cAAe,CACX59C,QAAS,SACTD,KAAM,EACN,WAAS,KACL,EAACb,EAAM2+C,YAAYC,KAAK,OAAQ,CAC5BzoC,UAAW,U,GAGnB,WAAY,CACRD,OAAQ,OACRhW,MAAO,OACPsV,OAAQ,aAAe,IAAUmL,cAAck+B,gBAC/C59B,aAAc,MACdD,UACI,aAAe,IAAUL,cAAcm+B,gBAC3C3hD,OAAQ,IAGhB4hD,gBAAiB,CACbj+C,QAAS,SACTL,QAAS,OACT8U,SAAU,SACV5U,eAAgB,gBAEpBq+C,gBAAc,GACVv+C,QAAS,OACTC,WAAY,SACZwV,OAAQ,QACR,EAAClW,EAAM2+C,YAAYC,KAAK,OAAQ,CAC5Bj+C,eAAgB,UAEpB,EAACX,EAAM2+C,YAAYM,GAAG,OAAQ,CAC1Bt+C,eAAgB,c,GAGxBu+C,aAAW,GACPz+C,QAAS,OACTtD,OAAQ,UACRuD,WAAY,UACZ,EAACV,EAAM2+C,YAAYC,KAAK,OAAQ,CAC5Bj+C,eAAgB,UAEpB,EAACX,EAAM2+C,YAAYM,GAAG,OAAQ,CAC1Bt+C,eAAgB,YAEpB,aAAW,CACPG,QAAS,UAEb,wBAAmB,GACfL,QAAS,OACTtD,OAAQ,UACR,UAAW,CACP2D,QAAS,WAEb,EAAC,qBAAuB,KACpB,EAAC,qBAA2B,CACxB3E,MAAO,UACP2S,SAAU,QAEd,EAAC,mBAAqB,KAClB,EAAC,qBAA2B,CACxB3S,MAAO,W,SAKvB,EAAC,gBAAsB,CACnB,UAAW,CACP2Q,gBAAiB,gBAGzB,EAAC,mBAAqB,GAClBA,gBAAiB,eACjB,EAAC,QAAK,GACFqyC,OAAQ,QACR,EAAC,UAAW,CACRA,OAAQ,Q,MAIpB,EAAC,sBAAwB,GACrB,aAAc,CACVrwC,SAAU,OACVrO,QAAS,QAEb,yBAA0B,CACtBA,QAAS,UAEb,EAAC,gBAAsB,CACnBmK,SAAU,EACV9J,QAAS,EACTgM,gBAAiB,cACjB0I,OAAQ,GAOZ,sCAAoC,CAChCrZ,MAAO,W,GAGf,EAAC,oBAAsB,KACnB,EAAC,gBAAsB,CACnByO,SAAU,EACV9J,QAAS,EACTgM,gBAAiB,cACjB0I,OAAQ,GAEZ,EAAC,yBAA+B,CAC5B/U,QAAS,Q,MAIrBwL,MAAO,CACHa,gBAAiB,4BACjBhM,QAAS,QAEbs+C,SAAU,CACN1xC,OAAQ,WAEZ2xC,aAAc,CACVv+C,QAAS,EACT,cAAe,CACXgO,SAAU,GACV3R,OAAQ,EACRhB,MAAO,uBAGfmjD,eAAgB,CACZ7+C,QAAS,OACTC,WAAY,SACZvD,OAAQ,UACR,UAAW,CACP2D,QAAS,WAGjBy+C,qBAAsB,CAClBpjD,MAAO,WAEXqjD,cAAe,CACX,6BAA8B,CAC1BrjD,MAAO,YAGfsjD,aAAc,CACV,6BAA8B,CAC1BtjD,MAAO,kBAMvB,SAAYoiD,GACR,iBACA,qBAFJ,CAAYA,MAAU,KAKtB,SAAYC,GACR,mBACA,mBAFJ,CAAYA,MAAgB,KA4DrB,IAAM1I,EAAwE,SACjFv7C,GAGA,IAiCImlD,EAjCEx+C,EAAUnB,IAEVi0B,EAAS,cAET,EAAoB,mBAA6B,CACnDvlB,OAAQ,CACJpQ,WAA8BO,IAAvBrE,EAAM47C,aAA6B57C,EAAM47C,aAAe,GAC/DpC,sBACsCn1C,IAAlCrE,EAAM07C,yBACA17C,EAAM07C,yBAGpB0J,UAAWplD,EAAMm5C,iBACXn5C,EAAMm5C,iBACN8K,EAAiB7K,KACvBrsB,SAAU,CACNs4B,OAAO,EACPC,SAAS,EACTC,OAAO,EACP9J,OAAO,EACPriC,QAAQ,EACRosC,OAAO,GAEX1L,YAAY,EACZ2L,eAAe,EACfC,UAAU,EACVtQ,UAAWp1C,EAAMo1C,UACjBO,aAAa,IAvBV90C,EAAK,KAAE8kD,EAAQ,KA0BfC,EAAiB,KAAqB,SAACxsC,GAAmB,OAAA5E,EAAS4E,KAAS,KAAI,GAInFysC,EAAY,EAEZC,EAAqB,GAEzB,mBAAQ,WACJH,GAAS,SAACI,GACN,OAAO,EAAP,KACOA,GAAS,CACZ3Q,UAAWp1C,EAAMo1C,iBAI1B,CAACp1C,EAAMo1C,YAYV,qBAAU,WACNuQ,EAAS,EAAD,KACD9kD,GAAK,CACRksB,SAAU,CAAE0uB,MAAOz7C,EAAM67C,iBACzB/B,WAAY95C,EAAM85C,WAClB2L,eAAezlD,EAAM85C,YAAqBj5C,EAAM4kD,cAChDC,UAAU1lD,EAAM85C,YAAqBj5C,EAAM6kD,cAGhD,CACC1lD,EAAMC,UACND,EAAM85C,WACN95C,EAAM67C,gBACNsJ,IAKJ,qBAAU,WACFnlD,EAAMi6C,kBAAoBj6C,EAAMC,WAChC+lD,MAGL,CAAChmD,EAAMi6C,gBAAiBj6C,EAAMC,YAEjC,IAAM+lD,EAAuB,WACrBhmD,EAAMC,aAIkB,IAAxBY,EAAM4kD,eACNE,EAAS,EAAD,KACD9kD,GAAK,CACR6kD,UAAU,EACVD,eAAe,KAGfzlD,EAAM64C,yBACN74C,EAAM64C,yBAAwB,KAGlC8M,EAAS,EAAD,KACD9kD,GAAK,CACR6kD,UAAU,EACVD,eAAe,KAGfzlD,EAAM64C,yBACN74C,EAAM64C,yBAAwB,MAKpCrkC,EAAW,SAAC4E,GACdusC,EAAS,EAAD,KACD9kD,GAAK,CACRqT,OAAQ,CACJslC,iBAAkB34C,EAAMqT,OAAOslC,iBAC/B11C,MAAOsV,MAIXpZ,EAAMwU,UACNxU,EAAMwU,SAAS4E,IAyCjBm/B,EAAW,SAACprC,GACVnN,EAAMu4C,UACNv4C,EAAMu4C,SAASprC,IA0CjB0qC,EAAc,SAAC91C,GACjB4jD,EAAS,EAAD,KAAM9kD,GAAK,CAAEukD,UAAWrjD,KAC5B/B,EAAM63C,aACN73C,EAAM63C,YAAY91C,IA4D1B,OAxDI/B,EAAMy7C,QACNoK,EAAY7lD,EAAMy7C,MAAMnlC,QAGxBtW,EAAMy7C,OACNz7C,EAAMy7C,MAAMtqC,SAAQ,SAACqtC,GACjBsH,EAAcv0C,KAAK,CACfjO,IAAKk7C,EAAOP,SACZ38C,KAAMk9C,EAAOl9C,KACb2J,QAAS,WAzCE,IAAkBgzC,EA0CVO,EAAOl9C,KA1CG28C,EA0CGO,EAAOP,SAzC3Cj+C,EAAM83C,gBACN93C,EAAM83C,eAAemG,SA8C7B6H,EAAcv0C,KAAK,CACfjO,IAAK,aACLhC,KAAM,sBACN2J,QAAS,WAxDLjL,EAAM+3C,mBACN/3C,EAAM+3C,qBA0DV71C,SAAwB,IAAd2jD,GAAyB7lD,EAAMw+B,iBAIpB,IAArB39B,EAAMi5C,aACkB,IAAxBj5C,EAAM4kD,gBACa,IAAnB5kD,EAAM6kD,SAGNP,EAAqB,uBAAGl6C,QAAS+6C,EAAsBhkD,UAAW2E,EAAQk+C,UAAQ,eAE7D,IAArBhkD,EAAMi5C,YACNj5C,EAAM4kD,gBACa,IAAnB5kD,EAAM6kD,SAGNP,EAAsB,uBAAGl6C,QAAS+6C,EAAsBhkD,UAAW2E,EAAQk+C,UAAQ,mBAE9D,IAArBhkD,EAAMi5C,aACkB,IAAxBj5C,EAAM4kD,gBACa,IAAnB5kD,EAAM6kD,SAGNP,EAAsB,uBAAGl6C,QAAS+6C,EAAsBhkD,UAAW2E,EAAQk+C,UAAQ,mBAC5EhkD,EAAMi5C,aAGbqL,EAAqB,uBAAGl6C,QAAS+6C,EAAsBhkD,UAAW2E,EAAQk+C,UAAQ,eAGjFprB,EAAOx3B,SAAYw3B,EAAO32B,QAAS22B,EAAOv5B,OAC3CW,EAAM80C,YAAwE,cAAzDlc,EAAOv5B,KAAMu5B,OAAO5R,aAAaC,qBAItD,yBAAK9lB,UAAc2E,EAAQjB,KAAI,IAAI1F,EAAMgC,WACrC,kBAAC,IAAI,CAAC6I,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,kBAAC,IAAI,CAACje,WAAW,EAAMC,QAAS,GAC5B,kBAAC,IAAI,CAACC,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,yBAAK9mB,UAAW2E,EAAQu9C,sBACpB,yBAAKliD,UAAW2E,EAAQw9C,eACpB,kBAAC,IAAQ,CACL8B,KAAM,IAAkBC,cACxBhyC,OACIrT,EAAMqT,OAAOpQ,MACPjD,EAAMqT,OAAOpQ,MACb,GAEVqiD,aAAcP,EAEdQ,WAAW,KAGnB,yBAAKpkD,UAAW2E,EAAQ69C,iBACpB,kBAAC,IAAU,CACPzjD,MACIF,EAAM80C,YAAc,IAAkB0Q,YAAc,IAAkBC,iBAE1EC,UACI1lD,EAAMqT,OAAOslC,iBAEjBt3C,SAAUlC,EAAMC,UAChBkC,SA7KT,SACvBf,EACAjB,GAEAwlD,EAAS,EAAD,KACD9kD,GAAK,CACRqT,OAAQ,CACJslC,iBAAkBr5C,EAAM6N,QACxBlK,MAAOjD,EAAMqT,OAAOpQ,OAExB2hD,eAAe,EACfC,UAAU,KAGV1lD,EAAM23C,oBACN33C,EAAM23C,mBAAmBx3C,EAAM6N,aAiKX,yBAAKhM,UAAW2E,EAAQo+C,gBACpB,6BACI,kBAAC,IAAU,cAAY,kBAAkB/iD,UAAW2E,EAAQq+C,qBAAsB/5C,QAASjL,EAAMu3C,kBAC7F,kBAAC,IAAK,CAAC31C,MAAM,YAAYc,QAAQ,MAAM8jD,WAAY3lD,EAAMu0C,WACrD,kBAAC,IAAc,CACX7gC,SAAS,UACTxS,MAAO,CACHH,MAAO,mBASvC,kBAAC,IAAI,CAACmJ,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,yBAAK9mB,UAAW2E,EAAQ89C,gBACnBzkD,EAAM87C,WAEK,kBAAC,IAAO,CACJ/6C,MAAO,WAAWf,EAAM27C,kBAAiB,qEAC3B37C,EAAM27C,kBAAiB,kEACvB,IAAkBL,UAIpC,kBAAC,IAAO,CACJv6C,MAAO,WAAWf,EAAM27C,kBAAiB,qEAC3B37C,EAAM05C,iBAAgB,kEACtB,IAAkB4B,cAShE,kBAAC,IAAI,CAACvwC,MAAM,EAAMC,GAAI,GAAI8d,GAAI,GAC1B,yBAAK9mB,UAAW2E,EAAQg+C,aACnB,IAAY94C,UAAU,IAAgB46C,iBACnC,kBAAC,IAAe,CAACR,KAAK,UAClB,kBAAC,IAAc,CACXS,MAAM,QACNC,aAAc,IAAaC,MAC3BA,OAAO,EACPjzC,SAAS,EAETzR,SAAUlC,EAAMC,WAAaD,EAAMm6C,gBACnC0M,OAAQ,QACRxL,YAAa,iCAAgCr7C,EAAMC,WAAaD,EAAMm6C,gBAAkBxzC,EAAQs+C,cAAgBt+C,EAAQu+C,cACxH4B,YAAa,CACTlyC,MAAO,CACH,CACItR,IAAK,MACLhC,KAAM,aACN2J,QAAS,WAELstC,EAASyL,EAAW9E,OAG5B,CACI57C,IAAK,QACLhC,KAAM,eACN2J,QAAS,WAELstC,EAASyL,EAAW+C,cAO5C,KACJ,kBAAC,IAAe,CACZd,KACIplD,EAAMi5C,WACA,eACA,8DAGV,kBAAC,IAAc,CACX4M,MAAM,QACNC,aAAc,IAAan0C,KAC3B6oC,YAAY,gBACZwL,OACIhmD,EAAMksB,SAASs4B,MACT,uBACA,iBAEVp6C,QAtMA,WAIpBpK,EAAMi5C,aACF95C,EAAMi4C,kBACNj4C,EAAMi4C,kBAAkBp3C,EAAMksB,SAASs4B,OAE3CM,EAAS,EAAD,KAAM9kD,GAAK,CAAEksB,SAAU,CAAEs4B,OAAQxkD,EAAMksB,SAASs4B,YA+LpCnjD,SAAUlC,EAAMC,aAGxB,kBAAC,IAAe,CAACgmD,KAAK,WAClB,kBAAC,IAAc,CACXS,MAAM,UACNC,aAAc,IAAan0C,KAC3BvH,QAhQN,WAClB06C,EAAS,EAAD,KACD9kD,GAAK,CACR4kD,eAAe,EACfC,UAAU,KAGV1lD,EAAM43C,eACN53C,EAAM43C,iBAyPc11C,SAAUlC,EAAMC,UAChB4mD,OAAO,cACPxL,YAAY,mBAInBr7C,EAAMw7C,gBACH,oCACI,kBAAC,IAAe,CAACyK,KAAK,aAClB,kBAAC,IAAc,CACXS,MAAM,OACNC,aAAc,IAAan0C,KAC3BtQ,SAAUlC,EAAMC,UAChB+N,QACInN,EAAMukD,YACNnB,EAAiB7K,KAMrByN,OACIhmD,EAAMukD,YACNnB,EAAiB7K,KACX,cACA,eAEViC,YAAY,oBACZpwC,QAAS,WACL,OAAA4sC,EAAYoM,EAAiB7K,UAIzC,kBAAC,IAAe,CAAC6M,KAAK,aAClB,kBAAC,IAAc,CACXS,MAAM,OACNC,aAAc,IAAan0C,KAC3BtQ,SAAUlC,EAAMC,UAChB+N,QACInN,EAAMukD,YACNnB,EAAiBz9B,KAMrBqgC,OACIhmD,EAAMukD,YACNnB,EAAiBz9B,KACX,cACA,eAEV60B,YAAY,oBACZpwC,QAAS,WACL,OAAA4sC,EAAYoM,EAAiBz9B,gBAK7CniB,EAEJ,kBAAC,IAAe,CAAC4hD,KAAK,WAClB,kBAAC,IAAc,CACXS,MAAM,SACNC,aAAc,IAAan0C,KAC3BtQ,SACIlC,EAAMC,WACNY,EAAMukD,YAAcnB,EAAiB7K,KAEzCnuC,QA3RF,WAClBjL,EAAMk4C,eACNl4C,EAAMk4C,eAAer3C,EAAMksB,SAASy4B,OAExCG,EAAS,EAAD,KAAM9kD,GAAK,CAAEksB,SAAU,CAAEy4B,OAAQ3kD,EAAMksB,SAASy4B,WAwRhCnK,YAAY,gBAEZwL,OACIhmD,EAAMksB,SAASy4B,MACT,oBACA,iBAIjB,IAAY35C,UAAU,IAAgBm7C,gCAE/B,kBAAC,IAAe,CAACf,KAAK,eAClB,kBAAC,IAAc,CACXS,MAAM,QACNC,aAAc,IAAaC,MAC3BA,OAAO,EACPjzC,SAAS,EACT1I,QAhUZ,WAChBjL,EAAMm4C,iBACNn4C,EAAMm4C,iBAAiBt3C,EAAMksB,SAAS0uB,OAE1CkK,EAAS,EAAD,KAAM9kD,GAAK,CAAEksB,SAAU,CAAE0uB,OAAQ56C,EAAMksB,SAAS0uB,WA6TxBv5C,SAAUlC,EAAMC,UAChB4mD,OACIhmD,EAAMksB,SAAS0uB,MACT,kBACA,YAEVJ,YAAY,+BACZyL,YAAa,CACTlyC,MAAOkxC,MAKnB,kBAAC,IAAe,CAACG,KAAK,eAClB,kBAAC,IAAa,CACV3iD,IAAI,QACJqQ,SAAS,EACTzR,SAAUlC,EAAMC,UAChB+B,UAAc2E,EAAQm+C,aAAY,gCAClCmC,UAAW,CACPryC,MAAOkxC,SAOd,IAApB9lD,EAAMC,WAAuBD,EAAM27C,kBAAoB,GAC/B,IAArB96C,EAAMi5C,YACkB,KAAvBj5C,EAAMqT,OAAOpQ,YACaO,IAAvBxD,EAAMqT,OAAOpQ,MAUb,KATA,kBAAC,IAAI,CAACiH,MAAM,EAAMC,GAAI,GAAI8d,GAAI,IAC1B,uBAAG9mB,UAAW2E,EAAQ+K,O,wEAEIyzC,E,qIAOlC,S,seC/tBPlP,EAA4D,SAACj2C,GAGhE,MAAoB,mBAAoC,CAC1DE,KAAM,KADHC,EAAK,KAAEC,EAAQ,KAIhBggD,EAAkB,YAA+C8G,EAAmB,CACtFljD,UAAW,CACPiW,oBAAqBja,EAAMia,qBAE/BpW,YAAa,gBAGjB,mBAAQ,YACCu8C,EAAgBn+C,UAAYm+C,EAAgBt9C,OAASs9C,EAAgBlgD,MAAQkgD,EAAgBlgD,KAAK8U,QAAUorC,EAAgBlgD,KAAK8U,OAAOk+B,cACzI9yC,GAAS,SAACyQ,GACE,IAEF+D,EAFmBwrC,EAAgBlgD,KAAM8U,OAAM,aAEMrU,KAAI,SAACwmD,GAC5D,OAAO,EAAP,KACOA,GAAO,CACVpmD,MAAOomD,EAAQ5+C,YACf1H,MAAOsmD,EAAQ5+C,iBAGvB,OAAO,EAAP,KACOsI,GAAS,CACZ3Q,KAAM0U,SAKnB,CAACwrC,EAAgBn+C,QAASm+C,EAAgBlgD,KAAMkgD,EAAgBt9C,QAGnE,IAAM3B,EAAe,SAACC,EAA8BP,GAC5Cb,EAAMqB,aACNrB,EAAMqB,YAAYR,EAAOb,EAAMsB,OAIjCC,EAAgB,SAACC,EAA2BvB,GAC9C,OAAO,EAAP,KACOuB,EAAOC,YAAU,CACpBC,aACI,kBAAC,IAAMC,SAAQ,KACV1B,EAAY,kBAAC,IAAgB,CAAC2B,MAAM,UAAUC,KAAM,KAAS,KAC7DL,EAAOC,WAAWC,iBA2BnC,OAAI1B,EAAM8B,SAEF,kBAAC,IAAY,CACTC,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAASm+C,EAAgBn+C,QACzBC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAAyC,OAAAA,EAAOvB,OAEjEyB,OAAQxC,EAAMwC,OACdV,UAAU,EACVsY,WArCS,SAACvZ,EAAuCwZ,GAkBzD,OAjBsBxZ,EAAMF,KAAI,SAAC2B,EAAsCe,GACnE,IAAItC,EAAQuB,EAAOvB,MAKnB,OAJIuB,EAAOvB,MAAMuV,OAAS,KACtBvV,EAAWuB,EAAOvB,MAAMuZ,UAAU,EAAG,IAAG,OAIxC,kBAAC,IAAI,KACGD,EAAY,CAAEhX,MAAK,IAAG,CAC1BC,IAAKD,EACLtC,MAAOA,EAEPc,KAAK,eAyBTY,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQ4+C,EAAgBn+C,SAClDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,aAWlC,kBAAC,IAAY,CACT1B,MAAO/B,EAAM+B,MACbC,UAAWhC,EAAMgC,UACjBnB,MAAOb,EAAMa,MACboB,QAASm+C,EAAgBn+C,QACzBC,SAAUlC,EAAMkC,SAChBC,SAAUhB,EACVV,QAASN,EAAMD,KACfkC,cAAepC,EAAMoC,cAErBC,eAAgB,SAACC,GAAyC,OAAAA,EAAOvB,OAEjEyB,OAAQxC,EAAMwC,OACdC,YAAa,SAACjB,GAAW,OACrB,kBAAC,IAAS,KACFA,EAAM,CACVT,MAAOf,EAAMe,MACb2B,QAAS1C,EAAM0C,QACfC,WAAW,EACXC,OAAO,OACPC,SAAU7C,EAAM6C,SAChBpB,WAAYF,EAAcC,EAAQ4+C,EAAgBn+C,SAClDa,MAAO9C,EAAM8C,MACbjB,KAAM7B,EAAM6B,SAIpBmB,aAAc,SAACV,EAAQ,G,IAAEW,EAAU,aACzBC,EAAU,IAAMZ,EAAOvB,MAAOkC,GAC9BE,EAAQ,IAAMb,EAAOvB,MAAOmC,GAElC,OACI,6BACKC,EAAMxC,KAAI,SAACyC,EAAMC,GAAU,OACxB,0BAAMC,IAAKD,EAAOtB,MAAO,CAAEwB,WAAYH,EAAKI,UAAY,IAAM,MACzDJ,EAAKK,cA2BhCyjD,EAAoB,IAAG,ke,+BCvO7B,4ZAyCYE,EAzCZ,mEAsCIC,EAAW,CAAC,gBAAiB,iBAAkB,kBAC/CC,EAAoB,CAAC,iBAAkB,mBAE3C,SAAYF,GACR,0BACA,8BACA,0BACA,8BACA,sBACA,gCACA,4BACA,0BACA,wBACA,4DACA,kCACA,sBACA,8BACA,kCACA,8BACA,wBACA,8CACA,4BACA,sBACA,0BACA,gCArBJ,CAAYA,MAAa,KAyBlB,IAAMG,EAA2C,CACpD,CACIl9C,GAAI+8C,EAAcI,WAClBC,SAAU,SACVC,UAAW,CACPC,WAAY,OAAQC,SAAU,WAGtC,CACIv9C,GAAI+8C,EAAcS,SAClBJ,SAAU,WACVK,aAAc,CAAE77C,OAAQ,iBACxBy7C,UAAW,CACPC,WAAY,SAAUC,SAAU,WAGxC,CACIv9C,GAAI+8C,EAAcW,aAClBN,SAAU,WACVK,aAAc,CAAE77C,OAAQ,0BACxBy7C,UAAW,CACPC,WAAY,SAAUC,SAAU,WAGxC,CACIv9C,GAAI+8C,EAAcY,aAClBP,SAAU,WACVC,UAAW,CACPC,WAAY,QAASC,SAAU,WAGvC,CACIv9C,GAAI+8C,EAAca,4BAClBR,SAAU,WACVC,UAAW,CACPC,WAAY,QAASC,SAAU,WAGvC,CACIv9C,GAAI+8C,EAAcc,eAClBT,SAAU,aACVC,UAAW,CACPC,WAAY,QAASC,SAAU,WAGvC,CACIv9C,GAAI+8C,EAAce,YAClBV,SAAU,SACVC,UAAW,CACPC,WAAY,SAAUC,SAAU,WAGxC,CACIv9C,GAAI+8C,EAAcgB,WAClBX,SAAU,SACVC,UAAW,CACPC,WAAY,QAASC,SAAU,WAGvC,CACIv9C,GAAI+8C,EAAciB,aAClBZ,SAAU,SACVC,UAAW,CACPC,WAAY,OAAQC,SAAU,WAGtC,CACIv9C,GAAI+8C,EAAckB,YAClBb,SAAU,SACVC,UAAW,CACPC,WAAY,SAAUC,SAAU,WAGxC,CACIv9C,GAAI+8C,EAAcmB,aAClBd,SAAU,SACVC,UAAW,CACPC,WAAY,SAAUC,SAAU,YAKrC,SAASY,IACZ,MAAO,CACHC,cAAe,CAAC,SAAU,WAAY,WAAY,kBAAmB,cAAe,qBAAsB,WAG1GC,kBAAkB,EAElBC,WAAY,SAACC,EAAgCC,GACzC,IACIC,EADe,IAAOD,GAAW58C,OAAO,cACf26C,MAAM,KAC/BmC,EAAW,IAAIhoC,KAAKO,OAAOwnC,EAAU,IAAKxnC,OAAOwnC,EAAU,IAAM,EAAGxnC,OAAOwnC,EAAU,KAEzF,OAAIF,EAA0BI,YAAcD,EAASC,UAC1C,EACAD,EAAWH,GACV,EACDG,EAAWH,EACX,GAEC,IAOjB,SAASK,EAA0B/K,EAA6BpE,GACnE,OAyDJ,SAAiCoP,EAAmDpP,GAChF,IAAI3hC,EAAS,IAAIK,MAiFjB,OAhEA0wC,EAAW/3C,SAAQ,SAAAg4C,GACf,IAOI3K,EAPAplC,EAASgwC,EAAqBD,EAAU1B,UAExC4B,EAAeF,EAAU1B,WAAa,IAAS6B,aAAeH,EAAU1B,WAAa,IAASxhB,UAAa6T,EAC3GyP,EAAeJ,EAAU1B,WAAa,IAAS1mC,MAAQooC,EAAU1B,WAAa,IAAS+B,SAoD3FC,EA7CIjL,GADgC,IAAhC2K,EAAUO,kBACD,CAEL9oC,MAAOuoC,EAAUvoC,MACjBD,WAAYwoC,EAAUxoC,WACtBhb,MAAOwjD,EAAUxjD,MACjBsG,OAAQk9C,EAAU1B,SAClBruC,OAAQA,GAAkB,GAC1BuwC,aAAcJ,EAAef,IAAwB,KACrDoB,MAAOT,EAAU9pC,KACjBwqC,OAAQV,EAAUW,SAAW,OAAS,OACtCzC,SAAUgC,EAAchC,EAAWC,EACnCyC,gBAAgB,EAChBz0C,KAAM,GACN00C,UAAU,EACVC,aAAcd,EAAU1B,WAAa,IAASyC,OAASf,EAAUvoC,WAAQvc,EACzE8lD,aAAS9lD,EACT+lD,YAAajB,EAAUiB,YACvBC,YAAa,YAAelB,EAAUkB,aACtCC,UAAWnB,EAAUmB,UACrBZ,kBAAmBP,EAAUO,kBAAoBP,EAAUO,uBAAoBrlD,EAC/EkmD,wBAAyBpB,EAAUoB,wBAA0BpB,EAAUoB,6BAA0BlmD,GAG5F,CAELuc,MAAOuoC,EAAUvoC,MACjBD,WAAYwoC,EAAUxoC,WACtBhb,MAAOwjD,EAAUxjD,MACjBsG,OAAQk9C,EAAU1B,SAClBruC,OAAQA,GAAkB,GAC1BuwC,aAAcJ,EAAef,IAAwB,KACrDoB,MAAOT,EAAU9pC,KACjBwqC,OAAQV,EAAUW,SAAW,OAAS,OACtCzC,SAAUgC,EAAchC,EAAWC,EACnCyC,gBAAgB,EAChBz0C,KAAM6zC,EAAU7zC,KAChB20C,aAAcd,EAAU1B,WAAa,IAASyC,OAASf,EAAUvoC,WAAQvc,EACzE8lD,QAAShB,EAAUgB,QACnBC,YAAajB,EAAUiB,YACvBC,YAAa,YAAelB,EAAUkB,aACtCC,UAAWnB,EAAUmB,WAKKnB,EAAU1B,UAK5CtvC,EAAO5G,KAAKitC,MAGTrmC,EA3ID,CAA0BokB,KAAKxC,MAAMmkB,GAAsBpE,GAI9D,SAAS0Q,EAA0BC,GACtC,IAAIC,EAIR,SAAgC7hC,GAC5B,IAAI1Q,EAAS,IAAIK,MA4CjB,OA3CAqQ,EAAQ1X,SAAQ,SAAA6pB,GACZ,IAEI2vB,EAFAC,EAAS5vB,EAAOI,YAKhBuvB,GAD6B,IAA7BC,EAAOlB,kBACK,CAER9oC,MAAOgqC,EAAOhqC,MAAQgqC,EAAOhqC,MAAQ,GACrCD,WAAYiqC,EAAOjqC,WAAaiqC,EAAOjqC,WAAa,GACpDhb,MAAOq1B,EAAO6vB,iBACdpD,SAAUqD,EAAqBF,GAC/BvrC,KAAM2b,EAAO+vB,aAAe/vB,EAAOgwB,mBACnClB,SAA2B,eAAjBc,EAAOhqC,MACjBtL,KAAM0lB,EAAOiwB,UACbd,QAASS,EAAOT,QAChBC,YAAaQ,EAAOR,YACpBC,YAAaO,EAAOhqC,MACpB0pC,UAAWM,EAAON,UAClBZ,kBAAmBkB,EAAOlB,kBAAoBkB,EAAOlB,uBAAoBrlD,EACzEkmD,wBAAyBK,EAAOL,wBAA0BK,EAAOL,6BAA0BlmD,GAGnF,CAERuc,MAAOgqC,EAAOhqC,MAAQgqC,EAAOhqC,MAAQ,GACrCD,WAAYiqC,EAAOjqC,WAAaiqC,EAAOjqC,WAAa,GACpDhb,MAAOq1B,EAAO6vB,iBACdpD,SAAUqD,EAAqBF,GAC/BvrC,KAAM2b,EAAO+vB,aAAe/vB,EAAOgwB,mBACnClB,SAA2B,eAAjBc,EAAOhqC,MACjBtL,KAAM0lB,EAAOiwB,UACbd,QAASS,EAAOT,QAChBC,YAAaQ,EAAOR,YACpBC,YAAaO,EAAOhqC,MACpB0pC,UAAWM,EAAON,WAK1BnyC,EAAO5G,KAAKo5C,MAGTxyC,EAjDY+yC,CAAuBT,GAC1C,OAAOluB,KAAK0jB,UAAUyK,GAwI1B,SAASI,EAAqB9vB,GAC1B,OAAIA,EAAOmwB,wBAA0B,IAC1B,IAAS3B,SAEhBxuB,EAAOmwB,wBAA0B,IAC1B,IAASpqC,KAEhBia,EAAOmwB,wBAA0B,IAC1B,IAAS7pC,OAEhB0Z,EAAOmwB,wBAA0B,IAC1B,IAASC,SAEhBpwB,EAAOmwB,wBAA0B,IAC1B,IAASE,wBAEhBrwB,EAAOmwB,wBAA0B,IAC1B,IAASG,QAEhBtwB,EAAOmwB,wBAA0B,IAC1B,IAASI,MAEhBvwB,EAAOmwB,wBAA0B,IAC1B,IAASK,WAEhBxwB,EAAOmwB,wBAA0B,IAC1B,IAAS7B,YAEhBtuB,EAAOmwB,wBAA0B,IAC1B,IAASM,QAKE,SAAlBzwB,EAAO5hB,OACA,IAAS2H,KAEE,aAAlBia,EAAO5hB,OACA,IAASowC,SAEE,UAAlBxuB,EAAO5hB,OACA,IAASmyC,MAKE,SAAlBvwB,EAAO5hB,OACA,IAASkwC,YAEE,eAAlBtuB,EAAO5hB,OACA,IAASoyC,WAEE,qBAAlBxwB,EAAO5hB,OACA,IAASsyC,SAEE,oBAAlB1wB,EAAO5hB,OACA,IAASqyC,QAEE,aAAlBzwB,EAAO5hB,OACA,IAAS6sB,SAEfjL,EAAO2wB,aAGL,IAASL,QAFL,IAASpB,OAKxB,SAASd,EAAqB3B,GAC1B,OAAQA,GACJ,KAAK,IAAS1mC,KAEd,KAAK,IAASyoC,SACV,MAAO,qBACX,KAAK,IAASgC,WACV,MAAO,aACX,KAAK,IAASlqC,OACV,MAAO,SACX,KAAK,IAAS8pC,SAEd,KAAK,IAASC,wBACV,MAAO,uBACX,KAAK,IAASE,MACV,MAAO,QACX,KAAK,IAASD,QACV,MAAO,UACX,KAAK,IAASI,SACV,MAAO,OACX,KAAK,IAASpC,YACV,MAAO,OACX,KAAK,IAASmC,QACV,MAAO,kBACX,KAAK,IAASxlB,SACV,MAAO,WACX,QACI,MAAO,QAsCZ,SAASwjB,EAA0BzuB,EAAgBysB,GACtD,OAAQA,GACJ,KAAK,IAAS+B,SACVxuB,EAAOmwB,sBAAwB,IAC/B,MACJ,KAAK,IAASpqC,KACVia,EAAOmwB,sBAAwB,IAC/B,MACJ,KAAK,IAAS7pC,OACV0Z,EAAOmwB,sBAAwB,IAC/B,MACJ,KAAK,IAASC,SACVpwB,EAAOmwB,sBAAwB,IAC/B,MACJ,KAAK,IAASE,wBACVrwB,EAAOmwB,sBAAwB,IAC/B,MACJ,KAAK,IAASG,QACVtwB,EAAOmwB,sBAAwB,IAC/B,MACJ,KAAK,IAASI,MACVvwB,EAAOmwB,sBAAwB,IAC/B,MACJ,KAAK,IAASK,WACVxwB,EAAOmwB,sBAAwB,IAC/B,MACJ,KAAK,IAASM,QACVzwB,EAAOmwB,sBAAwB,IAC/B,MAIJ,KAAK,IAAS7B,YACVtuB,EAAOmwB,sBAAyB,IAChC,MACJ,KAAK,IAASllB,SACVjL,EAAOmwB,2BAAwB9mD,EAC/B,MACJ,KAAK,IAAS6lD,OACd,QACI,QAIL,SAAS0B,IACZ,IAAIzzC,EAAS,IAAIK,MAsCjB,OArCAqzC,EAAqB16C,SAAQ,SAAA6pB,GACzB,IAAI5hB,EAASgwC,EAAqBpuB,EAAO/uB,QAErC69C,EAA4B,eAAjB9uB,EAAOpa,MAClByoC,EAAcruB,EAAO/uB,SAAW,IAASq9C,aAAetuB,EAAO/uB,SAAW,IAASg6B,SAEnF2kB,EAAS,CAEThqC,MAAOoa,EAAOpa,MAAQoa,EAAOpa,MAAQ,GACrCD,WAAYqa,EAAOra,WAAaqa,EAAOra,WAAa,GACpD8mC,SAAUzsB,EAAO/uB,OACjBtG,MAAOq1B,EAAOr1B,MAAQq1B,EAAOr1B,MAAQ,GACrCsG,OAAQ+uB,EAAO/uB,OACfmN,OAAQA,GAAkB,GAC1BwwC,KAAM5uB,EAAO4uB,KACbvqC,MAAO2b,EAAO4uB,KACdC,OAAQC,EAAW,OAAS,OAC5BA,SAAUA,EACVzC,SAAUgC,EAAchC,EAAWC,EACnCyC,gBAAgB,EAChBz0C,KAAM0lB,EAAO1lB,KAAO0lB,EAAO1lB,KAAO,GAClC20C,aAAcjvB,EAAO/uB,SAAW,IAASi+C,OAASlvB,EAAOpa,WAAQvc,EACjE8lD,QAASnvB,EAAOmvB,QAChBC,YAAapvB,EAAOovB,YACpBC,YAAa,YAAervB,EAAOpa,OACnC0pC,UAAWtvB,EAAOsvB,UAClBZ,kBAAmB1uB,EAAO0uB,kBAAoB1uB,EAAO0uB,uBAAoBrlD,EACzEkmD,wBAAyBvvB,EAAOuvB,wBAA0BvvB,EAAOuvB,6BAA0BlmD,GAK/FolD,EAA0BmB,EAAQ5vB,EAAO/uB,QAGzCkM,EAAO5G,KAAKq5C,MAETzyC,EAGJ,SAAS2zC,IACZ,IAAI3zC,EAAS,IAAIK,MAsCjB,OArCAuzC,EAAwB56C,SAAQ,SAAA6pB,GAC5B,IAAI5hB,EAASgwC,EAAqBpuB,EAAO/uB,QAErC69C,EAA4B,eAAjB9uB,EAAOpa,MAClByoC,EAAcruB,EAAO/uB,SAAW,IAASq9C,aAAetuB,EAAO/uB,SAAW,IAASg6B,SAEnF2kB,EAAS,CAEThqC,MAAOoa,EAAOpa,MAAQoa,EAAOpa,MAAQ,GACrCD,WAAYqa,EAAOra,WAAaqa,EAAOra,WAAa,GACpD8mC,SAAUzsB,EAAO/uB,OACjBtG,MAAOq1B,EAAOr1B,MAAQq1B,EAAOr1B,MAAQ,GACrCsG,OAAQ+uB,EAAO/uB,OACfmN,OAAQA,GAAkB,GAC1BwwC,KAAM5uB,EAAO4uB,KACbvqC,MAAO2b,EAAO4uB,KACdC,OAAQC,EAAW,OAAS,OAC5BA,SAAUA,EACVzC,SAAUgC,EAAchC,EAAWC,EACnCyC,gBAAgB,EAChBz0C,KAAM0lB,EAAO1lB,KAAO0lB,EAAO1lB,KAAO,GAClC20C,aAAcjvB,EAAO/uB,SAAW,IAASi+C,OAASlvB,EAAOpa,WAAQvc,EACjE8lD,QAASnvB,EAAOmvB,QAChBC,YAAapvB,EAAOovB,YACpBC,YAAa,YAAervB,EAAOpa,OACnC0pC,UAAWtvB,EAAOsvB,UAClBZ,kBAAmB1uB,EAAO0uB,kBAAoB1uB,EAAO0uB,uBAAoBrlD,EACzEkmD,wBAAyBvvB,EAAOuvB,wBAA0BvvB,EAAOuvB,6BAA0BlmD,GAK/FolD,EAA0BmB,EAAQ5vB,EAAO/uB,QAGzCkM,EAAO5G,KAAKq5C,MAETzyC,EAGJ,IAAM0zC,EAA8C,CACvD,CACIjrC,MAAO,WACP8oC,mBAAmB,EACnBa,yBAAyB,EAEzB5pC,WAAY,GACZhb,MAAO,GACP2kD,UAAWlD,EAAcmB,aACzBt8C,OAAQ,IAASg6B,SACjB+jB,UAAU,GAEd,CACIppC,MAAO,KACPD,WAAY,IAAkBqrC,SAC9B//C,OAAQ,IAASggD,QACjBrC,MAAM,EACNxwC,OAAQ,SACRiuC,SAAUA,EACV6E,WAAW,EACXC,aAAa,EACb7B,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,OACPD,WAAY,OACZ1U,OAAQ,IAASq9C,YACjB3jD,MAAO,GACPikD,MAAM,EACNvC,SAAUA,EACV6E,WAAW,EACXC,aAAa,EACbhB,sBAAuB,IACvBb,UAAWlD,EAAcgF,YAE7B,CACIxrC,MAAO,gBACPD,WAAY,IAAkB0rC,KAC9BpgD,OAAQ,IAASs/C,MACjBY,aAAa,EACb9E,SAAUA,EACV0C,gBAAgB,EAChBpkD,MAAO,IACPikD,MAAM,EACNC,OAAQ,OACRS,UAAWlD,EAAckF,WAE7B,CACI1rC,MAAO,aACPD,WAAY,IAAkB4rC,WAC9BtgD,OAAQ,IAASi+C,OACjBiC,aAAa,EACb9E,SAAUA,EACV0C,gBAAgB,EAChBF,OAAQ,OACRS,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,iBACPD,WAAY,IAAkB6rC,eAC9BvgD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,aACPD,WAAY,IAAkB8rC,KAC9BxgD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,QACPD,WAAY,IAAkB+rC,MAC9BzgD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,SACPD,WAAY,IAAkBgsC,OAC9B1gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,QACPD,WAAY,IAAkBisC,MAC9Bv8C,SAAU,IACV87C,aAAa,EACblgD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,YACPD,WAAY,IAAkBksC,UAC9B5gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,gBACPD,WAAY,IAAkBmsC,YAC9B7gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNU,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,gBACPD,WAAY,IAAkBosC,cAC9B9gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNU,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,SACPD,WAAY,IAAkBqsC,OAC9B/gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV8E,aAAa,EACbpC,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,4BACPD,WAAY,IAAkBssC,eAC9BhhD,OAAQ,IAAS8U,KACjBsmC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,kBACPD,WAAY,IAAkBusC,gBAC9BjhD,OAAQ,IAAS8U,KACjBsmC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,aACPD,WAAY,IAAkBwsC,WAC9BlhD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,iBACPD,WAAY,IAAkBysC,eAC9BnhD,OAAQ,IAASw/C,QACjBpE,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACR+xC,sBAAuB,IACvBb,UAAWlD,EAAckB,aAE7B,CACI1nC,MAAO,qBACPD,WAAY,IAAkB0sC,eAC9BphD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,aACPD,WAAY,IAAkB2sC,WAC9Bh4C,KAAM,OACNrJ,OAAQ,IAASu9C,SACjBnC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,WACRkxC,UAAWlD,EAAcW,cAE7B,CACInnC,MAAO,kBACPD,WAAY,IAAkB4sC,gBAC9BthD,OAAQ,IAAS8U,KACjBsmC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,iBACPD,WAAY,IAAkB2I,eAC9Brd,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,WACPD,WAAY,IAAkB6sC,cAC9BvhD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChB,OAAU,SACVI,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,SACPD,WAAY,IAAkB8sC,aAC9BxhD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChB,OAAU,SACVI,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,UACPD,WAAY,IAAkB+sC,QAC9BzhD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChB,OAAU,SACVI,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,QACPD,WAAY,IAAkBgtC,MAC9B1hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,UACPD,WAAY,IAAkBitC,QAC9B3hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,SACPD,WAAY,IAAkBktC,YAC9B5hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,gBACPD,WAAY,IAAkBmtC,SAC9B7hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,QACPD,WAAY,IAAkBotC,MAC9B9hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,WACPD,WAAY,IAAkBqtC,aAC9B/hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,kBACPD,WAAY,IAAkBstC,gBAC9BhiD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,aACPD,WAAY,IAAkButC,KAC9BjiD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAE7B,CACIvnC,MAAO,aACPD,WAAY,IAAkBwtC,WAC9BliD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAE7B,CACIvnC,MAAO,aACPD,WAAY,IAAkBytC,UAC9BniD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAG7B,CACIvnC,MAAO,yBACPD,WAAY,IAAkB0tC,uBAC9BpiD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAE7B,CACIvnC,MAAO,sBACPD,WAAY,IAAkB2tC,OAC9BriD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,aAKpBuE,EAAiD,CAC1D,CACInrC,MAAO,WACP8oC,mBAAmB,EACnBa,yBAAyB,EAEzB5pC,WAAY,GACZhb,MAAO,GACP2kD,UAAWlD,EAAcmB,aACzBt8C,OAAQ,IAASg6B,SACjB+jB,UAAU,GAEd,CACIppC,MAAO,KACPD,WAAY,IAAkBqrC,SAC9B//C,OAAQ,IAASqV,OACjBsoC,MAAM,EACNxwC,OAAQ,SACRiuC,SAAUA,EACV6E,WAAW,EACXC,aAAa,EACb7B,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,OACPD,WAAY,OACZ1U,OAAQ,IAASq9C,YACjBM,MAAM,EACNvC,SAAUA,EACV6E,WAAW,EACXC,aAAa,EACbhB,sBAAuB,IACvBb,UAAWlD,EAAcgF,YAE7B,CACIxrC,MAAO,SACPD,WAAY,IAAkB4tC,OAC9BtiD,OAAQ,IAASi+C,OACjBN,MAAM,EACNvC,SAAUA,EACV6E,WAAW,EACXC,aAAa,EACb7B,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,gBACPD,WAAY,IAAkB0rC,KAC9BpgD,OAAQ,IAASs/C,MACjBY,aAAa,EACb9E,SAAUA,EACV0C,gBAAgB,EAChBpkD,MAAO,IACPikD,MAAM,EACNC,OAAQ,OACRS,UAAWlD,EAAckF,WAE7B,CACI1rC,MAAO,aACPD,WAAY,IAAkB4rC,WAC9BtgD,OAAQ,IAASi+C,OACjBiC,aAAa,EACb9E,SAAUA,EACV0C,gBAAgB,EAChBF,OAAQ,OACRS,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,SACPD,WAAY,IAAkBqsC,OAC9B/gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV8E,aAAa,EACbpC,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,QACPD,WAAY,IAAkBisC,MAC9Bv8C,SAAU,IACV87C,aAAa,EACblgD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,YACPD,WAAY,IAAkB6tC,UAC9Bn+C,SAAU,IACV87C,aAAa,EACblgD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,YACPD,WAAY,IAAkB8tC,UAC9B7E,MAAM,EACN39C,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,QACPD,WAAY,IAAkBgtC,MAC9B1hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,aACPD,WAAY,IAAkB+tC,WAC9B9E,MAAM,EACN39C,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,WACPD,WAAY,IAAkBguC,SAC9B1iD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,SACPD,WAAY,IAAkBiuC,OAC9BhF,MAAM,EACN39C,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,OACPD,WAAY,IAAkB8rC,KAC9BxgD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,qBACPD,WAAY,IAAkBkuC,mBAC9BjF,MAAM,EACN39C,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,YACPD,WAAY,IAAkBmuC,UAC9B7iD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,YACPD,WAAY,IAAkBouC,UAC9BnF,MAAM,EACN39C,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,UACPD,WAAY,IAAkBquC,QAC9B/iD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,QACPD,WAAY,IAAkB+rC,MAC9BzgD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,OACPD,WAAY,IAAkButC,KAC9BjiD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAE7B,CACIvnC,MAAO,SACPD,WAAY,IAAkBktC,YAC9B5hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,WACPD,WAAY,IAAkBmtC,SAC9B7hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,gBACPD,WAAY,IAAkBsuC,cAC9BhjD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,SACPD,WAAY,IAAkBgsC,OAC9B1gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,kBACPD,WAAY,IAAkBstC,gBAC9BhiD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,YACPD,WAAY,IAAkBksC,UAC9B5gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,QACPD,WAAY,IAAkBotC,MAC9B9hD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,SACPD,WAAY,IAAkB8sC,aAC9BxhD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChB,OAAU,SACVI,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,WACPD,WAAY,IAAkB6sC,cAC9BvhD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChB,OAAU,SACVI,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,UACPD,WAAY,IAAkB+sC,QAC9BzhD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChB,OAAU,SACVI,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,iBACPD,WAAY,IAAkB2I,eAC9Brd,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,iBACPD,WAAY,IAAkBuuC,eAC9BjjD,OAAQ,IAAS8U,KACjBsmC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,kBACPD,WAAY,IAAkBusC,gBAC9BjhD,OAAQ,IAAS8U,KACjBsmC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,aACPD,WAAY,IAAkBwsC,WAC9BlhD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,iBACPD,WAAY,IAAkBysC,eAC9BnhD,OAAQ,IAASw/C,QACjBpE,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACR+xC,sBAAuB,IACvBb,UAAWlD,EAAckB,aAE7B,CACI1nC,MAAO,qBACPD,WAAY,IAAkB0sC,eAC9BphD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,eACPD,WAAY,IAAkBwuC,aAC9BljD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,gBACPD,WAAY,IAAkBmsC,YAC9B7gD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNU,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,aACPD,WAAY,IAAkBwtC,WAC9BliD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAE7B,CACIvnC,MAAO,gBACPD,WAAY,IAAkByuC,cAC9BnjD,OAAQ,IAASu9C,SACjBnC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,WACRkxC,UAAWlD,EAAcW,cAE7B,CACInnC,MAAO,aACPD,WAAY,IAAkB2sC,WAC9Bh4C,KAAM,OACNrJ,OAAQ,IAASu9C,SACjBnC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,WACRkxC,UAAWlD,EAAcW,cAE7B,CACInnC,MAAO,cACPD,WAAY,IAAkB4sC,gBAC9BthD,OAAQ,IAAS8U,KACjBsmC,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,QACPD,WAAY,IAAkB0uC,MAC9BpjD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAE7B,CACIvnC,MAAO,eACPD,WAAY,IAAkB2uC,aAC9B1F,MAAM,EACN39C,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,gBACPD,WAAY,IAAkB4uC,cAC9B3F,MAAM,EACNjkD,MAAO,IACPsG,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,cACPD,WAAY,IAAkB6uC,iBAC9BvjD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,mBACPD,WAAY,IAAkB8uC,iBAC9BxjD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,mBACPD,WAAY,IAAkB+uC,iBAC9BzjD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,WACPD,WAAY,IAAkBgvC,SAC9B1jD,OAAQ,IAASqV,OACjB3b,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNU,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,SACPD,WAAY,IAAkBivC,OAC9B3jD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,cACPD,WAAY,IAAkBkvC,YAC9B5jD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,cACPD,WAAY,IAAkBmvC,YAC9B7jD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,cACPD,WAAY,IAAkBovC,YAC9B9jD,OAAQ,IAASqV,OACjB3b,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNU,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,YACPD,WAAY,IAAkBqvC,UAC9B/jD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,iBACPD,WAAY,IAAkBsvC,eAC9BhkD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,iBACPD,WAAY,IAAkBuvC,eAC9BjkD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,QACPD,WAAY,IAAkBwvC,MAC9BlkD,OAAQ,IAASo/C,wBACjB1lD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB,OAAU,SACVI,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAca,6BAE7B,CACIrnC,MAAO,UACPD,WAAY,IAAkByvC,QAC9BnkD,OAAQ,IAASo/C,wBACjB1lD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB,OAAU,SACVI,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAca,6BAE7B,CACIrnC,MAAO,aACPD,WAAY,IAAkB0vC,WAC9BpkD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACP,OAAU,SACVwkD,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,eACPD,WAAY,IAAkB2vC,aAC9BrkD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACP,OAAU,SACVwkD,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,wBACPD,WAAY,IAAkB4vC,2BAC9BtkD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACN,OAAU,SACVO,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,qBACPD,WAAY,IAAkB6vC,wBAC9BvkD,OAAQ,IAASu/C,WACjBnE,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPwkD,QAAS,qBACTC,aAAa,EACbC,YAAa,qBACbC,UAAWlD,EAAcc,gBAE7B,CACItnC,MAAO,WACPD,WAAY,IAAkB8vC,mBAC9BxkD,OAAQ,IAASu/C,WACjBnE,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPwkD,QAAS,WACTC,aAAa,EACbC,YAAa,WACbC,UAAWlD,EAAcc,gBAE7B,CACItnC,MAAO,eACPD,WAAY,IAAkB+vC,aAC9BzkD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,eACPD,WAAY,IAAkBgwC,aAC9B1kD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,iBACPD,WAAY,IAAkBiwC,eAC9B3kD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,iBACPD,WAAY,IAAkBkwC,eAC9B5kD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,kBACPD,WAAY,IAAkBmwC,gBAC9B7kD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,uBACPD,WAAY,IAAkBowC,qBAC9B9kD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,oBACPD,WAAY,IAAkBqwC,kBAC9B/kD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,kBACPD,WAAY,IAAkBswC,gBAC9BhlD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,oBACPD,WAAY,IAAkBuwC,kBAC9BjlD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,cACPD,WAAY,IAAkBwwC,YAC9BllD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,QACPD,WAAY,IAAkBywC,MAC9BnlD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,mBACPD,WAAY,IAAkB0wC,iBAC9BplD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,4BACPD,WAAY,IAAkB2wC,0BAC9BrlD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,wBACPD,WAAY,IAAkB4wC,sBAC9BtlD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAE7B,CACIvnC,MAAO,WACPD,WAAY,IAAkB6wC,SAC9BvlD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,sBACPD,WAAY,IAAkB8wC,kBAC9BxlD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNU,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,kBACPD,WAAY,IAAkB+wC,gBAC9BzlD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,aACPD,WAAY,IAAkBgxC,WAC9B1lD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,aACPD,WAAY,IAAkBixC,WAC9B3lD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,wBACPD,WAAY,IAAkBkxC,sBAC9B5lD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,yBACPD,WAAY,IAAkBmxC,uBAC9B7lD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,cACPD,WAAY,IAAkBoxC,YAC9B9lD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,UACPD,WAAY,IAAkBqxC,QAC9B/lD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV1hD,MAAO,IACPokD,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,eACPD,WAAY,IAAkBsxC,aAC9BhmD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV1hD,MAAO,IACPokD,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,yBACPD,WAAY,IAAkB0tC,uBAC9BpiD,OAAQ,IAASq/C,QACjBjE,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAce,aAE7B,CACIvnC,MAAO,aACPD,WAAY,IAAkBuxC,WAC9BjmD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV1hD,MAAO,IACPokD,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,2BACPD,WAAY,IAAkBwxC,yBAC9BlmD,OAAQ,IAAS8U,KACjBsmC,SAAUA,EACV1hD,MAAO,IACPokD,gBAAgB,EAChBO,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,2BACPD,WAAY,IAAkByxC,yBAC9BnmD,OAAQ,IAASi+C,OACjB7C,SAAUA,EACV1hD,MAAO,IACPokD,gBAAgB,EAChBO,UAAWlD,EAAcI,YAE7B,CACI5mC,MAAO,iBACPD,WAAY,IAAkB0xC,eAC9BpmD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,8BACPD,WAAY,IAAkB2xC,4BAC9BrmD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,oCACPD,WAAY,IAAkB4xC,kCAC9BtmD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,kCACPD,WAAY,IAAkB6xC,gCAC9BvmD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,iCACPD,WAAY,IAAkB8xC,+BAC9BxmD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,uCACPD,WAAY,IAAkB+xC,qCAC9BzmD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,qCACPD,WAAY,IAAkBgyC,mCAC9B1mD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,yBACPD,WAAY,IAAkBiyC,uBAC9B3mD,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,+BACPD,WAAY,IAAkBkyC,6BAC9B5mD,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,6BACPD,WAAY,IAAkBmyC,2BAC9B7mD,OAAQ,IAASqV,OACjB+lC,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcgB,YAE7B,CACIxnC,MAAO,qBACPD,WAAY,IAAkBoyC,mBAC9B9mD,OAAQ,IAASm/C,SACjB/D,SAAUA,EACV0C,gBAAgB,EAChBH,MAAM,EACNjkD,MAAO,IACPyT,OAAQ,SACR+wC,QAAS,MACTC,aAAa,EACbE,UAAWlD,EAAcY,cAE7B,CACIpnC,MAAO,eACPD,WAAY,IAAkBqyC,aAC9B/mD,OAAQ,IAAS8U,KACjBpb,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChB3wC,OAAQ,OACRkxC,UAAWlD,EAAcS,UAE7B,CACIjnC,MAAO,sBACPD,WAAY,IAAkB2tC,OAC9BriD,OAAQ,IAASi+C,OACjBvkD,MAAO,IACP0hD,SAAUA,EACV0C,gBAAgB,EAChBO,UAAWlD,EAAcI,aAKpByL,EAA6B,CAEtC,mBAAsB,SAACzxD,GACnB,OAAO0xD,EAAsB1xD,IAGjC,SAAY,SAACA,GACT,OAAO0xD,EAAsB1xD,KAKxB0xD,EAAwB,SAAC1xD,GAClC,IAAI2xD,EAAkB,EACtB,GAAI3xD,GAAUA,EAAO8U,OAAS,EAAG,CAC7B,IAAI,EAAW,EACX,EAAW,EAWf,OATA9U,EAAO2P,SAAQ,SAACtQ,GACZ,GAAYA,EAAMuyD,SAClB,GAAYvyD,EAAMwyD,YAGlB,EAAW,IACXF,EAAmB,EAAW,EAAY,KAGvCG,EAAkB,EAAU,GAEvC,OAAOH,GAGEG,EAAoB,SAACF,EAAkBC,GAChD,MAAO,CACHD,SAAUA,EACVC,SAAUA,EACVzhD,SAAU,WACN,OAAQwhD,GAAYC,EAAYD,EAAWC,EAAY,IAAM,GAAGzhD,cAK/DtF,EAAqB,SAAC9K,GAC/B,OAAKA,EAAO25B,KAAKkqB,OAAS7jD,EAAOtB,KACtBozD,EAAmB9xD,EAAOtB,KAAKkM,WAAa5K,EAAOtB,KAAKkM,WAAa,EAClD5K,EAAOtB,KAAKsoB,eAAiBhnB,EAAOtB,KAAKsoB,eAAiB,QAEpF,GAIK+qC,EAAW,SAAC/xD,GACrB,IAAKA,EAAO25B,KAAKkqB,OAAS7jD,EAAOtB,KAAM,CACnC,IAAI+G,GAAQzF,EAAOtB,KAAKkM,WAAa5K,EAAOtB,KAAKkM,WAAa,IAAO5K,EAAOtB,KAAKszD,SAAWhyD,EAAOtB,KAAKszD,SAAW,GAEnH,OAAOF,EAAkBrsD,EAAOzF,EAAOtB,KAAKsoB,eAAiBhnB,EAAOtB,KAAKsoB,eAAiB","file":"static/js/main~e2550e02.86ba8bca.chunk.js","sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\n\r\n// const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// root: {\r\n// minWidth: '150px',\r\n// },\r\n// })\r\n// );\r\n\r\ninterface TimezoneSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n // tslint:disable-next-line: no-any\r\n defaultValue?: IAutoCompleteItem | any; // value only available in single select\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface TimezoneSelectorState {\r\n isLoading: boolean;\r\n data: IAutoCompleteItem[];\r\n}\r\n\r\nexport const TimezoneSelector: React.FC = props => {\r\n\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n data: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n retrieveTimezoneOptionData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: TimezoneOptionData) => {\r\n setState({\r\n ...state,\r\n data: data.options.timezoneOption.map((source: TimezoneOption) => ({ \r\n ...source, \r\n value: source.timezoneValue, \r\n label: source.displayName, \r\n secondaryValue: source.baseUtcOffset \r\n })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n defaultValue={props.defaultValue} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n defaultValue={props.defaultValue} \r\n onBlur={props.onBlur}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nexport function retrieveTimezoneOptionData(\r\n refreshData: boolean,\r\n onSuccess: (data: TimezoneOptionData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TimezoneSelectorQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface TimezoneOptionData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n options: Options;\r\n}\r\n\r\nexport interface Options {\r\n timezoneOption: TimezoneOption[];\r\n}\r\n\r\nexport interface TimezoneOption {\r\n id: number;\r\n timezoneValue: string;\r\n displayName: string;\r\n baseUtcOffset: number;\r\n}\r\n\r\nconst TimezoneSelectorQuery = gql`\r\n query TimezoneOptions {\r\n options{\r\n timezoneOption{\r\n id,\r\n timezoneValue,\r\n displayName\r\n baseUtcOffset\r\n }\r\n }\r\n }\r\n`;","import React, { createContext, useState, useContext, useCallback, ReactNode } from 'react';\r\n\r\n// Define the shape of the context\r\ninterface MatterSummaryContextProps {\r\n refreshPage: () => void;\r\n pageKey: number;\r\n isMatterForcastFormOpen: boolean;\r\n matterId: number | null;\r\n matterGuid: string | null;\r\n onMaterForcastFormOpen: (matterId: number, matterGuid: string) => void;\r\n onMatterForcastFormClose: () => void;\r\n}\r\n\r\n// Step 1: Create the context\r\nexport const MatterSummaryContext = createContext(undefined);\r\n\r\n// Define the props for the provider\r\ninterface MatterSummaryContextProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\n// Step 2: Create the provider component\r\nexport const MatterSummaryContextProvider: React.FC = ({ children }) => {\r\n\r\n const [pageKey, setPageKey] = useState(0);\r\n\r\n const [isMatterForcastFormOpen, setIsMatterForcastFormOpen] = useState(false);\r\n\r\n const [matterId, setMatterId] = useState(null);\r\n\r\n const [matterGuid, setMatterGuid] = useState(null);\r\n\r\n const onMatterForcastFormClose = useCallback(() => {\r\n setIsMatterForcastFormOpen(false);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const onMaterForcastFormOpen = useCallback((matterId: number, matterGuid: string) => {\r\n setMatterId(matterId);\r\n setMatterGuid(matterGuid);\r\n setIsMatterForcastFormOpen(true);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const refreshPage = useCallback(() => {\r\n setPageKey(prevKey => prevKey + 1);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\n// Step 3: Create the custom hook\r\nexport const useMatterSummaryContext = () => {\r\n const context = useContext(MatterSummaryContext);\r\n\r\n if (!context) {\r\n throw new Error('useMatterSummaryContext must be used within a MatterSummaryContextProvider');\r\n }\r\n\r\n return {\r\n matterId: context.matterId,\r\n matterGuid: context.matterGuid,\r\n pageKey: context.pageKey,\r\n refreshPage: context.refreshPage,\r\n isMatterForcastFormOpen: context.isMatterForcastFormOpen,\r\n onMaterForcastFormOpen: context.onMaterForcastFormOpen,\r\n onMatterForcastFormClose: context.onMatterForcastFormClose\r\n };\r\n};","import React from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Grid,\r\n TextField,\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { mainTheme } from '../../Theme';\r\nimport { Form, Field, AnyObject, FieldInputProps, FormSpy } from 'react-final-form';\r\nimport { CurrencyDisplayStyle } from '../../components/DataDisplay/CurrencyDisplayStyle';\r\nimport { FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { FormApi } from 'final-form';\r\nimport { FormattedPercentage } from '../../components/DataDisplay/FormattedPercentage';\r\nimport { CurrencyInput } from '../../components/CurrencyInput';\r\nimport { client } from '../..';\r\nimport { BillMatterRequestMutation, UpdateBillMatterRequestMutation } from '../MatterSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { CurrencyDetails } from '../cellRenderer/MatterTaskAction';\r\nimport { MatterGroupField, MatterGroupFields } from '../fields/MatterGroupField';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../common/DialogTitleExtension';\r\nimport moment from 'moment';\r\nimport { TaskAssignedByUserTeamSelector } from '../../tasksSummary/selectors/TaskAssignedByUserTeamSelector';\r\nimport { AllocatedToEntityType } from '../../tasksSummary/AllocatedToEntityType';\r\nimport { TaskAssignedBySelector } from '../../tasksSummary/selectors/TaskAssignedBySelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n textField: {\r\n // width: '100%',\r\n },\r\n commendField: {\r\n width: '100%',\r\n },\r\n dialogTitle: {\r\n color: mainTheme.TemplateColor.Primary,\r\n },\r\n customGrid: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n generatedContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n },\r\n },\r\n gridCenter: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n }\r\n })\r\n);\r\n\r\nexport interface BillTheMatter extends MatterGroupFields {\r\n fees?: number;\r\n disbursements?: number;\r\n applyTrust?: number;\r\n writeOffFees?: number;\r\n writeOffdisbursements?: number;\r\n comments?: string;\r\n\r\n assignedTo: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n owner: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface BillTheMatterDialogProps {\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onDialogClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n unBilledFees?: number;\r\n unbilledDisbursements?: number;\r\n outstandingDebtors?: number;\r\n currentTrustBalance?: number;\r\n billedFees?: number;\r\n feeEstimate?: number;\r\n percentageEstimate?: number;\r\n\r\n pendingWriteOffFeesAmount: number;\r\n pendingWriteOffDisbAmount: number;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n feesAmount?: number | null;\r\n disbursementAmount?: number | null;\r\n applyTrustAmount?: number | null;\r\n writeOffFeesAmount?: number | null;\r\n writeOffDisbursementAmount?: number | null;\r\n comments?: string | null; \r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n\r\n assignedTo?: IAutoCompleteItem | null;\r\n owner?: IAutoCompleteItem | null;\r\n allocatedToEntityType?: number | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const BillTheMatterDialog: React.FC = ( props ) => { \r\n const classes = useStyles();\r\n\r\n const onBillAll = (values: BillTheMatter, form: FormApi) => {\r\n if (props.unBilledFees) {\r\n form.change('fees', props.unBilledFees); \r\n }\r\n \r\n if (props.unbilledDisbursements) {\r\n form.change('disbursements', props.unbilledDisbursements); \r\n }\r\n };\r\n\r\n const onClear = (values: BillTheMatter, form: FormApi) => {\r\n form.change('fees', undefined);\r\n form.change('disbursements', undefined);\r\n };\r\n\r\n const onSubmit = (values: BillTheMatter) => {\r\n if (props.formAction === 'create') {\r\n generateBillMatterRequest(values);\r\n } else {\r\n updateBillMatterRequest(values);\r\n }\r\n\r\n onBillTheMatterClosed();\r\n };\r\n\r\n const generateBillMatterRequest = (billMatterTask: BillTheMatter) => {\r\n client\r\n .mutate({\r\n mutation: BillMatterRequestMutation,\r\n variables: {\r\n matterGuid: props.matterGuid,\r\n billFeesAmount: billMatterTask.fees,\r\n billDisbursementsAmount: billMatterTask.disbursements,\r\n applyTrustAmount: billMatterTask.applyTrust,\r\n writeOffFeesAmount: billMatterTask.writeOffFees,\r\n writeOffDisbursementsAmount: billMatterTask.writeOffdisbursements,\r\n comments: billMatterTask.comments,\r\n taskInput: getTaskInput(billMatterTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification(\r\n 'Failed to Request Bill Matter',\r\n results.data.error,\r\n 'error'\r\n );\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Request Bill Matter', reason, 'error');\r\n });\r\n };\r\n\r\n const updateBillMatterRequest = (billMatterTask: BillTheMatter) => {\r\n client\r\n .mutate({\r\n mutation: UpdateBillMatterRequestMutation,\r\n variables: {\r\n taskRequestGuid: props.taskGuid,\r\n matterGuid: props.matterGuid,\r\n billFeesAmount: billMatterTask.fees,\r\n billDisbursementsAmount: billMatterTask.disbursements,\r\n applyTrustAmount: billMatterTask.applyTrust,\r\n writeOffFeesAmount: billMatterTask.writeOffFees,\r\n writeOffDisbursementsAmount: billMatterTask.writeOffdisbursements,\r\n comments: billMatterTask.comments,\r\n taskInput: getTaskInput(billMatterTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification(\r\n 'Failed to Update Bill Matter Request',\r\n results.data.error,\r\n 'error'\r\n );\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Update Bill Matter Request', reason, 'error');\r\n });\r\n };\r\n\r\n const getTaskInput = (task: BillTheMatter) => {\r\n let ownerGuid = task.owner \r\n ? task.owner.value \r\n : task.allocatedToEntityType === AllocatedToEntityType.user \r\n ? (task.assignedTo ? task.assignedTo.value : null)\r\n : (task.assignedBy ? task.assignedBy.value : null);\r\n\r\n return {\r\n description: '', \r\n priority: task.priority?.label ? task.priority?.label : null,\r\n category: task.taskCategory?.label ? task.taskCategory?.label : null,\r\n dueDate: task.dueDate ? task.dueDate : null,\r\n estimatedEffort: task.estimatedEffort ? task.estimatedEffort : null,\r\n startDate: task.startDate ? task.startDate : null,\r\n completionDate: task.completionDate ? task.completionDate : null,\r\n duration: task.duration ? task.duration : null,\r\n assignedBy: task.assignedBy?.value,\r\n completionNotes: task.completionDate ? task.completionNotes : null,\r\n assignedTo: task.assignedTo?.value ? task.assignedTo?.value : null,\r\n owner: ownerGuid,\r\n allocatedToEntityType: task.allocatedToEntityType,\r\n };\r\n };\r\n\r\n const onBillTheMatterClosed = () => {\r\n if (props.onDialogClose) {\r\n props.onDialogClose();\r\n }\r\n };\r\n\r\n const getInitialValue = () => {\r\n if (props.formAction === 'create') {\r\n return {\r\n fees: undefined,\r\n disbursements: undefined,\r\n applyTrust: undefined,\r\n writeOffFees: props.pendingWriteOffFeesAmount ? props.pendingWriteOffFeesAmount : undefined,\r\n writeOffdisbursements: props.pendingWriteOffDisbAmount ? props.pendingWriteOffDisbAmount : undefined,\r\n comments: '',\r\n priority: props.defaultPriority,\r\n assignedBy: props.loggedInUser,\r\n\r\n assignedTo: null,\r\n owner: null,\r\n allocatedToEntityType: null,\r\n \r\n };\r\n } else {\r\n return {\r\n fees: props.feesAmount,\r\n disbursements: props.disbursementAmount,\r\n applyTrust: props.applyTrustAmount,\r\n writeOffFees: props.writeOffFeesAmount \r\n ? props.writeOffFeesAmount \r\n : (props.pendingWriteOffFeesAmount ? props.pendingWriteOffFeesAmount : undefined),\r\n writeOffdisbursements: props.writeOffDisbursementAmount \r\n ? props.writeOffDisbursementAmount\r\n : (props.pendingWriteOffDisbAmount ? props.pendingWriteOffDisbAmount : undefined),\r\n comments: props.comments,\r\n \r\n priority: props.priority ? props.priority : props.defaultPriority,\r\n taskCategory: props.taskCategory,\r\n dueDate: props.dueDate ? moment(props.dueDate).toDate() : null,\r\n estimatedEffort: props.estimatedEffort,\r\n startDate: props.startDate ? moment(props.startDate).toDate() : null,\r\n completionDate: props.completionDate ? moment(props.completionDate).toDate() : null,\r\n completionNotes: props.completionNotes,\r\n duration: props.duration,\r\n assignedBy: props.assignedBy ? props.assignedBy : props.loggedInUser,\r\n\r\n assignedTo: props.assignedTo,\r\n owner: props.owner,\r\n allocatedToEntityType: props.allocatedToEntityType,\r\n };\r\n } \r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, \r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any, name: string, isUser: boolean) => {\r\n if (name === 'assignedTo') {\r\n let assignedTo = selection && selection.value && selection.label \r\n ? { value : selection.value, label: selection.label }\r\n : null;\r\n form.batch(() => {\r\n form.change('assignedTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser \r\n ? AllocatedToEntityType.user \r\n : AllocatedToEntityType.team\r\n ); \r\n });\r\n }\r\n };\r\n\r\n return ( \r\n \r\n (\r\n
handleSubmit(event)} id=\"billTheMatterDialog\">\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0) : true}\r\n /> \r\n \r\n {UserFeature.HasAccess(UserFeatureEnum.hasWriteOffWIP)\r\n ?\r\n \r\n \r\n 0 || props.unBilledFees === 0}\r\n />\r\n \r\n \r\n : null\r\n } \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Unbilled Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Unbilled Disbursements:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Outstanding Debtors:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Current Trust Balance:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n Billed Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Fee Estimate:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n % Estimate:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n 0 || props.unbilledDisbursements === 0}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n // required={true}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Owner to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* {printJson(values)} */}\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: any) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }","import React from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Grid,\r\n TextField,\r\n FormControlLabel,\r\n Checkbox,\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { mainTheme } from '../../Theme';\r\nimport { Form, Field, FormSpy, AnyObject, FieldInputProps } from 'react-final-form';\r\nimport { CurrencyDisplayStyle } from '../../components/DataDisplay/CurrencyDisplayStyle';\r\nimport { FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { CurrencyInput } from '../../components/CurrencyInput';\r\nimport { CurrencyDetails } from '../cellRenderer/MatterTaskAction';\r\nimport { UpdateWriteOffMatterWIPRequestMutation, WriteOffMatterWIPRequestMutation } from '../MatterSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\nimport { MatterGroupField, MatterGroupFields } from '../fields/MatterGroupField';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../common/DialogTitleExtension';\r\nimport moment from 'moment';\r\nimport { AllocatedToEntityType } from '../../tasksSummary/AllocatedToEntityType';\r\nimport { FormApi } from 'final-form';\r\nimport { TaskAssignedByUserTeamSelector } from '../../tasksSummary/selectors/TaskAssignedByUserTeamSelector';\r\nimport { TaskAssignedBySelector } from '../../tasksSummary/selectors/TaskAssignedBySelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n textField: {\r\n // width: '100%',\r\n },\r\n commendField: {\r\n width: '100%',\r\n },\r\n dialogTitle: {\r\n color: mainTheme.TemplateColor.Primary,\r\n },\r\n customGrid: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n generatedContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n },\r\n },\r\n gridCenter: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n })\r\n);\r\n\r\nexport interface WriteOffWip extends MatterGroupFields {\r\n fees?: number;\r\n disbursements?: number;\r\n isCloseMatterAfterWriteOff?: boolean;\r\n comments?: string;\r\n\r\n assignedTo: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n owner: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface WriteOffWipDialogProps {\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onDialogClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n unBilledFees?: number;\r\n unbilledDisbursements?: number;\r\n outstandingDebtors?: number;\r\n billedFees?: number;\r\n\r\n canClose: boolean;\r\n pendingWriteOffFeesAmount: number;\r\n pendingWriteOffDisbAmount: number;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n writeOffFeesAmount?: number | null;\r\n writeOffDisbursementAmount?: number | null;\r\n closeMatterAfterWriteOff?: boolean | null;\r\n comments?: string | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n\r\n assignedTo?: IAutoCompleteItem | null;\r\n owner?: IAutoCompleteItem | null;\r\n allocatedToEntityType?: number | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const WriteOffWipDialog: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const onSubmit = (values: WriteOffWip) => {\r\n if (props.formAction === 'create') {\r\n writeOffWipTaskRequest(values);\r\n } else {\r\n updateWriteOffWipTaskRequest(values);\r\n }\r\n\r\n onWriteOffWipClosed();\r\n };\r\n\r\n const writeOffWipTaskRequest = (writeOffWipTask: WriteOffWip) => {\r\n client\r\n .mutate({\r\n mutation: WriteOffMatterWIPRequestMutation,\r\n variables: {\r\n matterGuid: props.matterGuid,\r\n writeOffFeesAmount: writeOffWipTask.fees,\r\n writeOffDisbursementsAmount: writeOffWipTask.disbursements,\r\n closeMatterAfterWriteOff: writeOffWipTask.isCloseMatterAfterWriteOff,\r\n comments: writeOffWipTask.comments,\r\n taskInput: getTaskInput(writeOffWipTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification('Failed to Request Write Off Matter', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Request Write Off Matter', reason, 'error');\r\n });\r\n };\r\n\r\n const updateWriteOffWipTaskRequest = (writeOffWipTask: WriteOffWip) => {\r\n client\r\n .mutate({\r\n mutation: UpdateWriteOffMatterWIPRequestMutation,\r\n variables: {\r\n taskRequestGuid: props.taskGuid,\r\n matterGuid: props.matterGuid,\r\n writeOffFeesAmount: writeOffWipTask.fees,\r\n writeOffDisbursementsAmount: writeOffWipTask.disbursements,\r\n closeMatterAfterWriteOff: writeOffWipTask.isCloseMatterAfterWriteOff,\r\n comments: writeOffWipTask.comments,\r\n taskInput: getTaskInput(writeOffWipTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification('Failed to Update Write Off Matter Request', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Update Write Off Matter Request', reason, 'error');\r\n });\r\n };\r\n\r\n const getTaskInput = (task: WriteOffWip) => {\r\n let ownerGuid = task.owner \r\n ? task.owner.value \r\n : task.allocatedToEntityType === AllocatedToEntityType.user \r\n ? (task.assignedTo ? task.assignedTo.value : null)\r\n : (task.assignedBy ? task.assignedBy.value : null);\r\n\r\n return {\r\n description: '',\r\n priority: task.priority?.label ? task.priority?.label : null,\r\n category: task.taskCategory?.label ? task.taskCategory?.label : null,\r\n dueDate: task.dueDate ? task.dueDate : null,\r\n estimatedEffort: task.estimatedEffort ? task.estimatedEffort : null,\r\n startDate: task.startDate ? task.startDate : null,\r\n completionDate: task.completionDate ? task.completionDate : null,\r\n duration: task.duration ? task.duration : null,\r\n assignedBy: task.assignedBy?.value,\r\n completionNotes: task.completionDate ? task.completionNotes : null,\r\n assignedTo: task.assignedTo?.value ? task.assignedTo?.value : null,\r\n owner: ownerGuid,\r\n allocatedToEntityType: task.allocatedToEntityType,\r\n };\r\n };\r\n\r\n const onWriteOffWipClosed = () => {\r\n if (props.onDialogClose) {\r\n props.onDialogClose();\r\n }\r\n };\r\n\r\n const getInitialValue = () => {\r\n if (props.formAction === 'create') {\r\n return {\r\n fees: props.pendingWriteOffFeesAmount ? props.pendingWriteOffFeesAmount : undefined,\r\n disbursements: props.pendingWriteOffDisbAmount ? props.pendingWriteOffDisbAmount : undefined,\r\n isCloseMatterAfterWriteOff: false,\r\n comments: '',\r\n priority: props.defaultPriority,\r\n assignedBy: props.loggedInUser,\r\n\r\n assignedTo: null,\r\n owner: null,\r\n allocatedToEntityType: null,\r\n };\r\n } else {\r\n return {\r\n fees: props.writeOffFeesAmount \r\n ? props.writeOffFeesAmount\r\n : props.pendingWriteOffFeesAmount ? props.pendingWriteOffFeesAmount : undefined,\r\n disbursements: props.writeOffDisbursementAmount \r\n ? props.writeOffDisbursementAmount\r\n : props.pendingWriteOffDisbAmount ? props.pendingWriteOffDisbAmount : undefined,\r\n isCloseMatterAfterWriteOff: props.closeMatterAfterWriteOff,\r\n comments: props.comments,\r\n priority: props.priority ? props.priority : props.defaultPriority,\r\n taskCategory: props.taskCategory,\r\n dueDate: props.dueDate ? moment(props.dueDate).toDate() : null,\r\n estimatedEffort: props.estimatedEffort,\r\n startDate: props.startDate ? moment(props.startDate).toDate() : null,\r\n completionDate: props.completionDate ? moment(props.completionDate).toDate() : null,\r\n completionNotes: props.completionNotes,\r\n duration: props.duration,\r\n assignedBy: props.assignedBy ? props.assignedBy : props.loggedInUser,\r\n\r\n assignedTo: props.assignedTo,\r\n owner: props.owner,\r\n allocatedToEntityType: props.allocatedToEntityType,\r\n };\r\n } \r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, \r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any, name: string, isUser: boolean) => {\r\n if (name === 'assignedTo') {\r\n let assignedTo = selection && selection.value && selection.label \r\n ? { value : selection.value, label: selection.label }\r\n : null;\r\n form.batch(() => {\r\n form.change('assignedTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser \r\n ? AllocatedToEntityType.user \r\n : AllocatedToEntityType.team\r\n ); \r\n });\r\n }\r\n };\r\n\r\n return (\r\n \r\n (\r\n
handleSubmit(event)} id=\"writeOffWipDialog\">\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n 0 || props.unBilledFees === 0} \r\n /> \r\n \r\n \r\n 0 || props.unbilledDisbursements === 0} \r\n /> \r\n \r\n {UserFeature.HasAccess(UserFeatureEnum.hasCloseMatter)\r\n ?\r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n input.onChange(event.target.checked)}\r\n checked={input.value}\r\n disabled={!props.canClose}\r\n />\r\n }\r\n label=\"Close Matter After Write Off\"\r\n />\r\n )}\r\n \r\n )}\r\n \r\n \r\n : null\r\n }\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n // required={true}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Owner to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Unbilled Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Unbilled Disbursements:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Outstanding Debtors:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Billed Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n\r\n
\r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: any) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }","import React from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Grid,\r\n TextField,\r\n FormControlLabel,\r\n Checkbox,\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { mainTheme } from '../../Theme';\r\nimport { Form, Field, FormSpy, AnyObject, FieldInputProps } from 'react-final-form';\r\nimport { CurrencyDisplayStyle } from '../../components/DataDisplay/CurrencyDisplayStyle';\r\nimport { FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { CurrencyInput } from '../../components/CurrencyInput';\r\nimport { CurrencyDetails } from '../cellRenderer/MatterTaskAction';\r\nimport { client } from '../..';\r\nimport { UpdateWriteOffMatterDebtorsRequestMutation, WriteOffMatterDebtorsRequestMutation } from '../MatterSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { MatterGroupField, MatterGroupFields } from '../fields/MatterGroupField';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../common/DialogTitleExtension';\r\nimport moment from 'moment';\r\nimport { AllocatedToEntityType } from '../../tasksSummary/AllocatedToEntityType';\r\nimport { FormApi } from 'final-form';\r\nimport { TaskAssignedBySelector } from '../../tasksSummary/selectors/TaskAssignedBySelector';\r\nimport { TaskAssignedByUserTeamSelector } from '../../tasksSummary/selectors/TaskAssignedByUserTeamSelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n textField: {\r\n // width: '100%',\r\n },\r\n commendField: {\r\n width: '100%',\r\n },\r\n dialogTitle: {\r\n color: mainTheme.TemplateColor.Primary,\r\n },\r\n customGrid: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n generatedContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n },\r\n },\r\n gridCenter: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n })\r\n);\r\n\r\nexport interface WriteOffDebtor extends MatterGroupFields {\r\n debtors?: number;\r\n isCloseMatterAfterWriteOff?: boolean;\r\n comments?: string;\r\n\r\n assignedTo: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n owner: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface WriteOffDebtorsDialogProps {\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onDialogClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n unBilledFees?: number;\r\n unbilledDisbursements?: number;\r\n outstandingDebtors?: number;\r\n billedFees?: number;\r\n\r\n canClose: boolean;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n debtorsAmount?: number | null;\r\n closeMatterAfterWriteOff?: boolean | null;\r\n comments?: string | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n\r\n assignedTo?: IAutoCompleteItem | null;\r\n owner?: IAutoCompleteItem | null;\r\n allocatedToEntityType?: number | null;\r\n}\r\n// tslint:disable-next-line: no-anyW\r\nexport const WriteOffDebtorsDialog: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const onSubmit = (values: WriteOffDebtor) => {\r\n if (props.formAction === 'create') {\r\n writeOffDebtorsRequest(values);\r\n } else {\r\n updateWriteOffDebtorsRequest(values);\r\n }\r\n\r\n onWriteOffDebtorsClosed();\r\n };\r\n\r\n const writeOffDebtorsRequest = (writeOffDebtorsTask: WriteOffDebtor) => {\r\n client\r\n .mutate({\r\n mutation: WriteOffMatterDebtorsRequestMutation,\r\n variables: {\r\n matterGuid: props.matterGuid,\r\n writeOffDebtorsAmount: writeOffDebtorsTask.debtors,\r\n closeMatterAfterWriteOff: writeOffDebtorsTask.isCloseMatterAfterWriteOff,\r\n comments: writeOffDebtorsTask.comments,\r\n taskInput: getTaskInput(writeOffDebtorsTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification('Failed to Request Debtor Write Off Matter', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Request Debtor Write Off Matter', reason, 'error');\r\n });\r\n };\r\n\r\n const updateWriteOffDebtorsRequest = (writeOffDebtorsTask: WriteOffDebtor) => {\r\n client\r\n .mutate({\r\n mutation: UpdateWriteOffMatterDebtorsRequestMutation,\r\n variables: {\r\n taskRequestGuid: props.taskGuid,\r\n matterGuid: props.matterGuid,\r\n writeOffDebtorsAmount: writeOffDebtorsTask.debtors,\r\n closeMatterAfterWriteOff: writeOffDebtorsTask.isCloseMatterAfterWriteOff,\r\n comments: writeOffDebtorsTask.comments,\r\n taskInput: getTaskInput(writeOffDebtorsTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification('Failed to Update Debtor Write Off Matter Request', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Update Debtor Write Off Matter Request', reason, 'error');\r\n });\r\n };\r\n\r\n const getTaskInput = (task: WriteOffDebtor) => {\r\n let ownerGuid = task.owner \r\n ? task.owner.value \r\n : task.allocatedToEntityType === AllocatedToEntityType.user \r\n ? (task.assignedTo ? task.assignedTo.value : null)\r\n : (task.assignedBy ? task.assignedBy.value : null);\r\n \r\n return {\r\n description: '',\r\n priority: task.priority?.label ? task.priority?.label : null,\r\n category: task.taskCategory?.label ? task.taskCategory?.label : null,\r\n dueDate: task.dueDate ? task.dueDate : null,\r\n estimatedEffort: task.estimatedEffort ? task.estimatedEffort : null,\r\n startDate: task.startDate ? task.startDate : null,\r\n completionDate: task.completionDate ? task.completionDate : null,\r\n duration: task.duration ? task.duration : null,\r\n assignedBy: task.assignedBy?.value,\r\n completionNotes: task.completionDate ? task.completionNotes : null,\r\n assignedTo: task.assignedTo?.value ? task.assignedTo?.value : null,\r\n owner: ownerGuid,\r\n allocatedToEntityType: task.allocatedToEntityType,\r\n };\r\n };\r\n\r\n const onWriteOffDebtorsClosed = () => {\r\n if (props.onDialogClose) {\r\n props.onDialogClose();\r\n }\r\n };\r\n \r\n const getInitialValue = () => {\r\n if (props.formAction === 'create') {\r\n return {\r\n debtors: undefined,\r\n isCloseMatterAfterWriteOff: false,\r\n comments: '',\r\n priority: props.defaultPriority,\r\n assignedBy: props.loggedInUser,\r\n\r\n assignedTo: null,\r\n owner: null,\r\n allocatedToEntityType: null,\r\n };\r\n } else {\r\n return {\r\n debtors: props.debtorsAmount,\r\n isCloseMatterAfterWriteOff: props.closeMatterAfterWriteOff,\r\n comments: props.comments,\r\n priority: props.priority ? props.priority : props.defaultPriority,\r\n taskCategory: props.taskCategory,\r\n dueDate: props.dueDate ? moment(props.dueDate).toDate() : null,\r\n estimatedEffort: props.estimatedEffort,\r\n startDate: props.startDate ? moment(props.startDate).toDate() : null,\r\n completionDate: props.completionDate ? moment(props.completionDate).toDate() : null,\r\n completionNotes: props.completionNotes,\r\n duration: props.duration,\r\n assignedBy: props.assignedBy ? props.assignedBy : props.loggedInUser,\r\n\r\n assignedTo: props.assignedTo,\r\n owner: props.owner,\r\n allocatedToEntityType: props.allocatedToEntityType,\r\n };\r\n } \r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, \r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any, name: string, isUser: boolean) => {\r\n if (name === 'assignedTo') {\r\n let assignedTo = selection && selection.value && selection.label \r\n ? { value : selection.value, label: selection.label }\r\n : null;\r\n form.batch(() => {\r\n form.change('assignedTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser \r\n ? AllocatedToEntityType.user \r\n : AllocatedToEntityType.team\r\n ); \r\n });\r\n }\r\n };\r\n\r\n return (\r\n (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {UserFeature.HasAccess(UserFeatureEnum.hasCloseMatter)\r\n ?\r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n input.onChange(event.target.checked)}\r\n checked={input.value}\r\n disabled={!props.canClose}\r\n />\r\n }\r\n label=\"Close Matter After Write Off\"\r\n />\r\n )}\r\n \r\n )}\r\n \r\n \r\n : null\r\n } \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n // required={true}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Owner to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Unbilled Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Unbilled Disbursements:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Outstanding Debtors:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Billed Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: any) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }","import React from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Grid,\r\n TextField,\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { mainTheme } from '../../Theme';\r\nimport { Form, Field, AnyObject, FieldInputProps, FormSpy } from 'react-final-form';\r\nimport { CurrencyDisplayStyle } from '../../components/DataDisplay/CurrencyDisplayStyle';\r\nimport { FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { CurrencyInput } from '../../components/CurrencyInput';\r\nimport { CurrencyDetails } from '../cellRenderer/MatterTaskAction';\r\nimport { client } from '../..';\r\nimport { TransferMatterTrustToInvoiceRequestMutation, UpdateTransferMatterTrustToInvoiceRequestMutation } from '../MatterSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { MatterGroupField, MatterGroupFields } from '../fields/MatterGroupField';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../common/DialogTitleExtension';\r\nimport moment from 'moment';\r\nimport { AllocatedToEntityType } from '../../tasksSummary/AllocatedToEntityType';\r\nimport { FormApi } from 'final-form';\r\nimport { TaskAssignedByUserTeamSelector } from '../../tasksSummary/selectors/TaskAssignedByUserTeamSelector';\r\nimport { TaskAssignedBySelector } from '../../tasksSummary/selectors/TaskAssignedBySelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n textField: {\r\n // width: '100%',\r\n },\r\n commendField: {\r\n width: '100%',\r\n },\r\n dialogTitle: {\r\n color: mainTheme.TemplateColor.Primary,\r\n },\r\n customGrid: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n generatedContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n },\r\n },\r\n gridCenter: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n })\r\n);\r\n\r\nexport interface TransferTrustToPayInvoice extends MatterGroupFields {\r\n transfer?: number;\r\n invoiceNumber?: string;\r\n comments?: string;\r\n\r\n assignedTo: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n owner: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface TransferTustToPayInvoiceDialogProps {\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onDialogClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n outstandingDebtors?: number;\r\n currentTrustBalance?: number;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n trustAmount?: number | null;\r\n invoiceNumber?: string | null;\r\n comments?: string | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n\r\n assignedTo?: IAutoCompleteItem | null;\r\n owner?: IAutoCompleteItem | null;\r\n allocatedToEntityType?: number | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const TransferTustToPayInvoiceDialog: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const onSubmit = (values: TransferTrustToPayInvoice) => {\r\n if (props.formAction === 'create') {\r\n transferTrustToPayInvoiceRequest(values);\r\n } else {\r\n updateTransferTrustToPayInvoiceRequest(values);\r\n }\r\n\r\n onTransferTrustToPayInvoiceClosed();\r\n };\r\n\r\n const transferTrustToPayInvoiceRequest = (transferTrustToPayInvoiceTask: TransferTrustToPayInvoice) => {\r\n client\r\n .mutate({\r\n mutation: TransferMatterTrustToInvoiceRequestMutation,\r\n variables: {\r\n matterGuid: props.matterGuid,\r\n trustTransferAmount: transferTrustToPayInvoiceTask.transfer,\r\n invoiceToApply: transferTrustToPayInvoiceTask.invoiceNumber,\r\n comments: transferTrustToPayInvoiceTask.comments,\r\n taskInput: getTaskInput(transferTrustToPayInvoiceTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification('Failed to Request Transfer Matter Trust to Pay Invoice', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Request Transfer Matter Trust to Pay Invoice', reason, 'error');\r\n });\r\n };\r\n\r\n const updateTransferTrustToPayInvoiceRequest = (transferTrustToPayInvoiceTask: TransferTrustToPayInvoice) => {\r\n client\r\n .mutate({\r\n mutation: UpdateTransferMatterTrustToInvoiceRequestMutation,\r\n variables: {\r\n taskRequestGuid: props.taskGuid,\r\n matterGuid: props.matterGuid,\r\n trustTransferAmount: transferTrustToPayInvoiceTask.transfer,\r\n invoiceToApply: transferTrustToPayInvoiceTask.invoiceNumber,\r\n comments: transferTrustToPayInvoiceTask.comments,\r\n taskInput: getTaskInput(transferTrustToPayInvoiceTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification('Failed to Update Transfer Matter Trust to Pay Invoice Request', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Update Transfer Matter Trust to Pay Invoice Request', reason, 'error');\r\n });\r\n };\r\n\r\n const getTaskInput = (task: TransferTrustToPayInvoice) => {\r\n let ownerGuid = task.owner \r\n ? task.owner.value \r\n : task.allocatedToEntityType === AllocatedToEntityType.user \r\n ? (task.assignedTo ? task.assignedTo.value : null)\r\n : (task.assignedBy ? task.assignedBy.value : null);\r\n\r\n return {\r\n description: '',\r\n priority: task.priority?.label ? task.priority?.label : null,\r\n category: task.taskCategory?.label ? task.taskCategory?.label : null,\r\n dueDate: task.dueDate ? task.dueDate : null,\r\n estimatedEffort: task.estimatedEffort ? task.estimatedEffort : null,\r\n startDate: task.startDate ? task.startDate : null,\r\n completionDate: task.completionDate ? task.completionDate : null,\r\n duration: task.duration ? task.duration : null,\r\n assignedBy: task.assignedBy?.value,\r\n completionNotes: task.completionDate ? task.completionNotes : null,\r\n assignedTo: task.assignedTo?.value ? task.assignedTo?.value : null,\r\n owner: ownerGuid,\r\n allocatedToEntityType: task.allocatedToEntityType,\r\n };\r\n };\r\n\r\n const onTransferTrustToPayInvoiceClosed = () => {\r\n if (props.onDialogClose) {\r\n props.onDialogClose();\r\n }\r\n };\r\n\r\n const getInitialValue = () => {\r\n if (props.formAction === 'create') {\r\n return {\r\n transfer: undefined,\r\n invoiceNumber: '',\r\n comments: '',\r\n priority: props.defaultPriority,\r\n assignedBy: props.loggedInUser,\r\n\r\n assignedTo: null,\r\n owner: null,\r\n allocatedToEntityType: null,\r\n };\r\n } else {\r\n return {\r\n transfer: props.trustAmount,\r\n invoiceNumber: props.invoiceNumber,\r\n comments: props.comments,\r\n priority: props.priority ? props.priority : props.defaultPriority,\r\n taskCategory: props.taskCategory,\r\n dueDate: props.dueDate ? moment(props.dueDate).toDate() : null,\r\n estimatedEffort: props.estimatedEffort,\r\n startDate: props.startDate ? moment(props.startDate).toDate() : null,\r\n completionDate: props.completionDate ? moment(props.completionDate).toDate() : null,\r\n completionNotes: props.completionNotes,\r\n duration: props.duration,\r\n assignedBy: props.assignedBy ? props.assignedBy : props.loggedInUser,\r\n\r\n assignedTo: props.assignedTo,\r\n owner: props.owner,\r\n allocatedToEntityType: props.allocatedToEntityType,\r\n };\r\n } \r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, \r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any, name: string, isUser: boolean) => {\r\n if (name === 'assignedTo') {\r\n let assignedTo = selection && selection.value && selection.label \r\n ? { value : selection.value, label: selection.label }\r\n : null;\r\n form.batch(() => {\r\n form.change('assignedTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser \r\n ? AllocatedToEntityType.user \r\n : AllocatedToEntityType.team\r\n ); \r\n });\r\n }\r\n };\r\n\r\n return (\r\n \r\n (\r\n
handleSubmit(event)} id=\"transferTustToPlayInvoiceDialog\">\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n // required={true}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Owner to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Outstanding Debtors:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Current Trust Balance:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: any) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }","import React from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Grid,\r\n TextField,\r\n FormControlLabel,\r\n Checkbox,\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { mainTheme } from '../../Theme';\r\nimport { Form, Field, AnyObject, FieldInputProps, FormSpy } from 'react-final-form';\r\nimport moment from 'moment';\r\nimport { CurrencyDisplayStyle } from '../../components/DataDisplay/CurrencyDisplayStyle';\r\nimport { FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { CurrencyDetails } from '../cellRenderer/MatterTaskAction';\r\nimport { ArchiveMatterRequestMutation, UpdateArchiveMatterRequestMutation } from '../MatterSummaryRepository';\r\nimport { client } from '../..';\r\nimport { showNotification } from '../../App';\r\nimport { MatterGroupField, MatterGroupFields } from '../fields/MatterGroupField';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../common/DialogTitleExtension';\r\nimport { AllocatedToEntityType } from '../../tasksSummary/AllocatedToEntityType';\r\nimport { FormApi } from 'final-form';\r\nimport { TaskAssignedByUserTeamSelector } from '../../tasksSummary/selectors/TaskAssignedByUserTeamSelector';\r\nimport { TaskAssignedBySelector } from '../../tasksSummary/selectors/TaskAssignedBySelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n textField: {\r\n // width: '100%',\r\n },\r\n commendField: {\r\n width: '100%',\r\n },\r\n dialogTitle: {\r\n color: mainTheme.TemplateColor.Primary,\r\n },\r\n customGrid: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n generatedContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n },\r\n },\r\n gridCenter: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n })\r\n);\r\n\r\nexport interface ArchiveMatter extends MatterGroupFields {\r\n isArchiveMatter?: boolean;\r\n comments?: string;\r\n\r\n assignedTo: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n owner: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface ArchiveMatterDialogProps {\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onDialogClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n billedFees?: number;\r\n closedDate?: Date;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n archiveMatter?: boolean | null;\r\n comments?: string | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n\r\n assignedTo?: IAutoCompleteItem | null;\r\n owner?: IAutoCompleteItem | null;\r\n allocatedToEntityType?: number | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const ArchiveMatterDialog: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const onSubmit = (values: ArchiveMatter) => {\r\n if (props.formAction === 'create') {\r\n archiveMatterRequest(values);\r\n } else {\r\n updateArchiveMatterRequest(values);\r\n }\r\n\r\n onArchiveMatterClosed();\r\n };\r\n\r\n const archiveMatterRequest = (archiveMatterTask: ArchiveMatter) => {\r\n client\r\n .mutate({\r\n mutation: ArchiveMatterRequestMutation,\r\n variables: {\r\n matterGuid: props.matterGuid,\r\n archive: archiveMatterTask.isArchiveMatter,\r\n comments: archiveMatterTask.comments,\r\n taskInput: getTaskInput(archiveMatterTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Request Archive Matter', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Request Archive Matter', reason, 'error');\r\n });\r\n };\r\n\r\n const updateArchiveMatterRequest = (archiveMatterTask: ArchiveMatter) => {\r\n client\r\n .mutate({\r\n mutation: UpdateArchiveMatterRequestMutation,\r\n variables: {\r\n taskRequestGuid: props.taskGuid,\r\n matterGuid: props.matterGuid,\r\n archive: archiveMatterTask.isArchiveMatter,\r\n comments: archiveMatterTask.comments,\r\n taskInput: getTaskInput(archiveMatterTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Update Archive Matter Request', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Update Archive Matter Request', reason, 'error');\r\n });\r\n };\r\n\r\n const getTaskInput = (task: ArchiveMatter) => {\r\n let ownerGuid = task.owner \r\n ? task.owner.value \r\n : task.allocatedToEntityType === AllocatedToEntityType.user \r\n ? (task.assignedTo ? task.assignedTo.value : null)\r\n : (task.assignedBy ? task.assignedBy.value : null);\r\n \r\n return {\r\n description: '',\r\n priority: task.priority?.label ? task.priority?.label : null,\r\n category: task.taskCategory?.label ? task.taskCategory?.label : null,\r\n dueDate: task.dueDate ? task.dueDate : null,\r\n estimatedEffort: task.estimatedEffort ? task.estimatedEffort : null,\r\n startDate: task.startDate ? task.startDate : null,\r\n completionDate: task.completionDate ? task.completionDate : null,\r\n duration: task.duration ? task.duration : null,\r\n assignedBy: task.assignedBy?.value,\r\n completionNotes: task.completionDate ? task.completionNotes : null,\r\n\r\n assignedTo: task.assignedTo?.value ? task.assignedTo?.value : null,\r\n owner: ownerGuid,\r\n allocatedToEntityType: task.allocatedToEntityType,\r\n };\r\n };\r\n\r\n const onArchiveMatterClosed = () => {\r\n if (props.onDialogClose) {\r\n props.onDialogClose();\r\n }\r\n };\r\n\r\n const getInitialValue = () => {\r\n if (props.formAction === 'create') {\r\n return {\r\n isArchiveMatter: false,\r\n comments: '',\r\n priority: props.defaultPriority,\r\n assignedBy: props.loggedInUser,\r\n\r\n assignedTo: null,\r\n owner: null,\r\n allocatedToEntityType: null,\r\n };\r\n } else {\r\n return {\r\n isArchiveMatter: props.archiveMatter,\r\n comments: props.comments,\r\n priority: props.priority ? props.priority : props.defaultPriority,\r\n taskCategory: props.taskCategory,\r\n dueDate: props.dueDate ? moment(props.dueDate).toDate() : null,\r\n estimatedEffort: props.estimatedEffort,\r\n startDate: props.startDate ? moment(props.startDate).toDate() : null,\r\n completionDate: props.completionDate ? moment(props.completionDate).toDate() : null,\r\n completionNotes: props.completionNotes,\r\n duration: props.duration,\r\n assignedBy: props.assignedBy ? props.assignedBy : props.loggedInUser,\r\n\r\n assignedTo: props.assignedTo,\r\n owner: props.owner,\r\n allocatedToEntityType: null,\r\n };\r\n } \r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, \r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any, name: string, isUser: boolean) => {\r\n if (name === 'assignedTo') {\r\n let assignedTo = selection && selection.value && selection.label \r\n ? { value : selection.value, label: selection.label }\r\n : null;\r\n form.batch(() => {\r\n form.change('assignedTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser \r\n ? AllocatedToEntityType.user \r\n : AllocatedToEntityType.team\r\n ); \r\n });\r\n }\r\n };\r\n\r\n return (\r\n \r\n (\r\n
handleSubmit(event)} id=\"archiveMatterDialog\">\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(event.target.checked)}\r\n checked={input.value}\r\n // disabled={props.formAction === 'edit'}\r\n />\r\n }\r\n label=\"Archive Matter\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n // required={true}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Owner to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Billed Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n Date Closed:\r\n
\r\n
\r\n {props.closedDate \r\n ? moment(props.closedDate).format('DD-MMM-YYYY')\r\n : undefined\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: any) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }","import React from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Grid,\r\n TextField,\r\n FormControlLabel,\r\n Checkbox,\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { mainTheme } from '../../Theme';\r\nimport { Form, Field, AnyObject, FieldInputProps, FormSpy } from 'react-final-form';\r\n// import moment from 'moment';\r\nimport { CurrencyDisplayStyle } from '../../components/DataDisplay/CurrencyDisplayStyle';\r\nimport { FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\nimport { CurrencyDetails } from '../cellRenderer/MatterTaskAction';\r\nimport { client } from '../..';\r\nimport { CloseMatterRequestMutation, UpdateCloseMatterRequestMutation } from '../MatterSummaryRepository';\r\nimport { showNotification } from '../../App';\r\nimport { MatterGroupField, MatterGroupFields } from '../fields/MatterGroupField';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { DialogTitleExtension } from '../common/DialogTitleExtension';\r\nimport moment from 'moment';\r\nimport { TaskAssignedByUserTeamSelector } from '../../tasksSummary/selectors/TaskAssignedByUserTeamSelector';\r\nimport { AllocatedToEntityType } from '../../tasksSummary/AllocatedToEntityType';\r\nimport { FormApi } from 'final-form';\r\nimport { TaskAssignedBySelector } from '../../tasksSummary/selectors/TaskAssignedBySelector';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n textField: {\r\n // width: '100%',\r\n },\r\n commendField: {\r\n width: '100%',\r\n },\r\n dialogTitle: {\r\n color: mainTheme.TemplateColor.Primary,\r\n },\r\n customGrid: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n generatedContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: '0 -10px',\r\n flex: 1,\r\n '& .col': {\r\n padding: '0 10px',\r\n },\r\n '& .value': {\r\n fontWeight: 600,\r\n },\r\n },\r\n gridCenter: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n })\r\n);\r\n\r\nexport interface CloseMatter extends MatterGroupFields {\r\n isCloseMatter?: boolean;\r\n comments?: string;\r\n\r\n assignedTo: IAutoCompleteItem | null;\r\n allocatedToEntityType: number | null;\r\n owner: IAutoCompleteItem | null;\r\n}\r\n\r\ninterface CloseMatterDialogProps {\r\n currencyDetails: CurrencyDetails;\r\n matterId: number;\r\n matterGuid: string;\r\n matterTitle: string;\r\n client: string;\r\n onDialogClose?: () => void;\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n\r\n billedFees?: number;\r\n\r\n // Saved values\r\n taskGuid?: string;\r\n formAction: 'create' | 'edit';\r\n closeMatter?: boolean | null;\r\n comments?: string | null;\r\n priority?: IAutoCompleteItem | null;\r\n taskCategory?: IAutoCompleteItem | null;\r\n dueDate?: Date | null;\r\n estimatedEffort?: string | null;\r\n startDate?: Date | null;\r\n completionDate?: Date | null;\r\n duration?: string | null;\r\n assignedBy?: IAutoCompleteItem | null;\r\n completionNotes?: string | null;\r\n\r\n assignedTo?: IAutoCompleteItem | null;\r\n owner?: IAutoCompleteItem | null;\r\n allocatedToEntityType?: number | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const CloseMatterDialog: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const onSubmit = (values: CloseMatter) => {\r\n if (props.formAction === 'create') {\r\n closeMatterRequest(values);\r\n } else {\r\n updateCloseMatterRequest(values);\r\n }\r\n\r\n onCloseMatterClosed();\r\n };\r\n\r\n const closeMatterRequest = (closeMatterTask: CloseMatter) => {\r\n client\r\n .mutate({\r\n mutation: CloseMatterRequestMutation,\r\n variables: {\r\n matterGuid: props.matterGuid,\r\n close: closeMatterTask.isCloseMatter,\r\n comments: closeMatterTask.comments,\r\n taskInput: getTaskInput(closeMatterTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification('Failed to Request Close Matter', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Request Close Matter', reason, 'error');\r\n });\r\n };\r\n\r\n const updateCloseMatterRequest = (closeMatterTask: CloseMatter) => {\r\n client\r\n .mutate({\r\n mutation: UpdateCloseMatterRequestMutation,\r\n variables: {\r\n taskRequestGuid: props.taskGuid,\r\n matterGuid: props.matterGuid,\r\n close: closeMatterTask.isCloseMatter,\r\n comments: closeMatterTask.comments,\r\n taskInput: getTaskInput(closeMatterTask)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification('Failed to Update Close Matter Request', results.data.error, 'error');\r\n } else {\r\n showNotification(null, 'Successfully submitted', 'info'); \r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Update Close Matter Request', reason, 'error');\r\n });\r\n };\r\n\r\n const getTaskInput = (task: CloseMatter) => {\r\n let ownerGuid = task.owner \r\n ? task.owner.value \r\n : task.allocatedToEntityType === AllocatedToEntityType.user \r\n ? (task.assignedTo ? task.assignedTo.value : null)\r\n : (task.assignedBy ? task.assignedBy.value : null);\r\n\r\n return {\r\n description: '',\r\n priority: task.priority?.label ? task.priority?.label : null,\r\n category: task.taskCategory?.label ? task.taskCategory?.label : null,\r\n dueDate: task.dueDate ? task.dueDate : null,\r\n estimatedEffort: task.estimatedEffort ? task.estimatedEffort : null,\r\n startDate: task.startDate ? task.startDate : null,\r\n completionDate: task.completionDate ? task.completionDate : null,\r\n duration: task.duration ? task.duration : null,\r\n assignedBy: task.assignedBy?.value,\r\n completionNotes: task.completionDate ? task.completionNotes : null,\r\n assignedTo: task.assignedTo?.value ? task.assignedTo?.value : null,\r\n owner: ownerGuid,\r\n allocatedToEntityType: task.allocatedToEntityType,\r\n };\r\n };\r\n\r\n const onCloseMatterClosed = () => {\r\n if (props.onDialogClose) {\r\n props.onDialogClose();\r\n }\r\n };\r\n\r\n const getInitialValue = () => {\r\n if (props.formAction === 'create') {\r\n return {\r\n isCloseMatter: false,\r\n comments: '',\r\n priority: props.defaultPriority,\r\n assignedBy: props.loggedInUser,\r\n\r\n assignedTo: null,\r\n owner: null,\r\n allocatedToEntityType: null,\r\n };\r\n } else {\r\n return {\r\n isCloseMatter: props.closeMatter,\r\n comments: props.comments,\r\n priority: props.priority ? props.priority : props.defaultPriority,\r\n taskCategory: props.taskCategory,\r\n dueDate: props.dueDate ? moment(props.dueDate).toDate() : null,\r\n estimatedEffort: props.estimatedEffort,\r\n startDate: props.startDate ? moment(props.startDate).toDate() : null,\r\n completionDate: props.completionDate ? moment(props.completionDate).toDate() : null,\r\n completionNotes: props.completionNotes,\r\n duration: props.duration,\r\n assignedBy: props.assignedBy ? props.assignedBy : props.loggedInUser,\r\n\r\n assignedTo: props.assignedTo,\r\n owner: props.owner,\r\n allocatedToEntityType: props.allocatedToEntityType,\r\n };\r\n } \r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onDropDownSelect = (form: FormApi, values: AnyObject, input: FieldInputProps, \r\n // tslint:disable-next-line: no-any\r\n selection: IAutoCompleteItem | any, name: string, isUser: boolean) => {\r\n if (name === 'assignedTo') {\r\n let assignedTo = selection && selection.value && selection.label \r\n ? { value : selection.value, label: selection.label }\r\n : null;\r\n form.batch(() => {\r\n form.change('assignedTo', assignedTo);\r\n form.change('allocatedToEntityType', isUser \r\n ? AllocatedToEntityType.user \r\n : AllocatedToEntityType.team\r\n ); \r\n });\r\n }\r\n };\r\n\r\n return (\r\n \r\n (\r\n
handleSubmit(event)} id=\"closeMatterDialog\">\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n input.onChange(event.target.checked)}\r\n checked={input.value}\r\n // disabled={props.formAction === 'edit'}\r\n />\r\n }\r\n label=\"Close Matter\"\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Billed Fees:\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n onDropDownSelect(form, values, input, selection, name, isUser)\r\n }\r\n // required={true}\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Assigned to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n helperText={\r\n meta.error &&\r\n meta.touched\r\n ? 'Owner to is required'\r\n : ''\r\n }\r\n visible={{\r\n role: true\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: any) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles, TextField, CircularProgress } from '@material-ui/core';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n autocompletePopper: {\r\n '& .MuiListSubheader-root': {\r\n lineHeight: '30px'\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface TaskTypeGroupSelectorProps {\r\n value: IAutoCompleteItem | null; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: TaskTypeGroupAutoCompleteItem, name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n disabled?: boolean;\r\n required?: boolean;\r\n}\r\n\r\n// export interface TaskTypeGroupAutoCompleteItem extends IAutoCompleteItem {\r\n// taskTypeGroupGuid: string;\r\n// taskTypeGroupDescription: string;\r\n// taskTypeGuid: string;\r\n// taskTypeDescription: string;\r\n// taskTypeCounts: number;\r\n// }\r\n\r\nexport interface TaskTypeGroupAutoCompleteItem extends IAutoCompleteItem {\r\n estimatedEffort: string;\r\n notes: string;\r\n}\r\ninterface TaskTypeGroupSelectorState {\r\n isLoading: boolean;\r\n data: IAutoCompleteItem[];\r\n value: IAutoCompleteItem | null;\r\n searchValue: string | undefined;\r\n}\r\n\r\nexport const TaskTypeGroupSelector: React.FC = props => {\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n data: [],\r\n value: props.value,\r\n searchValue: undefined\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n const taskTypeGroupParams: TaskTypeGroupParams = {\r\n taskGroupTypeId: null\r\n };\r\n\r\n retrieveTaskTypeGroupData(\r\n taskTypeGroupParams,\r\n false, // refresh\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n \r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: TaskTypeGroupData) => {\r\n const taskTypeGroupList = data.userTasks.taskTypeGroups;\r\n\r\n // let taskTypeGroupItems: TaskTypeGroupAutoCompleteItem[] = [];\r\n\r\n // taskTypeGroupList.taskTypeGroup.forEach((taskTypeGroupItem: TaskTypeGroup) => {\r\n // taskTypeGroupItem.taskType.forEach((taskTypeItem: TaskType) => {\r\n // taskTypeGroupItems.push({\r\n // taskTypeGroupGuid: taskTypeGroupItem.guidID,\r\n // taskTypeGroupDescription: taskTypeGroupItem.description,\r\n // taskTypeGuid: taskTypeItem.guidID,\r\n // taskTypeDescription: taskTypeItem.description,\r\n // taskTypeCounts: taskTypeGroupItem.taskType ? taskTypeGroupItem.taskType.length : 0,\r\n // value: taskTypeItem.guidID,\r\n // label: taskTypeItem.description\r\n // });\r\n // });\r\n // });\r\n\r\n let taskTypeGroupItems: TaskTypeGroupAutoCompleteItem[] = [];\r\n\r\n taskTypeGroupList.taskTypeGroup.forEach((taskTypeGroupItem: TaskTypeGroup) => {\r\n if (taskTypeGroupItem.taskType) { \r\n taskTypeGroupItem.taskType.forEach((taskTypeItem: TaskType) => {\r\n taskTypeGroupItems.push({\r\n secondaryValue: taskTypeGroupItem.guidID,\r\n groupBy: taskTypeGroupItem.description,\r\n value: taskTypeItem.guidID,\r\n label: taskTypeItem.description,\r\n estimatedEffort: taskTypeItem.estimatedEffort,\r\n notes: taskTypeItem.notes\r\n });\r\n });\r\n }\r\n });\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: false,\r\n data: taskTypeGroupItems\r\n };\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: TaskTypeGroupAutoCompleteItem) => {\r\n if (props.onSelection) {\r\n let autoCompleteValue: TaskTypeGroupAutoCompleteItem | undefined;\r\n if (value) {\r\n autoCompleteValue = { value: value.value, label: value.label, estimatedEffort: value.estimatedEffort, notes: value.notes };\r\n } else {\r\n autoCompleteValue = undefined;\r\n }\r\n props.onSelection(autoCompleteValue, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n option.groupBy ? option.groupBy.toString() : ''}\r\n disablePortal={props.disablePortal} // to Stop the dropdown select from closing the form\r\n // tslint:disable-next-line: jsx-no-lambda\r\n getOptionLabel={(option: IAutoCompleteItem) => option.label} \r\n classes={{\r\n popper: classes.autocompletePopper\r\n }} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport interface TaskTypeGroupParams {\r\n taskGroupTypeId: string | null;\r\n}\r\n\r\nexport interface TaskTypeGroupData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n userTasks: UserTasks;\r\n}\r\n\r\nexport interface UserTasks {\r\n taskTypeGroups: TaskTypeGroups;\r\n}\r\n\r\nexport interface TaskTypeGroups {\r\n recordCount: number;\r\n taskTypeGroup: TaskTypeGroup[];\r\n}\r\n\r\nexport interface TaskTypeGroup {\r\n guidID: string;\r\n description: string;\r\n sequence: number;\r\n taskType: TaskType[];\r\n}\r\n\r\nexport interface TaskType {\r\n guidID: string;\r\n description: string;\r\n estimatedEffort: string;\r\n notes: string;\r\n}\r\n\r\nexport function retrieveTaskTypeGroupData(\r\n query: TaskTypeGroupParams,\r\n refreshData: boolean,\r\n onSuccess: (data: TaskTypeGroupData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TaskTypeGroupQuery,\r\n variables: {\r\n taskGroupTypeId: query.taskGroupTypeId\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst TaskTypeGroupQuery = gql`\r\nquery TaskTypeGroupQuery($taskGroupTypeId: String) {\r\n userTasks {\r\n taskTypeGroups(taskGroupTypeId: $taskGroupTypeId) {\r\n recordCount\r\n taskTypeGroup {\r\n description\r\n guidID\r\n sequence\r\n taskType {\r\n guidID\r\n description\r\n estimatedEffort\r\n notes\r\n }\r\n }\r\n }\r\n }\r\n}`;","import { \r\n Badge,\r\n Chip,\r\n CircularProgress,\r\n createStyles,\r\n IconButton,\r\n InputAdornment,\r\n lighten,\r\n makeStyles, \r\n Paper, \r\n Table, \r\n TableBody, \r\n TableCell, \r\n TableContainer, \r\n TableHead, \r\n TableRow, \r\n TextField, \r\n Theme, \r\n Toolbar,\r\n Tooltip,\r\n Typography\r\n} from '@material-ui/core';\r\nimport React, { useEffect, useState } from 'react';\r\n// tslint:disable-next-line: max-line-length\r\nimport { \r\n DragDropContext, \r\n Draggable, \r\n // DraggableProvided, \r\n // DraggableStateSnapshot, \r\n Droppable, \r\n DropResult, \r\n ResponderProvided \r\n} from 'react-beautiful-dnd';\r\nimport DeleteOutline from '@material-ui/icons/DeleteOutline';\r\nimport Edit from '@material-ui/icons/Edit';\r\nimport AddBoxRoundedIcon from '@material-ui/icons/AddBoxRounded';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport Check from '@material-ui/icons/Check';\r\nimport { mainTheme } from '../../Theme';\r\nimport _ from 'lodash';\r\nimport { useQuery } from 'react-apollo';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { showNotification } from '../../App';\r\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\r\nimport LocalOfferOutlinedIcon from '@material-ui/icons/LocalOfferOutlined';\r\nimport { browserHistory } from '../../components/AppContent';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n paper: {\r\n width: '100%',\r\n marginBottom: theme.spacing(2),\r\n position: 'relative'\r\n },\r\n loadingWrapper: {\r\n position: 'absolute',\r\n zIndex: 1,\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n bottom: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: 'rgba(255,255,255, 0.6)',\r\n },\r\n icon: {\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n },\r\n tableCell: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n '&:hover': {\r\n '& .drag-icon': {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n }\r\n }\r\n },\r\n textField: {\r\n minWidth: 200,\r\n maxWidth: '100%',\r\n },\r\n dragIcon: {\r\n marginLeft: '-10px',\r\n marginRight: 10,\r\n color: '#BDBDBD'\r\n },\r\n tableContentWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n description: {\r\n cursor: 'pointer'\r\n }\r\n })\r\n);\r\n\r\nconst useToolbarStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(1),\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n },\r\n highlight:\r\n theme.palette.type === 'light'\r\n ? {\r\n color: theme.palette.secondary.main,\r\n backgroundColor: lighten(theme.palette.secondary.light, 0.85),\r\n }\r\n : {\r\n color: theme.palette.text.primary,\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n title: {\r\n flex: '1 1 100%',\r\n },\r\n icon: {\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n },\r\n rightToolbarWrapper: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n tableTitle: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n tableHeading: {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n chip: {\r\n marginLeft: '8px'\r\n },\r\n })\r\n);\r\n\r\ninterface EnhancedTableToolbarProps {\r\n title: string;\r\n count?: React.ReactNode;\r\n onClickAdd?: () => void;\r\n onSearch?: (search: string) => void;\r\n}\r\n\r\nconst EnhancedTableToolbar = (props: EnhancedTableToolbarProps) => {\r\n\r\n const classes = useToolbarStyles();\r\n\r\n const [search, setSearch] = useState('');\r\n\r\n const handleChange = (event: React.ChangeEvent) => {\r\n \r\n setSearch(event.target.value);\r\n\r\n if (props.onSearch) {\r\n props.onSearch(event.target.value);\r\n }\r\n };\r\n\r\n const clearSearch = () => {\r\n setSearch('');\r\n if (props.onSearch) {\r\n props.onSearch('');\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n {props.title}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n ),\r\n endAdornment: (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }}\r\n onChange={handleChange}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\ninterface LookupNameTagTypeMaintenanceItem extends ClientAndContactTagType {\r\n isEdit: boolean;\r\n isDelete: boolean;\r\n}\r\n\r\ninterface LookupNameTagTypeMaintenanceState {\r\n items: LookupNameTagTypeMaintenanceItem[];\r\n isAdd: boolean;\r\n search: string;\r\n isDelete: boolean;\r\n isEdit: boolean;\r\n}\r\n\r\nexport default function LookupNameTagTypeMaintenance() {\r\n\r\n const classes = useStyles();\r\n\r\n const { loading, error, data } = useQuery(ClientAndContactTagTypesQuery);\r\n\r\n const [state, setState] = useState({\r\n items: [],\r\n isAdd: false,\r\n search: '',\r\n isEdit: false,\r\n isDelete: false,\r\n });\r\n\r\n const textFieldPlaceHolder = 'Description';\r\n\r\n useEffect(() => {\r\n if (!error && data && data.lookup ) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n items: data!.lookup.clientAndContactTagType.map((value) => {\r\n return { \r\n guidId: value.guidId,\r\n description: value.description,\r\n sequence: value.sequence,\r\n tagEntity: value.tagEntity,\r\n tagsCount: value.tagsCount,\r\n isDelete: false,\r\n isEdit: false\r\n };\r\n }).sort((a, b) => a.sequence < b.sequence ? -1 : a.sequence > b.sequence ? 1 : 0)\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [data, error, loading]);\r\n\r\n useEffect(() => {\r\n \r\n const subscribeFirmObj = subscribeFirm();\r\n\r\n return () => {\r\n subscribeFirmObj.unsubscribe();\r\n };\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const subscribeFirm = () => {\r\n return (\r\n // let subscription =\r\n client\r\n .subscribe({\r\n fetchPolicy: 'no-cache',\r\n query: firmSubscription,\r\n variables: {},\r\n })\r\n .subscribe({\r\n // tslint:disable-next-line:no-any\r\n next(results: any) {\r\n if (results.data.lookupNotification.status) {\r\n\r\n const { lookupNotification } = results.data;\r\n\r\n showNotification('Success', lookupNotification.message, 'info');\r\n\r\n if (lookupNotification.message.includes('created successfully')) {\r\n \r\n setState((prevState) => {\r\n\r\n const tdata = [...prevState.items];\r\n\r\n const temp = tdata[tdata.length - 1];\r\n\r\n tdata[tdata.length - 1] = {\r\n ...temp,\r\n guidId: lookupNotification.guidId\r\n };\r\n\r\n return {\r\n ...prevState,\r\n items: tdata\r\n };\r\n });\r\n }\r\n\r\n } else {\r\n showNotification('Failed', results.data.lookupNotification.message, 'error');\r\n }\r\n },\r\n // tslint:disable-next-line:no-any\r\n error(err: any) {\r\n // tslint:disable-next-line:no-console\r\n console.error(err);\r\n showNotification(null, err, 'error');\r\n },\r\n })\r\n );\r\n };\r\n \r\n let textField = '';\r\n\r\n // itemInputRef.current = getItems(10).map((ref, index) => itemInputRef.current[index] = React.createRef());\r\n\r\n const reorder = (list: LookupNameTagTypeMaintenanceItem[], startIndex: number, endIndex: number) => {\r\n const result = Array.from(list);\r\n const [removed] = result.splice(startIndex, 1);\r\n result.splice(endIndex, 0, removed);\r\n \r\n return result;\r\n };\r\n\r\n const onDragEnd = (result: DropResult, provided: ResponderProvided) => {\r\n // dropped outside the list\r\n if (!result.destination) {\r\n return;\r\n }\r\n \r\n const items = reorder(\r\n state.items,\r\n result.source.index,\r\n result.destination.index\r\n ).map((item: LookupNameTagTypeMaintenanceItem, index: number) => {\r\n return {\r\n ...item,\r\n sequence: index\r\n };\r\n });\r\n\r\n setState((prevState) => {\r\n \r\n client\r\n .mutate({\r\n mutation: UpdateClientAndContactTagTypeSequences,\r\n variables: {\r\n lookupSequences: items.map((item: LookupNameTagTypeMaintenanceItem) => {\r\n return {\r\n guidId: item.guidId, \r\n sequence: item.sequence\r\n };\r\n })\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to update tag type sorting', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update tag type sorting', reason, 'error');\r\n });\r\n\r\n return {\r\n ...prevState,\r\n items\r\n };\r\n });\r\n\r\n };\r\n\r\n // const getListStyle = (isDraggingOver: boolean) => ({\r\n // background: isDraggingOver ? 'lightblue' : 'lightgrey',\r\n // padding: grid,\r\n // width: 250\r\n // });\r\n\r\n // tslint:disable-next-line: no-any\r\n const getItemStyle = (isDragging: boolean, draggableStyle: any) => ({\r\n // styles we need to apply on draggables\r\n ...draggableStyle,\r\n\r\n ...(isDragging && {\r\n background: 'rgb(235,235,235)'\r\n }),\r\n position: 'static',\r\n zIndex: 1\r\n });\r\n\r\n const onClickAdd = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isAdd: true\r\n };\r\n });\r\n };\r\n\r\n const onClickCancel = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isAdd: false,\r\n isEdit: false,\r\n isDelete: false,\r\n };\r\n });\r\n };\r\n\r\n const onSearch = (search: string) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n search\r\n };\r\n });\r\n };\r\n\r\n const onEditRowEnable = (item: LookupNameTagTypeMaintenanceItem) => () => {\r\n const items = [...state.items];\r\n \r\n const index = items.indexOf(item);\r\n\r\n items[index].isEdit = true;\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n items,\r\n isEdit: true,\r\n };\r\n });\r\n };\r\n\r\n const onCancelEditRow = (item: LookupNameTagTypeMaintenanceItem) => () => {\r\n // code here..\r\n const items = [...state.items];\r\n \r\n const index = items.indexOf(item);\r\n\r\n items[index].isEdit = false;\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n items,\r\n isEdit: false,\r\n };\r\n });\r\n };\r\n\r\n const onEditRow = (item: LookupNameTagTypeMaintenanceItem, index: number) => () => {\r\n\r\n if (textField) {\r\n\r\n setState((prevState) => {\r\n client\r\n .mutate({\r\n mutation: UpdateClientAndContactTagTypeMutation,\r\n variables: {\r\n guidId: item.guidId,\r\n description: textField,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Update Tag Type', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Update Tag Type', reason, 'error');\r\n });\r\n\r\n const tdata = [...prevState.items];\r\n tdata[tdata.indexOf(item)].isEdit = false;\r\n tdata[tdata.indexOf(item)].description = textField;\r\n \r\n return { \r\n ...prevState, \r\n data: tdata,\r\n isEdit: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onDeleteRowEnable = (item: LookupNameTagTypeMaintenanceItem) => () => {\r\n\r\n setState((prevState) => {\r\n\r\n const items = [...prevState.items];\r\n \r\n const index = items.indexOf(item);\r\n\r\n items[index].isDelete = true;\r\n\r\n return {\r\n ...prevState,\r\n items,\r\n isDelete: true\r\n };\r\n });\r\n };\r\n\r\n const onCancelDeleteRow = (item: LookupNameTagTypeMaintenanceItem) => () => {\r\n // code here..\r\n\r\n setState((prevState) => {\r\n\r\n const items = [...prevState.items];\r\n \r\n const index = items.indexOf(item);\r\n\r\n items[index].isDelete = false;\r\n\r\n return {\r\n ...prevState,\r\n items,\r\n isDelete: false\r\n };\r\n });\r\n };\r\n\r\n const onDeleteRow = (item: LookupNameTagTypeMaintenanceItem) => () => {\r\n \r\n setState((prevState) => {\r\n\r\n client\r\n .mutate({\r\n mutation: DeleteClientAndContactTagTypeMutation,\r\n variables: {\r\n guidId: item.guidId,\r\n description: item.description\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Delete Tag Type', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Delete Tag Type', reason, 'error');\r\n });\r\n\r\n const tItems = [...prevState.items];\r\n tItems.splice(tItems.indexOf(item), 1);\r\n\r\n return {\r\n ...prevState,\r\n isDelete: false,\r\n items: tItems\r\n };\r\n });\r\n };\r\n\r\n const onAddItem = () => {\r\n \r\n if (textField) {\r\n\r\n setState((prevState) => {\r\n\r\n client\r\n .mutate({\r\n mutation: CreateClientAndContactTagTypeMutation,\r\n variables: {\r\n description: textField,\r\n sequence: prevState.items.length,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to create Tag Type', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to create Tag Type', reason, 'error');\r\n });\r\n\r\n const tItems = [...prevState.items];\r\n \r\n tItems.push({\r\n guidId: '',\r\n description: textField,\r\n sequence: prevState.items.length,\r\n isEdit: false,\r\n isDelete: false,\r\n tagEntity: 0,\r\n tagsCount: 0,\r\n });\r\n \r\n return {\r\n ...prevState,\r\n isAdd: false,\r\n items: tItems\r\n };\r\n });\r\n }\r\n \r\n };\r\n\r\n const onClickTagCounts = (item: LookupNameTagTypeMaintenanceItem) => () => {\r\n browserHistory.push(`/lookupConfiguration/nameTagTypes/${item.description};key=${item.guidId}`);\r\n };\r\n\r\n const onChangeUpdate = (item: LookupNameTagTypeMaintenanceItem, index: number) => (event: React.ChangeEvent) => {\r\n textField = event.target.value;\r\n };\r\n\r\n const onChangeAdd = (event: React.ChangeEvent) => {\r\n textField = event.target.value;\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const DroppableComponent = (onDragEndComponent: (result: DropResult, provided: ResponderProvided) => void) => (props: any) => {\r\n return (\r\n \r\n \r\n {(provided) => {\r\n return (\r\n \r\n {props.children}\r\n {provided.placeholder}\r\n \r\n );\r\n }}\r\n \r\n \r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const DraggableComponent = (item: LookupNameTagTypeMaintenanceItem, index: number) => (props: any) => {\r\n return (\r\n \r\n {(provided, snapshot) => (\r\n \r\n {!!(!item.isDelete && !item.isEdit) && (\r\n <>\r\n \r\n
\r\n \r\n \r\n {item.description}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {!!(item.isDelete && state.isDelete) && (\r\n <>\r\n \r\n Are you sure you want to delete this row?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {!!(item.isEdit && state.isEdit) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n const getDraggableRows = () => {\r\n let filteredItems = state.items;\r\n \r\n if (state.search) {\r\n filteredItems = state.items.filter((item: LookupNameTagTypeMaintenanceItem) => {\r\n return item.description.toLowerCase().indexOf(state.search) >= 0;\r\n });\r\n } \r\n\r\n return (\r\n _.map(filteredItems, (item, index) => {\r\n return (\r\n \r\n );\r\n })\r\n );\r\n };\r\n\r\n return (\r\n
\r\n \r\n {!!loading && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Type\r\n Tags Count\r\n Actions\r\n \r\n \r\n \r\n {!!state.isAdd && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {\r\n getDraggableRows()\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport interface ClientAndContactTagTypeData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n clientAndContactTagType: ClientAndContactTagType[];\r\n}\r\n\r\nexport interface ClientAndContactTagType {\r\n guidId: string;\r\n description: string;\r\n tagEntity: number;\r\n tagsCount: number;\r\n sequence: number;\r\n}\r\n\r\nconst ClientAndContactTagTypesQuery = gql`\r\n query ClientAndContactTagTypes {\r\n lookup {\r\n clientAndContactTagType {\r\n guidId\r\n description\r\n tagEntity\r\n tagsCount\r\n sequence\r\n }\r\n }\r\n }\r\n`;\r\n\r\nconst CreateClientAndContactTagTypeMutation = gql`\r\n mutation CreateClientAndContactTagType($description: String, $sequence: Int) {\r\n createClientAndContactTagType(description: $description, sequence: $sequence)\r\n }\r\n`;\r\n\r\nconst UpdateClientAndContactTagTypeMutation = gql`\r\n mutation UpdateClientAndContactTagType($guidId: String, $description: String) {\r\n updateClientAndContactTagType(guidId: $guidId, description: $description)\r\n }\r\n`;\r\n\r\nconst DeleteClientAndContactTagTypeMutation = gql`\r\n mutation DeleteClientAndContactTagType($guidId: String, $description: String) {\r\n deleteClientAndContactTagType(guidId: $guidId, description: $description)\r\n }\r\n \r\n`;\r\n\r\nconst UpdateClientAndContactTagTypeSequences = gql`\r\n mutation UpdateClientAndContactTagTypeSequences($lookupSequences: [LookupSequence]) {\r\n updateClientAndContactTagTypeSequence(lookupSequences: $lookupSequences)\r\n }\r\n`;\r\n\r\nexport const firmSubscription = gql`\r\n subscription firm {\r\n lookupNotification{\r\n id,\r\n guidId,\r\n lookupDescription,\r\n message,\r\n status\r\n }\r\n }\r\n`;","import { \r\n Chip,\r\n CircularProgress,\r\n createStyles,\r\n IconButton,\r\n InputAdornment,\r\n lighten,\r\n makeStyles, \r\n Paper, \r\n Table, \r\n TableBody, \r\n TableCell, \r\n TableContainer, \r\n TableHead, \r\n TableRow, \r\n TextField, \r\n Theme, \r\n Toolbar,\r\n Tooltip,\r\n Typography\r\n} from '@material-ui/core';\r\nimport React, { useEffect, useState } from 'react';\r\n// tslint:disable-next-line: max-line-length\r\nimport { \r\n DragDropContext, \r\n Draggable, \r\n // DraggableProvided, \r\n // DraggableStateSnapshot, \r\n Droppable, \r\n DropResult, \r\n ResponderProvided \r\n} from 'react-beautiful-dnd';\r\nimport DeleteOutline from '@material-ui/icons/DeleteOutline';\r\nimport Edit from '@material-ui/icons/Edit';\r\nimport AddBoxRoundedIcon from '@material-ui/icons/AddBoxRounded';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport Check from '@material-ui/icons/Check';\r\nimport { mainTheme } from '../../Theme';\r\nimport _ from 'lodash';\r\nimport { useQuery } from 'react-apollo';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { showNotification } from '../../App';\r\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\r\nimport { firmSubscription } from './LookupNameTagTypeMaintenance';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n paper: {\r\n width: '100%',\r\n marginBottom: theme.spacing(2),\r\n position: 'relative'\r\n },\r\n loadingWrapper: {\r\n position: 'absolute',\r\n zIndex: 1,\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n bottom: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: 'rgba(255,255,255, 0.6)',\r\n },\r\n icon: {\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n },\r\n tableCell: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n '&:hover': {\r\n '& .drag-icon': {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n }\r\n }\r\n },\r\n textField: {\r\n minWidth: 200,\r\n maxWidth: '100%',\r\n },\r\n dragIcon: {\r\n marginLeft: '-10px',\r\n marginRight: 10,\r\n color: '#BDBDBD'\r\n },\r\n tableContentWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n }\r\n })\r\n);\r\n\r\nconst useToolbarStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(1),\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n },\r\n highlight:\r\n theme.palette.type === 'light'\r\n ? {\r\n color: theme.palette.secondary.main,\r\n backgroundColor: lighten(theme.palette.secondary.light, 0.85),\r\n }\r\n : {\r\n color: theme.palette.text.primary,\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n title: {\r\n flex: '1 1 100%',\r\n },\r\n icon: {\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n },\r\n rightToolbarWrapper: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n tableTitle: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n tableHeading: {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n chip: {\r\n marginLeft: '8px'\r\n },\r\n })\r\n);\r\n\r\ninterface EnhancedTableToolbarProps {\r\n title: string;\r\n count?: React.ReactNode;\r\n onClickAdd?: () => void;\r\n onSearch?: (search: string) => void;\r\n}\r\n\r\nconst EnhancedTableToolbar = (props: EnhancedTableToolbarProps) => {\r\n\r\n const classes = useToolbarStyles();\r\n\r\n const [search, setSearch] = useState('');\r\n\r\n const handleChange = (event: React.ChangeEvent) => {\r\n \r\n setSearch(event.target.value);\r\n\r\n if (props.onSearch) {\r\n props.onSearch(event.target.value);\r\n }\r\n };\r\n\r\n const clearSearch = () => {\r\n setSearch('');\r\n if (props.onSearch) {\r\n props.onSearch('');\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n {props.title}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n ),\r\n endAdornment: (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }}\r\n onChange={handleChange}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\ninterface LookupMatterFollowUpActionMaintenanceItem extends ActionMessage {\r\n isEdit: boolean;\r\n isDelete: boolean;\r\n}\r\n\r\ninterface LookupMatterFollowUpActionMaintenanceState {\r\n items: LookupMatterFollowUpActionMaintenanceItem[];\r\n isAdd: boolean;\r\n search: string;\r\n isDelete: boolean;\r\n isEdit: boolean;\r\n}\r\n\r\nexport default function LookupMatterFollowUpActionMaintenance() {\r\n\r\n const classes = useStyles();\r\n\r\n const { loading, error, data } = useQuery(LookupActionMessageQuery);\r\n\r\n const [state, setState] = useState({\r\n items: [],\r\n isAdd: false,\r\n search: '',\r\n isEdit: false,\r\n isDelete: false,\r\n });\r\n\r\n useEffect(() => {\r\n if (!error && data && data.lookup ) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n items: data!.lookup.actionMessage.map((value) => {\r\n return { \r\n guidId: value.guidId,\r\n description: value.description,\r\n sequence: value.sequence,\r\n isDelete: false,\r\n isEdit: false\r\n };\r\n }).sort((a, b) => a.sequence < b.sequence ? -1 : a.sequence > b.sequence ? 1 : 0)\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [data, error, loading]);\r\n\r\n useEffect(() => {\r\n \r\n const subscribeFirmObj = subscribeFirm();\r\n\r\n return () => {\r\n subscribeFirmObj.unsubscribe();\r\n };\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const subscribeFirm = () => {\r\n return (\r\n // let subscription =\r\n client\r\n .subscribe({\r\n fetchPolicy: 'no-cache',\r\n query: firmSubscription,\r\n variables: {},\r\n })\r\n .subscribe({\r\n // tslint:disable-next-line:no-any\r\n next(results: any) {\r\n if (results.data.lookupNotification.status) {\r\n\r\n const { lookupNotification } = results.data;\r\n\r\n showNotification('Success', lookupNotification.message, 'info');\r\n\r\n if (lookupNotification.message.includes('created successfully')) {\r\n \r\n setState((prevState) => {\r\n\r\n const tdata = [...prevState.items];\r\n\r\n const temp = tdata[tdata.length - 1];\r\n\r\n tdata[tdata.length - 1] = {\r\n ...temp,\r\n guidId: lookupNotification.guidId\r\n };\r\n\r\n return {\r\n ...prevState,\r\n items: tdata\r\n };\r\n });\r\n }\r\n\r\n } else {\r\n showNotification('Failed', results.data.lookupNotification.message, 'error');\r\n }\r\n },\r\n // tslint:disable-next-line:no-any\r\n error(err: any) {\r\n // tslint:disable-next-line:no-console\r\n console.error(err);\r\n showNotification(null, err, 'error');\r\n },\r\n })\r\n );\r\n };\r\n \r\n let textField = '';\r\n\r\n // itemInputRef.current = getItems(10).map((ref, index) => itemInputRef.current[index] = React.createRef());\r\n\r\n const reorder = (list: LookupMatterFollowUpActionMaintenanceItem[], startIndex: number, endIndex: number) => {\r\n const result = Array.from(list);\r\n const [removed] = result.splice(startIndex, 1);\r\n result.splice(endIndex, 0, removed);\r\n \r\n return result;\r\n };\r\n\r\n const onDragEnd = (result: DropResult, provided: ResponderProvided) => {\r\n // dropped outside the list\r\n if (!result.destination) {\r\n return;\r\n }\r\n \r\n const items = reorder(\r\n state.items,\r\n result.source.index,\r\n result.destination.index\r\n ).map((item: LookupMatterFollowUpActionMaintenanceItem, index: number) => {\r\n return {\r\n ...item,\r\n sequence: index\r\n };\r\n });\r\n\r\n setState((prevState) => {\r\n \r\n client\r\n .mutate({\r\n mutation: UpdateActionMessageSequencesMutation,\r\n variables: {\r\n lookupSequences: items.map((item: LookupMatterFollowUpActionMaintenanceItem) => {\r\n return {\r\n guidId: item.guidId,\r\n sequence: item.sequence\r\n };\r\n })\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to update action message sorting', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to update action message sorting', reason, 'error');\r\n });\r\n\r\n return {\r\n ...prevState,\r\n items\r\n };\r\n });\r\n\r\n };\r\n\r\n // const getListStyle = (isDraggingOver: boolean) => ({\r\n // background: isDraggingOver ? 'lightblue' : 'lightgrey',\r\n // padding: grid,\r\n // width: 250\r\n // });\r\n\r\n // tslint:disable-next-line: no-any\r\n const getItemStyle = (isDragging: boolean, draggableStyle: any) => ({\r\n // styles we need to apply on draggables\r\n ...draggableStyle,\r\n\r\n ...(isDragging && {\r\n background: 'rgb(235,235,235)'\r\n }),\r\n position: 'static',\r\n zIndex: 1\r\n });\r\n\r\n const onClickAdd = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isAdd: true\r\n };\r\n });\r\n };\r\n\r\n const onClickCancel = () => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isAdd: false,\r\n isEdit: false,\r\n isDelete: false,\r\n };\r\n });\r\n };\r\n\r\n const onSearch = (search: string) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n search\r\n };\r\n });\r\n };\r\n\r\n const onEditRowEnable = (item: LookupMatterFollowUpActionMaintenanceItem) => () => {\r\n const items = [...state.items];\r\n \r\n const index = items.indexOf(item);\r\n\r\n items[index].isEdit = true;\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n items,\r\n isEdit: true,\r\n };\r\n });\r\n };\r\n\r\n const onCancelEditRow = (item: LookupMatterFollowUpActionMaintenanceItem) => () => {\r\n // code here..\r\n const items = [...state.items];\r\n \r\n const index = items.indexOf(item);\r\n\r\n items[index].isEdit = false;\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n items,\r\n isEdit: false,\r\n };\r\n });\r\n };\r\n\r\n const onEditRow = (item: LookupMatterFollowUpActionMaintenanceItem, index: number) => () => {\r\n\r\n if (textField) {\r\n\r\n setState((prevState) => {\r\n client\r\n .mutate({\r\n mutation: UpdateActionMessageMutation,\r\n variables: {\r\n guidId: item.guidId,\r\n description: textField,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Update Action Message', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Update Action Message', reason, 'error');\r\n });\r\n\r\n const tdata = [...prevState.items];\r\n tdata[tdata.indexOf(item)].isEdit = false;\r\n tdata[tdata.indexOf(item)].description = textField;\r\n \r\n return { \r\n ...prevState, \r\n data: tdata,\r\n isEdit: false\r\n };\r\n });\r\n }\r\n };\r\n\r\n const onDeleteRowEnable = (item: LookupMatterFollowUpActionMaintenanceItem) => () => {\r\n\r\n setState((prevState) => {\r\n\r\n const items = [...prevState.items];\r\n \r\n const index = items.indexOf(item);\r\n\r\n items[index].isDelete = true;\r\n\r\n return {\r\n ...prevState,\r\n items,\r\n isDelete: true\r\n };\r\n });\r\n };\r\n\r\n const onCancelDeleteRow = (item: LookupMatterFollowUpActionMaintenanceItem) => () => {\r\n // code here..\r\n\r\n setState((prevState) => {\r\n\r\n const items = [...prevState.items];\r\n \r\n const index = items.indexOf(item);\r\n\r\n items[index].isDelete = false;\r\n\r\n return {\r\n ...prevState,\r\n items,\r\n isDelete: false\r\n };\r\n });\r\n };\r\n\r\n const onDeleteRow = (item: LookupMatterFollowUpActionMaintenanceItem) => () => {\r\n \r\n setState((prevState) => {\r\n\r\n client\r\n .mutate({\r\n mutation: DeleteActionMessageMutation,\r\n variables: {\r\n guidId: item.guidId,\r\n description: item.description\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Delete Action Message', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Delete Action Message', reason, 'error');\r\n });\r\n\r\n const tItems = [...prevState.items];\r\n tItems.splice(tItems.indexOf(item), 1);\r\n\r\n return {\r\n ...prevState,\r\n isDelete: false,\r\n items: tItems\r\n };\r\n });\r\n };\r\n\r\n const onAddItem = () => {\r\n \r\n if (textField) {\r\n\r\n setState((prevState) => {\r\n\r\n client\r\n .mutate({\r\n mutation: CreateActionMessageMutation,\r\n variables: {\r\n description: textField,\r\n sequence: prevState.items.length,\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error !== undefined) {\r\n showNotification( 'Failed to Create Action Message', results.data.error, 'error');\r\n }\r\n }\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n showNotification('Failed to Create Action Message', reason, 'error');\r\n });\r\n\r\n const tItems = [...prevState.items];\r\n \r\n tItems.push({\r\n guidId: '',\r\n description: textField,\r\n sequence: prevState.items.length,\r\n isEdit: false,\r\n isDelete: false\r\n });\r\n \r\n return {\r\n ...prevState,\r\n isAdd: false,\r\n items: tItems\r\n };\r\n });\r\n }\r\n \r\n };\r\n\r\n const onChangeUpdate = (item: LookupMatterFollowUpActionMaintenanceItem, index: number) => (event: React.ChangeEvent) => {\r\n textField = event.target.value;\r\n };\r\n\r\n const onChangeAdd = (event: React.ChangeEvent) => {\r\n textField = event.target.value;\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const DroppableComponent = (onDragEndComponent: (result: DropResult, provided: ResponderProvided) => void) => (props: any) => {\r\n return (\r\n \r\n \r\n {(provided) => {\r\n return (\r\n \r\n {props.children}\r\n {provided.placeholder}\r\n \r\n );\r\n }}\r\n \r\n \r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const DraggableComponent = (item: LookupMatterFollowUpActionMaintenanceItem, index: number) => (props: any) => {\r\n return (\r\n \r\n {(provided, snapshot) => (\r\n \r\n {!!(!item.isDelete && !item.isEdit) && (\r\n <>\r\n \r\n
\r\n \r\n
{item.description}
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {!!(item.isDelete && state.isDelete) && (\r\n <>\r\n \r\n Are you sure you want to delete this row?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {!!(item.isEdit && state.isEdit) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n )}\r\n \r\n );\r\n };\r\n\r\n const getDraggableRows = () => {\r\n let filteredItems = state.items;\r\n \r\n if (state.search) {\r\n filteredItems = state.items.filter((item: LookupMatterFollowUpActionMaintenanceItem) => {\r\n return item.description.toLowerCase().indexOf(state.search) >= 0;\r\n });\r\n } \r\n\r\n return (\r\n _.map(filteredItems, (item, index) => {\r\n return (\r\n \r\n );\r\n })\r\n );\r\n };\r\n\r\n return (\r\n
\r\n \r\n {!!loading && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Message\r\n Actions\r\n \r\n \r\n \r\n {!!state.isAdd && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {\r\n getDraggableRows()\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport interface LookupActionMessageData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n actionMessage: ActionMessage[];\r\n}\r\n\r\nexport interface ActionMessage {\r\n guidId: string;\r\n description: string;\r\n sequence: number;\r\n}\r\n\r\nexport const LookupActionMessageQuery = gql`\r\n query LookupActionMessage {\r\n lookup {\r\n actionMessage {\r\n guidId\r\n description\r\n sequence\r\n }\r\n }\r\n }\r\n`;\r\n\r\nconst CreateActionMessageMutation = gql`\r\n mutation CreateActionMessage($description: String, $sequence: Int) {\r\n createActionMessage(description: $description, sequence: $sequence)\r\n }\r\n`;\r\n\r\nconst UpdateActionMessageMutation = gql`\r\n mutation UpdateActionMessage($guidId: String, $description: String, $sequence: Int) {\r\n updateActionMessage(guidId: $guidId, description: $description, sequence: $sequence)\r\n }\r\n`;\r\n\r\nconst DeleteActionMessageMutation = gql`\r\n mutation DeleteActionMessage($guidId: String, $description: String) {\r\n deleteActionMessage(guidId: $guidId, description: $description)\r\n }\r\n`;\r\n\r\nconst UpdateActionMessageSequencesMutation = gql`\r\n mutation UpdateActionMessageSequences($lookupSequences: [LookupSequence]) {\r\n updateActionMessageSequence(lookupSequences: $lookupSequences)\r\n }\r\n`;","import React, { useState, useMemo } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, GetTagProps, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, Chip } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport gql from 'graphql-tag';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { useQuery } from 'react-apollo';\r\n\r\n// const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// removedAvatar: {\r\n// maxWidth: '15px',\r\n// maxHeight: '15px',\r\n// },\r\n// }),\r\n// );\r\n\r\ninterface MatterCountrySelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: CountryAutoCompleteItem | CountryAutoCompleteItem[] | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: CountryAutoCompleteItem | CountryAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties;\r\n disablePortal?: boolean;\r\n variant?: 'standard' | 'filled' | 'outlined';\r\n size?: 'small' | 'medium';\r\n onBlur?: React.FocusEventHandler;\r\n multiple?: boolean;\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface CountryAutoCompleteItem extends IAutoCompleteItem, Country {}\r\n\r\ninterface MatterCountrySelectorState {\r\n data: CountryAutoCompleteItem[];\r\n}\r\n\r\nexport const MatterCountrySelector: React.FC = (props) => {\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n data: [],\r\n });\r\n\r\n const matterCountryQuery = useQuery(CountryQuery, {\r\n variables: {\r\n isApplyMatterAccess: props.isApplyMatterAccess\r\n },\r\n fetchPolicy: 'cache-first'\r\n });\r\n\r\n useMemo(() => {\r\n if (!matterCountryQuery.loading && !matterCountryQuery.error && matterCountryQuery.data && matterCountryQuery.data.lookup && matterCountryQuery.data.lookup.country) {\r\n setState((prevState) => {\r\n const { country } = matterCountryQuery.data!.lookup;\r\n\r\n const items: CountryAutoCompleteItem[] = country.map((cntry: Country) => {\r\n return {\r\n ...cntry,\r\n label: cntry.country,\r\n value: cntry.country,\r\n };\r\n });\r\n return {\r\n ...prevState,\r\n data: items,\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [matterCountryQuery.loading, matterCountryQuery.data, matterCountryQuery.error]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const onRenderTags = (value: CountryAutoCompleteItem[], getTagProps: GetTagProps): React.ReactNode => {\r\n let renderTagsValue = value.map((option: CountryAutoCompleteItem, index: number) => {\r\n let label = option.label;\r\n if (option.label.length > 20) {\r\n label = `${option.label.substring(0, 20)}...`;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return renderTagsValue;\r\n };\r\n\r\n if (props.multiple) {\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n multiple={true}\r\n renderTags={onRenderTags}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport interface MatterCountryParams {\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface MatterCountryData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n country: Country[];\r\n}\r\n\r\nexport interface Country {\r\n id: number;\r\n countryId: number;\r\n country: string;\r\n countryCode: null;\r\n}\r\n\r\nconst CountryQuery = gql`\r\n query country($isApplyMatterAccess: Boolean) {\r\n lookup {\r\n country(isApplyMatterAccess: $isApplyMatterAccess) {\r\n id\r\n countryId\r\n country\r\n countryCode\r\n }\r\n }\r\n }\r\n`;\r\n","import React, { useState, useMemo } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, GetTagProps, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, Chip } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport gql from 'graphql-tag';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { useQuery } from 'react-apollo';\r\n\r\n// const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// removedAvatar: {\r\n// maxWidth: '15px',\r\n// maxHeight: '15px',\r\n// },\r\n// }),\r\n// );\r\n\r\ninterface MatterPropertySelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: MatterPropertyAutoCompleteItem | MatterPropertyAutoCompleteItem[] | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: MatterPropertyAutoCompleteItem | MatterPropertyAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties;\r\n disablePortal?: boolean;\r\n variant?: 'standard' | 'filled' | 'outlined';\r\n size?: 'small' | 'medium';\r\n onBlur?: React.FocusEventHandler;\r\n multiple?: boolean;\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface MatterPropertyAutoCompleteItem extends IAutoCompleteItem, MatterProperty {}\r\n\r\ninterface MatterPropertySelectorState {\r\n data: MatterPropertyAutoCompleteItem[];\r\n}\r\n\r\nexport const MatterPropertySelector: React.FC = (props) => {\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n data: [],\r\n });\r\n\r\n const matterPropertyQuery = useQuery(MatterPropertyQuery, {\r\n variables: {\r\n isApplyMatterAccess: props.isApplyMatterAccess\r\n },\r\n fetchPolicy: 'cache-first'\r\n });\r\n\r\n useMemo(() => {\r\n if (\r\n !matterPropertyQuery.loading &&\r\n !matterPropertyQuery.error &&\r\n matterPropertyQuery.data &&\r\n matterPropertyQuery.data.lookup &&\r\n matterPropertyQuery.data.lookup.matterProperty\r\n ) {\r\n setState((prevState) => {\r\n const { matterProperty } = matterPropertyQuery.data!.lookup; \r\n const items: MatterPropertyAutoCompleteItem[] = matterProperty.map((mProperty: MatterProperty) => {\r\n return {\r\n ...mProperty,\r\n label: mProperty.description,\r\n value: mProperty.description,\r\n };\r\n });\r\n return {\r\n ...prevState,\r\n data: items,\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [matterPropertyQuery.loading, matterPropertyQuery.data, matterPropertyQuery.error]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const onRenderTags = (value: MatterPropertyAutoCompleteItem[], getTagProps: GetTagProps): React.ReactNode => {\r\n let renderTagsValue = value.map((option: MatterPropertyAutoCompleteItem, index: number) => {\r\n let label = option.label;\r\n if (option.label.length > 20) {\r\n label = `${option.label.substring(0, 20)}...`;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return renderTagsValue;\r\n };\r\n\r\n if (props.multiple) {\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n multiple={true}\r\n renderTags={onRenderTags}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport interface MatterPropertyParams {\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface MatterPropertyData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n matterProperty: MatterProperty[];\r\n}\r\n\r\nexport interface MatterProperty {\r\n id: number;\r\n description: string;\r\n}\r\n\r\nconst MatterPropertyQuery = gql`\r\n query MatterProperty($isApplyMatterAccess: Boolean) {\r\n lookup {\r\n matterProperty (isApplyMatterAccess: $isApplyMatterAccess) {\r\n id\r\n description\r\n }\r\n }\r\n }\r\n`;\r\n","import React, { useEffect } from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Button,\r\n Drawer,\r\n Typography,\r\n Paper,\r\n} from '@material-ui/core';\r\nimport { AgGridReact } from '@ag-grid-community/react';\r\nimport { AllModules, GridOptions, GridReadyEvent } from '@ag-grid-enterprise/all-modules';\r\nimport { defaultExcelStyles } from '../MatterSummaryColumns';\r\nimport gql from 'graphql-tag';\r\nimport { useMutation, useQuery } from 'react-apollo';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport moment from 'moment';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { formatNumber } from '../../helpers/ChartHelper';\r\nimport { showNotification } from '../../App';\r\nimport { useCurrencySymbol } from '../../hooks/useCurrencySymbol';\r\nimport { MatterForecastSubscription, MatterForecastSubscriptionData } from '../MatterSummaryRepository';\r\nimport { client } from '../..';\r\nimport { mainTheme } from '../../Theme';\r\nimport { useMatterSummaryContext } from '../MatterSummaryContextProvider';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport { LightTooltip } from '../../helpers/commonHelper';\r\nimport VideoLibraryOutlinedIcon from '@material-ui/icons/VideoLibraryOutlined';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { LearnMoreEnum } from '../../learnMore/LearnMorePage';\r\nimport { FetchResult } from 'apollo-link';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n maxWidth: '1000px',\r\n padding: '15px',\r\n minWidth: '900px',\r\n },\r\n buttonWrapper: {\r\n paddingTop: '10px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n gap: '10px',\r\n },\r\n loaderWrapper: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n agWrapper: {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n gap: '10px',\r\n '& .ag-theme-material': {\r\n flex: 1\r\n },\r\n '& .ag-status-bar': {\r\n border: 'none',\r\n }\r\n },\r\n infoBody: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n gap: '10px',\r\n alignItems: 'flex-start',\r\n },\r\n learnMoreContainer: {\r\n padding: '10px',\r\n },\r\n infoContainer: {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n gap: '5px',\r\n paddingBottom: '10px',\r\n },\r\n infoWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '10px',\r\n fontSize: '14px',\r\n },\r\n infoTitle: {\r\n fontWeight: 'bold',\r\n // color: mainTheme.TemplateColor.Primary,\r\n },\r\n infoValue: {\r\n // color: mainTheme.TemplateColor.Primary,\r\n },\r\n cardContainer: {\r\n display: 'flex',\r\n flexFlow: 'column', \r\n gap: '10px',\r\n },\r\n cardWrapper: {\r\n display: 'flex', \r\n flexFlow: 'row wrap',\r\n alignItems: 'center', \r\n gap: '10px',\r\n flex: 1,\r\n },\r\n card: {\r\n flex: 1,\r\n padding: '25px 15px',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n gap: '2px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n maxWidth: '230px',\r\n height: '100%',\r\n textAlign: 'center',\r\n position: 'relative',\r\n },\r\n cardTitle: {\r\n color: mainTheme.TemplateColor.Primary,\r\n },\r\n cardValue: {\r\n fontSize: '16px',\r\n // fontWeight: 600,\r\n },\r\n cardInfo: {\r\n top: '5px',\r\n right: '5px',\r\n position: 'absolute',\r\n color: 'orange'\r\n },\r\n tooltip: {\r\n fontSize: '14px',\r\n padding: '10px',\r\n fontFamily: 'Nunito, Arial, Helvetica, sans-serif'\r\n }\r\n })\r\n);\r\n\r\ninterface MatterForecastsDrawerProps {\r\n matterId: number;\r\n matterGuid: string;\r\n open?: boolean;\r\n onClose?: () => void;\r\n}\r\n\r\ninterface CellChange extends MatterForecast {\r\n\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const MatterForecastsDrawer: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const history = useHistory();\r\n\r\n const { pageKey, refreshPage } = useMatterSummaryContext();\r\n \r\n const [changes, setChanges] = React.useState([]);\r\n\r\n const [isSubmitting, setIsSubmitting] = React.useState(false);\r\n\r\n const [showConfirm, setShowConfirm] = React.useState(false);\r\n\r\n const currencyQuery = useCurrencySymbol();\r\n\r\n const forecastQuery = useQuery(MatterForecastQuery, {\r\n variables: {\r\n matterId: props.matterId\r\n }\r\n });\r\n\r\n const [forecastMutate, forecastResult] = useMutation(MatterForecastMutation);\r\n\r\n useEffect(() => {\r\n // console.log('hook key', pageKey);\r\n // tslint:disable-next-line: align\r\n }, [pageKey]);\r\n\r\n useEffect(() => {\r\n if (forecastResult.data?.matter.matterForecast.update.status) {\r\n showNotification(null, 'Successfully updated', 'info'); \r\n setIsSubmitting(false);\r\n setChanges([]);\r\n }\r\n if (forecastResult.error) {\r\n showNotification(null, forecastResult.error.message, 'error');\r\n setIsSubmitting(false);\r\n }\r\n // tslint:disable-next-line: align\r\n }, [forecastResult.data, forecastResult.loading, forecastResult.error]);\r\n\r\n // Create Subscription - Ran only once\r\n useEffect(() => {\r\n\r\n const subcribeForecastObj = subscribeToForecast();\r\n\r\n // Cleanup\r\n return () => {\r\n subcribeForecastObj.unsubscribe();\r\n };\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const subscribeToForecast = () => {\r\n return (\r\n client\r\n .subscribe({\r\n fetchPolicy: 'network-only',\r\n query: MatterForecastSubscription,\r\n variables: {},\r\n })\r\n .subscribe({\r\n // tslint:disable-next-line:no-any\r\n next(results: FetchResult) {\r\n if (results.data?.updateMatterForecastNotification.status) {\r\n showNotification('Success', results.data.updateMatterForecastNotification.message, 'info');\r\n forecastQuery.refetch({\r\n matterId: props.matterId\r\n });\r\n\r\n // refresh page\r\n refreshPage();\r\n } else {\r\n\r\n if (!results.data) {\r\n return;\r\n }\r\n \r\n showNotification('Failed', results.data.updateMatterForecastNotification.message, 'error');\r\n }\r\n },\r\n // tslint:disable-next-line:no-any\r\n error(err: any) {\r\n // tslint:disable-next-line:no-console\r\n console.error(err);\r\n showNotification(null, err, 'error');\r\n },\r\n })\r\n );\r\n };\r\n\r\n const onSave = () => {\r\n\r\n setIsSubmitting(true);\r\n\r\n const tempChanges: MatterForecastDetailInput[] = changes.map(change => {\r\n return {\r\n guid: change.guid,\r\n startDate: change.startDate,\r\n periodType: change.periodType,\r\n feesBilled: change.feesBilled,\r\n feesCollected: change.feesCollected,\r\n hours: change.hours,\r\n // matterId: props.matterId\r\n };\r\n });\r\n\r\n forecastMutate({\r\n variables: {\r\n input: {\r\n matterGuid: props.matterGuid,\r\n matterForecasts: tempChanges\r\n }\r\n }\r\n }); \r\n };\r\n\r\n const onCloseConfirm = (agree: boolean) => {\r\n if (agree && props.onClose) {\r\n props.onClose();\r\n }\r\n setShowConfirm(false);\r\n };\r\n\r\n const onClose = () => {\r\n if (changes.length > 0) {\r\n setShowConfirm(true);\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const gridOptions: GridOptions = {\r\n // rowModelType: this.state.isInMemory ? 'clientSide' : 'serverSide',\r\n rowBuffer: 0,\r\n cacheOverflowSize: 5,\r\n maxConcurrentDatasourceRequests: 1,\r\n maxBlocksInCache: 100, // How many blocks to cache in the client.\r\n suppressPropertyNamesCheck: true,\r\n // defaultColDef: {\r\n // sortable: this.state.isInMemory,\r\n // resizable: true,\r\n // filter: this.state.isInMemory,\r\n // },\r\n excelStyles: defaultExcelStyles,\r\n // getContextMenuItems: this.getContextMenuItems,\r\n suppressAggFuncInHeader: true,\r\n groupIncludeTotalFooter: false,\r\n // groupSuppressBlankHeader: true,\r\n rowClass: 'custom-ag-selected',\r\n suppressAutoSize: true,\r\n };\r\n\r\n // const generateRowData = () => {\r\n // const rowData = [];\r\n // const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n \r\n // for (let year = 2023; year <= 2025; year++) {\r\n // for (let month of months) {\r\n // rowData.push({\r\n // month: `${month} ${year}`,\r\n // hours: Math.floor(Math.random() * 100),\r\n // feesBilled: Math.floor(Math.random() * 200),\r\n // feesCollected: Math.floor(Math.random() * 150),\r\n // });\r\n // }\r\n // }\r\n \r\n // return rowData;\r\n // };\r\n\r\n const onGridReady = (params: GridReadyEvent) => {\r\n\r\n const rowData = forecastQuery.data?.matter.forecasts.matterForecast || [];\r\n \r\n params.api.setRowData(forecastQuery.data?.matter.forecasts.matterForecast || []);\r\n \r\n const currentMonthYear = moment().format('YYYY-MM');\r\n\r\n const rowIndex = rowData.findIndex(row => {\r\n const rowYearMonth = moment(row.startDate).format('YYYY-MM');\r\n return rowYearMonth === currentMonthYear;\r\n });\r\n\r\n if (rowIndex !== -1) {\r\n params.api.ensureIndexVisible(rowIndex, 'top');\r\n params.api.setFocusedCell(rowIndex, 'month');\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onCellValueChanged = (params: any) => {\r\n\r\n const existingChangeIndex = changes.findIndex(change => change.startDate === params.data.startDate);\r\n\r\n if (existingChangeIndex !== -1) {\r\n // If a change for the same startDate exists, update it\r\n setChanges(prevChanges => prevChanges.map((change, index) => \r\n index === existingChangeIndex ? params.data : change\r\n ));\r\n } else {\r\n // If no change for the same startDate exists, add a new one\r\n setChanges(prevChanges => [...prevChanges, params.data]);\r\n }\r\n\r\n };\r\n\r\n const onLearnMore = () => {\r\n history.push({\r\n pathname: `learnMore/${LearnMoreEnum[LearnMoreEnum.MatterForecast]}`, \r\n });\r\n };\r\n\r\n const initializeComponent = () => {\r\n if (forecastQuery.loading || currencyQuery.loading) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n } else {\r\n\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const { client, fileNumber, title, financials, forecasts } = forecastQuery.data?.matter || {};\r\n\r\n const symbol = currencyQuery.data?.options.currencySymbol.symbol;\r\n\r\n const feeEstimate = financials ? financials.feeEstimate : 0;\r\n const billedTimeAndFees = financials ? financials.billedTimeAndFees : 0;\r\n const unbilledTimeAndFees = financials ? financials.unbilledTimeAndFees : 0;\r\n const unbilledDisbursements = financials ? financials.unbilledDisbursements : 0;\r\n const { totalFutureFeesBilled, totalFutureFeesCollected, totalFutureHours } = forecasts || {};\r\n \r\n const remianingEstimate = feeEstimate - billedTimeAndFees;\r\n\r\n const isEstimatedFeesRed = billedTimeAndFees > feeEstimate;\r\n\r\n let isRemaningEstimateRed = false;\r\n\r\n let isFeesCollectedRed = false;\r\n \r\n if (totalFutureFeesBilled) {\r\n isRemaningEstimateRed = totalFutureFeesBilled > remianingEstimate;\r\n }\r\n\r\n if (totalFutureFeesCollected && totalFutureFeesBilled) {\r\n isFeesCollectedRed = totalFutureFeesBilled !== totalFutureFeesCollected;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n {title}\r\n \r\n
\r\n
{fileNumber}
\r\n
{client}
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {isEstimatedFeesRed ? (\r\n \r\n \r\n \r\n ) : null}\r\n Estimated Fees\r\n \r\n {`${symbol}${formatNumber(feeEstimate, 0)}`}\r\n \r\n \r\n \r\n Billed Time & Fees\r\n {`${symbol}${formatNumber(billedTimeAndFees, 0)}`}\r\n \r\n \r\n {isRemaningEstimateRed ? (\r\n \r\n \r\n \r\n ) : null}\r\n Remaining Estimate\r\n \r\n {`${symbol}${formatNumber(remianingEstimate >= 0 ? remianingEstimate : 0, 0)}`}\r\n \r\n \r\n \r\n Total Fees Billed Forecast\r\n {`${symbol}${formatNumber(totalFutureFeesBilled || 0, 0)}`}\r\n \r\n
\r\n
\r\n \r\n Unbilled Time & Fees\r\n {`${symbol}${formatNumber(unbilledTimeAndFees, 0)}`}\r\n \r\n \r\n Unbilled Disbursements\r\n {`${symbol}${formatNumber(unbilledDisbursements, 0)}`}\r\n \r\n \r\n Total Hours Forecast\r\n {`${formatNumber(totalFutureHours || 0, 2)}`}\r\n \r\n \r\n {isFeesCollectedRed ? (\r\n \r\n \r\n \r\n ) : null}\r\n Total Fees Collected F'cast\r\n \r\n {`${symbol}${formatNumber(totalFutureFeesCollected || 0, 0)}`}\r\n \r\n \r\n
\r\n
\r\n
\r\n {\r\n const date = new Date(params.value);\r\n return `${date.toLocaleString('default', { month: 'long' })} ${date.getFullYear()}`;\r\n }\r\n },\r\n {\r\n headerName: 'Hours',\r\n field: 'hours',\r\n editable: true,\r\n filter: 'agNumberColumnFilter',\r\n valueParser: params => {\r\n const newValue = Number(params.newValue);\r\n if (isNaN(newValue)) {\r\n return params.oldValue;\r\n } else if (params.newValue >= 744) {\r\n return 744;\r\n } else {\r\n return params.newValue;\r\n }\r\n },\r\n valueFormatter: params => {\r\n if (isNaN(params.value) || params.value === 0) {\r\n return '';\r\n } else {\r\n return `${formatNumber(Number(params.value), 2)}`;\r\n }\r\n }\r\n },\r\n {\r\n headerName: 'Fees Billed',\r\n field: 'feesBilled',\r\n editable: true,\r\n filter: 'agNumberColumnFilter',\r\n valueParser: params => {\r\n const newValue = Number(params.newValue);\r\n if (isNaN(newValue)) {\r\n return params.oldValue;\r\n } else if (params.newValue.length > 9) {\r\n return 999_999_999.99;\r\n } else {\r\n return params.newValue;\r\n }\r\n },\r\n valueFormatter: params => {\r\n if (isNaN(params.value) || params.value === 0) {\r\n return '';\r\n } else {\r\n return `${symbol ?? '$'}${formatNumber(Number(params.value))}`;\r\n }\r\n }\r\n },\r\n {\r\n headerName: 'Fees Collected',\r\n field: 'feesCollected',\r\n editable: true,\r\n filter: 'agNumberColumnFilter',\r\n valueParser: params => {\r\n const newValue = Number(params.newValue);\r\n if (isNaN(newValue)) {\r\n return params.oldValue;\r\n } else if (params.newValue.length > 9) {\r\n return 999_999_999.99;\r\n } else {\r\n return params.newValue;\r\n }\r\n },\r\n valueFormatter: params => {\r\n if (isNaN(params.value) || params.value === 0) {\r\n return '';\r\n } else {\r\n return `${symbol ?? '$'}${formatNumber(Number(params.value))}`;\r\n }\r\n }\r\n }\r\n ]}\r\n />\r\n
\r\n
\r\n \r\n );\r\n }\r\n };\r\n return (\r\n <>\r\n {showConfirm && (\r\n \r\n )}\r\n \r\n {initializeComponent()}\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\ntype MatterForecastParams = {\r\n matterId: number;\r\n};\r\n\r\ntype MatterForecastData = {\r\n matter: Matter;\r\n};\r\n\r\ntype Matter = {\r\n id: number;\r\n matterGuid: string;\r\n fileNumber: string;\r\n acting: string;\r\n actingEmail: string;\r\n responsible: string;\r\n responsibleEmail: string;\r\n client: string;\r\n description: string;\r\n title: string;\r\n completionDate: Date;\r\n financials: Financials;\r\n forecasts: Forecasts;\r\n};\r\n\r\ntype Financials = {\r\n unbilledTimeAndFees: number;\r\n unbilledDisbursements: number;\r\n debtors: number;\r\n trustBalance: number;\r\n billedTimeAndFees: number;\r\n feeEstimate: number;\r\n percentageEstimate: number;\r\n};\r\n\r\ntype Forecasts = {\r\n totalFutureHours: number;\r\n totalFutureFeesBilled: number;\r\n totalFutureFeesCollected: number;\r\n matterForecast: MatterForecast[];\r\n};\r\n\r\ntype MatterForecast = {\r\n guid: string;\r\n matterId: number;\r\n periodType: number;\r\n feesBilled: number;\r\n feesCollected: number;\r\n hours: number;\r\n startDate: Date;\r\n};\r\n\r\nconst MatterForecastQuery = gql`\r\n query matterDetails($matterId: Int!) {\r\n matter(id: $matterId) {\r\n id\r\n matterGuid\r\n fileNumber\r\n acting\r\n actingEmail\r\n responsible\r\n responsibleEmail\r\n client\r\n description\r\n title\r\n completionDate\r\n financials {\r\n unbilledTimeAndFees\r\n unbilledDisbursements\r\n debtors: balanceDue\r\n trustBalance: trustGeneralBalance\r\n billedTimeAndFees\r\n feeEstimate: estimatedCosts\r\n percentageEstimate\r\n }\r\n forecasts{\r\n totalFutureHours\r\n totalFutureFeesBilled\r\n totalFutureFeesCollected\r\n matterForecast{\r\n guid\r\n matterId\r\n periodType\r\n feesBilled\r\n feesCollected\r\n hours\r\n startDate\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\ntype MatterForecastDetailInput = {\r\n guid: string;\r\n startDate: Date;\r\n periodType: number;\r\n feesBilled: number;\r\n feesCollected: number;\r\n hours: number;\r\n // matterId: number;\r\n};\r\n\r\ntype MutationMatterInput = {\r\n matterGuid: string;\r\n matterForecasts: MatterForecastDetailInput[];\r\n};\r\n\r\ntype MutationMatterParams = {\r\n input: MutationMatterInput;\r\n};\r\n\r\ntype MutationMatterData = {\r\n matter: MutationMatter;\r\n};\r\n\r\ntype MutationMatter = {\r\n matterForecast: MutationMatterForecast;\r\n};\r\n\r\ntype MutationMatterForecast = {\r\n update: Update;\r\n};\r\n\r\ntype Update = {\r\n error: null;\r\n status: boolean;\r\n};\r\n\r\nconst MatterForecastMutation = gql`\r\n mutation updateMatterForecast($input: MatterForecastInput) {\r\n matter {\r\n matterForecast {\r\n update(input: $input) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","import { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { useQuery } from 'react-apollo';\r\n\r\nexport const useOtherPartyQuery = (fetchPolicy?: FetchPolicy) => {\r\n const { data, error, loading } = useQuery(OtherPartyTypeQuery, {\r\n fetchPolicy: fetchPolicy\r\n });\r\n\r\n return {\r\n data,\r\n error,\r\n loading,\r\n };\r\n};\r\n\r\nexport interface OtherPartyTypeData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n otherPartyType: OtherPartyType[];\r\n}\r\n\r\nexport interface OtherPartyType {\r\n description: string;\r\n sequence: number;\r\n guidId: string;\r\n}\r\n\r\nexport const OtherPartyTypeQuery = gql`\r\n query otherPartyType{\r\n lookup {\r\n otherPartyType {\r\n description\r\n sequence\r\n guidId\r\n }\r\n }\r\n }\r\n`;","import * as React from 'react';\r\nimport { Query } from 'react-apollo';\r\nimport gql from 'graphql-tag';\r\nimport glamorous from 'glamorous';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { Bar, getElementAtEvent } from 'react-chartjs-2';\r\nimport { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, Scale, Tick, Chart } from 'chart.js';\r\nimport zoomPlugin from 'chartjs-plugin-zoom';\r\nimport { convertStringNumberToNumber, formatNumber, getLabels, getMaxTickLimit, getSuggestedMaxTick } from '../../helpers/ChartHelper';\r\nimport { MatterTerminology } from '../../MatterTerminology';\r\n\r\nChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, zoomPlugin);\r\n\r\nconst BarWrapper = glamorous.div<{ theme?: object }>((props) => ({\r\n position: 'relative',\r\n paddingBottom: '10px',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n height: '100%',\r\n textAlign: 'center',\r\n}));\r\n\r\nconst BarContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n padding: '5px 15px 15px 15px',\r\n // height: '100vh',\r\n minHeight: '300px',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n maxHeight: '400px',\r\n maxWidth: 'auto',\r\n position: 'relative',\r\n [`& .${`titleWrapper`}`]: {\r\n textAlign: 'center',\r\n display: 'inline-block',\r\n width: '100%',\r\n padding: '15px',\r\n [`& .${`title`}`]: {\r\n fontSize: '18px',\r\n fontWeight: 600,\r\n display: 'block',\r\n marginBottom: '15px',\r\n },\r\n [`& .${`value`}`]: {\r\n fontSize: '24px',\r\n fontWeight: 600,\r\n display: 'block',\r\n marginBottom: '15px',\r\n },\r\n [`& .${`secondary-title`}`]: {\r\n fontSize: '16px',\r\n fontWeight: 400,\r\n display: 'block',\r\n marginBottom: '15px',\r\n },\r\n },\r\n}));\r\n\r\nconst LoadWrapper = glamorous.div<{ theme?: object }>((props) => ({\r\n padding: '20px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '100%',\r\n}));\r\n\r\ninterface ChartProps {\r\n getSelectedItem?: (selected: string) => void;\r\n // tslint:disable-next-line: no-any\r\n labels: any;\r\n // tslint:disable-next-line: no-any\r\n data: any;\r\n}\r\n\r\ninterface ChartState {\r\n //\r\n}\r\n\r\nexport default class FinancialByDayChart extends React.Component {\r\n // tslint:disable-next-line: no-any\r\n public chartRef: React.RefObject;\r\n\r\n constructor(props: ChartProps, state: ChartState) {\r\n super(props, state);\r\n this.formatNumber = this.formatNumber.bind(this);\r\n this.onPan = this.onPan.bind(this);\r\n\r\n this.chartRef = React.createRef();\r\n }\r\n\r\n public componentDidMount() {\r\n //\r\n }\r\n\r\n public componentWillUnmount() {\r\n //\r\n }\r\n\r\n public render() {\r\n return (\r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-any */}\r\n query={CurrencySymbol}>\r\n {({\r\n // tslint:disable-next-line: no-shadowed-variable\r\n loading,\r\n error,\r\n data,\r\n }) => {\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const currencySymbol = loading || error ? null : data.options.currencySymbol;\r\n\r\n const symbol = currencySymbol ? currencySymbol.symbol : null;\r\n return (\r\n ) => {\r\n const _data = getElementAtEvent(this.chartRef.current, event);\r\n if (_data.length > 0 && this.props.getSelectedItem) {\r\n const _index = getElementAtEvent(this.chartRef.current, event)[0].index;\r\n\r\n const item = this.props.labels[_index];\r\n\r\n if (this.props.getSelectedItem) {\r\n return this.props.getSelectedItem(item);\r\n }\r\n }\r\n }}\r\n data={{\r\n labels: getLabels(this.props.labels),\r\n datasets: [\r\n {\r\n label: 'label here',\r\n backgroundColor: ['#0078D4', '#28d60d', '#fac43c', '#FF6384'],\r\n borderColor: ['#0078D4', '#28d60d', '#fac43c', '#FF6384'],\r\n borderWidth: 1,\r\n hoverBackgroundColor: ['#0078D4', '#28d60d', '#fac43c', '#FF6384'],\r\n hoverBorderColor: ['#0078D4', '#28d60d', '#fac43c', '#FF6384'],\r\n data: this.props.data,\r\n },\r\n ],\r\n }}\r\n options={{\r\n indexAxis: 'y' as const,\r\n elements: {\r\n bar: {\r\n borderWidth: 2,\r\n },\r\n },\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n scales: {\r\n x: {\r\n // beginAtZero: true,\r\n suggestedMax: getSuggestedMaxTick(this.props.data),\r\n beginAtZero: true,\r\n ticks: {\r\n maxTicksLimit: getMaxTickLimit(this.props.data),\r\n callback: function (this: Scale, tickValue: number, index: number, ticks: Tick[]) {\r\n return `${symbol}${formatNumber(tickValue)}`;\r\n },\r\n },\r\n },\r\n // y: {\r\n // min: 0,\r\n // max: 9 // minimum display\r\n // }\r\n },\r\n plugins: {\r\n legend: {\r\n position: 'bottom' as const,\r\n display: false,\r\n },\r\n title: {\r\n display: true,\r\n text: MatterTerminology.TotalOwing,\r\n },\r\n zoom: {\r\n pan: {\r\n enabled: true,\r\n onPan: this.onPan,\r\n },\r\n zoom: {\r\n wheel: {\r\n enabled: true,\r\n },\r\n },\r\n // limits: {\r\n // y: { min: 0, max: 9 },\r\n // },\r\n },\r\n tooltip: {\r\n callbacks: {\r\n // tslint:disable-next-line: no-any\r\n label: function (context: any) {\r\n const {\r\n // dataIndex,\r\n // label,\r\n formattedValue,\r\n // dataset,\r\n } = context;\r\n\r\n var currentValue = convertStringNumberToNumber(formattedValue);\r\n\r\n return `${symbol}${formatNumber(currentValue)}`;\r\n },\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n );\r\n }}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private formatNumber(value: number) {\r\n return value\r\n .toFixed(0)\r\n .toString()\r\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n }\r\n\r\n private onPan = (context: { chart: Chart }) => {\r\n this.chartRef.current.options.scales.x.min = 0;\r\n this.chartRef.current.update();\r\n }\r\n}\r\n\r\nconst CurrencySymbol = gql`\r\n query CurrencySymbol {\r\n options {\r\n currencySymbol {\r\n symbol\r\n }\r\n }\r\n }\r\n`;\r\n","import * as React from 'react';\r\nimport { Query } from 'react-apollo';\r\nimport gql from 'graphql-tag';\r\nimport glamorous from 'glamorous';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { Bar, getElementAtEvent } from 'react-chartjs-2';\r\nimport { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, Scale, Tick, Chart } from 'chart.js';\r\nimport zoomPlugin from 'chartjs-plugin-zoom';\r\nimport { convertStringNumberToNumber, formatNumber, getLabels, getMaxTickLimit, getSuggestedMaxTick } from '../../helpers/ChartHelper';\r\n\r\nChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, zoomPlugin);\r\n\r\nconst BarWrapper = glamorous.div<{ theme?: object }>((props) => ({\r\n position: 'relative',\r\n paddingBottom: '10px',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n height: '100%',\r\n textAlign: 'center',\r\n}));\r\n\r\nconst BarContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n padding: '5px 15px 15px 15px',\r\n // height: '100vh',\r\n minHeight: '300px',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n maxHeight: '400px',\r\n maxWidth: 'auto',\r\n position: 'relative',\r\n [`& .${`titleWrapper`}`]: {\r\n textAlign: 'center',\r\n display: 'inline-block',\r\n width: '100%',\r\n padding: '15px',\r\n [`& .${`title`}`]: {\r\n fontSize: '18px',\r\n fontWeight: 600,\r\n display: 'block',\r\n marginBottom: '15px',\r\n },\r\n [`& .${`value`}`]: {\r\n fontSize: '24px',\r\n fontWeight: 600,\r\n display: 'block',\r\n marginBottom: '15px',\r\n },\r\n [`& .${`secondary-title`}`]: {\r\n fontSize: '16px',\r\n fontWeight: 400,\r\n display: 'block',\r\n marginBottom: '15px',\r\n },\r\n },\r\n}));\r\n\r\nconst LoadWrapper = glamorous.div<{ theme?: object }>((props) => ({\r\n padding: '20px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '100%',\r\n}));\r\n\r\ninterface ChartProps {\r\n getSelectedItem?: (selected: string) => void;\r\n // tslint:disable-next-line: no-any\r\n labels: any;\r\n // tslint:disable-next-line: no-any\r\n data: any;\r\n}\r\n\r\ninterface ChartState {\r\n //\r\n}\r\n\r\nexport default class EstimateVsBilledFeesChart extends React.Component {\r\n // tslint:disable-next-line: no-any\r\n public chartRef: React.RefObject;\r\n\r\n constructor(props: ChartProps, state: ChartState) {\r\n super(props, state);\r\n this.onPan = this.onPan.bind(this);\r\n\r\n this.chartRef = React.createRef();\r\n }\r\n\r\n public componentDidMount() {\r\n //\r\n }\r\n\r\n public componentWillUnmount() {\r\n //\r\n }\r\n\r\n public render() {\r\n return (\r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-any */}\r\n query={CurrencySymbol}>\r\n {({\r\n // tslint:disable-next-line: no-shadowed-variable\r\n loading,\r\n error,\r\n data,\r\n }) => {\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const currencySymbol = loading || error ? null : data.options.currencySymbol;\r\n\r\n const symbol = currencySymbol ? currencySymbol.symbol : null;\r\n return (\r\n ) => {\r\n const _data = getElementAtEvent(this.chartRef.current, event);\r\n if (_data.length > 0 && this.props.getSelectedItem) {\r\n const _index = getElementAtEvent(this.chartRef.current, event)[0].index;\r\n\r\n const item = this.props.labels[_index];\r\n\r\n if (this.props.getSelectedItem && item !== null) {\r\n return this.props.getSelectedItem(item);\r\n }\r\n }\r\n }}\r\n data={{\r\n labels: getLabels(this.props.labels),\r\n datasets: [\r\n {\r\n label: 'Cost',\r\n backgroundColor: ['#0078D4', '#FE9D17'],\r\n borderColor: ['#0078D4', '#FE9D17'],\r\n borderWidth: 1,\r\n hoverBackgroundColor: ['#0078D4', '#FE9D17'],\r\n hoverBorderColor: ['#0078D4', '#FE9D17'],\r\n data: this.props.data,\r\n },\r\n ],\r\n }}\r\n options={{\r\n indexAxis: 'y' as const,\r\n elements: {\r\n bar: {\r\n borderWidth: 2,\r\n },\r\n },\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n scales: {\r\n x: {\r\n // beginAtZero: true,\r\n suggestedMax: getSuggestedMaxTick(this.props.data),\r\n beginAtZero: true,\r\n ticks: {\r\n maxTicksLimit: getMaxTickLimit(this.props.data),\r\n callback: function (this: Scale, tickValue: number, index: number, ticks: Tick[]) {\r\n return `${symbol}${formatNumber(tickValue)}`;\r\n },\r\n },\r\n },\r\n // y: {\r\n // min: 0,\r\n // max: 9 // minimum display\r\n // }\r\n },\r\n plugins: {\r\n legend: {\r\n position: 'bottom' as const,\r\n display: false,\r\n },\r\n title: {\r\n display: true,\r\n text: `Estimate vs Billed Fees`,\r\n },\r\n zoom: {\r\n pan: {\r\n enabled: false,\r\n onPan: this.onPan,\r\n },\r\n zoom: {\r\n wheel: {\r\n enabled: false,\r\n },\r\n },\r\n // limits: {\r\n // y: { min: 0, max: 9 },\r\n // },\r\n },\r\n tooltip: {\r\n callbacks: {\r\n // tslint:disable-next-line: no-any\r\n label: function (context: any) {\r\n const {\r\n // dataIndex,\r\n // label,\r\n formattedValue,\r\n // dataset,\r\n } = context;\r\n\r\n var currentValue = convertStringNumberToNumber(formattedValue);\r\n\r\n return `${symbol}${formatNumber(currentValue)}`;\r\n },\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n );\r\n }}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private onPan = (context: { chart: Chart }) => {\r\n this.chartRef.current.options.scales.x.min = 0;\r\n this.chartRef.current.update();\r\n }\r\n}\r\n\r\nconst CurrencySymbol = gql`\r\n query CurrencySymbol {\r\n options {\r\n currencySymbol {\r\n symbol\r\n }\r\n }\r\n }\r\n`;\r\n","import * as React from 'react';\r\nimport '../../App.css';\r\n// import { InfoPanel } from '../../components/DataDisplay/InfoPanel';\r\n// import { CurrencyDisplay } from '../../components/DataDisplay/CurrencyDisplay';\r\nimport { CurrencyDisplayStyle } from '../../components/DataDisplay/CurrencyDisplayStyle';\r\n// import { RvLabel } from '../../components/Label/Label';\r\nimport { graphql } from 'react-apollo';\r\nimport gql from 'graphql-tag';\r\nimport { MatterTerminology } from '../../MatterTerminology';\r\nimport { RvLoader } from '../../components/Loader';\r\n// import { RvStringDisplay } from '../../components/DataDisplay/StringDisplay';\r\nimport glamorous from 'glamorous';\r\nimport { Grid } from 'semantic-ui-react';\r\nimport { FormattedCurrency } from '../../components/DataDisplay/FormattedCurrency';\r\n// import { HorizontalBar } from 'react-chartjs-2';\r\nimport { PageNotFound } from '../../components/PageNotFound';\r\nimport moment from 'moment';\r\nimport FinancialByDayChart from './FinancialByDayChart';\r\nimport EstimateVsBilledFeesChart from './EstimateVsBilledFeesChart';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { TranslationTextList } from '../../locales/common';\r\nimport { DateTimeDisplayStyle, FormattedDateTime } from '../../components/DataDisplay/FormattedDateTime';\r\nimport { CurrenciesData } from '../../firmSettingConfiguration/common/Currencies';\r\nimport { formatNumber } from '../../helpers/ChartHelper';\r\n\r\n// tslint:disable-next-line:no-any\r\nconst FinancialWrapper = glamorous.div<{ theme?: any }>((props) => ({\r\n padding: '23px 32px 0 32px',\r\n [`& .${`ValueData`}`]: {\r\n // width: '110px !important',\r\n textAlign: 'right',\r\n display: 'flex !important',\r\n justifyContent: 'flex-end',\r\n color: props.theme.BrandColors.TextPrimary,\r\n opacity: props.theme.Opacity.cat3,\r\n fontFamily: props.theme.Font.Main,\r\n fontSize: props.theme.FontSize.PX.size1,\r\n fontWeight: props.theme.FontWeight.FiveHundred,\r\n letterSpacing: '1px',\r\n lineHeight: props.theme.LineHeight.Large,\r\n [`& .${`rvlabel`}`]: {\r\n paddingRight: '10px'\r\n }\r\n },\r\n [`& .${`ValueData span`}`]: {\r\n paddingRight: '10px'\r\n },\r\n [`& .${`list`}`]: {\r\n [`& .${`item`}`]: {\r\n height: '40px',\r\n display: 'inline-block',\r\n width: '100%',\r\n ':nth-child(even)': {\r\n backgroundColor: props.theme.NeutralColors.LightGrey1\r\n },\r\n [`& .${`grid`}`]: {\r\n alignItems: 'center',\r\n }\r\n },\r\n },\r\n [`& .${`title`}`]: {\r\n color: props.theme.BrandColors.TextPrimary,\r\n fontSize: props.theme.FontSize.PX.size4 + ' !important',\r\n lineHeight: props.theme.LineHeight.Regular2,\r\n },\r\n [`& .${`rvlabel`}`]: {\r\n fontWeight: props.theme.FontWeight.FiveHundred,\r\n letterSpacing: '1px',\r\n lineHeight: props.theme.LineHeight.Large,\r\n color: props.theme.BrandColors.TextPrimary,\r\n }\r\n}));\r\n\r\n// tslint:disable-next-line:no-any\r\n// const DebtorDueDiv = glamorous.div<{theme?: any}> ((props) => ({\r\n// [`& .${`rvlabel`}`] : {\r\n// color: props.theme.BrandColors.TextPrimary,\t\r\n// fontSize: props.theme.FontSize.PX.size4 + ' !important',\t\r\n// lineHeight: props.theme.LineHeight.Regular2,\r\n// }\r\n// }));\r\n\r\n// const LastGrid = glamorous(Grid) ({\r\n// [`& .${`LabelData`}`] : {\r\n// paddingLeft: '25px !important'\r\n// },\r\n// });\r\n\r\n// tslint:disable-next-line:no-any\r\nconst Card = glamorous.div<{ theme?: any }>((props) => ({\r\n display: 'flex',\r\n flexFlow: 'column wrap',\r\n minHeight: '85px',\r\n background: '#fff',\r\n width: '100%',\r\n boxShadow: '1px 1px 1px 1px rgba(0,0,0,0.3)',\r\n borderRadius: '5px',\r\n marginBottom: '15px',\r\n padding: '15px 10px',\r\n fontFamily: 'Nunito',\r\n [`& .${`label`}`]: {\r\n fontWeight: '400',\r\n marginBottom: '15px',\r\n color: props.theme.BrandColors.TemplatePrimary,\r\n },\r\n\r\n [`& .${`value`}`]: {\r\n textAlign: 'center',\r\n fontWeight: '400',\r\n fontSize: '2rem',\r\n },\r\n [`& .${`value-string`}`]: {\r\n textAlign: 'center',\r\n fontWeight: '400',\r\n fontSize: '1.5rem',\r\n },\r\n}));\r\n\r\n// tslint:disable-next-line:no-any\r\nconst FormattedCurrencyWrapper = glamorous.div<{ theme?: any }>((props) => ({\r\n fontSize: '2rem',\r\n fontWeight: 400,\r\n textAlign: 'center'\r\n}));\r\n\r\n// tslint:disable-next-line:no-any\r\n// const Divider = glamorous.div<{ theme?: any }>((props) => ({\r\n// content: ' ',\r\n// height: '1px',\r\n// borderBottom: '1px solid ' + props.theme.NeutralColors.LightBlue1,\r\n// marginTop: '22px'\r\n// }));\r\n\r\ninterface ExternalProps {\r\n id: string;\r\n sourceSystem: string;\r\n isInternalUser: boolean;\r\n}\r\n\r\nexport interface MatterFinancialsData {\r\n estimatedCosts: number;\r\n billedTimeAndFees: number;\r\n billedDisbursements: number;\r\n unbilledTimeAndFees: number;\r\n unbilledDisbursements: number;\r\n balanceDue: number;\r\n trustDeposits: number;\r\n trustWithdrawals: number;\r\n trustGeneralBalance: number;\r\n trustControlledMoneyBalance: number;\r\n trustInvestmentBalance: number;\r\n billingMethod: string;\r\n costAgreementReceived: string;\r\n agedDebtorCurrent: number;\r\n agedDebtor30Days: number;\r\n agedDebtor60Days: number;\r\n agedDebtor90Days: number;\r\n lastTrustTransactionDate: Date;\r\n lastTrustTransactionType: string;\r\n foreignCurrency: string;\r\n foreignCurrencyBilledTimeAndFees: number;\r\n foreignCurrencyBalanceDue: number;\r\n foreignCurrencyUnbilledTimeAndFees: number;\r\n foreignCurrencyBilledDisbursements: number;\r\n foreignCurrencyUnbilledDisbursements: number;\r\n}\r\n\r\nexport interface MatterData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n matter: Matter;\r\n}\r\n\r\nexport interface Matter {\r\n title: string;\r\n client: string;\r\n nameID: Number;\r\n financials?: MatterFinancialsData;\r\n id: Number;\r\n}\r\n\r\ninterface MatterFinancialsInfoProps extends ExternalProps, WithTranslation {\r\n data: MatterData;\r\n currencySymbol: string;\r\n homeCountry: string;\r\n}\r\n\r\n// tslint:disable-next-line:no-any\r\nclass RvMatterFinancialsInfo extends React.Component {\r\n constructor(props: MatterFinancialsInfoProps) {\r\n super(props);\r\n\r\n this.getCurrencySymbol = this.getCurrencySymbol.bind(this);\r\n this.formatCurrencyAndForeignCurrency = this.formatCurrencyAndForeignCurrency.bind(this);\r\n }\r\n\r\n render() {\r\n let displayZero = 0.000000000001;\r\n\r\n // tslint:disable-next-line: no-console\r\n console.log('symbol', this.props.currencySymbol);\r\n\r\n if (this.props.data.loading) {\r\n return ;\r\n }\r\n\r\n var financials = this.props.data.matter.financials;\r\n if (!financials) {\r\n return ;\r\n }\r\n\r\n let foreignCurrencySybmol = this.props.currencySymbol;\r\n let showForeignCurrencyAmount = false;\r\n let showBilledTimeAndFees = true;\r\n let showBalanceDue = true;\r\n let showUnbilledTimeAndFees = true;\r\n let showBilledDisbursements = true;\r\n let showUnbilledDisbursements = true;\r\n\r\n let billedTimeAndFeesCurrencySymbol = this.getCurrencySymbol(this.props.currencySymbol);\r\n let balanceDueCurrencySymbol = this.getCurrencySymbol(this.props.currencySymbol);\r\n let unbilledTimeAndFeesCurrencySymbol = this.getCurrencySymbol(this.props.currencySymbol);\r\n let billedDisbursementsCurrencySymbol = this.getCurrencySymbol(this.props.currencySymbol);\r\n\r\n let unbilledDisbursementsCurrencySymbol = this.getCurrencySymbol(this.props.currencySymbol);\r\n\r\n if (this.props.sourceSystem.toLocaleLowerCase() === 'inprotech') {\r\n // foreignCurrencySybmol = financials.foreignCurrency ? financials.foreignCurrency : this.props.currencySymbol;\r\n\r\n if (financials && financials.foreignCurrency) {\r\n // var sybmol = CurrenciesData.find(currencyItem => currencyItem.currency === financials?.foreignCurrency);\r\n var sybmol = CurrenciesData.find((currencyItem) => currencyItem.currency.toLowerCase().includes(financials!.foreignCurrency.toLowerCase()));\r\n\r\n if (sybmol) {\r\n foreignCurrencySybmol = sybmol.currency;\r\n }\r\n\r\n showForeignCurrencyAmount = true;\r\n }\r\n\r\n if (this.props.isInternalUser === false) {\r\n // For External User - Prioritise the Foreign Currency display only\r\n\r\n if (showForeignCurrencyAmount) {\r\n showBilledTimeAndFees = false;\r\n showBalanceDue = false;\r\n showUnbilledTimeAndFees = false;\r\n showBilledDisbursements = false;\r\n showUnbilledDisbursements = false;\r\n }\r\n }\r\n }\r\n\r\n var costAgreementReceivedColor: string | undefined = financials.costAgreementReceived ? undefined : '#C0C0C0';\r\n\r\n var billedTimeAndFees = financials.billedTimeAndFees ? financials.billedTimeAndFees : 0;\r\n var unbilledTimeAndFees = financials.unbilledTimeAndFees ? financials.unbilledTimeAndFees : 0;\r\n var estimatedFees = financials.estimatedCosts ? financials.estimatedCosts : 0;\r\n\r\n var estimatedFeesColour: string | undefined = billedTimeAndFees + unbilledTimeAndFees > estimatedFees ? 'red' : undefined;\r\n // let vm = this;\r\n\r\n const { t } = this.props as {\r\n t: (key: keyof TranslationTextList) => string;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{MatterTerminology.EstimatedCosts}
\r\n
\r\n \r\n
\r\n
\r\n \r\n
{MatterTerminology.Billed + ' ' + MatterTerminology.BilledTimeAndFees}
\r\n
\r\n \r\n {this.formatCurrencyAndForeignCurrency({\r\n showLocalCurrency: showBilledTimeAndFees,\r\n localCurrency: billedTimeAndFeesCurrencySymbol,\r\n localValue: financials.billedTimeAndFees,\r\n showForeignCurrency: showForeignCurrencyAmount,\r\n foreignCurrency: foreignCurrencySybmol,\r\n foreignValue: financials.foreignCurrencyBilledTimeAndFees\r\n })}\r\n \r\n {/* {showBilledTimeAndFees ? (\r\n \r\n ) : (\r\n ''\r\n )}\r\n {showForeignCurrencyAmount ? (\r\n <>\r\n {showBilledTimeAndFees ? / : ''}\r\n \r\n \r\n ) : (\r\n ''\r\n )} */}\r\n
\r\n
\r\n \r\n
{MatterTerminology.TotalOwing}
\r\n
\r\n \r\n {this.formatCurrencyAndForeignCurrency({\r\n showLocalCurrency: showBalanceDue,\r\n localCurrency: balanceDueCurrencySymbol,\r\n localValue: financials.balanceDue,\r\n showForeignCurrency: showForeignCurrencyAmount,\r\n foreignCurrency: foreignCurrencySybmol,\r\n foreignValue: financials.foreignCurrencyBalanceDue\r\n })}\r\n \r\n {/* {showBalanceDue ? (\r\n \r\n ) : (\r\n ''\r\n )}\r\n\r\n {showForeignCurrencyAmount ? (\r\n <>\r\n {showBalanceDue ? / : ''}\r\n \r\n \r\n ) : (\r\n ''\r\n )} */}\r\n
\r\n
\r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterWIPInformation) && (\r\n \r\n
\r\n {\r\n // tslint:disable-next-line:max-line-length\r\n MatterTerminology.Unbilled + ' ' + MatterTerminology.UnbilledTimeAndFees\r\n }\r\n
\r\n
\r\n \r\n {this.formatCurrencyAndForeignCurrency({\r\n showLocalCurrency: showUnbilledTimeAndFees,\r\n localCurrency: unbilledTimeAndFeesCurrencySymbol,\r\n localValue: financials.unbilledTimeAndFees,\r\n showForeignCurrency: showForeignCurrencyAmount,\r\n foreignCurrency: foreignCurrencySybmol,\r\n foreignValue: financials.foreignCurrencyUnbilledTimeAndFees\r\n })}\r\n \r\n {/* {showUnbilledTimeAndFees ? (\r\n \r\n ) : (\r\n ''\r\n )}\r\n {showForeignCurrencyAmount ? (\r\n <>\r\n {showUnbilledTimeAndFees ? / : ''}\r\n \r\n \r\n ) : (\r\n ''\r\n )} */}\r\n
\r\n
\r\n )}\r\n {!showForeignCurrencyAmount ? (\r\n \r\n
{MatterTerminology.BillingMethod}
\r\n
{financials.billingMethod}
\r\n
\r\n ) : null}\r\n\r\n {financials.lastTrustTransactionDate ? (\r\n \r\n
\r\n {t(`Last ${this.props.homeCountry.toLowerCase() === 'au' ? 'Trust' : 'Client Account'} Transaction Date`)}\r\n
\r\n
\r\n \r\n
\r\n
\r\n ) : null}\r\n
\r\n \r\n \r\n
{MatterTerminology.CostAgreementReceived}
\r\n
\r\n {\r\n // tslint:disable-next-line:max-line-length\r\n financials.costAgreementReceived ? moment(financials.costAgreementReceived).format('d MMM YYYY') : null\r\n }\r\n
\r\n
\r\n \r\n
{MatterTerminology.Billed + ' ' + MatterTerminology.Disbursements}
\r\n
\r\n \r\n {this.formatCurrencyAndForeignCurrency({\r\n showLocalCurrency: showBilledDisbursements,\r\n localCurrency: billedDisbursementsCurrencySymbol,\r\n localValue: financials.billedDisbursements,\r\n showForeignCurrency: showForeignCurrencyAmount,\r\n foreignCurrency: foreignCurrencySybmol,\r\n foreignValue: financials.foreignCurrencyBilledDisbursements\r\n })}\r\n \r\n {/* {\r\n showBilledDisbursements ? (\r\n \r\n )\r\n : ''\r\n }\r\n \r\n {\r\n showForeignCurrencyAmount ? ( \r\n <>\r\n {showBilledDisbursements ? / : ''}\r\n \r\n \r\n )\r\n :\r\n ''\r\n } */}\r\n
\r\n
\r\n \r\n
{t('Trust Balance')}
\r\n
\r\n \r\n
\r\n
\r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterWIPInformation) && (\r\n \r\n
{MatterTerminology.Unbilled + ' ' + MatterTerminology.Disbursements}
\r\n
\r\n \r\n {this.formatCurrencyAndForeignCurrency({\r\n showLocalCurrency: showUnbilledDisbursements,\r\n localCurrency: unbilledDisbursementsCurrencySymbol,\r\n localValue: financials.unbilledDisbursements,\r\n showForeignCurrency: showForeignCurrencyAmount,\r\n foreignCurrency: foreignCurrencySybmol,\r\n foreignValue: financials.foreignCurrencyUnbilledDisbursements\r\n })}\r\n \r\n {/* {showUnbilledDisbursements ? (\r\n \r\n ) : (\r\n ''\r\n )}\r\n\r\n {showForeignCurrencyAmount ? (\r\n <>\r\n {showUnbilledDisbursements ? / : ''}\r\n \r\n \r\n ) : (\r\n ''\r\n )} */}\r\n
\r\n
\r\n )}\r\n {!showForeignCurrencyAmount ? (\r\n \r\n
{MatterTerminology.TrustControlledMoneyBalance}
\r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n ''\r\n )}\r\n\r\n {financials.lastTrustTransactionType ? (\r\n \r\n
{`Last ${this.props.homeCountry.toLowerCase() === 'au' ? 'Trust' : 'Client Account'} Transaction Type`}
\r\n
{financials.lastTrustTransactionType}
\r\n
\r\n ) : null}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {financials.trustControlledMoneyBalance !== 0 ?\r\n : null}\r\n {financials.trustInvestmentBalance !== 0 ?\r\n : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {financials.billingMethod ?\r\n : null}\r\n {financials.costAgreementReceived ?\r\n : null}\r\n\r\n \r\n \r\n */}\r\n
\r\n );\r\n }\r\n\r\n private getCurrencySymbol(currency: string) {\r\n return CurrenciesData.find((currencyItem) => currencyItem.currency.toLowerCase().includes(currency.toLowerCase()))?.symbol;\r\n }\r\n\r\n private formatCurrencyAndForeignCurrency(input: {\r\n showLocalCurrency: boolean;\r\n localCurrency: string | undefined;\r\n localValue: number;\r\n showForeignCurrency: boolean;\r\n foreignCurrency: string;\r\n foreignValue: number;\r\n }) {\r\n const { foreignCurrency, foreignValue, localCurrency, localValue, showForeignCurrency, showLocalCurrency } = input;\r\n \r\n if (showLocalCurrency && localValue > 0 && showForeignCurrency && foreignValue > 0) {\r\n return `${localCurrency}${formatNumber(localValue)}/${foreignCurrency}${formatNumber(foreignValue)}`;\r\n }\r\n\r\n if ((showLocalCurrency && localValue > 0 && showForeignCurrency && foreignValue === 0) || (showLocalCurrency && localValue > 0 && !showForeignCurrency)) {\r\n return `${localCurrency}${formatNumber(localValue)}`;\r\n }\r\n\r\n if ((!showLocalCurrency && localValue === 0 && showForeignCurrency && foreignValue > 0) || (!showLocalCurrency && showForeignCurrency && foreignValue > 0)) {\r\n return `${foreignCurrency}${formatNumber(foreignValue)}`;\r\n }\r\n\r\n if (!showLocalCurrency && localValue === 0 && !showForeignCurrency && foreignValue === 0) {\r\n return `${localCurrency}${formatNumber(localValue)}`;\r\n }\r\n\r\n if ((!showLocalCurrency && localValue > 0 && showForeignCurrency && foreignValue === 0)) {\r\n return `${localCurrency}${formatNumber(localValue)}`;\r\n }\r\n\r\n if ((!showLocalCurrency && showForeignCurrency && foreignValue === 0) || (showLocalCurrency && showForeignCurrency && localValue === 0 && foreignValue === 0)) {\r\n return `${localCurrency}0`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n\r\nexport const FinancialsInfoData = gql`query FinancialsInfoData($id: Int!){\r\n matter(id: $id) {\r\n title,\r\n client,\r\n nameID,\r\n id,\r\n financials { \r\n estimatedCosts\r\n billedTimeAndFees\r\n billedDisbursements\r\n unbilledTimeAndFees\r\n unbilledDisbursements\r\n balanceDue\r\n trustDeposits\r\n trustWithdrawals\r\n trustGeneralBalance\r\n trustControlledMoneyBalance\r\n trustInvestmentBalance\r\n billingMethod\r\n costAgreementReceived\r\n agedDebtorCurrent\r\n agedDebtor30Days\r\n agedDebtor60Days\r\n agedDebtor90Days\r\n lastTrustTransactionDate\r\n \tlastTrustTransactionType\r\n foreignCurrency\r\n foreignCurrencyBilledTimeAndFees\r\n foreignCurrencyBalanceDue\r\n foreignCurrencyUnbilledTimeAndFees\r\n foreignCurrencyBilledDisbursements\r\n foreignCurrencyUnbilledDisbursements\r\n } \r\n }\r\n}`;\r\n\r\n// tslint:disable-next-line:no-any\r\nexport const FinancialsInfo = withTranslation()(graphql\r\n (FinancialsInfoData, {\r\n options: ({ id }) => ({ variables: { id: id } })\r\n })\r\n (RvMatterFinancialsInfo));","import { makeStyles } from '@material-ui/core';\r\nimport { mainTheme } from '../../Theme';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n root: {\r\n '& .MuiSvgIcon-root': {\r\n color: '#5173FF'\r\n },\r\n '& .MuiTypography-h6': {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n\r\n '& .MuiTable-root': {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .MuiTableCell-root': {\r\n '& .MuiIconButton-colorInherit': {\r\n color: '#5173FF !important'\r\n },\r\n },\r\n '& thead.MuiTableHead-root': {\r\n display: 'flex',\r\n flex: 1,\r\n '& tr.MuiTableRow-head': {\r\n display: 'flex',\r\n flex: 1,\r\n alignItems: 'stretch',\r\n '& th.MuiTableCell-root': {\r\n padding: '0 10px',\r\n }\r\n },\r\n '& th.MuiTableCell-paddingNone': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 'auto !important',\r\n },\r\n '& th.MuiTableCell-paddingCheckbox': {\r\n width: 'auto !important',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minWidth: '100px',\r\n },\r\n '& th.MuiTableCell-alignLeft': {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: 'auto !important'\r\n },\r\n },\r\n '& tbody.MuiTableBody-root': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& tr.MuiTableRow-root': {\r\n display: 'flex',\r\n flex: 1,\r\n alignItems: 'stretch',\r\n height: 'auto !important',\r\n },\r\n '& .MuiTableCell-root': {\r\n width: '100%',\r\n padding: '0 10px',\r\n '& .Mui-disabled .check-button': {\r\n color: 'rgba(0, 0, 0, 0.26) !important'\r\n },\r\n '& .check-button': {\r\n color: '#5173FF'\r\n },\r\n '& .icon-button-color': {\r\n color: '#5173FF'\r\n }\r\n },\r\n '& tr.MuiTableRow-root[mode=\"add\"]': {\r\n '& .MuiTableCell-root': {\r\n padding: '10px'\r\n }\r\n },\r\n '& td.MuiTableCell-paddingNone': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 'auto !important',\r\n },\r\n '& .MuiTableCell-alignLeft': {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n }\r\n },\r\n },\r\n '& .Mui-checked': {\r\n '& .MuiSvgIcon-root': {\r\n fill: mainTheme.BrandColors.TemplatePrimary,\r\n }\r\n }\r\n },\r\n icon: {\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n avatar: {\r\n textTransform: 'uppercase',\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n highlight: {\r\n backgroundColor: 'transparent',\r\n },\r\n actions: {\r\n '& .MuiSvgIcon-root': {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n }\r\n },\r\n dialogBox: {\r\n minWidth: '400px',\r\n },\r\n breadcrumbs: {\r\n \r\n },\r\n breadcrumbsTitle: {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n tableHeading: {\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n totalAvatar: {\r\n width: '24px',\r\n height: '24px',\r\n margin: '0 8px',\r\n fontSize: '14px',\r\n },\r\n customToolbar: {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n totalWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: '0 8px 0 24px',\r\n },\r\n tableTitle: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n },\r\n tableAvatar: {\r\n width: theme.spacing(3),\r\n height: theme.spacing(3),\r\n },\r\n chip: {\r\n marginLeft: '8px'\r\n },\r\n chips: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n breadcrumbsWrapper: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n requiredText: {\r\n width: '100%',\r\n color: 'grey',\r\n padding: '0 15px',\r\n }, \r\n personIcons: {\r\n color: '#5173FF'\r\n },\r\n isActive: {\r\n color: 'green'\r\n },\r\n customRoot: {\r\n '& .MuiTableBody-root': {\r\n '& .MuiTableRow-root': {\r\n '& td:last-child': {\r\n '& > div': {\r\n display: 'flex',\r\n flexFlow: 'row-reverse',\r\n }\r\n }\r\n }\r\n }\r\n },\r\n checkIcon: {\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n margin: '0 9px',\r\n },\r\n chipRoot: {\r\n margin: '5px 2px',\r\n height: 'auto'\r\n },\r\n chipLabel: {\r\n whiteSpace: 'pre-wrap',\r\n paddingTop: '5px',\r\n paddingBottom: '5px',\r\n },\r\n expandedRoot: {\r\n maxWidth: '1200px !important'\r\n },\r\n}));","import React, { useState } from 'react';\r\nimport { MatterManagementSummary, \r\n fetchCurrencyData, CurrencyOptionData } from './MatterManagementRepository';\r\nimport { WriteOffWip } from './dialogs/WriteOffWipDialog';\r\nimport { MatterSummaryHeader } from './steps/reviewMatters/ReviewMattersStep';\r\nimport _ from 'lodash';\r\nimport { WriteOffDebtor } from './dialogs/WriteOffDebtorsDialog';\r\nimport { BillTheMatter } from './dialogs/BillTheMatterDialog';\r\nimport { TransferTrustToPayInvoice } from './dialogs/TransferTustToPayInvoiceDialog';\r\nimport { ArchiveMatter } from './dialogs/ArchiveMatterDialog';\r\nimport { CloseMatter } from './dialogs/CloseMatterDialog';\r\nimport { RowSelectedEvent } from '@ag-grid-community/core';\r\nimport { Guid } from 'guid-typescript';\r\nimport { showNotification } from '../App';\r\n\r\nexport const MatterManagementContext = React.createContext>({});\r\n\r\nexport interface MatterManagementTypes {\r\n batchGuidId: string;\r\n contextState: ContextState;\r\n matterSummaryHeader: MatterSummaryHeader;\r\n selectedMatter: MatterManagementSummary;\r\n matterTasks: MatterTask[];\r\n currentMatterTask: MatterTask;\r\n menuDisable: ContextMenuDisable[];\r\n // processedTaskCount: number;\r\n currencyData: CurrencyDetails;\r\n currentSummaryViewSelectionId: number;\r\n \r\n setBatchGuidId: React.Dispatch>;\r\n // setProcessedTaskCount: React.Dispatch>;\r\n setMatterSummaryHeader: React.Dispatch>;\r\n setSelectedMatter: React.Dispatch>;\r\n setCurrentMatterTask: React.Dispatch>;\r\n setMatterTasks: React.Dispatch>; \r\n setCurrentSummaryViewSelectionId: React.Dispatch>;\r\n\r\n onMatterSelected(matter: MatterManagementSummary, event: RowSelectedEvent): void;\r\n onWriteOffWipSave(values: WriteOffWip): void; \r\n onWriteOffDebtorsSave(values: WriteOffDebtor): void;\r\n onBillTheMatterSave(values: BillTheMatter): void; \r\n onTransferTustToPlayInvoiceSave(values: TransferTrustToPayInvoice): void; \r\n onArchiveMatterSave(values: ArchiveMatter): void; \r\n onCloseMatterSave(values: CloseMatter): void; \r\n\r\n onWriteOffWipOpen(): void; \r\n onWriteOffWipClosed(): void; \r\n onWriteOffDebtorsOpen(): void;\r\n onWriteOffDebtorsClosed(): void; \r\n onBillTheMatterOpen(): void;\r\n onBillTheMatterClosed(): void; \r\n onTransferTrustToPayInvoiceOpen(): void; \r\n onTransferTrustToPayInvoiceClosed(): void; \r\n onArchiveMatterOpen(): void; \r\n onArchiveMatterClosed(): void; \r\n onCloseMatterOpen(): void; \r\n onCloseMatterClosed(): void;\r\n\r\n onDebtorsExists(data: MatterManagementSummary): boolean;\r\n onUnBilledFeesExists(data: MatterManagementSummary): boolean;\r\n onUnBilledDisbursementsExists(data: MatterManagementSummary): boolean;\r\n onTrustExists(data: MatterManagementSummary): boolean;\r\n\r\n onHandleTextChange(event: React.ChangeEvent): void;\r\n onHandleTextChangeNumeric(name: string, value?: number): void;\r\n onHandleCheckBoxChange(event: React.ChangeEvent, matterId: number, matterGuidId: string): void;\r\n getTextBoxDisabled(matterId: number, value?: number | string): boolean;\r\n getFieldDisabled(matterId: number, field: string): boolean;\r\n calculateMatterSummaryHeader(): void;\r\n hasTasks(matterId: number): boolean;\r\n\r\n getIsCloseDisabled(matterId?: number, currentTasks?: MatterTask, selectedMatter?: MatterManagementSummary): boolean;\r\n getIsCloseDisabledForFeeWriteOffDialog(matterId: number, writeOffFee?: number, writeOffDisb?: number): boolean;\r\n getIsCloseDisabledForFeeWriteOffDebtorDialog(matterId: number, writeOffDebtors?: number): boolean;\r\n\r\n getWriteOffWipFee(matterId: number): number | undefined | string;\r\n getWriteOffWipDisb(matterId: number): number | undefined | string;\r\n getWriteOffWipDebtors(matterId: number): number | undefined | string;\r\n getBillFees(matterId: number): number | undefined | string | string;\r\n getBillDisb(matterId: number): number | undefined | string;\r\n getApplyTrust(matterId: number): number | undefined | string;\r\n getTransferTrust(matterId: number): number | undefined | string;\r\n getTransferInvoice(matterId: number): string | undefined;\r\n getIsClosed(matterId: number): boolean | undefined;\r\n getIsArchived(matterId: number): boolean | undefined; \r\n getTrustMaxValue(matterId: number, trustBalance: number, field: string): number;\r\n fetchCurrencyDetails(): void;\r\n}\r\n\r\nexport interface MatterTask {\r\n matterId?: number;\r\n matterGuid?: string;\r\n matterData?: MatterManagementSummary;\r\n writeOffWipTask?: {\r\n isSaved: boolean;\r\n fees?: number;\r\n disbursements?: number;\r\n isCloseMatterAfterWriteOff?: boolean; \r\n comments?: string\r\n };\r\n writeOffDebtorsTask?: {\r\n isSaved: boolean;\r\n debtors?: number;\r\n isCloseMatterAfterWriteOff?: boolean;\r\n comments?: string;\r\n }; \r\n billMatterTask?: {\r\n isSaved: boolean;\r\n fees?: number;\r\n disbursements?: number;\r\n applyTrust?: number;\r\n writeOffFees?: number;\r\n writeOffdisbursements?: number;\r\n comments?: string;\r\n };\r\n transferTrustToPayInvoiceTask?: {\r\n isSaved: boolean;\r\n transfer?: number;\r\n invoiceNumber?: string;\r\n comments?: string;\r\n };\r\n archiveMatterTask?: {\r\n isSaved: boolean;\r\n isArchived?: boolean;\r\n comments?: string;\r\n };\r\n closeMatterTask?: {\r\n isSaved: boolean;\r\n isCloseMatter?: boolean;\r\n comments?: string;\r\n };\r\n}\r\n\r\n// Type to be used to disable fields in Task Dialogs\r\nexport interface FieldDisable {\r\n matterId: number;\r\n isWriteOffFeeDisabled?: boolean;\r\n isWriteOffDisbursementsDisabled?: boolean;\r\n isWriteOffCloseDisabled?: boolean;\r\n\r\n isWriteOffDebtorsCloseDisabled?: boolean;\r\n\r\n isBillMatterWriteOffFeeDisabled?: boolean;\r\n isBillMatterWriteOffDisbDisabled?: boolean;\r\n}\r\n\r\nexport interface ContextMenuDisable {\r\n matterId?: number;\r\n isWriteOffWipTaskDisabled?: boolean;\r\n isWriteOffDebtorsTaskDisabled?: boolean; \r\n isBillMatterTaskDisabled?: boolean; \r\n isTransferTrustToPayInvoiceTaskDisabled?: boolean;\r\n isCloseMatterTaskDisabled?: boolean;\r\n isArchiveMatterTaskDisabled?: boolean;\r\n} \r\n\r\nexport interface SelectedMatterAmounts {\r\n unBilledFees: number;\r\n unBilledDisbs: number;\r\n debtors: number;\r\n trustBalance: number;\r\n}\r\n\r\nexport interface CurrencyDetails {\r\n currencySymbol: string;\r\n currency: string;\r\n}\r\n\r\ninterface ContextProps {}\r\n\r\ninterface ContextState {\r\n isWriteOffWipOpen: boolean;\r\n isWriteOffDebtorsOpen: boolean;\r\n isBillTheMatterOpen: boolean;\r\n isTransferTrustToPayInvoiceOpen: boolean;\r\n isArchiveMatterOpen: boolean;\r\n isCloseMatterOpen: boolean;\r\n}\r\n\r\nexport const MatterManagementContextProvider: React.FC = (props) => { \r\n // batchGuidId is for the entire process.\r\n const [batchGuidId, setBatchGuidId] = useState(Guid.create().toString());\r\n\r\n const [currencyData, setCurrencyData] = useState();\r\n\r\n // To keep count of how many tasks processed\r\n // const [processedTaskCount, setProcessedTaskCount] = useState(0);\r\n\r\n const [contextState, setContextState] = useState({\r\n isWriteOffWipOpen: false,\r\n isWriteOffDebtorsOpen: false,\r\n isBillTheMatterOpen: false,\r\n isTransferTrustToPayInvoiceOpen: false,\r\n isArchiveMatterOpen: false,\r\n isCloseMatterOpen: false\r\n });\r\n\r\n const [currentSummaryViewSelectionId, setCurrentSummaryViewSelectionId] = useState();\r\n\r\n // Header Count state\r\n const [matterSummaryHeader, setMatterSummaryHeader] = useState({\r\n mattersDisplayed: 0,\r\n mattersToProcess: 0,\r\n tasksToProcess: 0\r\n });\r\n \r\n // Selected Matter Row from the View\r\n const [selectedMatter, setSelectedMatter] = useState();\r\n\r\n // Collection of Tasks by Matter\r\n const [matterTasks, setMatterTasks] = useState([]);\r\n\r\n // Selected Matter's Tasks\r\n const [currentMatterTask, setCurrentMatterTask] = useState();\r\n\r\n const [menuDisable, setMenuDisable] = useState([]);\r\n\r\n const [fieldDisable, setFieldDisable] = useState([]);\r\n\r\n const fetchCurrencyDetails = () => {\r\n if (currencyData === undefined) {\r\n fetchCurrencyData(false,\r\n (data: CurrencyOptionData) => {\r\n handleCurrencyFetch(data);\r\n }, \r\n (reason) => {\r\n showNotification('Failed to Fetch App User Settings', reason, 'error'); \r\n });\r\n }\r\n };\r\n\r\n const handleCurrencyFetch = (data: CurrencyOptionData) => {\r\n if (data && !data.loading && data.options) {\r\n if (data.options.currencySymbol && data.options.localCurrency) {\r\n setCurrencyData({\r\n currency: data.options.localCurrency.currency,\r\n currencySymbol: data.options.currencySymbol.symbol\r\n });\r\n }\r\n }\r\n };\r\n\r\n const onWriteOffWipOpen = () => {\r\n setContextState({\r\n ...contextState,\r\n isWriteOffWipOpen: true\r\n });\r\n };\r\n\r\n const onWriteOffWipClosed = () => {\r\n setContextState({\r\n ...contextState,\r\n isWriteOffWipOpen: false\r\n });\r\n };\r\n\r\n const onWriteOffDebtorsOpen = () => {\r\n setContextState({\r\n ...contextState,\r\n isWriteOffDebtorsOpen: true\r\n });\r\n };\r\n\r\n const onWriteOffDebtorsClosed = () => {\r\n setContextState({\r\n ...contextState,\r\n isWriteOffDebtorsOpen: false\r\n });\r\n };\r\n\r\n const onBillTheMatterOpen = () => {\r\n setContextState({\r\n ...contextState,\r\n isBillTheMatterOpen: true\r\n });\r\n };\r\n\r\n const onBillTheMatterClosed = () => {\r\n setContextState({\r\n ...contextState,\r\n isBillTheMatterOpen: false\r\n });\r\n };\r\n\r\n const onTransferTrustToPayInvoiceOpen = () => {\r\n setContextState({\r\n ...contextState,\r\n isTransferTrustToPayInvoiceOpen: true\r\n });\r\n };\r\n\r\n const onTransferTrustToPayInvoiceClosed = () => {\r\n setContextState({\r\n ...contextState,\r\n isTransferTrustToPayInvoiceOpen: false\r\n });\r\n };\r\n\r\n const onArchiveMatterOpen = () => {\r\n setContextState({\r\n ...contextState,\r\n isArchiveMatterOpen: true\r\n });\r\n };\r\n\r\n const onArchiveMatterClosed = () => {\r\n setContextState({\r\n ...contextState,\r\n isArchiveMatterOpen: false\r\n });\r\n };\r\n\r\n const onCloseMatterOpen = () => {\r\n setContextState({\r\n ...contextState,\r\n isCloseMatterOpen: true\r\n });\r\n };\r\n\r\n const onCloseMatterClosed = () => {\r\n setContextState({\r\n ...contextState,\r\n isCloseMatterOpen: false\r\n });\r\n };\r\n \r\n const onMatterSelected = (matter: MatterManagementSummary, event: RowSelectedEvent) => {\r\n const matterTask = matterTasks.filter((item: MatterTask) => {\r\n return item.matterId === matter.id;\r\n });\r\n\r\n const tasks = matterTask.length === 0 ? undefined : matterTask[0];\r\n\r\n // New row selection, so set it as new\r\n setCurrentMatterTask({\r\n matterId: matter.id,\r\n matterGuid: matter.matterGuidId,\r\n writeOffDebtorsTask: tasks ? tasks.writeOffDebtorsTask : undefined,\r\n writeOffWipTask: tasks ? tasks.writeOffWipTask : undefined,\r\n billMatterTask: tasks ? tasks.billMatterTask : undefined,\r\n transferTrustToPayInvoiceTask: tasks ? tasks.transferTrustToPayInvoiceTask : undefined,\r\n archiveMatterTask: tasks ? tasks.archiveMatterTask : undefined,\r\n closeMatterTask: tasks ? tasks.closeMatterTask : undefined,\r\n matterData: matter\r\n });\r\n\r\n setSelectedMatter(matter);\r\n };\r\n\r\n const onWriteOffWipSave = (values: WriteOffWip) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('onWriteOffWipSave');\r\n\r\n const currentTask = {\r\n ...currentMatterTask,\r\n writeOffWipTask: {\r\n isSaved: true,\r\n fees: values.fees,\r\n disbursements: values.disbursements,\r\n isCloseMatterAfterWriteOff: values.isCloseMatterAfterWriteOff,\r\n comments: values.comments\r\n }\r\n };\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n handleDisableContextMenu(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTask);\r\n updateMatterTasks(currentTask);\r\n };\r\n\r\n const onWriteOffDebtorsSave = (values: WriteOffDebtor) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('onWriteOffDebtorsSave');\r\n\r\n const currentTask: MatterTask = {\r\n ...currentMatterTask,\r\n writeOffDebtorsTask: {\r\n isSaved: true,\r\n debtors: values.debtors,\r\n isCloseMatterAfterWriteOff: values.isCloseMatterAfterWriteOff,\r\n comments: values.comments\r\n }\r\n };\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n handleDisableContextMenu(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTask);\r\n updateMatterTasks(currentTask);\r\n };\r\n\r\n const onBillTheMatterSave = (values: BillTheMatter) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('onBillTheMatterSave');\r\n\r\n const currentTask: MatterTask = {\r\n ...currentMatterTask,\r\n billMatterTask: {\r\n isSaved: true,\r\n fees: values.fees,\r\n disbursements: values.disbursements,\r\n applyTrust: values.applyTrust,\r\n writeOffFees: values.writeOffFees,\r\n writeOffdisbursements: values.writeOffdisbursements,\r\n comments: values.comments\r\n }\r\n };\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n handleDisableContextMenu(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTask);\r\n updateMatterTasks(currentTask);\r\n };\r\n\r\n const onTransferTustToPlayInvoiceSave = (values: TransferTrustToPayInvoice) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('onTransferTustToPlayInvoiceSave');\r\n\r\n const currentTask: MatterTask = {\r\n ...currentMatterTask,\r\n transferTrustToPayInvoiceTask: {\r\n isSaved: true,\r\n transfer: values.transfer,\r\n invoiceNumber: values.invoiceNumber,\r\n comments: values.comments\r\n }\r\n };\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n handleDisableContextMenu(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTask);\r\n updateMatterTasks(currentTask);\r\n };\r\n\r\n const onArchiveMatterSave = (values: ArchiveMatter) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('onArchiveMatterSave');\r\n\r\n const currentTask: MatterTask = {\r\n ...currentMatterTask,\r\n archiveMatterTask: {\r\n isSaved: true,\r\n isArchived: values.isArchiveMatter,\r\n comments: values.comments\r\n }\r\n };\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n handleDisableContextMenu(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTask);\r\n updateMatterTasks(currentTask);\r\n };\r\n\r\n const onCloseMatterSave = (values: CloseMatter) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('onCloseMatterSave');\r\n\r\n const currentTask: MatterTask = {\r\n ...currentMatterTask,\r\n closeMatterTask: {\r\n isSaved: true,\r\n isCloseMatter: values.isCloseMatter,\r\n comments: values.comments\r\n }\r\n };\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n handleDisableContextMenu(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTask);\r\n updateMatterTasks(currentTask);\r\n };\r\n\r\n const updateMatterTasks = (currentTask?: MatterTask) => {\r\n // Check whether tasks for this matter already exists\r\n let selectedMatterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === currentTask?.matterId;\r\n });\r\n\r\n if (selectedMatterTask) {\r\n // Remove and Add\r\n const newMatterTasks = _.remove(matterTasks, (item: MatterTask) => {return item.matterId !== currentTask?.matterId; });\r\n\r\n if (currentTask && ( currentTask.writeOffWipTask || currentTask.writeOffDebtorsTask || currentTask.billMatterTask\r\n || currentTask.transferTrustToPayInvoiceTask || currentTask.archiveMatterTask || currentTask.closeMatterTask) ) {\r\n newMatterTasks.push(currentTask); \r\n } \r\n\r\n setMatterTasks(newMatterTasks); \r\n onMatterTasksChanged(newMatterTasks);\r\n\r\n // tslint:disable-next-line: no-console\r\n // console.log(batchGuidId, newMatterTasks);\r\n } else if (currentTask && ( currentTask.writeOffWipTask || currentTask.writeOffDebtorsTask || currentTask.billMatterTask\r\n || currentTask.transferTrustToPayInvoiceTask || currentTask.archiveMatterTask || currentTask.closeMatterTask) ) {\r\n \r\n matterTasks.push(currentTask); \r\n \r\n setMatterTasks(matterTasks); \r\n onMatterTasksChanged(matterTasks);\r\n\r\n // tslint:disable-next-line: no-console\r\n // console.log(batchGuidId, matterTasks);\r\n } else {\r\n // Remove any MatterTasks without MatterId\r\n const newMatterTasks = _.remove(matterTasks, (item: MatterTask) => {\r\n return item.matterId !== undefined;\r\n });\r\n\r\n setMatterTasks(newMatterTasks); \r\n onMatterTasksChanged(newMatterTasks);\r\n\r\n // tslint:disable-next-line: no-console\r\n // console.log(batchGuidId, newMatterTasks);\r\n }\r\n };\r\n\r\n const onMatterTasksChanged = (tasks: MatterTask[]) => {\r\n let mattersToProcess = 0;\r\n let tasksToProcess = 0;\r\n \r\n tasks.forEach(task => {\r\n mattersToProcess = mattersToProcess + 1;\r\n\r\n if (task.writeOffWipTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.writeOffDebtorsTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.billMatterTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.transferTrustToPayInvoiceTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.archiveMatterTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.closeMatterTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n } \r\n });\r\n\r\n setMatterSummaryHeader({\r\n ...matterSummaryHeader,\r\n mattersToProcess: mattersToProcess,\r\n tasksToProcess: tasksToProcess\r\n });\r\n };\r\n\r\n const calculateMatterSummaryHeader = () => {\r\n let mattersToProcess = 0;\r\n let tasksToProcess = 0;\r\n \r\n matterTasks.forEach(task => {\r\n mattersToProcess = mattersToProcess + 1;\r\n\r\n if (task.writeOffWipTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.writeOffDebtorsTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.billMatterTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.transferTrustToPayInvoiceTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.archiveMatterTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n }\r\n if (task.closeMatterTask) {\r\n tasksToProcess = tasksToProcess + 1;\r\n } \r\n });\r\n\r\n setMatterSummaryHeader({\r\n ...matterSummaryHeader,\r\n mattersToProcess: mattersToProcess,\r\n tasksToProcess: tasksToProcess\r\n });\r\n };\r\n\r\n const hasTasks = (matterId: number): boolean => {\r\n const matterTask = matterTasks.filter((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask && matterTask.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n const onUnBilledFeesExists = (data: MatterManagementSummary) => {\r\n if (data) {\r\n if (data.unbilledFees) {\r\n return data.unbilledFees > 0;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n } \r\n };\r\n\r\n const onUnBilledDisbursementsExists = (data: MatterManagementSummary) => {\r\n if (data) {\r\n if (data.unbilledDisbursements) {\r\n return data.unbilledDisbursements > 0;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n } \r\n };\r\n\r\n const onDebtorsExists = (data: MatterManagementSummary) => {\r\n if (data) {\r\n if (data.debtors) {\r\n return data.debtors > 0;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n } \r\n };\r\n\r\n const onTrustExists = (data: MatterManagementSummary) => {\r\n if (data) {\r\n if (data.trustBalance) {\r\n return data.trustBalance > 0;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n } \r\n };\r\n\r\n const onHandleTextChange = (event: React.ChangeEvent) => {\r\n // Update currentMatterTask\r\n // Update MatterTasks\r\n let currentTask: MatterTask = { ...currentMatterTask };\r\n\r\n // const writeOffWipTask = currentMatterTask?.writeOffWipTask;\r\n // const writeOffDebtorTask = currentMatterTask?.writeOffDebtorsTask;\r\n // const billMatterTask = currentMatterTask?.billMatterTask;\r\n const transferTrustMatterTask = currentMatterTask?.transferTrustToPayInvoiceTask;\r\n\r\n // if (event.currentTarget.name === 'writeOffWipFee') {\r\n // const fees = event.currentTarget.value && event.currentTarget.value.length > 0 ? Number(event.currentTarget.value) : undefined;\r\n \r\n // currentTask = {\r\n // ...currentMatterTask,\r\n // writeOffWipTask: {\r\n // isSaved: true,\r\n // fees: fees,\r\n // disbursements: writeOffWipTask?.disbursements,\r\n // isCloseMatterAfterWriteOff: getIsCloseDisabledForFeeWriteOffDialog(currentMatterTask?.matterId, fees) === true\r\n // ? undefined\r\n // : writeOffWipTask?.isCloseMatterAfterWriteOff,\r\n // comments: writeOffWipTask?.comments\r\n // }\r\n // }; \r\n \r\n // } else if (event.currentTarget.name === 'writeOffWipDisb') {\r\n // const disb = event.currentTarget.value && event.currentTarget.value.length > 0 ? Number(event.currentTarget.value) : undefined;\r\n\r\n // currentTask = {\r\n // ...currentMatterTask,\r\n // writeOffWipTask: {\r\n // isSaved: true,\r\n // fees: writeOffWipTask?.fees,\r\n // disbursements: disb,\r\n // isCloseMatterAfterWriteOff: writeOffWipTask?.isCloseMatterAfterWriteOff,\r\n // comments: writeOffWipTask?.comments\r\n // }\r\n // };\r\n // } else if (event.currentTarget.name === 'writeOffWipDebtors') {\r\n // const debtors = event.currentTarget.value && event.currentTarget.value.length > 0 ? Number(event.currentTarget.value) : undefined;\r\n \r\n // currentTask = {\r\n // ...currentMatterTask,\r\n // writeOffDebtorsTask: {\r\n // isSaved: true,\r\n // debtors: debtors,\r\n // isCloseMatterAfterWriteOff: writeOffDebtorTask?.isCloseMatterAfterWriteOff,\r\n // comments: writeOffDebtorTask?.comments\r\n // }\r\n // };\r\n // } else if (event.currentTarget.name === 'billFees') {\r\n // const billFee = event.currentTarget.value && event.currentTarget.value.length > 0 ? Number(event.currentTarget.value) : undefined;\r\n \r\n // currentTask = {\r\n // ...currentMatterTask,\r\n // billMatterTask: {\r\n // isSaved: true,\r\n // fees: billFee,\r\n // disbursements: billMatterTask?.disbursements,\r\n // applyTrust: billMatterTask?.applyTrust,\r\n // writeOffFees: billMatterTask?.writeOffFees,\r\n // writeOffdisbursements: billMatterTask?.writeOffdisbursements,\r\n // comments: billMatterTask?.comments\r\n // }\r\n // };\r\n // } else if (event.currentTarget.name === 'billDisb') {\r\n // const billDisb = event.currentTarget.value && event.currentTarget.value.length > 0 ? Number(event.currentTarget.value) : undefined;\r\n\r\n // currentTask = {\r\n // ...currentMatterTask,\r\n // billMatterTask: {\r\n // isSaved: true,\r\n // fees: billMatterTask?.fees,\r\n // disbursements: billDisb,\r\n // applyTrust: billMatterTask?.applyTrust,\r\n // writeOffFees: billMatterTask?.writeOffFees,\r\n // writeOffdisbursements: billMatterTask?.writeOffdisbursements,\r\n // comments: billMatterTask?.comments\r\n // }\r\n // };\r\n // } else if (event.currentTarget.name === 'applyTrust') {\r\n // const applyTrust = event.currentTarget.value && event.currentTarget.value.length > 0 ? Number(event.currentTarget.value) : undefined;\r\n \r\n // currentTask = {\r\n // ...currentMatterTask,\r\n // billMatterTask: {\r\n // isSaved: true,\r\n // fees: billMatterTask?.fees,\r\n // disbursements: billMatterTask?.disbursements,\r\n // applyTrust: applyTrust,\r\n // writeOffFees: billMatterTask?.writeOffFees,\r\n // writeOffdisbursements: billMatterTask?.writeOffdisbursements,\r\n // comments: billMatterTask?.comments\r\n // }\r\n // };\r\n // } else if (event.currentTarget.name === 'transferTrust') {\r\n // tslint:disable-next-line: max-line-length\r\n // const transferTrust = event.currentTarget.value && event.currentTarget.value.length > 0 ? Number(event.currentTarget.value) : undefined;\r\n \r\n // currentTask = {\r\n // ...currentMatterTask,\r\n // transferTrustToPayInvoiceTask: {\r\n // isSaved: true,\r\n // transfer: transferTrust,\r\n // invoiceNumber: transferTrustMatterTask?.invoiceNumber, \r\n // comments: billMatterTask?.comments\r\n // }\r\n // };\r\n // } else \r\n if (event.currentTarget.name === 'transferInvoice') {\r\n const invoiceNumber = event.currentTarget.value && event.currentTarget.value.length > 0 ? event.currentTarget.value : undefined;\r\n \r\n currentTask = {\r\n ...currentMatterTask,\r\n transferTrustToPayInvoiceTask: {\r\n isSaved: true,\r\n transfer: transferTrustMatterTask?.transfer,\r\n invoiceNumber: invoiceNumber, \r\n comments: transferTrustMatterTask?.comments\r\n }\r\n };\r\n }\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n // handleDisableContextMenu(currentTaskNew);\r\n currentTaskNew = handleUpdateCloseValuesInTasks(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTaskNew);\r\n updateMatterTasks(currentTaskNew); \r\n };\r\n\r\n const onHandleTextChangeNumeric = (name: string, value?: number) => {\r\n // Update currentMatterTask\r\n // Update MatterTasks\r\n let currentTask: MatterTask = { ...currentMatterTask };\r\n\r\n const writeOffWipTask = currentMatterTask?.writeOffWipTask;\r\n const writeOffDebtorTask = currentMatterTask?.writeOffDebtorsTask;\r\n const billMatterTask = currentMatterTask?.billMatterTask;\r\n const transferTrustMatterTask = currentMatterTask?.transferTrustToPayInvoiceTask;\r\n\r\n if (name === 'writeOffWipFee') {\r\n const fees = value && value > 0 ? Number(value) : undefined;\r\n\r\n if (billMatterTask) {\r\n currentTask = {\r\n ...currentMatterTask,\r\n billMatterTask: {\r\n isSaved: true,\r\n fees: billMatterTask?.fees,\r\n disbursements: billMatterTask?.disbursements,\r\n applyTrust: billMatterTask?.applyTrust,\r\n writeOffFees: fees,\r\n writeOffdisbursements: billMatterTask?.writeOffdisbursements,\r\n comments: billMatterTask?.comments\r\n }\r\n };\r\n } else {\r\n currentTask = {\r\n ...currentMatterTask,\r\n writeOffWipTask: {\r\n isSaved: true,\r\n fees: fees,\r\n disbursements: writeOffWipTask?.disbursements,\r\n isCloseMatterAfterWriteOff: getIsCloseDisabledForFeeWriteOffDialog(currentMatterTask?.matterId, fees) === true\r\n ? undefined\r\n : writeOffWipTask?.isCloseMatterAfterWriteOff,\r\n comments: writeOffWipTask?.comments\r\n }\r\n }; \r\n } \r\n } else if (name === 'writeOffWipDisb') {\r\n const disb = value && value > 0 ? Number(value) : undefined;\r\n\r\n if (billMatterTask) {\r\n currentTask = {\r\n ...currentMatterTask,\r\n billMatterTask: {\r\n isSaved: true,\r\n fees: billMatterTask?.fees,\r\n disbursements: billMatterTask?.disbursements,\r\n applyTrust: billMatterTask?.applyTrust,\r\n writeOffFees: billMatterTask?.writeOffFees,\r\n writeOffdisbursements: disb,\r\n comments: billMatterTask?.comments\r\n }\r\n };\r\n } else {\r\n currentTask = {\r\n ...currentMatterTask,\r\n writeOffWipTask: {\r\n isSaved: true,\r\n fees: writeOffWipTask?.fees,\r\n disbursements: disb,\r\n isCloseMatterAfterWriteOff: writeOffWipTask?.isCloseMatterAfterWriteOff,\r\n comments: writeOffWipTask?.comments\r\n }\r\n };\r\n }\r\n \r\n } else if (name === 'writeOffWipDebtors') {\r\n const debtors = value && value > 0 ? Number(value) : undefined;\r\n \r\n currentTask = {\r\n ...currentMatterTask,\r\n writeOffDebtorsTask: {\r\n isSaved: true,\r\n debtors: debtors,\r\n isCloseMatterAfterWriteOff: writeOffDebtorTask?.isCloseMatterAfterWriteOff,\r\n comments: writeOffDebtorTask?.comments\r\n }\r\n };\r\n } else if (name === 'billFees') {\r\n const billFee = value && value > 0 ? Number(value) : undefined;\r\n \r\n currentTask = {\r\n ...currentMatterTask,\r\n billMatterTask: {\r\n isSaved: true,\r\n fees: billFee,\r\n disbursements: billMatterTask?.disbursements,\r\n applyTrust: billMatterTask?.applyTrust,\r\n writeOffFees: billMatterTask?.writeOffFees,\r\n writeOffdisbursements: billMatterTask?.writeOffdisbursements,\r\n comments: billMatterTask?.comments\r\n }\r\n };\r\n } else if (name === 'billDisb') {\r\n const billDisb = value && value > 0 ? Number(value) : undefined;\r\n\r\n currentTask = {\r\n ...currentMatterTask,\r\n billMatterTask: {\r\n isSaved: true,\r\n fees: billMatterTask?.fees,\r\n disbursements: billDisb,\r\n applyTrust: billMatterTask?.applyTrust,\r\n writeOffFees: billMatterTask?.writeOffFees,\r\n writeOffdisbursements: billMatterTask?.writeOffdisbursements,\r\n comments: billMatterTask?.comments\r\n }\r\n };\r\n } else if (name === 'applyTrust') {\r\n const applyTrust = value && value > 0 ? Number(value) : undefined;\r\n \r\n currentTask = {\r\n ...currentMatterTask,\r\n billMatterTask: {\r\n isSaved: true,\r\n fees: billMatterTask?.fees,\r\n disbursements: billMatterTask?.disbursements,\r\n applyTrust: applyTrust,\r\n writeOffFees: billMatterTask?.writeOffFees,\r\n writeOffdisbursements: billMatterTask?.writeOffdisbursements,\r\n comments: billMatterTask?.comments\r\n }\r\n };\r\n } else if (name === 'transferTrust') {\r\n const transferTrust = value && value > 0 ? Number(value) : undefined;\r\n \r\n currentTask = {\r\n ...currentMatterTask,\r\n transferTrustToPayInvoiceTask: {\r\n isSaved: true,\r\n transfer: transferTrust,\r\n invoiceNumber: transferTrustMatterTask?.invoiceNumber, \r\n comments: billMatterTask?.comments\r\n }\r\n };\r\n }\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n // handleDisableContextMenu(currentTaskNew);\r\n currentTaskNew = handleUpdateCloseValuesInTasks(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTaskNew);\r\n updateMatterTasks(currentTaskNew); \r\n };\r\n\r\n // If close should be disabled, then remove close values from all the available tasks\r\n const handleUpdateCloseValuesInTasks = (currentTask?: MatterTask): MatterTask| undefined => {\r\n if (currentTask) {\r\n let isCloseDisabled = getIsCloseDisabled(currentTask.matterId, currentTask);\r\n\r\n if (isCloseDisabled) {\r\n if (currentTask.writeOffWipTask) {\r\n currentTask.writeOffWipTask.isCloseMatterAfterWriteOff = undefined;\r\n }\r\n if (currentTask.writeOffDebtorsTask) {\r\n currentTask.writeOffDebtorsTask.isCloseMatterAfterWriteOff = undefined;\r\n }\r\n if (currentTask.closeMatterTask) {\r\n currentTask.closeMatterTask = undefined;\r\n }\r\n }\r\n }\r\n\r\n return currentTask;\r\n };\r\n\r\n const onHandleCheckBoxChange = (event: React.FormEvent, matterId: number, matterGuidId: string) => {\r\n // Checkbox event if firing before the row selection. So the current Matter Task is not available\r\n let currentTask: MatterTask | undefined = { ...currentMatterTask };\r\n\r\n if (currentTask.matterId === undefined || (currentTask.matterId !== undefined && currentTask.matterId !== matterId) ) {\r\n currentTask = undefined;\r\n\r\n // If there are tasks saved against the same matterId, use them\r\n const newMatterTasks = _.find(matterTasks, (item: MatterTask) => {return item.matterId === matterId; });\r\n \r\n if (newMatterTasks) {\r\n currentTask = newMatterTasks;\r\n }\r\n }\r\n\r\n if (event?.currentTarget.name === 'isCloseMatter') {\r\n const isClosed = event?.currentTarget.checked;\r\n const closeMatterTask = currentTask?.closeMatterTask;\r\n const writeOffWipTask = currentTask?.writeOffWipTask;\r\n const writeOffWipDebtorTask = currentTask?.writeOffDebtorsTask;\r\n let isCurrentTaskSaved = false;\r\n\r\n if (closeMatterTask === undefined && writeOffWipTask === undefined && writeOffWipDebtorTask === undefined) {\r\n currentTask = {\r\n ...currentTask,\r\n matterId: matterId,\r\n matterGuid: matterGuidId,\r\n closeMatterTask: {\r\n isSaved: true,\r\n isCloseMatter: isClosed,\r\n comments: undefined\r\n }\r\n };\r\n\r\n isCurrentTaskSaved = true;\r\n }\r\n \r\n if (!isCurrentTaskSaved) {\r\n if (closeMatterTask && closeMatterTask.isCloseMatter) {\r\n currentTask = {\r\n ...currentTask,\r\n matterId: matterId,\r\n matterGuid: matterGuidId,\r\n closeMatterTask: {\r\n isSaved: true,\r\n isCloseMatter: isClosed,\r\n comments: closeMatterTask.comments\r\n }\r\n };\r\n } else {\r\n // Check if we have values in either WIP/ WIP Debtor tasks\r\n let isWriteOffFeeClose: boolean | undefined = undefined;\r\n if (writeOffWipTask?.isCloseMatterAfterWriteOff) {\r\n isWriteOffFeeClose = true;\r\n }\r\n\r\n if (writeOffWipDebtorTask?.isCloseMatterAfterWriteOff) {\r\n isWriteOffFeeClose = false;\r\n }\r\n\r\n if (isWriteOffFeeClose === undefined || isWriteOffFeeClose === true) {\r\n currentTask = {\r\n ...currentTask,\r\n matterId: matterId,\r\n matterGuid: matterGuidId,\r\n writeOffWipTask: {\r\n isSaved: true,\r\n isCloseMatterAfterWriteOff: isClosed,\r\n fees: writeOffWipTask?.fees,\r\n disbursements: writeOffWipTask?.disbursements,\r\n comments: writeOffWipTask?.comments\r\n }\r\n };\r\n } else {\r\n currentTask = {\r\n ...currentTask,\r\n matterId: matterId,\r\n matterGuid: matterGuidId,\r\n writeOffDebtorsTask: {\r\n isSaved: true,\r\n isCloseMatterAfterWriteOff: isClosed,\r\n debtors: writeOffWipDebtorTask?.debtors,\r\n comments: writeOffWipDebtorTask?.comments\r\n }\r\n };\r\n }\r\n }\r\n } \r\n } else if (event?.currentTarget.name === 'isArchiveMatter') {\r\n const isArchive = event?.currentTarget.checked;\r\n const archiveMatterTask = currentTask?.archiveMatterTask;\r\n \r\n currentTask = {\r\n ...currentTask,\r\n matterId: matterId,\r\n matterGuid: matterGuidId,\r\n archiveMatterTask: {\r\n isSaved: true,\r\n isArchived: isArchive,\r\n comments: archiveMatterTask?.comments\r\n }\r\n };\r\n }\r\n\r\n // Update the values of Current Matter Task\r\n let currentTaskNew = handleRemoveTask(currentTask);\r\n // handleDisableContextMenu(currentTaskNew);\r\n handleDisableFields(currentTaskNew);\r\n setCurrentMatterTask(currentTaskNew);\r\n updateMatterTasks(currentTaskNew); \r\n };\r\n\r\n const handleRemoveTask = (currentTask?: MatterTask): MatterTask | undefined => {\r\n let currentTaskNew = currentTask;\r\n\r\n // Check the values and remove the task.\r\n if (currentTaskNew && currentTaskNew.writeOffWipTask) {\r\n const writeOffWipTask = currentTaskNew.writeOffWipTask;\r\n\r\n if (writeOffWipTask && \r\n (writeOffWipTask.fees || writeOffWipTask.disbursements || \r\n (writeOffWipTask.isCloseMatterAfterWriteOff) ) \r\n ) {\r\n // Do nothing \r\n } else {\r\n currentTaskNew.writeOffWipTask = undefined;\r\n }\r\n } \r\n \r\n if (currentTaskNew && currentTaskNew.writeOffDebtorsTask) {\r\n const writeOffDebtorsTask = currentTaskNew.writeOffDebtorsTask;\r\n\r\n if (writeOffDebtorsTask && \r\n ( writeOffDebtorsTask.debtors || \r\n ( writeOffDebtorsTask.isCloseMatterAfterWriteOff) ) \r\n ) {\r\n // Do nothing \r\n } else {\r\n currentTaskNew.writeOffDebtorsTask = undefined;\r\n }\r\n } \r\n\r\n if (currentTaskNew && currentTaskNew.billMatterTask) {\r\n const billMatterTask = currentTaskNew.billMatterTask;\r\n\r\n if (billMatterTask && \r\n (billMatterTask.fees || billMatterTask.disbursements\r\n || billMatterTask.applyTrust || billMatterTask.writeOffFees || billMatterTask.writeOffdisbursements)\r\n ) {\r\n // Do nothing \r\n } else {\r\n currentTaskNew.billMatterTask = undefined;\r\n }\r\n } \r\n\r\n if (currentTaskNew && currentTaskNew.transferTrustToPayInvoiceTask) {\r\n const transferTrustToPayInvoiceTask = currentTaskNew.transferTrustToPayInvoiceTask;\r\n\r\n if (transferTrustToPayInvoiceTask && \r\n (transferTrustToPayInvoiceTask.transfer || transferTrustToPayInvoiceTask.invoiceNumber) \r\n ) {\r\n // Do nothing \r\n } else {\r\n currentTaskNew.transferTrustToPayInvoiceTask = undefined;\r\n }\r\n } \r\n\r\n if (currentTaskNew && currentTaskNew.archiveMatterTask) {\r\n const archiveMatterTask = currentTaskNew.archiveMatterTask;\r\n\r\n if (archiveMatterTask && (archiveMatterTask.isArchived) ) {\r\n // Do nothing \r\n } else {\r\n currentTaskNew.archiveMatterTask = undefined;\r\n }\r\n } \r\n\r\n if (currentTaskNew && currentTaskNew.closeMatterTask) {\r\n const closeMatterTask = currentTaskNew.closeMatterTask;\r\n\r\n if (closeMatterTask && (closeMatterTask.isCloseMatter) ) {\r\n // Do nothing \r\n } else {\r\n currentTaskNew.closeMatterTask = undefined;\r\n }\r\n }\r\n\r\n return currentTaskNew;\r\n };\r\n\r\n // isCloseDisabledDueToAmounts = If the matter has pending amounts, the matter cannot be closed and close controls should be disabled\r\n const handleDisableContextMenu = (currentTask?: MatterTask, isCloseDisabledDueToAmounts?: boolean) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('handleDisableContextMenu');\r\n\r\n if (currentTask) {\r\n // If closed is ticked, then all other tasks should be closed if they don't have any data\r\n let isClosed = false;\r\n\r\n _.remove(menuDisable, (menu: ContextMenuDisable) => {\r\n return menu.matterId === currentTask.matterId;\r\n });\r\n\r\n if (currentTask.closeMatterTask || currentTask.writeOffWipTask || currentTask.writeOffDebtorsTask) {\r\n if (currentTask.closeMatterTask?.isCloseMatter) {\r\n isClosed = true;\r\n } else if (currentTask.writeOffWipTask?.isCloseMatterAfterWriteOff) {\r\n isClosed = true;\r\n } else if (currentTask.writeOffDebtorsTask?.isCloseMatterAfterWriteOff) {\r\n isClosed = true;\r\n }\r\n\r\n if (isClosed) {\r\n menuDisable.push({\r\n matterId: currentTask.matterId,\r\n isWriteOffWipTaskDisabled: currentTask.writeOffWipTask === undefined ? true : false,\r\n isWriteOffDebtorsTaskDisabled: currentTask.writeOffDebtorsTask === undefined ? true : false,\r\n isBillMatterTaskDisabled: currentTask.billMatterTask === undefined ? true : false,\r\n isTransferTrustToPayInvoiceTaskDisabled: currentTask.transferTrustToPayInvoiceTask === undefined ? true : false,\r\n isCloseMatterTaskDisabled: isCloseDisabledDueToAmounts && isCloseDisabledDueToAmounts === true \r\n ? true \r\n : currentTask.closeMatterTask === undefined ? true : false\r\n });\r\n\r\n setMenuDisable(menuDisable);\r\n } else {\r\n setMenuDisable(menuDisable);\r\n }\r\n } else {\r\n setMenuDisable(menuDisable);\r\n }\r\n }\r\n };\r\n\r\n // Since we have same fields accross multiple tasks, if a value is applied in 1 task, it shouldn't be applied in another.\r\n // So, we are disabling those fields here.\r\n const handleDisableFields = (currentTask?: MatterTask) => {\r\n if (currentTask && currentTask.matterId) {\r\n _.remove(fieldDisable, (fields: FieldDisable) => {\r\n return fields.matterId === currentTask.matterId;\r\n });\r\n\r\n let fieldDisableState: FieldDisable = {\r\n matterId: currentTask.matterId\r\n };\r\n\r\n let isFieldDisableStateChanged = false;\r\n\r\n if (currentTask.writeOffWipTask) {\r\n if (currentTask.writeOffWipTask.fees) {\r\n fieldDisableState.isBillMatterWriteOffFeeDisabled = true;\r\n isFieldDisableStateChanged = true;\r\n }\r\n if (currentTask.writeOffWipTask.disbursements) {\r\n fieldDisableState.isBillMatterWriteOffDisbDisabled = true;\r\n isFieldDisableStateChanged = true;\r\n }\r\n if (currentTask.writeOffWipTask.fees || currentTask.writeOffWipTask.disbursements\r\n || !currentTask.writeOffWipTask.isCloseMatterAfterWriteOff) {\r\n if (currentTask.writeOffDebtorsTask?.isCloseMatterAfterWriteOff || currentTask.closeMatterTask?.isCloseMatter) {\r\n fieldDisableState.isWriteOffCloseDisabled = true;\r\n isFieldDisableStateChanged = true;\r\n }\r\n }\r\n }\r\n\r\n if (currentTask.writeOffDebtorsTask) {\r\n if (currentTask.writeOffDebtorsTask.debtors && !currentTask.writeOffDebtorsTask.isCloseMatterAfterWriteOff) {\r\n if (currentTask.writeOffWipTask?.isCloseMatterAfterWriteOff || currentTask.closeMatterTask?.isCloseMatter) {\r\n fieldDisableState.isWriteOffDebtorsCloseDisabled = true;\r\n isFieldDisableStateChanged = true;\r\n }\r\n }\r\n }\r\n \r\n if (currentTask.billMatterTask) {\r\n if (currentTask.billMatterTask.writeOffFees) {\r\n fieldDisableState.isWriteOffFeeDisabled = true;\r\n isFieldDisableStateChanged = true;\r\n }\r\n if (currentTask.billMatterTask.writeOffdisbursements) {\r\n fieldDisableState.isWriteOffDisbursementsDisabled = true;\r\n isFieldDisableStateChanged = true;\r\n }\r\n }\r\n\r\n if (isFieldDisableStateChanged) {\r\n fieldDisable.push(fieldDisableState);\r\n setFieldDisable(fieldDisable);\r\n }\r\n }\r\n };\r\n\r\n // Check whether the Text Box in Grid should be disable. Rules applied by comparing Closed flag and whether the field has any values\r\n const getTextBoxDisabled = (matterId: number, value?: number| string): boolean => {\r\n // If value is empty and Closed is ticked, then disable\r\n\r\n const tasks = _.find(matterTasks, (matterTask: MatterTask) => {\r\n return matterTask.matterId === matterId;\r\n });\r\n\r\n let isClosed = false;\r\n\r\n if (tasks && (tasks.closeMatterTask || tasks.writeOffWipTask || tasks.writeOffDebtorsTask) ) {\r\n if (tasks.closeMatterTask?.isCloseMatter) {\r\n isClosed = true;\r\n } else if (tasks.writeOffWipTask?.isCloseMatterAfterWriteOff) {\r\n isClosed = true;\r\n } else if (tasks.writeOffDebtorsTask?.isCloseMatterAfterWriteOff) {\r\n isClosed = true;\r\n }\r\n }\r\n \r\n if (isClosed && value === undefined) {\r\n return true;\r\n } else {\r\n return false;\r\n } \r\n };\r\n\r\n const getFieldDisabled = (matterId: number, field: string): boolean => {\r\n const fieldDisableState = _.find(fieldDisable, (item: FieldDisable) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (fieldDisableState) {\r\n return fieldDisableState[field] ? fieldDisableState[field] : false;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n // Check values against Tasks and current dialog values to see whether the close should be enabled or not.\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const getIsCloseDisabled = (matterId?: number, currentTasks?: MatterTask, selectedMatter?: MatterManagementSummary): boolean => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('getIsCloseDisabled');\r\n\r\n let tasks: MatterTask | undefined;\r\n\r\n if (currentTasks) {\r\n tasks = currentTasks;\r\n } else {\r\n tasks = _.find(matterTasks, (matterTask: MatterTask) => {\r\n return matterTask.matterId === matterId;\r\n });\r\n } \r\n\r\n if (tasks && tasks.matterData) {\r\n\r\n let selectedMatterAmounts = getCurrentMatterAmounts(tasks.matterData);\r\n\r\n let unBilledFees = selectedMatterAmounts.unBilledFees;\r\n let unBilledDisbs = selectedMatterAmounts.unBilledDisbs;\r\n let debtors = selectedMatterAmounts.debtors;\r\n let trustBalance = selectedMatterAmounts.trustBalance;\r\n\r\n if (tasks.writeOffWipTask) {\r\n if (tasks.writeOffWipTask.fees) {\r\n unBilledFees = unBilledFees - tasks.writeOffWipTask.fees;\r\n }\r\n if (tasks.writeOffWipTask.disbursements) {\r\n unBilledDisbs = unBilledDisbs - tasks.writeOffWipTask.disbursements;\r\n }\r\n }\r\n\r\n if (tasks.billMatterTask) {\r\n if (tasks.billMatterTask.writeOffFees) {\r\n unBilledFees = unBilledFees - tasks.billMatterTask.writeOffFees;\r\n }\r\n if (tasks.billMatterTask.fees) {\r\n unBilledFees = unBilledFees + tasks.billMatterTask.fees;\r\n }\r\n if (tasks.billMatterTask.writeOffdisbursements) {\r\n unBilledDisbs = unBilledDisbs - tasks.billMatterTask.writeOffdisbursements;\r\n }\r\n if (tasks.billMatterTask.disbursements) {\r\n unBilledDisbs = unBilledDisbs + tasks.billMatterTask.disbursements;\r\n }\r\n if (tasks.billMatterTask.applyTrust) {\r\n trustBalance = trustBalance - tasks.billMatterTask.applyTrust;\r\n }\r\n }\r\n\r\n if (tasks.writeOffDebtorsTask && tasks.writeOffDebtorsTask.debtors) {\r\n debtors = debtors - tasks.writeOffDebtorsTask.debtors; \r\n }\r\n\r\n if (tasks.transferTrustToPayInvoiceTask && tasks.transferTrustToPayInvoiceTask.transfer) {\r\n trustBalance = trustBalance - tasks.transferTrustToPayInvoiceTask.transfer;\r\n }\r\n\r\n if ( (unBilledFees + unBilledDisbs + debtors + trustBalance) === 0) {\r\n handleDisableContextMenu(tasks, false);\r\n return false; \r\n } else {\r\n // clearCloseTasks(matterId);\r\n handleDisableContextMenu(tasks, true);\r\n }\r\n } else if (selectedMatter) {\r\n let selectedMatterAmounts = getCurrentMatterAmounts(selectedMatter);\r\n\r\n let unBilledFees = selectedMatterAmounts.unBilledFees;\r\n let unBilledDisbs = selectedMatterAmounts.unBilledDisbs;\r\n let debtors = selectedMatterAmounts.debtors;\r\n let trustBalance = selectedMatterAmounts.trustBalance;\r\n\r\n if ( (unBilledFees + unBilledDisbs + debtors + trustBalance) === 0) {\r\n handleDisableContextMenu(tasks, false);\r\n return false; \r\n } else {\r\n // clearCloseTasks(matterId);\r\n handleDisableContextMenu(tasks, true);\r\n } \r\n }\r\n\r\n return true;\r\n };\r\n\r\n // Check values against Tasks and current dialog values to see whether the close should be enabled or not.\r\n const getIsCloseDisabledForFeeWriteOffDialog = (matterId?: number, writeOffFee?: number, writeOffDisb?: number): boolean => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('getIsCloseDisabledForFeeWriteOffDialog');\r\n\r\n const tasks = _.find(matterTasks, (matterTask: MatterTask) => {\r\n return matterTask.matterId === matterId;\r\n });\r\n\r\n if (tasks && tasks.matterData) {\r\n\r\n let selectedMatterAmounts = getCurrentMatterAmounts(tasks.matterData);\r\n\r\n let unBilledFees = selectedMatterAmounts.unBilledFees;\r\n let unBilledDisbs = selectedMatterAmounts.unBilledDisbs;\r\n let debtors = selectedMatterAmounts.debtors;\r\n let trustBalance = selectedMatterAmounts.trustBalance;\r\n\r\n if (writeOffFee && !isNaN(writeOffFee)) {\r\n unBilledFees = unBilledFees - Number(writeOffFee);\r\n }\r\n\r\n if (writeOffDisb && !isNaN(writeOffDisb)) {\r\n unBilledDisbs = unBilledDisbs - Number(writeOffDisb);\r\n }\r\n\r\n if (tasks.billMatterTask) {\r\n if (tasks.billMatterTask.writeOffFees) {\r\n unBilledFees = unBilledFees - tasks.billMatterTask.writeOffFees;\r\n }\r\n if (tasks.billMatterTask.fees) {\r\n unBilledFees = unBilledFees + tasks.billMatterTask.fees;\r\n }\r\n if (tasks.billMatterTask.writeOffdisbursements) {\r\n unBilledDisbs = unBilledDisbs - tasks.billMatterTask.writeOffdisbursements;\r\n }\r\n if (tasks.billMatterTask.disbursements) {\r\n unBilledDisbs = unBilledDisbs + tasks.billMatterTask.disbursements;\r\n }\r\n if (tasks.billMatterTask.applyTrust) {\r\n trustBalance = trustBalance - tasks.billMatterTask.applyTrust;\r\n }\r\n }\r\n\r\n if (tasks.writeOffDebtorsTask && tasks.writeOffDebtorsTask.debtors) {\r\n debtors = debtors - tasks.writeOffDebtorsTask.debtors; \r\n }\r\n\r\n if (tasks.transferTrustToPayInvoiceTask && tasks.transferTrustToPayInvoiceTask.transfer) {\r\n trustBalance = trustBalance - tasks.transferTrustToPayInvoiceTask.transfer;\r\n }\r\n\r\n if ( (unBilledFees + unBilledDisbs + debtors + trustBalance) === 0) {\r\n return false;\r\n }\r\n }\r\n\r\n // clearCloseTasks(matterId);\r\n handleDisableContextMenu(tasks, true);\r\n return true;\r\n };\r\n\r\n const getIsCloseDisabledForFeeWriteOffDebtorDialog = (matterId?: number, writeOffDebtors?: number): boolean => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('getIsCloseDisabledForFeeWriteOffDebtorDialog');\r\n\r\n const tasks = _.find(matterTasks, (matterTask: MatterTask) => {\r\n return matterTask.matterId === matterId;\r\n });\r\n\r\n if (tasks && tasks.matterData) {\r\n\r\n let selectedMatterAmounts = getCurrentMatterAmounts(tasks.matterData);\r\n\r\n let unBilledFees = selectedMatterAmounts.unBilledFees;\r\n let unBilledDisbs = selectedMatterAmounts.unBilledDisbs;\r\n let debtors = selectedMatterAmounts.debtors;\r\n let trustBalance = selectedMatterAmounts.trustBalance;\r\n\r\n if (tasks.writeOffWipTask) {\r\n if (tasks.writeOffWipTask.fees) {\r\n unBilledFees = unBilledFees - tasks.writeOffWipTask.fees;\r\n }\r\n if (tasks.writeOffWipTask.disbursements) {\r\n unBilledDisbs = unBilledDisbs - tasks.writeOffWipTask.disbursements;\r\n }\r\n }\r\n\r\n if (tasks.billMatterTask) {\r\n if (tasks.billMatterTask.writeOffFees) {\r\n unBilledFees = unBilledFees - tasks.billMatterTask.writeOffFees;\r\n }\r\n if (tasks.billMatterTask.fees) {\r\n unBilledFees = unBilledFees + tasks.billMatterTask.fees;\r\n }\r\n if (tasks.billMatterTask.writeOffdisbursements) {\r\n unBilledDisbs = unBilledDisbs - tasks.billMatterTask.writeOffdisbursements;\r\n }\r\n if (tasks.billMatterTask.disbursements) {\r\n unBilledDisbs = unBilledDisbs + tasks.billMatterTask.disbursements;\r\n }\r\n if (tasks.billMatterTask.applyTrust) {\r\n trustBalance = trustBalance - tasks.billMatterTask.applyTrust;\r\n }\r\n }\r\n\r\n if (writeOffDebtors && !isNaN(writeOffDebtors)) {\r\n debtors = debtors - Number(writeOffDebtors);\r\n }\r\n\r\n if (tasks.transferTrustToPayInvoiceTask && tasks.transferTrustToPayInvoiceTask.transfer) {\r\n trustBalance = trustBalance - tasks.transferTrustToPayInvoiceTask.transfer;\r\n }\r\n\r\n if ( (unBilledFees + unBilledDisbs + debtors + trustBalance) === 0) {\r\n return false;\r\n } else {\r\n // clearCloseTasks(matterId);\r\n handleDisableContextMenu(tasks, true);\r\n }\r\n }\r\n \r\n return true;\r\n };\r\n\r\n // If we are going to disable Close, then we also should clear the close value from tasks.\r\n // const clearCloseTasks = (matterId: number) => {\r\n // // tslint:disable-next-line: no-console\r\n // console.log('clearCloseTasks MatterId : ', matterId );\r\n\r\n // const tasks = _.find(matterTasks, (matterTask: MatterTask) => {\r\n // return matterTask.matterId === matterId;\r\n // });\r\n\r\n // if (tasks) {\r\n // let isTaskUpdated = false;\r\n\r\n // if (tasks.closeMatterTask) {\r\n // tasks.closeMatterTask = undefined;\r\n // isTaskUpdated = true;\r\n // }\r\n // if (tasks.writeOffWipTask) {\r\n // tasks.writeOffWipTask.isCloseMatterAfterWriteOff = undefined;\r\n // isTaskUpdated = true;\r\n // }\r\n // if (tasks.writeOffDebtorsTask) {\r\n // tasks.writeOffDebtorsTask.isCloseMatterAfterWriteOff = undefined;\r\n // isTaskUpdated = true;\r\n // }\r\n\r\n // // tslint:disable-next-line: no-console\r\n // console.log('isTaskUpdated ', isTaskUpdated);\r\n // }\r\n // };\r\n\r\n const getCurrentMatterAmounts = (matterData: MatterManagementSummary): SelectedMatterAmounts => {\r\n\r\n let unBilledFees = Number(matterData.unbilledFees.toFixed(2));\r\n\r\n let unBilledDisbs = Number(matterData.unbilledDisbursements.toFixed(2));\r\n let debtors = Number(matterData.debtors.toFixed(2));\r\n let trustBalance = Number(matterData.trustBalance.toFixed(2)); \r\n\r\n let selectedMatterAmounts: SelectedMatterAmounts = {\r\n unBilledFees: unBilledFees,\r\n unBilledDisbs: unBilledDisbs,\r\n debtors: debtors,\r\n trustBalance: trustBalance\r\n };\r\n\r\n return selectedMatterAmounts;\r\n };\r\n\r\n const getWriteOffWipFee = (matterId: number): number | undefined | string => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask) {\r\n if (matterTask.writeOffWipTask && matterTask.writeOffWipTask.fees) {\r\n return matterTask.writeOffWipTask.fees;\r\n } else if (matterTask.billMatterTask && matterTask.billMatterTask.writeOffFees) {\r\n return matterTask.billMatterTask.writeOffFees;\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getWriteOffWipDisb = (matterId: number): number | undefined | string => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask) {\r\n if (matterTask.writeOffWipTask && matterTask.writeOffWipTask.disbursements) {\r\n return matterTask.writeOffWipTask.disbursements;\r\n } else if (matterTask.billMatterTask && matterTask.billMatterTask.writeOffdisbursements) {\r\n return matterTask.billMatterTask.writeOffdisbursements;\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getWriteOffWipDebtors = (matterId: number): number | undefined | string => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask) {\r\n if (matterTask.writeOffDebtorsTask && matterTask.writeOffDebtorsTask.debtors) {\r\n return matterTask.writeOffDebtorsTask.debtors;\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getBillFees = (matterId: number): number | undefined | string => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask) {\r\n if (matterTask.billMatterTask && matterTask.billMatterTask.fees) {\r\n return matterTask.billMatterTask.fees;\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getBillDisb = (matterId: number): number | undefined | string => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask) {\r\n if (matterTask.billMatterTask && matterTask.billMatterTask.disbursements) {\r\n return matterTask.billMatterTask.disbursements;\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getApplyTrust = (matterId: number): number | undefined | string => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask) {\r\n if (matterTask.billMatterTask && matterTask.billMatterTask.applyTrust) {\r\n return matterTask.billMatterTask.applyTrust;\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getTransferTrust = (matterId: number): number | undefined | string => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask && matterTask.transferTrustToPayInvoiceTask && matterTask.transferTrustToPayInvoiceTask.transfer) {\r\n return matterTask.transferTrustToPayInvoiceTask.transfer;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getTransferInvoice = (matterId: number): string | undefined => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask && matterTask.transferTrustToPayInvoiceTask && matterTask.transferTrustToPayInvoiceTask.invoiceNumber) {\r\n return matterTask.transferTrustToPayInvoiceTask.invoiceNumber;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const getIsClosed = (matterId: number): boolean | undefined => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask) {\r\n if (matterTask.closeMatterTask && matterTask.closeMatterTask.isCloseMatter) {\r\n return matterTask.closeMatterTask.isCloseMatter;\r\n } else if (matterTask.writeOffWipTask && matterTask.writeOffWipTask.isCloseMatterAfterWriteOff) {\r\n return matterTask.writeOffWipTask.isCloseMatterAfterWriteOff;\r\n } else if (matterTask.writeOffDebtorsTask && matterTask.writeOffDebtorsTask.isCloseMatterAfterWriteOff) {\r\n return matterTask.writeOffDebtorsTask.isCloseMatterAfterWriteOff;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const getIsArchived = (matterId: number): boolean | undefined => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n if (matterTask) {\r\n if (matterTask.archiveMatterTask && matterTask.archiveMatterTask.isArchived) {\r\n return matterTask.archiveMatterTask.isArchived;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const getTrustMaxValue = (matterId: number, trustBalance: number, field: string): number => {\r\n if (matterTasks) {\r\n let matterTask = matterTasks.find((item: MatterTask) => {\r\n return item.matterId === matterId;\r\n });\r\n\r\n let maxTrustAmount = Number(trustBalance);\r\n let usedTrustAmount = 0;\r\n\r\n if (matterTask) {\r\n if (matterTask.transferTrustToPayInvoiceTask && matterTask.transferTrustToPayInvoiceTask.transfer && field === 'applyTrust') {\r\n usedTrustAmount = usedTrustAmount + Number(matterTask.transferTrustToPayInvoiceTask.transfer);\r\n }\r\n if (matterTask.billMatterTask && matterTask.billMatterTask.applyTrust && field === 'transferTrust') {\r\n usedTrustAmount = usedTrustAmount + Number(matterTask.billMatterTask.applyTrust);\r\n }\r\n }\r\n\r\n if (maxTrustAmount > 0) {\r\n maxTrustAmount = maxTrustAmount - usedTrustAmount;\r\n return maxTrustAmount;\r\n }\r\n }\r\n\r\n return 0;\r\n };\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n ); \r\n};","import React from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n} from '@material-ui/core';\r\nimport { mainTheme } from '../../Theme';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '0 -10px',\r\n },\r\n title: {\r\n padding: '0 10px',\r\n fontSize: 16,\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n },\r\n secondaryDescription: {\r\n flex: 1,\r\n padding: '0 10px',\r\n maxWidth: '100%',\r\n overflow: 'hidden',\r\n },\r\n subTitle: {\r\n fontSize: 14,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n maxWidth: '97%',\r\n color: '#000000DE'\r\n },\r\n description: {\r\n fontSize: 12,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n maxWidth: '97%',\r\n color: '#000000DE'\r\n }\r\n })\r\n);\r\n\r\ninterface DialogTitleExtensionProps {\r\n title: string;\r\n subTitle?: string;\r\n description?: string;\r\n}\r\n\r\n// interface DialogTitleExtensionState extends FieldForms {}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const DialogTitleExtension: React.FC = ( props ) => { \r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n
{props.title}
\r\n
\r\n
{props.subTitle}
\r\n
{props.description}
\r\n
\r\n
\r\n );\r\n};","import React from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Grid,\r\n Accordion,\r\n AccordionSummary,\r\n Typography,\r\n AccordionDetails,\r\n TextField,\r\n} from '@material-ui/core';\r\nimport { PrioritySelector } from '../../tasksSummary/selectors/PrioritySelector';\r\n// import { IAutoCompleteItem } from '../../typings/autoComplete';\r\n// import { ParsableDate } from '@material-ui/pickers/constants/prop-types';\r\nimport { Field, FormSpy } from 'react-final-form';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { TaskCategorySelector } from '../../tasksSummary/selectors/TaskCategorySelector';\r\nimport { TaskAssignedBySelector } from '../../tasksSummary/selectors/TaskAssignedBySelector';\r\n// import { KeyboardTimePicker } from '@material-ui/pickers/TimePicker/TimePicker';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { mainTheme } from '../../Theme';\r\nimport AssignmentIcon from '@material-ui/icons/Assignment';\r\nimport { ParsableDate } from '@material-ui/pickers/constants/prop-types';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers/DateTimePicker/DateTimePicker';\r\nimport { TimeNumberFormatCustom } from '../../components/TimeNumberFormat';\r\nimport { AllocatedToEntityType } from '../../tasksSummary/AllocatedToEntityType';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n textField: {\r\n width: '100%'\r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n // fontWeight: theme.typography.fontWeightRegular,\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n headerIcon: {\r\n marginRight: 10,\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n }, \r\n commentField: {\r\n width: '100%',\r\n },\r\n })\r\n);\r\n\r\nexport interface MatterGroupFields {\r\n priority: IAutoCompleteItem | null;\r\n taskCategory: IAutoCompleteItem | null;\r\n assignedBy: IAutoCompleteItem | null;\r\n dueDate: ParsableDate;\r\n estimatedEffort: ParsableDate;\r\n startDate: ParsableDate;\r\n completionDate: ParsableDate;\r\n duration: ParsableDate;\r\n completionNotes: string | null;\r\n}\r\n\r\ninterface MatterGroupFieldProps {\r\n // tslint:disable-next-line: no-any\r\n values?: any;\r\n name?: string;\r\n formAction: 'create' | 'edit';\r\n allocatedToEntityType: number | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nfunction TimePickerComp(compProps: any) {\r\n const { input, meta } = compProps;\r\n const classes = useStyles();\r\n return (\r\n \r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nfunction TimePickerCompDisabled(compProps: any) {\r\n const { input, meta } = compProps;\r\n const classes = useStyles();\r\n return (\r\n \r\n );\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const MatterGroupField: React.FC = ( props ) => { \r\n const classes = useStyles();\r\n\r\n // const defaultPriority = {\r\n // label: 'No Priority',\r\n // value: '8e0220a6-46ff-4af8-b19c-24f36a9b12b0'\r\n // };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n \r\n // tslint:disable-next-line: no-any\r\n const PrioritySelectorComp = (compProps: any) => {\r\n const { input, meta } = compProps;\r\n\r\n return (\r\n {\r\n input.onChange(value);\r\n }}\r\n error={meta.error}\r\n required={compProps.required}\r\n disablePortal={false}\r\n />\r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const TaskCategorySelectorComp = (compProps: any) => {\r\n const { input, meta } = compProps;\r\n return (\r\n {\r\n input.onChange(value);\r\n }}\r\n error={meta.error}\r\n required={compProps.required}\r\n // helperText={'Priority is required'}\r\n disablePortal={false}\r\n />\r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const TaskAssignedBySelectorComp = (compProps: any) => {\r\n const { input, meta } = compProps;\r\n return (\r\n {\r\n input.onChange(value);\r\n }}\r\n error={meta.error}\r\n required={compProps.required}\r\n // helperText={'Priority is required'}\r\n disablePortal={false}\r\n />\r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const DateTimePickerComp = (compProps: any) => {\r\n const { input, meta } = compProps;\r\n return (\r\n \r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const DateTimePickerCompDisabled = (compProps: any) => {\r\n const { input, meta } = compProps;\r\n return (\r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n }\r\n >\r\n \r\n Task Details\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => ( \r\n values.completionDate ? (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )\r\n : null\r\n )} \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: any) {\r\n// if (values) {\r\n// return (\r\n// <>\r\n//
\r\n//                     {JSON.stringify(values, undefined, 2)}\r\n//                 
\r\n// \r\n// );\r\n// } else {\r\n// return (\r\n// <>\r\n// \r\n// {/* tslint:disable-next-line: no-shadowed-variable */}\r\n// {({ values }) => (\r\n//
\r\n//                             {JSON.stringify(values, undefined, 2)}\r\n//                             {/*  */}\r\n//                         
\r\n// )}\r\n//
\r\n// \r\n// );\r\n// }\r\n// }","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, makeStyles, Theme, createStyles } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n\r\n },\r\n listPaper: {\r\n '& > ul': {\r\n maxHeight: '52vh !important'\r\n }\r\n },\r\n })\r\n);\r\n\r\nexport enum PanelSelectorUseByEnum {\r\n FirmDashboard = 0,\r\n LeadDashboard,\r\n FeeEarnerDashboard,\r\n TaskDashboard,\r\n ClientDashboard\r\n} \r\ninterface PanelSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n dashboardPanelUsedBy: PanelSelectorUseByEnum;\r\n}\r\n\r\ninterface PanelSelectorState {\r\n isLoading: boolean;\r\n error?: boolean;\r\n // tslint:disable-next-line: no-any\r\n data: IAutoCompleteItem[] | any[];\r\n}\r\n\r\nexport const PanelSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n error: props.error,\r\n data: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n const dashboardParams: DahboardPanelParams = {\r\n type: PanelSelectorUseByEnum[props.dashboardPanelUsedBy]\r\n };\r\n\r\n retrieveDashboardPaneleData(\r\n dashboardParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: DahboardPanelData) => {\r\n let resData: IAutoCompleteItem[] = [];\r\n\r\n resData.push({\r\n label: 'Home',\r\n value: 'all'\r\n });\r\n\r\n data.lookup.dashboardPanel.forEach((source: DashboardPanel) => {\r\n resData.push({\r\n label: source.description,\r\n value: source.guidId,\r\n });\r\n });\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n data: resData,\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n classes={{\r\n paper: classes.listPaper\r\n }} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n classes={{\r\n paper: classes.listPaper\r\n }} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nexport interface DahboardPanelParams {\r\n type: string | null;\r\n}\r\nexport interface DahboardPanelData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n dashboardPanel: DashboardPanel[];\r\n}\r\n\r\nexport interface DashboardPanel {\r\n guidId: string;\r\n description: string;\r\n hasLayouts: boolean;\r\n usedByEnquiryDashboard: boolean;\r\n usedByFeeEarnerDashboard: boolean;\r\n usedByFirmDashboard: boolean;\r\n usedByTaskDashboard: boolean;\r\n usedByClientDashboard: boolean;\r\n}\r\n\r\nexport function retrieveDashboardPaneleData(\r\n params: DahboardPanelParams,\r\n refreshData: boolean,\r\n onSuccess: (data: DahboardPanelData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: DashboardPanelQuery,\r\n variables: {\r\n type: params.type\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst DashboardPanelQuery = gql`\r\n query LookupDashboardPanel($type: DashboardPanelUsedBy) {\r\n lookup {\r\n dashboardPanel(type: $type) {\r\n guidId \r\n description\r\n hasLayouts\r\n usedByEnquiryDashboard\r\n usedByFeeEarnerDashboard\r\n usedByFirmDashboard\r\n usedByTaskDashboard\r\n usedByClientDashboard\r\n }\r\n }\r\n }\r\n`;","import gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { client } from '..';\r\n\r\nexport interface MatterManagementListData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n matterSummaryListX: MatterManagementSummaryList;\r\n}\r\n\r\nexport interface MatterManagementSummaryList {\r\n recordCount: number;\r\n rowCountWithoutFilters: number;\r\n matters: MatterManagementSummary[]; \r\n}\r\n\r\nexport interface MatterManagementSummary {\r\n id: number;\r\n matterGuidId: string;\r\n fileNumber: string;\r\n status: string;\r\n title: string;\r\n longTitle: string;\r\n countryID: number;\r\n country: string;\r\n state: string;\r\n categoryID: number;\r\n category: string;\r\n typeID: number;\r\n type: string;\r\n typeClassification: string;\r\n typeState: string;\r\n subTypeID: number;\r\n subType: string;\r\n stage: string;\r\n fIRB: Boolean;\r\n family: string;\r\n property: string;\r\n propertyLabel: string;\r\n client: string;\r\n clientReference: string;\r\n otherSide: string;\r\n owner: string;\r\n billed: number;\r\n unbilled: number; // Including Tax\r\n unbilledFees: number; // Excluding Tax\r\n unbilledDisbursements: number;\r\n debtors: number;\r\n trustBalance: number;\r\n estimatedCosts: number;\r\n completionOrSettlmentDate: Date;\r\n instructionDate: Date;\r\n nextAction: string;\r\n nextActionDate: Date;\r\n nextDueDescription: string;\r\n fileLocation: string;\r\n imageLocation: string;\r\n latestComment: string;\r\n inProgress: Boolean;\r\n publishedDate: Date;\r\n lastUpdate: Date;\r\n nextRenewalDate: Date;\r\n isVIP: Boolean;\r\n syncSystemID: number;\r\n responsibleID: number;\r\n responsible: string;\r\n responsibleEmail: string;\r\n responsiblePhone: string;\r\n actingID: number;\r\n acting: string;\r\n actingEmail: string;\r\n actingPhone: string;\r\n assistingID: number;\r\n assisting: string;\r\n assistingEmail: string;\r\n assistingPhone: string;\r\n price: number;\r\n deposit: number;\r\n exchangeDate: Date;\r\n coolingOffDate: Date;\r\n depositDueDate: Date;\r\n depositPaidDate: Date;\r\n earliestPriorityDate: Date;\r\n applicationNumber: number;\r\n publicationDate: Date;\r\n publicationNumber: string;\r\n grantNumber: string;\r\n class: string;\r\n goodsAndServices: string; \r\n referrer: string;\r\n}\r\n\r\nexport interface MatterManagementOptionsData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n appUser: AppUser;\r\n}\r\n\r\nexport interface AppUser {\r\n isAdministrator: boolean;\r\n}\r\n\r\nexport interface CurrencyOptionData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n options: Options;\r\n}\r\n\r\nexport interface Options {\r\n localCurrency: LocalCurrency;\r\n currencySymbol: CurrencySymbol;\r\n}\r\n\r\nexport interface LocalCurrency {\r\n currency: string;\r\n}\r\n\r\nexport interface CurrencySymbol {\r\n symbol: string;\r\n}\r\n\r\nexport function fetchAppUserData(refreshData: boolean,\r\n onSuccess: (data?: MatterManagementOptionsData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n: void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: UserData,\r\n variables: {},\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); });\r\n}\r\n\r\nexport function fetchCurrencyData(refreshData: boolean,\r\n onSuccess: (data?: CurrencyOptionData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n: void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: CurrencyData,\r\n variables: {},\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); });\r\n}\r\n\r\nexport const UserData = gql`\r\nquery AppUser {\r\n appUser {\r\n isAdministrator\r\n name \r\n userId\r\n }\r\n}`;\r\n\r\nexport const CurrencyData = gql`\r\nquery CurrencySymbol {\r\n\toptions {\r\n localCurrency {\r\n currency\r\n }\r\n currencySymbol {\r\n symbol\r\n }\r\n }\r\n}`;\r\n\r\nexport const ArchiveMatterRequestMutation = gql`\r\nmutation archiveMatterRequest(\r\n $batchGuidID: String, \r\n $matterGuid: String, \r\n $archive: Boolean,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n archiveMatterRequest(\r\n batchGuidID: $batchGuidID, \r\n matterGuid: $matterGuid, \r\n archive: $archive,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const BillMatterRequestMutation = gql`\r\nmutation billMatterRequest(\r\n $batchGuidID: String, \r\n $matterGuid: String,\r\n $billFeesAmount: Decimal,\r\n $billDisbursementsAmount: Decimal,\r\n $applyTrustAmount: Decimal,\r\n $writeOffFeesAmount: Decimal,\r\n $writeOffDisbursementsAmount: Decimal,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n billMatterRequest(\r\n batchGuidID: $batchGuidID, \r\n matterGuid: $matterGuid,\r\n billFeesAmount: $billFeesAmount,\r\n billDisbursementsAmount: $billDisbursementsAmount,\r\n applyTrustAmount: $applyTrustAmount,\r\n writeOffFeesAmount: $writeOffFeesAmount,\r\n writeOffDisbursementsAmount: $writeOffDisbursementsAmount, \r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const CloseMatterRequestMutation = gql`\r\nmutation closeMatterRequest(\r\n $batchGuidID: String, \r\n $matterGuid: String, \r\n $close: Boolean,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n closeMatterRequest(\r\n batchGuidID: $batchGuidID, \r\n matterGuid: $matterGuid, \r\n close: $close,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const TransferMatterTrustToInvoiceRequestMutation = gql`\r\nmutation transferMatterTrustToInvoiceRequest(\r\n $batchGuidID: String, \r\n $matterGuid: String,\r\n $trustTransferAmount: Decimal,\r\n $invoiceToApply: String,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n transferMatterTrustToInvoiceRequest(\r\n batchGuidID: $batchGuidID, \r\n matterGuid: $matterGuid,\r\n trustTransferAmount: $trustTransferAmount,\r\n invoiceToApply: $invoiceToApply, \r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const WriteOffMatterDebtorsRequestMutation = gql`\r\nmutation writeOffMatterDebtorsRequest(\r\n $batchGuidID: String, \r\n $matterGuid: String, \r\n $writeOffDebtorsAmount: Decimal,\r\n $closeMatterAfterWriteOff: Boolean, \r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n writeOffMatterDebtorsRequest(\r\n batchGuidID: $batchGuidID, \r\n matterGuid: $matterGuid,\r\n writeOffDebtorsAmount: $writeOffDebtorsAmount,\r\n closeMatterAfterWriteOff: $closeMatterAfterWriteOff,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const WriteOffMatterWIPRequestMutation = gql`\r\nmutation writeOffMatterWIPRequest(\r\n $batchGuidID: String, \r\n $matterGuid: String, \r\n $writeOffFeesAmount: Decimal,\r\n $writeOffDisbursementsAmount: Decimal, \r\n $closeMatterAfterWriteOff: Boolean, \r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n writeOffMatterWIPRequest(\r\n batchGuidID: $batchGuidID, \r\n matterGuid: $matterGuid, \r\n writeOffFeesAmount: $writeOffFeesAmount,\r\n writeOffDisbursementsAmount: $writeOffDisbursementsAmount, \r\n closeMatterAfterWriteOff: $closeMatterAfterWriteOff,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const FinaliseTaskBatchRequestMutation = gql`\r\nmutation finaliseTaskBatchRequest($batchGuidID: String){\r\n finaliseTaskBatchRequest(batchGuidID: $batchGuidID)\r\n}`;\r\n\r\nexport const MatterManagementTaskNotification = gql`\r\nsubscription matterManagementTaskNotification {\r\n matterManagementTaskNotification{\r\n id,\r\n status,\r\n message,\r\n description\r\n }\r\n}`;","import React from 'react';\r\nimport { CurrencyDisplayStyle, FormattedCurrency } from '../components/DataDisplay/FormattedCurrency';\r\nimport { DateTimeDisplayStyle, FormattedDateTime } from '../components/DataDisplay/FormattedDateTime';\r\nimport glamorous from 'glamorous';\r\nimport { Icon } from 'office-ui-fabric-react/lib/Icon';\r\nimport { IntlProvider, FormattedDate } from 'react-intl';\r\nimport gql from 'graphql-tag';\r\nimport { Query } from 'react-apollo';\r\nimport Button from '@material-ui/core/Button';\r\nimport { FormattedPercentage } from '../components/DataDisplay/FormattedPercentage';\r\nimport { ICellRendererParams } from '@ag-grid-enterprise/all-modules';\r\nimport { TooltipHost } from 'office-ui-fabric-react';\r\nimport { Checkbox, Chip, createStyles, makeStyles, Theme } from '@material-ui/core';\r\nimport htmlToDraft from 'html-to-draftjs';\r\nimport { ContentState, Editor, EditorState } from 'draft-js';\r\nimport { Rating } from '@material-ui/lab';\r\nimport moment from 'moment';\r\nimport { CurrenciesData } from '../firmSettingConfiguration/common/Currencies';\r\n\r\n// tslint:disable-next-line:no-any\r\nconst CheckboxContainer = glamorous.div<{ theme?: any }>((props) => ({\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n [`& .${`ms-IconExample`}`]: {\r\n fontSize: props.theme.FontSize.PX.size5,\r\n } \r\n}));\r\n\r\n// tslint:disable-next-line:no-any\r\nconst ButtonContainer = glamorous.div<{ theme?: any }>((props) => ({\r\n display: 'inline-block',\r\n width: '100%',\r\n height: '100%' \r\n}));\r\n\r\nconst DateContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n}));\r\n\r\nconst NumberContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n}));\r\n\r\nconst CurrencyValue = glamorous(FormattedCurrency)<{ theme?: object }>((props) => ({\r\n textAlign: 'right'\r\n}));\r\n\r\nconst CurrencyContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n display: 'inline-block',\r\n width: '100%',\r\n textAlign: 'right'\r\n}));\r\n\r\nconst PercentageContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n display: 'inline-block',\r\n width: '100%',\r\n textAlign: 'center'\r\n}));\r\n\r\nconst ImageContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center', \r\n // width: '100%' ,\r\n height: '100%'\r\n}));\r\n\r\nconst ImageDiv = glamorous.div<{ theme?: object }>((props) => ({\r\n width: '100%',\r\n minHeight: '30px',\r\n backgroundSize: 'contain',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center center',\r\n}));\r\n\r\nconst PercentageValue = glamorous(FormattedPercentage)<{ theme?: object }>((props) => ({\r\n textAlign: 'right'\r\n}));\r\n\r\nconst LongTextContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n display: 'inline-block',\r\n width: '100%',\r\n '& .ms-TooltipHost': {\r\n display: 'flex',\r\n width: '100%',\r\n }\r\n}));\r\n\r\nconst EditorViewContainer = glamorous.div<{ theme?: object }>((props) => ({\r\n display: 'inline-block',\r\n width: '100%',\r\n '& .ms-TooltipHost': {\r\n display: 'flex',\r\n width: '100%',\r\n },\r\n '& .public-DraftStyleDefault-ltr': {\r\n margin: 0\r\n }\r\n}));\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n height: '100%',\r\n justifyContent: 'center', \r\n position: 'fixed',\r\n },\r\n chip: {\r\n margin: theme.spacing() / 4,\r\n },\r\n chips: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n dateContainer: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n }\r\n })\r\n);\r\n\r\nexport class CurrencyRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n // or access props using 'this'\r\n return (\r\n \r\n {\r\n this.params.value != 0\r\n ?\r\n ( \r\n // tslint:disable-next-line: no-any \r\n \r\n query={localCurrency}\r\n fetchPolicy=\"cache-first\"\r\n >\r\n {({loading, error, data }) => {\r\n const lCurrency = ( loading || error ) ? null : data.options.localCurrency;\r\n let currency = lCurrency ? lCurrency.currency : null;\r\n\r\n const lTenant = ( loading || error ) ? null : data.tenant;\r\n const sourceSystem = lTenant ? lTenant.sourceSystem : null;\r\n\r\n const lAppUser = ( loading || error ) ? null : data.appUser;\r\n const isInternal = lAppUser ? lAppUser.isInternal : null;\r\n\r\n if (this.params.data) {\r\n let foreignCurrency = this.params.data.foreignCurrency;\r\n\r\n // If internal user - then the local currency is the priority. \r\n // But if it is a external user, and if there is a foreign currency, then display that.\r\n if (sourceSystem && sourceSystem.toLocaleLowerCase() === 'inprotech' && foreignCurrency && !isInternal) {\r\n const foreignCurrencySybmol = CurrenciesData.find(currencyItem => currencyItem.currency === foreignCurrency);\r\n if (foreignCurrencySybmol) {\r\n currency = foreignCurrencySybmol.currency;\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n );\r\n }}\r\n \r\n )\r\n :\r\n
\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport class CurrencyRendererWithoutDecimal extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n // or access props using 'this'\r\n return (\r\n \r\n {\r\n this.params.value > 0 \r\n ?\r\n ( \r\n // tslint:disable-next-line: no-any \r\n \r\n query={localCurrency}\r\n >\r\n {({loading, error, data }) => {\r\n const lCurrency = ( loading || error ) ? null : data.options.localCurrency;\r\n const currency = lCurrency ? lCurrency.currency : null;\r\n return (\r\n \r\n );\r\n }}\r\n \r\n )\r\n :\r\n
\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport class NumberRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n // or access props using 'this'\r\n return (\r\n \r\n {\r\n this.params.value > 0 \r\n ?\r\n ( \r\n \r\n {this.params.value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}\r\n \r\n )\r\n :\r\n
\r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport class PercentageRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n // or access props using 'this'\r\n return (\r\n \r\n {\r\n this.params.value > 0 \r\n ? \r\n \r\n :\r\n
\r\n } \r\n \r\n );\r\n }\r\n}\r\n\r\nexport class DateRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n if (this.params.value) {\r\n\r\n // let shortDateFormat = { year: 'numeric', day: 'numeric', month: 'short' };\r\n // let shortTimeFormat = { hour: 'numeric', minute: 'numeric', hour12: true };\r\n // let format = {...shortDateFormat};\r\n var convertedLocalTime = new Date(Date.parse(this.params.value.toString()));\r\n // var hourOffset = convertedLocalTime.getTimezoneOffset() / 60;\r\n // convertedLocalTime.setHours( convertedLocalTime.getHours() - hourOffset ); \r\n \r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport class TimeRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n // or access props using 'this'\r\n if (this.params.value) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport class DurationRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n // or access props using 'this'\r\n if (this.params.value && this.params.value.value) {\r\n return (\r\n \r\n {this.params.value.value}\r\n {/* {this.params.value.slice(0, -3)} */}\r\n \r\n );\r\n } else if (this.params.value && this.params.value.value === undefined) {\r\n return (\r\n \r\n {this.params.value}\r\n {/* {this.params.value.slice(0, -3)} */}\r\n \r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport class DateTimeRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n // or access props using 'this'\r\n if (this.params.value) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport class LocalDateTimeRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n // or access props using 'this'\r\n if (this.params.value) {\r\n\r\n // let shortDateFormat = { year: 'numeric', day: 'numeric', month: 'short' };\r\n // let shortTimeFormat = { hour: 'numeric', minute: 'numeric', hour12: true };\r\n // let format = {...shortDateFormat, ...shortTimeFormat};\r\n var convertedLocalTime = new Date(Date.parse(this.params.value.toString()));\r\n var hourOffset = convertedLocalTime.getTimezoneOffset() / 60;\r\n convertedLocalTime.setHours( convertedLocalTime.getHours() - hourOffset ); \r\n \r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport class BoolRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n this.getGroupColumnHeader = this.getGroupColumnHeader.bind(this);\r\n }\r\n\r\n render() {\r\n if (this.params.value !== undefined) {\r\n return (\r\n \r\n {this.getGroupColumnHeader()}\r\n {this.params && (this.params.value === true || this.params.value === 'true') ? \r\n \r\n :\r\n ''\r\n }\r\n \r\n \r\n );\r\n }\r\n return
;\r\n }\r\n\r\n// tslint:disable-next-line: no-any\r\n private getGroupColumnHeader() {\r\n if (this.params && this.params.value === 'true') {\r\n let column = this.params.columnApi.getColumn(this.params.node.field);\r\n\r\n if (column !== undefined || column !== null) {\r\n return column.getColDef().headerName + ' '; \r\n } else {\r\n return
;\r\n }\r\n } else {\r\n return
;\r\n }\r\n }\r\n}\r\n\r\nexport class ButtonRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n // tslint:disable-next-line: no-console\r\n console.log(this.params.value);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport class ImageRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n if (this.params.value !== undefined) {\r\n return (\r\n \r\n \r\n {/* */}\r\n \r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport class LongTextRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n if (this.params.value !== undefined) {\r\n return (\r\n \r\n \r\n {this.params.value}\r\n \r\n \r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport class MultiLineStringRenderrer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n if (this.params.value !== undefined || this.params.value !== null) {\r\n\r\n const tempValue = this.params.value || '';\r\n\r\n return (\r\n \r\n \r\n )}\r\n // This id is used on the tooltip itself, not the host\r\n // (so an element with this id only exists when the tooltip is shown)\r\n id={tempValue ?? undefined}\r\n >\r\n {tempValue.replace(//g, ' ')}\r\n \r\n \r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport class CheckboxCellRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n\r\n // tslint:disable-next-line: no-any\r\n constructor(props: any) {\r\n super(props);\r\n this.params = props; \r\n this.onCheck = this.onCheck.bind(this);\r\n }\r\n\r\n onCheck(event: React.ChangeEvent) {\r\n let checked = event.target.checked;\r\n let colId = this.params.column.getColId();\r\n this.params.node.setDataValue(colId, checked);\r\n }\r\n\r\n render() {\r\n if (this.params.value !== undefined) {\r\n return (\r\n // \r\n\r\n this.onCheck(event)}\r\n checked={this.params.value}\r\n />\r\n );\r\n } else {\r\n return (\r\n this.onCheck(event)}\r\n checked={false}\r\n />\r\n ); \r\n }\r\n // return
;\r\n }\r\n}\r\n\r\nexport class EditorViewRenderer extends React.Component {\r\n private params: ICellRendererParams;\r\n // did you know that React passes props to your component constructor??\r\n constructor(props: ICellRendererParams) {\r\n super(props);\r\n this.params = props; \r\n // from here you can access any of the props!\r\n }\r\n\r\n render() {\r\n if (this.params.value) {\r\n\r\n let editorState = EditorState.createEmpty();\r\n const contentBlock = htmlToDraft(this.params.value);\r\n if (contentBlock) {\r\n const contentState = ContentState.createFromBlockArray(contentBlock.contentBlocks);\r\n editorState = EditorState.createWithContent(contentState);\r\n } \r\n \r\n // const fieldId = Math.random().toString();\r\n \r\n return (\r\n \r\n {/* */}\r\n null}\r\n />\r\n {/* {editorState} */}\r\n {/* */}\r\n \r\n );\r\n }\r\n return
;\r\n }\r\n}\r\n\r\nexport const ChipCellRenderer: React.FC = ({value}) => {\r\n const classes = useStyles();\r\n\r\n const getChips = (): React.ReactNode => {\r\n if (value) {\r\n let chipsArray = [];\r\n if (!Array.isArray(value)) {\r\n // tslint:disable-next-line: no-any\r\n JSON.parse(value).forEach( (item: any) => {\r\n chipsArray.push(item);\r\n });\r\n } else {\r\n chipsArray = value;\r\n }\r\n\r\n const chips: React.ReactNode = (\r\n
\r\n {\r\n // tslint:disable-next-line: no-any\r\n chipsArray.map((chipData: any) => { \r\n return (\r\n // tslint:disable-next-line: no-unused-expression\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n return chips;\r\n } else {\r\n return null;\r\n } \r\n };\r\n\r\n return (\r\n \r\n {getChips()}\r\n \r\n ); \r\n};\r\n\r\nexport const RatingCellRenderer: React.FC = ({value}) => {\r\n // const classes = useStyles();\r\n\r\n const getRating = (): React.ReactNode => {\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let tempValue = 0;\r\n\r\n if (typeof value === 'string') {\r\n // tslint:disable-next-line: radix\r\n if (isNaN(parseInt(value))) {\r\n tempValue = value.length;\r\n } else {\r\n // tslint:disable-next-line: radix\r\n tempValue = parseInt(value);\r\n }\r\n } else {\r\n tempValue = value;\r\n }\r\n \r\n const rating: React.ReactNode = (\r\n
\r\n \r\n
\r\n );\r\n return rating;\r\n };\r\n\r\n return (\r\n \r\n {getRating()}\r\n \r\n ); \r\n};\r\n\r\nexport const DateMonthYearRenderer: React.FC = ({value}) => {\r\n const classes = useStyles();\r\n\r\n if (value) {\r\n\r\n const utcDate = moment.utc(value).toDate();\r\n\r\n const localDate = moment(utcDate).local().format('YYYY-MM MMM');\r\n\r\n return (\r\n
\r\n {localDate}\r\n
\r\n );\r\n }\r\n \r\n return null;\r\n};\r\n\r\nconst localCurrency = gql`query localCurrency {\r\n options {\r\n localCurrency {\r\n currency\r\n }\r\n }\r\n tenant {\r\n sourceSystem\r\n }\r\n appUser {\r\n isInternal\r\n }\r\n}`;","import { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { useQuery } from 'react-apollo';\r\n\r\nexport const useRoleListQuery = (params: RoleListParams, fetchPolicy?: FetchPolicy) => {\r\n const { data, error, loading } = useQuery(RoleListQuery, {\r\n fetchPolicy: fetchPolicy,\r\n variables: {\r\n isExternal: params.isExternal\r\n }\r\n });\r\n return {\r\n data,\r\n error,\r\n loading,\r\n };\r\n};\r\n\r\nexport interface RoleListParams {\r\n isExternal: boolean | null;\r\n}\r\n\r\nexport interface RoleListData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n roleList: RoleList;\r\n}\r\n\r\nexport interface RoleList {\r\n role: Role[];\r\n}\r\n\r\nexport interface Role {\r\n roleIdString: string;\r\n rolename: string;\r\n isExternal: boolean;\r\n}\r\n\r\nconst RoleListQuery = gql`\r\n query roleListQuery( $isExternal: Boolean) {\r\n roleList(isExternal: $isExternal) {\r\n role {\r\n roleIdString,\r\n rolename,\r\n isExternal\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { client } from '../..';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%'\r\n },\r\n })\r\n);\r\n\r\ninterface POBoxTypeSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface POBoxTypeSelectorState {\r\n isLoading: boolean;\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const POBoxTypeSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n options: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n retrievePOBoxTypeData(\r\n false, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrievePOBoxType(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrievePOBoxType = (data: PoBoxTypeData) => {\r\n setState({\r\n ...state,\r\n options: data.lookup.poBoxType\r\n .map( (source: PoBoxType) => ({...source, value: source.description, label: source.description }))\r\n .sort((a, b) => a.sequence < b.sequence ? -1 : a.sequence > b.sequence ? 1 : 0),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'options');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport function retrievePOBoxTypeData(\r\n refreshData: boolean,\r\n onSuccess: (data: PoBoxTypeData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: PoBoxTypeQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface PoBoxTypeData {\r\n lookup: Lookup;\r\n loading?: boolean;\r\n networkStatus?: number;\r\n}\r\n\r\nexport interface Lookup {\r\n poBoxType: PoBoxType[];\r\n}\r\n\r\nexport interface PoBoxType {\r\n guidId: string;\r\n description: string;\r\n sequence: number;\r\n}\r\n\r\nconst PoBoxTypeQuery = gql`\r\n query PoBoxType{\r\n lookup {\r\n poBoxType{\r\n id,\r\n guidId,\r\n description,\r\n sequence\r\n }\r\n }\r\n }\r\n`;\r\n","import React, { useState } from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Grid,\r\n TextField,\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { mainTheme } from '../../Theme';\r\nimport { Field, Form, FormSpy } from 'react-final-form';\r\nimport { KeyboardDateTimePicker } from '@material-ui/pickers/DateTimePicker/DateTimePicker';\r\nimport { DropzoneArea } from 'material-ui-dropzone';\r\nimport { MatterAutoCompleteSelector } from '../../components/MatterAutoCompleteSelector';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { ParsableDate } from '@material-ui/pickers/constants/prop-types';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\nimport { UploadMatterDocumentMutation } from '../MatterSummaryRepository';\r\nimport { DocumentFile } from '../../types/DocumentFile';\r\nimport { FormApi } from 'final-form';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport { RoleSelector } from '../../lookupConfiguration/selectors/RoleSelector';\r\nimport { useCurrentUser } from '../../hooks/useCurrentUser';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { Role, useRoleListQuery } from '../../lookupConfiguration/hooks/useRoleListQuery';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n commendField: {\r\n width: '100%',\r\n },\r\n dialogTitle: {\r\n color: mainTheme.TemplateColor.Primary,\r\n },\r\n dropzone: {\r\n paddingTop: 10,\r\n paddingBottom: 10,\r\n },\r\n matterLabel: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '100%',\r\n },\r\n loaderWrapper: {\r\n minWidth: '560px',\r\n minHeight: '394.625px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }\r\n })\r\n);\r\n\r\ninterface UploadMatterDocumentState {\r\n date: ParsableDate;\r\n files: DocumentFile[];\r\n notes: string | null;\r\n matter: IAutoCompleteItem | null;\r\n roles: IAutoCompleteItem[];\r\n isChanged: boolean;\r\n confirmSubmit: boolean;\r\n isDisableSave: boolean;\r\n}\r\n\r\nexport interface UploadDocumentDialogProps {\r\n onClose: () => void;\r\n matter?: IAutoCompleteItem;\r\n roles?: IAutoCompleteItem[];\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const UploadDocumentDialog: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n\r\n const currentUser = useCurrentUser();\r\n\r\n const [filesKey] = useState(Math.random().toString());\r\n\r\n const roleListQuery = useRoleListQuery({ isExternal: true }, 'cache-first');\r\n\r\n const defaultRole: IAutoCompleteItem[] = roleListQuery.data ? roleListQuery.data?.roleList.role\r\n .map((source: Role) => ({value: source.roleIdString, label: source.rolename }))\r\n .filter((item) => item.label === 'Client') as IAutoCompleteItem[] : [];\r\n\r\n const initialValue: UploadMatterDocumentState = {\r\n date: new Date(),\r\n files: [],\r\n notes: null,\r\n matter: props.matter ? props.matter : null,\r\n roles: defaultRole,\r\n isChanged: false,\r\n confirmSubmit: false,\r\n isDisableSave: false\r\n };\r\n \r\n const onSubmit = (form: FormApi, values: UploadMatterDocumentState) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('OnSubmit'); \r\n form.change('confirmSubmit', true);\r\n\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n resolve();\r\n // tslint:disable-next-line: align\r\n }, 1000);\r\n });\r\n };\r\n\r\n const onUpload = (form: FormApi, values: UploadMatterDocumentState) => {\r\n // Save the File\r\n client\r\n .mutate({\r\n mutation: UploadMatterDocumentMutation,\r\n variables: { \r\n input: getUploadMatterDocumentInput(values)\r\n },\r\n })\r\n // tslint:disable-next-line: no-any\r\n .then((results: { data: any }) => {\r\n if (results.data) {\r\n if (results.data.error === null || results.data.error === undefined) {\r\n showNotification(null, 'Successfully submitted', 'info');\r\n\r\n form.change('isDisableSave', false);\r\n if (props.onClose) {\r\n props.onClose();\r\n } \r\n } else {\r\n showNotification('Failed to Upload Documents', results.data.error, 'error');\r\n }\r\n }\r\n\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n form.change('isDisableSave', false);\r\n showNotification('Failed to Upload Documents', reason, 'error');\r\n });\r\n\r\n // form.change('isDisableSave', false);\r\n // onClose(form);\r\n };\r\n\r\n const getUploadMatterDocumentInput = (values: UploadMatterDocumentState) => {\r\n return {\r\n matterGuid: values.matter?.value,\r\n files: GetFiles(values.files),\r\n notes: currentUser.data!.appUser.isInternal ? null : values.notes,\r\n roleGuids: currentUser.data!.appUser.isInternal ? values.roles.map((role: IAutoCompleteItem) => role.value).join(',') : null\r\n };\r\n };\r\n\r\n const GetFiles = (files: DocumentFile[]) => {\r\n return files.map((document: DocumentFile) => {\r\n return {\r\n file: document.file,\r\n name: document.name,\r\n guidID: document.guidID,\r\n status: document.status\r\n };\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onFormValueChanged = (form: FormApi, changeProps: any) => {\r\n if (!changeProps.pristine) {\r\n form.change('isChanged', true);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onSubmitConfirmationChanges = (agree: boolean, form: FormApi, values: any) => {\r\n if (agree) {\r\n form.batch(() => {\r\n form.change('confirmSubmit', false); \r\n form.change('isDisableSave', true);\r\n });\r\n onUpload(form, values); \r\n } else {\r\n form.change('confirmSubmit', false);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const required = (value: any) => {\r\n return value ? undefined : 'Required';\r\n };\r\n\r\n const initializeForm = () => {\r\n\r\n if (currentUser.loading || roleListQuery.loading) {\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n } \r\n\r\n return (\r\n ) => onSubmit(form, values)}\r\n initialValues={initialValue}\r\n initialValuesEqual={() => true}\r\n keepDirtyOnReinitialize={true}\r\n subscription={{submitting: true, pristine: true}}\r\n render={({handleSubmit, form, submitting, pristine, values}) => (\r\n
handleSubmit(event)} id=\"UploadDocumentDialog\">\r\n {\r\n onFormValueChanged(form, props);\r\n }}\r\n />\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n 1 ? 'documents' : 'document'} ?`}\r\n show={values.confirmSubmit}\r\n isAgree={(agree: boolean) => onSubmitConfirmationChanges(agree, form, values)}\r\n disAgreeLabel={'No'}\r\n agreeLabel={'Yes'}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.matter ? (\r\n

{props.matter.label}

\r\n ) : (\r\n \r\n {({ input, meta }) => (\r\n \r\n input.onChange(selection)\r\n }\r\n value={input.value ? input.value : null}\r\n />\r\n )}\r\n \r\n )}\r\n
\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n {currentUser.data!.appUser.isInternal && (\r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n error={meta.error}\r\n helperText={meta.error}\r\n required={true}\r\n isExternal={true}\r\n />\r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n
\r\n {\r\n let existingFiles: DocumentFile[] = [...input.value];\r\n const newFiles = files.filter((file: File) => {\r\n return !existingFiles.some((item: DocumentFile) => {\r\n return item.name === file.name && item.status !== 2;\r\n });\r\n });\r\n if (newFiles && newFiles.length > 0) {\r\n newFiles.forEach((file: File) => {\r\n const documentFile: DocumentFile = {\r\n guidID: null,\r\n file: file,\r\n status: 1,\r\n name: file.name,\r\n url: ''\r\n };\r\n existingFiles.push(documentFile);\r\n }); \r\n input.onChange(existingFiles);\r\n }\r\n }}\r\n onDelete={(file: File) => {\r\n let existingFiles: DocumentFile[] = [...input.value];\r\n // eslint-disable-next-line array-callback-return\r\n existingFiles.map((item: DocumentFile) => {\r\n if (file.name === item.name) {\r\n item.file = file;\r\n item.status = 2; // deleted\r\n }\r\n }); \r\n // tslint:disable-next-line: max-line-length\r\n const filteredFiles = existingFiles.filter((item: DocumentFile) => {\r\n return item.status !== 2 || item.guidID !== null;\r\n });\r\n input.onChange(filteredFiles);\r\n }} \r\n // tslint:disable-next-line:no-any\r\n onDrop={(files: File[], event: any) => {\r\n // let existingFiles: DocumentFile[] = [...input.value];\r\n // tslint:disable-next-line: max-line-length\r\n // const existingFile = existingFiles.find((item: DocumentFile) => item.name === file)\r\n // tslint:disable-next-line:no-console\r\n console.log(event);\r\n }} \r\n />\r\n
\r\n )}\r\n \r\n
\r\n {!currentUser.data!.appUser.isInternal && (\r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n 0 ? false : true}\r\n />\r\n )}\r\n \r\n )}\r\n \r\n \r\n )}\r\n
\r\n {/* {printJson(values)} */}\r\n
\r\n \r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values, pristine }) => (\r\n <>\r\n \r\n {/* */}\r\n \r\n \r\n )}\r\n \r\n \r\n {/* {printJson(values)} */}\r\n \r\n )}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n Upload Document\r\n \r\n {initializeForm()}\r\n \r\n\r\n \r\n );\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\n// function printJson(values: any) {\r\n// \tif (values) {\r\n// \t\treturn (\r\n// \t\t\t<>\r\n// \t\t\t\t
\r\n// \t\t\t\t\t{JSON.stringify(values, undefined, 2)}\r\n// \t\t\t\t
\r\n// \t\t\t\r\n// \t\t);\r\n// \t} else {\r\n// \t\treturn (\r\n// \t\t\t<>\r\n// \t\t\t\t\r\n// \t\t\t\t\t{/* tslint:disable-next-line: no-shadowed-variable */}\r\n// \t\t\t\t\t{({ values }) => (\r\n// \t\t\t\t\t\t
\r\n// \t\t\t\t\t\t\t{JSON.stringify(values, undefined, 2)}\r\n// \t\t\t\t\t\t\t{/*  */}\r\n// \t\t\t\t\t\t
\r\n// \t\t\t\t\t)}\r\n// \t\t\t\t
\r\n// \t\t\t\r\n// \t\t);\r\n// \t}\r\n// }\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, makeStyles, Theme, createStyles } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { FirmData, Team } from '../models/Firm';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\nexport interface TeamQueryParams {\r\n isMyTeamOnly: boolean | null;\r\n onlyUsedByTasks: boolean | null;\r\n onlyUsedByEnquiries: boolean | null;\r\n onlyUsedByFinancials: boolean | null;\r\n}\r\n\r\ninterface FirmTeamSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n isMyTeamOnly: boolean | null;\r\n enquiryOnly: boolean | null;\r\n financialOnly: boolean | null;\r\n taskOnly: boolean | null;\r\n}\r\n\r\ninterface FirmTeamSelectorState {\r\n isLoading: boolean;\r\n data: IAutoCompleteItem[];\r\n}\r\n\r\nexport const FirmTeamSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n data: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n let query: TeamQueryParams = {\r\n isMyTeamOnly : props.isMyTeamOnly,\r\n onlyUsedByTasks: props.taskOnly,\r\n onlyUsedByFinancials: props.financialOnly,\r\n onlyUsedByEnquiries: props.enquiryOnly\r\n \r\n // UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardTeamView) \r\n // ? null\r\n // : UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardMyTeamOnly)\r\n };\r\n\r\n retrieveTeamData(\r\n query,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: FirmData) => {\r\n setState({\r\n ...state,\r\n data: data.firm.teams.team.map((source: Team) => ({value: source.guidID, label: source.description })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveTeamData(\r\n query: TeamQueryParams | undefined,\r\n refreshData: boolean,\r\n onSuccess: (data: FirmData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: FirmTeamList,\r\n variables: {\r\n isMyTeamOnly: query ? query.isMyTeamOnly : null,\r\n onlyUsedByTasks: query ? query.onlyUsedByTasks : null,\r\n onlyUsedByEnquiries: query ? query.onlyUsedByEnquiries : null,\r\n onlyUsedByFinancials: query ? query.onlyUsedByFinancials : null\r\n \r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst FirmTeamList = gql`\r\nquery firmTeamData($isMyTeamOnly: Boolean, $onlyUsedByTasks: Boolean, $onlyUsedByEnquiries: Boolean, $onlyUsedByFinancials: Boolean) {\r\n firm{\r\n teams(isMyTeamOnly: $isMyTeamOnly, \r\n onlyUsedByTasks: $onlyUsedByTasks, onlyUsedByEnquiries: $onlyUsedByEnquiries, onlyUsedByFinancials: $onlyUsedByFinancials){\r\n recordCount,\r\n team{\r\n guidID,\r\n description,\r\n staffCount,\r\n usedByEnquiries\r\n usedByFinancials\r\n usedByTasks\r\n }\r\n }\r\n }\r\n}`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, makeStyles, Theme, createStyles } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { TasksSummaryQueryParams, TaskType, TaskTypeData } from '../../tasksSummary/TasksSummaryRepository';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\ninterface TaskTypeSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n}\r\n\r\ninterface TaskTypeSelectorState {\r\n isLoading: boolean;\r\n data: IAutoCompleteItem[];\r\n}\r\n\r\nexport const TaskTypeSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n data: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n // let query: TaskTypeQueryParams = {\r\n \r\n // UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardTeamView) \r\n // ? null\r\n // : UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardMyTeamOnly)\r\n // };\r\n\r\n retrieveTaskTypeData(\r\n undefined,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: TaskTypeData) => {\r\n setState({\r\n ...state,\r\n data: data.task.taskTypes.map((source: TaskType) => ({value: source.guidId, label: source.description })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveTaskTypeData(\r\n query: TasksSummaryQueryParams | undefined,\r\n refreshData: boolean,\r\n onSuccess: (data: TaskTypeData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: TaskTypeList,\r\n variables: {\r\n // isMyTeamOnly: query ? query.isMyTeamOnly : null\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst TaskTypeList = gql`\r\nquery taskType {\r\n task{\r\n taskTypes{\r\n id,\r\n guidId,\r\n description\r\n }\r\n }\r\n}`;","import * as React from 'react';\r\nimport gql from 'graphql-tag';\r\nimport { FirmData, FeeEarner } from '../models/Firm';\r\nimport { Query } from 'react-apollo';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport MultiSelect from '../../components/MultiSelect';\r\nimport { StandardTextFieldProps } from '@material-ui/core/TextField';\r\n\r\nexport interface FeeEarnerQueryParams {\r\n offset?: number; \r\n first?: number;\r\n filter?: string;\r\n isNotExistsInTeam?: boolean;\r\n}\r\n\r\ninterface AvailableTeamMemberProps extends StandardTextFieldProps {\r\n intitialSelectedLabel?: string;\r\n // tslint:disable-next-line: no-any\r\n onSelectedItem?: (item: any , name: string) => void;\r\n onRemoveItem?: (item: string, name: string) => void;\r\n value?: string[];\r\n disabled?: boolean;\r\n name: string;\r\n required?: boolean;\r\n groupId: string;\r\n}\r\n\r\ninterface AvailableTeamMemberState {\r\n selectedCode?: string;\r\n selectedLabel?: string;\r\n}\r\n\r\nconst loadBlockLimit: number = 1000;\r\n\r\nexport class AvailableTeamMemberSelector extends React.Component {\r\n public rowCount: number = 0;\r\n public offset: number = 0;\r\n public filter: string = '';\r\n // tslint:disable-next-line: no-any\r\n private list: any = [];\r\n\r\n constructor(props: AvailableTeamMemberProps, state?: AvailableTeamMemberState) {\r\n super(props, state);\r\n this.onSelectedItem = this.onSelectedItem.bind(this);\r\n this.onRemoveItem = this.onRemoveItem.bind(this);\r\n\r\n this.state = {\r\n selectedCode: undefined,\r\n selectedLabel: this.props.intitialSelectedLabel\r\n };\r\n }\r\n\r\n public render() {\r\n let vm = this;\r\n return (\r\n // tslint:disable-next-line: no-any\r\n \r\n query={FeeEarnerData} \r\n fetchPolicy={'network-only'} // Highly transactional query. Always get the latest data set\r\n variables={{\r\n filter: '',\r\n first: loadBlockLimit,\r\n offset: this.offset,\r\n isNotExistsInTeam: true,\r\n groupGuid: this.props.groupId\r\n }}\r\n >\r\n {({ loading, error, data }) => {\r\n\r\n if (data === undefined || data?.loading) {\r\n return ;\r\n }\r\n\r\n // map the data to a format for MuiDownshift \r\n const firmData: FirmData = data;\r\n vm.list = (loading || error) \r\n ? null\r\n : firmData.firm.teams.availableMembers.availableMember.map( (feeEarner: FeeEarner) => (\r\n {\r\n id: feeEarner.staffId, \r\n description: feeEarner.staffName,\r\n isActive: feeEarner.isActive\r\n })); \r\n\r\n return ( \r\n \r\n );\r\n }}\r\n \r\n );\r\n }\r\n\r\n private onRemoveItem(itemId: string, name: string) {\r\n if (this.props.onRemoveItem) {\r\n this.props.onRemoveItem(itemId, name);\r\n }\r\n }\r\n\r\n private onSelectedItem(itemList: string[], name: string) {\r\n // Send the complete collection of value and label\r\n if (this.list) {\r\n // tslint:disable-next-line: no-any\r\n const items = this.list.filter((source: any) => itemList.includes(source.id) );\r\n\r\n // tslint:disable-next-line: no-any\r\n const selectedItems = items.map((source: any) => ({value: source.id, label: source.description}));\r\n\r\n if (this.props.onSelectedItem) {\r\n this.props.onSelectedItem(selectedItems, name);\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst FeeEarnerData = gql`\r\nquery teamAvailableMembers($offset: Int, $first: Int, $filter: String, \r\n $isNotExistsInTeam: Boolean, $groupGuid: String) {\r\n firm{\r\n teams{\r\n availableMembers(offset: $offset, first: $first, filter: $filter, \r\n isNotExistsInTeam: $isNotExistsInTeam, groupGuid: $groupGuid){\r\n recordCount,\r\n availableMember{\r\n staffId,\r\n staffName,\r\n emailAddress,\r\n isRedViewUser,\r\n isActive\r\n }\r\n }\r\n }\r\n }\r\n}`;","import * as React from 'react';\r\nimport gql from 'graphql-tag';\r\nimport { FirmData, FeeEarner } from '../models/Firm';\r\nimport { Query } from 'react-apollo';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport MultiSelect from '../../components/MultiSelect';\r\nimport { StandardTextFieldProps } from '@material-ui/core/TextField';\r\n\r\nexport interface FeeEarnerQueryParams {\r\n offset?: number; \r\n first?: number;\r\n filter?: string;\r\n isNotExistsInOffice?: boolean;\r\n}\r\n\r\ninterface AvailableOfficeMemberProps extends StandardTextFieldProps {\r\n intitialSelectedLabel?: string;\r\n // tslint:disable-next-line: no-any\r\n onSelectedItem?: (item: any , name: string) => void;\r\n onRemoveItem?: (item: string, name: string) => void;\r\n value?: string[];\r\n disabled?: boolean;\r\n name: string;\r\n required?: boolean;\r\n groupId: string;\r\n}\r\n\r\ninterface AvailableOfficeMemberState {\r\n selectedCode?: string;\r\n selectedLabel?: string;\r\n}\r\n\r\nconst loadBlockLimit: number = 1000;\r\n\r\nexport class AvailableOfficeMemberSelector extends React.Component {\r\n public rowCount: number = 0;\r\n public offset: number = 0;\r\n public filter: string = '';\r\n // tslint:disable-next-line: no-any\r\n private list: any = [];\r\n\r\n constructor(props: AvailableOfficeMemberProps, state?: AvailableOfficeMemberState) {\r\n super(props, state);\r\n this.onSelectedItem = this.onSelectedItem.bind(this);\r\n this.onRemoveItem = this.onRemoveItem.bind(this);\r\n\r\n this.state = {\r\n selectedCode: undefined,\r\n selectedLabel: this.props.intitialSelectedLabel\r\n };\r\n }\r\n\r\n public render() {\r\n let vm = this;\r\n return (\r\n // tslint:disable-next-line: no-any\r\n \r\n query={FeeEarnerData} \r\n fetchPolicy={'network-only'} // Highly transactional query. Always get the latest data set\r\n variables={{\r\n filter: '',\r\n first: loadBlockLimit,\r\n offset: this.offset,\r\n isNotExistsInOffice: true,\r\n groupGuid: this.props.groupId\r\n }}\r\n >\r\n {({ loading, error, data }) => {\r\n\r\n if (data === undefined || data?.loading) {\r\n return ;\r\n }\r\n\r\n // map the data to a format for MuiDownshift \r\n const firmData: FirmData = data;\r\n vm.list = (loading || error) \r\n ? null\r\n : firmData.firm.firmOffices.availableMembers.availableMember.map( (feeEarner: FeeEarner) => (\r\n {\r\n id: feeEarner.staffId, \r\n description: feeEarner.staffName,\r\n isActive: feeEarner.isActive\r\n })); \r\n\r\n return ( \r\n \r\n );\r\n }}\r\n \r\n );\r\n }\r\n\r\n private onRemoveItem(itemId: string, name: string) {\r\n if (this.props.onRemoveItem) {\r\n this.props.onRemoveItem(itemId, name);\r\n }\r\n }\r\n\r\n private onSelectedItem(itemList: string[], name: string) {\r\n // Send the complete collection of value and label\r\n if (this.list) {\r\n // tslint:disable-next-line: no-any\r\n const items = this.list.filter((source: any) => itemList.includes(source.id) );\r\n\r\n // tslint:disable-next-line: no-any\r\n const selectedItems = items.map((source: any) => ({value: source.id, label: source.description}));\r\n\r\n if (this.props.onSelectedItem) {\r\n this.props.onSelectedItem(selectedItems, name);\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst FeeEarnerData = gql`\r\nquery officeAvailableMembers($offset: Int, $first: Int, $filter: String, \r\n $isNotExistsInOffice: Boolean, $groupGuid: String) {\r\n firm{\r\n firmOffices{\r\n availableMembers(offset: $offset, first: $first, filter: $filter, \r\n isNotExistsInOffice: $isNotExistsInOffice, groupGuid: $groupGuid){\r\n recordCount,\r\n availableMember{\r\n staffId,\r\n staffName,\r\n emailAddress,\r\n isRedViewUser,\r\n isActive\r\n }\r\n }\r\n }\r\n }\r\n}`;","import * as React from 'react';\r\nimport gql from 'graphql-tag';\r\nimport { FirmData, FeeEarner } from '../models/Firm';\r\nimport { Query } from 'react-apollo';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport MultiSelect from '../../components/MultiSelect';\r\nimport { StandardTextFieldProps } from '@material-ui/core/TextField';\r\n\r\nexport interface FeeEarnerQueryParams {\r\n offset?: number; \r\n first?: number;\r\n filter?: string;\r\n isNotExistsInDepartment?: boolean;\r\n}\r\n\r\ninterface AvailableDepartmentMemberProps extends StandardTextFieldProps {\r\n intitialSelectedLabel?: string;\r\n // tslint:disable-next-line: no-any\r\n onSelectedItem?: (item: any , name: string) => void;\r\n onRemoveItem?: (item: string, name: string) => void;\r\n value?: string[];\r\n disabled?: boolean;\r\n name: string;\r\n required?: boolean;\r\n groupId: string;\r\n}\r\n\r\ninterface AvailableDepartmentMemberState {\r\n selectedCode?: string;\r\n selectedLabel?: string;\r\n}\r\n\r\nconst loadBlockLimit: number = 1000;\r\n\r\nexport class AvailableDepartmentMemberSelector extends React.Component {\r\n public rowCount: number = 0;\r\n public offset: number = 0;\r\n public filter: string = '';\r\n // tslint:disable-next-line: no-any\r\n private list: any = [];\r\n\r\n constructor(props: AvailableDepartmentMemberProps, state?: AvailableDepartmentMemberState) {\r\n super(props, state);\r\n this.onSelectedItem = this.onSelectedItem.bind(this);\r\n this.onRemoveItem = this.onRemoveItem.bind(this);\r\n\r\n this.state = {\r\n selectedCode: undefined,\r\n selectedLabel: this.props.intitialSelectedLabel\r\n };\r\n }\r\n\r\n public render() {\r\n let vm = this;\r\n return (\r\n // tslint:disable-next-line: no-any\r\n \r\n query={FeeEarnerData} \r\n fetchPolicy={'network-only'} // Highly transactional query. Always get the latest data set\r\n variables={{\r\n filter: '',\r\n first: loadBlockLimit,\r\n offset: this.offset,\r\n isNotExistsInDepartment: true,\r\n groupGuid: this.props.groupId\r\n }}\r\n >\r\n {({ loading, error, data }) => {\r\n if (data === undefined || data?.loading) {\r\n return ;\r\n }\r\n\r\n // map the data to a format for MuiDownshift \r\n const firmData: FirmData = data;\r\n vm.list = (loading || error) \r\n ? null\r\n : firmData.firm.departments.availableMembers.availableMember.map( (feeEarner: FeeEarner) => (\r\n {\r\n id: feeEarner.staffId, \r\n description: feeEarner.staffName,\r\n isActive: feeEarner.isActive\r\n })); \r\n\r\n return ( \r\n \r\n );\r\n }}\r\n \r\n );\r\n }\r\n\r\n private onRemoveItem(itemId: string, name: string) {\r\n if (this.props.onRemoveItem) {\r\n this.props.onRemoveItem(itemId, name);\r\n }\r\n }\r\n\r\n private onSelectedItem(itemList: string[], name: string) {\r\n // Send the complete collection of value and label\r\n if (this.list) {\r\n // tslint:disable-next-line: no-any\r\n const items = this.list.filter((source: any) => itemList.includes(source.id) );\r\n\r\n // tslint:disable-next-line: no-any\r\n const selectedItems = items.map((source: any) => ({value: source.id, label: source.description}));\r\n\r\n if (this.props.onSelectedItem) {\r\n this.props.onSelectedItem(selectedItems, name);\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst FeeEarnerData = gql`\r\nquery departmentAvailableMembers($offset: Int, $first: Int, $filter: String, \r\n $isNotExistsInDepartment: Boolean, $groupGuid: String) {\r\n firm{\r\n departments{\r\n availableMembers(offset: $offset, first: $first, filter: $filter, \r\n isNotExistsInDepartment: $isNotExistsInDepartment, groupGuid: $groupGuid){\r\n recordCount,\r\n availableMember{\r\n staffId,\r\n staffName,\r\n emailAddress,\r\n isRedViewUser,\r\n isActive\r\n }\r\n }\r\n }\r\n }\r\n}`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { OtherPartyType, useOtherPartyQuery } from '../hooks/useOtherPartyQuery';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%'\r\n },\r\n })\r\n);\r\n\r\ninterface OtherPartyTypeSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface OtherPartyTypeSelectorState {\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const OtherPartyTypeSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n options: [],\r\n });\r\n\r\n const otherPartyTypeQuery = useOtherPartyQuery('cache-first');\r\n \r\n useEffect(() => { \r\n \r\n if (!otherPartyTypeQuery.loading && !otherPartyTypeQuery.error && otherPartyTypeQuery.data) {\r\n\r\n const { data } = otherPartyTypeQuery;\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n options: data.lookup.otherPartyType.map( (source: OtherPartyType) => ({...source, value: source.description, label: source.description }))\r\n .sort((a, b) => a.sequence < b.sequence ? -1 : a.sequence > b.sequence ? 1 : 0),\r\n };\r\n });\r\n }\r\n\r\n }, [otherPartyTypeQuery.data, otherPartyTypeQuery.error, otherPartyTypeQuery.loading]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'options');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};","import React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { Role, useRoleListQuery } from '../hooks/useRoleListQuery';\r\n\r\ninterface RoleSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | IAutoCompleteItem[] | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n isExternal?: boolean;\r\n}\r\n\r\ninterface RoleSelectorState {\r\n isLoading: boolean;\r\n data: IAutoCompleteItem[];\r\n}\r\n\r\nexport const RoleSelector: React.FC = props => {\r\n\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n data: [],\r\n });\r\n\r\n const roleListQuery = useRoleListQuery({ isExternal: props.isExternal ?? null }, 'cache-first');\r\n \r\n useEffect(() => {\r\n if (!roleListQuery.loading && !roleListQuery.error && roleListQuery.data) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n data: roleListQuery.data!.roleList.role.map((source: Role) => ({value: source.roleIdString, label: source.rolename })),\r\n };\r\n });\r\n }\r\n if (roleListQuery.error) {\r\n showNotification(null, roleListQuery.error.message, 'error');\r\n }\r\n }, [roleListQuery.data, roleListQuery.loading, roleListQuery.error]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n\r\n let tempValue = value;\r\n\r\n // if (props.multiple && state.data) {\r\n // tempValue = Array.from(new Set(value.map((option: any) => option.value))).map((value) =>\r\n // state.data.find((option: any) => option.value === value)\r\n // );\r\n\r\n // console.log('tempValue', tempValue);\r\n // }\r\n\r\n if (props.onSelection) {\r\n props.onSelection(tempValue, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n \r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => option.value === value.value} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => option.value === value.value} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};","import React, { useState, useMemo } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, GetTagProps, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, Chip } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport gql from 'graphql-tag';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { useQuery } from 'react-apollo';\r\n\r\n// const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// removedAvatar: {\r\n// maxWidth: '15px',\r\n// maxHeight: '15px',\r\n// },\r\n// }),\r\n// );\r\n\r\ninterface MatterCategorySelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: MatterCategoryAutoCompleteItem | MatterCategoryAutoCompleteItem[] | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: MatterCategoryAutoCompleteItem | MatterCategoryAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties;\r\n disablePortal?: boolean;\r\n variant?: 'standard' | 'filled' | 'outlined';\r\n size?: 'small' | 'medium';\r\n onBlur?: React.FocusEventHandler;\r\n multiple?: boolean;\r\n isApplyMatterAccess?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n}\r\n\r\nexport interface MatterCategoryAutoCompleteItem extends IAutoCompleteItem, MatterCategory {}\r\n\r\ninterface MatterCategorySelectorState {\r\n data: MatterCategoryAutoCompleteItem[];\r\n}\r\n\r\nexport const MatterCategorySelector: React.FC = (props) => {\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n data: [],\r\n });\r\n\r\n const matterCategoryQuery = useQuery(MatterCategoryQuery, {\r\n variables: {\r\n isApplyMatterAccess: props.isApplyMatterAccess\r\n },\r\n fetchPolicy: 'cache-first'\r\n });\r\n\r\n useMemo(() => {\r\n if (\r\n !matterCategoryQuery.loading &&\r\n !matterCategoryQuery.error &&\r\n matterCategoryQuery.data &&\r\n matterCategoryQuery.data.lookup &&\r\n matterCategoryQuery.data.lookup.matterCategory\r\n ) {\r\n setState((prevState) => {\r\n const { matterCategory } = matterCategoryQuery.data!.lookup;\r\n\r\n const items: MatterCategoryAutoCompleteItem[] = matterCategory.map((mCategory: MatterCategory) => {\r\n return {\r\n ...mCategory,\r\n label: mCategory.description,\r\n value: mCategory.description,\r\n };\r\n }).sort((a, b) => {\r\n if (a.label < b.label) {\r\n return -1;\r\n } else if (a.label > b.label) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n return {\r\n ...prevState,\r\n data: items,\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [matterCategoryQuery.loading, matterCategoryQuery.data, matterCategoryQuery.error]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const onRenderTags = (value: MatterCategoryAutoCompleteItem[], getTagProps: GetTagProps): React.ReactNode => {\r\n let renderTagsValue = value.map((option: MatterCategoryAutoCompleteItem, index: number) => {\r\n let label = option.label;\r\n if (option.label.length > 20) {\r\n label = `${option.label.substring(0, 20)}...`;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return renderTagsValue;\r\n };\r\n\r\n if (props.multiple) {\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n multiple={true}\r\n renderTags={onRenderTags}\r\n disableCloseOnSelect={props.disableCloseOnSelect}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n disableCloseOnSelect={props.disableCloseOnSelect}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport interface MatterCategoryParams {\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface MatterCategoryData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n matterCategory: MatterCategory[];\r\n}\r\n\r\nexport interface MatterCategory {\r\n id: number;\r\n categoryId: string;\r\n description: string;\r\n}\r\n\r\nconst MatterCategoryQuery = gql`\r\n query MatterCategory($isApplyMatterAccess: Boolean) {\r\n lookup {\r\n matterCategory(isApplyMatterAccess: $isApplyMatterAccess) {\r\n id\r\n categoryId\r\n description\r\n }\r\n }\r\n }\r\n`;\r\n","import React, { useEffect, useState } from 'react';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n FormControlLabel,\r\n Button,\r\n Checkbox,\r\n FormGroup,\r\n DialogActions,\r\n CircularProgress,\r\n} from '@material-ui/core';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { mainTheme } from '../../Theme';\r\nimport { useQuery } from 'react-apollo';\r\nimport { ActionMessage, LookupActionMessageData, LookupActionMessageQuery } from '../../lookupConfiguration/tabs/LookupMatterFollowUpActionMaintenance';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { client } from '../..';\r\nimport { showNotification } from '../../App';\r\nimport { MatterDetails } from '../models/Matter';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { LocalStorageEnum } from '../../enums/LocalStorageEnum';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n dialogTitle: {\r\n width: '100%',\r\n },\r\n title: {\r\n padding: '0 10px 10px 10px',\r\n fontSize: 16,\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n textAlign: 'center',\r\n },\r\n dialogPaper: {\r\n minWidth: 500,\r\n },\r\n formControlWrapper: {\r\n width: '100%',\r\n },\r\n actionMessageWrapper: {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n position: 'relative'\r\n },\r\n button: {\r\n marginBottom: 10,\r\n textTransform: 'none',\r\n },\r\n formGroupWrapper: {\r\n justifyContent: 'center'\r\n },\r\n noteWrapper: {\r\n textAlign: 'center',\r\n paddingBottom: 10,\r\n color: theme.palette.primary.main,\r\n fontSize: 18\r\n },\r\n dialogContentWrapper: {\r\n position: 'relative'\r\n },\r\n loadingWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n },\r\n floatLoadingWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n bottom: 0,\r\n backgroundColor: 'rgba(255, 255, 255, 0.5)',\r\n zIndex: 1,\r\n }\r\n })\r\n);\r\n\r\ninterface MatterFollowUpDialogProps {\r\n onClose?: () => void;\r\n matterData: MatterDetails;\r\n}\r\n\r\ninterface MatterFollowUpDialogState {\r\n personActing: boolean;\r\n personResponsible: boolean;\r\n data: ActionMessage[];\r\n isLoading: boolean;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const MatterFollowUpDialog: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n \r\n const lookupActionMessageQuery = useQuery(LookupActionMessageQuery);\r\n\r\n const [state, setState] = useState({\r\n personActing: true,\r\n personResponsible: false,\r\n data: [],\r\n isLoading: false\r\n });\r\n\r\n useEffect(() => {\r\n if (!lookupActionMessageQuery.error && lookupActionMessageQuery.data && lookupActionMessageQuery.data.lookup ) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n // tslint:disable-next-line: max-line-length\r\n data: lookupActionMessageQuery.data!.lookup.actionMessage.sort((a, b) => a.sequence < b.sequence ? -1 : a.sequence > b.sequence ? 1 : 0)\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [lookupActionMessageQuery.data, lookupActionMessageQuery.error, lookupActionMessageQuery.loading]);\r\n\r\n const onClose = () => {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onClickMessage = (item: ActionMessage | null) => (event: any) => {\r\n \r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isLoading: true\r\n };\r\n });\r\n\r\n const hasMatterEmailPersonActing = UserFeature.HasAccess(UserFeatureEnum.hasMatterEmailPersonActing);\r\n const hasMatterEmailPersonResponsible = UserFeature.HasAccess(UserFeatureEnum.hasMatterEmailPersonResponsible);\r\n\r\n const followUpActionEmailBodyParams: FollowUpActionEmailBodyParams = {\r\n matterGuidId: props.matterData.matterGuid,\r\n actionMessageGuidId: item ? item.guidId : null,\r\n includePersonActing: hasMatterEmailPersonActing ? state.personActing : null,\r\n includePersonResponsible: hasMatterEmailPersonResponsible ? state.personResponsible : null\r\n };\r\n\r\n let mailto = '';\r\n\r\n if (state.personResponsible && state.personActing) {\r\n mailto = `${props.matterData?.responsibleEmail};${props.matterData?.actingEmail}`;\r\n } else if (state.personActing) {\r\n mailto = props.matterData?.actingEmail;\r\n } else if (state.personResponsible) {\r\n mailto = props.matterData?.responsibleEmail;\r\n }\r\n\r\n retrieveFollowUpActionEmailBodyData(\r\n followUpActionEmailBodyParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (bodyData) => onRetrieveData(bodyData, item, mailto),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n\r\n };\r\n\r\n const onRetrieveData = (bodyData: FollowUpActionEmailBodyData, item: ActionMessage | null, mailto: string | undefined) => {\r\n\r\n setState((prevState) => {\r\n\r\n var mail = document.createElement('a');\r\n // tslint:disable-next-line: max-line-length\r\n mail.href = `mailto:${mailto ? mailto : ''}?subject=RE ${encodeURIComponent(props.matterData?.client)} - ${encodeURIComponent(props.matterData?.description)} (${props.matterData?.fileNumber})&body=${bodyData.matterFollowUpActionEmailBody}`;\r\n mail.click();\r\n onClose();\r\n \r\n return {\r\n ...prevState,\r\n isLoading: false\r\n };\r\n });\r\n \r\n };\r\n\r\n const onChangePerson = (event: React.ChangeEvent) => {\r\n const name = event.target.name; \r\n const checked = event.target.checked;\r\n if (name) {\r\n setState((prevState) => {\r\n if (name === 'personActing') {\r\n if (!checked && !state.personResponsible) {\r\n return {\r\n ...prevState,\r\n personActing: checked,\r\n personResponsible: true\r\n };\r\n }\r\n } else if (name === 'personResponsible') {\r\n if (!checked && !state.personActing) {\r\n return {\r\n ...prevState,\r\n personActing: true,\r\n personResponsible: checked\r\n };\r\n }\r\n }\r\n return {\r\n ...prevState,\r\n [name]: checked\r\n };\r\n });\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n
Follow Up Email
\r\n \r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterEmailPersonActing) && (\r\n \r\n } \r\n label={localStorage.getItem(LocalStorageEnum.PersonActing || 'Person Acting')} \r\n />\r\n )}\r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterEmailPersonResponsible) && (\r\n \r\n } \r\n label={localStorage.getItem(LocalStorageEnum.PersonResponsible || 'Person Responsible')} \r\n />\r\n )}\r\n \r\n \r\n \r\n {!lookupActionMessageQuery.loading ? (\r\n <>\r\n
\r\n Please select the required message.\r\n
\r\n
\r\n {!!state.isLoading && (\r\n
\r\n \r\n
\r\n )}\r\n {state.data.map((item: ActionMessage) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport interface FollowUpActionEmailBodyParams {\r\n matterGuidId: string | null;\r\n actionMessageGuidId: string | null;\r\n includePersonActing: boolean | null;\r\n includePersonResponsible: boolean | null;\r\n}\r\n\r\nexport interface FollowUpActionEmailBodyData {\r\n matterFollowUpActionEmailBody: string;\r\n}\r\n\r\nexport function retrieveFollowUpActionEmailBodyData(\r\n query: FollowUpActionEmailBodyParams,\r\n refreshData: boolean,\r\n onSuccess: (data: FollowUpActionEmailBodyData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: MatterFollowUpActionEmailBodyQuery,\r\n variables: {\r\n matterGuidId: query.matterGuidId,\r\n actionMessageGuidId: query.actionMessageGuidId,\r\n includePersonActing: query.includePersonActing,\r\n includePersonResponsible: query.includePersonResponsible\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst MatterFollowUpActionEmailBodyQuery = gql`\r\n query MatterFollowUpActionEmailBody($matterGuidId: String, $actionMessageGuidId: String, $includePersonActing: Boolean, $includePersonResponsible: Boolean) {\r\n matterFollowUpActionEmailBody(matterGuidId: $matterGuidId, actionMessageGuidId: $actionMessageGuidId, includePersonActing: $includePersonActing, includePersonResponsible: $includePersonResponsible)\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { ICellRendererParams } from '@ag-grid-community/core';\r\nimport MoreHorizOutlinedIcon from '@material-ui/icons/MoreHorizOutlined';\r\nimport {\r\n Popper,\r\n Grow,\r\n Paper,\r\n ClickAwayListener,\r\n MenuList,\r\n MenuItem,\r\n IconButton,\r\n} from '@material-ui/core';\r\nimport { useHistory } from 'react-router-dom';\r\n// import { styles } from '../../home/styles';\r\nimport { client } from '../..';\r\nimport { AddUserMatterAccessActivity } from '../MatterSummaryPageX';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { WriteOffWipDialog } from '../dialogs/WriteOffWipDialog';\r\nimport { WriteOffDebtorsDialog } from '../dialogs/WriteOffDebtorsDialog';\r\nimport { BillTheMatterDialog } from '../dialogs/BillTheMatterDialog';\r\nimport { TransferTustToPayInvoiceDialog } from '../dialogs/TransferTustToPayInvoiceDialog';\r\nimport { ArchiveMatterDialog } from '../dialogs/ArchiveMatterDialog';\r\nimport { CloseMatterDialog } from '../dialogs/CloseMatterDialog';\r\nimport { fetchMatterDetailsData } from '../MatterSummaryRepository';\r\nimport DoneIcon from '@material-ui/icons/Done';\r\nimport { MatterData, MatterDetails } from '../models/Matter';\r\nimport { CurrencyOptionData, fetchAppUserData, fetchCurrencyData } from '../../matterManagement/MatterManagementRepository';\r\nimport { showNotification } from '../../App';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { TasksSummaryFormDialog } from '../../tasksSummary/dialog/TasksSummaryFormDialog';\r\nimport { AppUserData } from '../../enquirySummary/EnquirySummaryRepository';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { PriorityData, retrievePriorityData } from '../../tasksSummary/TasksSummaryRepository';\r\nimport { UploadDocumentDialog } from '../dialogs/UploadDocumentDialog';\r\nimport { MatterFollowUpDialog } from '../dialogs/MatterFollowUpDialog';\r\nimport ArchiveOutlinedIcon from '@material-ui/icons/ArchiveOutlined';\r\nimport { mainTheme } from '../../Theme';\r\nimport CancelPresentationOutlinedIcon from '@material-ui/icons/CancelPresentationOutlined';\r\nimport VisibilityOutlinedIcon from '@material-ui/icons/VisibilityOutlined';\r\nimport PlaylistAddOutlinedIcon from '@material-ui/icons/PlaylistAddOutlined';\r\nimport AssignmentTurnedInOutlinedIcon from '@material-ui/icons/AssignmentTurnedInOutlined';\r\nimport AssignmentOutlinedIcon from '@material-ui/icons/AssignmentOutlined';\r\nimport AccountBalanceWalletOutlinedIcon from '@material-ui/icons/AccountBalanceWalletOutlined';\r\nimport TollOutlinedIcon from '@material-ui/icons/TollOutlined';\r\nimport LocationSearchingOutlinedIcon from '@material-ui/icons/LocationSearchingOutlined';\r\nimport PublishOutlinedIcon from '@material-ui/icons/PublishOutlined';\r\nimport CastOutlinedIcon from '@material-ui/icons/CastOutlined';\r\nimport { useMatterSummaryContext } from '../MatterSummaryContextProvider';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n },\r\n doneIcon: {\r\n marginRight: '10px',\r\n },\r\n loaderWrapper: {\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n left: 0,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n icon: {\r\n marginRight: '10px',\r\n color: mainTheme.BrandColors.TemplatePrimary\r\n },\r\n })\r\n);\r\n\r\nexport enum MatterTaskActionEnum {\r\n BillMatter = 1,\r\n WriteOffUnbilledFees,\r\n TransferTrustToPayInvoice,\r\n WriteOffDebtors,\r\n CloseMatter,\r\n ArchiveMatter,\r\n ViewMatter,\r\n CreateTask,\r\n EmailPersonActing,\r\n EmailPersonResponsible,\r\n UploadDocument,\r\n MatterFollowUpAction,\r\n MatterForecasts\r\n}\r\n\r\nexport interface CurrencyDetails {\r\n currencySymbol: string;\r\n currency: string;\r\n}\r\n\r\ninterface MatterTaskActionProps /* extends ICellRendererParams,*/ /*WithStyles*/ {\r\n // tslint:disable-next-line: no-any\r\n data?: any;\r\n matterId: number;\r\n}\r\n\r\ntype MatterTaskDialogState = {\r\n isBillMatterOpen: boolean;\r\n isWriteOffUnbilledFeesOpen: boolean;\r\n isTransferTrustToPayInvoiceOpen: boolean;\r\n isWriteOffDebtorsOpen: boolean;\r\n isCloseMatterOpen: boolean;\r\n isArchiveMatterOpen: boolean;\r\n isCreateTaskOpen: boolean;\r\n isUploadDocumentOpen: boolean;\r\n isMatterFollowUpOpen: boolean;\r\n};\r\n\r\ninterface MatterTaskActionState extends MatterTaskDialogState {\r\n loggedInUser: IAutoCompleteItem | null;\r\n defaultPriority: IAutoCompleteItem | null;\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const MatterTaskAction: React.FC = ( props ) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [open, setOpen] = React.useState(false);\r\n const anchorRef = React.useRef(null);\r\n\r\n const { onMaterForcastFormOpen } = useMatterSummaryContext();\r\n\r\n const [currencyData, setCurrencyData] = useState();\r\n const [matterData, setMatterData] = useState();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [state, setState] = useState({\r\n isBillMatterOpen: false,\r\n isWriteOffUnbilledFeesOpen: false,\r\n isTransferTrustToPayInvoiceOpen: false,\r\n isWriteOffDebtorsOpen: false,\r\n isCloseMatterOpen: false,\r\n isArchiveMatterOpen: false,\r\n isCreateTaskOpen: false,\r\n isUploadDocumentOpen: false,\r\n isMatterFollowUpOpen: false,\r\n loggedInUser: null,\r\n defaultPriority: null,\r\n });\r\n\r\n const matterId: number = props.matterId \r\n ? props.matterId \r\n : (props.data && props.data.id) ? props.data.id : 0;\r\n\r\n useEffect(() => {\r\n fetchCurrencyDetails();\r\n fetchUser();\r\n fetchPriority();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchCurrencyDetails = () => {\r\n if (currencyData === undefined) {\r\n fetchCurrencyData(false,\r\n (data: CurrencyOptionData) => {\r\n handleCurrencyFetch(data);\r\n }, \r\n (reason) => {\r\n showNotification('Failed to Fetch App User Settings', reason, 'error'); \r\n });\r\n }\r\n };\r\n\r\n const handleCurrencyFetch = (data: CurrencyOptionData) => {\r\n if (data && !data.loading && data.options) {\r\n if (data.options.currencySymbol && data.options.localCurrency) {\r\n setCurrencyData({\r\n currency: data.options.localCurrency.currency,\r\n currencySymbol: data.options.currencySymbol.symbol\r\n });\r\n }\r\n }\r\n };\r\n\r\n const fetchMatterDetails = () => {\r\n fetchMatterDetailsData(true, // This should always be a new request.\r\n matterId,\r\n (data: MatterData) => {\r\n handleMatterDataFetch(data);\r\n }, \r\n (reason) => {\r\n showNotification('Failed to Fetch App User Settings', reason, 'error'); \r\n });\r\n \r\n };\r\n\r\n const handleMatterDataFetch = (data: MatterData) => {\r\n if (data && !data.loading && data.matter) {\r\n if (data.matter) {\r\n setMatterData(data.matter);\r\n\r\n setIsLoading(false);\r\n }\r\n }\r\n };\r\n\r\n const fetchUser = () => {\r\n fetchAppUserData(\r\n false,\r\n (data: AppUserData) => handleUserDataFetch(data),\r\n // tslint:disable-next-line: no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const handleUserDataFetch = (data: AppUserData) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n loggedInUser: { label: data.appUser.name, value: data.appUser.userId },\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n const fetchPriority = () => {\r\n retrievePriorityData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data) => handlePriorityDataFetch(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const handlePriorityDataFetch = (data: PriorityData) => {\r\n // set the priority default data\r\n const priorityData = data.lookup.priority.filter(value => {\r\n return value.description === 'No Priority';\r\n });\r\n\r\n if (priorityData && priorityData.length > 0) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n defaultPriority: { label: priorityData[0].description, value: priorityData[0].guidId },\r\n isLoading: false\r\n };\r\n });\r\n } \r\n };\r\n\r\n const handleToggle = () => {\r\n // tslint:disable-next-line: no-shadowed-variable\r\n setOpen((prevOpen) => !prevOpen);\r\n setIsLoading(true);\r\n fetchMatterDetails();\r\n };\r\n\r\n const archorEvent = (event: React.MouseEvent) => {\r\n if (anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)) {\r\n return;\r\n }\r\n };\r\n\r\n const handleClickMenu = (menu: MatterTaskActionEnum) => (event: React.MouseEvent) => {\r\n if (anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n\r\n switch (menu) {\r\n case MatterTaskActionEnum.BillMatter : {\r\n setOpen(false);\r\n onBillTheMatterOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.WriteOffUnbilledFees : {\r\n setOpen(false);\r\n onWriteOffUnbilledFeesOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.TransferTrustToPayInvoice : {\r\n setOpen(false);\r\n onTransferTrustToPayInvoiceOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.WriteOffDebtors: {\r\n setOpen(false);\r\n onWriteOffDebtorsOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.CloseMatter: {\r\n setOpen(false);\r\n onCloseMatterOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.ArchiveMatter: {\r\n setOpen(false);\r\n onArchiveMatterOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.CreateTask: {\r\n setOpen(false);\r\n onCreateMatterTaskOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.UploadDocument: {\r\n setOpen(false);\r\n onUploadDocumentOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.MatterFollowUpAction: {\r\n setOpen(false);\r\n onMatterFollowUpOpen(event);\r\n break;\r\n }\r\n case MatterTaskActionEnum.MatterForecasts: {\r\n setOpen(false);\r\n onMatterForecastsOpen(matterId, matterData!.matterGuid, event);\r\n break;\r\n }\r\n default: {\r\n setOpen(false);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const onBillTheMatterOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isBillMatterOpen: true\r\n });\r\n };\r\n\r\n const onWriteOffUnbilledFeesOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isWriteOffUnbilledFeesOpen: true\r\n });\r\n };\r\n\r\n const onTransferTrustToPayInvoiceOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isTransferTrustToPayInvoiceOpen: true\r\n });\r\n };\r\n\r\n const onWriteOffDebtorsOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isWriteOffDebtorsOpen: true\r\n });\r\n };\r\n \r\n const onCloseMatterOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isCloseMatterOpen: true\r\n });\r\n }; \r\n\r\n const onArchiveMatterOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isArchiveMatterOpen: true\r\n });\r\n }; \r\n \r\n const onCreateMatterTaskOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isCreateTaskOpen: true\r\n });\r\n }; \r\n\r\n const onUploadDocumentOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isUploadDocumentOpen: true\r\n });\r\n };\r\n \r\n const onMatterFollowUpOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isMatterFollowUpOpen: true\r\n };\r\n });\r\n };\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const onMatterForecastsOpen = (matterId: number, matterGuid: string, event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n onMaterForcastFormOpen(matterId, matterGuid);\r\n\r\n // setState((prevState) => {\r\n // return {\r\n // ...prevState,\r\n // isMatterForecastsOpen: true\r\n // };\r\n // });\r\n };\r\n\r\n // const onEmailPersonActing = (event: React.MouseEvent) => {\r\n // archorEvent(event);\r\n // setOpen(false);\r\n\r\n // var mail = document.createElement('a');\r\n // // tslint:disable-next-line: max-line-length\r\n // mail.href = `mailto:${matterData?.actingEmail}?subject=RE ${matterData?.client} - ${matterData?.description} (${matterData?.fileNumber})`;\r\n // mail.click();\r\n // };\r\n\r\n // const onEmailPersonResponsible = (event: React.MouseEvent) => {\r\n // archorEvent(event);\r\n // setOpen(false);\r\n\r\n // var mail = document.createElement('a');\r\n // tslint:disable-next-line: max-line-length\r\n // mail.href = `mailto:${matterData?.responsibleEmail}?subject=RE ${matterData?.client} - ${matterData?.description} (${matterData?.fileNumber})`;\r\n // mail.click();\r\n // };\r\n\r\n const onDialogClose = () => {\r\n setOpen(false);\r\n\r\n setState({\r\n ...state,\r\n isBillMatterOpen: false,\r\n isWriteOffUnbilledFeesOpen: false,\r\n isTransferTrustToPayInvoiceOpen: false,\r\n isWriteOffDebtorsOpen: false,\r\n isCloseMatterOpen: false,\r\n isArchiveMatterOpen: false,\r\n isCreateTaskOpen: false,\r\n isUploadDocumentOpen: false,\r\n isMatterFollowUpOpen: false\r\n });\r\n };\r\n\r\n const onMatterDetailOpen = (event: React.MouseEvent) => {\r\n archorEvent(event);\r\n setOpen(false);\r\n\r\n client.mutate({\r\n mutation: AddUserMatterAccessActivity,\r\n variables: {\r\n matterId: matterId\r\n }\r\n }).then((results: {\r\n data: {\r\n addUserMatterAccessActivity: boolean\r\n }\r\n }) => {\r\n if (results.data.addUserMatterAccessActivity === false) {\r\n // tslint:disable-next-line:no-console\r\n console.log('AddUserMatterAccessActivity mutation failed');\r\n } \r\n }); \r\n\r\n sessionStorage.setItem('typeOfView', 'noback');\r\n\r\n // TODO: We need state of Matter Summary to be passed\r\n var href = history.createHref({\r\n pathname: '/matterDetail/' + matterId,\r\n key: 'matterManagement',\r\n state: {\r\n matterManagementState: 'false',\r\n }\r\n });\r\n\r\n window.open(href, '_blank');\r\n };\r\n\r\n const handleClose = (event: React.MouseEvent) => {\r\n if (\r\n anchorRef.current &&\r\n anchorRef.current.contains(event.target as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n function handleListKeyDown(event: React.KeyboardEvent) {\r\n if (event.key === 'Tab') {\r\n event.preventDefault();\r\n setOpen(false);\r\n }\r\n }\r\n\r\n // return focus to the button when we transitioned from !open -> open\r\n const prevOpen = React.useRef(open);\r\n React.useEffect(() => {\r\n if (prevOpen.current === true && open === false) {\r\n anchorRef.current!.focus();\r\n }\r\n\r\n prevOpen.current = open;\r\n // tslint:disable-next-line: align\r\n }, [open]);\r\n\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const getMatterTaskActions = (matterId: number) => {\r\n if (matterData && currencyData) {\r\n const unBilledFees = matterData.financials ? matterData.financials.unbilledTimeAndFees : 0;\r\n const unbilledDisbursements = matterData.financials ? matterData.financials.unbilledDisbursements : 0;\r\n const outstandingDebtors = matterData.financials ? matterData.financials.debtors : 0;\r\n const currentTrustBalance = matterData.financials ? matterData.financials.trustBalance : 0;\r\n const billedFees = matterData.financials ? matterData.financials.billedTimeAndFees : 0;\r\n const feeEstimate = matterData.financials ? matterData.financials.feeEstimate : 0;\r\n const percentageEstimate = matterData.financials ? matterData.financials.percentageEstimate : 0;\r\n const pendingWriteOffFeesAmountInBillMatterTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInBillMatterTask \r\n : 0;\r\n const pendingWriteOffFeesAmountInWriteOffWipTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffFeesAmountInWriteOffWipTask \r\n : 0;\r\n const pendingWriteOffDisbAmountInBillMatterTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffDisbAmountInBillMatterTask \r\n : 0;\r\n const pendingWriteOffDisbAmountInWriteOffWipTask = matterData.financials \r\n ? matterData.actions.pendingWriteOffDisbAmountInWriteOffWipTask \r\n : 0;\r\n\r\n const matterTitle = `${matterData.description}`;\r\n\r\n return (\r\n \r\n {state.isBillMatterOpen && (\r\n \r\n )}\r\n \r\n {state.isWriteOffUnbilledFeesOpen && (\r\n \r\n )}\r\n \r\n {state.isWriteOffDebtorsOpen && (\r\n \r\n )}\r\n \r\n {state.isTransferTrustToPayInvoiceOpen && (\r\n \r\n )}\r\n \r\n {state.isArchiveMatterOpen && (\r\n \r\n )}\r\n \r\n {state.isCloseMatterOpen && (\r\n \r\n )} \r\n\r\n {state.isCreateTaskOpen && (\r\n \r\n )} \r\n {state.isUploadDocumentOpen && (\r\n \r\n )} \r\n {state.isMatterFollowUpOpen && (\r\n \r\n )} \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n const getLoader = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n const getMenuItems = () => {\r\n if (matterData) {\r\n return (\r\n \r\n \r\n {({ TransitionProps, placement }) => (\r\n \r\n \r\n \r\n \r\n \r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasBillMatter) && \r\n \r\n {matterData.actions.hasBillMatterTask && (\r\n \r\n )}\r\n Bill the matter\r\n \r\n }\r\n\r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasWriteOffWIP) &&\r\n \r\n {matterData.actions.hasWriteOffUnbilledFeesTask && (\r\n \r\n )}\r\n Write off Wip\r\n \r\n }\r\n \r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasTransferMatterTrust) &&\r\n \r\n {matterData.actions.hasTransferTrustToPayInvoiceTask && (\r\n \r\n )}\r\n Transfer Trust to Pay invoice\r\n \r\n\r\n }\r\n\r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasWriteOffDebtors) &&\r\n \r\n {matterData.actions.hasWriteOffDebtorsTask && (\r\n \r\n )}\r\n Write off Debtors\r\n \r\n }\r\n\r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasCloseMatter) &&\r\n\r\n \r\n {matterData.actions.hasCloseMatterTask && (\r\n \r\n )}\r\n Close Matter\r\n \r\n } \r\n \r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasArchiveMatter) &&\r\n \r\n {matterData.actions.hasArchiveMatterTask && (\r\n \r\n )}\r\n Archive Matter\r\n \r\n } \r\n \r\n {/* Display View Matter if it is used in Summary View only */}\r\n {props.data && props.data.id && (\r\n ) => \r\n onMatterDetailOpen(event)\r\n }\r\n >\r\n View Matter\r\n \r\n )} \r\n\r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasCreateTask) && UserFeature.HasAccess(UserFeatureEnum.hasAdHocTask) &&\r\n \r\n {matterData.actions.hasMatterTask && (\r\n \r\n )}\r\n Create Adhoc Task\r\n \r\n } \r\n \r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasFollowUpMatterTask) && \r\n \r\n Follow Up\r\n \r\n }\r\n\r\n {/* onEmailPersonActing(event)}\r\n disabled={false}\r\n style={!UserFeature.HasAccess(UserFeatureEnum.hasMatterEmailPersonActing) \r\n ? {display: 'none'} \r\n : {display: 'block'}}\r\n >\r\n Email Person Acting\r\n \r\n onEmailPersonResponsible(event)}\r\n disabled={false}\r\n style={!UserFeature.HasAccess(UserFeatureEnum.hasMatterEmailPersonResponsible) \r\n ? {display: 'none'} \r\n : {display: 'block'}}\r\n >\r\n Email Person Responsible\r\n */}\r\n {\r\n UserFeature.HasAccess(UserFeatureEnum.hasUploadMatterDocument) && \r\n \r\n Upload Document\r\n \r\n }\r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterForecast) && (\r\n \r\n Matter Forecasts\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n \r\n {\r\n props.data !== undefined && (\r\n
\r\n \r\n \r\n \r\n\r\n {\r\n isLoading\r\n ? getLoader()\r\n : getMenuItems() \r\n }\r\n\r\n {getMatterTaskActions(matterId)} \r\n
\r\n )\r\n }\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { RvButtonFabric, RvButtonType } from '../components/Button';\r\nimport { RvLabel, LabelStyle } from '../components/Label/Label';\r\nimport { mainTheme } from '../Theme';\r\nimport { Button } from '@material-ui/core';\r\n// import ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\nimport VideoLibraryOutlinedIcon from '@material-ui/icons/VideoLibraryOutlined';\r\nimport { useCurrentUser } from '../hooks/useCurrentUser';\r\nimport { RvLoader } from '../components/Loader';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { LearnMoreEnum } from '../learnMore/LearnMorePage';\r\nimport { UserFeature, UserFeatureEnum } from '../types/UserFeature';\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n padding: '0 1rem',\r\n },\r\n container: {},\r\n buttonContainer: {\r\n position: 'relative',\r\n padding: '15px 80px',\r\n display: 'flex',\r\n // justifyContent: 'space-between',\r\n alignItems: 'center',\r\n color: mainTheme.BrandColors.TextPrimary,\r\n '@media (max-width: 1024px)': {\r\n padding: '15px 30px',\r\n },\r\n '& .rvlabel': {\r\n flex: 1,\r\n // paddingLeft: '82px',\r\n fontFamily: mainTheme.Font.Main,\r\n fontSize: mainTheme.FontSize.PX.size8,\r\n letterSpacing: '0.86px',\r\n lineHeight: mainTheme.LineHeight.ExtraLarge,\r\n },\r\n '& .back-button': {\r\n paddingRight: '32px',\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n '& .ms-Button': {\r\n width: '50px',\r\n height: '50px',\r\n },\r\n '& .ms-Button-icon': {\r\n fontSize: mainTheme.FontSize.PX.size10,\r\n color: mainTheme.BrandColors.TemplatePrimary,\r\n },\r\n },\r\n },\r\n buttonGroupWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '0 -10px',\r\n '& > button': {\r\n margin: '0 10px',\r\n },\r\n },\r\n button: {\r\n margin: '0 10px',\r\n textTransform: 'none',\r\n fontSize: '14px',\r\n },\r\n }),\r\n);\r\n\r\ninterface BannerProps {\r\n title: string;\r\n}\r\n\r\nexport const MatterSummaryHeader: React.FC = ({ title }) => {\r\n const classes = useStyles();\r\n\r\n const currentUser = useCurrentUser();\r\n\r\n const history = useHistory();\r\n\r\n if (currentUser.loading) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n const isInternal = currentUser.data?.appUser.isInternal;\r\n \r\n const onLearnMore = () => {\r\n if (!isInternal) {\r\n history.push({\r\n pathname: `/learnMore/${LearnMoreEnum[LearnMoreEnum.Matter_Searching_Client]}`, \r\n });\r\n } else {\r\n\r\n history.push({\r\n pathname: `/learnMore/${LearnMoreEnum[LearnMoreEnum.Matter_Searching_Client_Internal_User]}`, \r\n });\r\n }\r\n\r\n };\r\n\r\n const onResources = () => {\r\n history.push({\r\n pathname: `/mattersResourceCenter`,\r\n });\r\n };\r\n \r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterLearnMore) && (\r\n \r\n )}\r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterLearnMore) && isInternal && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles, withStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport PersonOutlinedIcon from '@material-ui/icons/PersonOutlined';\r\nimport { TextField, CircularProgress, Tooltip, Chip } from '@material-ui/core';\r\nimport { GetTagProps, RenderInputParams } from '@material-ui/lab';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0',\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n width: '100%',\r\n '& > div': {\r\n padding: '0 10px',\r\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\r\n fontWeight: 400,\r\n },\r\n '& .icon-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .other': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n },\r\n },\r\n },\r\n }),\r\n);\r\n\r\ninterface NameSummaryQueryParamsExtend {\r\n isClientsOnly?: boolean;\r\n includeStaff?: boolean;\r\n includeIndividual?: boolean;\r\n includeOrganisation?: boolean;\r\n tagsList?: string;\r\n stateList?: string;\r\n countryList?: string;\r\n businessTypeList?: string;\r\n isMatterOwnersOnly?: boolean;\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\ninterface MatterClientSelectorProps extends NameSummaryQueryParamsExtend {\r\n multiple?: boolean;\r\n label?: string;\r\n name: string;\r\n // tslint:disable-next-line: no-any\r\n value?: NameSummaryAutoCompleteItem | NameSummaryAutoCompleteItem[] | any; // value only available in single select\r\n onSelection?: (value: NameSummaryAutoCompleteItem | NameSummaryAutoCompleteItem[], name: string) => void;\r\n required?: boolean;\r\n id?: string;\r\n textLimit?: {\r\n label?: number;\r\n email?: number;\r\n };\r\n error?: boolean;\r\n helperText?: string;\r\n disablePortal?: boolean;\r\n variant?: 'standard' | 'filled' | 'outlined';\r\n size?: 'small' | 'medium';\r\n onBlur?: React.FocusEventHandler;\r\n className?: string;\r\n}\r\n\r\nexport interface NameSummaryAutoCompleteItem extends IAutoCompleteItem, NameSummary {}\r\n\r\ninterface MatterClientSelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n filter: string;\r\n // tslint:disable-next-line: no-any\r\n items: NameSummaryAutoCompleteItem[];\r\n}\r\n\r\nexport const MatterClientSelector: React.FC = (props) => {\r\n const classes = useStyles();\r\n const loadBlockLimit = 20;\r\n\r\n const [delayedonInputChange] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n let isClear = false;\r\n let offset = 0;\r\n let filter = '';\r\n\r\n if (reason === 'input') {\r\n filter = value;\r\n isClear = true;\r\n\r\n fetchData(filter, offset, isClear);\r\n }\r\n },\r\n // delay in ms\r\n 500,\r\n );\r\n\r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n filter: '',\r\n items: [],\r\n });\r\n\r\n // useEffect(() => {\r\n // fetchData(state.filter, 0, state.isNextPageLoading, state.hasNextPage, false);\r\n // // tslint:disable-next-line: align\r\n // }, []);\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset, false);\r\n }\r\n };\r\n\r\n const fetchData = (filter: string, offset: number, isClear: boolean) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true,\r\n };\r\n });\r\n\r\n const userQueryParams: NameSummaryQueryParams = {\r\n filter: filter,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n isClientsOnly: props.isClientsOnly,\r\n isMatterOwnersOnly: props.isMatterOwnersOnly,\r\n includeIndividual: props.includeIndividual,\r\n includeOrganisation: props.includeOrganisation,\r\n includeStaff: props.includeStaff,\r\n businessTypeList: props.businessTypeList,\r\n countryList: props.countryList,\r\n stateList: props.stateList,\r\n tagsList: props.tagsList,\r\n isApplyMatterAccess: props.isApplyMatterAccess\r\n };\r\n\r\n retrieveNameSummaryData(\r\n userQueryParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveClientList(data, filter, offset, isClear),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n isLoading: false,\r\n };\r\n });\r\n },\r\n );\r\n };\r\n\r\n const onRetrieveClientList = (data: NameSummaryData, filter: string, offset: number, isClear: boolean) => {\r\n const nameSummaryData = data.party.nameSummaries.nameSummary;\r\n const recordCount = data.party.nameSummaries.recordCount;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: NameSummaryAutoCompleteItem[] = [];\r\n\r\n let items = state.items;\r\n\r\n if (!isClear) {\r\n itemsList = [...state.items];\r\n } else {\r\n items = [];\r\n }\r\n\r\n if (items.length === 0) {\r\n itemsList = nameSummaryData.map((source: NameSummary) => ({\r\n ...source,\r\n value: source.guidID,\r\n label: source.name,\r\n }));\r\n } else {\r\n // tslint:disable-next-line: no-shadowed-variable\r\n for (const nameSummary of nameSummaryData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = items.filter((item: NameSummaryAutoCompleteItem) => item.value.toLowerCase().includes(nameSummary.guidID)).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n ...nameSummary,\r\n value: nameSummary.guidID,\r\n label: nameSummary.name,\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: offset + loadBlockLimit,\r\n hasNextPage: nameSummaryData.length !== 0 && offset + loadBlockLimit < recordCount,\r\n isLoading: false,\r\n };\r\n });\r\n };\r\n\r\n const onSelection = (selection: NameSummaryAutoCompleteItem | NameSummaryAutoCompleteItem[], name: string) => {\r\n // setState((prevState) => {\r\n // return {\r\n // ...prevState,\r\n // isNextPageLoading: false,\r\n // filter: '',\r\n // offset: 0\r\n // };\r\n // });\r\n\r\n if (props.onSelection) {\r\n props.onSelection(selection, name);\r\n }\r\n };\r\n\r\n const onClose = (event: React.ChangeEvent<{}>) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n hasNextPage: true,\r\n filter: '',\r\n offset: 0,\r\n items: [],\r\n };\r\n });\r\n };\r\n\r\n const onOpen = (event: React.ChangeEvent<{}>) => {\r\n // tslint:disable-next-line: no-console\r\n fetchData(state.filter, 0, true);\r\n };\r\n\r\n const LightTooltip = withStyles((theme: Theme) => ({\r\n tooltip: {\r\n backgroundColor: theme.palette.common.white,\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n boxShadow: theme.shadows[1],\r\n fontSize: 11,\r\n },\r\n arrow: {\r\n '&:before': {\r\n border: '1px solid #E6E8ED',\r\n },\r\n color: theme.palette.common.white,\r\n },\r\n }))(Tooltip);\r\n\r\n const shortingTitle = (title: string, limit?: number) => {\r\n if (limit === undefined || limit === null) {\r\n return title;\r\n } else if (title === undefined || title === null) {\r\n return title;\r\n } else if (title.length < limit) {\r\n return title;\r\n } else {\r\n return (\r\n \r\n {`${title.substring(0, limit)}...`}\r\n \r\n );\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const onRenderTags = (value: NameSummaryAutoCompleteItem[], getTagProps: GetTagProps): React.ReactNode => {\r\n let renderTagsValue = value.map((option: NameSummaryAutoCompleteItem, index: number) => {\r\n let label = option.label;\r\n if (option.label.length > 20) {\r\n label = `${option.label.substring(0, 20)}...`;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return renderTagsValue;\r\n };\r\n\r\n return (\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onInputChange={delayedonInputChange}\r\n onBlur={props.onBlur}\r\n renderTags={onRenderTags}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n
\r\n
{option.isStaff ? : }
\r\n
\r\n
{shortingTitle(option.label, props.textLimit?.label)}
\r\n
{shortingTitle(option.email, props.textLimit?.email)}
\r\n
\r\n
\r\n );\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport function retrieveNameSummaryData(\r\n query: NameSummaryQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: NameSummaryData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: NAME_SUMMARY_QUERY,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first,\r\n offset: query.offset,\r\n isClientsOnly: query.isClientsOnly,\r\n isMatterOwnersOnly: query.isMatterOwnersOnly,\r\n includeIndividual: query.includeIndividual,\r\n includeOrganisation: query.includeOrganisation,\r\n includeStaff: query.includeStaff,\r\n businessTypeList: query.businessTypeList,\r\n countryList: query.countryList,\r\n stateList: query.stateList,\r\n tagsList: query.tagsList,\r\n isApplyMatterAccess: query.isApplyMatterAccess\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface NameSummaryQueryParams {\r\n offset?: number;\r\n first?: number;\r\n filter?: string;\r\n isClientsOnly?: boolean;\r\n includeStaff?: boolean;\r\n includeIndividual?: boolean;\r\n includeOrganisation?: boolean;\r\n tagsList?: string;\r\n stateList?: string;\r\n countryList?: string;\r\n businessTypeList?: string;\r\n isMatterOwnersOnly?: boolean;\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface NameSummaryData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n party: Party;\r\n}\r\n\r\nexport interface Party {\r\n nameSummaries: NameSummaries;\r\n}\r\n\r\nexport interface NameSummaries {\r\n recordCount: number;\r\n nameSummaryActualCount: NameSummaryActualCount;\r\n nameSummary: NameSummary[];\r\n}\r\n\r\nexport interface NameSummary {\r\n guidID: string;\r\n nameId: number;\r\n name: string;\r\n relatedName: null;\r\n emailAddress: null | string;\r\n mobile: null | string;\r\n phone: string;\r\n city: null | string;\r\n state: null | string;\r\n country: string | null;\r\n address: string;\r\n entityType: number;\r\n relationshipManager: null;\r\n relationshipQualityDescription: null;\r\n relationshipQualityLevel: null;\r\n referrerType: null;\r\n referrerSource: null;\r\n lastContactDate: Date | null;\r\n lastReferralDate: Date | null;\r\n notes: null | string;\r\n isClient: boolean;\r\n isOrganisation: boolean;\r\n isIndividual: boolean;\r\n isStaff: boolean;\r\n isReferrer: boolean;\r\n isUser: boolean;\r\n currentMatters: number;\r\n lastMatterDate: Date;\r\n estimatedFees: number;\r\n billedFees: number;\r\n trustBalance: number;\r\n billedDisbursements: number;\r\n unbilledFees: number;\r\n unbilledDisbursements: number;\r\n completedMatters: number;\r\n newMattersInTheLast12Months: number;\r\n firstMatterDate: Date;\r\n totalBilledFees: number;\r\n percentageEstimate: number;\r\n exposure: number;\r\n hasMarketingConsent: boolean;\r\n tags: null | string;\r\n enquiriesReferredInTheLast12Months: number;\r\n enquiriesReferredInTotal: number;\r\n lastEnquiryDate: Date | null;\r\n businessType: null | string;\r\n}\r\n\r\nexport interface NameSummaryActualCount {\r\n actualRowCountForSearch: number;\r\n}\r\n\r\nconst NAME_SUMMARY_QUERY = gql`\r\n query NameSummaries(\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $isClientsOnly: Boolean\r\n $includeStaff: Boolean\r\n $includeIndividual: Boolean\r\n $includeOrganisation: Boolean\r\n $tagsList: String\r\n $stateList: String\r\n $countryList: String\r\n $relationshipManagerList: String\r\n $businessTypeList: String\r\n $isMatterOwnersOnly: Boolean\r\n $isApplyMatterAccess: Boolean\r\n ) {\r\n party {\r\n nameSummaries(\r\n offset: $offset\r\n first: $first\r\n filter: $filter\r\n isClientsOnly: $isClientsOnly\r\n includeStaff: $includeStaff\r\n includeIndividual: $includeIndividual\r\n includeOrganisation: $includeOrganisation\r\n tagsList: $tagsList\r\n stateList: $stateList\r\n countryList: $countryList\r\n businessTypeList: $businessTypeList\r\n isMatterOwnersOnly: $isMatterOwnersOnly\r\n isApplyMatterAccess: $isApplyMatterAccess\r\n relationshipManagerList: $relationshipManagerList\r\n ) {\r\n recordCount\r\n nameSummaryActualCount {\r\n actualRowCountForSearch\r\n }\r\n nameSummary {\r\n guidID\r\n nameId\r\n name\r\n relatedName\r\n emailAddress\r\n mobile\r\n phone\r\n city\r\n state\r\n country\r\n address\r\n entityType\r\n relationshipManager\r\n relationshipQualityDescription\r\n relationshipQualityLevel\r\n referrerType\r\n referrerSource\r\n lastContactDate\r\n lastReferralDate\r\n notes\r\n isClient\r\n isOrganisation\r\n isIndividual\r\n isStaff\r\n isReferrer\r\n isUser\r\n currentMatters\r\n lastMatterDate\r\n estimatedFees\r\n billedFees\r\n trustBalance\r\n billedDisbursements\r\n unbilledFees\r\n unbilledDisbursements\r\n completedMatters\r\n newMattersInTheLast12Months\r\n firstMatterDate\r\n totalBilledFees\r\n percentageEstimate\r\n exposure\r\n hasMarketingConsent\r\n tags\r\n enquiriesReferredInTheLast12Months\r\n enquiriesReferredInTotal\r\n lastEnquiryDate\r\n businessType\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","import React, { useState, useMemo } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, GetTagProps, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, Chip } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport gql from 'graphql-tag';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { useQuery } from 'react-apollo';\r\n\r\n// const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// removedAvatar: {\r\n// maxWidth: '15px',\r\n// maxHeight: '15px',\r\n// },\r\n// }),\r\n// );\r\n\r\ninterface PriorityCountrySelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: PriorityCountryAutoCompleteItem | PriorityCountryAutoCompleteItem[] | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: PriorityCountryAutoCompleteItem | PriorityCountryAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties;\r\n disablePortal?: boolean;\r\n variant?: 'standard' | 'filled' | 'outlined';\r\n size?: 'small' | 'medium';\r\n onBlur?: React.FocusEventHandler;\r\n multiple?: boolean;\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface PriorityCountryAutoCompleteItem extends IAutoCompleteItem, PriorityCountry {}\r\n\r\ninterface PriorityCountrySelectorState {\r\n data: PriorityCountryAutoCompleteItem[];\r\n}\r\n\r\nexport const PriorityCountrySelector: React.FC = (props) => {\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n data: [],\r\n });\r\n\r\n const priorityCountryQuery = useQuery(PriorityCountryQuery, {\r\n variables: {\r\n isApplyMatterAccess: props.isApplyMatterAccess,\r\n },\r\n fetchPolicy: 'cache-first',\r\n });\r\n\r\n useMemo(() => {\r\n if (\r\n !priorityCountryQuery.loading &&\r\n !priorityCountryQuery.error &&\r\n priorityCountryQuery.data &&\r\n priorityCountryQuery.data.lookup &&\r\n priorityCountryQuery.data.lookup.priorityCountry\r\n ) {\r\n setState((prevState) => {\r\n const { priorityCountry } = priorityCountryQuery.data!.lookup;\r\n\r\n const items: PriorityCountryAutoCompleteItem[] = priorityCountry.map((country: PriorityCountry) => {\r\n return {\r\n ...country,\r\n label: country.description,\r\n value: country.description,\r\n };\r\n });\r\n return {\r\n ...prevState,\r\n data: items,\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [priorityCountryQuery.loading, priorityCountryQuery.data, priorityCountryQuery.error]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const onRenderTags = (value: PriorityCountryAutoCompleteItem[], getTagProps: GetTagProps): React.ReactNode => {\r\n let renderTagsValue = value.map((option: PriorityCountryAutoCompleteItem, index: number) => {\r\n let label = option.label;\r\n if (option.label.length > 20) {\r\n label = `${option.label.substring(0, 20)}...`;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return renderTagsValue;\r\n };\r\n\r\n if (props.multiple) {\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n multiple={true}\r\n renderTags={onRenderTags}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport interface PriorityCountryParams {\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface PriorityCountryData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n priorityCountry: PriorityCountry[];\r\n}\r\n\r\nexport interface PriorityCountry {\r\n id: number;\r\n description: string;\r\n}\r\n\r\nconst PriorityCountryQuery = gql`\r\n query PriorityCountryQuery($isApplyMatterAccess: Boolean) {\r\n lookup {\r\n priorityCountry(isApplyMatterAccess: $isApplyMatterAccess) {\r\n id\r\n description\r\n }\r\n }\r\n }\r\n`;\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles, withStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport PersonOutlinedIcon from '@material-ui/icons/PersonOutlined';\r\nimport { TextField, CircularProgress, Tooltip, Chip } from '@material-ui/core';\r\nimport { GetTagProps, RenderInputParams } from '@material-ui/lab';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0',\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n width: '100%',\r\n '& > div': {\r\n padding: '0 10px',\r\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\r\n fontWeight: 400,\r\n },\r\n '& .icon-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .other': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n },\r\n },\r\n },\r\n }),\r\n);\r\n\r\ninterface StaffSelectorProps {\r\n multiple?: boolean;\r\n label?: string;\r\n name: string;\r\n // tslint:disable-next-line: no-any\r\n value?: StaffSummaryAutoCompleteItem | StaffSummaryAutoCompleteItem[] | any; // value only available in single select\r\n onSelection?: (value: StaffSummaryAutoCompleteItem | StaffSummaryAutoCompleteItem[], name: string) => void;\r\n required?: boolean;\r\n id?: string;\r\n textLimit?: {\r\n label?: number;\r\n email?: number;\r\n };\r\n error?: boolean;\r\n helperText?: string;\r\n disablePortal?: boolean;\r\n variant?: 'standard' | 'filled' | 'outlined';\r\n size?: 'small' | 'medium';\r\n onBlur?: React.FocusEventHandler;\r\n className?: string;\r\n}\r\n\r\nexport interface StaffSummaryAutoCompleteItem extends IAutoCompleteItem, StaffSummary {}\r\n\r\ninterface StaffSelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n filter: string;\r\n // tslint:disable-next-line: no-any\r\n items: StaffSummaryAutoCompleteItem[];\r\n}\r\n\r\nexport const StaffSelector: React.FC = (props) => {\r\n const classes = useStyles();\r\n const loadBlockLimit = 20;\r\n\r\n const [delayedonInputChange] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n let isClear = false;\r\n let offset = 0;\r\n let filter = '';\r\n\r\n if (reason === 'input') {\r\n filter = value;\r\n isClear = true;\r\n\r\n fetchData(filter, offset, isClear);\r\n }\r\n },\r\n // delay in ms\r\n 500,\r\n );\r\n\r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n filter: '',\r\n items: [],\r\n });\r\n\r\n // useEffect(() => {\r\n // fetchData(state.filter, 0, state.isNextPageLoading, state.hasNextPage, false);\r\n // // tslint:disable-next-line: align\r\n // }, []);\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset, false);\r\n }\r\n };\r\n\r\n const fetchData = (filter: string, offset: number, isClear: boolean) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true,\r\n };\r\n });\r\n\r\n const userQueryParams: StaffQueryParams = {\r\n filter: filter,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n };\r\n\r\n retrieveStaffListData(\r\n userQueryParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveClientList(data, filter, offset, isClear),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n isLoading: false,\r\n };\r\n });\r\n },\r\n );\r\n };\r\n\r\n const onRetrieveClientList = (data: StaffListData, filter: string, offset: number, isClear: boolean) => {\r\n const staffSummaryData = data.party.staffSummaries.staffSummary;\r\n const recordCount = data.party.staffSummaries.recordCount;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: StaffSummaryAutoCompleteItem[] = [];\r\n\r\n let items = state.items;\r\n\r\n if (!isClear) {\r\n itemsList = [...state.items];\r\n } else {\r\n items = [];\r\n }\r\n\r\n if (items.length === 0) {\r\n itemsList = staffSummaryData.map((source: StaffSummary) => ({\r\n ...source,\r\n value: source.staffGuid,\r\n label: source.name,\r\n }));\r\n } else {\r\n // tslint:disable-next-line: no-shadowed-variable\r\n for (const staffSummary of staffSummaryData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = items.filter((item: StaffSummaryAutoCompleteItem) => item.value.toLowerCase().includes(staffSummary.staffGuid)).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n ...staffSummary,\r\n value: staffSummary.staffGuid,\r\n label: staffSummary.name,\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: offset + loadBlockLimit,\r\n hasNextPage: staffSummaryData.length !== 0 && offset + loadBlockLimit < recordCount,\r\n isLoading: false,\r\n };\r\n });\r\n };\r\n\r\n const onSelection = (selection: StaffSummaryAutoCompleteItem | StaffSummaryAutoCompleteItem[], name: string) => {\r\n // setState((prevState) => {\r\n // return {\r\n // ...prevState,\r\n // isNextPageLoading: false,\r\n // filter: '',\r\n // offset: 0\r\n // };\r\n // });\r\n\r\n if (props.onSelection) {\r\n props.onSelection(selection, name);\r\n }\r\n };\r\n\r\n const onClose = (event: React.ChangeEvent<{}>) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n hasNextPage: true,\r\n filter: '',\r\n offset: 0,\r\n items: [],\r\n };\r\n });\r\n };\r\n\r\n const onOpen = (event: React.ChangeEvent<{}>) => {\r\n // tslint:disable-next-line: no-console\r\n fetchData(state.filter, 0, true);\r\n };\r\n\r\n const LightTooltip = withStyles((theme: Theme) => ({\r\n tooltip: {\r\n backgroundColor: theme.palette.common.white,\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n boxShadow: theme.shadows[1],\r\n fontSize: 11,\r\n },\r\n arrow: {\r\n '&:before': {\r\n border: '1px solid #E6E8ED',\r\n },\r\n color: theme.palette.common.white,\r\n },\r\n }))(Tooltip);\r\n\r\n const shortingTitle = (title: string, limit?: number) => {\r\n if (limit === undefined || limit === null) {\r\n return title;\r\n } else if (title === undefined || title === null) {\r\n return title;\r\n } else if (title.length < limit) {\r\n return title;\r\n } else {\r\n return (\r\n \r\n {`${title.substring(0, limit)}...`}\r\n \r\n );\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const onRenderTags = (value: StaffSummaryAutoCompleteItem[], getTagProps: GetTagProps): React.ReactNode => {\r\n let renderTagsValue = value.map((option: StaffSummaryAutoCompleteItem, index: number) => {\r\n let label = option.label;\r\n if (option.label.length > 20) {\r\n label = `${option.label.substring(0, 20)}...`;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return renderTagsValue;\r\n };\r\n\r\n return (\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onInputChange={delayedonInputChange}\r\n onBlur={props.onBlur}\r\n renderTags={onRenderTags}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n
\r\n
\r\n {option.isStaff ? : }\r\n
\r\n
\r\n
{shortingTitle(option.label)}
\r\n
{shortingTitle(option.email)}
\r\n
\r\n
\r\n );\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n );\r\n};\r\nexport function retrieveStaffListData(\r\n query: StaffQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: StaffListData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void,\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: StaffQuery,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first,\r\n offset: query.offset,\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface StaffQueryParams {\r\n offset?: number;\r\n first?: number;\r\n filter?: string;\r\n}\r\n\r\nexport interface StaffListData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n party: Party;\r\n}\r\n\r\nexport interface Party {\r\n staffSummaries: StaffSummaries;\r\n}\r\n\r\nexport interface StaffSummaries {\r\n recordCount: number;\r\n staffSummary: StaffSummary[];\r\n}\r\n\r\nexport interface StaffSummary {\r\n staffGuid: string;\r\n staffId: number;\r\n name: string;\r\n emailAddress: string;\r\n}\r\n\r\nconst StaffQuery = gql`\r\n query staffQuery($offset: Int, $first: Int, $filter: String) {\r\n party {\r\n staffSummaries(offset: $offset, first: $first, filter: $filter) {\r\n recordCount\r\n staffSummary {\r\n staffGuid\r\n staffId\r\n name\r\n emailAddress\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Button, Dialog, DialogTitle, DialogActions, DialogContent, Grid, TextField, FormControlLabel, Switch, Checkbox } from '@material-ui/core';\r\nimport { AnyObject, Field, Form, FormSpy } from 'react-final-form';\r\nimport { FormApi } from 'final-form';\r\nimport DialogBox from '../../Dashboard/Component/DialogBox';\r\nimport arrayMutators from 'final-form-arrays';\r\n// import { printJson } from '../../firmSettingConfiguration/tabs/RegionalTab';\r\nimport { CountryAutoCompleteItem, MatterCountrySelector } from '../selectors/MatterCountrySelector';\r\nimport { MatterTypeSelector, MatterTypeTypeAutoCompleteItem } from '../selectors/MatterTypeSelector';\r\nimport { MatterPropertyAutoCompleteItem, MatterPropertySelector } from '../selectors/MatterPropertySelector';\r\nimport { MatterCategoryAutoCompleteItem, MatterCategorySelector } from '../selectors/MatterCategorySelector';\r\nimport { MatterClientSelector, NameSummaryAutoCompleteItem } from '../selectors/MatterClientSelector';\r\nimport { MatterStatusAutoCompleteItem, MatterStatusSelector } from '../selectors/MatterStatusSelector';\r\nimport { KeyboardDatePicker } from '@material-ui/pickers/DatePicker/DatePicker';\r\n// import moment from 'moment';\r\nimport _ from 'lodash';\r\nimport { useTenant } from '../../hooks/useTenant';\r\nimport { RvLoader } from '../../components/Loader';\r\nimport { PriorityCountryAutoCompleteItem, PriorityCountrySelector } from '../selectors/PriorityCountrySelector';\r\nimport { StaffSelector, StaffSummaryAutoCompleteItem } from '../selectors/StaffSelector';\r\nimport { CurrencyInput2 } from '../../components/CurrencyInput';\r\nimport { LocalStorageEnum } from '../../enums/LocalStorageEnum';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dialogRoot: {\r\n '& .downshift-wrapper': {\r\n flex: 1,\r\n padding: 0,\r\n },\r\n },\r\n header: {\r\n textTransform: 'capitalize',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n textFieldRight: {\r\n '& .MuiInputBase-input': {\r\n textAlign: 'right',\r\n }\r\n },\r\n dateField: {\r\n width: '100%',\r\n },\r\n content: {\r\n flex: 1,\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n // paddingBottom: '20px'\r\n },\r\n button: {\r\n margin: theme.spacing(1),\r\n minWidth: '83px',\r\n },\r\n addButton: {\r\n textTransform: 'none',\r\n },\r\n clientSelector: {\r\n flex: 1,\r\n },\r\n removedAvatar: {\r\n maxWidth: '15px',\r\n maxHeight: '15px',\r\n },\r\n addProperyWrapperGrid: {\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n padding: '4px',\r\n },\r\n divider: {\r\n width: '100%',\r\n },\r\n switchLabel: {\r\n margin: 0,\r\n },\r\n textFieldWithToggleWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n loadingWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '100%',\r\n minHeight: '200px',\r\n },\r\n }),\r\n);\r\n\r\ninterface AdvancedFilterDialogProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n onSearch?: (filter: AdvancedFilterForm, hasFilter: boolean) => void;\r\n filterValues?: AdvancedFilterForm;\r\n}\r\n\r\ninterface AdvancedFilterDialogState {\r\n onSubmitLoading: boolean;\r\n showDiscard: boolean;\r\n isChanged: boolean;\r\n}\r\n\r\nexport interface MatterCountry {\r\n matterCountry: CountryAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface CaseType {\r\n caseType: MatterTypeTypeAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface MatterProperty {\r\n matterProperty: MatterPropertyAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface MatterCategory {\r\n matterCategory: MatterCategoryAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface MatterClient {\r\n matterClient: NameSummaryAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface MatterOwner {\r\n matterOwner: NameSummaryAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface MatterStatus {\r\n matterStatus: MatterStatusAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface PriorityCountry {\r\n priorityCountry: PriorityCountryAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface PersonActing {\r\n personActing: StaffSummaryAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface PersonResponsible {\r\n personResponsible: StaffSummaryAutoCompleteItem[];\r\n exclude: boolean;\r\n}\r\n\r\nexport interface AdvancedFilterForm {\r\n ourReference?: string;\r\n yourReference?: string;\r\n matterCountries: MatterCountry;\r\n caseTypes: CaseType;\r\n matterProperties: MatterProperty;\r\n matterCategories: MatterCategory;\r\n matterClients: MatterClient;\r\n matterOwners: MatterOwner;\r\n matterStatuses: MatterStatus;\r\n filingDateFrom?: Date;\r\n filingDateTo?: Date;\r\n applicationNumber?: string;\r\n grantAndRegistrationDateFrom?: Date;\r\n grantAndRegistrationDateTo?: Date;\r\n registrationNumber?: string;\r\n priorityDateFrom?: Date;\r\n priorityDateTo?: Date;\r\n title?: string;\r\n class?: string;\r\n goodsAndServices?: string;\r\n priorityCountries: PriorityCountry;\r\n instructionDateFrom?: Date;\r\n instructionDateTo?: Date;\r\n completionDateFrom?: Date;\r\n completionDateTo?: Date;\r\n personActings: PersonActing;\r\n personResponsibles: PersonResponsible;\r\n isMatterEstimateZero: boolean;\r\n feesBilledVsEstimatePercentage: number;\r\n}\r\n\r\nexport const AdvancedFilterDialog: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const tenant = useTenant();\r\n\r\n const [state, setState] = useState({\r\n onSubmitLoading: false,\r\n showDiscard: false,\r\n isChanged: false,\r\n });\r\n\r\n const defaultMatterCountry: MatterCountry = {\r\n matterCountry: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultCaseType: CaseType = {\r\n caseType: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultMatterProperty: MatterProperty = {\r\n matterProperty: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultMatterCategory: MatterCategory = {\r\n matterCategory: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultMatterClient: MatterClient = {\r\n matterClient: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultMatterOwner: MatterOwner = {\r\n matterOwner: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultMatterStatus: MatterStatus = {\r\n matterStatus: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultPriorityCountry: PriorityCountry = {\r\n priorityCountry: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultPersonActings: PersonActing = {\r\n personActing: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultPersonResponsibles: PersonResponsible = {\r\n personResponsible: [],\r\n exclude: false,\r\n };\r\n\r\n const defaultValues: AdvancedFilterForm = {\r\n ourReference: undefined,\r\n yourReference: undefined,\r\n matterCountries: defaultMatterCountry,\r\n caseTypes: defaultCaseType,\r\n matterProperties: defaultMatterProperty,\r\n matterCategories: defaultMatterCategory,\r\n matterClients: defaultMatterClient,\r\n matterOwners: defaultMatterOwner,\r\n matterStatuses: defaultMatterStatus,\r\n filingDateFrom: undefined,\r\n filingDateTo: undefined,\r\n applicationNumber: undefined,\r\n grantAndRegistrationDateFrom: undefined,\r\n grantAndRegistrationDateTo: undefined,\r\n registrationNumber: undefined,\r\n priorityDateFrom: undefined,\r\n priorityDateTo: undefined,\r\n title: undefined,\r\n class: undefined,\r\n goodsAndServices: undefined,\r\n priorityCountries: defaultPriorityCountry,\r\n completionDateFrom: undefined,\r\n completionDateTo: undefined,\r\n instructionDateFrom: undefined,\r\n instructionDateTo: undefined,\r\n personActings: defaultPersonActings,\r\n personResponsibles: defaultPersonResponsibles,\r\n feesBilledVsEstimatePercentage: 0,\r\n isMatterEstimateZero: false\r\n };\r\n\r\n let initialValues: AdvancedFilterForm = {\r\n ...defaultValues,\r\n };\r\n\r\n if (props.filterValues) {\r\n initialValues = props.filterValues;\r\n }\r\n // if (props.filterValues && !_.isMatch(props.filterValues, defaultValues)) {\r\n // initialValues = props.filterValues;\r\n // }\r\n\r\n const onSubmit = (form: FormApi, values: AdvancedFilterForm) => {\r\n // code here..\r\n\r\n let hasFilter = false;\r\n\r\n if (!_.isMatch(defaultValues, values)) {\r\n hasFilter = true;\r\n }\r\n if (props.onSearch) {\r\n props.onSearch(values, hasFilter);\r\n }\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n };\r\n\r\n const closePanel = () => {\r\n // codepanel\r\n if (props.onClose) {\r\n return props.onClose();\r\n }\r\n };\r\n\r\n const onClose = () => {\r\n if (state.isChanged) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: true,\r\n };\r\n });\r\n } else {\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n }\r\n };\r\n\r\n const onDiscardChanges = (agree: boolean) => {\r\n if (agree) {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n\r\n if (props.onClose) {\r\n props.onClose();\r\n }\r\n } else {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n showDiscard: false,\r\n };\r\n });\r\n }\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const requiredDateValidator = (value: any) => {\r\n // if (value) {\r\n // // check for a valid date and check for sql's min date\r\n // var date = moment(value);\r\n\r\n // if (date.isValid() && date.year() >= 1753) {\r\n // return undefined;\r\n // } else {\r\n // return 'Incorrect Date';\r\n // }\r\n // } else {\r\n // return 'Required';\r\n // }\r\n // };\r\n\r\n const onReset = (form: FormApi) => () => {\r\n form.setConfig('keepDirtyOnReinitialize', false);\r\n form.batch(() => {\r\n form.change('ourReference', undefined);\r\n form.change('yourReference', undefined);\r\n form.change('matterCountries', defaultMatterCountry);\r\n form.change('caseTypes', defaultCaseType);\r\n form.change('matterProperties', defaultMatterProperty);\r\n form.change('matterCategories', defaultMatterCategory);\r\n form.change('matterClients', defaultMatterClient);\r\n form.change('matterOwners', defaultMatterOwner);\r\n form.change('matterStatuses', defaultMatterStatus);\r\n form.change('filingDateFrom', undefined);\r\n form.change('filingDateTo', undefined);\r\n form.change('applicationNumber', undefined);\r\n form.change('grantAndRegistrationDateFrom', undefined);\r\n form.change('grantAndRegistrationDateTo', undefined);\r\n form.change('registrationNumber', undefined);\r\n form.change('priorityDateFrom', undefined);\r\n form.change('priorityDateTo', undefined);\r\n form.change('title', undefined);\r\n form.change('class', undefined);\r\n form.change('goodsAndServices', undefined);\r\n form.change('priorityCountries', defaultPriorityCountry);\r\n form.change('completionDateFrom', undefined);\r\n form.change('completionDateTo', undefined);\r\n form.change('instructionDateFrom', undefined);\r\n form.change('instructionDateTo', undefined);\r\n form.change('isMatterEstimateZero', false);\r\n form.change('feesBilledVsEstimatePercentage', undefined);\r\n\r\n form.change('personActings', defaultPersonActings);\r\n form.change('personResponsibles', defaultPersonResponsibles);\r\n });\r\n form.setConfig('keepDirtyOnReinitialize', true);\r\n };\r\n\r\n const actionButton = (\r\n // tslint:disable-next-line: no-any\r\n form: FormApi,\r\n submitting: boolean,\r\n pristine: boolean,\r\n // tslint:disable-next-line: no-any\r\n values: AnyObject,\r\n ) => {\r\n return (\r\n
\r\n {/* */}\r\n
\r\n {\r\n // code here..\r\n }}\r\n disabled={submitting || pristine || state.onSubmitLoading}\r\n >\r\n Search\r\n \r\n
\r\n
\r\n \r\n Clear\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n // const onRequired = (value: any) => {\r\n // if (value === undefined || value.length === 0) {\r\n // return 'Required';\r\n // }\r\n // return undefined;\r\n // };\r\n\r\n const ourReferenceField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const yourReferenceField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const matterCountryField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n multiple={true}\r\n isApplyMatterAccess={true}\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const caseTypeField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n const isInprotech = tenant.data!.tenant.sourceSystem.toLocaleLowerCase() === 'inprotech';\r\n\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n multiple={true}\r\n isApplyMatterAccess={true}\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const matterPropertyField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n multiple={true}\r\n isApplyMatterAccess={true}\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const matterCategoryField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n const isInprotech = tenant.data!.tenant.sourceSystem.toLocaleLowerCase() === 'inprotech';\r\n\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n multiple={true}\r\n isApplyMatterAccess={true}\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const matterClientField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n isClientsOnly={true}\r\n includeIndividual={true}\r\n includeOrganisation={true}\r\n multiple={true}\r\n isMatterOwnersOnly={false}\r\n isApplyMatterAccess={true}\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const matterOwnerField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n isClientsOnly={false}\r\n isMatterOwnersOnly={true}\r\n includeIndividual={true}\r\n includeOrganisation={true}\r\n multiple={true}\r\n isApplyMatterAccess={true}\r\n />\r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const matterStatusField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n multiple={true}\r\n isApplyMatterAccess={true}\r\n />\r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const matterFilingDateFieldFrom = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const matterFilingDateFieldTo = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const applicationNumberField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const grantAndRegistrationDateFieldFrom = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const grantAndRegistrationDateFieldTo = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const registrationNumberField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const priorityDateFieldFrom = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const priorityDateFieldTo = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const priorityCountryField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n multiple={true}\r\n isApplyMatterAccess={true}\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const titleField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const classField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const goodsAndServicesField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const instructionDateFieldFrom = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const instructionDateFieldTo = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const completionDateFieldFrom = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const completionDateFieldTo = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {/* tslint:disable-next-line: no-shadowed-variable */}\r\n {({ values }) => (\r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n const personActingField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n multiple={true}\r\n />\r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const personResponsibleField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n
\r\n \r\n {({ input, meta }) => (\r\n {\r\n input.onChange(selection);\r\n }}\r\n onBlur={input.onBlur}\r\n multiple={true}\r\n />\r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Not\"\r\n />\r\n )}\r\n \r\n
\r\n );\r\n };\r\n\r\n const matterEstimateCheckbox = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n {({ input, meta }) => (\r\n }\r\n label=\"Matter estimate is zero\"\r\n />\r\n )}\r\n \r\n );\r\n };\r\n\r\n const feesBilledVsEstimateField = (form: FormApi, submitting: boolean, pristine: boolean, values: AdvancedFilterForm) => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n const dialogForm = () => {\r\n if (tenant.data!.tenant.sourceSystem.toLocaleLowerCase() === 'inprotech') {\r\n return (\r\n ) => onSubmit(form, values)}\r\n mutators={{ ...arrayMutators }}\r\n initialValues={initialValues}\r\n subscription={{ submitting: true, pristine: true }}\r\n keepDirtyOnReinitialize={true}\r\n render={({ handleSubmit, form, submitting, pristine, values }) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {ourReferenceField(form, submitting, pristine, values)}\r\n \r\n \r\n {yourReferenceField(form, submitting, pristine, values)}\r\n \r\n \r\n {matterCountryField(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {caseTypeField(form, submitting, pristine, values)}\r\n \r\n \r\n {matterPropertyField(form, submitting, pristine, values)}\r\n \r\n \r\n {matterCategoryField(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {matterClientField(form, submitting, pristine, values)}\r\n \r\n \r\n {matterOwnerField(form, submitting, pristine, values)}\r\n \r\n \r\n {matterStatusField(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {applicationNumberField(form, submitting, pristine, values)}\r\n \r\n \r\n {matterFilingDateFieldFrom(form, submitting, pristine, values)}\r\n \r\n \r\n {matterFilingDateFieldTo(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {registrationNumberField(form, submitting, pristine, values)}\r\n \r\n \r\n {grantAndRegistrationDateFieldFrom(form, submitting, pristine, values)}\r\n \r\n \r\n {grantAndRegistrationDateFieldTo(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {priorityCountryField(form, submitting, pristine, values)}\r\n \r\n \r\n {priorityDateFieldFrom(form, submitting, pristine, values)}\r\n \r\n \r\n {priorityDateFieldTo(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {titleField(form, submitting, pristine, values)}\r\n \r\n \r\n {classField(form, submitting, pristine, values)}\r\n \r\n \r\n {goodsAndServicesField(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n {/* {printJson(values)} */}\r\n
\r\n )}\r\n />\r\n );\r\n }\r\n return (\r\n ) => onSubmit(form, values)}\r\n mutators={{ ...arrayMutators }}\r\n initialValues={initialValues}\r\n subscription={{ submitting: true, pristine: true }}\r\n keepDirtyOnReinitialize={true}\r\n render={({ handleSubmit, form, submitting, pristine, values }) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {matterClientField(form, submitting, pristine, values)}\r\n \r\n \r\n {matterStatusField(form, submitting, pristine, values)}\r\n \r\n \r\n {caseTypeField(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n {personActingField(form, submitting, pristine, values)}\r\n \r\n \r\n {personResponsibleField(form, submitting, pristine, values)}\r\n \r\n \r\n {matterCategoryField(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n {instructionDateFieldFrom(form, submitting, pristine, values)}\r\n \r\n \r\n {instructionDateFieldTo(form, submitting, pristine, values)}\r\n \r\n \r\n {matterEstimateCheckbox(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n {completionDateFieldFrom(form, submitting, pristine, values)}\r\n \r\n \r\n {completionDateFieldTo(form, submitting, pristine, values)}\r\n \r\n \r\n {feesBilledVsEstimateField(form, submitting, pristine, values)}\r\n \r\n \r\n \r\n \r\n \r\n {actionButton(form, submitting, pristine, values)}\r\n {/* {printJson(values)} */}\r\n
\r\n )}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n Advanced Filter\r\n {tenant.loading ? (\r\n \r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n dialogForm()\r\n )}\r\n
\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { graphql } from 'react-apollo';\r\nimport { Subscription } from 'apollo-client/util/Observable';\r\nimport glamorous from 'glamorous';\r\n// import { throttle } from 'lodash';\r\nimport { MatterSummaryHeader } from './MatterSummaryHeader';\r\nimport { RvContainer } from '../components/Container';\r\nimport { MatterSummaryControlPanel, ViewDisplayStyle, ExportType } from './MatterSummaryControlPanel';\r\n// import { MatterSummaryControlPanel, ViewDisplayStyle, ExportType } from './MatterSummaryControlPanel_Obsolete';\r\nimport { RvDrawer } from '../components/Drawer';\r\nimport { SummaryViewConfig } from '../viewConfig/SummaryViewConfig';\r\nimport {\r\n MatterOptionsData,\r\n MatterSummaryOptions,\r\n fetchColumnConfigData,\r\n fetchMatterSummaryNewEnabled,\r\n MatterSummaryNewEnabledOption,\r\n MatterTaskNotification,\r\n // MatterForecastSubscription,\r\n} from './MatterSummaryRepository';\r\nimport { SummaryViewConfigObj, ColumnConfig } from '../viewConfig/SummaryViewConfigurations';\r\nimport { SaveSummaryViewConfiguration } from '../viewConfig/SummaryViewConfigRepository';\r\nimport { showNotification } from '../App';\r\nimport { MatterSummaryView } from '../components/LoadComponentAsync';\r\nimport EventSystem from '../EventSystem';\r\nimport _, { throttle } from 'lodash';\r\nimport { client } from '..';\r\nimport gql from 'graphql-tag';\r\nimport ReactDOM from 'react-dom';\r\nimport { ViewConfigType } from '../viewConfig/ViewConfigType';\r\nimport { SummaryViewConfigNotification } from '../viewConfig/SummaryViewConfigRepository';\r\nimport { TaskSubscription } from '../tasksSummary/TasksSummaryRepository';\r\nimport { CellClickedEvent } from '@ag-grid-community/core';\r\nimport { browserHistory } from '../components/AppContent';\r\nimport { AdvancedFilterDialog, AdvancedFilterForm, CaseType, MatterCategory, MatterClient, MatterCountry, MatterOwner, MatterProperty, \r\n MatterStatus, PersonActing, PersonResponsible, PriorityCountry } from './dialogs/AdvancedFilterDialog';\r\nimport { SearchCriteria } from '../home/SearchCriteria';\r\nimport { CountryAutoCompleteItem } from './selectors/MatterCountrySelector';\r\nimport { MatterTypeTypeAutoCompleteItem } from './selectors/MatterTypeSelector';\r\nimport { MatterPropertyAutoCompleteItem } from './selectors/MatterPropertySelector';\r\nimport { MatterCategoryAutoCompleteItem } from './selectors/MatterCategorySelector';\r\nimport { NameSummaryAutoCompleteItem } from './selectors/MatterClientSelector';\r\nimport { MatterStatusAutoCompleteItem } from './selectors/MatterStatusSelector';\r\nimport moment from 'moment';\r\nimport { PriorityCountryAutoCompleteItem } from './selectors/PriorityCountrySelector';\r\nimport { StaffSummaryAutoCompleteItem } from './selectors/StaffSelector';\r\nimport { MatterTerminology } from '../MatterTerminology';\r\nimport { MatterSummaryContext } from './MatterSummaryContextProvider';\r\nimport { MatterForecastsDrawer } from './drawers/MatterForecastsDrawer';\r\n\r\nconst GridWrapper = glamorous.div<{ theme?: object }>((props) => ({\r\n display: 'flex',\r\n flexFlow: 'column',\r\n flex: 1,\r\n '& .banner-container': {\r\n width: '100%',\r\n },\r\n '& .content-container': {\r\n width: '100%',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n [`& .${`pushable`}`]: {\r\n overflow: 'visible',\r\n [`& .${`sidebar`}`]: {\r\n top: '0px !important',\r\n width: '500px !important',\r\n },\r\n },\r\n [`& .${`segment`}`]: {\r\n // overflow: 'visible',\r\n // top: '10px !important',\r\n padding: 0,\r\n // background: props.theme.NeutralColors.BackgroundGrey5\r\n },\r\n}));\r\n\r\nconst ContentWrapper = glamorous.div<{ theme?: object }>((props) => ({\r\n padding: '0 34px',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '@media (max-width: 1024px)': {\r\n padding: 0,\r\n },\r\n}));\r\n\r\n// tslint:disable-next-line:no-any\r\nconst StyledSummaryContent = glamorous.div<{ theme?: any }>((props) => ({\r\n borderRadius: '8px',\r\n backgroundColor: props.theme.NeutralColors.BackgroundWhite,\r\n boxShadow: '0 0 14px 0 ' + props.theme.NeutralColors.BackgroundGrey4,\r\n // height: window.innerHeight - 300,\r\n // height: '100%',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n}));\r\n\r\nconst SummaryViewWrapper = glamorous.div<{ theme?: object }>((props) => ({\r\n paddingLeft: '30px',\r\n paddingRight: '30px',\r\n paddingBottom: '20px',\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .drawergrid': {\r\n flex: 1,\r\n },\r\n '& .sidebarpusher': {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n '& .segment-container': {\r\n flex: 1,\r\n height: '100%',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n '& .matter-view-wrapper': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n },\r\n}));\r\n\r\ninterface MatterSummaryPageDataProps {\r\n // tslint:disable-next-line: no-any\r\n location: any;\r\n data: MatterOptionsData;\r\n nameId?: number;\r\n isReferredMatters?: boolean;\r\n // tslint:disable-next-line: no-any\r\n entityType?: any;\r\n // tslint:disable-next-line: no-any\r\n nameSummaryState?: any;\r\n}\r\n\r\ninterface MatterSummaryPageState {\r\n viewDisplayStyle: ViewDisplayStyle;\r\n showConfigPanel: boolean;\r\n showToolPanel: boolean;\r\n showGroupPanel: boolean;\r\n search: {\r\n filter: string;\r\n includeCompleted: boolean;\r\n };\r\n summarySectionHeight: string;\r\n isLoading: boolean;\r\n inRefreshData: boolean;\r\n totalMatterCount: number;\r\n matterLoadedCount: number;\r\n\r\n // Column configuration & Access\r\n summaryViewSelections: Array;\r\n currentSummaryViewSelectionId: number;\r\n currentSummaryViewConfig: string;\r\n isDisableSave: boolean;\r\n isInMemory: boolean;\r\n isDownloadMatter: boolean;\r\n isForceDownload: boolean;\r\n isNewMatterSummaryEnabled: boolean;\r\n // tslint:disable-next-line: no-any\r\n columnFilterModel?: any;\r\n showAdvancedFilter: boolean;\r\n hasFilter: boolean;\r\n filterValues?: AdvancedFilterForm;\r\n searchCriterias?: string;\r\n isExportLoading: boolean;\r\n}\r\n\r\nclass MatterSummaryPage extends React.Component {\r\n\r\n static contextType = MatterSummaryContext;\r\n\r\n private summaryViewConfigSubscription: Subscription;\r\n private matterTaskSubscription: Subscription;\r\n private taskSubscription: Subscription;\r\n private forecastSubscription: Subscription;\r\n private isSubscribed: boolean;\r\n // tslint:disable-next-line: no-any\r\n private summarySectionNode?: any;\r\n private isLoading: boolean;\r\n\r\n private pageKey: number = 0;\r\n\r\n constructor(props: MatterSummaryPageDataProps, state: MatterSummaryPageState) {\r\n super(props, state);\r\n this.isSubscribed = false;\r\n\r\n this.handleSummarySectionRef = this.handleSummarySectionRef.bind(this);\r\n this.onIncludeCompleted = this.onIncludeCompleted.bind(this);\r\n this.onSearch = this.onSearch.bind(this);\r\n this.onRefreshData = this.onRefreshData.bind(this);\r\n this.onViewStyle = this.onViewStyle.bind(this);\r\n this.onViewSelected = this.onViewSelected.bind(this);\r\n this.onSaveCurrentView = this.onSaveCurrentView.bind(this);\r\n this.onViewConfigChanged = this.onViewConfigChanged.bind(this);\r\n this.onToggleGrouping = this.onToggleGrouping.bind(this);\r\n this.onToggleTools = this.onToggleTools.bind(this);\r\n this.onToggleConfigs = this.onToggleConfigs.bind(this);\r\n this.onMatterSelected = this.onMatterSelected.bind(this);\r\n this.onCellClicked = this.onCellClicked.bind(this);\r\n this.onMatterCounts = this.onMatterCounts.bind(this);\r\n this.initSummaryViewConfigs = this.initSummaryViewConfigs.bind(this);\r\n this.onExport = this.onExport.bind(this);\r\n this.onPrint = this.onPrint.bind(this);\r\n this.handleLoading = this.handleLoading.bind(this);\r\n this.fetchColumnConfigData = this.fetchColumnConfigData.bind(this);\r\n this.fetchIsMatterSummaryNewEnabled = this.fetchIsMatterSummaryNewEnabled.bind(this);\r\n this.onInMemoryChanged = this.onInMemoryChanged.bind(this);\r\n this.onMatterDownloadChanged = this.onMatterDownloadChanged.bind(this);\r\n this.onColumnFilterChanged = this.onColumnFilterChanged.bind(this);\r\n\r\n this.subscribeToSummaryViewConfig = this.subscribeToSummaryViewConfig.bind(this);\r\n this.onAdvancedFilter = this.onAdvancedFilter.bind(this);\r\n this.onAdvancedSearch = this.onAdvancedSearch.bind(this);\r\n this.onFormatFilterValuesForSearchCriteria = this.onFormatFilterValuesForSearchCriteria.bind(this);\r\n this.onExportLoading = this.onExportLoading.bind(this);\r\n\r\n this.isLoading = false;\r\n\r\n this.state = {\r\n viewDisplayStyle: ViewDisplayStyle.List,\r\n showGroupPanel: false,\r\n showToolPanel: false,\r\n showConfigPanel: false,\r\n search: {\r\n filter: '',\r\n includeCompleted: false,\r\n },\r\n summarySectionHeight: '',\r\n isLoading: true,\r\n inRefreshData: false,\r\n totalMatterCount: 0,\r\n matterLoadedCount: 0,\r\n summaryViewSelections: new Array(),\r\n currentSummaryViewSelectionId: 0,\r\n currentSummaryViewConfig: '',\r\n isDisableSave: true,\r\n isInMemory: false,\r\n isDownloadMatter: false,\r\n isNewMatterSummaryEnabled: false,\r\n isForceDownload: false,\r\n showAdvancedFilter: false,\r\n hasFilter: false,\r\n searchCriterias: undefined,\r\n isExportLoading: false\r\n };\r\n }\r\n\r\n public componentDidUpdate() {\r\n\r\n const { pageKey } = this.context;\r\n\r\n // console.log('MatterSummaryPageXContext', pageKey, matterId, matterGuid, isMatterForcastFormOpen);\r\n\r\n if (pageKey !== this.pageKey) {\r\n this.pageKey = pageKey;\r\n this.onRefreshData();\r\n }\r\n }\r\n\r\n public UNSAFE_componentWillMount() {\r\n this.isLoading = true;\r\n this.fetchIsMatterSummaryNewEnabled();\r\n }\r\n\r\n public UNSAFE_componentWillReceiveProps(nextProps: MatterSummaryPageDataProps) {\r\n if (this.props.location && this.props.location.state !== undefined && this.props.location.state !== null && this.state !== this.props.location.state) {\r\n // Why set them seperately? - SummaryViewConfig does not include cell renderer components here. So it is not rendering properly.\r\n // tslint:disable-next-line: no-console\r\n console.log('matterSummaryPageXState', this.props.location.state.isInMemory);\r\n\r\n let columnFilterLength = 0;\r\n if (this.props.location.state.columnFilterModel) {\r\n columnFilterLength = Object.keys(this.props.location.state.columnFilterModel).length;\r\n }\r\n\r\n const defaultMatterCountry: MatterCountry = {\r\n matterCountry: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultCaseType: CaseType = {\r\n caseType: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultMatterProperty: MatterProperty = {\r\n matterProperty: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultMatterCategory: MatterCategory = {\r\n matterCategory: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultMatterClient: MatterClient = {\r\n matterClient: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultMatterOwner: MatterOwner = {\r\n matterOwner: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultMatterStatus: MatterStatus = {\r\n matterStatus: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultPriorityCountry: PriorityCountry = {\r\n priorityCountry: [],\r\n exclude: false\r\n };\r\n\r\n const defaultPersonActings: PersonActing = {\r\n personActing: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultPersonResponsibles: PersonResponsible = {\r\n personResponsible: [],\r\n exclude: false,\r\n };\r\n \r\n const defaultValues: AdvancedFilterForm = {\r\n ourReference: undefined,\r\n yourReference: undefined,\r\n matterCountries: defaultMatterCountry,\r\n caseTypes: defaultCaseType,\r\n matterProperties: defaultMatterProperty,\r\n matterCategories: defaultMatterCategory,\r\n matterClients: defaultMatterClient,\r\n matterOwners: defaultMatterOwner,\r\n matterStatuses: defaultMatterStatus,\r\n filingDateFrom: undefined,\r\n filingDateTo: undefined,\r\n applicationNumber: undefined,\r\n grantAndRegistrationDateFrom: undefined,\r\n grantAndRegistrationDateTo: undefined,\r\n registrationNumber: undefined,\r\n priorityDateFrom: undefined,\r\n priorityDateTo: undefined,\r\n title: undefined,\r\n class: undefined,\r\n goodsAndServices: undefined,\r\n priorityCountries: defaultPriorityCountry,\r\n completionDateFrom: undefined,\r\n completionDateTo: undefined,\r\n instructionDateFrom: undefined,\r\n instructionDateTo: undefined,\r\n personActings: defaultPersonActings,\r\n personResponsibles: defaultPersonResponsibles,\r\n feesBilledVsEstimatePercentage: 0,\r\n isMatterEstimateZero: false\r\n };\r\n\r\n let hasFilter = false;\r\n\r\n if (!_.isMatch(defaultValues, this.props.location.state.filterValues)) {\r\n hasFilter = true;\r\n }\r\n\r\n this.setState({\r\n summaryViewSelections: new Array(),\r\n isNewMatterSummaryEnabled: this.props.location.state.isNewMatterSummaryEnabled,\r\n currentSummaryViewConfig: this.props.location.state.currentSummaryViewConfig,\r\n currentSummaryViewSelectionId: this.props.location.state.currentSummaryViewSelectionId,\r\n search: {\r\n filter: this.props.location.state.search.filter,\r\n includeCompleted: this.props.location.state.search.includeCompleted,\r\n },\r\n columnFilterModel: this.props.location.state.columnFilterModel,\r\n isForceDownload: this.props.location.state.isInMemory === true && columnFilterLength > 0,\r\n filterValues: this.props.location.state.filterValues,\r\n hasFilter: hasFilter,\r\n searchCriterias: this.onFormatFilterValuesForSearchCriteria(this.props.location.state.filterValues),\r\n });\r\n }\r\n }\r\n\r\n public componentDidMount() {\r\n // this.hasMounted = true;\r\n this.resize();\r\n window.addEventListener('resize', this.resize);\r\n\r\n // this.fetchColumnConfigData();\r\n\r\n if (!this.isSubscribed) {\r\n this.isSubscribed = true;\r\n this.subscribeToSummaryViewConfig();\r\n this.subscribeToMatterTasks();\r\n this.subscribeToTasks(); // For Create Task Dialog/ Matter Task specific dialog\r\n // this.subscribeToForecast();\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n // this.hasMounted = false;\r\n window.removeEventListener('resize', this.resize);\r\n\r\n if (this.summaryViewConfigSubscription) {\r\n this.summaryViewConfigSubscription.unsubscribe();\r\n }\r\n\r\n if (this.matterTaskSubscription) {\r\n this.matterTaskSubscription.unsubscribe();\r\n }\r\n\r\n if (this.taskSubscription) {\r\n this.taskSubscription.unsubscribe();\r\n }\r\n\r\n if (this.forecastSubscription) {\r\n this.forecastSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n public render() {\r\n\r\n const { matterId, matterGuid, isMatterForcastFormOpen, onMatterForcastFormClose } = this.context;\r\n\r\n if (this.props.data && this.props.data.loading) {\r\n return null;\r\n }\r\n if (this.isLoading) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n {isMatterForcastFormOpen && matterGuid && matterId && (\r\n \r\n )}\r\n \r\n {!!this.state.showAdvancedFilter && (\r\n \r\n )}\r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n width=\"thin\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n // tslint:disable-next-line:member-ordering\r\n resize = throttle(() => {\r\n if (this.summarySectionNode) {\r\n //\r\n var node = ReactDOM.findDOMNode(this.summarySectionNode);\r\n\r\n if (node instanceof Element) {\r\n var summaryGridRect = node.getBoundingClientRect();\r\n\r\n this.setState({\r\n // should calc the footer but hardcode for now\r\n summarySectionHeight: window.innerHeight - summaryGridRect.top - 100 + 'px',\r\n });\r\n }\r\n }\r\n // tslint:disable-next-line:align\r\n }, 50);\r\n\r\n private handleSummarySectionRef(node: HTMLElement) {\r\n this.summarySectionNode = node;\r\n }\r\n\r\n private onIncludeCompleted(include: boolean) {\r\n this.setState({\r\n search: {\r\n includeCompleted: include,\r\n filter: this.state.search.filter,\r\n },\r\n });\r\n }\r\n\r\n private onSearch(filter: string) {\r\n this.setState({\r\n search: {\r\n includeCompleted: this.state.search.includeCompleted,\r\n filter: filter,\r\n },\r\n });\r\n }\r\n\r\n private onViewStyle(style: ViewDisplayStyle) {\r\n this.setState({ viewDisplayStyle: style });\r\n }\r\n\r\n private fetchColumnConfigData() {\r\n fetchColumnConfigData(\r\n true,\r\n ViewConfigType.matterSummary,\r\n (data: ColumnConfig) => {\r\n this.handleColumnConfigFetch(data);\r\n },\r\n (reason) => {\r\n showNotification('Failed to Fetch Templates', reason, 'error');\r\n },\r\n );\r\n }\r\n\r\n private fetchIsMatterSummaryNewEnabled() {\r\n fetchMatterSummaryNewEnabled(\r\n false,\r\n (data: MatterSummaryNewEnabledOption) => {\r\n this.handleMatterSummaryNewEnabledFetch(data);\r\n },\r\n (reason) => {\r\n this.fetchColumnConfigData();\r\n showNotification('Failed to Matter Summary New Enabled Lookup value', reason, 'error');\r\n },\r\n );\r\n }\r\n\r\n private handleMatterSummaryNewEnabledFetch(data?: MatterSummaryNewEnabledOption) {\r\n if (data != null && data.options !== undefined && data.options.matterSummaryNewEnabled.boolValue !== undefined) {\r\n this.setState({\r\n isNewMatterSummaryEnabled: data.options.matterSummaryNewEnabled.boolValue,\r\n });\r\n } else {\r\n this.setState({\r\n isNewMatterSummaryEnabled: false,\r\n });\r\n }\r\n\r\n this.isLoading = false;\r\n\r\n // If a ViewConfig is already selected, then no need to fetch this\r\n this.fetchColumnConfigData();\r\n }\r\n\r\n private handleColumnConfigFetch(data?: ColumnConfig) {\r\n // data will be null for the initial load\r\n if (data != null && data.columnConfigList !== undefined) {\r\n this.initSummaryViewConfigs(data.columnConfigList.summaryViewConfig);\r\n } else {\r\n this.initSummaryViewConfigs(new Array());\r\n }\r\n }\r\n\r\n private initSummaryViewConfigs(summaryViewConfig: Array) {\r\n // Set the default layouts. If no defaults in the database, then set the default of layout exists in UI\r\n let defaultConfigId = 0;\r\n let currentConfigLayout = '';\r\n\r\n let summaryViewDefault: SummaryViewConfigObj | undefined;\r\n\r\n // 1) Check for User's Default\r\n summaryViewDefault = _.find(summaryViewConfig, (item: SummaryViewConfigObj) => {\r\n return item.isDefault === true;\r\n });\r\n\r\n // 2) If no user default available, then Role's Default\r\n if (summaryViewDefault === undefined) {\r\n summaryViewDefault = _.find(summaryViewConfig, (item: SummaryViewConfigObj) => {\r\n return item.isRoleDefault === true;\r\n });\r\n }\r\n\r\n // 3) If no role's default available, then Tenant's default\r\n if (summaryViewDefault === undefined) {\r\n summaryViewDefault = _.find(summaryViewConfig, (item: SummaryViewConfigObj) => {\r\n return item.isTenantDefault === true;\r\n });\r\n }\r\n\r\n if (summaryViewDefault === undefined) {\r\n defaultConfigId = 0;\r\n } else {\r\n defaultConfigId = summaryViewDefault.configId;\r\n currentConfigLayout = summaryViewDefault.layoutConfiguration;\r\n }\r\n\r\n let isDisableSave = summaryViewDefault ? !this.props.data.appUser.isAdministrator && !summaryViewDefault.isPrivate : true;\r\n\r\n if (this.props.data.appUser.isAdministrator) {\r\n isDisableSave = false;\r\n }\r\n\r\n if (this.state.currentSummaryViewConfig === '' && this.state.currentSummaryViewSelectionId === 0) {\r\n this.setState({\r\n summaryViewSelections: summaryViewConfig,\r\n currentSummaryViewSelectionId: defaultConfigId,\r\n currentSummaryViewConfig: currentConfigLayout,\r\n isDisableSave: isDisableSave,\r\n });\r\n } else {\r\n this.setState({\r\n summaryViewSelections: summaryViewConfig,\r\n isDisableSave: isDisableSave,\r\n });\r\n }\r\n }\r\n\r\n private onRefreshData() {\r\n // there is probably a better way but we only want to set refresh temprorarily\r\n this.setState({\r\n inRefreshData: true,\r\n columnFilterModel: undefined,\r\n });\r\n\r\n // To remove any states in this.props.location.state\r\n window.history.replaceState(null, '');\r\n\r\n // When refresh is clicked, set the state of Loading to true. Which will disable to refresh button.\r\n // When refresh is done. Change the state of loading back to false.\r\n this.handleLoading(true);\r\n }\r\n\r\n private onToggleGrouping(show: boolean) {\r\n this.setState({ showGroupPanel: show });\r\n }\r\n\r\n private onToggleTools(show: boolean) {\r\n this.setState({ showToolPanel: show });\r\n // remove select/unselect all in filter\r\n window.jQuery('.ag-primary-cols-header-panel').find('a[ref=\"eSelect\"]').remove();\r\n }\r\n\r\n private onToggleConfigs(show: boolean) {\r\n this.setState({\r\n showConfigPanel: show,\r\n });\r\n }\r\n\r\n // This Update only changes the Layout. Save through Control Panel\r\n private onSaveCurrentView() {\r\n let currentSummaryView = _.find(this.state.summaryViewSelections, (item: SummaryViewConfigObj) => {\r\n return item.configId === this.state.currentSummaryViewSelectionId;\r\n });\r\n\r\n if (currentSummaryView !== undefined) {\r\n SaveSummaryViewConfiguration(\r\n this.state.currentSummaryViewSelectionId,\r\n currentSummaryView.name,\r\n false,\r\n currentSummaryView.isPrivate,\r\n currentSummaryView.isDefault,\r\n currentSummaryView.isTenantDefault,\r\n ViewConfigType.matterSummary, // 1 = Matter Summary\r\n this.state.currentSummaryViewConfig,\r\n false,\r\n this.state.isNewMatterSummaryEnabled,\r\n () => {\r\n // Success\r\n showNotification(null, 'Successfully submitted', 'info');\r\n },\r\n (reason) => {\r\n showNotification('Failed to Save Template', reason, 'error');\r\n },\r\n );\r\n }\r\n }\r\n\r\n private onViewSelected(configId: number) {\r\n let currentConfigLayout = '';\r\n let isDisableSave = false;\r\n\r\n if (this.state.summaryViewSelections) {\r\n // search the views for the\r\n var selection = this.state.summaryViewSelections.find((view) => view.configId === configId);\r\n currentConfigLayout = selection ? selection.layoutConfiguration : '';\r\n isDisableSave = selection ? !this.props.data.appUser.isAdministrator && !selection.isPrivate : true;\r\n }\r\n\r\n this.setState({\r\n currentSummaryViewSelectionId: configId,\r\n currentSummaryViewConfig: currentConfigLayout,\r\n isDisableSave: isDisableSave,\r\n });\r\n }\r\n\r\n private onViewConfigChanged(config: string) {\r\n // Update the Config\r\n let columnConfigs = _.cloneDeepWith(this.state.summaryViewSelections);\r\n\r\n let matterColumnConfig = columnConfigs.find((item: SummaryViewConfigObj) => {\r\n return item.configId === this.state.currentSummaryViewSelectionId;\r\n });\r\n\r\n if (matterColumnConfig !== undefined) {\r\n matterColumnConfig.layoutConfiguration = config.toString();\r\n\r\n _.forEach(columnConfigs, (item: SummaryViewConfigObj) => {\r\n if (item.configId === this.state.currentSummaryViewSelectionId) {\r\n if (matterColumnConfig !== undefined) {\r\n item = matterColumnConfig;\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Update the collection.\r\n this.setState({\r\n summaryViewSelections: columnConfigs,\r\n currentSummaryViewConfig: config,\r\n });\r\n }\r\n\r\n private onMatterSelected(matterId: number) {\r\n // TODO: onMatterSelected to Open in double click.\r\n // client.mutate({\r\n // mutation: AddUserMatterAccessActivity,\r\n // variables: {\r\n // matterId: matterId\r\n // }\r\n // }).then((results: {\r\n // data: {\r\n // addUserMatterAccessActivity: boolean\r\n // }\r\n // }) => {\r\n // if (results.data.addUserMatterAccessActivity === false) {\r\n // // tslint:disable-next-line:no-console\r\n // console.log('AddUserMatterAccessActivity mutation failed');\r\n // }\r\n // });\r\n // // browserHistory.push('/matterDetail/' + matterId);\r\n // browserHistory.push({\r\n // pathname: '/matterDetail/' + matterId ,\r\n // // search: '?the=search', // The URL query string\r\n // state: { // Some extra state for this location that does not reside in the URL\r\n // matterSummaryPageXState: this.state,\r\n // nameId: this.props.nameId,\r\n // entityType: this.props.entityType,\r\n // nameSummaryState: this.props.nameSummaryState,\r\n // }\r\n // });\r\n }\r\n\r\n private onCellClicked(event: CellClickedEvent) {\r\n if (event.data !== null && event.data !== undefined && event.data.id !== undefined && event.data.id !== null) {\r\n client\r\n .mutate({\r\n mutation: AddUserMatterAccessActivity,\r\n variables: {\r\n matterId: event.data.id,\r\n },\r\n })\r\n .then(\r\n (results: {\r\n data: {\r\n addUserMatterAccessActivity: boolean;\r\n };\r\n }) => {\r\n if (results.data.addUserMatterAccessActivity === false) {\r\n // tslint:disable-next-line:no-console\r\n console.log('AddUserMatterAccessActivity mutation failed');\r\n }\r\n },\r\n );\r\n\r\n // browserHistory.push('/matterDetail/' + matterId);\r\n\r\n sessionStorage.setItem('typeOfView', '');\r\n\r\n browserHistory.push({\r\n pathname: '/matterDetail/' + event.data.id,\r\n // search: '?the=search', // The URL query string\r\n state: {\r\n // Some extra state for this location that does not reside in the URL\r\n matterSummaryPageXState: this.state,\r\n nameId: this.props.nameId,\r\n entityType: this.props.entityType,\r\n nameSummaryState: this.props.nameSummaryState,\r\n isSearchCriteriaFromAdvancedFilter: true,\r\n },\r\n });\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: no-any\r\n private onColumnFilterChanged(filterModel: any) {\r\n this.setState({\r\n columnFilterModel: filterModel,\r\n isForceDownload: false,\r\n });\r\n }\r\n\r\n private onMatterCounts(matterLoadedCount: number, totalMatters: number, isLoading: boolean) {\r\n this.setState({\r\n matterLoadedCount: matterLoadedCount,\r\n totalMatterCount: totalMatters,\r\n isLoading: isLoading,\r\n inRefreshData: false, // toggle off so it can be selected again\r\n });\r\n }\r\n\r\n private handleLoading(isLoading: boolean) {\r\n this.setState({\r\n isLoading: isLoading,\r\n });\r\n }\r\n\r\n private onExport(type: ExportType) {\r\n if (type === ExportType.CSV) {\r\n EventSystem.emit('export:matterCSV');\r\n } else {\r\n EventSystem.emit('export:matterExcel');\r\n }\r\n }\r\n\r\n private onPrint() {\r\n EventSystem.emit('print:matter');\r\n }\r\n\r\n private subscribeToSummaryViewConfig() {\r\n const vm = this;\r\n this.summaryViewConfigSubscription = client\r\n .subscribe({\r\n query: SummaryViewConfigNotification,\r\n })\r\n .subscribe({\r\n // tslint:disable-next-line:no-any\r\n next(results: any) {\r\n // tslint:disable-next-line:no-console\r\n console.log(results);\r\n if (results.data.summaryViewConfigNotification.status) {\r\n showNotification('Success', results.data.summaryViewConfigNotification.message, 'info');\r\n vm.fetchColumnConfigData();\r\n } else {\r\n showNotification('Failed', results.data.summaryViewConfigNotification.message, 'error');\r\n }\r\n },\r\n // tslint:disable-next-line:no-any\r\n error(err: any) {\r\n // tslint:disable-next-line:no-console\r\n console.error(err);\r\n showNotification(null, err, 'error');\r\n },\r\n });\r\n }\r\n\r\n private subscribeToMatterTasks() {\r\n this.matterTaskSubscription = client\r\n .subscribe({\r\n query: MatterTaskNotification,\r\n })\r\n .subscribe({\r\n // tslint:disable-next-line:no-any\r\n next(results: any) {\r\n // tslint:disable-next-line:no-console\r\n console.log(results);\r\n if (results.data.matterManagementTaskNotification.status) {\r\n showNotification('Success', results.data.matterManagementTaskNotification.message, 'info');\r\n } else {\r\n showNotification('Failed', results.data.matterManagementTaskNotification.message, 'error');\r\n }\r\n },\r\n // tslint:disable-next-line:no-any\r\n error(err: any) {\r\n // tslint:disable-next-line:no-console\r\n console.error(err);\r\n showNotification(null, err, 'error');\r\n },\r\n });\r\n }\r\n\r\n // private subscribeToForecast() {\r\n // this.forecastSubscription = client\r\n // .subscribe({\r\n // query: MatterForecastSubscription,\r\n // })\r\n // .subscribe({\r\n // // tslint:disable-next-line:no-any\r\n // next(results: any) {\r\n // // tslint:disable-next-line:no-console\r\n // console.log(results);\r\n // if (results.data.updateMatterForecastNotification.status) {\r\n // showNotification('Success', results.data.updateMatterForecastNotification.message, 'info');\r\n // } else {\r\n // showNotification('Failed', results.data.updateMatterForecastNotification.message, 'error');\r\n // }\r\n // },\r\n // // tslint:disable-next-line:no-any\r\n // error(err: any) {\r\n // // tslint:disable-next-line:no-console\r\n // console.error(err);\r\n // showNotification(null, err, 'error');\r\n // },\r\n // });\r\n // }\r\n\r\n private subscribeToTasks() {\r\n this.taskSubscription = client\r\n .subscribe({\r\n query: TaskSubscription,\r\n })\r\n .subscribe({\r\n // tslint:disable-next-line:no-any\r\n next(results: any) {\r\n // tslint:disable-next-line:no-console\r\n console.log(results);\r\n if (results.data.taskNotification.status) {\r\n showNotification('Success', results.data.taskNotification.message, 'info');\r\n } else {\r\n showNotification('Failed', results.data.taskNotification.message, 'error');\r\n }\r\n },\r\n // tslint:disable-next-line:no-any\r\n error(err: any) {\r\n // tslint:disable-next-line:no-console\r\n console.error(err);\r\n showNotification(null, err, 'error');\r\n },\r\n });\r\n }\r\n\r\n private onInMemoryChanged(isInMemory: boolean) {\r\n this.setState({\r\n isInMemory: isInMemory,\r\n isDownloadMatter: isInMemory ? false : this.state.isDownloadMatter, // If in memory changed, then set it to false\r\n });\r\n\r\n // browserHistory.replace(this.props.location.pathname, null);\r\n window.history.replaceState(null, '');\r\n }\r\n\r\n private onMatterDownloadChanged(isDownloadMatter: boolean) {\r\n this.setState({\r\n isDownloadMatter: isDownloadMatter,\r\n isForceDownload: false,\r\n });\r\n }\r\n\r\n private onAdvancedFilter = (show: boolean) => () => {\r\n this.setState({\r\n showAdvancedFilter: show,\r\n });\r\n }\r\n\r\n private onAdvancedSearch(filter: AdvancedFilterForm, hasFilter: boolean) {\r\n this.setState({\r\n hasFilter: hasFilter,\r\n filterValues: filter,\r\n searchCriterias: this.onFormatFilterValuesForSearchCriteria(filter),\r\n });\r\n }\r\n\r\n private onFormatFilterValuesForSearchCriteria(filterValues: AdvancedFilterForm) {\r\n const searchCriterias = new Array();\r\n\r\n if (filterValues) {\r\n \r\n if (filterValues.hasOwnProperty('ourReference') && filterValues.ourReference) {\r\n searchCriterias.push({ property: 'OurReference', operator: 'like', comparison: filterValues.ourReference });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('yourReference') && filterValues.yourReference) {\r\n searchCriterias.push({ property: 'YourReference', operator: 'like', comparison: filterValues.yourReference });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('matterCountries') && filterValues.matterCountries.matterCountry.length > 0) {\r\n const _operator = filterValues.matterCountries.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.matterCountries.matterCountry.map((option: CountryAutoCompleteItem) => option.value).join(',');\r\n\r\n searchCriterias.push({ property: 'Country', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('caseTypes') && filterValues.caseTypes.caseType.length > 0) {\r\n const _operator = filterValues.caseTypes.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.caseTypes.caseType.map((option: MatterTypeTypeAutoCompleteItem) => option.value).join(',');\r\n\r\n searchCriterias.push({ property: 'CaseType', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('matterProperties') && filterValues.matterProperties.matterProperty.length > 0) {\r\n const _operator = filterValues.matterProperties.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.matterProperties.matterProperty.map((option: MatterPropertyAutoCompleteItem) => option.value).join(',');\r\n\r\n searchCriterias.push({ property: 'Property', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('matterCategories') && filterValues.matterCategories.matterCategory.length > 0) {\r\n const _operator = filterValues.matterCategories.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.matterCategories.matterCategory.map((option: MatterCategoryAutoCompleteItem) => option.value).join(',');\r\n\r\n searchCriterias.push({ property: 'CaseCategory', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('matterClients') && filterValues.matterClients.matterClient.length > 0) {\r\n const _operator = filterValues.matterClients.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.matterClients.matterClient.map((option: NameSummaryAutoCompleteItem) => option.value).join(',');\r\n\r\n searchCriterias.push({ property: 'Client', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('matterOwners') && filterValues.matterOwners.matterOwner.length > 0) {\r\n const _operator = filterValues.matterOwners.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.matterOwners.matterOwner.map((option: NameSummaryAutoCompleteItem) => option.value).join(',');\r\n\r\n searchCriterias.push({ property: 'Owner', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('matterStatuses') && filterValues.matterStatuses.matterStatus.length > 0) {\r\n const _operator = filterValues.matterStatuses.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.matterStatuses.matterStatus.map((option: MatterStatusAutoCompleteItem) => option.value).join(',');\r\n\r\n searchCriterias.push({ property: 'Status', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('filingDateFrom') && filterValues.filingDateFrom) {\r\n const dateFrom = moment(filterValues.filingDateFrom).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'FilingDate', operator: 'gteq', comparison: dateFrom });\r\n }\r\n if (filterValues.hasOwnProperty('filingDateTo') && filterValues.filingDateTo) {\r\n const dateTo = moment(filterValues.filingDateTo).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'FilingDate', operator: 'lteq', comparison: dateTo });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('applicationNumber') && filterValues.applicationNumber) {\r\n searchCriterias.push({ property: 'ApplicationNumber', operator: 'like', comparison: filterValues.applicationNumber });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('grantAndRegistrationDateFrom') && filterValues.grantAndRegistrationDateFrom) {\r\n const dateFrom = moment(filterValues.grantAndRegistrationDateFrom).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'RegistrationDate', operator: 'gteq', comparison: dateFrom });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('grantAndRegistrationDateTo') && filterValues.grantAndRegistrationDateTo) {\r\n const dateTo = moment(filterValues.grantAndRegistrationDateTo).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'RegistrationDate', operator: 'lteq', comparison: dateTo });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('registrationNumber') && filterValues.registrationNumber) {\r\n searchCriterias.push({ property: 'RegistrationNumber', operator: 'like', comparison: filterValues.registrationNumber });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('priorityDateFrom') && filterValues.priorityDateFrom) {\r\n const dateFrom = moment(filterValues.priorityDateFrom).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'PriorityDate', operator: 'gteq', comparison: dateFrom });\r\n }\r\n if (filterValues.hasOwnProperty('priorityDateTo') && filterValues.priorityDateTo) {\r\n const dateTo = moment(filterValues.priorityDateTo).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'PriorityDate', operator: 'lteq', comparison: dateTo });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('priorityCountries') && filterValues.priorityCountries.priorityCountry.length > 0) {\r\n const _operator = filterValues.priorityCountries.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.priorityCountries.priorityCountry.map((option: PriorityCountryAutoCompleteItem) => option.value).join(',');\r\n\r\n searchCriterias.push({ property: 'PriorityCountry', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('title') && filterValues.title) {\r\n searchCriterias.push({ property: 'Title', operator: 'like', comparison: filterValues.title });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('class') && filterValues.class) {\r\n searchCriterias.push({ property: 'Class', operator: 'like', comparison: filterValues.class });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('goodsAndServices') && filterValues.goodsAndServices) {\r\n searchCriterias.push({ property: 'GoodsAndService', operator: 'like', comparison: filterValues.goodsAndServices });\r\n }\r\n\r\n // CompletionDate\r\n if (filterValues.hasOwnProperty('completionDateFrom') && filterValues.completionDateFrom) {\r\n const dateFrom = moment(filterValues.completionDateFrom).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'CompletionDate', operator: 'gteq', comparison: dateFrom });\r\n }\r\n if (filterValues.hasOwnProperty('completionDateTo') && filterValues.completionDateTo) {\r\n const dateTo = moment(filterValues.completionDateTo).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'CompletionDate', operator: 'lteq', comparison: dateTo });\r\n }\r\n\r\n // InstructionDate\r\n if (filterValues.hasOwnProperty('instructionDateFrom') && filterValues.instructionDateFrom) {\r\n const dateFrom = moment(filterValues.instructionDateFrom).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'InstructionDate', operator: 'gteq', comparison: dateFrom });\r\n }\r\n if (filterValues.hasOwnProperty('instructionDateTo') && filterValues.instructionDateTo) {\r\n const dateTo = moment(filterValues.instructionDateTo).format('YYYY-MM-DD');\r\n\r\n searchCriterias.push({ property: 'InstructionDate', operator: 'lteq', comparison: dateTo });\r\n }\r\n\r\n // Acting\r\n if (filterValues.hasOwnProperty('personActings') && filterValues.personActings.personActing.length > 0) {\r\n const _operator = filterValues.personActings.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.personActings.personActing.map((option: StaffSummaryAutoCompleteItem) => option.staffId).join(',');\r\n\r\n searchCriterias.push({ property: 'Acting', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n // Responsible\r\n if (filterValues.hasOwnProperty('personResponsibles') && filterValues.personResponsibles.personResponsible.length > 0) {\r\n const _operator = filterValues.personResponsibles.exclude ? 'notin' : 'in';\r\n const _comparison = filterValues.personResponsibles.personResponsible.map((option: StaffSummaryAutoCompleteItem) => option.staffId).join(',');\r\n\r\n searchCriterias.push({ property: 'Responsible', operator: _operator, comparison: _comparison });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('isMatterEstimateZero') && filterValues.isMatterEstimateZero) {\r\n searchCriterias.push({ property: 'EstimatedCosts', operator: 'eq', comparison: '0' });\r\n }\r\n\r\n if (filterValues.hasOwnProperty('feesBilledVsEstimatePercentage') && filterValues.feesBilledVsEstimatePercentage) {\r\n searchCriterias.push({ property: 'FeesBilledGreaterThanAmount', operator: 'gt', comparison: filterValues.feesBilledVsEstimatePercentage.toString() });\r\n }\r\n\r\n const convertToJson = JSON.stringify(searchCriterias);\r\n\r\n if (searchCriterias.length > 0) {\r\n return convertToJson;\r\n }\r\n }\r\n \r\n return undefined;\r\n }\r\n\r\n private onExportLoading(isLoading: boolean) {\r\n this.setState({\r\n isExportLoading: isLoading\r\n });\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:no-any\r\nconst MatterSummary = graphql(MatterSummaryOptions)(MatterSummaryPage);\r\n\r\nexport default MatterSummary;\r\n\r\nexport const AddUserMatterAccessActivity = gql`\r\n mutation AddUserMatterAccessActivity($matterId: Int) {\r\n addUserMatterAccessActivity(matterId: $matterId)\r\n }\r\n`;\r\n","import React, { useState, useMemo } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, GetTagProps, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, Chip } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport gql from 'graphql-tag';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { useQuery } from 'react-apollo';\r\n\r\n// const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// removedAvatar: {\r\n// maxWidth: '15px',\r\n// maxHeight: '15px',\r\n// },\r\n// }),\r\n// );\r\n\r\ninterface MatterTypeSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: MatterTypeTypeAutoCompleteItem | MatterTypeTypeAutoCompleteItem[] | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: MatterTypeTypeAutoCompleteItem | MatterTypeTypeAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties;\r\n disablePortal?: boolean;\r\n variant?: 'standard' | 'filled' | 'outlined';\r\n size?: 'small' | 'medium';\r\n onBlur?: React.FocusEventHandler;\r\n multiple?: boolean;\r\n isApplyMatterAccess?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n}\r\n\r\nexport interface MatterTypeTypeAutoCompleteItem extends IAutoCompleteItem, MatterType {}\r\n\r\ninterface MatterTypeSelectorState {\r\n data: MatterTypeTypeAutoCompleteItem[];\r\n}\r\n\r\nexport const MatterTypeSelector: React.FC = (props) => {\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n data: [],\r\n });\r\n\r\n const matterTypeQuery = useQuery(MATTER_TYPE_QUERY, {\r\n variables: {\r\n isApplyMatterAccess: props.isApplyMatterAccess\r\n },\r\n fetchPolicy: 'cache-first'\r\n });\r\n\r\n useMemo(() => {\r\n if (!matterTypeQuery.loading && !matterTypeQuery.error && matterTypeQuery.data && matterTypeQuery.data.lookup && matterTypeQuery.data.lookup.matterType) {\r\n setState((prevState) => {\r\n const { matterType } = matterTypeQuery.data!.lookup;\r\n\r\n const items: MatterTypeTypeAutoCompleteItem[] = matterType.map((mType: MatterType) => {\r\n return {\r\n ...mType,\r\n label: mType.description,\r\n value: mType.description,\r\n };\r\n }).sort((a, b) => {\r\n if (a.label < b.label) {\r\n return -1;\r\n } else if (a.label > b.label) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n return {\r\n ...prevState,\r\n data: items,\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [matterTypeQuery.loading, matterTypeQuery.data, matterTypeQuery.error]);\r\n \r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const onRenderTags = (value: MatterTypeTypeAutoCompleteItem[], getTagProps: GetTagProps): React.ReactNode => {\r\n let renderTagsValue = value.map((option: MatterTypeTypeAutoCompleteItem, index: number) => {\r\n let label = option.label;\r\n if (option.label.length > 20) {\r\n label = `${option.label.substring(0, 20)}...`;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return renderTagsValue;\r\n };\r\n\r\n if (props.multiple) {\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n multiple={true}\r\n renderTags={onRenderTags}\r\n disableCloseOnSelect={props.disableCloseOnSelect}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n disableCloseOnSelect={props.disableCloseOnSelect}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport interface MatterTypeParams {\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface MatterTypeData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n matterType: MatterType[];\r\n}\r\n\r\nexport interface MatterType {\r\n id: number;\r\n guidId: string;\r\n description: string;\r\n categoryId: string;\r\n matterTypeId: string;\r\n state: string;\r\n}\r\n\r\nconst MATTER_TYPE_QUERY = gql`\r\n query MatterType($isApplyMatterAccess: Boolean) {\r\n lookup {\r\n matterType(isApplyMatterAccess: $isApplyMatterAccess) {\r\n id\r\n guidId\r\n description\r\n categoryId\r\n matterTypeId\r\n state\r\n }\r\n }\r\n }\r\n`;\r\n","import gql from 'graphql-tag';\r\nimport { client } from '..';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { Options, ColumnConfigList, ColumnConfig } from '../viewConfig/SummaryViewConfigurations';\r\nimport { MatterData } from './models/Matter';\r\nimport { TenantData } from '../hooks/useTenant';\r\n\r\nexport interface MatterSummaryQueryParams {\r\n offset: number; \r\n first: number;\r\n filter?: string | null; \r\n includeCompleted: boolean;\r\n sortColumn?: string; \r\n sortDirection?: string;\r\n}\r\n\r\n// New Matter Summary Query params\r\nexport interface MatterSummaryQueryXParams {\r\n offset: number; \r\n first: number;\r\n filter?: string | null; \r\n isIncludeCompleted: boolean;\r\n sortColumn?: string; \r\n sortDirection?: string;\r\n clientName?: string;\r\n matterStatus?: string;\r\n personActingId?: number;\r\n personResponsibleId?: number;\r\n wipBalanceGreaterThanAmount?: number;\r\n debtorBalanceGreaterThanAmount?: number;\r\n isIncludeMattersWithTrustBalance?: boolean;\r\n nameId?: number;\r\n isReferredMatters?: boolean;\r\n isLimitedMatterSearch?: Boolean;\r\n searchCriteriasJson?: string;\r\n feeEarnerId?: string;\r\n isDropdownSearch?: boolean;\r\n}\r\n\r\nexport interface MatterSummaryListData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n matterSummaryList: MatterSummaryList;\r\n}\r\n\r\nexport interface MatterSummaryListXData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n matterSummaryListX: MatterSummaryListX;\r\n}\r\n\r\nexport interface AppUser {\r\n isAdministrator: boolean;\r\n}\r\n\r\nexport interface MatterOptionsData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n appUser: AppUser;\r\n options: Options;\r\n columnConfigList: ColumnConfigList;\r\n}\r\n\r\nexport interface RoleData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n roleList: {\r\n role: Array<{\r\n roleIdString: string,\r\n rolename: string\r\n }>\r\n };\r\n}\r\n\r\n// Generated by https://quicktype.io\r\nexport interface MatterSummaryList {\r\n recordCount: number;\r\n matters: MatterSummary[];\r\n matterSummaryActualCount: MatterSummaryActualCount;\r\n}\r\n\r\nexport interface MatterSummaryListX {\r\n recordCount: number;\r\n rowCountWithoutFilters: number;\r\n matters: MatterSummaryX[]; \r\n}\r\n\r\nexport interface MatterSummary {\r\n id: number;\r\n imageLocation: string;\r\n fileNumber: string;\r\n matterCategory: string;\r\n matterType: string;\r\n matterTypeCategory: null | string;\r\n stage: null;\r\n title: string;\r\n description: string;\r\n client: string;\r\n otherSide: null | string;\r\n clientReference: null | string;\r\n status: MatterStatus;\r\n latestComment: null | string;\r\n last3Comments: null | string;\r\n completionOrSettlmentDate: null | string;\r\n instructionDate: string;\r\n nextAction: null;\r\n nextActionDate: null;\r\n nextDueDescription: null;\r\n billed: boolean;\r\n unbilled: boolean;\r\n debtors: string;\r\n estimatedCosts: number;\r\n fIRBStatus: null;\r\n lastUpdate: string;\r\n inProgress: boolean;\r\n syncSystemID: null;\r\n state: null;\r\n family: null;\r\n property: null;\r\n propertyLabel: null;\r\n owner: null | string;\r\n nextRenewalDate: null;\r\n country: null;\r\n}\r\n\r\nexport interface MatterSummaryX {\r\n id: number;\r\n matterGuidId: string;\r\n fileNumber: string;\r\n status: string;\r\n title: string;\r\n longTitle: string;\r\n countryID: number;\r\n country: string;\r\n state: string;\r\n categoryID: number;\r\n category: string;\r\n typeID: number;\r\n type: string;\r\n typeClassification: string;\r\n typeState: string;\r\n subTypeID: number;\r\n subType: string;\r\n stage: string;\r\n fIRB: Boolean;\r\n family: string;\r\n property: string;\r\n propertyLabel: string;\r\n client: string;\r\n clientReference: string;\r\n otherSide: string;\r\n owner: string;\r\n billed: number;\r\n unbilled: number;\r\n unbilledFees: number;\r\n unbilledDisbursements: number;\r\n debtors: number;\r\n estimatedCosts: number;\r\n percentageEstimate: number;\r\n exposure: number;\r\n trustBalance: number;\r\n completionOrSettlmentDate: Date;\r\n instructionDate: Date;\r\n nextAction: string;\r\n nextActionDate: Date;\r\n nextDueDescription: string;\r\n fileLocation: string;\r\n imageLocation: string;\r\n latestComment: string;\r\n inProgress: Boolean;\r\n publishedDate: Date;\r\n lastUpdate: Date;\r\n nextRenewalDate: Date;\r\n isVIP: Boolean;\r\n syncSystemID: number;\r\n responsibleID: number;\r\n responsible: string;\r\n responsibleEmail: string;\r\n responsiblePhone: string;\r\n actingID: number;\r\n acting: string;\r\n actingEmail: string;\r\n actingPhone: string;\r\n assistingID: number;\r\n assisting: string;\r\n assistingEmail: string;\r\n assistingPhone: string;\r\n price: number;\r\n deposit: number;\r\n exchangeDate: Date;\r\n coolingOffDate: Date;\r\n depositDueDate: Date;\r\n depositPaidDate: Date;\r\n earliestPriorityDate: Date;\r\n applicationNumber: number;\r\n publicationDate: Date;\r\n publicationNumber: string;\r\n grantNumber: string;\r\n class: string;\r\n goodsAndServices: string;\r\n costAgreementReceivedDate: Date;\r\n costAgreementRequired: Boolean;\r\n referrer: string;\r\n trustAccountBalance: number;\r\n priorityCountry: string;\r\n reviewDate: Date;\r\n injuryDate: Date;\r\n proceedingsIssuedDate: Date;\r\n sunsetOrLimitationDate: Date;\r\n hearingDate: Date;\r\n trustee: string;\r\n trusteeEmail: string;\r\n isAwaitingInstructions: Boolean;\r\n clientType: string;\r\n foreignCurrency: string;\r\n lastTrustTransactionDate: Date;\r\n lastTrustTransactionType: string;\r\n fundsRecovered: number;\r\n}\r\n\r\nexport interface MatterSummaryActualCount {\r\n actualRowCountForSearch: number;\r\n}\r\n\r\nexport enum MatterStatus {\r\n InProgress = 'In Progress',\r\n Unexchanged = 'Unexchanged',\r\n}\r\n\r\nexport function retrieveMatterSummaryData(query: MatterSummaryQueryParams, \r\n refreshData: boolean,\r\n onSuccess: (data: MatterSummaryListData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n : void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client.query({\r\n query: MatterSummaryData,\r\n variables: {\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n includeCompleted: query.includeCompleted,\r\n sortColumn: query.sortColumn,\r\n sortDirection: query.sortDirection\r\n },\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); }\r\n );\r\n}\r\n\r\nexport function retrieveMatterSummaryXData(query: MatterSummaryQueryXParams, \r\n refreshData: boolean,\r\n // tslint:disable-next-line: no-any\r\n onSuccess: (data: any) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n : void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client.query({\r\n query: MatterSummaryXDataQuery,\r\n variables: {\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n isIncludeCompleted: query.isIncludeCompleted,\r\n sortColumn: query.sortColumn,\r\n sortDirection: query.sortDirection,\r\n clientName: query.clientName,\r\n matterStatus: query.matterStatus,\r\n personActingId: query.personActingId,\r\n personResponsibleId: query.personResponsibleId,\r\n wipBalanceGreaterThanAmount: query.wipBalanceGreaterThanAmount,\r\n debtorBalanceGreaterThanAmount: query.debtorBalanceGreaterThanAmount,\r\n isIncludeMattersWithTrustBalance: query.isIncludeMattersWithTrustBalance,\r\n nameId: query.nameId,\r\n isReferredMatters: query.isReferredMatters,\r\n searchCriteriasJson: query.searchCriteriasJson ? query.searchCriteriasJson : null\r\n },\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { \r\n onError(reason); \r\n });\r\n}\r\n\r\nconst MatterSummaryData = gql`\r\n query MatterSummaryData(\r\n $offset: Int, $first: Int,\r\n $filter: String, $includeCompleted: Boolean,\r\n $sortColumn: String, $sortDirection: String\r\n ) {\r\n matterSummaryList(\r\n offset: $offset, \r\n first: $first, \r\n filter: $filter, \r\n includeCompleted: $includeCompleted, \r\n sortColumn: $sortColumn, \r\n sortDirection: $sortDirection\r\n ) {\r\n recordCount,\r\n matterSummaryActualCount{\r\n actualRowCountForSearch\r\n },\r\n matters {\r\n id\r\n imageLocation\r\n fileNumber\r\n matterCategory\r\n matterType\r\n matterTypeCategory\r\n stage\r\n title\r\n description\r\n client\r\n otherSide\r\n clientReference\r\n status\r\n latestComment\r\n last3Comments\r\n completionOrSettlmentDate\r\n instructionDate\r\n nextAction\r\n nextActionDate\r\n nextDueDescription\r\n billed\r\n unbilled\r\n debtors\r\n estimatedCosts\r\n fIRBStatus\r\n lastUpdate\r\n inProgress\r\n syncSystemID\r\n state\r\n family\r\n property\r\n propertyLabel\r\n owner\r\n nextRenewalDate\r\n country\r\n } \r\n }\r\n }\r\n`;\r\n\r\nexport const MatterSummaryXDataQuery = gql`\r\n query MatterSummaryXData(\r\n $offset: Int, $first: Int,\r\n $filter: String, $isIncludeCompleted: Boolean, \r\n $sortColumn: String, $sortDirection: String,\r\n $clientName: String, $matterStatus: String,\r\n $personActingId: Int, $personResponsibleId: Int,\r\n $wipBalanceGreaterThanAmount: Decimal, $debtorBalanceGreaterThanAmount: Decimal,\r\n $isIncludeMattersWithTrustBalance: Boolean,\r\n $nameId: Int,\r\n $isReferredMatters: Boolean,\r\n $searchCriteriasJson: String\r\n ) {\r\n matterSummaryListX(\r\n offset: $offset, first: $first, filter: $filter, \r\n isIncludeCompleted: $isIncludeCompleted, \r\n sortColumn: $sortColumn, sortDirection: $sortDirection,\r\n clientName: $clientName, matterStatus: $matterStatus,\r\n personActingId: $personActingId, personResponsibleId: $personResponsibleId,\r\n wipBalanceGreaterThanAmount: $wipBalanceGreaterThanAmount, \r\n debtorBalanceGreaterThanAmount: $debtorBalanceGreaterThanAmount,\r\n isIncludeMattersWithTrustBalance: $isIncludeMattersWithTrustBalance,\r\n nameId: $nameId,\r\n isReferredMatters: $isReferredMatters,\r\n searchCriteriasJson: $searchCriteriasJson\r\n ) {\r\n recordCount,\r\n rowCountWithoutFilters,\r\n matters {\r\n id\r\n matterGuidId\r\n fileNumber \r\n imageLocation\r\n status \r\n title \r\n longTitle \r\n countryID \r\n country \r\n state \r\n categoryID \r\n category \r\n typeID \r\n type \r\n typeClassification\r\n typeState \r\n subTypeID \r\n subType \r\n stage \r\n fIRB \r\n family \r\n property \r\n propertyLabel \r\n client \r\n clientReference \r\n otherSide \r\n owner \r\n billed\r\n billedFees\r\n unbilled\r\n unbilledFees\r\n unbilledDisbursements \r\n debtors \r\n estimatedCosts\r\n percentageEstimate\r\n exposure\r\n trustBalance \r\n completionOrSettlmentDate \r\n instructionDate \r\n nextAction \r\n nextActionDate \r\n nextDueDescription \r\n fileLocation \r\n latestComment \r\n inProgress \r\n publishedDate \r\n lastUpdate \r\n nextRenewalDate \r\n isVIP \r\n syncSystemID \r\n responsibleID \r\n responsible \r\n responsibleEmail \r\n responsiblePhone \r\n actingID \r\n acting \r\n actingEmail \r\n actingPhone \r\n assistingID \r\n assisting \r\n assistingEmail \r\n assistingPhone \r\n price \r\n deposit \r\n exchangeDate \r\n coolingOffDate \r\n depositDueDate \r\n depositPaidDate \r\n earliestPriorityDate \r\n applicationNumber \r\n publicationDate \r\n publicationNumber \r\n grantNumber \r\n class \r\n goodsAndServices\r\n costAgreementReceivedDate\r\n costAgreementRequired\r\n referrer\r\n trustAccountBalance\r\n priorityCountry\r\n reviewDate\r\n injuryDate\r\n proceedingsIssuedDate\r\n sunsetOrLimitationDate\r\n hearingDate\r\n trustee\r\n trusteeEmail\r\n isAwaitingInstructions\r\n clientType\r\n foreignCurrency\r\n lastTrustTransactionDate\r\n lastTrustTransactionType\r\n fundsRecovered\r\n forecastFeesBilledThisMonth\r\n forecastFeesBilledNextThreeMonths\r\n forecastFeesBilledNextSixMonths\r\n forecastFeesCollectedThisMonth\r\n forecastFeesCollectedNextThreeMonths\r\n forecastFeesCollectedNextSixMonths\r\n forecastHoursThisMonth\r\n forecastHoursNextThreeMonths\r\n forecastHoursNextSixMonths\r\n expectedFutureFees\r\n archivedDate\r\n injuriesDescription\r\n } \r\n }\r\n }\r\n`;\r\n\r\nexport const MatterSummaryOptions = gql`query MatterSummaryOptions{\r\n appUser {\r\n isAdministrator\r\n }\r\n options { \r\n matterViewOptions {\r\n canAdd\r\n canDelete\r\n canUpdate\r\n }\r\n } \r\n}`;\r\n\r\nexport function fetchColumnConfigData(refreshData: boolean,\r\n configType: number, \r\n onSuccess: (data?: ColumnConfig) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n : void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: ColumnConfigData,\r\n variables: {\r\n configType: configType\r\n },\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); }\r\n );\r\n}\r\n\r\nexport const ColumnConfigData = gql`query ColumnConfigListData($configType: Int) {\r\n columnConfigList (configType: $configType){\r\n summaryViewConfig{\r\n id,\r\n configId,\r\n name,\r\n isSecurity,\r\n isPrivate,\r\n isDefault,\r\n isRoleDefault,\r\n isTenantDefault\r\n configType,\r\n layoutConfiguration\r\n } \r\n }\r\n}`;\r\n\r\nexport function fetchMatterSummaryNewEnabled(refreshData: boolean,\r\n onSuccess: (data?: MatterSummaryNewEnabledOption) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n : void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: MatterSummaryNewEnabledData,\r\n variables: {},\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); }\r\n );\r\n}\r\n\r\nexport interface MatterSummaryNewEnabledOption {\r\n options: MatterSummaryNewEnabled;\r\n}\r\n\r\nexport interface MatterSummaryNewEnabled {\r\n matterSummaryNewEnabled: MatterSummaryBooleanValue; \r\n}\r\nexport interface MatterSummaryBooleanValue {\r\n boolValue: boolean;\r\n}\r\n\r\nexport const MatterSummaryNewEnabledData = gql`query MatterSummaryNewEnabled{\r\n options{\r\n matterSummaryNewEnabled{\r\n boolValue\r\n }\r\n }\r\n}`;\r\n\r\nexport const localCurrency = gql`query localCurrency {\r\n options {localCurrency {currency}}\r\n}`;\r\n\r\nexport interface MatterSummaryActualCount {\r\n actualRowCountForSearch: number;\r\n}\r\n\r\nexport function fetchMatterDetailsData(refreshData: boolean,\r\n matterId: number,\r\n onSuccess: (data?: MatterData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n: void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: matterDetailsData,\r\n variables: {matterId: matterId},\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); });\r\n}\r\n\r\nexport const matterDetailsData = gql`\r\nquery matterDetails ($matterId: Int!){\r\n matter(id: $matterId){\r\n id,\r\n matterGuid,\r\n fileNumber,\r\n acting,\r\n actingEmail,\r\n responsible,\r\n responsibleEmail,\r\n client,\r\n description,\r\n title,\r\n completionDate,\r\n actions{\r\n canBillMatter,\r\n canWriteOffUnbilledFees,\r\n canTransferTrustToPayInvoice,\r\n canWriteOffDebtors,\r\n canCloseMatter,\r\n canArchiveMatter,\r\n\r\n hasBillMatterTask,\r\n hasWriteOffUnbilledFeesTask,\r\n hasTransferTrustToPayInvoiceTask,\r\n hasWriteOffDebtorsTask,\r\n hasCloseMatterTask,\r\n hasArchiveMatterTask,\r\n hasMatterTask,\r\n\r\n pendingWriteOffFeesAmountInBillMatterTask,\r\n pendingWriteOffFeesAmountInWriteOffWipTask,\r\n pendingWriteOffDisbAmountInBillMatterTask,\r\n pendingWriteOffDisbAmountInWriteOffWipTask\r\n }\r\n financials{\r\n unbilledTimeAndFees,\r\n unbilledDisbursements,\r\n debtors: balanceDue,\r\n trustBalance: trustGeneralBalance,\r\n billedTimeAndFees,\r\n feeEstimate: estimatedCosts,\r\n percentageEstimate\r\n }\r\n }\r\n}`;\r\n\r\nexport function fetchBasicMatterDetailsData(\r\n refreshData: boolean,\r\n matterId: number,\r\n onSuccess: (data?: MatterData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n: void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: basicMatterDetailsData,\r\n variables: {matterId: matterId},\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); });\r\n}\r\n\r\nexport const basicMatterDetailsData = gql`\r\nquery matterDetails ($matterId: Int!){\r\n matter(id: $matterId){\r\n id,\r\n matterGuid,\r\n fileNumber,\r\n client,\r\n title\r\n }\r\n}`;\r\n\r\nexport const ArchiveMatterRequestMutation = gql`\r\nmutation archiveMatterRequest( \r\n $matterGuid: String, \r\n $archive: Boolean,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n archiveMatterRequest(\r\n matterGuid: $matterGuid, \r\n archive: $archive,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const BillMatterRequestMutation = gql`\r\nmutation billMatterRequest(\r\n $matterGuid: String,\r\n $billFeesAmount: Decimal,\r\n $billDisbursementsAmount: Decimal,\r\n $applyTrustAmount: Decimal,\r\n $writeOffFeesAmount: Decimal,\r\n $writeOffDisbursementsAmount: Decimal,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n billMatterRequest(\r\n matterGuid: $matterGuid,\r\n billFeesAmount: $billFeesAmount,\r\n billDisbursementsAmount: $billDisbursementsAmount,\r\n applyTrustAmount: $applyTrustAmount,\r\n writeOffFeesAmount: $writeOffFeesAmount,\r\n writeOffDisbursementsAmount: $writeOffDisbursementsAmount, \r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const CloseMatterRequestMutation = gql`\r\nmutation closeMatterRequest(\r\n $matterGuid: String, \r\n $close: Boolean,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n closeMatterRequest(\r\n matterGuid: $matterGuid, \r\n close: $close,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const TransferMatterTrustToInvoiceRequestMutation = gql`\r\nmutation transferMatterTrustToInvoiceRequest(\r\n $matterGuid: String,\r\n $trustTransferAmount: Decimal,\r\n $invoiceToApply: String,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n transferMatterTrustToInvoiceRequest(\r\n matterGuid: $matterGuid,\r\n trustTransferAmount: $trustTransferAmount,\r\n invoiceToApply: $invoiceToApply, \r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const WriteOffMatterDebtorsRequestMutation = gql`\r\nmutation writeOffMatterDebtorsRequest(\r\n $matterGuid: String, \r\n $writeOffDebtorsAmount: Decimal,\r\n $closeMatterAfterWriteOff: Boolean, \r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n writeOffMatterDebtorsRequest(\r\n matterGuid: $matterGuid,\r\n writeOffDebtorsAmount: $writeOffDebtorsAmount,\r\n closeMatterAfterWriteOff: $closeMatterAfterWriteOff,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const WriteOffMatterWIPRequestMutation = gql`\r\nmutation writeOffMatterWIPRequest(\r\n $matterGuid: String, \r\n $writeOffFeesAmount: Decimal,\r\n $writeOffDisbursementsAmount: Decimal, \r\n $closeMatterAfterWriteOff: Boolean, \r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n writeOffMatterWIPRequest(\r\n matterGuid: $matterGuid, \r\n writeOffFeesAmount: $writeOffFeesAmount,\r\n writeOffDisbursementsAmount: $writeOffDisbursementsAmount, \r\n closeMatterAfterWriteOff: $closeMatterAfterWriteOff,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const UpdateArchiveMatterRequestMutation = gql`\r\nmutation updateArchiveMatterRequest( \r\n $taskRequestGuid: String, \r\n $matterGuid: String, \r\n $archive: Boolean,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n updateArchiveMatterRequest(\r\n taskRequestGuid: $taskRequestGuid,\r\n matterGuid: $matterGuid, \r\n archive: $archive,\r\n comments: $comments\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const UpdateBillMatterRequestMutation = gql`\r\nmutation updateBillMatterRequest(\r\n $taskRequestGuid: String, \r\n $matterGuid: String,\r\n $billFeesAmount: Decimal,\r\n $billDisbursementsAmount: Decimal,\r\n $applyTrustAmount: Decimal,\r\n $writeOffFeesAmount: Decimal,\r\n $writeOffDisbursementsAmount: Decimal,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n updateBillMatterRequest(\r\n taskRequestGuid: $taskRequestGuid,\r\n matterGuid: $matterGuid,\r\n billFeesAmount: $billFeesAmount,\r\n billDisbursementsAmount: $billDisbursementsAmount,\r\n applyTrustAmount: $applyTrustAmount,\r\n writeOffFeesAmount: $writeOffFeesAmount,\r\n writeOffDisbursementsAmount: $writeOffDisbursementsAmount, \r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const UpdateCloseMatterRequestMutation = gql`\r\nmutation updateCloseMatterRequest(\r\n $taskRequestGuid: String, \r\n $matterGuid: String, \r\n $close: Boolean,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n updateCloseMatterRequest(\r\n taskRequestGuid: $taskRequestGuid,\r\n matterGuid: $matterGuid, \r\n close: $close,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const UpdateTransferMatterTrustToInvoiceRequestMutation = gql`\r\nmutation updateTransferMatterTrustToInvoiceRequest(\r\n $taskRequestGuid: String, \r\n $matterGuid: String,\r\n $trustTransferAmount: Decimal,\r\n $invoiceToApply: String,\r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n updateTransferMatterTrustToInvoiceRequest(\r\n taskRequestGuid: $taskRequestGuid,\r\n matterGuid: $matterGuid,\r\n trustTransferAmount: $trustTransferAmount,\r\n invoiceToApply: $invoiceToApply, \r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const UpdateWriteOffMatterDebtorsRequestMutation = gql`\r\nmutation updateWriteOffMatterDebtorsRequest(\r\n $taskRequestGuid: String, \r\n $matterGuid: String, \r\n $writeOffDebtorsAmount: Decimal,\r\n $closeMatterAfterWriteOff: Boolean, \r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n updateWriteOffMatterDebtorsRequest(\r\n taskRequestGuid: $taskRequestGuid,\r\n matterGuid: $matterGuid,\r\n writeOffDebtorsAmount: $writeOffDebtorsAmount,\r\n closeMatterAfterWriteOff: $closeMatterAfterWriteOff,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const UpdateWriteOffMatterWIPRequestMutation = gql`\r\nmutation updateWriteOffMatterWIPRequest(\r\n $taskRequestGuid: String, \r\n $matterGuid: String, \r\n $writeOffFeesAmount: Decimal,\r\n $writeOffDisbursementsAmount: Decimal, \r\n $closeMatterAfterWriteOff: Boolean, \r\n $comments: String,\r\n $taskInput: TaskInput) {\r\n updateWriteOffMatterWIPRequest(\r\n taskRequestGuid: $taskRequestGuid,\r\n matterGuid: $matterGuid, \r\n writeOffFeesAmount: $writeOffFeesAmount,\r\n writeOffDisbursementsAmount: $writeOffDisbursementsAmount, \r\n closeMatterAfterWriteOff: $closeMatterAfterWriteOff,\r\n comments: $comments,\r\n taskInput: $taskInput\r\n )\r\n}`;\r\n\r\nexport const MatterTaskNotification = gql`\r\nsubscription matterTaskNotification {\r\n matterManagementTaskNotification{\r\n id,\r\n status,\r\n message,\r\n description\r\n }\r\n}`;\r\n\r\nexport const UploadMatterDocumentMutation = gql`\r\nmutation UploadMatterDocumentMutation ($input: MatterDocumentUploadInput!){\r\n uploadMatterDocument(input: $input){\r\n status,\r\n error\r\n }\r\n}`;\r\n\r\nexport const UploadMatterDocumentNotification = gql`\r\nsubscription uploadMatterDocumentNotification {\r\n uploadMatterDocumentNotification{\r\n id,\r\n status,\r\n message,\r\n description\r\n }\r\n}`;\r\n\r\nexport interface CurrencySymbolQueryData {\r\n options: SymbolOptions;\r\n}\r\n\r\nexport interface SymbolOptions {\r\n currencySymbol: CurrencySymbol;\r\n}\r\n\r\nexport interface CurrencySymbol {\r\n symbol: string;\r\n}\r\n\r\nexport function fetchCurrencySymbolData(\r\n refreshData: boolean,\r\n onSuccess: (data?: CurrencySymbolQueryData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n : void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: CurrencySymbolQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); });\r\n}\r\n\r\nexport const CurrencySymbolQuery = gql`\r\n query CurrencySymbolQuery {\r\n options {\r\n currencySymbol {\r\n symbol\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport function fetcTenantData(\r\n refreshData: boolean,\r\n onSuccess: (data?: TenantData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n : void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n\r\n client.query({\r\n query: TenantDataQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any ) => { onError(reason); });\r\n}\r\n\r\nexport const TenantDataQuery = gql`\r\n query Tenant {\r\n tenant {\r\n tenantId\r\n sourceSystem\r\n useVerificationLinkForNewUsers\r\n }\r\n }\r\n`;\r\n\r\nexport type MatterForecastSubscriptionData = {\r\n updateMatterForecastNotification: UpdateMatterForecastNotification;\r\n};\r\n\r\nexport type UpdateMatterForecastNotification = {\r\n id: number;\r\n message: string;\r\n status: boolean;\r\n description: null;\r\n};\r\n\r\nexport const MatterForecastSubscription = gql`\r\n subscription updateMatterForecast{\r\n\t\tupdateMatterForecastNotification{\r\n\t\t\tid\r\n message\r\n status\r\n description\r\n\t\t}\r\n\t}\r\n`;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { CorrespondenceActivity, useCorrespondenceActivity } from '../../hooks/useCorrespondenceActivity';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%'\r\n },\r\n })\r\n);\r\n\r\ninterface CorrespondenceActivitySelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n style?: React.CSSProperties;\r\n isSystem?: boolean;\r\n}\r\n\r\ninterface CorrespondenceActivitySelectorState {\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const CorrespondenceActivitySelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n options: [],\r\n });\r\n\r\n const correspondenceActivityQuery = useCorrespondenceActivity({ isSystem: props.isSystem ?? null }, 'cache-first');\r\n\r\n useEffect(() => { \r\n \r\n if (!correspondenceActivityQuery.loading && !correspondenceActivityQuery.error && correspondenceActivityQuery.data) {\r\n\r\n const { data } = correspondenceActivityQuery;\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n options: data.lookup.correspondenceActivity.map( (source: CorrespondenceActivity) => ({...source, value: source.guid, label: source.description }))\r\n .sort((a, b) => a.sequence < b.sequence ? -1 : a.sequence > b.sequence ? 1 : 0),\r\n };\r\n });\r\n }\r\n\r\n }, [correspondenceActivityQuery.data, correspondenceActivityQuery.error, correspondenceActivityQuery.loading]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'options');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, PopperProps } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { FirmData, Office } from '../models/Firm';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\n\r\nexport interface OfficeQueryParams {\r\n isMyOfficeOnly: boolean | null;\r\n}\r\n\r\ninterface FirmOfficeSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n onBlur?: React.FocusEventHandler;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n showAllOffice?: boolean;\r\n PopperComponent?: React.ComponentType;\r\n}\r\n\r\ninterface FirmOfficeSelectorState {\r\n isLoading: boolean;\r\n data: IAutoCompleteItem[];\r\n}\r\n\r\nexport const FirmOfficeSelector: React.FC = props => {\r\n\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n data: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n let query: OfficeQueryParams = {\r\n isMyOfficeOnly : props.showAllOffice && props.showAllOffice === true // When not used with Dashboard controls\r\n ? null\r\n : (\r\n UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardOfficeView) \r\n ? null\r\n : UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardMyOfficeOnly)\r\n )\r\n \r\n };\r\n\r\n retrieveOfficeData(\r\n query,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: FirmData) => {\r\n setState({\r\n ...state,\r\n data: data.firm.firmOffices.firmOffice.map((source: Office) => ({ ...source, value: source.guidID, label: source.description })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n PopperComponent={props.PopperComponent} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n PopperComponent={props.PopperComponent} \r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nexport function retrieveOfficeData(\r\n query: OfficeQueryParams | undefined,\r\n refreshData: boolean,\r\n onSuccess: (data: FirmData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: FirmOfficeList,\r\n variables: {\r\n isMyOfficeOnly: query ? query.isMyOfficeOnly : null\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst FirmOfficeList = gql`\r\nquery firmOfficeList($isMyOfficeOnly: Boolean) {\r\n firm {\r\n firmOffices(isMyOfficeOnly: $isMyOfficeOnly) {\r\n recordCount\r\n firmOffice {\r\n guidID,\r\n description,\r\n staffCount,\r\n timezone,\r\n timezoneDescription\r\n }\r\n }\r\n }\r\n}`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { FirmData, Department } from '../models/Firm';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\n\r\n// const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// root: {\r\n// minWidth: '150px',\r\n// },\r\n// })\r\n// );\r\n\r\nexport interface DepartmentQueryParams {\r\n isMyDepartmentOnly: boolean | null;\r\n}\r\n\r\ninterface FirmDepartmentSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n}\r\n\r\ninterface FirmDepartmentSelectorState {\r\n isLoading: boolean;\r\n error?: boolean;\r\n data: IAutoCompleteItem[];\r\n}\r\n\r\nexport const FirmDepartmentSelector: React.FC = props => {\r\n\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n error: props.error,\r\n data: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n let query: DepartmentQueryParams = {\r\n isMyDepartmentOnly: UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardDepartmentView) \r\n ? null\r\n : UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardMyDepartmentOnly)\r\n };\r\n\r\n retrieveDepartmentData(\r\n query,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: FirmData) => {\r\n setState({\r\n ...state,\r\n data: data.firm.departments.department.map((source: Department) => ({value: source.guidID, label: source.description })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nexport function retrieveDepartmentData(\r\n query: DepartmentQueryParams | undefined,\r\n refreshData: boolean,\r\n onSuccess: (data: FirmData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: FirmDepartmentList,\r\n variables: {\r\n isMyDepartmentOnly: query ? query.isMyDepartmentOnly : null\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst FirmDepartmentList = gql`\r\nquery firmDepartmentList($isMyDepartmentOnly: Boolean) {\r\n firm{\r\n departments(isMyDepartmentOnly: $isMyDepartmentOnly){\r\n recordCount,\r\n department{\r\n guidID,\r\n description,\r\n staffCount\r\n }\r\n }\r\n }\r\n}`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect, FormEvent, useMemo } from 'react';\r\nimport { makeStyles, Theme, createStyles, Grid, IconButton, Badge } from '@material-ui/core';\r\nimport { MatterTerminology } from '../MatterTerminology';\r\nimport { RvSearch } from '../components/Search';\r\nimport { mainTheme } from '../Theme';\r\nimport { RvLabel } from '../components/Label/Label';\r\nimport { RvTooltipFabric } from '../components/Tooltip';\r\nimport { RvButtonFabric, RvButtonType } from '../components/Button';\r\nimport { SummaryViewConfigObj } from '../viewConfig/SummaryViewConfigurations';\r\nimport { RvCheckbox, CheckboxState } from '../components/Checkbox';\r\nimport { UserFeature, UserFeatureEnum } from '../types/UserFeature';\r\nimport { CommandButton } from 'office-ui-fabric-react';\r\nimport useDebouncedCallback from 'use-debounce/lib/useDebouncedCallback';\r\nimport FilterListIcon from '@material-ui/icons/FilterList';\r\nimport { useTenant } from '../hooks/useTenant';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n padding: '30px',\r\n },\r\n searchContentWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n },\r\n searchWrapper: {\r\n padding: '0 10px',\r\n flex: 1,\r\n '& > div': {\r\n [theme.breakpoints.down('sm')]: {\r\n textAlign: 'center',\r\n },\r\n },\r\n '& .input': {\r\n height: '48px',\r\n width: '100%', // '336px',\r\n border: '1px solid ' + mainTheme.NeutralColors.BackgroundGrey1,\r\n borderRadius: '4px',\r\n boxShadow:\r\n '0 0 4px 0 ' + mainTheme.NeutralColors.BackgroundGrey2,\r\n margin: 0,\r\n },\r\n },\r\n checkboxWrapper: {\r\n padding: '0 10px',\r\n display: 'flex',\r\n flexFlow: 'column',\r\n justifyContent: 'space-around',\r\n },\r\n showingWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n justifyContent: 'center',\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n justifyContent: 'flex-start',\r\n },\r\n },\r\n menuWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n alignItems: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n justifyContent: 'center',\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n justifyContent: 'flex-end',\r\n },\r\n '& > div': {\r\n padding: '0 10px',\r\n },\r\n '& .crud-container': {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n '& > div': {\r\n padding: '0 10px',\r\n },\r\n [`& .${`button-fabric`}`]: {\r\n [`& .${`ms-Button-icon`}`]: {\r\n color: '#70D389',\r\n fontSize: '20px',\r\n },\r\n [`& .${`is-disabled`}`]: {\r\n [`& .${`ms-Button-icon`}`]: {\r\n color: '#ECF9EF',\r\n },\r\n },\r\n },\r\n },\r\n [`& .${`ms-Button`}`]: {\r\n '&:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n [`& .${`is-disabled`}`]: {\r\n backgroundColor: 'transparent',\r\n [`& g`]: {\r\n stroke: 'none',\r\n [`& path`]: {\r\n stroke: 'none',\r\n },\r\n },\r\n },\r\n [`& .${`custom-split-2`}`]: {\r\n '& .share i': {\r\n fontSize: '29px',\r\n display: 'none',\r\n },\r\n '& .share i:first-child': {\r\n display: 'block',\r\n },\r\n [`& .${`ms-Button`}`]: {\r\n minWidth: 0,\r\n padding: 0,\r\n backgroundColor: 'transparent',\r\n border: 0,\r\n // [`& .${`ms-Button-flexContainer`}`]: {\r\n // [`& ${`i`}`]: {\r\n // color: 'green',\r\n // },\r\n // },\r\n },\r\n '& [data-icon-name=\"ChevronDown\"]': {\r\n color: '#70D389',\r\n }\r\n },\r\n [`& .${`custom-split`}`]: {\r\n [`& .${`ms-Button`}`]: {\r\n minWidth: 0,\r\n padding: 0,\r\n backgroundColor: 'transparent',\r\n border: 0,\r\n },\r\n [`& .${`ms-Button-menuIcon`}`]: {\r\n display: 'none',\r\n },\r\n },\r\n },\r\n notes: {\r\n backgroundColor: 'rgba(243, 243, 158, 0.29)',\r\n padding: '10px',\r\n },\r\n downlaod: {\r\n cursor: 'pointer'\r\n },\r\n customButton: {\r\n padding: 0,\r\n '& i.ms-Icon': {\r\n fontSize: 20,\r\n margin: 0,\r\n color: 'rgb(112, 211, 137)',\r\n }\r\n },\r\n advancedFilter: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: '0 -10px',\r\n '& > div': {\r\n padding: '0 10px',\r\n }\r\n },\r\n advancedFilterButton: {\r\n color: '#70D389',\r\n },\r\n disabledShare: {\r\n '& [data-icon-name=\"share\"]': {\r\n color: '#EAF8ED',\r\n }\r\n },\r\n enabledShare: {\r\n '& [data-icon-name=\"share\"]': {\r\n color: '#70D389',\r\n }\r\n }\r\n })\r\n);\r\n\r\nexport enum ExportType {\r\n CSV = 0,\r\n Excel,\r\n}\r\n\r\nexport enum ViewDisplayStyle {\r\n List = 0,\r\n Card,\r\n}\r\n\r\ninterface ControlPanelProps {\r\n showViewLayouts: boolean;\r\n isLoading: boolean;\r\n initialIncludeCompleted: boolean;\r\n loadedMatterCount: number;\r\n totalMatterCount: number;\r\n viewDisplayStyle?: ViewDisplayStyle;\r\n views?: Array;\r\n isDisableSave?: boolean;\r\n onIncludeCompleted?: (includeCompleted: boolean) => void;\r\n onSearch?: (searchString: string) => void;\r\n searchFilter?: string;\r\n onViewSelected?: (configId: number) => void;\r\n onSaveCurrentView?: () => void;\r\n onToggleGrouping?: (show: boolean) => void;\r\n onToggleConfigs?: (show: boolean) => void;\r\n onToggleTools?: (show: boolean) => void;\r\n onRefreshData?: () => void;\r\n onExport?: (type: ExportType) => void;\r\n onPrint?: (style: ViewDisplayStyle) => void;\r\n onViewStyle?: (style: ViewDisplayStyle) => void;\r\n isShowViewPanel?: boolean;\r\n isInMemory: boolean /* If the grid data is in memory */;\r\n onMatterDownloadChanged?: (isDownload: boolean) => void /* Trigger to start matter download */;\r\n // tslint:disable-next-line: no-any\r\n entityType?: any;\r\n className?: string;\r\n isForceDownload: boolean;\r\n onAdvancedFilter?: () => void;\r\n hasFilter: boolean;\r\n isExportLoading: boolean;\r\n}\r\n\r\ninterface ControlPanelStates {\r\n search: {\r\n query?: string;\r\n includeCompleted?: boolean;\r\n };\r\n isActive: {\r\n group?: boolean;\r\n refresh?: boolean;\r\n share?: boolean;\r\n views?: boolean;\r\n filter?: boolean;\r\n tools?: boolean;\r\n };\r\n viewStyle: ViewDisplayStyle;\r\n isInMemory: boolean;\r\n isDownloading: boolean;\r\n isPaused: boolean;\r\n hasFilter: boolean;\r\n isInprotech: boolean;\r\n}\r\n\r\n// tslint:disable-next-line: no-anyW\r\nexport const MatterSummaryControlPanel: React.FunctionComponent = (\r\n props\r\n) => {\r\n\r\n const classes = useStyles();\r\n\r\n const tenant = useTenant();\r\n\r\n const [value, setValue] = useState({\r\n search: {\r\n query: props.searchFilter !== undefined ? props.searchFilter : '',\r\n includeCompleted:\r\n props.initialIncludeCompleted !== undefined\r\n ? props.initialIncludeCompleted\r\n : false,\r\n },\r\n viewStyle: props.viewDisplayStyle\r\n ? props.viewDisplayStyle\r\n : ViewDisplayStyle.List,\r\n isActive: {\r\n group: false,\r\n refresh: false,\r\n share: false,\r\n views: false,\r\n filter: false,\r\n tools: false,\r\n },\r\n isInMemory: false,\r\n isDownloading: false,\r\n isPaused: false,\r\n hasFilter: props.hasFilter,\r\n isInprotech: false,\r\n });\r\n\r\n const [delayedSearch] = useDebouncedCallback((filter: string) => onSearch(filter), 500);\r\n\r\n // tslint:disable-next-line: no-any\r\n let downloadMatterLink: any;\r\n var viewCount = 0;\r\n // tslint:disable-next-line: no-any\r\n var viewMenuItems: any = [];\r\n\r\n useMemo(() => {\r\n setValue((prevValue) => {\r\n return {\r\n ...prevValue,\r\n hasFilter: props.hasFilter\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.hasFilter]);\r\n \r\n // useEffect(() => {\r\n // setValue((prevState) => {\r\n // return {\r\n // ...prevState,\r\n // isExportLoading: props.isExportLoading\r\n // }\r\n // })\r\n // }, [props.isExportLoading]);\r\n\r\n // tslint:disable-next-line: no-console\r\n useEffect(() => {\r\n setValue({\r\n ...value,\r\n isActive: { views: props.isShowViewPanel },\r\n isInMemory: props.isInMemory,\r\n isDownloading: props.isInMemory ? false : value.isDownloading,\r\n isPaused: props.isInMemory ? false : value.isPaused,\r\n });\r\n // tslint:disable-next-line: align\r\n }, [\r\n props.isLoading,\r\n props.isInMemory,\r\n props.isShowViewPanel,\r\n downloadMatterLink,\r\n // viewCount,\r\n // viewMenuItems\r\n ]);\r\n\r\n useEffect(() => {\r\n if (props.isForceDownload && !props.isLoading) {\r\n handleMatterDownload(); \r\n }\r\n // tslint:disable-next-line: align\r\n }, [props.isForceDownload, props.isLoading]);\r\n\r\n const handleMatterDownload = () => {\r\n if (props.isLoading) {\r\n return;\r\n }\r\n\r\n if (value.isDownloading === false) {\r\n setValue({\r\n ...value,\r\n isPaused: false,\r\n isDownloading: true,\r\n });\r\n\r\n if (props.onMatterDownloadChanged) {\r\n props.onMatterDownloadChanged(true);\r\n }\r\n } else {\r\n setValue({\r\n ...value,\r\n isPaused: true,\r\n isDownloading: false,\r\n });\r\n\r\n if (props.onMatterDownloadChanged) {\r\n props.onMatterDownloadChanged(false);\r\n }\r\n }\r\n };\r\n\r\n const onSearch = (filter: string) => {\r\n setValue({\r\n ...value,\r\n search: {\r\n includeCompleted: value.search.includeCompleted,\r\n query: filter,\r\n },\r\n });\r\n\r\n if (props.onSearch) {\r\n props.onSearch(filter);\r\n }\r\n };\r\n\r\n const onIncludeCompleted = (\r\n event: FormEvent,\r\n state: CheckboxState\r\n ) => {\r\n setValue({\r\n ...value,\r\n search: {\r\n includeCompleted: state.checked,\r\n query: value.search.query,\r\n },\r\n isDownloading: false,\r\n isPaused: false,\r\n });\r\n\r\n if (props.onIncludeCompleted) {\r\n props.onIncludeCompleted(state.checked);\r\n }\r\n };\r\n\r\n const onRefreshData = () => {\r\n setValue({\r\n ...value,\r\n isDownloading: false,\r\n isPaused: false,\r\n });\r\n\r\n if (props.onRefreshData) {\r\n props.onRefreshData();\r\n }\r\n };\r\n\r\n // const onPrint = () => {\r\n // if (props.onPrint) {\r\n // props.onPrint(value.viewStyle);\r\n // }\r\n // };\r\n\r\n const onExport = (type: ExportType) => {\r\n if (props.onExport) {\r\n props.onExport(type);\r\n }\r\n };\r\n\r\n const onToggleConfigs = () => {\r\n if (props.onToggleConfigs) {\r\n props.onToggleConfigs(!value.isActive.views);\r\n }\r\n setValue({ ...value, isActive: { views: !value.isActive.views } });\r\n };\r\n\r\n const onSaveView = () => {\r\n if (props.onSaveCurrentView) {\r\n props.onSaveCurrentView();\r\n }\r\n };\r\n\r\n const onViewSelected = (viewKey: string, configId: number) => {\r\n if (props.onViewSelected) {\r\n props.onViewSelected(configId);\r\n }\r\n };\r\n\r\n const onToggleToolPanel = () => {\r\n if (props.onToggleTools) {\r\n props.onToggleTools(!value.isActive.tools);\r\n }\r\n setValue({ ...value, isActive: { tools: !value.isActive.tools } });\r\n };\r\n\r\n const onToggleRowGrouping = () => {\r\n // If all the records are not downloaded, we do not toggle. But we don't want the control to look disabled.\r\n // So we are not setting the state.\r\n\r\n if (value.isInMemory) {\r\n if (props.onToggleGrouping) {\r\n props.onToggleGrouping(!value.isActive.group);\r\n }\r\n setValue({ ...value, isActive: { group: !value.isActive.group } });\r\n }\r\n };\r\n\r\n const onViewStyle = (style: ViewDisplayStyle) => {\r\n setValue({ ...value, viewStyle: style });\r\n if (props.onViewStyle) {\r\n props.onViewStyle(style);\r\n }\r\n };\r\n\r\n if (props.views) {\r\n viewCount = props.views.length;\r\n }\r\n\r\n if (props.views) {\r\n props.views.forEach((config: SummaryViewConfigObj) => {\r\n viewMenuItems.push({\r\n key: config.configId,\r\n name: config.name,\r\n onClick: () => {\r\n onViewSelected(config.name, config.configId);\r\n },\r\n });\r\n });\r\n }\r\n \r\n viewMenuItems.push({\r\n key: 'saveLayout',\r\n name: 'Save Current Layout',\r\n onClick: () => {\r\n onSaveView();\r\n },\r\n disabled: viewCount === 0 ? true : props.isDisableSave,\r\n });\r\n\r\n if (\r\n value.isInMemory === false &&\r\n value.isDownloading === false &&\r\n value.isPaused === false\r\n ) {\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n downloadMatterLink = Click Here;\r\n } else if (\r\n value.isInMemory === false &&\r\n value.isDownloading &&\r\n value.isPaused === false\r\n ) {\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n downloadMatterLink = (Pause Download);\r\n } else if (\r\n value.isInMemory === false &&\r\n value.isDownloading === false &&\r\n value.isPaused === true\r\n ) {\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n downloadMatterLink = (Resume Download);\r\n } else if (value.isInMemory) {\r\n // Setting it back to be used again. When Include complete is clicked\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n downloadMatterLink = Click Here;\r\n }\r\n\r\n if (!tenant.loading && !tenant.error && tenant.data) {\r\n value.isInprotech = tenant.data!.tenant.sourceSystem.toLocaleLowerCase() === 'inprotech';\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {props.entityType \r\n ? (\r\n \r\n )\r\n : (\r\n \r\n )\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterExport) ? (\r\n \r\n {\r\n // tslint:disable-next-line: no-console\r\n onExport(ExportType.CSV);\r\n },\r\n },\r\n {\r\n key: 'excel',\r\n name: 'Excel Export',\r\n onClick: () => {\r\n // tslint:disable-next-line: no-console\r\n onExport(ExportType.Excel);\r\n },\r\n },\r\n ],\r\n }}\r\n />\r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {props.showViewLayouts ? (\r\n <>\r\n \r\n \r\n onViewStyle(ViewDisplayStyle.List)\r\n }\r\n />\r\n \r\n \r\n \r\n onViewStyle(ViewDisplayStyle.Card)\r\n }\r\n />\r\n \r\n \r\n ) : undefined}\r\n\r\n \r\n \r\n \r\n {UserFeature.HasAccess(UserFeatureEnum.hasMatterSummaryViewManagement) \r\n ?\r\n \r\n \r\n \r\n :\r\n \r\n \r\n \r\n }\r\n
\r\n
\r\n {props.isLoading === false && props.loadedMatterCount > 0 ? (\r\n value.isInMemory === false &&\r\n (value.search.query === '' ||\r\n value.search.query === undefined) ? (\r\n \r\n

\r\n The summary returned a large number of matters.\r\n Narrow the filter or {downloadMatterLink} to\r\n download remaining matter. Note that grouping,\r\n sorting and filtering won’t be activated until\r\n all matter are downloaded\r\n

\r\n
\r\n ) : null\r\n ) : null}\r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState, useMemo } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, GetTagProps, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, Chip } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport gql from 'graphql-tag';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { useQuery } from 'react-apollo';\r\n\r\n// const useStyles = makeStyles((theme: Theme) =>\r\n// createStyles({\r\n// removedAvatar: {\r\n// maxWidth: '15px',\r\n// maxHeight: '15px',\r\n// },\r\n// }),\r\n// );\r\n\r\ninterface MatterStatusSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: MatterStatusAutoCompleteItem | MatterStatusAutoCompleteItem[] | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: MatterStatusAutoCompleteItem | MatterStatusAutoCompleteItem[], name?: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties;\r\n disablePortal?: boolean;\r\n variant?: 'standard' | 'filled' | 'outlined';\r\n size?: 'small' | 'medium';\r\n onBlur?: React.FocusEventHandler;\r\n multiple?: boolean;\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface MatterStatusAutoCompleteItem extends IAutoCompleteItem, MatterStatus {}\r\n\r\ninterface MatterStatusSelectorState {\r\n data: MatterStatusAutoCompleteItem[];\r\n}\r\n\r\nexport const MatterStatusSelector: React.FC = (props) => {\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n data: [],\r\n });\r\n\r\n const matterTypeQuery = useQuery(MatterStatusQuery, {\r\n variables: {\r\n isApplyMatterAccess: props.isApplyMatterAccess\r\n },\r\n fetchPolicy: 'cache-first'\r\n });\r\n\r\n useMemo(() => {\r\n if (!matterTypeQuery.loading && !matterTypeQuery.error && matterTypeQuery.data && matterTypeQuery.data.lookup && matterTypeQuery.data.lookup.matterStatus) {\r\n setState((prevState) => {\r\n const { matterStatus } = matterTypeQuery.data!.lookup;\r\n\r\n const items: MatterStatusAutoCompleteItem[] = matterStatus.map((mStatus: MatterStatus) => {\r\n return {\r\n ...mStatus,\r\n label: mStatus.description,\r\n value: mStatus.description,\r\n };\r\n });\r\n return {\r\n ...prevState,\r\n data: items,\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [matterTypeQuery.loading, matterTypeQuery.data, matterTypeQuery.error]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const onRenderTags = (value: MatterStatusAutoCompleteItem[], getTagProps: GetTagProps): React.ReactNode => {\r\n let renderTagsValue = value.map((option: MatterStatusAutoCompleteItem, index: number) => {\r\n let label = option.label;\r\n if (option.label.length > 20) {\r\n label = `${option.label.substring(0, 20)}...`;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return renderTagsValue;\r\n };\r\n\r\n if (props.multiple) {\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n multiple={true}\r\n renderTags={onRenderTags}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n option.label}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n onBlur={props.onBlur}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport interface MatterStatusParams {\r\n isApplyMatterAccess?: boolean;\r\n}\r\n\r\nexport interface MatterStatusData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n matterStatus: MatterStatus[];\r\n}\r\n\r\nexport interface MatterStatus {\r\n id: number;\r\n description: string;\r\n}\r\n\r\nconst MatterStatusQuery = gql`\r\n query MatterStatus($isApplyMatterAccess: Boolean) {\r\n lookup {\r\n matterStatus(isApplyMatterAccess: $isApplyMatterAccess) {\r\n id\r\n description\r\n }\r\n }\r\n }\r\n`;\r\n","import { ColDef, Column, ExcelStyle, IAggFunc, ValueGetterParams } from '@ag-grid-enterprise/all-modules';\r\nimport { MatterTerminology } from '../MatterTerminology';\r\nimport { DataType } from '../components/DataDisplay/ValueFormatter';\r\nimport { DateRenderer, \r\n BoolRenderer, DateTimeRenderer, ImageRenderer, PercentageRenderer, NumberRenderer, CurrencyRendererWithoutDecimal, CurrencyRenderer } from './MatterSummaryCellRenderer';\r\nimport { MatterTaskAction } from './cellRenderer/MatterTaskAction';\r\n// import moment from 'moment';\r\nimport { getValueGetter } from '../components/Grid/ColumnConfig';\r\nimport moment from 'moment';\r\nimport { DueDateRenderer } from '../enquirySummary/cellRenderer/DueDateRenderer';\r\n// import _ from 'lodash';\r\n// import _ from 'lodash';\r\n\r\nexport interface ColumnProperty extends ColDef {\r\n canSearch?: boolean;\r\n cardDisplay?: boolean; // Do not display on summary card or is already displayed\r\n format: number;\r\n isHideCustom?: boolean; // To display / hide column if it is not an admin user\r\n}\r\n\r\nexport interface SummaryViewColumnConfiguration extends ColDef {\r\n field: string;\r\n headerName: string;\r\n width: number;\r\n dataType: number;\r\n show: boolean;\r\n isLocked: boolean;\r\n sort: string;\r\n aggFunc?: string | IAggFunc;\r\n enableValue?: boolean;\r\n valueGetter?: string;\r\n // tslint:disable-next-line: no-any\r\n cellClass?: any;\r\n // tslint:disable-next-line: no-any\r\n checkboxSelection?: any;\r\n // tslint:disable-next-line: no-any\r\n headerCheckboxSelection?: any;\r\n}\r\n\r\nvar menuTabs = ['filterMenuTab', 'generalMenuTab', 'columnsMenuTab'];\r\nvar nonFilterMenuTabs = ['generalMenuTab', 'columnsMenuTab'];\r\n\r\nexport enum cellClassEnum {\r\n numberType = 'numberType',\r\n currencyType = 'currencyType',\r\n stringType = 'stringType',\r\n dateTimeType = 'dateTimeType',\r\n dateType = 'dateType',\r\n monthYearType = 'monthYearType',\r\n booleanType = 'booleanType',\r\n actionType = 'actionType',\r\n imageType = 'imageType',\r\n currencyWithoutDecimalsType = 'currencyWithoutDecimalsType',\r\n percentageType = 'percentageType',\r\n linkType = 'linkType',\r\n checkboxType = 'checkboxType',\r\n editorViewType = 'editorViewType',\r\n durationType = 'durationType',\r\n chipsType = 'chipsType',\r\n contextMenuStaffType = 'contextMenuStaffType',\r\n dueDateType = 'dueDateType',\r\n timeType = 'timeType',\r\n ratingType = 'ratingType',\r\n dateMonthYear = 'dateMonthYear'\r\n}\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const defaultExcelStyles: ExcelStyle[] | any[] = [\r\n {\r\n id: cellClassEnum.stringType,\r\n dataType: 'string',\r\n alignment: {\r\n horizontal: 'Left', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.dateType,\r\n dataType: 'dateTime',\r\n numberFormat: { format: 'yyyy-mm-dd;;;' },\r\n alignment: {\r\n horizontal: 'Center', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.dateTimeType,\r\n dataType: 'dateTime',\r\n numberFormat: { format: 'yyyy-mm-dd hh:mm:ss;;;' },\r\n alignment: {\r\n horizontal: 'Center', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.currencyType,\r\n dataType: 'currency',\r\n alignment: {\r\n horizontal: 'Right', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.currencyWithoutDecimalsType,\r\n dataType: 'currency',\r\n alignment: {\r\n horizontal: 'Right', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.percentageType,\r\n dataType: 'percentage',\r\n alignment: {\r\n horizontal: 'Right', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.booleanType,\r\n dataType: 'string',\r\n alignment: {\r\n horizontal: 'Center', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.numberType,\r\n dataType: 'number',\r\n alignment: {\r\n horizontal: 'Right', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.durationType,\r\n dataType: 'string',\r\n alignment: {\r\n horizontal: 'Left', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.dueDateType,\r\n dataType: 'string',\r\n alignment: {\r\n horizontal: 'Center', vertical: 'Center'\r\n }\r\n },\r\n {\r\n id: cellClassEnum.checkboxType,\r\n dataType: 'string',\r\n alignment: {\r\n horizontal: 'Center', vertical: 'Center'\r\n }\r\n },\r\n];\r\n\r\nexport function filterParamsOptions() {\r\n return {\r\n filterOptions: ['equals', 'notEqual', 'lessThan', 'lessThanOrEqual', 'greaterThan', 'greaterThanOrEqual', 'inRange'],\r\n // use inRangeInclusive: true for the range filter to include the selected \r\n // from and to dates. Setting it false would fetch only the inbetween dates\r\n inRangeInclusive: true, \r\n // tslint:disable-next-line: no-any\r\n comparator: (filterLocalDateAtMidnight: any, cellValue: any) => {\r\n var dateAsString = moment(cellValue).format('DD/MM/YYYY');\r\n var dateParts = dateAsString.split('/');\r\n var cellDate = new Date(Number(dateParts[2]), Number(dateParts[1]) - 1, Number(dateParts[0]));\r\n\r\n if (filterLocalDateAtMidnight.getTime() === cellDate.getTime()) {\r\n return 0;\r\n } else if (cellDate < filterLocalDateAtMidnight) {\r\n return -1;\r\n } else if (cellDate > filterLocalDateAtMidnight) {\r\n return 1;\r\n } else {\r\n return -1;\r\n } \r\n }\r\n };\r\n}\r\n\r\n// converts our json view configuration to the coulumn layout used by ag-grid\r\nexport function ConvertViewConfigToLayout(layoutConfiguration: string, isInMemory: boolean) {\r\n return( ConvertColumnFromConfig(JSON.parse(layoutConfiguration), isInMemory));\r\n}\r\n\r\n// converts our the coulumn layout used by ag-grid to our view configuration\r\nexport function ConvertViewLayoutToConfig(viewLayout: Column[]): string {\r\n var columnConfig = ConvertColumnsToConfig(viewLayout);\r\n return JSON.stringify(columnConfig);\r\n}\r\n\r\nfunction ConvertColumnsToConfig(columns: Column[]): SummaryViewColumnConfiguration[] {\r\n var result = new Array();\r\n columns.forEach(column => {\r\n var colDef = column.getColDef();\r\n // tslint:disable-next-line: no-any\r\n let columnCfg: any;\r\n\r\n if (colDef.checkboxSelection === true) {\r\n columnCfg = {\r\n // colId: colDef.field,\r\n field: colDef.field ? colDef.field : '',\r\n headerName: colDef.headerName ? colDef.headerName : '',\r\n width: column.getActualWidth(),\r\n dataType: getDataTypeForColumn(colDef),\r\n show: column.isVisible() || column.isRowGroupActive(),\r\n isLocked: colDef.field === 'FileNumber',\r\n sort: column.getSort(),\r\n aggFunc: colDef.aggFunc,\r\n enableValue: colDef.enableValue,\r\n valueGetter: colDef.field,\r\n cellClass: colDef.cellClass,\r\n checkboxSelection: colDef.checkboxSelection ? colDef.checkboxSelection : undefined,\r\n headerCheckboxSelection: colDef.headerCheckboxSelection ? colDef.headerCheckboxSelection : undefined,\r\n };\r\n } else {\r\n columnCfg = {\r\n // colId: colDef.field,\r\n field: colDef.field ? colDef.field : '',\r\n headerName: colDef.headerName ? colDef.headerName : '',\r\n width: column.getActualWidth(),\r\n dataType: getDataTypeForColumn(colDef),\r\n show: column.isVisible() || column.isRowGroupActive(),\r\n isLocked: colDef.field === 'FileNumber',\r\n sort: column.getSort(),\r\n aggFunc: colDef.aggFunc,\r\n enableValue: colDef.enableValue,\r\n valueGetter: colDef.field,\r\n cellClass: colDef.cellClass\r\n };\r\n }\r\n \r\n // if (colDef.field !== 'isSelect') {\r\n result.push(columnCfg);\r\n // }\r\n });\r\n return result;\r\n}\r\n\r\nfunction ConvertColumnFromConfig(columncfgs: Array, isInMemory: boolean): Array {\r\n var result = new Array();\r\n\r\n // if (_.findIndex(result, ['field', 'isSelect']) === -1) {\r\n // result.push(\r\n // { \r\n // checkboxSelection: true,\r\n // headerCheckboxSelection: true,\r\n // // headerCheckboxSelectionFilteredOnly: true, \r\n // headerName: '',\r\n // field: 'isSelect',\r\n // width: 50,\r\n // cellClass: cellClassEnum.checkboxType,\r\n // sortable: false\r\n // }\r\n // );\r\n // }\r\n\r\n columncfgs.forEach(columncfg => {\r\n var filter = getFilterForDataType(columncfg.dataType);\r\n \r\n let showMenuTab = (columncfg.dataType !== DataType.ContextMenu && columncfg.dataType !== DataType.Checkbox) && isInMemory;\r\n let isDateFilter = columncfg.dataType === DataType.Date || columncfg.dataType === DataType.DateTime;\r\n // let isSortable = (columncfg.dataType !== DataType.ContextMenu && columncfg.dataType !== DataType.Checkbox);\r\n\r\n // tslint:disable-next-line: no-any\r\n let config: any;\r\n\r\n if (columncfg.checkboxSelection === true) {\r\n config = {\r\n // colId: columncfg.field,\r\n field: columncfg.field,\r\n headerName: columncfg.headerName,\r\n width: columncfg.width,\r\n format: columncfg.dataType,\r\n filter: filter ? filter : '',\r\n filterParams: isDateFilter ? filterParamsOptions() : null,\r\n hide: !columncfg.show,\r\n pinned: columncfg.isLocked ? 'left' : 'none',\r\n menuTabs: showMenuTab ? menuTabs : nonFilterMenuTabs,\r\n enableRowGroup: false,\r\n sort: '',\r\n sortable: false,\r\n tooltipField: columncfg.dataType === DataType.String ? columncfg.field : undefined,\r\n aggFunc: undefined,\r\n enableValue: columncfg.enableValue,\r\n valueGetter: getValueGetter(columncfg.valueGetter),\r\n cellClass: columncfg.cellClass,\r\n checkboxSelection: columncfg.checkboxSelection ? columncfg.checkboxSelection : undefined,\r\n headerCheckboxSelection: columncfg.headerCheckboxSelection ? columncfg.headerCheckboxSelection : undefined\r\n };\r\n } else {\r\n config = {\r\n // colId: columncfg.field,\r\n field: columncfg.field,\r\n headerName: columncfg.headerName,\r\n width: columncfg.width,\r\n format: columncfg.dataType,\r\n filter: filter ? filter : '',\r\n filterParams: isDateFilter ? filterParamsOptions() : null,\r\n hide: !columncfg.show,\r\n pinned: columncfg.isLocked ? 'left' : 'none',\r\n menuTabs: showMenuTab ? menuTabs : nonFilterMenuTabs,\r\n enableRowGroup: true,\r\n sort: columncfg.sort,\r\n tooltipField: columncfg.dataType === DataType.String ? columncfg.field : undefined,\r\n aggFunc: columncfg.aggFunc,\r\n enableValue: columncfg.enableValue,\r\n valueGetter: getValueGetter(columncfg.valueGetter),\r\n cellClass: columncfg.cellClass\r\n };\r\n } \r\n \r\n // if (columncfg.field !== 'isSelect') {\r\n applyCellRendererToColumn(config, columncfg.dataType);\r\n // }\r\n\r\n // result.push(config);\r\n // if (config.field !== 'isSelect') {\r\n result.push(config);\r\n // }\r\n });\r\n return result;\r\n}\r\n\r\nfunction getDataTypeForColumn(column: ColDef): number {\r\n if (column.cellRendererFramework === DateTimeRenderer) {\r\n return DataType.DateTime;\r\n }\r\n if (column.cellRendererFramework === DateRenderer) {\r\n return DataType.Date;\r\n }\r\n if (column.cellRendererFramework === NumberRenderer) { // filter === 'number') {\r\n return DataType.Number;\r\n }\r\n if (column.cellRendererFramework === CurrencyRenderer) {\r\n return DataType.Currency;\r\n }\r\n if (column.cellRendererFramework === CurrencyRendererWithoutDecimal) {\r\n return DataType.CurrencyWithoutDecimals;\r\n }\r\n if (column.cellRendererFramework === BoolRenderer) {\r\n return DataType.Boolean;\r\n }\r\n if (column.cellRendererFramework === ImageRenderer) {\r\n return DataType.Image;\r\n }\r\n if (column.cellRendererFramework === PercentageRenderer) {\r\n return DataType.Percentage;\r\n }\r\n if (column.cellRendererFramework === MatterTaskAction) {\r\n return DataType.ContextMenu;\r\n }\r\n if (column.cellRendererFramework === DueDateRenderer) {\r\n return DataType.DueDate;\r\n }\r\n // if (column.filter === 'currency') {\r\n // return DataType.Currency;\r\n // }\r\n if (column.filter === 'date') {\r\n return DataType.Date;\r\n }\r\n if (column.filter === 'dateTime') {\r\n return DataType.DateTime;\r\n }\r\n if (column.filter === 'image') {\r\n return DataType.Image;\r\n }\r\n // if (column.filter === 'boolean') {\r\n // return DataType.Boolean;\r\n // }\r\n if (column.filter === 'menu') {\r\n return DataType.ContextMenu;\r\n }\r\n if (column.filter === 'percentage') {\r\n return DataType.Percentage;\r\n }\r\n if (column.filter === 'longTextRenderer') {\r\n return DataType.LongText;\r\n }\r\n if (column.filter === 'dueDateRenderer') {\r\n return DataType.DueDate;\r\n }\r\n if (column.filter === 'checkBox') {\r\n return DataType.Checkbox;\r\n }\r\n if (!column.cellRenderer) {\r\n return DataType.String;\r\n }\r\n return DataType.Boolean;\r\n}\r\n\r\nfunction getFilterForDataType(dataType: number): string | void {\r\n switch (dataType) {\r\n case DataType.Date:\r\n return 'agDateColumnFilter';\r\n case DataType.DateTime:\r\n return 'agDateColumnFilter';\r\n case DataType.Percentage:\r\n return 'percentage';\r\n case DataType.Number:\r\n return 'number';\r\n case DataType.Currency:\r\n return 'agNumberColumnFilter';\r\n case DataType.CurrencyWithoutDecimals:\r\n return 'agNumberColumnFilter';\r\n case DataType.Image:\r\n return 'image'; \r\n case DataType.Boolean:\r\n return 'boolean';\r\n case DataType.LongText:\r\n return 'text';\r\n case DataType.ContextMenu:\r\n return 'menu';\r\n case DataType.DueDate:\r\n return 'dueDateRenderer';\r\n case DataType.Checkbox:\r\n return 'checkBox';\r\n default:\r\n return 'text';\r\n }\r\n}\r\n\r\n// var filterParams = {\r\n// // tslint:disable-next-line: no-any\r\n// comparator: (filterLocalDateAtMidnight: any, cellValue: any) => {\r\n// var dateAsString = cellValue;\r\n// if (dateAsString == null) {\r\n// return -1;\r\n// }\r\n// const diff = moment(cellValue).diff(moment(filterLocalDateAtMidnight), 'days');\r\n// if (diff === 0) {\r\n// return 0;\r\n// }\r\n// if (diff < 0) {\r\n// return -1;\r\n// }\r\n// if (diff > 0) {\r\n// return 1;\r\n// } else {\r\n// return -1;\r\n// }\r\n// // if (moment(filterLocalDateAtMidnight).toDate().getDate() === moment(cellValue).format('DD-MMM-YYYY')) {\r\n// // return 0;\r\n// // }\r\n// // if (moment(cellValue).format('DD-MMM-YYYY') < moment(filterLocalDateAtMidnight).format('DD-MMM-YYYY')) {\r\n// // return -1;\r\n// // }\r\n// // if (moment(cellValue).format('DD-MMM-YYYY') > moment(filterLocalDateAtMidnight).format('DD-MMM-YYYY')) {\r\n// // return 1;\r\n// // } else {\r\n// // return -1;\r\n// // }\r\n// },\r\n// browserDatePicker: true,\r\n// };\r\n\r\nexport function applyCellRendererToColumn(column: ColDef, dataType: number) {\r\n switch (dataType) {\r\n case DataType.DateTime:\r\n column.cellRendererFramework = DateTimeRenderer;\r\n break;\r\n case DataType.Date:\r\n column.cellRendererFramework = DateRenderer;\r\n break;\r\n case DataType.Number:\r\n column.cellRendererFramework = NumberRenderer;\r\n break;\r\n case DataType.Currency:\r\n column.cellRendererFramework = CurrencyRenderer;\r\n break;\r\n case DataType.CurrencyWithoutDecimals:\r\n column.cellRendererFramework = CurrencyRendererWithoutDecimal;\r\n break;\r\n case DataType.Boolean:\r\n column.cellRendererFramework = BoolRenderer;\r\n break;\r\n case DataType.Image:\r\n column.cellRendererFramework = ImageRenderer;\r\n break;\r\n case DataType.Percentage:\r\n column.cellRendererFramework = PercentageRenderer;\r\n break;\r\n case DataType.DueDate:\r\n column.cellRendererFramework = DueDateRenderer;\r\n break;\r\n // case DataType.Link:\r\n // column.cellRendererFramework = ReferrerCellRenderer;\r\n // break;\r\n case DataType.ContextMenu:\r\n column.cellRendererFramework = MatterTaskAction;\r\n break;\r\n case DataType.Checkbox: \r\n column.cellRendererFramework = undefined;\r\n break;\r\n case DataType.String:\r\n default:\r\n return;\r\n }\r\n}\r\n\r\nexport function DefaultColumnConfig(): Array {\r\n var result = new Array();\r\n MatterSummaryColumns.forEach(column => {\r\n var filter = getFilterForDataType(column.format);\r\n\r\n var isLocked = column.field === 'FileNumber';\r\n let showMenuTab = column.format !== DataType.ContextMenu && column.format !== DataType.Checkbox;\r\n\r\n var colDef = {\r\n // colId: column.field,\r\n field: column.field ? column.field : '',\r\n headerName: column.headerName ? column.headerName : '',\r\n dataType: column.format,\r\n width: column.width ? column.width : 50,\r\n format: column.format,\r\n filter: filter ? filter : '',\r\n hide: column.hide,\r\n show: !column.hide,\r\n pinned: isLocked ? 'left' : 'none',\r\n isLocked: isLocked,\r\n menuTabs: showMenuTab ? menuTabs : nonFilterMenuTabs,\r\n enableRowGroup: true,\r\n sort: column.sort ? column.sort : '',\r\n tooltipField: column.format === DataType.String ? column.field : undefined,\r\n aggFunc: column.aggFunc,\r\n enableValue: column.enableValue,\r\n valueGetter: getValueGetter(column.field),\r\n cellClass: column.cellClass,\r\n checkboxSelection: column.checkboxSelection ? column.checkboxSelection : undefined,\r\n headerCheckboxSelection: column.headerCheckboxSelection ? column.headerCheckboxSelection : undefined\r\n // rowHeight: column.format === DataType.Image ? 50 : 40 ,\r\n };\r\n\r\n // if (column.field !== 'isSelect') {\r\n applyCellRendererToColumn(colDef, column.format);\r\n // }\r\n \r\n result.push(colDef);\r\n });\r\n return result; \r\n}\r\n\r\nexport function DefaultColumnConfigNew(): Array {\r\n var result = new Array();\r\n MatterSummaryColumnsNew.forEach(column => {\r\n var filter = getFilterForDataType(column.format);\r\n\r\n var isLocked = column.field === 'FileNumber';\r\n let showMenuTab = column.format !== DataType.ContextMenu && column.format !== DataType.Checkbox;\r\n\r\n var colDef = {\r\n // colId: column.field,\r\n field: column.field ? column.field : '',\r\n headerName: column.headerName ? column.headerName : '',\r\n dataType: column.format,\r\n width: column.width ? column.width : 50,\r\n format: column.format,\r\n filter: filter ? filter : '',\r\n hide: column.hide,\r\n show: !column.hide,\r\n pinned: isLocked ? 'left' : 'none',\r\n isLocked: isLocked,\r\n menuTabs: showMenuTab ? menuTabs : nonFilterMenuTabs,\r\n enableRowGroup: true,\r\n sort: column.sort ? column.sort : '',\r\n tooltipField: column.format === DataType.String ? column.field : undefined,\r\n aggFunc: column.aggFunc,\r\n enableValue: column.enableValue,\r\n valueGetter: getValueGetter(column.field),\r\n cellClass: column.cellClass,\r\n checkboxSelection: column.checkboxSelection ? column.checkboxSelection : undefined,\r\n headerCheckboxSelection: column.headerCheckboxSelection ? column.headerCheckboxSelection : undefined\r\n // rowHeight: column.format === DataType.Image ? 50 : 40 ,\r\n };\r\n\r\n // if (column.field !== 'isSelect') {\r\n applyCellRendererToColumn(colDef, column.format);\r\n // }\r\n\r\n result.push(colDef);\r\n });\r\n return result; \r\n}\r\n\r\nexport const MatterSummaryColumns: Array = [\r\n { \r\n field: 'isSelect',\r\n checkboxSelection: true,\r\n headerCheckboxSelection: true,\r\n // headerCheckboxSelectionFilteredOnly: true, \r\n headerName: '',\r\n width: 50,\r\n cellClass: cellClassEnum.checkboxType,\r\n format: DataType.Checkbox,\r\n sortable: false\r\n },\r\n {\r\n field: 'id',\r\n headerName: MatterTerminology.MatterId,\r\n format: DataType.Default,\r\n hide: true,\r\n filter: 'number',\r\n menuTabs: menuTabs,\r\n canSearch: false,\r\n cardDisplay: false,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'task',\r\n headerName: 'Task',\r\n format: DataType.ContextMenu,\r\n width: 80,\r\n hide: false,\r\n menuTabs: menuTabs,\r\n canSearch: false,\r\n cardDisplay: false,\r\n cellRendererFramework: MatterTaskAction,\r\n cellClass: cellClassEnum.actionType,\r\n },\r\n {\r\n field: 'imageLocation',\r\n headerName: MatterTerminology.Logo,\r\n format: DataType.Image,\r\n cardDisplay: false,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n width: 110,\r\n hide: false,\r\n pinned: 'left',\r\n cellClass: cellClassEnum.imageType,\r\n },\r\n {\r\n field: 'fileNumber',\r\n headerName: MatterTerminology.FileNumber,\r\n format: DataType.String,\r\n cardDisplay: false,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n pinned: 'left',\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'matterCategory',\r\n headerName: MatterTerminology.MatterCategory,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'matterType',\r\n headerName: MatterTerminology.Type,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'stage',\r\n headerName: MatterTerminology.Stage,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'client',\r\n headerName: MatterTerminology.Client,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'title',\r\n headerName: MatterTerminology.Title,\r\n minWidth: 290,\r\n cardDisplay: false,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'otherSide',\r\n headerName: MatterTerminology.OtherSide,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'latestComment',\r\n headerName: MatterTerminology.LastMessage,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n hide: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'last3Comments',\r\n headerName: MatterTerminology.Last3Messages,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n hide: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'status',\r\n headerName: MatterTerminology.Status,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n cardDisplay: false,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'completionOrSettlmentDate',\r\n headerName: MatterTerminology.SettlementDate,\r\n format: DataType.Date,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'instructionDate',\r\n headerName: MatterTerminology.InstructionDate,\r\n format: DataType.Date,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'nextAction',\r\n headerName: MatterTerminology.NextAction,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'nextActionDate',\r\n headerName: MatterTerminology.NextActionDate,\r\n format: DataType.DueDate,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellRendererFramework: DueDateRenderer,\r\n cellClass: cellClassEnum.dueDateType,\r\n },\r\n {\r\n field: 'nextDueDescription',\r\n headerName: MatterTerminology.NextActionItem,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'lastUpdate',\r\n headerName: MatterTerminology.LastUpdate,\r\n sort: 'desc',\r\n format: DataType.DateTime,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'dateTime',\r\n cellClass: cellClassEnum.dateTimeType,\r\n },\r\n {\r\n field: 'nextRenewalDate',\r\n headerName: MatterTerminology.NextRenewalDate,\r\n format: DataType.Date,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'estimatedCosts',\r\n headerName: MatterTerminology.EstimatedCosts,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'unbilled',\r\n headerName: MatterTerminology.UnbilledShort,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'billed',\r\n headerName: MatterTerminology.BilledInxTax,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'debtors',\r\n headerName: MatterTerminology.Debtors,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'state',\r\n headerName: MatterTerminology.State,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'country',\r\n headerName: MatterTerminology.Country,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'family',\r\n headerName: MatterTerminology.BrandFamily,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'propertyLabel',\r\n headerName: MatterTerminology.Property,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'owner',\r\n headerName: MatterTerminology.Owner,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'property',\r\n headerName: MatterTerminology.PropertyType,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'clientReference',\r\n headerName: MatterTerminology.ClientReference,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'fIRBStatus',\r\n headerName: MatterTerminology.FIRB,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n },\r\n {\r\n field: 'inProgress',\r\n headerName: MatterTerminology.InProgress,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n },\r\n {\r\n field: 'isComplete',\r\n headerName: MatterTerminology.Completed,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n // cellClass: 'sampleSample'\r\n },\r\n {\r\n field: 'isAwaitingInstructions',\r\n headerName: MatterTerminology.IsAwaitingInstructions,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n },\r\n {\r\n field: 'injuriesDescription',\r\n headerName: MatterTerminology.Injury,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n }\r\n];\r\n\r\n// Material View's Matter Summary Default columns.\r\nexport const MatterSummaryColumnsNew: Array = [\r\n { \r\n field: 'isSelect',\r\n checkboxSelection: true,\r\n headerCheckboxSelection: true,\r\n // headerCheckboxSelectionFilteredOnly: true, \r\n headerName: '',\r\n width: 50,\r\n cellClass: cellClassEnum.checkboxType,\r\n format: DataType.Checkbox,\r\n sortable: false\r\n },\r\n {\r\n field: 'id',\r\n headerName: MatterTerminology.MatterId,\r\n format: DataType.Number,\r\n hide: true,\r\n filter: 'number',\r\n menuTabs: menuTabs,\r\n canSearch: false,\r\n cardDisplay: false,\r\n cellClass: cellClassEnum.numberType,\r\n }, \r\n {\r\n field: 'task',\r\n headerName: 'Task',\r\n format: DataType.ContextMenu,\r\n hide: false,\r\n menuTabs: menuTabs,\r\n canSearch: false,\r\n cardDisplay: false,\r\n cellRendererFramework: MatterTaskAction,\r\n cellClass: cellClassEnum.actionType,\r\n },\r\n {\r\n field: 'guidId',\r\n headerName: MatterTerminology.GuidId,\r\n format: DataType.String,\r\n hide: true,\r\n menuTabs: menuTabs,\r\n canSearch: false,\r\n cardDisplay: false,\r\n cellClass: cellClassEnum.stringType,\r\n }, \r\n {\r\n field: 'imageLocation',\r\n headerName: MatterTerminology.Logo,\r\n format: DataType.Image,\r\n cardDisplay: false,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n width: 110,\r\n hide: false,\r\n pinned: 'left',\r\n cellClass: cellClassEnum.imageType,\r\n },\r\n {\r\n field: 'fileNumber',\r\n headerName: MatterTerminology.FileNumber,\r\n format: DataType.String,\r\n cardDisplay: false,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n pinned: 'left',\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'status',\r\n headerName: MatterTerminology.Status,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n cardDisplay: false,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'title',\r\n headerName: MatterTerminology.Title,\r\n minWidth: 290,\r\n cardDisplay: false,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'longTitle',\r\n headerName: MatterTerminology.LongTitle,\r\n minWidth: 290,\r\n cardDisplay: false,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'countryId', \r\n headerName: MatterTerminology.CountryId,\r\n hide: true,\r\n format: DataType.Number,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'state',\r\n headerName: MatterTerminology.State,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'categoryId',\r\n headerName: MatterTerminology.CategoryId,\r\n hide: true,\r\n format: DataType.Number,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'category',\r\n headerName: MatterTerminology.Category,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'typeId',\r\n headerName: MatterTerminology.TypeId,\r\n hide: true,\r\n format: DataType.Number,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'type',\r\n headerName: MatterTerminology.Type,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'typeClassification',\r\n headerName: MatterTerminology.TypeClassification,\r\n hide: true,\r\n format: DataType.Number, \r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'typeState',\r\n headerName: MatterTerminology.TypeState,\r\n format: DataType.String, \r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'subTypeID',\r\n headerName: MatterTerminology.SubTypeID,\r\n hide: true,\r\n format: DataType.Number,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'subType',\r\n headerName: MatterTerminology.SubType,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'stage',\r\n headerName: MatterTerminology.Stage,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'fIRB',\r\n headerName: MatterTerminology.FIRB,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n },\r\n {\r\n field: 'family',\r\n headerName: MatterTerminology.BrandFamily,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'property',\r\n headerName: MatterTerminology.Property,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'propertyLabel',\r\n headerName: MatterTerminology.PropertyLabel,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'client',\r\n headerName: MatterTerminology.Client,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'clientReference',\r\n headerName: MatterTerminology.ClientReference,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'otherSide',\r\n headerName: MatterTerminology.OtherSide,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'owner',\r\n headerName: MatterTerminology.Owner,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n }, \r\n {\r\n field: 'billed',\r\n headerName: MatterTerminology.BilledInxTax,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'unbilled',\r\n headerName: MatterTerminology.UnbilledShort,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'debtors',\r\n headerName: MatterTerminology.Debtors,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'estimatedCosts',\r\n headerName: MatterTerminology.EstimatedCosts,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'completionDate',\r\n headerName: MatterTerminology.CompletionDate,\r\n format: DataType.Date,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'instructionDate',\r\n headerName: MatterTerminology.InstructionDate,\r\n format: DataType.Date,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'nextAction',\r\n headerName: MatterTerminology.NextAction,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'nextActionDate',\r\n headerName: MatterTerminology.NextActionDate,\r\n format: DataType.DueDate,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellRendererFramework: DueDateRenderer,\r\n cellClass: cellClassEnum.dueDateType,\r\n },\r\n {\r\n field: 'nextDueDescription',\r\n headerName: MatterTerminology.NextActionItem,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'fileLocation',\r\n headerName: MatterTerminology.FileLocation,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'latestComment',\r\n headerName: MatterTerminology.LastMessage,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n hide: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'inProgress',\r\n headerName: MatterTerminology.InProgress,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n },\r\n {\r\n field: 'publishedDate',\r\n headerName: MatterTerminology.PublishedDate,\r\n format: DataType.DateTime,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'dateTime',\r\n cellClass: cellClassEnum.dateTimeType,\r\n },\r\n {\r\n field: 'lastUpdate',\r\n headerName: MatterTerminology.LastUpdate,\r\n sort: 'desc',\r\n format: DataType.DateTime,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'dateTime',\r\n cellClass: cellClassEnum.dateTimeType,\r\n },\r\n {\r\n field: 'nextRenewal',\r\n headerName: MatterTerminology.NextRenewalDate,\r\n format: DataType.Date,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'isVIP',\r\n headerName: MatterTerminology.IsVip,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n },\r\n {\r\n field: 'syncSystemID',\r\n headerName: MatterTerminology.SyncSystemID,\r\n hide: true,\r\n format: DataType.Number,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'responsibleID',\r\n headerName: MatterTerminology.ResponsibleID,\r\n hide: true,\r\n width: 150,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'responsible',\r\n headerName: MatterTerminology.ResponsibleShort,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'responsibleEmail',\r\n headerName: MatterTerminology.ResponsibleEmail,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'responsiblePhone',\r\n headerName: MatterTerminology.ResponsiblePhone,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'actingID',\r\n headerName: MatterTerminology.ActingID,\r\n format: DataType.Number,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n hide: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'acting',\r\n headerName: MatterTerminology.Acting,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'actingEmail',\r\n headerName: MatterTerminology.ActingEmail,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'actingPhone',\r\n headerName: MatterTerminology.ActingPhone,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'assistingID',\r\n headerName: MatterTerminology.AssistingID,\r\n format: DataType.Number,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n hide: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'assisting',\r\n headerName: MatterTerminology.Assisting,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'assistingEmail',\r\n headerName: MatterTerminology.AssistingEmail,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'assistingPhone',\r\n headerName: MatterTerminology.AssistingPhone,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'price',\r\n headerName: MatterTerminology.Price,\r\n format: DataType.CurrencyWithoutDecimals,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyWithoutDecimalsType,\r\n },\r\n {\r\n field: 'deposit',\r\n headerName: MatterTerminology.Deposit,\r\n format: DataType.CurrencyWithoutDecimals,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyWithoutDecimalsType,\r\n },\r\n {\r\n field: 'billedFees',\r\n headerName: MatterTerminology.BilledFees,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 130,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'unbilledFees',\r\n headerName: MatterTerminology.UnbilledFees,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'unbilledDisbursements',\r\n headerName: MatterTerminology.UnbilledDisbursementsShort,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: true,\r\n 'filter': 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'percentageEstimate',\r\n headerName: MatterTerminology.PercentageEstimateShort,\r\n format: DataType.Percentage,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 120,\r\n aggFunc: 'percentageEstimate',\r\n enableValue: true,\r\n valueGetter: 'percentageEstimate',\r\n cellClass: cellClassEnum.percentageType,\r\n }, \r\n {\r\n field: 'exposure',\r\n headerName: MatterTerminology.PercentageExposure,\r\n format: DataType.Percentage,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n aggFunc: 'exposure',\r\n enableValue: true,\r\n valueGetter: 'exposure',\r\n cellClass: cellClassEnum.percentageType,\r\n },\r\n {\r\n field: 'trustBalance',\r\n headerName: MatterTerminology.TrustBalance,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'exchangeDate',\r\n headerName: MatterTerminology.ExchangeDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'coolingOffDate',\r\n headerName: MatterTerminology.CoolingOffDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'depositDueDate',\r\n headerName: MatterTerminology.DepositDueDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'depositPaidDate',\r\n headerName: MatterTerminology.DepositPaidDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'earliestPriorityDate',\r\n headerName: MatterTerminology.EarliestPriorityDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'applicationNumber',\r\n headerName: MatterTerminology.ApplicationNumber,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'publicationDate',\r\n headerName: MatterTerminology.PublicationDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'publicationNumber',\r\n headerName: MatterTerminology.PublicationNumber,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'grantNumber',\r\n headerName: MatterTerminology.GrantNumber,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'class',\r\n headerName: MatterTerminology.Class,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'goodsAndServices',\r\n headerName: MatterTerminology.GoodsAndServices,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'costAgreementReceivedDate',\r\n headerName: MatterTerminology.CostAgreementReceivedDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'costAgreementRequired',\r\n headerName: MatterTerminology.CostAgreementRequired,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n },\r\n {\r\n field: 'referrer',\r\n headerName: MatterTerminology.Referrer,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'trustAccountBalance',\r\n headerName: MatterTerminology.PotentialTransfer,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n hide: false,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'priorityCountry',\r\n headerName: MatterTerminology.PriorityCountry,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'reviewDate',\r\n headerName: MatterTerminology.ReviewDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'injuryDate',\r\n headerName: MatterTerminology.InjuryDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'proceedingsIssuedDate',\r\n headerName: MatterTerminology.ProceedingsIssuedDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'sunsetOrLimitationDate',\r\n headerName: MatterTerminology.SunsetOrLimitationDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'hearingDate',\r\n headerName: MatterTerminology.HearingDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'trustee',\r\n headerName: MatterTerminology.Trustee,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n width: 250,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'trusteeEmail',\r\n headerName: MatterTerminology.TrusteeEmail,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n width: 250,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'isAwaitingInstructions',\r\n headerName: MatterTerminology.IsAwaitingInstructions,\r\n format: DataType.Boolean,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.booleanType,\r\n },\r\n {\r\n field: 'clientType',\r\n headerName: MatterTerminology.ClientType,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n width: 250,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'lastTrustTransactionDate',\r\n headerName: MatterTerminology.LastTrustTransactionDate,\r\n format: DataType.Date,\r\n menuTabs: menuTabs,\r\n width: 250,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'lastTrustTransactionType',\r\n headerName: MatterTerminology.LastTrustTransactionType,\r\n format: DataType.String,\r\n menuTabs: menuTabs,\r\n width: 250,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n {\r\n field: 'fundsRecovered',\r\n headerName: MatterTerminology.FundsRecovered,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'forecastFeesBilledThisMonth',\r\n headerName: MatterTerminology.ForecastFeesBilledThisMonth,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'forecastFeesBilledNextThreeMonths',\r\n headerName: MatterTerminology.ForecastFeesBilledNextThreeMonths,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'forecastFeesBilledNextSixMonths',\r\n headerName: MatterTerminology.ForecastFeesBilledNextSixMonths,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'forecastFeesCollectedThisMonth',\r\n headerName: MatterTerminology.ForecastFeesCollectedThisMonth,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'forecastFeesCollectedNextThreeMonths',\r\n headerName: MatterTerminology.ForecastFeesCollectedNextThreeMonths,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'forecastFeesCollectedNextSixMonths',\r\n headerName: MatterTerminology.ForecastFeesCollectedNextSixMonths,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'forecastHoursThisMonth',\r\n headerName: MatterTerminology.ForecastHoursThisMonth,\r\n format: DataType.Number,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'forecastHoursNextThreeMonths',\r\n headerName: MatterTerminology.ForecastHoursNextThreeMonths,\r\n format: DataType.Number,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'forecastHoursNextSixMonths',\r\n headerName: MatterTerminology.ForecastHoursNextSixMonths,\r\n format: DataType.Number,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.numberType,\r\n },\r\n {\r\n field: 'expectedFutureFees',\r\n headerName: MatterTerminology.ExpectedFutureFees,\r\n format: DataType.Currency,\r\n menuTabs: menuTabs,\r\n enableRowGroup: false,\r\n hide: false,\r\n width: 140,\r\n filter: 'number',\r\n aggFunc: 'sum',\r\n enableValue: true,\r\n cellClass: cellClassEnum.currencyType,\r\n },\r\n {\r\n field: 'archivedDate',\r\n headerName: MatterTerminology.ArchivedDate,\r\n format: DataType.Date,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n filter: 'date',\r\n cellClass: cellClassEnum.dateType,\r\n },\r\n {\r\n field: 'injuriesDescription',\r\n headerName: MatterTerminology.Injury,\r\n format: DataType.String,\r\n width: 150,\r\n menuTabs: menuTabs,\r\n enableRowGroup: true,\r\n cellClass: cellClassEnum.stringType,\r\n },\r\n];\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const MatterSummaryAggFuncs: any = {\r\n // tslint:disable-next-line: no-any\r\n 'percentageEstimate': (params: any) => {\r\n return getCustomAggFuncValue(params);\r\n },\r\n // tslint:disable-next-line: no-any\r\n 'exposure': (params: any) => {\r\n return getCustomAggFuncValue(params);\r\n }\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const getCustomAggFuncValue = (params: any) => {\r\n let percentageTotal = 0;\r\n if (params && params.length > 0) {\r\n let valueOne = 0;\r\n let valueTwo = 0; \r\n // tslint:disable-next-line: no-any\r\n params.forEach((value: any) => {\r\n valueOne += value.valueOne;\r\n valueTwo += value.valueTwo;\r\n });\r\n\r\n if (valueOne > 0) {\r\n percentageTotal = (valueOne / valueTwo) * 100;\r\n }\r\n \r\n return createValueObject(valueOne, valueTwo); \r\n } \r\n return percentageTotal;\r\n};\r\n\r\nexport const createValueObject = (valueOne: number, valueTwo: number) => {\r\n return {\r\n valueOne: valueOne,\r\n valueTwo: valueTwo,\r\n toString: function () {\r\n return (valueOne && valueTwo ? (valueOne / valueTwo) * 100 : 0).toString();\r\n },\r\n };\r\n};\r\n\r\nexport const percentageEstimate = (params: ValueGetterParams) => {\r\n if (!params.node.group && params.data) {\r\n return createValueObject((params.data.billedFees ? params.data.billedFees : 0), \r\n (params.data.estimatedCosts ? params.data.estimatedCosts : 0));\r\n } else {\r\n return undefined;\r\n }\r\n};\r\n\r\nexport const exposure = (params: ValueGetterParams) => {\r\n if (!params.node.group && params.data) {\r\n let fees = (params.data.billedFees ? params.data.billedFees : 0) + ( params.data.unbilled ? params.data.unbilled : 0);\r\n\r\n return createValueObject(fees, (params.data.estimatedCosts ? params.data.estimatedCosts : 0) );\r\n } else {\r\n return undefined;\r\n }\r\n};\r\n"],"sourceRoot":""}