{"version":3,"sources":["datepicker.js","timepicker.js","tab.js","tooltip.js","select.js","clickinon.angular.controls.autocomplete.js","clickinon.angular.controls.multi-select.js","clickinon.angular.controls.format-date.js","clickinon.angular.controls.format-time.js","clickinon.angular.controls.form-autofill-fix.js","routes.js","app.js","shared.module.js","login.module.js","menu.module.js","address.module.js","control_screen.module.js","map.module.js","consignments.module.js","manifests.module.js","customers.module.js","suppliers.module.js","settings.module.js","accounts.module.js","reports.module.js","menu.directive.js","address_list.directive.js","change_password.directive.js","assign_supplier.directive.js","loading.directive.js","edit_date_time.directive.js","prevent_enter_submit.directive.js","capitlize.directive.js","form_tracking.directive.js","signed_out.directive.js","modal.directive.js","consignment_address_goods_photos.directive.js","consignment_address_paperwork_photos.directive.js","valid-submit.directive.js","control_screen.consignments.directive.js","control_screen.manifests.directive.js","consignment_details.directive.js","consignment_address_list.directive.js","consignment_address.directive.js","consignment_address_details.directive.js","consignment_address_load_details_list.directive.js","consignment_address_collection_load_details.directive.js","consignment_address_delivery_load_details.directive.js","consignment_address_additional_charges_list.directive.js","consignment_address_additional_charge.directive.js","consignment_quote_confirmation.directive.js","consignment_confirmation.directive.js","manifest_confirmation.directive.js","consignment_missing_fields_confirmation.directive.js","consignment_change_log.directive.js","delete_consignment_confirmation.directive.js","consignment_address_status.directive.js","consignment_address_signature.directive.js","customer_list.directive.js","customer_details.directive.js","customer_contact_list.directive.js","customer_contact.directive.js","customer_user_list.directive.js","customer_user.directive.js","customer_address_list.directive.js","customer_address.directive.js","customer_pricing_list.directive.js","customer_pricing_matrix_details.directive.js","customer_pricing_matrix_item_details.directive.js","customer_account_info.directive.js","customer_invoice_settings.directive.js","customer_optional_consignment_fields.directive.js","customer_control_screen_configuration.directive.js","supplier_list.directive.js","supplier_details.directive.js","supplier_licence_list.directive.js","supplier_licence.directive.js","supplier_addresses.directive.js","supplier_vehicle_list.directive.js","supplier_vehicle.directive.js","supplier_account_info.directive.js","supplier_user_details.directive.js","supplier_deductions_list.directive.js","supplier_deduction.directive.js","supplier_photo_list.directive.js","supplier_photo.directive.js","global_settings.directive.js","vat_code_list.directive.js","vat_code.directive.js","currency_list.directive.js","currency.directive.js","supplier_type_list.directive.js","supplier_type.directive.js","licence_category_list.directive.js","licence_category.directive.js","ledger_number_list.directive.js","ledger_number.directive.js","user_list.directive.js","user.directive.js","additional_charge_list.directive.js","additional_charge.directive.js","vehicle_type_list.directive.js","vehicle_type.directive.js","pricing_list.directive.js","pricing_matrix_details.directive.js","pricing_matrix_item_details.directive.js","whitelisted_ip_address_list.directive.js","whitelisted_ip_address.directive.js","area_additional_charge_rule_list.directive.js","area_additional_charge_rule.directive.js","supplier_billing_type_list.directive.js","supplier_billing_type.directive.js","manifest_details.directive.js","manifest_change_log.directive.js","delete_manifest_confirmation.directive.js","email_confirmations.directive.js","accounts.consignments.directive.js","accounts.manifests.directive.js","transport_exchange_pods.directive.js","simple_profitability.directive.js","profitability.directive.js","earnings.directive.js","credit.directive.js","user_ip_log.directive.js","consignments.factory.js","manifests.factory.js","suppliers.factory.js","customers.factory.js","atlas_users.factory.js","countries.factory.js","settings.factory.js","photos.factory.js","common.factory.js","users.factory.js","authorizations-interceptor.factory.js","clickinon.http-interceptor-progress.factory.js","postcode-lookup.factory.js","manifestConsignmentAddressDate.filter.js","login.controller.js","menu.controller.js","control_screen.controller.js","control_screen.consignments.controller.js","control_screen.manifests.controller.js","map.controller.js","consignments.controller.js","manifests.controller.js","suppliers.controller.js","customers.controller.js","settings.controller.js","accounts.controller.js","accounts.consignments.controller.js","accounts.manifests.controller.js","transport_exchange_pods.controller.js","reports.controller.js","profitability.controller.js","simple_profitability.controller.js","earnings.controller.js","credit.controller.js","user_ip_log.controller.js"],"names":["angular","module","run","$templateCache","put","c","e","directive","$http","$parse","$timeout","restrict","scope","onItemSelected","getItems","onChange","model","disabled","onAlternateSearchClick","text","require","template","elem","attr","placeholder","undefined","cssClass","class","loadingText","displayProperty","showAlternativeSearch","showAlternativeSearchNoResults","alternativeSearchText","alternativeSearchCssClass","html","link","ngModelController","data","loadingData","searchText","textboxInFocus","resultsInFocus","minChars","minPause","errorMessage","noResults","highlightIndex","selectingItem","alternativeSearchType","type","hasSearched","$render","$modelValue","eval","selectedProperty","search","$setValidity","loadDataSilently","arguments","length","parseInt","timer","cancel","url","get","success","response","error","status","then","keyPress","event","keyCode","selectItem","stopPropagation","click","itemMouseOver","item","alternateSearch","console","log","$on","children","focus","select","document","addEventListener","$document","items","key","selectedItems","buildSelectedItemText","selectedItemsText","initialText","input","find","show","on","$apply","isSelected","itemSelected","forEach","value","itemAlreadySelected","splice","push","moment","bind","typedFormat","outputFormat","dateFormat","val","datePart","substr","indexOf","monthPart","yearPart","date","year","month","toDate","$setViewValue","format","toUpperCase","timeFormat","hourPart","minutePart","hour","minute","priority","element","attrs","ngModelCtrl","autofillElements","$","i","is","trigger","foundationRoutes","name","path","config","$urlProvider","$locationProvider","$animateProvider","$httpProvider","otherwise","html5Mode","enabled","requireBase","hashPrefix","classNameFilter","interceptors","fn","toJSON","this","$rootScope","FastClick","attach","body","title","pageTitle","$inject","shared","login","menu","address","control_screen","map","consignments","manifests","customers","suppliers","settings","accounts","reports","selectedDateTime","updateDateTime","el","which","preventDefault","window","stop","execCommand","modelCtrl","capitalize","inputValue","capitalized","$parsers","ngModel","$scope","$element","$attrs","areYouSurePrompt","formObj","$pristine","removeEventListener","prompt","defaultPrevented","confirm","controller","controllerAs","$state","FoundationApi","UserFactory","AtlasModalFactory","ok","logout","close","go","transclude","modal","id","appendTo","open","addClass","hide","removeClass","add","remove","factory","modals","service","modalToRemove","_","findWhere","without","form","$submitted","validSubmit","$valid","$event","customer","consignment","isFrequentConsignment","ignoreRequiredFieldsAndSave","closeConsignmentMissingFieldsConfirmationModal","countries","xeroOrganisations","setParent","ParentId","Parent","Id","customerAccountTypes","ledgerNumbers","vatCodes","consignmentAddressesCompleted","currentEmail","confirmationEmailErrorMessage","checkEmailAddresses","sendEmails","editEmails","sendEmail","dontSendEmail","dontSendEmails","$filter","copyConsignmentId","createNewConsignment","ConsignmentNumber","IsQuote","Customer","BookingContact","SaveContact","ConsignmentType","VehicleType","NotesForSupplier","NotesForOffice","NotesForInvoice","InvoiceStatus","AtlasCourierExpress","Enums","Uninvoiced","IsFrequentConsignment","FrequentConsignmentTemplate","OptimiseStops","CalculateTimes","Mileage","TotalTimeInMinutes","TotalMiles","RecommendedPrice","ApplyPostcodePricingRules","Price","IsWebBooking","IsCompleted","IsManuallyMarkedInvoiceable","ConsignmentAddresses","getConsignment","self","__WEB_SERVICE_BASE_URL","headers","Token","token","loadDetails","additionalCharges","locationLastDeliveryDate","locationLastDeliveryAddress","ScheduledStartDateAndTime","DisplayScheduledStartDateAndTime","ScheduledStartToDateAndTime","DisplayScheduledStartToDateAndTime","d","LoadDetails","BarcodeFileName","BarcodeThumbnailFileName","replace","Quantity","Description","AdditionalCharges","AdditionalCharge","ChargeFor","Cost","TotalLoadDetailsHtml","TotalAdditionalChargesHtml","Manifest","Supplier","SupplierUsers","LastKnownLocation","a","Address","LastDeliveryDate","LastDeliveryAddress","FormattedLastDeliveryAddress","getFullFormattedConsignmentAddress","searchConsignments","startDate","endDate","customerName","vehicleType","poNumber","consignmentNumber","manifestNumber","collectionAddress","deliveryAddress","bookingContact","supplierName","isFrequent","haveNoManifest","isQuote","isDeleted","urlParameters","encodeURIComponent","DisplayDateCreated","DateCreated","startDeliveryDate","startToDeliveryDate","timed","startDeliveryAddress","lastDeliveryDate","lastDeliveryAddress","totalLoad","manifestNumbers","consignmentManifests","Timed","ManifestNumber","ConsignmentAddressType","Name","m","CustomerName","ManifestNumbers","StartDeliveryDate","StartToDeliveryDate","StartDeliveryAddress","DisplayStartDeliveryAddress","Postcode","Town","AddressLine1","FormattedStartDeliveryAddress","DisplayLastDeliveryAddress","TotalLoad","Suppliers","exportConsignments","getConsignmentAddressesWithNoManifest","consignmentAddresses","getConsigmentAddress","index","getFormattedConsignmentAddress","args","formattedAddress","County","CompanyName","saveQuote","saveConsignment","ContactName","Phone","ContactPhoneNumber","Email","ContactEmailAddress","CreatedBy","ConsignmentChangeLogs","ConsignmentOrder","Consignment","ManifestChangeLogs","Vehicles","CustomerBranch","Contacts","TotalLoadedMiles","CustomerInvoice","post","deleteConsignment","copy","delete","getReport","showPrice","showPhotos","showSupplierNotes","responseType","sendReportEmail","to","To","Subject","Body","getAccountsConsignments","missingPONUmber","incorrectProfitMargin","missingPOD","holdInvoice","ignoreProfitMargin","Manifests","StartDeliveryAddressPostcode","LastDeliveryAddressPostcode","ConsignmentAddressesLength","VehicleTypeName","ConsignmentTypeShortName","ShortName","getProfitabilityConsignments","encodeURI","SchedsuledStartDateAndTime","getSimpleProfitabilityConsignmentsReport","invoiceConsignments","invoiceDate","isSame","ignoreProfitMargins","cancellationRequest","manifest","createNewManifest","totalMiles","totalTime","ManifestStatus","StatusColour","HexCode","Currency","getManifest","consignmentNumbers","firstConsignmentBookedDate","consignmentTypes","customerNotes","officeNotes","supplierNotes","invoiceNotes","manifestConsignments","startDeliveryTimed","lastDeliveryTimed","middleDeliveryTimed","DisplayEstimatedStartDateAndTime","DisplayStartStartTime","StartTime","DisplayArrivalTime","ArrivalTime","DisplayCompletionTime","CompletionTime","FormattedAddress","startDeliveryToDate","lastDeliveryToDate","Notes","Customers","ConsignmentNumbers","ConsignmentTypes","StartDeliveryToDate","LastDeliveryToDate","FirstConsignmentBookedDate","ManifestCreationDate","AllCustomerNotesHtml","AllOfficeNotesHtml","AllSupplierNotesHtml","AllInvoiceNotesHtml","StartDeliveryTimed","LastDeliveryTimed","MiddleDeliveryTimed","searchManifests","nonspec","notAcknowledged","isBackload","excludeBackload","consignmentPrices","SLA","ConsignmentPrices","exportManifests","getAccountsManifests","zeroCost","noInvoiceReference","TotalLoadDetails","SupplierName","saveManifest","emailMessage","ManifestOrder","TransportExchangeManifests","TransportExchangeManifestLogs","CustomerMessage","sendManifest","sendManifestToTransportExchange","removeManifestFromTransportExchange","rebookManifestWithTransportExchange","updateManifestCost","CalculatedCost","deleteManifest","getConsignmentNumbers","existingConsignmentNumbers","alreadyExists","j","getAvailableSuppliers","availableSuppliers","s","SmallestVehicle","Order","generateCompletedEmailBody","consignmentAddress","PONumber","CustomerReferenceNumber","CustomerReference","SignatureName","sendCompletedEmail","invoiceManifests","getManifestTransportExchangePodApprovals","approveTransportExchangePods","transportExchangeConsignmentAddresses","rejectTransportExchangePods","ManifestFactory","supplier","createNewSupplier","getSupplier","l","SupplierLicences","DisplayValidFrom","ValidFrom","DisplayValidTo","ValidTo","getSuppliers","smallestVehicle","v","searchSuppliers","isTrackingDisabled","isDeactivated","getLastSupplierLocation","supplierId","location","locations","getLastSupplierLocationByConsignmentNumberCustomerReferenceOrPONumber","getLastSupplierLocationByManifestNumber","getLastSupplierLocationByVehicleType","vehicleTypeId","getSupplierLocations","searchSupplierByName","getEarnings","saveSupplier","SupplierPhotos","saveSupplierPhoto","supplierPhoto","Deductions","deleteSupplierPhoto","lastCustomerNameSearched","customerSearchResponse","lastCustomerExistingAddressSearched","customerExistingAddressSearchResponse","createNewCustomer","Addresses","CustomerUsers","Matrices","InvoiceSettings","OptionalConsignmentFields","getCustomer","getCustomers","getCustomersOverCreditLimit","searchCustomers","customerAccountType","searchCustomerByName","searchCustomersExistingAddress","addresses","ShortAddress","getCustomerMatrix","saveCustomer","Branches","HasParent","username","password","currentActiveUser","$broadcast","$localStorage","changePassword","user","u","AtlasUserRole","isUserAdmin","isUserAccounts","isUserManager","$q","getCountries","deferred","defer","resolve","promise","globalSettings","supplierTypes","supplierBillingTypes","licenceCategories","matrices","costingMatrices","vehicleTypes","atlasUsers","accountCodes","whitelistedIpAddresses","userIpLogs","areaAdditionalChargeRules","brandingThemes","getGlobalSettings","getSupplierTypes","getSupplierBillingTypes","searchSupplierBillingTypes","getLicenceCategories","searchLicenceCategories","getLedgerNumbers","getVatCodes","getMatrices","getCostingMatrices","getAdditionalCharges","searchAdditionalCharges","chargeFor","getVehicleTypes","searchVehicleTypes","getAtlasUsers","searchAtlasUsers","email","getWhitelistedIpAddresses","getUserIpLogs","getAreaAdditionalChargeRules","searchAreaAdditionalChargeRules","postcodes","getAllSupplierTypes","getAllSupplierBillingTypes","getAllLicenceCategories","getAllLedgerNumbers","getAllVatCodes","getAllAdditionalCharges","getAllVehicleTypes","getAllAreaAdditionalChargeRules","saveGlobalSettings","saveSupplierTypes","supplierType","saveSupplierBillingTypes","supplierBillingType","saveLicenceCategories","licenceCategory","saveLedgerNumbers","ledgerNumber","saveVatCodes","vatCode","saveMatrices","priceMatrix","saveAdditionalCharges","additionalCharge","saveVehicleTypes","saveAtlasUsers","atlasUser","saveWhitelistedIpAddress","whitelistedIpAddress","saveAreaAdditionalChargeRules","areaAdditionalChargeRule","searchAccountCodes","Code","Item","deleteMatrix","matrix","deleteWhitelistedIpAddress","getBrandingThemes","upload","file","formData","FormData","append","Content-Type","transformRequest","identity","consignmentAddressTypes","statusColours","matrixTypes","matrixPriceIncrements","atlasUserRoles","invoiceSetupOptions","invoiceDeliveries","invoiceDeliveryOptions","paymentTermStartOptions","consignmentFrequencies","weekdays","xeroOrganiations","consignmentControlScreenColumns","getCustomerAccountTypes","getConsignmentTypes","getConsignmentAddressTypes","getStatusColours","getMatrixTypes","getMatrixPriceIncrements","getAtlasUserRoles","getInvoiceSetupOptions","getInvoiceDeliveries","getInvoiceDeliveryOptions","getPaymentTermStartOptions","getConsignmentFrequencies","getWeekDays","getInvoicingEvent","getXeroOrganisations","getControlScreenConsignmentColumns","deviceId","authenticationCode","Authorization","getAuth","reject","btoa","timerNotification","timerSignOut","request","when","requestError","rejection","requestDateTime","startTimers","notificationTimeout","signoutTimeout","__TIMEOUT_NOTIFICATION","duration","diff","__TIMEOUT_SIGNOUT","publish","content","color","autoclose","responseError","httpInterceptorProgressFactory","httpRequests","exceptions","exception","found","ignoreProgress","isArray","__GETADDRESS_KEY","all","filter","datetime","filteredConsignmentAddresses","scheduledDateTime","CustomerFactory","uuid","uuidv4","loggingIn","showAuthenticationCode","submitAuthenticationCode","AtlasUserFactory","tabs","roles","Roles","menuVisible","toggleMenu","goTo","state","params","Role","AtlasUser","activeTab","FileSaver","ConsignmentFactory","SettingsFactory","CommonFactory","$emit","sortBy","sortReverse","showFilters","StartDate","EndDate","DateRange","CollectionAddress","DeliveryAddress","IsFrequent","HaveNoManifest","IsDeleted","columns","selectedColumns","allCustomerConsignmentControlScreenColumns","CustomerConsignmentControlScreenColumns","controlScreenConsignmentColumns","exporting","CustomerId","ConsignmentControlScreenColumns","customerColumnIsInSelected","column","ConsignmentControlScreenColumn","IsVisible","columnIsInSelected","isIn","selectedColumnsChanged","SelectedConsignmentColumns","sort","field","keypress","filename","contentDisposition","split","Blob","saveAs","getConsignmentManifestNumbers","toString","showConsignmentDetails","closeConsignmentModal","manifestId","getManifestConsignmentNumbers","clearManifest","changeDateRange","subtract","resetDateRange","copyConsignment","formatAddressForList","selectIsFrequentConsignment","selectHaveNoManifest","getBackgroundColour","allAddressesCompleted","getCustomerName","$interval","SupplierFactory","searchStartDate","searchEndDate","searchDateRange","searchCustomerName","searchVehicleType","searchPONumber","searchConsignmentNumber","searchManifestNumber","searchCollectionAddress","searchDeliveryAddress","searchSupplierName","searchStatusColour","searchNonSpec","searchBackload","searchExcludeBackload","searchNotAcknowledged","searchIsDeleted","selectedSupplier","selectedManifestIndex","selectedManifest","assigningSupplier","SelectedManifestColumns","canSendToTransportExchange","sendingToTransportExchangeOptions","transportExchangeManifestOptions","tailLift","notes","transportExchangeDefaultSupplier","TransportExchangeDefaultSupplier","startSearch","endSearch","showManifestDetails","closeManifestModal","getManifestConsignments","setNonSpec","setBackload","setExcludeBackload","selectManifest","canSendToTEG","TransportExchangeVehicleMappings","closeAssignSupplier","selectSupplier","IsSent","assignSupplier","assigningSupplierErrorMessage","confirmAssignSupplier","cancelAssignSupplier","closeConfirmAssignSupplier","showSendingToTransportExchangeOptions","consignmentExists","hideSendingToTransportExchange","removeFromTransportExchange","rebookWithTransportExchange","openLoadingModal","closeLoadingModal","getLoadDetails","getAllSupplierLastLocations","supplierMap","clearMarkers","supplierLocations","addSupplierLocationToMap","triggerResize","loadingSupplierLocations","supplierLocation","markerType","infoContent","clickinon","google","maps","enums","markerTypes","PIN","addMarker","Latitude","Longitude","colour","fontColour","IconCode","Map","mapsLoaded","showTraffic","trackingDate","tracking","loadingHistoricalData","loadingHistoricalDataMessages","loadingHistoricalDataText","getMap","initialize","allowDuplicatesAddress","callback","searchSupplier","supplierSelected","clearSelectedSupplier","vehicleTypeSelected","zoomTo","zoomToPlace","toggleTraffic","removeTraffic","viewHistoricalData","counter","startTime","endTime","second","CIRCLE","searchSupplierLocation","consignmentNumberCustomerReferenceOrPONumber","resetSearchSupplierLocation","$stateParams","$sce","$window","PostcodeLookupFactory","CountryFactory","updateDistanceTimesAndPricing","consignmentMap","getLocations","totalDistance","getTotalDistance","Math","round","getRoute","getTotalTime","asMinutes","recommendedPrice","selectedCustomer","priceMatrices","MatrixType","MatrixPriceIncrement","p","PriceMatrices","From","ceil","Interval","PriceBreak","MinimumPrice","r","rule","Postcodes","exclusions","PostcodeExclusions","exclusionsFound","VehicleTypes","areaAdditionalChargePrice","startsWith","PricePercentage","MaxPrice","BackloadMultiplier","IsBackload","updateCosting","consignmentHasManifests","consignmentManifestOneToOneRelationship","calculatedCost","areaAdditionalChargeCost","CostPercentage","MaxCost","RecommendedCost","defaultColour","autoOpenContent","customerAccountTypesEnums","CustomerAccountTypes","invoiceStatuses","stage","selectedCustomerOnStop","selectedCustomerIsProFormaAccountCustomer","selectedCustomerInactiveWarning","selectedCustomerInactiveWarningTimeframe","__INACTIVE_CUSTOMER_WARNING_MONTHS","selectedCustomerOverCreditLimitWarning","existingAddresses","branch","contacts","contactEmails","contact","defaultAdditionalCharges","consignmentAddressIndex","selectedExistingAddress","saveToCustomerRecord","loadDetailsIndex","additionalChargeIndex","selectedAdditionalCharges","additionalChargeChanges","savingQuote","savingConsignment","creatingManifest","existingConsignment","loadingConsignment","loadingManifest","ignorePORequired","report","allCollectionLoadDetails","dateToday","deletingConsignment","consignmentFrequencySettings","showReportOptions","showReport","showEmailDetailsForReport","emailReport","ShowPrice","ShowPhotos","reportEmailErrorMessage","consignmentAddressesView","minimumFrequentConsignmentData","minimumDate","day","manifestChangesRequired","consignmentDisabled","manifestSuppliers","requestingConsignmentCancellation","consignmentConfirmationOpen","consignmentToQuoteWarningCompleted","consignmentBackdatedWarningCompleted","updatingManifest","manifestUpdated","manifestInvoiced","costsChanged","contactErrorMessage","showInvoicingSection","pcaControl","goodsPhotos","paperworkPhotos","hideAddressSearch","customerSelected","consignmentId","AccountType","OnStop","ProFormaAccountCustomer","NameShownOnInvoice","PhoneNumber","CostCentre","AutoEmailOnCreate","AutoEmailOnCollection","AutoEmailOnDelivery","UseContactEmail","BookingEmailAddress","unassignedConsignmentAddress","ScheduledStartDate","ScheduledStartTime","ScheduledStartToDate","ScheduledStartToTime","manifestAlreadyAdded","ReadyToInvoice","Invoiced","NumberOfConsignmentAddresses","ConsignmentFrequencySettings","WeekDays","selected","CancellationRequested","ConsignmentReference","InvoiceDate","InvoiceNumber","IsOnRoute","HasArrived","NotesFromSupplier","Signature_FileName","GoodsPhotos","PaperworkPhotos","NoPaperworkProvided","RowVersion","Paid","pushAt","supplierAlreadyExists","Country","lat","lng","object","addLocation","dateTime","dateTimeLocked","IsScheduledStartDateAndTimeLocked","getDirections","goToDetails","goToChangeLog","goToAddresses","consignmentForm","txtConsignment_Customer","$invalid","txtConsignment_ContactName","ddlConsignment_VehicleType","ConsignmentDetailsFormSubmitted","contactNameAlreadyExists","trim","changeVehicleType","searchCustomer","selectedCustomerOverCreditLimitWarnin","LastConsignmentBookedDate","OutstandingBalance","CreditLimit","changeBranch","selectBookingContact","addNewConsignmentAddress","initialConsignmentAddressType","editConsignmentAddress","SelectedExistingAddress","existingLoadDetails","pickupASAP","clearManuallySetDateTime","dateManuallySet","unlockConsignmentAddressDateTime","Addresss","options","CountryId","updateLocation","searchExistingAddresses","onAddressSearchChange","addressSelected","residential","line_1","AddressLine2","line_2","AddressLine3","line_3","town_or_city","county","postcode","selectAccountAddress","searchPostcodeFinder","suggestions","substring","lastIndexOf","addressChanged","utilities","nullToEmpty","equals","addAddressToCustomer","SaveToCustomerRecord","pop","priceManuallySet","PriceManuallySet","closeConsignmentLoadDetailsNotAddedWarning","clearLoadDetailsAndUpdateAddressList","updateAddressList","onAddressSearchBlur","txtConsignmentAddress_Address1","txtConsignmentAddress_Town","txtConsignmentAddress_Postcode","NoLoadDetailsGiven","ConsignmentAddressFormSubmitted","recalculate","$setPristine","copyConsignmentAddress","moveConsignmentAddressUp","$setDirty","moveElementInArray","moveLocation","moveConsignmentAddressDown","deleteConsignmentAddress","removeLocation","cancelAddressEdit","addNewLoadDetails","editLoadDetails","updateLoadDetailsList","txtConsignment_LoadDetailsQuantity","txtConsignment_LoadDetailsDescription","ConsignmentLoadDetailsFormSubmitted","ddlConsignment_ExistingLoadDetails","deleteLoadDetails","cancelLoadDetailsEdit","addNewAdditionalCharge","charge","checked","editAdditionalCharge","updateAdditionalChargesList","parseFloat","selectAdditionalCharge","deleteAdditionalCharge","cancelAdditionalChargeEdit","changeOptimizeStops","setOptimizeStops","showQuoteWarning","hasCollectionAddress","hasDeliveryAddress","ConsignmentFormSubmitted","MissingCollectionOrDeliveryAddress","closeQuoteWarning","nextConsignmentAddress","isBefore","$setUntouched","closeConsignmentQuoteConfirmationModal","PreventConsignmentWithoutPONumber","PreventConsignmentWithoutCostCode","CostCode","openFrequentConsignmentSettings","foundScheduledDateTime","txtConsignment_Price","IsPONumberRequired","ShowCostCode","startConsignmentAddress","ChangeLogs","closeConsignmentQuoteToConsignmentWarningModal","closeConsignmentBackdatedConsignmentWarningModal","markConsignmentToQuoteWarningCompleted","markConsignmentBackdatedWarningCompleted","closeFrequentConsignmentModal","saveFrequentConsignment","openDeleteConsignmentConfirmationModal","closeDeleteConsignmentConfirmationModal","consignmentHasManifest","createManifest","customerMessage","Message","closeConsignmentAddressSignatureModal","editManifest","checkCreateManifestCustomerMessage","closeCustomerEmailModal","getSupplierManifestOptionText","Make","Model","generateReport","ShowSupplierNotes","fileURL","URL","createObjectURL","trustAsResourceUrl","closeConsignmentReportModal","showEmailReportDetails","selectEmailReportTo","ExistingContact","setToRecommendedPrice","addAdditionalMiscChargeRow","removeAdditionalMiscChargeRow","changeAdditionalChargePrice","newPrice","oldPrice","priceDifference","changeCost","showSignature","showGoodsPhotos","slice","closeConsignmentAddressGoodsPhotos","showPaperworkPhotos","closeConsignmentAddressPaperworkPhotos","duplicateConsignment","reload","openChangeLogModal","closeConsignmentChangeLogModal","requestCancellation","closeConsignmentRequestCancellationConfirmationModal","closeConsignmentConfirmation","changeApplyPostcodePricingRules","changeBackload","showInvoicing","ModalFactory","manifestMap","EstimatedStartDateAndTime","Matrix","loadingConsignmentAddresses","savingManifest","deletingManifest","sendingManifest","consignmentAddressCustomerNameFilter","emails","currentEmailIndex","supplierEmails","SecondaryEmail","getConsignmentAddresses","closeConsignmentAddressesModal","costManuallySet","CostManuallySet","addToManifest","isBeingCompleted","At","closeConsignmentAddressSignature","openManifestChangeLog","closeManifestChangeLog","openTransportExchangeManifestLog","closeTransportExchangeManifestLog","openAssignSupplier","openDeleteManifestConfirmation","closeDeleteManifestConfirmation","ExistingEmail","closeManifestReport","selectDateTime","propertyName","overlay","overlayClose","templateUrl","contentScope","sameDateTimeForAll","IsAcknowledged","AcknowledgedTime","deactivate","destroy","clearDateTime","activate","setToCalculatedCost","ConsignmentAddress","Send","showLoadDetails","closeLoadDetails","PhotosFactory","supplierLicence","vehicle","supplierUser","searchName","deduction","saving","loadingSuppliers","loadingSupplier","photo","supplierPhotos","imageFile","searchIsTrackingDisabled","searchIsDeactivated","editSupplier","IsSelfBilling","Type","IsEmployed","addNewSupplierLicence","editSupplierLicence","updateSupplierLicenceList","supplierDetailsForm","ddlSupplierDetails_LicenceType","txtSupplierDetails_LicenceFrom","txtSupplierDetails_LicenceTo","SupplierLicencesFormSubmitted","$dirty","deleteSupplierLicence","licence","cancelSupplierLicenceEdit","addNewVehicle","IsDefaultVehicle","editVehicle","updateVehicleList","ddlSupplierDetails_VehicleType","txtSupplierDetails_VehicleMake","txtSupplierDetails_VehicleModel","txtSupplierDetails_VehicleRegNumber","txtSupplierDetails_VehicleLength","txtSupplierDetails_VehicleWidth","txtSupplierDetails_VehicleHeight","txtSupplierDetails_VehicleInsuranceExpiry","SupplierVehiclesFormSubmitted","deleteVehicle","cancelVehicleEdit","addNewDeduction","selectedAccountCode","searchAccountCode","accountCodeSelected","accountCode","AccountCode","editDeduction","updateSupplierDeductionList","txtSupplierDetails_DeductionName","txtSupplierDetails_DeductionValue","txtSupplierDetails_AccountCode","ddlSupplierDetails_DeductionVATCode","SupplierDeductionsFormSubmitted","deleteDeduction","cancelDeductionEdit","existingSupplier","numberDefaultVehicles","Username","NewPassword","ConfirmPassword","Password","addNewPhoto","Photos","editPhoto","photoSelected","files","Photo","updatePhotoList","txtSupplierDetails_PhotoDescription","SupplierPhotosFormSubmitted","deletePhoto","deletePhotoFromList","cancelPhotoEdit","customerAccountTypeEnums","customerIsOnStop","customerUser","createEditUser","priceMatrixIncrements","priceMatrixItem","searchCustomerAccountType","searchContactIsDeactivated","searchAddressIsDeactivated","saved","changePasswordUser","changePasswordErrorMessage","changingPassword","loadingCustomers","loadingCustomer","defaultControlScreenConsignmentColumns","addNewCustomer","editCustomer","IsDeactivated","useCustomControlScreen","customerDetailsForm","txtCustomerAddresses_AddressLine1","txtCustomerAddresses_Postcode","ddlCustomerAddresses_Country","CustomerAddressesFormSubmitted","addNewAddress","editAddress","filterAddressList","updateContactList","txtCustomerContacts_Name","CustomerContactsFormSubmitted","addNewContact","editContact","cancelContactEdit","filterContactList","updateUserList","txtCustomerUsers_Email","txtCustomerUsers_Password","txtCustomerUsers_ConfirmPassword","CustomerUsersFormSubmitted","addNewUser","editUser","cancelUserEdit","customerContactForm","selectUser","openChangePasswordModal","changeUserPassword","updatePricingList","addNewPriceMatrix","editPriceMatrix","deletePriceMatrix","cancelPriceMatrixEdit","updatePricingMatrixList","addNewPriceMatrixItem","editPriceMatrixItem","Index","removePriceMatrixItem","updatePricingMatrixItemList","cancelPriceMatrixItemEdit","changeCustomerAccountType","closeChangePasswordModal","existingCustomer","moveColumnOrderUp","moveColumnOrderDown","loading","currencies","currency","supplierBillingTypeBrandingTheme","searchSupplierBillingType","searchLicenceCategory","searchAtlasUser","searchAdditionalCharge","updatingVehicleOrder","searchAreaAdditionalCharge","postCode","updatingAreaAdditionalChargeRuleOrder","settingsForms","addNewVATCode","editVatCode","saveVATCode","cancelVATCodeSave","addNewCurrency","editCurrency","saveCurrency","cancelCurrencySave","addNewSupplierType","editSupplierType","t","saveSupplierType","cancelSupplierTypeSave","addNewSupplierBillingType","editSupplierBillingType","brandingTheme","BrandingTheme","SelectedBrandingTheme","saveSupplierBillingType","cancelSupplierBillingTypeSave","addNewLicenceCategory","editLicenceCategory","saveLicenceCategory","cancelLicenceCategorySave","addNewLedgerNumber","editLedgerNumber","saveLedgerNumber","cancelLedgerNumberSave","saveAdditionalCharge","cancelAdditionalChargeSave","saveUser","cancelUserSave","addNewVehicleType","editVehicleType","moveVehicleTypeUp","moveVehicleTypeDown","saveVehicleType","vehicleTypesForm","cancelVehicleTypeSave","copyPriceMatrix","savePriceMatrix","cancelPriceMatrixSave","addNewWhitelistedIpAddress","Value1","Value2","Value3","Value4","editWhitelistedIpAddress","whitelistedIpAddressParts","Value","whitelistedIpAddressesForm","cancelWhitelistedIpAddressSave","addNewAreaAdditionalChargeRule","editAreaAdditionalChargeRule","moveAreaAdditionalChargeRuleUp","moveAreaAdditionalChargeRuleDown","saveAreaAdditionalChargeRule","areaAdditionalChargeRulesForm","searchAreaAdditionalCharges","cancelAreaAdditionalChargeRuleSave","getInvoicingRunningEvent","invoicingRunningEvent","EventTypes","ConsignmentInvoicing","DateStarted","invoicingRunningEventText","User","ManifestInvoicing","eventCategoryType","EventCategoryTypes","eventTypes","searchIssues","allConsignmentsSelected","ignoringProfitMargins","creatingInvoices","isoWeekday","b","isValid","dateComparator","localeCompare","momentA","momentB","selectConsignment","_selected","selectAllConsignments","getSelectedConsignmentCount","selectedConsignments","getTotalConsignmentPrice","totalPrice","getTotalSelectedConsignmentPrice","missingPO","confirmInvoice","openInvoiceDateModal","cancelInvoice","consignmentsToInvoice","parentScope","selectedDate","invoice","allManifestsSelected","selectAllManifests","getSelectedManifestCount","selectedManifests","getTotalManifestCost","totalCost","getTotalSelectedManifestCost","manifestsToInvoice","supplierExists","totalDeductionAmount","hasIssues","supplierTotals","SplitXeroInvoices","XeroOrganisation","IsDefault","TotalInvoiceAmount","TotalDeductions","cancelManifestInvoiceIssues","transportExchangePods","transportExchangePodsForApproving","transportExchangePodsForRejecting","approving","rejecting","approveAllTransportExchangePODs","getTransportExchangePodApprovals","goToManifest","addForApproval","readyForRejection","readyForApproval","addForRejection","selectApproveAllTransportExchangePODs","TransportExchangeConsignmentAddresses","approve","export","Consignment Number","Booked","Start Date","Start Postcode","Finish Date","Last Postcode","Number Of Addresses","alasql","sheetid","header","getTotalPrice","getData","Lines","Date","Day","Total Manifests","TotalNumberManifests","getTotalManifests","totalManifests","updateEarnings","Earnings","OverLimit","outstandingBalance","creditLimit","searchUserIpLogs"],"mappings":"AAAAA,QAAQC,OAAO,2BAA2B,EAAEC,IAAI,CAAC,iBAAkB,SAAUC,GACzEA,EAAeC,IAAI,iCAAkC,8tCAA8tC,CACvxC,EAAE;ACFFJ,QAAQC,OAAO,2BAA2B,EAAEC,IAAI,CAAC,iBAAkB,SAAUC,GACzEA,EAAeC,IAAI,iCAAkC,mgEAAmgE,CAC5jE,EAAE;ACFFJ,QAAQC,OAAO,oBAAoB,EAAEC,IAAI,CAAC,iBAAkB,SAAUC,GAClEA,EAAeC,IAAI,mBAAoB,geAAge,CAC3gB,EAAE;ACFFJ,QAAQC,OAAO,wBAAwB,EAAEC,IAAI,CAAC,iBAAkB,SAAUC,GACtEA,EAAeC,IAAI,2BAA4B,kIAAkI,CACrL,EAAE;ACFFJ,QAAQC,OAAO,uBAAuB,EAAEC,IAAI,CAAC,iBAAkB,SAAUC,GACrEA,EAAeC,IAAI,yBAA0B,6tBAA6tB,CAC9wB,EAAE;ACFF,IAAIC,EAAI,KACR,IACIA,EAAIL,QAAQC,OAAO,4BAA4B,CAInD,CAFA,MAAOK,GACHD,EAAIL,QAAQC,OAAO,6BAA8B,EAAE,CACvD,CAEAI,EAAEE,UAAU,0CAA2C,CAAC,iBAAkB,QAAS,SAAU,WAAY,SAAUJ,eAAgBK,MAAOC,OAAQC,UAC9I,MAAO,CACHC,SAAU,IACVC,MAAO,CACHC,eAAgB,IAChBC,SAAU,IACVC,SAAU,IACVC,MAAO,WACPC,SAAU,IACVC,uBAAwB,IACxBC,KAAM,GACV,EACAC,QAAS,UACTC,SAAU,SAAUC,EAAMC,GACtB,IAAIC,EAAmCC,MAApBF,EAAKC,YAA4BD,EAAKC,YAAc,GACnEE,EAA0BD,MAAdF,EAAKI,MAAsBJ,EAAKI,MAAQ,GACpDC,EAAmCH,MAApBF,EAAKK,YAA4BL,EAAKK,YAAc,aACnEC,EAA2CJ,MAAxBF,EAAKM,gBAAgCN,EAAKM,gBAAkB,YAC/EC,EAAwB,CAAA,CAACP,EAA0B,uBAAoC,SAA/BA,EAAKO,sBAC7DC,EAAiC,CAAA,CAACR,EAAmC,gCAA6C,SAAxCA,EAAKQ,+BAC/EC,EAAyBT,EAA0B,uBAAiC,qBACpFU,EAA6BV,EAA8B,2BAAqC,GAQpGW,GAFAA,GAFAA,GADAA,EAFW,IAEH,wCACA,mCAAqCV,EAAc,YAAcE,EAAW,8NAC5E,gEAAkEE,EAAc,UAChF,iFACA,8EACA,gBAWR,OAVIG,IAAgCG,GAAQ,kBAAoBD,EAA4B,gEAAkED,EAAwB,iBAItLE,GAFAA,EADAA,EAAQ,SACA,uLACA,QACA,kLAAoLL,EAAkB,WAC1MC,IAAuBI,GAAQ,8CAAgDD,EAA4B,gEAAkED,EAAwB,YAGzME,GAFAA,GAAQ,SACA,QACA,QAGZ,EACAC,KAAM,SAAUvB,MAAOU,KAAMC,KAAMa,mBAC/BxB,MAAMyB,KAAO,KACbzB,MAAM0B,YAAc,CAAA,EACpB1B,MAAM2B,WAAc3B,MAAU,MAAiB,KAC/CA,MAAM4B,eAAiB,CAAA,EACvB5B,MAAM6B,eAAiB,CAAA,EACvB7B,MAAM8B,SAA6BjB,MAAjBF,KAAKmB,SAAyBnB,KAAKmB,SAAW,EAChE9B,MAAM+B,SAA6BlB,MAAjBF,KAAKoB,SAAyBpB,KAAKoB,SAAW,IAChE/B,MAAMgC,aAAe,KACrBhC,MAAMiC,UAAY,KAClBjC,MAAMkC,eAAiB,KACvBlC,MAAMmC,cAAgB,CAAA,EACtBnC,MAAMoC,sBAAuDvB,MAA9BF,KAAKyB,sBAAsCzB,KAAKyB,sBAAwB,MACvGpC,MAAMkB,sBAAwB,CAAA,CAACP,KAA0B,uBAAoC,SAA/BA,KAAKO,sBACnEmB,KAAO,WACPC,YAAc,CAAA,EAEdd,kBAAkBe,QAAU,WACpBf,kBAAkBgB,aAClBxC,MAAM2B,WAAchB,KAAqB,iBAAI8B,KAAK,iCAAmC9B,KAAK+B,gBAAgB,EAAID,KAAK,iCAAmC9B,KAAKM,eAAe,EAC1KjB,MAAM2C,OAAO,CAAA,CAAI,EACjBnB,kBAAkBoB,aAAa,yBAA0B,CAAA,CAAI,IAG7D5C,MAAM2B,WAAa,GACnB3B,MAAMyB,KAAO,KAErB,EAEAzB,MAAM2C,OAAS,WAEX3C,MAAMgC,aAAe,KACrBhC,MAAMiC,UAAY,KAClBjC,MAAMyB,KAAO,KAGbY,KAAO,WACPC,YAHAtC,MAAMkB,sBAAwB,CAAA,EAI9B,IACI2B,EAAwC,GAApBC,UAAUC,QAAeD,UAAU,GAEvD9C,MAAMG,UAAUH,MAAMG,SAAS,CAAEwB,WAAY3B,MAAM2B,UAAW,CAAC,EAE/D3B,MAAM2B,YAAc3B,MAAM2B,WAAWoB,QAAUC,SAAShD,MAAM8B,QAAQ,GAAK,CAAC9B,MAAMmC,eAC9EnC,MAAMiD,OAAOnD,SAASoD,OAAOlD,MAAMiD,KAAK,EAE5CjD,MAAMiD,MAAQnD,SAAS,WACd+C,IAAkB7C,MAAM0B,YAAc,CAAA,GAEvCf,KAAKwC,IACLvD,MAAMwD,IAAIzC,KAAKwC,IAAM,IAAMnD,MAAM2B,UAAU,EACtC0B,QAAQ,SAAUC,GACXA,IACwB,IAApBA,EAASP,QACT/C,MAAMyB,KAAO,KACbzB,MAAMiC,UAAY,oBAGlBjC,MAAMyB,KAAO6B,EAEjBtD,MAAM0B,YAAc,CAAA,EAE5B,CAAC,EACA6B,MAAM,SAAUD,EAAUE,GAEvBxD,MAAM0B,YAAc,CAAA,EACpB1B,MAAMyB,KAAO,KACbzB,MAAMgC,aAAe,uDACzB,CAAC,EAEAhC,MAAME,UACXF,MAAME,SAAS,CAAEyB,WAAY3B,MAAM2B,UAAW,CAAC,EAC1C8B,KACG,SAAUH,GACFA,IACwB,IAApBA,EAASP,QACT/C,MAAMyB,KAAO,KACbzB,MAAMiC,UAAY,oBAGlBjC,MAAMyB,KAAO6B,EAEjBtD,MAAM0B,YAAc,CAAA,EAK5B,EACA,SAAU4B,EAAUE,GAEhBxD,MAAM0B,YAAc,CAAA,EACpB1B,MAAMyB,KAAO,KACbzB,MAAMgC,aAAe,uDACzB,CACJ,CAEZ,EAAGhC,MAAM+B,QAAQ,GAGjB/B,MAAMyB,KAAO,IAErB,EAEAzB,MAAM0D,SAAW,SAAUC,GAIvB,OAHA3D,MAAMmC,cAAgB,CAAA,EACtBnC,MAAM4B,eAAiB,CAAA,EAEf+B,EAAMC,SACV,KAAK,GACD5D,MAAM6D,WAAW7D,MAAMyB,KAAKzB,MAAMkC,eAAe,EACjD,MACJ,KAAK,GAC2B,GAAxBlC,MAAMkC,gBACNlC,MAAMkC,cAAc,GAExB,MACJ,KAAK,GAC2B,MAAxBlC,MAAMkC,eACNlC,MAAMkC,eAAiB,EAGnBlC,MAAMkC,eAAiBlC,MAAMyB,KAAKsB,QAClC/C,MAAMkC,cAAc,GAG5B,MACJ,QACIlC,MAAMI,MAAQ,IAEtB,CAEAuD,EAAMG,gBAAgB,CAC1B,EAEA9D,MAAM+D,MAAQ,SAAUJ,GAChB3D,MAAMyB,KACNzB,MAAM4B,eAAiB,CAAA,EAElBU,cACLtC,MAAMiC,UAAY,oBAGtB0B,EAAMG,gBAAgB,CAC1B,EAEAtC,kBAAkBoB,aAAa,yBAA0B,CAAA,CAAK,EAE9D5C,MAAMgE,cAAgB,WAClBhE,MAAMkC,eAAiB,IAC3B,EAEAlC,MAAM6D,WAAa,SAAUI,MACzBnE,SAAS,WAEL0B,kBAAkBoB,aAAa,yBAA0B,CAAA,CAAI,EAE7D5C,MAAM2B,WAAchB,KAAqB,iBAAI8B,KAAK,QAAU9B,KAAK+B,gBAAgB,EAAID,KAAK,QAAU9B,KAAKM,eAAe,EAExHjB,MAAM4B,eAAiB,CAAA,EACvB5B,MAAM6B,eAAiB,CAAA,EACvB7B,MAAMmC,cAAgB,CAAA,EACtBG,YAAc,CAAA,EAEdtC,MAAMC,eAAe,CAAEgE,KAAMA,KAAM5B,KAAMA,IAAK,CAAC,CACnD,CAAC,CACL,EAEArC,MAAMkE,gBAAkB,SAAUvC,EAAYgC,GACP,OAA/B3D,MAAMoC,uBAAgCuB,EAAMG,gBAAgB,EAEhEhE,SAAS,WACAE,MAAMM,uBAKwB,OAA/BN,MAAMoC,uBACNpC,MAAM4B,eAAiB,CAAA,EACvB5B,MAAM6B,eAAiB,CAAA,EACvB7B,MAAMiC,UAAY,CAAA,EAClBjC,MAAMmC,cAAgB,CAAA,EAEtBnC,MAAMM,uBAAuB,CAAEqB,WAAYA,CAAW,CAAC,IAGvD3B,MAAMyB,KAAO,KACbzB,MAAM0B,YAAc,CAAA,EACpBW,KAAO,WAEPrC,MAAMM,uBAAuB,CAAEqB,WAAY3B,MAAM2B,UAAW,CAAC,EACxD8B,KACG,SAAUH,GACFA,IACwB,IAApBA,EAASP,QACT/C,MAAMyB,KAAO,KACbzB,MAAMiC,UAAY,oBAGlBjC,MAAMyB,KAAO6B,EAEjBtD,MAAM0B,YAAc,CAAA,EACpB1B,MAAMkB,sBAAwB,CAAA,EAEtC,EACA,SAAUoC,EAAUE,GAEhBxD,MAAM0B,YAAc,CAAA,EACpB1B,MAAMyB,KAAO,KACbzB,MAAMgC,aAAe,uDACzB,CACJ,GAtCJmC,QAAQC,IAAI,sCAAsC,CAwC1D,CAAC,CACL,EAEApE,MAAMqE,IAAI,qBAAsB,WAC5BvE,SAAS,WACLY,KAAK,GAAG4D,SAAS,GAAGA,SAAS,GAAGC,MAAM,EACtC7D,KAAK,GAAG4D,SAAS,GAAGA,SAAS,GAAGE,OAAO,CAC3C,CAAC,CACL,CAAC,EAEDC,SAASC,iBAAiB,QAAS,WAC/B5E,SAAS,WAELE,MAAM4B,eAAiB,CAAA,EACvB5B,MAAM6B,eAAiB,CAAA,EACvB7B,MAAMiC,UAAY,CAAA,CACtB,CAAC,CACL,CAAC,CACL,CACJ,CACJ,EAAE;AC1RF,IAAIxC,EAAI,KACR,IACIA,EAAIL,QAAQC,OAAO,4BAA4B,CAInD,CAFA,MAAOK,GACHD,EAAIL,QAAQC,OAAO,6BAA8B,EAAE,CACvD,CAEAI,EAAEE,UAAU,cAAe,CAAC,iBAAkB,QAAS,SAAU,YAAa,WAAY,SAAUJ,eAAgBK,MAAOC,OAAQ8E,UAAW7E,UAC1I,MAAO,CACHC,SAAU,IACVC,MAAO,CACH4E,MAAO,IACPC,IAAK,IACLC,cAAe,WACf3E,SAAU,GACd,EACAK,QAAS,UACTC,SAAU,SAAUC,EAAMC,GACtB,IAGIW,EAAO,GAcX,OAZAA,GAAQ,yCACA,2DANsBT,MAAdF,EAAKI,MAAsBJ,EAAKI,MAAQ,IAMuB,8BACvE,iEAN+BF,MAApBF,EAAKK,YAA4BL,EAAKK,YAAc,cAMiB,UAChF,gFACA,+EACA,oDACA,QACA,uHAVuCH,MAAxBF,EAAKM,gBAAgCN,EAAKM,gBAAkB,aAU+D,WAC1I,QACA,SACA,QAGZ,EACAM,KAAM,SAAUvB,MAAOU,KAAMC,KAAMa,mBAmH/B,SAASuD,wBACL,GAAI/E,MAAM8E,cACN,OAAQ9E,MAAM8E,cAAc/B,QACxB,KAAK,EACD/C,MAAMgF,kBAAyCnE,MAApBF,KAAKsE,YAA4BtE,KAAKsE,YAAc,GAC/E,MACJ,KAAK,EACDjF,MAAMgF,kBAAoBvC,KAAK,0BAA4BzC,MAAMiB,eAAe,EAChF,MACJ,QACIjB,MAAMgF,kBAAoBvC,KAAK,0BAA4BzC,MAAMiB,eAAe,EAAI,MAAQjB,MAAM8E,cAAc/B,OAAS,GAAK,UAEtI,MAGA/C,MAAMgF,kBAAoB,EAElC,CAnIAhF,MAAM0B,YAAc,CAAA,EACpB1B,MAAM2B,WAAa,KACnB3B,MAAMkF,MAAQxE,KAAKyE,KAAK,WAAW,EACnCnF,MAAM4B,eAAiB,CAAA,EACvB5B,MAAM6B,eAAiB,CAAA,EACvB7B,MAAM8B,SAA6BjB,MAAjBF,KAAKmB,SAAyBnB,KAAKmB,SAAW,EAChE9B,MAAMgC,aAAe,KACrBhC,MAAMiC,UAAY,KAClBjC,MAAMkC,eAAiB,KACvBlC,MAAMoF,KAAO,CAAA,EACbpF,MAAMgF,kBAAoB,GAC1BhF,MAAM6E,IAAMlE,KAAKkE,IACjB7E,MAAMiB,gBAAkBN,KAAKM,gBAE7B0D,UAAUU,GAAG,QAAS,WAClBrF,MAAMoF,KAAO,CAAA,EACbpF,MAAMsF,OAAO,CACjB,CAAC,EAED5E,KAAK2E,GAAG,QAAS,SAAU3F,GACvBM,MAAMoF,KAAO,CAACpF,MAAMoF,KACpB1F,EAAEoE,gBAAgB,EAClB9D,MAAMsF,OAAO,CACjB,CAAC,EAEDtF,MAAM2C,OAAS,WACX3C,MAAMgC,aAAe,KACrBhC,MAAMiC,UAAY,KAEdjC,MAAM2B,WAAWoB,QAAUC,SAAShD,MAAM8B,QAAQ,GAClD9B,MAAM0B,YAAc,CAAA,EAEpB9B,MAAMwD,IAAIzC,KAAKwC,IAAM,IAAMnD,MAAM2B,UAAU,EACtC0B,QAAQ,SAAUC,GACQ,GAAnBA,EAASP,QACT/C,MAAMyB,KAAO,KACbzB,MAAMiC,UAAY,oBAGlBjC,MAAMyB,KAAO6B,EAEjBtD,MAAM0B,YAAc,CAAA,CACxB,CAAC,EACA6B,MAAM,SAAUD,EAAUE,GAEvBxD,MAAM0B,YAAc,CAAA,EACpB1B,MAAMyB,KAAO,KACbzB,MAAMgC,aAAe,uDACzB,CAAC,GAGLhC,MAAMyB,KAAO,IAErB,EAEAzB,MAAM0D,SAAW,SAAUC,GACvB,OAAQA,EAAMC,SACV,KAAK,GACD5D,MAAM6D,WAAW7D,MAAMyB,KAAKzB,MAAMkC,eAAe,EACjD,MACJ,KAAK,GAC2B,GAAxBlC,MAAMkC,gBACNlC,MAAMkC,cAAc,GAExB,MACJ,KAAK,GAC2B,MAAxBlC,MAAMkC,eACNlC,MAAMkC,eAAiB,EAGnBlC,MAAMkC,eAAiBlC,MAAMyB,KAAKsB,QAClC/C,MAAMkC,cAAc,EAIpC,CAEJ,EAEAlC,MAAMuF,WAAa,SAAUtB,MACzB,IAAIuB,aAAe,CAAA,EAWnB,OATApG,QAAQqG,QAAQzF,MAAM8E,cAAe,SAAUY,MAAOb,KAClD,GAAIpC,KAAK,SAAWzC,MAAM6E,GAAG,GAAKpC,KAAK,QAAUzC,MAAM6E,GAAG,EAEtD,OADAW,aAAe,CAAA,EACR,CAAA,CAEf,CAAC,EAEDT,sBAAsB,EAEfS,YACX,EAEAxF,MAAM6D,WAAa,SAAUI,KAAMvE,GAC/BA,EAAEoE,gBAAgB,EACb9D,MAAM8E,gBAAe9E,MAAM8E,cAAgB,IAChD,IAAIa,oBAAsB,CAAA,EAE1BvG,QAAQqG,QAAQzF,MAAM8E,cAAe,SAAUY,MAAOb,KAClD,GAAIpC,KAAK,SAAWzC,MAAM6E,GAAG,GAAKpC,KAAK,QAAUzC,MAAM6E,GAAG,EAGtD,OAFA7E,MAAM8E,cAAcc,OAAOf,IAAK,CAAC,EACjCc,oBAAsB,CAAA,EACf,CAAA,CAEf,CAAC,EAEIA,qBAAqB3F,MAAM8E,cAAce,KAAK5B,IAAI,EAEvDjE,MAAMG,SAAS,EAEf4E,sBAAsB,CAC1B,EAqBAA,sBAAsB,CAC1B,CACJ,CACJ,EAAE;AC/KF,IAAItF,EAAI,KACR,IACIA,EAAIL,QAAQC,OAAO,4BAA4B,CAInD,CAFA,MAAOK,GACHD,EAAIL,QAAQC,OAAO,6BAA8B,EAAE,CACvD,CAEAI,EAAEE,UAAU,eAAgB,CAAC,iBAAkB,SAAUJ,GACrD,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTe,KAAM,SAAUvB,EAAOU,EAAMC,EAAMa,GAC/B,IACmBsE,OAAO,CAI1B,CAFA,MAAOvC,GACH,KAAM,wGACV,CAEA7C,EAAKqF,KAAK,uBAAwB,SAAUrG,GACxC,IAAIsG,EAAcrF,EAAKqF,YACnBC,EAAetF,EAAKuF,WAEpBxF,EAAKyF,IAAI,EAAEpD,QAAUiD,EAAYjD,QACjC/C,EAAMsF,OAAO,WACT,IAAIc,EAAW1F,EAAKyF,IAAI,EAAEE,OAAOL,EAAYM,QAAQ,IAAI,EAAG,CAAC,EACzDC,EAAY7F,EAAKyF,IAAI,EAAEE,OAAOL,EAAYM,QAAQ,IAAI,EAAG,CAAC,EAC1DE,EAA2C,GAA/BR,EAAYM,QAAQ,MAAM,EAAU5F,EAAKyF,IAAI,EAAEE,OAAOL,EAAYM,QAAQ,MAAM,EAAG,CAAC,EAAI,KAAO5F,EAAKyF,IAAI,EAAEE,OAAOL,EAAYM,QAAQ,IAAI,EAAG,CAAC,EAEzJG,EAAOX,OAAO,EAClBW,EAAKC,KAAKF,CAAQ,EAAEG,MAAMJ,CAAS,EAAEE,KAAKL,CAAQ,EAElD5E,EAAkBgB,YAAciE,EAAKG,OAAO,EAC5CpF,EAAkBqF,cAAcJ,EAAKK,OAAOb,EAAac,YAAY,CAAC,CAAC,EACvEvF,EAAkBe,QAAQ,CAC9B,CAAC,CAET,CAAC,CACL,CACJ,CACJ,EAAE;ACzCF,IAAI9C,EAAI,KACR,IACIA,EAAIL,QAAQC,OAAO,4BAA4B,CAInD,CAFA,MAAOK,GACHD,EAAIL,QAAQC,OAAO,6BAA8B,EAAE,CACvD,CAEAI,EAAEE,UAAU,eAAgB,CAAC,iBAAkB,SAAUJ,GACrD,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTe,KAAM,SAAUvB,EAAOU,EAAMC,EAAMa,GAC/B,IACmBsE,OAAO,CAI1B,CAFA,MAAOvC,GACH,KAAM,wGACV,CAEA7C,EAAKqF,KAAK,uBAAwB,SAAUrG,GACxC,IAAIsG,EAAcrF,EAAKqF,YACnBC,EAAetF,EAAKqG,WAEpBtG,EAAKyF,IAAI,EAAEpD,QAAUiD,EAAYjD,QACjC/C,EAAMsF,OAAO,WACT,IAAI2B,EAAWvG,EAAKyF,IAAI,EAAEE,OAAOL,EAAYM,QAAQ,IAAI,EAAG,CAAC,EACzDY,EAAaxG,EAAKyF,IAAI,EAAEE,OAAOL,EAAYM,QAAQ,IAAI,EAAG,CAAC,EAE3DG,EAAOX,OAAO,EAClBW,EAAKU,KAAKF,CAAQ,EAAEG,OAAOF,CAAU,EAErC1F,EAAkBgB,YAAciE,EAAKG,OAAO,EAC5CpF,EAAkBqF,cAAcJ,EAAKK,OAAOb,CAAY,CAAC,EACzDzE,EAAkBe,QAAQ,CAC9B,CAAC,CAET,CAAC,CACL,CACJ,CACJ,EAAE;ACxCF,IAAI9C,EAAI,KACR,IACIA,EAAIL,QAAQC,OAAO,4BAA4B,CAInD,CAFA,MAAOK,GACHD,EAAIL,QAAQC,OAAO,6BAA8B,EAAE,CACvD,CAEAI,EAAEE,UAAU,oBAAqB,CAAC,iBAAkB,SAAUJ,GAC1D,MAAO,CACHQ,SAAU,IACVsH,SAAU,CAAC,GACX9F,KAAM,SAAUvB,EAAOsH,EAASC,EAAOC,GACnCF,EAAQvB,KAAK,QAAS,WAClB,IAAI0B,EAAmBC,EAAE,sBAAsB,EAE/C,GAAID,EAAiB1E,OACjB,IAAK,IAAI4E,EAAI,EAAGA,EAAIF,EAAiB1E,OAAQ4E,CAAC,GAAI,CAC9C,IAAIL,EAAUI,EAAED,EAAiBE,EAAE,EAE/BL,EAAQM,GAAG,OAAO,IAIlBN,EAAQO,QAAQ,OAAO,EACvBP,EAAQO,QAAQ,QAAQ,EAEhC,CAER,CAAC,CACL,CACJ,CACJ,EAAE;AChCF,IAAIC,iBAAmB,CACnB,CAAEC,KAAQ,QAAS5E,IAAO,IAAK6E,KAAQ,4BAA6B,EACpE,CAAED,KAAQ,iBAAkB5E,IAAO,mBAAoB6E,KAAQ,8CAA+C,EAC9G,CAAED,KAAQ,MAAO5E,IAAO,QAAS6E,KAAQ,wBAAyB,EAClE,CAAED,KAAQ,cAAe5E,IAAO,mBAAoB6E,KAAQ,yCAA0C,EACtG,CAAED,KAAQ,WAAY5E,IAAO,gBAAiB6E,KAAQ,mCAAoC,EAC1F,CAAED,KAAQ,YAAa5E,IAAO,cAAe6E,KAAQ,oCAAqC,EAC1F,CAAED,KAAQ,YAAa5E,IAAO,cAAe6E,KAAQ,oCAAqC,EAC1F,CAAED,KAAQ,WAAY5E,IAAO,aAAc6E,KAAQ,kCAAmC,EACtF,CAAED,KAAQ,UAAW5E,IAAO,YAAa6E,KAAQ,gCAAiC,EAClF,CAAED,KAAQ,WAAY5E,IAAO,aAAc6E,KAAQ,kCAAmC,EACtF,CAAED,KAAQ,UAAW5E,IAAO,YAAa6E,KAAQ,gCAAiC;CCXrF,KAKG,SAASC,EAAOC,EAAcC,EAAmBC,EAAkBC,GAC/DH,EAAaI,UAAU,GAAG,EAE1BH,EAAkBI,UAAU,CACxBC,QAAS,CAAA,EACTC,YAAa,CAAA,CACjB,CAAC,EAEDN,EAAkBO,WAAW,GAAG,EAEhCN,EAAiBO,gBAAgB,SAAS,EAE1CN,EAAcO,aAAa/C,KAAK,qCAAqC,EACrEwC,EAAcO,aAAa/C,KAAK,gCAAgC,EAEhEC,OAAO+C,GAAGC,OAAS,WAAc,OAAOC,KAAKjC,OAAO,CAAG,CAC3D,CAIA,SAASxH,EAAI0J,GACTC,UAAUC,OAAOzE,SAAS0E,IAAI,EAE9BH,EAAW3E,IAAI,gBAAiB,SAAUV,EAAOyF,GAC7CJ,EAAWK,UAAY,SAAWD,CACtC,CAAC,CACL,CA5BAnB,EAAOqB,QAAU,CAAC,qBAAsB,oBAAqB,mBAAoB,iBAoBjFhK,EAAIgK,QAAU,CAAC,cAUflK,QAAQC,OAAO,cAAe,CAC1B,YAAa,YACb,YACA,aACA,aACA,4BACA,uCACA,sCACA,YACA,cACA,SACA,QACA,OACA,iBACA,MACA,eACA,YACA,YACA,YACA,WACA,WACA,UACH,EAAE4I,OAAOA,CAAM,EAAE3I,IAAIA,CAAG,CAC7B,GAAE;ACxDF,IAAIiK,OAASnK,QAAQC,OAAO,SAAU,EAAE;ACAxC,IAAImK,MAAQpK,QAAQC,OAAO,QAAS,EAAE;ACAtC,IAAIoK,KAAOrK,QAAQC,OAAO,OAAQ,CAAC,kBAAmB,uBAAwB,6BAA6B;ACA3G,IAAIqK,QAAUtK,QAAQC,OAAO,UAAW,CAAC,kBAAkB;ACA3D,IAAIsK,eAAiBvK,QAAQC,OAAO,iBAAkB,CAAC,gBAAiB,iBAAiB;ACAzF,IAAIuK,IAAMxK,QAAQC,OAAO,MAAO,CAAC,gBAAiB,iBAAiB;ACAnE,IAAIwK,aAAezK,QAAQC,OAAO,eAAgB,CAAC,iBAAkB,gBAAiB,kBAAmB,mBAAmB;ACA5H,IAAIyK,UAAY1K,QAAQC,OAAO,YAAa,CAAC,aAAa;ACA1D,IAAI0K,UAAY3K,QAAQC,OAAO,YAAa,CAAC,kBAAmB,uBAAwB,6BAA6B;ACArH,IAAI2K,UAAY5K,QAAQC,OAAO,YAAa,CAAC,kBAAmB,uBAAwB,6BAA6B;ACArH,IAAI4K,SAAW7K,QAAQC,OAAO,WAAY,CAAC,kBAAmB,uBAAuB;ACArF,IAAI6K,SAAW9K,QAAQC,OAAO,WAAY,CAAC,gBAAiB,iBAAiB;ACA7E,IAAI8K,QAAU/K,QAAQC,OAAO,UAAW,CAAC,kBAAkB;ACA3DoK,KAAK9J,UAAU,WAAY,CAAC,iBAAkB,SAAUJ,GACpD,MAAO,CACHQ,SAAU,IACVU,SAAUlB,EAAe6D,IAAI,gBAAgB,CACjD,CACJ,EAAE;ACLFmG,OAAO5J,UAAU,yBAA0B,CAAC,iBAAkB,SAAUJ,GACpE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,mCAAmC,CACpE,CACJ,EAAE;ACNFmG,OAAO5J,UAAU,4BAA6B,CAAC,iBAAkB,SAAUJ,GACvE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,sCAAsC,CACvE,CACJ,EAAE;ACNFmG,OAAO5J,UAAU,4BAA6B,CAAC,iBAAkB,SAAUJ,GACvE,MAAO,CACHQ,SAAU,IAEVU,SAAUlB,EAAe6D,IAAI,sCAAsC,CACvE,CACJ,EAAE;ACNFmG,OAAO5J,UAAU,qBAAsB,CAAC,iBAAkB,SAAUJ,GAChE,MAAO,CACHQ,SAAU,IAEVU,SAAUlB,EAAe6D,IAAI,8BAA8B,CAC/D,CACJ,EAAE;ACNFmG,OAAO5J,UAAU,0BAA2B,CAAC,iBAAkB,SAAUJ,GACrE,MAAO,CACHQ,SAAU,IACVC,MAAO,CACHoK,iBAAkB,IAClBC,eAAgB,GACpB,EACA7J,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,qCAAqC,CACtE,CACJ,EAAE;ACVFmG,OAAO5J,UAAU,qBAAsB,CAAC,iBAAkB,SAAUJ,GAChE,OAAO,SAAUS,EAAOsK,EAAI/C,GACxB+C,EAAGvE,KAAK,UAAW,SAAUpC,GACzB,GAAI,IAAMA,EAAM4G,MAIZ,OAHA5G,EAAM6G,eAAe,EACrBC,OAAOC,KAAK,EACZjG,SAASkG,YAAY,MAAM,EACpB,CAAA,CAEf,CAAC,CACL,CACJ,EAAE;ACXFpB,OAAO5J,UAAU,aAAc,CAAC,iBAAkB,SAAUJ,GACxD,MAAO,CACHiB,QAAS,UACTe,KAAM,SAAUvB,EAAOsH,EAASC,EAAOqD,GAClB,SAAbC,EAAuBC,GAEvB,IAAIC,GADyBD,EAAXjK,MAAdiK,EAAsC,GACxBA,GAAW/D,YAAY,EAKzC,OAJIgE,IAAgBD,IAChBF,EAAU/D,cAAckE,CAAW,EACnCH,EAAUrI,QAAQ,GAEfwI,CACX,CACAH,EAAUI,SAASnF,KAAKgF,CAAU,EAClCA,EAAW7K,EAAMuH,EAAM0D,QAAQ,CACnC,CACJ,CACJ,EAAE;ACjBF1B,OAAO5J,UAAU,gBAAiB,CAAC,iBAAkB,SAAUJ,GAC3D,MAAO,CACHQ,SAAU,IACVwB,KAAM,SAAU2J,EAAQC,EAAUC,GAM9B,SAASC,IACL,IALIC,EAAUJ,EAAOC,EAASxK,KAAK,MAAM,KACD,CAAA,IAAtB2K,EAAQC,UAKtB,MAAO,sEAPf,IACQD,CAQR,CAEA5D,EAAE+C,MAAM,EAAE1E,KAAK,eAAgBsF,CAAgB,EAE/CF,EAASpF,KAAK,WAAY,WACtB0E,OAAOe,oBAAoB,eAAgBH,CAAgB,CAC/D,CAAC,EAEDH,EAAO7G,IAAI,oBAAqB,SAAUV,GACtC,IAAI8H,EAASJ,EAAiB,EACzB1H,EAAM+H,kBAAoBD,CAAAA,GAAWE,QAAQF,CAAM,GACpD9H,EAAM6G,eAAe,CAE7B,CAAC,CACL,CACJ,CACJ,EAAE;AC7BFjB,OACK5J,UAAU,uBAAwB,CAAC,iBAAkB,SAAUJ,GAC5D,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,iCAAiC,EAC9DwI,WAAY,sBACZC,aAAc,MAClB,CACJ,EAAE,EACDD,WAAW,sBAAuB,CAAC,SAAU,gBAAiB,cAAe,oBAAqB,SAAUE,EAAQC,EAAeC,EAAaC,GACpIlD,KAENmD,GAEH,WACIF,EAAYG,OAAO,EACd1I,KACG,WACIwI,EAAkBG,MAAM,cAAc,EAEtCN,EAAOO,GAAG,OAAO,CACrB,EACA,WACIJ,EAAkBG,MAAM,cAAc,EAEtCN,EAAOO,GAAG,OAAO,CACrB,CACJ,CAGR,CACJ,EAAE;AChCN9C,OACK5J,UAAU,mBAAoB,CAAC,iBAAkB,oBAAqB,SAAUJ,EAAgB0M,GAC7F,MAAO,CACHlM,SAAU,KACVU,SAAUlB,EAAe6D,IAAI,4BAA4B,EACzDkJ,WAAY,CAAA,EACZ/K,KAAM,SAAU2J,EAAQC,EAAUC,GAE9B,IAiBImB,EAjBCnB,EAAOoB,IAMZrB,EAASsB,SAAS,MAAM,EAWpBF,EAAQ,CACRC,GAAIpB,EAAOoB,GACXE,KAYJ,WACIvB,EAAS/F,KAAK,EACdsC,EAAE,MAAM,EAAEiF,SAAS,YAAY,CACnC,EAdIP,MAiBJ,WACIjB,EAASyB,KAAK,EACdlF,EAAE,MAAM,EAAEmF,YAAY,YAAY,CACtC,CAnBA,EACAZ,EAAkBa,IAAIP,CAAK,EAG3BrB,EAAO7G,IAAI,WAAY,WACnB4H,EAAkBc,OAAO3B,EAAOoB,EAAE,EAClCrB,EAAS4B,OAAO,CACpB,CAAC,GA3BG5I,QAAQZ,MAAM,uBAAuB,CAwCtD,CACK,CACJ,EAAE,EACDyJ,QAAQ,oBAAqB,WAC1B,IAAIC,EAAS,GACTC,EAAU,CAEdJ,IAOA,SAAaP,GAETU,EAAOpH,KAAK0G,CAAK,CACrB,EATAQ,OAWA,SAAgBP,GAERW,EAAgBC,EAAEC,UAAUJ,EAAQ,CAAET,GAAIA,CAAG,CAAC,EAClDS,EAASG,EAAEE,QAAQL,EAAQE,CAAa,CAC5C,EAdAT,KAgBA,SAAcF,GAEEY,EAAEC,UAAUJ,EAAQ,CAAET,GAAIA,CAAG,CAAC,EACpCE,KAAK,CACf,EAnBAN,MAqBA,SAAeI,GAECY,EAAEC,UAAUJ,EAAQ,CAAET,GAAIA,CAAG,CAAC,EACpCJ,MAAM,CAChB,CA9Be,EAOf,OAAOc,CAwBX,CAAC;ACrFLpD,UAAUnK,UAAU,2CAA4C,CAAC,iBAAkB,SAAUJ,GACzF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,uDAAuD,CACxF,CACJ,EAAE;ACNF0G,UAAUnK,UAAU,+CAAgD,CAAC,iBAAkB,SAAUJ,GAC7F,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,2DAA2D,CAC5F,CACJ,EAAE;ACNFmG,OAAO5J,UAAU,cAAe,CAAC,iBAAkB,SAAU,SAAUJ,EAAgBM,GACnF,MAAO,CAGHW,QAAS,OAETe,KAAM,SAAUvB,EAAOsH,EAASC,EAAOgG,GACnCA,EAAKC,WAAa,CAAA,EAElB,IAAI3E,EAAKhJ,EAAO0H,EAAMkG,WAAW,EAGjCnG,EAAQjC,GAAG,SAAU,SAAU1B,GAC3B3D,EAAMsF,OAAO,WAGTiI,EAAKC,WAAa,CAAA,EAEdD,EAAKG,SACL7E,EAAG7I,EAAO,CAAE2N,OAAQhK,CAAM,CAAC,EAC3B4J,EAAKC,WAAa,CAAA,EAE1B,CAAC,CACL,CAAC,CACL,CACJ,CACJ,EAAE;AC1BF7D,eAAehK,UAAU,iCAAkC,CAAC,iBAAkB,SAAUJ,GACpF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,2CAA2C,CAC5E,CACJ,EAAE;ACNFuG,eAAehK,UAAU,8BAA+B,CAAC,iBAAkB,SAAUJ,GACjF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,wCAAwC,CACzE,CACJ,EAAE;ACNFyG,aAAalK,UAAU,sCAAuC,CAAC,iBAAkB,SAAUJ,GACvF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,gDAAgD,CACjF,CACJ,EAAE;ACNFyG,aAAalK,UAAU,0CAA2C,CAAC,iBAAkB,SAAUJ,GAC3F,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,qDAAqD,CACtF,CACJ,EAAE;ACNFyG,aAAalK,UAAU,sCAAuC,CAAC,iBAAkB,SAAUJ,GACvF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,gDAAgD,CACjF,CACJ,EAAE;ACNFyG,aAAalK,UAAU,6CAA8C,CAAC,iBAAkB,WAAY,SAAUJ,EAAgBO,GAC1H,MAAO,CACHC,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,wDAAwD,CAyDzF,CACJ,EAAE;AC9DFyG,aAAalK,UAAU,qDAAsD,CAAC,iBAAkB,SAAUJ,GACtG,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,kEAAkE,CACnG,CACJ,EAAE;ACNFyG,aAAalK,UAAU,2DAA4D,CAAC,iBAAkB,SAAUJ,GAC5G,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,wEAAwE,CACzG,CACJ,EAAE;ACNFyG,aAAalK,UAAU,yDAA0D,CAAC,iBAAkB,SAAUJ,GAC1G,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,sEAAsE,CACvG,CACJ,EAAE;ACNFyG,aAAalK,UAAU,2DAA4D,CAAC,iBAAkB,SAAUJ,GAC5G,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,wEAAwE,CACzG,CACJ,EAAE;ACNFyG,aAAalK,UAAU,sDAAuD,CAAC,iBAAkB,SAAUJ,GACvG,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,kEAAkE,CACnG,CACJ,EAAE;ACNFyG,aAAalK,UAAU,gDAAiD,CAAC,iBAAkB,SAAUJ,GACjG,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,2DAA2D,CAC5F,CACJ,EAAE;ACNFyG,aAAalK,UAAU,2CAA4C,CAAC,iBAAkB,SAAUJ,GAC5F,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,qDAAqD,CACtF,CACJ,EAAE;ACNFyG,aAAalK,UAAU,wCAAyC,CAAC,iBAAkB,SAAUJ,GACzF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,kDAAkD,CACnF,CACJ,EAAE;ACNFyG,aAAalK,UAAU,wDAAyD,CAAC,iBAAkB,SAAUJ,GACzG,MAAO,CACHQ,SAAU,IACVC,MAAM,CACF4N,SAAU,IACVC,YAAa,IACbC,sBAAuB,IACvBC,4BAA6B,IAC7BC,+CAAgD,GACpD,EACAxN,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,oEAAoE,CACrG,CACJ,EAAE;ACbFyG,aAAalK,UAAU,wCAAyC,CAAC,iBAAkB,SAAUJ,GACzF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,mDAAmD,CACpF,CACJ,EAAE;ACNFyG,aAAalK,UAAU,iDAAkD,CAAC,iBAAkB,SAAUJ,GAClG,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,4DAA4D,CAC7F,CACJ,EAAE;ACNFyG,aAAalK,UAAU,4CAA6C,CAAC,iBAAkB,SAAUJ,GAC7F,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,uDAAuD,CACxF,CACJ,EAAE;ACNFyG,aAAalK,UAAU,+CAAgD,CAAC,iBAAkB,SAAUJ,GAChG,MAAO,CACHQ,SAAU,IACVU,SAAUlB,EAAe6D,IAAI,0DAA0D,CAC3F,CACJ,EAAE;ACLF2G,UAAUpK,UAAU,6BAA8B,CAAC,iBAAkB,SAAUJ,GACvE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,uCAAuC,CACxE,CACJ,EAAE;ACNN2G,UAAUpK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC1E,MAAO,CACHQ,SAAU,IACVC,MAAO,CACH4N,SAAU,IACV7D,UAAW,IACXkE,UAAW,IACXC,kBAAmB,GACvB,EACAzN,SAAUlB,EAAe6D,IAAI,0CAA0C,EACvE7B,KAAM,SAAUvB,EAAOU,EAAMC,EAAMa,GAC/BxB,EAAMmO,UAAY,WACdnO,EAAM4N,SAASQ,SAAWpO,EAAM4N,SAASS,OAAOC,EACpD,CACJ,CACJ,CACJ,EAAE;AChBNvE,UAAUpK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC9E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,0CAA0C,CAC3E,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,iCAAkC,CAAC,iBAAkB,SAAUJ,GAC/E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,4CAA4C,CAC7E,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,6BAA8B,CAAC,iBAAkB,SAAUJ,GAC3E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,uCAAuC,CACxE,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC9E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,0CAA0C,CAC3E,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,6CAA8C,CAAC,iBAAkB,SAAUJ,GAC3F,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,yDAAyD,CAC1F,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,iDAAkD,CAAC,iBAAkB,SAAUJ,GAC/F,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,8DAA8D,CAC/F,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVC,MAAO,CACH4N,SAAU,IACVW,qBAAsB,IACtBC,cAAe,IACfC,SAAU,GACd,EACAhO,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACXF2G,UAAUpK,UAAU,wCAAyC,CAAC,iBAAkB,SAAUJ,GACtF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,mDAAmD,CACpF,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,kDAAmD,CAAC,iBAAkB,SAAUJ,GAChG,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,8DAA8D,CAC/F,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,mDAAoD,CAAC,iBAAkB,SAAUJ,GACjG,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+DAA+D,CAChG,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,6BAA8B,CAAC,iBAAkB,SAAUJ,GAC3E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,uCAAuC,CACxE,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC9E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,0CAA0C,CAC3E,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC9E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,0CAA0C,CAC3E,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,kCAAmC,CAAC,iBAAkB,SAAUJ,GAChF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,4CAA4C,CAC7E,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC9E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,0CAA0C,CAC3E,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,uCAAwC,CAAC,iBAAkB,SAAUJ,GACrF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,kDAAkD,CACnF,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,kCAAmC,CAAC,iBAAkB,SAAUJ,GAChF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,4CAA4C,CAC7E,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,kCAAmC,CAAC,iBAAkB,SAAUJ,GAChF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,6CAA6C,CAC9E,CACJ,EAAE;ACNF4G,UAAUrK,UAAU,8BAA+B,CAAC,iBAAkB,SAAUJ,GAC5E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,wCAAwC,CACzE,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,8BAA+B,CAAC,iBAAkB,SAAUJ,GAC5E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,wCAAwC,CACzE,CACJ,EAAE;ACNF6G,SAAStK,UAAU,2BAA4B,CAAC,iBAAkB,SAAUJ,GACxE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,sCAAsC,CACvE,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,uBAAwB,CAAC,iBAAkB,SAAUJ,GACrE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,iCAAiC,CAClE,CACJ,EAAE;ACNF6G,SAAStK,UAAU,4BAA6B,CAAC,iBAAkB,SAAUJ,GACzE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,sCAAsC,CACvE,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,wBAAyB,CAAC,iBAAkB,SAAUJ,GACtE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,iCAAiC,CAClE,CACJ,EAAE;ACNF6G,SAAStK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC7E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,2CAA2C,CAC5E,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,4BAA6B,CAAC,iBAAkB,SAAUJ,GAC1E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,sCAAsC,CACvE,CACJ,EAAE;ACNF6G,SAAStK,UAAU,mCAAoC,CAAC,iBAAkB,SAAUJ,GAChF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,8CAA8C,CAC/E,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,+BAAgC,CAAC,iBAAkB,SAAUJ,GAC7E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,yCAAyC,CAC1E,CACJ,EAAE;ACNF6G,SAAStK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC7E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,2CAA2C,CAC5E,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,4BAA6B,CAAC,iBAAkB,SAAUJ,GAC1E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,sCAAsC,CACvE,CACJ,EAAE;ACNF6G,SAAStK,UAAU,wBAAyB,CAAC,iBAAkB,SAAUJ,GACrE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,kCAAkC,CACnE,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,oBAAqB,CAAC,iBAAkB,SAAUJ,GAClE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,6BAA6B,CAC9D,CACJ,EAAE;ACNF6G,SAAStK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GACjF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF6G,SAAStK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC7E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,0CAA0C,CAC3E,CACJ,EAAE;ACNF6G,SAAStK,UAAU,+BAAgC,CAAC,iBAAkB,SAAUJ,GAC5E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,0CAA0C,CAC3E,CACJ,EAAE;ACNF6G,SAAStK,UAAU,2BAA4B,CAAC,iBAAkB,SAAUJ,GACxE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,qCAAqC,CACtE,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,2BAA4B,CAAC,iBAAkB,SAAUJ,GACzE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,qCAAqC,CACtE,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,wCAAyC,CAAC,iBAAkB,SAAUJ,GACtF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,oDAAoD,CACrF,CACJ,EAAE;ACNF6G,SAAStK,UAAU,wCAAyC,CAAC,iBAAkB,SAAUJ,GACrF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,oDAAoD,CACrF,CACJ,EAAE;ACNF6G,SAAStK,UAAU,oCAAqC,CAAC,iBAAkB,SAAUJ,GACjF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,+CAA+C,CAChF,CACJ,EAAE;ACNF6G,SAAStK,UAAU,4CAA6C,CAAC,iBAAkB,SAAUJ,GACzF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,yDAAyD,CAC1F,CACJ,EAAE;ACNF6G,SAAStK,UAAU,wCAAyC,CAAC,iBAAkB,SAAUJ,GACrF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,oDAAoD,CACrF,CACJ,EAAE;ACNF6G,SAAStK,UAAU,uCAAwC,CAAC,iBAAkB,SAAUJ,GACpF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,mDAAmD,CACpF,CACJ,EAAE;ACNF2G,UAAUpK,UAAU,mCAAoC,CAAC,iBAAkB,SAAUJ,GACjF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,8CAA8C,CAC/E,CACJ,EAAE;ACNF0G,UAAUnK,UAAU,gCAAiC,CAAC,iBAAkB,SAAUJ,GAC9E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,0CAA0C,CAC3E,CACJ,EAAE;AxDNF0G,UAAUnK,UAAU,yCAA0C,CAAC,iBAAkB,SAAUJ,GACvF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,oDAAoD,CACrF,CACJ,EAAE;ACNF0G,UAAUnK,UAAU,4CAA6C,CAAC,iBAAkB,SAAUJ,GAC1F,MAAO,CACHQ,SAAU,IACVU,SAAUlB,EAAe6D,IAAI,uDAAuD,CACxF,CACJ,EAAE;AwDLF0G,UAAUnK,UAAU,kCAAmC,CAAC,iBAAkB,SAAUJ,GAChF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,6CAA6C,CAC9E,CACJ,EAAE;ACNF0G,UAAUnK,UAAU,2CAA4C,CAAC,iBAAkB,SAAUJ,GACzF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,sDAAsD,CACvF,CACJ,EAAE;ACNF0G,UAAUnK,UAAU,mCAAoC,CAAC,iBAAkB,SAAUJ,GACjF,MAAO,CACHQ,SAAU,IACVC,MAAO,CACH0O,8BAA+B,IAC/BC,aAAc,IACdC,8BAA+B,IAC/BC,oBAAqB,IACrBC,WAAY,IACZC,WAAY,IACZC,UAAW,IACXC,cAAe,IACfC,eAAgB,GACpB,EACA1O,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,6CAA6C,CAC9E,CACJ,EAAE;ACjBF8G,SAASvK,UAAU,4BAA6B,CAAC,iBAAkB,SAAUJ,GACzE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,qCAAqC,CACtE,CACJ,EAAE;ACNF8G,SAASvK,UAAU,yBAA0B,CAAC,iBAAkB,SAAUJ,GACtE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,kCAAkC,CACnE,CACJ,EAAE;ACNF8G,SAASvK,UAAU,qCAAsC,CAAC,iBAAkB,SAAUJ,GAClF,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,gDAAgD,CACjF,CACJ,EAAE;ACNF+G,QAAQxK,UAAU,kCAAmC,CAAC,iBAAkB,SAAUJ,GAC9E,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,4CAA4C,CAC7E,CACJ,EAAE;ACNF+G,QAAQxK,UAAU,4BAA6B,CAAC,iBAAkB,SAAUJ,GACxE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,qCAAqC,CACtE,CACJ,EAAE;ACNF+G,QAAQxK,UAAU,uBAAwB,CAAC,iBAAkB,SAAUJ,GACnE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,gCAAgC,CACjE,CACJ,EAAE;ACNF+G,QAAQxK,UAAU,qBAAsB,CAAC,iBAAkB,SAAUJ,GACjE,MAAO,CACHQ,SAAU,IACVU,SAAUlB,EAAe6D,IAAI,8BAA8B,CAC/D,CACJ,EAAE;ACLF+G,QAAQxK,UAAU,wBAAyB,CAAC,iBAAkB,SAAUJ,GACpE,MAAO,CACHQ,SAAU,IACVS,QAAS,UACTC,SAAUlB,EAAe6D,IAAI,mCAAmC,CACpE,CACJ,EAAE;ACNFyG,aAAamD,QAAQ,qBAAsB,CAAC,QAAS,UAAW,cAAe,SAAUpN,EAAOuP,EAASnD,GACrG,MAAO,CACHnC,aAAc,KACdgE,YAAa,KACbuB,kBAAmB,KACnBC,qBAAsB,WA6BlB,OA5BAtG,KAAK8E,YAAc,CACfyB,kBAAqB,EACrBC,QAAW,CAAA,EACXC,SAAY,KACZC,eAAkB,KAClBC,YAAe,CAAA,EACfC,gBAAmB,KACnBC,YAAe,KACfC,iBAAoB,GACpBC,eAAkB,GAClBC,gBAAmB,GACnBC,cAAiBC,oBAAoBC,MAAMF,cAAcG,WACzDC,sBAAyB,CAAA,EACzBC,4BAA+B,KAC/BC,cAAiB,CAAA,EACjBC,eAAkB,CAAA,EAClBC,QAAW,KACXC,mBAAsB,EACtBC,WAAc,EACdC,iBAAoB,EACpBC,0BAA6B,CAAA,EAC7BC,MAAS,EACTC,aAAgB,CAAA,EAChBC,YAAe,CAAA,EACfC,4BAA+B,CAAA,EAC/BC,qBAAwB,EAC5B,EAEOlI,KAAK8E,WAChB,EACAqD,eAAgB,SAAU1E,GACtB,IAAI2E,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,iBAAmB5E,EAAI,CAAE6E,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACvG9N,KACG,SAAUH,GACN6N,EAAKtD,YAAcvK,EAAS7B,KAM5B,IALA,IAAI+P,EAAc,GACdC,EAAoB,GACpBC,EAA2B,KAC3BC,EAA8B,KAEzBhK,EAAI,EAAGA,EAAIwJ,EAAKtD,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAAI,CACnEwJ,EAAKtD,YAAYoD,qBAAqBtJ,GAAGiK,0BAA4B9L,OAAOqL,EAAKtD,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAC9IT,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkK,iCAAmC/L,OAAOqL,EAAKtD,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAAE9K,OAAO,kBAAkB,EAE5KqK,EAAKtD,YAAYoD,qBAAqBtJ,GAAGmK,8BACzCX,EAAKtD,YAAYoD,qBAAqBtJ,GAAGmK,4BAA8BhM,OAAOqL,EAAKtD,YAAYoD,qBAAqBtJ,GAAGmK,2BAA2B,EAClJX,EAAKtD,YAAYoD,qBAAqBtJ,GAAGoK,mCAAqCjM,OAAOqL,EAAKtD,YAAYoD,qBAAqBtJ,GAAGmK,2BAA2B,EAAEhL,OAAO,OAAO,GAK7K,IAAK,IAFL0K,EAAc,GAELQ,EAAI,EAAGA,EAAIb,EAAKtD,YAAYoD,qBAAqBtJ,GAAGsK,YAAYlP,OAAQiP,CAAC,GAC1Eb,EAAKtD,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,GAAGE,kBACxDf,EAAKtD,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,GAAGG,yBAA2BhB,EAAKtD,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,GAAGE,gBAAgBE,QAAQ,SAAY,aAAe,GAGzK,EAArBZ,EAAYzO,SAAYyO,GAAe,SAE3CA,GAAeL,EAAKtD,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,GAAGK,SAAW,IAAMlB,EAAKtD,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,GAAGM,YAKpJ,IAAK,IAFLb,EAAoB,GAEXhS,EAAI,EAAGA,EAAI0R,EAAKtD,YAAYoD,qBAAqBtJ,GAAG4K,kBAAkBxP,OAAQtD,CAAC,GACrD,EAA3BgS,EAAkB1O,SAAY0O,GAAqB,SAEvDA,GAAqBN,EAAKtD,YAAYoD,qBAAqBtJ,GAAG4K,kBAAkB9S,GAAG+S,iBAAiBC,UAAY,YAActB,EAAKtD,YAAYoD,qBAAqBtJ,GAAG4K,kBAAkB9S,GAAG+S,iBAAiBE,KAAO,aAAevB,EAAKtD,YAAYoD,qBAAqBtJ,GAAG4K,kBAAkB9S,GAAG+S,iBAAiB3B,MAAQ,IAS9T,GANAM,EAAKtD,YAAYoD,qBAAqBtJ,GAAGgL,qBAAuBnB,EAChEL,EAAKtD,YAAYoD,qBAAqBtJ,GAAGiL,2BAA6BnB,EAGtEE,EADAD,EAA2B,KAGvBP,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,UAAY1B,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,UAAY3B,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,eAAiB5B,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,IAAM5B,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,mBAAqB7B,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,UAAiJ,EAArI1B,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBlO,OAAY,CACjmB,IAAK,IAAIkQ,EAAI,EAAGA,EAAI9B,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBlO,OAAQkQ,CAAC,IAChJvB,CAAAA,GAKG5L,OAAOqL,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBgC,GAAGrB,yBAAyB,EAAIF,KAJvKA,EAA2B5L,OAAOqL,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBgC,GAAGrB,yBAAyB,EAC1LD,EAA8BR,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBgC,GAAGC,SAUrK/B,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,SAASM,iBAAmBrN,OAAO4L,CAAwB,EACzJP,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,SAASO,oBAAsBzB,EAC7HR,EAAKtD,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAkBH,SAASQ,6BAA+BlC,EAAKmC,mCAAmC3B,CAA2B,CAC7M,CACJ,CACJ,CACJ,CACR,EACA4B,mBAAoB,SAAUC,EAAWC,EAASC,EAAcC,EAAaC,EAAUC,EAAmBC,EAAgBC,EAAmBC,EAAiBC,EAAgBC,EAAcC,EAAYC,EAAgBC,EAASC,GAC7N,IAAInD,EAAOpI,KACPwL,EAAgB,GAmEpB,OAjEIZ,IACAY,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,IAClD4Q,IAAeA,EAAYrF,IAAyB,MAAnBqF,EAAYrF,KAAYiG,GAAiB,eAAiBZ,EAAYrF,IAG3GoF,GAAsC,EAAtBA,EAAa3Q,SAE7BwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,gBAAkByR,mBAAmBd,CAAY,GAGlEE,GAA8B,EAAlBA,EAAS7Q,SAErBwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,YAAcyR,mBAAmBZ,CAAQ,GAG1DC,GAAgD,EAA3BA,EAAkB9Q,SAEvCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,qBAAuByR,mBAAmBX,CAAiB,GAG5EC,GAA0C,EAAxBA,EAAe/Q,SAEjCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,kBAAoByR,mBAAmBV,CAAc,GAGtEC,GAAgD,EAA3BA,EAAkBhR,SAEvCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,qBAAuByR,mBAAmBT,CAAiB,GAG5EC,GAA4C,EAAzBA,EAAgBjR,SAEnCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,mBAAqByR,mBAAmBR,CAAe,GAGxEC,GAA0C,EAAxBA,EAAelR,SAEjCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,kBAAoByR,mBAAmBP,CAAc,GAGtEC,GAAsC,EAAtBA,EAAanR,SAE7BwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,gBAAkByR,mBAAmBN,CAAY,GAGnD,CAAA,IAAfC,IAEAI,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,cAAgBoR,GAGd,CAAA,IAAnBC,IAEAG,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,kBAAoBqR,GAGzB,CAAA,IAAZC,IAEAE,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,WAAasR,GAGhB,CAAA,IAAdC,IAEAC,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,aAAeuR,GAG7B1U,EAAMwD,IAAIgO,uBAAyB,iBAAmBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,UAAYyN,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACpN9N,KACG,SAAUH,GACN6N,EAAKtH,aAAevG,EAAS7B,KAE7B,IAAK,IAAIhC,EAAI,EAAGA,EAAI0R,EAAKtH,aAAa9G,OAAQtD,CAAC,GAAI,CAC/C0R,EAAKtH,aAAapK,GAAGgV,mBAAqB3O,OAAOqL,EAAKtH,aAAapK,GAAGiV,WAAW,EAcjF,IAZA,IAAI1K,EAAY,GACZ2K,EAAoB,KACpBC,EAAsB,KACtBC,EAAQ,CAAA,EACRC,EAAuB,KACvBC,EAAmB,KACnBC,EAAsB,KACtBC,EAAY,EACZzD,EAAc,GACd0D,EAAkB,GAClBC,EAAuB,GAElBlC,EAAI,EAAGA,EAAI9B,EAAKtH,aAAapK,GAAGwR,qBAAqBlO,OAAQkQ,CAAC,GAmCnE,GAlCA9B,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGpB,iCAAmC/L,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAAE9K,OAAO,gBAAgB,GAEjL6N,CAAAA,GAOG7O,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAAI+C,KANrFA,EAAoB7O,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EACjGgD,EAAuBzD,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAA8B,4BAAInN,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGnB,2BAA2B,EAAI,KACtLgD,EAAuB3D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGC,QACpE2B,EAAQ1D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGmC,QAWpDL,CAAAA,GAKGjP,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAAImD,KAJrFA,EAAmBjP,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAChGoD,EAAsB7D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGC,SASnE/B,CAAAA,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,UACvC1D,EAAQ,QAAQ,EAAEgG,EAAsB,CAAEE,eAAgBlE,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,SAASwC,cAAe,EAAG,CAAA,CAAK,EAAEtS,QAC3IoS,EAAqBtP,KAAKsL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,QAAQ,EAInF1B,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,aAAiF,EAAlEd,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYlP,QACpC,eAA7EoO,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGqC,uBAAuBC,KAGpE,IAAK5N,EAAI,EAAGA,EAAIwJ,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYlP,OAAQ4E,CAAC,GACrD,EAArB6J,EAAYzO,SAAYyO,GAAe,SAE3CA,GAAeL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYtK,GAAG0K,SAAW,IAAMlB,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYtK,GAAG2K,YACxJ2C,GAAa9D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYtK,GAAG0K,SAMzF,IAAK,IAAImD,EAAI,EAAGA,EAAIL,EAAqBpS,OAAQyS,CAAC,GACjB,EAAzBN,EAAgBnS,SAAYmS,GAAmB,MAEnDA,GAAmBC,EAAqBK,GAAGH,eAEvCrL,EAAU1D,QAAQ6O,EAAqBK,GAAG1C,QAAQ,EAAI,IAC/B,EAAnB9I,EAAUjH,SAAYiH,GAAa,MAEnCmL,EAAqBK,GAAG1C,YAAU9I,GAAamL,EAAqBK,GAAG1C,SAASyC,MAI5FpE,EAAKtH,aAAapK,GAAGgW,cAAgBtE,EAAKtH,aAAapK,GAAiB,gBAA+C0R,EAAKtH,aAAapK,GAAG+P,UAA5B+F,KAChHpE,EAAKtH,aAAapK,GAAGiW,gBAAkBR,EACvC/D,EAAKtH,aAAapK,GAAGkW,kBAAoB7P,OAAO6O,CAAiB,EACjExD,EAAKtH,aAAapK,GAAGmW,oBAAsB,EAAwB9P,OAAO8O,CAAmB,EAAI,KACjGzD,EAAKtH,aAAapK,GAAGoW,qBAAuBf,EAC5C3D,EAAKtH,aAAapK,GAAGqW,4BAA+BhB,EAAqBiB,UAAmD,EAAvCjB,EAAqBiB,SAAShT,OAAc+R,EAAqBiB,SAAYjB,EAAqBkB,MAA2C,EAAnClB,EAAqBkB,KAAKjT,OAAc+R,EAAqBkB,KAAOlB,EAAqBmB,aACxR9E,EAAKtH,aAAapK,GAAGyW,8BAAgC/E,EAAKmC,mCAAmCwB,CAAoB,EACjH3D,EAAKtH,aAAapK,GAAG0T,iBAAmBrN,OAAOiP,CAAgB,EAC/D5D,EAAKtH,aAAapK,GAAG2T,oBAAsB4B,EAC3C7D,EAAKtH,aAAapK,GAAG0W,2BAA8BnB,EAAoBe,UAAkD,EAAtCf,EAAoBe,SAAShT,OAAciS,EAAoBe,SAAYf,EAAoBgB,MAA0C,EAAlChB,EAAoBgB,KAAKjT,OAAciS,EAAoBgB,KAAOhB,EAAoBiB,aAChR9E,EAAKtH,aAAapK,GAAG4T,6BAA+BlC,EAAKmC,mCAAmC0B,CAAmB,EAC/G7D,EAAKtH,aAAapK,GAAG2W,UAAYnB,EACjC9D,EAAKtH,aAAapK,GAAGkT,qBAAuBnB,EAC5CL,EAAKtH,aAAapK,GAAG4W,UAAYrM,EACjCmH,EAAKtH,aAAapK,GAAG2V,MAAQP,CACjC,CACJ,CACJ,CACR,EACAyB,mBAAoB,SAAU9C,EAAWC,EAASC,EAAcC,EAAaC,EAAUC,EAAmBC,EAAgBC,EAAmBC,EAAiBE,EAAcC,EAAYC,EAAgBC,EAASC,GAC7M,IACIC,EAAgB,GA8DpB,OA5DIZ,IACAY,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,IAClD4Q,IAAeA,EAAYrF,IAAyB,MAAnBqF,EAAYrF,KAAYiG,GAAiB,eAAiBZ,EAAYrF,IAG3GoF,GAAsC,EAAtBA,EAAa3Q,SAE7BwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,gBAAkByR,mBAAmBd,CAAY,GAGlEE,GAA8B,EAAlBA,EAAS7Q,SAErBwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,YAAcyR,mBAAmBZ,CAAQ,GAG1DC,GAAgD,EAA3BA,EAAkB9Q,SAEvCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,qBAAuByR,mBAAmBX,CAAiB,GAG5EC,GAA0C,EAAxBA,EAAe/Q,SAEjCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,kBAAoByR,mBAAmBV,CAAc,GAGtEC,GAAgD,EAA3BA,EAAkBhR,SAEvCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,qBAAuByR,mBAAmBT,CAAiB,GAG5EC,GAA4C,EAAzBA,EAAgBjR,SAEnCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,mBAAqByR,mBAAmBR,CAAe,GAGxEE,GAAsC,EAAtBA,EAAanR,SAE7BwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,gBAAkByR,mBAAmBN,CAAY,GAGnD,CAAA,IAAfC,IAEAI,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,cAAgBoR,GAGd,CAAA,IAAnBC,IAEAG,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,kBAAoBqR,GAGzB,CAAA,IAAZC,IAEAE,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,WAAasR,GAGhB,CAAA,IAAdC,IAEAC,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,aAAeuR,GAG7B1U,EAAMwD,IAAIgO,uBAAyB,iBAAmBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,UAAYyN,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,CAC7N,EACAgF,sCAAuC,WACnC,IACIC,EAAuB,KAE3B,OAAO5W,EAAMwD,IAAIgO,uBAAyB,mCAAoC,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACpH9N,KACG,SAAUH,GAGN,IAFAkT,EAAuBlT,EAAS7B,MAEPsB,OACrB,IAAK,IAAI4E,EAAI,EAAGA,EAAI6O,EAAqBzT,OAAQ4E,CAAC,GAC9C6O,EAAqB7O,GAAGiK,0BAA4B9L,OAAO0Q,EAAqB7O,GAAGiK,yBAAyB,EAC5G4E,EAAqB7O,GAAGkK,iCAAmC/L,OAAO0Q,EAAqB7O,GAAGiK,yBAAyB,EAAE9K,OAAO,kBAAkB,EAItJ,OAAO0P,CACX,CACJ,CACR,EACAC,qBAAsB,SAAUC,GAC5B,OAAO3N,KAAK8E,YAAYoD,qBAAqByF,EACjD,EACAC,+BAAgC,SAAUC,GACtC,IAAIC,EAAmB,GACnBnN,EAAU,KAEd,OAAQ,OAJ8BkN,GAKlC,IAAK,SACD,GAN8BA,EAMb1D,QACbxJ,EAP0BkN,EAOH1D,YAEtB,CAAA,GAAIpQ,EATqB8T,EASRX,cATQW,EASqBZ,MATrBY,EAS0Cb,UAIpE,KAAM,wBAHNrM,EAV0BkN,CAc9B,CACA,MACJ,IAAK,SAGDlN,EAAUX,KAAK8E,YAAYoD,qBAnBG2F,GAmByB1D,QAEvD,MACJ,QACI,KAAM,uBACd,CAUA,OAFA2D,GADAA,GADAA,GAAqC,MAAhBnN,EAAQsM,MAAiC,KAAjBtM,EAAQsM,KAA2CtM,EAAQsM,KAA4B,KAC7F,MAAlBtM,EAAQoN,QAAqC,KAAnBpN,EAAQoN,OAAkBD,EAA4C,IAAMnN,EAAQoN,OAA/BpN,EAAQoN,OAAgC,MACnG,MAApBpN,EAAQqM,UAAyC,KAArBrM,EAAQqM,SAAoBc,EAA8C,IAAMnN,EAAQqM,SAAjCrM,EAAQqM,SAAoC,GAGxJ,EACAzC,mCAAoC,SAAUsD,GAC1C,IAAIC,EAAmB,GACnBnN,EAAU,KAEd,OAAQ,OAJkCkN,GAKtC,IAAK,SACD,GANkCA,EAMjB1D,QACbxJ,EAP8BkN,EAOP1D,YAEtB,CAAA,GAAIpQ,EATyB8T,EASZX,cATYW,EASiBZ,MATjBY,EASsCb,UAIpE,KAAM,wBAHNrM,EAV8BkN,CAclC,CACA,MACJ,IAAK,SAGDlN,EAAUX,KAAK8E,YAAYoD,qBAnBO2F,GAmBqB1D,QAEvD,MACJ,QACI,KAAM,uBACd,CAUA,OAFA2D,GADAA,GADAA,GAJAA,GAA6C,OAAxBnN,EAAQqN,aAAgD,KAAxBrN,EAAQqN,YAAsBrN,EAAQqN,YAAc,KAInE,OAAjBrN,EAAQsM,MAAkC,KAAjBtM,EAAQsM,KAAgBa,EAA0C,IAAMnN,EAAQsM,KAA7BtM,EAAQsM,KAA4B,MAC7F,OAAnBtM,EAAQoN,QAAsC,KAAnBpN,EAAQoN,OAAkBD,EAA4C,IAAMnN,EAAQoN,OAA/BpN,EAAQoN,OAAgC,MACnG,OAArBpN,EAAQqM,UAA0C,KAArBrM,EAAQqM,SAAoBc,EAA8C,IAAMnN,EAAQqM,SAAjCrM,EAAQqM,SAAoC,GAGzJ,EACAiB,UAAW,SAASnJ,GAGhB,OAFAA,EAAY0B,QAAU,CAAA,EAEfxG,KAAKkO,gBAAgBpJ,CAAW,CAC3C,EACAoJ,gBAAiB,SAAUpJ,GACvB,IAIYrB,EAJR2E,EAAOpI,KAEP8E,EAAY6B,cACR7B,EAAY4B,gBAAkB5B,EAAY4B,eAAenB,IACrD9B,EAAKqB,EAAY4B,eAAenB,GAEpCT,EAAY4B,eAAiB,CACzBnB,GAAM9B,EACN+I,KAAQ1H,EAAYqJ,YACpBC,MAAStJ,EAAYuJ,mBACrBC,MAASxJ,EAAYyJ,mBACzB,GAGAzJ,EAAY4B,eAAiB,CACzB8F,KAAQ1H,EAAYqJ,YACpBC,MAAStJ,EAAYuJ,mBACrBC,MAASxJ,EAAYyJ,mBACzB,GAIR,OAAOzJ,EAAY0J,UACnB,OAAO1J,EAAY2J,sBAEnB,IAAK,IAAI7P,EAAI,EAAGA,EAAIkG,EAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC1DkG,EAAYoD,qBAAqBtJ,GAAG8P,iBAA6B,IAAT9P,EAAI,GAC5DkG,EAAYoD,qBAAqBtJ,GAAGiK,0BAA4BzC,EAAQ,MAAM,EAAErJ,OAAO+H,EAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAAEhL,OAAO,EAAG,qBAAqB,EAErL,OAAOiH,EAAYoD,qBAAqBtJ,GAAG+P,YAEvC7J,EAAYoD,qBAAqBtJ,GAAGkL,WAChChF,EAAYoD,qBAAqBtJ,GAAGkL,SAAS8E,oBAAoB,OAAO9J,EAAYoD,qBAAqBtJ,GAAGkL,SAAS8E,mBAEtH9J,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,YACxCjF,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,eAAe,OAAOlF,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAClIlF,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAAS8E,WAAU,OAAO/J,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAAS8E,SAW7I,OANI/J,EAAYgK,gBAAkBhK,EAAYgK,eAAeC,UAAU,OAAOjK,EAAYgK,eAAeC,SAEzGjK,EAAYkK,iBAAmBlK,EAAY6C,WAC3C7C,EAAYmC,cAAgB,EAC5B,OAAOnC,EAAYmK,gBAEd7G,EAAKtD,YAAYS,GAWX1O,EAAMJ,IAAI4R,uBAAyB,iBAAmBvD,EAAYS,GAAIT,EAAa,CAAEwD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAChI9N,KACG,SAAUH,GACN,OAAO6N,EAAKtD,WAChB,CACJ,EAfGjO,EAAMqY,KAAK7G,uBAAyB,gBAAiBvD,EAAa,CAAEwD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC/G9N,KACG,SAASH,GAGL,OAFA6N,EAAKtD,YAAcvK,EAAS7B,KAErB0P,EAAKtD,WAChB,CACJ,CAUZ,EACAqK,kBAAmB,WAIf,IAHA,IAAI/G,EAAOpI,KACPtJ,EAAIL,QAAQ+Y,KAAKhH,EAAKtD,WAAW,EAE5BlG,EAAI,EAAGA,EAAIlI,EAAEwR,qBAAqBlO,OAAQ4E,CAAC,GAChDlI,EAAEwR,qBAAqBtJ,GAAG8P,iBAA6B,IAAT9P,EAAI,GAClDlI,EAAEwR,qBAAqBtJ,GAAGiK,0BAA4BzC,EAAQ,MAAM,EAAE1P,EAAEwR,qBAAqBtJ,GAAGiK,0BAA0BhL,OAAO,EAAG,qBAAqB,EAK7J,OAFInH,EAAE+X,uBAAuB,OAAO/X,EAAE+X,sBAE/B5X,EAAMwY,OAAOhH,uBAAyB,iBAAmB3R,EAAE6O,GAAI,CAAE+C,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5G9N,KACG,SAAUH,GAGN,OAAO6N,EAAKtD,WAChB,CACJ,CACR,EACAwK,UAAW,SAAU7L,EAAI8L,EAAWC,EAAYC,GAC5C,IACIjE,EAAgB,GAiBpB,OAfI+D,IACA/D,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,IAClDuV,KAAW/D,GAAiB,mBAGhCgE,IACAhE,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,IAClDwV,KAAYhE,GAAiB,oBAGjCiE,IACAjE,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,IAClDyV,KAAmBjE,GAAiB,4BAGrC3U,EAAMwD,IAAIgO,uBAAyB,iBAAmB5E,EAAK,UAAY+H,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,EAAGkH,aAAc,aAAc,CAAC,EAChKhV,KACG,SAAUH,GACN,OAAOA,CACX,CACJ,CACR,EACAoV,gBAAiB,SAAUC,EAAIxP,EAAM0E,EAAayK,EAAWC,EAAYC,GACrE,IACIjE,EAAgB,GA2BpB,OApBI1G,IAEA0G,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,eAAiB8K,EAAYS,IAG9CgK,IACA/D,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,IAClDuV,KAAW/D,GAAiB,mBAGhCgE,IACAhE,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,IAClDwV,KAAYhE,GAAiB,oBAGjCiE,IACAjE,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,IAClDyV,KAAmBjE,GAAiB,4BAGrC3U,EAAMqY,KAAK7G,uBAAyB,4BAA8BmD,EA1B7D,CACRqE,GAAID,EACJE,QAAS,qBACTC,KAAM3P,CACV,EAsB+F,CAAEkI,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACrI9N,KACG,SAAUH,GACN,OAAOA,CACX,CACJ,CACR,EACAyV,wBAAyB,SAAUvF,EAAWC,EAASC,EAAcsF,EAAiBC,EAAuBC,EAAYC,EAAaC,GAClI,IAAIjI,EAAOpI,KACPwL,EAAgB,GAgCpB,OA9BIb,GAAsC,EAAtBA,EAAa3Q,SAE7BwR,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,YAAc2Q,GAGX,CAAA,IAApBsF,IAEAzE,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,MAAQiW,GAGC,CAAA,IAA1BC,IAEA1E,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,UAAYkW,GAGd,CAAA,IAAfC,IAEA3E,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,OAASmW,GAGV,CAAA,IAAhBC,IAEA5E,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,gBAAkBoW,GAGZ,CAAA,IAAvBC,IAEA7E,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,wBAA0BqW,GAGxCxZ,EAAMwD,IAAIgO,uBAAyB,iBAAmBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,YAAcyN,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtN9N,KACG,SAAUH,GACN6N,EAAKtH,aAAevG,EAAS7B,KAE7B,IAAK,IAAIhC,EAAI,EAAGA,EAAI0R,EAAKtH,aAAa9G,OAAQtD,CAAC,GAAI,CAC/C0R,EAAKtH,aAAapK,GAAGgV,mBAAqB3O,OAAOqL,EAAKtH,aAAapK,GAAGiV,WAAW,EAAE5N,OAAO,kBAAkB,EAW5G,IATA,IAAIkD,EAAY,GACZ2K,EAAoB,KACpBG,EAAuB,KACvBC,EAAmB,KACnBC,EAAsB,KACtBC,EAAY,EACZzD,EAAc,GACd2D,EAAuB,GAElBlC,EAAI,EAAGA,EAAI9B,EAAKtH,aAAapK,GAAGwR,qBAAqBlO,OAAQkQ,CAAC,GA+BnE,GA9BA9B,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGpB,iCAAmC/L,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAAE9K,OAAO,gBAAgB,GAEjL6N,CAAAA,GAKG7O,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAAI+C,KAJrFA,EAAoB7O,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EACjGkD,EAAuB3D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGC,UASnE6B,CAAAA,GAKGjP,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAAImD,KAJrFA,EAAmBjP,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAChGoD,EAAsB7D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGC,SASnE/B,CAAAA,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,UACvC1D,EAAQ,QAAQ,EAAEgG,EAAsB,CAAEE,eAAgBlE,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,SAASwC,cAAe,EAAG,CAAA,CAAK,EAAEtS,QAC3IoS,EAAqBtP,KAAKsL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,QAAQ,EAInF1B,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,aAAiF,EAAlEd,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYlP,QACpC,eAA7EoO,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGqC,uBAAuBC,KAGpE,IAFAN,GAAa9D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYlP,OAEjE4E,EAAI,EAAGA,EAAIwJ,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYlP,OAAQ4E,CAAC,GACrD,EAArB6J,EAAYzO,SAAYyO,GAAe,SAE3CA,GAAeL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYtK,GAAG0K,SAAW,IAAMlB,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGhB,YAAYtK,GAAG2K,YAMxK,IAAK,IAAIkD,EAAI,EAAGA,EAAIL,EAAqBpS,OAAQyS,CAAC,GAC1CxL,EAAU1D,QAAQ6O,EAAqBK,GAAG1C,QAAQ,EAAI,IAC/B,EAAnB9I,EAAUjH,SAAYiH,GAAa,MAEnCmL,EAAqBK,GAAG1C,YAAU9I,GAAamL,EAAqBK,GAAG1C,SAASyC,MAI5FpE,EAAKtH,aAAapK,GAAG4Z,UAAYlE,EACjChE,EAAKtH,aAAapK,GAAGkW,kBAAoB7P,OAAO6O,CAAiB,EAAE7N,OAAO,kBAAkB,EAC5FqK,EAAKtH,aAAapK,GAAGoW,qBAAuBf,EAC5C3D,EAAKtH,aAAapK,GAAG6Z,6BAA+BxE,EAAqBiB,SACtEjB,IAAsB3D,EAAKtH,aAAapK,GAAGyW,8BAAgC/E,EAAKwF,+BAA+B7B,CAAoB,GACtI3D,EAAKtH,aAAapK,GAAG0T,iBAAmBrN,OAAOiP,CAAgB,EAAEjO,OAAO,kBAAkB,EAC1FqK,EAAKtH,aAAapK,GAAG2T,oBAAsB4B,EAC3C7D,EAAKtH,aAAapK,GAAG8Z,4BAA8BvE,EAAoBe,SACpEf,IAAqB7D,EAAKtH,aAAapK,GAAG4T,6BAA+BlC,EAAKwF,+BAA+B3B,CAAmB,GACnI7D,EAAKtH,aAAapK,GAAG2W,UAAYnB,EACjC9D,EAAKtH,aAAapK,GAAGkT,qBAAuBnB,EAC5CL,EAAKtH,aAAapK,GAAG4W,UAAYrM,EACjCmH,EAAKtH,aAAapK,GAAG+Z,2BAA6BrI,EAAKtH,aAAapK,GAAGwR,qBAAqBlO,OAC5FoO,EAAKtH,aAAapK,GAAGga,gBAAkBtI,EAAKtH,aAAapK,GAAGmQ,YAAY2F,KACxEpE,EAAKtH,aAAapK,GAAGia,yBAA2BvI,EAAKtH,aAAapK,GAAGkQ,gBAAgBgK,UACrFxI,EAAKtH,aAAapK,GAAGgW,aAAetE,EAAKtH,aAAapK,GAAG+P,SAAS+F,KAE7DT,GAAsB3Q,QAAQC,IAAI+M,EAAKtH,aAAapK,GAAG6P,iBAAiB,CACjF,CACJ,CACJ,CACR,EACAsK,6BAA8B,SAAUpG,EAAWC,EAASC,GACxD,IAAIvC,EAAOpI,KACPwL,EAAgB,GAOpB,OALqB,OAAjBb,GAA+C,EAAtBA,EAAa3Q,SAEtCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,gBAAkB8W,UAAUnG,CAAY,GAGtD9T,EAAMwD,IAAIgO,uBAAyB,iBAAmBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,iBAAmByN,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC3N9N,KACG,SAAUH,GACN6N,EAAKtH,aAAevG,EAAS7B,KAE7B,IAAK,IAAIhC,EAAI,EAAGA,EAAI0R,EAAKtH,aAAa9G,OAAQtD,CAAC,GAAI,CAC/C0R,EAAKtH,aAAapK,GAAGgV,mBAAqB3O,OAAOqL,EAAKtH,aAAapK,GAAGiV,WAAW,EAAE5N,OAAO,gBAAgB,EAW1G,IATA,IAAIkD,EAAY,GACZ2K,EAAoB,KACpBG,EAAuB,KACvBC,EAAmB,KACnBC,EAAsB,KAGtBG,EAAuB,GAElBlC,EAAI,EAAGA,EAAI9B,EAAKtH,aAAapK,GAAGwR,qBAAqBlO,OAAQkQ,CAAC,GACnE9B,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGpB,iCAAmC/L,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAAE9K,OAAO,gBAAgB,GAEjL6N,CAAAA,GAKG7O,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAAI+C,KAJrFA,EAAoB7O,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EACjGkD,EAAuB3D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGC,UASnE6B,CAAAA,GAKGjP,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAG6G,0BAA0B,EAAI/E,KAJtFA,EAAmBjP,OAAOqL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGrB,yBAAyB,EAChGoD,EAAsB7D,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGC,SASnE/B,CAAAA,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,UACvC1D,EAAQ,QAAQ,EAAEgG,EAAsB,CAAEE,eAAgBlE,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,SAASwC,cAAe,EAAG,CAAA,CAAK,EAAEtS,QAC3IoS,EAAqBtP,KAAKsL,EAAKtH,aAAapK,GAAGwR,qBAAqBgC,GAAGJ,QAAQ,EAiB3F,IAAK,IAAI2C,EAAI,EAAGA,EAAIL,EAAqBpS,OAAQyS,CAAC,GAC1CxL,EAAU1D,QAAQ6O,EAAqBK,GAAG1C,QAAQ,EAAI,IAC/B,EAAnB9I,EAAUjH,SAAYiH,GAAa,MAEnCmL,EAAqBK,GAAG1C,YAAU9I,GAAamL,EAAqBK,GAAG1C,SAASyC,MAI5FpE,EAAKtH,aAAapK,GAAGkW,kBAAoB7P,OAAO6O,CAAiB,EAAE7N,OAAO,gBAAgB,EAC1FqK,EAAKtH,aAAapK,GAAGoW,qBAAuBf,EAC5C3D,EAAKtH,aAAapK,GAAGyW,8BAAgC/E,EAAKwF,+BAA+B7B,CAAoB,EAC7G3D,EAAKtH,aAAapK,GAAG0T,iBAAmBrN,OAAOiP,CAAgB,EAAEjO,OAAO,gBAAgB,EACxFqK,EAAKtH,aAAapK,GAAG2T,oBAAsB4B,EAC3C7D,EAAKtH,aAAapK,GAAG4T,6BAA+BlC,EAAKwF,+BAA+B3B,CAAmB,EAC3G7D,EAAKtH,aAAapK,GAAG2W,UA9DL,EA+DhBjF,EAAKtH,aAAapK,GAAGkT,qBA9DH,GA+DlBxB,EAAKtH,aAAapK,GAAG4W,UAAYrM,CACrC,CACJ,CACJ,CACR,EACA+P,yCAA0C,SAAUvG,EAAWC,EAASC,GACpE,IACIa,EAAgB,GAOpB,OALqB,OAAjBb,GAA+C,EAAtBA,EAAa3Q,SAEtCwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,gBAAkB8W,UAAUnG,CAAY,GAGtD9T,EAAMwD,IAAIgO,uBAAyB,iBAAmBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,uBAAyByN,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjO9N,KACG,SAAUH,GACL,OAAOA,EAAS7B,IACrB,CACJ,CACR,EACAuY,oBAAqB,SAAUC,EAAapQ,GACxC,IACI0K,EAAgB,GAOpB,OALKzO,OAAOA,OAAO,EAAEgB,OAAO,YAAY,CAAC,EAAEoT,OAAOpU,OAAOmU,CAAW,EAAEnT,OAAO,YAAY,CAAC,IAEtFyN,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,eAAiB+C,OAAOmU,CAAW,EAAEnT,OAAO,YAAY,GAGtElH,EAAMqY,KAAK7G,uBAAyB,wBAA0BmD,EAAe1K,EAAc,CAAEwH,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACxI9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EACA0Y,oBAAqB,SAAUtQ,GAI3B,OAAOjK,EAAMqY,KAAK7G,uBAAyB,mCAAoCvH,EAAc,CAAEwH,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnI9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EACA2Y,oBAAqB,SAAUvM,GAC3B,IAIYrB,EAJR2E,EAAOpI,KAEP8E,EAAY6B,cACR7B,EAAY4B,gBAAkB5B,EAAY4B,eAAenB,IACrD9B,EAAKqB,EAAY4B,eAAenB,GAEpCT,EAAY4B,eAAiB,CACzBnB,GAAM9B,EACN+I,KAAQ1H,EAAYqJ,YACpBC,MAAStJ,EAAYuJ,mBACrBC,MAASxJ,EAAYyJ,mBACzB,GAGAzJ,EAAY4B,eAAiB,CACzB8F,KAAQ1H,EAAYqJ,YACpBC,MAAStJ,EAAYuJ,mBACrBC,MAASxJ,EAAYyJ,mBACzB,GAIR,OAAOzJ,EAAY0J,UACnB,OAAO1J,EAAY2J,sBAEnB,IAAK,IAAI7P,EAAI,EAAGA,EAAIkG,EAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC1DkG,EAAYoD,qBAAqBtJ,GAAG8P,iBAA6B,IAAT9P,EAAI,GAC5DkG,EAAYoD,qBAAqBtJ,GAAGiK,0BAA4BzC,EAAQ,MAAM,EAAErJ,OAAO+H,EAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAAEhL,OAAO,EAAG,qBAAqB,EAErL,OAAOiH,EAAYoD,qBAAqBtJ,GAAG+P,YAEvC7J,EAAYoD,qBAAqBtJ,GAAGkL,WAChChF,EAAYoD,qBAAqBtJ,GAAGkL,SAAS8E,oBAAoB,OAAO9J,EAAYoD,qBAAqBtJ,GAAGkL,SAAS8E,mBAErH9J,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,YACzCjF,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,eAAe,OAAOlF,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAClIlF,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAAS8E,WAAU,OAAO/J,EAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAAS8E,SAW7I,OANI/J,EAAYgK,gBAAkBhK,EAAYgK,eAAeC,UAAU,OAAOjK,EAAYgK,eAAeC,SAEzGjK,EAAYkK,iBAAmBlK,EAAY6C,WAC3C7C,EAAYmC,cAAgB,EAC5B,OAAOnC,EAAYmK,gBAEZpY,EAAMqY,KAAK7G,uBAAyB,qCAAsCvD,EAAa,CAAEwD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACpI9N,KACG,SAAUH,GACN,OAAO6N,EAAKtD,WAChB,CACJ,CACR,CACJ,CACJ,EAAE;ACx4BF/D,UAAUkD,QAAQ,kBAAmB,CAAC,QAAS,UAAW,cAAe,SAAUpN,EAAOuP,EAASnD,GAC/F,MAAO,CACHlC,UAAW,KACXuQ,SAAU,KACVC,kBAAmB,SAAU3G,EAAa6C,EAAsB+D,EAAYC,GACxEzR,KAAKsR,SAAW,CACZI,eAAkB,CAAEnM,GAAM,uCAAwCiH,KAAQ,aAAc,EACxF3F,YAAe+D,EACf+G,aAAgB,CAAEpM,GAAM,uCAAwCiH,KAAQ,QAASoF,QAAW,SAAU,EACtG1J,qBAAwBuF,EACxB9F,WAAc6J,EACd9J,mBAAsB+J,EACtBI,SAAY,GAChB,EAEA,IAAK,IAAIjT,EAAI,EAAGA,EAAIoB,KAAKsR,SAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAC5DoB,KAAKsR,SAASpJ,qBAAqBtJ,GAAGiK,0BAA4B9L,OAAOiD,KAAKsR,SAASpJ,qBAAqBtJ,GAAGiK,yBAAyB,EAG5I,OAAO7I,KAAKsR,QAChB,EACAQ,YAAa,SAASrO,GAClB,IAAI2E,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,cAAgB5E,EAAI,CAAE6E,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACpG9N,KACG,SAAUH,GACN6N,EAAKkJ,SAAW/W,EAAS7B,KAwBzB,IAvBA,IAAIsI,EAAY,GACZ+Q,EAAqB,GACrBnG,EAAoB,KACpBG,EAAuB,KACvBC,EAAmB,KACnBC,EAAsB,KACtB+F,EAA6B,KAC7BC,EAAmB,GACnBC,EAAgB,GAChBC,EAAc,GACdC,EAAgB,GAChBC,EAAe,GACfnG,EAAY,EACZzD,EAAc,GAEd6J,EAAuB,GACvB5J,EAAoB,GACpBC,EAA2B,KAC3BC,EAA8B,KAC9B2J,EAAqB,CAAA,EACrBC,EAAoB,CAAA,EACpBC,EAAsB,CAAA,EAEjBvI,EAAI,EAAGA,EAAI9B,EAAKkJ,SAASpJ,qBAAqBlO,OAAQkQ,CAAC,GAAI,CAuDhE,GAtDA9B,EAAKkJ,SAASpJ,qBAAqBgC,GAAGpB,iCAAmC/L,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGrB,yBAAyB,EAAE9K,OAAO,kBAAkB,EAE1KqK,EAAKkJ,SAASpJ,qBAAqBgC,GAAGwI,iCAAmC3V,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGrB,yBAAyB,EAAE9K,OAAO,kBAAkB,EAE1KqK,EAAKkJ,SAASpJ,qBAAqBgC,GAAGyI,sBAAyBvK,EAAKkJ,SAASpJ,qBAAqBgC,GAAY,UAAInN,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAG0I,SAAS,EAAE7U,OAAO,kBAAkB,EAAI,GACvMqK,EAAKkJ,SAASpJ,qBAAqBgC,GAAG2I,mBAAsBzK,EAAKkJ,SAASpJ,qBAAqBgC,GAAa,WAAInN,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAG4I,WAAW,EAAE/U,OAAO,kBAAkB,EAAI,GACvMqK,EAAKkJ,SAASpJ,qBAAqBgC,GAAG6I,sBAAyB3K,EAAKkJ,SAASpJ,qBAAqBgC,GAAc,YAAInN,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAG8I,cAAc,EAAEjV,OAAO,kBAAkB,EAAI,GAC9MqK,EAAKkJ,SAASpJ,qBAAqBgC,GAAG+I,iBAAmB7K,EAAKwF,+BAA+BxF,EAAKkJ,SAASpJ,qBAAqBgC,GAAGC,OAAO,GAErIyB,CAAAA,GAKG7O,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGrB,yBAAyB,EAAI+C,KAJ9EA,EAAoB7O,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGrB,yBAAyB,EAC1FkD,EAAuB3D,EAAKkJ,SAASpJ,qBAAqBgC,GAAGC,SASjE+I,oBAAuB9K,EAAKkJ,SAASpJ,qBAAqB,GAA8B,4BAAInL,OAAOqL,EAAKkJ,SAASpJ,qBAAqB,GAAGa,2BAA2B,EAAI,KACxKwJ,EAAqBnK,EAAKkJ,SAASpJ,qBAAqB,GAAGmE,OAEtDL,CAAAA,GAKGjP,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGrB,yBAAyB,EAAImD,KAJ9EA,EAAmBjP,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGrB,yBAAyB,EACzFoD,EAAsB7D,EAAKkJ,SAASpJ,qBAAqBgC,GAAGC,SAShEgJ,mBAAsB/K,EAAKkJ,SAASpJ,qBAAqBE,EAAKkJ,SAASpJ,qBAAqBlO,OAAS,GAA8B,4BAAI+C,OAAOqL,EAAKkJ,SAASpJ,qBAAqBE,EAAKkJ,SAASpJ,qBAAqBlO,OAAS,GAAG+O,2BAA2B,EAAI,KAC/PyJ,EAAoBpK,EAAKkJ,SAASpJ,qBAAqBE,EAAKkJ,SAASpJ,qBAAqBlO,OAAS,GAAGqS,MAE9F,EAAJnC,GAASA,EAAI9B,EAAKkJ,SAASpJ,qBAAqBlO,OAAS,GACrDoO,EAAKkJ,SAASpJ,qBAAqBgC,GAAGmC,QAAOoG,EAAsB,CAAA,IAGtET,CAAAA,GAIGjV,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGyE,YAAYhD,WAAW,EAAIqG,KAH5EA,EAA6BjV,OAAOqL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGyE,YAAYhD,WAAW,GAQ/FvF,EAAQ,QAAQ,EAAEkM,EAAsB,CAAE/L,kBAAmB6B,EAAKkJ,SAASpJ,qBAAqBgC,GAAGyE,YAAYpI,iBAAkB,EAAG,CAAA,CAAK,EAAEvM,QAC7IsY,EAAqBxV,KAAKsL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGyE,WAAW,EAG3EvG,EAAKkJ,SAASpJ,qBAAqBgC,GAAGhB,aAA0E,EAA3Dd,EAAKkJ,SAASpJ,qBAAqBgC,GAAGhB,YAAYlP,OAGvG,IAFAkS,GAAa9D,EAAKkJ,SAASpJ,qBAAqBgC,GAAGhB,YAAYlP,OAE1D4E,EAAI,EAAGA,EAAIwJ,EAAKkJ,SAASpJ,qBAAqBgC,GAAGhB,YAAYlP,OAAQ4E,CAAC,GAC9C,EAArB6J,EAAYzO,SAAYyO,GAAe,SAE3CA,GAAeL,EAAKkJ,SAASpJ,qBAAqBgC,GAAGhB,YAAYtK,GAAG0K,SAAW,IAAMlB,EAAKkJ,SAASpJ,qBAAqBgC,GAAGhB,YAAYtK,GAAG2K,YAMlJ,IAAK,IAFLb,EAAoB,GAEXhS,EAAI,EAAGA,EAAI0R,EAAKkJ,SAASpJ,qBAAqBgC,GAAGV,kBAAkBxP,OAAQtD,CAAC,GAClD,EAA3BgS,EAAkB1O,SAAY0O,GAAqB,SAEvDA,GAAqBN,EAAKkJ,SAASpJ,qBAAqBgC,GAAGV,kBAAkB9S,GAAG+S,iBAAiBC,UAAY,YAActB,EAAKkJ,SAASpJ,qBAAqBgC,GAAGV,kBAAkB9S,GAAG+S,iBAAiBE,KAAO,aAAevB,EAAKkJ,SAASpJ,qBAAqBgC,GAAGV,kBAAkB9S,GAAG+S,iBAAiB3B,MAAQ,IAGrTM,EAAKkJ,SAASpJ,qBAAqBgC,GAAGL,2BAA6BnB,CACvE,CAEA,IAAShS,EAAI,EAAGA,EAAI4b,EAAqBtY,OAAQtD,CAAC,GACd,EAA5Bqb,EAAmB/X,SAAY+X,GAAsB,MAEzDA,GAAsBO,EAAqB5b,GAAG6P,kBAE1C0L,EAAiB1U,QAAQ+U,EAAqB5b,GAAGkQ,gBAAgBgK,SAAS,EAAI,IAChD,EAA1BqB,EAAiBjY,SAAYiY,GAAoB,MAErDA,GAAoBK,EAAqB5b,GAAGkQ,gBAAgBgK,WAG5D0B,EAAqB5b,GAAGoY,eACpB9N,EAAUzD,QAAQ+U,EAAqB5b,GAAGoY,eAAetC,IAAI,EAAI,IAC1C,EAAnBxL,EAAUhH,SAAYgH,GAAa,MAEvCA,GAAasR,EAAqB5b,GAAGoY,eAAetC,MAIpDxL,EAAUzD,QAAQ+U,EAAqB5b,GAAG+P,SAAS+F,IAAI,EAAI,IACpC,EAAnBxL,EAAUhH,SAAYgH,GAAa,MAEvCA,GAAasR,EAAqB5b,GAAG+P,SAAS+F,MAI3B,EAAvB0F,EAAclY,SAAYkY,GAAiB,SAE3CI,EAAqB5b,GAAG+P,SAAS2M,OAAyD,EAAhDd,EAAqB5b,GAAG+P,SAAS2M,MAAMpZ,SAAYkY,GAAiBI,EAAqB5b,GAAG+P,SAAS2M,OAE1H,EAArBjB,EAAYnY,SAAYmY,GAAe,SAEvCG,EAAqB5b,GAAGqQ,gBAAkE,EAAhDuL,EAAqB5b,GAAGqQ,eAAe/M,SAAYmY,GAAeG,EAAqB5b,GAAGqQ,gBAE7G,EAAvBqL,EAAcpY,SAAYoY,GAAiB,SAE3CE,EAAqB5b,GAAGoQ,kBAAsE,EAAlDwL,EAAqB5b,GAAGoQ,iBAAiB9M,SAAYoY,GAAiBE,EAAqB5b,GAAGoQ,kBAEpH,EAAtBuL,EAAarY,SAAYqY,GAAgB,SAEzCC,EAAqB5b,GAAGsQ,iBAAoE,EAAjDsL,EAAqB5b,GAAGsQ,gBAAgBhN,SAAYqY,GAAgBC,EAAqB5b,GAAGsQ,iBAG/I,GAAIoB,EAAKkJ,SAASvH,UAAY3B,EAAKkJ,SAASvH,SAASC,eAAiB5B,EAAKkJ,SAASvH,SAASC,cAAc,IAAM5B,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,mBAAqB7B,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,UAA6G,EAAjG1B,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBlO,OAAY,CACpV,IAASkQ,EAAI,EAAGA,EAAI9B,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBlO,OAAQkQ,CAAC,IAC5GvB,CAAAA,GAKG5L,OAAOqL,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBgC,GAAGrB,yBAAyB,EAAIF,KAJnIA,EAA2B5L,OAAOqL,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBgC,GAAGrB,yBAAyB,EACtJD,EAA8BR,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,SAAS5B,qBAAqBgC,GAAGC,SAUjI/B,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,SAASM,iBAAmBrN,OAAO4L,CAAwB,EACrHP,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,SAASO,oBAAsBzB,EACzFR,EAAKkJ,SAASvH,SAASC,cAAc,GAAGC,kBAAkBH,SAASQ,6BAA+BlC,EAAKmC,mCAAmC3B,CAA2B,CACzK,CAEAR,EAAKkJ,SAAS+B,UAAYrS,EAC1BoH,EAAKkJ,SAASgC,mBAAqBvB,EACnC3J,EAAKkJ,SAASiC,iBAAmBtB,EACjC7J,EAAKkJ,SAAS1E,kBAAoB7P,OAAO6O,CAAiB,EAC1DxD,EAAKkJ,SAASkC,oBAAsB,oBAAwBzW,OAAOmW,mBAAmB,EAAI,KAC1F9K,EAAKkJ,SAASxE,qBAAuBf,EACrC3D,EAAKkJ,SAASvE,4BAA+BhB,EAAqBiB,UAAmD,EAAvCjB,EAAqBiB,SAAShT,OAAc+R,EAAqBiB,SAAYjB,EAAqBkB,MAA2C,EAAnClB,EAAqBkB,KAAKjT,OAAc+R,EAAqBkB,KAAOlB,EAAqBmB,aACjR9E,EAAKkJ,SAASnE,8BAAgC/E,EAAKmC,mCAAmCwB,CAAoB,EAC1G3D,EAAKkJ,SAASlH,iBAAmBrN,OAAOiP,CAAgB,EACxD5D,EAAKkJ,SAASmC,mBAAqB,mBAAuB1W,OAAOoW,kBAAkB,EAAI,KACvF/K,EAAKkJ,SAASjH,oBAAsB4B,EACpC7D,EAAKkJ,SAASlE,2BAA8BnB,EAAoBe,UAAkD,EAAtCf,EAAoBe,SAAShT,OAAciS,EAAoBe,SAAYf,EAAoBgB,MAA0C,EAAlChB,EAAoBgB,KAAKjT,OAAciS,EAAoBgB,KAAOhB,EAAoBiB,aACzQ9E,EAAKkJ,SAAShH,6BAA+BlC,EAAKmC,mCAAmC0B,CAAmB,EACxG7D,EAAKkJ,SAASoC,2BAA6B3W,OAAOiV,CAA0B,EAAEjU,OAAO,gBAAgB,EACrGqK,EAAKkJ,SAASqC,qBAAuB5W,OAAOqL,EAAKkJ,SAAS1C,mBAAmB,GAAGjD,WAAW,EAC3FvD,EAAKkJ,SAASsC,qBAAuB1B,EACrC9J,EAAKkJ,SAASuC,mBAAqB1B,EACnC/J,EAAKkJ,SAASwC,qBAAuB1B,EACrChK,EAAKkJ,SAASyC,oBAAsB1B,EACpCjK,EAAKkJ,SAASjE,UAAYnB,EAC1B9D,EAAKkJ,SAAS1H,qBAAuBnB,EACrCL,EAAKkJ,SAAS0C,mBAAqBzB,EACnCnK,EAAKkJ,SAAS2C,kBAAoBzB,EAClCpK,EAAKkJ,SAAS4C,oBAAsBzB,CACxC,CACJ,CACR,EACA0B,gBAAiB,SAAS1J,EAAWC,EAASE,EAAaD,EAAcE,EAAUC,EAAmBC,EAAgBC,EAAmBC,EAAiBE,EAAciJ,EAASC,EAAiBC,EAAYC,EAAiBhJ,GAC3N,IAAInD,EAAOpI,KACPwL,EAAgB,GAmEpB,OAjEIZ,IACAY,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,IACjD4Q,IAAeA,EAAYrF,IAAyB,MAAnBqF,EAAYrF,KAAYiG,GAAiB,eAAiBZ,EAAYrF,IAG3F,MAAhBoF,GAA8C,EAAtBA,EAAa3Q,SAErCwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,gBAAkByR,mBAAmBd,CAAY,GAGtD,MAAZE,GAAsC,EAAlBA,EAAS7Q,SAE7BwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,YAAcyR,mBAAmBZ,CAAQ,GAGrC,MAArBC,GAAwD,EAA3BA,EAAkB9Q,SAE/CwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,qBAAuByR,mBAAmBX,CAAiB,GAG1D,MAAlBC,GAAkD,EAAxBA,EAAe/Q,SAEzCwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,kBAAoByR,mBAAmBV,CAAc,GAGjD,MAArBC,GAAwD,EAA3BA,EAAkBhR,SAE/CwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,qBAAuByR,mBAAmBT,CAAiB,GAGzD,MAAnBC,GAAoD,EAAzBA,EAAgBjR,SAE3CwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,mBAAqByR,mBAAmBR,CAAe,GAGxD,MAAhBE,GAA8C,EAAtBA,EAAanR,SAErCwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,gBAAkByR,mBAAmBN,CAAY,GAGlEiJ,IAEA5I,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,WAAaoa,GAG9BC,IAEA7I,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,mBAAqBqa,GAGtCC,IAEA9I,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,cAAgBsa,GAGjCC,IAEA/I,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,mBAAqBua,GAGtChJ,IAEAC,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,aAAeuR,GAG7B1U,EAAMwD,IAAIgO,uBAAyB,cAAgBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,UAAYyN,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjN9N,KACG,SAAUH,GACN6N,EAAKrH,UAAYxG,EAAS7B,KAE1B,IAAK,IAAI+T,EAAI,EAAGA,EAAIrE,EAAKrH,UAAU/G,OAAQyS,CAAC,GAAI,CAsB5C,IArBA,IAAIb,EACAsH,EACAnH,EACAC,EAcAuG,EAZAP,EAA6B,KAC7BhR,EAAY,GACZ+Q,EAAqB,GACrBE,EAAmB,GACnBE,EAAc,GACdC,EAAgB,GAChBC,EAAe,GACfnG,EAAY,EACZzD,EAAc,GAEd6J,EAAuB,GACvBkC,EAAoB,GAGpB/B,EAAsB,CAAA,EAEjBvI,EAAI,EAAGA,EAAI9B,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OAAQkQ,CAAC,GAAI,CAwCpE,GAvCA9B,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGpB,iCAAmC/L,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGrB,yBAAyB,EAAE9K,OAAO,kBAAkB,GA0B7KiU,CAAAA,GAIGjV,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGyE,YAAYhD,WAAW,EAAIqG,KAHhFA,EAA6BjV,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGyE,YAAYhD,WAAW,GAQnGvF,EAAQ,QAAQ,EAAEkM,EAAsB,CAAE/L,kBAAmB6B,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGyE,YAAYpI,iBAAkB,EAAG,CAAA,CAAK,EAAEvM,QACjJsY,EAAqBxV,KAAKsL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGyE,WAAW,EAG/EvG,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,aAA8E,EAA/Dd,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYlP,QAClC,cAAzEoO,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGqC,uBAAuBC,KAGjE,IAAK5N,EAAI,EAAGA,EAAIwJ,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYlP,OAAQ4E,CAAC,GAClD,EAArB6J,EAAYzO,SAAYyO,GAAe,SAE3CA,GAAeL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYtK,GAAG0K,SAAW,IAAMlB,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYtK,GAAG2K,YAClJ2C,GAAa9D,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYtK,GAAG0K,SAK1E,EAAJY,GAASA,EAAI9B,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OAAS,GACzDoO,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGmC,QAAOoG,EAAsB,CAAA,EAEnF,CAEA7G,EAAoB7O,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqB,GAAGW,yBAAyB,EAC9FqK,EAAuB9K,EAAKrH,UAAU0L,GAAGvE,qBAAqB,GAA8B,4BAAInL,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqB,GAAGa,2BAA2B,EAAI,KAChLgD,EAAuB3D,EAAKrH,UAAU0L,GAAGvE,qBAAqB,GAAGiC,QACjEoI,EAAqBnK,EAAKrH,UAAU0L,GAAGvE,qBAAqB,GAAGmE,MAE/DL,EAAmBjP,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBE,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OAAS,GAAG6O,yBAAyB,EAC7IsK,mBAAsB/K,EAAKrH,UAAU0L,GAAGvE,qBAAqBE,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OAAS,GAA8B,4BAAI+C,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBE,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OAAS,GAAG+O,2BAA2B,EAAI,KAI/Q,IAAK,IAHLkD,EAAsB7D,EAAKrH,UAAU0L,GAAGvE,qBAAqBE,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OAAS,GAAGmQ,QAChHqI,EAAoBpK,EAAKrH,UAAU0L,GAAGvE,qBAAqBE,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OAAS,GAAGqS,MAErG3V,EAAI,EAAGA,EAAI4b,EAAqBtY,OAAQtD,CAAC,GACd,EAA5Bqb,EAAmB/X,SAAY+X,GAAsB,MAEzDA,GAAsBO,EAAqB5b,GAAG6P,kBAE1C0L,EAAiB1U,QAAQ+U,EAAqB5b,GAAGkQ,gBAAgBgK,SAAS,EAAI,IAChD,EAA1BqB,EAAiBjY,SAAYiY,GAAoB,MAErDA,GAAoBK,EAAqB5b,GAAGkQ,gBAAgBgK,WAG5D0B,EAAqB5b,GAAGoY,eACpB9N,EAAUzD,QAAQ+U,EAAqB5b,GAAGoY,eAAetC,IAAI,EAAI,IAC1C,EAAnBxL,EAAUhH,SAAYgH,GAAa,MAEvCA,GAAasR,EAAqB5b,GAAGoY,eAAetC,KAEhD8F,EAAqB5b,GAAGoY,eAAe2F,MAA2D,EAApDnC,EAAqB5b,GAAGoY,eAAe2F,IAAIza,SAAYgH,GAAa,KAAOsR,EAAqB5b,GAAGoY,eAAe2F,IAAM,KAI1KzT,EAAUzD,QAAQ+U,EAAqB5b,GAAG+P,SAAS+F,IAAI,EAAI,IACpC,EAAnBxL,EAAUhH,SAAYgH,GAAa,MAEvCA,GAAasR,EAAqB5b,GAAG+P,SAAS+F,KAE1C8F,EAAqB5b,GAAG+P,SAASgO,MAAqD,EAA9CnC,EAAqB5b,GAAG+P,SAASgO,IAAIza,SAAYgH,GAAa,KAAOsR,EAAqB5b,GAAG+P,SAASgO,IAAM,KAIvI,EAArBtC,EAAYnY,SAAYmY,GAAe,SAEvCG,EAAqB5b,GAAGqQ,gBAAkE,EAAhDuL,EAAqB5b,GAAGqQ,eAAe/M,SAAYmY,GAAeG,EAAqB5b,GAAGqQ,gBAE7G,EAAvBqL,EAAcpY,SAAYoY,GAAiB,SAE3CE,EAAqB5b,GAAGoQ,kBAAsE,EAAlDwL,EAAqB5b,GAAGoQ,iBAAiB9M,SAAYoY,GAAiBE,EAAqB5b,GAAGoQ,kBAEpH,EAAtBuL,EAAarY,SAAYqY,GAAgB,SAEzCC,EAAqB5b,GAAGsQ,iBAAoE,EAAjDsL,EAAqB5b,GAAGsQ,gBAAgBhN,SAAYqY,GAAgBC,EAAqB5b,GAAGsQ,iBAE5G,EAA3BwN,EAAkBxa,SAAYwa,GAAqB,MAEvDA,GAAqB,IAAMpO,EAAQ,QAAQ,EAAEkM,EAAqB5b,GAAGoR,MAAO,CAAC,EAGjFM,EAAKrH,UAAU0L,GAAG4G,UAAYrS,EAC9BoH,EAAKrH,UAAU0L,GAAG6G,mBAAqBvB,EACvC3J,EAAKrH,UAAU0L,GAAG8G,iBAAmBtB,EACrC7J,EAAKrH,UAAU0L,GAAGG,kBAAoB7P,OAAO6O,CAAiB,EAC9DxD,EAAKrH,UAAU0L,GAAG+G,oBAAsB,EAAwBzW,OAAOmW,CAAmB,EAAI,KAC9F9K,EAAKrH,UAAU0L,GAAGK,qBAAuBf,EACzC3D,EAAKrH,UAAU0L,GAAGM,4BAA+BhB,EAAqBiB,UAAmD,EAAvCjB,EAAqBiB,SAAShT,OAAc+R,EAAqBiB,SAAYjB,EAAqBkB,MAA2C,EAAnClB,EAAqBkB,KAAKjT,OAAc+R,EAAqBkB,KAAOlB,EAAqBmB,aACrR9E,EAAKrH,UAAU0L,GAAGU,8BAAgC/E,EAAKmC,mCAAmCwB,CAAoB,EAC9G3D,EAAKrH,UAAU0L,GAAGrC,iBAAmBrN,OAAOiP,CAAgB,EAC5D5D,EAAKrH,UAAU0L,GAAGgH,mBAAqB,mBAAuB1W,OAAOoW,kBAAkB,EAAI,KAC3F/K,EAAKrH,UAAU0L,GAAGpC,oBAAsB4B,EACxC7D,EAAKrH,UAAU0L,GAAGW,2BAA8BnB,EAAoBe,UAAkD,EAAtCf,EAAoBe,SAAShT,OAAciS,EAAoBe,SAAYf,EAAoBgB,MAA0C,EAAlChB,EAAoBgB,KAAKjT,OAAciS,EAAoBgB,KAAOhB,EAAoBiB,aAC7Q9E,EAAKrH,UAAU0L,GAAGnC,6BAA+BlC,EAAKmC,mCAAmC0B,CAAmB,EAC5G7D,EAAKrH,UAAU0L,GAAGiH,2BAA6B3W,OAAOiV,CAA0B,EAChF5J,EAAKrH,UAAU0L,GAAGkH,qBAAuB5W,OAAOqL,EAAKrH,UAAU0L,GAAGmC,mBAAmB,GAAGjD,WAAW,EACnGvD,EAAKrH,UAAU0L,GAAGoH,mBAAqB1B,EACvC/J,EAAKrH,UAAU0L,GAAGqH,qBAAuB1B,EACzChK,EAAKrH,UAAU0L,GAAGsH,oBAAsB1B,EACxCjK,EAAKrH,UAAU0L,GAAGY,UAAYnB,EAC9B9D,EAAKrH,UAAU0L,GAAG7C,qBAAuBnB,EACzCL,EAAKrH,UAAU0L,GAAGiI,kBAAoBF,EACtCpM,EAAKrH,UAAU0L,GAAGuH,mBAAqBzB,EACvCnK,EAAKrH,UAAU0L,GAAGwH,kBAAoBzB,EACtCpK,EAAKrH,UAAU0L,GAAGyH,oBAAsBzB,CAC5C,CACJ,CACJ,CACR,EACAkC,gBAAiB,SAAUlK,EAAWC,EAASE,EAAaD,EAAcE,EAAUC,EAAmBC,EAAgBC,EAAmBC,EAAiBE,EAAciJ,EAASC,EAAiBC,EAAYC,EAAiBhJ,GAC5N,IACIC,EAAgB,GAmEpB,OAjEIZ,IACAY,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,IACjD4Q,IAAeA,EAAYrF,IAAyB,MAAnBqF,EAAYrF,KAAYiG,GAAiB,eAAiBZ,EAAYrF,IAG3F,MAAhBoF,GAA8C,EAAtBA,EAAa3Q,SAErCwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,gBAAkByR,mBAAmBd,CAAY,GAGtD,MAAZE,GAAsC,EAAlBA,EAAS7Q,SAE7BwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,YAAcyR,mBAAmBZ,CAAQ,GAGrC,MAArBC,GAAwD,EAA3BA,EAAkB9Q,SAE/CwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,qBAAuByR,mBAAmBX,CAAiB,GAG1D,MAAlBC,GAAkD,EAAxBA,EAAe/Q,SAEzCwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,kBAAoByR,mBAAmBV,CAAc,GAGjD,MAArBC,GAAwD,EAA3BA,EAAkBhR,SAE/CwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,qBAAuByR,mBAAmBT,CAAiB,GAGzD,MAAnBC,GAAoD,EAAzBA,EAAgBjR,SAE3CwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,mBAAqByR,mBAAmBR,CAAe,GAGxD,MAAhBE,GAA8C,EAAtBA,EAAanR,SAErCwR,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,gBAAkByR,mBAAmBN,CAAY,GAGlEiJ,IAEA5I,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,WAAaoa,GAG9BC,IAEA7I,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,mBAAqBqa,GAGtCC,IAEA9I,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,cAAgBsa,GAGjCC,IAEA/I,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,mBAAqBua,GAGtChJ,IAEAC,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,aAAeuR,GAG7B1U,EAAMwD,IAAIgO,uBAAyB,cAAgBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,UAAYyN,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,CAC1N,EACAoM,qBAAsB,SAAUnK,EAAWC,EAASS,EAAcgF,EAAY0E,EAAUC,EAAoB1E,GACxG,IAAIhI,EAAOpI,KACPwL,EAAgB,GA2BpB,OAzBIL,GAAsC,EAAtBA,EAAanR,SAE7BwR,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,YAAcmR,GAGjB,GAAdgF,IAEA3E,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,OAASmW,GAGd,GAAZ0E,IAEArJ,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,YAAc6a,GAGT,GAAtBC,IAEAtJ,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,sBAAwB8a,GAGzB,CAAA,IAAhB1E,IAEA5E,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,gBAAkBoW,GAGhCvZ,EAAMwD,IAAIgO,uBAAyB,cAAgBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,YAAcyN,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnN9N,KACG,SAAUH,GACN6N,EAAKrH,UAAYxG,EAAS7B,KAE1B,IAAK,IAAI+T,EAAI,EAAGA,EAAIrE,EAAKrH,UAAU/G,OAAQyS,CAAC,GAAI,CAgB5C,IAfA,IAAIb,EAAoB,KACpBG,EAAuB,KACvBC,EAAmB,KACnBC,EAAsB,KACtB+F,EAA6B,KAC7BhR,EAAY,GACZ+Q,EAAqB,GACrBI,EAAc,GACdC,EAAgB,GAChBC,EAAe,GACfnG,EAAY,EACZzD,EAAc,GAEd6J,EAAuB,GAElBpI,EAAI,EAAGA,EAAI9B,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OAAQkQ,CAAC,GAsChE,GArCA9B,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGpB,iCAAmC/L,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGrB,yBAAyB,EAAE9K,OAAO,kBAAkB,GAE7K6N,CAAAA,GAKG7O,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGrB,yBAAyB,EAAI+C,KAJlFA,EAAoB7O,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGrB,yBAAyB,EAC9FkD,EAAuB3D,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGC,UAShE6B,CAAAA,GAKGjP,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGrB,yBAAyB,EAAImD,KAJlFA,EAAmBjP,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGrB,yBAAyB,EAC7FoD,EAAsB7D,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGC,UAS/D6H,CAAAA,GAIGjV,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGyE,YAAYhD,WAAW,EAAIqG,KAHhFA,EAA6BjV,OAAOqL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGyE,YAAYhD,WAAW,GAQnGvF,EAAQ,QAAQ,EAAEkM,EAAsB,CAAE/L,kBAAmB6B,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGyE,YAAYpI,iBAAkB,EAAG,CAAA,CAAK,EAAEvM,QACjJsY,EAAqBxV,KAAKsL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGyE,WAAW,EAG/EvG,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,aAA8E,EAA/Dd,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYlP,QAClC,cAAzEoO,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGqC,uBAAuBC,KAGjE,IAFAN,GAAa9D,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYlP,OAE9D4E,EAAI,EAAGA,EAAIwJ,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYlP,OAAQ4E,CAAC,GAClD,EAArB6J,EAAYzO,SAAYyO,GAAe,SAE3CA,GAAeL,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYtK,GAAG0K,SAAW,IAAMlB,EAAKrH,UAAU0L,GAAGvE,qBAAqBgC,GAAGhB,YAAYtK,GAAG2K,YAMlK,IAAK,IAAI7S,EAAI,EAAGA,EAAI4b,EAAqBtY,OAAQtD,CAAC,GACd,EAA5Bqb,EAAmB/X,SAAY+X,GAAsB,MAEzDA,GAAsBO,EAAqB5b,GAAG6P,kBAE1CvF,EAAUzD,QAAQ+U,EAAqB5b,GAAG+P,SAAS+F,IAAI,EAAI,IACpC,EAAnBxL,EAAUhH,SAAYgH,GAAa,MAEvCA,GAAasR,EAAqB5b,GAAG+P,SAAS+F,MAGzB,EAArB2F,EAAYnY,SAAYmY,GAAe,SAEvCG,EAAqB5b,GAAGqQ,gBAAkE,EAAhDuL,EAAqB5b,GAAGqQ,eAAe/M,SAAYmY,GAAeG,EAAqB5b,GAAGqQ,gBAE7G,EAAvBqL,EAAcpY,SAAYoY,GAAiB,SAE3CE,EAAqB5b,GAAGoQ,kBAAsE,EAAlDwL,EAAqB5b,GAAGoQ,iBAAiB9M,SAAYoY,GAAiBE,EAAqB5b,GAAGoQ,kBAEpH,EAAtBuL,EAAarY,SAAYqY,GAAgB,SAEzCC,EAAqB5b,GAAGsQ,iBAAoE,EAAjDsL,EAAqB5b,GAAGsQ,gBAAgBhN,SAAYqY,GAAgBC,EAAqB5b,GAAGsQ,iBAG/IoB,EAAKrH,UAAU0L,GAAG4G,UAAYrS,EAC9BoH,EAAKrH,UAAU0L,GAAG6G,mBAAqBvB,EACvC3J,EAAKrH,UAAU0L,GAAGG,kBAAoB7P,OAAO6O,CAAiB,EAAE7N,OAAO,kBAAkB,EACzFqK,EAAKrH,UAAU0L,GAAGK,qBAAuBf,EACzC3D,EAAKrH,UAAU0L,GAAG8D,6BAA+BxE,EAAqBiB,SACtE5E,EAAKrH,UAAU0L,GAAGU,8BAAgC/E,EAAKmC,mCAAmCwB,CAAoB,EAC9G3D,EAAKrH,UAAU0L,GAAGrC,iBAAmBrN,OAAOiP,CAAgB,EAAEjO,OAAO,kBAAkB,EACvFqK,EAAKrH,UAAU0L,GAAGpC,oBAAsB4B,EACxC7D,EAAKrH,UAAU0L,GAAG+D,4BAA8BvE,EAAoBe,SACpE5E,EAAKrH,UAAU0L,GAAGnC,6BAA+BlC,EAAKmC,mCAAmC0B,CAAmB,EAC5G7D,EAAKrH,UAAU0L,GAAGiH,2BAA6B3W,OAAOiV,CAA0B,EAAEjU,OAAO,kBAAkB,EAC3GqK,EAAKrH,UAAU0L,GAAGoH,mBAAqB1B,EACvC/J,EAAKrH,UAAU0L,GAAGqH,qBAAuB1B,EACzChK,EAAKrH,UAAU0L,GAAGsH,oBAAsB1B,EACxCjK,EAAKrH,UAAU0L,GAAGY,UAAYnB,EAC9B9D,EAAKrH,UAAU0L,GAAGsI,iBAAmBtM,EACrCL,EAAKrH,UAAU0L,GAAGgE,2BAA6BrI,EAAKrH,UAAU0L,GAAGvE,qBAAqBlO,OACtFoO,EAAKrH,UAAU0L,GAAGiE,gBAAkBtI,EAAKrH,UAAU0L,GAAG5F,YAAY2F,KAClEpE,EAAKrH,UAAU0L,GAAGuI,aAAe5M,EAAKrH,UAAU0L,GAAG1C,SAASyC,IAChE,CACJ,CACJ,CACR,EACAyI,aAAc,SAAUC,GAIpB,IAHA,IAAI9M,EAAOpI,KACPyM,EAAIpW,QAAQ+Y,KAAKhH,EAAKkJ,QAAQ,EAEzB1S,EAAI,EAAGA,EAAI6N,EAAEvE,qBAAqBlO,OAAQ4E,CAAC,GAChD6N,EAAEvE,qBAAqBtJ,GAAGuW,cAA0B,IAATvW,EAAI,GAC/C6N,EAAEvE,qBAAqBtJ,GAAGiK,0BAA4BzC,EAAQ,MAAM,EAAErJ,OAAO0P,EAAEvE,qBAAqBtJ,GAAGiK,yBAAyB,EAAEhL,OAAO,EAAG,qBAAqB,EACjK,OAAO4O,EAAEvE,qBAAqBtJ,GAAG4K,kBAEjC,OAAOiD,EAAEvE,qBAAqBtJ,GAAG+P,YAAYF,sBAUjD,GAPIhC,EAAEmC,oBAAoB,OAAOnC,EAAEmC,mBAE/BnC,EAAE1C,WACE0C,EAAE1C,SAASC,eAAe,OAAOyC,EAAE1C,SAASC,cAC5CyC,EAAE1C,SAAS8E,WAAU,OAAOpC,EAAE1C,SAAS8E,SAG3CpC,EAAE2I,2BACF,IAASxW,EAAI,EAAGA,EAAI6N,EAAE2I,2BAA2Bpb,OAAQ4E,CAAC,GAClD6N,EAAE2I,2BAA2BxW,GAAGyW,+BAA+B,OAAO5I,EAAE2I,2BAA2BxW,GAAGyW,8BAMlH,OAFA5I,EAAExF,cAAgB,EAEbwF,EAAElH,GAgBI1O,EAAMJ,IAAI4R,uBAAyB,cAAgBoE,EAAElH,GAAIkH,EAAG,CAAEnE,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzG9N,KACG,SAAUH,GAGN,OAAO6N,EAAKkJ,QAChB,CACJ,EAjBGza,EAAMqY,KAAK7G,uBAAyB,aALT,CAC9ByB,SAAU2C,EACV6I,gBAAiBJ,CACrB,EAEsF,CAAE5M,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5H9N,KACG,SAAUH,GAGN,OAFA6N,EAAKkJ,SAAW/W,EAAS7B,KAElB0P,EAAKkJ,QAChB,CACJ,CAYZ,EACAiE,aAAc,SAAUjE,GAChB7E,EAAI,CACJlH,GAAI+L,EAAS/L,EACjB,EAEA,OAAO1O,EAAMJ,IAAI4R,uBAAyB,cAAgBoE,EAAElH,GAAK,QAASkH,EAAG,CAAEnE,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnH9N,KACG,SAAUH,GAGN,OAAO6N,KAAKkJ,QAChB,CACJ,CACR,EACAkE,gCAAiC,SAAUlE,GAIvC,IAHA,IAAIlJ,EAAOpI,KACPyM,EAAIpW,QAAQ+Y,KAAKhH,EAAKkJ,QAAQ,EAEzB1S,EAAI,EAAGA,EAAI6N,EAAEvE,qBAAqBlO,OAAQ4E,CAAC,GAChD6N,EAAEvE,qBAAqBtJ,GAAGuW,cAA0B,IAATvW,EAAI,GAC/C6N,EAAEvE,qBAAqBtJ,GAAGiK,0BAA4BzC,EAAQ,MAAM,EAAErJ,OAAO0P,EAAEvE,qBAAqBtJ,GAAGiK,yBAAyB,EAAEhL,OAAO,EAAG,qBAAqB,EACjK,OAAO4O,EAAEvE,qBAAqBtJ,GAAG4K,kBAEjC,OAAOiD,EAAEvE,qBAAqBtJ,GAAG+P,YAAYF,sBAKjD,OAFIhC,EAAEmC,oBAAoB,OAAOnC,EAAEmC,mBAE5B/X,EAAMJ,IAAI4R,uBAAyB,cAAgBiJ,EAAS/L,GAAK,2BAA4BkH,EAAG,CAAEnE,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7I9N,KACG,SAAUH,GAGN,OAAO6N,EAAKkJ,QAChB,CACJ,CACR,EACAmE,oCAAqC,SAAUnE,GAC3C,IAAIlJ,EAAOpI,KACPyM,EAAIpW,QAAQ+Y,KAAKhH,EAAKkJ,QAAQ,EAElC,GAAI7E,EAAEvE,qBACF,IAAK,IAAItJ,EAAI,EAAGA,EAAI6N,EAAEvE,qBAAqBlO,OAAQ4E,CAAC,GAChD,OAAO6N,EAAEvE,qBAAqBtJ,GAAG+P,YAAYF,sBAMrD,OAHIhC,EAAEmC,oBAAoB,OAAOnC,EAAEmC,mBAC/BnC,EAAE1C,SAASC,eAAe,OAAOyC,EAAE1C,SAASC,cAEzCnT,EAAMJ,IAAI4R,uBAAyB,cAAgBiJ,EAAS/L,GAAK,+BAAgCkH,EAAG,CAAEnE,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjJ9N,KACG,SAAUH,GAGN,OAAO6N,EAAKkJ,QAChB,CACJ,CACR,EACAoE,oCAAqC,SAAUpE,GAC3C,IAAIlJ,EAAOpI,KACPyM,EAAIpW,QAAQ+Y,KAAKhH,EAAKkJ,QAAQ,EAElC,GAAI7E,EAAEvE,qBACF,IAAK,IAAItJ,EAAI,EAAGA,EAAI6N,EAAEvE,qBAAqBlO,OAAQ4E,CAAC,GAChD,OAAO6N,EAAEvE,qBAAqBtJ,GAAG+P,YAAYF,sBAMrD,OAHIhC,EAAEmC,oBAAoB,OAAOnC,EAAEmC,mBAC/BnC,EAAE1C,UAAU,OAAO0C,EAAE1C,SAElBlT,EAAMJ,IAAI4R,uBAAyB,cAAgBiJ,EAAS/L,GAAK,+BAAgCkH,EAAG,CAAEnE,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjJ9N,KACG,SAAUH,GAGN,OAAO6N,EAAKkJ,QAChB,CACJ,CACR,EACAqE,mBAAoB,SAAUrE,GACtB7E,EAAI,CACJlH,GAAI+L,EAAS/L,GACbqQ,eAAgBtE,EAASsE,eACzBjM,KAAM2H,EAAS3H,IACnB,EAEA,OAAO9S,EAAMJ,IAAI4R,uBAAyB,cAAgBoE,EAAElH,GAAK,eAAgBkH,EAAG,CAAEnE,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC1H9N,KACG,SAAUH,GAGN,OAAO6N,KAAKkJ,QAChB,CACJ,CACR,EACAuE,eAAgB,WAIZ,IAHA,IAAIzN,EAAOpI,KACPyM,EAAIpW,QAAQ+Y,KAAKhH,EAAKkJ,QAAQ,EAEzB1S,EAAI,EAAGA,EAAI6N,EAAEvE,qBAAqBlO,OAAQ4E,CAAC,GAChD6N,EAAEvE,qBAAqBtJ,GAAGuW,cAA0B,IAATvW,EAAI,GAKnD,OAFI6N,EAAEmC,oBAAoB,OAAOnC,EAAEmC,mBAE5B/X,EAAMwY,OAAOhH,uBAAyB,cAAgBoE,EAAElH,GAAI,CAAE+C,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzG9N,KACG,SAAUH,GAGN,OAAO6N,EAAKkJ,QAChB,CACJ,CACR,EACAwE,sBAAuB,SAAUxE,GAC7B,IAAIS,EAAqB,GAIzB,GAFKT,EAAAA,GAAqBtR,KAAKsR,SAM3B,IAHA,IAAIyE,EAA6B,GAC7BC,EAAgB,CAAA,EAEXpX,EAAI,EAAGA,EAAI0S,EAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAGvD,GAFAoX,EAAgB,CAAA,EAEyB,GAArCD,EAA2B/b,OACD,IAAtB+X,IAA0BA,GAAsB,MAEpDA,GAAsBT,EAASpJ,qBAAqBtJ,GAAG+P,YAAYpI,kBACnEwP,EAA2BjZ,KAAKwU,EAASpJ,qBAAqBtJ,GAAG+P,YAAYpI,iBAAiB,MAE7F,CACD,IAAK,IAAI0P,EAAI,EAAGA,EAAIF,EAA2B/b,OAAQic,CAAC,GAChDF,EAA2BE,IAAM3E,EAASpJ,qBAAqBtJ,GAAG+P,YAAYpI,oBAC9EyP,EAAgB,CAAA,GAInBA,IACyB,IAAtBjE,IAA0BA,GAAsB,MAEpDA,GAAsBT,EAASpJ,qBAAqBtJ,GAAG+P,YAAYpI,kBACnEwP,EAA2BjZ,KAAKwU,EAASpJ,qBAAqBtJ,GAAG+P,YAAYpI,iBAAiB,EAEtG,CAIR,OAAOwL,CACX,EACAnE,+BAAgC,SAAUC,GACtC,IAAIC,EAAmB,GACnBnN,EAAU,KAEd,OAAQ,OAJ8BkN,GAKlC,IAAK,SACD,GAN8BA,EAMb1D,QACbxJ,EAP0BkN,EAOH1D,YAEtB,CAAA,GAAIpQ,EATqB8T,EASRX,cATQW,EASqBZ,MATrBY,EAS0Cb,UAIpE,KAAM,wBAHNrM,EAV0BkN,CAc9B,CACA,MACJ,IAAK,SAGDlN,EAAUX,KAAKsR,SAASpJ,qBAnBM2F,GAmBsB1D,QAEpD,MACJ,QACI,KAAM,uBACd,CAUA,OAFA2D,GADAA,GADAA,GAAqC,MAAhBnN,EAAQsM,MAAgC,IAAhBtM,EAAQsM,KAAyCtM,EAAQsM,KAA4B,KAC3F,MAAlBtM,EAAQoN,QAAoC,IAAlBpN,EAAQoN,OAAiBD,EAA2C,IAAMnN,EAAQoN,OAA/BpN,EAAQoN,OAAgC,MACjG,MAApBpN,EAAQqM,UAAwC,IAApBrM,EAAQqM,SAAmBc,EAA6C,IAAMnN,EAAQqM,SAAjCrM,EAAQqM,SAAoC,GAGtJ,EACAzC,mCAAoC,SAAUsD,GAC1C,IAAIC,EAAmB,GACnBnN,EAAU,KAEd,OAAQ,OAJkCkN,GAKtC,IAAK,SACD,GANkCA,EAMjB1D,QACbxJ,EAP8BkN,EAOP1D,YAEtB,CAAA,GAAIpQ,EATyB8T,EASZX,cATYW,EASiBZ,MATjBY,EASsCb,UAIpE,KAAM,wBAHNrM,EAV8BkN,CAclC,CACA,MACJ,IAAK,SAGDlN,EAAUX,KAAKsR,SAASpJ,qBAnBU2F,GAmBkB1D,QAEpD,MACJ,QACI,KAAM,uBACd,CAUA,OAFA2D,GADAA,GADAA,GAJAA,GAA4C,MAAvBnN,EAAQqN,aAA8C,IAAvBrN,EAAQqN,YAAqBrN,EAAQqN,YAAc,KAIlE,MAAhBrN,EAAQsM,MAAgC,IAAhBtM,EAAQsM,KAAea,EAAyC,KAAOnN,EAAQsM,KAA9BtM,EAAQsM,KAA6B,MAC5F,MAAlBtM,EAAQoN,QAAoC,IAAlBpN,EAAQoN,OAAiBD,EAA2C,KAAOnN,EAAQoN,OAAhCpN,EAAQoN,OAAiC,MAClG,MAApBpN,EAAQqM,UAAwC,IAApBrM,EAAQqM,SAAmBc,EAA6C,KAAOnN,EAAQqM,SAAlCrM,EAAQqM,SAAqC,GAGvJ,EACAkJ,sBAAuB,SAAU5E,EAAUrQ,GAGvC,IAFA,IAAIkV,EAAqB,GAEhBC,EAAI,EAAGA,EAAInV,EAAUjH,OAAQoc,CAAC,GAC/BnV,EAAUmV,GAAGC,iBACTpV,EAAUmV,GAAGC,gBAAgBxP,YAAYyP,OAAShF,EAASzK,YAAYyP,OACvEH,EAAmBrZ,KAAKmE,EAAUmV,EAAE,EAKhD,OAAOD,CACX,EACA7G,UAAW,SAAU7L,GAGjB,OAAO5M,EAAMwD,IAAIgO,uBAAyB,cAAgB5E,EAAK,UAAW,CAAE6E,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,EAAGkH,aAAc,aAAc,CAAC,EAC7IhV,KACG,SAAUH,GACN,OAAOA,CACX,CACJ,CACR,EACAgc,2BAA4B,SAAUC,EAAoBlF,GACtD,IAKAlR,GADAA,GADAA,GADAA,EAFW,IAEH,kFACA,gBAAkBoW,EAAmBjK,uBAAuBC,KAAO,QACnE,gBAAmBgK,EAAmBrB,cAAgB,GAAM,OAAU7D,EAASpJ,qBAAqBoJ,EAASpJ,qBAAqBlO,OAAS,GAAGmb,cAAgB,GAAM,QACpK,mBAAqB7D,EAAShF,eAAiB,MAwBvD,OAtBIkK,EAAmB7H,YAAY8H,UAAwD,KAA5CD,EAAmB7H,YAAY8H,WAC1ErW,GAAQ,mBAAqBoW,EAAmB7H,YAAY8H,SAAW,MAGvED,EAAmB7H,YAAY+H,yBAAgF,KAArDF,EAAmB7H,YAAYgI,oBACzFvW,GAAQ,oBAAsBoW,EAAmB7H,YAAYgI,kBAAoB,MAGrFvW,GAAQ,mBAAqBoW,EAAmBvD,iBAAmB,KAE/DuD,EAAmB1D,cACnB1S,GAAQ,sBAAwBrD,OAAOyZ,EAAmB1D,WAAW,EAAE/U,OAAO,gBAAgB,EAAI,MAGlGyY,EAAmBxD,iBACnB5S,GAAQ,uBAAyBrD,OAAOyZ,EAAmBxD,cAAc,EAAEjV,OAAO,gBAAgB,EAAI,MAGtGyY,EAAmBI,eAAsD,KAArCJ,EAAmBI,gBACvDxW,GAAQ,oBAAsBoW,EAAmBI,cAAgB,MAG9DxW,CACX,EACAyW,mBAAoB,SAAUjH,EAAI4G,GAC9B,IACIhL,EAAgB,GAYpB,OAVU,MAANoE,GAA0B,EAAZA,EAAG5V,SAEjBwR,EADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,MAAQ4V,GAGzB4G,IAEAhL,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,sBAAwBwc,EAAmBjR,IAGzD1O,EAAMqY,KAAK7G,uBAAyB,uBAAyBmD,EAAe,KAAM,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC/H9N,KACG,SAAUH,GACN,OAAOA,CACX,CACJ,CACR,EACAoV,gBAAiB,SAAUC,EAAIxP,EAAMkR,GACjC,IACI9F,EAAgB,GAYpB,OALI8F,IAEA9F,GADAA,GAA0C,GAAxBA,EAAcxR,OAAe,IAAM,KACpC,YAAcsX,EAAS/L,IAGrC1O,EAAMqY,KAAK7G,uBAAyB,yBAA2BmD,EAX1D,CACRqE,GAAID,EACJE,QAAS,kBACTC,KAAM3P,CACV,EAO4F,CAAEkI,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClI9N,KACG,SAAUH,GACN,OAAOA,CACX,CACJ,CACR,EACAuc,iBAAkB,SAAU5F,EAAanQ,GACrC,IACIyK,EAAgB,GAOpB,OALKzO,OAAOA,OAAO,EAAEgB,OAAO,YAAY,CAAC,EAAEoT,OAAOpU,OAAOmU,CAAW,EAAEnT,OAAO,YAAY,CAAC,IAEtFyN,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,eAAiB+C,OAAOmU,CAAW,EAAEnT,OAAO,YAAY,GAGtElH,EAAMqY,KAAK7G,uBAAyB,qBAAuBmD,EAAezK,EAAW,CAAEuH,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClI9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EAEAqe,2CAII,OAAOlgB,EAAMwD,IAAIgO,uBAAyB,2CAA4C,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5H9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EAEAse,6BAA6BC,GAIzB,OAAOpgB,EAAMqY,KAAK7G,uBAAyB,0CAA2C4O,EAAuC,CAAE3O,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnK9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EAEAwe,4BAA4BD,GAIxB,OAAOpgB,EAAMqY,KAAK7G,uBAAyB,yCAA0C4O,EAAuC,CAAE3O,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClK9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,CACJ,CACJ,EAAE;AC5kCFuI,UAAUgD,QAAQ,kBAAmB,CAAC,QAAS,cAAe,kBAAmB,SAAUpN,EAAOoM,EAAakU,GAC3G,MAAO,CACHC,SAAU,KACVnW,UAAW,KACXoW,kBAAmB,WAKf,OAJArX,KAAKoX,SAAW,GAITpX,KAAKoX,QAChB,EACAE,YAAa,SAAU7T,GACnB,IAAI2E,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,cAAgB5E,EAAI,CAAE6E,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACpG9N,KACG,SAAUH,GACN6N,EAAKgP,SAAW7c,EAAS7B,KAEzB,IAAK,IAAI6e,EAAI,EAAGA,EAAInP,EAAKgP,SAASI,iBAAiBxd,OAAQud,CAAC,GACxDnP,EAAKgP,SAASI,iBAAiBD,GAAGE,iBAAmB1a,OAAOqL,EAAKgP,SAASI,iBAAiBD,GAAGG,SAAS,EAAE3Z,OAAO,YAAY,EAC5HqK,EAAKgP,SAASI,iBAAiBD,GAAGI,eAAiB5a,OAAOqL,EAAKgP,SAASI,iBAAiBD,GAAGK,OAAO,EAAE7Z,OAAO,YAAY,EAG5H,OAAOqK,EAAKgP,QAChB,CACJ,CACR,EACAS,aAAc,WACV,IAAIzP,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,aAAc,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC9F9N,KACG,SAAUH,GACN6N,EAAKnH,UAAY1G,EAAS7B,KAE1B,IAAK,IAAI0d,EAAI,EAAGA,EAAIhO,EAAKnH,UAAUjH,OAAQoc,CAAC,GAAI,CAG5C,IAFA,IAAI0B,EAAkB,KAEbC,EAAI,EAAGA,EAAI3P,EAAKnH,UAAUmV,GAAGvH,SAAS7U,OAAQ+d,CAAC,IAChD,CAACD,GAAmB1P,EAAKnH,UAAUmV,GAAGvH,SAASkJ,GAAGlR,YAAYyP,MAAQwB,EAAgBjR,YAAYyP,SAClGwB,EAAkB1P,EAAKnH,UAAUmV,GAAGvH,SAASkJ,IAIrD3P,EAAKnH,UAAUmV,GAAGC,gBAAkByB,CACxC,CAEA,OAAO1P,EAAKnH,SAChB,CACJ,CACR,EACA+W,gBAAiB,SAAUhZ,EAAMiZ,EAAoBC,GACjD,IAAI9P,EAAOpI,KACPwL,EAAgB,GAepB,OAba,OAATxM,GAA+B,EAAdA,EAAKhF,SAEtBwR,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,QAAUgF,GAE3BiZ,IAEAzM,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,wBAA0Bie,GAE3CC,IAEA1M,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,kBAAoBke,GAGlCrhB,EAAMwD,IAAIgO,uBAAyB,aAAemD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC9G9N,KACG,SAAUH,GACN6N,EAAKnH,UAAY1G,EAAS7B,KAE1B,IAAK,IAAI0d,EAAI,EAAGA,EAAIhO,EAAKnH,UAAUjH,OAAQoc,CAAC,GAAI,CAG5C,IAFA,IAAI0B,EAAkB,KAEbC,EAAI,EAAGA,EAAI3P,EAAKnH,UAAUmV,GAAGvH,SAAS7U,OAAQ+d,CAAC,IAChD,CAACD,GAAmB1P,EAAKnH,UAAUmV,GAAGvH,SAASkJ,GAAGlR,YAAYyP,MAAQwB,EAAgBjR,YAAYyP,SAClGwB,EAAkB1P,EAAKnH,UAAUmV,GAAGvH,SAASkJ,IAIrD3P,EAAKnH,UAAUmV,GAAGC,gBAAkByB,CACxC,CAEA,OAAO1P,EAAKnH,SAChB,CACJ,CACR,EACAkX,wBAAyB,SAASC,GAC9B,IAAI5M,EAAgB,GAIpB,OAFG4M,IAAY5M,GAAiB,eAAiBsF,UAAUsH,CAAU,GAE9DvhB,EAAMwD,IAAIgO,uBAAyB,0BAA4BmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC3H9N,KACG,SAAUH,GACN,IAMQ8d,EANJzM,EAAoB,KACpBG,EAAuB,KACvBC,EAAmB,KACnBC,EAAsB,KAE1B,GAAImM,EAkBA,OAf0B,QAFtBC,EAAW9d,EAAS7B,MAEXoR,WACT8B,EAAoB7O,OAAOsb,EAASvO,SAAS5B,qBAAqB,GAAGW,yBAAyB,EAC9FkD,EAAuBsM,EAASvO,SAAS5B,qBAAqB,GAAGiC,QAEjE6B,EAAmBjP,OAAOsb,EAASvO,SAAS5B,qBAAqBmQ,EAASvO,SAAS5B,qBAAqBlO,OAAS,GAAG6O,yBAAyB,EAC7IoD,EAAsBoM,EAASvO,SAAS5B,qBAAqBmQ,EAASvO,SAAS5B,qBAAqBlO,OAAS,GAAGmQ,QAEhHkO,EAASvO,SAAS8C,kBAAoB7P,OAAO6O,CAAiB,EAAE7N,OAAO,gBAAgB,EACvFsa,EAASvO,SAASgD,qBAAuBf,EACzCsM,EAASvO,SAASqD,8BAAgCgK,EAAgB5M,mCAAmCwB,CAAoB,EACzHsM,EAASvO,SAASM,iBAAmBrN,OAAOiP,CAAgB,EAAEjO,OAAO,gBAAgB,EACrFsa,EAASvO,SAASO,oBAAsB4B,EACxCoM,EAASvO,SAASQ,6BAA+B6M,EAAgB5M,mCAAmC0B,CAAmB,GAGpHoM,EAKP,IAFA,IAAIC,EAAY/d,EAAS7B,KAEhBkG,EAAI,EAAGA,EAAI0Z,EAAUte,OAAQ4E,CAAC,GACnC,GAA8B,OAA1B0Z,EAAU1Z,GAAGkL,SAAmB,CAMhC,IAAK,IALL8B,EAAoB,KACpBG,EAAuB,KACvBC,EAAmB,KACnBC,EAAsB,KAEb/B,EAAI,EAAGA,EAAIoO,EAAU1Z,GAAGkL,SAAS5B,qBAAqBlO,OAAQkQ,CAAC,IAC/D0B,CAAAA,GAKG7O,OAAOub,EAAU1Z,GAAGkL,SAAS5B,qBAAqBgC,GAAGrB,yBAAyB,EAAI+C,KAJtFA,EAAoB7O,OAAOub,EAAU1Z,GAAGkL,SAAS5B,qBAAqBgC,GAAGrB,yBAAyB,EAClGkD,EAAuBuM,EAAU1Z,GAAGkL,SAAS5B,qBAAqBgC,GAAGC,UASpE6B,CAAAA,GAKGjP,OAAOub,EAAU1Z,GAAGkL,SAAS5B,qBAAqBgC,GAAGrB,yBAAyB,EAAImD,KAJtFA,EAAmBjP,OAAOub,EAAU1Z,GAAGkL,SAAS5B,qBAAqBgC,GAAGrB,yBAAyB,EACjGoD,EAAsBqM,EAAU1Z,GAAGkL,SAAS5B,qBAAqBgC,GAAGC,SAU5EmO,EAAU1Z,GAAGkL,SAAS8C,kBAAoB7P,OAAO6O,CAAiB,EAAE7N,OAAO,gBAAgB,EAC3Fua,EAAU1Z,GAAGkL,SAASgD,qBAAuBf,EACzCuM,EAAU1Z,GAAGkL,SAASgD,uBAAsBwL,EAAU1Z,GAAGkL,SAASqD,8BAAgCgK,EAAgBvJ,+BAA+B7B,CAAoB,GACzKuM,EAAU1Z,GAAGkL,SAASM,iBAAmBrN,OAAOiP,CAAgB,EAAEjO,OAAO,gBAAgB,EACzFua,EAAU1Z,GAAGkL,SAASO,oBAAsB4B,EACxCqM,EAAU1Z,GAAGkL,SAASO,sBAAqBiO,EAAU1Z,GAAGkL,SAASQ,6BAA+B6M,EAAgBvJ,+BAA+B3B,CAAmB,EAC1K,CAGJ,OAAOqM,CAEf,CACJ,CACR,EACAC,sEAAuE,SAAU3f,GAC7E,IAAI4S,EAAgB,GAIpB,OAFI5S,IAAY4S,GAAiB,iDAAmDsF,UAAUlY,CAAU,GAEjG/B,EAAMwD,IAAIgO,uBAAyB,4BAA8BmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7H9N,KACG,SAAUH,GACN,IAmCQqR,EACAG,EAEAC,EACAC,EAvCJoM,EAAW9d,EAAS7B,KAkDxB,OAhDI2f,EAAStO,UAA4C,OAAhCsO,EAAStO,SAASuG,WACI,IAAvC+H,EAAStO,SAASuG,UAAUtW,SAIxBiS,EADAD,EADAD,EADAH,EAAoB,KA+BxBA,EAAoB7O,OAAOsb,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqB,GAAGW,yBAAyB,EAC3GkD,EAAuBsM,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqB,GAAGiC,QAE9E6B,EAAmBjP,OAAOsb,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqBmQ,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqBlO,OAAS,GAAG6O,yBAAyB,EACvKoD,EAAsBoM,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqBmQ,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqBlO,OAAS,GAAGmQ,QAE1IkO,EAAStO,SAASuG,UAAU,GAAG1D,kBAAoB7P,OAAO6O,CAAiB,EAAE7N,OAAO,gBAAgB,EACpGsa,EAAStO,SAASuG,UAAU,GAAGxD,qBAAuBf,EACtDsM,EAAStO,SAASuG,UAAU,GAAGnD,8BAAgCgK,EAAgB5M,mCAAmCwB,CAAoB,EACtIsM,EAAStO,SAASuG,UAAU,GAAGlG,iBAAmBrN,OAAOiP,CAAgB,EAAEjO,OAAO,gBAAgB,EAClGsa,EAAStO,SAASuG,UAAU,GAAGjG,oBAAsB4B,EACrDoM,EAAStO,SAASuG,UAAU,GAAGhG,6BAA+B6M,EAAgB5M,mCAAmC0B,CAAmB,GAIrIoM,CACX,CACJ,CACR,EACAG,wCAAyC,SAAUzN,GAC/C,IAAIS,EAAgB,GAIpB,OAFIT,IAAgBS,GAAiB,mBAAqBsF,UAAU/F,CAAc,GAE3ElU,EAAMwD,IAAIgO,uBAAyB,4BAA8BmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7H9N,KACG,SAAUH,GACN,IAmCQqR,EACAG,EAEAC,EACAC,EAvCJoM,EAAW9d,EAAS7B,KAkDxB,OAhDI2f,EAAStO,UAA4C,OAAhCsO,EAAStO,SAASuG,WACI,IAAvC+H,EAAStO,SAASuG,UAAUtW,SAIxBiS,EADAD,EADAD,EADAH,EAAoB,KA+BxBA,EAAoB7O,OAAOsb,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqB,GAAGW,yBAAyB,EAC3GkD,EAAuBsM,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqB,GAAGiC,QAE9E6B,EAAmBjP,OAAOsb,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqBmQ,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqBlO,OAAS,GAAG6O,yBAAyB,EACvKoD,EAAsBoM,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqBmQ,EAAStO,SAASuG,UAAU,GAAGpI,qBAAqBlO,OAAS,GAAGmQ,QAE1IkO,EAAStO,SAASuG,UAAU,GAAG1D,kBAAoB7P,OAAO6O,CAAiB,EAAE7N,OAAO,gBAAgB,EACpGsa,EAAStO,SAASuG,UAAU,GAAGxD,qBAAuBf,EACtDsM,EAAStO,SAASuG,UAAU,GAAGnD,8BAAgCgK,EAAgB5M,mCAAmCwB,CAAoB,EACtIsM,EAAStO,SAASuG,UAAU,GAAGlG,iBAAmBrN,OAAOiP,CAAgB,EAAEjO,OAAO,gBAAgB,EAClGsa,EAAStO,SAASuG,UAAU,GAAGjG,oBAAsB4B,EACrDoM,EAAStO,SAASuG,UAAU,GAAGhG,6BAA+B6M,EAAgB5M,mCAAmC0B,CAAmB,GAIrIoM,CACX,CACJ,CACR,EACAI,qCAAsC,SAAUC,GAC5C,IAAIlN,EAAgB,GAIpB,OAFAA,GAAiB,kBAAoBsF,UAAU4H,CAAa,EAErD7hB,EAAMwD,IAAIgO,uBAAyB,0BAA4BmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC3H9N,KACG,SAAUH,GAGN,IAFA,IAmCQqR,EACAG,EAEAC,EACAC,EAvCJqM,EAAY/d,EAAS7B,KAEhBkG,EAAI,EAAGA,EAAI0Z,EAAUte,OAAQ4E,CAAC,GAC/B0Z,EAAU1Z,GAAGmL,UAAsC,OAA1BuO,EAAU1Z,GAAGkL,UAAyE,EAApDwO,EAAU1Z,GAAGkL,SAAS5B,qBAAqBlO,SAIlGiS,EADAD,EADAD,EADAH,EAAoB,KA+BxBA,EAAoB7O,OAAOub,EAAU1Z,GAAGkL,SAAS5B,qBAAqB,GAAGW,yBAAyB,EAClGkD,EAAuBuM,EAAU1Z,GAAGkL,SAAS5B,qBAAqB,GAAGiC,QAErE6B,EAAmBjP,OAAOub,EAAU1Z,GAAGkL,SAAS5B,qBAAqBoQ,EAAU1Z,GAAGkL,SAAS5B,qBAAqBlO,OAAS,GAAG6O,yBAAyB,EACrJoD,EAAsBqM,EAAU1Z,GAAGkL,SAAS5B,qBAAqBoQ,EAAU1Z,GAAGkL,SAAS5B,qBAAqBlO,OAAS,GAAGmQ,QAExHmO,EAAU1Z,GAAGkL,SAAS8C,kBAAoB7P,OAAO6O,CAAiB,EAAE7N,OAAO,gBAAgB,EAC3Fua,EAAU1Z,GAAGkL,SAASgD,qBAAuBf,EACzCuM,EAAU1Z,GAAGkL,SAASgD,uBAAsBwL,EAAU1Z,GAAGkL,SAASqD,8BAAgCgK,EAAgBvJ,+BAA+B7B,CAAoB,GAEzKuM,EAAU1Z,GAAGkL,SAASM,iBAAmBrN,OAAOiP,CAAgB,EAAEjO,OAAO,gBAAgB,EACzFua,EAAU1Z,GAAGkL,SAASO,oBAAsB4B,EACxCqM,EAAU1Z,GAAGkL,SAASO,uBAAqBiO,EAAU1Z,GAAGkL,SAASQ,6BAA+B6M,EAAgBvJ,+BAA+B3B,CAAmB,GAI9K,OAAOqM,CACX,CACJ,CACR,EACAK,qBAAsB,SAAUP,EAAY3N,EAAWC,GACnD,IAAIc,EAAgB,GAMpB,OAJI4M,IAAY5M,GAAiB,eAAiBsF,UAAUsH,CAAU,GAClE3N,IAAWe,GAAiB,cAAgBsF,UAAU/T,OAAO0N,CAAS,EAAE1M,OAAO,kBAAkB,CAAC,GAClG+S,YAAWtF,GAAiB,YAAcsF,UAAU/T,OAAO2N,CAAO,EAAE3M,OAAO,kBAAkB,CAAC,GAE3FlH,EAAMwD,IAAIgO,uBAAyB,2BAA6BmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5H9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EACAkgB,qBAAsB,SAAUhgB,GAC5B,IAAI4S,EAAgB,GAIpB,OAFAA,GAAiB,iBAAmBsF,UAAUlY,CAAU,EAEjD/B,EAAMwD,IAAIgO,uBAAyB,oBAAsBmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACrH9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EACAmgB,YAAa,SAASpO,EAAWC,GAC7B,OAAO7T,EAAMwD,IAAIgO,uBAAyB,cAAgBtL,OAAO0N,CAAS,EAAE1M,OAAO,YAAY,EAAI,IAAMhB,OAAO2N,CAAO,EAAE3M,OAAO,YAAY,EAAI,YAAa,CAAEuK,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnM9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EACAogB,aAAc,WACV,IAAI1Q,EAAOpI,KAIX,OAFIA,KAAKoX,SAAS2B,gBAAgB,OAAO/Y,KAAKoX,SAAS2B,eAElD/Y,KAAKoX,SAAS7R,GAWR1O,EAAMJ,IAAI4R,uBAAyB,cAAgBD,EAAKgP,SAAS7R,GAAI6C,EAAKgP,SAAU,CAAE9O,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjI9N,KACG,SAAUH,GACN,OAAO6N,EAAKgP,QAChB,CACJ,EAfGvgB,EAAMqY,KAAK7G,uBAAyB,aAAcD,EAAKgP,SAAU,CAAE9O,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC9G9N,KACG,SAAUH,GAGN,OAFA6N,EAAKgP,SAAW7c,EAAS7B,KAElB0P,EAAKgP,QAChB,CACJ,CAUZ,EACA4B,kBAAmB,SAAUC,GAOzB,OANIA,EAAclP,SAASmP,YAAY,OAAOD,EAAclP,SAASmP,WACjED,EAAclP,SAASyN,kBAAkB,OAAOyB,EAAclP,SAASyN,iBACvEyB,EAAclP,SAASgP,gBAAgB,OAAOE,EAAclP,SAASgP,eACrEE,EAAclP,SAASC,eAAe,OAAOiP,EAAclP,SAASC,cACpEiP,EAAclP,SAAS8E,UAAU,OAAOoK,EAAclP,SAAS8E,SAE9DoK,EAAc1T,GASR1O,EAAMJ,IAAI4R,uBAAyB,mBAAqB4Q,EAAc1T,GAAI0T,EAAe,CAAE3Q,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtI9N,KACG,SAAUH,GACN,OAAO0e,CACX,CACJ,EAbGpiB,EAAMqY,KAAK7G,uBAAyB,kBAAmB4Q,EAAe,CAAE3Q,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnH9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CAUZ,EACAygB,oBAAqB,SAAUF,GAC3B,OAAOpiB,EAAMwY,OAAOhH,uBAAyB,mBAAqB4Q,EAAc1T,GAAI,CAAE+C,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC1H9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,CACJ,CACJ,EAAE;ACjcFsI,UAAUiD,QAAQ,kBAAmB,CAAC,QAAS,cAAe,SAAUpN,EAAOoM,GAC3E,MAAO,CACHmW,yBAA0B,KAC1BC,uBAAwB,KACxBC,oCAAqC,KACrCC,sCAAuC,KACvC1U,SAAU,KACV7D,UAAW,KACXwY,kBAAmB,WAUf,OATAxZ,KAAK6E,SAAW,CACZ4U,UAAW,GACX1K,SAAU,GACV2K,cAAe,GACfC,SAAU,GACVC,gBAAiB,GACjBC,0BAA2B,EAC/B,EAEO7Z,KAAK6E,QAChB,EACAiV,YAAa,SAAUrW,GACnB,IAAI2E,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,cAAgB5E,EAAI,CAAE6E,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACpG9N,KACG,SAAUH,GAGN,OAFA6N,EAAKvD,SAAWtK,EAAS7B,KAElB0P,EAAKvD,QAChB,CACJ,CACR,EACAkV,aAAc,WACV,IAAI3R,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,aAAc,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC9F9N,KACG,SAAUH,GAGN,OAFA6N,EAAKpH,UAAYzG,EAAS7B,KAEnB0P,EAAKpH,SAChB,CACJ,CACR,EACAgZ,4BAA6B,WAGzB,OAAOnjB,EAAMwD,IAAIgO,uBAAyB,2BAA4B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5G9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EACAuhB,gBAAiB,SAAUjb,EAAMkb,EAAqBhC,GAClD,IAAI9P,EAAOpI,KACPwL,EAAgB,GAepB,OAba,OAATxM,GAA+B,EAAdA,EAAKhF,SAEtBwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,QAAUyR,mBAAmBzM,CAAI,GAElDkb,IAEA1O,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,uBAAyBkgB,EAAoB3U,IAE9D2S,IAEA1M,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,iBAAmBke,GAGjCrhB,EAAMwD,IAAIgO,uBAAyB,aAAemD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC9G9N,KACG,SAAUH,GAGN,OAFA6N,EAAKpH,UAAYzG,EAAS7B,KAEnB0P,EAAKpH,SAChB,CACJ,CACR,EACAmZ,qBAAsB,SAAUnb,GAC5B,IAAIoJ,EAAOpI,KACPwL,EAAgB,GAOpB,OALAA,GAAiB,iBAAmBC,mBAAmBzM,CAAI,EAE3DoJ,EAAKgR,yBAA2Bpa,EAChC5D,QAAQC,IAAI,gCAAkC+M,EAAKgR,wBAAwB,EAEpEviB,EAAMwD,IAAIgO,uBAAyB,oBAAsBmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACrH9N,KACG,SAAUH,GAON,OANAa,QAAQC,IAAI,gCAAkC+M,EAAKgR,yBAA2B,aAAepa,CAAI,EAE7FoJ,EAAKgR,2BAA6Bpa,IAClCoJ,EAAKiR,uBAAyB9e,EAAS7B,MAGpC0P,EAAKiR,sBAChB,CACJ,CACR,EACAe,+BAAgC,SAAU3W,EAAI7K,GAC1C,IAAIwP,EAAOpI,KACPwL,EAAgB,GAOpB,OALAA,GAAiB,SAAWC,mBAAmB7S,CAAU,EAEzDwP,EAAKkR,oCAAsC1gB,EAC3CwC,QAAQC,IAAI,4CAA8C+M,EAAKkR,mCAAmC,EAE3FziB,EAAMwD,IAAIgO,uBAAyB,cAAgB5E,EAAK,kBAAoB+H,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACxI9N,KACG,SAAUH,GACNa,QAAQC,IAAI,gCAAkC+M,EAAKkR,oCAAsC,mBAAqB1gB,CAAU,EAKxH,IAHA,IACI+H,EADA0Z,EAAY9f,EAAS7B,KAGhBkG,EAAI,EAAGA,EAAIyb,EAAUrgB,OAAQ4E,CAAC,GACnC+B,EAAU,GAEN0Z,EAAUzb,GAAGoP,cAAarN,GAAW0Z,EAAUzb,GAAGoP,YAAc,MACpErN,GAAW0Z,EAAUzb,GAAGsO,aAAe,KAAOmN,EAAUzb,GAAGoO,SAE3DqN,EAAUzb,GAAG0b,aAAe3Z,EAOhC,OAJIyH,EAAKkR,sCAAwC1gB,IAC7CwP,EAAKmR,sCAAwCc,GAG1CjS,EAAKmR,qCAChB,CACJ,CACR,EACAgB,kBAAmB,SAAU9W,GAGzB,OAAO5M,EAAMwD,IAAIgO,uBAAyB,sBAAwB5E,EAAI,CAAE6E,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5G9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EACA8hB,aAAc,WACV,IAAIpS,EAAOpI,KAEPtJ,EAAIL,QAAQ+Y,KAAKhH,EAAKvD,QAAQ,EAGlC,OAFInO,EAAE+jB,UAAU,OAAO/jB,EAAE+jB,SAEpBrS,EAAKvD,SAASU,IAWV6C,EAAKvD,SAAS6V,YACftS,EAAKvD,SAASQ,SAAW,KACzB+C,EAAKvD,SAASS,OAAS,MAGpBzO,EAAMJ,IAAI4R,uBAAyB,cAAgB3R,EAAE6O,GAAI7O,EAAG,CAAE4R,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzG9N,KACG,SAAUH,GACN,OAAO6N,EAAKvD,QAChB,CACJ,GApBGhO,EAAMqY,KAAK7G,uBAAyB,aAAc3R,EAAG,CAAE4R,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClG9N,KACG,SAAUH,GAGN,OAFA6N,EAAKvD,SAAWtK,EAAS7B,KAElB0P,EAAKvD,QAChB,CACJ,CAeZ,EACApE,MAAO,SAAUka,EAAUC,GACvB,IAAIxS,EAAOpI,KAEX,OAAOnJ,EAAMqY,KAAK7G,uBAAyB,mBAAoB,CAAEsS,SAAYA,EAAUC,SAAYA,CAAS,CAAC,EACxGlgB,KACG,SAAUH,GAKN,OAJA6N,EAAKyS,kBAAoBtgB,EAAS7B,KAElCuH,WAAW6a,WAAW,gBAAiB1S,EAAKyS,iBAAiB,EAEtDzS,EAAKyS,iBAChB,CACJ,CACR,CACJ,CACJ,EAAE;AC/LFra,OAAOyD,QAAQ,mBAAoB,CAAC,aAAc,QAAS,gBAAiB,cAAe,SAAUhE,EAAYpJ,EAAOkkB,EAAe9X,GACnI,MAAO,CACH+X,eAAgB,SAAUC,GACtB,IACIC,EAAI7kB,QAAQ+Y,KAAK6L,CAAI,EAIzB,OAFA,OAAOC,EAAEC,cAEFtkB,EAAMJ,IAAI4R,uBAAyB,8BAAgC6S,EAAE3V,GAAI0V,EAAM,CAAE3S,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,CACrI,EACA4S,YAAa,WACT,MAAO,CAAA,CAACnY,EAA6B,mBAAKA,EAAY4X,kBAAkBM,eAAkF,yCAAjElY,EAAY4X,kBAAkBM,cAAc5V,GAAGvH,YAAY,CACxJ,EACAqd,eAAgB,WACZ,MAAO,CAAA,CAACpY,EAA6B,mBAAKA,EAAY4X,kBAAkBM,eAAkF,yCAAjElY,EAAY4X,kBAAkBM,cAAc5V,GAAGvH,YAAY,CACxJ,EACAsd,cAAe,WACX,MAAO,CAAA,CAACrY,EAA6B,mBAAKA,EAAY4X,kBAAkBM,eAAkF,yCAAjElY,EAAY4X,kBAAkBM,cAAc5V,GAAGvH,YAAY,CACxJ,CACJ,CACJ,EAAE;ACpBFwC,OAAOyD,QAAQ,iBAAkB,CAAC,QAAS,KAAM,cAAe,SAAUpN,EAAO0kB,EAAItY,GACjF,MAAO,CACHiC,UAAW,KACXsW,aAAc,WACV,IAaQC,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAKlD,YAWFuW,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAKlD,SAAS,EAExBuW,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,aAAc,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC9F9N,KACG,SAAUH,GAGN,OAFA6N,EAAKlD,UAAY3K,EAAS7B,KAEnB0P,EAAKlD,SAChB,CACJ,CASZ,CACJ,CACJ,EAAE;ACzBFhE,SAAS+C,QAAQ,kBAAmB,CAAC,QAAS,KAAM,cAAe,SAAUpN,EAAO0kB,EAAItY,GACpF,MAAO,CACH4Y,eAAgB,KAChBC,cAAe,KACfC,qBAAsB,KACtBC,kBAAmB,KACnBvW,cAAe,KACfC,SAAU,KACVuW,SAAU,KACVC,gBAAiB,KACjBxT,kBAAmB,KACnByT,aAAc,KACdC,WAAY,KACZC,aAAc,KACdC,uBAAwB,KACxBC,WAAY,KACZC,0BAA2B,KAC3BC,eAAgB,KAEhBC,kBAAmB,WACf,IAAItU,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,YAAa,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7F9N,KACG,SAAUH,GAGN,OAFA6N,EAAKyT,eAAiBthB,EAAS7B,KAAK,GAE7B0P,EAAKyT,cAChB,CACJ,CACR,EACAc,iBAAkB,WACd,IAAIvU,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,iBAAkB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK0T,cAAgBvhB,EAAS7B,KAEvB0P,EAAK0T,aAChB,CACJ,CACR,EACAc,wBAAyB,WACrB,IAAIxU,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,wBAAyB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK2T,qBAAuBxhB,EAAS7B,KAE9B0P,EAAK2T,oBAChB,CACJ,CACR,EACAc,2BAA4B,SAAU7d,EAAMkZ,GACxC,IAAI9P,EAAOpI,KACPwL,EAAgB,GAWpB,OATY,MAARxM,GAA8B,EAAdA,EAAKhF,SAErBwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,QAAU2gB,UAE3BzC,IAEA1M,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,iBAAmBke,GAGjCrhB,EAAMwD,IAAIgO,uBAAyB,wBAA0BmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzH9N,KACG,SAAUH,GAGN,OAFA6N,EAAK2T,qBAAuBxhB,EAAS7B,KAE9B0P,EAAK2T,oBAChB,CACJ,CACR,EACAe,qBAAsB,WAClB,IAAI1U,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,qBAAsB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK4T,kBAAoBzhB,EAAS7B,KAE3B0P,EAAK4T,iBAChB,CACJ,CACR,EACAe,wBAAyB,SAAU/d,EAAMkZ,GACrC,IAAI9P,EAAOpI,KACPwL,EAAgB,GAWpB,OATY,MAARxM,GAA8B,EAAdA,EAAKhF,SAErBwR,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,QAAUgF,GAE3BkZ,IAEA1M,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,iBAAmBke,GAGjCrhB,EAAMwD,IAAIgO,uBAAyB,qBAAuBmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtH9N,KACG,SAAUH,GAGN,OAFA6N,EAAK4T,kBAAoBzhB,EAAS7B,KAE3B0P,EAAK4T,iBAChB,CACJ,CACR,EACAgB,iBAAkB,WACd,IAAI5U,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,iBAAkB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK3C,cAAgBlL,EAAS7B,KAEvB0P,EAAK3C,aAChB,CACJ,CACR,EACAwX,YAAa,WACT,IAAI7U,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,YAAa,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7F9N,KACG,SAAUH,GAGN,OAFA6N,EAAK1C,SAAWnL,EAAS7B,KAElB0P,EAAK1C,QAChB,CACJ,CACR,EACAwX,YAAa,WACT,IAAI9U,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,YAAa,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7F9N,KACG,SAAUH,GAGN,OAFA6N,EAAK6T,SAAW1hB,EAAS7B,KAElB0P,EAAK6T,QAChB,CACJ,CACR,EACAkB,mBAAoB,WAChB,IAAI/U,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,oBAAqB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACrG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK8T,gBAAkB3hB,EAAS7B,KAEzB0P,EAAK8T,eAChB,CACJ,CACR,EACAkB,qBAAsB,WAClB,IAAIhV,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,qBAAsB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtG9N,KACG,SAAUH,GAGN,OAFA6N,EAAKM,kBAAoBnO,EAAS7B,KAE3B0P,EAAKM,iBAChB,CACJ,CACR,EACA2U,wBAAyB,SAAUC,EAAWpF,GAC1C,IAAI9P,EAAOpI,KACPwL,EAAgB,GAWpB,OATiB,MAAb8R,GAAwC,EAAnBA,EAAUtjB,SAE/BwR,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,cAAgBsjB,GAEjCpF,IAEA1M,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,iBAAmBke,GAGjCrhB,EAAMwD,IAAIgO,uBAAyB,qBAAuBmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtH9N,KACG,SAAUH,GAGN,OAFA6N,EAAKM,kBAAoBnO,EAAS7B,KAE3B0P,EAAKM,iBAChB,CACJ,CACR,EACA6U,gBAAiB,WACb,IAAInV,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,gBAAiB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK+T,aAAe5hB,EAAS7B,KAEtB0P,EAAK+T,YAChB,CACJ,CACR,EACAqB,mBAAoB,SAAUxe,EAAMkZ,GAChC,IAAI9P,EAAOpI,KACPwL,EAAgB,GAWpB,OATY,MAARxM,GAA8B,EAAdA,EAAKhF,SAErBwR,GADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,QAAU2gB,UAE3BzC,IAEA1M,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,iBAAmBke,GAGjCrhB,EAAMwD,IAAIgO,uBAAyB,gBAAkBmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjH9N,KACG,SAAUH,GAGN,OAFA6N,EAAK+T,aAAe5hB,EAAS7B,KAEtB0P,EAAK+T,YAChB,CACJ,CACR,EACAsB,cAAe,WACX,IAAIrV,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,cAAe,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC/F9N,KACG,SAAUH,GAGN,OAFA6N,EAAKgU,WAAa7hB,EAAS7B,KAEpB0P,EAAKgU,UAChB,CACJ,CACR,EACAsB,iBAAkB,SAAU/C,EAAUgD,EAAOzF,GACzC,IAAI9P,EAAOpI,KACPwL,EAAgB,GAepB,OAbgB,MAAZmP,GAAsC,EAAlBA,EAAS3gB,SAE7BwR,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,YAAc2gB,GAEtB,MAATgD,GAAgC,EAAfA,EAAM3jB,SAEvBwR,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,SAAW2jB,GAE5BzF,IAEA1M,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,iBAAmBke,GAGjCrhB,EAAMwD,IAAIgO,uBAAyB,cAAgBmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC/G9N,KACG,SAAUH,GAGN,OAFA6N,EAAKgU,WAAa7hB,EAAS7B,KAEpB0P,EAAKgU,UAChB,CACJ,CACR,EACAwB,0BAA2B,WACvB,IAAIxV,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,0BAA2B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC3G9N,KACG,SAAUH,GAGN,OAFA6N,EAAKkU,uBAAyB/hB,EAAS7B,KAEhC0P,EAAKkU,sBAChB,CACJ,CACR,EACAuB,cAAe,SAAUpT,EAAWC,GAChC,IAAItC,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,eAAiBoC,EAAU1M,OAAO,YAAY,EAAI,IAAM2M,EAAQ3M,OAAO,YAAY,EAAG,CAAEuK,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtK9N,KACG,SAAUH,GAGN,OAFA6N,EAAKmU,WAAahiB,EAAS7B,KAEpB0P,EAAKmU,UAChB,CACJ,CACR,EACAuB,6BAA8B,WAC1B,OAAOjnB,EAAMwD,IAAIgO,uBAAyB,6BAA8B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC9G9N,KACG,SAAUH,GAGN,OAFA6N,KAAKoU,0BAA4BjiB,EAAS7B,KAEnC0P,KAAKoU,yBAChB,CACJ,CACR,EACAuB,gCAAiC,SAAU/e,EAAMgf,EAAW9F,GACxD,IAAI9P,EAAOpI,KACPwL,EAAgB,GAepB,OAbY,MAARxM,GAA8B,EAAdA,EAAKhF,SAErBwR,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,QAAUgF,GAEd,MAAbgf,GAAwC,EAAnBA,EAAUhkB,SAE/BwR,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,aAAegkB,GAEhC9F,IAEA1M,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,iBAAmBke,GAGjCrhB,EAAMwD,IAAIgO,uBAAyB,6BAA+BmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC9H9N,KACG,SAAUH,GAGN,OAFA6N,EAAKoU,0BAA4BjiB,EAAS7B,KAEnC0P,EAAKoU,yBAChB,CACJ,CACR,EAEAyB,oBAAqB,WACjB,IAAI7V,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,qBAAsB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK0T,cAAgBvhB,EAAS7B,KAEvB0P,EAAK0T,aAChB,CACJ,CACR,EACAoC,2BAA4B,WACxB,IAAI9V,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,4BAA6B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7G9N,KACG,SAAUH,GAGN,OAFA6N,EAAK2T,qBAAuBxhB,EAAS7B,KAE9B0P,EAAK2T,oBAChB,CACJ,CACR,EACAoC,wBAAyB,WACrB,IAAI/V,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,yBAA0B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC1G9N,KACG,SAAUH,GAGN,OAFA6N,EAAK4T,kBAAoBzhB,EAAS7B,KAE3B0P,EAAK4T,iBAChB,CACJ,CACR,EACAoC,oBAAqB,WACjB,IAAIhW,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,qBAAsB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK3C,cAAgBlL,EAAS7B,KAEvB0P,EAAK3C,aAChB,CACJ,CACR,EACA4Y,eAAgB,WACZ,IAAIjW,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,gBAAiB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK1C,SAAWnL,EAAS7B,KAElB0P,EAAK1C,QAChB,CACJ,CACR,EACA4Y,wBAAyB,WACrB,IAAIlW,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,yBAA0B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC1G9N,KACG,SAAUH,GAGN,OAFA6N,EAAKM,kBAAoBnO,EAAS7B,KAE3B0P,EAAKM,iBAChB,CACJ,CACR,EACA6V,mBAAoB,WAChB,IAAInW,EAAOpI,KAEX,OAAOnJ,EAAMwD,IAAIgO,uBAAyB,oBAAqB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACrG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK+T,aAAe5hB,EAAS7B,KAEtB0P,EAAK+T,YAChB,CACJ,CAER,EACAqC,gCAAiC,WAC7B,OAAO3nB,EAAMwD,IAAIgO,uBAAyB,iCAAkC,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClH9N,KACG,SAAUH,GAGN,OAFA6N,KAAKoU,0BAA4BjiB,EAAS7B,KAEnC0P,KAAKoU,yBAChB,CACJ,CACR,EAEAiC,mBAAoB,WAGhB,OAAO5nB,EAAMJ,IAAI4R,uBAAyB,aAF/BrI,KAEmD6b,eAAetW,GAFlEvF,KAE2E6b,eAAgB,CAAEvT,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,CACrJ,EACAkW,kBAAmB,SAAUC,GACzB,IAAIvW,EAAOpI,KAEX,OAAK2e,EAAapZ,GASP1O,EAAMJ,IAAI4R,uBAAyB,kBAAoBsW,EAAapZ,GAAIoZ,EAAc,CAAErW,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnI9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAK0T,cAAc9hB,OAAQ4E,CAAC,GAC5C,GAAIwJ,EAAK0T,cAAcld,GAAG2G,KAAOoZ,EAAapZ,GAAI,CAC9C6C,EAAK0T,cAAcld,GAAK+f,EACxB,KACJ,CAER,CACJ,EAlBG9nB,EAAMqY,KAAK7G,uBAAyB,iBAAkBsW,EAAc,CAAErW,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjH9N,KACG,SAAUH,GACN6N,EAAK0T,cAAchf,KAAKvC,EAAS7B,IAAI,CACzC,CACJ,CAeZ,EACAkmB,yBAA0B,SAAUC,GAChC,IAAIzW,EAAOpI,KAEX,OAAK6e,EAAoBtZ,GASd1O,EAAMJ,IAAI4R,uBAAyB,yBAA2BwW,EAAoBtZ,GAAIsZ,EAAqB,CAAEvW,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACxJ9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAK2T,qBAAqB/hB,OAAQ4E,CAAC,GACnD,GAAIwJ,EAAK2T,qBAAqBnd,GAAG2G,KAAOsZ,EAAoBtZ,GAAI,CAC5D6C,EAAK2T,qBAAqBnd,GAAKigB,EAC/B,KACJ,CAER,CACJ,EAlBGhoB,EAAMqY,KAAK7G,uBAAyB,wBAAyBwW,EAAqB,CAAEvW,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC/H9N,KACG,SAAUH,GACN6N,EAAK2T,qBAAqBjf,KAAKvC,EAAS7B,IAAI,CAChD,CACJ,CAeZ,EACAomB,sBAAuB,SAAUC,GAC7B,IAAI3W,EAAOpI,KAEX,OAAK+e,EAAgBxZ,GASV1O,EAAMJ,IAAI4R,uBAAyB,sBAAwB0W,EAAgBxZ,GAAIwZ,EAAiB,CAAEzW,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7I9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAK4T,kBAAkBhiB,OAAQ4E,CAAC,GAChD,GAAIwJ,EAAK4T,kBAAkBpd,GAAG2G,KAAOwZ,EAAgBxZ,GAAI,CACrD6C,EAAK4T,kBAAkBpd,GAAKmgB,EAC5B,KACJ,CAER,CACJ,EAlBGloB,EAAMqY,KAAK7G,uBAAyB,qBAAsB0W,EAAiB,CAAEzW,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACxH9N,KACG,SAAUH,GACN6N,EAAK4T,kBAAkBlf,KAAKvC,EAAS7B,IAAI,CAC7C,CACJ,CAeZ,EACAsmB,kBAAmB,SAAUC,GACzB,IAAI7W,EAAOpI,KAEX,OAAKif,EAAa1Z,GASP1O,EAAMJ,IAAI4R,uBAAyB,kBAAoB4W,EAAa1Z,GAAI0Z,EAAc,CAAE3W,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnI9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAK3C,cAAczL,OAAQ4E,CAAC,GAC5C,GAAIwJ,EAAK3C,cAAc7G,GAAG2G,KAAO0Z,EAAa1Z,GAAI,CAC9C6C,EAAK3C,cAAc7G,GAAKqgB,EACxB,KACJ,CAER,CACJ,EAlBGpoB,EAAMqY,KAAK7G,uBAAyB,iBAAkB4W,EAAc,CAAE3W,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjH9N,KACG,SAAUH,GACN6N,EAAK3C,cAAc3I,KAAKvC,EAAS7B,IAAI,CACzC,CACJ,CAeZ,EACAwmB,aAAc,SAAUC,GACpB,IAAI/W,EAAOpI,KAEX,OAAKmf,EAAQ5Z,GASF1O,EAAMJ,IAAI4R,uBAAyB,aAAe8W,EAAQ5Z,GAAI4Z,EAAS,CAAE7W,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACpH9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAK1C,SAAS1L,OAAQ4E,CAAC,GACvC,GAAIwJ,EAAK1C,SAAS9G,GAAG2G,KAAO4Z,EAAQ5Z,GAAI,CACpC6C,EAAK1C,SAAS9G,GAAKugB,EACnB,KACJ,CAER,CACJ,EAlBGtoB,EAAMqY,KAAK7G,uBAAyB,YAAa8W,EAAS,CAAE7W,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACvG9N,KACG,SAAUH,GACN6N,EAAK1C,SAAS5I,KAAKvC,EAAS7B,IAAI,CACpC,CACJ,CAeZ,EACA0mB,aAAc,SAAUC,GACpB,IAAIjX,EAAOpI,KAEX,OAAKqf,EAAY9Z,GASN1O,EAAMJ,IAAI4R,uBAAyB,aAAegX,EAAY9Z,GAAI8Z,EAAa,CAAE/W,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5H9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAK6T,SAASjiB,OAAQ4E,CAAC,GACvC,GAAIwJ,EAAK6T,SAASrd,GAAG2G,KAAO8Z,EAAY9Z,GAAI,CACxC6C,EAAK6T,SAASrd,GAAKygB,EACnB,KACJ,CAER,CACJ,EAlBGxoB,EAAMqY,KAAK7G,uBAAyB,YAAagX,EAAa,CAAE/W,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC3G9N,KACG,SAAUH,GACN6N,EAAK6T,SAASnf,KAAKvC,EAAS7B,IAAI,CACpC,CACJ,CAeZ,EACA4mB,sBAAuB,SAAUC,GAC7B,IAAInX,EAAOpI,KAEX,OAAKuf,EAAiBha,GASX1O,EAAMJ,IAAI4R,uBAAyB,sBAAwBkX,EAAiBha,GAAIga,EAAkB,CAAEjX,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC/I9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAKM,kBAAkB1O,OAAQ4E,CAAC,GAChD,GAAIwJ,EAAKM,kBAAkB9J,GAAG2G,KAAOga,EAAiBha,GAAI,CACtD6C,EAAKM,kBAAkB9J,GAAK2gB,EAC5B,KACJ,CAER,CACJ,EAlBG1oB,EAAMqY,KAAK7G,uBAAyB,qBAAsBkX,EAAkB,CAAEjX,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzH9N,KACG,SAAUH,GACN6N,EAAKM,kBAAkB5L,KAAKvC,EAAS7B,IAAI,CAC7C,CACJ,CAeZ,EACA8mB,iBAAkB,SAAU5U,GACxB,IAAIxC,EAAOpI,KAEX,OAAK4K,EAAYrF,GASN1O,EAAMJ,IAAI4R,uBAAyB,iBAAmBuC,EAAYrF,GAAIqF,EAAa,CAAEtC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAChI9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAK+T,aAAaniB,OAAQ4E,CAAC,GAC3C,GAAIwJ,EAAK+T,aAAavd,GAAG2G,KAAOqF,EAAYrF,GAAI,CAC5C6C,EAAK+T,aAAavd,GAAKgM,EACvB,KACJ,CAER,CACJ,EAlBG/T,EAAMqY,KAAK7G,uBAAyB,gBAAiBuC,EAAa,CAAEtC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC/G9N,KACG,SAAUH,GACN6N,EAAK+T,aAAarf,KAAKvC,EAAS7B,IAAI,CACxC,CACJ,CAeZ,EACA+mB,eAAgB,SAAUC,GACtB,IAAItX,EAAOpI,KAEX,OAAK0f,EAAUna,GASJ1O,EAAMJ,IAAI4R,uBAAyB,eAAiBqX,EAAUna,GAAIma,EAAW,CAAEpX,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC1H9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAKgU,WAAWpiB,OAAQ4E,CAAC,GACzC,GAAIwJ,EAAKgU,WAAWxd,GAAG2G,KAAOma,EAAUna,GAAI,CACxC6C,EAAKgU,WAAWxd,GAAK8gB,EACrB,KACJ,CAER,CACJ,EAlBG7oB,EAAMqY,KAAK7G,uBAAyB,cAAeqX,EAAW,CAAEpX,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC3G9N,KACG,SAAUH,GACN6N,EAAKgU,WAAWtf,KAAKvC,EAAS7B,IAAI,CACtC,CACJ,CAeZ,EACAinB,yBAA0B,SAAUC,GAChC,IAAIxX,EAAOpI,KAEX,OAAK4f,EAAqBra,GASf1O,EAAMJ,IAAI4R,uBAAyB,2BAA6BuX,EAAqBra,GAAIqa,EAAsB,CAAEtX,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5J9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAKkU,uBAAuBtiB,OAAQ4E,CAAC,GACrD,GAAIwJ,EAAKkU,uBAAuB1d,GAAG2G,KAAOqa,EAAqBra,GAAI,CAC/D6C,EAAKkU,uBAAuB1d,GAAKghB,EACjC,KACJ,CAER,CACJ,EAlBG/oB,EAAMqY,KAAK7G,uBAAyB,0BAA2BuX,EAAsB,CAAEtX,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClI9N,KACG,SAAUH,GACN6N,EAAKkU,uBAAuBxf,KAAKvC,EAAS7B,IAAI,CAClD,CACJ,CAeZ,EACAmnB,8BAA+B,SAAUC,GACrC,IAAI1X,EAAOpI,KAEX,OAAK8f,EAAyBva,GASnB1O,EAAMJ,IAAI4R,uBAAyB,8BAAgCyX,EAAyBva,GAAIua,EAA0B,CAAExX,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACvK9N,KACG,SAAUH,GACN,IAAK,IAAIqE,EAAI,EAAGA,EAAIwJ,EAAKoU,0BAA0BxiB,OAAQ4E,CAAC,GACxD,GAAIwJ,EAAKoU,0BAA0B5d,GAAG2G,KAAOua,EAAyBva,GAAI,CACtE6C,EAAKoU,0BAA0B5d,GAAKkhB,EACpC,KACJ,CAER,CACJ,EAlBGjpB,EAAMqY,KAAK7G,uBAAyB,6BAA8ByX,EAA0B,CAAExX,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzI9N,KACG,SAAUH,GACN6N,EAAKoU,0BAA0B1f,KAAKvC,EAAS7B,IAAI,CACrD,CACJ,CAeZ,EAEAqnB,mBAAoB,SAAU/gB,GAC1B,IAAIoJ,EAAOpI,KAEPwL,EAAgB,GAOpB,OALIxM,IAEAwM,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,QAAUgF,GAGxBnI,EAAMwD,IAAIgO,uBAAyB,gBAAkBmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACjH9N,KACG,SAAUH,GACN6N,EAAKiU,aAAe,GAEpB,IAAK,IAAIzd,EAAI,EAAGA,EAAIrE,EAAS7B,KAAKsB,OAAQ4E,CAAC,GACvCwJ,EAAKiU,aAAavf,KAAK,CACnB0P,KAAMjS,EAAS7B,KAAKkG,GAAGohB,KAAO,MAAQzlB,EAAS7B,KAAKkG,GAAG4N,KACvDyT,KAAM1lB,EAAS7B,KAAKkG,EACxB,CAAC,EAGL,OAAOwJ,EAAKiU,YAChB,CACJ,CACR,EAEA6D,aAAc,SAAUC,GAGpB,OAAOtpB,EAAMwY,OAAOhH,uBAAyB,aAAe8X,EAAO5a,GAAI,CAAE+C,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7G9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EAEA0nB,2BAA4B,SAAUR,GAGlC,OAAO/oB,EAAMwY,OAAOhH,uBAAyB,2BAA6BuX,EAAqBra,GAAI,CAAE+C,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzI9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EAEA2nB,kBAAmB,SAAUrhB,GACzB,IAAIoJ,EAAOpI,KAEPwL,EAAgB,GAOpB,OALIxM,IAEAwM,EADAA,GAA2C,IAAzBA,EAAcxR,OAAgB,IAAM,KACrC,QAAUgF,GAGxBnI,EAAMwD,IAAIgO,uBAAyB,kBAAoBmD,EAAe,CAAElD,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnH9N,KACG,SAAUH,GACN6N,EAAKqU,eAAiB,GAEtB,IAAK,IAAI7d,EAAI,EAAGA,EAAIrE,EAAS7B,KAAKsB,OAAQ4E,CAAC,GACvCwJ,EAAKqU,eAAe3f,KAAK,CACrB0P,KAAMjS,EAAS7B,KAAKkG,GAAG4N,KACvByT,KAAM1lB,EAAS7B,KAAKkG,EACxB,CAAC,EAGL,OAAOwJ,EAAKqU,cAChB,CACJ,CACR,CACJ,CACJ,EAAE;AC3wBFjc,OAAOyD,QAAQ,gBAAiB,CAAC,QAAS,KAAM,cAAe,SAAUpN,EAAO0kB,EAAItY,GAChF,MAAO,CACHqd,OAAQ,SAAUC,GACd,IACIC,EAAW,IAAIC,SAInB,OAFAD,EAASE,OAAO,OAAQH,EAAMA,EAAKvhB,IAAI,EAEhCnI,EAAMqY,KAAK7G,uBAAyB,UAAWmY,EAAU,CAAElY,QAAS,CAAEC,MAAStF,EAAYuF,MAAOmY,eAAgB7oB,KAAAA,CAAU,EAAG8oB,iBAAkBvqB,QAAQwqB,QAAS,CAAC,EACrKnmB,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,CACJ,CACJ,EAAE;AChBF8H,OAAOyD,QAAQ,gBAAiB,CAAC,QAAS,KAAM,cAAe,SAAUpN,EAAO0kB,EAAItY,GAChF,MAAO,CACHuC,qBAAsB,KACtByM,iBAAkB,KAClB6O,wBAAyB,KACzBC,cAAe,KACfC,YAAa,KACbC,sBAAuB,KACvBC,eAAgB,KAChBC,oBAAqB,KACrBC,kBAAmB,KACnBC,uBAAwB,KACxBC,wBAAyB,KACzBC,uBAAwB,KACxBC,SAAU,KACVC,iBAAkB,KAClBC,gCAAiC,KAEjCC,wBAAyB,WACrB,IAaQlG,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAK5C,uBAWFiW,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAK5C,oBAAoB,EAEnCiW,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,wBAAyB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACzG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK5C,qBAAuBjL,EAAS7B,KAE9B0P,EAAK5C,oBAChB,CACJ,CASZ,EACAoc,oBAAqB,WACjB,IAaQnG,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAK6J,mBAWFwJ,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAK6J,gBAAgB,EAE/BwJ,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,oBAAqB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACrG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK6J,iBAAmB1X,EAAS7B,KAE1B0P,EAAK6J,gBAChB,CACJ,CASZ,EACA4P,2BAA4B,WACxB,IAaQpG,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAK0Y,0BAWFrF,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAK0Y,uBAAuB,EAEtCrF,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,2BAA4B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5G9N,KACG,SAAUH,GAGN,OAFA6N,EAAK0Y,wBAA0BvmB,EAAS7B,KAEjC0P,EAAK0Y,uBAChB,CACJ,CASZ,EACAgB,iBAAkB,WACd,IAaQrG,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAK2Y,gBAWFtF,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAK2Y,aAAa,EAE5BtF,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,iBAAkB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAClG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK2Y,cAAgBxmB,EAAS7B,KAEvB0P,EAAK2Y,aAChB,CACJ,CASZ,EACAgB,eAAgB,WACZ,IAaQtG,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAK4Y,cAWFvF,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAK4Y,WAAW,EAE1BvF,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,eAAgB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAChG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK4Y,YAAczmB,EAAS7B,KAErB0P,EAAK4Y,WAChB,CACJ,CASZ,EACAgB,yBAA0B,WACtB,IAaQvG,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAK6Y,wBAWFxF,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAK6Y,qBAAqB,EAEpCxF,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,yBAA0B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC1G9N,KACG,SAAUH,GAGN,OAFA6N,EAAK6Y,sBAAwB1mB,EAAS7B,KAE/B0P,EAAK6Y,qBAChB,CACJ,CASZ,EACAgB,kBAAmB,WACf,IAaQxG,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAK8Y,iBAWFzF,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAK8Y,cAAc,EAE7BzF,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,kBAAmB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACnG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK8Y,eAAiB3mB,EAAS7B,KAExB0P,EAAK8Y,cAChB,CACJ,CASZ,EACAgB,uBAAwB,WACpB,IAaQzG,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAK+Y,sBAWF1F,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAK+Y,mBAAmB,EAElC1F,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,uBAAwB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACxG9N,KACG,SAAUH,GAGN,OAFA6N,EAAK+Y,oBAAsB5mB,EAAS7B,KAE7B0P,EAAK+Y,mBAChB,CACJ,CASZ,EACAgB,qBAAsB,WAClB,IAaQ1G,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAKgZ,oBAWF3F,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAKgZ,iBAAiB,EAEhC3F,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,qBAAsB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtG9N,KACG,SAAUH,GAGN,OAFA6N,EAAKgZ,kBAAoB7mB,EAAS7B,KAE3B0P,EAAKgZ,iBAChB,CACJ,CASZ,EACAgB,0BAA2B,WACvB,IAaQ3G,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAKiZ,yBAWF5F,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAKiZ,sBAAsB,EAErC5F,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,0BAA2B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC3G9N,KACG,SAAUH,GAGN,OAFA6N,EAAKiZ,uBAAyB9mB,EAAS7B,KAEhC0P,EAAKiZ,sBAChB,CACJ,CASZ,EACAgB,2BAA4B,WACxB,IAaQ5G,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAKkZ,0BAWF7F,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAKkZ,uBAAuB,EAEtC7F,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,2BAA4B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC5G9N,KACG,SAAUH,GAGN,OAFA6N,EAAKkZ,wBAA0B/mB,EAAS7B,KAEjC0P,EAAKkZ,uBAChB,CACJ,CASZ,EACAgB,0BAA2B,WACvB,IAaQ7G,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAKmZ,yBAWF9F,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAKmZ,sBAAsB,EAErC9F,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,0BAA2B,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC3G9N,KACG,SAAUH,GAGN,OAFA6N,EAAKmZ,uBAAyBhnB,EAAS7B,KAEhC0P,EAAKmZ,sBAChB,CACJ,CASZ,EACAgB,YAAa,WACT,IAaQ9G,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAKoZ,WAWF/F,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAKoZ,QAAQ,EAEvB/F,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,YAAa,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EAC7F9N,KACD,SAAUH,GAGN,OAFA6N,EAAKoZ,SAAWjnB,EAAS7B,KAElB0P,EAAKoZ,QAChB,CACA,CASZ,EACAgB,kBAAmB,WACf,OAAO3rB,EAAMwD,IAAIgO,uBAAyB,oBAAqB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACrG9N,KACG,SAAUH,GACN,OAAOA,EAAS7B,IACpB,CACJ,CACR,EACA+pB,qBAAsB,WAClB,IAaQhH,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAKqZ,mBAWFhG,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAKqZ,gBAAgB,EAE/BhG,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,qBAAsB,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACtG9N,KACG,SAAUH,GAGN,OAFA6N,EAAKqZ,iBAAmBlnB,EAAS7B,KAE1B0P,EAAKqZ,gBAChB,CACJ,CASZ,EACAiB,mCAAoC,WAChC,IAaQjH,EAbJrT,EAAOpI,KAEX,OAAKoI,EAAKsZ,kCAWFjG,EAAWF,EAAGG,MAAM,GAEfC,QAAQvT,EAAKsZ,+BAA+B,EAE9CjG,EAASG,SAdT/kB,EAAMwD,IAAIgO,uBAAyB,mCAAoC,CAAEC,QAAS,CAAEC,MAAStF,EAAYuF,KAAM,CAAE,CAAC,EACpH9N,KACG,SAAUH,GAGN,OAFA6N,EAAKsZ,gCAAkCnnB,EAAS7B,KAEzC0P,EAAKsZ,+BAChB,CACJ,CASZ,CACJ,CACJ,EAAE;ACtVFlhB,OAAOyD,QAAQ,cAAe,CAAC,aAAc,QAAS,gBAAiB,KAAM,SAAUhE,EAAYpJ,EAAOkkB,EAAeQ,GACrH,MAAO,CACHV,kBAAmBE,EAAcF,kBACjCrS,MAAOuS,EAAcvS,MACrB/H,MAAO,SAAUkd,EAAO/C,EAAU+H,EAAUC,GACxC,IAAIxa,EAAOpI,KACPyb,EAAWF,EAAGG,MAAM,EAkCxB,OAhCA7kB,EAAMqY,KAAK7G,uBAAyB,sBAAuB,GAAI,CAAEC,QAAS,CAAEua,cAAiB,SAAW7iB,KAAK8iB,QAAQnF,EAAO/C,EAAU+H,EAAUC,CAAkB,CAAE,CAAE,CAAC,EAClKloB,KACG,SAAUH,GAKN,OAJA6N,EAAKI,MAAQjO,EAAS+N,QAAQ,OAAO,EAErCyS,EAAcvS,MAAQJ,EAAKI,MAEpB3R,EAAMwD,IAAIgO,uBAAyB,iBAAkB,CAAEC,QAAS,CAAEC,MAASH,EAAKI,KAAM,CAAE,CAAC,EAC3F9N,KACG,SAAUH,GACN6N,EAAKyS,kBAAoBtgB,EAAS7B,KAElCqiB,EAAcF,kBAAoBzS,EAAKyS,kBAEvCY,EAASE,QAAQvT,EAAKyS,iBAAiB,EAEvC5a,EAAW6a,WAAW,gBAAiB1S,EAAKyS,iBAAiB,CACjE,EACA,SAAUrgB,GACNY,QAAQC,IAAIb,CAAK,EAEjBihB,EAASsH,OAAOvoB,CAAK,CACzB,CACJ,CACR,EACA,SAAUA,EAAOC,EAAQ6N,GACrBlN,QAAQC,IAAIb,CAAK,EAEjBihB,EAASsH,OAAOvoB,CAAK,CACzB,CACJ,EAEGihB,EAASG,OACpB,EACAxY,OAAQ,WACJ,IAAIgF,EAAOpI,KACPyb,EAAWF,EAAGG,MAAM,EAExB,OAAItT,EAAKI,MACE3R,EAAMqY,KAAK7G,uBAAyB,iBAAkB,GAAI,CAAEC,QAAS,CAAEC,MAASH,EAAKI,KAAM,CAAE,CAAC,EAChG9N,KACG,SAAUH,GACNwgB,EAAcvS,MAAQ,KACtBuS,EAAcF,kBAAoB,KAElCzS,EAAKI,MAAQ,KACbJ,EAAKyS,kBAAoB,KAEzB5a,EAAW6a,WAAW,gBAAgB,EAEtCW,EAASE,QAAQ,CACrB,EACA,WACIZ,EAAcvS,MAAQ,KACtBuS,EAAcF,kBAAoB,KAElCzS,EAAKI,MAAQ,KACbJ,EAAKyS,kBAAoB,KAEzB5a,EAAW6a,WAAW,gBAAgB,EAEtCW,EAASE,QAAQ,CACrB,CACJ,GAGJZ,EAAcvS,MAAQ,KACtBuS,EAAcF,kBAAoB,KAElCzS,EAAKI,MAAQ,KACbJ,EAAKyS,kBAAoB,KAEzB5a,EAAW6a,WAAW,gBAAgB,EAEtCW,EAASE,QAAQ,EAGdF,EAASG,QACpB,EACAkH,QAAS,SAAUnI,EAAUC,EAAU+H,EAAUC,GAC7C,OAAIA,EACOI,KAAKrI,EAAW,IAAMC,EAAW,IAAM+H,EAAW,IAAMC,CAAkB,EAG1EI,KAAKrI,EAAW,IAAMC,EAAW,IAAM+H,CAAQ,CAE9D,EACA3H,eAAgB,SAAUC,GACtB,IACIC,EAAI7kB,QAAQ+Y,KAAK6L,CAAI,EAEzB,OAAOpkB,EAAMJ,IAAI4R,uBAAyB,yBAA2B6S,EAAE3V,GAAI0V,EAAM,CAAE3S,QAAS,CAAEC,MAHnFvI,KAGiGwI,KAAM,CAAE,CAAC,CACzH,CACJ,CACJ,EAAE;ACtGFhI,OAAOyD,QAAQ,sCAAuC,CAAC,KAAM,aAAc,WAAY,gBAAiB,gBAAiB,oBAAqB,SAAUsX,EAAItb,EAAYlJ,EAAUgkB,EAAe/X,EAAeE,GAC5M,IAAI+f,EAAoB,KACpBC,EAAe,KASnB,MAPc,CACVC,QAQJ,SAAiBjkB,GASb,OAAOA,GAAUqc,EAAG6H,KAAKlkB,CAAM,CACnC,EAjBImkB,aAmBJ,SAAsBC,GAClB,OAAO/H,EAAGwH,OAAOO,CAAS,CAC9B,EApBI/oB,SAsBJ,SAAkBA,GAC6C,GAAvDA,EAAS2E,OAAO9E,IAAImD,QAAQ8K,sBAAsB,GAAU9N,EAAS2E,OAAO9E,IAAImD,QAAQ,eAAe,EAAI,IAC3Gwd,EAAcwI,gBAAkBxmB,OAAO,EAmB/C,SAASymB,EAAYC,EAAqBC,GACtC3sB,EAASoD,OAAO8oB,CAAiB,EACjClsB,EAASoD,OAAO+oB,CAAY,EAK5BD,EAAoBlsB,EAAS,WAGzB,GAFAA,EAASoD,OAAO8oB,CAAiB,EAE7BlI,EAAcwI,iBAAmBxmB,OAAOge,EAAcwI,eAAe,EAAExf,IAAI4f,uBAAwB,IAAI,EAAI5mB,OAAO,EAMlH,OALA0mB,EAAsB1mB,OAAO6mB,SAAS7mB,OAAOge,EAAcwI,eAAe,EAAExf,IAAI4f,uBAAwB,IAAI,EAAEE,KAAK9mB,OAAO,CAAC,CAAC,EAC5H2mB,EAAiB3mB,OAAO6mB,SAAS7mB,OAAOge,EAAcwI,eAAe,EAAExf,IAAI+f,kBAAmB,IAAI,EAAED,KAAK9mB,OAAO,CAAC,CAAC,EAElHymB,EAAYC,EAAqBC,CAAc,EAExC,CAAA,EAGX1gB,EAAc+gB,QAAQ,6BAA8B,CAAE1jB,MAAO,UAAW2jB,QAAS,sCAAuCC,MAAO,UAAWC,UAAW,GAAK,CAAC,CAC/J,EAAGT,CAAmB,EAEtBP,EAAensB,EAAS,WACpBA,EAASoD,OAAO8oB,CAAiB,EACjClsB,EAASoD,OAAO+oB,CAAY,EAE5BhgB,EAAkBS,KAAK,cAAc,CACzC,EAAG+f,CAAc,CACrB,EA3CoBC,uBAAwBG,iBAAiB,GAGzD,OAAOvpB,GAAYghB,EAAG6H,KAAK7oB,CAAQ,CACvC,EA/BI4pB,cAiCJ,SAAuBb,GACM,MAArBA,EAAU7oB,QAAkB6oB,EAAUpkB,OAAO9E,IAAImD,QAAQ,oBAAoB,EAAI,GAAK+lB,EAAUpkB,OAAO9E,IAAImD,QAAQ,eAAe,EAAI,IAClI0lB,GAAmBlsB,EAASoD,OAAO8oB,CAAiB,EACxD/f,EAAkBS,KAAK,cAAc,GAGzC,OAAO4X,EAAGwH,OAAOO,CAAS,CAC9B,CAvCA,CAsEJ,EAAE;CC/EF,KASI,SAASc,EAA+B7I,EAAItb,GACxC,IAAIokB,EAAe,EAEflgB,EAAU,CACVmgB,WAAY,GACZplB,OASJ,SAAgBqlB,GAGZ,IAFA,IAAIC,EAAQ,CAAA,EAEH5lB,EAAI,EAAGA,EAAIoB,KAAKskB,WAAWtqB,OAAQ4E,CAAC,GACrCoB,KAAKskB,WAAW1lB,KAAO2lB,IAAWC,EAAQ,CAAA,GAG7CA,GAAOxkB,KAAKskB,WAAWxnB,KAAKynB,CAAS,CAC9C,EAhBIpB,QAkBJ,SAAiBjkB,GACb,IAAIkJ,EAAOjE,EACPsgB,EAAiB,CAAA,EAErB,GAAIpuB,QAAQquB,QAAQtc,EAAKkc,UAAU,EAC/B,IAAK,IAAI1lB,EAAI,EAAGA,EAAIwJ,EAAKkc,WAAWtqB,OAAQ4E,CAAC,GACzC,GAA8C,GAA1CM,EAAO9E,IAAImD,QAAQ6K,EAAKkc,WAAW1lB,EAAE,EAAQ,CAC7C6lB,EAAiB,CAAA,EACjB,KACJ,CAIe,GAAnB,EAAEJ,GAAuBI,GAAgBxkB,EAAW6a,WAAW,uBAAuB,EAC1F,OAAO5b,GAAUqc,EAAG6H,KAAKlkB,CAAM,CACnC,EAhCImkB,aAkCJ,SAAsBC,GACK,GAAnB,EAAEe,GAAoBpkB,EAAW6a,WAAW,qBAAqB,EACrE,OAAOS,EAAGwH,OAAOO,CAAS,CAC9B,EApCI/oB,SAsCJ,SAAkBA,GACS,GAAnB,EAAE8pB,GAAoBpkB,EAAW6a,WAAW,qBAAqB,EACrE,OAAOvgB,GAAYghB,EAAG6H,KAAK7oB,CAAQ,CACvC,EAxCI4pB,cA0CJ,SAAuBb,GACI,GAAnB,EAAEe,GAAoBpkB,EAAW6a,WAAW,qBAAqB,EACrE,OAAOS,EAAGwH,OAAOO,CAAS,CAC9B,CA5CA,EAEA,OAAOnf,CA2CX,CA7DA9N,QACKC,OAAO,sCAAuC,EAAE,EAChD2N,QAAQ,iCAAkCmgB,CAA8B,EAE7EA,EAA+B7jB,QAAU,CAAC,KAAM,aA0DnD,GAAE;ACjEHC,OAAOyD,QAAQ,wBAAyB,CAAC,QAAS,KAAM,cAAe,SAAUpN,EAAO0kB,EAAItY,GACxF,MAAO,CACHrJ,OAAQ,SAAUpC,GAMd,OAAOX,EAAMqY,KAAK,0CAA4C1X,EAAO,YAAcmtB,iBAJtE,CACTC,IAAK,CAAA,CACT,CAE2G,CAC/G,EAEAvqB,IAAK,SAAUoJ,GACX,OAAO5M,EAAMwD,IAAI,iCAAmCoJ,EAAK,YAAckhB,gBAAgB,CAC3F,CACJ,CACJ,EAAE;ACfF5jB,UAAU8jB,OAAO,0BAA2B,WACxC,OAAO,SAAUpX,EAAsBqX,GACnC,IAEIC,EAFJ,OAAKtX,GAAyBqX,GAE1BC,EAA+B,GAEnC1uB,QAAQqG,QAAQ+Q,EAAsB,SAAU+I,GAC5CsO,EAAW/nB,OAAO+nB,CAAQ,EAC1BE,kBAAoBjoB,OAAOyZ,EAAmB3N,yBAAyB,EAEnE9L,OAAOyZ,EAAmB3N,yBAAyB,EAAEsI,OAAOpU,OAAO+nB,CAAQ,EAAG,KAAK,GACnFC,EAA6BjoB,KAAK0Z,CAAkB,CAE5D,CAAC,EAEMuO,GAbwCtX,CAcnD,CACJ,CAAC;ACjBDhN,MAAMoC,WAAW,kBAAmB,CAAC,SAAU,SAAU,gBAAiB,cAAe,kBAAmB,SAAUV,EAAQY,EAAQgY,EAAe9X,EAAagiB,GAC1JhiB,EAAY4X,mBACZ9X,EAAOO,GAAG,gBAAgB,EAG9BnB,EAAO+iB,KAAQnK,EAAkB,MAAyBoK,OAAO,EACjEhjB,EAAOwb,MAAQ,GACfxb,EAAOyY,SAAW,GAClBzY,EAAOlJ,aAAe,KACtBkJ,EAAOijB,UAAY,CAAA,EACnBjjB,EAAOkjB,uBAAyB,CAAA,EAE3BtK,EAAcmK,OAAMnK,EAAcmK,KAAO/iB,EAAO+iB,MAErD/iB,EAAO1B,MAAQ,WACX0B,EAAOijB,UAAY,CAAA,EACnBjjB,EAAOlJ,aAAe,KAEtBgK,EAAYxC,MAAM0B,EAAOwb,MAAOxb,EAAOyY,SAAUzY,EAAO+iB,KAAM/iB,EAAOygB,kBAAkB,EAClFloB,KACG,SAAUugB,GACN9Y,EAAOijB,UAAY,CAAA,EASnBriB,EAAOO,GAAG,gBAAgB,CAC9B,EACA,SAAU9I,GAGN,GAFA2H,EAAOijB,UAAY,CAAA,EAEE,MAAjB5qB,EAAMC,OACN,GAAID,EAAM8N,QAAQ,eAAe,GAA+C,IAA1C9N,EAAM8N,QAAQ,eAAe,EAAEtO,OACjE,GAAIQ,EAAM8N,QAAQ,aAAa,GAA6C,IAAxC9N,EAAM8N,QAAQ,aAAa,EAAEtO,OAC7D,OAAQC,SAASO,EAAM8N,QAAQ,aAAa,EAAG,EAAE,GAC7C,KAAK,IACDnG,EAAOkjB,uBAAyB,CAAA,EAChC,MACJ,KAAK,IAIL,KAAK,IACDljB,EAAOkjB,uBAAyB,CAAA,EAChCljB,EAAOlJ,aAAeuB,EAAM8N,QAAQ,eAAe,EACnD,MACJ,QACInG,EAAOlJ,aAAeuB,EAAM8N,QAAQ,eAAe,CAEnF,MAGwBnG,EAAOlJ,aAAeuB,EAAM8N,QAAQ,eAAe,OAIvDnG,EAAOlJ,aAAe,8DAGJ,MAAjBuB,EAAMC,OACX0H,EAAOlJ,aAAe,sCAEA,MAAjBuB,EAAMC,OACX0H,EAAOlJ,aAAe,0FAGtBmC,QAAQC,IAAIb,CAAK,CAEzB,CACJ,CACR,EAEA2H,EAAOmjB,yBAA2B,YAGtC,EAAE;AC/EF5kB,KAAKmC,WAAW,iBAAkB,CAAC,SAAU,SAAU,gBAAiB,cAAe,mBAAoB,SAAUV,EAAQY,EAAQC,EAAeC,EAAasiB,GAC7JpjB,EAAOqjB,KAAO,CACV,CAAExmB,KAAQ,iBAAkB5E,IAAO,gBAAiB,GAExD+H,EAAO8Y,KAAOhY,EAAY4X,kBAC1B1Y,EAAOsjB,MAAQve,oBAAoBC,MAAMue,MACzCvjB,EAAOiZ,YAAcmK,EAAiBnK,YAAY,EAClDjZ,EAAOkZ,eAAiBkK,EAAiBlK,eAAe,EACxDlZ,EAAOmZ,cAAgBiK,EAAiBjK,cAAc,EACtDnZ,EAAOwjB,YAAc,CAAA,EAErBxjB,EAAOyjB,WAAa,WACXzjB,EAAO8Y,KAIR9Y,EAAOwjB,YAAc,CAACxjB,EAAOwjB,YAH7BxjB,EAAOwjB,YAAc,CAAA,CAK7B,EAEAxjB,EAAO0jB,KAAO,SAAUC,EAAOC,GAC3B5jB,EAAOwjB,YAAc,CAAA,EAErB5iB,EAAOO,GAAGwiB,EAAOC,CAAM,CAC3B,EAEA5jB,EAAO7G,IAAI,gBAAiB,SAAUV,EAAOlC,GACzCyJ,EAAO8Y,KAAOviB,EACdyJ,EAAOiZ,YAAcmK,EAAiBnK,YAAY,EAClDjZ,EAAOkZ,eAAiBkK,EAAiBlK,eAAe,EACxDlZ,EAAOmZ,cAAgBiK,EAAiBjK,cAAc,CAC1D,CAAC,EAEDnZ,EAAO7G,IAAI,iBAAkB,SAAUV,EAAOlC,GAC1CyJ,EAAO8Y,KAAO,KAEdlY,EAAOO,GAAG,OAAO,CACrB,CAAC,EAEDnB,EAAOiB,OAAS,WACZjB,EAAOwjB,YAAc,CAAA,EAErB1iB,EAAYG,OAAO,CACvB,CACJ,EAAE;AC5CFxC,eAAeiC,WAAW,0BAA2B,CAAC,SAAU,SAAU,cAAe,SAAUV,EAAQY,EAAQE,GAC1GA,EAAY4X,mBACb9X,EAAOO,GAAG,OAAO,EAGrBnB,EAAO8Y,KAAOhY,EAAY4X,kBAEtB1Y,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMO,WACrD9jB,EAAOqjB,KAAO,CACV,CACIxmB,KAAQ,YACRqB,MAAS,WACb,EACA,CACIrB,KAAQ,eACRqB,MAAS,cACb,GAEJ8B,EAAOqjB,KAAKU,UAAY,cAGxB/jB,EAAOqjB,KAAO,CACV,CACIxmB,KAAQ,eACRqB,MAAS,cACb,GAEJ8B,EAAOqjB,KAAKU,UAAY,eAGhC,EAAE;AC9BFtlB,eAAeiC,WAAW,qCAAsC,CAAC,aAAc,SAAU,QAAS,SAAU,gBAAiB,YAAa,kBAAmB,qBAAsB,kBAAmB,kBAAmB,gBAAiB,cAAe,oBAAqB,SAAU5C,EAAYkC,EAAQtL,EAAOkM,EAAQgY,EAAeoL,EAAWlB,EAAiBmB,EAAoBjP,EAAiBkP,EAAiBC,EAAerjB,EAAaC,GAEpbjD,EAAWsmB,MAAM,gBAAiB,qBAAqB,EACvDpkB,EAAO8Y,KAAOhY,EAAY4X,kBAC1B1Y,EAAOsjB,MAAQve,oBAAoBC,MAAMue,MACzCvjB,EAAOrB,aAAe,KACtBqB,EAAOqkB,OAAS,mBAChBrkB,EAAOskB,YAAc,CAAA,EACrBtkB,EAAOukB,YAAevkB,EAAO8Y,KAAK+K,OAAS7jB,EAAOsjB,MAAMhf,SAGxDtE,EAAOvI,OAAS,CACZ+sB,UAAW5pB,OAAO,EAClB6pB,QAAS7pB,OAAO,EAChB8pB,UAAW,QACXhgB,YAAa,KACbN,kBAAmB,GACnB+F,eAAgB,GAChBwa,kBAAmB,GACnBC,gBAAiB,GACjBrgB,eAAgB,GAChBsO,aAAc,GACdgS,WAAY,CAAA,EACZC,eAAgB,CAAA,EAChBC,UAAW,CAAA,CACf,EAcA/kB,EAAOga,aAAe,KACtBha,EAAO2C,YAAc,KACrB3C,EAAOmP,SAAW,KAClBnP,EAAOglB,QAAU,CACb,CAAExZ,MAAS,EAAG3O,KAAQ,oBAAqB,EAC3C,CAAE2O,MAAS,EAAG3O,KAAQ,oBAAqB,EAC3C,CAAE2O,MAAS,EAAG3O,KAAQ,MAAO,EAC7B,CAAE2O,MAAS,EAAG3O,KAAQ,UAAW,EACjC,CAAE2O,MAAS,EAAG3O,KAAQ,WAAY,EAClC,CAAE2O,MAAS,EAAG3O,KAAQ,aAAc,EACpC,CAAE2O,MAAS,EAAG3O,KAAQ,YAAa,EACnC,CAAE2O,MAAS,EAAG3O,KAAQ,eAAgB,EACtC,CAAE2O,MAAS,EAAG3O,KAAQ,aAAc,EACpC,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,qBAAsB,EAC7C,CAAE2O,MAAS,GAAI3O,KAAQ,SAAU,EACjC,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,UAAW,EAClC,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,gBAAiB,EACxC,CAAE2O,MAAS,GAAI3O,KAAQ,eAAgB,EACvC,CAAE2O,MAAS,GAAI3O,KAAQ,OAAQ,EAC/B,CAAE2O,MAAS,GAAI3O,KAAQ,MAAO,EAC9B,CAAE2O,MAAS,GAAI3O,KAAQ,OAAQ,GAGnCmD,EAAOilB,gBAAmBrM,EAAwC,4BAA+C,CAC7G,CAAEpN,MAAS,EAAG3O,KAAQ,oBAAqB,EAC3C,CAAE2O,MAAS,EAAG3O,KAAQ,oBAAqB,EAC3C,CAAE2O,MAAS,EAAG3O,KAAQ,MAAO,EAC7B,CAAE2O,MAAS,EAAG3O,KAAQ,UAAW,EACjC,CAAE2O,MAAS,EAAG3O,KAAQ,WAAY,EAClC,CAAE2O,MAAS,EAAG3O,KAAQ,aAAc,EACpC,CAAE2O,MAAS,EAAG3O,KAAQ,YAAa,EACnC,CAAE2O,MAAS,EAAG3O,KAAQ,eAAgB,EACtC,CAAE2O,MAAS,EAAG3O,KAAQ,aAAc,EACpC,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,qBAAsB,EAC7C,CAAE2O,MAAS,GAAI3O,KAAQ,SAAU,EACjC,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,UAAW,EAClC,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,gBAAiB,EACxC,CAAE2O,MAAS,GAAI3O,KAAQ,eAAgB,EACvC,CAAE2O,MAAS,GAAI3O,KAAQ,OAAQ,EAC/B,CAAE2O,MAAS,GAAI3O,KAAQ,MAAO,EAC9B,CAAE2O,MAAS,GAAI3O,KAAQ,OAAQ,GAEnCmD,EAAOrB,aAAe,GACtBqB,EAAOklB,2CAA6CngB,oBAAoBC,MAAMmgB,wCAC9EnlB,EAAOolB,gCAAkC,GACzCplB,EAAOqlB,UAAY,CAAA,EAEnBnB,EAAgB9I,gBAAgB,EAC3B7iB,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,CAC1B,CACR,EAEI4H,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMjf,UACrDwe,EAAgBnL,YAAY3X,EAAO8Y,KAAKwM,UAAU,EAC7C/sB,KACG,SAAUmK,GACN1C,EAAO8Y,KAAKxU,SAAW5B,EACvB1C,EAAOolB,gCAAqF,EAAlD1iB,EAAS6iB,gCAAgC1tB,OAAe6K,EAAS6iB,gCAAuD,MAAnB7iB,EAASS,OAAkBT,EAASS,OAAOoiB,gCAAkC,KAEvNvlB,EAAOolB,iCAAqF,IAAlDplB,EAAOolB,gCAAgCvtB,QAClFssB,EAAc5D,mCAAmC,EAC5ChoB,KACG,SAAUH,GACN4H,EAAOolB,gCAAkChtB,CAC7C,EACA,SAAUA,EAAUE,IAGxB,CAEZ,EACA,SAAUF,EAAUE,IAGxB,EAGR0H,EAAOwlB,2BAA6B,SAAUC,GAC1C,GAAIzlB,EAAOolB,iCAAmF,EAAhDplB,EAAOolB,gCAAgCvtB,OACjF,IAAK,IAAI4E,EAAI,EAAGA,EAAIuD,EAAOolB,gCAAgCvtB,OAAQ4E,CAAC,GAChE,GAAIuD,EAAOolB,gCAAgC3oB,GAAGipB,+BAA+BtiB,KAAOqiB,GAAUzlB,EAAOolB,gCAAgC3oB,GAAGkpB,UAAW,MAAO,CAAA,EAIlK,MAAO,CAAA,CACX,EAEA3lB,EAAO4lB,mBAAqB,SAAUpa,GAClC,IAAIqa,EAAO,CAAA,EASX,OAPA3xB,QAAQqG,QAAQyF,EAAOilB,gBAAiB,SAAUzqB,EAAOb,GACrD,GAAIa,EAAMgR,QAAUA,EAEhB,MAAO,EADPqa,EAAO,CAAA,EAGf,CAAC,EAEMA,CACX,EAEA7lB,EAAO8lB,uBAAyB,WAC5BlN,EAAcmN,2BAA6B/lB,EAAOilB,eAEtD,EAEAjlB,EAAOgmB,KAAO,SAAUC,GACpBjmB,EAAOqkB,OAAS4B,EAChBjmB,EAAOskB,YAAc,CAACtkB,EAAOskB,WACjC,EAEAtkB,EAAOkmB,SAAW,SAAUzjB,GACD,KAAnBA,EAAO/J,SAAgBsH,EAAOqI,mBAAmB,CACzD,EAEArI,EAAOqI,mBAAqB,WACxBrI,EAAOrB,aAAe,KAEtBslB,EAAmB5b,mBAAmBrI,EAAOvI,OAAO+sB,UAAWxkB,EAAOvI,OAAOgtB,QAASzkB,EAAOvI,OAAO8S,aAAcvK,EAAOvI,OAAOiN,YAAa1E,EAAOvI,OAAO6c,SAAUtU,EAAOvI,OAAO2M,kBAAmBpE,EAAOvI,OAAO0S,eAAgBnK,EAAOvI,OAAOktB,kBAAmB3kB,EAAOvI,OAAOmtB,gBAAiB5kB,EAAOvI,OAAO8M,eAAgBvE,EAAOvI,OAAOob,aAAc7S,EAAOvI,OAAOotB,WAAY7kB,EAAOvI,OAAOqtB,eAAgB9kB,EAAOvI,OAAO4M,QAASrE,EAAOvI,OAAOstB,SAAS,EAC/bxsB,KACG,WACIyH,EAAOrB,aAAeslB,EAAmBtlB,YAC7C,EACA,WACIqB,EAAOrB,aAAe,EAC1B,CACJ,CACR,EAEAqB,EAAOoL,mBAAqB,WACxBpL,EAAOqlB,UAAY,CAAA,EAEnBpB,EAAmB7Y,mBAAmBpL,EAAOvI,OAAO+sB,UAAWxkB,EAAOvI,OAAOgtB,QAASzkB,EAAOvI,OAAO8S,aAAcvK,EAAOvI,OAAOiN,YAAa1E,EAAOvI,OAAO6c,SAAUtU,EAAOvI,OAAO2M,kBAAmBpE,EAAOvI,OAAO0S,eAAgBnK,EAAOvI,OAAOktB,kBAAmB3kB,EAAOvI,OAAOmtB,gBAAiB5kB,EAAOvI,OAAOob,aAAc7S,EAAOvI,OAAOotB,WAAY7kB,EAAOvI,OAAOqtB,eAAgB9kB,EAAOvI,OAAO4M,QAASrE,EAAOvI,OAAOstB,SAAS,EACjaxsB,KACG,SAAUH,GACN,IAAI+tB,EAAW,yBAA2BvrB,OAAO,EAAEgB,OAAO,cAAc,EAAI,OAG5E,GAFAoE,EAAOqlB,UAAY,CAAA,EAEfjtB,EAAS+N,QAAQ,UAAU,EAC3BggB,EAAW/tB,EAAS+N,QAAQ,UAAU,OAErC,GAAI/N,EAAS+N,QAAQ,qBAAqB,EAE3C,IADA,IAAIigB,EAAqBhuB,EAAS+N,QAAQ,qBAAqB,EAAEkgB,MAAM,GAAG,EACjE5pB,EAAI,EAAGA,EAAI2pB,EAAmBvuB,OAAQ4E,CAAC,GACK,GAA7C2pB,EAAmB3pB,GAAGrB,QAAQ,UAAU,IAExC+qB,EADYC,EAAmB3pB,GAAG4pB,MAAM,GAAG,EAC1B,GAAGnf,QAAQ,IAAK,EAAE,GAK3CkX,EAAO,IAAIkI,KAAK,CAACluB,EAAS7B,MAAO,CAAEY,KAAM,yBAA0B,CAAC,EAExE6sB,EAAUuC,OAAOnI,EAAM+H,CAAQ,CACnC,EACA,WACInmB,EAAOqlB,UAAY,CAAA,CAEvB,CACJ,CACR,EAEArlB,EAAOwmB,8BAAgC,SAAU7jB,GAG7C,IAFA,IAAIqH,EAAkB,KAEbjC,EAAI,EAAGA,EAAIpF,EAAYoD,qBAAqBlO,OAAQkQ,CAAC,GACrDiC,EAMGrH,EAAYoD,qBAAqBgC,GAAGJ,UAChCqC,EAAgB5O,QAAQuH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,cAAc,EAAI,IACvFH,GAAmB,KAAOrH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,gBAP3ExH,EAAYoD,qBAAqBgC,GAAGJ,WACpCqC,EAAkBrH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,eAAesc,SAAS,GAYnG,OAAOzc,CACX,EAEAhK,EAAO0V,aAAe,SAAU/S,GAG5B,IAFA,IAAI7D,EAAY,KAEPiJ,EAAI,EAAGA,EAAIpF,EAAYoD,qBAAqBlO,OAAQkQ,CAAC,GACrDjJ,EAQG6D,EAAYoD,qBAAqBgC,GAAGJ,UAChChF,EAAYoD,qBAAqBgC,GAAGJ,SAASC,UACzC9I,EAAU1D,QAAQuH,EAAYoD,qBAAqBgC,GAAGJ,SAASC,SAASyC,IAAI,EAAI,IAChFvL,GAAa,KAAO6D,EAAYoD,qBAAqBgC,GAAGJ,SAASC,SAASyC,MAVlF1H,EAAYoD,qBAAqBgC,GAAGJ,UAChChF,EAAYoD,qBAAqBgC,GAAGJ,SAASC,WAC7C9I,EAAY6D,EAAYoD,qBAAqBgC,GAAGJ,SAASC,SAASyC,MAelF,OAAOvL,CACX,EAEAkB,EAAO0mB,uBAAyB,SAAU/jB,GACtC3C,EAAO2C,YAAcA,EAErB5B,EAAkBS,KAAK,kBAAkB,CAC7C,EACAxB,EAAO2mB,sBAAwB,WAC3B5lB,EAAkBG,MAAM,kBAAkB,CACjD,EAEGlB,EAAO2P,YAAc,SAAUiX,GAC3B5R,EAAgBrF,YAAYiX,CAAU,EACjCruB,KACG,WACIyH,EAAOmP,SAAW6F,EAAgB7F,QACtC,CACJ,CACR,EAEAnP,EAAO6mB,8BAAgC,WACnC,OAAO7R,EAAgBrB,sBAAsB,CACjD,EAEA3T,EAAO8mB,cAAgB,WACnB9mB,EAAOmP,SAAW,IACtB,EAEAnP,EAAO+mB,gBAAkB,WACrB,OAAQ/mB,EAAOvI,OAAOitB,WAClB,IAAK,QACD1kB,EAAOvI,OAAO+sB,UAAY5pB,OAAO,EACjCoF,EAAOvI,OAAOgtB,QAAU7pB,OAAO,EAC/B,MACJ,IAAK,WACDoF,EAAOvI,OAAO+sB,UAAY5pB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC7C5B,EAAOvI,OAAOgtB,QAAU7pB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC3C,MACJ,IAAK,YACD5B,EAAOvI,OAAO+sB,UAAY5pB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAClDhnB,EAAOvI,OAAOgtB,QAAU7pB,OAAO,EAAEosB,SAAS,EAAG,GAAG,CAExD,CAEJ,EAEAhnB,EAAOinB,eAAiB,WACpBjnB,EAAOvI,OAAOitB,UAAY,EAC9B,EAEA1kB,EAAOknB,gBAAkB,SAASvkB,GAC9BshB,EAAmB/f,kBAAoBvB,EAAYS,GAEnDxC,EAAOO,GAAG,aAAa,CAC3B,EAEAnB,EAAOmnB,qBAAuB,SAAU3oB,GACpC,IAAImN,EAAmB,GAqBvB,OAnB2B,MAAvBnN,EAAQqN,aAA8C,IAAvBrN,EAAQqN,cACvCF,GAAoBnN,EAAQqN,aAGJ,MAAxBrN,EAAQuM,cAAgD,IAAxBvM,EAAQuM,eACT,IAA3BY,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQuM,cAGZ,MAAhBvM,EAAQsM,MAAgC,IAAhBtM,EAAQsM,OACD,IAA3Ba,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQsM,MAGR,MAApBtM,EAAQqM,UAAwC,IAApBrM,EAAQqM,WACL,IAA3Bc,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQqM,UAGzBc,CACX,EAEA3L,EAAOonB,4BAA8B,WAC7BpnB,EAAOvI,OAAOotB,aACd7kB,EAAOvI,OAAOqtB,eAAiB,CAAA,EAC/B9kB,EAAOvI,OAAO4M,QAAU,CAAA,EAEhC,EAEArE,EAAOqnB,qBAAuB,WACtBrnB,EAAOvI,OAAOqtB,iBACd9kB,EAAOvI,OAAOotB,WAAa,CAAA,EAC3B7kB,EAAOvI,OAAO4M,QAAU,CAAA,EAEhC,EAEArE,EAAOsnB,oBAAsB,SAAU3kB,GAGnC,IAFA,IAAI4kB,EAAwB,CAAA,EAEnB9qB,EAAI,EAAGA,EAAIkG,EAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC1D,GAAI,CAACkG,EAAYoD,qBAAqBtJ,GAAGoJ,YAAa,CAClD0hB,EAAwB,CAAA,EACxB,KACJ,CAGJ,OAAIA,EACO,UAGH5kB,EAAYoD,qBAAqB,GAAGF,YAC7B,UADX,KAAA,CAIR,EAEA7F,EAAOwnB,gBAAkB,SAAU7kB,GAC/B,IAAI6F,EAAe,GAanB,OAXI7F,EAAYgK,gBACZnE,EAAe7F,EAAYgK,eAAetC,KAEtC1H,EAAYgK,eAAe2F,KAA+C,EAAxC3P,EAAYgK,eAAe2F,IAAIza,SAAY2Q,GAAgB,KAAO7F,EAAYgK,eAAe2F,IAAM,OAGzI9J,EAAe7F,EAAY2B,SAAS+F,KAEhC1H,EAAY2B,SAASgO,KAAyC,EAAlC3P,EAAY2B,SAASgO,IAAIza,SAAY2Q,GAAgB,KAAO7F,EAAY2B,SAASgO,IAAM,MAGpH9J,CACX,EAEIxI,EAAO8Y,KAAK+K,OAAS7jB,EAAOsjB,MAAMhf,UAClCtE,EAAOqI,mBAAmB,CAElC,EAAE;ACnYF5J,eAAeiC,WAAW,kCAAmC,CAAC,aAAc,SAAU,QAAS,SAAU,WAAY,YAAa,gBAAiB,YAAa,gBAAiB,cAAe,qBAAsB,kBAAmB,kBAAmB,kBAAmB,gBAAiB,oBAAqB,SAAU5C,EAAYkC,EAAQtL,EAAOkM,EAAQhM,EAAU6yB,EAAW7O,EAAeoL,EAAWnjB,EAAeC,EAAamjB,EAAoBjP,EAAiBkP,EAAiBwD,EAAiBvD,EAAepjB,GAE/fjD,EAAWsmB,MAAM,gBAAiB,kBAAkB,EACpDpkB,EAAOpB,UAAY,KACnBoB,EAAOlJ,aAAe,KACtBkJ,EAAOjI,MAAQ,KACfiI,EAAOqkB,OAAS,oBAChBrkB,EAAOskB,YAAc,CAAA,EAGrBtkB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAO6nB,gBAAkB,QACzB7nB,EAAO8nB,mBAAqB,GAC5B9nB,EAAO+nB,kBAAoB,KAC3B/nB,EAAOgoB,eAAiB,GACxBhoB,EAAOioB,wBAA0B,GACjCjoB,EAAOkoB,qBAAuB,GAC9BloB,EAAOmoB,wBAA0B,GACjCnoB,EAAOooB,sBAAwB,GAC/BpoB,EAAOqoB,mBAAqB,GAC5BroB,EAAOsoB,mBAAqB,KAC5BtoB,EAAOuoB,cAAgB,CAAA,EACvBvoB,EAAOwoB,eAAiB,CAAA,EACxBxoB,EAAOyoB,sBAAwB,CAAA,EAC/BzoB,EAAO0oB,sBAAwB,CAAA,EAC/B1oB,EAAO2oB,gBAAkB,CAAA,EACzB3oB,EAAOga,aAAe,KACtBha,EAAO4e,cAAgB,KACvB5e,EAAO2C,YAAc,KACrB3C,EAAO4oB,iBAAmB,KAC1B5oB,EAAO6oB,sBAAwB,KAC/B7oB,EAAO8oB,iBAAmB,KAC1B9oB,EAAOlB,UAAY,KACnBkB,EAAOgU,mBAAqB,KAC5BhU,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOglB,QAAU,CACb,CAAExZ,MAAS,EAAG3O,KAAQ,iBAAkB,EACxC,CAAE2O,MAAS,EAAG3O,KAAQ,uBAAwB,EAE9C,CAAE2O,MAAS,EAAG3O,KAAQ,kBAAmB,EACzC,CAAE2O,MAAS,EAAG3O,KAAQ,aAAc,EACpC,CAAE2O,MAAS,EAAG3O,KAAQ,YAAa,EACnC,CAAE2O,MAAS,EAAG3O,KAAQ,eAAgB,EACtC,CAAE2O,MAAS,EAAG3O,KAAQ,aAAc,EACpC,CAAE2O,MAAS,EAAG3O,KAAQ,cAAe,EACrC,CAAE2O,MAAS,EAAG3O,KAAQ,qBAAsB,EAE5C,CAAE2O,MAAS,GAAI3O,KAAQ,SAAU,EACjC,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,UAAW,EAClC,CAAE2O,MAAS,GAAI3O,KAAQ,MAAO,EAC9B,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,gBAAiB,EAExC,CAAE2O,MAAS,GAAI3O,KAAQ,MAAO,EAC9B,CAAE2O,MAAS,GAAI3O,KAAQ,UAAW,GAEtCmD,EAAOqlB,UAAY,CAAA,EAEnBrlB,EAAOilB,gBAAmBrM,EAAcoQ,yBAA2BpQ,EAAcoQ,wBAAwBnxB,SAAWmI,EAAOglB,QAAQntB,OAAU+gB,EAAcoQ,wBAA0B,CACjL,CAAExd,MAAS,EAAG3O,KAAQ,iBAAkB,EACxC,CAAE2O,MAAS,EAAG3O,KAAQ,uBAAwB,EAE9C,CAAE2O,MAAS,EAAG3O,KAAQ,kBAAmB,EACzC,CAAE2O,MAAS,EAAG3O,KAAQ,aAAc,EACpC,CAAE2O,MAAS,EAAG3O,KAAQ,YAAa,EACnC,CAAE2O,MAAS,EAAG3O,KAAQ,eAAgB,EACtC,CAAE2O,MAAS,EAAG3O,KAAQ,aAAc,EACpC,CAAE2O,MAAS,EAAG3O,KAAQ,cAAe,EACrC,CAAE2O,MAAS,EAAG3O,KAAQ,qBAAsB,EAE5C,CAAE2O,MAAS,GAAI3O,KAAQ,SAAU,EACjC,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,UAAW,EAClC,CAAE2O,MAAS,GAAI3O,KAAQ,MAAO,EAC9B,CAAE2O,MAAS,GAAI3O,KAAQ,cAAe,EACtC,CAAE2O,MAAS,GAAI3O,KAAQ,gBAAiB,EAExC,CAAE2O,MAAS,GAAI3O,KAAQ,MAAO,EAC9B,CAAE2O,MAAS,GAAI3O,KAAQ,UAAW,GAEtCmD,EAAOipB,2BAA6B,CAAA,EACpCjpB,EAAOkpB,kCAAoC,CAAA,EAC3ClpB,EAAOmpB,iCAAmC,CACtCC,SAAU,CAAA,EACVzf,MAAO,CAAA,EACP0f,MAAO,IACX,EACArpB,EAAOspB,iCAAmCvkB,oBAAoBC,MAAMukB,iCAEpE7B,EAAgBhS,aAAa,EACxBnd,KACG,WACIyH,EAAOlB,UAAY4oB,EAAgB5oB,UACnCkB,EAAOgU,mBAAqBhU,EAAOlB,SACvC,CACJ,EAEJolB,EAAgB9I,gBAAgB,EAC3B7iB,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,CAC1B,CACJ,EAgBJ4H,EAAO4lB,mBAAqB,SAAUpa,GAClC,IAAIqa,EAAO,CAAA,EASX,OAPA3xB,QAAQqG,QAAQyF,EAAOilB,gBAAiB,SAAUzqB,EAAOb,GACrD,GAAIa,EAAMgR,QAAUA,EAEhB,MAAO,EADPqa,EAAO,CAAA,EAGf,CAAC,EAEMA,CACX,EAEA7lB,EAAO8lB,uBAAyB,WAC5BlN,EAAcoQ,wBAA0BhpB,EAAOilB,eACnD,EAEAjlB,EAAOgmB,KAAO,SAAUC,GACpBjmB,EAAOqkB,OAAS4B,EAChBjmB,EAAOskB,YAAc,CAACtkB,EAAOskB,WACjC,EAEAtkB,EAAOkmB,SAAW,SAAUzjB,GACD,KAAnBA,EAAO/J,SAAgBsH,EAAOgS,gBAAgB,CACtD,EAEAhS,EAAOgS,gBAAkB,WACrBhS,EAAOpB,UAAY,KACnB,IAAI4qB,EAAc5uB,OAAO,EAEzB3B,QAAQC,IAAI,qCAAuCswB,EAAY5tB,OAAO,yBAAyB,CAAC,EAEhGoZ,EAAgBhD,gBAAgBhS,EAAO2nB,gBAAiB3nB,EAAO4nB,cAAe5nB,EAAO+nB,kBAAmB/nB,EAAO8nB,mBAAoB9nB,EAAOgoB,eAAgBhoB,EAAOioB,wBAAyBjoB,EAAOkoB,qBAAsBloB,EAAOmoB,wBAAyBnoB,EAAOooB,sBAAuBpoB,EAAOqoB,mBAAoBroB,EAAOuoB,cAAevoB,EAAO0oB,sBAAuB1oB,EAAOwoB,eAAgBxoB,EAAOyoB,sBAAuBzoB,EAAO2oB,eAAe,EAC1apwB,KACG,WACIyH,EAAOpB,UAAYoW,EAAgBpW,UACnC,IAAI6qB,EAAY7uB,OAAO,EAEvB3B,QAAQC,IAAI,uBAAyBuwB,EAAU7tB,OAAO,yBAAyB,EAAI,iBAAmB6tB,EAAU/H,KAAK8H,EAAa,UAAW,CAAA,CAAI,EAAI,UAAU,CAOnK,CACJ,CACR,EAEAxpB,EAAOwS,gBAAkB,WACrBxS,EAAOqlB,UAAY,CAAA,EAEnBrQ,EAAgBxC,gBAAgBxS,EAAO2nB,gBAAiB3nB,EAAO4nB,cAAe5nB,EAAO+nB,kBAAmB/nB,EAAO8nB,mBAAoB9nB,EAAOgoB,eAAgBhoB,EAAOioB,wBAAyBjoB,EAAOkoB,qBAAsBloB,EAAOmoB,wBAAyBnoB,EAAOooB,sBAAuBpoB,EAAOqoB,mBAAoBroB,EAAOuoB,cAAevoB,EAAO0oB,sBAAuB1oB,EAAOwoB,eAAgBxoB,EAAOyoB,sBAAuBzoB,EAAO2oB,eAAe,EAC1apwB,KACG,SAAUH,GACN,IAAI+tB,EAAW,sBAAwBvrB,OAAO,EAAEgB,OAAO,cAAc,EAAI,OAGzE,GAFAoE,EAAOqlB,UAAY,CAAA,EAEfjtB,EAAS+N,QAAQ,UAAU,EAC3BggB,EAAW/tB,EAAS+N,QAAQ,UAAU,OAErC,GAAI/N,EAAS+N,QAAQ,qBAAqB,EAE3C,IADA,IAAIigB,EAAqBhuB,EAAS+N,QAAQ,qBAAqB,EAAEkgB,MAAM,GAAG,EACjE5pB,EAAI,EAAGA,EAAI2pB,EAAmBvuB,OAAQ4E,CAAC,GACK,GAA7C2pB,EAAmB3pB,GAAGrB,QAAQ,UAAU,IAExC+qB,EADYC,EAAmB3pB,GAAG4pB,MAAM,GAAG,EAC1B,GAAGnf,QAAQ,IAAK,EAAE,GAK3CkX,EAAO,IAAIkI,KAAK,CAACluB,EAAS7B,MAAO,CAAEY,KAAM,yBAA0B,CAAC,EAExE6sB,EAAUuC,OAAOnI,EAAM+H,CAAQ,CACnC,EACA,WACInmB,EAAOqlB,UAAY,CAAA,CAEvB,CACJ,CACR,EAEArlB,EAAO0pB,oBAAsB,SAAUva,GACnCnP,EAAOmP,SAAWA,EAElBpO,EAAkBS,KAAK,eAAe,CAC1C,EAEAxB,EAAO2pB,mBAAqB,WACxB5oB,EAAkBG,MAAM,eAAe,CAC9C,EAEGlB,EAAO2P,YAAc,SAAUiX,GAC3B5R,EAAgBrF,YAAYiX,CAAU,EACjCruB,KACG,WACIyH,EAAOmP,SAAW6F,EAAgB7F,QACtC,CACJ,CACR,EAEAnP,EAAO4pB,wBAA0B,SAAUza,GACvC,IAAIxQ,EAAe,GAEnB,GAAIwQ,EAGA,IAFA,IAAI0E,EAAgB,CAAA,EAEXpX,EAAI,EAAGA,EAAI0S,EAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAGvD,GAFAoX,EAAgB,CAAA,EAEY,IAAxBlV,EAAa9G,OACb8G,EAAahE,KAAKwU,EAASpJ,qBAAqBtJ,GAAG+P,WAAW,MAE7D,CACD,IAAK,IAAIsH,EAAI,EAAGA,EAAInV,EAAa9G,OAAQic,CAAC,GAClCnV,EAAamV,GAAG1P,oBAAsB+K,EAASpJ,qBAAqBtJ,GAAG+P,YAAYpI,oBACnFyP,EAAgB,CAAA,GAInBA,GACDlV,EAAahE,KAAKwU,EAASpJ,qBAAqBtJ,GAAG+P,WAAW,CAEtE,CAIR,OAAO7N,CACX,EAEAqB,EAAO4X,aAAe,SAAUzI,GAG5B,IAFA,IAAItQ,EAAY,KAEPkJ,EAAI,EAAGA,EAAIoH,EAASpJ,qBAAqBlO,OAAQkQ,CAAC,GAClDlJ,EAIGA,EAAUzD,QAAQ+T,EAASpJ,qBAAqBgC,GAAGyE,YAAYlI,SAAS+F,IAAI,EAAI,IAChFxL,GAAa,KAAOsQ,EAASpJ,qBAAqBgC,GAAGyE,YAAYlI,SAAS+F,MAJ9ExL,EAAYsQ,EAASpJ,qBAAqBgC,GAAGyE,YAAYlI,SAAS+F,KAS1E,OAAOxL,CACX,EAEAmB,EAAO+mB,gBAAkB,WACrB,OAAQ/mB,EAAO6nB,iBACX,IAAK,QACD7nB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9B,MACJ,IAAK,WACDoF,EAAO2nB,gBAAkB/sB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC5C5B,EAAO4nB,cAAgBhtB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC1C,MACJ,IAAK,YACD5B,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EACjDhnB,EAAO4nB,cAAgBhtB,OAAO,EAAEosB,SAAS,EAAG,GAAG,CAEvD,CACJ,EAEAhnB,EAAOinB,eAAiB,WACpBjnB,EAAO6nB,gBAAkB,EAC7B,EAEA7nB,EAAO6pB,WAAa,WACZ7pB,EAAOuoB,gBACPvoB,EAAOqoB,mBAAqB,GAEpC,EAEAroB,EAAO8pB,YAAc,WACb9pB,EAAOwoB,iBAAgBxoB,EAAOyoB,sBAAwB,CAAA,EAC9D,EAEAzoB,EAAO+pB,mBAAqB,WACpB/pB,EAAOyoB,wBAAuBzoB,EAAOwoB,eAAiB,CAAA,EAC9D,EAEAxoB,EAAOgqB,eAAiB,SAAUxe,EAAOlB,GACrCtK,EAAO6oB,sBAAwBrd,EAC/BxL,EAAO8oB,iBAAmBxe,EAC1BtK,EAAOgU,mBAAqBgB,EAAgBjB,sBAAsB/T,EAAO8oB,iBAAkB9oB,EAAOlB,SAAS,EAC3GkB,EAAOiqB,aAAe,CAAA,EACtBjqB,EAAOkpB,kCAAoC,CAAA,EAMvClpB,EAAO8oB,iBAAiBpkB,YAAYwlB,kCAAkH,EAA9ElqB,EAAO8oB,iBAAiBpkB,YAAYwlB,iCAAiCryB,SAC7ImI,EAAOipB,2BAA6B,CAAA,GAGxCloB,EAAkBS,KAAK,mBAAmB,CAC9C,EAEAxB,EAAOmqB,oBAAsB,WACzBppB,EAAkBG,MAAM,mBAAmB,CAClD,EAEGlB,EAAOoqB,eAAiB,SAAUnW,GAC1BjU,EAAO8oB,iBAAiBlhB,UAAY5H,EAAO8oB,iBAAiBlhB,SAASxE,KAAO6Q,EAAE7Q,KAC1E4R,EAAgB7F,WAAU6F,EAAgB7F,SAASkb,OAAS,CAAA,GAChErqB,EAAO8oB,iBAAiBuB,OAAS,CAAA,GAGjCrqB,EAAO4oB,kBAAoB5oB,EAAO4oB,iBAAiBxlB,KAAO6Q,EAAE7Q,IAC5DpD,EAAO4oB,iBAAmB,KAC1B5oB,EAAOipB,2BAA6B,CAAA,IAGpCjpB,EAAO4oB,iBAAmB3U,EAC1BjU,EAAOipB,2BAA6B,CAAA,EAE5C,EAEAjpB,EAAOsqB,eAAiB,WAMpBvpB,EAAkBS,KAAK,mBAAmB,EAC1CT,EAAkBG,MAAM,0BAA0B,EAClDlB,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,KAEvCvV,EAAgBrF,YAAY3P,EAAO8oB,iBAAiB1lB,EAAE,EACjD7K,KACG,SAAU4W,GACN6F,EAAgB7F,SAASvH,SAAW5H,EAAO4oB,iBAC3C5T,EAAgB7F,SAASkb,OAAS,CAAA,EAClC,OAAOrV,EAAgB7F,SAAS8D,2BAEhC+B,EAAgBlC,aAAa,EACxBva,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAO+oB,kBAAoB,CAAA,EAC3B,IAAK,IAAIze,EAAI,EAAGA,EAAItK,EAAOpB,UAAU/G,OAAQyS,CAAC,GACtCtK,EAAOpB,UAAU0L,GAAGlH,KAAO4R,EAAgB7F,SAAS/L,KACpDpD,EAAOpB,UAAU0L,GAAK0K,EAAgB7F,UAG9CnP,EAAO6oB,sBAAwB,KAC/B7oB,EAAO8oB,iBAAmB,KAC1B9oB,EAAOuqB,8BAAgC,KACvCvqB,EAAO4oB,iBAAmB,KAE1B7nB,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,GACN4H,EAAO+oB,kBAAoB,CAAA,EAGlB,MADD3wB,EAASE,OAET0H,EAAOuqB,8BAAgC,8GAGvCvqB,EAAOuqB,8BAAgC,wBAGnD,CACJ,CACR,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAGlB,MADD3wB,EAASE,OAET0H,EAAOuqB,8BAAgC,8GAGvCvqB,EAAOuqB,8BAAgC,wBAGnD,CACJ,CACR,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAGlB,MADD3wB,EAASE,OAET0H,EAAOuqB,8BAAgC,8GAGvCvqB,EAAOuqB,8BAAgC,wBAGnD,CACJ,CACR,EAEAvqB,EAAOwqB,sBAAwB,WAC3B,GAAIxqB,EAAO8oB,iBAAiBlhB,UAAY5H,EAAO8oB,iBAAiBlhB,SAASxE,KAAOpD,EAAOspB,iCAAiClmB,GAGpH,OAFArC,EAAkBG,MAAM,mBAAmB,EAC3CH,EAAkBS,KAAK,0BAA0B,EAC1C,CAAA,EAGPxB,EAAOsqB,eAAe,CAE9B,EAEAtqB,EAAOyqB,qBAAuB,SAAUhoB,GAIpC,OAHA1B,EAAkBG,MAAM,0BAA0B,EAClDH,EAAkBS,KAAK,mBAAmB,EACtCiB,GAAQA,EAAO7J,gBAAgB,EAC5B,CAAA,CACX,EAEAoH,EAAO0qB,2BAA6B,WAEhC,OADA3pB,EAAkBG,MAAM,0BAA0B,EAC3C,CAAA,CACX,EAEAlB,EAAO2qB,sCAAwC,WAC3C3qB,EAAOkpB,kCAAoC,CAAA,EAC3ClpB,EAAOmpB,iCAAiCxf,MAAQ,CAAA,EAChD3J,EAAOmpB,iCAAiCE,MAAQ,GAIhD,IAHA,IAAIlZ,EAAuB,GACvBya,EAAoB,CAAA,EAEfnuB,EAAI,EAAGA,EAAIuD,EAAO8oB,iBAAiB/iB,qBAAqBlO,OAAQ4E,CAAC,GAKtE,GAJmF,YAA/EuD,EAAO8oB,iBAAiB/iB,qBAAqBtJ,GAAG2N,uBAAuBC,MAAsBrK,EAAO8oB,iBAAiB/iB,qBAAqBtJ,GAAGyN,QAC7IlK,EAAOmpB,iCAAiCxf,MAAQ,CAAA,GAGjB,GAA/BwG,EAAqBtY,OACrBsY,EAAqBxV,KAAKqF,EAAO8oB,iBAAiB/iB,qBAAqBtJ,GAAG+P,WAAW,MAEpF,CAGD,IAAK,IAFLoe,EAAoB,CAAA,EAEXtgB,EAAI,EAAGA,EAAI6F,EAAqBtY,OAAQyS,CAAC,GAC1CtK,EAAO8oB,iBAAiB/iB,qBAAqBtJ,GAAG+P,YAAYpJ,IAAM+M,EAAqB7F,GAAGlH,KAC1FwnB,EAAoB,CAAA,GAIvBA,GAAmBza,EAAqBxV,KAAKqF,EAAO8oB,iBAAiB/iB,qBAAqBtJ,GAAG+P,WAAW,CACjH,CAGJ,IAASlC,EAAI,EAAGA,EAAI6F,EAAqBtY,OAAQyS,CAAC,GACa,EAAvDtK,EAAOmpB,iCAAiCE,MAAMxxB,SAAYmI,EAAOqpB,OAAS,SAE9ErpB,EAAOmpB,iCAAiCE,OAASlZ,EAAqB7F,GAAG3F,gBAEjF,EAEA3E,EAAO6qB,+BAAiC,WACpC7qB,EAAOkpB,kCAAoC,CAAA,CAC/C,EAEAlpB,EAAOqT,gCAAkC,WACrCrT,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,KACvCvqB,EAAOkpB,kCAAoC,CAAA,EAE3ClU,EAAgBrF,YAAY3P,EAAO8oB,iBAAiB1lB,EAAE,EACjD7K,KACG,SAAU4W,GACN6F,EAAgB7F,SAAS8D,2BAA6B,GACtD+B,EAAgB7F,SAAS8D,2BAA2BtY,KAAKqF,EAAOmpB,gCAAgC,EAEhGnU,EAAgB3B,gCAAgC2B,EAAgB7F,QAAQ,EACnE5W,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAO+oB,kBAAoB,CAAA,EAC3B,IAAK,IAAIze,EAAI,EAAGA,EAAItK,EAAOpB,UAAU/G,OAAQyS,CAAC,GACtCtK,EAAOpB,UAAU0L,GAAGlH,KAAO4R,EAAgB7F,SAAS/L,KACpDpD,EAAOpB,UAAU0L,GAAK0K,EAAgB7F,UAG9CnP,EAAO6oB,sBAAwB,KAC/B7oB,EAAO8oB,iBAAmB,KAC1B9oB,EAAOuqB,8BAAgC,KACvCvqB,EAAO4oB,iBAAmB,KAE1B7nB,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,GACN4H,EAAO+oB,kBAAoB,CAAA,EAEnB3wB,EAASE,OAGT0H,EAAOuqB,8BAAgC,wBAGnD,CACJ,CACR,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAEnB3wB,EAASE,OAGT0H,EAAOuqB,8BAAgC,wBAGnD,CACR,CACJ,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAGlB,MADD3wB,EAASE,OAET0H,EAAOuqB,8BAAgC,8GAGvCvqB,EAAOuqB,8BAAgC,wBAGnD,CACJ,CACR,EAEAvqB,EAAO8qB,4BAA8B,WACjC9qB,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,KACvCvqB,EAAOkpB,kCAAoC,CAAA,EAE3ClU,EAAgBrF,YAAY3P,EAAO8oB,iBAAiB1lB,EAAE,EACjD7K,KACG,SAAU4W,GACN6F,EAAgB1B,oCAAoC0B,EAAgB7F,QAAQ,EACvE5W,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAO+oB,kBAAoB,CAAA,EAC3B,IAAK,IAAIze,EAAI,EAAGA,EAAItK,EAAOpB,UAAU/G,OAAQyS,CAAC,GACtCtK,EAAOpB,UAAU0L,GAAGlH,KAAO4R,EAAgB7F,SAAS/L,KACpDpD,EAAOpB,UAAU0L,GAAK0K,EAAgB7F,UAG9CnP,EAAO6oB,sBAAwB,KAC/B7oB,EAAO8oB,iBAAmB,KAC1B9oB,EAAOuqB,8BAAgC,KACvCvqB,EAAO4oB,iBAAmB,KAE1B7nB,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,GACN4H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CAER,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACR,CACJ,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAGlB,MADD3wB,EAASE,OAET0H,EAAOuqB,8BAAgC,8GAGvCvqB,EAAOuqB,8BAAgC,wBAGnD,CACJ,CACR,EAEAvqB,EAAO+qB,4BAA8B,WACjC/qB,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,KACvCvqB,EAAOkpB,kCAAoC,CAAA,EAE3ClU,EAAgBrF,YAAY3P,EAAO8oB,iBAAiB1lB,EAAE,EACjD7K,KACG,SAAU4W,GACN6F,EAAgBzB,oCAAoCyB,EAAgB7F,QAAQ,EACvE5W,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAO+oB,kBAAoB,CAAA,EAC3B,IAAK,IAAIze,EAAI,EAAGA,EAAItK,EAAOpB,UAAU/G,OAAQyS,CAAC,GACtCtK,EAAOpB,UAAU0L,GAAGlH,KAAO4R,EAAgB7F,SAAS/L,KACpDpD,EAAOpB,UAAU0L,GAAK0K,EAAgB7F,UAG9CnP,EAAO6oB,sBAAwB,KAC/B7oB,EAAO8oB,iBAAmB,KAC1B9oB,EAAOuqB,8BAAgC,KACvCvqB,EAAO4oB,iBAAmB,KAE1B7nB,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,GACN4H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CAER,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CACR,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAGlB,MADD3wB,EAASE,OAET0H,EAAOuqB,8BAAgC,8GAGvCvqB,EAAOuqB,8BAAgC,wBAGnD,CACJ,CACR,EAEAvqB,EAAOoT,aAAe,SAAU9I,GAC5BtK,EAAO2pB,mBAAmB,EAC1B5oB,EAAkBS,KAAK,YAAY,EAEnCwT,EAAgB5B,aAAa9I,CAAC,EACzB/R,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYrF,EAAElH,EAAE,EAC3B7K,KACG,WACI,IAAK,IAAI+R,EAAI,EAAGA,EAAItK,EAAOpB,UAAU/G,OAAQyS,CAAC,GACtCtK,EAAOpB,UAAU0L,GAAGlH,KAAO4R,EAAgB7F,SAAS/L,KACpDpD,EAAOpB,UAAU0L,GAAK0K,EAAgB7F,UAI9CpO,EAAkBG,MAAM,YAAY,CACxC,EACA,SAAU9I,IAGd,CACR,EACA,SAAUA,EAAUE,GAEP,MADDF,EAASE,OAET0H,EAAOlJ,aAAe,8GAGtBkJ,EAAOlJ,aAAe,wBAGlC,CACJ,CACR,EAEAkJ,EAAOgrB,iBAAmB,WACtBjqB,EAAkBS,KAAK,YAAY,CACvC,EAEAxB,EAAOirB,kBAAoB,WACvBlqB,EAAkBG,MAAM,YAAY,CAC3C,EAEGlB,EAAOmnB,qBAAuB,SAAU3oB,GACpC,IAAImN,EAAmB,GAqBvB,OAnB2B,MAAvBnN,EAAQqN,aAA8C,IAAvBrN,EAAQqN,cACvCF,GAAoBnN,EAAQqN,aAGJ,MAAxBrN,EAAQuM,cAAgD,IAAxBvM,EAAQuM,eACT,IAA3BY,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQuM,cAGZ,MAAhBvM,EAAQsM,MAAgC,IAAhBtM,EAAQsM,OACD,IAA3Ba,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQsM,MAGR,MAApBtM,EAAQqM,UAAwC,IAApBrM,EAAQqM,WACL,IAA3Bc,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQqM,UAGzBc,CACX,EAEA3L,EAAOkrB,eAAiB,SAAU7W,GAG9B,IAFA,IAAI/N,EAAc,GAET7J,EAAI,EAAGA,EAAI4X,EAAmBtN,YAAYlP,OAAQ4E,CAAC,GACpD6J,GAAoC,EAArBA,EAAYzO,SAAYyO,GAAe,MAE1DA,GAAe+N,EAAmBtN,YAAYtK,GAAG0K,SAAW,IAAMkN,EAAmBtN,YAAYtK,GAAG2K,YAGxG,OAAOd,CACX,EAEAtG,EAAOib,qBAAuB,SAAU5G,GAGpC,IAFA,IAAI9N,EAAoB,GAEf9J,EAAI,EAAGA,EAAI4X,EAAmBhN,kBAAkBxP,OAAQ4E,CAAC,GAC1D8J,GAAgD,EAA3BA,EAAkB1O,SAAY0O,GAAqB,MAE5EA,GAAqB8N,EAAmBhN,kBAAkB5K,GAAG6K,iBAAiBC,UAAY,YAAc8M,EAAmBhN,kBAAkB5K,GAAG6K,iBAAiBE,KAAO,aAAe6M,EAAmBhN,kBAAkB5K,GAAG6K,iBAAiB3B,MAAQ,IAG5P,OAAOY,CACX,EAEAvG,EAAOgS,gBAAgB,CAC3B,EAAE;ACjvBFtT,IAAIgC,WAAW,gBAAiB,CAAC,aAAc,SAAU,SAAU,WAAY,YAAa,cAAe,kBAAmB,kBAAmB,SAAU5C,EAAYkC,EAAQY,EAAQhM,EAAU6yB,EAAW3mB,EAAa4mB,EAAiBxD,GAsNtO,SAASiH,IACLnrB,EAAOorB,YAAYC,aAAa,EAEhC3D,EAAgB1R,wBAAwB,EACnCzd,KACG,SAAU+yB,GACNtrB,EAAOsrB,kBAAoBA,EAE3B,IAAK,IAAI7uB,EAAI,EAAGA,EAAI6uB,EAAkBzzB,OAAQ4E,CAAC,GAC3C8uB,EAAyBD,EAAkB7uB,EAAE,EAGjDuD,EAAOorB,YAAYI,cAAc,EACjCxrB,EAAOyrB,yBAA2B,CAAA,CACtC,EACA,SAAUrzB,EAAUE,GAChB0H,EAAOyrB,yBAA2B,CAAA,CAEtC,CACJ,CACR,CAEA,SAASF,EAAyBG,EAAkBC,GAChD,IAAIC,EAGCD,EAAAA,GAAyBE,UAAUC,OAAOC,KAAKC,MAAMC,YAAYC,IAEtEN,EAAc,gBAAkBF,EAAiB9jB,SAASyC,KAAO,SAE7DqhB,EAAiB/jB,UAEjBikB,GAAe,iBAAmBF,EAAiB9jB,SAAS8E,SAAS,GAAGhI,YAAY2F,KAAO,SACxFrK,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMO,YAAW8H,GAAe,8CAAgDF,EAAiB/jB,SAASvE,GAAK,KAAOsoB,EAAiB/jB,SAASwC,eAAiB,cAC/MuhB,EAAiB/jB,SAASQ,+BAA8ByjB,GAAe,sBAAwBF,EAAiB/jB,SAASQ,6BAA+B,UAC5JyjB,GAAe,sBAAwBhxB,OAAO8wB,EAAiBliB,WAAW,EAAE5N,OAAO,sBAAsB,EAAI,SAE7GoE,EAAOorB,YAAYe,UACfT,EAAiBU,SACjBV,EAAiBW,UACjB,CAEIC,OAAQZ,EAAiB/jB,SAAS6H,aAAaC,QAC/C8c,WAAkF,GAArEb,EAAiB/jB,SAAS6H,aAAaC,QAAQrU,QAAQ,SAAS,GAA+E,GAArEswB,EAAiB/jB,SAAS6H,aAAaC,QAAQrU,QAAQ,SAAS,EAAU,WAAa,UAE9K/F,KAAMq2B,EAAiB9jB,SAAS8E,SAAS,GAAGhI,YAAY8nB,SACxDZ,YAAaA,EACbD,WAAYA,CAChB,CACJ,IAIAC,GADAA,GAAe,iBAAmBF,EAAiB9jB,SAAS8E,SAAS,GAAGhI,YAAY2F,KAAO,UAC5E,sBAAwBzP,OAAO8wB,EAAiBliB,WAAW,EAAE5N,OAAO,sBAAsB,EAAI,SAE7GoE,EAAOorB,YAAYe,UACfT,EAAiBU,SACjBV,EAAiBW,UACjB,CAEIC,OApCQ,UAqCRC,WAAY,UACZl3B,KAAMq2B,EAAiB9jB,SAAS8E,SAAS,GAAGhI,YAAY8nB,SACxDZ,YAAaA,EACbD,WAAYA,CAChB,CACJ,EAER,CAzRK7qB,EAAY4X,mBACb9X,EAAOO,GAAG,OAAO,EAGrBrD,EAAWsmB,MAAM,gBAAiB,KAAK,EACvCpkB,EAAO8Y,KAAOhY,EAAY4X,kBAC1B1Y,EAAOsjB,MAAQve,oBAAoBC,MAAMue,MACzCvjB,EAAOorB,YAAc,IAAIS,UAAUC,OAAOC,KAAKU,IAC/CzsB,EAAO0sB,WAAa,CAAA,EACpB1sB,EAAO4oB,iBAAmB,KAC1B5oB,EAAOyI,YAAc,KACrBzI,EAAO2sB,YAAc,CAAA,EACrB3sB,EAAOsrB,kBAAoB,KAC3BtrB,EAAO4sB,aAAe,GACtB5sB,EAAO6sB,SAAW,GAClB7sB,EAAO8sB,sBAAwB,CAAA,EAC/B9sB,EAAO+sB,8BAAgC,CAAC,6BAA8B,mCAAoC,0CAC1G/sB,EAAOgtB,0BAA4B,GAEnC9I,EAAgB9I,gBAAgB,EAC3B7iB,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,CAC1B,EACA,SAAUA,EAAUE,IAGxB,EAEC0H,EAAOorB,YAAY6B,OAAO,GAAGjtB,EAAOorB,YAAY8B,WAAW,iBAC5D,CACIC,uBAA0B,CAAA,EAC1BC,SAAY,WACRx4B,EAAS,WAELoL,EAAO0sB,WAAa,CAAA,CACxB,CAAC,CACL,CACJ,CAAC,EAEL93B,EAAS,WACLoL,EAAOorB,YAAYI,cAAc,CACrC,EAAG,GAAI,EAEPxrB,EAAOqtB,eAAiB,SAAU52B,GAC9B,OAAOixB,EAAgBjR,qBAAqBhgB,CAAU,CAC1D,EAEAuJ,EAAOstB,iBAAmB,SAAUrY,GAChCjV,EAAO6sB,SAASjE,iBAAmB3T,EACnCjV,EAAO6sB,SAASpkB,YAAc,KAC9BzI,EAAOyrB,yBAA2B,CAAA,EAElCzrB,EAAOorB,YAAYC,aAAa,EAEhC3D,EAAgB1R,wBAAwBf,EAAS7R,EAAE,EAC9C7K,KACG,SAAUmzB,GACNH,EAAyBG,EAAkBG,UAAUC,OAAOC,KAAKC,MAAML,UAAU,EACjF3rB,EAAOyrB,yBAA2B,CAAA,CACtC,EACA,SAAUrzB,EAAUE,GAChB0H,EAAOyrB,yBAA2B,CAAA,CAEtC,CACJ,CACR,EAEAzrB,EAAOutB,sBAAwB,WAC3BvtB,EAAO6sB,SAASjE,iBAAmB,KACnC5oB,EAAOyrB,yBAA2B,CAAA,EAElCzrB,EAAOorB,YAAYC,aAAa,EAChCF,EAA4B,CAChC,EAEAnrB,EAAOwtB,oBAAsB,WACzBxtB,EAAO6sB,SAASjE,iBAAmB,KACnC5oB,EAAOorB,YAAYC,aAAa,EAChCrrB,EAAOyrB,yBAA2B,CAAA,EAE9BzrB,EAAO6sB,SAASpkB,YAChBif,EAAgBpR,qCAAqCtW,EAAO6sB,SAASpkB,YAAYrF,EAAE,EAC9E7K,KACG,SAAU+yB,GACNtrB,EAAOsrB,kBAAoBA,EAE3B,IAAK,IAAI7uB,EAAI,EAAGA,EAAI6uB,EAAkBzzB,OAAQ4E,CAAC,GAC3C8uB,EAAyBD,EAAkB7uB,EAAE,EAGjDuD,EAAOyrB,yBAA2B,CAAA,CACtC,EACA,SAAUrzB,EAAUE,GAChB0H,EAAOyrB,yBAA2B,CAAA,CAEtC,CACJ,EAGJN,EAA4B,CAEpC,EAEAnrB,EAAOytB,OAAS,SAAUhrB,GACC,KAAnBA,EAAO/J,UACHsH,EAAO0tB,aAA2C,EAA5B1tB,EAAO0tB,YAAY71B,OACzCmI,EAAOorB,YAAYqC,OAAOztB,EAAO0tB,YAAc,KAAK,EAGpD1tB,EAAOorB,YAAYqC,OAAO,EAGtC,EAEAztB,EAAO2tB,cAAgB,WACf3tB,EAAO2sB,aACP3sB,EAAOorB,YAAYwC,cAAc,EACjC5tB,EAAO2sB,YAAc,CAAA,IAGrB3sB,EAAOorB,YAAYuB,YAAY,EAC/B3sB,EAAO2sB,YAAc,CAAA,EAE7B,EAEA3sB,EAAO6tB,mBAAqB,WACxB,IAEIC,EAOA/1B,EATCiI,EAAO4sB,aAAarxB,MAASyE,EAAO4sB,aAAamB,WAAc/tB,EAAO4sB,aAAaoB,UAEpFF,EAAU,EAEd9tB,EAAO8sB,sBAAwB,CAAA,EAC/B9sB,EAAOgtB,0BAA4BhtB,EAAO+sB,8BAA8Be,GAExE9tB,EAAOorB,YAAYC,aAAa,EAE5BtzB,EAAQ0vB,EAAU,WAEF,IAAZqG,IAAeA,EAAU,GAE7BA,CAAO,GAEP9tB,EAAOgtB,0BAA4BhtB,EAAO+sB,8BAA8Be,EAC5E,EAAG,GAAK,EAERpG,EAAgBlR,qBAAqBxW,EAAO6sB,SAASjE,iBAAiBxlB,GAAIxI,OAAOoF,EAAO4sB,aAAarxB,IAAI,EAAEU,KAAKrB,OAAOoF,EAAO4sB,aAAamB,SAAS,EAAE9xB,KAAK,CAAC,EAAEC,OAAOtB,OAAOoF,EAAO4sB,aAAamB,SAAS,EAAE7xB,OAAO,CAAC,EAAE+xB,OAAO,CAAC,EAAGrzB,OAAOoF,EAAO4sB,aAAarxB,IAAI,EAAEU,KAAKrB,OAAOoF,EAAO4sB,aAAaoB,OAAO,EAAE/xB,KAAK,CAAC,EAAEC,OAAOtB,OAAOoF,EAAO4sB,aAAaoB,OAAO,EAAE9xB,OAAO,CAAC,EAAE+xB,OAAO,CAAC,CAAC,EAC3W11B,KACG,SAAU+yB,GACNtrB,EAAOsrB,kBAAoBA,EAC3BtrB,EAAOgtB,0BAA4B,2BACnCvF,EAAUzvB,OAAOD,CAAK,EAEtBA,EAAQnD,EAAS,WACb,IAAK,IAAI6H,EAAI,EAAGA,EAAI6uB,EAAkBzzB,OAAQ4E,CAAC,GAC3C8uB,EAAyBD,EAAkB7uB,GAAIovB,UAAUC,OAAOC,KAAKC,MAAMC,YAAYiC,MAAM,EAGjGluB,EAAO8sB,sBAAwB,CAAA,EAE/Bl4B,EAASoD,OAAOD,CAAK,CACzB,EAAG,GAAG,CACV,EACA,SAAUK,EAAUE,GAChB0H,EAAO8sB,sBAAwB,CAAA,CAGnC,CACJ,EACR,EAEA9sB,EAAOmuB,uBAAyB,WAC5BnuB,EAAOorB,YAAYC,aAAa,EAChCrrB,EAAOyrB,yBAA2B,CAAA,EAE9BzrB,EAAOouB,8CAA6G,EAA7DpuB,EAAOouB,6CAA6Cv2B,OAC3G6vB,EAAgBtR,sEAAsEpW,EAAOouB,4CAA4C,EACpI71B,KACG,SAAUmzB,GACNH,EAAyBG,CAAgB,EACzC1rB,EAAOyrB,yBAA2B,CAAA,CACtC,EACA,SAAUrzB,EAAUE,GAChB0H,EAAOyrB,yBAA2B,CAAA,CAEtC,CACJ,EAECzrB,EAAO4I,gBAAiD,EAA/B5I,EAAO4I,eAAe/Q,QACpD6vB,EAAgBrR,wCAAwCrW,EAAO4I,cAAc,EACxErQ,KACG,SAAUmzB,GACN1rB,EAAOyrB,yBAA2B,CAAA,EAClCF,EAAyBG,CAAgB,CAC7C,EACA,SAAUtzB,EAAUE,GAChB0H,EAAOyrB,yBAA2B,CAAA,CAEtC,CACJ,CAEZ,EAEAzrB,EAAOquB,4BAA8B,WACjCruB,EAAO6sB,SAASjE,iBAAmB,KACnC5oB,EAAO6sB,SAASpkB,YAAc,KAC9BzI,EAAOouB,6CAA+C,KACtDpuB,EAAO4I,eAAiB,KACxB5I,EAAOyrB,yBAA2B,CAAA,EAElCzrB,EAAOorB,YAAYC,aAAa,EAChCF,EAA4B,CAChC,EAwEAA,EAA4B,CAChC,EAAE;AC/RFxsB,aAAa+B,WAAW,wBAAyB,CAAC,aAAc,SAAU,eAAgB,QAAS,UAAW,WAAY,SAAU,OAAQ,UAAW,gBAAiB,wBAAyB,cAAe,qBAAsB,kBAAmB,kBAAmB,iBAAkB,kBAAmB,gBAAiB,kBAAmB,mBAAoB,oBAAqB,SAAU5C,EAAYkC,EAAQsuB,EAAc55B,EAAOuP,EAASrP,EAAUgM,EAAQ2tB,EAAMC,EAAS3tB,EAAe4tB,EAAuB3tB,EAAamjB,EAAoBjP,EAAiB0S,EAAiBgH,EAAgBxK,EAAiBC,EAAerB,EAAiBM,EAAkBriB,GAi7FnpB,SAAS4tB,IACL/5B,EAAS,WACL,IACIuhB,EAAYnW,EAAO4uB,eAAeC,aAAa,EAC/CC,EAAgB9uB,EAAO4uB,eAAeG,iBAAiB,EAAI,QAC3Dzf,EAAY,EAIhB,GAFAtP,EAAO2C,YAAY6C,WAAawpB,KAAKC,MAAMH,CAAa,EAEpD9uB,EAAO2C,YAAY0C,eAAgB,CACvBrF,EAAO4uB,eAAeM,SAAS,EAC3C5f,EAAYtP,EAAO4uB,eAAeO,aAAa,EAAI,GAEnDnvB,EAAO2C,YAAY4C,mBAAqBypB,KAAKC,MAAM3f,CAAS,EAE5D,IAAK,IAAI7S,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7D0Z,EAAU1Z,GAAGkmB,WACb3iB,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,0BAA4ByP,EAAU1Z,GAAGkmB,SACpF3iB,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkK,iCAAmC/L,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAAE9K,OAAO,kBAAkB,EAGhM,MAGI0T,EADe1U,OAAO6mB,SAAS7mB,OAAOoF,EAAO2C,YAAYoD,qBAAqB/F,EAAO2C,YAAYoD,qBAAqBlO,OAAS,GAAG6O,yBAAyB,EAAEgb,KAAK9mB,OAAOoF,EAAO2C,YAAYoD,qBAAqB,GAAGW,yBAAyB,CAAC,CAAC,EAC1N0oB,UAAU,EAE/BpvB,EAAO2C,YAAY4C,mBAAqBypB,KAAKC,MAAM3f,CAAS,EAGhE,IAAI+f,EAAmB,EACnBvV,EAAW,KAGXA,EADA9Z,EAAOsvB,iBACItvB,EAAOsvB,iBAAiB9X,SAGxBxX,EAAOuvB,cAGtB,GAAIvvB,EAAO2C,YAAY+B,YAAa,CAChC,IAASjI,EAAI,EAAGA,EAAIqd,EAASjiB,OAAQ4E,CAAC,GAClC,GAAIuD,EAAO2C,YAAY+B,YAAYtB,IAAM0W,EAASrd,GAAGiI,YAAYtB,IAAmD,WAA7C0W,EAASrd,GAAG+yB,WAAWnlB,KAAKxO,YAAY,EAAgB,CAC3H,GAA2D,YAAvDie,EAASrd,GAAGgzB,qBAAqBplB,KAAKxO,YAAY,EAClD,IAAK,IAAI6zB,EAAI,EAAGA,EAAI5V,EAASrd,GAAGkzB,cAAc93B,OAAQ63B,CAAC,GAC/CZ,EAAgBhV,EAASrd,GAAGkzB,cAAcD,GAAGE,OACzCd,EAAgBhV,EAASrd,GAAGkzB,cAAcD,GAAGhiB,GAC7C2hB,GAAoBL,KAAKa,MAAO/V,EAASrd,GAAGkzB,cAAcD,GAAGhiB,GAAKoM,EAASrd,GAAGkzB,cAAcD,GAAGE,MAAQ9V,EAASrd,GAAGkzB,cAAcD,GAAGI,SAAYhW,EAASrd,GAAGkzB,cAAcD,GAAGK,UAAU,EAGvLV,GAAoBL,KAAKa,MAAOf,EAAgBhV,EAASrd,GAAGkzB,cAAcD,GAAGE,MAAQ9V,EAASrd,GAAGkzB,cAAcD,GAAGI,SAAYhW,EAASrd,GAAGkzB,cAAcD,GAAGK,UAAU,QAMjL,IAASL,EAAI,EAAGA,EAAI5V,EAASrd,GAAGkzB,cAAc93B,OAAQ63B,CAAC,GAC/CpgB,EAAYwK,EAASrd,GAAGkzB,cAAcD,GAAGE,OAOzCP,GAAoBvV,EAASrd,GAAGkzB,cAAcD,GAAGK,YAIzDV,EAAmBvV,EAASrd,GAAGuzB,eAC/BX,EAAmBvV,EAASrd,GAAGuzB,aAEvC,CAaJ,GAAIhwB,EAAO2C,YAAY+C,0BACnB,IAAK,IAAIuqB,EAAI,EAAGA,EAAIjwB,EAAOqa,0BAA0BxiB,OAAQo4B,CAAC,GAAI,CAM9D,IALA,IAAIC,EAAOlwB,EAAOqa,0BAA0B4V,GACxCpU,EAAYqU,EAAKC,UAAU9J,MAAM,IAAI,EACrC+J,EAAcF,EAAuB,mBAAIA,EAAKG,mBAAmBhK,MAAM,IAAI,EAAI,KAC/EiK,EAAkB,CAAA,EAEb1a,EAAI,EAAGA,EAAIsa,EAAKK,aAAa14B,OAAQ+d,CAAC,GAAI,CAC/C,GAAI5V,EAAO2C,YAAY+B,YAAYtB,KAAO8sB,EAAKK,aAAa3a,GAAGxS,GAC3D,IAAK,IAAI2E,EAAI,EAAGA,EAAI/H,EAAO2C,YAAYoD,qBAAqBlO,OAAQkQ,CAAC,GAAI,CACrE,IAAK,IAYWyoB,EAZPd,EAAI,EAAGA,EAAI7T,EAAUhkB,OAAQ63B,CAAC,GACnC,GAAI1vB,EAAO2C,YAAYoD,qBAAqBgC,GAAGC,QAAQ6C,SAAShP,YAAY,EAAE40B,WAAW5U,EAAU6T,GAAG7zB,YAAY,CAAC,EAAG,CAClH,GAAIu0B,EACA,IAAK,IAAI57B,EAAI,EAAGA,EAAI47B,EAAWv4B,OAAQrD,CAAC,GACpC,GAAIwL,EAAO2C,YAAYoD,qBAAqBgC,GAAGC,QAAQ6C,SAAShP,YAAY,EAAE40B,WAAWL,EAAW57B,GAAGqH,YAAY,CAAC,EAAG,CACnHy0B,EAAkB,CAAA,EAClB,KACJ,CAIHA,KACGE,EAA4BxB,KAAKa,KAAKR,GAAoBa,EAAKQ,gBAAkB,IAAI,GAEzDR,EAAKS,SACjCtB,GAAoBa,EAAKS,SAGzBtB,GAAoBmB,GAI5B,KACJ,CAGJ,GAAIA,EAA2B,KACnC,CAGJ,GAAIA,EAA2B,KACnC,CAEA,GAAIA,EAA2B,KACnC,CAER,CAEA,GAAIxwB,EAAO2C,YAAYoD,qBACnB,IAASgC,EAAI,EAAGA,EAAI/H,EAAO2C,YAAYoD,qBAAqBlO,OAAQkQ,CAAC,GACjE,GAAI/H,EAAO2C,YAAYoD,qBAAqBgC,GAAGV,kBAC3C,IAAK,IAAI9S,EAAI,EAAGA,EAAIyL,EAAO2C,YAAYoD,qBAAqBgC,GAAGV,kBAAkBxP,OAAQtD,CAAC,GACtF86B,GAAoBrvB,EAAO2C,YAAYoD,qBAAqBgC,GAAGV,kBAAkB9S,GAAG+S,iBAAiB3B,MAMrH,GAAI3F,EAAO2C,YAAY0E,kBACnB,IAASU,EAAI,EAAGA,EAAI/H,EAAO2C,YAAY0E,kBAAkBxP,OAAQkQ,CAAC,GAC9DsnB,GAAoBrvB,EAAO2C,YAAY0E,kBAAkBU,GAAGpC,MAIhE3F,EAAOjB,UAAiD,EAArCiB,EAAOjB,SAAS6xB,oBAA0B5wB,EAAO2C,YAAYkuB,aAChFxB,GAAwCrvB,EAAOjB,SAAS6xB,mBAAqB,KAGjF5wB,EAAO2C,YAAY8C,iBAAmBxB,EAAQ,QAAQ,EAAEorB,EAAkB,CAAC,EAMtErvB,EAAO2C,YAAYS,KACpBpD,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEorB,EAAkB,CAAC,EAExE,CAAC,CACL,CAEA,SAASyB,IACD9wB,EAAO2C,YAAYS,IAAMpD,EAAO+wB,yBAA2B,CAAC/wB,EAAOgxB,yCAEvEp8B,EAAS,WAEWoL,EAAO4uB,eAAeC,aAAa,EADnD,IAEIC,EAAgB9uB,EAAO4uB,eAAeG,iBAAiB,EAAI,QAG3DkC,EAAiB,EACjBnX,EAAW,KAGXA,EADA9Z,EAAOsvB,iBACItvB,EAAOsvB,iBAAiB9X,SAGxBxX,EAAOuvB,cAGtB,GAAIvvB,EAAO2C,YAAY+B,YAAa,CAChC,IAAK,IAAIjI,EAAI,EAAGA,EAAIqd,EAASjiB,OAAQ4E,CAAC,GAClC,GAAIuD,EAAO2C,YAAY+B,YAAYtB,IAAM0W,EAASrd,GAAGiI,YAAYtB,IAAmD,sBAA7C0W,EAASrd,GAAG+yB,WAAWnlB,KAAKxO,YAAY,EAA2B,CACtI,GAA2D,YAAvDie,EAASrd,GAAGgzB,qBAAqBplB,KAAKxO,YAAY,EAClD,IAAK,IAAI6zB,EAAI,EAAGA,EAAI5V,EAASrd,GAAGkzB,cAAc93B,OAAQ63B,CAAC,GAC/CZ,EAAgBhV,EAASrd,GAAGkzB,cAAcD,GAAGE,OACzCd,EAAgBhV,EAASrd,GAAGkzB,cAAcD,GAAGhiB,GAC7CujB,IAAoBnX,EAASrd,GAAGkzB,cAAcD,GAAGhiB,GAAKoM,EAASrd,GAAGkzB,cAAcD,GAAGE,MAAQ9V,EAASrd,GAAGkzB,cAAcD,GAAGI,SAAYhW,EAASrd,GAAGkzB,cAAcD,GAAGK,WAGjKkB,IAAoBnC,EAAgBhV,EAASrd,GAAGkzB,cAAcD,GAAGE,MAAQ9V,EAASrd,GAAGkzB,cAAcD,GAAGI,SAAYhW,EAASrd,GAAGkzB,cAAcD,GAAGK,iBAM3J,IAASL,EAAI,EAAGA,EAAI5V,EAASrd,GAAGkzB,cAAc93B,OAAQ63B,CAAC,GACnC5V,EAASrd,GAAGkzB,cAAcD,GAAGE,KA7BjD,IAoCQqB,GAAkBnX,EAASrd,GAAGkzB,cAAcD,GAAGK,YAIvDkB,EAAiBnX,EAASrd,GAAGuzB,eAC7BiB,EAAiBnX,EAASrd,GAAGuzB,aAErC,CAGJ,GAAIhwB,EAAO2C,YAAY+C,0BACnB,IAAK,IAAIuqB,EAAI,EAAGA,EAAIjwB,EAAOqa,0BAA0BxiB,OAAQo4B,CAAC,GAAI,CAM9D,IALA,IAAIC,EAAOlwB,EAAOqa,0BAA0B4V,GACxCpU,EAAYqU,EAAKC,UAAU9J,MAAM,IAAI,EACrC+J,EAAcF,EAAuB,mBAAIA,EAAKG,mBAAmBhK,MAAM,IAAI,EAAI,KAC/EiK,EAAkB,CAAA,EAEb1a,EAAI,EAAGA,EAAIsa,EAAKK,aAAa14B,OAAQ+d,CAAC,GAAI,CAC/C,GAAI5V,EAAO2C,YAAY+B,YAAYtB,KAAO8sB,EAAKK,aAAa3a,GAAGxS,GAC3D,IAAK,IAAI2E,EAAI,EAAGA,EAAI/H,EAAO2C,YAAYoD,qBAAqBlO,OAAQkQ,CAAC,GAAI,CACrE,IAAK,IAYWmpB,EAZPxB,EAAI,EAAGA,EAAI7T,EAAUhkB,OAAQ63B,CAAC,GACnC,GAAI1vB,EAAO2C,YAAYoD,qBAAqBgC,GAAGC,QAAQ6C,SAAShP,YAAY,EAAE40B,WAAW5U,EAAU6T,GAAG7zB,YAAY,CAAC,EAAG,CAClH,GAAIu0B,EACA,IAAK,IAAI57B,EAAI,EAAGA,EAAI47B,EAAWv4B,OAAQrD,CAAC,GACpC,GAAIwL,EAAO2C,YAAYoD,qBAAqBgC,GAAGC,QAAQ6C,SAAShP,YAAY,EAAE40B,WAAWL,EAAW57B,GAAGqH,YAAY,CAAC,EAAG,CACnHy0B,EAAkB,CAAA,EAClB,KACJ,CAIHA,KACGY,EAA2BD,GAAkBf,EAAKiB,eAAiB,MAExCjB,EAAKkB,QAChCH,GAAkBf,EAAKkB,QAGvBH,GAAkBC,GAI1B,KACJ,CAGJ,GAAIA,EAA0B,KAClC,CAGJ,GAAIA,EAA0B,KAClC,CAEA,GAAIA,EAA0B,KAClC,CAER,CAEA,GAAIlxB,EAAO2C,YAAYoD,qBACnB,IAASgC,EAAI,EAAGA,EAAI/H,EAAO2C,YAAYoD,qBAAqBlO,OAAQkQ,CAAC,GACjE,GAAI/H,EAAO2C,YAAYoD,qBAAqBgC,GAAGV,kBAC3C,IAAK,IAAI9S,EAAI,EAAGA,EAAIyL,EAAO2C,YAAYoD,qBAAqBgC,GAAGV,kBAAkBxP,OAAQtD,CAAC,GACtF08B,GAAkBjxB,EAAO2C,YAAYoD,qBAAqBgC,GAAGV,kBAAkB9S,GAAG+S,iBAAiBE,KAM/GxH,EAAOjB,UAAiD,EAArCiB,EAAOjB,SAAS6xB,oBAA0B5wB,EAAO2C,YAAYkuB,aAChFI,GAAoCjxB,EAAOjB,SAAS6xB,mBAAqB,KAG7E5wB,EAAO2C,YAAY0uB,gBAAkBptB,EAAQ,QAAQ,EAAEgtB,EAAgB,CAAC,EAGnEjxB,EAAO2C,YAAYS,KACpBpD,EAAO2C,YAAY6E,KAAOvD,EAAQ,QAAQ,EAAEgtB,EAAgB,CAAC,EAErE,CAAC,CACL,CAoEA,SAAS1F,EAAyBtW,EAAUiB,EAAUyV,GAClD,IAAIC,EACA0F,EAAgB,UAEf3F,EAAAA,GAAyBE,UAAUC,OAAOC,KAAKC,MAAMC,YAAYC,IAElElsB,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMO,WACrD8H,EAAc,gBAAkB3W,EAAS5K,KAAO,SAE5C6L,EAASvO,UAKTikB,GADAA,GADAA,GADAA,GAAe,iBAAmB3W,EAASvI,SAAS,GAAGhI,YAAY2F,KAAO,UAC3D,8CAAgD6L,EAASvO,SAASvE,GAAK,KAAO8S,EAASvO,SAASwC,eAAiB,cACjH,sBAAwB+L,EAASvO,SAASQ,6BAA+B,UACzE,sBAAwBvN,OAAOsb,EAAS1M,WAAW,EAAE5N,OAAO,sBAAsB,EAAI,SAErGoE,EAAO4uB,eAAezC,UAClBjW,EAASkW,SACTlW,EAASmW,UACT,CAEIC,OAAQpW,EAASvO,SAAS6H,aAAaC,QACvC8c,WAA0E,GAA7DrW,EAASvO,SAAS6H,aAAaC,QAAQrU,QAAQ,SAAS,GAAuE,GAA7D8a,EAASvO,SAAS6H,aAAaC,QAAQrU,QAAQ,SAAS,EAAU,WAAa,UAE9J/F,KAAM4f,EAASvI,SAAS,GAAGhI,YAAY8nB,SACvCZ,YAAaA,EACbD,WAAYA,EACZ4F,gBAAiB,CAAA,CACrB,CACJ,IAIA3F,GADAA,GAAe,iBAAmB3W,EAASvI,SAAS,GAAGhI,YAAY2F,KAAO,UAC3D,sBAAwBzP,OAAOsb,EAAS1M,WAAW,EAAE5N,OAAO,sBAAsB,EAAI,SAErGoE,EAAO4uB,eAAezC,UAClBjW,EAASkW,SACTlW,EAASmW,UACT,CAEIC,OAAQgF,EACR/E,WAAY,UACZl3B,KAAM4f,EAASvI,SAAS,GAAGhI,YAAY8nB,SACvCZ,YAAaA,EACbD,WAAYA,EACZ4F,gBAAiB,CAAA,CACrB,CACJ,KAIJ3F,EAAc,sBAAwBhxB,OAAOsb,EAAS1M,WAAW,EAAE5N,OAAO,sBAAsB,EAAI,SAEpGoE,EAAO4uB,eAAezC,UAClBjW,EAASkW,SACTlW,EAASmW,UACT,CACIC,OAAQgF,EACR/E,WAAY,UACZl3B,KAAM4f,EAASvI,SAAS,GAAGhI,YAAY8nB,SACvCZ,YAAaA,EACbD,WAAYA,EACZ4F,gBAAiB,CAAA,CACrB,CACJ,EAER,CAn1GKzwB,EAAY4X,mBACb9X,EAAOO,GAAG,OAAO,EAGrBrD,EAAWsmB,MAAM,gBAAiB,aAAa,EAC/CpkB,EAAO8Y,KAAOhY,EAAY4X,kBAC1B1Y,EAAOsjB,MAAQve,oBAAoBC,MAAMue,MACzCvjB,EAAOwxB,0BAA4BzsB,oBAAoBC,MAAMysB,qBAC7DzxB,EAAO0xB,gBAAkB3sB,oBAAoBC,MAAMF,cACnD9E,EAAOiZ,YAAcmK,EAAiBnK,YAAY,EAClDjZ,EAAOkZ,eAAiBkK,EAAiBlK,eAAe,EACxDlZ,EAAOmZ,cAAgBiK,EAAiBjK,cAAc,EACtDnZ,EAAO2xB,MAAQ,UACf3xB,EAAOsvB,iBAAmB,KAC1BtvB,EAAO4xB,uBAAyB,CAAA,EAChC5xB,EAAO6xB,0CAA4C,CAAA,EACnD7xB,EAAO8xB,gCAAkC,CAAA,EACzC9xB,EAAO+xB,yCAA2CC,mCAClDhyB,EAAOiyB,uCAAyC,CAAA,EAChDjyB,EAAOkyB,kBAAoB,KAC3BlyB,EAAO8P,iBAAmB,KAC1B9P,EAAOof,uBAAyB,KAChCpf,EAAOga,aAAe,KACtBha,EAAO2e,wBAA0B,KACjC3e,EAAOmyB,OAAS,KAChBnyB,EAAOoyB,SAAW,KAClBpyB,EAAOqyB,cAAgB,KACvBryB,EAAOsyB,QAAU,KACjBtyB,EAAOuyB,yBAA2B,KAClCvyB,EAAOuG,kBAAoB,KAC3BvG,EAAOqU,mBAAqB,KAC5BrU,EAAOwyB,wBAA0B,KACjCxyB,EAAOyyB,wBAA0B,KACjCzyB,EAAO0yB,qBAAuB,CAAA,EAC9B1yB,EAAO+C,UAAY,KACnB/C,EAAOsG,YAAc,GACrBtG,EAAO2yB,iBAAmB,KAC1B3yB,EAAOod,iBAAmB,KAC1Bpd,EAAO4yB,sBAAwB,KAC/B5yB,EAAO6yB,0BAA4B,GACnC7yB,EAAO8yB,wBAA0B,GACjC9yB,EAAO+yB,YAAc,CAAA,EACrB/yB,EAAOgzB,kBAAoB,CAAA,EAC3BhzB,EAAOizB,iBAAmB,CAAA,EAC1BjzB,EAAO2C,YAAcshB,EAAmB9f,qBAAqB,EAC7DnE,EAAOkzB,oBAAsB,CAAA,EAC7BlzB,EAAOmzB,mBAAqB,CAAA,EAC5BnzB,EAAOozB,gBAAkB,CAAA,EACzBpzB,EAAOmP,SAAW,KAClBnP,EAAOlB,UAAY,KACnBkB,EAAO4uB,eAAiB,IAAI/C,UAAUC,OAAOC,KAAKU,IAClDzsB,EAAO0sB,WAAa,CAAA,EACpB1sB,EAAOqzB,iBAAmB,CAAA,EAC1BrzB,EAAOszB,OAAS,KAChBtzB,EAAOuzB,yBAA2B,KAClCvzB,EAAOwzB,UAAY54B,OAAO,EAC1BoF,EAAO+P,cAAgB,GACvB/P,EAAOyzB,oBAAsB,CAAA,EAC7BzzB,EAAO4C,sBAAwB,CAAA,EAC/B5C,EAAO0zB,6BAA+B,GACtC1zB,EAAO2zB,kBAAoB,CAAA,EAC3B3zB,EAAO4zB,WAAa,CAAA,EACpB5zB,EAAO6zB,0BAA4B,CAAA,EACnC7zB,EAAO8zB,YAAc,CACjBC,UAAW,CAAA,EACXC,WAAY,CAAA,CAChB,EACAh0B,EAAOi0B,wBAA0B,KACjCj0B,EAAOk0B,yBAA2B,UAClCl0B,EAAOm0B,gCA0oGP,KACI,IAAIC,EAAcx5B,OAAO,EAMzB,IAJ0B,IAAtBw5B,EAAYC,IAAI,GAAiC,IAAtBD,EAAYC,IAAI,GAAiC,IAAtBD,EAAYC,IAAI,IACtED,EAAcA,EAAYxyB,IAAI,EAAG,GAAG,GAGX,IAAtBwyB,EAAYC,IAAI,GACnBD,EAAcA,EAAYxyB,IAAI,EAAG,GAAG,EAGxC,OAAOwyB,CACX,GAtpG0E,EAC1Ep0B,EAAOqf,SAAW,KAClBrf,EAAOiK,qBAAuB,GAC9BjK,EAAOgxB,wCAA0C,CAAA,EACjDhxB,EAAOs0B,wBAA0B,CAAA,EACjCt0B,EAAO+wB,wBAA0B,CAAA,EACjC/wB,EAAOu0B,oBAAsB,CAAA,EAC7Bv0B,EAAOw0B,kBAAoB,GAC3Bx0B,EAAOy0B,kCAAoC,CAAA,EAC3Cz0B,EAAO00B,4BAA8B,CAAA,EACrC10B,EAAO20B,mCAAqC,CAAA,EAC5C30B,EAAO40B,qCAAuC,CAAA,EAC9C50B,EAAO60B,iBAAmB,CAAA,EAC1B70B,EAAO80B,gBAAkB,CAAA,EACzB90B,EAAO+0B,iBAAmB,CAAA,EAC1B/0B,EAAOg1B,aAAe,CAAA,EACtBh1B,EAAOqa,0BAA4B,GACnCra,EAAOi1B,oBAAsB,KAC7Bj1B,EAAOjB,SAAW,KAClBiB,EAAOk1B,qBAAuB,CAAA,EAC9Bl1B,EAAOuvB,cAAgB,KACvBvvB,EAAOm1B,WAAa,KACpBn1B,EAAOo1B,YAAc,GACrBp1B,EAAOq1B,gBAAkB,GACzBr1B,EAAOs1B,kBAAoB,CAAA,EAEvBt1B,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMjf,UACrDwe,EAAgBnL,YAAY3X,EAAO8Y,KAAKwM,UAAU,EAC7C/sB,KACG,SAAUmK,GACN1C,EAAOu1B,iBAAiB7yB,CAAQ,EAEQ,MAApC1C,EAAOsvB,iBAAiB9X,UAAgE,IAA5CxX,EAAOsvB,iBAAiB9X,SAAS3f,QAC7EirB,EAAgB1K,kBAAkBpY,EAAO8Y,KAAKwM,UAAU,EACnD/sB,KACG,SAAUuhB,GACN9Z,EAAOsvB,iBAAiB9X,SAAWsC,CACvC,EACA,SAAU1hB,EAAUE,IAGxB,CAEZ,EACA,SAAUF,EAAUE,IAGxB,GAGqB,EAAzBg2B,EAAahtB,GAAGzJ,QAAcosB,EAAmB/f,qBACjDlE,EAAOmzB,mBAAqB,CAAA,EACxBqC,EAA0C,EAAzBlH,EAAahtB,GAAGzJ,OAAcy2B,EAAahtB,GAAK2iB,EAAmB/f,kBAExF+f,EAAmBje,eAAewvB,CAAa,EAC1Cj9B,KACG,WAyBI,GAxBAyH,EAAOkzB,oBAAsB,CAAA,EAC7BlzB,EAAOmzB,mBAAqB,CAAA,EAC5BnzB,EAAO2C,YAAcshB,EAAmBthB,YACxC3C,EAAO2C,YAAY8C,iBAAmBxB,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY8C,iBAAkB,CAAC,EAC9FzF,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAYgD,MAAO,CAAC,EACxE3F,EAAO2C,YAAY0uB,gBAAkBptB,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY0uB,gBAAiB,CAAC,EAC5FrxB,EAAO2C,YAAY6E,KAAOvD,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY6E,KAAM,CAAC,EACtExH,EAAOsvB,iBAAmBtvB,EAAO2C,YAAY2B,SAC7CtE,EAAOkyB,kBAAoB,GAE3Bp0B,EAAWsmB,MAAM,gBAAiB,eAAiBpkB,EAAO2C,YAAYyB,iBAAiB,EAEnFpE,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BkE,SAC1F11B,EAAO4xB,uBAAyB,CAAA,GAGhC5xB,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BmE,0BAC1F31B,EAAO6xB,0CAA4C,CAAA,GAGhB,MAAnC7xB,EAAOsvB,iBAAiBtnB,SACxBhI,EAAOkyB,kBAAkBv3B,KAAKqF,EAAOsvB,iBAAiBtnB,OAAO,EAGxB,MAArChI,EAAOsvB,iBAAiBhY,UACxB,IAAK,IAAI7a,EAAI,EAAGA,EAAIuD,EAAOsvB,iBAAiBhY,UAAUzf,OAAQ4E,CAAC,GACvDuD,EAAOsvB,iBAAiBhY,UAAU7a,GAAG2G,IAAMpD,EAAOsvB,iBAAiBtnB,QAAQ5E,IAC3EpD,EAAOkyB,kBAAkBv3B,KAAKqF,EAAOsvB,iBAAiBhY,UAAU7a,EAAE,EAK9EuD,EAAOoyB,SAAWpyB,EAAOsvB,iBAAiB1iB,SAC1C5M,EAAOqyB,cAAgB,GAEvB,IAAS51B,EAAI,EAAGA,EAAIuD,EAAOoyB,SAASv6B,OAAQ4E,CAAC,GACrCuD,EAAOoyB,SAAS31B,GAAG0P,OAAOnM,EAAOqyB,cAAc13B,KAAKqF,EAAOoyB,SAAS31B,EAAE,EAG9EuD,EAAOqyB,cAAc13B,KAAK,CAAEyI,GAAI,KAAM+I,MAAO,2BAA4B,CAAC,EAE1EnM,EAAO2C,YAAY2B,SAAW,CAC1BlB,GAAMpD,EAAOsvB,iBAAiBlsB,GAC9BiH,KAAQrK,EAAOsvB,iBAAiBjlB,KAChCurB,mBAAsB51B,EAAOsvB,iBAAiBsG,mBAC9CC,YAAe71B,EAAOsvB,iBAAiBuG,YACvCC,WAAc91B,EAAOsvB,iBAAiBwG,WACtCL,YAAez1B,EAAOsvB,iBAAiBmG,YACvCne,UAAatX,EAAOsvB,iBAAiBhY,UACrCye,kBAAqB/1B,EAAOsvB,iBAAiByG,kBAC7CC,sBAAyBh2B,EAAOsvB,iBAAiB0G,sBACjDC,oBAAuBj2B,EAAOsvB,iBAAiB2G,oBAC/CC,gBAAmBl2B,EAAOsvB,iBAAiB4G,gBAC3CC,oBAAuBn2B,EAAOsvB,iBAAiB6G,mBACnD,EAEAn2B,EAAO+P,cAAiB/P,EAAO2C,YAA0B,eAAI3C,EAAO2C,YAAYgK,eAAesE,MAASjR,EAAuB,iBAAIA,EAAOsvB,iBAAiBre,MAAQ,GAInK,IAFA,IAAImlB,EAA+B,CAAA,EAE1B35B,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAAI,CACrEuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG45B,mBAAqBz7B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAC3I1G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG65B,mBAAqB17B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAEvI1G,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,8BAC3C5G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG85B,qBAAuB37B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,2BAA2B,EAC/I5G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG+5B,qBAAuB57B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,2BAA2B,GAGnJ,IAAI6vB,EAAuB,CAAA,EAE3B,GAAKz2B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAG3C,CACD3H,EAAO+wB,wBAA0B,CAAA,EAEjC,IAAK,IAAIzmB,EAAI,EAAGA,EAAItK,EAAOiK,qBAAqBpS,OAAQyS,CAAC,GACjDtK,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASvE,KAAOpD,EAAOiK,qBAAqBK,GAAGlH,KAAIqzB,EAAuB,CAAA,GAGxHA,GAAsBz2B,EAAOiK,qBAAqBtP,KAAKqF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,QAAQ,CACnH,MAVIyuB,EAA+B,CAAA,EAY/Bp2B,CAAAA,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,UAAa3H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAAS7C,eAAiB9E,EAAO0xB,gBAAgBgF,gBAAkB12B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAAS7C,eAAiB9E,EAAO0xB,gBAAgBiF,WAAW32B,EAAO+0B,iBAAmB,CAAA,EAE/S,CAyBA,GAvBKqB,GAAuE,IAAvCp2B,EAAOiK,qBAAqBpS,QAAgBmI,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAOiK,qBAAqB,GAAG2sB,+BAC/J52B,EAAOgxB,wCAA0C,CAAA,EACjDhxB,EAAO2C,YAAY0uB,gBAAkBptB,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAYoD,qBAAqB,GAAG4B,SAAS8L,eAAgB,CAAC,EAC5HzT,EAAO2C,YAAY6E,KAAOvD,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAYoD,qBAAqB,GAAG4B,SAASH,KAAM,CAAC,GAGtGxH,EAAO+wB,yBACRD,EAAc,EAgBd7M,EAAmBthB,YAAYuC,uBAAyB+e,EAAmBthB,YAAYk0B,8BAAgC5S,EAAmBthB,YAAYk0B,6BAA6B,KACnL72B,EAAO0zB,6BAA+BzP,EAAmBthB,YAAYk0B,6BAA6B,GAE9F72B,EAAOqf,WAAYrf,EAAO0zB,6BAA6BoD,SACvD,IAASr6B,EAAI,EAAGA,EAAIuD,EAAOqf,SAASxnB,OAAQ4E,CAAC,GACzC,IAAK,IAAIqX,EAAI,EAAGA,EAAI9T,EAAO0zB,6BAA6BoD,SAASj/B,OAAQic,CAAC,GAClE9T,EAAOqf,SAAS5iB,GAAG2G,KAAOpD,EAAO0zB,6BAA6BoD,SAAShjB,GAAG1Q,KAAIpD,EAAOqf,SAAS5iB,GAAGs6B,SAAW,CAAA,GAUhI,GAJ6B,EAAzBzI,EAAahtB,GAAGzJ,SAChBmI,EAAOu0B,oBAAuBv0B,EAAO2C,YAAYmC,gBAAkBC,oBAAoBC,MAAMF,cAAcG,YAAcjF,EAAO2C,YAAYoiB,WAAc/kB,EAAO8Y,KAAK+K,OAAS7jB,EAAOsjB,MAAMhf,UAAYtE,EAAO2C,YAAYq0B,uBAG3N/S,EAAmB/f,kBAAmB,CAi+FtD,OAAOlE,EAAO2C,YAAYS,GAC1B,OAAOpD,EAAO2C,YAAYyB,kBAC1B,OAAOpE,EAAO2C,YAAYs0B,qBAC1B,OAAOj3B,EAAO2C,YAAY2J,sBAC1B,OAAOtM,EAAO2C,YAAYiF,SAC1B,OAAO5H,EAAO2C,YAAYu0B,YAC1B,OAAOl3B,EAAO2C,YAAYw0B,cAC1B,OAAOn3B,EAAO2C,YAAY6G,YAE1B,IAAK,IAAI/M,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAAI,CACrE,OAAOuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2G,GAClD,OAAOpD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAClD,OAAO3H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAClD,OAAO/G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG26B,UAClD,OAAOp3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGgU,UAClD,OAAOzQ,EAAO2C,YAAYoD,qBAAqBtJ,GAAG46B,WAClD,OAAOr3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkU,YAClD,OAAO3Q,EAAO2C,YAAYoD,qBAAqBtJ,GAAGoJ,YAClD,OAAO7F,EAAO2C,YAAYoD,qBAAqBtJ,GAAGoU,eAClD,OAAO7Q,EAAO2C,YAAYoD,qBAAqBtJ,GAAG66B,kBAClD,OAAOt3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGgY,cAClD,OAAOzU,EAAO2C,YAAYoD,qBAAqBtJ,GAAG86B,mBAClD,OAAOv3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAG+6B,YAClD,OAAOx3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGg7B,gBAClD,OAAOz3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGi7B,oBAClD,OAAO13B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGk7B,WAMlD,IAAK,IAAIpjC,EAAI,EAAGA,EAAIyL,EAAO2C,YAAYoD,qBAAqBtJ,GAAG4K,kBAAkBxP,OAAQtD,CAAC,GACtF,OAAOyL,EAAO2C,YAAYoD,qBAAqBtJ,GAAG4K,kBAAkB9S,GAAG6O,EAE/E,CAEA,IAAS3G,EAAI,EAAGA,EAAIuD,EAAO2C,YAAY0E,kBAAkBxP,OAAQ4E,CAAC,GAC9D,OAAOuD,EAAO2C,YAAY0E,kBAAkB5K,GAAG2G,GAGnDpD,EAAOiK,qBAAuB,GAC9BjK,EAAOgxB,wCAA0C,CAAA,EACjDhxB,EAAOs0B,wBAA0B,CAAA,EACjCt0B,EAAO+wB,wBAA0B,CAAA,EAEjC/wB,EAAO2C,YAAYmC,cAAgBC,oBAAoBC,MAAMF,cAAcG,WAC3EjF,EAAO2C,YAAYi1B,KAAO,CAAA,EAE1B95B,EAAWsmB,MAAM,gBAAiB,aAAa,EA9gG/BH,EAAmB/f,kBAAoB,IAC3C,CAEA,GAAIlE,EAAOga,cAA6C,EAA7Bha,EAAOga,aAAaniB,OAAY,CAIvD,IAHA,IAAIwqB,EAAQ,CAAA,EACRwV,EAAS,EAEJp7B,EAAI,EAAGA,EAAIuD,EAAOga,aAAaniB,OAAQ4E,CAAC,GAAI,CACjD,GAAIuD,EAAO2C,YAAY+B,YAAYtB,KAAOpD,EAAOga,aAAavd,GAAG2G,GAAI,CACjEif,EAAQ,CAAA,EACR,KACJ,CACQriB,EAAO2C,YAAY+B,YAAYyP,MAAQnU,EAAOga,aAAavd,GAAG0X,OAC9D0jB,CAAM,EAGlB,CAEKxV,GACDriB,EAAOga,aAAatf,OAAOm9B,EAAQ,EAAG73B,EAAO2C,YAAY+B,WAAW,CAE5E,CAEK1E,EAAO4uB,eAAe3B,OAAO,GAAGjtB,EAAO4uB,eAAe1B,WAAW,oBAClE,CACIC,uBAA0B,CAAA,EAC1BC,SAAY,WACRx4B,EAAS,WACLoL,EAAO0sB,WAAa,CAAA,CACxB,CAAC,CACL,CACJ,CAAC,EAE8C,GAA/C1sB,EAAO4uB,eAAeC,aAAa,EAAEh3B,QACrCjD,EAAS,WACLoL,EAAO4uB,eAAepD,cAAc,EAIpC,IAFA,IAAIsM,EAAwB,CAAA,EAEnBr7B,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAAI,CACrE,IAAI+B,EAAU,CACVnJ,KAAM4uB,EAAmBxY,+BAA+BhP,CAAC,EAAI,IAAMuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQ+vB,QAAQ1tB,KAC9H2tB,IAAKh4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQokB,SACxD6L,IAAKj4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQqkB,UACxD6L,OAAQl4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,OACvD,EA+BA,GA7BAhI,EAAO4uB,eAAeuJ,YAAY35B,EAC9B,CACI45B,SAAYp4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,0BACvD2xB,eAAkBr4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAG67B,kCAC7DlL,SAAY,SAAUlX,GAClB,IAAK,IAAIzZ,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7DuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,UAAYkO,EAASgiB,SAChEl4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQokB,SAAWlW,EAAS8hB,IACvEh4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQqkB,UAAYnW,EAAS+hB,KAI3B,EAAjDj4B,EAAO2C,YAAYoD,qBAAqBlO,QAAcmI,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAO4uB,eAAeC,aAAa,EAAEh3B,QAC9ImI,EAAO4uB,eAAe2J,cAAc,WAChC,IAAK,IAAI97B,EAAI,EAAGA,EAAIuD,EAAOw0B,kBAAkB38B,OAAQ4E,CAAC,GAC9CuD,EAAOw0B,kBAAkB/3B,GAAGoL,cAAc,IAAM7H,EAAOw0B,kBAAkB/3B,GAAGoL,cAAc,GAAGC,mBAAmByjB,EAAyBvrB,EAAOw0B,kBAAkB/3B,GAAIuD,EAAOw0B,kBAAkB/3B,GAAGoL,cAAc,GAAGC,kBAAmB+jB,UAAUC,OAAOC,KAAKC,MAAML,UAAU,EAGpRgD,EAA8B,EAE9BmC,EAAc,CAClB,CAAC,CAET,CACJ,CACJ,EAEAgH,EAAwB,CAAA,EAEpB93B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,UAAY3H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,UAAY5H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,IAAM7H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAmB,CACzS,IAAK,IAAImM,EAAI,EAAGA,EAAIjU,EAAOw0B,kBAAkB38B,OAAQoc,CAAC,GAC9CjU,EAAOw0B,kBAAkBvgB,GAAG7Q,KAAOpD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASxE,KAAI00B,EAAwB,CAAA,GAG/HA,GAAuB93B,EAAOw0B,kBAAkB75B,KAAKqF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,QAAQ,CAC1H,CACJ,CACJ,EAAG,GAAI,CAEf,CACJ,GAGRuc,EAAc1E,oBAAoB,EAC7BlnB,KACG,SAAUH,GACN4H,EAAO8P,iBAAmB1X,EAErB4H,EAAO2C,YAAY8B,kBAAiBzE,EAAO2C,YAAY8B,gBAAkBzE,EAAO8P,iBAAiB,GAC1G,EACA,SAAU1X,EAAUE,IAGxB,EAEJ6rB,EAAchE,0BAA0B,EACnC5nB,KACG,SAAUH,GACN4H,EAAOof,uBAAyBhnB,CACpC,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAAc/D,YAAY,EACrB7nB,KACG,SAAUH,GAGN,GAFA4H,EAAOqf,SAAWjnB,EAEd4H,EAAOqf,UAAYrf,EAAO0zB,8BAAgC1zB,EAAO0zB,6BAA6BoD,SAC9F,IAAK,IAAIr6B,EAAI,EAAGA,EAAIuD,EAAOqf,SAASxnB,OAAQ4E,CAAC,GACzC,IAAK,IAAIqX,EAAI,EAAGA,EAAI9T,EAAO0zB,6BAA6BoD,SAASj/B,OAAQic,CAAC,GAClE9T,EAAOqf,SAAS5iB,GAAG2G,KAAOpD,EAAO0zB,6BAA6BoD,SAAShjB,GAAG1Q,KAAIpD,EAAOqf,SAAS5iB,GAAGs6B,SAAW,CAAA,EAIhI,EACA,SAAU3+B,EAAUE,IAGxB,EAEJ4rB,EAAgB9I,gBAAgB,EAC3B7iB,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,CAC1B,CACJ,EAEJ+rB,EAAczE,2BAA2B,EACpCnnB,KACG,SAAUH,GACN4H,EAAO2e,wBAA0BvmB,CACrC,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgBjJ,qBAAqB,EAChC1iB,KACG,SAAUH,GACN4H,EAAOuyB,yBAA2Bn6B,EAClC4H,EAAOuG,kBAAoBrS,QAAQ+Y,KAAKjN,EAAOuyB,wBAAwB,CAC3E,EACA,SAAUn6B,EAAUE,IAGxB,EAEJo2B,EAAerV,aAAa,EACvB9gB,KACG,WACIyH,EAAO+C,UAAY2rB,EAAe3rB,SACtC,CACJ,EAEJ2kB,EAAgBhS,aAAa,EACxBnd,KACG,WACIyH,EAAOlB,UAAY4oB,EAAgB5oB,SACvC,CACJ,EAEJolB,EAAgBvI,6BAA6B,EACxCpjB,KACG,SAAUH,GACN4H,EAAOqa,0BAA4BjiB,CACvC,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgB3J,kBAAkB,EAC7BhiB,KACG,SAAUH,GACN4H,EAAOjB,SAAW3G,CACtB,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgBnJ,YAAY,EACvBxiB,KACG,SAAUH,GACN4H,EAAOuvB,cAAgBn3B,CAC3B,EACA,SAAUA,EAAUE,IAGxB,EAEJ1D,EAAS,WACAoL,EAAO4uB,eAAe3B,OAAO,GAAGjtB,EAAO4uB,eAAe1B,WAAW,oBAClE,CACIC,uBAA0B,CAAA,EAC1BC,SAAY,WACRx4B,EAAS,WACLoL,EAAO0sB,WAAa,CAAA,CACxB,CAAC,CACL,CACJ,CAAC,CAuDT,EAAG,GAAG,EAEN1sB,EAAOw4B,YAAc,WACjBx4B,EAAO2xB,MAAQ,SACnB,EAEA3xB,EAAOy4B,cAAgB,WACnBz4B,EAAO2xB,MAAQ,YACnB,EAEA3xB,EAAO04B,cAAgB,WAGnB,GAFA14B,EAAOw0B,kBAAoB,GAEtBx0B,EAAO24B,gBAAgBC,yBAA2B54B,EAAO24B,gBAAgBC,wBAAwBC,UAAa74B,EAAO24B,gBAAgBG,2BAA2BD,UAAY74B,EAAO24B,gBAAgBI,2BAA2BF,SAE/N,MAAO,EADP74B,EAAOg5B,gCAAkC,CAAA,GAI7C,GAAIh5B,EAAO2C,YAAY6B,YAAa,CAGhC,IAFA,IAAIy0B,EAA2B,CAAA,EAEtBnlB,EAAI,EAAGA,EAAI9T,EAAOsvB,iBAAiB1iB,SAAS/U,OAAQic,CAAC,GAC1D,GAA0C,OAAtC9T,EAAO2C,YAAY4B,gBACnB,GAAIvE,EAAO2C,YAAY4B,eAAenB,KAAOpD,EAAOsvB,iBAAiB1iB,SAASkH,GAAG1Q,IACzEpD,EAAO2C,YAAYqJ,YAAYktB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAOsvB,iBAAiB1iB,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACvHo9B,EAA2B,CAAA,EAC3B,KACJ,CACJ,MAGA,GAAIj5B,EAAO2C,YAAYqJ,YAAYktB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAOsvB,iBAAiB1iB,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACvHo9B,EAA2B,CAAA,EAC3B,KACJ,CAIR,GAAIA,EAEA,MAAO,EADPj5B,EAAOi1B,oBAAsB,0CAGrC,CAEKj1B,EAAO4uB,eAAe3B,OAAO,GAAGjtB,EAAO4uB,eAAe1B,WAAW,oBAClE,CACIC,uBAA0B,CAAA,EAC1BC,SAAY,WACRx4B,EAAS,WACLoL,EAAO0sB,WAAa,CAAA,CACxB,CAAC,CACL,CACJ,CAAC,EAE8C,GAA/C1sB,EAAO4uB,eAAeC,aAAa,EAAEh3B,QACrCjD,EAAS,WACLoL,EAAO4uB,eAAepD,cAAc,EAIpC,IAFA,IAAIsM,EAAwB,CAAA,EAEnBr7B,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAAI,CACrE,IAAI+B,EAAU,CACVnJ,KAAM4uB,EAAmBxY,+BAA+BhP,CAAC,EAAI,IAAMuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQ+vB,QAAQ1tB,KAC9H2tB,IAAKh4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQokB,SACxD6L,IAAKj4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQqkB,UACxD6L,OAAQl4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,OACvD,EA+BA,GA7BAhI,EAAO4uB,eAAeuJ,YAAY35B,EAC9B,CACI45B,SAAYp4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,0BACvD2xB,eAAkBr4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAG67B,kCAC7DlL,SAAY,SAAUlX,GAClB,IAAK,IAAIzZ,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7DuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,UAAYkO,EAASgiB,SAChEl4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQokB,SAAWlW,EAAS8hB,IACvEh4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQqkB,UAAYnW,EAAS+hB,KAI3B,EAAjDj4B,EAAO2C,YAAYoD,qBAAqBlO,QAAcmI,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAO4uB,eAAeC,aAAa,EAAEh3B,QAC9ImI,EAAO4uB,eAAe2J,cAAc,WAChC,IAAK,IAAI97B,EAAI,EAAGA,EAAIuD,EAAOw0B,kBAAkB38B,OAAQ4E,CAAC,GAC9CuD,EAAOw0B,kBAAkB/3B,GAAGoL,cAAc,IAAM7H,EAAOw0B,kBAAkB/3B,GAAGoL,cAAc,GAAGC,mBAAmByjB,EAAyBvrB,EAAOw0B,kBAAkB/3B,GAAIuD,EAAOw0B,kBAAkB/3B,GAAGoL,cAAc,GAAGC,kBAAmB+jB,UAAUC,OAAOC,KAAKC,MAAML,UAAU,EAGpRgD,EAA8B,EAE9BmC,EAAc,CAClB,CAAC,CAET,CACJ,CACJ,EAEAgH,EAAwB,CAAA,EAEpB93B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,UAAY3H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,UAAY5H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,IAAM7H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASC,cAAc,GAAGC,kBAAmB,CACzS,IAAK,IAAImM,EAAI,EAAGA,EAAIjU,EAAOw0B,kBAAkB38B,OAAQoc,CAAC,GAC9CjU,EAAOw0B,kBAAkBvgB,GAAG7Q,KAAOpD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,SAASxE,KAAI00B,EAAwB,CAAA,GAG/HA,GAAuB93B,EAAOw0B,kBAAkB75B,KAAKqF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASC,QAAQ,CAC1H,CACJ,CACJ,EAAG,GAAI,EAqBX5H,EAAO2xB,MAAQ,WACnB,EAEA3xB,EAAOm5B,kBAAoB,WAClBn5B,EAAOgxB,0CAAyChxB,EAAOs0B,wBAA0B,CAAA,GAEtF3F,EAA8B,EAE9BmC,EAAc,CAClB,EAEA9wB,EAAOo5B,eAAiB,SAAU3iC,GAC9B,OAAOqsB,EAAgB9K,qBAAqBvhB,CAAU,CAC1D,EAEAuJ,EAAOu1B,iBAAmB,SAAUhhC,GAChCyL,EAAO4xB,uBAAyB,CAAA,EAChC5xB,EAAO6xB,0CAA4C,CAAA,EACnD7xB,EAAO8xB,gCAAkC,CAAA,EACzC9xB,EAAOq5B,sCAAwC,CAAA,EAE3Cr5B,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMjf,UAAY1J,OAAO,EAAE8mB,KAAKntB,EAAE+kC,0BAA2B,QAAQ,EAAItH,qCACxHhyB,EAAO8xB,gCAAkC,CAAA,GAGzC9xB,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMjf,UAAY/P,EAAEglC,mBAAqBhlC,EAAEilC,cAC1Fx5B,EAAOiyB,uCAAyC,CAAA,GAGpDjyB,EAAO2C,YAAYgK,eAAiB,KACpC3M,EAAO2C,YAAYqJ,YAAc,KACjChM,EAAO2C,YAAYuJ,mBAAqB,KACxClM,EAAO2C,YAAYyJ,oBAAsB,KAEzCpM,EAAOsvB,iBAAmB/6B,EAC1ByL,EAAO2C,YAAY2B,SAAW,CAC1BlB,GAAM7O,EAAE6O,GACRiH,KAAQ9V,EAAE8V,KACVurB,mBAAsBrhC,EAAEqhC,mBACxBC,YAAethC,EAAEshC,YACjBC,WAAcvhC,EAAEuhC,WAChBL,YAAelhC,EAAEkhC,YACjBne,UAAa/iB,EAAE+iB,UACfye,kBAAqBxhC,EAAEwhC,kBACvBC,sBAAyBzhC,EAAEyhC,sBAC3BC,oBAAuB1hC,EAAE0hC,oBACzBC,gBAAmB3hC,EAAE2hC,gBACrBC,oBAAuB5hC,EAAE4hC,mBAE7B,EACAn2B,EAAOkyB,kBAAoB,GAC3BlyB,EAAOoyB,SAAWpyB,EAAOsvB,iBAAiB1iB,SAC1C5M,EAAOqyB,cAAgB,GAEvB,IAAK,IAAI51B,EAAI,EAAGA,EAAIuD,EAAOoyB,SAASv6B,OAAQ4E,CAAC,GACrCuD,EAAOoyB,SAAS31B,GAAG0P,OAAOnM,EAAOqyB,cAAc13B,KAAKqF,EAAOoyB,SAAS31B,EAAE,EAgB9E,GAbAuD,EAAOqyB,cAAc13B,KAAK,CAAEyI,GAAI,KAAM+I,MAAO,2BAA4B,CAAC,EAEtEnM,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BkE,SAC1F11B,EAAO4xB,uBAAyB,CAAA,GAGhC5xB,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BmE,0BAC1F31B,EAAO6xB,0CAA4C,CAAA,GAGtC,MAAbt9B,EAAEyT,SACFhI,EAAOkyB,kBAAkBv3B,KAAKpG,EAAEyT,OAAO,EAExB,MAAfzT,EAAE+iB,UACF,IAAS7a,EAAI,EAAGA,EAAIlI,EAAE+iB,UAAUzf,OAAQ4E,CAAC,GACjClI,EAAE+iB,UAAU7a,GAAG2G,IAAM7O,EAAEyT,QAAQ5E,IAC/BpD,EAAOkyB,kBAAkBv3B,KAAKpG,EAAE+iB,UAAU7a,EAAE,EAKxD,GAAIuD,EAAO2C,YAAYS,GAAI,CACvBpD,EAAO2C,YAAY2B,SAASsI,SAAW,KACvC,OAAO5M,EAAO2C,YAAY4B,eAAenB,GAEzC,IAAK,IAAI2E,EAAI,EAAGA,EAAI/H,EAAO2C,YAAYoD,qBAAqBlO,OAAQkQ,CAAC,GACjE,OAAO/H,EAAO2C,YAAYoD,qBAAqBgC,GAAGC,QAAQ5E,EAElE,CAEApD,EAAO+P,cAAiB/P,EAAO2C,YAA0B,eAAI3C,EAAO2C,YAAYgK,eAAesE,MAASjR,EAAuB,iBAAIA,EAAOsvB,iBAAiBre,MAAQ,EACvK,EAEAjR,EAAOy5B,aAAe,WAClBz5B,EAAO+P,cAAiB/P,EAAO2C,YAA0B,eAAI3C,EAAO2C,YAAYgK,eAAesE,MAASjR,EAAuB,iBAAIA,EAAOsvB,iBAAiBre,MAAQ,GACnKjR,EAAOoyB,SAAYpyB,EAAO2C,YAA0B,eAAI3C,EAAO2C,YAAYgK,eAAeC,SAAY5M,EAAuB,iBAAIA,EAAOsvB,iBAAiB1iB,SAAW,GACpK5M,EAAOqyB,cAAgB,GAEvB,IAAK,IAAI51B,EAAI,EAAGA,EAAIuD,EAAOoyB,SAASv6B,OAAQ4E,CAAC,GACrCuD,EAAOoyB,SAAS31B,GAAG0P,OAAOnM,EAAOqyB,cAAc13B,KAAKqF,EAAOoyB,SAAS31B,EAAE,EAG9EuD,EAAOqyB,cAAc13B,KAAK,CAAEyI,GAAI,KAAM+I,MAAO,2BAA4B,CAAC,CAC9E,EAEAnM,EAAO05B,qBAAuB,WACtB15B,EAAO2C,YAAY4B,gBACnBvE,EAAO2C,YAAYqJ,YAAchM,EAAO2C,YAAY4B,eAAe8F,KACnErK,EAAO2C,YAAYuJ,mBAAqBlM,EAAO2C,YAAY4B,eAAe0H,MAC1EjM,EAAO2C,YAAYyJ,oBAAsBpM,EAAO2C,YAAY4B,eAAe4H,MAC3EnM,EAAO2C,YAAY6B,YAAc,CAAA,IAGjCxE,EAAO2C,YAAYqJ,YAAc,GACjChM,EAAO2C,YAAYuJ,mBAAqB,GACxClM,EAAO2C,YAAYyJ,oBAAsB,GACzCpM,EAAO2C,YAAY6B,YAAc,CAAA,EAEzC,EAEAxE,EAAO25B,yBAA2B,WAG9B,IAFA,IAAIC,EAAgC,KAE3Bn9B,EAAI,EAAGA,EAAIuD,EAAO2e,wBAAwB9mB,OAAQ4E,CAAC,GAAI,CAC5D,GAAIuD,EAAwD,cAAxDA,EAAO2e,wBAAwBliB,GAAG4N,KAAKxO,YAAY,GAAuBmE,EAAO2C,YAAYoD,sBAA0E,GAAlD/F,EAAO2C,YAAYoD,qBAAqBlO,QAAc,CAC3K+hC,EAAgC55B,EAAO2e,wBAAwBliB,GAC/D,KACJ,CACK,GAA4D,YAAxDuD,EAAO2e,wBAAwBliB,GAAG4N,KAAKxO,YAAY,EAAiB,CACzE+9B,EAAgC55B,EAAO2e,wBAAwBliB,GAC/D,KACJ,CACJ,CAEAuD,EAAOqU,mBAAqB,CAAEjK,uBAA0BwvB,EAA+B5xB,QAAW,CAAE+vB,QAAW/3B,EAAO+C,UAAU,EAAG,CAAE,EACrI/C,EAAO2xB,MAAQ,UACf3xB,EAAOuzB,yBAA2B,GAClCvzB,EAAOsG,YAAc,GAGrB,IAFA,IAAIwnB,EAAU,EAELrxB,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,GAA+E,eAA3EuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,MAAyBrK,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YACtI,IAAK,IAAID,EAAI,EAAGA,EAAI9G,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYlP,OAAQiP,CAAC,GAAI,CACpF,IAAIR,EAAcpS,QAAQ+Y,KAAKjN,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,EAAE,EACxFR,EAAYhF,GAAKwsB,EAEjB9tB,EAAOuzB,yBAAyB54B,KAAK2L,CAAW,EAEhDwnB,CAAO,EACX,CAIR9tB,EAAOuG,kBAAoBrS,QAAQ+Y,KAAKjN,EAAOuyB,wBAAwB,CAsD3E,EAEAvyB,EAAO65B,uBAAyB,SAAU9xB,EAAGtL,GACzCuD,EAAOqU,mBAAqBtM,EAC5B/H,EAAOqU,mBAAmBylB,wBAA0B/xB,EAAEC,QACtDhI,EAAOwyB,wBAA0B/1B,EACjCuD,EAAO2xB,MAAQ,UACf3xB,EAAOuzB,yBAA2B,GAClCvzB,EAAOsG,YAAc,GACrBtG,EAAOs1B,kBAAoB,CAAA,EAC3B,IAAIxH,EAAU,EAEV9tB,EAAOqU,mBAAmBikB,oCAC1Bt4B,EAAOqU,mBAAmBgiB,mBAAqBz7B,OAAOoF,EAAOqU,mBAAmB3N,yBAAyB,EACzG1G,EAAOqU,mBAAmBiiB,mBAAqB17B,OAAOoF,EAAOqU,mBAAmB3N,yBAAyB,GAG7G,IAASjK,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,GAA+E,eAA3EuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,MAAyBrK,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YACtI,IAAK,IAAID,EAAI,EAAGA,EAAI9G,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYlP,OAAQiP,CAAC,GAAI,CACpF,IAAIR,EAAcpS,QAAQ+Y,KAAKjN,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,EAAE,EACxFR,EAAYhF,GAAKwsB,EAEjB9tB,EAAOuzB,yBAAyB54B,KAAK2L,CAAW,EAEhDwnB,CAAO,EACX,CAIR,IAASrxB,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,GAAIuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAC3C,IAASD,EAAI,EAAGA,EAAI9G,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYlP,OAAQiP,CAAC,GAChF,GAAI9G,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,GAAGizB,oBAC1D,IAAShyB,EAAI,EAAGA,EAAI/H,EAAOuzB,yBAAyB17B,OAAQkQ,CAAC,GACrD/H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,GAAGizB,oBAAoBz4B,KAAOtB,EAAOuzB,yBAAyBxrB,GAAGzG,KACxHtB,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,GAAGizB,oBAAoB5yB,SAAWnH,EAAOuzB,yBAAyBxrB,GAAGZ,UAQpJnH,EAAOuG,kBAAoBrS,QAAQ+Y,KAAKjN,EAAOuyB,wBAAwB,CAwD3E,EAEAvyB,EAAOg6B,WAAa,WAEhBh6B,EAAOqU,mBAAmBgiB,mBAAqBz7B,OAAO,EAAEgH,IAAI,GAAI,GAAG,EACnE5B,EAAOqU,mBAAmBiiB,mBAAqB17B,OAAO,EAAEgH,IAAI,GAAI,GAAG,EACnE5B,EAAOqU,mBAAmB3N,0BAA4B9L,OAAO,EAAEgH,IAAI,GAAI,GAAG,EAC1E5B,EAAOqU,mBAAmBikB,kCAAoC,CAAA,CAClE,EAEAt4B,EAAOi6B,yBAA2B,WAC9Bj6B,EAAOqU,mBAAmBgiB,mBAAqB,KAC/Cr2B,EAAOqU,mBAAmBiiB,mBAAqB,KAC/Ct2B,EAAOqU,mBAAmB3N,0BAA4B,KACtD1G,EAAOqU,mBAAmBikB,kCAAoC,CAAA,CAClE,EAEAt4B,EAAOk6B,gBAAkB,WAErBl6B,EAAOqU,mBAAmBikB,kCAAoC,CAAA,CAClE,EAEAt4B,EAAOm6B,iCAAmC,SAAU9lB,EAAoB7I,GACpE6I,EAAmBgiB,mBAAqB,KACxChiB,EAAmBiiB,mBAAqB,KACxCjiB,EAAmB3N,0BAA4B,KAC/C2N,EAAmBikB,kCAAoC,CAAA,EAEvD,IAAI95B,EAAU,CACVnJ,KAAM4uB,EAAmBxY,+BAA+B4I,CAAkB,EAAI,IAAMA,EAAmBrM,QAAQ+vB,QAAQ1tB,KACvH2tB,IAAK3jB,EAAmBrM,QAAQokB,SAChC6L,IAAK5jB,EAAmB+lB,SAAS/N,UACjC6L,OAAQ7jB,EAAmBrM,OAC/B,EAIIqyB,GAFJhmB,EAAmBrM,QAAQsyB,UAAYjmB,EAAmBrM,QAAQ+vB,QAAQ30B,GAE5D,CACVg1B,SAAa/jB,EAAoD,kCAAIA,EAAmB3N,0BAA4B,KACpH2xB,eAAkBhkB,EAAmBikB,kCACrClL,SAAY,SAAUlX,GAClB,IAAK,IAAIzZ,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7DuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,SAAWkO,EAASgiB,SAC/Dl4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQokB,SAAWlW,EAAS8hB,IACvEh4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQqkB,UAAYnW,EAAS+hB,KAIhFj4B,EAAO4uB,eAAe2J,cAAc,WAChC5J,EAA8B,EAC9BmC,EAAc,CAClB,CAAC,CACL,CACJ,GAEA9wB,EAAO4uB,eAAe2L,eAAe/uB,EAAOhN,EAAS67B,CAAO,CAChE,EAEAr6B,EAAOw6B,wBAA0B,SAAU/jC,GACvC,OAAOqsB,EAAgB7K,+BAA+BjY,EAAOsvB,iBAAiBlsB,GAAI3M,CAAU,CAChG,EAQAuJ,EAAOy6B,sBAAwB,SAAUhkC,GACrCuJ,EAAOqU,mBAAmBrM,QAAQ6C,SAAWpU,CACjD,EAEAuJ,EAAO06B,gBAAkB,SAAUl8B,EAASrH,GAC3B,aAATA,EACAs3B,EAAsBv2B,IAAIsG,EAAQ8C,EAAE,EAC/B/I,KACG,SAAUiG,GACNwB,EAAOqU,mBAAmBrM,QAAU,GAEhCxJ,EAAQjI,KAAKokC,aACb36B,EAAOqU,mBAAmBrM,QAAQ+C,aAAevM,EAAQjI,KAAKqkC,OAC9D56B,EAAOqU,mBAAmBrM,QAAQ6yB,aAAer8B,EAAQjI,KAAKukC,OAC9D96B,EAAOqU,mBAAmBrM,QAAQ+yB,aAAev8B,EAAQjI,KAAKykC,SAG9Dh7B,EAAOqU,mBAAmBrM,QAAQ6D,YAAcrN,EAAQjI,KAAKqkC,OAC7D56B,EAAOqU,mBAAmBrM,QAAQ+C,aAAevM,EAAQjI,KAAKukC,OAC9D96B,EAAOqU,mBAAmBrM,QAAQ6yB,aAAer8B,EAAQjI,KAAKykC,QAGlEh7B,EAAOqU,mBAAmBrM,QAAQ8C,KAAOtM,EAAQjI,KAAK0kC,aACtDj7B,EAAOqU,mBAAmBrM,QAAQ4D,OAASpN,EAAQjI,KAAK2kC,OACxDl7B,EAAOqU,mBAAmBrM,QAAQ6C,SAAWrM,EAAQjI,KAAK4kC,SAC1Dn7B,EAAOqU,mBAAmBrM,QAAQ+vB,QAAU/3B,EAAO+C,UAAU,EACjE,EACA,SAAU1K,GACNY,QAAQC,IAAIb,CAAK,CACrB,CACR,EAGA2H,EAAOqU,mBAAmBrM,QAAUxJ,CAI5C,EAEAwB,EAAOo7B,qBAAuB,WAC1Bp7B,EAAOqU,mBAAmBylB,wBAA0B95B,EAAOsvB,iBAAiBtnB,QAE5E9T,QAAQ+Y,KAAKjN,EAAOqU,mBAAmBylB,wBAAyB95B,EAAOqU,mBAAmBrM,OAAO,CACrG,EAEAhI,EAAOq7B,qBAAuB,SAAU5kC,GASpC,OAAOg4B,EAAsBh3B,OAAOhB,CAAU,EACzC8B,KACG,SAAUH,GAGN,IAFA,IAAI8f,EAAY,GAEPzb,EAAI,EAAGA,EAAIrE,EAAS7B,KAAK+kC,YAAYzjC,OAAQ4E,CAAC,GAAI,CACvD,IAAI+B,EAAUpG,EAAS7B,KAAK+kC,YAAY7+B,GAExC+B,EAAQ2Z,aAAe3Z,EAAQA,QAC/BA,EAAQqM,SAAWrM,EAAQA,QAAQ+8B,UAAU/8B,EAAQA,QAAQg9B,YAAY,GAAG,EAAI,CAAC,EAEjFtjB,EAAUvd,KAAK6D,CAAO,CAC1B,CAEA,OAAO0Z,CACX,CACR,CACJ,EAEAlY,EAAOy7B,eAAiB,WAChBz7B,EAAOqU,mBAAmBylB,yBACtBjO,UAAU6P,UAAUC,YAAY37B,EAAOqU,mBAAmBylB,wBAAwBjuB,WAAW,GAAK7L,EAAOqU,mBAAmBrM,QAAQ6D,aACpIggB,UAAU6P,UAAUC,YAAY37B,EAAOqU,mBAAmBylB,wBAAwB/uB,YAAY,GAAK/K,EAAOqU,mBAAmBrM,QAAQ+C,cACrI8gB,UAAU6P,UAAUC,YAAY37B,EAAOqU,mBAAmBylB,wBAAwBe,YAAY,GAAK76B,EAAOqU,mBAAmBrM,QAAQ6yB,cACrIhP,UAAU6P,UAAUC,YAAY37B,EAAOqU,mBAAmBylB,wBAAwBiB,YAAY,GAAK/6B,EAAOqU,mBAAmBrM,QAAQ+yB,cACrIlP,UAAU6P,UAAUC,YAAY37B,EAAOqU,mBAAmBylB,wBAAwBhvB,IAAI,GAAK9K,EAAOqU,mBAAmBrM,QAAQ8C,MAC7H+gB,UAAU6P,UAAUC,YAAY37B,EAAOqU,mBAAmBylB,wBAAwBluB,MAAM,GAAK5L,EAAOqU,mBAAmBrM,QAAQ4D,QAC/HigB,UAAU6P,UAAUC,YAAY37B,EAAOqU,mBAAmBylB,wBAAwBjvB,QAAQ,GAAK7K,EAAOqU,mBAAmBrM,QAAQ6C,UACjI3W,QAAQ0nC,OAAO57B,EAAOqU,mBAAmBylB,wBAAwB/B,QAAS/3B,EAAOqU,mBAAmBrM,QAAQ+vB,OAAO,EAEnH/3B,EAAOqU,mBAAmBrM,QAAQ5E,GAAKpD,EAAOqU,mBAAmBylB,wBAAwB12B,IAS7F,OAAOpD,EAAOqU,mBAAmBrM,QAAQ5E,GACzCpD,EAAOqU,mBAAmBrM,QAAQokB,SAAW,KAC7CpsB,EAAOqU,mBAAmBrM,QAAQqkB,UAAY,KAEtD,EAEArsB,EAAO67B,qBAAuB,WACtB77B,EAAOqU,mBAAmBynB,sBACrB97B,EAAO2C,YAAY2B,SAASgT,YAAWtX,EAAO2C,YAAY2B,SAASgT,UAAY,IAEpFtX,EAAO2C,YAAY2B,SAASgT,UAAU3c,KAAKqF,EAAOqU,mBAAmBrM,OAAO,GAGvEhI,EAAO2C,YAAY2B,SAASgT,UAAUtX,EAAO2C,YAAY2B,SAASgT,UAAUzf,OAAS,GAAGuL,IACzFpD,EAAO2C,YAAY2B,SAASgT,UAAUykB,IAAI,CAGtD,EAEA/7B,EAAOg8B,iBAAmB,WACtBh8B,EAAO2C,YAAYs5B,iBAAmB,CAAA,CAC1C,EAEAj8B,EAAOmnB,qBAAuB,SAAU3oB,GACpC,IAAImN,EAAmB,GAqBvB,OAnB2B,MAAvBnN,EAAQqN,aAA8C,IAAvBrN,EAAQqN,cACvCF,GAAoBnN,EAAQqN,aAGJ,MAAxBrN,EAAQuM,cAAgD,IAAxBvM,EAAQuM,eACT,IAA3BY,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQuM,cAGZ,MAAhBvM,EAAQsM,MAAgC,IAAhBtM,EAAQsM,OACD,IAA3Ba,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQsM,MAGR,MAApBtM,EAAQqM,UAAwC,IAApBrM,EAAQqM,WACL,IAA3Bc,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQqM,UAGzBc,CACX,EAEA3L,EAAOk8B,2CAA6C,SAAUz5B,GAG1D,OAFA1B,EAAkBG,MAAM,mCAAmC,EACvDuB,GAAQA,EAAO7J,gBAAgB,EAC5B,CAAA,CACX,EAEAoH,EAAOm8B,qCAAuC,WAC1Cn8B,EAAOsG,YAAc,GACrBvF,EAAkBG,MAAM,mCAAmC,EAC3DlB,EAAOo8B,kBAAkB,CAC7B,EAEAp8B,EAAOq8B,oBAAsB,SAAU5lC,GACnCuJ,EAAOqU,mBAAmBrM,QAAQ6C,SAAWpU,EAC7CuJ,EAAOs1B,kBAAoB,CAAA,CAC/B,EAEAt1B,EAAOo8B,kBAAoB,WACvB,GAAIp8B,EAAO24B,gBAAgB2D,+BAA+BzD,UAAY74B,EAAO24B,gBAAgB4D,2BAA2B1D,UAAY74B,EAAO24B,gBAAgB6D,+BAA+B3D,WAAc,CAAC74B,EAAOqU,mBAAmBtN,aAAgE,IAAjD/G,EAAOqU,mBAAmBtN,YAAYlP,SAAiB,CAACmI,EAAOqU,mBAAmBooB,oBAAsBz8B,EAAO8Y,KAAK+K,MAAQ7jB,EAAOsjB,MAAMhf,SAEvX,MAAO,EADPtE,EAAO08B,gCAAkC,CAAA,GAI7C,GAAI18B,EAAOsG,YAAYa,UAAYnH,EAAOsG,YAAYc,YAElD,OADArG,EAAkBS,KAAK,mCAAmC,EACnD,CAAA,EAGNxB,EAAO2C,YAAYoD,uBACpB/F,EAAO2C,YAAYoD,qBAAuB,KAGzC/F,EAAOqU,mBAAmBgiB,oBAAsB,CAACr2B,EAAOqU,mBAAmBiiB,oBAAwB,CAACt2B,EAAOqU,mBAAmBgiB,oBAAsBr2B,EAAOqU,mBAAmBiiB,oBAAwBt2B,EAAOqU,mBAAmBgiB,oBAAsBr2B,EAAOqU,mBAAmBiiB,sBAC5Qt2B,EAAOqU,mBAAmBgiB,qBAC3Br2B,EAAOqU,mBAAmBgiB,mBAAqBz7B,OAAO,GAGrDoF,EAAOqU,mBAAmBiiB,qBAC3Bt2B,EAAOqU,mBAAmBiiB,mBAAqB17B,OAAO,GAG1DoF,EAAOqU,mBAAmB3N,0BAA4B9L,OAAOoF,EAAOqU,mBAAmBgiB,kBAAkB,EAAEp6B,KAAKrB,OAAOoF,EAAOqU,mBAAmBiiB,kBAAkB,EAAEr6B,KAAK,CAAC,EAAEC,OAAOtB,OAAOoF,EAAOqU,mBAAmBiiB,kBAAkB,EAAEp6B,OAAO,CAAC,EAE7O8D,EAAOqU,mBAAmBmiB,qBAC1Bx2B,EAAOqU,mBAAmBzN,4BAA8BhM,OAAOoF,EAAOqU,mBAAmBgiB,kBAAkB,EAAEp6B,KAAKrB,OAAOoF,EAAOqU,mBAAmBmiB,oBAAoB,EAAEv6B,KAAK,CAAC,EAAEC,OAAOtB,OAAOoF,EAAOqU,mBAAmBmiB,oBAAoB,EAAEt6B,OAAO,CAAC,EAGvP8D,EAAOqU,mBAAmBzN,4BAA8B,MAI5D5G,EAAOqU,mBAAmB3N,4BAC1B1G,EAAOqU,mBAAmB1N,iCAAmC/L,OAAOoF,EAAOqU,mBAAmB3N,yBAAyB,EAAE9K,OAAO,kBAAkB,GAGlJoE,EAAOqU,mBAAmBzN,8BAC1B5G,EAAOqU,mBAAmBxN,mCAAqCjM,OAAOoF,EAAOqU,mBAAmBzN,2BAA2B,EAAEhL,OAAO,OAAO,GAG/I,IAAI4C,EAAU,CACVnJ,KAAM4uB,EAAmBxY,+BAA+BzL,EAAOqU,kBAAkB,EAAI,IAAMrU,EAAOqU,mBAAmBrM,QAAQ+vB,QAAQ1tB,KACrI2tB,IAAKh4B,EAAOqU,mBAAmBrM,QAAQokB,SACvC6L,IAAKj4B,EAAOqU,mBAAmBrM,QAAQqkB,UACvC6L,OAAQl4B,EAAOqU,mBAAmBrM,OACtC,EAUIqyB,GAFJr6B,EAAOqU,mBAAmBrM,QAAQsyB,UAAYt6B,EAAOqU,mBAAmBrM,QAAQ+vB,QAAQ30B,GAE1E,CACVg1B,SAAap4B,EAAOqU,mBAAoD,kCAAIrU,EAAOqU,mBAAmB3N,0BAA4B,KAClI2xB,eAAkBr4B,EAAOqU,mBAAmBikB,kCAC5ClL,SAAY,SAAUlX,GAClB,IAAK,IAAIzZ,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7DuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,SAAWkO,EAASgiB,SAC/Dl4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQokB,SAAWlW,EAAS8hB,IACvEh4B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGuL,QAAQqkB,UAAYnW,EAAS+hB,KAI5Ej4B,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAO4uB,eAAeC,aAAa,EAAEh3B,QACxFmI,EAAO4uB,eAAe2J,cAAc,WAChC5J,EAA8B,EAC9BmC,EAAc,CAClB,CAAC,CAET,EACAoH,OAAUl4B,EAAOqU,kBACrB,GAEIrU,EAAOkzB,sBACPmH,EAAQsC,YAAc,CAAA,GAGY,MAAlC38B,EAAOwyB,yBACPxyB,EAAO2C,YAAYoD,qBAAqB/F,EAAOwyB,yBAA2BxyB,EAAOqU,mBAEjFrU,EAAO4uB,eAAe2L,eAAev6B,EAAOwyB,wBAAyBh0B,EAAS67B,CAAO,IAGrFr6B,EAAOqU,mBAAmBkjB,mBAAqB,GAE/Cv3B,EAAO2C,YAAYoD,qBAAqBpL,KAAKqF,EAAOqU,kBAAkB,EAEtErU,EAAO4uB,eAAeuJ,YAAY35B,EAAS67B,CAAO,GAGtDr6B,EAAOqU,mBAAqB,KAC5BrU,EAAOwyB,wBAA0B,KACjCxyB,EAAO08B,gCAAkC,CAAA,EACzC18B,EAAO24B,gBAAgB2D,+BAA+BM,aAAa,EACnE58B,EAAO24B,gBAAgB4D,2BAA2BK,aAAa,EAC/D58B,EAAO24B,gBAAgB6D,+BAA+BI,aAAa,EACnE58B,EAAO6yB,0BAA4B,GAEnC7yB,EAAO2xB,MAAQ,UAEV3xB,EAAOgxB,0CAAyChxB,EAAOs0B,wBAA0B,CAAA,EAC1F,EAEAt0B,EAAO68B,uBAAyB,SAAU90B,GAGtC,IAFA,IAEStL,EAAI,EAAGA,EAAIuD,EAAO2e,wBAAwB9mB,OAAQ4E,CAAC,GAAI,CAC5D,GAAIuD,EAAwD,cAAxDA,EAAO2e,wBAAwBliB,GAAG4N,KAAKxO,YAAY,GAAuBmE,EAAO2C,YAAYoD,sBAA0E,GAAlD/F,EAAO2C,YAAYoD,qBAAqBlO,QAAc,CAC3ImI,EAAO2e,wBAAwBliB,GAC/D,KACJ,CACK,GAA4D,YAAxDuD,EAAO2e,wBAAwBliB,GAAG4N,KAAKxO,YAAY,EAAiB,CACzCmE,EAAO2e,wBAAwBliB,GAC/D,KACJ,CACJ,CAEAuD,EAAOqU,mBAAqB,CACxBjK,uBAA0BrC,EAAEqC,uBAC5BpC,QAAW9T,QAAQ+Y,KAAKlF,EAAEC,OAAO,CACrC,EACAhI,EAAO2xB,MAAQ,UACf3xB,EAAOuzB,yBAA2B,GAGlC,IAFA,IAAIzF,EAAU,EAELrxB,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,GAA+E,eAA3EuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,MAAyBrK,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YACtI,IAAK,IAAID,EAAI,EAAGA,EAAI9G,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYlP,OAAQiP,CAAC,GAAI,CACpF,IAAIR,EAAcpS,QAAQ+Y,KAAKjN,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAAYD,EAAE,EACxFR,EAAYhF,GAAKwsB,EAEjB9tB,EAAOuzB,yBAAyB54B,KAAK2L,CAAW,EAEhDwnB,CAAO,EACX,CAIR9tB,EAAOuG,kBAAoBrS,QAAQ+Y,KAAKjN,EAAOuyB,wBAAwB,CAqD3E,EAEAvyB,EAAO88B,yBAA2B,SAAU/0B,EAAGtL,GAC3CuD,EAAO24B,gBAAgBoE,UAAU,EAExB,GAALtgC,IAEAuD,EAAO2C,YAAYoD,qBAAuB8lB,UAAU6P,UAAUsB,mBAAmBh9B,EAAO2C,YAAYoD,qBAAsBtJ,EAAIA,EAAI,CAAE,EAEpIuD,EAAO4uB,eAAeqO,aAAaxgC,EAAIA,EAAI,EAAI,WACU,EAAjDuD,EAAO2C,YAAYoD,qBAAqBlO,QAAcmI,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAO4uB,eAAeC,aAAa,EAAEh3B,QAC9ImI,EAAO4uB,eAAe2J,cAAc,WAChC5J,EAA8B,EAC9BmC,EAAc,CAClB,CAAC,CAET,CAAC,EAEI9wB,EAAOgxB,0CAAyChxB,EAAOs0B,wBAA0B,CAAA,GAE9F,EAEAt0B,EAAOk9B,2BAA6B,SAAUn1B,EAAGtL,GAC7CuD,EAAO24B,gBAAgBoE,UAAU,EAE9BtgC,GAAMuD,EAAO2C,YAAYoD,qBAAqBlO,OAAS,IAEtDmI,EAAO2C,YAAYoD,qBAAuB8lB,UAAU6P,UAAUsB,mBAAmBh9B,EAAO2C,YAAYoD,qBAAsBtJ,EAAIA,EAAI,CAAE,EAEpIuD,EAAO4uB,eAAeqO,aAAaxgC,EAAIA,EAAI,EAAI,WACU,EAAjDuD,EAAO2C,YAAYoD,qBAAqBlO,QAAcmI,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAO4uB,eAAeC,aAAa,EAAEh3B,QAC9ImI,EAAO4uB,eAAe2J,cAAc,WAChC5J,EAA8B,EAC9BmC,EAAc,CAClB,CAAC,CAET,CAAC,EAEI9wB,EAAOgxB,0CAAyChxB,EAAOs0B,wBAA0B,CAAA,GAE9F,EAEAt0B,EAAOm9B,yBAA2B,SAAU1gC,GACxCuD,EAAO24B,gBAAgBoE,UAAU,EAEnB9Y,EAAmBxY,+BAA+BhP,CAAC,EAEjEuD,EAAO2C,YAAYoD,qBAAqBrL,OAAO+B,EAAG,CAAC,EAEnDuD,EAAO4uB,eAAewO,eAAe3gC,EAAG,WACiB,EAAjDuD,EAAO2C,YAAYoD,qBAAqBlO,OACxCmI,EAAO4uB,eAAe2J,cAAc,WAChC5J,EAA8B,EAC9BmC,EAAc,CAClB,CAAC,GAGDnC,EAA8B,EAC9BmC,EAAc,EAEtB,CAAC,EAEI9wB,EAAOgxB,0CAAyChxB,EAAOs0B,wBAA0B,CAAA,EAC1F,EAEAt0B,EAAOq9B,kBAAoB,WACvBr9B,EAAOqU,mBAAqB,KAC5BrU,EAAOwyB,wBAA0B,KAEjCxyB,EAAO2xB,MAAQ,UACf3xB,EAAO6yB,0BAA4B,EACvC,EAEA7yB,EAAOs9B,kBAAoB,WACvBt9B,EAAOsG,YAAc,EACzB,EAEAtG,EAAOu9B,gBAAkB,SAAUz2B,EAAGrK,GAClCuD,EAAOsG,YAAcpS,QAAQ+Y,KAAKnG,CAAC,EACnC9G,EAAO2yB,iBAAmBl2B,CAC9B,EAEAuD,EAAOw9B,sBAAwB,WAC3B,GAAIx9B,EAAO24B,gBAAgB8E,mCAAmC5E,UAAa74B,EAAO24B,gBAAgB+E,uCAAyC19B,EAAO24B,gBAAgB+E,sCAAsC7E,SAEpM,MAAO,EADP74B,EAAO29B,oCAAsC,CAAA,GAI5C39B,EAAOqU,mBAAmBtN,cAC3B/G,EAAOqU,mBAAmBtN,YAAc,IAGkB,aAA1D/G,EAAOqU,mBAAmBjK,uBAAuBC,OACjDrK,EAAOsG,YAAYc,YAAcpH,EAAOsG,YAAYyzB,oBAAoB3yB,aAG7C,MAA3BpH,EAAO2yB,iBACP3yB,EAAOqU,mBAAmBtN,YAAY/G,EAAO2yB,kBAAoB3yB,EAAOsG,YAGxEtG,EAAOqU,mBAAmBtN,YAAYpM,KAAKqF,EAAOsG,WAAW,EAGjEtG,EAAOsG,YAAc,GACrBtG,EAAO2yB,iBAAmB,KAC1B3yB,EAAO29B,oCAAsC,CAAA,EAC7C39B,EAAO24B,gBAAgB8E,mCAAmCb,aAAa,EACnE58B,EAAO24B,gBAAgB+E,uCAAuC19B,EAAO24B,gBAAgB+E,sCAAsCd,aAAa,EACxI58B,EAAO24B,gBAAgBiF,oCAAoC59B,EAAO24B,gBAAgBiF,mCAAmChB,aAAa,CAC1I,EAEA58B,EAAO69B,kBAAoB,SAAUphC,GACjCuD,EAAOqU,mBAAmBtN,YAAYrM,OAAO+B,EAAG,CAAC,CACrD,EAEAuD,EAAO89B,sBAAwB,WAC3B99B,EAAOsG,YAAc,IACzB,EAEAtG,EAAO+9B,uBAAyB,WAI5B,GAHA/9B,EAAOod,iBAAmB,GAC1Bpd,EAAO8yB,wBAA0B,GAE7B9yB,EAAOqU,mBAAmBhN,kBAAmB,CAC7CrH,EAAO6yB,0BAA4B,GAEnC,IAAK,IAAIp2B,EAAI,EAAGA,EAAIuD,EAAOqU,mBAAmBhN,kBAAkBxP,OAAQ4E,CAAC,GAAI,CACzEuD,EAAO6yB,0BAA0Bl4B,KAAKqF,EAAOqU,mBAAmBhN,kBAAkB5K,GAAG6K,gBAAgB,EACrGtH,EAAO8yB,wBAAwBn4B,KAAK,CAAEqjC,OAAUh+B,EAAOqU,mBAAmBhN,kBAAkB5K,GAAG6K,iBAAkBhP,OAAU,UAAW,CAAC,EAEvI,IAAK,IAAIwb,EAAI,EAAGA,EAAI9T,EAAOuG,kBAAkB1O,OAAQic,CAAC,GAClD,GAAI9T,EAAOqU,mBAAmBhN,kBAAkB5K,GAAG6K,iBAAiBlE,IAAMpD,EAAOuG,kBAAkBuN,GAAG1Q,GAAI,CACtGpD,EAAOuG,kBAAkBuN,GAAGmqB,QAAU,CAAA,EACtC,KACJ,CAER,CACJ,CACJ,EAEAj+B,EAAOk+B,qBAAuB,SAAUp3B,EAAGrK,GACvCuD,EAAOod,iBAAmBtW,EAC1B9G,EAAO4yB,sBAAwBn2B,CACnC,EAEAuD,EAAOm+B,4BAA8B,SAAUH,GAC3Ch+B,EAAOqU,mBAAmBhN,kBAAoB,GAE9C,IAAK,IAAI5K,EAAI,EAAGA,EAAIuD,EAAO6yB,0BAA0Bh7B,OAAQ4E,CAAC,GAC1DuD,EAAOqU,mBAAmBhN,kBAAkB1M,KAAK,CAAE2M,iBAAkBtH,EAAO6yB,0BAA0Bp2B,EAAG,CAAC,EAG9G,GAAIuD,EAAO2C,YAAYS,GACnB,IAAS3G,EAAI,EAAGA,EAAIuD,EAAO8yB,wBAAwBj7B,OAAQ4E,CAAC,GACP,UAA7CuD,EAAO8yB,wBAAwBr2B,GAAGnE,SAClC0H,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEnM,SAASkI,EAAO2C,YAAYgD,MAAO,EAAE,EAAI7N,SAASkI,EAAO8yB,wBAAwBr2B,GAAGuhC,OAAOr4B,MAAO,EAAE,EAAG,CAAC,EACrJ3F,EAAO2C,YAAY6E,KAAOvD,EAAQ,QAAQ,EAAEm6B,WAAWp+B,EAAO2C,YAAY6E,KAAM,EAAE,EAAI1P,SAASkI,EAAO8yB,wBAAwBr2B,GAAGuhC,OAAOx2B,KAAM,EAAE,EAAG,CAAC,EACpJxH,EAAOg1B,aAAe,CAAA,GAEuB,YAA7Ch1B,EAAO8yB,wBAAwBr2B,GAAGnE,SAClC0H,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEnM,SAASkI,EAAO2C,YAAYgD,MAAO,EAAE,EAAI7N,SAASkI,EAAO8yB,wBAAwBr2B,GAAGuhC,OAAOr4B,MAAO,EAAE,EAAG,CAAC,EACrJ3F,EAAO2C,YAAY6E,KAAOvD,EAAQ,QAAQ,EAAEm6B,WAAWp+B,EAAO2C,YAAY6E,KAAM,EAAE,EAAI1P,SAASkI,EAAO8yB,wBAAwBr2B,GAAGuhC,OAAOx2B,KAAM,EAAE,EAAG,CAAC,EACpJxH,EAAOg1B,aAAe,CAAA,GAMlCh1B,EAAOod,iBAAmB,IAC9B,EAEApd,EAAOq+B,uBAAyB,SAAUL,GAGtC,IAFA,IAAI3b,EAAQ,CAAA,EAEH5lB,EAAI,EAAGA,EAAIuD,EAAO6yB,0BAA0Bh7B,OAAQ4E,CAAC,GAC1D,GAAIuD,EAAO6yB,0BAA0Bp2B,GAAG2G,KAAO46B,EAAO56B,GAAI,CACtDif,EAAQ,CAAA,EACRriB,EAAO6yB,0BAA0Bn4B,OAAO+B,EAAG,CAAC,EAC5CuD,EAAO8yB,wBAAwBn4B,KAAK,CAAEqjC,OAAUA,EAAQ1lC,OAAU,SAAU,CAAC,EAC7E,KACJ,CAGC+pB,IACDriB,EAAO6yB,0BAA0Bl4B,KAAKqjC,CAAM,EAC5Ch+B,EAAO8yB,wBAAwBn4B,KAAK,CAAEqjC,OAAUA,EAAQ1lC,OAAU,OAAQ,CAAC,EAEnF,EAEA0H,EAAOs+B,uBAAyB,SAAU7hC,EAAGuhC,GACzCh+B,EAAOqU,mBAAmBhN,kBAAkB3M,OAAO+B,EAAG,CAAC,EAEvDuD,EAAOuG,kBAAkB5L,KAAKqjC,EAAO12B,gBAAgB,EAErDtH,EAAOuG,kBAAoBtC,EAAQ,SAAS,EAAEjE,EAAOuG,kBAAmB,WAAW,EAE/EvG,EAAO2C,YAAYS,KAGnBpD,EAAOg1B,aAAe,CAAA,EAE9B,EAEAh1B,EAAOu+B,2BAA6B,WAChCv+B,EAAOod,iBAAmB,IAC9B,EAEApd,EAAOw+B,oBAAsB,WACzBx+B,EAAO4uB,eAAe6P,iBAAiBz+B,EAAO2C,YAAYyC,aAAa,EACvEpF,EAAO4uB,eAAe2J,cAAc,CACxC,EAEAv4B,EAAO0+B,iBAAmB,SAAUj8B,GAChC,IAAIk8B,EAAuB,CAAA,EACvBC,EAAqB,CAAA,EAEzB,GAAI,CAAC5+B,EAAO2C,YAAYoD,sBAAwB/F,EAAO2C,YAAYoD,qBAAqBlO,OAAS,EAE7F,MAAO,EADPmI,EAAO6+B,yBAA2B,CAAA,GAItC,IAAK,IAAIpiC,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7DuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,wBAAqG,eAA3EpK,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,OAAuBs0B,EAAuB,CAAA,GACrL3+B,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,wBAAqG,aAA3EpK,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,OAAqBu0B,EAAqB,CAAA,GAGzL,GAAI,CAACD,GAAwB,CAACC,EAG1B,OAFA5+B,EAAO6+B,yBAA2B,CAAA,EAE3B,EADP7+B,EAAO8+B,mCAAqC,CAAA,GAIhD/9B,EAAkBS,KAAK,8BAA8B,EACrDiB,EAAO7J,gBAAgB,CAC3B,EAEAoH,EAAO++B,kBAAoB,SAAUt8B,GAGjC,OAFA1B,EAAkBG,MAAM,8BAA8B,EACtDuB,EAAO7J,gBAAgB,EAChB,CAAA,CACX,EAEAoH,EAAO8L,UAAY,WAKf,GAJA/K,EAAkBG,MAAM,8BAA8B,EAEtDlB,EAAOw0B,kBAAoB,GAEtBx0B,EAAO24B,gBAAgBC,yBAA2B54B,EAAO24B,gBAAgBC,wBAAwBC,UAAa74B,EAAO24B,gBAAgBG,2BAA2BD,UAAY74B,EAAO24B,gBAAgBI,2BAA2BF,SAE/N,MAAO,EADP74B,EAAOg5B,gCAAkC,CAAA,GAI7C,GAAIh5B,EAAO2C,YAAY6B,YAAa,CAGhC,IAFA,IAAIy0B,EAA2B,CAAA,EAEtBnlB,EAAI,EAAGA,EAAI9T,EAAOsvB,iBAAiB1iB,SAAS/U,OAAQic,CAAC,GAC1D,GAA0C,OAAtC9T,EAAO2C,YAAY4B,gBACnB,GAAIvE,EAAO2C,YAAY4B,eAAenB,KAAOpD,EAAOsvB,iBAAiB1iB,SAASkH,GAAG1Q,IACzEpD,EAAO2C,YAAYqJ,YAAYktB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAOsvB,iBAAiB1iB,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACvHo9B,EAA2B,CAAA,EAC3B,KACJ,CACJ,MAGA,GAAIj5B,EAAO2C,YAAYqJ,YAAYktB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAOsvB,iBAAiB1iB,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACvHo9B,EAA2B,CAAA,EAC3B,KACJ,CAIR,GAAIA,EAEA,MAAO,EADPj5B,EAAOi1B,oBAAsB,0CAGrC,CAEA,IAAI0J,EAAuB,CAAA,EACvBC,EAAqB,CAAA,EAEzB,GAAI,CAAC5+B,EAAO2C,YAAYoD,sBAAwB/F,EAAO2C,YAAYoD,qBAAqBlO,OAAS,EAE7F,MAAO,EADPmI,EAAO6+B,yBAA2B,CAAA,GAItC,IAAK,IAAIpiC,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7DuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,wBAAqG,eAA3EpK,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,OAAuBs0B,EAAuB,CAAA,GACrL3+B,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,wBAAqG,aAA3EpK,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,OAAqBu0B,EAAqB,CAAA,GAGzL,GAAI,CAACD,GAAwB,CAACC,EAG1B,OAFA5+B,EAAO6+B,yBAA2B,CAAA,EAE3B,EADP7+B,EAAO8+B,mCAAqC,CAAA,GAIhD,IAASriC,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAS,EAAG4E,CAAC,GAAI,CACzE,IAAI4X,EAAqBrU,EAAO2C,YAAYoD,qBAAqBtJ,GAC7DuiC,EAAyBh/B,EAAO2C,YAAYoD,qBAAsBtJ,EAAI,GAE1E,GAAI7B,OAAOokC,EAAuBt4B,0BAA0B9K,OAAO,kBAAkB,EAAG,kBAAkB,EAAEqjC,SAASrkC,OAAOyZ,EAAmB3N,0BAA0B9K,OAAO,kBAAkB,EAAG,kBAAkB,CAAC,EAEpN,MAAO,EADPoE,EAAOlJ,aAAe,mKAY9B,CAEAkJ,EAAO+yB,YAAc,CAAA,EACrB/yB,EAAO4C,sBAAwB,CAAA,EAC/B5C,EAAO2C,YAAYuC,sBAAwB,CAAA,EAC3ClF,EAAOlJ,aAAe,KAEtBmtB,EAAmBnY,UAAU9L,EAAO2C,WAAW,EAC1CpK,KACG,SAAUoK,GACN3C,EAAO24B,gBAAgBiE,aAAa,EACpC58B,EAAO24B,gBAAgBuG,cAAc,EAErCjb,EAAmBje,eAAerD,EAAYS,EAAE,EAC3C7K,KACG,WACIyH,EAAO+yB,YAAc,CAAA,EACrB/yB,EAAO2C,YAAcshB,EAAmBthB,YAExC5B,EAAkBS,KAAK,iCAAiC,CAC5D,EACA,SAAUpJ,GACN4H,EAAO+yB,YAAc,CAAA,EACrB/yB,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EACA,SAASsB,GACL4H,EAAO+yB,YAAc,CAAA,EAErB/yB,EAAOu0B,oBAAuBv0B,EAAO2C,YAAYmC,gBAAkBC,oBAAoBC,MAAMF,cAAcG,YAAcjF,EAAO2C,YAAYoiB,WAAc/kB,EAAO8Y,KAAK+K,OAAS7jB,EAAOsjB,MAAMhf,UAAYtE,EAAO2C,YAAYq0B,sBAGlN,MADD5+B,EAASE,OAET0H,EAAOlJ,aAAe,iHAGtBkJ,EAAOlJ,aAAe,wBAGlC,CACJ,CACR,EAEAkJ,EAAOm/B,uCAAyC,WAC5Cp+B,EAAkBG,MAAM,iCAAiC,CAChE,EAEGlB,EAAO6C,4BAA8B,WACjC,GAAK7C,EAAOsvB,iBAAiB7X,gBAAgB,GAAG2nB,oCAAsC,CAACp/B,EAAO2C,YAAY2R,UAAmD,IAAvCtU,EAAO2C,YAAY2R,SAASzc,SAAmBmI,EAAOsvB,iBAAiB7X,gBAAgB,GAAG4nB,oCAAsC,CAACr/B,EAAO2C,YAAY28B,UAAmD,IAAvCt/B,EAAO2C,YAAY28B,SAASznC,QAC9S,MAAO,CAAA,EAGXmI,EAAOqzB,iBAAmB,CAAA,EAE1BtyB,EAAkBG,MAAM,yCAAyC,EAE7DlB,EAAO4C,sBACP5C,EAAOu/B,gCAAgC,EAGvCv/B,EAAO+L,gBAAgB,CAE/B,EAEA/L,EAAO+L,gBAAkB,WAGrB,GAFA/L,EAAOw0B,kBAAoB,GAEtBx0B,EAAO24B,gBAAgBC,yBAA2B54B,EAAO24B,gBAAgBC,wBAAwBC,UAAa74B,EAAO24B,gBAAgBG,2BAA2BD,UAAY74B,EAAO24B,gBAAgBI,2BAA2BF,SAE/N,MAAO,EADP74B,EAAOg5B,gCAAkC,CAAA,GAI7C,GAAIh5B,EAAO2C,YAAY6B,YAAa,CAGhC,IAFA,IAAIy0B,EAA2B,CAAA,EAEtBnlB,EAAI,EAAGA,EAAI9T,EAAOsvB,iBAAiB1iB,SAAS/U,OAAQic,CAAC,GAC1D,GAA0C,OAAtC9T,EAAO2C,YAAY4B,gBACnB,GAAIvE,EAAO2C,YAAY4B,eAAenB,KAAOpD,EAAOsvB,iBAAiB1iB,SAASkH,GAAG1Q,IACzEpD,EAAO2C,YAAYqJ,YAAYktB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAOsvB,iBAAiB1iB,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACvHo9B,EAA2B,CAAA,EAC3B,KACJ,CACJ,MAGA,GAAIj5B,EAAO2C,YAAYqJ,YAAYktB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAOsvB,iBAAiB1iB,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACvHo9B,EAA2B,CAAA,EAC3B,KACJ,CAIR,GAAIA,EAEA,MAAO,EADPj5B,EAAOi1B,oBAAsB,0CAGrC,CAEA,IAAIuK,EAAyB,CAAA,EACzBb,EAAuB,CAAA,EACvBC,EAAqB,CAAA,EAEzB,GAAI5+B,EAAO24B,gBAAgB8G,qBAAqB5G,SAAU,MAAO,CAAA,EAIjE,GAFA74B,EAAO4C,sBAAwB,CAAA,EAE3B,CAAC5C,EAAO2C,YAAYoD,sBAAwB/F,EAAO2C,YAAYoD,qBAAqBlO,OAAS,EAE7F,MAAO,EADPmI,EAAO6+B,yBAA2B,CAAA,GAItC,IAAK,IAAIpiC,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7DuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,wBAAqG,eAA3EpK,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,OAAuBs0B,EAAuB,CAAA,GACrL3+B,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,wBAAqG,aAA3EpK,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,OAAqBu0B,EAAqB,CAAA,GAGzL,GAAI,CAACD,GAAwB,CAACC,EAG1B,OAFA5+B,EAAO6+B,yBAA2B,CAAA,EAE3B,EADP7+B,EAAO8+B,mCAAqC,CAAA,GAIhD,GAAI9+B,EAAO2C,YAAY0C,eAAgB,CACnC,IAAS5I,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,GAAIuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,0BAA2B,CACtE84B,EAAyB,CAAA,EACzB,KACJ,CAGJ,GAAI,CAACA,EAED,MAAO,EADPx/B,EAAOlJ,aAAe,gGAG9B,KACK,CAGD,IAFA0oC,EAAyB,CAAA,EAEhB/iC,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,GAAI,CAACuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,0BAA2B,CACvE84B,EAAyB,CAAA,EACzB,KACJ,CAGJ,GAAI,CAACA,EAED,MAAO,EADPx/B,EAAOlJ,aAAe,iFAG9B,CAEA,IAAIo8B,EAAsB,CAAA,CAAClzB,EAAO2C,YAAc,GAEhD,GAAK3C,EAAOsvB,iBAAiB7X,gBAAgB,GAAGioB,oBAAsB,CAAC1/B,EAAOqzB,mBAAqD,KAAhCrzB,EAAO2C,YAAY2R,UAAkD,MAA/BtU,EAAO2C,YAAY2R,WAAuBtU,EAAOsvB,kBAAoBtvB,EAAOsvB,iBAAiB5X,2BAAwF,EAA3D1X,EAAOsvB,iBAAiB5X,0BAA0B7f,QAAcmI,EAAOsvB,iBAAiB5X,0BAA0B,IAAM1X,EAAOsvB,iBAAiB5X,0BAA0B,GAAGioB,eAAiD,KAAhC3/B,EAAO2C,YAAY28B,UAAkD,MAA/Bt/B,EAAO2C,YAAY28B,UAEtf,OADAv+B,EAAkBS,KAAK,yCAAyC,EACzD,CAAA,EAWX,IARA,IAAIo+B,EAA0B5/B,EAAO2C,YAAYoD,qBAAqB,GAQ7DtJ,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAS,EAAG4E,CAAC,GAAI,CACzE,IAAI4X,EAAqBrU,EAAO2C,YAAYoD,qBAAqBtJ,GAC7DuiC,EAAyBh/B,EAAO2C,YAAYoD,qBAAsBtJ,EAAI,GAE1E,GAAI7B,OAAOokC,EAAuBt4B,0BAA0B9K,OAAO,kBAAkB,EAAG,kBAAkB,EAAEqjC,SAASrkC,OAAOyZ,EAAmB3N,0BAA0B9K,OAAO,kBAAkB,EAAG,kBAAkB,CAAC,EAEpN,MAAO,EADPoE,EAAOlJ,aAAe,mKAY9B,CAEA,OAAIkJ,EAAO2C,YAAYS,IAAMpD,EAAO2C,YAAY0B,SAAW,CAACrE,EAAO20B,oCAC/D5zB,EAAkBS,KAAK,yCAAyC,EACzD,CAAA,IAGPxB,EAAO2C,YAAYS,IAAMpD,EAAO2C,YAAY0B,SAAWrE,EAAO20B,oCAC9D5zB,EAAkBG,MAAM,yCAAyC,EAGhElB,EAAO2C,YAAYS,IAAOpD,EAAO40B,sCAAwCh6B,CAAAA,OAAOglC,EAAwBl5B,0BAA0B9K,OAAO,CAAC,EAAEqjC,SAASrkC,OAAO,EAAEgB,OAAO,CAAC,GAKvK,CAACoE,EAAO2C,YAAYS,IAAMpD,EAAO40B,sCAAwCh6B,OAAOglC,EAAwBl5B,0BAA0B9K,OAAO,CAAC,EAAEqjC,SAASrkC,OAAO,EAAEgB,OAAO,CAAC,GACtKmF,EAAkBG,MAAM,2CAA2C,EAGvElB,EAAOgzB,kBAAoB,CAAA,EAC3BhzB,EAAO2C,YAAY0B,QAAU,CAAA,EAC7BrE,EAAO2C,YAAYuC,sBAAwB,CAAA,EAC3ClF,EAAOizB,iBAAmB,CAAA,EAC1BjzB,EAAOmP,SAAW,KAClBnP,EAAOlJ,aAAe,KATtB,KAcAmtB,EAAmBlY,gBAAgB/L,EAAO2C,WAAW,EAChDpK,KACG,SAAUoK,GACN3C,EAAO24B,gBAAgBiE,aAAa,EACpC58B,EAAO24B,gBAAgBuG,cAAc,EAErCjb,EAAmBje,eAAerD,EAAYS,EAAE,EAC3C7K,KACG,WAuBI,GAtBAyH,EAAOgzB,kBAAoB,CAAA,EAC3BhzB,EAAOkzB,oBAAsBA,EAC7BlzB,EAAOmzB,mBAAqB,CAAA,EAC5BnzB,EAAO2C,YAAcshB,EAAmBthB,YACxC3C,EAAO2C,YAAY8C,iBAAmBxB,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY8C,iBAAkB,CAAC,EAC9FzF,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAYgD,MAAO,CAAC,EACxE3F,EAAOsvB,iBAAmBtvB,EAAO2C,YAAY2B,SAC7CtE,EAAOkyB,kBAAoB,GAE3Bp0B,EAAWsmB,MAAM,gBAAiB,eAAiBpkB,EAAO2C,YAAYyB,iBAAiB,EAEnFpE,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BkE,SAC1F11B,EAAO4xB,uBAAyB,CAAA,GAGhC5xB,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BmE,0BAC1F31B,EAAO6xB,0CAA4C,CAAA,GAGhB,MAAnC7xB,EAAOsvB,iBAAiBtnB,SACxBhI,EAAOkyB,kBAAkBv3B,KAAKqF,EAAOsvB,iBAAiBtnB,OAAO,EAExB,MAArChI,EAAOsvB,iBAAiBhY,UACxB,IAAK,IAAI7a,EAAI,EAAGA,EAAIuD,EAAOsvB,iBAAiBhY,UAAUzf,OAAQ4E,CAAC,GACvDuD,EAAOsvB,iBAAiBhY,UAAU7a,GAAG2G,IAAMpD,EAAOsvB,iBAAiBtnB,QAAQ5E,IAC3EpD,EAAOkyB,kBAAkBv3B,KAAKqF,EAAOsvB,iBAAiBhY,UAAU7a,EAAE,EAqB9E,IAFA,IAAI25B,EAA+B,EAfnCp2B,EAAO2C,YAAY2B,SAAW,CAC1BlB,GAAMpD,EAAOsvB,iBAAiBlsB,GAC9BiH,KAAQrK,EAAOsvB,iBAAiBjlB,KAChCurB,mBAAsB51B,EAAOsvB,iBAAiBsG,mBAC9CC,YAAe71B,EAAOsvB,iBAAiBuG,YACvCC,WAAc91B,EAAOsvB,iBAAiBwG,WACtCL,YAAez1B,EAAOsvB,iBAAiBmG,YACvCne,UAAatX,EAAOsvB,iBAAiBhY,UACrCye,kBAAqB/1B,EAAOsvB,iBAAiByG,kBAC7CC,sBAAyBh2B,EAAOsvB,iBAAiB0G,sBACjDC,oBAAuBj2B,EAAOsvB,iBAAiB2G,oBAC/CC,gBAAmB3hC,EAAE2hC,gBACrBC,oBAAuB5hC,EAAE4hC,mBAC7B,GAIS15B,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAAI,CACrEuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG45B,mBAAqBz7B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAC3I1G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG65B,mBAAqB17B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAEvI1G,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,8BAC3C5G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG85B,qBAAuB37B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,2BAA2B,EAC/I5G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG+5B,qBAAuB57B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,2BAA2B,GAGnJ,IAAI6vB,EAAuB,CAAA,EAE3B,GAAKz2B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAG3C,CACD3H,EAAO+wB,wBAA0B,CAAA,EAEjC,IAAK,IAAIzmB,EAAI,EAAGA,EAAItK,EAAOiK,qBAAqBpS,OAAQyS,CAAC,GACjDtK,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASvE,KAAOpD,EAAOiK,qBAAqBK,GAAGlH,KAAIqzB,EAAuB,CAAA,GAGxHA,GAAsBz2B,EAAOiK,qBAAqBtP,KAAKqF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,QAAQ,CACnH,MAVIyuB,EAA+B,CAAA,CAWvC,CAmBA,GAjBKA,GAAuE,IAAvCp2B,EAAOiK,qBAAqBpS,QAAgBmI,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAOiK,qBAAqB,GAAG2sB,+BAC/J52B,EAAOgxB,wCAA0C,CAAA,GAgBjD/M,EAAmBthB,YAAYuC,uBAAyB+e,EAAmBthB,YAAYk0B,8BAAgC5S,EAAmBthB,YAAYk0B,6BAA6B,KACnL72B,EAAO0zB,6BAA+BzP,EAAmBthB,YAAYk0B,6BAA6B,GAE9F72B,EAAOqf,WAAYrf,EAAO0zB,6BAA6BoD,SACvD,IAASr6B,EAAI,EAAGA,EAAIuD,EAAOqf,SAASxnB,OAAQ4E,CAAC,GACzC,IAAK,IAAIqX,EAAI,EAAGA,EAAI9T,EAAO0zB,6BAA6BoD,SAASj/B,OAAQic,CAAC,GAClE9T,EAAOqf,SAAS5iB,GAAG2G,KAAOpD,EAAO0zB,6BAA6BoD,SAAShjB,GAAG1Q,KAAIpD,EAAOqf,SAAS5iB,GAAGs6B,SAAW,CAAA,GAQhI,GAFA/2B,EAAOu0B,oBAAuBv0B,EAAO2C,YAAYmC,gBAAkBC,oBAAoBC,MAAMF,cAAcG,YAAcjF,EAAO2C,YAAYoiB,WAAc/kB,EAAO8Y,KAAK+K,OAAS7jB,EAAOsjB,MAAMhf,UAAYtE,EAAO2C,YAAYq0B,sBAEvN/S,EAAmB/f,kBAAmB,CACtC,OAAOlE,EAAO2C,YAAYS,GAC1B,OAAOpD,EAAO2C,YAAYyB,kBAC1B,OAAOpE,EAAO2C,YAAYs0B,qBAC1B,OAAOj3B,EAAO2C,YAAYk9B,WAC1B,OAAO7/B,EAAO2C,YAAYiF,SAC1B,OAAO5H,EAAO2C,YAAYu0B,YAC1B,OAAOl3B,EAAO2C,YAAYw0B,cAC1B,OAAOn3B,EAAO2C,YAAY6G,YAE1B,IAAS/M,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,OAAOuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2G,GAClD,OAAOpD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAClD,OAAO3H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAClD,OAAO/G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG26B,UAClD,OAAOp3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGgU,UAClD,OAAOzQ,EAAO2C,YAAYoD,qBAAqBtJ,GAAG46B,WAClD,OAAOr3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkU,YAClD,OAAO3Q,EAAO2C,YAAYoD,qBAAqBtJ,GAAGoJ,YAClD,OAAO7F,EAAO2C,YAAYoD,qBAAqBtJ,GAAGoU,eAClD,OAAO7Q,EAAO2C,YAAYoD,qBAAqBtJ,GAAG66B,kBAClD,OAAOt3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGgY,cAClD,OAAOzU,EAAO2C,YAAYoD,qBAAqBtJ,GAAG86B,mBAClD,OAAOv3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGk7B,WAOtD1T,EAAmB/f,kBAAoB,IAC3C,CAEIlE,EAAO20B,oCAAoC7D,EAAc,EAE7D9wB,EAAO20B,mCAAqC,CAAA,EAC5C30B,EAAO40B,qCAAuC,CAAA,EAE9C50B,EAAO24B,gBAAgBiE,aAAa,EAEpC58B,EAAO00B,4BAA8B,CAAA,EACrC3zB,EAAkBS,KAAK,4BAA4B,CACvD,EACA,SAAUpJ,GACN4H,EAAO+yB,YAAc,CAAA,EACrB/yB,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EACA,SAAUsB,GACN4H,EAAOgzB,kBAAoB,CAAA,EAGlB,MADD56B,EAASE,OAET0H,EAAOlJ,aAAe,iHAGtBkJ,EAAOlJ,aAAe,wBAGlC,CACJ,IA9LAiK,EAAkBS,KAAK,2CAA2C,EAC3D,CAAA,GA8Lf,EAEAxB,EAAO8/B,+CAAiD,WACpD/+B,EAAkBG,MAAM,yCAAyC,CACrE,EAEAlB,EAAO+/B,iDAAmD,WACtDh/B,EAAkBG,MAAM,2CAA2C,CAC1E,EAEGlB,EAAOggC,uCAAyC,WAC5ChgC,EAAO20B,mCAAqC,CAAA,EAE5C30B,EAAO+L,gBAAgB,CAC3B,EAEA/L,EAAOigC,yCAA2C,WAC9CjgC,EAAO40B,qCAAuC,CAAA,EAE9C50B,EAAO+L,gBAAgB,CAC3B,EAEA/L,EAAOu/B,gCAAkC,WAErC,IAAIZ,EAAuB,EAD3B3+B,EAAO4C,sBAAwB,CAAA,GAE3Bg8B,EAAqB,CAAA,EAEzB,GAAI,CAAC5+B,EAAO2C,YAAYoD,sBAAwB/F,EAAO2C,YAAYoD,qBAAqBlO,OAAS,EAE7F,MAAO,EADPmI,EAAO6+B,yBAA2B,CAAA,GAItC,IAAK,IAAIpiC,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAC7DuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,wBAAqG,eAA3EpK,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,OAAuBs0B,EAAuB,CAAA,GACrL3+B,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,wBAAqG,aAA3EpK,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2N,uBAAuBC,OAAqBu0B,EAAqB,CAAA,GAGzL,OAAKD,GAAyBC,GAMH5+B,EAAO2C,YAAc,GAE5C3C,CAAAA,EAAOsvB,iBAAiB7X,gBAAgB,GAAGioB,oBAAuB1/B,EAAOqzB,kBAAqD,KAAhCrzB,EAAO2C,YAAY2R,UAAkD,MAA/BtU,EAAO2C,YAAY2R,SAK3JvT,EAAkBS,KAAK,wBAAwB,EAJ3CT,EAAkBS,KAAK,yCAAyC,EAK7D,CAAA,IAbHxB,EAAO6+B,yBAA2B,CAAA,EAE3B,EADP7+B,EAAO8+B,mCAAqC,CAAA,GAapD,EAEA9+B,EAAO8C,+CAAiD,WACpD/B,EAAkBG,MAAM,yCAAyC,CACxE,EAEGlB,EAAOkgC,8BAAgC,WACnCn/B,EAAkBG,MAAM,wBAAwB,CACvD,EAEGlB,EAAOmgC,wBAA0B,WAG7B,GAFAngC,EAAOw0B,kBAAoB,GAEtBx0B,EAAO24B,gBAAgBC,yBAA2B54B,EAAO24B,gBAAgBC,wBAAwBC,UAAa74B,EAAO24B,gBAAgBG,2BAA2BD,UAAY74B,EAAO24B,gBAAgBI,2BAA2BF,SAE/N,MAAO,EADP74B,EAAOg5B,gCAAkC,CAAA,GAI7C,GAAIh5B,EAAO2C,YAAY6B,YAAa,CAGhC,IAFA,IAAIy0B,EAA2B,CAAA,EAEtBnlB,EAAI,EAAGA,EAAI9T,EAAOsvB,iBAAiB1iB,SAAS/U,OAAQic,CAAC,GAC1D,GAA0C,OAAtC9T,EAAO2C,YAAY4B,gBACnB,GAAIvE,EAAO2C,YAAY4B,eAAenB,KAAOpD,EAAOsvB,iBAAiB1iB,SAASkH,GAAG1Q,IACzEpD,EAAO2C,YAAYqJ,YAAYktB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAOsvB,iBAAiB1iB,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACvHo9B,EAA2B,CAAA,EAC3B,KACJ,CACJ,MAGA,GAAIj5B,EAAO2C,YAAYqJ,YAAYktB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAOsvB,iBAAiB1iB,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACvHo9B,EAA2B,CAAA,EAC3B,KACJ,CAIR,GAAIA,EAEA,MAAO,EADPj5B,EAAOi1B,oBAAsB,0CAGrC,CAEAj1B,EAAOgzB,kBAAoB,CAAA,EAC3BhzB,EAAO2C,YAAY0B,QAAU,CAAA,EAC7BrE,EAAO2C,YAAYuC,sBAAwB,CAAA,EAC3ClF,EAAO0zB,6BAA6BoD,SAAW,GAE/C,IAAK,IAAIr6B,EAAI,EAAGA,EAAIuD,EAAOqf,SAASxnB,OAAQ4E,CAAC,GACrCuD,EAAOqf,SAAS5iB,GAAGs6B,UACnB/2B,EAAO0zB,6BAA6BoD,SAASn8B,KAAKqF,EAAOqf,SAAS5iB,EAAE,EAI5EuD,EAAO2C,YAAYk0B,6BAA+B,GAClD72B,EAAO2C,YAAYk0B,6BAA6Bl8B,KAAKqF,EAAO0zB,4BAA4B,EACxF1zB,EAAOlJ,aAAe,KAEtBiK,EAAkBG,MAAM,wBAAwB,EAEhD+iB,EAAmBlY,gBAAgB/L,EAAO2C,WAAW,EAChDpK,KACG,SAAUoK,GACN3C,EAAO24B,gBAAgBiE,aAAa,EACpC58B,EAAO24B,gBAAgBuG,cAAc,EAErCjb,EAAmBje,eAAerD,EAAYS,EAAE,EAC3C7K,KACG,WAII,GAHAyH,EAAOgzB,kBAAoB,CAAA,EAC3BhzB,EAAO2C,YAAcshB,EAAmBthB,YAEpCshB,EAAmBthB,YAAYuC,uBAAyB+e,EAAmBthB,YAAYk0B,8BAAgC5S,EAAmBthB,YAAYk0B,6BAA6B,KACnL72B,EAAO0zB,6BAA+BzP,EAAmBthB,YAAYk0B,6BAA6B,GAE9F72B,EAAOqf,WAAYrf,EAAO0zB,6BAA6BoD,SACvD,IAAK,IAAIr6B,EAAI,EAAGA,EAAIuD,EAAOqf,SAASxnB,OAAQ4E,CAAC,GACzC,IAAK,IAAIqX,EAAI,EAAGA,EAAI9T,EAAO0zB,6BAA6BoD,SAASj/B,OAAQic,CAAC,GAClE9T,EAAOqf,SAAS5iB,GAAG2G,KAAOpD,EAAO0zB,6BAA6BoD,SAAShjB,GAAG1Q,KAAIpD,EAAOqf,SAAS5iB,GAAGs6B,SAAW,CAAA,GAMhI/2B,EAAO24B,gBAAgBiE,aAAa,CACxC,EACA,SAAUxkC,GACN4H,EAAO+yB,YAAc,CAAA,EACrB/yB,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EACA,SAAUsB,GACN4H,EAAOgzB,kBAAoB,CAAA,EAGlB,MADD56B,EAASE,OAET0H,EAAOlJ,aAAe,iHAGtBkJ,EAAOlJ,aAAe,wBAGlC,CACJ,CACR,EAEAkJ,EAAOgN,kBAAoB,WACvBhN,EAAOyzB,oBAAsB,CAAA,EAC7BzzB,EAAOlJ,aAAe,KAEtBiK,EAAkBG,MAAM,kCAAkC,EAE1D+iB,EAAmBjX,kBAAkB,EAChCzU,KACG,SAAUoK,GACNshB,EAAmBje,eAAerD,EAAYS,EAAE,EAC3C7K,KACG,WACIyH,EAAOyzB,oBAAsB,CAAA,EAC7BzzB,EAAO2C,YAAcshB,EAAmBthB,YACxC3C,EAAOu0B,oBAAuBv0B,EAAO2C,YAAYmC,gBAAkBC,oBAAoBC,MAAMF,cAAcG,YAAcjF,EAAO2C,YAAYoiB,WAAc/kB,EAAO8Y,KAAK+K,OAAS7jB,EAAOsjB,MAAMhf,UAAYtE,EAAO2C,YAAYq0B,qBAC/N,EACA,SAAU5+B,GACN4H,EAAOyzB,oBAAsB,CAAA,EAC7BzzB,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EACA,SAAUsB,GACN4H,EAAOyzB,oBAAsB,CAAA,EAGpB,MADDr7B,EAASE,OAET0H,EAAOlJ,aAAe,iHAGtBkJ,EAAOlJ,aAAe,wBAGlC,CACJ,CACR,EAEAkJ,EAAOogC,uCAAyC,WAC5Cr/B,EAAkBS,KAAK,kCAAkC,CAC7D,EAEAxB,EAAOqgC,wCAA0C,WAC7Ct/B,EAAkBG,MAAM,kCAAkC,CACjE,EAEGlB,EAAOsgC,uBAAyB,SAAU39B,GACtC,IAAI29B,EAAyB,CAAA,EAE7B,GAAItgC,EAAO2C,YACP,IAAK,IAAIlG,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,GAA2D,MAAvDuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAAkB,CAC7D24B,EAAyB,CAAA,EACzB,KACJ,CAIR,OAAOA,CACX,EAEAtgC,EAAOugC,eAAiB,WACpBvgC,EAAOizB,iBAAmB,CAAA,EACVjzB,EAAO4uB,eAAeC,aAAa,EAAnD,IACIC,EAAgB9uB,EAAO4uB,eAAeG,iBAAiB,EAAI,QAG/D/uB,EAAOgxB,wCAA0C,CAAA,EAE7ChxB,EAAO2C,YAAY0J,WAAarM,EAAO2C,YAAY0J,UAAUwX,OAAS9e,oBAAoBC,MAAMue,MAAMjf,UAAUvD,EAAkBG,MAAM,kBAAkB,EAE9JlB,EAAOmP,SAAW6F,EAAgB5F,kBAAkBpP,EAAO2C,YAAY+B,YAAa1E,EAAO2C,YAAYoD,qBAAsB/F,EAAO2C,YAAY6C,WAAYxF,EAAO2C,YAAY4C,kBAAkB,EAEjM,IAAK,IAAI9I,EAAI,EAAGA,EAAIuD,EAAOmP,SAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAE9DuD,EAAOmP,SAASpJ,qBAAqBtJ,GAAGuW,cAAgBhT,EAAOmP,SAASpJ,qBAAqBtJ,GAAG8P,iBAChGvM,EAAOmP,SAASpJ,qBAAqBtJ,GAAG+P,YAAc,CAAEpJ,GAAIpD,EAAO2C,YAAYS,EAAG,EAGtF,GAAIpD,EAAO2C,YAAYS,IAAM,CAACpD,EAAOgxB,wCAAyC,CAG1E,IAFA,IAAIC,EAAiB,EAEZx0B,EAAI,EAAGA,EAAIuD,EAAOsvB,iBAAiB9X,SAAS3f,OAAQ4E,CAAC,GAC1D,GAAIuD,EAAOmP,SAASzK,YAAYtB,IAAMpD,EAAOsvB,iBAAiB9X,SAAS/a,GAAGiI,YAAYtB,IAA2E,sBAArEpD,EAAOsvB,iBAAiB9X,SAAS/a,GAAG+yB,WAAWnlB,KAAKxO,YAAY,EAA2B,CACnL,GAAmF,YAA/EmE,EAAOsvB,iBAAiB9X,SAAS/a,GAAGgzB,qBAAqBplB,KAAKxO,YAAY,EAC1E,IAAK,IAAI6zB,EAAI,EAAGA,EAAI1vB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAc93B,OAAQ63B,CAAC,GACvEZ,EAAgB9uB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGE,OACjEd,EAAgB9uB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGhiB,GACrEujB,IAAoBjxB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGhiB,GAAK1N,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGE,MAAQ5vB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGI,SAAY9vB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGK,WAGjQkB,IAAoBnC,EAAgB9uB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGE,MAAQ5vB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGI,SAAY9vB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGK,iBAMnO,IAASL,EAAI,EAAGA,EAAI1vB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAc93B,OAAQ63B,CAAC,GAC3D1vB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGE,KAjCzE,IAwCQqB,GAAkBjxB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGkzB,cAAcD,GAAGK,YAI/EkB,EAAiBjxB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGuzB,eACrDiB,EAAiBjxB,EAAOsvB,iBAAiB9X,SAAS/a,GAAGuzB,aAE7D,CAGJ,GAAIhwB,EAAOmP,SAASpJ,qBAChB,IAAK,IAAIgC,EAAI,EAAGA,EAAI/H,EAAOmP,SAASpJ,qBAAqBlO,OAAQkQ,CAAC,GAC9D,GAAI/H,EAAOmP,SAASpJ,qBAAqBgC,GAAGV,kBACxC,IAAK,IAAI9S,EAAI,EAAGA,EAAIyL,EAAOmP,SAASpJ,qBAAqBgC,GAAGV,kBAAkBxP,OAAQtD,CAAC,GACnF08B,GAAkBjxB,EAAOmP,SAASpJ,qBAAqBgC,GAAGV,kBAAkB9S,GAAG+S,iBAAiBE,KAMhHxH,EAAOmP,SAASsE,eAAiBxP,EAAQ,QAAQ,EAAEgtB,EAAgB,CAAC,EACpEjxB,EAAOmP,SAAS3H,KAAOvD,EAAQ,QAAQ,EAAEgtB,EAAgB,CAAC,CAC9D,MAEIjxB,EAAOmP,SAASsE,eAAiBxP,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY0uB,gBAAiB,CAAC,EACxFrxB,EAAOmP,SAAS3H,KAAOvD,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY6E,KAAM,CAAC,EAKvE,IAAIg5B,EAAkB3iC,KAAK2iC,gBAE3BxrB,EAAgBlC,aAAa0tB,CAAe,EACvCjoC,KACG,SAAU4W,GACNnP,EAAOizB,iBAAmB,CAAA,EAC1BjzB,EAAOmP,SAAWA,EAElB8U,EAAmBje,eAAehG,EAAO2C,YAAYS,EAAE,EAClD7K,KACG,WAuBI,GAtBAyH,EAAOgzB,kBAAoB,CAAA,EAC3BhzB,EAAOkzB,oBAAsB,CAAA,EAC7BlzB,EAAOmzB,mBAAqB,CAAA,EAC5BnzB,EAAO2C,YAAcshB,EAAmBthB,YACxC3C,EAAO2C,YAAY8C,iBAAmBxB,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY8C,iBAAkB,CAAC,EAC9FzF,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAYgD,MAAO,CAAC,EACxE3F,EAAOsvB,iBAAmBtvB,EAAO2C,YAAY2B,SAC7CtE,EAAOkyB,kBAAoB,GAE3Bp0B,EAAWsmB,MAAM,gBAAiB,eAAiBpkB,EAAO2C,YAAYyB,iBAAiB,EAEnFpE,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BkE,SAC1F11B,EAAO4xB,uBAAyB,CAAA,GAGhC5xB,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BmE,0BAC1F31B,EAAO6xB,0CAA4C,CAAA,GAGhB,MAAnC7xB,EAAOsvB,iBAAiBtnB,SACxBhI,EAAOkyB,kBAAkBv3B,KAAKqF,EAAOsvB,iBAAiBtnB,OAAO,EAExB,MAArChI,EAAOsvB,iBAAiBhY,UACxB,IAAK,IAAI7a,EAAI,EAAGA,EAAIuD,EAAOsvB,iBAAiBhY,UAAUzf,OAAQ4E,CAAC,GACvDuD,EAAOsvB,iBAAiBhY,UAAU7a,GAAG2G,IAAMpD,EAAOsvB,iBAAiBtnB,QAAQ5E,IAC3EpD,EAAOkyB,kBAAkBv3B,KAAKqF,EAAOsvB,iBAAiBhY,UAAU7a,EAAE,EAqB9E,IAFA,IAAI25B,EAA+B,EAfnCp2B,EAAO2C,YAAY2B,SAAW,CAC1BlB,GAAMpD,EAAOsvB,iBAAiBlsB,GAC9BiH,KAAQrK,EAAOsvB,iBAAiBjlB,KAChCurB,mBAAsB51B,EAAOsvB,iBAAiBsG,mBAC9CC,YAAe71B,EAAOsvB,iBAAiBuG,YACvCC,WAAc91B,EAAOsvB,iBAAiBwG,WACtCL,YAAez1B,EAAOsvB,iBAAiBmG,YACvCne,UAAatX,EAAOsvB,iBAAiBhY,UACrCye,kBAAqB/1B,EAAOsvB,iBAAiByG,kBAC7CC,sBAAyBh2B,EAAOsvB,iBAAiB0G,sBACjDC,oBAAuBj2B,EAAOsvB,iBAAiB2G,oBAC/CC,gBAAmBl2B,EAAOsvB,iBAAiB4G,gBAC3CC,oBAAuBn2B,EAAOsvB,iBAAiB6G,mBACnD,GAIS15B,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAAI,CACrEuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG45B,mBAAqBz7B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAC3I1G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG65B,mBAAqB17B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAEvI1G,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,8BAC3C5G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG85B,qBAAuB37B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,2BAA2B,EAC/I5G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG+5B,qBAAuB57B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGmK,2BAA2B,GAGnJ,IAAI6vB,EAAuB,CAAA,EAE3B,GAAKz2B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAG3C,CACD3H,EAAO+wB,wBAA0B,CAAA,EAEjC,IAAK,IAAIzmB,EAAI,EAAGA,EAAItK,EAAOiK,qBAAqBpS,OAAQyS,CAAC,GACjDtK,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASvE,KAAOpD,EAAOiK,qBAAqBK,GAAGlH,KAAIqzB,EAAuB,CAAA,GAGxHA,GAAsBz2B,EAAOiK,qBAAqBtP,KAAKqF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,QAAQ,CACnH,MAVIyuB,EAA+B,CAAA,CAWvC,CAiBA,GAfKA,GAAuE,IAAvCp2B,EAAOiK,qBAAqBpS,QAAgBmI,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAOiK,qBAAqB,GAAG2sB,+BAA8B52B,EAAOgxB,wCAA0C,CAAA,GAe9O/M,EAAmBthB,YAAYuC,uBAAyB+e,EAAmBthB,YAAYk0B,8BAAgC5S,EAAmBthB,YAAYk0B,6BAA6B,KACnL72B,EAAO0zB,6BAA+BzP,EAAmBthB,YAAYk0B,6BAA6B,GAE9F72B,EAAOqf,WAAYrf,EAAO0zB,6BAA6BoD,SACvD,IAASr6B,EAAI,EAAGA,EAAIuD,EAAOqf,SAASxnB,OAAQ4E,CAAC,GACzC,IAAK,IAAIqX,EAAI,EAAGA,EAAI9T,EAAO0zB,6BAA6BoD,SAASj/B,OAAQic,CAAC,GAClE9T,EAAOqf,SAAS5iB,GAAG2G,KAAOpD,EAAO0zB,6BAA6BoD,SAAShjB,GAAG1Q,KAAIpD,EAAOqf,SAAS5iB,GAAGs6B,SAAW,CAAA,GAMhI,GAAI9S,EAAmB/f,kBAAmB,CACtC,OAAOlE,EAAO2C,YAAYS,GAC1B,OAAOpD,EAAO2C,YAAYyB,kBAC1B,OAAOpE,EAAO2C,YAAYs0B,qBAC1B,OAAOj3B,EAAO2C,YAAYk9B,WAC1B,OAAO7/B,EAAO2C,YAAYiF,SAC1B,OAAO5H,EAAO2C,YAAYu0B,YAC1B,OAAOl3B,EAAO2C,YAAYw0B,cAC1B,OAAOn3B,EAAO2C,YAAY6G,YAE1B,IAAS/M,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,OAAOuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2G,GAClD,OAAOpD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAClD,OAAO3H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAClD,OAAO/G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG26B,UAClD,OAAOp3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGgU,UAClD,OAAOzQ,EAAO2C,YAAYoD,qBAAqBtJ,GAAG46B,WAClD,OAAOr3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkU,YAClD,OAAO3Q,EAAO2C,YAAYoD,qBAAqBtJ,GAAGoJ,YAClD,OAAO7F,EAAO2C,YAAYoD,qBAAqBtJ,GAAGoU,eAClD,OAAO7Q,EAAO2C,YAAYoD,qBAAqBtJ,GAAG66B,kBAClD,OAAOt3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGgY,cAClD,OAAOzU,EAAO2C,YAAYoD,qBAAqBtJ,GAAG86B,mBAClD,OAAOv3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGk7B,WAOtD1T,EAAmB/f,kBAAoB,IAC3C,CACJ,EACA,SAAU9L,GACN4H,EAAO+yB,YAAc,CAAA,EACrB/yB,EAAOlJ,aAAe,wBAC1B,CACJ,EAEJkJ,EAAOlJ,aAAe,KAEO,EAAzBw3B,EAAahtB,GAAGzJ,QAAc,CAACmI,EAAO00B,6BACtC3zB,EAAkBS,KAAK,yBAAyB,CAExD,EACA,SAAUpJ,GACN4H,EAAOizB,iBAAmB,CAAA,EAGjB,MADD76B,EAASE,OAET0H,EAAOlJ,aAAesB,EAAS7B,KAAKkqC,QAGpCzgC,EAAOlJ,aAAe,wBAGlC,CACJ,CACR,EAEAkJ,EAAOqgC,wCAA0C,WAC7Ct/B,EAAkBG,MAAM,kCAAkC,CAC9D,EAEAlB,EAAO0gC,sCAAwC,WAC3C3/B,EAAkBG,MAAM,gCAAgC,CAC/D,EAEGlB,EAAO2gC,aAAe,WAClB//B,EAAOO,GAAG,WAAY,CAAEG,GAAMtB,EAAOmP,SAAS/L,EAAG,CAAC,CACtD,EAEApD,EAAOwT,mBAAqB,WACxBxT,EAAO60B,iBAAmB,CAAA,EAE1B,IAAI1lB,EAAWnP,EAAO2C,YAAYoD,qBAAqB,GAAG4B,SAE1DwH,EAASsE,eAAiBxP,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY0uB,gBAAiB,CAAC,EACjFliB,EAAS3H,KAAOvD,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY6E,KAAM,CAAC,EAE5DwN,EAAgBxB,mBAAmBrE,CAAQ,EACtC5W,KACG,WACIyH,EAAO60B,iBAAmB,CAAA,EAC1B70B,EAAO80B,gBAAkB,CAAA,CAC7B,EACA,SAAU18B,IAGd,CACR,EAEA4H,EAAO4gC,mCAAqC,WACnC5gC,EAAO2C,YAAY0J,WAAarM,EAAO2C,YAAY0J,UAAUwX,OAAS9e,oBAAoBC,MAAMue,MAAMjf,SAIvGvD,EAAkBS,KAAK,kBAAkB,EAHzCxB,EAAOugC,eAAe,CAK9B,EAEAvgC,EAAO6gC,wBAA0B,WAC7B9/B,EAAkBG,MAAM,kBAAkB,CACjD,EAEGlB,EAAO6mB,8BAAgC,WACnC,OAAO7R,EAAgBrB,sBAAsB,CACjD,EAEA3T,EAAO8gC,8BAAgC,SAAU7sB,GAC7C,IAAI5e,EAAO,GAIX,OAFAA,GAAQ4e,EAAE5J,KAAO,MAAQ4J,EAAEvH,SAAS,GAAGq0B,KAAO,IAAM9sB,EAAEvH,SAAS,GAAGs0B,MAAQ,KAAO/sB,EAAEvH,SAAS,GAAGhI,YAAY2F,KAAO,GAGtH,EAEArK,EAAOoqB,eAAiB,SAAUnW,GAC9BjU,EAAO4oB,iBAAmB3U,CAC9B,EAEAjU,EAAOsqB,eAAiB,WACpB,GAAI,CAACtqB,EAAO4oB,iBAER,MAAO,EADP5oB,EAAOlJ,aAAe,wBAI1BkJ,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOlJ,aAAe,KAEtBke,EAAgB7F,SAASvH,SAAW5H,EAAO4oB,iBAC3C5oB,EAAOmP,SAASvH,SAAW5H,EAAO4oB,iBAElC5T,EAAgBlC,aAAa,EACxBva,KACG,SAAU4W,GACNnP,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOlJ,aAAe,KAEtBiK,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOmN,UAAY,WACfnN,EAAO2zB,kBAAoB,CAAA,EAC3B3zB,EAAO4zB,WAAa,CAAA,EACpB5zB,EAAO6zB,0BAA4B,CAAA,EAEnC9yB,EAAkBS,KAAK,sBAAsB,CA2BjD,EAEAxB,EAAOihC,eAAiB,WACpBjhC,EAAO2zB,kBAAoB,CAAA,EAC3B3zB,EAAO4zB,WAAa,CAAA,EAEpB3P,EAAmB9W,UAAUnN,EAAO2C,YAAYS,GAAIpD,EAAO8zB,YAAYC,UAAW/zB,EAAO8zB,YAAYE,WAAYh0B,EAAO8zB,YAAYoN,iBAAiB,EAChJ3oC,KACG,SAAUH,GAGN,IAFA,IACIguB,EAAqBhuB,EAAS+N,QAAQ,qBAAqB,EAAEkgB,MAAM,GAAG,EACjE5pB,EAAI,EAAGA,EAAI2pB,EAAmBvuB,OAAQ4E,CAAC,GACK,GAA7C2pB,EAAmB3pB,GAAGrB,QAAQ,UAAU,GAC5BgrB,EAAmB3pB,GAAG4pB,MAAM,GAAG,EAC1B,GAAGnf,QAAQ,IAAK,EAAE,EAGvCkX,EAAO,IAAIkI,KAAK,CAACluB,EAAS7B,MAAO,CAAEY,KAAM,iBAAkB,CAAC,EAC5DgqC,EAAU5hC,OAAO6hC,IAAIC,gBAAgBjjB,CAAI,EAC7Cpe,EAAOszB,OAAS/E,EAAK+S,mBAAmBH,CAAO,CAOnD,EACA,SAAU/oC,IAGd,CACR,EAEA4H,EAAOuhC,4BAA8B,WACjCxgC,EAAkBG,MAAM,sBAAsB,CACrD,EAEGlB,EAAOwhC,uBAAyB,WAC5BxhC,EAAO4zB,WAAa,CAAA,EACpB5zB,EAAO6zB,0BAA4B,CAAA,CACvC,EAEA7zB,EAAOwN,gBAAkB,WACrBxN,EAAOi0B,wBAA0B,KAEjChQ,EAAmBzW,gBAAgBxN,EAAO8zB,YAAYpmB,GAAI1N,EAAO8zB,YAAYlmB,KAAM5N,EAAO2C,YAAa3C,EAAO8zB,YAAYC,UAAW/zB,EAAO8zB,YAAYE,WAAYh0B,EAAO8zB,YAAYoN,iBAAiB,EAExMngC,EAAkBG,MAAM,sBAAsB,CAClD,EAEAlB,EAAOyhC,oBAAsB,WACrBzhC,EAAO8zB,YAAY4N,kBAC0B,MAAzC1hC,EAAO8zB,YAAY4N,gBAAgBt+B,KAAYpD,EAAO8zB,YAAYpmB,GAAK1N,EAAO8zB,YAAY4N,gBAAgBv1B,OAChE,OAA1CnM,EAAO8zB,YAAY4N,gBAAgBt+B,MAAapD,EAAO8zB,YAAYpmB,GAAK,GAEpF,EAEA1N,EAAO2hC,sBAAwB,WAC3B3hC,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY8C,iBAAkB,CAAC,CACvF,EAEAzF,EAAO4hC,2BAA6B,WAC3B5hC,EAAO2C,YAAY0E,oBAAmBrH,EAAO2C,YAAY0E,kBAAoB,IAElFrH,EAAO2C,YAAY0E,kBAAkB1M,KAAK,CAAEyM,YAAa,GAAII,KAAMvD,EAAQ,QAAQ,EAAE,EAAG,CAAC,EAAG0B,MAAO1B,EAAQ,QAAQ,EAAE,EAAG,CAAC,CAAE,CAAC,CAChI,EAEAjE,EAAO6hC,8BAAgC,SAAUr2B,GAC7CxL,EAAO2C,YAAY8C,iBAAmBxB,EAAQ,QAAQ,EAAEm6B,WAAWp+B,EAAO2C,YAAY8C,gBAAgB,EAAIzF,EAAO2C,YAAY0E,kBAAkBmE,GAAO7F,MAAO,CAAC,EAC9J3F,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEm6B,WAAWp+B,EAAO2C,YAAYgD,KAAK,EAAI3F,EAAO2C,YAAY0E,kBAAkBmE,GAAO7F,MAAO,CAAC,EAKxI3F,EAAO2C,YAAY0E,kBAAkB3M,OAAO8Q,EAAO,CAAC,CACxD,EAEAxL,EAAO8hC,4BAA8B,SAAUC,EAAUC,GACjDC,GAAmB7D,WAAW2D,EAASp8B,KAAK,EAAIy4B,WAAW2D,EAASp8B,KAAK,EAAI,IAAMy4B,WAAW4D,CAAQ,EAAI5D,WAAW4D,CAAQ,EAAI,GAErIhiC,EAAO2C,YAAY8C,iBAAmBxB,EAAQ,QAAQ,EAAGm6B,WAAWp+B,EAAO2C,YAAY8C,gBAAgB,EAAIw8B,EAAiB,CAAC,EAC7HjiC,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEm6B,WAAWp+B,EAAO2C,YAAYgD,KAAK,EAAIs8B,EAAiB,CAAC,CAC1G,EASAjiC,EAAOkiC,WAAa,WAChBliC,EAAOg1B,aAAe,CAAA,CAC1B,EAEAh1B,EAAOmiC,cAAgB,SAAU9tB,GAC7BrU,EAAOqU,mBAAqBA,EAC5BtT,EAAkBS,KAAK,gCAAgC,CAC3D,EAEAxB,EAAOoiC,gBAAkB,SAAU/tB,GAC/BrU,EAAOqU,mBAAqBA,EAC5BrU,EAAOo1B,YAAc,GAErB,IAAK,IAAI34B,EAAI,EAAGA,EAAIuD,EAAOqU,mBAAmBmjB,YAAY3/B,OAAQ4E,GAAK,EACnEuD,EAAOo1B,YAAYz6B,KAAKqF,EAAOqU,mBAAmBmjB,YAAY6K,MAAM5lC,EAAGA,EAAI,CAAC,CAAC,EAGjFsE,EAAkBS,KAAK,kCAAkC,CAC7D,EAEAxB,EAAOsiC,mCAAqC,WACxCvhC,EAAkBG,MAAM,kCAAkC,CAC9D,EAEAlB,EAAOuiC,oBAAsB,SAAUluB,GACnCrU,EAAOqU,mBAAqBA,EAC5BrU,EAAOq1B,gBAAkB,GAEzB,IAAK,IAAI54B,EAAI,EAAGA,EAAIuD,EAAOqU,mBAAmBojB,gBAAgB5/B,OAAQ4E,GAAK,EACvEuD,EAAOq1B,gBAAgB16B,KAAKqF,EAAOqU,mBAAmBojB,gBAAgB4K,MAAM5lC,EAAGA,EAAI,CAAC,CAAC,EAGzFsE,EAAkBS,KAAK,sCAAsC,CACjE,EAEAxB,EAAOwiC,uCAAyC,WAC5CzhC,EAAkBG,MAAM,sCAAsC,CAClE,EAEAlB,EAAOyiC,qBAAuB,WAC1Bxe,EAAmB/f,kBAAoBlE,EAAO2C,YAAYS,GAE1DxC,EAAOO,GAAG,cAAe,CAAEG,GAAI,IAAK,EAAG,CAAE4U,SAAU,CAAA,EAAMwsB,OAAQ,CAAA,CAAK,CAAC,CAC3E,EAEA1iC,EAAO2iC,mBAAqB,WACxB5hC,EAAkBS,KAAK,yBAAyB,CACpD,EAEAxB,EAAO4iC,+BAAiC,WACpC7hC,EAAkBG,MAAM,yBAAyB,CACxD,EAEGlB,EAAO6iC,oBAAsB,WACzB7iC,EAAOy0B,kCAAoC,CAAA,EAC3Cz0B,EAAOlJ,aAAe,KAEtBmtB,EAAmB/U,oBAAoBlP,EAAO2C,WAAW,EACpDpK,KACG,SAAUoK,GACN3C,EAAO24B,gBAAgBiE,aAAa,EACpC58B,EAAO24B,gBAAgBuG,cAAc,EAErCjb,EAAmBje,eAAerD,EAAYS,EAAE,EAC3C7K,KACG,WAsBI,GArBAyH,EAAOy0B,kCAAoC,CAAA,EAC3Cz0B,EAAOmzB,mBAAqB,CAAA,EAC5BnzB,EAAO2C,YAAcshB,EAAmBthB,YACxC3C,EAAO2C,YAAY8C,iBAAmBxB,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAY8C,iBAAkB,CAAC,EAC9FzF,EAAO2C,YAAYgD,MAAQ1B,EAAQ,QAAQ,EAAEjE,EAAO2C,YAAYgD,MAAO,CAAC,EACxE3F,EAAOsvB,iBAAmBtvB,EAAO2C,YAAY2B,SAC7CtE,EAAOkyB,kBAAoB,GAE3Bp0B,EAAWsmB,MAAM,gBAAiB,eAAiBpkB,EAAO2C,YAAYyB,iBAAiB,EAEnFpE,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BkE,SAC1F11B,EAAO4xB,uBAAyB,CAAA,GAGhC5xB,EAAOsvB,iBAAiBmG,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOwxB,0BAA0BmE,0BAC1F31B,EAAO6xB,0CAA4C,CAAA,GAGhB,MAAnC7xB,EAAOsvB,iBAAiBtnB,SACxBhI,EAAOkyB,kBAAkBv3B,KAAKqF,EAAOsvB,iBAAiBtnB,OAAO,EAExB,MAArChI,EAAOsvB,iBAAiBhY,UACxB,IAAK,IAAI7a,EAAI,EAAGA,EAAIuD,EAAOsvB,iBAAiBhY,UAAUzf,OAAQ4E,CAAC,GACvDuD,EAAOsvB,iBAAiBhY,UAAU7a,GAAG2G,IAAMpD,EAAOsvB,iBAAiBtnB,QAAQ5E,IAC3EpD,EAAOkyB,kBAAkBv3B,KAAKqF,EAAOsvB,iBAAiBhY,UAAU7a,EAAE,EAqB9E,IAFA,IAAI25B,EAA+B,EAfnCp2B,EAAO2C,YAAY2B,SAAW,CAC1BlB,GAAMpD,EAAOsvB,iBAAiBlsB,GAC9BiH,KAAQrK,EAAOsvB,iBAAiBjlB,KAChCurB,mBAAsB51B,EAAOsvB,iBAAiBsG,mBAC9CC,YAAe71B,EAAOsvB,iBAAiBuG,YACvCC,WAAc91B,EAAOsvB,iBAAiBwG,WACtCL,YAAez1B,EAAOsvB,iBAAiBmG,YACvCne,UAAatX,EAAOsvB,iBAAiBhY,UACrCye,kBAAqB/1B,EAAOsvB,iBAAiByG,kBAC7CC,sBAAyBh2B,EAAOsvB,iBAAiB0G,sBACjDC,oBAAuBj2B,EAAOsvB,iBAAiB2G,oBAC/CC,gBAAmB3hC,EAAE2hC,gBACrBC,oBAAuB5hC,EAAE4hC,mBAC7B,GAIS15B,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GAAI,CACrEuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG45B,mBAAqBz7B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAC3I1G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG65B,mBAAqB17B,OAAOoF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGiK,yBAAyB,EAE3I,IAAI+vB,EAAuB,CAAA,EAE3B,GAAKz2B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAG3C,CACD3H,EAAO+wB,wBAA0B,CAAA,EAEjC,IAAK,IAAIzmB,EAAI,EAAGA,EAAItK,EAAOiK,qBAAqBpS,OAAQyS,CAAC,GACjDtK,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAASvE,KAAOpD,EAAOiK,qBAAqBK,GAAGlH,KAAIqzB,EAAuB,CAAA,GAGxHA,GAAsBz2B,EAAOiK,qBAAqBtP,KAAKqF,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,QAAQ,CACnH,MAVIyuB,EAA+B,CAAA,CAWvC,CAiBA,GAfKA,GAAuE,IAAvCp2B,EAAOiK,qBAAqBpS,QAAgBmI,EAAO2C,YAAYoD,qBAAqBlO,SAAWmI,EAAOiK,qBAAqB,GAAG2sB,+BAA8B52B,EAAOgxB,wCAA0C,CAAA,GAe9O/M,EAAmBthB,YAAYuC,uBAAyB+e,EAAmBthB,YAAYk0B,8BAAgC5S,EAAmBthB,YAAYk0B,6BAA6B,KACnL72B,EAAO0zB,6BAA+BzP,EAAmBthB,YAAYk0B,6BAA6B,GAE9F72B,EAAOqf,WAAYrf,EAAO0zB,6BAA6BoD,SACvD,IAASr6B,EAAI,EAAGA,EAAIuD,EAAOqf,SAASxnB,OAAQ4E,CAAC,GACzC,IAAK,IAAIqX,EAAI,EAAGA,EAAI9T,EAAO0zB,6BAA6BoD,SAASj/B,OAAQic,CAAC,GAClE9T,EAAOqf,SAAS5iB,GAAG2G,KAAOpD,EAAO0zB,6BAA6BoD,SAAShjB,GAAG1Q,KAAIpD,EAAOqf,SAAS5iB,GAAGs6B,SAAW,CAAA,GAQhI,GAFA/2B,EAAOu0B,oBAAuBv0B,EAAO2C,YAAYmC,gBAAkBC,oBAAoBC,MAAMF,cAAcG,YAAcjF,EAAO2C,YAAYoiB,WAAc/kB,EAAO8Y,KAAK+K,OAAS7jB,EAAOsjB,MAAMhf,UAAYtE,EAAO2C,YAAYq0B,sBAEvN/S,EAAmB/f,kBAAmB,CACtC,OAAOlE,EAAO2C,YAAYS,GAC1B,OAAOpD,EAAO2C,YAAYyB,kBAC1B,OAAOpE,EAAO2C,YAAYs0B,qBAC1B,OAAOj3B,EAAO2C,YAAYk9B,WAC1B,OAAO7/B,EAAO2C,YAAYiF,SAC1B,OAAO5H,EAAO2C,YAAYu0B,YAC1B,OAAOl3B,EAAO2C,YAAYw0B,cAC1B,OAAOn3B,EAAO2C,YAAY6G,YAE1B,IAAS/M,EAAI,EAAGA,EAAIuD,EAAO2C,YAAYoD,qBAAqBlO,OAAQ4E,CAAC,GACjE,OAAOuD,EAAO2C,YAAYoD,qBAAqBtJ,GAAG2G,GAClD,OAAOpD,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkL,SAClD,OAAO3H,EAAO2C,YAAYoD,qBAAqBtJ,GAAGsK,YAClD,OAAO/G,EAAO2C,YAAYoD,qBAAqBtJ,GAAG26B,UAClD,OAAOp3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGgU,UAClD,OAAOzQ,EAAO2C,YAAYoD,qBAAqBtJ,GAAG46B,WAClD,OAAOr3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGkU,YAClD,OAAO3Q,EAAO2C,YAAYoD,qBAAqBtJ,GAAGoJ,YAClD,OAAO7F,EAAO2C,YAAYoD,qBAAqBtJ,GAAGoU,eAClD,OAAO7Q,EAAO2C,YAAYoD,qBAAqBtJ,GAAG66B,kBAClD,OAAOt3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGgY,cAClD,OAAOzU,EAAO2C,YAAYoD,qBAAqBtJ,GAAG86B,mBAClD,OAAOv3B,EAAO2C,YAAYoD,qBAAqBtJ,GAAGk7B,WAOtD1T,EAAmB/f,kBAAoB,IAC3C,CAEAlE,EAAO24B,gBAAgBiE,aAAa,EAEpC77B,EAAkBS,KAAK,+CAA+C,CAC1E,EACA,SAAUpJ,GACN4H,EAAO+yB,YAAc,CAAA,EACrB/yB,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EACA,SAAUsB,GACN4H,EAAOgzB,kBAAoB,CAAA,EAGlB,MADD56B,EAASE,OAET0H,EAAOlJ,aAAe,iHAGtBkJ,EAAOlJ,aAAe,wBAGlC,CACJ,CACR,EAEAkJ,EAAO8iC,qDAAuD,WAC1D/hC,EAAkBG,MAAM,+CAA+C,CAC9E,EAEGlB,EAAO+iC,6BAA+B,WAClC/iC,EAAO00B,4BAA8B,CAAA,EACrC3zB,EAAkBG,MAAM,4BAA4B,CACxD,EAEAlB,EAAOgjC,gCAAkC,WACrCrU,EAA8B,EAC9BmC,EAAc,CAClB,EAEA9wB,EAAOijC,eAAiB,WACpBtU,EAA8B,EAE9BmC,EAAc,CAClB,EAEA9wB,EAAOkjC,cAAgB,WACnBljC,EAAOk1B,qBAAuB,CAACl1B,EAAOk1B,oBAC1C,CAsaJ,EAAE;ACr1GFt2B,UAAU8B,WAAW,qBAAsB,CAAC,aAAc,SAAU,SAAU,eAAgB,WAAY,UAAW,OAAQ,gBAAiB,eAAgB,kBAAmB,kBAAmB,qBAAsB,cAAe,mBAAoB,kBAAmB,oBAAqB,SAAU5C,EAAYkC,EAAQY,EAAQ0tB,EAAc15B,EAAUqP,EAASsqB,EAAM1tB,EAAesiC,EAAcnuB,EAAiB0S,EAAiBzD,EAAoBnjB,EAAasiB,EAAkBc,EAAiBnjB,GAunCjf,SAAS4tB,IACL/5B,EAAS,WACL,IACIuhB,EAAYnW,EAAOojC,YAAYvU,aAAa,EAC5CC,EAAgB9uB,EAAOojC,YAAYrU,iBAAiB,EAAI,QACxDzf,EAAY,EAIhB,GAFAtP,EAAOmP,SAAS3J,WAAawpB,KAAKC,MAAMH,CAAa,EAEjD9uB,EAAOmP,SAAS9J,eAAgB,CACpBrF,EAAOojC,YAAYlU,SAAS,EACxC5f,EAAYtP,EAAOojC,YAAYjU,aAAa,EAAI,GAEhDnvB,EAAOmP,SAAS5J,mBAAqBypB,KAAKC,MAAM3f,CAAS,EAEzD,IAAK,IAAI7S,EAAI,EAAGA,EAAIuD,EAAOmP,SAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAC1D0Z,EAAU1Z,GAAGkmB,WACb3iB,EAAOmP,SAASpJ,qBAAqBtJ,GAAG4mC,0BAA4BltB,EAAU1Z,GAAGkmB,SACjF3iB,EAAOmP,SAASpJ,qBAAqBtJ,GAAG8T,iCAAmC3V,OAAOoF,EAAOmP,SAASpJ,qBAAqBtJ,GAAG4mC,yBAAyB,EAAEznC,OAAO,kBAAkB,EAG1L,MAGI0T,EADe1U,OAAO6mB,SAAS7mB,OAAOoF,EAAOmP,SAASpJ,qBAAqB/F,EAAOmP,SAASpJ,qBAAqBlO,OAAS,GAAGwrC,yBAAyB,EAAE3hB,KAAK9mB,OAAOoF,EAAOmP,SAASpJ,qBAAqB,GAAGs9B,yBAAyB,CAAC,CAAC,EACjNjU,UAAU,EAE/BpvB,EAAOmP,SAAS5J,mBAAqBypB,KAAKC,MAAM3f,CAAS,EAG7D,IAAI2hB,EAAiB,EAErB,GAAI,CAACjxB,EAAOmP,SAASm0B,OACjB,IAAS7mC,EAAI,EAAGA,EAAIuD,EAAO+Z,gBAAgBliB,OAAQ4E,CAAC,GAChD,GAAIuD,EAAOmP,SAASzK,YAAYtB,KAAOpD,EAAO+Z,gBAAgBtd,GAAGiI,YAAYtB,GAAI,CAC7EpD,EAAOmP,SAASm0B,OAAStjC,EAAO+Z,gBAAgBtd,GAChD,KACJ,CAIR,GAAIuD,EAAOmP,SAASm0B,OAAQ,CACxB,GAAItjC,EAAOmP,SAASzK,YAAYtB,KAAOpD,EAAOmP,SAASm0B,OAAO5+B,YAAYtB,IAA+D,uBAAzDpD,EAAOmP,SAASm0B,OAAO9T,WAAWnlB,KAAKxO,YAAY,EAA4B,CAC3J,GAAuE,aAAnEmE,EAAOmP,SAASm0B,OAAO7T,qBAAqBplB,KAAKxO,YAAY,EAC7D,IAAK,IAAI6zB,EAAI,EAAGA,EAAI1vB,EAAOmP,SAASm0B,OAAO3T,cAAc93B,OAAQ63B,CAAC,GAC1DZ,EAAgB9uB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGE,OACpDd,EAAgB9uB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGhiB,GACxDujB,IAAoBjxB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGhiB,GAAK1N,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGE,MAAQ5vB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGI,SAAY9vB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGK,WAG7MkB,IAAoBnC,EAAgB9uB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGE,MAAQ5vB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGI,SAAY9vB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGK,iBAM5L,IAASL,EAAI,EAAGA,EAAI1vB,EAAOmP,SAASm0B,OAAO3T,cAAc93B,OAAQ63B,CAAC,GAC1DpgB,EAAYtP,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGE,OAQpDqB,GAAkBjxB,EAAOmP,SAASm0B,OAAO3T,cAAcD,GAAGK,YAIlEkB,EAAiBjxB,EAAOmP,SAASm0B,OAAOtT,eACxCiB,EAAiBjxB,EAAOmP,SAASm0B,OAAOtT,aAEhD,CAEA,IAAK,IAAIC,EAAI,EAAGA,EAAIjwB,EAAOqa,0BAA0BxiB,OAAQo4B,CAAC,GAAI,CAM9D,IALA,IAAIC,EAAOlwB,EAAOqa,0BAA0B4V,GACxCpU,EAAYqU,EAAKC,UAAU9J,MAAM,IAAI,EACrC+J,EAAcF,EAAuB,mBAAIA,EAAKG,mBAAmBhK,MAAM,IAAI,EAAI,KAC/EiK,EAAkB,CAAA,EAEb1a,EAAI,EAAGA,EAAIsa,EAAKK,aAAa14B,OAAQ+d,CAAC,GAAI,CAC/C,GAAI5V,EAAOmP,SAASzK,YAAYtB,KAAO8sB,EAAKK,aAAa3a,GAAGxS,GACxD,IAAK,IAAI2E,EAAI,EAAGA,EAAI/H,EAAOmP,SAASpJ,qBAAqBlO,OAAQkQ,CAAC,GAAI,CAClE,IAAK,IAYWmpB,EAZPxB,EAAI,EAAGA,EAAI7T,EAAUhkB,OAAQ63B,CAAC,GACnC,GAAI1vB,EAAOmP,SAASpJ,qBAAqBgC,GAAGC,QAAQ6C,SAAShP,YAAY,EAAE40B,WAAW5U,EAAU6T,GAAG7zB,YAAY,CAAC,EAAG,CAC/G,GAAIu0B,EACA,IAAK,IAAI57B,EAAI,EAAGA,EAAI47B,EAAWv4B,OAAQrD,CAAC,GACpC,GAAIwL,EAAOmP,SAASpJ,qBAAqBgC,GAAGC,QAAQ6C,SAAShP,YAAY,EAAE40B,WAAWL,EAAW57B,GAAGqH,YAAY,CAAC,EAAG,CAChHy0B,EAAkB,CAAA,EAClB,KACJ,CAIHA,KACGY,EAA2BD,GAAkBf,EAAKiB,eAAiB,MAExCjB,EAAKkB,QAChCH,GAAkBf,EAAKkB,QAGvBH,GAAkBC,GAI1B,KACJ,CAGJ,GAAIA,EAA0B,KAClC,CAGJ,GAAIA,EAA0B,KAClC,CAEA,GAAIA,EAA0B,KAClC,CAEA,GAAIlxB,EAAOmP,SAASpJ,qBAChB,IAASgC,EAAI,EAAGA,EAAI/H,EAAOmP,SAASpJ,qBAAqBlO,OAAQkQ,CAAC,GAC9D,GAAI/H,EAAOmP,SAASpJ,qBAAqBgC,GAAGV,kBACxC,IAAK,IAAI9S,EAAI,EAAGA,EAAIyL,EAAOmP,SAASpJ,qBAAqBgC,GAAGV,kBAAkBxP,OAAQtD,CAAC,GACnF08B,GAAkBjxB,EAAOmP,SAASpJ,qBAAqBgC,GAAGV,kBAAkB9S,GAAG+S,iBAAiBE,KAMhHxH,EAAOmP,SAASsE,eAAiBxP,EAAQ,QAAQ,EAAEgtB,EAAgB,CAAC,EAM/DjxB,EAAOmP,SAAS/L,KACjBpD,EAAOmP,SAAS3H,KAAOvD,EAAQ,QAAQ,EAAEgtB,EAAgB,CAAC,EAElE,CACJ,CAAC,CACL,CAjwCAjxB,EAAO8Y,KAAOhY,EAAY4X,kBAC1B1Y,EAAOsjB,MAAQve,oBAAoBC,MAAMue,MAErCvjB,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMO,WACrDljB,EAAOO,GAAG,OAAO,EAGrBrD,EAAWsmB,MAAM,gBAAiB,UAAU,EAC5CpkB,EAAOiZ,YAAcmK,EAAiBnK,YAAY,EAClDjZ,EAAOkZ,eAAiBkK,EAAiBlK,eAAe,EACxDlZ,EAAOmZ,cAAgBiK,EAAiBjK,cAAc,EACtDnZ,EAAOozB,gBAAkB,CAAA,EACzBpzB,EAAOlB,UAAY,KACnBkB,EAAOmP,SAAW6F,EAAgB5F,kBAAkB,KAAM,GAAI,EAAG,CAAC,EAClEpP,EAAOojC,YAAc,IAAIvX,UAAUC,OAAOC,KAAKU,IAC/CzsB,EAAO4oB,iBAAmB,KAC1B5oB,EAAOlB,UAAY,KACnBkB,EAAOgU,mBAAqB,KAC5BhU,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAO0sB,WAAa,CAAA,EACpB1sB,EAAOsL,qBAAuB,KAC9BtL,EAAOujC,4BAA8B,CAAA,EACrCvjC,EAAOwjC,eAAiB,CAAA,EACxBxjC,EAAOyjC,iBAAmB,CAAA,EAC1BzjC,EAAOk0B,yBAA2B,UAClCl0B,EAAO0jC,gBAAkB,CAAA,EACzB1jC,EAAOqU,mBAAqB,KAC5BrU,EAAOd,iBAAmB,KAC1Bc,EAAO+Z,gBAAkB,KACzB/Z,EAAO2jC,qCAAuC,GAC9C3jC,EAAOwD,8BAAgC,GACvCxD,EAAO4jC,OAAS,KAChB5jC,EAAOyD,aAAe,KACtBzD,EAAO6jC,kBAAoB,KAC3B7jC,EAAO0D,8BAAgC,KACvC1D,EAAO4zB,WAAa,CAAA,EACpB5zB,EAAO6zB,0BAA4B,CAAA,EACnC7zB,EAAO8zB,YAAc,GACrB9zB,EAAO8jC,eAAiB,KACxB9jC,EAAOi0B,wBAA0B,KACjCj0B,EAAO2sB,YAAc,CAAA,EACrB3sB,EAAOwgC,gBAAkB,KACzBxgC,EAAOqa,0BAA4B,GACnCra,EAAOo1B,YAAc,GACrBp1B,EAAOq1B,gBAAkB,GACzBr1B,EAAOipB,2BAA6B,CAAA,EACpCjpB,EAAOkpB,kCAAoC,CAAA,EAC3ClpB,EAAOmpB,iCAAmC,CACtCC,SAAU,CAAA,EACVzf,MAAO,CAAA,EACP0f,MAAO,IACX,EACArpB,EAAOspB,iCAAmCvkB,oBAAoBC,MAAMukB,iCAEpErF,EAAgB9I,gBAAgB,EAC3B7iB,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,CAC1B,CACJ,EAEJ8rB,EAAgBlJ,mBAAmB,EAC9BziB,KACG,SAAUH,GACN4H,EAAO+Z,gBAAkB3hB,CAC7B,CACJ,EAEJ8rB,EAAgBvI,6BAA6B,EACxCpjB,KACG,SAAUH,GACN4H,EAAOqa,0BAA4BjiB,CACvC,CACJ,EAEyB,EAAzBk2B,EAAahtB,GAAGzJ,QAChBmI,EAAOozB,gBAAkB,CAAA,EAEzBpe,EAAgBrF,YAAY2e,EAAahtB,EAAE,EACtC/I,KACG,WACImvB,EAAgBhS,aAAa,EACxBnd,KACG,WACIyH,EAAOlB,UAAY4oB,EAAgB5oB,UACnCkB,EAAOgU,mBAAqBhU,EAAOlB,UAEnCkB,EAAOmP,SAAW6F,EAAgB7F,SAClCnP,EAAOgU,mBAAqBgB,EAAgBjB,sBAAsB/T,EAAOmP,SAAUnP,EAAOlB,SAAS,EACnGkB,EAAOozB,gBAAkB,CAAA,EACzBpzB,EAAOmP,SAAS9J,eAAiB,CAAA,EAEjCvH,EAAWsmB,MAAM,gBAAiB,YAAcpkB,EAAOmP,SAAShF,cAAc,EAE9E,IAAIkY,EAAQ,CAAA,EAGZ,GAFAriB,EAAO8jC,eAAiB,GAEpB9jC,EAAOmP,SAASvH,SAAU,CAGtB5H,EAAOmP,SAASvH,SAASuE,OAAOnM,EAAO8jC,eAAenpC,KAAKqF,EAAOmP,SAASvH,SAASuE,KAAK,EACzFnM,EAAOmP,SAASvH,SAASm8B,gBAAgB/jC,EAAO8jC,eAAenpC,KAAKqF,EAAOmP,SAASvH,SAASm8B,cAAc,EAE/G,IAAK,IAAItnC,EAAI,EAAGA,EAAIuD,EAAO8jC,eAAejsC,OAAQ4E,CAAC,GAC3CuD,EAAOmP,SAASvH,SAASC,cAAc,IAAM7H,EAAO8jC,eAAernC,IAAMuD,EAAOmP,SAASvH,SAASC,cAAc,GAAGsE,QAAOkW,EAAQ,CAAA,GAGtI,CAACA,GAASriB,EAAOmP,SAASvH,SAASC,cAAc,IAAM7H,EAAOmP,SAASvH,SAASC,cAAc,GAAGsE,OAAOnM,EAAO8jC,eAAenpC,KAAKqF,EAAOmP,SAASvH,SAASC,cAAc,GAAGsE,KAAK,CAC1L,CAEInM,EAAOmP,SAASzK,YAAYwlB,kCAA0G,EAAtElqB,EAAOmP,SAASzK,YAAYwlB,iCAAiCryB,SAC7HmI,EAAOipB,2BAA6B,CAAA,GAGxCjpB,EAAO8jC,eAAenpC,KAAK,2BAA2B,EAEjDqF,EAAOojC,YAAYnW,OAAO,GAAGjtB,EAAOojC,YAAYlW,WAAW,iBAC5D,CACIC,uBAA0B,CAAA,EAC1BC,SAAY,WACRx4B,EAAS,WACLoL,EAAO0sB,WAAa,CAAA,CACxB,CAAC,CACL,CACJ,CAAC,EAEL93B,EAAS,WACLoL,EAAOojC,YAAY5X,cAAc,EACjC,IAAK,IAAI/uB,EAAI,EAAGA,EAAIuD,EAAOmP,SAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAAI,CAClE,IAAI+B,EAAU,CACVnJ,KAAM2f,EAAgBvJ,+BAA+BhP,CAAC,EAAI,IAAMuD,EAAOmP,SAASpJ,qBAAqBtJ,GAAGuL,QAAQ+vB,QAAQ1tB,KACxH2tB,IAAKh4B,EAAOmP,SAASpJ,qBAAqBtJ,GAAGuL,QAAQokB,SACrD6L,IAAKj4B,EAAOmP,SAASpJ,qBAAqBtJ,GAAGuL,QAAQqkB,UACrD6L,OAAQl4B,EAAOmP,SAASpJ,qBAAqBtJ,EACjD,EAEAuD,EAAOojC,YAAYjL,YAAY35B,EAC3B,CACI45B,SAAmB,IAAN37B,EAAUuD,EAAOmP,SAASpJ,qBAAqBtJ,GAAGiK,0BAA4B,KAC3F0mB,SAAY,SAAUlX,GACgC,EAA9ClW,EAAOmP,SAASpJ,qBAAqBlO,QAAcmI,EAAOmP,SAASpJ,qBAAqBlO,SAAWmI,EAAOojC,YAAYvU,aAAa,EAAEh3B,QACrImI,EAAOojC,YAAY7K,cAAc,WAG7B,IAo7BtBtjB,EAAUiB,EAAUyV,EAC9CC,EAv7BgD+C,EAA8B,EAE1B3uB,EAAOmP,SAASvH,UAAY5H,EAAOmP,SAASvH,SAASC,cAAc,IAAM7H,EAAOmP,SAASvH,SAASC,cAAc,GAAGC,oBAo7B7ImN,EAp7ByLjV,EAAOmP,SAASvH,SAo7B/LsO,EAp7ByMlW,EAAOmP,SAASvH,SAASC,cAAc,GAAGC,kBAw7BtR6jB,GAJ6CA,EAp7B4PE,UAAUC,OAAOC,KAAKC,MAAML,aAw7B5SE,UAAUC,OAAOC,KAAKC,MAAMC,YAAYC,IAEtEN,EAAc,gBAAkB3W,EAAS5K,KAAO,SAE5C6L,EAASvO,UAETikB,GAAe,iBAAmB3W,EAASvI,SAAS,GAAGhI,YAAY2F,KAAO,SACtErK,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMO,YAAW8H,GAAe,8CAAgD1V,EAASvO,SAASvE,GAAK,KAAO8S,EAASvO,SAASwC,eAAiB,cAEpMyhB,GADAA,GAAe,sBAAwB1V,EAASvO,SAASQ,6BAA+B,UACzE,sBAAwBvN,OAAOsb,EAAS1M,WAAW,EAAE5N,OAAO,sBAAsB,EAAI,SAErGoE,EAAOojC,YAAYjX,UACfjW,EAASkW,SACTlW,EAASmW,UACT,CAEIC,OAAQpW,EAASvO,SAAS6H,aAAaC,QACvC8c,WAA0E,GAA7DrW,EAASvO,SAAS6H,aAAaC,QAAQrU,QAAQ,SAAS,GAAuE,GAA7D8a,EAASvO,SAAS6H,aAAaC,QAAQrU,QAAQ,SAAS,EAAU,WAAa,UAE9J/F,KAAM4f,EAASvI,SAAS,GAAGhI,YAAY8nB,SACvCZ,YAAaA,EACbD,WAAYA,EACZ4F,gBAAiB,CAAA,CACrB,CACJ,IAIA3F,GADAA,GAAe,iBAAmB3W,EAASvI,SAAS,GAAGhI,YAAY2F,KAAO,UAC3D,sBAAwBzP,OAAOsb,EAAS1M,WAAW,EAAE5N,OAAO,sBAAsB,EAAI,SAErGoE,EAAOojC,YAAYjX,UACfjW,EAASkW,SACTlW,EAASmW,UACT,CAEIC,OArCQ,UAsCRC,WAAY,UACZl3B,KAAM4f,EAASvI,SAAS,GAAGhI,YAAY8nB,SACvCZ,YAAaA,EACbD,WAAYA,EACZ4F,gBAAiB,CAAA,CACrB,CACJ,GAj+B4C,CAAC,CAET,CACJ,CACJ,CACJ,CAEJ,EAAG,GAAI,CACX,CACJ,CACR,EACA,WACIvxB,EAAOozB,gBAAkB,CAAA,CAC7B,CACJ,GAGJx+B,EAAS,WACAoL,EAAOojC,YAAYnW,OAAO,GAAGjtB,EAAOojC,YAAYlW,WAAW,iBAC5D,CACIC,uBAA0B,CAAA,EAC1BC,SAAY,WACRx4B,EAAS,WACLoL,EAAO0sB,WAAa,CAAA,CACxB,CAAC,CACL,CACJ,CAAC,CACT,EAAG,GAAI,EAGX1sB,EAAO6mB,8BAAgC,WACnC,OAAO7R,EAAgBrB,sBAAsB,CACjD,EAEA3T,EAAOgkC,wBAA0B,WACM,MAA/BhkC,EAAOsL,uBACPtL,EAAOujC,4BAA8B,CAAA,EAErCtf,EAAmB5Y,sCAAsC,EACpD9S,KACG,SAAUH,GACN4H,EAAOsL,qBAAuBlT,EAE9B4H,EAAOujC,4BAA8B,CAAA,EAErCxiC,EAAkBS,KAAK,2BAA2B,CACtD,EACA,SAAUpJ,EAAUE,IAGxB,EAEZ,EAEA0H,EAAOikC,+BAAiC,WACpCljC,EAAkBG,MAAM,2BAA2B,CAC1D,EAEGlB,EAAOmnB,qBAAuB,SAAU3oB,GACpC,IAAImN,EAAmB,GAsBvB,OApB4B,OAAxBnN,EAAQqN,aAAgD,KAAxBrN,EAAQqN,cACR,IAA5BF,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQqN,aAGH,OAAzBrN,EAAQuM,cAAkD,KAAzBvM,EAAQuM,eACT,IAA5BY,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQuM,cAGX,OAAjBvM,EAAQsM,MAAkC,KAAjBtM,EAAQsM,OACD,IAA5Ba,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQsM,MAGP,OAArBtM,EAAQqM,UAA0C,KAArBrM,EAAQqM,WACL,IAA5Bc,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQqM,UAGzBc,CACX,EAEA3L,EAAOkkC,gBAAkB,WACrBlkC,EAAOmP,SAASg1B,gBAAkB,CAAA,CACtC,EAEAnkC,EAAOm5B,kBAAoB,WACvBxK,EAA8B,CAClC,EAEA3uB,EAAO88B,yBAA2B,SAAU/0B,EAAGtL,GAE3CuD,EAAOmP,SAASpJ,qBAAuB8lB,UAAU6P,UAAUsB,mBAAmBh9B,EAAOmP,SAASpJ,qBAAsBtJ,EAAIA,EAAI,CAAE,EAE9HuD,EAAOojC,YAAYnG,aAAaxgC,EAAIA,EAAI,EAAI,WACxC,IAAK,IAAIA,EAAI,EAAGA,EAAIuD,EAAOmP,SAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAAI,CAClE,IAAI+B,EAAU,CACVnJ,KAAM2f,EAAgBvJ,+BAA+BhP,CAAC,EAAI,IAAMuD,EAAOmP,SAASpJ,qBAAqBtJ,GAAGuL,QAAQ+vB,QAAQ1tB,KACxH2tB,IAAKh4B,EAAOmP,SAASpJ,qBAAqBtJ,GAAG2vB,SAC7C6L,IAAKj4B,EAAOmP,SAASpJ,qBAAqBtJ,GAAG4vB,UAC7C6L,OAAQl4B,EAAOmP,SAASpJ,qBAAqBtJ,EACjD,EACI49B,EAAU,CACVjC,SAAYp4B,EAAOmP,SAASpJ,qBAAqBtJ,GAAGiK,0BACpD0mB,SAAYuB,CAChB,EAEA3uB,EAAOojC,YAAY7I,eAAe99B,EAAG+B,EAAS67B,CAAO,CACzD,CACJ,CAAC,CACL,EAEAr6B,EAAOk9B,2BAA6B,SAAUn1B,EAAGtL,GAE7CuD,EAAOmP,SAASpJ,qBAAuB8lB,UAAU6P,UAAUsB,mBAAmBh9B,EAAOmP,SAASpJ,qBAAsBtJ,EAAIA,EAAI,CAAE,EAE9HuD,EAAOojC,YAAYnG,aAAaxgC,EAAIA,EAAI,EAAI,WACxC,IAAK,IAAIA,EAAI,EAAGA,EAAIuD,EAAOmP,SAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAAI,CAClE,IAAI+B,EAAU,CACVnJ,KAAM2f,EAAgBvJ,+BAA+BhP,CAAC,EAAI,IAAMuD,EAAOmP,SAASpJ,qBAAqBtJ,GAAGuL,QAAQ+vB,QAAQ1tB,KACxH2tB,IAAKh4B,EAAOmP,SAASpJ,qBAAqBtJ,GAAG2vB,SAC7C6L,IAAKj4B,EAAOmP,SAASpJ,qBAAqBtJ,GAAG4vB,UAC7C6L,OAAQl4B,EAAOmP,SAASpJ,qBAAqBtJ,EACjD,EACI49B,EAAU,CACVjC,SAAmB,IAAN37B,EAAUuD,EAAOmP,SAASpJ,qBAAqBtJ,GAAGiK,0BAA4B,KAC3F0mB,SAAYuB,CAChB,EAEA3uB,EAAOojC,YAAY7I,eAAe99B,EAAG+B,EAAS67B,CAAO,CACzD,CACJ,CAAC,CACL,EAEAr6B,EAAOm9B,yBAA2B,SAAU3xB,GACxCxL,EAAOmP,SAASpJ,qBAAqBrL,OAAO8Q,EAAO,CAAC,EAEpDxL,EAAOojC,YAAYhG,eAAe5xB,CAAK,EAEvCmjB,EAA8B,CAClC,EAEA3uB,EAAOokC,cAAgB,SAAUr8B,EAAGyD,GAC3BzD,EAAEhB,cAAagB,EAAEhB,YAAc,IAE/BgB,EAAEV,oBAAmBU,EAAEV,kBAAoB,IAEhDrH,EAAOmP,SAASpJ,qBAAqBpL,KAAKoN,CAAC,GAEvC,CAAC/H,EAAOmP,SAASzK,aAAe1E,EAAOmP,SAASzK,YAAYyP,MAAQpM,EAAEyE,YAAY9H,YAAYyP,SAAOnU,EAAOmP,SAASzK,YAAcqD,EAAEyE,YAAY9H,aAEjJlG,EAAU,CACVnJ,KAAM4uB,EAAmBxY,+BAA+B1D,CAAC,EAAI,IAAMA,EAAEC,QAAQ+vB,QAAQ1tB,KACrF2tB,IAAKjwB,EAAEqkB,SACP6L,IAAKlwB,EAAEskB,UACP6L,OAAQnwB,CACZ,EAEA/H,EAAOmP,SAAS9J,eAAiB,CAAA,EAE5BrF,EAAOojC,YAAYnW,OAAO,GAAGjtB,EAAOojC,YAAYlW,WAAW,iBAC5D,CACIC,uBAA0B,CAAA,EAC1BC,SAAY,SAAUlX,GAClBthB,EAAS,WACLoL,EAAO0sB,WAAa,CAAA,CACxB,CAAC,CACL,CACJ,CAAC,EAE+C,IAAhD1sB,EAAOmP,SAASpJ,qBAAqBlO,OACrCmI,EAAOojC,YAAYjL,YAAY35B,EAC3B,CACI45B,SAAYp4B,EAAOmP,SAASpJ,qBAAqB,GAAGW,0BACpD0mB,SAAY,WACRptB,EAAOojC,YAAY7K,cAAc5J,CAA6B,CAClE,CACJ,CACJ,EAGA3uB,EAAOojC,YAAYjL,YAAY35B,EAC3B,CACI4uB,SAAY,WACRptB,EAAOojC,YAAY7K,cAAc5J,CAA6B,CAClE,CACJ,CACJ,CAER,EAEA3uB,EAAO8S,aAAe,WAClB9S,EAAOwjC,eAAiB,CAAA,EACxBxjC,EAAOlJ,aAAe,KAGtB,GAAIkJ,EAAOmP,SAASpJ,qBAAqBlO,OAAS,EAG9C,OAFAmI,EAAOwjC,eAAiB,CAAA,EAEjB,EADPxjC,EAAOlJ,aAAe,iEAI1B,IAAK,IAAI2F,EAAI,EAAGA,EAAIuD,EAAOmP,SAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAC1DuD,EAAOmP,SAASpJ,qBAAqBtJ,GAAG4nC,kBACxCrkC,EAAOwD,8BAA8B7I,KAAKqF,EAAOmP,SAASpJ,qBAAqBtJ,EAAE,EAIzFuY,EAAgBlC,aAAa9S,EAAOwgC,eAAe,EAC9CjoC,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAElC7K,KACG,WAII,GAHAyH,EAAOwjC,eAAiB,CAAA,EACxBxjC,EAAOmP,SAAW6F,EAAgB7F,SAE9BnP,EAAOwD,+BAA+E,EAA9CxD,EAAOwD,8BAA8B3L,OAC7E,IAAI,IAAI4E,EAAI,EAAGA,EAAIuD,EAAOwD,8BAA8B3L,OAAQ4E,CAAC,GAAG,CAChE,GAAyF,eAAtFuD,EAAOwD,8BAA8B/G,GAAG2N,uBAAuBC,KAAKxO,YAAY,GAAsBmE,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS0xB,sBAAsB,CACxLj1B,EAAkBS,KAAK,kBAAkB,EACzC,KACJ,CACK,GAAyF,aAAtFxB,EAAOwD,8BAA8B/G,GAAG2N,uBAAuBC,KAAKxO,YAAY,GAAoBmE,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS2xB,oBAAoB,CACzLl1B,EAAkBS,KAAK,kBAAkB,EACzC,KACJ,CACJ,CAIR,EACA,SAAUpJ,GACN4H,EAAOwjC,eAAiB,CAAA,EACxBxjC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EACA,SAAUsB,GACN4H,EAAOwjC,eAAiB,CAAA,EAGf,MADDprC,EAASE,OAET0H,EAAOlJ,aAAe,8GAGtBkJ,EAAOlJ,aAAe,wBAGlC,CACJ,CACR,EAEAkJ,EAAO0T,eAAiB,WACpB1T,EAAOyjC,iBAAmB,CAAA,EAC1BzjC,EAAOlJ,aAAe,KAEtBke,EAAgBtB,eAAe,EAC1Bnb,KACG,SAAU4W,GACNpO,EAAkBG,MAAM,+BAA+B,EAEvDN,EAAOO,GAAG,gBAAgB,CAC9B,EACA,SAAU/I,GACN4H,EAAOyjC,iBAAmB,CAAA,EAGjB,MADDrrC,EAASE,OAET0H,EAAOlJ,aAAesB,EAAS7B,KAAKkqC,QAGpCzgC,EAAOlJ,aAAe,wBAGlC,CACJ,CACR,EAEAkJ,EAAOoqB,eAAiB,SAAUnW,GAC1BjU,EAAOmP,SAASvH,UAAY5H,EAAOmP,SAASvH,SAASxE,KAAO6Q,EAAE7Q,KAC9D4R,EAAgB7F,SAASkb,OAAS,CAAA,EAClCrqB,EAAOmP,SAASkb,OAAS,CAAA,GAG7B,IAAIhI,EAAQ,CAAA,EAGZ,GAFAriB,EAAO8jC,eAAiB,GAEpB9jC,EAAO4oB,kBAAoB5oB,EAAO4oB,iBAAiBxlB,KAAO6Q,EAAE7Q,GAC5DpD,EAAO4oB,iBAAmB,KAC1B5oB,EAAOipB,2BAA6B,CAAA,MAEnC,CACDjpB,EAAO4oB,iBAAmB3U,EAC1BjU,EAAOipB,2BAA6B,CAAA,EAEhCjpB,EAAO4oB,iBAAiBzc,OAAOnM,EAAO8jC,eAAenpC,KAAKqF,EAAO4oB,iBAAiBzc,KAAK,EACvFnM,EAAO4oB,iBAAiBmb,gBAAgB/jC,EAAO8jC,eAAenpC,KAAKqF,EAAO4oB,iBAAiBmb,cAAc,EAE7G,IAAK,IAAItnC,EAAI,EAAGA,EAAIuD,EAAO8jC,eAAejsC,OAAQ4E,CAAC,GAC3CuD,EAAO4oB,iBAAiB/gB,cAAc,IAAM7H,EAAO8jC,eAAernC,IAAMuD,EAAO4oB,iBAAiB/gB,cAAc,GAAGsE,QAAOkW,EAAQ,CAAA,GAGpI,CAACA,GAASriB,EAAO4oB,iBAAiB/gB,cAAc,IAAM7H,EAAO4oB,iBAAiB/gB,cAAc,GAAGsE,OAAOnM,EAAO8jC,eAAenpC,KAAKqF,EAAO4oB,iBAAiB/gB,cAAc,GAAGsE,KAAK,CACvL,CAEAnM,EAAO8jC,eAAenpC,KAAK,2BAA2B,CAC1D,EAEAqF,EAAOsqB,eAAiB,WAMpBvpB,EAAkBS,KAAK,mBAAmB,EAC1CT,EAAkBG,MAAM,0BAA0B,EAClDlB,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,KAEvCvV,EAAgB7F,SAASvH,SAAW5H,EAAO4oB,iBAC3C5T,EAAgB7F,SAASkb,OAAS,CAAA,EAClC,OAAOrV,EAAgB7F,SAAS8D,2BAEhCjT,EAAOmP,SAASvH,SAAW5H,EAAO4oB,iBAClC5oB,EAAOmP,SAASkb,OAAS,CAAA,EACzB,OAAOrqB,EAAOmP,SAAS8D,2BAEvB+B,EAAgBlC,aAAa,EACxBva,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOmP,SAAW6F,EAAgB7F,SAElC,IAAIkT,EAAQ,CAAA,EAGZ,GAFAriB,EAAO8jC,eAAiB,GAEpB9jC,EAAOmP,SAASvH,SAAU,CAGtB5H,EAAOmP,SAASvH,SAASuE,OAAOnM,EAAO8jC,eAAenpC,KAAKqF,EAAOmP,SAASvH,SAASuE,KAAK,EACzFnM,EAAOmP,SAASvH,SAASm8B,gBAAgB/jC,EAAO8jC,eAAenpC,KAAKqF,EAAOmP,SAASvH,SAASm8B,cAAc,EAE/G,IAAK,IAAItnC,EAAI,EAAGA,EAAIuD,EAAO8jC,eAAejsC,OAAQ4E,CAAC,GAC3CuD,EAAOmP,SAASvH,SAASC,cAAc,IAAM7H,EAAO8jC,eAAernC,IAAMuD,EAAOmP,SAASvH,SAASC,cAAc,GAAGsE,QAAOkW,EAAQ,CAAA,GAGtI,CAACA,GAASriB,EAAOmP,SAASvH,SAASC,cAAc,IAAM7H,EAAOmP,SAASvH,SAASC,cAAc,GAAGsE,OAAOnM,EAAO8jC,eAAenpC,KAAKqF,EAAOmP,SAASvH,SAASC,cAAc,GAAGsE,KAAK,CAC1L,CAEAnM,EAAO8jC,eAAenpC,KAAK,2BAA2B,EAEtDoG,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,GACN4H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CAER,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CACR,EAEAvqB,EAAOwqB,sBAAwB,WAC3B,GAAIxqB,EAAO8oB,iBAAiBlhB,UAAY5H,EAAO8oB,iBAAiBlhB,SAASxE,KAAOpD,EAAOspB,iCAAiClmB,GAGpH,OAFArC,EAAkBG,MAAM,mBAAmB,EAC3CH,EAAkBS,KAAK,0BAA0B,EAC1C,CAAA,EAGPxB,EAAOsqB,eAAe,CAE9B,EAEAtqB,EAAOyqB,qBAAuB,SAAUhoB,GAIpC,OAHA1B,EAAkBG,MAAM,0BAA0B,EAClDH,EAAkBS,KAAK,mBAAmB,EACtCiB,GAAQA,EAAO7J,gBAAgB,EAC5B,CAAA,CACX,EAEAoH,EAAO0qB,2BAA6B,WAEhC,OADA3pB,EAAkBG,MAAM,0BAA0B,EAC3C,CAAA,CACX,EAEAlB,EAAO2qB,sCAAwC,WAG3C,GAFA3qB,EAAOuqB,8BAAgC,KAEnC3vB,OAAOoF,EAAOmP,SAASpJ,qBAAqB,GAAGW,yBAAyB,EAAEu4B,SAASrkC,OAAO,EAAG,KAAK,EAClGoF,EAAOuqB,8BAAgC,+DAD3C,CAKAvqB,EAAOkpB,kCAAoC,CAAA,EAC3ClpB,EAAOmpB,iCAAiCxf,MAAQ,CAAA,EAChD3J,EAAOmpB,iCAAiCE,MAAQ,GAIhD,IAHA,IAAIlZ,EAAuB,GACvBya,EAAoB,CAAA,EAEfnuB,EAAI,EAAGA,EAAIuD,EAAOmP,SAASpJ,qBAAqBlO,OAAQ4E,CAAC,GAK9D,GAJ2E,YAAvEuD,EAAOmP,SAASpJ,qBAAqBtJ,GAAG2N,uBAAuBC,MAAsBrK,EAAOmP,SAASpJ,qBAAqBtJ,GAAGyN,QAC7HlK,EAAOmpB,iCAAiCxf,MAAQ,CAAA,GAGjB,GAA/BwG,EAAqBtY,OACrBsY,EAAqBxV,KAAKqF,EAAOmP,SAASpJ,qBAAqBtJ,GAAG+P,WAAW,MAE5E,CAGD,IAAK,IAFLoe,EAAoB,CAAA,EAEXtgB,EAAI,EAAGA,EAAI6F,EAAqBtY,OAAQyS,CAAC,GAC1CtK,EAAOmP,SAASpJ,qBAAqBtJ,GAAG+P,YAAYpJ,IAAM+M,EAAqB7F,GAAGlH,KAClFwnB,EAAoB,CAAA,GAIvBA,GAAmBza,EAAqBxV,KAAKqF,EAAOmP,SAASpJ,qBAAqBtJ,GAAG+P,WAAW,CACzG,CAGJ,IAASlC,EAAI,EAAGA,EAAI6F,EAAqBtY,OAAQyS,CAAC,GACa,EAAvDtK,EAAOmpB,iCAAiCE,MAAMxxB,SAAYmI,EAAOqpB,OAAS,SAE9ErpB,EAAOmpB,iCAAiCE,OAASlZ,EAAqB7F,GAAG3F,gBAhC7E,CAkCJ,EAEA3E,EAAO6qB,+BAAiC,WACpC7qB,EAAOkpB,kCAAoC,CAAA,CAC/C,EAEAlpB,EAAOqT,gCAAkC,WACrCrT,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,KACvCvqB,EAAOkpB,kCAAoC,CAAA,EAE3ClpB,EAAOmP,SAAS8D,2BAA6B,GAC7CjT,EAAOmP,SAAS8D,2BAA2BtY,KAAKqF,EAAOmpB,gCAAgC,EAEvFnU,EAAgB3B,gCAAgCrT,EAAOmP,QAAQ,EAC1D5W,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOmP,SAAW6F,EAAgB7F,SAElCpO,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,GACN4H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CAER,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CACR,EAEAvqB,EAAO8qB,4BAA8B,WACjC9qB,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,KACvCvqB,EAAOkpB,kCAAoC,CAAA,EAE3ClU,EAAgB1B,oCAAoCtT,EAAOmP,QAAQ,EAC9D5W,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOmP,SAAW6F,EAAgB7F,SAElCpO,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,GACN4H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CAER,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CACR,EAEAvqB,EAAO+qB,4BAA8B,WACjC/qB,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,KACvCvqB,EAAOkpB,kCAAoC,CAAA,EAE3ClU,EAAgBzB,oCAAoCvT,EAAOmP,QAAQ,EAC9D5W,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOmP,SAAW6F,EAAgB7F,SAElCpO,EAAkBG,MAAM,mBAAmB,CAC/C,EACA,SAAU9I,GACN4H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CAER,EACA,SAAUnyB,EAAUE,GAChB0H,EAAO+oB,kBAAoB,CAAA,EAC3B/oB,EAAOuqB,8BAAgC,wBAC3C,CACJ,CACR,EAEAvqB,EAAOoT,aAAe,WAClBpT,EAAO0jC,gBAAkB,CAAA,EACzB1uB,EAAgB7F,SAASkb,OAAS,CAAA,EAElCrV,EAAgBlC,aAAa,EACxBva,KACG,SAAU4W,GACN6F,EAAgBrF,YAAYR,EAAS/L,EAAE,EAClC7K,KACG,WACIyH,EAAOmP,SAAW6F,EAAgB7F,SAClCnP,EAAO0jC,gBAAkB,CAAA,EAEzBY,GAAG,aAAc,OAAO,CAC5B,EACA,SAAUlsC,IAGd,CACR,EACA,SAAUA,EAAUE,IAGxB,CACR,EAEA0H,EAAOirB,kBAAoB,WACvBlqB,EAAkBG,MAAM,YAAY,CACxC,EAEAlB,EAAOmiC,cAAgB,SAAU9tB,GAC7BrU,EAAOqU,mBAAqBA,EAE5BtT,EAAkBS,KAAK,gCAAgC,CAC3D,EAEAxB,EAAOukC,iCAAmC,WACtCxjC,EAAkBG,MAAM,gCAAgC,CAC5D,EAEAlB,EAAOoiC,gBAAkB,SAAU/tB,GAC/BrU,EAAOqU,mBAAqBA,EAC5BrU,EAAOo1B,YAAc,GAErB,IAAK,IAAI34B,EAAI,EAAGA,EAAIuD,EAAOqU,mBAAmBmjB,YAAY3/B,OAAQ4E,GAAK,EACnEuD,EAAOo1B,YAAYz6B,KAAKqF,EAAOqU,mBAAmBmjB,YAAY6K,MAAM5lC,EAAGA,EAAI,CAAC,CAAC,EAGjFsE,EAAkBS,KAAK,kCAAkC,CAC7D,EAEAxB,EAAOsiC,mCAAqC,WACxCvhC,EAAkBG,MAAM,kCAAkC,CAC9D,EAEAlB,EAAOuiC,oBAAsB,SAAUluB,GACnCrU,EAAOqU,mBAAqBA,EAC5BrU,EAAOq1B,gBAAkB,GAEzB,IAAK,IAAI54B,EAAI,EAAGA,EAAIuD,EAAOqU,mBAAmBojB,gBAAgB5/B,OAAQ4E,GAAK,EACvEuD,EAAOq1B,gBAAgB16B,KAAKqF,EAAOqU,mBAAmBojB,gBAAgB4K,MAAM5lC,EAAGA,EAAI,CAAC,CAAC,EAGzFsE,EAAkBS,KAAK,sCAAsC,CACjE,EAEAxB,EAAOwiC,uCAAyC,WAC5CzhC,EAAkBG,MAAM,sCAAsC,CAClE,EAEAlB,EAAOwkC,sBAAwB,WAC3BzjC,EAAkBS,KAAK,sBAAsB,CACjD,EAEAxB,EAAOykC,uBAAyB,WAC5B1jC,EAAkBG,MAAM,sBAAsB,CAClD,EAEAlB,EAAO0kC,iCAAmC,WACtC3jC,EAAkBS,KAAK,iCAAiC,CAC5D,EAEAxB,EAAO2kC,kCAAoC,WACvC5jC,EAAkBG,MAAM,iCAAiC,CAC7D,EAEAlB,EAAO4kC,mBAAqB,WACxB5kC,EAAO8oB,iBAAmB9oB,EAAOmP,SACjCnP,EAAOkpB,kCAAoC,CAAA,EAE3CnoB,EAAkBS,KAAK,mBAAmB,CAC9C,EAEAxB,EAAOmqB,oBAAsB,WACzBppB,EAAkBG,MAAM,mBAAmB,CAC/C,EAEAlB,EAAO6kC,+BAAiC,WACpC9jC,EAAkBS,KAAK,+BAA+B,CAC1D,EAEAxB,EAAO8kC,gCAAkC,WACrC/jC,EAAkBG,MAAM,+BAA+B,CAC3D,EAEAlB,EAAOmN,UAAY,WACfnN,EAAO4zB,WAAa,CAAA,EACpB5zB,EAAO6zB,0BAA4B,CAAA,EAEnC9yB,EAAkBS,KAAK,mBAAmB,EAE1CwT,EAAgB7H,UAAUnN,EAAOmP,SAAS/L,EAAE,EACvC7K,KACG,SAAUH,GAGN,IAFA,IACIguB,EAAqBhuB,EAAS+N,QAAQ,qBAAqB,EAAEkgB,MAAM,GAAG,EACjE5pB,EAAI,EAAGA,EAAI2pB,EAAmBvuB,OAAQ4E,CAAC,GACK,GAA7C2pB,EAAmB3pB,GAAGrB,QAAQ,UAAU,GAC5BgrB,EAAmB3pB,GAAG4pB,MAAM,GAAG,EAC1B,GAAGnf,QAAQ,IAAK,EAAE,EAGvCkX,EAAO,IAAIkI,KAAK,CAACluB,EAAS7B,MAAO,CAAEY,KAAM,iBAAkB,CAAC,EAC5DgqC,EAAU5hC,OAAO6hC,IAAIC,gBAAgBjjB,CAAI,EAC7Cpe,EAAOszB,OAAS/E,EAAK+S,mBAAmBH,CAAO,CAOnD,EACA,SAAU/oC,IAGd,CACR,EAEA4H,EAAOyhC,oBAAsB,WACrBzhC,EAAO8zB,YAAYiR,gBACqB,4BAApC/kC,EAAO8zB,YAAYiR,gBAA6C/kC,EAAO8zB,YAAYpmB,GAAK1N,EAAO8zB,YAAYiR,eACtE,8BAArC/kC,EAAO8zB,YAAYiR,iBAA+C/kC,EAAO8zB,YAAYpmB,GAAK,GAEtG,EAEA1N,EAAOglC,oBAAsB,WACzBjkC,EAAkBG,MAAM,mBAAmB,CAClD,EAEGlB,EAAOilC,eAAiB,SAAU91B,EAAUkF,EAAoB6wB,EAAcviB,GAS1E,IAAIptB,EAAW,GAIPA,EADC,qBADD2vC,EAAarpC,YAAY,EAEd,gDAGA,mEAIfwF,EAAQ,IAAI8hC,EAAa,CAGzBttC,MAAO,kBAEPsvC,QAAS,CAAA,EAETC,aAAc,CAAA,EAEdC,YAAa9vC,EAEb+vC,aAAc,CACVn2B,SAAUA,EACVkF,mBAAoBA,EACpB6wB,aAAcA,EACdhmC,iBAAkByjB,EAClB4iB,mBAAoB,CAAA,EACpBpmC,eAAgB,WACZ,GAAItB,KAAK0nC,mBACLlxB,EAAmB+iB,UAAY,CAAA,EAC/B/iB,EAAmB5D,UAAY7V,OAAOiD,KAAKqB,gBAAgB,EAC3DmV,EAAmBgjB,WAAa,CAAA,EAChChjB,EAAmB1D,YAAc/V,OAAOiD,KAAKqB,gBAAgB,EAC7DmV,EAAmBgwB,iBAAmB,CAAA,EACtChwB,EAAmBxO,YAAc,CAAA,EACjCwO,EAAmBxD,eAAiBjW,OAAOiD,KAAKqB,gBAAgB,OAGhE,OAAQgmC,EAAarpC,YAAY,GAC7B,IAAK,mBACDsT,EAASq2B,eAAiB,CAAA,EAC1Br2B,EAASs2B,iBAAmB7qC,OAAOiD,KAAKqB,gBAAgB,EACxD,MACJ,IAAK,YACDmV,EAAmB+iB,UAAY,CAAA,EAC/B/iB,EAAmB5D,UAAY7V,OAAOiD,KAAKqB,gBAAgB,EAC3D,MACJ,IAAK,cACDmV,EAAmBgjB,WAAa,CAAA,EAChChjB,EAAmB1D,YAAc/V,OAAOiD,KAAKqB,gBAAgB,EAC7D,MACJ,IAAK,iBACDmV,EAAmBgwB,iBAAmB,CAAA,EACtChwB,EAAmBxO,YAAc,CAAA,EACjCwO,EAAmBxD,eAAiBjW,OAAOiD,KAAKqB,gBAAgB,CAExE,CAGJmC,EAAMqkC,WAAW,EAEjB9wC,EAAS,WACLyM,EAAMskC,QAAQ,CAClB,EAAG,GAAI,CACX,EACAC,cAAe,WACX,OAAQV,EAAarpC,YAAY,GAC7B,IAAK,mBACDsT,EAASq2B,eAAiB,CAAA,EAC1Br2B,EAASs2B,iBAAmB,KAC5B,MACJ,IAAK,YACDpxB,EAAmB+iB,UAAY,CAAA,EAC/B/iB,EAAmB5D,UAAY,KAC/B,MACJ,IAAK,cACD4D,EAAmBgjB,WAAa,CAAA,EAChChjB,EAAmB1D,YAAc,KACjC,MACJ,IAAK,iBACD0D,EAAmBgwB,iBAAmB,CAAA,EACtChwB,EAAmBxO,YAAc,CAAA,EACjCwO,EAAmBxD,eAAiB,IAE5C,CAEAxP,EAAMqkC,WAAW,EAEjB9wC,EAAS,WACLyM,EAAMskC,QAAQ,CAClB,EAAG,GAAI,CACX,EACAzkC,MAAO,WACHG,EAAMqkC,WAAW,EAEjB9wC,EAAS,WACLyM,EAAMskC,QAAQ,CAClB,EAAG,GAAI,CACX,CACJ,CACJ,CAAC,EACDtkC,EAAMwkC,SAAS,CACnB,EAEA7lC,EAAO8lC,oBAAsB,WACzB9lC,EAAOmP,SAAS3H,KAAOvD,EAAQ,QAAQ,EAAEjE,EAAOmP,SAASsE,eAAgB,CAAC,CAC9E,EAEAzT,EAAO2D,oBAAsB,WACzB,IAAK,IAAIlH,EAAI,EAAGA,EAAIuD,EAAOwD,8BAA8B3L,OAAQ4E,CAAC,GAC9D,GAAI,CAACuD,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS6xB,qBAAuB,CAACn2B,EAAOwD,8BAA8B/G,GAAG+P,YAAYJ,oBAC1I,MAAO,CAAA,EAIf,MAAO,CAAA,CACX,EAEApM,EAAO4D,WAAa,WAIhB,IAHA,IAAI6J,EAGKhR,EAAI,EAAGA,EAAIuD,EAAOwD,8BAA8B3L,OAAQ4E,CAAC,GAC9DgR,EAAMzN,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS6xB,qBAAuB,CAACn2B,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS4xB,gBAAmBl2B,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS6xB,oBAAsBn2B,EAAOwD,8BAA8B/G,GAAG+P,YAAYJ,oBAElT4I,EAAgBN,mBAAmBjH,EAAIzN,EAAOwD,8BAA8B/G,EAAE,EAGlFuD,EAAOwD,8BAAgC,GAEvCzC,EAAkBG,MAAM,kBAAkB,CAC9C,EAEAlB,EAAO6D,WAAa,WAChB7D,EAAO4jC,OAAS,GAIhB,IAFA,IAAI3lC,EAEKxB,EAHTuD,EAAO6jC,kBAAoB,EAGXpnC,EAAIuD,EAAOwD,8BAA8B3L,OAAQ4E,CAAC,GAC9DwB,EAAO+W,EAAgBZ,2BAA2BpU,EAAOwD,8BAA8B/G,GAAIuD,EAAOmP,QAAQ,EAE1GnP,EAAO4jC,OAAOjpC,KAAK,CACforC,mBAAoB/lC,EAAOwD,8BAA8B/G,GACzDiR,GAAK1N,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS6xB,qBAAuB,CAACn2B,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS4xB,gBAAmBl2B,EAAOwD,8BAA8B/G,GAAG+P,YAAYlI,SAAS6xB,oBAAsBn2B,EAAOwD,8BAA8B/G,GAAG+P,YAAYJ,oBACjTwB,KAAM3P,EACN+nC,KAAM,IACV,CAAC,EAGLhmC,EAAOyD,aAAezD,EAAO4jC,OAAO5jC,EAAO6jC,kBAC/C,EAEA7jC,EAAO8D,UAAY,WAGf,IAFA9D,EAAO0D,8BAAgC,OAEnC1D,EAAOyD,aAAaiK,IAAgD,IAAlC1N,EAAOyD,aAAaiK,GAAG7V,OAEzD,MAAO,EADPmI,EAAO0D,8BAAgC,mCAM3C,GAFA1D,EAAOyD,aAAauiC,KAAO,CAAA,EAEvBhmC,EAAO6jC,oBAAuB7jC,EAAOwD,8BAA8B3L,OAAS,EAAI,CAChFmI,EAAOwD,8BAAgC,GAEvC,IAAK,IAAI/G,EAAI,EAAGA,EAAIuD,EAAO4jC,OAAO/rC,OAAQ4E,CAAC,GACnCuD,EAAO4jC,OAAOnnC,GAAGupC,MAAMhxB,EAAgBN,mBAAmB1U,EAAO4jC,OAAOnnC,GAAGiR,GAAI1N,EAAO4jC,OAAOnnC,GAAGspC,kBAAkB,EAG1HhlC,EAAkBG,MAAM,kBAAkB,CAC9C,MAEIlB,EAAO6jC,iBAAiB,GACxB7jC,EAAOyD,aAAezD,EAAO4jC,OAAO5jC,EAAO6jC,kBAEnD,EAEA7jC,EAAO+D,cAAgB,WAGnB,GAFA/D,EAAOyD,aAAauiC,KAAO,CAAA,EAEvBhmC,EAAO6jC,oBAAuB7jC,EAAOwD,8BAA8B3L,OAAS,EAAI,CAChFmI,EAAOwD,8BAAgC,GAEvC,IAAK,IAAI/G,EAAI,EAAGA,EAAIuD,EAAO4jC,OAAO/rC,OAAQ4E,CAAC,GACnCuD,EAAO4jC,OAAOnnC,GAAGupC,MAAMhxB,EAAgBN,mBAAmB1U,EAAO4jC,OAAOl2B,GAAI1N,EAAO4jC,OAAOnnC,GAAGspC,kBAAkB,EAGvHhlC,EAAkBG,MAAM,kBAAkB,CAC9C,MAEIlB,EAAO6jC,iBAAiB,GACxB7jC,EAAOyD,aAAezD,EAAO4jC,OAAO5jC,EAAO6jC,kBAEnD,EAEA7jC,EAAOgE,eAAiB,WACpBhE,EAAOwD,8BAAgC,GAEvCzC,EAAkBG,MAAM,kBAAkB,CAC9C,EAEAlB,EAAOwhC,uBAAyB,WAC5BxhC,EAAO4zB,WAAa,CAAA,EACpB5zB,EAAO6zB,0BAA4B,CAAA,CACvC,EAEA7zB,EAAOwN,gBAAkB,WACrBxN,EAAOi0B,wBAA0B,KAEjCjf,EAAgBxH,gBAAgBxN,EAAO8zB,YAAYpmB,GAAI1N,EAAO8zB,YAAYlmB,KAAM5N,EAAOmP,QAAQ,EAE/FpO,EAAkBG,MAAM,mBAAmB,CAC/C,EAEAlB,EAAOimC,gBAAkB,SAAU5xB,GAC/BrU,EAAOqU,mBAAqBA,EAE5BtT,EAAkBS,KAAK,gBAAgB,CAC3C,EAEAxB,EAAOkmC,iBAAmB,WACtBnlC,EAAkBG,MAAM,gBAAgB,CAC/C,EAEGlB,EAAO2tB,cAAgB,WACf3tB,EAAO2sB,aACP3sB,EAAOojC,YAAYxV,cAAc,EACjC5tB,EAAO2sB,YAAc,CAAA,IAGrB3sB,EAAOojC,YAAYzW,YAAY,EAC/B3sB,EAAO2sB,YAAc,CAAA,EAE7B,EAEA3sB,EAAOwnB,gBAAkB,SAAUnT,GAC/B,IAAI7L,EAAe,GAanB,OAXI6L,EAAmB7H,YAAYG,gBAC/BnE,EAAe6L,EAAmB7H,YAAYG,eAAetC,KAEzDgK,EAAmB7H,YAAYG,eAAe2F,KAAkE,EAA3D+B,EAAmB7H,YAAYG,eAAe2F,IAAIza,SAAY2Q,GAAgB,KAAO6L,EAAmB7H,YAAYG,eAAe2F,IAAM,OAGlM9J,EAAe6L,EAAmB7H,YAAYlI,SAAS+F,KAEnDgK,EAAmB7H,YAAYlI,SAASgO,KAA4D,EAArD+B,EAAmB7H,YAAYlI,SAASgO,IAAIza,SAAY2Q,GAAgB,KAAO6L,EAAmB7H,YAAYlI,SAASgO,IAAM,MAG7K9J,CACX,CAgMJ,EAAE;ACnwCF1J,UAAU4B,WAAW,sBAAuB,CAAC,aAAc,SAAU,QAAS,UAAW,SAAU,gBAAiB,cAAe,kBAAmB,kBAAmB,mBAAoB,gBAAiB,SAAU5C,EAAYkC,EAAQtL,EAAOuP,EAASrD,EAAQC,EAAeC,EAAa4mB,EAAiBxD,EAAiBd,EAAkB+iB,GAC3UrlC,EAAY4X,mBACb9X,EAAOO,GAAG,OAAO,EAGrBnB,EAAO8Y,KAAOhY,EAAY4X,kBAC1B1Y,EAAOsjB,MAAQve,oBAAoBC,MAAMue,MACzCvjB,EAAOiZ,YAAcmK,EAAiBnK,YAAY,EAClDjZ,EAAOkZ,eAAiBkK,EAAiBlK,eAAe,EACxDlZ,EAAOmZ,cAAgBiK,EAAiBjK,cAAc,EAElDnZ,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMO,WACrDljB,EAAOO,GAAG,OAAO,EAGrBrD,EAAWsmB,MAAM,gBAAiB,WAAW,EAC7CpkB,EAAOlB,UAAY,KACnBkB,EAAOiV,SAAW,KAClBjV,EAAO2Z,cAAgB,KACvB3Z,EAAO4Z,qBAAuB,KAC9B5Z,EAAOuD,SAAW,KAClBvD,EAAO6Z,kBAAoB,KAC3B7Z,EAAOga,aAAe,KACtBha,EAAOomC,gBAAkB,KACzBpmC,EAAOqmC,QAAU,KACjBrmC,EAAOsmC,aAAe,GACtBtmC,EAAOqkB,OAAS,OAChBrkB,EAAOumC,WAAa,GACpBvmC,EAAOka,aAAe,KACtBla,EAAOwmC,UAAY,KACnBxmC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EAChBzmC,EAAO0mC,iBAAmB,CAAA,EAC1B1mC,EAAO2mC,gBAAkB,CAAA,EACzB3mC,EAAO4mC,MAAQ,KACf5mC,EAAO6mC,eAAiB,KACxB7mC,EAAO8mC,UAAY,KAUnB5iB,EAAgB1J,iBAAiB,EAC5BjiB,KACG,SAAUH,GACN4H,EAAO2Z,cAAgBvhB,CAC3B,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgBpJ,YAAY,EACvBviB,KACG,SAAUH,GACN4H,EAAOuD,SAAWnL,CACtB,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgBvJ,qBAAqB,EAChCpiB,KACG,SAAUH,GACN4H,EAAO6Z,kBAAoBzhB,CAC/B,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgB9I,gBAAgB,EAC3B7iB,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,CAC1B,EACA,SAAUA,EAAUE,IAG5B,EAEA4rB,EAAgBzJ,wBAAwB,EACnCliB,KACG,SAAUH,GACN4H,EAAO4Z,qBAAuBxhB,CAClC,EACA,SAAUA,EAAUE,IAGxB,EAEJ0H,EAAO6V,gBAAkB,WACrB7V,EAAOlB,UAAY,KACnBkB,EAAO0mC,iBAAmB,CAAA,EAE1Bhf,EAAgB7R,gBAAgB7V,EAAOumC,WAAYvmC,EAAO+mC,yBAA0B/mC,EAAOgnC,mBAAmB,EACzGzuC,KACG,SAAUH,GACN4H,EAAOlB,UAAY1G,EACnB4H,EAAO0mC,iBAAmB,CAAA,CAC9B,EACA,SAAUtuC,EAAUE,IAGxB,CACR,EAEA0H,EAAOkV,kBAAoB,WACvBlV,EAAOiV,SAAWyS,EAAgBxS,kBAAkB,CACxD,EAEAlV,EAAOinC,aAAe,SAAUhzB,GAC5BjU,EAAO2mC,gBAAkB,CAAA,EACzB9lC,EAAc+gB,QAAQ,kBAAmB,MAAM,EAE/C8F,EAAgBvS,YAAYlB,EAAE7Q,EAAE,EAC3B7K,KACG,SAAUH,GACN4H,EAAOiV,SAAWyS,EAAgBzS,SAClCjV,EAAO2mC,gBAAkB,CAAA,EAEzB7oC,EAAWsmB,MAAM,gBAAiBpkB,EAAOiV,SAAS5K,IAAI,EAElDrK,EAAOiV,SAASiyB,cAChBlnC,EAAOiV,SAASkyB,KAAO,kBAElBnnC,EAAOiV,SAASmyB,WACrBpnC,EAAOiV,SAASkyB,KAAO,cAGvBnnC,EAAOiV,SAASkyB,KAAO,gBAGgB,EAAvCnnC,EAAOiV,SAASpN,cAAchQ,OAC9BmI,EAAOsmC,aAAetmC,EAAOiV,SAASpN,cAAc,GAGpD7H,EAAOsmC,aAAe,GAG1BtmC,EAAO6mC,eAAiB,GAExB,IAAK,IAAIpqC,EAAI,EAAGA,EAAIuD,EAAOiV,SAAS2B,eAAe/e,OAAQ4E,GAAK,EAC5DuD,EAAO6mC,eAAelsC,KAAKqF,EAAOiV,SAAS2B,eAAeyrB,MAAM5lC,EAAGA,EAAI,CAAC,CAAC,CAEjF,EACA,SAAUrE,EAAUE,IAGxB,CACR,EAEA0H,EAAOqnC,sBAAwB,WAC3BrnC,EAAOomC,gBAAkB,EAC7B,EAEApmC,EAAOsnC,oBAAsB,SAAUlyB,GACnCpV,EAAOomC,gBAAkBhxB,CAC7B,EAEApV,EAAOunC,0BAA4B,WAC/B,GAAIvnC,EAAOwnC,oBAAoBC,+BAA+B5O,UAAY74B,EAAOwnC,oBAAoBE,+BAA+B7O,UAAY74B,EAAOwnC,oBAAoBG,6BAA6B9O,SAEpM,MAAO,EADP74B,EAAO4nC,8BAAgC,CAAA,GAO3C,GAHA5nC,EAAOomC,gBAAgB9wB,iBAAmB1a,OAAOoF,EAAOomC,gBAAgB7wB,SAAS,EAAE3Z,OAAO,YAAY,EACtGoE,EAAOomC,gBAAgB5wB,eAAiB5a,OAAOoF,EAAOomC,gBAAgB3wB,OAAO,EAAE7Z,OAAO,YAAY,EAE9FoE,EAAOomC,gBAAgBhjC,IACvB,IAAK,IAAI3G,EAAI,EAAGA,EAAIuD,EAAOiV,SAASI,iBAAiBxd,OAAQ4E,CAAC,GAC1D,GAAIuD,EAAOiV,SAASI,iBAAiB5Y,GAAG2G,KAAOpD,EAAOomC,gBAAgBhjC,GAAI,CACtEpD,EAAOiV,SAASI,iBAAiB5Y,GAAKuD,EAAOomC,gBAC7C,KACJ,CACJ,MAGKpmC,EAAOiV,SAASI,mBAAkBrV,EAAOiV,SAASI,iBAAmB,IAE1ErV,EAAOiV,SAASI,iBAAiB1a,KAAKqF,EAAOomC,eAAe,EAGhEpmC,EAAOomC,gBAAkB,KACzBpmC,EAAO4nC,8BAAgC,CAAA,EACvC5nC,EAAOwnC,oBAAoBC,+BAA+BI,OAAS,CAAA,EACnE7nC,EAAOwnC,oBAAoBE,+BAA+BG,OAAS,CAAA,EACnE7nC,EAAOwnC,oBAAoBG,6BAA6BE,OAAS,CAAA,EACjE7nC,EAAOwnC,oBAAoBC,+BAA+BpnC,UAAY,CAAA,EACtEL,EAAOwnC,oBAAoBE,+BAA+BrnC,UAAY,CAAA,EACtEL,EAAOwnC,oBAAoBG,6BAA6BtnC,UAAY,CAAA,CACxE,EAEAL,EAAO8nC,sBAAwB,SAAUt8B,EAAOu8B,GAC5C/nC,EAAOiV,SAASI,iBAAiB3a,OAAO8Q,EAAO,CAAC,CACpD,EAEAxL,EAAOgoC,0BAA4B,WAC/BhoC,EAAOomC,gBAAkB,IAC7B,EAEApmC,EAAOioC,cAAgB,WACdjoC,EAAOiV,SAASvI,UAAgD,IAApC1M,EAAOiV,SAASvI,SAAS7U,OAMtDmI,EAAOqmC,QAAU,GALjBrmC,EAAOqmC,QAAU,CACb6B,iBAAkB,CAAA,CACtB,CAKR,EAEAloC,EAAOmoC,YAAc,SAAUvyB,GAC3B5V,EAAOqmC,QAAUzwB,CACrB,EAEA5V,EAAOooC,kBAAoB,WACvB,GAAIpoC,EAAOwnC,oBAAoBa,+BAA+BxP,UAAY74B,EAAOwnC,oBAAoBc,+BAA+BzP,UAAY74B,EAAOwnC,oBAAoBe,gCAAgC1P,UAAY74B,EAAOwnC,oBAAoBgB,oCAAoC3P,UAAY74B,EAAOwnC,oBAAoBiB,iCAAiC5P,UAAY74B,EAAOwnC,oBAAoBkB,gCAAgC7P,UAAY74B,EAAOwnC,oBAAoBmB,iCAAiC9P,UAAY74B,EAAOwnC,oBAAoBoB,0CAA0C/P,SAE1jB,MAAO,EADP74B,EAAO6oC,8BAAgC,CAAA,GAI3C,GAAI7oC,EAAOqmC,QAAQjjC,IACf,IAAK,IAAI3G,EAAI,EAAGA,EAAIuD,EAAOiV,SAASvI,SAAS7U,OAAQ4E,CAAC,GAClD,GAAIuD,EAAOiV,SAASvI,SAASjQ,GAAG2G,KAAOpD,EAAOqmC,QAAQjjC,GAAI,CACtDpD,EAAOiV,SAASvI,SAASjQ,GAAKuD,EAAOqmC,QACrC,KACJ,CACJ,MAGKrmC,EAAOiV,SAASvI,WAAU1M,EAAOiV,SAASvI,SAAW,IAE1D1M,EAAOiV,SAASvI,SAAS/R,KAAKqF,EAAOqmC,OAAO,EAGhDrmC,EAAOqmC,QAAU,KACjBrmC,EAAO6oC,8BAAgC,CAAA,EACvC7oC,EAAOwnC,oBAAoBa,+BAA+BR,OAAS,CAAA,EACnE7nC,EAAOwnC,oBAAoBc,+BAA+BT,OAAS,CAAA,EACnE7nC,EAAOwnC,oBAAoBe,gCAAgCV,OAAS,CAAA,EACpE7nC,EAAOwnC,oBAAoBgB,oCAAoCX,OAAS,CAAA,EACxE7nC,EAAOwnC,oBAAoBiB,iCAAiCZ,OAAS,CAAA,EACrE7nC,EAAOwnC,oBAAoBkB,gCAAgCb,OAAS,CAAA,EACpE7nC,EAAOwnC,oBAAoBmB,iCAAiCd,OAAS,CAAA,EACrE7nC,EAAOwnC,oBAAoBoB,0CAA0Cf,OAAS,CAAA,EAC9E7nC,EAAOwnC,oBAAoBa,+BAA+BhoC,UAAY,CAAA,EACtEL,EAAOwnC,oBAAoBc,+BAA+BjoC,UAAY,CAAA,EACtEL,EAAOwnC,oBAAoBe,gCAAgCloC,UAAY,CAAA,EACvEL,EAAOwnC,oBAAoBgB,oCAAoCnoC,UAAY,CAAA,EAC3EL,EAAOwnC,oBAAoBiB,iCAAiCpoC,UAAY,CAAA,EACxEL,EAAOwnC,oBAAoBkB,gCAAgCroC,UAAY,CAAA,EACvEL,EAAOwnC,oBAAoBmB,iCAAiCtoC,UAAY,CAAA,EACxEL,EAAOwnC,oBAAoBoB,0CAA0CvoC,UAAY,CAAA,CACrF,EAEAL,EAAO8oC,cAAgB,SAAUt9B,EAAOg7B,GACpCxmC,EAAOiV,SAASvI,SAAShS,OAAO8Q,EAAO,CAAC,CAC5C,EAEAxL,EAAO+oC,kBAAoB,WACvB/oC,EAAOqmC,QAAU,IACrB,EAEArmC,EAAOgpC,gBAAkB,WACrBhpC,EAAOwmC,UAAY,GACnBxmC,EAAOipC,oBAAsB,IACjC,EAEAjpC,EAAOkpC,kBAAoB,SAAUzyC,GAGjC,OAFgC,EAA5BA,EAAW2E,QAAQ,KAAK,IAAO3E,EAAaA,EAAW4rC,MAAM,EAAG5rC,EAAW2E,QAAQ,KAAK,CAAC,GAEtF8oB,EAAgBtG,mBAAmBnnB,CAAU,CACxD,EAEAuJ,EAAOmpC,oBAAsB,SAAUC,GACnCppC,EAAOipC,oBAAsBG,EAE7BppC,EAAOwmC,UAAU6C,YAAcD,EAAYtrB,KAAKD,IACpD,EAEA7d,EAAOspC,cAAgB,SAAU9C,GAC7BtiB,EAAgBtG,mBAAmB4oB,EAAU6C,WAAW,EACnD9wC,KACG,SAAU2hB,GACNla,EAAOwmC,UAAYA,EACnBxmC,EAAOipC,oBAAsB/uB,EAAa,EAC9C,EACA,SAAU7hB,IAGd,CACR,EAEA2H,EAAOupC,4BAA8B,WACjC,GAAIvpC,EAAOwnC,oBAAoBgC,iCAAiC3Q,UAAY74B,EAAOwnC,oBAAoBiC,kCAAkC5Q,UAAY74B,EAAOwnC,oBAAoBkC,+BAA+B7Q,UAAY74B,EAAOwnC,oBAAoBmC,oCAAoC9Q,SAEtR,MAAO,EADP74B,EAAO4pC,gCAAkC,CAAA,GAI7C,GAAI5pC,EAAOwmC,UAAUpjC,IACjB,IAAK,IAAI3G,EAAI,EAAGA,EAAIuD,EAAOiV,SAAS8B,WAAWlf,OAAQ4E,CAAC,GACpD,GAAIuD,EAAOiV,SAAS8B,WAAWta,GAAG2G,KAAOpD,EAAOwmC,UAAUpjC,GAAI,CAC1DpD,EAAOiV,SAAS8B,WAAWta,GAAKuD,EAAOwmC,UACvC,KACJ,CACJ,MAGKxmC,EAAOiV,SAAS8B,aAAY/W,EAAOiV,SAAS8B,WAAa,IAE9D/W,EAAOiV,SAAS8B,WAAWpc,KAAKqF,EAAOwmC,SAAS,EAGpDxmC,EAAOwmC,UAAY,KACnBxmC,EAAO4pC,gCAAkC,CAAA,EACzC5pC,EAAOwnC,oBAAoBgC,iCAAiC3B,OAAS,CAAA,EACrE7nC,EAAOwnC,oBAAoBiC,kCAAkC5B,OAAS,CAAA,EACtE7nC,EAAOwnC,oBAAoBkC,+BAA+B7B,OAAS,CAAA,EACnE7nC,EAAOwnC,oBAAoBmC,oCAAoC9B,OAAS,CAAA,CAC5E,EAEA7nC,EAAO6pC,gBAAkB,SAAUr+B,EAAOg7B,GACtCxmC,EAAOiV,SAAS8B,WAAWrc,OAAO8Q,EAAO,CAAC,CAC9C,EAEAxL,EAAO8pC,oBAAsB,WACzB9pC,EAAOwmC,UAAY,KACnBxmC,EAAOipC,oBAAsB,IACjC,EAEAjpC,EAAO2W,aAAe,WAClB3W,EAAOlJ,aAAe,KACtB,IAAIizC,EAAmB,CAAA,CAAC/pC,EAAOiV,SAAW,GAE1C,GAAwC,MAApCjV,EAAOiV,SAASI,kBAAwE,IAA5CrV,EAAOiV,SAASI,iBAAiBxd,OAE7E,MAAO,EADPmI,EAAOlJ,aAAe,iCAI1B,GAAgC,MAA5BkJ,EAAOiV,SAASvI,UAAwD,IAApC1M,EAAOiV,SAASvI,SAAS7U,OAE7D,MAAO,EADPmI,EAAOlJ,aAAe,iCAM1B,IAFA,IAAIkzC,EAAwB,EAEnBvtC,EAAI,EAAGA,EAAIuD,EAAOiV,SAASvI,SAAS7U,OAAQ4E,CAAC,GAC9CuD,EAAOiV,SAASvI,SAASjQ,GAAGyrC,kBAAkB8B,CAAqB,GAG3E,GAA8B,IAA1BA,EAEA,MAAO,EADPhqC,EAAOlJ,aAAe,+DAI1B,GAA4B,EAAxBkzC,EAEA,MAAO,EADPhqC,EAAOlJ,aAAe,wDAI1B,OAAQkJ,EAAOiV,SAASkyB,MACpB,IAAK,kBACDnnC,EAAOiV,SAASiyB,cAAgB,CAAA,EAChClnC,EAAOiV,SAASmyB,WAAa,CAAA,EAC7B,MACJ,IAAK,cACDpnC,EAAOiV,SAASiyB,cAAgB,CAAA,EAChClnC,EAAOiV,SAASmyB,WAAa,CAAA,EAC7B,MACJ,QACIpnC,EAAOiV,SAASiyB,cAAgB,CAAA,EAChClnC,EAAOiV,SAASmyB,WAAa,CAAA,CAErC,CAIA,GAAIpnC,EAAOsmC,eAAiBtmC,EAAOsmC,aAAan6B,OAASnM,EAAOsmC,aAAa2D,UAAW,CACpF,GAAIjqC,EAAOsmC,aAAa4D,cAAgBlqC,EAAOsmC,aAAa6D,gBAExD,MAAO,EADPnqC,EAAOlJ,aAAe,qCAIvBkJ,EAAOsmC,aAAa4D,cAAalqC,EAAOsmC,aAAa8D,SAAWpqC,EAAOsmC,aAAa4D,aACvFlqC,EAAOiV,SAASpN,cAAgB,GAChC7H,EAAOiV,SAASpN,cAAclN,KAAKqF,EAAOsmC,YAAY,CAC1D,CAEAtmC,EAAOymC,OAAS,CAAA,EAEhB/e,EAAgB/Q,aAAa,EACxBpe,KACG,SAAU0c,GACNyS,EAAgBvS,YAAYF,EAAS7R,EAAE,EAClC7K,KACG,SAAU0c,GAwBN,GAvBAjV,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KACtBkJ,EAAOiV,SAAWA,EAElBnX,EAAWsmB,MAAM,gBAAiBpkB,EAAOiV,SAAS5K,IAAI,EAElDrK,EAAOiV,SAASiyB,cAChBlnC,EAAOiV,SAASkyB,KAAO,kBAElBnnC,EAAOiV,SAASmyB,WACrBpnC,EAAOiV,SAASkyB,KAAO,cAGvBnnC,EAAOiV,SAASkyB,KAAO,gBAGgB,EAAvCnnC,EAAOiV,SAASpN,cAAchQ,OAC9BmI,EAAOsmC,aAAetmC,EAAOiV,SAASpN,cAAc,GAGpD7H,EAAOsmC,aAAe,GAGtByD,GACA,IAAK,IAAIttC,EAAI,EAAGA,EAAIuD,EAAOlB,UAAUjH,OAAQ4E,CAAC,GAC1C,GAAIuD,EAAOlB,UAAUrC,GAAG2G,KAAOpD,EAAOiV,SAAS7R,GAAI,CAC/CpD,EAAOlB,UAAUrC,GAAKuD,EAAOiV,SAC7BjV,EAAOlJ,aAAe,KACtB,KACJ,CACJ,MAGAkJ,EAAOlB,UAAUnE,KAAKqF,EAAOiV,QAAQ,EAGzCpU,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,wBAAyB2jB,QAAS,2BAA6B7hB,EAAOiV,SAAS5K,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,CACtN,EACA,SAAU3pB,EAAUE,IAGxB,CACR,EACA,SAAUF,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOqqC,YAAc,WACZrqC,EAAOiV,SAASq1B,QAAUtqC,EAAOiV,SAASq1B,OAAOzyC,OAIlDmI,EAAO8W,cAAgB,EAE/B,EAEA9W,EAAOuqC,UAAY,SAAU7a,GACzB1vB,EAAO8W,cAAgB4Y,CAC3B,EAEA1vB,EAAOwqC,cAAgB,SAAUpuC,GAC7B4D,EAAO5F,OAAO,WACV4F,EAAOymC,OAAS,CAAA,EAChBzmC,EAAO8mC,UAAY1qC,EAAQquC,MAAM,GAEjCtE,EAAchoB,OAAO/hB,EAAQquC,MAAM,EAAE,EAChClyC,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAO8W,cAAc4zB,MAAQtyC,CACjC,EACA,SAAUA,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,CACpB,CACJ,CACR,CAAC,CACL,EAEAzmC,EAAO2qC,gBAAkB,WACrB,GAAI3qC,EAAOwnC,oBAAoBoD,oCAAoC/R,SAE/D,MAAO,EADP74B,EAAO6qC,4BAA8B,CAAA,GAIzC7qC,EAAOymC,OAAS,CAAA,EAEhBzmC,EAAO8W,cAAclP,SAAW5H,EAAOiV,SAEvCyS,EAAgB7Q,kBAAkB7W,EAAO8W,aAAa,EACjDve,KACG,SAAUH,GACNsvB,EAAgBvS,YAAYnV,EAAOiV,SAAS7R,EAAE,EACzC7K,KACG,SAAUH,GACN4H,EAAOiV,SAAWyS,EAAgBzS,SAClCjV,EAAOymC,OAAS,CAAA,EAChBzmC,EAAO2mC,gBAAkB,CAAA,EACzB3mC,EAAO8W,cAAgB,KACvB9W,EAAO8mC,UAAY,KAEf9mC,EAAOiV,SAASiyB,cAChBlnC,EAAOiV,SAASkyB,KAAO,kBAElBnnC,EAAOiV,SAASmyB,WACrBpnC,EAAOiV,SAASkyB,KAAO,cAGvBnnC,EAAOiV,SAASkyB,KAAO,gBAGgB,EAAvCnnC,EAAOiV,SAASpN,cAAchQ,OAC9BmI,EAAOsmC,aAAetmC,EAAOiV,SAASpN,cAAc,GAGpD7H,EAAOsmC,aAAe,GAG1BtmC,EAAO6mC,eAAiB,GAExB,IAAK,IAAIpqC,EAAI,EAAGA,EAAIuD,EAAOiV,SAAS2B,eAAe/e,OAAQ4E,GAAK,EAC5DuD,EAAO6mC,eAAelsC,KAAKqF,EAAOiV,SAAS2B,eAAeyrB,MAAM5lC,EAAGA,EAAI,CAAC,CAAC,CAEjF,EACA,SAAUrE,EAAUE,IAGxB,CAER,EACA,SAAUF,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,CACpB,CACJ,CAkCR,EAEAzmC,EAAO8qC,YAAc,WACjB9qC,EAAO8mC,UAAY,IACvB,EAEA9mC,EAAO+qC,oBAAsB,SAAUnE,GACnC5mC,EAAOymC,OAAS,CAAA,EAEhB/e,EAAgB1Q,oBAAoB4vB,CAAK,EACpCruC,KACG,SAAUH,GACNsvB,EAAgBvS,YAAYnV,EAAOiV,SAAS7R,EAAE,EACzC7K,KACG,SAAUH,GACN4H,EAAOiV,SAAWyS,EAAgBzS,SAClCjV,EAAOymC,OAAS,CAAA,EAChBzmC,EAAO2mC,gBAAkB,CAAA,EAErB3mC,EAAOiV,SAASiyB,cAChBlnC,EAAOiV,SAASkyB,KAAO,kBAElBnnC,EAAOiV,SAASmyB,WACrBpnC,EAAOiV,SAASkyB,KAAO,cAGvBnnC,EAAOiV,SAASkyB,KAAO,gBAGgB,EAAvCnnC,EAAOiV,SAASpN,cAAchQ,OAC9BmI,EAAOsmC,aAAetmC,EAAOiV,SAASpN,cAAc,GAGpD7H,EAAOsmC,aAAe,GAG1BtmC,EAAO6mC,eAAiB,GAExB,IAAK,IAAIpqC,EAAI,EAAGA,EAAIuD,EAAOiV,SAAS2B,eAAe/e,OAAQ4E,GAAK,EAC5DuD,EAAO6mC,eAAelsC,KAAKqF,EAAOiV,SAAS2B,eAAeyrB,MAAM5lC,EAAGA,EAAI,CAAC,CAAC,CAEjF,EACA,SAAUrE,EAAUE,IAGxB,CAER,EACA,SAAUF,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,CACpB,CACJ,CACR,EAEAzmC,EAAOgrC,gBAAkB,WACrBhrC,EAAO8W,cAAgB,IAC3B,CACJ,EAAE;ACpnBFjY,UAAU6B,WAAW,sBAAuB,CAAC,aAAc,SAAU,QAAS,UAAW,SAAU,WAAY,gBAAiB,cAAe,kBAAmB,iBAAkB,kBAAmB,gBAAiB,mBAAoB,oBAAqB,SAAU5C,EAAYkC,EAAQtL,EAAOuP,EAASrD,EAAQhM,EAAUiM,EAAeC,EAAagiB,EAAiB4L,EAAgBxK,EAAiBC,EAAef,EAAkBriB,GACvaD,EAAY4X,mBACb9X,EAAOO,GAAG,OAAO,EAGrBnB,EAAOiZ,YAAcmK,EAAiBnK,YAAY,EAClDjZ,EAAOkZ,eAAiBkK,EAAiBlK,eAAe,EACxDlZ,EAAOmZ,cAAgBiK,EAAiBjK,cAAc,EAEtDrb,EAAWsmB,MAAM,gBAAiB,WAAW,EAC7CpkB,EAAOirC,yBAA2BlmC,oBAAoBC,MAAMysB,qBAC5DzxB,EAAOnB,UAAY,KACnBmB,EAAO0C,SAAW,KAClB1C,EAAOkrC,iBAAmB,CAAA,EAC1BlrC,EAAOkY,UAAY,GACnBlY,EAAOxB,QAAU,KACjBwB,EAAO+C,UAAY,KACnB/C,EAAOoyB,SAAW,GAClBpyB,EAAOsyB,QAAU,KACjBtyB,EAAOmrC,aAAe,KACtBnrC,EAAOorC,eAAiB,CAAA,EACxBprC,EAAOkd,YAAc,KACrBld,EAAO6e,YAAc,KACrB7e,EAAOqrC,sBAAwB,KAC/BrrC,EAAOga,aAAe,KACtBha,EAAOuvB,cAAgB,KACvBvvB,EAAOkd,YAAc,KACrBld,EAAOsrC,gBAAkB,KACzBtrC,EAAOumC,WAAa,GACpBvmC,EAAOurC,0BAA4B,KACnCvrC,EAAOgnC,oBAAsB,CAAA,EAC7BhnC,EAAOwrC,2BAA6B,CAAA,EACpCxrC,EAAOyrC,2BAA6B,CAAA,EACpCzrC,EAAOqkB,OAAS,OAChBrkB,EAAOskB,YAAc,CAAA,EACrBtkB,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EAChBzmC,EAAO0rC,MAAQ,CAAA,EACf1rC,EAAO2rC,mBAAqB,KAC5B3rC,EAAO4rC,2BAA6B,KACpC5rC,EAAO6rC,iBAAmB,CAAA,EAC1B7rC,EAAOqD,qBAAuB,KAC9BrD,EAAOuD,SAAW,KAClBvD,EAAOsD,cAAgB,KACvBtD,EAAOgf,oBAAsB,KAC7Bhf,EAAOif,kBAAoB,KAC3Bjf,EAAOkf,uBAAyB,KAChClf,EAAOmf,wBAA0B,KACjCnf,EAAO8rC,iBAAmB,CAAA,EAC1B9rC,EAAO+rC,gBAAkB,CAAA,EACzB/rC,EAAOgsC,uCAAyC,KAChDhsC,EAAOolB,gCAAkC,KACzCplB,EAAOi1B,oBAAsB,KAa7B9Q,EAAc3E,wBAAwB,EACjCjnB,KACG,SAAUH,GACN4H,EAAOqD,qBAAuBjL,CAClC,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgBpJ,YAAY,EACvBviB,KACG,SAAUH,GACN4H,EAAOuD,SAAWnL,CACtB,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgBrJ,iBAAiB,EAC5BtiB,KACG,SAAUH,GACN4H,EAAOsD,cAAgBlL,CAC3B,EACA,SAAUA,EAAUE,IAGxB,EAEJo2B,EAAerV,aAAa,EACtB9gB,KACG,WACIyH,EAAO+C,UAAY2rB,EAAe3rB,SACtC,CACJ,EAELohB,EAAcvE,eAAe,EACxBrnB,KACG,SAAUH,GACN4H,EAAO6e,YAAczmB,CACzB,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAActE,yBAAyB,EAClCtnB,KACG,SAAUH,GACN4H,EAAOqrC,sBAAwBjzC,CACnC,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgB9H,mBAAmB,EAC9B7jB,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,CAC1B,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgBnJ,YAAY,EACvBxiB,KACG,SAAUH,GACN4H,EAAOuvB,cAAgBn3B,CAC3B,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAAcpE,uBAAuB,EAChCxnB,KACG,SAAUH,GACN4H,EAAOgf,oBAAsB5mB,CACjC,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAAcnE,qBAAqB,EAC9BznB,KACG,SAAUH,GACN4H,EAAOif,kBAAoB7mB,CAC/B,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAAclE,0BAA0B,EACnC1nB,KACG,SAAUH,GACN4H,EAAOkf,uBAAyB9mB,CACpC,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAAcjE,2BAA2B,EACpC3nB,KACG,SAAUH,GACN4H,EAAOmf,wBAA0B/mB,CACrC,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAAc7D,qBAAqB,EAC9B/nB,KACG,SAAUH,GACN4H,EAAOgD,kBAAoB5K,CAC/B,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAAc5D,mCAAmC,EAC5ChoB,KACG,SAAUH,GACN4H,EAAOgsC,uCAAyC5zC,EAChD4H,EAAOolB,gCAAkChtB,CAC7C,EACA,SAAUA,EAAUE,IAGxB,EAEJ0H,EAAO8X,gBAAkB,WACrB9X,EAAOnB,UAAY,KACnBmB,EAAO0C,SAAW,KAClB1C,EAAOxB,QAAU,KACjBwB,EAAOsyB,QAAU,KACjBtyB,EAAOorC,eAAiB,CAAA,EACxBprC,EAAOkd,YAAc,KACrBld,EAAOsrC,gBAAkB,KAEzBtrC,EAAO8rC,iBAAmB,CAAA,EAE1BhpB,EAAgBhL,gBAAgB9X,EAAOumC,WAAYvmC,EAAOurC,0BAA2BvrC,EAAOgnC,mBAAmB,EAC1GzuC,KACG,SAAUH,GACN4H,EAAOnB,UAAYzG,EACnB4H,EAAO8rC,iBAAmB,CAAA,CAC9B,EACA,SAAU1zC,EAAUE,IAGxB,CACR,EAEA0H,EAAOisC,eAAiB,WACpBjsC,EAAOkY,UAAY,GACnBlY,EAAOoyB,SAAW,GAClBpyB,EAAO0C,SAAWogB,EAAgBzL,kBAAkB,CACxD,EAEArX,EAAOksC,aAAe,SAAU33C,GAC5ByL,EAAO+rC,gBAAkB,CAAA,EACzB/rC,EAAOkY,UAAY,GACnBlY,EAAOoyB,SAAW,GAElBtP,EAAgBnL,YAAYpjB,EAAE6O,EAAE,EAC3B7K,KACG,SAAUH,GAwBN,GAvBA4H,EAAO+rC,gBAAkB,CAAA,EACzB/rC,EAAO0C,SAAWtK,EAElB0F,EAAWsmB,MAAM,gBAAiBpkB,EAAO0C,SAAS2H,IAAI,EAEvB,OAA3BrK,EAAO0C,SAASS,OAChBnD,EAAO0C,SAAS6V,UAAY,CAAA,EAG5BvY,EAAO0C,SAAS6V,UAAY,CAAA,EAG5BvY,EAAO0C,SAAS+yB,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOirC,yBAAyBvV,OACjF11B,EAAOkrC,iBAAmB,CAAA,EAG1BlrC,EAAOkrC,iBAAmB,CAAA,EAO1BlrC,EAAO0C,SAAS8U,SAChB,IAAK,IAAI/a,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS8U,SAAS3f,OAAQ4E,CAAC,GAClDuD,EAAO0C,SAAS8U,SAAS/a,GAAGuzB,aAAe/rB,EAAQ,QAAQ,EAAEjE,EAAO0C,SAAS8U,SAAS/a,GAAGuzB,aAAc,CAAC,EAIhH,IAASvzB,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS4U,UAAUzf,OAAQ4E,CAAC,GAC9CuD,EAAO0C,SAAS4U,UAAU7a,GAAG0vC,eAAensC,EAAOkY,UAAUvd,KAAKqF,EAAO0C,SAAS4U,UAAU7a,EAAE,EAGvG,IAASA,EAAI,EAAGA,EAAIuD,EAAO0C,SAASkK,SAAS/U,OAAQ4E,CAAC,GAC7CuD,EAAO0C,SAASkK,SAASnQ,GAAG0vC,eAAensC,EAAOoyB,SAASz3B,KAAKqF,EAAO0C,SAASkK,SAASnQ,EAAE,EAGhGuD,EAAO0C,SAAS6iB,iCAA4F,EAAzDvlB,EAAO0C,SAAS6iB,gCAAgC1tB,SACnGmI,EAAO0C,SAAS0pC,uBAAyB,CAAA,EACzCpsC,EAAOolB,gCAAkCplB,EAAO0C,SAAS6iB,gCAEjE,EACA,SAAUntB,EAAUE,IAGxB,CACR,EAEA0H,EAAOo8B,kBAAoB,WACvB,GAAIp8B,EAAOqsC,oBAAoBC,kCAAkCzT,UAAY74B,EAAOqsC,oBAAoBE,8BAA8B1T,UAAY74B,EAAOqsC,oBAAoBG,6BAA6B3T,SAEtM,MAAO,EADP74B,EAAOysC,+BAAiC,CAAA,GAI5C,GAAIzsC,EAAOxB,QAAQ4E,IACf,IAAK,IAAI3G,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS4U,UAAUzf,OAAQ4E,CAAC,GACnD,GAAIuD,EAAO0C,SAAS4U,UAAU7a,GAAG2G,KAAOpD,EAAOxB,QAAQ4E,GAAI,CACvDpD,EAAO0C,SAAS4U,UAAU7a,GAAKuD,EAAOxB,QACtC,KACJ,CACJ,MAGAwB,EAAO0C,SAAS4U,UAAU3c,KAAKqF,EAAOxB,OAAO,EAKjD,GAFAwB,EAAOkY,UAAY,GAEflY,EAAOyrC,2BACP,IAAShvC,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS4U,UAAUzf,OAAQ4E,CAAC,GAC/CuD,EAAO0C,SAAS4U,UAAU7a,GAAG0vC,eAAensC,EAAOkY,UAAUvd,KAAKqF,EAAO0C,SAAS4U,UAAU7a,EAAE,OAItG,IAASA,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS4U,UAAUzf,OAAQ4E,CAAC,GAC9CuD,EAAO0C,SAAS4U,UAAU7a,GAAG0vC,eAAensC,EAAOkY,UAAUvd,KAAKqF,EAAO0C,SAAS4U,UAAU7a,EAAE,EAI3GuD,EAAOxB,QAAU,KACjBwB,EAAOysC,+BAAiC,CAAA,EACxCzsC,EAAOqsC,oBAAoBC,kCAAkCzE,OAAS,CAAA,EACtE7nC,EAAOqsC,oBAAoBE,8BAA8B1E,OAAS,CAAA,EAClE7nC,EAAOqsC,oBAAoBG,6BAA6B3E,OAAS,CAAA,EACjE7nC,EAAOqsC,oBAAoBC,kCAAkCjsC,UAAY,CAAA,EACzEL,EAAOqsC,oBAAoBE,8BAA8BlsC,UAAY,CAAA,EACrEL,EAAOqsC,oBAAoBG,6BAA6BnsC,UAAY,CAAA,CACxE,EAEAL,EAAO0sC,cAAgB,WACnB1sC,EAAOxB,QAAU,EACrB,EAEAwB,EAAO2sC,YAAc,SAAU5kC,GAC3B/H,EAAOxB,QAAUuJ,CACrB,EAEA/H,EAAOq9B,kBAAoB,WACvBr9B,EAAOxB,QAAU,KACjBwB,EAAOysC,+BAAiC,CAAA,EACxCzsC,EAAOqsC,oBAAoBC,kCAAkCzE,OAAS,CAAA,EACtE7nC,EAAOqsC,oBAAoBE,8BAA8B1E,OAAS,CAAA,EAClE7nC,EAAOqsC,oBAAoBG,6BAA6B3E,OAAS,CAAA,EACjE7nC,EAAOqsC,oBAAoBC,kCAAkCjsC,UAAY,CAAA,EACzEL,EAAOqsC,oBAAoBE,8BAA8BlsC,UAAY,CAAA,EACrEL,EAAOqsC,oBAAoBG,6BAA6BnsC,UAAY,CAAA,CACxE,EAEAL,EAAO4sC,kBAAoB,WAIvB,GAHA5sC,EAAOkY,UAAY,GACnBlY,EAAOyrC,2BAA6B,CAACzrC,EAAOyrC,2BAExCzrC,EAAOyrC,2BACP,IAAK,IAAIhvC,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS4U,UAAUzf,OAAQ4E,CAAC,GAC/CuD,EAAO0C,SAAS4U,UAAU7a,GAAG0vC,eAAensC,EAAOkY,UAAUvd,KAAKqF,EAAO0C,SAAS4U,UAAU7a,EAAE,OAItG,IAASA,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS4U,UAAUzf,OAAQ4E,CAAC,GAC9CuD,EAAO0C,SAAS4U,UAAU7a,GAAG0vC,eAAensC,EAAOkY,UAAUvd,KAAKqF,EAAO0C,SAAS4U,UAAU7a,EAAE,CAG/G,EAEAuD,EAAO6sC,kBAAoB,WACvB,GAAI7sC,EAAOqsC,oBAAoBS,yBAAyBjU,SAEpD,MAAO,EADP74B,EAAO+sC,8BAAgC,CAAA,GAI3C,IAAI9T,EAA2B,CAAA,EAE/B,GAAIj5B,EAAOsyB,QAAQlvB,IACf,IAAK,IAAI3G,EAAI,EAAGA,EAAIuD,EAAO0C,SAASkK,SAAS/U,OAAQ4E,CAAC,GAClD,GAAIuD,EAAO0C,SAASkK,SAASnQ,GAAG2G,KAAOpD,EAAOsyB,QAAQlvB,GAAI,CACtD,IAAK,IAAI0Q,EAAI,EAAGA,EAAI9T,EAAO0C,SAASkK,SAAS/U,OAAQic,CAAC,GAClD,GAAI9T,EAAOsyB,QAAQlvB,KAAOpD,EAAO0C,SAASkK,SAASkH,GAAG1Q,IAC9CpD,EAAOsyB,QAAQjoB,KAAK6uB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAO0C,SAASkK,SAASkH,GAAGzJ,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACpGo9B,EAA2B,CAAA,EAC3B,KACJ,CAIR,GAAIA,EAEA,MAAO,EADPj5B,EAAOi1B,oBAAsB,2CAIjCj1B,EAAO0C,SAASkK,SAASnQ,GAAKuD,EAAOsyB,QACrC,KACJ,CACJ,KAEC,CACD,IAAS71B,EAAI,EAAGA,EAAIuD,EAAO0C,SAASkK,SAAS/U,OAAQ4E,CAAC,GAClD,GAAIuD,EAAOsyB,QAAQjoB,KAAK6uB,KAAK,EAAEr9B,YAAY,IAAMmE,EAAO0C,SAASkK,SAASnQ,GAAG4N,KAAK6uB,KAAK,EAAEr9B,YAAY,EAAG,CACpGo9B,EAA2B,CAAA,EAC3B,KACJ,CAGJ,GAAIA,EAEA,MAAO,EADPj5B,EAAOi1B,oBAAsB,2CAIjCj1B,EAAO0C,SAASkK,SAASjS,KAAKqF,EAAOsyB,OAAO,EAC5CtyB,EAAOoyB,SAASz3B,KAAKqF,EAAOsyB,OAAO,CACvC,CAIA,GAFAtyB,EAAOoyB,SAAW,GAEdpyB,EAAOwrC,2BACP,IAAS/uC,EAAI,EAAGA,EAAIuD,EAAO0C,SAASkK,SAAS/U,OAAQ4E,CAAC,GAC9CuD,EAAO0C,SAASkK,SAASnQ,GAAG0vC,eAAensC,EAAOoyB,SAASz3B,KAAKqF,EAAO0C,SAASkK,SAASnQ,EAAE,OAInG,IAASA,EAAI,EAAGA,EAAIuD,EAAO0C,SAASkK,SAAS/U,OAAQ4E,CAAC,GAC7CuD,EAAO0C,SAASkK,SAASnQ,GAAG0vC,eAAensC,EAAOoyB,SAASz3B,KAAKqF,EAAO0C,SAASkK,SAASnQ,EAAE,EAIxGuD,EAAOsyB,QAAU,KACjBtyB,EAAO+sC,8BAAgC,CAAA,EACvC/sC,EAAOqsC,oBAAoBS,yBAAyBjF,OAAS,CAAA,EAC7D7nC,EAAOqsC,oBAAoBS,yBAAyBzsC,UAAY,CAAA,CACpE,EAEAL,EAAOgtC,cAAgB,WACnBhtC,EAAOsyB,QAAU,EACrB,EAEAtyB,EAAOitC,YAAc,SAAU14C,GAC3ByL,EAAOsyB,QAAU/9B,CACrB,EAEAyL,EAAOktC,kBAAoB,WACvBltC,EAAOsyB,QAAU,KACjBtyB,EAAO+sC,8BAAgC,CAAA,EACvC/sC,EAAOqsC,oBAAoBS,yBAAyBjF,OAAS,CAAA,EAC7D7nC,EAAOqsC,oBAAoBS,yBAAyBzsC,UAAY,CAAA,CACpE,EAEAL,EAAOmtC,kBAAoB,WAIvB,GAHAntC,EAAOoyB,SAAW,GAClBpyB,EAAOwrC,2BAA6B,CAACxrC,EAAOwrC,2BAExCxrC,EAAOwrC,2BACP,IAAK,IAAI/uC,EAAI,EAAGA,EAAIuD,EAAO0C,SAASkK,SAAS/U,OAAQ4E,CAAC,GAC9CuD,EAAO0C,SAASkK,SAASnQ,GAAG0vC,eAAensC,EAAOoyB,SAASz3B,KAAKqF,EAAO0C,SAASkK,SAASnQ,EAAE,OAInG,IAASA,EAAI,EAAGA,EAAIuD,EAAO0C,SAASkK,SAAS/U,OAAQ4E,CAAC,GAC7CuD,EAAO0C,SAASkK,SAASnQ,GAAG0vC,eAAensC,EAAOoyB,SAASz3B,KAAKqF,EAAO0C,SAASkK,SAASnQ,EAAE,CAG5G,EAEAuD,EAAOotC,eAAiB,SAAUjC,GAC9B,GAAInrC,EAAOqsC,oBAAoBgB,uBAAuBxU,UAA2E74B,EAAOqsC,oBAAoBiB,0BAA0BzU,UAAsC,MAA1B74B,EAAOmrC,aAAa/nC,IAAgBpD,EAAOqsC,oBAAoBkB,iCAAiC1U,UAAsC,MAA1B74B,EAAOmrC,aAAa/nC,GAE9T,MAAO,EADPpD,EAAOwtC,2BAA6B,CAAA,GAIxC,GAAIxtC,EAAOmrC,aAAa/nC,IACpB,IAAK,IAAI3G,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS6U,cAAc1f,OAAQ4E,CAAC,GACvD,GAAIuD,EAAO0C,SAAS6U,cAAc9a,GAAG2G,KAAOpD,EAAOmrC,aAAa/nC,GAAI,CAChEpD,EAAO0C,SAAS6U,cAAc9a,GAAKuD,EAAOmrC,aAC1C,KACJ,CACJ,MAGAnrC,EAAO0C,SAAS6U,cAAc5c,KAAKqF,EAAOmrC,YAAY,EAG1DnrC,EAAOmrC,aAAe,KACtBnrC,EAAOorC,eAAiB,CAAA,EACxBprC,EAAOwtC,2BAA6B,CAAA,EACpCxtC,EAAOqsC,oBAAoBgB,uBAAuBxF,OAAS,CAAA,EAC3D7nC,EAAOqsC,oBAAoBiB,0BAA0BzF,OAAS,CAAA,EAC9D7nC,EAAOqsC,oBAAoBkB,iCAAiC1F,OAAS,CAAA,EACrE7nC,EAAOqsC,oBAAoBgB,uBAAuBhtC,UAAY,CAAA,EAC9DL,EAAOqsC,oBAAoBiB,0BAA0BjtC,UAAY,CAAA,EACjEL,EAAOqsC,oBAAoBkB,iCAAiCltC,UAAY,CAAA,CAC5E,EAEAL,EAAOytC,WAAa,WAChBztC,EAAOmrC,aAAe,GACtBnrC,EAAOorC,eAAiB,CAAA,CAC5B,EAEAprC,EAAO0tC,SAAW,SAAU30B,GACxB/Y,EAAOmrC,aAAepyB,EACtB/Y,EAAOorC,eAAiB,CAAA,CAC5B,EAEAprC,EAAO2tC,eAAiB,WACpB3tC,EAAOmrC,aAAe,KACtBnrC,EAAOorC,eAAiB,CAAA,EAEpBprC,EAAO4tC,sBACP5tC,EAAO4tC,oBAAoBP,uBAAuBxF,OAAS,CAAA,EAC3D7nC,EAAO4tC,oBAAoBP,uBAAuBxF,OAAS,CAAA,EAC3D7nC,EAAO4tC,oBAAoBN,0BAA0BzF,OAAS,CAAA,EAC9D7nC,EAAO4tC,oBAAoBL,iCAAiC1F,OAAS,CAAA,EACrE7nC,EAAO4tC,oBAAoBP,uBAAuBhtC,UAAY,CAAA,EAC9DL,EAAO4tC,oBAAoBP,uBAAuBhtC,UAAY,CAAA,EAC9DL,EAAO4tC,oBAAoBN,0BAA0BjtC,UAAY,CAAA,EACjEL,EAAO4tC,oBAAoBL,iCAAiCltC,UAAY,CAAA,EAEhF,EAEAL,EAAO6tC,WAAa,SAAU90B,GAC1B/Y,EAAO2rC,mBAAqB,CACxBvoC,GAAI2V,EAAE3V,GACNygB,KAAM9K,EAAE8K,KACR1X,MAAO4M,EAAE5M,MACT89B,SAAUlxB,EAAEkxB,SACZG,SAAU,GACVD,gBAAiB,GACjBgC,cAAepzB,EAAEozB,aACrB,EAEAprC,EAAkBS,KAAK,qBAAqB,CAChD,EAEAxB,EAAO8tC,wBAA0B,aAIjC9tC,EAAO+tC,mBAAqB,WACxB/tC,EAAO6rC,iBAAmB,CAAA,EAE1B/qC,EAAY+X,eAAe7Y,EAAO2rC,kBAAkB,EAC/CpzC,KACG,SAAUH,GACN4H,EAAO6rC,iBAAmB,CAAA,EAE1B9qC,EAAkBG,MAAM,qBAAqB,CACjD,EACA,SAAU9I,EAAUE,GAChB0H,EAAO6rC,iBAAmB,CAAA,EAC1B7rC,EAAO4rC,2BAA6B,wBACxC,CACJ,CACR,EAEA5rC,EAAOguC,kBAAoB,WACvB,GAAIhuC,EAAOkd,YAAY9Z,IACnB,IAAK,IAAI3G,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS8U,SAAS3f,OAAQ4E,CAAC,GAClD,GAAIuD,EAAO0C,SAAS8U,SAAS/a,GAAG2G,KAAOpD,EAAOkd,YAAY9Z,GAAI,CAC1DpD,EAAO0C,SAAS8U,SAAS/a,GAAKuD,EAAOkd,YACrC,KACJ,CACJ,MAGAld,EAAO0C,SAAS8U,SAAS7c,KAAKqF,EAAOkd,WAAW,EAGpDld,EAAOkd,YAAc,IACzB,EAEAld,EAAOiuC,kBAAoB,WAGvB,IAFA,IAAI92C,EAAO,KAEFsF,EAAI,EAAGA,EAAIuD,EAAO6e,YAAYhnB,OAAQ4E,CAAC,GACK,YAA7CuD,EAAO6e,YAAYpiB,GAAG4N,KAAKxO,YAAY,IACvC1E,EAAO6I,EAAO6e,YAAYpiB,IAIlCuD,EAAOkd,YAAc,CACjBsS,WAAYr4B,CAChB,CACJ,EAEA6I,EAAOkuC,gBAAkB,SAAU5jC,GAC/BtK,EAAOkd,YAAc5S,CACzB,EAEAtK,EAAOmuC,kBAAoB,SAAU7jC,EAAGkB,GACpCxL,EAAO0C,SAAS8U,SAAS9c,OAAO8Q,EAAO,CAAC,CAC5C,EAEAxL,EAAOouC,sBAAwB,WAC3BpuC,EAAOkd,YAAc,IACzB,EAEAld,EAAOquC,wBAA0B,WAC7B,GAAIruC,EAAOkd,YAAY9Z,IACnB,IAAK,IAAI3G,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS8U,SAAS3f,OAAQ4E,CAAC,GAClD,GAAIuD,EAAO0C,SAAS8U,SAAS/a,GAAG2G,KAAOpD,EAAOkd,YAAY9Z,GAAI,CAC1DpD,EAAO0C,SAAS8U,SAAS/a,GAAKuD,EAAOkd,YACrC,KACJ,CACJ,MAGAld,EAAO0C,SAAS8U,SAAS7c,KAAKqF,EAAOkd,WAAW,EAGpDld,EAAOkd,YAAc,IACzB,EAEAld,EAAOsuC,sBAAwB,WAC3BtuC,EAAOsrC,gBAAkB,EAC7B,EAEAtrC,EAAOuuC,oBAAsB,SAAUjkC,EAAGkB,GACtCxL,EAAOsrC,gBAAkBhhC,EACzBtK,EAAOsrC,gBAAgBkD,MAAQhjC,CACnC,EAEAxL,EAAOyuC,sBAAwB,SAAUnkC,EAAGkB,GACxCxL,EAAOkd,YAAYyS,cAAcj1B,OAAO8Q,EAAO,CAAC,CACpD,EAEAxL,EAAO0uC,4BAA8B,WACG,MAAhC1uC,EAAOsrC,gBAAgBkD,OAAiD74C,MAAhCqK,EAAOsrC,gBAAgBkD,MAC/DxuC,EAAOkd,YAAYyS,cAAc3vB,EAAOsrC,gBAAgBkD,OAASxuC,EAAOsrC,iBAGnEtrC,EAAOkd,YAAYyS,gBAAe3vB,EAAOkd,YAAYyS,cAAgB,IAE1E3vB,EAAOkd,YAAYyS,cAAch1B,KAAKqF,EAAOsrC,eAAe,GAGhEtrC,EAAOsrC,gBAAkB,IAC7B,EAEAtrC,EAAO2uC,0BAA4B,WAC/B3uC,EAAOsrC,gBAAkB,IAC7B,EAEAtrC,EAAO4uC,0BAA4B,WAC/B5uC,EAAOkrC,iBAAmB,CAAA,EAEtBlrC,EAAO0C,SAAS+yB,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOirC,yBAAyBvV,SACjF11B,EAAOkrC,iBAAmB,CAAA,EAElC,EAEAlrC,EAAO6uC,yBAA2B,WAC9B9tC,EAAkBG,MAAM,qBAAqB,CACpD,EAEGlB,EAAOqY,aAAe,WAClBrY,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EAChB,IAAIqI,EAAmB,CAAA,CAAC9uC,EAAO0C,SAAW,GAE1C,GAAI1C,CAAAA,EAAO0C,SAAS0pC,wBAA8E,MAAnDpsC,EAAO0C,SAAS6iB,iCAAqG,GAA1DvlB,EAAO0C,SAAS6iB,gCAAgC1tB,OAOlJ,CAACmI,EAAO0C,SAAS0pC,wBAA6E,MAAnDpsC,EAAO0C,SAAS6iB,iCAAoG,EAAzDvlB,EAAO0C,SAAS6iB,gCAAgC1tB,SAC1JmI,EAAO0C,SAAS6iB,gCAAkC,QARkH,CACpKvlB,EAAO0C,SAAS6iB,gCAAkCvlB,EAAOolB,gCAEzD,IAAK,IAAI3oB,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS6iB,gCAAgC1tB,OAAQ4E,CAAC,GACzE,OAAOuD,EAAO0C,SAAS6iB,gCAAgC9oB,GAAG2G,EAElE,CAKA0f,EAAgBzK,aAAa,EACxB9f,KACG,SAAUmK,GACNogB,EAAgBnL,YAAYjV,EAASU,EAAE,EAClC7K,KACG,SAAUH,GASN,GARA4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KACtBkJ,EAAO0C,SAAWtK,EAClB4H,EAAOkY,UAAY,GACnBlY,EAAOoyB,SAAW,GAElBt0B,EAAWsmB,MAAM,gBAAiBpkB,EAAO0C,SAAS2H,IAAI,EAElDykC,GACA,IAAK,IAAIryC,EAAI,EAAGA,EAAIuD,EAAOnB,UAAUhH,OAAQ4E,CAAC,GAC1C,GAAIuD,EAAOnB,UAAUpC,GAAG2G,KAAOpD,EAAO0C,SAASU,GAAI,CAC/CpD,EAAOnB,UAAUpC,GAAKuD,EAAO0C,SAC7B,KACJ,CACJ,MAG+B,OAA3B1C,EAAO0C,SAASS,OAChBnD,EAAO0C,SAAS6V,UAAY,CAAA,EAG5BvY,EAAO0C,SAAS6V,UAAY,CAAA,EAGhCvY,EAAOnB,UAAUlE,KAAKqF,EAAO0C,QAAQ,EAWzC,GARI1C,EAAO0C,SAAS+yB,YAAYryB,GAAGvH,YAAY,IAAMmE,EAAOirC,yBAAyBvV,SACjF11B,EAAOkrC,iBAAmB,CAAA,GAO1BlrC,EAAO0C,SAAS8U,SAChB,IAAS/a,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS8U,SAAS3f,OAAQ4E,CAAC,GAClDuD,EAAO0C,SAAS8U,SAAS/a,GAAGuzB,aAAe/rB,EAAQ,QAAQ,EAAEjE,EAAO0C,SAAS8U,SAAS/a,GAAGuzB,aAAc,CAAC,EAIhH,IAASvzB,EAAI,EAAGA,EAAIuD,EAAO0C,SAAS4U,UAAUzf,OAAQ4E,CAAC,GAC9CuD,EAAO0C,SAAS4U,UAAU7a,GAAG0vC,eAAensC,EAAOkY,UAAUvd,KAAKqF,EAAO0C,SAAS4U,UAAU7a,EAAE,EAGvG,IAASA,EAAI,EAAGA,EAAIuD,EAAO0C,SAASkK,SAAS/U,OAAQ4E,CAAC,GAC7CuD,EAAO0C,SAASkK,SAASnQ,GAAG0vC,eAAensC,EAAOoyB,SAASz3B,KAAKqF,EAAO0C,SAASkK,SAASnQ,EAAE,EAGhGuD,EAAO0C,SAAS6iB,iCAA4F,EAAzDvlB,EAAO0C,SAAS6iB,gCAAgC1tB,QACnGmI,EAAO0C,SAAS0pC,uBAAyB,CAAA,EACzCpsC,EAAOolB,gCAAkCplB,EAAO0C,SAAS6iB,kCAGzDvlB,EAAO0C,SAAS0pC,uBAAyB,CAAA,EACzCpsC,EAAOolB,gCAAkCplB,EAAOgsC,wCAGpDnrC,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,wBAAyB2jB,QAAS,2BAA6B7hB,EAAO0C,SAAS2H,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,CACtN,EACA,SAAU3pB,EAAUE,IAGxB,CAER,EACA,SAAUF,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAO+uC,kBAAoB,SAAUtpB,EAAQja,GACpB,IAAjBia,EAAOtR,QAEXnU,EAAAA,EAAOolB,gCAAgC5Z,GAAO2I,MAC9CnU,EAAOolB,gCAAgC5Z,EAAQ,GAAG2I,OAAS,EAE3DnU,EAAOolB,gCAAkCyG,UAAU6P,UAAUsB,mBAAmBh9B,EAAOolB,gCAAiC5Z,EAAQA,EAAQ,CAAE,EAC9I,EAEAxL,EAAOgvC,oBAAsB,SAAUvpB,EAAQja,GACvCia,EAAOtR,QAAWnU,EAAOolB,gCAAgCvtB,OAAS,IAEtEmI,EAAOolB,gCAAgC5Z,GAAO2I,OAAS,EACvDnU,EAAAA,EAAOolB,gCAAgC5Z,EAAQ,GAAG2I,MAElDnU,EAAOolB,gCAAkCyG,UAAU6P,UAAUsB,mBAAmBh9B,EAAOolB,gCAAiC5Z,EAAQA,EAAQ,CAAE,EAC9I,CACJ,EAAE;AC3vBFzM,SAAS2B,WAAW,qBAAsB,CAAC,aAAc,SAAU,QAAS,UAAW,SAAU,gBAAiB,cAAe,mBAAoB,kBAAmB,gBAAiB,oBAAqB,SAAU5C,EAAYkC,EAAQtL,EAAOuP,EAASrD,EAAQC,EAAeC,EAAasiB,EAAkBc,EAAiBC,EAAepjB,GACzUD,EAAY4X,mBACb9X,EAAOO,GAAG,OAAO,EAGrBnB,EAAO8Y,KAAOhY,EAAY4X,kBAC1B1Y,EAAOsjB,MAAQve,oBAAoBC,MAAMue,MAErCvjB,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMO,WACrDljB,EAAOO,GAAG,OAAO,EAGrBrD,EAAWsmB,MAAM,gBAAiB,UAAU,EAC5CpkB,EAAOivC,QAAU,CAAA,EACjBjvC,EAAO0Z,eAAiB,KACxB1Z,EAAOuD,SAAW,KAClBvD,EAAOgd,QAAU,KACjBhd,EAAOkvC,WAAa,KACpBlvC,EAAOmvC,SAAW,KAClBnvC,EAAO2Z,cAAgB,KACvB3Z,EAAOwc,aAAe,KACtBxc,EAAO4Z,qBAAuB,KAC9B5Z,EAAO0c,oBAAsB,KAC7B1c,EAAOovC,iCAAmC,KAC1CpvC,EAAOqvC,0BAA4B,CAC/BxyC,KAAM,KACNkZ,cAAe,CAAA,CACnB,EACA/V,EAAOsa,eAAiB,KACxBta,EAAOsvC,sBAAwB,CAC3BzyC,KAAM,KACNkZ,cAAe,CAAA,CACnB,EACA/V,EAAO6Z,kBAAoB,KAC3B7Z,EAAO4c,gBAAkB,KACzB5c,EAAOsD,cAAgB,KACvBtD,EAAO8c,aAAe,KACtB9c,EAAOuvC,gBAAkB,CACrB/2B,SAAU,KACVgD,MAAO,KACPzF,cAAe,CAAA,CACnB,EACA/V,EAAOia,WAAa,KACpBja,EAAOud,UAAY,KACnBvd,EAAOsjB,MAAQ,KACftjB,EAAOwvC,uBAAyB,CAC5Br0B,UAAW,KACXpF,cAAe,CAAA,CACnB,EACA/V,EAAOuG,kBAAoB,KAC3BvG,EAAOod,iBAAmB,KAC1Bpd,EAAO+nB,kBAAoB,CACvBlrB,KAAM,KACNkZ,cAAe,CAAA,CACnB,EACA/V,EAAOga,aAAe,KACtBha,EAAOyI,YAAc,KACrBzI,EAAOuvB,cAAgB,KACvBvvB,EAAOkd,YAAc,KACrBld,EAAOsrC,gBAAkB,KACzBtrC,EAAO6e,YAAc,KACrB7e,EAAOqrC,sBAAwB,KAC/BrrC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,KAChBzmC,EAAO2rC,mBAAqB,KAC5B3rC,EAAO4rC,2BAA6B,KACpC5rC,EAAO6rC,iBAAmB,CAAA,EAC1B7rC,EAAOyvC,qBAAuB,CAAA,EAC9BzvC,EAAOma,uBAAyB,KAChCna,EAAOyd,qBAAuB,KAC9Bzd,EAAOoa,WAAa,KACpBpa,EAAO0vC,2BAA6B,CAChC7yC,KAAM,KACN8yC,SAAU,KACV55B,cAAe,CAAA,CACnB,EACA/V,EAAOqa,0BAA4B,KACnCra,EAAO2d,yBAA2B,KAClC3d,EAAO4vC,sCAAwC,CAAA,EAC/C5vC,EAAO6vC,cAAgB,GAEvB3rB,EAAgB3J,kBAAkB,EAC7BhiB,KACG,SAAUH,GACN4H,EAAO0Z,eAAiBthB,EAEpB4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ4rB,EAAgBhI,eAAe,EAC1B3jB,KACG,SAAUH,GACN4H,EAAOuD,SAAWnL,EAEd4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ4rB,EAAgBpI,oBAAoB,EAC/BvjB,KACG,SAAUH,GACN4H,EAAO2Z,cAAgBvhB,EAEnB4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ4rB,EAAgBtJ,wBAAwB5a,EAAOsvC,sBAAsBzyC,KAAMmD,EAAOsvC,sBAAsBv5B,aAAa,EAChHxd,KACG,SAAUH,GACN4H,EAAO6Z,kBAAoBzhB,EAEvB4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ4rB,EAAgBjI,oBAAoB,EAC/B1jB,KACG,SAAUH,GACN4H,EAAOsD,cAAgBlL,EAEnB4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ4rB,EAAgBhJ,wBAAwBlb,EAAOwvC,uBAAuBr0B,UAAWnb,EAAOwvC,uBAAuBz5B,aAAa,EACvHxd,KACG,SAAUH,GACN4H,EAAOuG,kBAAoBnO,EAEvB4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ4rB,EAAgB7I,mBAAmBrb,EAAO+nB,kBAAkBlrB,KAAMmD,EAAO+nB,kBAAkBhS,aAAa,EACnGxd,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,EAElB4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,CACJ,EAEJ9qB,EAAcvE,eAAe,EACxBrnB,KACG,SAAUH,GACN4H,EAAO6e,YAAczmB,CAEzB,EACA,SAAUA,EAAUE,IAGxB,EAEJ6rB,EAActE,yBAAyB,EAClCtnB,KACG,SAAUH,GACN4H,EAAOqrC,sBAAwBjzC,CACnC,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgBnJ,YAAY,EACvBxiB,KACG,SAAUH,GACN4H,EAAOuvB,cAAgBn3B,CAC3B,EACA,SAAUA,EAAUE,IAGxB,EAEJ4rB,EAAgB3I,iBAAiBvb,EAAOuvC,gBAAgB/2B,SAAUxY,EAAOuvC,gBAAgB/zB,MAAOxb,EAAOuvC,gBAAgBx5B,aAAa,EAC/Hxd,KACG,SAAUH,GACN4H,EAAOia,WAAa7hB,EAEhB4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EAEpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ6rB,EAAcrE,kBAAkB,EAC3BvnB,KACG,SAAUH,GACN4H,EAAOsjB,MAAQlrB,CACnB,EACA,SAAUA,EAAUE,IAG5B,EAEA4rB,EAAgBzI,0BAA0B,EACrCljB,KACG,SAAUH,GACN4H,EAAOma,uBAAyB/hB,EAE5B4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ4rB,EAAgBtI,gCAAgC5b,EAAO0vC,2BAA2B7yC,KAAMmD,EAAO0vC,2BAA2BC,SAAU3vC,EAAO0vC,2BAA2B35B,aAAa,EAC9Kxd,KACG,SAAUH,GACN4H,EAAOqa,0BAA4BjiB,EAE/B4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAG5B,EAEA4rB,EAAgBhG,kBAAkB,EAC7B3lB,KACG,SAAUH,GACN4H,EAAOsa,eAAiBliB,CAC5B,EACA,SAAUA,EAAUE,IAG5B,EAEA4rB,EAAgBxJ,2BAA2B1a,EAAOqvC,0BAA0BxyC,KAAMmD,EAAOqvC,0BAA0Bt5B,aAAa,EAC3Hxd,KACG,SAAUH,GACN4H,EAAO4Z,qBAAuBxhB,EAE1B4H,EAAO0Z,gBAAkB1Z,EAAOuD,UAAYvD,EAAO2Z,eAAiB3Z,EAAO6Z,mBAAqB7Z,EAAOsD,eAAiBtD,EAAOuG,mBAAqBvG,EAAOia,YAAcja,EAAOma,wBAA0Bna,EAAOqa,2BAA6Bra,EAAO4Z,uBAAsB5Z,EAAOivC,QAAU,CAAA,EACpS,EACA,SAAU72C,EAAUE,IAGxB,EAEJ0H,EAAOsc,mBAAqB,WACxBtc,EAAOymC,OAAS,CAAA,EAEhBviB,EAAgB5H,mBAAmB,EAC9B/jB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAEhB5lC,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,+BAAgC2jB,QAAS,mDAAoDC,MAAO,UAAWC,UAAW,GAAK,CAAC,CAC7L,EACA,SAAU3pB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAO8vC,cAAgB,WACnB9vC,EAAOgd,QAAU,EACrB,EAEAhd,EAAO+vC,YAAc,SAAUn6B,GAC3B5V,EAAOgd,QAAUpH,CACrB,EAEA5V,EAAOgwC,YAAc,WACjBhwC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACMzmC,EAAOgd,QAAQ5Z,GAErC8gB,EAAgBnH,aAAa/c,EAAOgd,OAAO,EACtCzkB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,iBAAkB2jB,QAAS,gBAAkB7hB,EAAOgd,QAAQ3S,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,EAE/L/hB,EAAOgd,QAAU,IACrB,EACA,SAAU5kB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOiwC,kBAAoB,WACvBjwC,EAAOgd,QAAU,IACrB,EAEAhd,EAAOkwC,eAAiB,WACpBlwC,EAAOmvC,SAAW,EACtB,EAEAnvC,EAAOmwC,aAAe,SAAU57C,GAC5ByL,EAAOmvC,SAAW56C,CACtB,EAEAyL,EAAOowC,aAAe,aAmCtBpwC,EAAOqwC,mBAAqB,WACxBrwC,EAAOmvC,SAAW,IACtB,EAEAnvC,EAAOswC,mBAAqB,WACxBtwC,EAAOwc,aAAe,EAC1B,EAEAxc,EAAOuwC,iBAAmB,SAAUC,GAChCxwC,EAAOwc,aAAeg0B,CAC1B,EAEAxwC,EAAOywC,iBAAmB,WACtBzwC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACWzmC,EAAOwc,aAAapZ,GAE/C8gB,EAAgB3H,kBAAkBvc,EAAOwc,YAAY,EAChDjkB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,sBAAuB2jB,QAAS,qBAAuB7hB,EAAOwc,aAAanS,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,EAE9M/hB,EAAOwc,aAAe,IAC1B,EACA,SAAUpkB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAO0wC,uBAAyB,WAC5B1wC,EAAOwc,aAAe,IAC1B,EAEAxc,EAAO2wC,0BAA4B,WAC/B3wC,EAAO0c,oBAAsB,EACjC,EAEA1c,EAAO4wC,wBAA0B,SAAUJ,GACvCxwC,EAAO0c,oBAAsB8zB,EACzBK,EAAgB7wC,EAAO0c,oBAAoBo0B,cAE/C9wC,EAAO0c,oBAAoBq0B,sBAAwB,CAC/C1mC,KAAMwmC,CACV,CACJ,EAEA7wC,EAAOgxC,wBAA0B,WAC7BhxC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACkBzmC,EAAO0c,oBAAoBtZ,GAE7DpD,EAAO0c,oBAAoBo0B,cAAgB9wC,EAAO0c,oBAAoBq0B,sBAAsB1mC,KAE5F6Z,EAAgBzH,yBAAyBzc,EAAO0c,mBAAmB,EAC9DnkB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,8BAA+B2jB,QAAS,6BAA+B7hB,EAAO0c,oBAAoBrS,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,EAErO/hB,EAAO0c,oBAAsB,IACjC,EACA,SAAUtkB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOixC,8BAAgC,WACnCjxC,EAAO0c,oBAAsB,IACjC,EAEA1c,EAAOkxC,sBAAwB,WAC3BlxC,EAAO4c,gBAAkB,EAC7B,EAEA5c,EAAOmxC,oBAAsB,SAAU58C,GACnCyL,EAAO4c,gBAAkBroB,CAC7B,EAEAyL,EAAOoxC,oBAAsB,WACzBpxC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACczmC,EAAO4c,gBAAgBxZ,GAErD8gB,EAAgBvH,sBAAsB3c,EAAO4c,eAAe,EACvDrkB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,yBAA0B2jB,QAAS,wBAA0B7hB,EAAO4c,gBAAgBvS,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,EAEvN/hB,EAAO4c,gBAAkB,KAEzB5c,EAAO4a,wBAAwB,CACnC,EACA,SAAUxiB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOqxC,0BAA4B,WAC/BrxC,EAAO4c,gBAAkB,IAC7B,EAEA5c,EAAO4a,wBAA0B,WAC7B5a,EAAO6Z,kBAAoB,KAE3BqK,EAAgBtJ,wBAAwB5a,EAAOsvC,sBAAsBzyC,KAAMmD,EAAOsvC,sBAAsBv5B,aAAa,EAChHxd,KACG,SAAUH,GACN4H,EAAO6Z,kBAAoBzhB,CAC/B,EACA,SAAUA,EAAUE,IAGxB,CACR,EAEA0H,EAAOsxC,mBAAqB,WACxBtxC,EAAO8c,aAAe,EAC1B,EAEA9c,EAAOuxC,iBAAmB,SAAUh9C,GAChCyL,EAAO8c,aAAevoB,CAC1B,EAEAyL,EAAOwxC,iBAAmB,WACtBxxC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACWzmC,EAAO8c,aAAa1Z,GAE/C8gB,EAAgBrH,kBAAkB7c,EAAO8c,YAAY,EAChDvkB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,sBAAuB2jB,QAAS,qBAAuB7hB,EAAO8c,aAAazS,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,EAE9M/hB,EAAO8c,aAAe,IAC1B,EACA,SAAU1kB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOyxC,uBAAyB,WAC5BzxC,EAAO8c,aAAe,IAC1B,EAEA9c,EAAO+9B,uBAAyB,WAC5B/9B,EAAOod,iBAAmB,EAC9B,EAEApd,EAAOk+B,qBAAuB,SAAU3pC,GACpCyL,EAAOod,iBAAmB7oB,CAC9B,EAEAyL,EAAO0xC,qBAAuB,WAC1B1xC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACezmC,EAAOod,iBAAiBha,GAEvD8gB,EAAgB/G,sBAAsBnd,EAAOod,gBAAgB,EACxD7kB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,0BAA2B2jB,QAAS,yBAA2B7hB,EAAOod,iBAAiB7V,UAAY,+BAAgCua,MAAO,UAAWC,UAAW,GAAK,CAAC,EAE/N/hB,EAAOod,iBAAmB,KAE1Bpd,EAAOkb,wBAAwB,CACnC,EACA,SAAU9iB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAO2xC,2BAA6B,WAChC3xC,EAAOod,iBAAmB,IAC9B,EAEApd,EAAOkb,wBAA0B,WAC7Blb,EAAOuG,kBAAoB,KAE3B2d,EAAgBhJ,wBAAwBlb,EAAOwvC,uBAAuBr0B,UAAWnb,EAAOwvC,uBAAuBz5B,aAAa,EACvHxd,KACG,SAAUH,GACN4H,EAAOuG,kBAAoBnO,CAC/B,EACA,SAAUA,EAAUE,IAGxB,CACR,EAEA0H,EAAOub,iBAAmB,WACtBvb,EAAOia,WAAa,KAEpBiK,EAAgB3I,iBAAiBvb,EAAOuvC,gBAAgB/2B,SAAUxY,EAAOuvC,gBAAgB/zB,MAAOxb,EAAOuvC,gBAAgBx5B,aAAa,EAC/Hxd,KACG,SAAUH,GACN4H,EAAOia,WAAa7hB,CACxB,EACA,SAAUA,EAAUE,IAGxB,CACR,EAEA0H,EAAOytC,WAAa,WAChBztC,EAAOud,UAAY,EACvB,EAEAvd,EAAO0tC,SAAW,SAAU30B,GACxB/Y,EAAOud,UAAYxE,CACvB,EAEA/Y,EAAO6tC,WAAa,SAAU90B,GAC1B/Y,EAAO2rC,mBAAqB,CACxBvoC,GAAI2V,EAAE3V,GACN4V,cAAeD,EAAEC,cACjB6K,KAAM9K,EAAE8K,KACR1X,MAAO4M,EAAE5M,MACT89B,SAAUlxB,EAAEkxB,SACZG,SAAU,GACVD,gBAAiB,GACjBgC,cAAepzB,EAAEozB,aACrB,EAEAprC,EAAkBS,KAAK,qBAAqB,CAChD,EAEAxB,EAAO+tC,mBAAqB,WACxB/tC,EAAO6rC,iBAAmB,CAAA,EAE1B/qC,EAAY+X,eAAe7Y,EAAO2rC,kBAAkB,EAC/CpzC,KACG,SAAUH,GACN4H,EAAO6rC,iBAAmB,CAAA,EAE1B9qC,EAAkBG,MAAM,qBAAqB,CACjD,EACA,SAAU9I,EAAUE,GAChB0H,EAAO6rC,iBAAmB,CAAA,EAC1B7rC,EAAO4rC,2BAA6B,wBACxC,CACJ,CACR,EAEA5rC,EAAO6uC,yBAA2B,WAC9B9tC,EAAkBG,MAAM,qBAAqB,CACpD,EAEGlB,EAAO4xC,SAAW,WACd5xC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACGzmC,EAAOud,UAAUna,GAEpC,GAA2B,MAAvBpD,EAAOud,UAAUna,IAAcpD,EAAOud,UAAU6sB,WAAapqC,EAAOud,UAAU4sB,gBAG9E,OAFAnqC,EAAOlJ,aAAe,0BACtBkJ,EAAOymC,OAAS,CAAA,EAIpBviB,EAAgB5G,eAAetd,EAAOud,SAAS,EAC1ChlB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,aAAc2jB,QAAS,YAAc7hB,EAAOud,UAAU0sB,SAAW,+BAAgCnoB,MAAO,UAAWC,UAAW,GAAK,CAAC,EAE7L/hB,EAAOud,UAAY,IACvB,EACA,SAAUnlB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAO6xC,eAAiB,WACpB7xC,EAAOud,UAAY,IACvB,EAEAvd,EAAO8xC,kBAAoB,WACvB9xC,EAAOyI,YAAc,EACzB,EAEAzI,EAAO+xC,gBAAkB,SAAUn8B,GAC/B5V,EAAOyI,YAAcmN,CACzB,EAEA5V,EAAOgyC,kBAAoB,SAAUp8B,EAAGnZ,GAC1B,IAANA,GAAYuD,EAAOyvC,uBACnBzvC,EAAOyvC,qBAAuB,CAAA,EAE9BzvC,EAAOga,aAAcvd,EAAI,GAAI0X,MAAmB,IAAT1X,EAAI,GAC3CuD,EAAOga,aAAavd,GAAG0X,MAAa,GAAJ1X,EAEhCynB,EAAgB7G,iBAAiBrd,EAAOga,aAAcvd,EAAI,EAAG,EACxDlE,KACG,SAAUH,GACN8rB,EAAgB7G,iBAAiBrd,EAAOga,aAAavd,EAAE,EAClDlE,KACG,SAAUH,GAEN4H,EAAOga,aAAe6R,UAAU6P,UAAUsB,mBAAmBh9B,EAAOga,aAAcvd,EAAIA,EAAI,CAAE,EAE5FuD,EAAOyvC,qBAAuB,CAAA,CAClC,EACA,SAAUr3C,EAAUE,GAGhB0H,EAAOyvC,qBAAuB,CAAA,CAClC,CACJ,CACR,EACA,SAAUr3C,EAAUE,GAGhB0H,EAAOyvC,qBAAuB,CAAA,CAClC,CACJ,EAEZ,EAEAzvC,EAAOiyC,oBAAsB,SAAUr8B,EAAGnZ,GAClCA,IAAOuD,EAAOga,aAAaniB,OAAS,GAAOmI,EAAOyvC,uBAClDzvC,EAAOyvC,qBAAuB,CAAA,EAE9BzvC,EAAOga,aAAavd,GAAG0X,MAAmB,IAAT1X,EAAI,GACrCuD,EAAOga,aAAcvd,EAAI,GAAI0X,MAAmB,IAAT1X,EAAI,GAE3CynB,EAAgB7G,iBAAiBrd,EAAOga,aAAavd,EAAE,EACnDlE,KACG,SAAUH,GACN8rB,EAAgB7G,iBAAiBrd,EAAOga,aAAcvd,EAAI,EAAG,EACxDlE,KACG,SAAUH,GAEN4H,EAAOga,aAAe6R,UAAU6P,UAAUsB,mBAAmBh9B,EAAOga,aAAcvd,EAAIA,EAAI,CAAE,EAE5FuD,EAAOyvC,qBAAuB,CAAA,CAClC,EACA,SAAUr3C,EAAUE,GAGhB0H,EAAOyvC,qBAAuB,CAAA,CAClC,CACJ,CACR,EACA,SAAUr3C,EAAUE,GAGhB0H,EAAOyvC,qBAAuB,CAAA,CAClC,CACJ,EAEX,EAEAzvC,EAAOkyC,gBAAkB,WACrBlyC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACUzmC,EAAOyI,YAAYrF,GAE7C8gB,EAAgB7G,iBAAiBrd,EAAOyI,WAAW,EAC9ClQ,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,qBAAsB2jB,QAAS,oBAAsB7hB,EAAOyI,YAAY4B,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,EAE3M/hB,EAAOyI,YAAc,KACrB5K,KAAKs0C,iBAAiBvV,aAAa,EACnC/+B,KAAKs0C,iBAAiBjT,cAAc,EAEpCl/B,EAAOqb,mBAAmB,CAC9B,EACA,SAAUjjB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOoyC,sBAAwB,WAC3BpyC,EAAOyI,YAAc,IACzB,EAEAzI,EAAOqb,mBAAqB,WACxBrb,EAAOga,aAAe,KAEtBkK,EAAgB7I,mBAAmBrb,EAAO+nB,kBAAkBlrB,KAAMmD,EAAO+nB,kBAAkBhS,aAAa,EACnGxd,KACG,SAAUH,GACN4H,EAAOga,aAAe5hB,CAC1B,EACA,SAAUA,EAAUE,IAGxB,CACR,EAEA0H,EAAOiuC,kBAAoB,WACvBjuC,EAAOkd,YAAc,EACzB,EAEAld,EAAOkuC,gBAAkB,SAAU5jC,GAC/BtK,EAAOkd,YAAchpB,QAAQ+Y,KAAK3C,CAAC,CACvC,EAEAtK,EAAOqyC,gBAAkB,SAAU/nC,GAC/BtK,EAAOkd,YAAchpB,QAAQ+Y,KAAK3C,CAAC,EAEnC,OAAOtK,EAAOkd,YAAY9Z,GAC1BpD,EAAOkd,YAAY7S,MAAQ,UAE3B,IAAK,IAAI5N,EAAI,EAAGA,EAAIuD,EAAOkd,YAAYyS,cAAc93B,OAAQ4E,CAAC,GAC1D,OAAOuD,EAAOkd,YAAYyS,cAAclzB,GAAG2G,EAEtD,EAEGpD,EAAOsyC,gBAAkB,WACrBtyC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACUzmC,EAAOkd,YAAY9Z,GAE7C8gB,EAAgBjH,aAAajd,EAAOkd,WAAW,EAC1C3kB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,qBAAsB2jB,QAAS,oBAAsB7hB,EAAOkd,YAAY7S,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,CAC/M,EACA,SAAU3pB,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOmuC,kBAAoB,SAAU7jC,EAAGkB,GACpC0Y,EAAgBnG,aAAazT,CAAC,EACzB/R,KACG,SAAUylB,GACNhe,EAAOuvB,cAAc70B,OAAO,EAAG8Q,CAAK,EAEpC3K,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,uBAAwB2jB,QAAS,oBAAsB7D,EAAO3T,KAAO,iCAAkCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,CACvM,EACA,SAAU3pB,EAAUE,IAExB,CACR,EAEA0H,EAAOuyC,sBAAwB,WAC3BvyC,EAAOkd,YAAc,IACzB,EAEAld,EAAOsuC,sBAAwB,WAC3BtuC,EAAOsrC,gBAAkB,EAC7B,EAEAtrC,EAAOuuC,oBAAsB,SAAUjkC,EAAGkB,GACtCxL,EAAOsrC,gBAAkBhhC,EACzBtK,EAAOsrC,gBAAgBkD,MAAQhjC,CACnC,EAEAxL,EAAOyuC,sBAAwB,SAAUnkC,EAAGkB,GACxCxL,EAAOkd,YAAYyS,cAAcj1B,OAAO8Q,EAAO,CAAC,CACpD,EAEAxL,EAAOquC,wBAA0B,WACO,MAAhCruC,EAAOsrC,gBAAgBkD,MACvBxuC,EAAOkd,YAAYyS,cAAc3vB,EAAOsrC,gBAAgBkD,OAASxuC,EAAOsrC,iBAGnEtrC,EAAOkd,YAAYyS,gBAAe3vB,EAAOkd,YAAYyS,cAAgB,IAE1E3vB,EAAOkd,YAAYyS,cAAch1B,KAAKqF,EAAOsrC,eAAe,GAGhEtrC,EAAOsrC,gBAAkB,IAC7B,EAEAtrC,EAAOouC,sBAAwB,WAC3BpuC,EAAOsrC,gBAAkB,IAC7B,EAEAtrC,EAAOwyC,2BAA6B,WAChCxyC,EAAOyd,qBAAuB,GAC9Bzd,EAAOyd,qBAAqBg1B,OAAS,EACrCzyC,EAAOyd,qBAAqBi1B,OAAS,EACrC1yC,EAAOyd,qBAAqBk1B,OAAS,EACrC3yC,EAAOyd,qBAAqBm1B,OAAS,CACzC,EAEA5yC,EAAO6yC,yBAA2B,SAAUp2C,GACxCuD,EAAOyd,qBAAuBhhB,EAE1Bq2C,EAA4B9yC,EAAOyd,qBAAqBs1B,MAAM1sB,MAAM,GAAG,EAE3ErmB,EAAOyd,qBAAqBg1B,OAAS36C,SAASg7C,EAA0B,GAAI,CAAC,EAC7E9yC,EAAOyd,qBAAqBi1B,OAAS56C,SAASg7C,EAA0B,GAAI,CAAC,EAC7E9yC,EAAOyd,qBAAqBk1B,OAAS76C,SAASg7C,EAA0B,GAAI,CAAC,EAC7E9yC,EAAOyd,qBAAqBm1B,OAAS96C,SAASg7C,EAA0B,GAAI,CAAC,CACjF,EAEA9yC,EAAOwd,yBAA2B,WAC9Bxd,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EAEhBzmC,EAAOyd,qBAAqBs1B,MAAQ/yC,EAAOyd,qBAAqBg1B,OAAS,IAAMzyC,EAAOyd,qBAAqBi1B,OAAS,IAAM1yC,EAAOyd,qBAAqBk1B,OAAS,IAAM3yC,EAAOyd,qBAAqBm1B,OAEjM1uB,EAAgB1G,yBAAyBxd,EAAOyd,oBAAoB,EAC/DllB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,+BAAgC2jB,QAAS,8BAAgC7hB,EAAOyd,qBAAqBs1B,MAAQ,+BAAgCjxB,MAAO,UAAWC,UAAW,GAAK,CAAC,EAEzO/hB,EAAOyd,qBAAuB,KAC9B5f,KAAKm1C,2BAA2BpW,aAAa,EAC7C/+B,KAAKm1C,2BAA2B9T,cAAc,CAClD,EACA,SAAU9mC,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOizC,+BAAiC,WACpCjzC,EAAOyd,qBAAuB,IAClC,EAEAzd,EAAOie,2BAA6B,SAAUzS,EAAOiS,GACjDzd,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EAEhBviB,EAAgBjG,2BAA2BR,CAAoB,EAC1DllB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,iCAAkC2jB,QAAS,8BAAgCpE,EAAqBs1B,MAAQ,iCAAkCjxB,MAAO,UAAWC,UAAW,GAAK,CAAC,EAEtO/hB,EAAOma,uBAAuBzf,OAAO8Q,EAAO,CAAC,CACjD,EACA,SAAUpT,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOkzC,+BAAiC,WACpClzC,EAAO2d,yBAA2B,EACtC,EAEA3d,EAAOmzC,6BAA+B,SAAU5+C,GAC5CyL,EAAO2d,yBAA2BppB,CACtC,EAEAyL,EAAOozC,+BAAiC,SAAUx9B,EAAGnZ,GACvC,IAANA,GAAYuD,EAAO4vC,wCACnB5vC,EAAO4vC,sCAAwC,CAAA,EAE/C5vC,EAAOqa,0BAA2B5d,EAAI,GAAI0X,MAAmB,IAAT1X,EAAI,GACxDuD,EAAOqa,0BAA0B5d,GAAG0X,MAAa,GAAJ1X,EAE7CynB,EAAgBxG,8BAA8B1d,EAAOqa,0BAA2B5d,EAAI,EAAG,EAClFlE,KACG,SAAUH,GACN8rB,EAAgBxG,8BAA8B1d,EAAOqa,0BAA0B5d,EAAE,EAC5ElE,KACG,SAAUH,GACN4H,EAAOqa,0BAA4BwR,UAAU6P,UAAUsB,mBAAmBh9B,EAAOqa,0BAA2B5d,EAAIA,EAAI,CAAE,EAEtHuD,EAAO4vC,sCAAwC,CAAA,CACnD,EACA,SAAUx3C,EAAUE,GAGhB0H,EAAO4vC,sCAAwC,CAAA,CACnD,CACJ,CACR,EACA,SAAUx3C,EAAUE,GAGhB0H,EAAO4vC,sCAAwC,CAAA,CACnD,CACJ,EAEZ,EAEA5vC,EAAOqzC,iCAAmC,SAAUz9B,EAAGnZ,GAC/CA,IAAOuD,EAAOga,aAAaniB,OAAS,GAAOmI,EAAO4vC,wCAClD5vC,EAAO4vC,sCAAwC,CAAA,EAE/C5vC,EAAOqa,0BAA0B5d,GAAG0X,MAAmB,IAAT1X,EAAI,GAClDuD,EAAOqa,0BAA2B5d,EAAI,GAAI0X,MAAmB,IAAT1X,EAAI,GAExDynB,EAAgBxG,8BAA8B1d,EAAOqa,0BAA0B5d,EAAE,EAC5ElE,KACG,SAAUH,GACN8rB,EAAgBxG,8BAA8B1d,EAAOqa,0BAA2B5d,EAAI,EAAG,EAClFlE,KACG,SAAUH,GACN4H,EAAOqa,0BAA4BwR,UAAU6P,UAAUsB,mBAAmBh9B,EAAOqa,0BAA2B5d,EAAIA,EAAI,CAAE,EAEtHuD,EAAO4vC,sCAAwC,CAAA,CACnD,EACA,SAAUx3C,EAAUE,GAGhB0H,EAAO4vC,sCAAwC,CAAA,CACnD,CACJ,CACR,EACA,SAAUx3C,EAAUE,GAGhB0H,EAAO4vC,sCAAwC,CAAA,CACnD,CACJ,EAEZ,EAEA5vC,EAAOszC,6BAA+B,WAClCtzC,EAAOlJ,aAAe,KACtBkJ,EAAOymC,OAAS,CAAA,EACuBzmC,EAAO2d,yBAAyBva,GAEvE8gB,EAAgBxG,8BAA8B1d,EAAO2d,wBAAwB,EACxEplB,KACG,SAAUH,GACN4H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,KAEtB+J,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,oCAAqC2jB,QAAS,mCAAqC7hB,EAAO2d,yBAAyBtT,KAAO,+BAAgCyX,MAAO,UAAWC,UAAW,GAAK,CAAC,EAEtP/hB,EAAO2d,yBAA2B,KAClC3d,EAAO6vC,cAAc0D,8BAA8B3W,aAAa,EAChE58B,EAAO6vC,cAAc0D,8BAA8BrU,cAAc,EAEjEl/B,EAAOwzC,4BAA4B,CACvC,EACA,SAAUp7C,EAAUE,GAChB0H,EAAOymC,OAAS,CAAA,EAChBzmC,EAAOlJ,aAAe,wBAC1B,CACJ,CACR,EAEAkJ,EAAOyzC,mCAAqC,WACxCzzC,EAAO2d,yBAA2B,IACtC,EAEA3d,EAAOwzC,4BAA8B,WACjCxzC,EAAOqa,0BAA4B,KAEnC6J,EAAgBtI,gCAAgC5b,EAAO0vC,2BAA2B7yC,KAAMmD,EAAO0vC,2BAA2BC,SAAU3vC,EAAO0vC,2BAA2B35B,aAAa,EAC9Kxd,KACG,SAAUH,GACN4H,EAAOqa,0BAA4BjiB,CACvC,EACA,SAAUA,EAAUE,IAGxB,CACR,CACJ,EAAE;AC3hCF0G,SAAS0B,WAAW,qBAAsB,CAAC,SAAU,SAAU,cAAe,mBAAoB,SAAUV,EAAQY,EAAQE,EAAasiB,GAChItiB,EAAY4X,mBACb9X,EAAOO,GAAG,OAAO,EAGrBnB,EAAO8Y,KAAOhY,EAAY4X,kBAC1B1Y,EAAOsjB,MAAQve,oBAAoBC,MAAMue,MACzCvjB,EAAOiZ,YAAcmK,EAAiBnK,YAAY,EAClDjZ,EAAOkZ,eAAiBkK,EAAiBlK,eAAe,EAEpDlZ,EAAO8Y,KAAK+K,OAAS9e,oBAAoBC,MAAMue,MAAMO,WACrDljB,EAAOO,GAAG,OAAO,EAGrBnB,EAAOqjB,KAAO,CACV,CACIxmB,KAAQ,eACRqB,MAAS,cACb,EACA,CACIrB,KAAQ,YACRqB,MAAS,WACb,IAGA8B,EAAOiZ,aAAejZ,EAAOkZ,iBAC7BlZ,EAAOqjB,KAAK1oB,KAAK,CACbkC,KAAQ,UACRqB,MAAS,SACb,CAAC,EAGL8B,EAAOqjB,KAAKU,UAAY,cAC5B,EAAE;ACjCF/kB,SAAS0B,WAAW,gCAAiC,CAAC,aAAc,SAAU,WAAY,UAAW,gBAAiB,eAAgB,qBAAsB,kBAAmB,gBAAiB,oBAAqB,SAAU5C,EAAYkC,EAAQpL,EAAUqP,EAASpD,EAAesiC,EAAclf,EAAoBjP,EAAiBmP,EAAepjB,GAkUnV,SAAS2yC,IACLvvB,EAAc9D,kBAAkB,EAC3B9nB,KACG,SAAUE,GACFA,IACAuH,EAAO2zC,sBAAwBl7C,EAE3BuH,EAAO2zC,sBAAsBxM,OAASpiC,oBAAoBC,MAAM4uC,WAAWC,qBAC3B,MAA5C7zC,EAAO2zC,sBAAsBG,YAC7B9zC,EAAO+zC,0BAA4B,+CAAiD/zC,EAAO2zC,sBAAsBK,KAAK/J,SAAW,OAASrvC,OAAOoF,EAAO2zC,sBAAsBnqC,WAAW,EAAE5N,OAAO,qBAAqB,EAGvNoE,EAAO+zC,0BAA4B,oCAAsCn5C,OAAOoF,EAAO2zC,sBAAsBG,WAAW,EAAEl4C,OAAO,qBAAqB,EAAI,gBAAkBoE,EAAO2zC,sBAAsBK,KAAK/J,SAG7MjqC,EAAO2zC,sBAAsBxM,OAASpiC,oBAAoBC,MAAM4uC,WAAWK,oBAChC,MAA5Cj0C,EAAO2zC,sBAAsBG,YAC7B9zC,EAAO+zC,0BAA4B,4CAA8C/zC,EAAO2zC,sBAAsBK,KAAK/J,SAAW,OAASrvC,OAAOoF,EAAO2zC,sBAAsBnqC,WAAW,EAAE5N,OAAO,qBAAqB,EAGpNoE,EAAO+zC,0BAA4B,iCAAmCn5C,OAAOoF,EAAO2zC,sBAAsBG,WAAW,EAAEl4C,OAAO,qBAAqB,EAAI,gBAAkBoE,EAAO2zC,sBAAsBK,KAAK/J,UAI3N,EACA,SAAU5xC,GACNY,QAAQC,IAAIb,CAAK,CACrB,CACJ,CACR,CA7VAyF,EAAWsmB,MAAM,gBAAiB,UAAU,EAC5CpkB,EAAOk0C,kBAAoBnvC,oBAAoBC,MAAMmvC,mBACrDn0C,EAAOo0C,WAAarvC,oBAAoBC,MAAM4uC,WAC9C5zC,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAOq0C,aAAe,mBACtBr0C,EAAO8nB,mBAAqB,KAC5B9nB,EAAOukB,YAAc,CAAA,EACrBvkB,EAAOrB,aAAe,KACtBqB,EAAOs0C,wBAA0B,CAAA,EACjCt0C,EAAOu0C,sBAAwB,CAAA,EAC/Bv0C,EAAOw0C,iBAAmB,CAAA,EAC1Bx0C,EAAO+O,YAAcnU,OAAO,EAAEgH,IAAI,CAAC,EAAG,GAAG,EACzC5B,EAAO2zC,sBAAwB,KAC/B3zC,EAAOrB,aAAe,GAEtBqB,EAAO+mB,gBAAkB,WACrB,OAAQ/mB,EAAO6nB,iBACX,IAAK,QACD7nB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9B,MACJ,IAAK,YACDoF,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EACjDhnB,EAAO4nB,cAAgBhtB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAC/C,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAEU,EAAtCoF,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,EACjF,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAEP,EAAtChnB,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,CAEzF,CACJ,EAEAhnB,EAAOgmB,KAAO,SAAUC,GACpBjmB,EAAOqkB,OAAS4B,EAChBjmB,EAAOskB,YAAc,CAACtkB,EAAOskB,YAE7BtkB,EAAOrB,aAAaqnB,KAAK,SAAUje,EAAG2sC,GAClC,MAAwB,UAApB,OAAO3sC,EAAEke,IAAuBrrB,OAAOmN,EAAEke,GAAQ,mBAAoB,CAAA,CAAI,EAAE0uB,QAAQ,GACnF17C,QAAQC,IAAI,iBAAiB,EACzB8G,EAAOskB,YACAtkB,EAAO40C,eAAeF,EAAEzuB,GAAQle,EAAEke,EAAM,EAGxCjmB,EAAO40C,eAAe7sC,EAAEke,GAAQyuB,EAAEzuB,EAAM,GAG1B,UAApB,OAAOle,EAAEke,IAAgD,GAAzBle,EAAEke,GAAO7qB,QAAQ,GAAG,GACzDnC,QAAQC,IAAI,qBAAqB,EAC7B8G,EAAOskB,YACA8Z,WAAWsW,EAAEzuB,GAAO/e,QAAQ,IAAK,EAAE,CAAC,EAAIk3B,WAAWr2B,EAAEke,GAAO/e,QAAQ,IAAK,EAAE,CAAC,EAG5Ek3B,WAAWr2B,EAAEke,GAAO/e,QAAQ,IAAK,EAAE,CAAC,EAAIk3B,WAAWsW,EAAEzuB,GAAO/e,QAAQ,IAAK,EAAE,CAAC,GAG9D,UAApB,OAAOa,EAAEke,IACdhtB,QAAQC,IAAI,mBAAmB,EAC3B8G,EAAOskB,YACAowB,EAAEzuB,GAASle,EAAEke,GAGble,EAAEke,GAASyuB,EAAEzuB,KAIxBhtB,QAAQC,IAAI,mBAAmB,EAC3B8G,EAAOskB,YACAowB,EAAEzuB,GAAO4uB,cAAc9sC,EAAEke,EAAM,EAM/Ble,EAAEke,GAAO4uB,cAAcH,EAAEzuB,EAAM,EAIlD,CAAC,CACL,EAEAjmB,EAAO40C,eAAiB,SAAU7sC,EAAG2sC,GAC7BI,EAAUl6C,OAAOmN,EAAG,kBAAkB,EACtCgtC,EAAUn6C,OAAO85C,EAAG,kBAAkB,EAE1C,OADcI,EAAQ7V,SAAS8V,CAAO,EAAI,CAAC,EAAKD,EAAQ9lC,OAAO+lC,CAAO,EAAI,EAAI,CAElF,EAEA/0C,EAAOg1C,kBAAoB,SAAUryC,GAGjC,IAFA,IAAI2xC,EAA0B,CAAA,EAErB73C,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GAC7C,GAAI,CAACuD,EAAOrB,aAAalC,GAAGw4C,UAAW,CACnCX,EAA0B,CAAA,EAC1B,KACJ,CAGJt0C,EAAOs0C,wBAA0BA,CACrC,EAEAt0C,EAAOk1C,sBAAwB,WAC3B,IAAK,IAAIz4C,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GAC7CuD,EAAOrB,aAAalC,GAAGw4C,UAAYj1C,EAAOs0C,uBAElD,EAEAt0C,EAAOm1C,4BAA8B,WAGjC,IAFA,IAAIC,EAAuB,EAElB34C,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GACzCuD,EAAOrB,aAAalC,GAAGw4C,WACvBG,CAAoB,GAI5B,OAAOA,CACX,EAEAp1C,EAAOq1C,yBAA2B,WAC9B,IAAIC,EAAa,EAEjB,GAAIt1C,EAAOrB,aACP,IAAK,IAAIlC,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GAC7C64C,GAAct1C,EAAOrB,aAAalC,GAAGkJ,MAI7C,OAAO1B,EAAQ,QAAQ,EAAEqxC,EAAY,CAAC,CAC1C,EAEAt1C,EAAOu1C,iCAAmC,WAGtC,IAFA,IAAID,EAAa,EAER74C,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GACzCuD,EAAOrB,aAAalC,GAAGw4C,YACvBK,GAAct1C,EAAOrB,aAAalC,GAAGkJ,OAI7C,OAAO1B,EAAQ,QAAQ,EAAEqxC,EAAY,CAAC,CAC1C,EAEAt1C,EAAOqI,mBAAqB,WAIxB,OAHArI,EAAOrB,aAAe,KACtBqB,EAAOs0C,wBAA0B,CAAA,EAEzBt0C,EAAOq0C,cACX,IAAK,oBACDr0C,EAAOw1C,UAAY,CAAA,EACnBx1C,EAAO+N,sBAAwB,CAAA,EAC/B/N,EAAOgO,WAAa,CAAA,EACpBhO,EAAOiO,YAAc,CAAA,EACrBjO,EAAOkO,mBAAqB,CAAA,EAC5B,MACJ,IAAK,0BACDlO,EAAOw1C,UAAY,CAAA,EACnBx1C,EAAO+N,sBAAwB,CAAA,EAC/B/N,EAAOgO,WAAa,CAAA,EACpBhO,EAAOiO,YAAc,CAAA,EACrBjO,EAAOkO,mBAAqB,CAAA,EAC5B,MACJ,IAAK,uBACDlO,EAAOw1C,UAAY,CAAA,EACnBx1C,EAAO+N,sBAAwB,CAAA,EAC/B/N,EAAOgO,WAAa,CAAA,EACpBhO,EAAOiO,YAAc,CAAA,EACrBjO,EAAOkO,mBAAqB,CAAA,EAC5B,MACJ,IAAK,eACDlO,EAAOw1C,UAAY,CAAA,EACnBx1C,EAAO+N,sBAAwB,CAAA,EAC/B/N,EAAOgO,WAAa,CAAA,EACpBhO,EAAOiO,YAAc,CAAA,EACrBjO,EAAOkO,mBAAqB,CAAA,EAC5B,MACJ,IAAK,uBACDlO,EAAOw1C,UAAY,CAAA,EACnBx1C,EAAO+N,sBAAwB,CAAA,EAC/B/N,EAAOgO,WAAa,CAAA,EACpBhO,EAAOiO,YAAc,CAAA,EACrBjO,EAAOkO,mBAAqB,CAAA,EAC5B,MACJ,QACIlO,EAAOw1C,UAAY,CAAA,EACnBx1C,EAAO+N,sBAAwB,CAAA,EAC/B/N,EAAOgO,WAAa,CAAA,EACpBhO,EAAOiO,YAAc,CAAA,EACrBjO,EAAOkO,mBAAqB,CAAA,CAEpC,CAEA+V,EAAmBpW,wBAAwB7N,EAAO2nB,gBAAiB3nB,EAAO4nB,cAAe5nB,EAAO8nB,mBAAoB9nB,EAAOw1C,UAAWx1C,EAAO+N,sBAAuB/N,EAAOgO,WAAYhO,EAAOiO,YAAajO,EAAOkO,kBAAkB,EAC/N3V,KACG,WACIyH,EAAOrB,aAAeslB,EAAmBtlB,aACzC+0C,EAAyB,CAC7B,EACA,SAAUr7C,GACNY,QAAQC,IAAIb,CAAK,CACrB,CACJ,CACR,EAEA2H,EAAOy1C,eAAiB,WACpB,GAAIz1C,EAAOw1C,WAAax1C,EAAO+N,uBAAyB/N,EAAOgO,WAG3D,OADAjN,EAAkBS,KAAK,8BAA8B,EAC9C,CAAA,EAGPxB,EAAO01C,qBAAqB,CAEpC,EAEA11C,EAAO21C,cAAgB,WAEnB,OADA50C,EAAkBG,MAAM,8BAA8B,EAC/C,CAAA,CACX,EAEAlB,EAAO01C,qBAAuB,WAG1B,IAFA,IAAIE,EAAwB,GAEnBn5C,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GACzCuD,EAAOrB,aAAalC,GAAGw4C,WACvBW,EAAsBj7C,KAAK,CAAEyI,GAAIpD,EAAOrB,aAAalC,GAAG2G,EAAG,CAAC,EAIpE,IAGQ/B,EAD4B,GAAhCu0C,EAAsB/9C,SAClBwJ,EAAQ,IAAI8hC,EAAa,CAGzBttC,MAAO,YAEPsvC,QAAS,CAAA,EAETC,aAAc,CAAA,EAEdC,YAZO,kDAcPC,aAAc,CACVuQ,YAAa71C,EACbrB,aAAci3C,EACdE,aAAcl7C,OAAO,EACrBm7C,QAAS,WACL,IAAIF,EAAch4C,KAAKg4C,YACvBh4C,KAAKg4C,YAAYrB,iBAAmB,CAAA,EAEpCvwB,EAAmBnV,oBAAoBjR,KAAKi4C,aAAcj4C,KAAKc,YAAY,EACtEpG,KACG,WACIs9C,EAAYrB,iBAAmB,CAAA,EAC/B3zC,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,qBAAsB2jB,QAAS,gDAAiDC,MAAO,UAAWC,UAAW,GAAK,CAAC,EAC5K/hB,EAAOqI,mBAAmB,EAC1BqrC,EAAyB,CAC7B,EACA,SAAUr7C,GACNw9C,EAAYrB,iBAAmB,CAAA,EAC/Bv7C,QAAQC,IAAIb,CAAK,CACrB,CACJ,EAEJgJ,EAAMqkC,WAAW,EACjB9wC,EAAS,WACLyM,EAAMskC,QAAQ,CAClB,EAAG,GAAI,CACX,EACAzkC,MAAO,WACHG,EAAMqkC,WAAW,EACjB9wC,EAAS,WACLyM,EAAMskC,QAAQ,CAClB,EAAG,GAAI,CACX,CACJ,CACJ,CAAC,GACKE,SAAS,CAEvB,EAEA7lC,EAAOiP,oBAAsB,WACzBjP,EAAOu0C,sBAAwB,CAAA,EAI/B,IAFA,IAAI51C,EAAe,GAEVlC,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GACzCuD,EAAOrB,aAAalC,GAAGw4C,WACvBt2C,EAAahE,KAAK,CAAEyI,GAAIpD,EAAOrB,aAAalC,GAAG2G,EAAG,CAAC,EAI3D6gB,EAAmBhV,oBAAoBtQ,CAAY,EAC9CpG,KACG,WACIyH,EAAOu0C,sBAAwB,CAAA,EAE/Bv0C,EAAOqI,mBAAmB,CAC9B,EACA,SAAUhQ,GACNY,QAAQC,IAAIb,CAAK,CACrB,CACJ,CACR,EAkCAq7C,EAAyB,CAC7B,EAAE;ACnWF10C,SAAS0B,WAAW,6BAA8B,CAAC,aAAc,SAAU,WAAY,UAAW,gBAAiB,eAAgB,kBAAmB,gBAAiB,oBAAqB,SAAU5C,EAAYkC,EAAQpL,EAAUqP,EAASpD,EAAesiC,EAAcnuB,EAAiBmP,EAAepjB,GAmVtS,SAAS2yC,IACLvvB,EAAc9D,kBAAkB,EAC3B9nB,KACG,SAAUE,GACFA,IACAuH,EAAO2zC,sBAAwBl7C,EAE3BuH,EAAO2zC,sBAAsBxM,OAASpiC,oBAAoBC,MAAM4uC,WAAWC,qBAC3B,MAA5C7zC,EAAO2zC,sBAAsBG,YAC7B9zC,EAAO+zC,0BAA4B,+CAAiD/zC,EAAO2zC,sBAAsBK,KAAK/J,SAAW,OAASrvC,OAAOoF,EAAO2zC,sBAAsBnqC,WAAW,EAAE5N,OAAO,qBAAqB,EAGvNoE,EAAO+zC,0BAA4B,oCAAsCn5C,OAAOoF,EAAO2zC,sBAAsBG,WAAW,EAAEl4C,OAAO,qBAAqB,EAAI,gBAAkBoE,EAAO2zC,sBAAsBK,KAAK/J,SAG7MjqC,EAAO2zC,sBAAsBxM,OAASpiC,oBAAoBC,MAAM4uC,WAAWK,oBAChC,MAA5Cj0C,EAAO2zC,sBAAsBG,YAC7B9zC,EAAO+zC,0BAA4B,4CAA8C/zC,EAAO2zC,sBAAsBK,KAAK/J,SAAW,OAASrvC,OAAOoF,EAAO2zC,sBAAsBnqC,WAAW,EAAE5N,OAAO,qBAAqB,EAGpNoE,EAAO+zC,0BAA4B,iCAAmCn5C,OAAOoF,EAAO2zC,sBAAsBG,WAAW,EAAEl4C,OAAO,qBAAqB,EAAI,gBAAkBoE,EAAO2zC,sBAAsBK,KAAK/J,UAI3N,EACA,SAAU5xC,GACNY,QAAQC,IAAIb,CAAK,CACrB,CACJ,CACR,CA9WAyF,EAAWsmB,MAAM,gBAAiB,UAAU,EAC5CpkB,EAAOk0C,kBAAoBnvC,oBAAoBC,MAAMmvC,mBACrDn0C,EAAOo0C,WAAarvC,oBAAoBC,MAAM4uC,WAC9C5zC,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAOq0C,aAAe,mBACtBr0C,EAAOqoB,mBAAqB,KAC5BroB,EAAOukB,YAAc,CAAA,EACrBvkB,EAAOpB,UAAY,KACnBoB,EAAOs0C,wBAA0B,CAAA,EACjCt0C,EAAOw0C,iBAAmB,CAAA,EAC1Bx0C,EAAO2zC,sBAAwB,KAC/B3zC,EAAOpB,UAAY,GACnBoB,EAAOqkB,OAAS,GAChBrkB,EAAOskB,YAAc,CAAA,EAErBtkB,EAAO+mB,gBAAkB,WACrB,OAAQ/mB,EAAO6nB,iBACX,IAAK,QACD7nB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9B,MACJ,IAAK,YACDoF,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EACjDhnB,EAAO4nB,cAAgBhtB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAC/C,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAEU,EAAtCoF,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,EACjF,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAEP,EAAtChnB,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,CAEzF,CACJ,EAEAhnB,EAAOgmB,KAAO,SAAUC,GACpBjmB,EAAOqkB,OAAS4B,EAChBjmB,EAAOskB,YAAc,CAACtkB,EAAOskB,YAE7BtkB,EAAOpB,UAAUonB,KAAK,SAAUje,EAAG2sC,GAC/B,MAAwB,UAApB,OAAO3sC,EAAEke,IAAuBrrB,OAAOmN,EAAEke,GAAQ,mBAAoB,CAAA,CAAI,EAAE0uB,QAAQ,EAC/E30C,EAAOskB,YACAtkB,EAAO40C,eAAeF,EAAEzuB,GAAQle,EAAEke,EAAM,EAGxCjmB,EAAO40C,eAAe7sC,EAAEke,GAAQyuB,EAAEzuB,EAAM,EAG1B,UAApB,OAAOle,EAAEke,IAAgD,GAAzBle,EAAEke,GAAO7qB,QAAQ,GAAG,EACrD4E,EAAOskB,YACA8Z,WAAWsW,EAAEzuB,GAAO/e,QAAQ,IAAK,EAAE,CAAC,EAAIk3B,WAAWr2B,EAAEke,GAAO/e,QAAQ,IAAK,EAAE,CAAC,EAG5Ek3B,WAAWr2B,EAAEke,GAAO/e,QAAQ,IAAK,EAAE,CAAC,EAAIk3B,WAAWsW,EAAEzuB,GAAO/e,QAAQ,IAAK,EAAE,CAAC,EAG9D,UAApB,OAAOa,EAAEke,GACVjmB,EAAOskB,YACAowB,EAAEzuB,GAASle,EAAEke,GAGble,EAAEke,GAASyuB,EAAEzuB,GAIpBjmB,EAAOskB,YACAowB,EAAEzuB,GAAO4uB,cAAc9sC,EAAEke,EAAM,EAG/Ble,EAAEke,GAAO4uB,cAAcH,EAAEzuB,EAAM,CAGlD,CAAC,CACL,EAEAjmB,EAAO40C,eAAiB,SAAS7sC,EAAG2sC,GAC5BI,EAAUl6C,OAAOmN,EAAG,kBAAkB,EACtCgtC,EAAUn6C,OAAO85C,EAAG,kBAAkB,EAE1C,OADcI,EAAQ7V,SAAS8V,CAAO,EAAI,CAAC,EAAKD,EAAQ9lC,OAAO+lC,CAAO,EAAI,EAAI,CAElF,EAEA/0C,EAAOgqB,eAAiB,SAAU7a,GAG9B,IAFA,IAAI6mC,EAAuB,CAAA,EAElBv5C,EAAI,EAAGA,EAAIuD,EAAOpB,UAAU/G,OAAQ4E,CAAC,GAC1C,GAAI,CAACuD,EAAOpB,UAAUnC,GAAGw4C,UAAW,CAChCe,EAAuB,CAAA,EACvB,KACJ,CAGJh2C,EAAOg2C,qBAAuBA,EAE9Bj1C,EAAkBS,KAAK,mBAAmB,CAC9C,EAEAxB,EAAOmqB,oBAAsB,WACzBppB,EAAkBG,MAAM,mBAAmB,CAClD,EAEGlB,EAAOi2C,mBAAqB,WACxB,IAAK,IAAIx5C,EAAI,EAAGA,EAAIuD,EAAOpB,UAAU/G,OAAQ4E,CAAC,GAC1CuD,EAAOpB,UAAUnC,GAAGw4C,UAAYj1C,EAAOg2C,oBAE/C,EAEAh2C,EAAOk2C,yBAA2B,WAG9B,IAFA,IAAIC,EAAoB,EAEf15C,EAAI,EAAGA,EAAIuD,EAAOpB,UAAU/G,OAAQ4E,CAAC,GACtCuD,EAAOpB,UAAUnC,GAAGw4C,WACpBkB,CAAiB,GAIzB,OAAOA,CACX,EAEAn2C,EAAOo2C,qBAAuB,WAC1B,IAAIC,EAAY,EAEhB,GAAIr2C,EAAOpB,UACP,IAAK,IAAInC,EAAI,EAAGA,EAAIuD,EAAOpB,UAAU/G,OAAQ4E,CAAC,GAC1C45C,GAAar2C,EAAOpB,UAAUnC,GAAG+K,KAIzC,OAAOvD,EAAQ,QAAQ,EAAEoyC,EAAW,CAAC,CACzC,EAEAr2C,EAAOs2C,6BAA+B,WAClC,IAAID,EAAY,EAEhB,GAAIr2C,EAAOpB,UACP,IAAK,IAAInC,EAAI,EAAGA,EAAIuD,EAAOpB,UAAU/G,OAAQ4E,CAAC,GACtCuD,EAAOpB,UAAUnC,GAAGw4C,YACpBoB,GAAar2C,EAAOpB,UAAUnC,GAAG+K,MAK7C,OAAOvD,EAAQ,QAAQ,EAAEoyC,EAAW,CAAC,CACzC,EAEAr2C,EAAOgS,gBAAkB,WAIrB,OAHAhS,EAAOpB,UAAY,KACnBoB,EAAOg2C,qBAAuB,CAAA,EAEtBh2C,EAAOq0C,cACX,IAAK,uBACDr0C,EAAOgO,WAAa,CAAA,EACpBhO,EAAO0S,SAAW,CAAA,EAClB1S,EAAO2S,mBAAqB,CAAA,EAC5B3S,EAAOiO,YAAc,CAAA,EACrB,MACJ,IAAK,YACDjO,EAAOgO,WAAa,CAAA,EACpBhO,EAAO0S,SAAW,CAAA,EAClB1S,EAAO2S,mBAAqB,CAAA,EAC5B3S,EAAOiO,YAAc,CAAA,EACrB,MACJ,IAAK,uBACDjO,EAAOgO,WAAa,CAAA,EACpBhO,EAAO0S,SAAW,CAAA,EAClB1S,EAAO2S,mBAAqB,CAAA,EAC5B3S,EAAOiO,YAAc,CAAA,EACrB,MACJ,IAAK,eACDjO,EAAOgO,WAAa,CAAA,EACpBhO,EAAO0S,SAAW,CAAA,EAClB1S,EAAO2S,mBAAqB,CAAA,EAC5B3S,EAAOiO,YAAc,CAAA,EACrB,MACJ,QACIjO,EAAOgO,WAAa,CAAA,EACpBhO,EAAO0S,SAAW,CAAA,EAClB1S,EAAO2S,mBAAqB,CAAA,CAEpC,CAEAqC,EAAgBvC,qBAAqBzS,EAAO2nB,gBAAiB3nB,EAAO4nB,cAAe5nB,EAAOqoB,mBAAoBroB,EAAOgO,WAAYhO,EAAO0S,SAAU1S,EAAO2S,mBAAoB3S,EAAOiO,WAAW,EAC1L1V,KACG,WACIyH,EAAOpB,UAAYoW,EAAgBpW,UACnC80C,EAAyB,CAC7B,CACJ,CAER,EAEA1zC,EAAO01C,qBAAuB,WAC1B,IAAIa,EAAqB,GACrBC,EAAiB,CAAA,EACjBC,EAAuB,EACvBC,EAAY,CAAA,EAChB12C,EAAO22C,eAAiB,GAExB,IAAK,IAAIl6C,EAAI,EAAGA,EAAIuD,EAAOpB,UAAU/G,OAAQ4E,CAAC,GAC1C,GAAIuD,EAAOpB,UAAUnC,GAAGw4C,UAAW,CAG/B,IAAK,IAFLuB,EAAiB,CAAA,EAERviC,EAAI,EAAGA,EAAIjU,EAAO22C,eAAe9+C,OAAQoc,CAAC,GAC/C,GAAIjU,EAAOpB,UAAUnC,GAAGmL,SAASxE,KAAOpD,EAAO22C,eAAe1iC,GAAGrM,SAASxE,GAAI,EACtEpD,CAAAA,EAAOpB,UAAUnC,GAAGmL,SAASgvC,mBACzB52C,EAAOpB,UAAUnC,GAAGsJ,qBAAqB,GAAGyG,YAAYlI,SAASuyC,iBAAiBC,aAGtF92C,EAAO22C,eAAe1iC,GAAG8iC,oBAAsB/2C,EAAOpB,UAAUnC,GAAG+K,MAGvEgvC,EAAiB,CAAA,EACjB,KACJ,CAGJ,GAAI,CAACA,EACD,GAAIx2C,EAAOpB,UAAUnC,GAAGmL,SAASgvC,mBAC7B,GAAI52C,EAAOpB,UAAUnC,GAAGsJ,qBAAqB,GAAGyG,YAAYlI,SAASuyC,iBAAiBC,UAAW,CAG7F,IAAK,IAFLL,EAAuB,EAEd3vC,EAAI,EAAGA,EAAI9G,EAAOpB,UAAUnC,GAAGmL,SAASmP,WAAWlf,OAAQiP,CAAC,GACjE2vC,GAAwBz2C,EAAOpB,UAAUnC,GAAGmL,SAASmP,WAAWjQ,GAAGisC,MAGvE/yC,EAAO22C,eAAeh8C,KAAK,CACvBiN,SAAU5H,EAAOpB,UAAUnC,GAAGmL,SAC9BovC,gBAAiBP,EACjBM,mBAAoB/2C,EAAOpB,UAAUnC,GAAG+K,IAC5C,CAAC,CACL,CAAA,KAEC,CAGD,IAASV,EAFT2vC,EAAuB,EAEP3vC,EAAI9G,EAAOpB,UAAUnC,GAAGmL,SAASmP,WAAWlf,OAAQiP,CAAC,GACjE2vC,GAAwBz2C,EAAOpB,UAAUnC,GAAGmL,SAASmP,WAAWjQ,GAAGisC,MAGvE/yC,EAAO22C,eAAeh8C,KAAK,CACvBiN,SAAU5H,EAAOpB,UAAUnC,GAAGmL,SAC9BovC,gBAAiBP,EACjBM,mBAAoB/2C,EAAOpB,UAAUnC,GAAG+K,IAC5C,CAAC,CACL,CAER,CAGJ,IAASyM,EAAI,EAAGA,EAAIjU,EAAO22C,eAAe9+C,OAAQoc,CAAC,GAC/C,GAAIjU,EAAO22C,eAAe1iC,GAAG+iC,gBAAkBh3C,EAAO22C,eAAe1iC,GAAG8iC,mBAAoB,CACxFL,EAAY,CAAA,EACZ,KACJ,CAGJ,GAAIA,EAGA,OAFA31C,EAAkBS,KAAK,0BAA0B,EAE1C,CAAA,EAGX,IAAS/E,EAAI,EAAGA,EAAIuD,EAAOpB,UAAU/G,OAAQ4E,CAAC,GACtCuD,EAAOpB,UAAUnC,GAAGw4C,WACpBsB,EAAmB57C,KAAK,CAAEyI,GAAIpD,EAAOpB,UAAUnC,GAAG2G,EAAG,CAAC,EAI9D,IAGQ/B,EADyB,GAA7Bk1C,EAAmB1+C,SACfwJ,EAAQ,IAAI8hC,EAAa,CAGzBttC,MAAO,YAEPsvC,QAAS,CAAA,EAETC,aAAc,CAAA,EAEdC,YAZO,kDAcPC,aAAc,CACVuQ,YAAa71C,EACbpB,UAAW23C,EACXT,aAAcl7C,OAAO,EACrBm7C,QAAS,WACL,IAAIF,EAAch4C,KAAKg4C,YACvBh4C,KAAKg4C,YAAYrB,iBAAmB,CAAA,EAEpCx/B,EAAgBL,iBAAiB9W,KAAKi4C,aAAcj4C,KAAKe,SAAS,EAC7DrG,KACG,WACIs9C,EAAYrB,iBAAmB,CAAA,EAC/B3zC,EAAc+gB,QAAQ,yBAA0B,CAAE1jB,MAAO,qBAAsB2jB,QAAS,gDAAiDC,MAAO,UAAWC,UAAW,GAAK,CAAC,EAC5K/hB,EAAOgS,gBAAgB,EACvB0hC,EAAyB,CAC7B,EACA,SAAUr7C,GACNw9C,EAAYrB,iBAAmB,CAAA,EAC/Bv7C,QAAQC,IAAIb,CAAK,CACrB,CACJ,EAEJgJ,EAAMqkC,WAAW,EACjB9wC,EAAS,WACLyM,EAAMskC,QAAQ,CAClB,EAAG,GAAI,CACX,EACAzkC,MAAO,WACHG,EAAMqkC,WAAW,EACjB9wC,EAAS,WACLyM,EAAMskC,QAAQ,CAClB,EAAG,GAAI,CACX,CACJ,CACJ,CAAC,GACKE,SAAS,CAEvB,EAEA7lC,EAAOi3C,4BAA8B,WACjCl2C,EAAkBG,MAAM,0BAA0B,CACtD,EAkCAwyC,EAAyB,CAC7B,EAAE;ACpXF10C,SAAS0B,WAAW,0CAA2C,CAAC,aAAc,SAAU,SAAU,UAAW,kBAAmB,SAAU5C,EAAYkC,EAAQY,EAAQqD,EAAS+Q,GAC3KlX,EAAWsmB,MAAM,gBAAiB,UAAU,EAI5CpkB,EAAOk3C,sBAAwB,KAC/Bl3C,EAAOm3C,kCAAoC,GAC3Cn3C,EAAOo3C,kCAAoC,GAC3Cp3C,EAAOq3C,UAAY,CAAA,EACnBr3C,EAAOs3C,UAAY,CAAA,EACnBt3C,EAAOu3C,gCAAkC,CAAA,EAEzCv3C,EAAOgmB,KAAO,SAAUC,GACpBjmB,EAAOqkB,OAAS4B,EAChBjmB,EAAOskB,YAAc,CAACtkB,EAAOskB,WACjC,EAEAtkB,EAAOw3C,iCAAmC,WACtCxiC,EAAgBJ,yCAAyC,EACpDrc,KACG,SAAUH,GACN4H,EAAOk3C,sBAAwB9+C,CACnC,EACA,SAAUA,EAAUE,IAGxB,CACR,EAEA0H,EAAOy3C,aAAe,SAASntC,KAI/BtK,EAAO03C,eAAiB,SAAUhoB,GAC9B,GAAIA,EAAEioB,kBAAmB,CACrBjoB,EAAEioB,kBAAoB,CAAA,EAGtB,IAFA,IAAIl7C,EAAIuD,EAAOo3C,kCAAkCv/C,OAE1C4E,CAAC,IACAuD,EAAOo3C,kCAAkC36C,GAAG2G,KAAOssB,EAAEtsB,IAAIpD,EAAOo3C,kCAAkC18C,OAAO+B,EAAG,CAAC,CAEzH,CAEA,GAAIizB,EAAEkoB,iBACF53C,EAAOm3C,kCAAkCx8C,KAAK+0B,CAAC,OAK/C,IAFIjzB,EAAIuD,EAAOm3C,kCAAkCt/C,OAE1C4E,CAAC,IACAuD,EAAOm3C,kCAAkC16C,GAAG2G,KAAOssB,EAAEtsB,IAAIpD,EAAOm3C,kCAAkCz8C,OAAO+B,EAAG,CAAC,CAG7H,EAEAuD,EAAO63C,gBAAkB,SAAUnoB,GAC/B,GAAIA,EAAEkoB,iBAAkB,CACpBloB,EAAEkoB,iBAAmB,CAAA,EAGrB,IAFA,IAAIn7C,EAAIuD,EAAOm3C,kCAAkCt/C,OAE1C4E,CAAC,IACAuD,EAAOm3C,kCAAkC16C,GAAG2G,KAAOssB,EAAEtsB,IAAIpD,EAAOm3C,kCAAkCz8C,OAAO+B,EAAG,CAAC,CAEzH,CAEA,GAAIizB,EAAEioB,kBACF33C,EAAOo3C,kCAAkCz8C,KAAK+0B,CAAC,OAK/C,IAFIjzB,EAAIuD,EAAOo3C,kCAAkCv/C,OAE1C4E,CAAC,IACAuD,EAAOo3C,kCAAkC36C,GAAG2G,KAAOssB,EAAEtsB,IAAIpD,EAAOo3C,kCAAkC18C,OAAO+B,EAAG,CAAC,CAG7H,EAEAuD,EAAO83C,sCAAwC,WAG3C,GAAI93C,EAAOu3C,gCACP,IAAK,IAAI96C,EAAI,EAAGA,EAAIuD,EAAOk3C,sBAAsBr/C,OAAQ4E,CAAC,GACtDuD,EAAOm3C,kCAAkCx8C,KAAKqF,EAAOk3C,sBAAsBz6C,GAAGwW,2BAA2B,GAAG8kC,sCAAsC,EAAE,EACpJ/3C,EAAOk3C,sBAAsBz6C,GAAGwW,2BAA2B,GAAG8kC,sCAAsC,GAAGH,iBAAmB53C,EAAOu3C,oCAGpI,CACD,IAAS96C,EAAI,EAAGA,EAAIuD,EAAOk3C,sBAAsBr/C,OAAQ4E,CAAC,GACtDuD,EAAOk3C,sBAAsBz6C,GAAGwW,2BAA2B,GAAG8kC,sCAAsC,GAAGH,iBAAmB53C,EAAOu3C,gCAGrIv3C,EAAOm3C,kCAAoC,EAC/C,CACJ,EAEAn3C,EAAOg4C,QAAU,SAAStoB,GACtB1vB,EAAOq3C,UAAY,CAAA,EAEnBriC,EAAgBH,6BAA6B7U,EAAOm3C,iCAAiC,EAChF5+C,KACG,SAAUH,GACN4H,EAAOq3C,UAAY,CAAA,EACnBr3C,EAAOu3C,gCAAkC,CAAA,EACzCv3C,EAAOm3C,kCAAoC,GAC3Cn3C,EAAOo3C,kCAAoC,GAE3Cp3C,EAAOw3C,iCAAiC,CAC5C,EACA,SAAUp/C,EAAUE,IAGxB,CACR,EAEA0H,EAAO4gB,OAAS,WACZ5gB,EAAOs3C,UAAY,CAAA,EAEnBtiC,EAAgBD,4BAA4B/U,EAAOo3C,iCAAiC,EAC/E7+C,KACG,SAAUH,GACN4H,EAAOs3C,UAAY,CAAA,EACnBt3C,EAAOm3C,kCAAoC,GAC3Cn3C,EAAOo3C,kCAAoC,GAE3Cp3C,EAAOw3C,iCAAiC,CAC5C,EACA,SAAUp/C,EAAUE,IAGxB,CACR,EAEA0H,EAAOy3C,aAAe,SAAS/nB,GAC3B9uB,EAAOO,GAAG,WAAY,CAAEG,GAAMouB,EAAEtsB,EAAG,CAAC,CACxC,EAEApD,EAAOmnB,qBAAuB,SAAU3oB,GACpC,IAAImN,EAAmB,GAqBvB,OAnB2B,MAAvBnN,EAAQqN,aAA8C,IAAvBrN,EAAQqN,cACvCF,GAAoBnN,EAAQqN,aAGJ,MAAxBrN,EAAQuM,cAAgD,IAAxBvM,EAAQuM,eACT,IAA3BY,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQuM,cAGZ,MAAhBvM,EAAQsM,MAAgC,IAAhBtM,EAAQsM,OACD,IAA3Ba,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQsM,MAGR,MAApBtM,EAAQqM,UAAwC,IAApBrM,EAAQqM,WACL,IAA3Bc,EAAiB9T,SAAc8T,GAAoB,MACvDA,GAAoBnN,EAAQqM,UAGzBc,CACX,EAEA3L,EAAOw3C,iCAAiC,CAC5C,EAAE;AClKFv4C,QAAQyB,WAAW,oBAAqB,CAAC,SAAU,SAAU,cAAe,mBAAoB,SAAUV,EAAQY,EAAQE,EAAasiB,GAC9HtiB,EAAY4X,mBACb9X,EAAOO,GAAG,OAAO,EAGrBnB,EAAOiZ,YAAcmK,EAAiBnK,YAAY,EAElDjZ,EAAOqjB,KAAO,CACV,CACIxmB,KAAQ,gBACRqB,MAAS,eACb,EACA,CACIrB,KAAQ,QACRqB,MAAS,OACb,EACA,CACIrB,KAAQ,WACRqB,MAAS,UACb,EACA,CACIrB,KAAQ,SACRqB,MAAS,QACb,GAGA8B,EAAOiZ,aACPjZ,EAAOqjB,KAAK1oB,KAAK,CACbkC,KAAQ,eACRqB,MAAS,cACb,CAAC,EAGL8B,EAAOqjB,KAAKU,UAAY,eAC5B,EAAE;AClCF9kB,QAAQyB,WAAW,iCAAkC,CAAC,aAAc,SAAU,SAAU,UAAW,cAAe,qBAAsB,SAAU5C,EAAYkC,EAAQY,EAAQqD,EAASnD,EAAamjB,GAChMnmB,EAAWsmB,MAAM,gBAAiB,SAAS,EAC3CpkB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAOwI,aAAe,GACtBxI,EAAOukB,YAAc,CAAA,EACrBvkB,EAAOrB,aAAe,GAEtBqB,EAAO+mB,gBAAkB,WACrB,OAAQ/mB,EAAO6nB,iBACX,IAAK,QACD7nB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9B,MACJ,IAAK,WACDoF,EAAO2nB,gBAAkB/sB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC5C5B,EAAO4nB,cAAgBhtB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC1C,MACJ,IAAK,YACD5B,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EACjDhnB,EAAO4nB,cAAgBhtB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAC/C,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAEU,EAAtCoF,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,EACjF,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAEP,EAAtChnB,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,EACjF,MACJ,IAAK,aACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAEI,EAAhCoF,EAAO2nB,gBAAgBpsB,KAAK,GAC5ByE,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgBpsB,KAAK,EAAI,EAAI,GAAG,EAG5EyE,EAAO4nB,cAAgBhtB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC1C5B,EAAO4nB,cAAcZ,SAAUhnB,EAAO4nB,cAAcrsB,KAAM,EAAG,GAAG,EAChE,MACJ,IAAK,aACDyE,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAEb,EAAhChnB,EAAO2nB,gBAAgBpsB,KAAK,GAC5ByE,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgBpsB,KAAK,EAAI,EAAI,GAAG,EAG5EyE,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAO4nB,cAAcZ,SAAUhnB,EAAO4nB,cAAcrsB,KAAM,EAAG,GAAG,CAExE,CACJ,EAEAyE,EAAOqI,mBAAqB,WACxBrI,EAAOrB,aAAe,KAEtBslB,EAAmBvV,6BAA6B1O,EAAO2nB,gBAAiB3nB,EAAO4nB,cAAe5nB,EAAOwI,YAAY,EAC5GjQ,KACG,WACIyH,EAAOrB,aAAeslB,EAAmBtlB,YAC7C,CACJ,CACR,EAEAqB,EAAOwmB,8BAAgC,SAAU7jB,GAG7C,IAFA,IAAIqH,EAAkB,KAEbjC,EAAI,EAAGA,EAAIpF,EAAYoD,qBAAqBlO,OAAQkQ,CAAC,GACrDiC,EAMGrH,EAAYoD,qBAAqBgC,GAAGJ,UAChCqC,EAAgB5O,QAAQuH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,cAAc,EAAI,IACvFH,GAAmB,KAAOrH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,gBAP3ExH,EAAYoD,qBAAqBgC,GAAGJ,WACpCqC,EAAkBrH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,eAAesc,SAAS,GAYnG,OAAOzc,CACX,EAEAhK,EAAOi4C,OAAS,WAIZ,IAHA,IACIjuC,EADAzT,EAAO,GAGFkG,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GAC7CuN,EAAkBhK,EAAOwmB,8BAA8BxmB,EAAOrB,aAAalC,EAAE,EAE7ElG,EAAKoE,KACD,CACIu9C,qBAAsBl4C,EAAOrB,aAAalC,GAAG2H,kBAC7C+J,UAAiC,MAAnBnE,EAA2B,GAAKA,EAC9C1F,SAAYtE,EAAOrB,aAAalC,GAAG6H,SAAS+F,KAC5C8tC,OAAUn4C,EAAOrB,aAAalC,GAAG8M,mBACjC6uC,aAAcp4C,EAAOrB,aAAalC,GAAGgO,kBACrC4tC,iBAAkBr4C,EAAOrB,aAAalC,GAAGkO,qBAAqBE,SAC9DytC,cAAet4C,EAAOrB,aAAalC,GAAGwL,iBACtCswC,gBAAiBv4C,EAAOrB,aAAalC,GAAGyL,oBAAoB2C,SAC5D2tC,sBAAuBx4C,EAAOrB,aAAalC,GAAGsJ,qBAAqBlO,OACnE+P,SAAY5H,EAAOrB,aAAalC,GAAG0O,UACnCxF,MAAS3F,EAAOrB,aAAalC,GAAGkJ,KACpC,CACJ,EAIM8yC,OAAO,kDAAmD,CADzD,CAAC,CAAEC,QAAS,gBAAiBC,OAAQ,CAAA,CAAK,GACsB,CAACpiD,GAAM,CACtF,EAEAyJ,EAAO44C,cAAgB,WAGnB,IAFA,IAAItD,EAAa,EAER74C,EAAI,EAAGA,EAAIuD,EAAOrB,aAAa9G,OAAQ4E,CAAC,GAC7C64C,GAAct1C,EAAOrB,aAAalC,GAAGkJ,MAGzC,OAAO1B,EAAQ,QAAQ,EAAEqxC,EAAY,CAAC,CAC1C,EAEAt1C,EAAOqI,mBAAmB,CAC9B,EAAE;ACtIFpJ,QAAQyB,WAAW,uCAAwC,CAAC,aAAc,SAAU,SAAU,UAAW,cAAe,qBAAsB,SAAU5C,EAAYkC,EAAQY,EAAQqD,EAASnD,EAAamjB,GACtMnmB,EAAWsmB,MAAM,gBAAiB,SAAS,EAC3CpkB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAOwI,aAAe,GACtBxI,EAAOukB,YAAc,CAAA,EACrBvkB,EAAOzJ,KAAO,GAEdyJ,EAAO+mB,gBAAkB,WACrB,OAAQ/mB,EAAO6nB,iBACX,IAAK,QACD7nB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9B,MACJ,IAAK,WACDoF,EAAO2nB,gBAAkB/sB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC5C5B,EAAO4nB,cAAgBhtB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC1C,MACJ,IAAK,YACD5B,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EACjDhnB,EAAO4nB,cAAgBhtB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAC/C,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAEU,EAAtCoF,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,EACjF,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAEP,EAAtChnB,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,EACjF,MACJ,IAAK,aACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAEI,EAAhCoF,EAAO2nB,gBAAgBpsB,KAAK,GAC5ByE,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgBpsB,KAAK,EAAI,EAAI,GAAG,EAG5EyE,EAAO4nB,cAAgBhtB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC1C5B,EAAO4nB,cAAcZ,SAAUhnB,EAAO4nB,cAAcrsB,KAAM,EAAG,GAAG,EAChE,MACJ,IAAK,aACDyE,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAEb,EAAhChnB,EAAO2nB,gBAAgBpsB,KAAK,GAC5ByE,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgBpsB,KAAK,EAAI,EAAI,GAAG,EAG5EyE,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAO4nB,cAAcZ,SAAUhnB,EAAO4nB,cAAcrsB,KAAM,EAAG,GAAG,CAExE,CACJ,EAEAyE,EAAO64C,QAAU,WACb74C,EAAOzJ,KAAO,KAEd0tB,EAAmBpV,yCAAyC7O,EAAO2nB,gBAAiB3nB,EAAO4nB,cAAe5nB,EAAOwI,YAAY,EACxHjQ,KACG,SAAUhC,GACNyJ,EAAOzJ,KAAOA,CAClB,CACJ,CACR,EAEAyJ,EAAOwmB,8BAAgC,SAAU7jB,GAG7C,IAFA,IAAIqH,EAAkB,KAEbjC,EAAI,EAAGA,EAAIpF,EAAYoD,qBAAqBlO,OAAQkQ,CAAC,GACrDiC,EAMGrH,EAAYoD,qBAAqBgC,GAAGJ,UAChCqC,EAAgB5O,QAAQuH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,cAAc,EAAI,IACvFH,GAAmB,KAAOrH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,gBAP3ExH,EAAYoD,qBAAqBgC,GAAGJ,WACpCqC,EAAkBrH,EAAYoD,qBAAqBgC,GAAGJ,SAASwC,eAAesc,SAAS,GAYnG,OAAOzc,CACX,EAEAhK,EAAOi4C,OAAS,WAIZ,IAHA,IAAI1hD,EAAO,GAGFkG,EAAI,EAAGA,EAAIuD,EAAOzJ,KAAKuiD,MAAMjhD,OAAQ4E,CAAC,GAC3ClG,EAAKoE,KACD,CACIo+C,KAAQ/4C,EAAOzJ,KAAKuiD,MAAMr8C,GAAGs8C,KAC7BC,IAAOh5C,EAAOzJ,KAAKuiD,MAAMr8C,GAAGu8C,IAC5BC,kBAAmBj5C,EAAOzJ,KAAKuiD,MAAMr8C,GAAGy8C,qBACxCvzC,MAAS3F,EAAOzJ,KAAKuiD,MAAMr8C,GAAGkJ,KAClC,CACJ,EAIM8yC,OAAO,yDAA0D,CADhE,CAAC,CAAEC,QAAS,uBAAwBC,OAAQ,CAAA,CAAK,GACsB,CAACpiD,GAAM,CAC7F,EAEAyJ,EAAOm5C,kBAAoB,WAGvB,IAFA,IAAIC,EAAiB,EAEZ38C,EAAI,EAAGA,EAAIuD,EAAOzJ,KAAKuiD,MAAMjhD,OAAQ4E,CAAC,GAC3C28C,GAAkBp5C,EAAOzJ,KAAKuiD,MAAMr8C,GAAGy8C,qBAG3C,OAAOE,CACX,EAEAp5C,EAAO44C,cAAgB,WAGnB,IAFA,IAAItD,EAAa,EAER74C,EAAI,EAAGA,EAAIuD,EAAOzJ,KAAKuiD,MAAMjhD,OAAQ4E,CAAC,GAC3C64C,GAAct1C,EAAOzJ,KAAKuiD,MAAMr8C,GAAGkJ,MAGvC,OAAO1B,EAAQ,QAAQ,EAAEqxC,EAAY,CAAC,CAC1C,EAEAt1C,EAAO64C,QAAQ,CACnB,EAAE;ACvIF55C,QAAQyB,WAAW,4BAA6B,CAAC,aAAc,SAAU,SAAU,UAAW,cAAe,kBAAmB,SAAU5C,EAAYkC,EAAQY,EAAQqD,EAASnD,EAAa4mB,GACxL5pB,EAAWsmB,MAAM,gBAAiB,SAAS,EAC3CpkB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAOqkB,OAAS,OAChBrkB,EAAOskB,YAAc,CAAA,EACrBtkB,EAAOukB,YAAc,CAAA,EACrBvkB,EAAOlB,UAAY,GAEnBkB,EAAO+mB,gBAAkB,WACrB,OAAQ/mB,EAAO6nB,iBACX,IAAK,QACD7nB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9B,MACJ,IAAK,YACDoF,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EACjDhnB,EAAO4nB,cAAgBhtB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAC/C,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAEU,EAAtCoF,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,EACjF,MACJ,IAAK,YACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAEP,EAAtChnB,EAAO2nB,gBAAgB8sB,WAAW,GAClCz0C,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgB8sB,WAAW,EAAI,EAAI,GAAG,EAGlFz0C,EAAO4nB,cAAgBhtB,OAAOoF,EAAO2nB,eAAe,EAAE/lB,IAAI,EAAG,GAAG,EAAEolB,SAAS,EAAG,GAAG,EACjF,MACJ,IAAK,aACDhnB,EAAO2nB,gBAAkB/sB,OAAO,EAEI,EAAhCoF,EAAO2nB,gBAAgBpsB,KAAK,GAC5ByE,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgBpsB,KAAK,EAAI,EAAI,GAAG,EAG5EyE,EAAO4nB,cAAgBhtB,OAAO,EAAEgH,IAAI,EAAG,GAAG,EAC1C5B,EAAO4nB,cAAcZ,SAAUhnB,EAAO4nB,cAAcrsB,KAAM,EAAG,GAAG,EAChE,MACJ,IAAK,aACDyE,EAAO2nB,gBAAkB/sB,OAAO,EAAEosB,SAAS,EAAG,GAAG,EAEb,EAAhChnB,EAAO2nB,gBAAgBpsB,KAAK,GAC5ByE,EAAO2nB,gBAAgBX,SAAUhnB,EAAO2nB,gBAAgBpsB,KAAK,EAAI,EAAI,GAAG,EAG5EyE,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAO4nB,cAAcZ,SAAUhnB,EAAO4nB,cAAcrsB,KAAM,EAAG,GAAG,CAExE,CACJ,EAEAyE,EAAOgmB,KAAO,SAAUC,GACpBjmB,EAAOqkB,OAAS4B,EAChBjmB,EAAOskB,YAAc,CAACtkB,EAAOskB,WACjC,EAEAtkB,EAAOq5C,eAAiB,WACpBr5C,EAAOlB,UAAY,KAEnB4oB,EAAgBhR,YAAY1W,EAAO2nB,gBAAiB3nB,EAAO4nB,aAAa,EACnErvB,KACG,SAAUuG,GACNkB,EAAOlB,UAAYA,CACvB,CACJ,CACR,EAEAkB,EAAOi4C,OAAS,WAIZ,IAHA,IAAI1hD,EAAO,GAGFkG,EAAI,EAAGA,EAAIuD,EAAOlB,UAAUjH,OAAQ4E,CAAC,GAC1ClG,EAAKoE,KACD,CACIiN,SAAY5H,EAAOlB,UAAUrC,GAAG4N,KAChCivC,SAAct5C,EAAOlB,UAAUrC,GAAW,UAAmC,CACjF,CACJ,EAIMg8C,OAAO,6CAA8C,CADpD,CAAC,CAAEC,QAAS,WAAYC,OAAQ,CAAA,CAAK,GACsB,CAACpiD,GAAM,CACjF,EAEAyJ,EAAOq5C,eAAe,CAC1B,EAAE;AC9FFp6C,QAAQyB,WAAW,0BAA2B,CAAC,aAAc,SAAU,SAAU,UAAW,cAAe,kBAAmB,SAAU5C,EAAYkC,EAAQY,EAAQqD,EAASnD,EAAagiB,GACtLhlB,EAAWsmB,MAAM,gBAAiB,SAAS,EAC3CpkB,EAAOqkB,OAAS,OAChBrkB,EAAOskB,YAAc,CAAA,EACrBtkB,EAAOukB,YAAc,CAAA,EACrBvkB,EAAOzJ,KAAO,GAEdyJ,EAAOgmB,KAAO,SAAUC,GACpBjmB,EAAOqkB,OAAS4B,EAChBjmB,EAAOskB,YAAc,CAACtkB,EAAOskB,WACjC,EAEAtkB,EAAOi4C,OAAS,WAMZ,IALA,IAAI1hD,EAAO,GAKFkG,EAAI,EAAGA,EAAIuD,EAAOzJ,KAAKsB,OAAQ4E,CAAC,GACrClG,EAAKoE,KACD,CACI2J,SAAYtE,EAAOzJ,KAAKkG,GAAG6H,SAC3Bi1B,mBAAsBv5B,EAAOzJ,KAAKkG,GAAG88B,mBACrCC,YAAex5B,EAAOzJ,KAAKkG,GAAG+8B,YAC9B+f,UAAav5C,EAAOzJ,KAAKkG,GAAG88C,SAChC,CACJ,EAIMd,OAAO,2CAA4C,CADlD,CAAC,CAAEC,QAAS,SAAUC,OAAQ,CAAA,CAAK,GACsB,CAACpiD,GAAM,CAC/E,EAEAusB,EAAgBjL,4BAA4B,EACvCtf,KACG,SAAUsG,GACNmB,EAAOzJ,KAAO,GAKd,IAJA,IAAIijD,EACAC,EAGKh9C,EAAI,EAAGA,EAAIoC,EAAUhH,OAAQ4E,CAAC,GACnC+8C,EAAsB36C,EAAUpC,GAAqB,oBAAsC,EAC3Fg9C,EAAe56C,EAAUpC,GAAc,aAA+B,EAGtEuD,EAAOzJ,KAAKoE,KACR,CACI2J,SAAYzF,EAAUpC,GAAG4N,KACzBkvB,mBAAsBigB,EACtBhgB,YAAeigB,EACfF,UAPIC,EAAqBC,CAQ7B,CACJ,CAER,EACA,SAAUphD,IAGd,CACR,EAAE;AC5DF4G,QAAQyB,WAAW,6BAA8B,CAAC,aAAc,SAAU,SAAU,UAAW,kBAAmB,SAAU5C,EAAYkC,EAAQY,EAAQqD,EAASigB,GAC7JpmB,EAAWsmB,MAAM,gBAAiB,SAAS,EAC3CpkB,EAAO2nB,gBAAkB/sB,OAAO,EAChCoF,EAAO4nB,cAAgBhtB,OAAO,EAC9BoF,EAAOukB,YAAc,CAAA,EACrBvkB,EAAOoa,WAAa,GAEpBpa,EAAOgmB,KAAO,SAAUC,GACpBjmB,EAAOqkB,OAAS4B,EAChBjmB,EAAOskB,YAAc,CAACtkB,EAAOskB,WACjC,EAEAtkB,EAAO05C,iBAAmB,WACtBx1B,EAAgBxI,cAAc9gB,OAAOoF,EAAO2nB,eAAe,EAAG/sB,OAAOoF,EAAO4nB,aAAa,CAAC,EACrFrvB,KACG,SAAUH,GACN4H,EAAOoa,WAAahiB,CACxB,EACA,SAAUA,EAAUE,IAGxB,CACR,EAEA0H,EAAO05C,iBAAiB,CAC5B,EAAE","file":"../app.min.0ca4e990.js","sourcesContent":["angular.module('mgcrea.ngStrap.datepicker').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('datepicker/datepicker.tpl.html', '
');\r\n}]);","angular.module('mgcrea.ngStrap.timepicker').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('timepicker/timepicker.tpl.html', '
 
 
 
');\r\n}]);","angular.module('mgcrea.ngStrap.tab').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('tab/tab.tpl.html', '
');\r\n}]);","angular.module('mgcrea.ngStrap.tooltip').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('tooltip/tooltip.tpl.html', '
');\r\n}]);","angular.module('mgcrea.ngStrap.select').run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('select/select.tpl.html', '');\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('clickinon.angular.controls.autocomplete', ['$templateCache', '$http', '$parse', '$timeout', function ($templateCache, $http, $parse, $timeout) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n onItemSelected: '&',\r\n getItems: '&',\r\n onChange: '&',\r\n model: '=ngModel',\r\n disabled: '=',\r\n onAlternateSearchClick: '&',\r\n text: '='\r\n },\r\n require: 'ngModel',\r\n template: function (elem, attr) {\r\n var placeholder = (attr.placeholder != undefined) ? attr.placeholder : \"\";\r\n var cssClass = (attr.class != undefined) ? attr.class : \"\";\r\n var loadingText = (attr.loadingText != undefined) ? attr.loadingText : \"Loading...\";\r\n var displayProperty = (attr.displayProperty != undefined) ? attr.displayProperty : \"undefined\";\r\n var showAlternativeSearch = (attr.showAlternativeSearch) ? (attr.showAlternativeSearch === \"true\") : false;\r\n var showAlternativeSearchNoResults = (attr.showAlternativeSearchNoResults) ? (attr.showAlternativeSearchNoResults === \"true\") : false;\r\n var alternativeSearchText = (attr.alternativeSearchText) ? attr.alternativeSearchText : \"Alternative Search\";\r\n var alternativeSearchCssClass = (attr.alternativeSearchCssClass) ? attr.alternativeSearchCssClass : \"\";\r\n var html = '';\r\n\r\n html += '
';\r\n html += '';\r\n html += '
' + loadingText + '
';\r\n html += '
{{errorMessage}}
';\r\n html += '
';\r\n html += '{{noResults}}';\r\n if (showAlternativeSearchNoResults) html += '';\r\n html += '
';\r\n html += '
';\r\n html += '';\r\n html += '
';\r\n html += '
';\r\n\r\n return html;\r\n },\r\n link: function (scope, elem, attr, ngModelController) {\r\n scope.data = null;\r\n scope.loadingData = false;\r\n scope.searchText = (scope.text) ? scope.text : null;\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.minChars = (attr.minChars != undefined) ? attr.minChars : 1;\r\n scope.minPause = (attr.minPause != undefined) ? attr.minPause : 1000;\r\n scope.errorMessage = null;\r\n scope.noResults = null;\r\n scope.highlightIndex = null;\r\n scope.selectingItem = false;\r\n scope.alternativeSearchType = (attr.alternativeSearchType != undefined) ? attr.alternativeSearchType : \"API\";\r\n scope.showAlternativeSearch = (attr.showAlternativeSearch) ? (attr.showAlternativeSearch === \"true\") : false;\r\n type = 'INTERNAL';\r\n hasSearched = false;\r\n\r\n ngModelController.$render = function () {\r\n if (ngModelController.$modelValue) {\r\n scope.searchText = (attr.selectedProperty) ? eval('ngModelController.$modelValue.' + attr.selectedProperty) : eval('ngModelController.$modelValue.' + attr.displayProperty);\r\n scope.search(true);\r\n ngModelController.$setValidity('autoCompleteValidation', true);\r\n }\r\n else {\r\n scope.searchText = '';\r\n scope.data = null;\r\n }\r\n }\r\n\r\n scope.search = function () {\r\n //console.log('Searching');\r\n scope.errorMessage = null;\r\n scope.noResults = null;\r\n scope.data = null;\r\n scope.showAlternativeSearch = true;\r\n //scope.textboxInFocus = true;\r\n type = 'INTERNAL';\r\n hasSearched = true;\r\n var timer = null;\r\n var loadDataSilently = (arguments.length == 1) ? arguments[0] : false;\r\n\r\n if (scope.onChange) scope.onChange({ searchText: scope.searchText });\r\n\r\n if (scope.searchText && scope.searchText.length >= parseInt(scope.minChars) && !scope.selectingItem) {\r\n if (scope.timer) $timeout.cancel(scope.timer);\r\n\r\n scope.timer = $timeout(function () {\r\n if (!loadDataSilently) scope.loadingData = true;\r\n\r\n if (attr.url) {\r\n $http.get(attr.url + '/' + scope.searchText)\r\n .success(function (response) {\r\n if (response) {\r\n if (response.length === 0) {\r\n scope.data = null;\r\n scope.noResults = 'No results found';\r\n }\r\n else {\r\n scope.data = response;\r\n }\r\n scope.loadingData = false;\r\n }\r\n })\r\n .error(function (response, status) {\r\n debugger;\r\n scope.loadingData = false;\r\n scope.data = null;\r\n scope.errorMessage = 'An error has occurred attempting to retrieve the data';\r\n });\r\n }\r\n else if (scope.getItems) {\r\n scope.getItems({ searchText: scope.searchText })\r\n .then(\r\n function (response) {\r\n if (response) {\r\n if (response.length === 0) {\r\n scope.data = null;\r\n scope.noResults = 'No results found';\r\n }\r\n else {\r\n scope.data = response;\r\n }\r\n scope.loadingData = false;\r\n\r\n //console.log('Data: ' + scope.data);\r\n //console.log('TextboxInFocus: ' + scope.textboxInFocus);\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n scope.loadingData = false;\r\n scope.data = null;\r\n scope.errorMessage = 'An error has occurred attempting to retrieve the data';\r\n }\r\n );\r\n }\r\n }, scope.minPause);\r\n }\r\n else {\r\n scope.data = null;\r\n }\r\n }\r\n\r\n scope.keyPress = function (event) {\r\n scope.selectingItem = false;\r\n scope.textboxInFocus = true;\r\n\r\n switch (event.keyCode) {\r\n case 13:\r\n scope.selectItem(scope.data[scope.highlightIndex]);\r\n break;\r\n case 38:\r\n if (scope.highlightIndex >= 0) {\r\n scope.highlightIndex--;\r\n }\r\n break;\r\n case 40:\r\n if (scope.highlightIndex == null) {\r\n scope.highlightIndex = 0;\r\n }\r\n else {\r\n if (scope.highlightIndex < scope.data.length) {\r\n scope.highlightIndex++;\r\n }\r\n }\r\n break;\r\n default:\r\n scope.model = null;\r\n break;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n scope.click = function (event) {\r\n if (scope.data) {\r\n scope.textboxInFocus = true;\r\n }\r\n else if (hasSearched) {\r\n scope.noResults = 'No results found';\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n ngModelController.$setValidity('autoCompleteValidation', false);\r\n\r\n scope.itemMouseOver = function () {\r\n scope.highlightIndex = null;\r\n }\r\n\r\n scope.selectItem = function (item) {\r\n $timeout(function () {\r\n //scope.model = item;\r\n ngModelController.$setValidity('autoCompleteValidation', true);\r\n\r\n scope.searchText = (attr.selectedProperty) ? eval('item.' + attr.selectedProperty) : eval('item.' + attr.displayProperty);\r\n\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.selectingItem = true;\r\n hasSearched = false;\r\n\r\n scope.onItemSelected({ item: item, type: type });\r\n });\r\n }\r\n\r\n scope.alternateSearch = function (searchText, event) {\r\n if (scope.alternativeSearchType == \"API\") event.stopPropagation();\r\n\r\n $timeout(function () {\r\n if (!scope.onAlternateSearchClick) {\r\n console.log('No alternate search function defined');\r\n return;\r\n }\r\n\r\n if (scope.alternativeSearchType != \"API\") {\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.noResults = false;\r\n scope.selectingItem = true;\r\n\r\n scope.onAlternateSearchClick({ searchText: searchText });\r\n }\r\n else {\r\n scope.data = null;\r\n scope.loadingData = true;\r\n type = 'EXTERNAL';\r\n\r\n scope.onAlternateSearchClick({ searchText: scope.searchText })\r\n .then(\r\n function (response) {\r\n if (response) {\r\n if (response.length === 0) {\r\n scope.data = null;\r\n scope.noResults = 'No results found';\r\n }\r\n else {\r\n scope.data = response;\r\n }\r\n scope.loadingData = false;\r\n scope.showAlternativeSearch = false;\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n scope.loadingData = false;\r\n scope.data = null;\r\n scope.errorMessage = 'An error has occurred attempting to retrieve the data';\r\n }\r\n );\r\n }\r\n })\r\n }\r\n\r\n scope.$on('autocomplete:focus', function () {\r\n $timeout(function () {\r\n elem[0].children[0].children[0].focus();\r\n elem[0].children[0].children[0].select();\r\n });\r\n });\r\n\r\n document.addEventListener('click', function () {\r\n $timeout(function () {\r\n //console.log('Document clicked');\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.noResults = false;\r\n });\r\n });\r\n }\r\n }\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('multiSelect', ['$templateCache', '$http', '$parse', '$document', '$timeout', function ($templateCache, $http, $parse, $document, $timeout) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n items: '=',\r\n key: '=',\r\n selectedItems: '=ngModel',\r\n onChange: '&'\r\n },\r\n require: 'ngModel',\r\n template: function (elem, attr) {\r\n var cssClass = (attr.class != undefined) ? attr.class : \"\";\r\n var loadingText = (attr.loadingText != undefined) ? attr.loadingText : \"Loading...\";\r\n var displayProperty = (attr.displayProperty != undefined) ? attr.displayProperty : \"undefined\";\r\n var html = '';\r\n\r\n html += '
';\r\n html += '';\r\n html += '
' + loadingText + '
';\r\n html += '
{{errorMessage}}
';\r\n html += '
{{noResults}}
';\r\n html += '
';\r\n html += '
    ';\r\n html += '
  • {{i.' + displayProperty + '}}
  • ';\r\n html += '
';\r\n html += '
';\r\n html += '
';\r\n\r\n return html;\r\n },\r\n link: function (scope, elem, attr, ngModelController) {\r\n scope.loadingData = false;\r\n scope.searchText = null;\r\n scope.input = elem.find('div.input');\r\n scope.textboxInFocus = false;\r\n scope.resultsInFocus = false;\r\n scope.minChars = (attr.minChars != undefined) ? attr.minChars : 1;\r\n scope.errorMessage = null;\r\n scope.noResults = null;\r\n scope.highlightIndex = null;\r\n scope.show = false;\r\n scope.selectedItemsText = '';\r\n scope.key = attr.key;\r\n scope.displayProperty = attr.displayProperty;\r\n\r\n $document.on('click', function () {\r\n scope.show = false;\r\n scope.$apply();\r\n });\r\n\r\n elem.on('click', function (e) {\r\n scope.show = !scope.show;\r\n e.stopPropagation();\r\n scope.$apply();\r\n });\r\n\r\n scope.search = function () {\r\n scope.errorMessage = null;\r\n scope.noResults = null;\r\n\r\n if (scope.searchText.length >= parseInt(scope.minChars)) {\r\n scope.loadingData = true;\r\n\r\n $http.get(attr.url + '/' + scope.searchText)\r\n .success(function (response) {\r\n if (response.length == 0) {\r\n scope.data = null;\r\n scope.noResults = 'No results found';\r\n }\r\n else {\r\n scope.data = response;\r\n }\r\n scope.loadingData = false;\r\n })\r\n .error(function (response, status) {\r\n debugger;\r\n scope.loadingData = false;\r\n scope.data = null;\r\n scope.errorMessage = 'An error has occurred attempting to retrieve the data';\r\n });\r\n }\r\n else {\r\n scope.data = null;\r\n }\r\n }\r\n\r\n scope.keyPress = function (event) {\r\n switch (event.keyCode) {\r\n case 13:\r\n scope.selectItem(scope.data[scope.highlightIndex]);\r\n break;\r\n case 38:\r\n if (scope.highlightIndex >= 0) {\r\n scope.highlightIndex--;\r\n }\r\n break;\r\n case 40:\r\n if (scope.highlightIndex == null) {\r\n scope.highlightIndex = 0;\r\n }\r\n else {\r\n if (scope.highlightIndex < scope.data.length) {\r\n scope.highlightIndex++;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n }\r\n\r\n scope.isSelected = function (item) {\r\n var itemSelected = false;\r\n\r\n angular.forEach(scope.selectedItems, function (value, key) {\r\n if (eval('value.' + scope.key) == eval('item.' + scope.key)) {\r\n itemSelected = true;\r\n return false;\r\n }\r\n });\r\n\r\n buildSelectedItemText();\r\n\r\n return itemSelected;\r\n }\r\n\r\n scope.selectItem = function (item, e) {\r\n e.stopPropagation();\r\n if (!scope.selectedItems) scope.selectedItems = [];\r\n var itemAlreadySelected = false;\r\n\r\n angular.forEach(scope.selectedItems, function (value, key) {\r\n if (eval('value.' + scope.key) == eval('item.' + scope.key)) {\r\n scope.selectedItems.splice(key, 1);\r\n itemAlreadySelected = true;\r\n return false;\r\n }\r\n });\r\n\r\n if (!itemAlreadySelected) scope.selectedItems.push(item);\r\n\r\n scope.onChange();\r\n\r\n buildSelectedItemText();\r\n }\r\n\r\n function buildSelectedItemText() {\r\n if (scope.selectedItems) {\r\n switch (scope.selectedItems.length) {\r\n case 0:\r\n scope.selectedItemsText = (attr.initialText != undefined) ? attr.initialText : \"\";\r\n break;\r\n case 1:\r\n scope.selectedItemsText = eval('scope.selectedItems[0].' + scope.displayProperty)\r\n break;\r\n default:\r\n scope.selectedItemsText = eval('scope.selectedItems[0].' + scope.displayProperty) + ' (' + (scope.selectedItems.length - 1) + ' others)'\r\n break;\r\n }\r\n }\r\n else {\r\n scope.selectedItemsText = '';\r\n }\r\n }\r\n\r\n buildSelectedItemText();\r\n }\r\n }\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('coFormatDate', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attr, ngModelController) {\r\n try {\r\n var dateTime = moment();\r\n }\r\n catch (error) {\r\n throw \"clickinon.angular.controls.format-date: Unable use momentjs library. Check momentjs library is loaded.\";\r\n }\r\n\r\n elem.bind('input propertychange', function (e) {\r\n var typedFormat = attr.typedFormat;\r\n var outputFormat = attr.dateFormat;\r\n\r\n if (elem.val().length == typedFormat.length) {\r\n scope.$apply(function () {\r\n var datePart = elem.val().substr(typedFormat.indexOf('dd'), 2);\r\n var monthPart = elem.val().substr(typedFormat.indexOf('MM'), 2);\r\n var yearPart = (typedFormat.indexOf('yyyy') >= 0) ? elem.val().substr(typedFormat.indexOf('yyyy'), 4) : '20' + elem.val().substr(typedFormat.indexOf('yy'), 2);\r\n\r\n var date = moment();\r\n date.year(yearPart).month(monthPart).date(datePart);\r\n\r\n ngModelController.$modelValue = date.toDate();\r\n ngModelController.$setViewValue(date.format(outputFormat.toUpperCase()));\r\n ngModelController.$render();\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('coFormatTime', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attr, ngModelController) {\r\n try {\r\n var dateTime = moment();\r\n }\r\n catch (error) {\r\n throw \"clickinon.angular.controls.format-date: Unable use momentjs library. Check momentjs library is loaded.\";\r\n }\r\n\r\n elem.bind('input propertychange', function (e) {\r\n var typedFormat = attr.typedFormat;\r\n var outputFormat = attr.timeFormat;\r\n\r\n if (elem.val().length == typedFormat.length) {\r\n scope.$apply(function () {\r\n var hourPart = elem.val().substr(typedFormat.indexOf('HH'), 2);\r\n var minutePart = elem.val().substr(typedFormat.indexOf('mm'), 2);\r\n\r\n var date = moment();\r\n date.hour(hourPart).minute(minutePart);\r\n\r\n ngModelController.$modelValue = date.toDate();\r\n ngModelController.$setViewValue(date.format(outputFormat));\r\n ngModelController.$render();\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}]);","var c = null;\r\ntry {\r\n c = angular.module('clickinon.angular.controls');\r\n}\r\ncatch (e) {\r\n c = angular.module('clickinon.angular.controls', []);\r\n}\r\n\r\nc.directive('coFormAutofillFix', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'A',\r\n priority: -10, // set higher priority then other custom directives\r\n link: function (scope, element, attrs, ngModelCtrl) {\r\n element.bind('click', function () {\r\n var autofillElements = $(\"[autocomplete='off']\");\r\n\r\n if (autofillElements.length) {\r\n for (var i = 0; i < autofillElements.length; i++) {\r\n var element = $(autofillElements[i]);\r\n\r\n if (element.is('INPUT')) {\r\n //if (e.value && e.ngModel.$viewValue !== value) {\r\n // e.ngModel.$setViewValue(value);\r\n //}\r\n element.trigger('input');\r\n element.trigger('change');\r\n }\r\n }\r\n }\r\n });\r\n }\r\n };\r\n}]);","var foundationRoutes = [\r\n { 'name': 'login', 'url': '/', 'path': 'templates/login/login.html' },\r\n { 'name': 'control_screen', 'url': '/control_screen/', 'path': 'templates/control_screen/control_screen.html' },\r\n { 'name': 'map', 'url': '/map/', 'path': 'templates/map/map.html' },\r\n { 'name': 'consignment', 'url': '/consignment/:id', 'path': 'templates/consignments/consignment.html' },\r\n { 'name': 'manifest', 'url': '/manifest/:id', 'path': 'templates/manifests/manifest.html' },\r\n { 'name': 'suppliers', 'url': '/suppliers/', 'path': 'templates/suppliers/suppliers.html' },\r\n { 'name': 'customers', 'url': '/customers/', 'path': 'templates/customers/customers.html' },\r\n { 'name': 'accounts', 'url': '/accounts/', 'path': 'templates/accounts/accounts.html' },\r\n { 'name': 'reports', 'url': '/reports/', 'path': 'templates/reports/reports.html' },\r\n { 'name': 'settings', 'url': '/settings/', 'path': 'templates/settings/settings.html' },\r\n { 'name': 'testing', 'url': '/testing/', 'path': 'templates/testing/testing.html' }\r\n];\r\n","!function () {\r\n 'use strict';\r\n\r\n config.$inject = ['$urlRouterProvider', '$locationProvider', '$animateProvider', '$httpProvider'];\r\n\r\n function config($urlProvider, $locationProvider, $animateProvider, $httpProvider) {\r\n $urlProvider.otherwise('/');\r\n\r\n $locationProvider.html5Mode({\r\n enabled: !1,\r\n requireBase: !1\r\n });\r\n\r\n $locationProvider.hashPrefix('!');\r\n\r\n $animateProvider.classNameFilter(/animate/);\r\n\r\n $httpProvider.interceptors.push('AuthorizationHttpInterceptorFactory');\r\n $httpProvider.interceptors.push('httpInterceptorProgressFactory');\r\n\r\n moment.fn.toJSON = function () { return this.format(); };\r\n }\r\n\r\n run.$inject = ['$rootScope'];\r\n\r\n function run($rootScope) {\r\n FastClick.attach(document.body);\r\n\r\n $rootScope.$on('title-updated', function (event, title) {\r\n $rootScope.pageTitle = 'ACE - ' + title;\r\n });\r\n }\r\n\r\n angular.module('application', [\r\n 'ui.router', 'templates',\r\n 'ngAnimate',\r\n 'ngSanitize',\r\n 'foundation',\r\n 'foundation.dynamicRouting',\r\n 'foundation.dynamicRouting.animations',\r\n 'clickinon.factories.httpInterceptor',\r\n 'ngStorage',\r\n 'ngFileSaver',\r\n 'shared',\r\n 'login',\r\n 'menu',\r\n 'control_screen',\r\n 'map',\r\n 'consignments',\r\n 'manifests',\r\n 'suppliers',\r\n 'customers',\r\n 'accounts',\r\n 'settings',\r\n 'reports'\r\n ]).config(config).run(run);\r\n}();","var shared = angular.module('shared', []);","var login = angular.module('login', []);","var menu = angular.module('menu', ['foundation.core', 'foundation.accordion', 'clickinon.angular.controls']);","var address = angular.module('address', ['foundation.core']);","var control_screen = angular.module('control_screen', ['angularMoment', 'mgcrea.ngStrap']);","var map = angular.module('map', ['angularMoment', 'mgcrea.ngStrap']);","var consignments = angular.module('consignments', ['mgcrea.ngStrap', 'angularMoment', 'foundation.core', 'foundation.panel']);","var manifests = angular.module('manifests', ['ngSanitize']);","var customers = angular.module('customers', ['foundation.core', 'foundation.accordion', 'clickinon.angular.controls']);","var suppliers = angular.module('suppliers', ['foundation.core', 'foundation.accordion', 'clickinon.angular.controls']);","var settings = angular.module('settings', ['foundation.core', 'foundation.accordion']);","var accounts = angular.module('accounts', ['angularMoment', 'mgcrea.ngStrap']);","var reports = angular.module('reports', ['foundation.core']);","menu.directive('ace.menu', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n template: $templateCache.get('menu/menu.html')\r\n }\r\n}]);","shared.directive('ace.shared.addressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/address_list.html')\r\n }\r\n}]);","shared.directive('ace.shared.changePassword', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/change_password.html')\r\n }\r\n}]);","shared.directive('ace.shared.assignSupplier', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n //require: 'ngModel',\r\n template: $templateCache.get('shared/controls/assign_supplier.html')\r\n }\r\n}]);","shared.directive('ace.shared.loading', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n //require: 'ngModel',\r\n template: $templateCache.get('shared/controls/loading.html')\r\n }\r\n}]);","shared.directive('ace.shared.editDateTime', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n selectedDateTime: '=',\r\n updateDateTime: '&'\r\n },\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/edit_date_time.html')\r\n }\r\n}]);","shared.directive('preventEnterSubmit', ['$templateCache', function ($templateCache) {\r\n return function (scope, el, attrs) {\r\n el.bind('keydown', function (event) {\r\n if (13 == event.which) {\r\n event.preventDefault(); // Doesn't work at all\r\n window.stop(); // Works in all browsers but IE...\r\n document.execCommand('Stop'); // Works in IE\r\n return false; // Don't even know why it's here. Does nothing.\r\n }\r\n });\r\n };\r\n}]);","shared.directive('capitalize', ['$templateCache', function ($templateCache) {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, modelCtrl) {\r\n var capitalize = function (inputValue) {\r\n if (inputValue == undefined) inputValue = '';\r\n var capitalized = inputValue.toUpperCase();\r\n if (capitalized !== inputValue) {\r\n modelCtrl.$setViewValue(capitalized);\r\n modelCtrl.$render();\r\n }\r\n return capitalized;\r\n }\r\n modelCtrl.$parsers.push(capitalize);\r\n capitalize(scope[attrs.ngModel]); // capitalize initial value\r\n }\r\n };\r\n}]);","shared.directive('dirtyTracking', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'A',\r\n link: function ($scope, $element, $attrs) {\r\n function isDirty() {\r\n var formObj = $scope[$element.attr('name')];\r\n return formObj && formObj.$pristine === false;\r\n }\r\n\r\n function areYouSurePrompt() {\r\n if (isDirty()) {\r\n return 'You have unsaved changes. Are you sure you want to leave this page?';\r\n }\r\n }\r\n\r\n $(window).bind('beforeunload', areYouSurePrompt);\r\n\r\n $element.bind(\"$destroy\", function () {\r\n window.removeEventListener('beforeunload', areYouSurePrompt);\r\n });\r\n\r\n $scope.$on('$stateChangeStart', function (event) {\r\n var prompt = areYouSurePrompt();\r\n if (!event.defaultPrevented && prompt && !confirm(prompt)) {\r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n };\r\n}]);","shared\r\n .directive('ace.shared.signedOut', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/signed_out.html'),\r\n controller: 'SignedOutController',\r\n controllerAs: 'ctrl'\r\n }\r\n }])\r\n .controller('SignedOutController', ['$state', 'FoundationApi', 'UserFactory', 'AtlasModalFactory', function ($state, FoundationApi, UserFactory, AtlasModalFactory) {\r\n var vm = this;\r\n\r\n vm.ok = ok;\r\n\r\n function ok() {\r\n UserFactory.logout()\r\n .then(\r\n function () {\r\n AtlasModalFactory.close('divSignedOut');\r\n\r\n $state.go('login');\r\n },\r\n function () {\r\n AtlasModalFactory.close('divSignedOut');\r\n\r\n $state.go('login');\r\n }\r\n );\r\n\r\n \r\n }\r\n }]);","shared\r\n .directive('ace.shared.modal', ['$templateCache', 'AtlasModalFactory', function ($templateCache, AtlasModalFactory) {\r\n return {\r\n restrict: 'EA',\r\n template: $templateCache.get('shared/controls/modal.html'),\r\n transclude: true,\r\n link: function ($scope, $element, $attrs) {\r\n // ensure id attribute exists\r\n if (!$attrs.id) {\r\n console.error('modal must have an id');\r\n return;\r\n }\r\n\r\n // move element to bottom of page (just before ) so it can be displayed above everything else\r\n $element.appendTo('body');\r\n\r\n // close modal on background click\r\n //element.on('click', function (e) {\r\n // var target = $(e.target);\r\n // if (!target.closest('.modal-body').length) {\r\n // scope.$evalAsync(Close);\r\n // }\r\n //});\r\n\r\n // add self (this modal instance) to the modal service so it's accessible from controllers\r\n var modal = {\r\n id: $attrs.id,\r\n open: open,\r\n close: close\r\n };\r\n AtlasModalFactory.add(modal);\r\n\r\n // remove self from modal service when directive is destroyed\r\n $scope.$on('$destroy', function () {\r\n AtlasModalFactory.remove($attrs.id);\r\n $element.remove();\r\n });\r\n\r\n // open modal\r\n function open() {\r\n $element.show();\r\n $('body').addClass('modal-open');\r\n }\r\n\r\n // close modal\r\n function close() {\r\n $element.hide();\r\n $('body').removeClass('modal-open');\r\n }\r\n\t\t\t}\r\n }\r\n }])\r\n .factory('AtlasModalFactory', function () {\r\n var modals = []; // array of modals on the page\r\n var service = {};\r\n\r\n service.add = add;\r\n service.remove = remove;\r\n service.open = open;\r\n service.close = close;\r\n\r\n return service;\r\n\r\n function add(modal) {\r\n // add modal to array of active modals\r\n modals.push(modal);\r\n }\r\n\r\n function remove(id) {\r\n // remove modal from array of active modals\r\n var modalToRemove = _.findWhere(modals, { id: id });\r\n modals = _.without(modals, modalToRemove);\r\n }\r\n\r\n function open(id) {\r\n // open modal specified by id\r\n var modal = _.findWhere(modals, { id: id });\r\n modal.open();\r\n }\r\n\r\n function close(id) {\r\n // close modal specified by id\r\n var modal = _.findWhere(modals, { id: id });\r\n modal.close();\r\n }\r\n });","manifests.directive('ace.shared.consignmentAddressGoodsPhotos', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/consignment_address_goods_photos.html')\r\n }\r\n}]);","manifests.directive('ace.shared.consignmentAddressPaperworkPhotos', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('shared/controls/consignment_address_paperwork_photos.html')\r\n }\r\n}]);","shared.directive('validSubmit', ['$templateCache', '$parse', function ($templateCache, $parse) {\r\n return {\r\n // we need a form controller to be on the same element as this directive\r\n // in other words: this directive can only be used on a <form>\r\n require: 'form',\r\n // one time action per form\r\n link: function (scope, element, attrs, form) {\r\n form.$submitted = false;\r\n // get a hold of the function that handles submission when form is valid\r\n var fn = $parse(attrs.validSubmit);\r\n\r\n // register DOM event handler and wire into Angular's lifecycle with scope.$apply\r\n element.on('submit', function (event) {\r\n scope.$apply(function () {\r\n \r\n // on submit event, set submitted to true (like the previous trick)\r\n form.$submitted = true;\r\n // if form is valid, execute the submission handler function and reset form submission state\r\n if (form.$valid) {\r\n fn(scope, { $event: event });\r\n form.$submitted = false;\r\n }\r\n });\r\n });\r\n }\r\n };\r\n}]);","control_screen.directive('ace.controlScreen.consignments', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('control_screen/controls/consignments.html')\r\n }\r\n}]);","control_screen.directive('ace.controlScreen.manifests', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('control_screen/controls/manifests.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_details.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_list.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddress', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressDetails', ['$templateCache', '$timeout', function ($templateCache, $timeout) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_details.html'),\r\n //link: function (scope, elem, attr) {\r\n\r\n // //$timeout(function(){\r\n // // debugger;\r\n // //}, 1000);\r\n\r\n // //capturePlus.load();\r\n\r\n // var fields = [\r\n // { element: \"txtConsignmentAddress_Address1\", field: \"Line1\", mode: pca.DEFAULT },\r\n // { element: \"txtConsignmentAddress_Address2\", field: \"Line2\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Town\", field: \"City\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_County\", field: \"Province\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Postcode\", field: \"PostalCode\", mode: pca.DEFAULT },\r\n // ];\r\n\r\n // var options = { key: \"ET69-BX99-PN81-NA98\" };\r\n\r\n // var control = new pca.Address(fields, options);\r\n\r\n // control.load();\r\n\r\n // control.listen(\"populate\", function (address) {\r\n // console.log(address);\r\n // console.log(scope);\r\n\r\n // var addressLine1 = '', addressLine2 = '', addressLine3 = '';\r\n\r\n // if (address.Line5.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3 + ', ' + address.Line4;\r\n // addressLine3 = address.Line5;\r\n // }\r\n // else {\r\n // if (address.Line4.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3;\r\n // addressLine3 = address.Line4;\r\n // }\r\n // else {\r\n // addressLine1 = address.Line1;\r\n // addressLine2 = address.Line2;\r\n // addressLine3 = address.Line3;\r\n // }\r\n // }\r\n\r\n // delete scope.consignmentAddress.Address.Id;\r\n // if (address.Company) scope.consignmentAddress.Address.CompanyName = address.Company;\r\n // scope.consignmentAddress.Address.AddressLine1 = addressLine1;\r\n // scope.consignmentAddress.Address.AddressLine2 = addressLine2;\r\n // scope.consignmentAddress.Address.AddressLine3 = addressLine3;\r\n // scope.consignmentAddress.Address.Town = address.City;\r\n // scope.consignmentAddress.Address.County = address.Province;\r\n // scope.consignmentAddress.Address.Postcode = address.PostalCode;\r\n // });\r\n //}\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressLoadDetailsList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_load_details_list.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressCollectionLoadDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_collection_load_details.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressDeliveryLoadDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_delivery_load_details.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressAdditionalChargesList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_additional_charges_list.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentAddressAdditionalCharge', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_address_additional_charge.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentQuoteConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_quote_confirmation.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_confirmation.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.manifestConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/manifest_confirmation.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentMissingFieldsConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope:{\r\n customer: '=',\r\n consignment: '=',\r\n isFrequentConsignment: '=',\r\n ignoreRequiredFieldsAndSave: '&',\r\n closeConsignmentMissingFieldsConfirmationModal: '&'\r\n },\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_missing_fields_confirmation.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.consignmentChangeLog', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/consignment_change_log.html')\r\n }\r\n}]);","consignments.directive('ace.consignments.deleteConsignmentConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('consignments/controls/delete_consignment_confirmation.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.consignmentAddressStatus', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/consignment_address_status.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.consignmentAddressSignature', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n template: $templateCache.get('manifests/controls/consignment_address_signature.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_list.html')\r\n }\r\n }]);","customers.directive('ace.customers.customerDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n customer: \"=\",\r\n customers: \"=\",\r\n countries: \"=\",\r\n xeroOrganisations: \"=\"\r\n },\r\n template: $templateCache.get('customers/controls/customer_details.html'),\r\n link: function (scope, elem, attr, ngModelController) {\r\n scope.setParent = function () {\r\n scope.customer.ParentId = scope.customer.Parent.Id;\r\n }\r\n }\r\n }\r\n }]);","customers.directive('ace.customers.customerContactList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_contact_list.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerContact', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_contact.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerUserList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_user_list.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerUser', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_user.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerAddressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_address_list.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerAddress', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_address.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerPricingList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_pricing_list.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerPricingMatrixDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_pricing_matrix_details.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerPricingMatrixItemDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_pricing_matrix_item_details.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerAccountInfo', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n customer: '=',\r\n customerAccountTypes: '=',\r\n ledgerNumbers: '=',\r\n vatCodes: '='\r\n },\r\n template: $templateCache.get('customers/controls/customer_account_info.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerInvoiceSettings', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_invoice_settings.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerOptionalConsignmentFields', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_optional_consignment_fields.html')\r\n }\r\n}]);","customers.directive('ace.customers.customerControlScreenConfiguration', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('customers/controls/customer_control_screen_configuration.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_details.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierLicenceList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_licence_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierLicence', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_licence.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierAddresses', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_addresses.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierVehicleList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_vehicle_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierVehicle', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_vehicle.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierAccountInfo', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_account_info.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierUserDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_user_details.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierDeductionsList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_deductions_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierDeduction', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_deduction.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierPhotoList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_photo_list.html')\r\n }\r\n}]);","suppliers.directive('ace.suppliers.supplierPhoto', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('suppliers/controls/supplier_photo.html')\r\n }\r\n}]);","customers.directive('ace.settings.globalSettings', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/global_settings.html')\r\n }\r\n}]);","settings.directive('ace.settings.vatCodeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/vat_code_list.html')\r\n }\r\n}]);","customers.directive('ace.settings.vatCode', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/vat_code.html')\r\n }\r\n}]);","settings.directive('ace.settings.currencyList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/currency_list.html')\r\n }\r\n}]);","customers.directive('ace.settings.currency', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/currency.html')\r\n }\r\n}]);","settings.directive('ace.settings.supplierTypeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/supplier_type_list.html')\r\n }\r\n}]);","customers.directive('ace.settings.supplierType', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/supplier_type.html')\r\n }\r\n}]);","settings.directive('ace.settings.licenceCategoryList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/licence_category_list.html')\r\n }\r\n}]);","customers.directive('ace.settings.licenceCategory', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/licence_category.html')\r\n }\r\n}]);","settings.directive('ace.settings.ledgerNumberList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/ledger_number_list.html')\r\n }\r\n}]);","customers.directive('ace.settings.ledgerNumber', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/ledger_number.html')\r\n }\r\n}]);","settings.directive('ace.settings.userList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/user_list.html')\r\n }\r\n}]);","customers.directive('ace.settings.user', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/user.html')\r\n }\r\n}]);","settings.directive('ace.settings.additionalChargeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/additional_charge_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.additionalCharge', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/additional_charge.html')\r\n }\r\n}]);","settings.directive('ace.settings.vehicleTypeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/vehicle_type_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.vehicleType', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/vehicle_type.html')\r\n }\r\n}]);","customers.directive('ace.settings.pricingList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/pricing_list.html')\r\n }\r\n}]);","customers.directive('ace.settings.pricingMatrixDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/pricing_matrix_details.html')\r\n }\r\n}]);","customers.directive('ace.settings.pricingMatrixItemDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/pricing_matrix_item_details.html')\r\n }\r\n}]);","settings.directive('ace.settings.whitelistedIpAddressList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/whitelisted_ip_address_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.whitelistedIpAddress', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/whitelisted_ip_address.html')\r\n }\r\n}]);","settings.directive('ace.settings.areaAdditionalChargeRuleList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/area_additional_charge_rule_list.html')\r\n }\r\n}]);","settings.directive('ace.settings.areaAdditionalChargeRule', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/area_additional_charge_rule.html')\r\n }\r\n}]);","settings.directive('ace.settings.supplierBillingTypeList', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/supplier_billing_type_list.html')\r\n }\r\n}]);","customers.directive('ace.settings.supplierBillingType', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('settings/controls/supplier_billing_type.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.manifestDetails', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/manifest_details.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.manifestChangeLog', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/manifest_change_log.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.deleteManifestConfirmation', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/delete_manifest_confirmation.html')\r\n }\r\n}]);","manifests.directive('ace.manifests.emailConfirmations', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n consignmentAddressesCompleted: '=',\r\n currentEmail: '=',\r\n confirmationEmailErrorMessage: '=',\r\n checkEmailAddresses: '&',\r\n sendEmails: '&',\r\n editEmails: '&',\r\n sendEmail: '&',\r\n dontSendEmail: '&',\r\n dontSendEmails: '&'\r\n },\r\n require: 'ngModel',\r\n template: $templateCache.get('manifests/controls/email_confirmations.html')\r\n }\r\n}]);","accounts.directive('ace.accounts.consignments', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('accounts/controls/consignments.html')\r\n }\r\n}]);","accounts.directive('ace.accounts.manifests', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('accounts/controls/manifests.html')\r\n }\r\n}]);","accounts.directive('ace.accounts.transportExchangePods', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('accounts/controls/transport_exchange_pods.html')\r\n }\r\n}]);","reports.directive('ace.reports.simpleProfitability', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('reports/controls/simple_profitability.html')\r\n }\r\n}]);","reports.directive('ace.reports.profitability', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('reports/controls/profitability.html')\r\n }\r\n}]);","reports.directive('ace.reports.earnings', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('reports/controls/earnings.html')\r\n }\r\n}]);","reports.directive('ace.reports.credit', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n template: $templateCache.get('reports/controls/credit.html')\r\n }\r\n}]);","reports.directive('ace.reports.userIpLog', ['$templateCache', function ($templateCache) {\r\n return {\r\n restrict: 'E',\r\n require: 'ngModel',\r\n template: $templateCache.get('reports/controls/user_ip_log.html')\r\n }\r\n}]);","consignments.factory('ConsignmentFactory', ['$http', '$filter', 'UserFactory', function ($http, $filter, UserFactory) {\r\n return {\r\n consignments: null,\r\n consignment: null,\r\n copyConsignmentId: null,\r\n createNewConsignment: function(){\r\n this.consignment = {\r\n 'ConsignmentNumber': 0,\r\n 'IsQuote': true,\r\n 'Customer': null,\r\n 'BookingContact': null,\r\n 'SaveContact': true,\r\n 'ConsignmentType': null,\r\n 'VehicleType': null,\r\n 'NotesForSupplier': '',\r\n 'NotesForOffice': '',\r\n 'NotesForInvoice': '',\r\n 'InvoiceStatus': AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced,\r\n 'IsFrequentConsignment': false,\r\n 'FrequentConsignmentTemplate': null,\r\n 'OptimiseStops': false,\r\n 'CalculateTimes': true,\r\n 'Mileage': null,\r\n 'TotalTimeInMinutes': 0,\r\n 'TotalMiles': 0,\r\n 'RecommendedPrice': 0,\r\n 'ApplyPostcodePricingRules': true,\r\n 'Price': 0,\r\n 'IsWebBooking': false,\r\n 'IsCompleted': false,\r\n 'IsManuallyMarkedInvoiceable': false,\r\n 'ConsignmentAddresses': []\r\n };\r\n\r\n return this.consignment;\r\n },\r\n getConsignment: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignment = response.data;\r\n var loadDetails = '';\r\n var additionalCharges = '';\r\n var locationLastDeliveryDate = null;\r\n var locationLastDeliveryAddress = null;\r\n\r\n for (var i = 0; i < self.consignment.ConsignmentAddresses.length; i++) {\r\n self.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime = moment(self.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n self.consignment.ConsignmentAddresses[i].DisplayScheduledStartDateAndTime = moment(self.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n if (self.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime) {\r\n self.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime = moment(self.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n self.consignment.ConsignmentAddresses[i].DisplayScheduledStartToDateAndTime = moment(self.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime).format('HH:mm');\r\n }\r\n\r\n loadDetails = '';\r\n\r\n for (var d = 0; d < self.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n if (self.consignment.ConsignmentAddresses[i].LoadDetails[d].BarcodeFileName) {\r\n self.consignment.ConsignmentAddresses[i].LoadDetails[d].BarcodeThumbnailFileName = self.consignment.ConsignmentAddresses[i].LoadDetails[d].BarcodeFileName.replace('\\/full\\/', '\\/thumbnail\\/');\r\n }\r\n\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.consignment.ConsignmentAddresses[i].LoadDetails[d].Quantity + ' ' + self.consignment.ConsignmentAddresses[i].LoadDetails[d].Description;\r\n }\r\n\r\n additionalCharges = '';\r\n\r\n for (var c = 0; c < self.consignment.ConsignmentAddresses[i].AdditionalCharges.length; c++) {\r\n if (additionalCharges.length > 0) additionalCharges += '
';\r\n\r\n additionalCharges += self.consignment.ConsignmentAddresses[i].AdditionalCharges[c].AdditionalCharge.ChargeFor + ' (Cost: £' + self.consignment.ConsignmentAddresses[i].AdditionalCharges[c].AdditionalCharge.Cost + '; Price: £' + self.consignment.ConsignmentAddresses[i].AdditionalCharges[c].AdditionalCharge.Price + ')';\r\n }\r\n\r\n self.consignment.ConsignmentAddresses[i].TotalLoadDetailsHtml = loadDetails;\r\n self.consignment.ConsignmentAddresses[i].TotalAdditionalChargesHtml = additionalCharges;\r\n\r\n locationLastDeliveryDate = null;\r\n locationLastDeliveryAddress = null;\r\n\r\n if (self.consignment.ConsignmentAddresses[i].Manifest && self.consignment.ConsignmentAddresses[i].Manifest.Supplier && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0] && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest && self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses.length > 0) {\r\n for (var a = 0; a < self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses.length; a++) {\r\n if (!locationLastDeliveryDate) {\r\n locationLastDeliveryDate = moment(self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n locationLastDeliveryAddress = self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) > locationLastDeliveryDate) {\r\n locationLastDeliveryDate = moment(self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n locationLastDeliveryAddress = self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n\r\n self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.LastDeliveryDate = moment(locationLastDeliveryDate);\r\n self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.LastDeliveryAddress = locationLastDeliveryAddress;\r\n self.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(locationLastDeliveryAddress);\r\n }\r\n }\r\n }\r\n );\r\n },\r\n searchConsignments: function (startDate, endDate, customerName, vehicleType, poNumber, consignmentNumber, manifestNumber, collectionAddress, deliveryAddress, bookingContact, supplierName, isFrequent, haveNoManifest, isQuote, isDeleted) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (vehicleType) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (vehicleType && vehicleType.Id && vehicleType.Id !== '0') urlParameters += 'vehicleType=' + vehicleType.Id;\r\n }\r\n\r\n if (customerName && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURIComponent(customerName);\r\n }\r\n\r\n if (poNumber && poNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'poNumber=' + encodeURIComponent(poNumber);\r\n }\r\n\r\n if (consignmentNumber && consignmentNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'consignmentNumber=' + encodeURIComponent(consignmentNumber);\r\n }\r\n\r\n if (manifestNumber && manifestNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'manifestNumber=' + encodeURIComponent(manifestNumber);\r\n }\r\n\r\n if (collectionAddress && collectionAddress.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'collectionAddress=' + encodeURIComponent(collectionAddress);\r\n }\r\n\r\n if (deliveryAddress && deliveryAddress.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'deliveryAddress=' + encodeURIComponent(deliveryAddress);\r\n }\r\n\r\n if (bookingContact && bookingContact.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'bookingContact=' + encodeURIComponent(bookingContact);\r\n }\r\n\r\n if (supplierName && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'supplierName=' + encodeURIComponent(supplierName);\r\n }\r\n\r\n if (isFrequent === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isFrequent=' + isFrequent;\r\n }\r\n\r\n if (haveNoManifest === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'haveNoManifest=' + haveNoManifest;\r\n }\r\n\r\n if (isQuote === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isQuote=' + isQuote;\r\n }\r\n\r\n if (isDeleted === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeleted=' + isDeleted;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignments = response.data;\r\n\r\n for (var c = 0; c < self.consignments.length; c++) {\r\n self.consignments[c].DisplayDateCreated = moment(self.consignments[c].DateCreated);\r\n\r\n var suppliers = '';\r\n var startDeliveryDate = null;\r\n var startToDeliveryDate = null;\r\n var timed = false;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var manifestNumbers = '';\r\n var consignmentManifests = [];\r\n\r\n for (var a = 0; a < self.consignments[c].ConsignmentAddresses.length; a++) {\r\n self.consignments[c].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YY HH:mm');\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startToDeliveryDate = (self.consignments[c].ConsignmentAddresses[a].ScheduledStartToDateAndTime) ? moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartToDateAndTime) : null;\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n timed = self.consignments[c].ConsignmentAddresses[a].Timed;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startToDeliveryDate = (self.consignments[c].ConsignmentAddresses[a].ScheduledStartToDateAndTime) ? moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartToDateAndTime) : null;\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n timed = self.consignments[c].ConsignmentAddresses[a].Timed;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].Manifest) {\r\n if (!($filter('filter')(consignmentManifests, { ManifestNumber: self.consignments[c].ConsignmentAddresses[a].Manifest.ManifestNumber }, true)).length) {\r\n consignmentManifests.push(self.consignments[c].ConsignmentAddresses[a].Manifest);\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].LoadDetails && self.consignments[c].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n if (self.consignments[c].ConsignmentAddresses[a].ConsignmentAddressType.Name === 'Collection') {\r\n //totalLoad += self.consignments[c].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.consignments[c].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n totalLoad += self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Quantity;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var m = 0; m < consignmentManifests.length; m++) {\r\n if (manifestNumbers.length > 0) manifestNumbers += ', ';\r\n\r\n manifestNumbers += consignmentManifests[m].ManifestNumber;\r\n\r\n if (suppliers.indexOf(consignmentManifests[m].Supplier) < 0) {\r\n if (suppliers.length > 0) suppliers += ', ';\r\n\r\n if (consignmentManifests[m].Supplier) suppliers += consignmentManifests[m].Supplier.Name;\r\n }\r\n }\r\n\r\n self.consignments[c].CustomerName = (self.consignments[c].CustomerBranch) ? self.consignments[c].CustomerBranch.Name : self.consignments[c].Customer.Name;\r\n self.consignments[c].ManifestNumbers = manifestNumbers;\r\n self.consignments[c].StartDeliveryDate = moment(startDeliveryDate);\r\n self.consignments[c].StartToDeliveryDate = (startToDeliveryDate) ? moment(startToDeliveryDate) : null;\r\n self.consignments[c].StartDeliveryAddress = startDeliveryAddress;\r\n self.consignments[c].DisplayStartDeliveryAddress = (startDeliveryAddress.Postcode && startDeliveryAddress.Postcode.length > 0) ? startDeliveryAddress.Postcode : (startDeliveryAddress.Town && startDeliveryAddress.Town.length > 0) ? startDeliveryAddress.Town : startDeliveryAddress.AddressLine1;\r\n self.consignments[c].FormattedStartDeliveryAddress = self.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n self.consignments[c].LastDeliveryDate = moment(lastDeliveryDate);\r\n self.consignments[c].LastDeliveryAddress = lastDeliveryAddress;\r\n self.consignments[c].DisplayLastDeliveryAddress = (lastDeliveryAddress.Postcode && lastDeliveryAddress.Postcode.length > 0) ? lastDeliveryAddress.Postcode : (lastDeliveryAddress.Town && lastDeliveryAddress.Town.length > 0) ? lastDeliveryAddress.Town : lastDeliveryAddress.AddressLine1;\r\n self.consignments[c].FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.consignments[c].TotalLoad = totalLoad;\r\n self.consignments[c].TotalLoadDetailsHtml = loadDetails;\r\n self.consignments[c].Suppliers = suppliers;\r\n self.consignments[c].Timed = timed;\r\n }\r\n }\r\n );\r\n },\r\n exportConsignments: function (startDate, endDate, customerName, vehicleType, poNumber, consignmentNumber, manifestNumber, collectionAddress, deliveryAddress, supplierName, isFrequent, haveNoManifest, isQuote, isDeleted) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (vehicleType) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (vehicleType && vehicleType.Id && vehicleType.Id !== '0') urlParameters += 'vehicleType=' + vehicleType.Id;\r\n }\r\n\r\n if (customerName && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURIComponent(customerName);\r\n }\r\n\r\n if (poNumber && poNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'poNumber=' + encodeURIComponent(poNumber);\r\n }\r\n\r\n if (consignmentNumber && consignmentNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'consignmentNumber=' + encodeURIComponent(consignmentNumber);\r\n }\r\n\r\n if (manifestNumber && manifestNumber.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'manifestNumber=' + encodeURIComponent(manifestNumber);\r\n }\r\n\r\n if (collectionAddress && collectionAddress.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'collectionAddress=' + encodeURIComponent(collectionAddress);\r\n }\r\n\r\n if (deliveryAddress && deliveryAddress.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'deliveryAddress=' + encodeURIComponent(deliveryAddress);\r\n }\r\n\r\n if (supplierName && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'supplierName=' + encodeURIComponent(supplierName);\r\n }\r\n\r\n if (isFrequent === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isFrequent=' + isFrequent;\r\n }\r\n\r\n if (haveNoManifest === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'haveNoManifest=' + haveNoManifest;\r\n }\r\n\r\n if (isQuote === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isQuote=' + isQuote;\r\n }\r\n\r\n if (isDeleted === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeleted=' + isDeleted;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Export' + urlParameters, { headers: { 'Token': UserFactory.token } });\r\n },\r\n getConsignmentAddressesWithNoManifest: function(){\r\n var self = this;\r\n var consignmentAddresses = null;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentAddresses/NoManifest', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n consignmentAddresses = response.data;\r\n\r\n if (consignmentAddresses.length) {\r\n for (var i = 0; i < consignmentAddresses.length; i++) {\r\n consignmentAddresses[i].ScheduledStartDateAndTime = moment(consignmentAddresses[i].ScheduledStartDateAndTime);\r\n consignmentAddresses[i].DisplayScheduledStartDateAndTime = moment(consignmentAddresses[i].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n }\r\n\r\n return consignmentAddresses;\r\n }\r\n );\r\n },\r\n getConsigmentAddress: function (index) {\r\n return this.consignment.ConsignmentAddresses[index];\r\n },\r\n getFormattedConsignmentAddress: function (args) {\r\n var formattedAddress = '';\r\n var address = null;\r\n\r\n switch (typeof arguments[0]) {\r\n case 'object':\r\n if (arguments[0].Address) {\r\n address = arguments[0].Address;\r\n }\r\n else if (arguments[0].AddressLine1 || arguments[0].Town || arguments[0].Postcode) {\r\n address = arguments[0];\r\n }\r\n else {\r\n throw 'Unknown argument type';\r\n }\r\n break;\r\n case 'number':\r\n var index = arguments[0];\r\n\r\n address = this.consignment.ConsignmentAddresses[index].Address;\r\n\r\n break;\r\n default:\r\n throw 'Unknown argument type';\r\n }\r\n\r\n //formattedAddress += (address.CompanyName != null && address.CompanyName != '') ? address.CompanyName : '';\r\n //formattedAddress += (address.AddressLine1 != null && address.AddressLine1 != '') ? address.AddressLine1 : '';\r\n //formattedAddress += (address.AddressLine2 != null && address.AddressLine2 != '') ? (formattedAddress == '') ? address.AddressLine2 : ',' + address.AddressLine2 : '';\r\n //formattedAddress += (address.AddressLine3 != null && address.AddressLine3 != '') ? (formattedAddress == '') ? address.AddressLine3 : ',' + address.AddressLine3 : '';\r\n formattedAddress += (address.Town != null && address.Town !== '') ? (formattedAddress === '') ? address.Town : ',' + address.Town : '';\r\n formattedAddress += (address.County != null && address.County !== '') ? (formattedAddress === '') ? address.County : ',' + address.County : '';\r\n formattedAddress += (address.Postcode != null && address.Postcode !== '') ? (formattedAddress === '') ? address.Postcode : ',' + address.Postcode : '';\r\n\r\n return formattedAddress;\r\n },\r\n getFullFormattedConsignmentAddress: function (args) {\r\n var formattedAddress = '';\r\n var address = null;\r\n\r\n switch (typeof arguments[0]) {\r\n case 'object':\r\n if (arguments[0].Address) {\r\n address = arguments[0].Address;\r\n }\r\n else if (arguments[0].AddressLine1 || arguments[0].Town || arguments[0].Postcode) {\r\n address = arguments[0];\r\n }\r\n else {\r\n throw 'Unknown argument type';\r\n }\r\n break;\r\n case 'number':\r\n var index = arguments[0];\r\n\r\n address = this.consignment.ConsignmentAddresses[index].Address;\r\n\r\n break;\r\n default:\r\n throw 'Unknown argument type';\r\n }\r\n\r\n formattedAddress += (address.CompanyName !== null && address.CompanyName !== '') ? address.CompanyName : '';\r\n //formattedAddress += (address.AddressLine1 != null && address.AddressLine1 != '') ? address.AddressLine1 : '';\r\n //formattedAddress += (address.AddressLine2 != null && address.AddressLine2 != '') ? (formattedAddress == '') ? address.AddressLine2 : ',' + address.AddressLine2 : '';\r\n //formattedAddress += (address.AddressLine3 != null && address.AddressLine3 != '') ? (formattedAddress == '') ? address.AddressLine3 : ',' + address.AddressLine3 : '';\r\n formattedAddress += (address.Town !== null && address.Town !== '') ? (formattedAddress === '') ? address.Town : ',' + address.Town : '';\r\n formattedAddress += (address.County !== null && address.County !== '') ? (formattedAddress === '') ? address.County : ',' + address.County : '';\r\n formattedAddress += (address.Postcode !== null && address.Postcode !== '') ? (formattedAddress === '') ? address.Postcode : ',' + address.Postcode : '';\r\n\r\n return formattedAddress;\r\n },\r\n saveQuote: function(consignment){\r\n consignment.IsQuote = true;\r\n\r\n return this.saveConsignment(consignment);\r\n },\r\n saveConsignment: function (consignment) {\r\n var self = this;\r\n\r\n if (consignment.SaveContact) {\r\n if (consignment.BookingContact && consignment.BookingContact.Id) {\r\n var id = consignment.BookingContact.Id;\r\n\r\n consignment.BookingContact = {\r\n 'Id': id,\r\n 'Name': consignment.ContactName,\r\n 'Phone': consignment.ContactPhoneNumber,\r\n 'Email': consignment.ContactEmailAddress\r\n };\r\n }\r\n else {\r\n consignment.BookingContact = {\r\n 'Name': consignment.ContactName,\r\n 'Phone': consignment.ContactPhoneNumber,\r\n 'Email': consignment.ContactEmailAddress\r\n };\r\n }\r\n }\r\n\r\n delete consignment.CreatedBy;\r\n delete consignment.ConsignmentChangeLogs;\r\n\r\n for (var i = 0; i < consignment.ConsignmentAddresses.length; i++) {\r\n consignment.ConsignmentAddresses[i].ConsignmentOrder = (i + 1) * 10;\r\n consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(moment(consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime).toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n\r\n delete consignment.ConsignmentAddresses[i].Consignment;\r\n\r\n if (consignment.ConsignmentAddresses[i].Manifest) {\r\n if (consignment.ConsignmentAddresses[i].Manifest.ManifestChangeLogs) delete consignment.ConsignmentAddresses[i].Manifest.ManifestChangeLogs;\r\n \r\n if(consignment.ConsignmentAddresses[i].Manifest.Supplier){\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers) delete consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers;\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier.Vehicles) delete consignment.ConsignmentAddresses[i].Manifest.Supplier.Vehicles;\r\n }\r\n }\r\n }\r\n\r\n if (consignment.CustomerBranch && consignment.CustomerBranch.Contacts) delete consignment.CustomerBranch.Contacts;\r\n\r\n consignment.TotalLoadedMiles = consignment.TotalMiles;\r\n consignment.InvoiceStatus = 1;\r\n delete consignment.CustomerInvoice;\r\n\r\n if (!self.consignment.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Consignments', consignment, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function(response){\r\n self.consignment = response.data;\r\n\r\n return self.consignment;\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Consignments/' + consignment.Id, consignment, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.consignment;\r\n }\r\n );\r\n }\r\n },\r\n deleteConsignment: function () {\r\n var self = this;\r\n var c = angular.copy(self.consignment);\r\n\r\n for (var i = 0; i < c.ConsignmentAddresses.length; i++) {\r\n c.ConsignmentAddresses[i].ConsignmentOrder = (i + 1) * 10;\r\n c.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(c.ConsignmentAddresses[i].ScheduledStartDateAndTime.toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n }\r\n\r\n if (c.ConsignmentChangeLogs) delete c.ConsignmentChangeLogs;\r\n\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/Consignments/' + c.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.consignment;\r\n }\r\n );\r\n },\r\n getReport: function (id, showPrice, showPhotos, showSupplierNotes) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (showPrice) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showPrice) urlParameters += 'show-price=true';\r\n } \r\n\r\n if (showPhotos) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showPhotos) urlParameters += 'show-photos=true';\r\n } \r\n\r\n if (showSupplierNotes) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showSupplierNotes) urlParameters += 'show-supplier-notes=true';\r\n } \r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + id + '/Report' + urlParameters, { headers: { 'Token': UserFactory.token }, responseType: 'arraybuffer' })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n sendReportEmail: function (to, body, consignment, showPrice, showPhotos, showSupplierNotes){\r\n var self = this;\r\n var urlParameters = '';\r\n var email = {\r\n To: to,\r\n Subject: 'Consignment Report',\r\n Body: body\r\n };\r\n\r\n if (consignment) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'consignment=' + consignment.Id;\r\n }\r\n\r\n if (showPrice) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showPrice) urlParameters += 'show-price=true';\r\n }\r\n\r\n if (showPhotos) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showPhotos) urlParameters += 'show-photos=true';\r\n }\r\n\r\n if (showSupplierNotes) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n if (showSupplierNotes) urlParameters += 'show-supplier-notes=true';\r\n } \r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Emails/ConsignmentReport' + urlParameters, email, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n getAccountsConsignments: function (startDate, endDate, customerName, missingPONUmber, incorrectProfitMargin, missingPOD, holdInvoice, ignoreProfitMargin) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (customerName && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customer=' + customerName;\r\n }\r\n\r\n if (missingPONUmber === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'po=' + missingPONUmber;\r\n }\r\n\r\n if (incorrectProfitMargin === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'profit=' + incorrectProfitMargin;\r\n }\r\n\r\n if (missingPOD === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'pod=' + missingPOD;\r\n }\r\n\r\n if (holdInvoice === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'hold-invoice=' + holdInvoice;\r\n }\r\n\r\n if (ignoreProfitMargin === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'ignore-profit-margin=' + ignoreProfitMargin;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Accounts' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignments = response.data;\r\n\r\n for (var c = 0; c < self.consignments.length; c++) {\r\n self.consignments[c].DisplayDateCreated = moment(self.consignments[c].DateCreated).format('DD/MM/YYYY HH:mm');\r\n\r\n var suppliers = '';\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var consignmentManifests = [];\r\n\r\n for (var a = 0; a < self.consignments[c].ConsignmentAddresses.length; a++) {\r\n self.consignments[c].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YY HH:mm');\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].Manifest) {\r\n if (!($filter('filter')(consignmentManifests, { ManifestNumber: self.consignments[c].ConsignmentAddresses[a].Manifest.ManifestNumber }, true)).length) {\r\n consignmentManifests.push(self.consignments[c].ConsignmentAddresses[a].Manifest);\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].LoadDetails && self.consignments[c].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n if (self.consignments[c].ConsignmentAddresses[a].ConsignmentAddressType.Name === 'Collection') {\r\n totalLoad += self.consignments[c].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.consignments[c].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var m = 0; m < consignmentManifests.length; m++) {\r\n if (suppliers.indexOf(consignmentManifests[m].Supplier) < 0) {\r\n if (suppliers.length > 0) suppliers += ', ';\r\n\r\n if (consignmentManifests[m].Supplier) suppliers += consignmentManifests[m].Supplier.Name;\r\n }\r\n }\r\n\r\n self.consignments[c].Manifests = consignmentManifests;\r\n self.consignments[c].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YYYY HH:mm');\r\n self.consignments[c].StartDeliveryAddress = startDeliveryAddress;\r\n self.consignments[c].StartDeliveryAddressPostcode = startDeliveryAddress.Postcode;\r\n if(startDeliveryAddress) self.consignments[c].FormattedStartDeliveryAddress = self.getFormattedConsignmentAddress(startDeliveryAddress);\r\n self.consignments[c].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YYYY HH:mm');\r\n self.consignments[c].LastDeliveryAddress = lastDeliveryAddress;\r\n self.consignments[c].LastDeliveryAddressPostcode = lastDeliveryAddress.Postcode;\r\n if(lastDeliveryAddress) self.consignments[c].FormattedLastDeliveryAddress = self.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.consignments[c].TotalLoad = totalLoad;\r\n self.consignments[c].TotalLoadDetailsHtml = loadDetails;\r\n self.consignments[c].Suppliers = suppliers;\r\n self.consignments[c].ConsignmentAddressesLength = self.consignments[c].ConsignmentAddresses.length;\r\n self.consignments[c].VehicleTypeName = self.consignments[c].VehicleType.Name;\r\n self.consignments[c].ConsignmentTypeShortName = self.consignments[c].ConsignmentType.ShortName;\r\n self.consignments[c].CustomerName = self.consignments[c].Customer.Name;\r\n\r\n if (!startDeliveryAddress) console.log(self.consignments[c].ConsignmentNumber);\r\n }\r\n }\r\n );\r\n },\r\n getProfitabilityConsignments: function (startDate, endDate, customerName) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (customerName !== null && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURI(customerName);\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Profitability' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignments = response.data;\r\n\r\n for (var c = 0; c < self.consignments.length; c++) {\r\n self.consignments[c].DisplayDateCreated = moment(self.consignments[c].DateCreated).format('DD/MM/YY HH:mm');\r\n\r\n var suppliers = '';\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var consignmentManifests = [];\r\n\r\n for (var a = 0; a < self.consignments[c].ConsignmentAddresses.length; a++) {\r\n self.consignments[c].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YY HH:mm');\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.consignments[c].ConsignmentAddresses[a].SchedsuledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.consignments[c].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.consignments[c].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (self.consignments[c].ConsignmentAddresses[a].Manifest) {\r\n if (!($filter('filter')(consignmentManifests, { ManifestNumber: self.consignments[c].ConsignmentAddresses[a].Manifest.ManifestNumber }, true)).length) {\r\n consignmentManifests.push(self.consignments[c].ConsignmentAddresses[a].Manifest);\r\n }\r\n }\r\n\r\n //if (self.consignments[c].ConsignmentAddresses[a].LoadDetails && self.consignments[c].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n // if (self.consignments[c].ConsignmentAddresses[a].ConsignmentAddressType.Name === 'Collection') {\r\n // totalLoad += self.consignments[c].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n // for (i = 0; i < self.consignments[c].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n // if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n // loadDetails += self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.consignments[c].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n // }\r\n // }\r\n //}\r\n }\r\n\r\n for (var m = 0; m < consignmentManifests.length; m++) {\r\n if (suppliers.indexOf(consignmentManifests[m].Supplier) < 0) {\r\n if (suppliers.length > 0) suppliers += ', ';\r\n\r\n if (consignmentManifests[m].Supplier) suppliers += consignmentManifests[m].Supplier.Name;\r\n }\r\n }\r\n\r\n self.consignments[c].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n self.consignments[c].StartDeliveryAddress = startDeliveryAddress;\r\n self.consignments[c].FormattedStartDeliveryAddress = self.getFormattedConsignmentAddress(startDeliveryAddress);\r\n self.consignments[c].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n self.consignments[c].LastDeliveryAddress = lastDeliveryAddress;\r\n self.consignments[c].FormattedLastDeliveryAddress = self.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.consignments[c].TotalLoad = totalLoad;\r\n self.consignments[c].TotalLoadDetailsHtml = loadDetails;\r\n self.consignments[c].Suppliers = suppliers;\r\n }\r\n }\r\n );\r\n },\r\n getSimpleProfitabilityConsignmentsReport: function (startDate, endDate, customerName) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (customerName !== null && customerName.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURI(customerName);\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Consignments/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/SimpleProfitability' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n invoiceConsignments: function (invoiceDate, consignments) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (!moment(moment().format('YYYY-MM-DD')).isSame(moment(invoiceDate).format('YYYY-MM-DD'))) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'invoiceDate=' + moment(invoiceDate).format('YYYY-MM-DD');\r\n }\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Consignments/Invoice' + urlParameters, consignments, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n ignoreProfitMargins: function (consignments) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Consignments/IgnoreProfitMargin', consignments, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n cancellationRequest: function (consignment) {\r\n var self = this;\r\n\r\n if (consignment.SaveContact) {\r\n if (consignment.BookingContact && consignment.BookingContact.Id) {\r\n var id = consignment.BookingContact.Id;\r\n\r\n consignment.BookingContact = {\r\n 'Id': id,\r\n 'Name': consignment.ContactName,\r\n 'Phone': consignment.ContactPhoneNumber,\r\n 'Email': consignment.ContactEmailAddress\r\n };\r\n }\r\n else {\r\n consignment.BookingContact = {\r\n 'Name': consignment.ContactName,\r\n 'Phone': consignment.ContactPhoneNumber,\r\n 'Email': consignment.ContactEmailAddress\r\n };\r\n }\r\n }\r\n\r\n delete consignment.CreatedBy;\r\n delete consignment.ConsignmentChangeLogs;\r\n\r\n for (var i = 0; i < consignment.ConsignmentAddresses.length; i++) {\r\n consignment.ConsignmentAddresses[i].ConsignmentOrder = (i + 1) * 10;\r\n consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(moment(consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime).toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n\r\n delete consignment.ConsignmentAddresses[i].Consignment;\r\n\r\n if (consignment.ConsignmentAddresses[i].Manifest) {\r\n if (consignment.ConsignmentAddresses[i].Manifest.ManifestChangeLogs) delete consignment.ConsignmentAddresses[i].Manifest.ManifestChangeLogs;\r\n\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier) {\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers) delete consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers;\r\n if (consignment.ConsignmentAddresses[i].Manifest.Supplier.Vehicles) delete consignment.ConsignmentAddresses[i].Manifest.Supplier.Vehicles;\r\n }\r\n }\r\n }\r\n\r\n if (consignment.CustomerBranch && consignment.CustomerBranch.Contacts) delete consignment.CustomerBranch.Contacts;\r\n\r\n consignment.TotalLoadedMiles = consignment.TotalMiles;\r\n consignment.InvoiceStatus = 1;\r\n delete consignment.CustomerInvoice;\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Consignments/CancellationRequest/', consignment, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.consignment;\r\n }\r\n );\r\n }\r\n }\r\n}]);","manifests.factory('ManifestFactory', ['$http', '$filter', 'UserFactory', function ($http, $filter, UserFactory) {\r\n return {\r\n manifests: null,\r\n manifest: null,\r\n createNewManifest: function (vehicleType, consignmentAddresses, totalMiles, totalTime) {\r\n this.manifest = {\r\n 'ManifestStatus': { 'Id': '1BEE9AFF-F360-4876-99C3-84330093AFCD', 'Name': 'Unallocated' },\r\n 'VehicleType': vehicleType,\r\n 'StatusColour': { 'Id': '4DCBBAC7-4EBE-4886-BBAC-E4B7924AFE88', 'Name': 'White', 'HexCode': '#ffffff' },\r\n 'ConsignmentAddresses': consignmentAddresses,\r\n 'TotalMiles': totalMiles,\r\n 'TotalTimeInMinutes': totalTime,\r\n 'Currency': '£'\r\n };\r\n\r\n for (var i = 0; i < this.manifest.ConsignmentAddresses.length; i++) {\r\n this.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime = moment(this.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n }\r\n\r\n return this.manifest;\r\n },\r\n getManifest: function(id){\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.manifest = response.data;\r\n var customers = '';\r\n var consignmentNumbers = '';\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var firstConsignmentBookedDate = null;\r\n var consignmentTypes = '';\r\n var customerNotes = '';\r\n var officeNotes = '';\r\n var supplierNotes = '';\r\n var invoiceNotes = '';\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var smallestVehicleType = null;\r\n var manifestConsignments = [];\r\n var additionalCharges = '';\r\n var locationLastDeliveryDate = null;\r\n var locationLastDeliveryAddress = null;\r\n var startDeliveryTimed = false;\r\n var lastDeliveryTimed = false;\r\n var middleDeliveryTimed = false; \r\n\r\n for (var a = 0; a < self.manifest.ConsignmentAddresses.length; a++) {\r\n self.manifest.ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n self.manifest.ConsignmentAddresses[a].DisplayEstimatedStartDateAndTime = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n self.manifest.ConsignmentAddresses[a].DisplayStartStartTime = (self.manifest.ConsignmentAddresses[a].IsOnRoute) ? moment(self.manifest.ConsignmentAddresses[a].StartTime).format('DD/MM/YYYY HH:mm') : '';\r\n self.manifest.ConsignmentAddresses[a].DisplayArrivalTime = (self.manifest.ConsignmentAddresses[a].HasArrived) ? moment(self.manifest.ConsignmentAddresses[a].ArrivalTime).format('DD/MM/YYYY HH:mm') : '';\r\n self.manifest.ConsignmentAddresses[a].DisplayCompletionTime = (self.manifest.ConsignmentAddresses[a].IsCompleted) ? moment(self.manifest.ConsignmentAddresses[a].CompletionTime).format('DD/MM/YYYY HH:mm') : '';\r\n self.manifest.ConsignmentAddresses[a].FormattedAddress = self.getFormattedConsignmentAddress(self.manifest.ConsignmentAddresses[a].Address);\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n startDeliveryToDate = (self.manifest.ConsignmentAddresses[0].ScheduledStartToDateAndTime) ? moment(self.manifest.ConsignmentAddresses[0].ScheduledStartToDateAndTime) : null;\r\n startDeliveryTimed = self.manifest.ConsignmentAddresses[0].Timed;\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n lastDeliveryToDate = (self.manifest.ConsignmentAddresses[self.manifest.ConsignmentAddresses.length - 1].ScheduledStartToDateAndTime) ? moment(self.manifest.ConsignmentAddresses[self.manifest.ConsignmentAddresses.length - 1].ScheduledStartToDateAndTime) : null;\r\n lastDeliveryTimed = self.manifest.ConsignmentAddresses[self.manifest.ConsignmentAddresses.length - 1].Timed;\r\n\r\n if (a > 0 && a < self.manifest.ConsignmentAddresses.length - 1) {\r\n if (self.manifest.ConsignmentAddresses[a].Timed) middleDeliveryTimed = true;\r\n }\r\n\r\n if (!firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifest.ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n else {\r\n if (moment(self.manifest.ConsignmentAddresses[a].Consignment.DateCreated) < firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifest.ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n }\r\n\r\n if (!($filter('filter')(manifestConsignments, { ConsignmentNumber: self.manifest.ConsignmentAddresses[a].Consignment.ConsignmentNumber }, true)).length) {\r\n manifestConsignments.push(self.manifest.ConsignmentAddresses[a].Consignment);\r\n }\r\n\r\n if (self.manifest.ConsignmentAddresses[a].LoadDetails && self.manifest.ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n totalLoad += self.manifest.ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.manifest.ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.manifest.ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.manifest.ConsignmentAddresses[a].LoadDetails[i].Description;\r\n }\r\n }\r\n\r\n additionalCharges = '';\r\n\r\n for (var c = 0; c < self.manifest.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n if (additionalCharges.length > 0) additionalCharges += '
';\r\n\r\n additionalCharges += self.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.ChargeFor + ' (Cost: £' + self.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Cost + '; Price: £' + self.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Price + ')';\r\n }\r\n\r\n self.manifest.ConsignmentAddresses[a].TotalAdditionalChargesHtml = additionalCharges;\r\n }\r\n\r\n for (var c = 0; c < manifestConsignments.length; c++) {\r\n if (consignmentNumbers.length > 0) consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifestConsignments[c].ConsignmentNumber;\r\n\r\n if (consignmentTypes.indexOf(manifestConsignments[c].ConsignmentType.ShortName) < 0) {\r\n if (consignmentTypes.length > 0) consignmentTypes += ', ';\r\n\r\n consignmentTypes += manifestConsignments[c].ConsignmentType.ShortName;\r\n }\r\n\r\n if (manifestConsignments[c].CustomerBranch) {\r\n if (customers.indexOf(manifestConsignments[c].CustomerBranch.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].CustomerBranch.Name;\r\n }\r\n }\r\n else {\r\n if (customers.indexOf(manifestConsignments[c].Customer.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].Customer.Name;\r\n }\r\n\t\t\t\t\t\t\t}\r\n\r\n if (customerNotes.length > 0) customerNotes += '
';\r\n\r\n if (manifestConsignments[c].Customer.Notes && manifestConsignments[c].Customer.Notes.length > 0) customerNotes += manifestConsignments[c].Customer.Notes;\r\n\r\n if (officeNotes.length > 0) officeNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForOffice && manifestConsignments[c].NotesForOffice.length > 0) officeNotes += manifestConsignments[c].NotesForOffice;\r\n\r\n if (supplierNotes.length > 0) supplierNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForSupplier && manifestConsignments[c].NotesForSupplier.length > 0) supplierNotes += manifestConsignments[c].NotesForSupplier;\r\n\r\n if (invoiceNotes.length > 0) invoiceNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForInvoice && manifestConsignments[c].NotesForInvoice.length > 0) invoiceNotes += manifestConsignments[c].NotesForInvoice;\r\n }\r\n\r\n if (self.manifest.Supplier && self.manifest.Supplier.SupplierUsers && self.manifest.Supplier.SupplierUsers[0] && self.manifest.Supplier.SupplierUsers[0].LastKnownLocation && self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest && self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses.length > 0) {\r\n for (var a = 0; a < self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses.length; a++) {\r\n if (!locationLastDeliveryDate) {\r\n locationLastDeliveryDate = moment(self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n locationLastDeliveryAddress = self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) > locationLastDeliveryDate) {\r\n locationLastDeliveryDate = moment(self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n locationLastDeliveryAddress = self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n\r\n self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.LastDeliveryDate = moment(locationLastDeliveryDate);\r\n self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.LastDeliveryAddress = locationLastDeliveryAddress;\r\n self.manifest.Supplier.SupplierUsers[0].LastKnownLocation.Manifest.FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(locationLastDeliveryAddress);\r\n }\r\n\r\n self.manifest.Customers = customers;\r\n self.manifest.ConsignmentNumbers = consignmentNumbers;\r\n self.manifest.ConsignmentTypes = consignmentTypes;\r\n self.manifest.StartDeliveryDate = moment(startDeliveryDate);\r\n self.manifest.StartDeliveryToDate = (startDeliveryToDate) ? moment(startDeliveryToDate) : null;\r\n self.manifest.StartDeliveryAddress = startDeliveryAddress;\r\n self.manifest.DisplayStartDeliveryAddress = (startDeliveryAddress.Postcode && startDeliveryAddress.Postcode.length > 0) ? startDeliveryAddress.Postcode : (startDeliveryAddress.Town && startDeliveryAddress.Town.length > 0) ? startDeliveryAddress.Town : startDeliveryAddress.AddressLine1;\r\n self.manifest.FormattedStartDeliveryAddress = self.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n self.manifest.LastDeliveryDate = moment(lastDeliveryDate);\r\n self.manifest.LastDeliveryToDate = (lastDeliveryToDate) ? moment(lastDeliveryToDate) : null;\r\n self.manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n self.manifest.DisplayLastDeliveryAddress = (lastDeliveryAddress.Postcode && lastDeliveryAddress.Postcode.length > 0) ? lastDeliveryAddress.Postcode : (lastDeliveryAddress.Town && lastDeliveryAddress.Town.length > 0) ? lastDeliveryAddress.Town : lastDeliveryAddress.AddressLine1;\r\n self.manifest.FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.manifest.FirstConsignmentBookedDate = moment(firstConsignmentBookedDate).format('DD/MM/YY HH:mm');\r\n self.manifest.ManifestCreationDate = moment(self.manifest.ManifestChangeLogs[0].DateCreated);\r\n self.manifest.AllCustomerNotesHtml = customerNotes;\r\n self.manifest.AllOfficeNotesHtml = officeNotes;\r\n self.manifest.AllSupplierNotesHtml = supplierNotes;\r\n self.manifest.AllInvoiceNotesHtml = invoiceNotes;\r\n self.manifest.TotalLoad = totalLoad;\r\n self.manifest.TotalLoadDetailsHtml = loadDetails;\r\n self.manifest.StartDeliveryTimed = startDeliveryTimed;\r\n self.manifest.LastDeliveryTimed = lastDeliveryTimed;\r\n self.manifest.MiddleDeliveryTimed = middleDeliveryTimed;\r\n }\r\n );\r\n },\r\n searchManifests: function(startDate, endDate, vehicleType, customerName, poNumber, consignmentNumber, manifestNumber, collectionAddress, deliveryAddress, supplierName, nonspec, notAcknowledged, isBackload, excludeBackload, isDeleted){\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (vehicleType) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n if (vehicleType && vehicleType.Id && vehicleType.Id !== '0') urlParameters += 'vehicleType=' + vehicleType.Id;\r\n }\r\n\r\n if (customerName != null && customerName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURIComponent(customerName);\r\n }\r\n\r\n if (poNumber != null && poNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'poNumber=' + encodeURIComponent(poNumber);\r\n }\r\n\r\n if (consignmentNumber != null && consignmentNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'consignmentNumber=' + encodeURIComponent(consignmentNumber);\r\n }\r\n\r\n if (manifestNumber != null && manifestNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'manifestNumber=' + encodeURIComponent(manifestNumber);\r\n }\r\n\r\n if (collectionAddress != null && collectionAddress.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'collectionAddress=' + encodeURIComponent(collectionAddress);\r\n }\r\n\r\n if (deliveryAddress != null && deliveryAddress.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'deliveryAddress=' + encodeURIComponent(deliveryAddress);\r\n }\r\n\r\n if (supplierName != null && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'supplierName=' + encodeURIComponent(supplierName);\r\n }\r\n\r\n if (nonspec) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'nonspec=' + nonspec;\r\n }\r\n\r\n if (notAcknowledged) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'notacknowledged=' + notAcknowledged;\r\n }\r\n\r\n if (isBackload) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'isbackload=' + isBackload;\r\n }\r\n\r\n if (excludeBackload) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'excludebackload=' + excludeBackload;\r\n }\r\n\r\n if (isDeleted) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'isdeleted=' + isDeleted;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.manifests = response.data;\r\n\r\n for (var m = 0; m < self.manifests.length; m++) {\r\n var startDeliveryDate = null;\r\n var startDeliveryToDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var firstConsignmentBookedDate = null;\r\n var customers = '';\r\n var consignmentNumbers = '';\r\n var consignmentTypes = '';\r\n var officeNotes = '';\r\n var supplierNotes = '';\r\n var invoiceNotes = '';\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var smallestVehicleType = null;\r\n var manifestConsignments = [];\r\n var consignmentPrices = '';\r\n var startDeliveryTimed = false;\r\n var lastDeliveryTimed = false;\r\n var middleDeliveryTimed = false;\r\n\r\n for (var a = 0; a < self.manifests[m].ConsignmentAddresses.length; a++) {\r\n self.manifests[m].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n /*\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n */\r\n\r\n if (!firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated) < firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n }\r\n\r\n if (!($filter('filter')(manifestConsignments, { ConsignmentNumber: self.manifests[m].ConsignmentAddresses[a].Consignment.ConsignmentNumber }, true)).length) {\r\n manifestConsignments.push(self.manifests[m].ConsignmentAddresses[a].Consignment);\r\n }\r\n\r\n if (self.manifests[m].ConsignmentAddresses[a].LoadDetails && self.manifests[m].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n if (self.manifests[m].ConsignmentAddresses[a].ConsignmentAddressType.Name == 'Collection') {\r\n //totalLoad += self.manifests[m].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.manifests[m].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n totalLoad += self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Quantity;\r\n }\r\n }\r\n }\r\n\r\n if (a > 0 && a < self.manifests[m].ConsignmentAddresses.length - 1) {\r\n if (self.manifests[m].ConsignmentAddresses[a].Timed) middleDeliveryTimed = true;\r\n }\r\n }\r\n\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryToDate = (self.manifests[m].ConsignmentAddresses[0].ScheduledStartToDateAndTime) ? moment(self.manifests[m].ConsignmentAddresses[0].ScheduledStartToDateAndTime) : null;\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[0].Address;\r\n startDeliveryTimed = self.manifests[m].ConsignmentAddresses[0].Timed;\r\n\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryToDate = (self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].ScheduledStartToDateAndTime) ? moment(self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].ScheduledStartToDateAndTime) : null;\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].Address;\r\n lastDeliveryTimed = self.manifests[m].ConsignmentAddresses[self.manifests[m].ConsignmentAddresses.length - 1].Timed;\r\n \r\n for (var c = 0; c < manifestConsignments.length; c++) {\r\n if (consignmentNumbers.length > 0) consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifestConsignments[c].ConsignmentNumber;\r\n\r\n if (consignmentTypes.indexOf(manifestConsignments[c].ConsignmentType.ShortName) < 0) {\r\n if (consignmentTypes.length > 0) consignmentTypes += ', ';\r\n\r\n consignmentTypes += manifestConsignments[c].ConsignmentType.ShortName;\r\n }\r\n\r\n if (manifestConsignments[c].CustomerBranch) {\r\n if (customers.indexOf(manifestConsignments[c].CustomerBranch.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].CustomerBranch.Name;\r\n\r\n if (manifestConsignments[c].CustomerBranch.SLA && manifestConsignments[c].CustomerBranch.SLA.length > 0) customers += ' [' + manifestConsignments[c].CustomerBranch.SLA + ']';\r\n }\r\n }\r\n else {\r\n if (customers.indexOf(manifestConsignments[c].Customer.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].Customer.Name;\r\n\r\n if (manifestConsignments[c].Customer.SLA && manifestConsignments[c].Customer.SLA.length > 0) customers += ' [' + manifestConsignments[c].Customer.SLA + ']';\r\n }\r\n }\r\n\r\n if (officeNotes.length > 0) officeNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForOffice && manifestConsignments[c].NotesForOffice.length > 0) officeNotes += manifestConsignments[c].NotesForOffice;\r\n\r\n if (supplierNotes.length > 0) supplierNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForSupplier && manifestConsignments[c].NotesForSupplier.length > 0) supplierNotes += manifestConsignments[c].NotesForSupplier;\r\n\r\n if (invoiceNotes.length > 0) invoiceNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForInvoice && manifestConsignments[c].NotesForInvoice.length > 0) invoiceNotes += manifestConsignments[c].NotesForInvoice;\r\n\r\n if (consignmentPrices.length > 0) consignmentPrices += ', ';\r\n\r\n consignmentPrices += '£' + $filter('number')(manifestConsignments[c].Price, 2);\r\n }\r\n \r\n self.manifests[m].Customers = customers;\r\n self.manifests[m].ConsignmentNumbers = consignmentNumbers;\r\n self.manifests[m].ConsignmentTypes = consignmentTypes;\r\n self.manifests[m].StartDeliveryDate = moment(startDeliveryDate);\r\n self.manifests[m].StartDeliveryToDate = (startDeliveryToDate) ? moment(startDeliveryToDate) : null;\r\n self.manifests[m].StartDeliveryAddress = startDeliveryAddress;\r\n self.manifests[m].DisplayStartDeliveryAddress = (startDeliveryAddress.Postcode && startDeliveryAddress.Postcode.length > 0) ? startDeliveryAddress.Postcode : (startDeliveryAddress.Town && startDeliveryAddress.Town.length > 0) ? startDeliveryAddress.Town : startDeliveryAddress.AddressLine1;\r\n self.manifests[m].FormattedStartDeliveryAddress = self.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n self.manifests[m].LastDeliveryDate = moment(lastDeliveryDate);\r\n self.manifests[m].LastDeliveryToDate = (lastDeliveryToDate) ? moment(lastDeliveryToDate) : null;\r\n self.manifests[m].LastDeliveryAddress = lastDeliveryAddress;\r\n self.manifests[m].DisplayLastDeliveryAddress = (lastDeliveryAddress.Postcode && lastDeliveryAddress.Postcode.length > 0) ? lastDeliveryAddress.Postcode : (lastDeliveryAddress.Town && lastDeliveryAddress.Town.length > 0) ? lastDeliveryAddress.Town : lastDeliveryAddress.AddressLine1;\r\n self.manifests[m].FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.manifests[m].FirstConsignmentBookedDate = moment(firstConsignmentBookedDate);\r\n self.manifests[m].ManifestCreationDate = moment(self.manifests[m].ManifestChangeLogs[0].DateCreated);\r\n self.manifests[m].AllOfficeNotesHtml = officeNotes;\r\n self.manifests[m].AllSupplierNotesHtml = supplierNotes;\r\n self.manifests[m].AllInvoiceNotesHtml = invoiceNotes;\r\n self.manifests[m].TotalLoad = totalLoad;\r\n self.manifests[m].TotalLoadDetailsHtml = loadDetails;\r\n self.manifests[m].ConsignmentPrices = consignmentPrices;\r\n self.manifests[m].StartDeliveryTimed = startDeliveryTimed;\r\n self.manifests[m].LastDeliveryTimed = lastDeliveryTimed;\r\n self.manifests[m].MiddleDeliveryTimed = middleDeliveryTimed;\r\n }\r\n }\r\n );\r\n },\r\n exportManifests: function (startDate, endDate, vehicleType, customerName, poNumber, consignmentNumber, manifestNumber, collectionAddress, deliveryAddress, supplierName, nonspec, notAcknowledged, isBackload, excludeBackload, isDeleted) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (vehicleType) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n if (vehicleType && vehicleType.Id && vehicleType.Id !== '0') urlParameters += 'vehicleType=' + vehicleType.Id;\r\n }\r\n\r\n if (customerName != null && customerName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'customerName=' + encodeURIComponent(customerName);\r\n }\r\n\r\n if (poNumber != null && poNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'poNumber=' + encodeURIComponent(poNumber);\r\n }\r\n\r\n if (consignmentNumber != null && consignmentNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'consignmentNumber=' + encodeURIComponent(consignmentNumber);\r\n }\r\n\r\n if (manifestNumber != null && manifestNumber.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'manifestNumber=' + encodeURIComponent(manifestNumber);\r\n }\r\n\r\n if (collectionAddress != null && collectionAddress.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'collectionAddress=' + encodeURIComponent(collectionAddress);\r\n }\r\n\r\n if (deliveryAddress != null && deliveryAddress.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'deliveryAddress=' + encodeURIComponent(deliveryAddress);\r\n }\r\n\r\n if (supplierName != null && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'supplierName=' + encodeURIComponent(supplierName);\r\n }\r\n\r\n if (nonspec) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'nonspec=' + nonspec;\r\n }\r\n\r\n if (notAcknowledged) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'notacknowledged=' + notAcknowledged;\r\n }\r\n\r\n if (isBackload) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'isbackload=' + isBackload;\r\n }\r\n\r\n if (excludeBackload) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'excludebackload=' + excludeBackload;\r\n }\r\n\r\n if (isDeleted) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'isdeleted=' + isDeleted;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Export' + urlParameters, { headers: { 'Token': UserFactory.token } });\r\n },\r\n getAccountsManifests: function (startDate, endDate, supplierName, missingPOD, zeroCost, noInvoiceReference, holdInvoice) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (supplierName && supplierName.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'supplier=' + supplierName;\r\n }\r\n\r\n if (missingPOD == true) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'pod=' + missingPOD;\r\n }\r\n\r\n if (zeroCost == true) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'zeroCost=' + zeroCost;\r\n }\r\n\r\n if (noInvoiceReference == true) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'noInvoiceReference=' + noInvoiceReference;\r\n }\r\n\r\n if (holdInvoice === true) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'hold-invoice=' + holdInvoice;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Accounts' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.manifests = response.data;\r\n\r\n for (var m = 0; m < self.manifests.length; m++) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n var firstConsignmentBookedDate = null;\r\n var customers = '';\r\n var consignmentNumbers = '';\r\n var officeNotes = '';\r\n var supplierNotes = '';\r\n var invoiceNotes = '';\r\n var totalLoad = 0;\r\n var loadDetails = '';\r\n var smallestVehicleType = null;\r\n var manifestConsignments = [];\r\n\r\n for (var a = 0; a < self.manifests[m].ConsignmentAddresses.length; a++) {\r\n self.manifests[m].ConsignmentAddresses[a].DisplayScheduledStartDateAndTime = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(self.manifests[m].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = self.manifests[m].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n else {\r\n if (moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated) < firstConsignmentBookedDate) {\r\n firstConsignmentBookedDate = moment(self.manifests[m].ConsignmentAddresses[a].Consignment.DateCreated);\r\n }\r\n }\r\n\r\n if (!($filter('filter')(manifestConsignments, { ConsignmentNumber: self.manifests[m].ConsignmentAddresses[a].Consignment.ConsignmentNumber }, true)).length) {\r\n manifestConsignments.push(self.manifests[m].ConsignmentAddresses[a].Consignment);\r\n }\r\n\r\n if (self.manifests[m].ConsignmentAddresses[a].LoadDetails && self.manifests[m].ConsignmentAddresses[a].LoadDetails.length > 0) {\r\n if (self.manifests[m].ConsignmentAddresses[a].ConsignmentAddressType.Name == 'Collection') {\r\n totalLoad += self.manifests[m].ConsignmentAddresses[a].LoadDetails.length;\r\n\r\n for (i = 0; i < self.manifests[m].ConsignmentAddresses[a].LoadDetails.length; i++) {\r\n if (loadDetails.length > 0) loadDetails += '
';\r\n\r\n loadDetails += self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Quantity + ' ' + self.manifests[m].ConsignmentAddresses[a].LoadDetails[i].Description;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var c = 0; c < manifestConsignments.length; c++) {\r\n if (consignmentNumbers.length > 0) consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifestConsignments[c].ConsignmentNumber;\r\n\r\n if (customers.indexOf(manifestConsignments[c].Customer.Name) < 0) {\r\n if (customers.length > 0) customers += ', ';\r\n\r\n customers += manifestConsignments[c].Customer.Name;\r\n }\r\n\r\n if (officeNotes.length > 0) officeNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForOffice && manifestConsignments[c].NotesForOffice.length > 0) officeNotes += manifestConsignments[c].NotesForOffice;\r\n\r\n if (supplierNotes.length > 0) supplierNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForSupplier && manifestConsignments[c].NotesForSupplier.length > 0) supplierNotes += manifestConsignments[c].NotesForSupplier;\r\n\r\n if (invoiceNotes.length > 0) invoiceNotes += '
';\r\n\r\n if (manifestConsignments[c].NotesForInvoice && manifestConsignments[c].NotesForInvoice.length > 0) invoiceNotes += manifestConsignments[c].NotesForInvoice;\r\n }\r\n\r\n self.manifests[m].Customers = customers;\r\n self.manifests[m].ConsignmentNumbers = consignmentNumbers;\r\n self.manifests[m].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YYYY HH:mm');\r\n self.manifests[m].StartDeliveryAddress = startDeliveryAddress;\r\n self.manifests[m].StartDeliveryAddressPostcode = startDeliveryAddress.Postcode;\r\n self.manifests[m].FormattedStartDeliveryAddress = self.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n self.manifests[m].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YYYY HH:mm');\r\n self.manifests[m].LastDeliveryAddress = lastDeliveryAddress;\r\n self.manifests[m].LastDeliveryAddressPostcode = lastDeliveryAddress.Postcode;\r\n self.manifests[m].FormattedLastDeliveryAddress = self.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n self.manifests[m].FirstConsignmentBookedDate = moment(firstConsignmentBookedDate).format('DD/MM/YYYY HH:mm');\r\n self.manifests[m].AllOfficeNotesHtml = officeNotes;\r\n self.manifests[m].AllSupplierNotesHtml = supplierNotes;\r\n self.manifests[m].AllInvoiceNotesHtml = invoiceNotes;\r\n self.manifests[m].TotalLoad = totalLoad;\r\n self.manifests[m].TotalLoadDetails = loadDetails;\r\n self.manifests[m].ConsignmentAddressesLength = self.manifests[m].ConsignmentAddresses.length;\r\n self.manifests[m].VehicleTypeName = self.manifests[m].VehicleType.Name;\r\n self.manifests[m].SupplierName = self.manifests[m].Supplier.Name;\r\n }\r\n }\r\n );\r\n },\r\n saveManifest: function (emailMessage) {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n m.ConsignmentAddresses[i].ManifestOrder = (i + 1) * 10;\r\n m.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(moment(m.ConsignmentAddresses[i].ScheduledStartDateAndTime).toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n delete m.ConsignmentAddresses[i].AdditionalCharges;\r\n\r\n delete m.ConsignmentAddresses[i].Consignment.ConsignmentChangeLogs;\r\n }\r\n\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n\r\n if (m.Supplier) {\r\n if (m.Supplier.SupplierUsers) delete m.Supplier.SupplierUsers;\r\n if (m.Supplier.Vehicles) delete m.Supplier.Vehicles;\r\n }\r\n\r\n if (m.TransportExchangeManifests) {\r\n for (var i = 0; i < m.TransportExchangeManifests.length; i++) {\r\n if (m.TransportExchangeManifests[i].TransportExchangeManifestLogs) delete m.TransportExchangeManifests[i].TransportExchangeManifestLogs;\r\n }\r\n }\r\n\r\n m.InvoiceStatus = 1;\r\n\r\n if (!m.Id) {\r\n var manifestWithCustomerMessage = {\r\n Manifest: m,\r\n CustomerMessage: emailMessage\r\n };\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Manifests', manifestWithCustomerMessage, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + m.Id, m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n }\r\n },\r\n sendManifest: function (manifest) {\r\n var m = {\r\n Id: manifest.Id\r\n };\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + m.Id + '/Send', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n sendManifestToTransportExchange: function (manifest) {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n m.ConsignmentAddresses[i].ManifestOrder = (i + 1) * 10;\r\n m.ConsignmentAddresses[i].ScheduledStartDateAndTime = $filter('date')(moment(m.ConsignmentAddresses[i].ScheduledStartDateAndTime).toDate(), 'yyyy-MM-dd HH:mm:ss');\r\n delete m.ConsignmentAddresses[i].AdditionalCharges;\r\n\r\n delete m.ConsignmentAddresses[i].Consignment.ConsignmentChangeLogs;\r\n }\r\n\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + manifest.Id + '/SendToTransportExchange', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n removeManifestFromTransportExchange: function (manifest) {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n if (m.ConsignmentAddresses) {\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n delete m.ConsignmentAddresses[i].Consignment.ConsignmentChangeLogs;\r\n }\r\n }\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n if (m.Supplier.SupplierUsers) delete m.Supplier.SupplierUsers;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + manifest.Id + '/RemoveFromTransportExchange', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n rebookManifestWithTransportExchange: function (manifest) {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n if (m.ConsignmentAddresses) {\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n delete m.ConsignmentAddresses[i].Consignment.ConsignmentChangeLogs;\r\n }\r\n }\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n if (m.Supplier) delete m.Supplier;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + manifest.Id + '/RebookWithTransportExchange', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n updateManifestCost: function (manifest) {\r\n var m = {\r\n Id: manifest.Id,\r\n CalculatedCost: manifest.CalculatedCost,\r\n Cost: manifest.Cost\r\n };\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Manifests/' + m.Id + '/UpdateCosts', m, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n deleteManifest: function () {\r\n var self = this;\r\n var m = angular.copy(self.manifest);\r\n\r\n for (var i = 0; i < m.ConsignmentAddresses.length; i++) {\r\n m.ConsignmentAddresses[i].ManifestOrder = (i + 1) * 10;\r\n }\r\n\r\n if (m.ManifestChangeLogs) delete m.ManifestChangeLogs;\r\n\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/Manifests/' + m.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n //self.manifest = response.data;\r\n\r\n return self.manifest;\r\n }\r\n );\r\n },\r\n getConsignmentNumbers: function (manifest) {\r\n var consignmentNumbers = '';\r\n \r\n if (!manifest) manifest = this.manifest;\r\n\r\n if (manifest) {\r\n var existingConsignmentNumbers = [];\r\n var alreadyExists = false;\r\n\r\n for (var i = 0; i < manifest.ConsignmentAddresses.length; i++) {\r\n alreadyExists = false;\r\n\r\n if (existingConsignmentNumbers.length == 0) {\r\n if (consignmentNumbers != '') consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber;\r\n existingConsignmentNumbers.push(manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber);\r\n }\r\n else {\r\n for (var j = 0; j < existingConsignmentNumbers.length; j++) {\r\n if (existingConsignmentNumbers[j] == manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber) {\r\n alreadyExists = true;\r\n }\r\n }\r\n\r\n if (!alreadyExists) {\r\n if (consignmentNumbers != '') consignmentNumbers += ', ';\r\n\r\n consignmentNumbers += manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber;\r\n existingConsignmentNumbers.push(manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return consignmentNumbers;\r\n },\r\n getFormattedConsignmentAddress: function (args) {\r\n var formattedAddress = '';\r\n var address = null;\r\n\r\n switch (typeof arguments[0]) {\r\n case 'object':\r\n if (arguments[0].Address) {\r\n address = arguments[0].Address;\r\n }\r\n else if (arguments[0].AddressLine1 || arguments[0].Town || arguments[0].Postcode) {\r\n address = arguments[0];\r\n }\r\n else {\r\n throw 'Unknown argument type';\r\n }\r\n break;\r\n case 'number':\r\n var index = arguments[0];\r\n\r\n address = this.manifest.ConsignmentAddresses[index].Address;\r\n\r\n break;\r\n default:\r\n throw 'Unknown argument type';\r\n }\r\n\r\n //formattedAddress += (address.CompanyName != null && address.CompanyName != '') ? address.CompanyName : '';\r\n //formattedAddress += (address.AddressLine1 != null && address.AddressLine1 != '') ? address.AddressLine1 : '';\r\n //formattedAddress += (address.AddressLine2 != null && address.AddressLine2 != '') ? (formattedAddress == '') ? address.AddressLine2 : ',' + address.AddressLine2 : '';\r\n //formattedAddress += (address.AddressLine3 != null && address.AddressLine3 != '') ? (formattedAddress == '') ? address.AddressLine3 : ',' + address.AddressLine3 : '';\r\n formattedAddress += (address.Town != null && address.Town != '') ? (formattedAddress == '') ? address.Town : ',' + address.Town : '';\r\n formattedAddress += (address.County != null && address.County != '') ? (formattedAddress == '') ? address.County : ',' + address.County : '';\r\n formattedAddress += (address.Postcode != null && address.Postcode != '') ? (formattedAddress == '') ? address.Postcode : ',' + address.Postcode : '';\r\n\r\n return formattedAddress;\r\n },\r\n getFullFormattedConsignmentAddress: function (args) {\r\n var formattedAddress = '';\r\n var address = null;\r\n\r\n switch (typeof arguments[0]) {\r\n case 'object':\r\n if (arguments[0].Address) {\r\n address = arguments[0].Address;\r\n }\r\n else if (arguments[0].AddressLine1 || arguments[0].Town || arguments[0].Postcode) {\r\n address = arguments[0];\r\n }\r\n else {\r\n throw 'Unknown argument type';\r\n }\r\n break;\r\n case 'number':\r\n var index = arguments[0];\r\n\r\n address = this.manifest.ConsignmentAddresses[index].Address;\r\n\r\n break;\r\n default:\r\n throw 'Unknown argument type';\r\n }\r\n\r\n formattedAddress += (address.CompanyName != null && address.CompanyName != '') ? address.CompanyName : '';\r\n //formattedAddress += (address.AddressLine1 != null && address.AddressLine1 != '') ? address.AddressLine1 : '';\r\n //formattedAddress += (address.AddressLine2 != null && address.AddressLine2 != '') ? (formattedAddress == '') ? address.AddressLine2 : ',' + address.AddressLine2 : '';\r\n //formattedAddress += (address.AddressLine3 != null && address.AddressLine3 != '') ? (formattedAddress == '') ? address.AddressLine3 : ',' + address.AddressLine3 : '';\r\n formattedAddress += (address.Town != null && address.Town != '') ? (formattedAddress == '') ? address.Town : ', ' + address.Town : '';\r\n formattedAddress += (address.County != null && address.County != '') ? (formattedAddress == '') ? address.County : ', ' + address.County : '';\r\n formattedAddress += (address.Postcode != null && address.Postcode != '') ? (formattedAddress == '') ? address.Postcode : ', ' + address.Postcode : '';\r\n\r\n return formattedAddress;\r\n },\r\n getAvailableSuppliers: function (manifest, suppliers) {\r\n var availableSuppliers = [];\r\n\r\n for (var s = 0; s < suppliers.length; s++) {\r\n if (suppliers[s].SmallestVehicle) {\r\n if (suppliers[s].SmallestVehicle.VehicleType.Order >= manifest.VehicleType.Order) {\r\n availableSuppliers.push(suppliers[s]);\r\n }\r\n }\r\n }\r\n\r\n return availableSuppliers;\r\n },\r\n getReport: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/' + id + '/Report', { headers: { 'Token': UserFactory.token }, responseType: 'arraybuffer' })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n generateCompletedEmailBody: function (consignmentAddress, manifest) {\r\n var body = '';\r\n\r\n body += 'Please accept this e-mail as confirmation of delivered goods as carried by\\n\\n';\r\n body += 'Type:\\t\\t\\t\\t' + consignmentAddress.ConsignmentAddressType.Name + '\\n';\r\n body += 'Stop:\\t\\t\\t\\t' + (consignmentAddress.ManifestOrder / 10) + ' of ' + (manifest.ConsignmentAddresses[manifest.ConsignmentAddresses.length - 1].ManifestOrder / 10) + '\\n';\r\n body += 'Our Ref:\\t\\t\\t\\t' + manifest.ManifestNumber + '\\n';\r\n\r\n if (consignmentAddress.Consignment.PONumber && consignmentAddress.Consignment.PONumber !== '') {\r\n body += 'Your PO:\\t\\t\\t\\t' + consignmentAddress.Consignment.PONumber + '\\n';\r\n }\r\n\r\n if (consignmentAddress.Consignment.CustomerReferenceNumber && consignmentAddress.Consignment.CustomerReference !== '') {\r\n body += 'Your Ref:\\t\\t\\t\\t' + consignmentAddress.Consignment.CustomerReference + '\\n';\r\n }\r\n\r\n body += 'Address:\\t\\t\\t\\t' + consignmentAddress.FormattedAddress + '\\n';\r\n\r\n if (consignmentAddress.ArrivalTime) {\r\n body += 'Arrival Time:\\t\\t\\t' + moment(consignmentAddress.ArrivalTime).format('DD/MM/YY HH:mm') + '\\n';\r\n }\r\n\r\n if (consignmentAddress.CompletionTime) {\r\n body += 'Completion Time:\\t\\t' + moment(consignmentAddress.CompletionTime).format('DD/MM/YY HH:mm') + '\\n';\r\n }\r\n\r\n if (consignmentAddress.SignatureName && consignmentAddress.SignatureName !== '') {\r\n body += 'Signed For:\\t\\t\\t' + consignmentAddress.SignatureName + '\\n';\r\n }\r\n\r\n return body;\r\n },\r\n sendCompletedEmail: function (to, consignmentAddress) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (to != null && to.length > 0) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'to=' + to;\r\n }\r\n\r\n if (consignmentAddress) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'consignmentAddress=' + consignmentAddress.Id;\r\n }\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Emails/Confirmation' + urlParameters, null, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n sendReportEmail: function (to, body, manifest) {\r\n var self = this;\r\n var urlParameters = '';\r\n var email = {\r\n To: to,\r\n Subject: 'Manifest Report',\r\n Body: body\r\n };\r\n\r\n if (manifest) {\r\n urlParameters += (urlParameters.length == 0) ? '?' : '&';\r\n urlParameters += 'manifest=' + manifest.Id;\r\n }\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Emails/ManifestReport' + urlParameters, email, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response;\r\n }\r\n );\r\n },\r\n invoiceManifests: function (invoiceDate, manifests) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (!moment(moment().format('YYYY-MM-DD')).isSame(moment(invoiceDate).format('YYYY-MM-DD'))) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'invoiceDate=' + moment(invoiceDate).format('YYYY-MM-DD');\r\n }\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Manifests/Invoice' + urlParameters, manifests, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n getManifestTransportExchangePodApprovals() {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Manifests/TransportExchangePodApprovals', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n approveTransportExchangePods(transportExchangeConsignmentAddresses) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Manifests/ApproveTransportExchangePods', transportExchangeConsignmentAddresses, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n rejectTransportExchangePods(transportExchangeConsignmentAddresses) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Manifests/RejectTransportExchangePods', transportExchangeConsignmentAddresses, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n }\r\n }\r\n}]);","suppliers.factory('SupplierFactory', ['$http', 'UserFactory', 'ManifestFactory', function ($http, UserFactory, ManifestFactory) {\r\n return {\r\n supplier: null,\r\n suppliers: null,\r\n createNewSupplier: function () {\r\n this.supplier = {\r\n\r\n };\r\n\r\n return this.supplier;\r\n },\r\n getSupplier: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplier = response.data;\r\n\r\n for (var l = 0; l < self.supplier.SupplierLicences.length; l++) {\r\n self.supplier.SupplierLicences[l].DisplayValidFrom = moment(self.supplier.SupplierLicences[l].ValidFrom).format('DD/MM/YYYY');\r\n self.supplier.SupplierLicences[l].DisplayValidTo = moment(self.supplier.SupplierLicences[l].ValidTo).format('DD/MM/YYYY');\r\n }\r\n\r\n return self.supplier;\r\n }\r\n );\r\n },\r\n getSuppliers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.suppliers = response.data;\r\n\r\n for (var s = 0; s < self.suppliers.length; s++) {\r\n var smallestVehicle = null;\r\n\r\n for (var v = 0; v < self.suppliers[s].Vehicles.length; v++) {\r\n if (!smallestVehicle || self.suppliers[s].Vehicles[v].VehicleType.Order < smallestVehicle.VehicleType.Order) {\r\n smallestVehicle = self.suppliers[s].Vehicles[v];\r\n }\r\n }\r\n\r\n self.suppliers[s].SmallestVehicle = smallestVehicle;\r\n }\r\n\r\n return self.suppliers;\r\n }\r\n );\r\n },\r\n searchSuppliers: function (name, isTrackingDisabled, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name !== null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n if (isTrackingDisabled) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'is-tracking-disabled=' + isTrackingDisabled;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'is-deactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.suppliers = response.data;\r\n\r\n for (var s = 0; s < self.suppliers.length; s++) {\r\n var smallestVehicle = null;\r\n\r\n for (var v = 0; v < self.suppliers[s].Vehicles.length; v++) {\r\n if (!smallestVehicle || self.suppliers[s].Vehicles[v].VehicleType.Order < smallestVehicle.VehicleType.Order) {\r\n smallestVehicle = self.suppliers[s].Vehicles[v];\r\n }\r\n }\r\n\r\n self.suppliers[s].SmallestVehicle = smallestVehicle;\r\n }\r\n\r\n return self.suppliers;\r\n }\r\n );\r\n },\r\n getLastSupplierLocation: function(supplierId){\r\n var urlParameters = '';\r\n\r\n if(supplierId) urlParameters += '?supplierId=' + encodeURI(supplierId)\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Last' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n if (supplierId) {\r\n var location = response.data;\r\n\r\n if (location.Manifest !== null) {\r\n startDeliveryDate = moment(location.Manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Manifest.ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(location.Manifest.ConsignmentAddresses[location.Manifest.ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Manifest.ConsignmentAddresses[location.Manifest.ConsignmentAddresses.length - 1].Address;\r\n\r\n location.Manifest.StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Manifest.StartDeliveryAddress = startDeliveryAddress;\r\n location.Manifest.FormattedStartDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n location.Manifest.LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n location.Manifest.FormattedLastDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n\r\n return location;\r\n }\r\n else {\r\n var locations = response.data;\r\n\r\n for (var i = 0; i < locations.length; i++) {\r\n if (locations[i].Manifest !== null) {\r\n startDeliveryDate = null;\r\n startDeliveryAddress = null;\r\n lastDeliveryDate = null;\r\n lastDeliveryAddress = null;\r\n\r\n for (var a = 0; a < locations[i].Manifest.ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n\r\n locations[i].Manifest.StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.StartDeliveryAddress = startDeliveryAddress;\r\n if (locations[i].Manifest.StartDeliveryAddress) locations[i].Manifest.FormattedStartDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(startDeliveryAddress);\r\n locations[i].Manifest.LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n if (locations[i].Manifest.LastDeliveryAddress) locations[i].Manifest.FormattedLastDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return locations;\r\n }\r\n }\r\n );\r\n },\r\n getLastSupplierLocationByConsignmentNumberCustomerReferenceOrPONumber: function (searchText) {\r\n var urlParameters = '';\r\n\r\n if (searchText) urlParameters += '?consignmentNumberCustomerReferenceOrPONumber=' + encodeURI(searchText)\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var location = response.data;\r\n\r\n if (location.Supplier && location.Supplier.Manifests !== null) {\r\n if (location.Supplier.Manifests.length === 1) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n /*\r\n for (var a = 0; a < location.Supplier.Manifests[0].ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n */\r\n\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[location.Supplier.Manifests[0].ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[location.Supplier.Manifests[0].ConsignmentAddresses.length - 1].Address;\r\n\r\n location.Supplier.Manifests[0].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Supplier.Manifests[0].StartDeliveryAddress = startDeliveryAddress;\r\n location.Supplier.Manifests[0].FormattedStartDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n location.Supplier.Manifests[0].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Supplier.Manifests[0].LastDeliveryAddress = lastDeliveryAddress;\r\n location.Supplier.Manifests[0].FormattedLastDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return location;\r\n }\r\n );\r\n },\r\n getLastSupplierLocationByManifestNumber: function (manifestNumber) {\r\n var urlParameters = '';\r\n\r\n if (manifestNumber) urlParameters += '?manifestNumber=' + encodeURI(manifestNumber)\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var location = response.data;\r\n\r\n if (location.Supplier && location.Supplier.Manifests !== null) {\r\n if (location.Supplier.Manifests.length === 1) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n /*\r\n for (var a = 0; a < location.Supplier.Manifests[0].ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n */\r\n\r\n startDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(location.Supplier.Manifests[0].ConsignmentAddresses[location.Supplier.Manifests[0].ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = location.Supplier.Manifests[0].ConsignmentAddresses[location.Supplier.Manifests[0].ConsignmentAddresses.length - 1].Address;\r\n\r\n location.Supplier.Manifests[0].StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Supplier.Manifests[0].StartDeliveryAddress = startDeliveryAddress;\r\n location.Supplier.Manifests[0].FormattedStartDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(startDeliveryAddress);\r\n location.Supplier.Manifests[0].LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n location.Supplier.Manifests[0].LastDeliveryAddress = lastDeliveryAddress;\r\n location.Supplier.Manifests[0].FormattedLastDeliveryAddress = ManifestFactory.getFullFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return location;\r\n }\r\n );\r\n },\r\n getLastSupplierLocationByVehicleType: function (vehicleTypeId) {\r\n var urlParameters = '';\r\n\r\n urlParameters += '?vehicleTypeId=' + encodeURI(vehicleTypeId);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Last' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n var locations = response.data;\r\n\r\n for (var i = 0; i < locations.length; i++) {\r\n if (locations[i].Supplier && locations[i].Manifest !== null && locations[i].Manifest.ConsignmentAddresses.length > 0) {\r\n var startDeliveryDate = null;\r\n var startDeliveryAddress = null;\r\n var lastDeliveryDate = null;\r\n var lastDeliveryAddress = null;\r\n\r\n /*\r\n for (var a = 0; a < locations[i].Supplier.Manifests[0].ConsignmentAddresses.length; a++) {\r\n if (!startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) < startDeliveryDate) {\r\n startDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n\r\n if (!lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n else {\r\n if (moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime) > lastDeliveryDate) {\r\n lastDeliveryDate = moment(locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Supplier.Manifests[0].ConsignmentAddresses[a].Address;\r\n }\r\n }\r\n }\r\n */\r\n\r\n startDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime);\r\n startDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[0].Address;\r\n\r\n lastDeliveryDate = moment(locations[i].Manifest.ConsignmentAddresses[locations[i].Manifest.ConsignmentAddresses.length - 1].ScheduledStartDateAndTime);\r\n lastDeliveryAddress = locations[i].Manifest.ConsignmentAddresses[locations[i].Manifest.ConsignmentAddresses.length - 1].Address;\r\n\r\n locations[i].Manifest.StartDeliveryDate = moment(startDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.StartDeliveryAddress = startDeliveryAddress;\r\n if (locations[i].Manifest.StartDeliveryAddress) locations[i].Manifest.FormattedStartDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(startDeliveryAddress);\r\n\r\n locations[i].Manifest.LastDeliveryDate = moment(lastDeliveryDate).format('DD/MM/YY HH:mm');\r\n locations[i].Manifest.LastDeliveryAddress = lastDeliveryAddress;\r\n if (locations[i].Manifest.LastDeliveryAddress) locations[i].Manifest.FormattedLastDeliveryAddress = ManifestFactory.getFormattedConsignmentAddress(lastDeliveryAddress);\r\n }\r\n }\r\n\r\n return locations;\r\n }\r\n );\r\n },\r\n getSupplierLocations: function (supplierId, startDate, endDate) {\r\n var urlParameters = '';\r\n\r\n if (supplierId) urlParameters += '?supplierId=' + encodeURI(supplierId)\r\n if (startDate) urlParameters += '&startDate=' + encodeURI(moment(startDate).format('YYYY-MM-DDTHH:mm'))\r\n if (encodeURI) urlParameters += '&endDate=' + encodeURI(moment(endDate).format('YYYY-MM-DDTHH:mm'))\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierLocations/Track' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n searchSupplierByName: function (searchText) {\r\n var urlParameters = '';\r\n\r\n urlParameters += '?supplierName=' + encodeURI(searchText);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n getEarnings: function(startDate, endDate){\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Suppliers/' + moment(startDate).format('YYYY-MM-DD') + '/' + moment(endDate).format('YYYY-MM-DD') + '/Earnings', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n saveSupplier: function () {\r\n var self = this;\r\n\r\n if (this.supplier.SupplierPhotos) delete this.supplier.SupplierPhotos;\r\n\r\n if (!this.supplier.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Suppliers', self.supplier, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplier = response.data;\r\n\r\n return self.supplier;\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Suppliers/' + self.supplier.Id, self.supplier, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.supplier;\r\n }\r\n );\r\n }\r\n },\r\n saveSupplierPhoto: function (supplierPhoto) {\r\n if (supplierPhoto.Supplier.Deductions) delete supplierPhoto.Supplier.Deductions;\r\n if (supplierPhoto.Supplier.SupplierLicences) delete supplierPhoto.Supplier.SupplierLicences;\r\n if (supplierPhoto.Supplier.SupplierPhotos) delete supplierPhoto.Supplier.SupplierPhotos;\r\n if (supplierPhoto.Supplier.SupplierUsers) delete supplierPhoto.Supplier.SupplierUsers;\r\n if (supplierPhoto.Supplier.Vehicles) delete supplierPhoto.Supplier.Vehicles;\r\n\r\n if (!supplierPhoto.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/SupplierPhotos', supplierPhoto, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/SupplierPhotos/' + supplierPhoto.Id, supplierPhoto, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return supplierPhoto;\r\n }\r\n );\r\n }\r\n },\r\n deleteSupplierPhoto: function (supplierPhoto) {\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/SupplierPhotos/' + supplierPhoto.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n }\r\n }\r\n}]);","customers.factory('CustomerFactory', ['$http', 'UserFactory', function ($http, UserFactory) {\r\n return {\r\n lastCustomerNameSearched: null,\r\n customerSearchResponse: null,\r\n lastCustomerExistingAddressSearched: null,\r\n customerExistingAddressSearchResponse: null,\r\n customer: null,\r\n customers: null,\r\n createNewCustomer: function () {\r\n this.customer = {\r\n Addresses: [],\r\n Contacts: [],\r\n CustomerUsers: [],\r\n Matrices: [],\r\n InvoiceSettings: [],\r\n OptionalConsignmentFields: []\r\n };\r\n\r\n return this.customer;\r\n },\r\n getCustomer: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customer = response.data;\r\n\r\n return self.customer;\r\n }\r\n );\r\n },\r\n getCustomers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customers = response.data;\r\n\r\n return self.customers;\r\n }\r\n );\r\n },\r\n getCustomersOverCreditLimit: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/Report/Credit', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n searchCustomers: function (name, customerAccountType, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name !== null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + encodeURIComponent(name);\r\n }\r\n if (customerAccountType) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'customerAccountType=' + customerAccountType.Id;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customers = response.data;\r\n\r\n return self.customers;\r\n }\r\n );\r\n },\r\n searchCustomerByName: function (name) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n urlParameters += '?customerName=' + encodeURIComponent(name);\r\n\r\n self.lastCustomerNameSearched = name;\r\n console.log(\"Last Customer Name Searched: \" + self.lastCustomerNameSearched);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n console.log(\"Last Customer Name Searched: \" + self.lastCustomerNameSearched + \", 'name': \" + name);\r\n\r\n if (self.lastCustomerNameSearched === name) {\r\n self.customerSearchResponse = response.data;\r\n }\r\n\r\n return self.customerSearchResponse;\r\n }\r\n );\r\n },\r\n searchCustomersExistingAddress: function (id, searchText) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n urlParameters += '?text=' + encodeURIComponent(searchText);\r\n\r\n self.lastCustomerExistingAddressSearched = searchText;\r\n console.log(\"Last Customer Existing Address Searched: \" + self.lastCustomerExistingAddressSearched);\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Customers/' + id + '/Address/Search' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n console.log(\"Last Customer Name Searched: \" + self.lastCustomerExistingAddressSearched + \", 'searchText': \" + searchText);\r\n\r\n var addresses = response.data;\r\n var address;\r\n\r\n for (var i = 0; i < addresses.length; i++) {\r\n address = '';\r\n\r\n if (addresses[i].CompanyName) address += addresses[i].CompanyName + ', ';\r\n address += addresses[i].AddressLine1 + ', ' + addresses[i].Postcode;\r\n\r\n addresses[i].ShortAddress = address;\r\n }\r\n\r\n if (self.lastCustomerExistingAddressSearched === searchText) {\r\n self.customerExistingAddressSearchResponse = addresses;\r\n }\r\n\r\n return self.customerExistingAddressSearchResponse;\r\n }\r\n );\r\n },\r\n getCustomerMatrix: function (id) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Matrices/Customer/' + id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n saveCustomer: function () {\r\n var self = this;\r\n\r\n var c = angular.copy(self.customer);\r\n if (c.Branches) delete c.Branches;\r\n\r\n if (!self.customer.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Customers', c, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customer = response.data;\r\n\r\n return self.customer;\r\n }\r\n );\r\n }\r\n else {\r\n if (!self.customer.HasParent) {\r\n self.customer.ParentId = null;\r\n self.customer.Parent = null;\r\n }\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Customers/' + c.Id, c, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return self.customer;\r\n }\r\n );\r\n }\r\n },\r\n login: function (username, password) {\r\n var self = this;\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Customers/Login', { 'username': username, 'password': password })\r\n .then(\r\n function (response) {\r\n self.currentActiveUser = response.data;\r\n\r\n $rootScope.$broadcast('user:loggedIn', self.currentActiveUser);\r\n\r\n return self.currentActiveUser;\r\n }\r\n );\r\n }\r\n }\r\n}]);","shared.factory('AtlasUserFactory', ['$rootScope', '$http', '$localStorage', 'UserFactory', function ($rootScope, $http, $localStorage, UserFactory) {\r\n return {\r\n changePassword: function (user) {\r\n var self = this;\r\n var u = angular.copy(user);\r\n\r\n delete u.AtlasUserRole;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/AtlasUsers/ChangePassword/' + u.Id, user, { headers: { 'Token': UserFactory.token } });\r\n },\r\n isUserAdmin: function () {\r\n return (UserFactory.currentActiveUser) ? (UserFactory.currentActiveUser.AtlasUserRole && UserFactory.currentActiveUser.AtlasUserRole.Id.toUpperCase() === '26752E67-6FB2-47C5-88B2-221BBDB38262') : false;\r\n },\r\n isUserAccounts: function () {\r\n return (UserFactory.currentActiveUser) ? (UserFactory.currentActiveUser.AtlasUserRole && UserFactory.currentActiveUser.AtlasUserRole.Id.toUpperCase() === '98653A85-F0BF-4B46-B49F-77516A0AA950') : false;\r\n },\r\n isUserManager: function () {\r\n return (UserFactory.currentActiveUser) ? (UserFactory.currentActiveUser.AtlasUserRole && UserFactory.currentActiveUser.AtlasUserRole.Id.toUpperCase() === '1AB95751-3A03-46ED-BEF0-5203E37FC660') : false;\r\n }\r\n }\r\n}]);","shared.factory('CountryFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n countries: null,\r\n getCountries: function () {\r\n var self = this;\r\n\r\n if (!self.countries) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Countries', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.countries = response.data;\r\n\r\n return self.countries;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.countries);\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n }\r\n}]);","settings.factory('SettingsFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n globalSettings: null,\r\n supplierTypes: null,\r\n supplierBillingTypes: null,\r\n licenceCategories: null,\r\n ledgerNumbers: null,\r\n vatCodes: null,\r\n matrices: null,\r\n costingMatrices: null,\r\n additionalCharges: null,\r\n vehicleTypes: null,\r\n atlasUsers: null,\r\n accountCodes: null,\r\n whitelistedIpAddresses: null,\r\n userIpLogs: null,\r\n areaAdditionalChargeRules: null,\r\n brandingThemes: null,\r\n\r\n getGlobalSettings: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Settings', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.globalSettings = response.data[0];\r\n\r\n return self.globalSettings;\r\n }\r\n );\r\n },\r\n getSupplierTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierTypes = response.data;\r\n\r\n return self.supplierTypes;\r\n }\r\n );\r\n },\r\n getSupplierBillingTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierBillingTypes = response.data;\r\n\r\n return self.supplierBillingTypes;\r\n }\r\n );\r\n },\r\n searchSupplierBillingTypes: function (name, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name != null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + username;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierBillingTypes = response.data;\r\n\r\n return self.supplierBillingTypes;\r\n }\r\n );\r\n },\r\n getLicenceCategories: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LicenceCategories', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.licenceCategories = response.data;\r\n\r\n return self.licenceCategories;\r\n }\r\n );\r\n },\r\n searchLicenceCategories: function (name, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name != null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LicenceCategories' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.licenceCategories = response.data;\r\n\r\n return self.licenceCategories;\r\n }\r\n );\r\n },\r\n getLedgerNumbers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LedgerNumbers', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.ledgerNumbers = response.data;\r\n\r\n return self.ledgerNumbers;\r\n }\r\n );\r\n },\r\n getVatCodes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VATCodes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vatCodes = response.data;\r\n\r\n return self.vatCodes;\r\n }\r\n );\r\n },\r\n getMatrices: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Matrices', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.matrices = response.data;\r\n\r\n return self.matrices;\r\n }\r\n );\r\n },\r\n getCostingMatrices: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Matrices/Costing', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.costingMatrices = response.data;\r\n\r\n return self.costingMatrices;\r\n }\r\n );\r\n },\r\n getAdditionalCharges: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AdditionalCharges', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.additionalCharges = response.data;\r\n\r\n return self.additionalCharges;\r\n }\r\n );\r\n },\r\n searchAdditionalCharges: function (chargeFor, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (chargeFor != null && chargeFor.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'charge-for=' + chargeFor;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AdditionalCharges' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.additionalCharges = response.data;\r\n\r\n return self.additionalCharges;\r\n }\r\n );\r\n },\r\n getVehicleTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VehicleTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vehicleTypes = response.data;\r\n\r\n return self.vehicleTypes;\r\n }\r\n );\r\n },\r\n searchVehicleTypes: function (name, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name != null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + username;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VehicleTypes' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vehicleTypes = response.data;\r\n\r\n return self.vehicleTypes;\r\n }\r\n );\r\n },\r\n getAtlasUsers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AtlasUsers', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.atlasUsers = response.data;\r\n\r\n return self.atlasUsers;\r\n }\r\n );\r\n },\r\n searchAtlasUsers: function (username, email, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (username != null && username.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'username=' + username;\r\n }\r\n if (email != null && email.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'email=' + email;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AtlasUsers' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.atlasUsers = response.data;\r\n\r\n return self.atlasUsers;\r\n }\r\n );\r\n },\r\n getWhitelistedIpAddresses: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/WhitelistedIpAddresses', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.whitelistedIpAddresses = response.data;\r\n\r\n return self.whitelistedIpAddresses;\r\n }\r\n );\r\n },\r\n getUserIpLogs: function (startDate, endDate) {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/UserIpLogs/' + startDate.format('YYYY-MM-DD') + '/' + endDate.format('YYYY-MM-DD'), { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.userIpLogs = response.data;\r\n\r\n return self.userIpLogs;\r\n }\r\n );\r\n },\r\n getAreaAdditionalChargeRules: function () {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.areaAdditionalChargeRules = response.data;\r\n\r\n return self.areaAdditionalChargeRules;\r\n }\r\n );\r\n },\r\n searchAreaAdditionalChargeRules: function (name, postcodes, isDeactivated) {\r\n var self = this;\r\n var urlParameters = '';\r\n\r\n if (name != null && name.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n if (postcodes != null && postcodes.length > 0) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'postcodes=' + postcodes;\r\n }\r\n if (isDeactivated) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'isDeactivated=' + isDeactivated;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.areaAdditionalChargeRules = response.data;\r\n\r\n return self.areaAdditionalChargeRules;\r\n }\r\n );\r\n },\r\n\r\n getAllSupplierTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierTypes/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierTypes = response.data;\r\n\r\n return self.supplierTypes;\r\n }\r\n );\r\n },\r\n getAllSupplierBillingTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierBillingTypes = response.data;\r\n\r\n return self.supplierBillingTypes;\r\n }\r\n );\r\n },\r\n getAllLicenceCategories: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LicenceCategories/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.licenceCategories = response.data;\r\n\r\n return self.licenceCategories;\r\n }\r\n );\r\n },\r\n getAllLedgerNumbers: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/LedgerNumbers/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.ledgerNumbers = response.data;\r\n\r\n return self.ledgerNumbers;\r\n }\r\n );\r\n },\r\n getAllVatCodes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VATCodes/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vatCodes = response.data;\r\n\r\n return self.vatCodes;\r\n }\r\n );\r\n },\r\n getAllAdditionalCharges: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AdditionalCharges/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.additionalCharges = response.data;\r\n\r\n return self.additionalCharges;\r\n }\r\n );\r\n },\r\n getAllVehicleTypes: function () {\r\n var self = this;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/VehicleTypes/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vehicleTypes = response.data;\r\n\r\n return self.vehicleTypes;\r\n }\r\n );\r\n\r\n },\r\n getAllAreaAdditionalChargeRules: function () {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules/All', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.areaAdditionalChargeRules = response.data;\r\n\r\n return self.areaAdditionalChargeRules;\r\n }\r\n );\r\n },\r\n\r\n saveGlobalSettings: function () {\r\n var self = this;\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Settings/' + self.globalSettings.Id, self.globalSettings, { headers: { 'Token': UserFactory.token } });\r\n },\r\n saveSupplierTypes: function (supplierType) {\r\n var self = this;\r\n\r\n if (!supplierType.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/SupplierTypes', supplierType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierTypes.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/SupplierTypes/' + supplierType.Id, supplierType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.supplierTypes.length; i++) {\r\n if (self.supplierTypes[i].Id === supplierType.Id) {\r\n self.supplierTypes[i] = supplierType;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveSupplierBillingTypes: function (supplierBillingType) {\r\n var self = this;\r\n\r\n if (!supplierBillingType.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes', supplierBillingType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.supplierBillingTypes.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/SupplierBillingTypes/' + supplierBillingType.Id, supplierBillingType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.supplierBillingTypes.length; i++) {\r\n if (self.supplierBillingTypes[i].Id === supplierBillingType.Id) {\r\n self.supplierBillingTypes[i] = supplierBillingType;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveLicenceCategories: function (licenceCategory) {\r\n var self = this;\r\n\r\n if (!licenceCategory.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/LicenceCategories', licenceCategory, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.licenceCategories.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/LicenceCategories/' + licenceCategory.Id, licenceCategory, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.licenceCategories.length; i++) {\r\n if (self.licenceCategories[i].Id === licenceCategory.Id) {\r\n self.licenceCategories[i] = licenceCategory;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveLedgerNumbers: function (ledgerNumber) {\r\n var self = this;\r\n\r\n if (!ledgerNumber.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/LedgerNumbers', ledgerNumber, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.ledgerNumbers.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/LedgerNumbers/' + ledgerNumber.Id, ledgerNumber, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.ledgerNumbers.length; i++) {\r\n if (self.ledgerNumbers[i].Id === ledgerNumber.Id) {\r\n self.ledgerNumbers[i] = ledgerNumber;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveVatCodes: function (vatCode) {\r\n var self = this;\r\n\r\n if (!vatCode.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/VATCodes', vatCode, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vatCodes.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/VATCodes/' + vatCode.Id, vatCode, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.vatCodes.length; i++) {\r\n if (self.vatCodes[i].Id === vatCode.Id) {\r\n self.vatCodes[i] = vatCode;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveMatrices: function (priceMatrix) {\r\n var self = this;\r\n\r\n if (!priceMatrix.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Matrices', priceMatrix, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.matrices.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Matrices/' + priceMatrix.Id, priceMatrix, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.matrices.length; i++) {\r\n if (self.matrices[i].Id === priceMatrix.Id) {\r\n self.matrices[i] = priceMatrix;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveAdditionalCharges: function (additionalCharge) {\r\n var self = this;\r\n\r\n if (!additionalCharge.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/AdditionalCharges', additionalCharge, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.additionalCharges.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/AdditionalCharges/' + additionalCharge.Id, additionalCharge, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.additionalCharges.length; i++) {\r\n if (self.additionalCharges[i].Id === additionalCharge.Id) {\r\n self.additionalCharges[i] = additionalCharge;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveVehicleTypes: function (vehicleType) {\r\n var self = this;\r\n\r\n if (!vehicleType.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/VehicleTypes', vehicleType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.vehicleTypes.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/VehicleTypes/' + vehicleType.Id, vehicleType, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.vehicleTypes.length; i++) {\r\n if (self.vehicleTypes[i].Id === vehicleType.Id) {\r\n self.vehicleTypes[i] = vehicleType;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveAtlasUsers: function (atlasUser) {\r\n var self = this;\r\n\r\n if (!atlasUser.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/AtlasUsers', atlasUser, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.atlasUsers.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/AtlasUsers/' + atlasUser.Id, atlasUser, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.atlasUsers.length; i++) {\r\n if (self.atlasUsers[i].Id === atlasUser.Id) {\r\n self.atlasUsers[i] = atlasUser;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveWhitelistedIpAddress: function (whitelistedIpAddress) {\r\n var self = this;\r\n\r\n if (!whitelistedIpAddress.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/WhitelistedIpAddresses', whitelistedIpAddress, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.whitelistedIpAddresses.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/WhitelistedIpAddresses/' + whitelistedIpAddress.Id, whitelistedIpAddress, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.whitelistedIpAddresses.length; i++) {\r\n if (self.whitelistedIpAddresses[i].Id === whitelistedIpAddress.Id) {\r\n self.whitelistedIpAddresses[i] = whitelistedIpAddress;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n saveAreaAdditionalChargeRules: function (areaAdditionalChargeRule) {\r\n var self = this;\r\n\r\n if (!areaAdditionalChargeRule.Id) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules', areaAdditionalChargeRule, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.areaAdditionalChargeRules.push(response.data);\r\n }\r\n );\r\n }\r\n else {\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/AreaAdditionalChargeRules/' + areaAdditionalChargeRule.Id, areaAdditionalChargeRule, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n for (var i = 0; i < self.areaAdditionalChargeRules.length; i++) {\r\n if (self.areaAdditionalChargeRules[i].Id === areaAdditionalChargeRule.Id) {\r\n self.areaAdditionalChargeRules[i] = areaAdditionalChargeRule;\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n },\r\n\r\n searchAccountCodes: function (name) {\r\n var self = this;\r\n\r\n var urlParameters = '';\r\n\r\n if (name) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AccountCodes' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.accountCodes = [];\r\n\r\n for (var i = 0; i < response.data.length; i++) {\r\n self.accountCodes.push({\r\n Name: response.data[i].Code + ' - ' + response.data[i].Name,\r\n Item: response.data[i]\r\n });\r\n }\r\n\r\n return self.accountCodes;\r\n }\r\n );\r\n },\r\n\r\n deleteMatrix: function (matrix) {\r\n var self = this;\r\n\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/Matrices/' + matrix.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n deleteWhitelistedIpAddress: function (whitelistedIpAddress) {\r\n var self = this;\r\n\r\n return $http.delete(__WEB_SERVICE_BASE_URL + '/WhitelistedIpAddresses/' + whitelistedIpAddress.Id, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n\r\n getBrandingThemes: function (name) {\r\n var self = this;\r\n\r\n var urlParameters = '';\r\n\r\n if (name) {\r\n urlParameters += (urlParameters.length === 0) ? '?' : '&';\r\n urlParameters += 'name=' + name;\r\n }\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/BrandingThemes' + urlParameters, { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.brandingThemes = [];\r\n\r\n for (var i = 0; i < response.data.length; i++) {\r\n self.brandingThemes.push({\r\n Name: response.data[i].Name,\r\n Item: response.data[i]\r\n });\r\n }\r\n\r\n return self.brandingThemes;\r\n }\r\n );\r\n },\r\n }\r\n}]);","shared.factory('PhotosFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n upload: function (file) {\r\n var self = this;\r\n var formData = new FormData();\r\n\r\n formData.append('file', file, file.name);\r\n\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Photos', formData, { headers: { 'Token': UserFactory.token, 'Content-Type': undefined }, transformRequest: angular.identity })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n }\r\n }\r\n}]);","shared.factory('CommonFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n customerAccountTypes: null,\r\n consignmentTypes: null,\r\n consignmentAddressTypes: null,\r\n statusColours: null,\r\n matrixTypes: null,\r\n matrixPriceIncrements: null,\r\n atlasUserRoles: null,\r\n invoiceSetupOptions: null,\r\n invoiceDeliveries: null,\r\n invoiceDeliveryOptions: null,\r\n paymentTermStartOptions: null,\r\n consignmentFrequencies: null,\r\n weekdays: null,\r\n xeroOrganiations: null,\r\n consignmentControlScreenColumns: null,\r\n\r\n getCustomerAccountTypes: function () {\r\n var self = this;\r\n\r\n if (!self.customerAccountTypes) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/CustomerAccountTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.customerAccountTypes = response.data;\r\n\r\n return self.customerAccountTypes;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.customerAccountTypes);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getConsignmentTypes: function () {\r\n var self = this;\r\n\r\n if (!self.consignmentTypes) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignmentTypes = response.data;\r\n\r\n return self.consignmentTypes;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.consignmentTypes);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getConsignmentAddressTypes: function () {\r\n var self = this;\r\n\r\n if (!self.consignmentAddressTypes) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentAddressTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignmentAddressTypes = response.data;\r\n\r\n return self.consignmentAddressTypes;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.consignmentAddressTypes);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getStatusColours: function () {\r\n var self = this;\r\n\r\n if (!self.statusColours) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/StatusColours', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.statusColours = response.data;\r\n\r\n return self.statusColours;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.statusColours);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getMatrixTypes: function () {\r\n var self = this;\r\n\r\n if (!self.matrixTypes) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/MatrixTypes', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.matrixTypes = response.data;\r\n\r\n return self.matrixTypes;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.matrixTypes);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getMatrixPriceIncrements: function () {\r\n var self = this;\r\n\r\n if (!self.matrixPriceIncrements) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/MatrixPriceIncrements', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.matrixPriceIncrements = response.data;\r\n\r\n return self.matrixPriceIncrements;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.matrixPriceIncrements);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getAtlasUserRoles: function () {\r\n var self = this;\r\n\r\n if (!self.atlasUserRoles) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/AtlasUserRoles', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.atlasUserRoles = response.data;\r\n\r\n return self.atlasUserRoles;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.atlasUserRoles);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getInvoiceSetupOptions: function () {\r\n var self = this;\r\n\r\n if (!self.invoiceSetupOptions) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/InvoiceSetupOptions', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.invoiceSetupOptions = response.data;\r\n\r\n return self.invoiceSetupOptions;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.invoiceSetupOptions);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getInvoiceDeliveries: function () {\r\n var self = this;\r\n\r\n if (!self.invoiceDeliveries) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/InvoiceDeliveries', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.invoiceDeliveries = response.data;\r\n\r\n return self.invoiceDeliveries;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.invoiceDeliveries);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getInvoiceDeliveryOptions: function () {\r\n var self = this;\r\n\r\n if (!self.invoiceDeliveryOptions) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/InvoiceDeliveryOptions', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.invoiceDeliveryOptions = response.data;\r\n\r\n return self.invoiceDeliveryOptions;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.invoiceDeliveryOptions);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getPaymentTermStartOptions: function () {\r\n var self = this;\r\n\r\n if (!self.paymentTermStartOptions) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/PaymentTermStartOptions', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.paymentTermStartOptions = response.data;\r\n\r\n return self.paymentTermStartOptions;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.paymentTermStartOptions);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getConsignmentFrequencies: function () {\r\n var self = this;\r\n\r\n if (!self.consignmentFrequencies) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentFrequencies', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignmentFrequencies = response.data;\r\n\r\n return self.consignmentFrequencies;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.consignmentFrequencies);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getWeekDays: function () {\r\n var self = this;\r\n\r\n if (!self.weekdays) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/WeekDays', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.weekdays = response.data;\r\n\r\n return self.weekdays;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.weekdays);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getInvoicingEvent: function () {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Events/Invoicing', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n return response.data;\r\n }\r\n );\r\n },\r\n getXeroOrganisations: function () {\r\n var self = this;\r\n\r\n if (!self.xeroOrganiations) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/XeroOrganisations', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.xeroOrganiations = response.data;\r\n\r\n return self.xeroOrganiations;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.xeroOrganiations);\r\n\r\n return deferred.promise;\r\n }\r\n },\r\n getControlScreenConsignmentColumns: function () {\r\n var self = this;\r\n\r\n if (!self.consignmentControlScreenColumns) {\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/ConsignmentControlScreenColumns', { headers: { 'Token': UserFactory.token } })\r\n .then(\r\n function (response) {\r\n self.consignmentControlScreenColumns = response.data;\r\n\r\n return self.consignmentControlScreenColumns;\r\n }\r\n );\r\n }\r\n else {\r\n var deferred = $q.defer();\r\n\r\n deferred.resolve(self.consignmentControlScreenColumns);\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n }\r\n}]);","shared.factory('UserFactory', ['$rootScope', '$http', '$localStorage', '$q', function ($rootScope, $http, $localStorage, $q) {\r\n return {\r\n currentActiveUser: $localStorage.currentActiveUser,\r\n token: $localStorage.token,\r\n login: function (email, password, deviceId, authenticationCode) {\r\n var self = this;\r\n var deferred = $q.defer();\r\n\r\n $http.post(__WEB_SERVICE_BASE_URL + '/Users/Authenticate', '', { headers: { 'Authorization': 'Basic ' + this.getAuth(email, password, deviceId, authenticationCode) } })\r\n .then(\r\n function (response) {\r\n self.token = response.headers('Token');\r\n\r\n $localStorage.token = self.token;\r\n\r\n return $http.get(__WEB_SERVICE_BASE_URL + '/Users/Current', { headers: { 'Token': self.token } })\r\n .then(\r\n function (response) {\r\n self.currentActiveUser = response.data;\r\n\r\n $localStorage.currentActiveUser = self.currentActiveUser;\r\n\r\n deferred.resolve(self.currentActiveUser);\r\n\r\n $rootScope.$broadcast('user:loggedIn', self.currentActiveUser);\r\n },\r\n function (error) {\r\n console.log(error);\r\n\r\n deferred.reject(error);\r\n }\r\n );\r\n },\r\n function (error, status, headers) {\r\n console.log(error);\r\n\r\n deferred.reject(error);\r\n }\r\n );\r\n\r\n return deferred.promise;\r\n },\r\n logout: function () {\r\n var self = this;\r\n var deferred = $q.defer();\r\n\r\n if (self.token) {\r\n return $http.post(__WEB_SERVICE_BASE_URL + '/Users/SignOut', '', { headers: { 'Token': self.token } })\r\n .then(\r\n function (response) {\r\n $localStorage.token = null;\r\n $localStorage.currentActiveUser = null;\r\n\r\n self.token = null;\r\n self.currentActiveUser = null;\r\n\r\n $rootScope.$broadcast('user:loggedOut');\r\n\r\n deferred.resolve();\r\n },\r\n function () {\r\n $localStorage.token = null;\r\n $localStorage.currentActiveUser = null;\r\n\r\n self.token = null;\r\n self.currentActiveUser = null;\r\n\r\n $rootScope.$broadcast('user:loggedOut');\r\n\r\n deferred.resolve();\r\n }\r\n );\r\n }\r\n else {\r\n $localStorage.token = null;\r\n $localStorage.currentActiveUser = null;\r\n\r\n self.token = null;\r\n self.currentActiveUser = null;\r\n\r\n $rootScope.$broadcast('user:loggedOut');\r\n\r\n deferred.resolve();\r\n }\r\n\r\n return deferred.promise;\r\n },\r\n getAuth: function (username, password, deviceId, authenticationCode) {\r\n if (authenticationCode) {\r\n return btoa(username + ':' + password + ':' + deviceId + ':' + authenticationCode);\r\n }\r\n else {\r\n return btoa(username + ':' + password + ':' + deviceId);\r\n\t\t\t}\r\n },\r\n changePassword: function (user) {\r\n var self = this;\r\n var u = angular.copy(user);\r\n\r\n return $http.put(__WEB_SERVICE_BASE_URL + '/Users/ChangePassword/' + u.Id, user, { headers: { 'Token': self.token } });\r\n },\r\n }\r\n}]);","shared.factory('AuthorizationHttpInterceptorFactory', ['$q', '$rootScope', '$timeout', '$localStorage', 'FoundationApi', 'AtlasModalFactory', function ($q, $rootScope, $timeout, $localStorage, FoundationApi, AtlasModalFactory) {\r\n var timerNotification = null;\r\n var timerSignOut = null;\r\n\r\n var service = {\r\n request: request,\r\n requestError: requestError,\r\n response: response,\r\n responseError: responseError\r\n };\r\n\r\n return service;\r\n\r\n function request(config) {\r\n //if (config.url.indexOf(__WEB_SERVICE_BASE_URL) >= 0) {\r\n // $localStorage.requestDateTime = moment();\r\n\r\n // if (timerNotification) $timeout.cancel(timerNotification);\r\n\r\n // startNotificationTimer(__TIMEOUT_NOTIFICATION);\r\n //}\r\n\r\n return config || $q.when(config);\r\n }\r\n\r\n function requestError(rejection) {\r\n return $q.reject(rejection);\r\n }\r\n\r\n function response(response) {\r\n if (response.config.url.indexOf(__WEB_SERVICE_BASE_URL) >= 0 && response.config.url.indexOf(\"Users/SignOut\") < 0) {\r\n $localStorage.requestDateTime = moment();\r\n\r\n //console.log('Last request: ' + moment($localStorage.requestDateTime).format('DD/MM/YYYY HH:mm:ss'));\r\n\r\n startTimers(__TIMEOUT_NOTIFICATION, __TIMEOUT_SIGNOUT);\r\n }\r\n\r\n return response || $q.when(response);\r\n }\r\n\r\n function responseError(rejection) {\r\n if (rejection.status === 401 && rejection.config.url.indexOf(\"Users/Authenticate\") < 0 && rejection.config.url.indexOf(\"Users/SignOut\") < 0) {\r\n if (timerNotification) $timeout.cancel(timerNotification);\r\n AtlasModalFactory.open('divSignedOut');\r\n }\r\n\r\n return $q.reject(rejection);\r\n }\r\n\r\n function startTimers(notificationTimeout, signoutTimeout) {\r\n $timeout.cancel(timerNotification);\r\n $timeout.cancel(timerSignOut);\r\n\r\n //console.log('Notification of signout set for ' + moment().add(notificationTimeout, 'ms').format('DD/MM/YYYY HH:mm:ss'));\r\n //console.log('Signout set for ' + moment().add(signoutTimeout, 'ms').format('DD/MM/YYYY HH:mm:ss'));\r\n\r\n timerNotification = $timeout(function () {\r\n $timeout.cancel(timerNotification);\r\n\r\n if ($localStorage.requestDateTime && moment($localStorage.requestDateTime).add(__TIMEOUT_NOTIFICATION, 'ms') > moment()) {\r\n notificationTimeout = moment.duration(moment($localStorage.requestDateTime).add(__TIMEOUT_NOTIFICATION, 'ms').diff(moment()));\r\n signoutTimeout = moment.duration(moment($localStorage.requestDateTime).add(__TIMEOUT_SIGNOUT, 'ms').diff(moment()));\r\n\r\n startTimers(notificationTimeout, signoutTimeout);\r\n\r\n return false;\r\n }\r\n\r\n FoundationApi.publish('user-signout-notifications', { title: 'Warning', content: 'You will be logged out in 2 minutes', color: 'warning', autoclose: 4000 });\r\n }, notificationTimeout);\r\n\r\n timerSignOut = $timeout(function () {\r\n $timeout.cancel(timerNotification);\r\n $timeout.cancel(timerSignOut);\r\n\r\n AtlasModalFactory.open('divSignedOut');\r\n }, signoutTimeout);\r\n }\r\n}]);","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('clickinon.factories.httpInterceptor', [])\r\n .factory('httpInterceptorProgressFactory', httpInterceptorProgressFactory);\r\n\r\n httpInterceptorProgressFactory.$inject = ['$q', '$rootScope'];\r\n\r\n function httpInterceptorProgressFactory($q, $rootScope) {\r\n var httpRequests = 0;\r\n\r\n var service = {\r\n exceptions: [],\r\n config: config,\r\n request: request,\r\n requestError: requestError,\r\n response: response,\r\n responseError: responseError\r\n };\r\n\r\n return service;\r\n\r\n function config(exception) {\r\n var found = false;\r\n\r\n for (var i = 0; i < this.exceptions.length; i++) {\r\n if (this.exceptions[i] === exception) found = true;\r\n }\r\n\r\n if (!found) this.exceptions.push(exception);\r\n }\r\n\r\n function request(config) {\r\n var self = service;\r\n var ignoreProgress = false;\r\n\r\n if (angular.isArray(self.exceptions)) {\r\n for (var i = 0; i < self.exceptions.length; i++) {\r\n if (config.url.indexOf(self.exceptions[i]) >= 0) {\r\n ignoreProgress = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (++httpRequests === 1 && !ignoreProgress) $rootScope.$broadcast('HttpRequests:Progress');\r\n return config || $q.when(config);\r\n }\r\n\r\n function requestError(rejection) {\r\n if (--httpRequests === 0) $rootScope.$broadcast('HttpRequests:Finish');\r\n return $q.reject(rejection);\r\n }\r\n\r\n function response(response) {\r\n if (--httpRequests === 0) $rootScope.$broadcast('HttpRequests:Finish');\r\n return response || $q.when(response);\r\n }\r\n\r\n function responseError(rejection) {\r\n if (--httpRequests === 0) $rootScope.$broadcast('HttpRequests:Finish');\r\n return $q.reject(rejection);\r\n }\r\n }\r\n})();","shared.factory('PostcodeLookupFactory', ['$http', '$q', 'UserFactory', function ($http, $q, UserFactory) {\r\n return {\r\n search: function (text) {\r\n var self = this;\r\n var params = {\r\n all: true\r\n }\r\n\r\n return $http.post('https://api.getAddress.io/autocomplete/' + text + '?api-key=' + __GETADDRESS_KEY, params);\r\n },\r\n\r\n get: function (id) {\r\n return $http.get('https://api.getAddress.io/get/' + id + '?api-key=' + __GETADDRESS_KEY);\r\n }\r\n }\r\n}]);","manifests.filter('scheduledDateTimeFilter', function () {\r\n return function (consignmentAddresses, datetime) {\r\n if (!consignmentAddresses || !datetime) return consignmentAddresses;\r\n\r\n var filteredConsignmentAddresses = [];\r\n\r\n angular.forEach(consignmentAddresses, function (consignmentAddress) {\r\n datetime = moment(datetime);\r\n scheduledDateTime = moment(consignmentAddress.ScheduledStartDateAndTime);\r\n \r\n if (moment(consignmentAddress.ScheduledStartDateAndTime).isSame(moment(datetime), 'day')) {\r\n filteredConsignmentAddresses.push(consignmentAddress);\r\n }\r\n });\r\n\r\n return filteredConsignmentAddresses;\r\n }\r\n});","login.controller('LoginController', ['$scope', '$state', '$localStorage', 'UserFactory', 'CustomerFactory', function ($scope, $state, $localStorage, UserFactory, CustomerFactory) {\r\n if (UserFactory.currentActiveUser) {\r\n $state.go('control_screen');\r\n }\r\n\r\n $scope.uuid = ($localStorage.uuid) ? $localStorage.uuid : uuidv4();\r\n $scope.email = \"\";\r\n $scope.password = \"\";\r\n $scope.errorMessage = null;\r\n $scope.loggingIn = false;\r\n $scope.showAuthenticationCode = false;\r\n\r\n if (!$localStorage.uuid) $localStorage.uuid = $scope.uuid;\r\n\r\n $scope.login = function () {\r\n $scope.loggingIn = true;\r\n $scope.errorMessage = null;\r\n\r\n UserFactory.login($scope.email, $scope.password, $scope.uuid, $scope.authenticationCode)\r\n .then(\r\n function (user) {\r\n $scope.loggingIn = false;\r\n\r\n //if (user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n // $state.go('control_screen');\r\n //}\r\n //else {\r\n // $state.go('consignment');\r\n //}\r\n\r\n $state.go('control_screen');\r\n },\r\n function (error) {\r\n $scope.loggingIn = false;\r\n\r\n if (error.status === 401) {\r\n if (error.headers('FailureReason') && error.headers('FailureReason').length !== 0) {\r\n if (error.headers('FailureCode') && error.headers('FailureCode').length !== 0) {\r\n switch (parseInt(error.headers('FailureCode'), 10)) {\r\n case 614:\r\n $scope.showAuthenticationCode = true;\r\n break;\r\n case 615:\r\n $scope.showAuthenticationCode = true;\r\n $scope.errorMessage = error.headers('FailureReason');\r\n break;\r\n case 616:\r\n $scope.showAuthenticationCode = true;\r\n $scope.errorMessage = error.headers('FailureReason');\r\n break;\r\n default:\r\n $scope.errorMessage = error.headers('FailureReason');\r\n break;\r\n\t\t\t\t\t\t\t\t}\r\n }\r\n else {\r\n $scope.errorMessage = error.headers('FailureReason');\r\n }\r\n }\r\n else {\r\n $scope.errorMessage = 'Incorrect Email Address or Password. Please try again.';\r\n }\r\n }\r\n else if (error.status === 404) {\r\n $scope.errorMessage = 'Unable to log in. Please try again.';\r\n }\r\n else if (error.status === 423) {\r\n $scope.errorMessage = 'Unfortunately, due to too many incorrect access attempts, your account has been locked.';\r\n }\r\n else {\r\n console.log(error);\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.submitAuthenticationCode = function () {\r\n\r\n\t}\r\n}]);","menu.controller('MenuController', ['$scope', '$state', 'FoundationApi', 'UserFactory', 'AtlasUserFactory', function ($scope, $state, FoundationApi, UserFactory, AtlasUserFactory) {\r\n $scope.tabs = [\r\n { 'name': 'Control Screen', 'url': 'control_screen' }\r\n ];\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n $scope.menuVisible = false;\r\n\r\n $scope.toggleMenu = function (){\r\n if (!$scope.user) {\r\n $scope.menuVisible = false;\r\n }\r\n else {\r\n $scope.menuVisible = !$scope.menuVisible;\r\n }\r\n }\r\n\r\n $scope.goTo = function (state, params) {\r\n $scope.menuVisible = false;\r\n\r\n $state.go(state, params);\r\n };\r\n\r\n $scope.$on('user:loggedIn', function (event, data) {\r\n $scope.user = data;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n });\r\n\r\n $scope.$on('user:loggedOut', function (event, data) {\r\n $scope.user = null;\r\n\r\n $state.go('login');\r\n });\r\n\r\n $scope.logout = function () {\r\n $scope.menuVisible = false;\r\n\r\n UserFactory.logout();\r\n }\r\n}]);","control_screen.controller('ControlScreenController', ['$scope', '$state', 'UserFactory', function ($scope, $state, UserFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.user = UserFactory.currentActiveUser;\r\n\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $scope.tabs = [\r\n {\r\n 'name': 'Manifests',\r\n 'title': 'Manifests'\r\n },\r\n {\r\n 'name': 'Consignments',\r\n 'title': 'Consignments'\r\n }\r\n ];\r\n $scope.tabs.activeTab = 'Manifests';\r\n }\r\n else {\r\n $scope.tabs = [\r\n {\r\n 'name': 'Consignments',\r\n 'title': 'Consignments'\r\n }\r\n ];\r\n $scope.tabs.activeTab = 'Consignments';\r\n }\r\n \r\n}]);","control_screen.controller('ControlScreenConsignmentController', ['$rootScope', '$scope', '$http', '$state', '$localStorage', 'FileSaver', 'CustomerFactory', 'ConsignmentFactory', 'ManifestFactory', 'SettingsFactory', 'CommonFactory', 'UserFactory', 'AtlasModalFactory', function ($rootScope, $scope, $http, $state, $localStorage, FileSaver, CustomerFactory, ConsignmentFactory, ManifestFactory, SettingsFactory, CommonFactory, UserFactory, AtlasModalFactory) {\r\n\r\n $rootScope.$emit('title-updated', 'Consignments Screen');\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.consignments = null;\r\n $scope.sortBy = 'StartDateAndTime';\r\n $scope.sortReverse = false;\r\n $scope.showFilters = ($scope.user.Role === $scope.roles.Customer) ? true : false;\r\n //$scope.searchStartDate = moment('2015-08-01');\r\n //$scope.searchEndDate = moment().add(1, 'M');\r\n $scope.search = {\r\n StartDate: moment(),\r\n EndDate: moment(),\r\n DateRange: 'Today',\r\n VehicleType: null,\r\n ConsignmentNumber: '',\r\n ManifestNumber: '',\r\n CollectionAddress: '',\r\n DeliveryAddress: '',\r\n BookingContact: '',\r\n SupplierName: '',\r\n IsFrequent: false,\r\n HaveNoManifest: false,\r\n IsDeleted: false\r\n };\r\n //$scope.searchStartDate = moment();\r\n //$scope.searchEndDate = moment().add(1, 'd');\r\n //$scope.searchDateRange = 'Today';\r\n ////$scope.searchCustomerName = '';\r\n //$scope.searchVehicleType = null;\r\n ////$scope.searchPONumber = '';\r\n ////$scope.searchConsignmentNumber = '';\r\n ////$scope.searchManifestNumber = '';\r\n //$scope.searchCollectionAddress = '';\r\n //$scope.searchDeliveryAddress = '';\r\n //$scope.searchIsQuote = false;\r\n //$scope.searchIsFrequent = false;\r\n //$scope.searchIsDeleted = false;\r\n $scope.vehicleTypes = null;\r\n $scope.consignment = null;\r\n $scope.manifest = null;\r\n $scope.columns = [\r\n { 'index': 1, 'name': 'Consignment Number' },\r\n { 'index': 2, 'name': 'Manifest Number(s)' },\r\n { 'index': 3, 'name': 'Type' },\r\n { 'index': 4, 'name': 'Customer' },\r\n { 'index': 5, 'name': 'PO Number' },\r\n { 'index': 6, 'name': 'Booked Date' },\r\n { 'index': 7, 'name': 'Start Date' },\r\n { 'index': 8, 'name': 'Start Address' },\r\n { 'index': 9, 'name': 'Finish Date' },\r\n { 'index': 10, 'name': 'Last Address' },\r\n { 'index': 11, 'name': 'Number Of Addresses' },\r\n { 'index': 12, 'name': 'Vehicle' },\r\n { 'index': 13, 'name': 'Load Details' },\r\n { 'index': 14, 'name': 'Supplier' },\r\n { 'index': 15, 'name': 'Office Notes' },\r\n { 'index': 16, 'name': 'Supplier Notes' },\r\n { 'index': 17, 'name': 'Invoice Notes' },\r\n { 'index': 18, 'name': 'Price' },\r\n { 'index': 19, 'name': 'Cost' },\r\n { 'index': 20, 'name': 'Miles' },\r\n ];\r\n\r\n $scope.selectedColumns = ($localStorage.SelectedConsignmentColumns) ? $localStorage.SelectedConsignmentColumns : [\r\n { 'index': 1, 'name': 'Consignment Number' },\r\n { 'index': 2, 'name': 'Manifest Number(s)' },\r\n { 'index': 3, 'name': 'Type' },\r\n { 'index': 4, 'name': 'Customer' },\r\n { 'index': 5, 'name': 'PO Number' },\r\n { 'index': 6, 'name': 'Booked Date' },\r\n { 'index': 7, 'name': 'Start Date' },\r\n { 'index': 8, 'name': 'Start Address' },\r\n { 'index': 9, 'name': 'Finish Date' },\r\n { 'index': 10, 'name': 'Last Address' },\r\n { 'index': 11, 'name': 'Number Of Addresses' },\r\n { 'index': 12, 'name': 'Vehicle' },\r\n { 'index': 13, 'name': 'Load Details' },\r\n { 'index': 14, 'name': 'Supplier' },\r\n { 'index': 15, 'name': 'Office Notes' },\r\n { 'index': 16, 'name': 'Supplier Notes' },\r\n { 'index': 17, 'name': 'Invoice Notes' },\r\n { 'index': 18, 'name': 'Price' },\r\n { 'index': 19, 'name': 'Cost' },\r\n { 'index': 20, 'name': 'Miles' },\r\n ];\r\n $scope.consignments = [];\r\n $scope.allCustomerConsignmentControlScreenColumns = AtlasCourierExpress.Enums.CustomerConsignmentControlScreenColumns;\r\n $scope.controlScreenConsignmentColumns = [];\r\n $scope.exporting = false;\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n }\r\n );\r\n\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.Customer) {\r\n CustomerFactory.getCustomer($scope.user.CustomerId)\r\n .then(\r\n function (customer) {\r\n $scope.user.Customer = customer;\r\n $scope.controlScreenConsignmentColumns = (customer.ConsignmentControlScreenColumns.length > 0 ) ? customer.ConsignmentControlScreenColumns : ((customer.Parent != null) ? customer.Parent.ConsignmentControlScreenColumns : null);\r\n\r\n if (!$scope.controlScreenConsignmentColumns || $scope.controlScreenConsignmentColumns.length === 0) {\r\n CommonFactory.getControlScreenConsignmentColumns()\r\n .then(\r\n function (response) {\r\n $scope.controlScreenConsignmentColumns = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.customerColumnIsInSelected = function (column) {\r\n if ($scope.controlScreenConsignmentColumns && $scope.controlScreenConsignmentColumns.length > 0) {\r\n for (var i = 0; i < $scope.controlScreenConsignmentColumns.length; i++) {\r\n if ($scope.controlScreenConsignmentColumns[i].ConsignmentControlScreenColumn.Id === column && $scope.controlScreenConsignmentColumns[i].IsVisible) return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n $scope.columnIsInSelected = function (index) {\r\n var isIn = false;\r\n\r\n angular.forEach($scope.selectedColumns, function (value, key) {\r\n if (value.index === index) {\r\n isIn = true;\r\n return false;\r\n }\r\n });\r\n\r\n return isIn;\r\n }\r\n\r\n $scope.selectedColumnsChanged = function () {\r\n $localStorage.SelectedConsignmentColumns = $scope.selectedColumns;\r\n debugger;\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchConsignments();\r\n }\r\n\r\n $scope.searchConsignments = function () {\r\n $scope.consignments = null;\r\n\r\n ConsignmentFactory.searchConsignments($scope.search.StartDate, $scope.search.EndDate, $scope.search.CustomerName, $scope.search.VehicleType, $scope.search.PONumber, $scope.search.ConsignmentNumber, $scope.search.ManifestNumber, $scope.search.CollectionAddress, $scope.search.DeliveryAddress, $scope.search.BookingContact, $scope.search.SupplierName, $scope.search.IsFrequent, $scope.search.HaveNoManifest, $scope.search.IsQuote, $scope.search.IsDeleted)\r\n .then(\r\n function () {\r\n $scope.consignments = ConsignmentFactory.consignments;\r\n },\r\n function(){\r\n $scope.consignments = [];\r\n }\r\n );\r\n }\r\n\r\n $scope.exportConsignments = function () {\r\n $scope.exporting = true;\r\n\r\n ConsignmentFactory.exportConsignments($scope.search.StartDate, $scope.search.EndDate, $scope.search.CustomerName, $scope.search.VehicleType, $scope.search.PONumber, $scope.search.ConsignmentNumber, $scope.search.ManifestNumber, $scope.search.CollectionAddress, $scope.search.DeliveryAddress, $scope.search.SupplierName, $scope.search.IsFrequent, $scope.search.HaveNoManifest, $scope.search.IsQuote, $scope.search.IsDeleted)\r\n .then(\r\n function (response) {\r\n var filename = 'Consignments Export - ' + moment().format('DD MMMM YYYY') + '.csv';\r\n $scope.exporting = false;\r\n\r\n if (response.headers('Filename')) {\r\n filename = response.headers('Filename');\r\n }\r\n else if (response.headers('Content-Disposition')) {\r\n var contentDisposition = response.headers('Content-Disposition').split(';');\r\n for (var i = 0; i < contentDisposition.length; i++) {\r\n if (contentDisposition[i].indexOf('filename') >= 0) {\r\n var parts = contentDisposition[i].split('=');\r\n filename = parts[1].replace('\"', '');\r\n }\r\n }\r\n }\r\n\r\n var file = new Blob([response.data], { type: 'text/csv; charset=utf-8' });\r\n\r\n FileSaver.saveAs(file, filename);\r\n },\r\n function () {\r\n $scope.exporting = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.getConsignmentManifestNumbers = function (consignment) {\r\n var manifestNumbers = null;\r\n\r\n for (var a = 0; a < consignment.ConsignmentAddresses.length; a++) {\r\n if (!manifestNumbers) {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n manifestNumbers = consignment.ConsignmentAddresses[a].Manifest.ManifestNumber.toString();\r\n }\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (manifestNumbers.indexOf(consignment.ConsignmentAddresses[a].Manifest.ManifestNumber) < 0) {\r\n manifestNumbers += ', ' + consignment.ConsignmentAddresses[a].Manifest.ManifestNumber;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return manifestNumbers;\r\n }\r\n\r\n $scope.getSuppliers = function (consignment) {\r\n var suppliers = null;\r\n\r\n for (var a = 0; a < consignment.ConsignmentAddresses.length; a++) {\r\n if (!suppliers) {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (consignment.ConsignmentAddresses[a].Manifest.Supplier) {\r\n suppliers = consignment.ConsignmentAddresses[a].Manifest.Supplier.Name;\r\n }\r\n }\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (consignment.ConsignmentAddresses[a].Manifest.Supplier) {\r\n if (suppliers.indexOf(consignment.ConsignmentAddresses[a].Manifest.Supplier.Name) < 0) {\r\n suppliers += ', ' + consignment.ConsignmentAddresses[a].Manifest.Supplier.Name;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return suppliers;\r\n }\r\n\r\n $scope.showConsignmentDetails = function (consignment) {\r\n $scope.consignment = consignment;\r\n\r\n AtlasModalFactory.open('consignmentModal');\r\n }\r\n $scope.closeConsignmentModal = function () {\r\n AtlasModalFactory.close('consignmentModal');\r\n\t}\r\n\r\n $scope.getManifest = function (manifestId) {\r\n ManifestFactory.getManifest(manifestId)\r\n .then(\r\n function () {\r\n $scope.manifest = ManifestFactory.manifest;\r\n }\r\n );\r\n }\r\n\r\n $scope.getManifestConsignmentNumbers = function () {\r\n return ManifestFactory.getConsignmentNumbers();\r\n }\r\n\r\n $scope.clearManifest = function () {\r\n $scope.manifest = null;\r\n }\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.search.DateRange) {\r\n case 'TODAY':\r\n $scope.search.StartDate = moment();\r\n $scope.search.EndDate = moment();\r\n break;\r\n case 'TOMORROW':\r\n $scope.search.StartDate = moment().add(1, 'd');\r\n $scope.search.EndDate = moment().add(1, 'd');\r\n break;\r\n case 'YESTERDAY':\r\n $scope.search.StartDate = moment().subtract(1, 'd');\r\n $scope.search.EndDate = moment().subtract(1, 'd');\r\n break;\r\n }\r\n \r\n }\r\n\r\n $scope.resetDateRange = function () {\r\n $scope.search.DateRange = '';\r\n }\r\n\r\n $scope.copyConsignment = function(consignment){\r\n ConsignmentFactory.copyConsignmentId = consignment.Id;\r\n\r\n $state.go(\"consignment\");\r\n }\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName != null && address.CompanyName != '') {\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 != null && address.AddressLine1 != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town != null && address.Town != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode != null && address.Postcode != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.selectIsFrequentConsignment = function () {\r\n if ($scope.search.IsFrequent) {\r\n $scope.search.HaveNoManifest = false;\r\n $scope.search.IsQuote = false;\r\n }\r\n }\r\n\r\n $scope.selectHaveNoManifest = function () {\r\n if ($scope.search.HaveNoManifest) {\r\n $scope.search.IsFrequent = false;\r\n $scope.search.IsQuote = false;\r\n }\r\n }\r\n\r\n $scope.getBackgroundColour = function (consignment) {\r\n var allAddressesCompleted = true;\r\n\r\n for (var i = 0; i < consignment.ConsignmentAddresses.length; i++) {\r\n if (!consignment.ConsignmentAddresses[i].IsCompleted) {\r\n allAddressesCompleted = false;\r\n break;\r\n }\r\n }\r\n\r\n if (allAddressesCompleted) {\r\n return '#2c6fba';\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[0].IsCompleted) {\r\n return '#9de89d';\r\n\t\t\t}\r\n\t\t}\r\n }\r\n\r\n $scope.getCustomerName = function (consignment) {\r\n var customerName = '';\r\n\r\n if (consignment.CustomerBranch) {\r\n customerName = consignment.CustomerBranch.Name;\r\n\r\n if (consignment.CustomerBranch.SLA && consignment.CustomerBranch.SLA.length > 0) customerName += ' [' + consignment.CustomerBranch.SLA + ']';\r\n }\r\n else {\r\n customerName = consignment.Customer.Name;\r\n\r\n if (consignment.Customer.SLA && consignment.Customer.SLA.length > 0) customerName += ' [' + consignment.Customer.SLA + ']';\r\n }\r\n\r\n return customerName;\r\n }\r\n\r\n if ($scope.user.Role === $scope.roles.Customer) {\r\n $scope.searchConsignments();\r\n }\r\n}]);","control_screen.controller('ControlScreenManifestController', ['$rootScope', '$scope', '$http', '$state', '$timeout', '$interval', '$localStorage', 'FileSaver', 'FoundationApi', 'UserFactory', 'ConsignmentFactory', 'ManifestFactory', 'SettingsFactory', 'SupplierFactory', 'CommonFactory', 'AtlasModalFactory', function ($rootScope, $scope, $http, $state, $timeout, $interval, $localStorage, FileSaver, FoundationApi, UserFactory, ConsignmentFactory, ManifestFactory, SettingsFactory, SupplierFactory, CommonFactory, AtlasModalFactory) {\r\n\r\n $rootScope.$emit('title-updated', 'Manifests Screen');\r\n $scope.manifests = null;\r\n $scope.errorMessage = null;\r\n $scope.timer = null;\r\n $scope.sortBy = 'StartDeliveryDate';\r\n $scope.sortReverse = false;\r\n //$scope.searchStartDate = moment('2015-08-01');\r\n //$scope.searchEndDate = moment().add(1, 'M');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.searchDateRange = 'Today';\r\n $scope.searchCustomerName = '';\r\n $scope.searchVehicleType = null;\r\n $scope.searchPONumber = '';\r\n $scope.searchConsignmentNumber = '';\r\n $scope.searchManifestNumber = '';\r\n $scope.searchCollectionAddress = '';\r\n $scope.searchDeliveryAddress = '';\r\n $scope.searchSupplierName = '';\r\n $scope.searchStatusColour = null;\r\n $scope.searchNonSpec = false;\r\n $scope.searchBackload = false;\r\n $scope.searchExcludeBackload = false;\r\n $scope.searchNotAcknowledged = false;\r\n $scope.searchIsDeleted = false;\r\n $scope.vehicleTypes = null;\r\n $scope.statusColours = null;\r\n $scope.consignment = null;\r\n $scope.selectedSupplier = null;\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.suppliers = null;\r\n $scope.availableSuppliers = null;\r\n $scope.assigningSupplier = false;\r\n $scope.columns = [\r\n { 'index': 1, 'name': 'Manifest Number' },\r\n { 'index': 2, 'name': 'Consignment Number(s)' },\r\n //{ 'index': 3, 'name': 'First Consignment Booked' },\r\n { 'index': 3, 'name': 'Manifest Created' },\r\n { 'index': 4, 'name': 'Customer(s)' },\r\n { 'index': 5, 'name': 'Start Date' },\r\n { 'index': 6, 'name': 'Start Address' },\r\n { 'index': 7, 'name': 'Finish Date' },\r\n { 'index': 8, 'name': 'Last Address' },\r\n { 'index': 9, 'name': 'Number Of Addresses' },\r\n //{ 'index': 10, 'name': 'Consignment Types' },\r\n { 'index': 11, 'name': 'Vehicle' },\r\n { 'index': 12, 'name': 'Load Details' },\r\n { 'index': 13, 'name': 'Supplier' },\r\n { 'index': 14, 'name': 'Send' },\r\n { 'index': 15, 'name': 'Office Notes' },\r\n { 'index': 16, 'name': 'Supplier Notes' },\r\n //{ 'index': 17, 'name': 'Invoice Notes' },\r\n { 'index': 18, 'name': 'Cost' },\r\n { 'index': 19, 'name': 'Price(s)' }\r\n ];\r\n $scope.exporting = false;\r\n\r\n $scope.selectedColumns = ($localStorage.SelectedManifestColumns && $localStorage.SelectedManifestColumns.length === $scope.columns.length) ? $localStorage.SelectedManifestColumns : [\r\n { 'index': 1, 'name': 'Manifest Number' },\r\n { 'index': 2, 'name': 'Consignment Number(s)' },\r\n //{ 'index': 3, 'name': 'First Consignment Booked' },\r\n { 'index': 3, 'name': 'Manifest Created' },\r\n { 'index': 4, 'name': 'Customer(s)' },\r\n { 'index': 5, 'name': 'Start Date' },\r\n { 'index': 6, 'name': 'Start Address' },\r\n { 'index': 7, 'name': 'Finish Date' },\r\n { 'index': 8, 'name': 'Last Address' },\r\n { 'index': 9, 'name': 'Number Of Addresses' },\r\n //{ 'index': 10, 'name': 'Consignment Types' },\r\n { 'index': 11, 'name': 'Vehicle' },\r\n { 'index': 12, 'name': 'Load Details' },\r\n { 'index': 13, 'name': 'Supplier' },\r\n { 'index': 14, 'name': 'Send' },\r\n { 'index': 15, 'name': 'Office Notes' },\r\n { 'index': 16, 'name': 'Supplier Notes' },\r\n //{ 'index': 17, 'name': 'Invoice Notes' },\r\n { 'index': 18, 'name': 'Cost' },\r\n { 'index': 19, 'name': 'Price(s)' }\r\n ];\r\n $scope.canSendToTransportExchange = false;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n $scope.transportExchangeManifestOptions = {\r\n tailLift: false,\r\n timed: false,\r\n notes: null\r\n }\r\n $scope.transportExchangeDefaultSupplier = AtlasCourierExpress.Enums.TransportExchangeDefaultSupplier;\r\n\r\n SupplierFactory.getSuppliers()\r\n .then(\r\n function () {\r\n $scope.suppliers = SupplierFactory.suppliers;\r\n $scope.availableSuppliers = $scope.suppliers;\r\n }\r\n );\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n }\r\n );\r\n\r\n //CommonFactory.getStatusColours()\r\n // .then(\r\n // function (response) {\r\n // $scope.statusColours = response;\r\n\r\n // for (var c = 0; c < $scope.statusColours.length; c++) {\r\n // $scope.statusColours[c].HtmlLabel = '' + $scope.statusColours[c].Name + '';\r\n // }\r\n // },\r\n // function (response, status) {\r\n // debugger;\r\n // }\r\n // );\r\n\r\n $scope.columnIsInSelected = function (index) {\r\n var isIn = false;\r\n\r\n angular.forEach($scope.selectedColumns, function (value, key) {\r\n if (value.index === index) {\r\n isIn = true;\r\n return false;\r\n }\r\n });\r\n\r\n return isIn;\r\n }\r\n\r\n $scope.selectedColumnsChanged = function () {\r\n $localStorage.SelectedManifestColumns = $scope.selectedColumns;\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.keypress = function ($event) {\r\n if ($event.keyCode === 13) $scope.searchManifests();\r\n }\r\n\r\n $scope.searchManifests = function () {\r\n $scope.manifests = null;\r\n var startSearch = moment();\r\n\r\n console.log(\"Starting searching for manifests: \" + startSearch.format(\"DD/MM/YYYY HH:mm:ss.SSS\"));\r\n\r\n ManifestFactory.searchManifests($scope.searchStartDate, $scope.searchEndDate, $scope.searchVehicleType, $scope.searchCustomerName, $scope.searchPONumber, $scope.searchConsignmentNumber, $scope.searchManifestNumber, $scope.searchCollectionAddress, $scope.searchDeliveryAddress, $scope.searchSupplierName, $scope.searchNonSpec, $scope.searchNotAcknowledged, $scope.searchBackload, $scope.searchExcludeBackload, $scope.searchIsDeleted)\r\n .then(\r\n function () {\r\n $scope.manifests = ManifestFactory.manifests;\r\n var endSearch = moment();\r\n\r\n console.log(\"Manifests received: \" + endSearch.format(\"DD/MM/YYYY HH:mm:ss.SSS\") + \", time taken: \" + endSearch.diff(startSearch, 'seconds', true) + \" seconds\");\r\n\r\n //$timeout.cancel($scope.timer);\r\n\r\n //$scope.timer = $timeout(function () {\r\n // $scope.searchManifests();\r\n //}, __SEARCH_REFRESH_TIME);\r\n }\r\n );\r\n }\r\n\r\n $scope.exportManifests = function () {\r\n $scope.exporting = true;\r\n\r\n ManifestFactory.exportManifests($scope.searchStartDate, $scope.searchEndDate, $scope.searchVehicleType, $scope.searchCustomerName, $scope.searchPONumber, $scope.searchConsignmentNumber, $scope.searchManifestNumber, $scope.searchCollectionAddress, $scope.searchDeliveryAddress, $scope.searchSupplierName, $scope.searchNonSpec, $scope.searchNotAcknowledged, $scope.searchBackload, $scope.searchExcludeBackload, $scope.searchIsDeleted)\r\n .then(\r\n function (response) {\r\n var filename = 'Manifests Export - ' + moment().format('DD MMMM YYYY') + '.csv';\r\n $scope.exporting = false;\r\n\r\n if (response.headers('Filename')) {\r\n filename = response.headers('Filename');\r\n }\r\n else if (response.headers('Content-Disposition')) {\r\n var contentDisposition = response.headers('Content-Disposition').split(';');\r\n for (var i = 0; i < contentDisposition.length; i++) {\r\n if (contentDisposition[i].indexOf('filename') >= 0) {\r\n var parts = contentDisposition[i].split('=');\r\n filename = parts[1].replace('\"', '');\r\n }\r\n }\r\n }\r\n\r\n var file = new Blob([response.data], { type: 'text/csv; charset=utf-8' });\r\n\r\n FileSaver.saveAs(file, filename);\r\n },\r\n function () {\r\n $scope.exporting = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.showManifestDetails = function (manifest) {\r\n $scope.manifest = manifest;\r\n\r\n AtlasModalFactory.open('manifestModal');\r\n }\r\n\r\n $scope.closeManifestModal = function () {\r\n AtlasModalFactory.close('manifestModal');\r\n\t}\r\n\r\n $scope.getManifest = function (manifestId) {\r\n ManifestFactory.getManifest(manifestId)\r\n .then(\r\n function () {\r\n $scope.manifest = ManifestFactory.manifest;\r\n }\r\n );\r\n }\r\n\r\n $scope.getManifestConsignments = function (manifest) {\r\n var consignments = [];\r\n\r\n if (manifest) {\r\n var alreadyExists = false;\r\n\r\n for (var i = 0; i < manifest.ConsignmentAddresses.length; i++) {\r\n alreadyExists = false;\r\n\r\n if (consignments.length === 0) {\r\n consignments.push(manifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n else {\r\n for (var j = 0; j < consignments.length; j++) {\r\n if (consignments[j].ConsignmentNumber === manifest.ConsignmentAddresses[i].Consignment.ConsignmentNumber) {\r\n alreadyExists = true;\r\n }\r\n }\r\n\r\n if (!alreadyExists) {\r\n consignments.push(manifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return consignments;\r\n }\r\n\r\n $scope.getCustomers = function (manifest) {\r\n var customers = null;\r\n\r\n for (var a = 0; a < manifest.ConsignmentAddresses.length; a++) {\r\n if (!customers) {\r\n customers = manifest.ConsignmentAddresses[a].Consignment.Customer.Name;\r\n }\r\n else {\r\n if (customers.indexOf(manifest.ConsignmentAddresses[a].Consignment.Customer.Name) < 0) {\r\n customers += ', ' + manifest.ConsignmentAddresses[a].Consignment.Customer.Name;\r\n }\r\n }\r\n }\r\n\r\n return customers;\r\n }\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'TOMORROW':\r\n $scope.searchStartDate = moment().add(1, 'd');\r\n $scope.searchEndDate = moment().add(1, 'd');\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n }\r\n }\r\n\r\n $scope.resetDateRange = function () {\r\n $scope.searchDateRange = '';\r\n }\r\n\r\n $scope.setNonSpec = function () {\r\n if ($scope.searchNonSpec) {\r\n $scope.searchSupplierName = '';\r\n }\r\n }\r\n\r\n $scope.setBackload = function () {\r\n if ($scope.searchBackload) $scope.searchExcludeBackload = false;\r\n }\r\n\r\n $scope.setExcludeBackload = function () {\r\n if ($scope.searchExcludeBackload) $scope.searchBackload = false;\r\n }\r\n\r\n $scope.selectManifest = function (index, m) {\r\n $scope.selectedManifestIndex = index;\r\n $scope.selectedManifest = m;\r\n $scope.availableSuppliers = ManifestFactory.getAvailableSuppliers($scope.selectedManifest, $scope.suppliers);\r\n $scope.canSendToTEG = false;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n //if ($scope.selectedManifest.Supplier) {\r\n // $scope.selectedSupplier = $scope.selectedManifest.Supplier;\r\n //}\r\n\r\n if ($scope.selectedManifest.VehicleType.TransportExchangeVehicleMappings && $scope.selectedManifest.VehicleType.TransportExchangeVehicleMappings.length > 0) {\r\n $scope.canSendToTransportExchange = true;\r\n }\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n }\r\n\r\n $scope.closeAssignSupplier = function () {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n\t}\r\n\r\n $scope.selectSupplier = function (s) {\r\n if ($scope.selectedManifest.Supplier && $scope.selectedManifest.Supplier.Id !== s.Id) {\r\n if (ManifestFactory.manifest) ManifestFactory.manifest.IsSent = false;\r\n $scope.selectedManifest.IsSent = false;\r\n }\r\n\r\n if ($scope.selectedSupplier && $scope.selectedSupplier.Id === s.Id) {\r\n $scope.selectedSupplier = null;\r\n $scope.canSendToTransportExchange = true;\r\n }\r\n else {\r\n $scope.selectedSupplier = s;\r\n $scope.canSendToTransportExchange = false;\r\n }\r\n }\r\n\r\n $scope.assignSupplier = function () {\r\n //if (!$scope.selectedSupplier) {\r\n // $scope.errorMessage = 'No supplier selected';\r\n // return false;\r\n //}\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n\r\n ManifestFactory.getManifest($scope.selectedManifest.Id)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.manifest.Supplier = $scope.selectedSupplier;\r\n ManifestFactory.manifest.IsSent = false;\r\n delete ManifestFactory.manifest.TransportExchangeManifests;\r\n\r\n ManifestFactory.saveManifest()\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.selectedSupplier = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.confirmAssignSupplier = function () {\r\n if ($scope.selectedManifest.Supplier && $scope.selectedManifest.Supplier.Id === $scope.transportExchangeDefaultSupplier.Id) {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n AtlasModalFactory.open('divConfirmAssignSupplier');\r\n return false;\r\n }\r\n else {\r\n $scope.assignSupplier();\r\n }\r\n }\r\n\r\n $scope.cancelAssignSupplier = function ($event) {\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n AtlasModalFactory.open('divAssignSupplier');\r\n if ($event) $event.stopPropagation();\r\n return false;\r\n }\r\n\r\n $scope.closeConfirmAssignSupplier = function () {\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n return false;\r\n }\r\n\r\n $scope.showSendingToTransportExchangeOptions = function () {\r\n $scope.sendingToTransportExchangeOptions = true;\r\n $scope.transportExchangeManifestOptions.timed = false;\r\n $scope.transportExchangeManifestOptions.notes = '';\r\n var manifestConsignments = [];\r\n var consignmentExists = false;\r\n\r\n for (var i = 0; i < $scope.selectedManifest.ConsignmentAddresses.length; i++) {\r\n if ($scope.selectedManifest.ConsignmentAddresses[i].ConsignmentAddressType.Name == 'Delivery' && $scope.selectedManifest.ConsignmentAddresses[i].Timed) {\r\n $scope.transportExchangeManifestOptions.timed = true;\r\n }\r\n\r\n if (manifestConsignments.length == 0) {\r\n manifestConsignments.push($scope.selectedManifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n else {\r\n consignmentExists = false;\r\n\r\n for (var m = 0; m < manifestConsignments.length; m++) {\r\n if ($scope.selectedManifest.ConsignmentAddresses[i].Consignment.Id == manifestConsignments[m].Id) {\r\n consignmentExists = true;\r\n }\r\n }\r\n\r\n if (!consignmentExists) manifestConsignments.push($scope.selectedManifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n }\r\n\r\n for (var m = 0; m < manifestConsignments.length; m++) {\r\n if ($scope.transportExchangeManifestOptions.notes.length > 0) $scope.notes += ' --- ';\r\n\r\n $scope.transportExchangeManifestOptions.notes += manifestConsignments[m].NotesForSupplier;\r\n }\r\n }\r\n\r\n $scope.hideSendingToTransportExchange = function () {\r\n $scope.sendingToTransportExchangeOptions = false;\r\n }\r\n\r\n $scope.sendManifestToTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.getManifest($scope.selectedManifest.Id)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.manifest.TransportExchangeManifests = [];\r\n ManifestFactory.manifest.TransportExchangeManifests.push($scope.transportExchangeManifestOptions);\r\n\r\n ManifestFactory.sendManifestToTransportExchange(ManifestFactory.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.selectedSupplier = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n \r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n \r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.removeFromTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.getManifest($scope.selectedManifest.Id)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.removeManifestFromTransportExchange(ManifestFactory.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.selectedSupplier = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.rebookWithTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.getManifest($scope.selectedManifest.Id)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.rebookManifestWithTransportExchange(ManifestFactory.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n $scope.selectedManifestIndex = null;\r\n $scope.selectedManifest = null;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.selectedSupplier = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.assigningSupplierErrorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.sendManifest = function (m) {\r\n $scope.closeManifestModal();\r\n AtlasModalFactory.open('divLoading');\r\n\r\n ManifestFactory.sendManifest(m)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(m.Id)\r\n .then(\r\n function () {\r\n for (var m = 0; m < $scope.manifests.length; m++) {\r\n if ($scope.manifests[m].Id === ManifestFactory.manifest.Id) {\r\n $scope.manifests[m] = ManifestFactory.manifest;\r\n }\r\n }\r\n\r\n AtlasModalFactory.close('divLoading');\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.openLoadingModal = function () {\r\n AtlasModalFactory.open('divLoading');\r\n }\r\n\r\n $scope.closeLoadingModal = function () {\r\n AtlasModalFactory.close('divLoading');\r\n\t}\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName != null && address.CompanyName != '') {\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 != null && address.AddressLine1 != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town != null && address.Town != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode != null && address.Postcode != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.getLoadDetails = function (consignmentAddress) {\r\n var loadDetails = '';\r\n\r\n for (var i = 0; i < consignmentAddress.LoadDetails.length; i++) {\r\n if (loadDetails && loadDetails.length > 0) loadDetails += '; ';\r\n\r\n loadDetails += consignmentAddress.LoadDetails[i].Quantity + ' ' + consignmentAddress.LoadDetails[i].Description;\r\n }\r\n\r\n return loadDetails;\r\n }\r\n\r\n $scope.getAdditionalCharges = function (consignmentAddress) {\r\n var additionalCharges = '';\r\n\r\n for (var i = 0; i < consignmentAddress.AdditionalCharges.length; i++) {\r\n if (additionalCharges && additionalCharges.length > 0) additionalCharges += '; ';\r\n\r\n additionalCharges += consignmentAddress.AdditionalCharges[i].AdditionalCharge.ChargeFor + ' (Cost: £' + consignmentAddress.AdditionalCharges[i].AdditionalCharge.Cost + ', Price: £' + consignmentAddress.AdditionalCharges[i].AdditionalCharge.Price + ')';\r\n }\r\n\r\n return additionalCharges;\r\n }\r\n\r\n $scope.searchManifests();\r\n}]);","/// \r\n\r\nmap.controller('MapController', ['$rootScope', '$scope', '$state', '$timeout', '$interval', 'UserFactory', 'SupplierFactory', 'SettingsFactory', function ($rootScope, $scope, $state, $timeout, $interval, UserFactory, SupplierFactory, SettingsFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Map');\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.supplierMap = new clickinon.google.maps.Map();\r\n $scope.mapsLoaded = false;\r\n $scope.selectedSupplier = null;\r\n $scope.vehicleType = null;\r\n $scope.showTraffic = false;\r\n $scope.supplierLocations = null;\r\n $scope.trackingDate = {};\r\n $scope.tracking = {};\r\n $scope.loadingHistoricalData = false;\r\n $scope.loadingHistoricalDataMessages = ['Loading Historical Data...', 'Still Loading Historical Data...', 'Sorry, this is taking a bit of time...'];\r\n $scope.loadingHistoricalDataText = '';\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n if (!$scope.supplierMap.getMap()) $scope.supplierMap.initialize('divSupplierMap', \r\n { \r\n 'allowDuplicatesAddress': true, \r\n 'callback': function () {\r\n $timeout(function () {\r\n //$scope.supplierMap.setCenter(51.5072, 0.1275);\r\n $scope.mapsLoaded = true;\r\n });\r\n } \r\n });\r\n\r\n $timeout(function () {\r\n $scope.supplierMap.triggerResize();\r\n }, 1000);\r\n\r\n $scope.searchSupplier = function (searchText) {\r\n return SupplierFactory.searchSupplierByName(searchText);\r\n }\r\n\r\n $scope.supplierSelected = function (supplier) {\r\n $scope.tracking.selectedSupplier = supplier;\r\n $scope.tracking.vehicleType = null;\r\n $scope.loadingSupplierLocations = true;\r\n\r\n $scope.supplierMap.clearMarkers();\r\n\r\n SupplierFactory.getLastSupplierLocation(supplier.Id)\r\n .then(\r\n function (supplierLocation) {\r\n addSupplierLocationToMap(supplierLocation, clickinon.google.maps.enums.markerType);\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.clearSelectedSupplier = function(){\r\n $scope.tracking.selectedSupplier = null;\r\n $scope.loadingSupplierLocations = true;\r\n\r\n $scope.supplierMap.clearMarkers();\r\n getAllSupplierLastLocations();\r\n }\r\n\r\n $scope.vehicleTypeSelected = function () {\r\n $scope.tracking.selectedSupplier = null;\r\n $scope.supplierMap.clearMarkers();\r\n $scope.loadingSupplierLocations = true;\r\n\r\n if ($scope.tracking.vehicleType) {\r\n SupplierFactory.getLastSupplierLocationByVehicleType($scope.tracking.vehicleType.Id)\r\n .then(\r\n function (supplierLocations) {\r\n $scope.supplierLocations = supplierLocations;\r\n\r\n for (var i = 0; i < supplierLocations.length; i++) {\r\n addSupplierLocationToMap(supplierLocations[i]);\r\n }\r\n\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n else {\r\n getAllSupplierLastLocations();\r\n }\r\n }\r\n\r\n $scope.zoomTo = function ($event) {\r\n if ($event.keyCode === 13) {\r\n if ($scope.zoomToPlace && $scope.zoomToPlace.length > 0) {\r\n $scope.supplierMap.zoomTo($scope.zoomToPlace + ',UK');\r\n }\r\n else {\r\n $scope.supplierMap.zoomTo();\r\n }\r\n }\r\n }\r\n\r\n $scope.toggleTraffic = function () {\r\n if ($scope.showTraffic) {\r\n $scope.supplierMap.removeTraffic();\r\n $scope.showTraffic = false;\r\n }\r\n else {\r\n $scope.supplierMap.showTraffic();\r\n $scope.showTraffic = true;\r\n }\r\n }\r\n\r\n $scope.viewHistoricalData = function () {\r\n if (!$scope.trackingDate.date || !$scope.trackingDate.startTime || !$scope.trackingDate.endTime) return;\r\n\r\n var counter = 0;\r\n\r\n $scope.loadingHistoricalData = true;\r\n $scope.loadingHistoricalDataText = $scope.loadingHistoricalDataMessages[counter];\r\n\r\n $scope.supplierMap.clearMarkers();\r\n \r\n var timer = $interval(function ()\r\n {\r\n if (counter === 2) counter = 0;\r\n\r\n counter++;\r\n\r\n $scope.loadingHistoricalDataText = $scope.loadingHistoricalDataMessages[counter];\r\n }, 30000);\r\n\r\n SupplierFactory.getSupplierLocations($scope.tracking.selectedSupplier.Id, moment($scope.trackingDate.date).hour(moment($scope.trackingDate.startTime).hour()).minute(moment($scope.trackingDate.startTime).minute()).second(0), moment($scope.trackingDate.date).hour(moment($scope.trackingDate.endTime).hour()).minute(moment($scope.trackingDate.endTime).minute()).second(0))\r\n .then(\r\n function (supplierLocations) {\r\n $scope.supplierLocations = supplierLocations;\r\n $scope.loadingHistoricalDataText = 'Placing Pin Locations...';\r\n $interval.cancel(timer);\r\n\r\n timer = $timeout(function () {\r\n for (var i = 0; i < supplierLocations.length; i++) {\r\n addSupplierLocationToMap(supplierLocations[i], clickinon.google.maps.enums.markerTypes.CIRCLE);\r\n }\r\n\r\n $scope.loadingHistoricalData = false;\r\n\r\n $timeout.cancel(timer);\r\n }, 500);\r\n },\r\n function (response, status) {\r\n $scope.loadingHistoricalData = false;\r\n\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.searchSupplierLocation = function () {\r\n $scope.supplierMap.clearMarkers();\r\n $scope.loadingSupplierLocations = true;\r\n\r\n if ($scope.consignmentNumberCustomerReferenceOrPONumber && $scope.consignmentNumberCustomerReferenceOrPONumber.length > 0) {\r\n SupplierFactory.getLastSupplierLocationByConsignmentNumberCustomerReferenceOrPONumber($scope.consignmentNumberCustomerReferenceOrPONumber)\r\n .then(\r\n function (supplierLocation) {\r\n addSupplierLocationToMap(supplierLocation);\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n else if ($scope.manifestNumber && $scope.manifestNumber.length > 0){\r\n SupplierFactory.getLastSupplierLocationByManifestNumber($scope.manifestNumber)\r\n .then(\r\n function (supplierLocation) {\r\n $scope.loadingSupplierLocations = false;\r\n addSupplierLocationToMap(supplierLocation);\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.resetSearchSupplierLocation = function () {\r\n $scope.tracking.selectedSupplier = null;\r\n $scope.tracking.vehicleType = null;\r\n $scope.consignmentNumberCustomerReferenceOrPONumber = null;\r\n $scope.manifestNumber = null;\r\n $scope.loadingSupplierLocations = true;\r\n\r\n $scope.supplierMap.clearMarkers();\r\n getAllSupplierLastLocations();\r\n }\r\n\r\n function getAllSupplierLastLocations() {\r\n $scope.supplierMap.clearMarkers();\r\n\r\n SupplierFactory.getLastSupplierLocation()\r\n .then(\r\n function (supplierLocations) {\r\n $scope.supplierLocations = supplierLocations;\r\n\r\n for (var i = 0; i < supplierLocations.length; i++) {\r\n addSupplierLocationToMap(supplierLocations[i]);\r\n }\r\n\r\n $scope.supplierMap.triggerResize();\r\n $scope.loadingSupplierLocations = false;\r\n },\r\n function (response, status) {\r\n $scope.loadingSupplierLocations = false;\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n function addSupplierLocationToMap(supplierLocation, markerType) {\r\n var infoContent;\r\n var defaultColour = '#2c6fba';\r\n\r\n if (!markerType) markerType = clickinon.google.maps.enums.markerTypes.PIN;\r\n\r\n infoContent = '
Driver: ' + supplierLocation.Supplier.Name + '
';\r\n\r\n if (supplierLocation.Manifest) {\r\n //infoContent += '
Vehicle: ' + supplierLocation.Supplier.Manifests[0].VehicleType.Name + '
'\r\n infoContent += '
Vehicle: ' + supplierLocation.Supplier.Vehicles[0].VehicleType.Name + '
';\r\n if($scope.user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) infoContent += '
Manifest Number: ' + supplierLocation.Manifest.ManifestNumber + '
';\r\n if (supplierLocation.Manifest.FormattedLastDeliveryAddress) infoContent += '
Last Address: ' + supplierLocation.Manifest.FormattedLastDeliveryAddress + '
';\r\n infoContent += '
Last Tracked: ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.supplierMap.addMarker(\r\n supplierLocation.Latitude,\r\n supplierLocation.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: supplierLocation.Manifest.StatusColour.HexCode,\r\n fontColour: (supplierLocation.Manifest.StatusColour.HexCode.indexOf('#595959') >= 0 || supplierLocation.Manifest.StatusColour.HexCode.indexOf('#2c6fba') >= 0) ? ':#ffffff' : '#000000',\r\n //text: (supplierLocation.Supplier.Manifests.length > 0) ? supplierLocation.Supplier.Manifests[0].VehicleType.IconCode : '',\r\n text: supplierLocation.Supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType\r\n }\r\n );\r\n }\r\n else {\r\n infoContent += '
Vehicle: ' + supplierLocation.Supplier.Vehicles[0].VehicleType.Name + '
';\r\n infoContent += '
Last Tracked: ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.supplierMap.addMarker(\r\n supplierLocation.Latitude,\r\n supplierLocation.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: defaultColour,\r\n fontColour: '#000000',\r\n text: supplierLocation.Supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType\r\n }\r\n );\r\n }\r\n }\r\n \r\n getAllSupplierLastLocations();\r\n}]);","consignments.controller('ConsignmentController', ['$rootScope', '$scope', '$stateParams', '$http', '$filter', '$timeout', '$state', '$sce', '$window', 'FoundationApi', 'PostcodeLookupFactory', 'UserFactory', 'ConsignmentFactory', 'ManifestFactory', 'SupplierFactory', 'CountryFactory', 'SettingsFactory', 'CommonFactory', 'CustomerFactory', 'AtlasUserFactory', 'AtlasModalFactory', function ($rootScope, $scope, $stateParams, $http, $filter, $timeout, $state, $sce, $window, FoundationApi, PostcodeLookupFactory, UserFactory, ConsignmentFactory, ManifestFactory, SupplierFactory, CountryFactory, SettingsFactory, CommonFactory, CustomerFactory, AtlasUserFactory, AtlasModalFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Consignment');\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.customerAccountTypesEnums = AtlasCourierExpress.Enums.CustomerAccountTypes;\r\n $scope.invoiceStatuses = AtlasCourierExpress.Enums.InvoiceStatus;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n $scope.stage = 'details';\r\n $scope.selectedCustomer = null;\r\n $scope.selectedCustomerOnStop = false;\r\n $scope.selectedCustomerIsProFormaAccountCustomer = false;\r\n $scope.selectedCustomerInactiveWarning = false;\r\n $scope.selectedCustomerInactiveWarningTimeframe = __INACTIVE_CUSTOMER_WARNING_MONTHS;\r\n $scope.selectedCustomerOverCreditLimitWarning = false;\r\n $scope.existingAddresses = null;\r\n $scope.consignmentTypes = null;\r\n $scope.consignmentFrequencies = null;\r\n $scope.vehicleTypes = null;\r\n $scope.consignmentAddressTypes = null;\r\n $scope.branch = null;\r\n $scope.contacts = null;\r\n $scope.contactEmails = null;\r\n $scope.contact = null;\r\n $scope.defaultAdditionalCharges = null;\r\n $scope.additionalCharges = null;\r\n $scope.consignmentAddress = null;\r\n $scope.consignmentAddressIndex = null;\r\n $scope.selectedExistingAddress = null;\r\n $scope.saveToCustomerRecord = false;\r\n $scope.countries = null;\r\n $scope.loadDetails = {};\r\n $scope.loadDetailsIndex = null;\r\n $scope.additionalCharge = null;\r\n $scope.additionalChargeIndex = null;\r\n $scope.selectedAdditionalCharges = [];\r\n $scope.additionalChargeChanges = [];\r\n $scope.savingQuote = false;\r\n $scope.savingConsignment = false;\r\n $scope.creatingManifest = false;\r\n $scope.consignment = ConsignmentFactory.createNewConsignment();\r\n $scope.existingConsignment = false;\r\n $scope.loadingConsignment = false;\r\n $scope.loadingManifest = false;\r\n $scope.manifest = null;\r\n $scope.suppliers = null;\r\n $scope.consignmentMap = new clickinon.google.maps.Map();\r\n $scope.mapsLoaded = false;\r\n $scope.ignorePORequired = false;\r\n $scope.report = null;\r\n $scope.allCollectionLoadDetails = null;\r\n $scope.dateToday = moment();\r\n $scope.customerNotes = '';\r\n $scope.deletingConsignment = false;\r\n $scope.isFrequentConsignment = false;\r\n $scope.consignmentFrequencySettings = {};\r\n $scope.showReportOptions = true;\r\n $scope.showReport = false;\r\n $scope.showEmailDetailsForReport = false;\r\n $scope.emailReport = {\r\n ShowPrice: true,\r\n ShowPhotos: true\r\n };\r\n $scope.reportEmailErrorMessage = null;\r\n $scope.consignmentAddressesView = 'Details';\r\n $scope.minimumFrequentConsignmentData = getMinimumFrequentConsignmentDate();\r\n $scope.weekdays = null;\r\n $scope.consignmentManifests = [];\r\n $scope.consignmentManifestOneToOneRelationship = false;\r\n $scope.manifestChangesRequired = false;\r\n $scope.consignmentHasManifests = false;\r\n $scope.consignmentDisabled = false;\r\n $scope.manifestSuppliers = [];\r\n $scope.requestingConsignmentCancellation = false;\r\n $scope.consignmentConfirmationOpen = false;\r\n $scope.consignmentToQuoteWarningCompleted = false;\r\n $scope.consignmentBackdatedWarningCompleted = false;\r\n $scope.updatingManifest = false;\r\n $scope.manifestUpdated = false;\r\n $scope.manifestInvoiced = false;\r\n $scope.costsChanged = false;\r\n $scope.areaAdditionalChargeRules = [];\r\n $scope.contactErrorMessage = null;\r\n $scope.settings = null;\r\n $scope.showInvoicingSection = false;\r\n $scope.priceMatrices = null;\r\n $scope.pcaControl = null;\r\n $scope.goodsPhotos = [];\r\n $scope.paperworkPhotos = [];\r\n $scope.hideAddressSearch = false;\r\n\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.Customer) {\r\n CustomerFactory.getCustomer($scope.user.CustomerId)\r\n .then(\r\n function (customer) {\r\n $scope.customerSelected(customer);\r\n\r\n if ($scope.selectedCustomer.Matrices == null || $scope.selectedCustomer.Matrices.length === 0) {\r\n CustomerFactory.getCustomerMatrix($scope.user.CustomerId)\r\n .then(\r\n function (matrices) {\r\n $scope.selectedCustomer.Matrices = matrices;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n if ($stateParams.id.length > 0 || ConsignmentFactory.copyConsignmentId) {\r\n $scope.loadingConsignment = true;\r\n var consignmentId = ($stateParams.id.length > 0) ? $stateParams.id : ConsignmentFactory.copyConsignmentId;\r\n\r\n ConsignmentFactory.getConsignment(consignmentId)\r\n .then(\r\n function () {\r\n $scope.existingConsignment = true;\r\n $scope.loadingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignment.RecommendedPrice = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n $scope.consignment.Price = $filter('number')($scope.consignment.Price, 2);\r\n $scope.consignment.RecommendedCost = $filter('number')($scope.consignment.RecommendedCost, 2);\r\n $scope.consignment.Cost = $filter('number')($scope.consignment.Cost, 2);\r\n $scope.selectedCustomer = $scope.consignment.Customer;\r\n $scope.existingAddresses = [];\r\n\r\n $rootScope.$emit('title-updated', 'Consignment ' + $scope.consignment.ConsignmentNumber);\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.Address != null) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Address);\r\n }\r\n\r\n if ($scope.selectedCustomer.Addresses != null) {\r\n for (var i = 0; i < $scope.selectedCustomer.Addresses.length; i++) {\r\n if ($scope.selectedCustomer.Addresses[i].Id != $scope.selectedCustomer.Address.Id) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Addresses[i]);\r\n }\r\n }\r\n }\r\n\r\n $scope.contacts = $scope.selectedCustomer.Contacts;\r\n $scope.contactEmails = [];\r\n\r\n for (var i = 0; i < $scope.contacts.length; i++) {\r\n if ($scope.contacts[i].Email) $scope.contactEmails.push($scope.contacts[i]);\r\n }\r\n\r\n $scope.contactEmails.push({ Id: '-1', Email: '-- Other Email Address --' });\r\n\r\n $scope.consignment.Customer = {\r\n 'Id': $scope.selectedCustomer.Id,\r\n 'Name': $scope.selectedCustomer.Name,\r\n 'NameShownOnInvoice': $scope.selectedCustomer.NameShownOnInvoice,\r\n 'PhoneNumber': $scope.selectedCustomer.PhoneNumber,\r\n 'CostCentre': $scope.selectedCustomer.CostCentre,\r\n 'AccountType': $scope.selectedCustomer.AccountType,\r\n 'Addresses': $scope.selectedCustomer.Addresses,\r\n 'AutoEmailOnCreate': $scope.selectedCustomer.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': $scope.selectedCustomer.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': $scope.selectedCustomer.AutoEmailOnDelivery,\r\n 'UseContactEmail': $scope.selectedCustomer.UseContactEmail,\r\n 'BookingEmailAddress': $scope.selectedCustomer.BookingEmailAddress\r\n };\r\n\r\n $scope.customerNotes = ($scope.consignment.CustomerBranch) ? $scope.consignment.CustomerBranch.Notes : ($scope.selectedCustomer) ? $scope.selectedCustomer.Notes : '';\r\n\r\n var unassignedConsignmentAddress = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n }\r\n\r\n var manifestAlreadyAdded = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses[i].Manifest) {\r\n unassignedConsignmentAddress = true;\r\n }\r\n else {\r\n $scope.consignmentHasManifests = true;\r\n\r\n for (var m = 0; m < $scope.consignmentManifests.length; m++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest.Id === $scope.consignmentManifests[m].Id) manifestAlreadyAdded = true;\r\n }\r\n\r\n if (!manifestAlreadyAdded) $scope.consignmentManifests.push($scope.consignment.ConsignmentAddresses[i].Manifest);\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest && ($scope.consignment.ConsignmentAddresses[i].Manifest.InvoiceStatus == $scope.invoiceStatuses.ReadyToInvoice || $scope.consignment.ConsignmentAddresses[i].Manifest.InvoiceStatus == $scope.invoiceStatuses.Invoiced)) $scope.manifestInvoiced = true;\r\n\r\n }\r\n\r\n if (!unassignedConsignmentAddress && $scope.consignmentManifests.length === 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentManifests[0].NumberOfConsignmentAddresses) {\r\n $scope.consignmentManifestOneToOneRelationship = true;\r\n $scope.consignment.RecommendedCost = $filter('number')($scope.consignment.ConsignmentAddresses[0].Manifest.CalculatedCost, 2);\r\n $scope.consignment.Cost = $filter('number')($scope.consignment.ConsignmentAddresses[0].Manifest.Cost, 2);\r\n }\r\n\r\n if (!$scope.consignmentHasManifests) {\r\n updateCosting();\r\n }\r\n\r\n //$timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n\r\n //}, 1000);\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ($stateParams.id.length > 0) {\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n }\r\n\r\n if (ConsignmentFactory.copyConsignmentId) {\r\n createCopyFromConsignment();\r\n\r\n ConsignmentFactory.copyConsignmentId = null;\r\n }\r\n\r\n if ($scope.vehicleTypes && $scope.vehicleTypes.length > 0) {\r\n var found = false;\r\n var pushAt = 0;\r\n\r\n for (var i = 0; i < $scope.vehicleTypes.length; i++) {\r\n if ($scope.consignment.VehicleType.Id === $scope.vehicleTypes[i].Id) {\r\n found = true;\r\n break;\r\n } else {\r\n if ($scope.consignment.VehicleType.Order > $scope.vehicleTypes[i].Order) {\r\n pushAt++;\r\n }\r\n }\r\n }\r\n\r\n if (!found) {\r\n $scope.vehicleTypes.splice(pushAt, 0, $scope.consignment.VehicleType);\r\n }\r\n }\r\n\r\n if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n if ($scope.consignmentMap.getLocations().length == 0) {\r\n $timeout(function () {\r\n $scope.consignmentMap.triggerResize();\r\n\r\n var supplierAlreadyExists = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress(i) + ',' + $scope.consignment.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.consignment.ConsignmentAddresses[i].Address.Latitude,\r\n lng: $scope.consignment.ConsignmentAddresses[i].Address.Longitude,\r\n object: $scope.consignment.ConsignmentAddresses[i].Address\r\n }\r\n\r\n $scope.consignmentMap.addLocation(address,\r\n {\r\n 'dateTime': $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime,\r\n 'dateTimeLocked': $scope.consignment.ConsignmentAddresses[i].IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address === location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n for (var i = 0; i < $scope.manifestSuppliers.length; i++) {\r\n if ($scope.manifestSuppliers[i].SupplierUsers[0] && $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation) addSupplierLocationToMap($scope.manifestSuppliers[i], $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation, clickinon.google.maps.enums.markerType);\r\n }\r\n\r\n updateDistanceTimesAndPricing();\r\n\r\n updateCosting();\r\n });\r\n }\r\n }\r\n }\r\n );\r\n\r\n supplierAlreadyExists = false;\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0] && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation) {\r\n for (var s = 0; s < $scope.manifestSuppliers.length; s++) {\r\n if ($scope.manifestSuppliers[s].Id === $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.Id) supplierAlreadyExists = true;\r\n }\r\n\r\n if (!supplierAlreadyExists) $scope.manifestSuppliers.push($scope.consignment.ConsignmentAddresses[i].Manifest.Supplier);\r\n }\r\n }\r\n }, 1000);\r\n }\r\n }\r\n );\r\n }\r\n\r\n CommonFactory.getConsignmentTypes()\r\n .then(\r\n function (response) {\r\n $scope.consignmentTypes = response;\r\n\r\n if (!$scope.consignment.ConsignmentType) $scope.consignment.ConsignmentType = $scope.consignmentTypes[0];\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getConsignmentFrequencies()\r\n .then(\r\n function (response) {\r\n $scope.consignmentFrequencies = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getWeekDays()\r\n .then(\r\n function (response) {\r\n $scope.weekdays = response;\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n }\r\n );\r\n\r\n CommonFactory.getConsignmentAddressTypes()\r\n .then(\r\n function (response) {\r\n $scope.consignmentAddressTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAdditionalCharges()\r\n .then(\r\n function (response) {\r\n $scope.defaultAdditionalCharges = response;\r\n $scope.additionalCharges = angular.copy($scope.defaultAdditionalCharges);\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CountryFactory.getCountries()\r\n .then(\r\n function () {\r\n $scope.countries = CountryFactory.countries;\r\n }\r\n );\r\n\r\n SupplierFactory.getSuppliers()\r\n .then(\r\n function () {\r\n $scope.suppliers = SupplierFactory.suppliers;\r\n }\r\n );\r\n\r\n SettingsFactory.getAreaAdditionalChargeRules()\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getGlobalSettings()\r\n .then(\r\n function (response) {\r\n $scope.settings = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getMatrices()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrices = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n $timeout(function () {\r\n if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n //if ($scope.consignmentMap.getLocations().length == 0) {\r\n // $timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // var supplierAlreadyExists = false;\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // var address = {\r\n // text: ConsignmentFactory.getFormattedConsignmentAddress(i) + ',' + $scope.consignment.ConsignmentAddresses[i].Address.Country.Name,\r\n // lat: $scope.consignment.ConsignmentAddresses[i].Address.Latitude,\r\n // lng: $scope.consignment.ConsignmentAddresses[i].Address.Longitude,\r\n // object: $scope.consignment.ConsignmentAddresses[i].Address\r\n // }\r\n\r\n // $scope.consignmentMap.addLocation(address,\r\n // {\r\n // 'dateTime': $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime,\r\n // 'dateTimeLocked': $scope.consignment.ConsignmentAddresses[i].IsScheduledStartDateAndTimeLocked,\r\n // 'callback': function (location) {\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // if ($scope.consignment.ConsignmentAddresses[i].Address === location.object) {\r\n // $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n // $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n // }\r\n // }\r\n\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n // $scope.consignmentMap.getDirections(function () {\r\n // for (var i = 0; i < $scope.manifestSuppliers.length; i++) {\r\n // if ($scope.manifestSuppliers[i].SupplierUsers[0] && $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation) addSupplierLocationToMap($scope.manifestSuppliers[i], $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation, clickinon.google.maps.enums.markerType);\r\n // }\r\n\r\n // updateDistanceTimesAndPricing();\r\n\r\n // updateCosting();\r\n // });\r\n // }\r\n // }\r\n // }\r\n // );\r\n\r\n // supplierAlreadyExists = false;\r\n\r\n // if ($scope.consignment.ConsignmentAddresses[i].Manifest && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0] && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation) {\r\n // for (var s = 0; s < $scope.manifestSuppliers.length; s++) {\r\n // if ($scope.manifestSuppliers[s].Id === $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.Id) supplierAlreadyExists = true;\r\n // }\r\n\r\n // if (!supplierAlreadyExists) $scope.manifestSuppliers.push($scope.consignment.ConsignmentAddresses[i].Manifest.Supplier);\r\n // }\r\n // }\r\n // }, 1000);\r\n //}\r\n }, 500);\r\n\r\n $scope.goToDetails = function () {\r\n $scope.stage = 'details';\r\n }\r\n\r\n $scope.goToChangeLog = function () {\r\n $scope.stage = 'change-log';\r\n }\r\n\r\n $scope.goToAddresses = function () {\r\n $scope.manifestSuppliers = [];\r\n\r\n if (($scope.consignmentForm.txtConsignment_Customer && $scope.consignmentForm.txtConsignment_Customer.$invalid) || $scope.consignmentForm.txtConsignment_ContactName.$invalid || $scope.consignmentForm.ddlConsignment_VehicleType.$invalid) {\r\n $scope.ConsignmentDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.SaveContact) {\r\n var contactNameAlreadyExists = false;\r\n\r\n for (var j = 0; j < $scope.selectedCustomer.Contacts.length; j++) {\r\n if ($scope.consignment.BookingContact !== null) {\r\n if ($scope.consignment.BookingContact.Id !== $scope.selectedCustomer.Contacts[j].Id) {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n }\r\n\r\n if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n if ($scope.consignmentMap.getLocations().length == 0) {\r\n $timeout(function () {\r\n $scope.consignmentMap.triggerResize();\r\n\r\n var supplierAlreadyExists = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress(i) + ',' + $scope.consignment.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.consignment.ConsignmentAddresses[i].Address.Latitude,\r\n lng: $scope.consignment.ConsignmentAddresses[i].Address.Longitude,\r\n object: $scope.consignment.ConsignmentAddresses[i].Address\r\n }\r\n\r\n $scope.consignmentMap.addLocation(address,\r\n {\r\n 'dateTime': $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime,\r\n 'dateTimeLocked': $scope.consignment.ConsignmentAddresses[i].IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address === location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n for (var i = 0; i < $scope.manifestSuppliers.length; i++) {\r\n if ($scope.manifestSuppliers[i].SupplierUsers[0] && $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation) addSupplierLocationToMap($scope.manifestSuppliers[i], $scope.manifestSuppliers[i].SupplierUsers[0].LastKnownLocation, clickinon.google.maps.enums.markerType);\r\n }\r\n\r\n updateDistanceTimesAndPricing();\r\n\r\n updateCosting();\r\n });\r\n }\r\n }\r\n }\r\n );\r\n\r\n supplierAlreadyExists = false;\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0] && $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.SupplierUsers[0].LastKnownLocation) {\r\n for (var s = 0; s < $scope.manifestSuppliers.length; s++) {\r\n if ($scope.manifestSuppliers[s].Id === $scope.consignment.ConsignmentAddresses[i].Manifest.Supplier.Id) supplierAlreadyExists = true;\r\n }\r\n\r\n if (!supplierAlreadyExists) $scope.manifestSuppliers.push($scope.consignment.ConsignmentAddresses[i].Manifest.Supplier);\r\n }\r\n }\r\n }, 1000);\r\n }\r\n\r\n //if (!$scope.consignmentMap.getMap()) {\r\n // $scope.consignmentMap.initialize('divConsignmentMap', true, function () {\r\n // $timeout(function () {\r\n // $scope.mapsLoaded = true;\r\n\r\n // debugger;\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n // });\r\n // });\r\n //}\r\n\r\n $scope.stage = 'addresses';\r\n }\r\n\r\n $scope.changeVehicleType = function () {\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n\r\n updateDistanceTimesAndPricing();\r\n\r\n updateCosting();\r\n }\r\n\r\n $scope.searchCustomer = function (searchText) {\r\n return CustomerFactory.searchCustomerByName(searchText);\r\n }\r\n\r\n $scope.customerSelected = function (c) {\r\n $scope.selectedCustomerOnStop = false;\r\n $scope.selectedCustomerIsProFormaAccountCustomer = false;\r\n $scope.selectedCustomerInactiveWarning = false;\r\n $scope.selectedCustomerOverCreditLimitWarnin = false;\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.Customer && moment().diff(c.LastConsignmentBookedDate, 'months') > __INACTIVE_CUSTOMER_WARNING_MONTHS) {\r\n $scope.selectedCustomerInactiveWarning = true;\r\n }\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.Customer && c.OutstandingBalance > c.CreditLimit) {\r\n $scope.selectedCustomerOverCreditLimitWarning = true;\r\n }\r\n\r\n $scope.consignment.CustomerBranch = null;\r\n $scope.consignment.ContactName = null;\r\n $scope.consignment.ContactPhoneNumber = null;\r\n $scope.consignment.ContactEmailAddress = null;\r\n\r\n $scope.selectedCustomer = c;\r\n $scope.consignment.Customer = {\r\n 'Id': c.Id,\r\n 'Name': c.Name,\r\n 'NameShownOnInvoice': c.NameShownOnInvoice,\r\n 'PhoneNumber': c.PhoneNumber,\r\n 'CostCentre': c.CostCentre,\r\n 'AccountType': c.AccountType,\r\n 'Addresses': c.Addresses,\r\n 'AutoEmailOnCreate': c.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': c.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': c.AutoEmailOnDelivery,\r\n 'UseContactEmail': c.UseContactEmail,\r\n 'BookingEmailAddress': c.BookingEmailAddress\r\n\r\n };\r\n $scope.existingAddresses = [];\r\n $scope.contacts = $scope.selectedCustomer.Contacts;\r\n $scope.contactEmails = [];\r\n\r\n for (var i = 0; i < $scope.contacts.length; i++) {\r\n if ($scope.contacts[i].Email) $scope.contactEmails.push($scope.contacts[i]);\r\n }\r\n\r\n $scope.contactEmails.push({ Id: '-1', Email: '-- Other Email Address --' });\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if (c.Address != null) {\r\n $scope.existingAddresses.push(c.Address);\r\n }\r\n if (c.Addresses != null) {\r\n for (var i = 0; i < c.Addresses.length; i++) {\r\n if (c.Addresses[i].Id != c.Address.Id) {\r\n $scope.existingAddresses.push(c.Addresses[i]);\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.Id) {\r\n $scope.consignment.Customer.Contacts = null;\r\n delete $scope.consignment.BookingContact.Id;\r\n\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n delete $scope.consignment.ConsignmentAddresses[a].Address.Id;\r\n }\r\n }\r\n\r\n $scope.customerNotes = ($scope.consignment.CustomerBranch) ? $scope.consignment.CustomerBranch.Notes : ($scope.selectedCustomer) ? $scope.selectedCustomer.Notes : '';\r\n }\r\n\r\n $scope.changeBranch = function () {\r\n $scope.customerNotes = ($scope.consignment.CustomerBranch) ? $scope.consignment.CustomerBranch.Notes : ($scope.selectedCustomer) ? $scope.selectedCustomer.Notes : '';\r\n $scope.contacts = ($scope.consignment.CustomerBranch) ? $scope.consignment.CustomerBranch.Contacts : ($scope.selectedCustomer) ? $scope.selectedCustomer.Contacts : [];\r\n $scope.contactEmails = [];\r\n\r\n for (var i = 0; i < $scope.contacts.length; i++) {\r\n if ($scope.contacts[i].Email) $scope.contactEmails.push($scope.contacts[i]);\r\n }\r\n\r\n $scope.contactEmails.push({ Id: '-1', Email: '-- Other Email Address --' });\r\n }\r\n\r\n $scope.selectBookingContact = function () {\r\n if ($scope.consignment.BookingContact) {\r\n $scope.consignment.ContactName = $scope.consignment.BookingContact.Name;\r\n $scope.consignment.ContactPhoneNumber = $scope.consignment.BookingContact.Phone;\r\n $scope.consignment.ContactEmailAddress = $scope.consignment.BookingContact.Email;\r\n $scope.consignment.SaveContact = false;\r\n }\r\n else {\r\n $scope.consignment.ContactName = '';\r\n $scope.consignment.ContactPhoneNumber = '';\r\n $scope.consignment.ContactEmailAddress = '';\r\n $scope.consignment.SaveContact = true;\r\n }\r\n }\r\n\r\n $scope.addNewConsignmentAddress = function () {\r\n var initialConsignmentAddressType = null;\r\n\r\n for (var i = 0; i < $scope.consignmentAddressTypes.length; i++) {\r\n if ($scope.consignmentAddressTypes[i].Name.toUpperCase() == 'COLLECTION' && (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length == 0)) {\r\n initialConsignmentAddressType = $scope.consignmentAddressTypes[i];\r\n break;\r\n }\r\n else if ($scope.consignmentAddressTypes[i].Name.toUpperCase() == 'DELIVERY') {\r\n initialConsignmentAddressType = $scope.consignmentAddressTypes[i];\r\n break;\r\n }\r\n }\r\n\r\n $scope.consignmentAddress = { 'ConsignmentAddressType': initialConsignmentAddressType, 'Address': { 'Country': $scope.countries[0] } };\r\n $scope.stage = 'address';\r\n $scope.allCollectionLoadDetails = [];\r\n $scope.loadDetails = {};\r\n var counter = 1;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection' && $scope.consignment.ConsignmentAddresses[i].LoadDetails) {\r\n for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n var loadDetails = angular.copy($scope.consignment.ConsignmentAddresses[i].LoadDetails[d]);\r\n loadDetails.id = counter;\r\n\r\n $scope.allCollectionLoadDetails.push(loadDetails);\r\n\r\n counter++;\r\n }\r\n }\r\n }\r\n\r\n $scope.additionalCharges = angular.copy($scope.defaultAdditionalCharges);\r\n\r\n //$timeout(function () {\r\n // var fields = [\r\n // { element: \"txtConsignmentAddress_Address1\", field: \"Line1\", mode: pca.DEFAULT },\r\n // { element: \"txtConsignmentAddress_Address2\", field: \"Line2\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Town\", field: \"City\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_County\", field: \"Province\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Postcode\", field: \"PostalCode\", mode: pca.DEFAULT },\r\n // ];\r\n\r\n // var options = { key: __LOQATE_KEY };\r\n\r\n // $scope.pcaControl = new pca.Address(fields, options);\r\n\r\n // $scope.pcaControl.load();\r\n\r\n // //control.listen(\"load\", function () {\r\n // //custom code\r\n // $scope.pcaControl.listen(\"populate\", function (address) {\r\n // $scope.$apply(function () {\r\n // var addressLine1 = '', addressLine2 = '', addressLine3 = '';\r\n\r\n // if (address.Line5.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3 + ', ' + address.Line4;\r\n // addressLine3 = address.Line5;\r\n // }\r\n // else {\r\n // if (address.Line4.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3;\r\n // addressLine3 = address.Line4;\r\n // }\r\n // else {\r\n // addressLine1 = address.Line1;\r\n // addressLine2 = address.Line2;\r\n // addressLine3 = address.Line3;\r\n // }\r\n // }\r\n\r\n // delete $scope.consignmentAddress.Address.Id;\r\n // $scope.consignmentAddress.Address.CompanyName = (address.Company) ? address.Company : '';\r\n // $scope.consignmentAddress.Address.AddressLine1 = addressLine1;\r\n // $scope.consignmentAddress.Address.AddressLine2 = addressLine2;\r\n // $scope.consignmentAddress.Address.AddressLine3 = addressLine3;\r\n // $scope.consignmentAddress.Address.Town = address.City;\r\n // $scope.consignmentAddress.Address.County = address.Province;\r\n // $scope.consignmentAddress.Address.Postcode = address.PostalCode;\r\n // $scope.consignmentAddress.Address.Country = $scope.countries[0];\r\n // });\r\n // });\r\n // //});\r\n //});\r\n }\r\n\r\n $scope.editConsignmentAddress = function (a, i) {\r\n $scope.consignmentAddress = a;\r\n $scope.consignmentAddress.SelectedExistingAddress = a.Address;\r\n $scope.consignmentAddressIndex = i;\r\n $scope.stage = 'address';\r\n $scope.allCollectionLoadDetails = [];\r\n $scope.loadDetails = {};\r\n $scope.hideAddressSearch = true;\r\n var counter = 1;\r\n\r\n if ($scope.consignmentAddress.IsScheduledStartDateAndTimeLocked) {\r\n $scope.consignmentAddress.ScheduledStartDate = moment($scope.consignmentAddress.ScheduledStartDateAndTime);\r\n $scope.consignmentAddress.ScheduledStartTime = moment($scope.consignmentAddress.ScheduledStartDateAndTime);\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection' && $scope.consignment.ConsignmentAddresses[i].LoadDetails) {\r\n for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n var loadDetails = angular.copy($scope.consignment.ConsignmentAddresses[i].LoadDetails[d]);\r\n loadDetails.id = counter;\r\n\r\n $scope.allCollectionLoadDetails.push(loadDetails);\r\n\r\n counter++;\r\n }\r\n }\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].LoadDetails) {\r\n for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].LoadDetails[d].existingLoadDetails) {\r\n for (var a = 0; a < $scope.allCollectionLoadDetails.length; a++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].LoadDetails[d].existingLoadDetails.id === $scope.allCollectionLoadDetails[a].id) {\r\n $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].existingLoadDetails.Quantity = $scope.allCollectionLoadDetails[a].Quantity;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.additionalCharges = angular.copy($scope.defaultAdditionalCharges);\r\n\r\n //$timeout(function () {\r\n // var fields = [\r\n // { element: \"txtConsignmentAddress_Address1\", field: \"Line1\", mode: pca.DEFAULT },\r\n // { element: \"txtConsignmentAddress_Address2\", field: \"Line2\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Town\", field: \"City\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_County\", field: \"Province\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Postcode\", field: \"PostalCode\", mode: pca.DEFAULT },\r\n // ];\r\n\r\n // var options = { key: __LOQATE_KEY };\r\n\r\n // $scope.pcaControl = new pca.Address(fields, options);\r\n\r\n // $scope.pcaControl.load();\r\n\r\n // //capturePlus.listen(\"load\", function (control) {\r\n // //custom code\r\n // $scope.pcaControl.listen(\"populate\", function (address) {\r\n // $scope.$apply(function () {\r\n // var addressLine1 = '', addressLine2 = '', addressLine3 = '';\r\n\r\n // if (address.Line5.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3 + ', ' + address.Line4;\r\n // addressLine3 = address.Line5;\r\n // }\r\n // else {\r\n // if (address.Line4.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3;\r\n // addressLine3 = address.Line4;\r\n // }\r\n // else {\r\n // addressLine1 = address.Line1;\r\n // addressLine2 = address.Line2;\r\n // addressLine3 = address.Line3;\r\n // }\r\n // }\r\n\r\n // delete $scope.consignmentAddress.Address.Id;\r\n // $scope.consignmentAddress.Address.CompanyName = (address.Company) ? address.Company : '';\r\n // $scope.consignmentAddress.Address.AddressLine1 = addressLine1;\r\n // $scope.consignmentAddress.Address.AddressLine2 = addressLine2;\r\n // $scope.consignmentAddress.Address.AddressLine3 = addressLine3;\r\n // $scope.consignmentAddress.Address.Town = address.City;\r\n // $scope.consignmentAddress.Address.County = address.Province;\r\n // $scope.consignmentAddress.Address.Postcode = address.PostalCode;\r\n // $scope.consignmentAddress.Address.Country = $scope.countries[0];\r\n // delete $scope.consignmentAddress.Address.Latitude;\r\n // delete $scope.consignmentAddress.Address.Longitude;\r\n // });\r\n // });\r\n // //});\r\n //});\r\n }\r\n\r\n $scope.pickupASAP = function () {\r\n // Add 30 minutes to the current time\r\n $scope.consignmentAddress.ScheduledStartDate = moment().add(30, 'm');\r\n $scope.consignmentAddress.ScheduledStartTime = moment().add(30, 'm');\r\n $scope.consignmentAddress.ScheduledStartDateAndTime = moment().add(30, 'm');\r\n $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked = true;\r\n }\r\n\r\n $scope.clearManuallySetDateTime = function () {\r\n $scope.consignmentAddress.ScheduledStartDate = null;\r\n $scope.consignmentAddress.ScheduledStartTime = null;\r\n $scope.consignmentAddress.ScheduledStartDateAndTime = null;\r\n $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked = false;\r\n }\r\n\r\n $scope.dateManuallySet = function () {\r\n //$scope.formatManualDate();\r\n $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked = true;\r\n }\r\n\r\n $scope.unlockConsignmentAddressDateTime = function (consignmentAddress, index) {\r\n consignmentAddress.ScheduledStartDate = null;\r\n consignmentAddress.ScheduledStartTime = null;\r\n consignmentAddress.ScheduledStartDateAndTime = null;\r\n consignmentAddress.IsScheduledStartDateAndTimeLocked = false;\r\n\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress(consignmentAddress) + ',' + consignmentAddress.Address.Country.Name,\r\n lat: consignmentAddress.Address.Latitude,\r\n lng: consignmentAddress.Addresss.Longitude,\r\n object: consignmentAddress.Address\r\n }\r\n\r\n consignmentAddress.Address.CountryId = consignmentAddress.Address.Country.Id;\r\n\r\n var options = {\r\n 'dateTime': (consignmentAddress.IsScheduledStartDateAndTimeLocked) ? consignmentAddress.ScheduledStartDateAndTime : null,\r\n 'dateTimeLocked': consignmentAddress.IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address == location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n }\r\n }\r\n\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n };\r\n\r\n $scope.consignmentMap.updateLocation(index, address, options);\r\n }\r\n\r\n $scope.searchExistingAddresses = function (searchText) {\r\n return CustomerFactory.searchCustomersExistingAddress($scope.selectedCustomer.Id, searchText);\r\n }\r\n\r\n //$scope.existingAddressSelected = function () {\r\n // if ($scope.consignmentAddress.SelectedExistingAddress) {\r\n // angular.copy($scope.consignmentAddress.SelectedExistingAddress, $scope.consignmentAddress.Address);\r\n // }\r\n //}\r\n\r\n $scope.onAddressSearchChange = function (searchText) {\r\n $scope.consignmentAddress.Address.Postcode = searchText;\r\n }\r\n\r\n $scope.addressSelected = function (address, type) {\r\n if (type === 'EXTERNAL') {\r\n PostcodeLookupFactory.get(address.id)\r\n .then(\r\n function (address) {\r\n $scope.consignmentAddress.Address = {};\r\n\r\n if (address.data.residential) {\r\n $scope.consignmentAddress.Address.AddressLine1 = address.data.line_1;\r\n $scope.consignmentAddress.Address.AddressLine2 = address.data.line_2;\r\n $scope.consignmentAddress.Address.AddressLine3 = address.data.line_3;\r\n }\r\n else {\r\n $scope.consignmentAddress.Address.CompanyName = address.data.line_1;\r\n $scope.consignmentAddress.Address.AddressLine1 = address.data.line_2;\r\n $scope.consignmentAddress.Address.AddressLine2 = address.data.line_3;\r\n }\r\n \r\n $scope.consignmentAddress.Address.Town = address.data.town_or_city;\r\n $scope.consignmentAddress.Address.County = address.data.county;\r\n $scope.consignmentAddress.Address.Postcode = address.data.postcode;\r\n $scope.consignmentAddress.Address.Country = $scope.countries[0];\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n else {\r\n $scope.consignmentAddress.Address = address;\r\n\r\n //angular.copy($scope.consignmentAddress.SelectedExistingAddress, $scope.consignmentAddress.Address);\r\n }\r\n }\r\n\r\n $scope.selectAccountAddress = function () {\r\n $scope.consignmentAddress.SelectedExistingAddress = $scope.selectedCustomer.Address;\r\n\r\n angular.copy($scope.consignmentAddress.SelectedExistingAddress, $scope.consignmentAddress.Address);\r\n }\r\n\r\n $scope.searchPostcodeFinder = function (searchText) {\r\n //$scope.consignmentAddress.Address.Postcode = searchText;\r\n\r\n //document.getElementsByName('txtConsignmentAddress_Postcode')[0].focus();\r\n\r\n //$timeout(function () {\r\n // $scope.pcaControl.autocomplete.dblclick();\r\n //}, 50);\r\n\r\n return PostcodeLookupFactory.search(searchText)\r\n .then(\r\n function (response) {\r\n var addresses = [];\r\n\r\n for (var i = 0; i < response.data.suggestions.length; i++) {\r\n var address = response.data.suggestions[i];\r\n\r\n address.ShortAddress = address.address;\r\n address.Postcode = address.address.substring(address.address.lastIndexOf(',') + 1);\r\n\r\n addresses.push(address);\r\n }\r\n\r\n return addresses;\r\n }\r\n );\r\n }\r\n\r\n $scope.addressChanged = function () {\r\n if ($scope.consignmentAddress.SelectedExistingAddress) {\r\n if (clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.CompanyName) == $scope.consignmentAddress.Address.CompanyName &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.AddressLine1) == $scope.consignmentAddress.Address.AddressLine1 &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.AddressLine2) == $scope.consignmentAddress.Address.AddressLine2 &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.AddressLine3) == $scope.consignmentAddress.Address.AddressLine3 &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.Town) == $scope.consignmentAddress.Address.Town &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.County) == $scope.consignmentAddress.Address.County &&\r\n clickinon.utilities.nullToEmpty($scope.consignmentAddress.SelectedExistingAddress.Postcode) == $scope.consignmentAddress.Address.Postcode &&\r\n angular.equals($scope.consignmentAddress.SelectedExistingAddress.Country, $scope.consignmentAddress.Address.Country)) {\r\n\r\n $scope.consignmentAddress.Address.Id = $scope.consignmentAddress.SelectedExistingAddress.Id;\r\n }\r\n else {\r\n delete $scope.consignmentAddress.Address.Id;\r\n $scope.consignmentAddress.Address.Latitude = null;\r\n $scope.consignmentAddress.Address.Longitude = null;\r\n }\r\n }\r\n else {\r\n delete $scope.consignmentAddress.Address.Id;\r\n $scope.consignmentAddress.Address.Latitude = null;\r\n $scope.consignmentAddress.Address.Longitude = null;\r\n }\r\n }\r\n\r\n $scope.addAddressToCustomer = function () {\r\n if ($scope.consignmentAddress.SaveToCustomerRecord) {\r\n if (!$scope.consignment.Customer.Addresses) $scope.consignment.Customer.Addresses = [];\r\n\r\n $scope.consignment.Customer.Addresses.push($scope.consignmentAddress.Address);\r\n }\r\n else {\r\n if (!$scope.consignment.Customer.Addresses[$scope.consignment.Customer.Addresses.length - 1].Id) {\r\n $scope.consignment.Customer.Addresses.pop();\r\n }\r\n }\r\n }\r\n\r\n $scope.priceManuallySet = function () {\r\n $scope.consignment.PriceManuallySet = true;\r\n }\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName != null && address.CompanyName != '') {\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 != null && address.AddressLine1 != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town != null && address.Town != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode != null && address.Postcode != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.closeConsignmentLoadDetailsNotAddedWarning = function ($event) {\r\n AtlasModalFactory.close('divConsignmentLoadDetailsNotAdded');\r\n if ($event) $event.stopPropagation();\r\n return false;\r\n }\r\n\r\n $scope.clearLoadDetailsAndUpdateAddressList = function () {\r\n $scope.loadDetails = {};\r\n AtlasModalFactory.close('divConsignmentLoadDetailsNotAdded');\r\n $scope.updateAddressList();\r\n }\r\n\r\n $scope.onAddressSearchBlur = function (searchText) {\r\n $scope.consignmentAddress.Address.Postcode = searchText;\r\n $scope.hideAddressSearch = true;\r\n }\r\n\r\n $scope.updateAddressList = function () {\r\n if ($scope.consignmentForm.txtConsignmentAddress_Address1.$invalid || $scope.consignmentForm.txtConsignmentAddress_Town.$invalid || $scope.consignmentForm.txtConsignmentAddress_Postcode.$invalid || ((!$scope.consignmentAddress.LoadDetails || $scope.consignmentAddress.LoadDetails.length === 0) && !$scope.consignmentAddress.NoLoadDetailsGiven && $scope.user.Role == $scope.roles.Customer)) {\r\n $scope.ConsignmentAddressFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.loadDetails.Quantity || $scope.loadDetails.Description) {\r\n AtlasModalFactory.open('divConsignmentLoadDetailsNotAdded');\r\n return false;\r\n }\r\n\r\n if (!$scope.consignment.ConsignmentAddresses) {\r\n $scope.consignment.ConsignmentAddresses = [];\r\n }\r\n\r\n if (($scope.consignmentAddress.ScheduledStartDate && !$scope.consignmentAddress.ScheduledStartTime) || (!$scope.consignmentAddress.ScheduledStartDate && $scope.consignmentAddress.ScheduledStartTime) || ($scope.consignmentAddress.ScheduledStartDate && $scope.consignmentAddress.ScheduledStartTime)) {\r\n if (!$scope.consignmentAddress.ScheduledStartDate) {\r\n $scope.consignmentAddress.ScheduledStartDate = moment();\r\n }\r\n\r\n if (!$scope.consignmentAddress.ScheduledStartTime) {\r\n $scope.consignmentAddress.ScheduledStartTime = moment();\r\n }\r\n\r\n $scope.consignmentAddress.ScheduledStartDateAndTime = moment($scope.consignmentAddress.ScheduledStartDate).hour(moment($scope.consignmentAddress.ScheduledStartTime).hour()).minute(moment($scope.consignmentAddress.ScheduledStartTime).minute());\r\n\r\n if ($scope.consignmentAddress.ScheduledStartToTime) {\r\n $scope.consignmentAddress.ScheduledStartToDateAndTime = moment($scope.consignmentAddress.ScheduledStartDate).hour(moment($scope.consignmentAddress.ScheduledStartToTime).hour()).minute(moment($scope.consignmentAddress.ScheduledStartToTime).minute());\r\n }\r\n else {\r\n $scope.consignmentAddress.ScheduledStartToDateAndTime = null;\r\n }\r\n }\r\n\r\n if ($scope.consignmentAddress.ScheduledStartDateAndTime) {\r\n $scope.consignmentAddress.DisplayScheduledStartDateAndTime = moment($scope.consignmentAddress.ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n\r\n if ($scope.consignmentAddress.ScheduledStartToDateAndTime) {\r\n $scope.consignmentAddress.DisplayScheduledStartToDateAndTime = moment($scope.consignmentAddress.ScheduledStartToDateAndTime).format('HH:mm');\r\n }\r\n\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress($scope.consignmentAddress) + ',' + $scope.consignmentAddress.Address.Country.Name,\r\n lat: $scope.consignmentAddress.Address.Latitude,\r\n lng: $scope.consignmentAddress.Address.Longitude,\r\n object: $scope.consignmentAddress.Address\r\n }\r\n\r\n //if (!$scope.consignmentMap.getMap()) $scope.consignmentMap.initialize('divConsignmentMap', true, function () {\r\n // $timeout(function () {\r\n // $scope.mapsLoaded = true;\r\n // });\r\n //});\r\n\r\n $scope.consignmentAddress.Address.CountryId = $scope.consignmentAddress.Address.Country.Id;\r\n\r\n var options = {\r\n 'dateTime': ($scope.consignmentAddress.IsScheduledStartDateAndTimeLocked) ? $scope.consignmentAddress.ScheduledStartDateAndTime : null,\r\n 'dateTimeLocked': $scope.consignmentAddress.IsScheduledStartDateAndTimeLocked,\r\n 'callback': function (location) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Address == location.object) {\r\n $scope.consignment.ConsignmentAddresses[i].Address.Latitude = location.lat;\r\n $scope.consignment.ConsignmentAddresses[i].Address.Longitude = location.lng;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n if ($scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n\t\t\t\t}\r\n },\r\n 'object': $scope.consignmentAddress\r\n };\r\n\r\n if ($scope.existingConsignment) {\r\n options.recalculate = true;\r\n }\r\n\r\n if ($scope.consignmentAddressIndex != null) {\r\n $scope.consignment.ConsignmentAddresses[$scope.consignmentAddressIndex] = $scope.consignmentAddress;\r\n\r\n $scope.consignmentMap.updateLocation($scope.consignmentAddressIndex, address, options);\r\n }\r\n else {\r\n $scope.consignmentAddress.Signature_FileName = '';\r\n\r\n $scope.consignment.ConsignmentAddresses.push($scope.consignmentAddress);\r\n\r\n $scope.consignmentMap.addLocation(address, options);\r\n }\r\n\r\n $scope.consignmentAddress = null;\r\n $scope.consignmentAddressIndex = null;\r\n $scope.ConsignmentAddressFormSubmitted = false;\r\n $scope.consignmentForm.txtConsignmentAddress_Address1.$setPristine();\r\n $scope.consignmentForm.txtConsignmentAddress_Town.$setPristine();\r\n $scope.consignmentForm.txtConsignmentAddress_Postcode.$setPristine();\r\n $scope.selectedAdditionalCharges = [];\r\n /*$scope.stage = 'addresses';*/\r\n $scope.stage = 'details';\r\n\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n }\r\n\r\n $scope.copyConsignmentAddress = function (a) {\r\n var initialConsignmentAddressType = null;\r\n\r\n for (var i = 0; i < $scope.consignmentAddressTypes.length; i++) {\r\n if ($scope.consignmentAddressTypes[i].Name.toUpperCase() == 'COLLECTION' && (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length == 0)) {\r\n initialConsignmentAddressType = $scope.consignmentAddressTypes[i];\r\n break;\r\n }\r\n else if ($scope.consignmentAddressTypes[i].Name.toUpperCase() == 'DELIVERY') {\r\n initialConsignmentAddressType = $scope.consignmentAddressTypes[i];\r\n break;\r\n }\r\n }\r\n\r\n $scope.consignmentAddress = {\r\n 'ConsignmentAddressType': a.ConsignmentAddressType,\r\n 'Address': angular.copy(a.Address)\r\n };\r\n $scope.stage = 'address';\r\n $scope.allCollectionLoadDetails = [];\r\n var counter = 1;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection' && $scope.consignment.ConsignmentAddresses[i].LoadDetails) {\r\n for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n var loadDetails = angular.copy($scope.consignment.ConsignmentAddresses[i].LoadDetails[d]);\r\n loadDetails.id = counter;\r\n\r\n $scope.allCollectionLoadDetails.push(loadDetails);\r\n\r\n counter++;\r\n }\r\n }\r\n }\r\n\r\n $scope.additionalCharges = angular.copy($scope.defaultAdditionalCharges);\r\n\r\n //$timeout(function () {\r\n // var fields = [\r\n // { element: \"txtConsignmentAddress_Address1\", field: \"Line1\", mode: pca.DEFAULT },\r\n // { element: \"txtConsignmentAddress_Address2\", field: \"Line2\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Town\", field: \"City\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_County\", field: \"Province\", mode: pca.POPULATE },\r\n // { element: \"txtConsignmentAddress_Postcode\", field: \"PostalCode\", mode: pca.DEFAULT },\r\n // ];\r\n\r\n // var options = { key: __LOQATE_KEY };\r\n\r\n // var control = new pca.Address(fields, options);\r\n\r\n // control.load();\r\n\r\n // //control.listen(\"load\", function () {\r\n // //custom code\r\n // control.listen(\"populate\", function (address) {\r\n // $scope.$apply(function () {\r\n // var addressLine1 = '', addressLine2 = '', addressLine3 = '';\r\n\r\n // if (address.Line5.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3 + ', ' + address.Line4;\r\n // addressLine3 = address.Line5;\r\n // }\r\n // else {\r\n // if (address.Line4.length > 0) {\r\n // addressLine1 = address.Line1 + ', ' + address.Line2;\r\n // addressLine2 = address.Line3;\r\n // addressLine3 = address.Line4;\r\n // }\r\n // else {\r\n // addressLine1 = address.Line1;\r\n // addressLine2 = address.Line2;\r\n // addressLine3 = address.Line3;\r\n // }\r\n // }\r\n\r\n // if (address.Company) $scope.consignmentAddress.Address.CompanyName = address.Company;\r\n // $scope.consignmentAddress.Address.AddressLine1 = addressLine1;\r\n // $scope.consignmentAddress.Address.AddressLine2 = addressLine2;\r\n // $scope.consignmentAddress.Address.AddressLine3 = addressLine3;\r\n // $scope.consignmentAddress.Address.Town = address.City;\r\n // $scope.consignmentAddress.Address.County = address.Province;\r\n // $scope.consignmentAddress.Address.Postcode = address.PostalCode;\r\n // $scope.consignmentAddress.Address.Country = $scope.countries[0];\r\n // });\r\n // });\r\n // //});\r\n //});\r\n }\r\n\r\n $scope.moveConsignmentAddressUp = function (a, i) {\r\n $scope.consignmentForm.$setDirty();\r\n\r\n if (i != 0) {\r\n //$scope.consignment.ConsignmentAddresses.move(i, (i - 1));\r\n $scope.consignment.ConsignmentAddresses = clickinon.utilities.moveElementInArray($scope.consignment.ConsignmentAddresses, i, (i - 1));\r\n\r\n $scope.consignmentMap.moveLocation(i, (i - 1), function () {\r\n if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n });\r\n\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n }\r\n }\r\n\r\n $scope.moveConsignmentAddressDown = function (a, i) {\r\n $scope.consignmentForm.$setDirty();\r\n\r\n if(i != ($scope.consignment.ConsignmentAddresses.length - 1)){\r\n //$scope.consignment.ConsignmentAddresses.move(i, (i + 1));\r\n $scope.consignment.ConsignmentAddresses = clickinon.utilities.moveElementInArray($scope.consignment.ConsignmentAddresses, i, (i + 1));\r\n\r\n $scope.consignmentMap.moveLocation(i, (i + 1), function () {\r\n if ($scope.consignment.ConsignmentAddresses.length > 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentMap.getLocations().length) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n });\r\n\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n }\r\n }\r\n\r\n $scope.deleteConsignmentAddress = function (i) {\r\n $scope.consignmentForm.$setDirty();\r\n\r\n var address = ConsignmentFactory.getFormattedConsignmentAddress(i);\r\n\r\n $scope.consignment.ConsignmentAddresses.splice(i, 1);\r\n\r\n $scope.consignmentMap.removeLocation(i, function () {\r\n if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n $scope.consignmentMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n });\r\n }\r\n else {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n }\r\n });\r\n\r\n if (!$scope.consignmentManifestOneToOneRelationship) $scope.manifestChangesRequired = true;\r\n }\r\n\r\n $scope.cancelAddressEdit = function () {\r\n $scope.consignmentAddress = null;\r\n $scope.consignmentAddressIndex = null;\r\n /*$scope.stage = 'addresses';*/\r\n $scope.stage = 'details';\r\n $scope.selectedAdditionalCharges = [];\r\n }\r\n\r\n $scope.addNewLoadDetails = function () {\r\n $scope.loadDetails = {};\r\n }\r\n\r\n $scope.editLoadDetails = function (d, i) {\r\n $scope.loadDetails = angular.copy(d);\r\n $scope.loadDetailsIndex = i;\r\n }\r\n\r\n $scope.updateLoadDetailsList = function () {\r\n if ($scope.consignmentForm.txtConsignment_LoadDetailsQuantity.$invalid || ($scope.consignmentForm.txtConsignment_LoadDetailsDescription && $scope.consignmentForm.txtConsignment_LoadDetailsDescription.$invalid)) {\r\n $scope.ConsignmentLoadDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if (!$scope.consignmentAddress.LoadDetails) {\r\n $scope.consignmentAddress.LoadDetails = [];\r\n }\r\n\r\n if ($scope.consignmentAddress.ConsignmentAddressType.Name === 'Delivery') {\r\n $scope.loadDetails.Description = $scope.loadDetails.existingLoadDetails.Description;\r\n }\r\n\r\n if ($scope.loadDetailsIndex != null) {\r\n $scope.consignmentAddress.LoadDetails[$scope.loadDetailsIndex] = $scope.loadDetails;\r\n }\r\n else {\r\n $scope.consignmentAddress.LoadDetails.push($scope.loadDetails);\r\n }\r\n \r\n $scope.loadDetails = {};\r\n $scope.loadDetailsIndex = null;\r\n $scope.ConsignmentLoadDetailsFormSubmitted = false;\r\n $scope.consignmentForm.txtConsignment_LoadDetailsQuantity.$setPristine();\r\n if ($scope.consignmentForm.txtConsignment_LoadDetailsDescription) $scope.consignmentForm.txtConsignment_LoadDetailsDescription.$setPristine();\r\n if ($scope.consignmentForm.ddlConsignment_ExistingLoadDetails) $scope.consignmentForm.ddlConsignment_ExistingLoadDetails.$setPristine();\r\n }\r\n\r\n $scope.deleteLoadDetails = function (i) {\r\n $scope.consignmentAddress.LoadDetails.splice(i, 1);\r\n }\r\n\r\n $scope.cancelLoadDetailsEdit = function () {\r\n $scope.loadDetails = null;\r\n }\r\n\r\n $scope.addNewAdditionalCharge = function () {\r\n $scope.additionalCharge = {};\r\n $scope.additionalChargeChanges = [];\r\n\r\n if ($scope.consignmentAddress.AdditionalCharges) {\r\n $scope.selectedAdditionalCharges = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.AdditionalCharges.length; i++) {\r\n $scope.selectedAdditionalCharges.push($scope.consignmentAddress.AdditionalCharges[i].AdditionalCharge);\r\n $scope.additionalChargeChanges.push({ 'charge': $scope.consignmentAddress.AdditionalCharges[i].AdditionalCharge, 'status': 'EXISTING' });\r\n\r\n for (var j = 0; j < $scope.additionalCharges.length; j++) {\r\n if ($scope.consignmentAddress.AdditionalCharges[i].AdditionalCharge.Id == $scope.additionalCharges[j].Id) {\r\n $scope.additionalCharges[j].checked = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.editAdditionalCharge = function (d, i) {\r\n $scope.additionalCharge = d;\r\n $scope.additionalChargeIndex = i;\r\n }\r\n\r\n $scope.updateAdditionalChargesList = function (charge) {\r\n $scope.consignmentAddress.AdditionalCharges = [];\r\n\r\n for (var i = 0; i < $scope.selectedAdditionalCharges.length; i++) {\r\n $scope.consignmentAddress.AdditionalCharges.push({ AdditionalCharge: $scope.selectedAdditionalCharges[i] });\r\n }\r\n\r\n if ($scope.consignment.Id) {\r\n for (var i = 0; i < $scope.additionalChargeChanges.length; i++) {\r\n if ($scope.additionalChargeChanges[i].status === 'ADDED') {\r\n $scope.consignment.Price = $filter('number')(parseInt($scope.consignment.Price, 10) + parseInt($scope.additionalChargeChanges[i].charge.Price, 10), 2);\r\n $scope.consignment.Cost = $filter('number')(parseFloat($scope.consignment.Cost, 10) + parseInt($scope.additionalChargeChanges[i].charge.Cost, 10), 2);\r\n $scope.costsChanged = true;\r\n }\r\n if ($scope.additionalChargeChanges[i].status === 'REMOVED') {\r\n $scope.consignment.Price = $filter('number')(parseInt($scope.consignment.Price, 10) - parseInt($scope.additionalChargeChanges[i].charge.Price, 10), 2);\r\n $scope.consignment.Cost = $filter('number')(parseFloat($scope.consignment.Cost, 10) - parseInt($scope.additionalChargeChanges[i].charge.Cost, 10), 2);\r\n $scope.costsChanged = true;\r\n }\r\n }\r\n \r\n }\r\n\r\n $scope.additionalCharge = null;\r\n }\r\n\r\n $scope.selectAdditionalCharge = function (charge) {\r\n var found = false;\r\n\r\n for (var i = 0; i < $scope.selectedAdditionalCharges.length; i++) {\r\n if ($scope.selectedAdditionalCharges[i].Id === charge.Id) {\r\n found = true;\r\n $scope.selectedAdditionalCharges.splice(i, 1);\r\n $scope.additionalChargeChanges.push({ 'charge': charge, 'status': 'REMOVED' });\r\n break;\r\n }\r\n }\r\n\r\n if (!found) {\r\n $scope.selectedAdditionalCharges.push(charge);\r\n $scope.additionalChargeChanges.push({ 'charge': charge, 'status': 'ADDED' });\r\n } \r\n }\r\n\r\n $scope.deleteAdditionalCharge = function (i, charge) {\r\n $scope.consignmentAddress.AdditionalCharges.splice(i, 1);\r\n\r\n $scope.additionalCharges.push(charge.AdditionalCharge);\r\n\r\n $scope.additionalCharges = $filter('orderBy')($scope.additionalCharges, 'ChargeFor');\r\n\r\n if ($scope.consignment.Id) {\r\n //$scope.consignment.Price = $filter('number')(parseInt($scope.consignment.Price, 10) - parseInt(charge.AdditionalCharge.Price, 10), 2);\r\n //$scope.consignment.Cost = $filter('number')(parseFloat($scope.consignment.Cost, 10) + parseInt(charge.Cost, 10), 2);\r\n $scope.costsChanged = true;\r\n }\r\n }\r\n\r\n $scope.cancelAdditionalChargeEdit = function () {\r\n $scope.additionalCharge = null;\r\n }\r\n\r\n $scope.changeOptimizeStops = function () {\r\n $scope.consignmentMap.setOptimizeStops($scope.consignment.OptimiseStops);\r\n $scope.consignmentMap.getDirections();\r\n }\r\n\r\n $scope.showQuoteWarning = function ($event) {\r\n var hasCollectionAddress = false;\r\n var hasDeliveryAddress = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length < 2) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection') hasCollectionAddress = true;\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Delivery') hasDeliveryAddress = true;\r\n }\r\n\r\n if (!hasCollectionAddress || !hasDeliveryAddress) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n $scope.MissingCollectionOrDeliveryAddress = true;\r\n return false;\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentIsQuoteWarning');\r\n $event.stopPropagation();\r\n }\r\n\r\n $scope.closeQuoteWarning = function ($event){\r\n AtlasModalFactory.close('divConsignmentIsQuoteWarning');\r\n $event.stopPropagation();\r\n return false;\r\n }\r\n\r\n $scope.saveQuote = function () {\r\n AtlasModalFactory.close('divConsignmentIsQuoteWarning');\r\n\r\n $scope.manifestSuppliers = [];\r\n\r\n if (($scope.consignmentForm.txtConsignment_Customer && $scope.consignmentForm.txtConsignment_Customer.$invalid) || $scope.consignmentForm.txtConsignment_ContactName.$invalid || $scope.consignmentForm.ddlConsignment_VehicleType.$invalid) {\r\n $scope.ConsignmentDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.SaveContact) {\r\n var contactNameAlreadyExists = false;\r\n\r\n for (var j = 0; j < $scope.selectedCustomer.Contacts.length; j++) {\r\n if ($scope.consignment.BookingContact !== null) {\r\n if ($scope.consignment.BookingContact.Id !== $scope.selectedCustomer.Contacts[j].Id) {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n }\r\n\r\n var hasCollectionAddress = false;\r\n var hasDeliveryAddress = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length < 2) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection') hasCollectionAddress = true;\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Delivery') hasDeliveryAddress = true;\r\n }\r\n\r\n if (!hasCollectionAddress || !hasDeliveryAddress) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n $scope.MissingCollectionOrDeliveryAddress = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length - 1; i++) {\r\n var consignmentAddress = $scope.consignment.ConsignmentAddresses[i];\r\n var nextConsignmentAddress = $scope.consignment.ConsignmentAddresses[(i + 1)];\r\n\r\n if (moment(nextConsignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm').isBefore(moment(consignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm'))) {\r\n $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the next date and time cannot be the same or before as the previous date and time)';\r\n return false;\r\n }\r\n /*\r\n REMOVED AS PER JIRA ITEM ACE-215\r\n */\r\n //else if (moment(nextConsignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm').isSame(moment(consignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm'))) {\r\n // if (!angular.equals(consignmentAddress.Address, nextConsignmentAddress.Address)) {\r\n // $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the next date and time can be the same as the before as the previous date and time, but the addresses must match)';\r\n // return false;\r\n // }\r\n //}\r\n }\r\n\r\n $scope.savingQuote = true;\r\n $scope.isFrequentConsignment = false;\r\n $scope.consignment.IsFrequentConsignment = false;\r\n $scope.errorMessage = null;\r\n\r\n ConsignmentFactory.saveQuote($scope.consignment)\r\n .then(\r\n function (consignment) {\r\n $scope.consignmentForm.$setPristine();\r\n $scope.consignmentForm.$setUntouched();\r\n\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.savingQuote = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n\r\n AtlasModalFactory.open('divConsignmentQuoteConfirmation');\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function(response){\r\n $scope.savingQuote = false;\r\n\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.closeConsignmentQuoteConfirmationModal = function () {\r\n AtlasModalFactory.close('divConsignmentQuoteConfirmation');\r\n\t}\r\n\r\n $scope.ignoreRequiredFieldsAndSave = function () {\r\n if (($scope.selectedCustomer.InvoiceSettings[0].PreventConsignmentWithoutPONumber && (!$scope.consignment.PONumber || $scope.consignment.PONumber.length === 0)) || ($scope.selectedCustomer.InvoiceSettings[0].PreventConsignmentWithoutCostCode && (!$scope.consignment.CostCode || $scope.consignment.CostCode.length === 0))) {\r\n return false;\r\n }\r\n\r\n $scope.ignorePORequired = true;\r\n\r\n AtlasModalFactory.close('divConsignmentMissingFieldsConfirmation');\r\n\r\n if ($scope.isFrequentConsignment) {\r\n $scope.openFrequentConsignmentSettings();\r\n }\r\n else {\r\n $scope.saveConsignment();\r\n }\r\n }\r\n\r\n $scope.saveConsignment = function () {\r\n $scope.manifestSuppliers = [];\r\n\r\n if (($scope.consignmentForm.txtConsignment_Customer && $scope.consignmentForm.txtConsignment_Customer.$invalid) || $scope.consignmentForm.txtConsignment_ContactName.$invalid || $scope.consignmentForm.ddlConsignment_VehicleType.$invalid) {\r\n $scope.ConsignmentDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.SaveContact) {\r\n var contactNameAlreadyExists = false;\r\n\r\n for (var j = 0; j < $scope.selectedCustomer.Contacts.length; j++) {\r\n if ($scope.consignment.BookingContact !== null) {\r\n if ($scope.consignment.BookingContact.Id !== $scope.selectedCustomer.Contacts[j].Id) {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n }\r\n\r\n var foundScheduledDateTime = false;\r\n var hasCollectionAddress = false;\r\n var hasDeliveryAddress = false;\r\n\r\n if ($scope.consignmentForm.txtConsignment_Price.$invalid) return false;\r\n\r\n $scope.isFrequentConsignment = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length < 2) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection') hasCollectionAddress = true;\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Delivery') hasDeliveryAddress = true;\r\n }\r\n\r\n if (!hasCollectionAddress || !hasDeliveryAddress) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n $scope.MissingCollectionOrDeliveryAddress = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.CalculateTimes) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime) {\r\n foundScheduledDateTime = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!foundScheduledDateTime) {\r\n $scope.errorMessage = 'Please make sure that at least one of the consignment addresses has a date and time specified';\r\n return false;\r\n }\r\n }\r\n else {\r\n foundScheduledDateTime = true;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if (!$scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime) {\r\n foundScheduledDateTime = false;\r\n break;\r\n }\r\n }\r\n\r\n if (!foundScheduledDateTime) {\r\n $scope.errorMessage = 'Please make sure that all consignment addresses have a date and time specified';\r\n return false;\r\n }\r\n }\r\n\r\n var existingConsignment = ($scope.consignment.Id) ? true : false;\r\n\r\n if (($scope.selectedCustomer.InvoiceSettings[0].IsPONumberRequired && !$scope.ignorePORequired && ($scope.consignment.PONumber === '' || $scope.consignment.PONumber == null)) || ($scope.selectedCustomer && $scope.selectedCustomer.OptionalConsignmentFields && $scope.selectedCustomer.OptionalConsignmentFields.length > 0 && $scope.selectedCustomer.OptionalConsignmentFields[0] && $scope.selectedCustomer.OptionalConsignmentFields[0].ShowCostCode && ($scope.consignment.CostCode === '' || $scope.consignment.CostCode == null))) {\r\n AtlasModalFactory.open('divConsignmentMissingFieldsConfirmation');\r\n return false;\r\n }\r\n\r\n var startConsignmentAddress = $scope.consignment.ConsignmentAddresses[0];\r\n //var endConsignmentAddress = $scope.consignment.ConsignmentAddresses[$scope.consignment.ConsignmentAddresses.length - 1];\r\n\r\n //if (moment(endConsignmentAddress.ScheduledStartDateAndTime.format()).isSame(moment(startConsignmentAddress.ScheduledStartDateAndTime.format())) || moment(endConsignmentAddress.ScheduledStartDateAndTime.format()).isBefore(moment(startConsignmentAddress.ScheduledStartDateAndTime.format()))) {\r\n // $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the start date and time cannot be the same or before as the end date and time)';\r\n // return false;\r\n //}\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length - 1; i++) {\r\n var consignmentAddress = $scope.consignment.ConsignmentAddresses[i];\r\n var nextConsignmentAddress = $scope.consignment.ConsignmentAddresses[(i + 1)];\r\n\r\n if (moment(nextConsignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm').isBefore(moment(consignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm'))) {\r\n $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the next date and time cannot be the same or before as the previous date and time)';\r\n return false;\r\n }\r\n /*\r\n REMOVED AS PER JIRA ITEM ACE-215\r\n */\r\n //else if (moment(nextConsignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm').isSame(moment(consignmentAddress.ScheduledStartDateAndTime.format('DD/MM/YYYY HH:mm'), 'DD/MM/YYYY HH:mm'))) {\r\n // if (!angular.equals(consignmentAddress.Address, nextConsignmentAddress.Address)){\r\n // $scope.errorMessage = 'Please make sure that all consignment addresses have a correct date and time (the next date and time can be the same as the before as the previous date and time, but the addresses must match)';\r\n // return false;\r\n // }\r\n //}\r\n }\r\n\r\n if ($scope.consignment.Id && $scope.consignment.IsQuote && !$scope.consignmentToQuoteWarningCompleted) {\r\n AtlasModalFactory.open('divConsignmentQuoteToConsignmentWarning');\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.Id && $scope.consignment.IsQuote && $scope.consignmentToQuoteWarningCompleted) {\r\n AtlasModalFactory.close('divConsignmentQuoteToConsignmentWarning');\r\n }\r\n\r\n if (!$scope.consignment.Id && !$scope.consignmentBackdatedWarningCompleted && moment(startConsignmentAddress.ScheduledStartDateAndTime.format()).isBefore(moment().format())) {\r\n AtlasModalFactory.open('divConsignmentBackdatedConsignmentWarning');\r\n return false;\r\n }\r\n\r\n if (!$scope.consignment.Id && $scope.consignmentBackdatedWarningCompleted && moment(startConsignmentAddress.ScheduledStartDateAndTime.format()).isBefore(moment().format())) {\r\n AtlasModalFactory.close('divConsignmentBackdatedConsignmentWarning');\r\n }\r\n\r\n $scope.savingConsignment = true;\r\n $scope.consignment.IsQuote = false;\r\n $scope.consignment.IsFrequentConsignment = false;\r\n $scope.creatingManifest = false;\r\n $scope.manifest = null;\r\n $scope.errorMessage = null;\r\n\r\n //FoundationApi.publish('divConsignmentConfirmation', 'open');\r\n //return false;\r\n\r\n ConsignmentFactory.saveConsignment($scope.consignment)\r\n .then(\r\n function (consignment) {\r\n $scope.consignmentForm.$setPristine();\r\n $scope.consignmentForm.$setUntouched();\r\n\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.savingConsignment = false;\r\n $scope.existingConsignment = existingConsignment;\r\n $scope.loadingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignment.RecommendedPrice = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n $scope.consignment.Price = $filter('number')($scope.consignment.Price, 2);\r\n $scope.selectedCustomer = $scope.consignment.Customer;\r\n $scope.existingAddresses = [];\r\n\r\n $rootScope.$emit('title-updated', 'Consignment ' + $scope.consignment.ConsignmentNumber);\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.Address != null) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Address);\r\n }\r\n if ($scope.selectedCustomer.Addresses != null) {\r\n for (var i = 0; i < $scope.selectedCustomer.Addresses.length; i++) {\r\n if ($scope.selectedCustomer.Addresses[i].Id != $scope.selectedCustomer.Address.Id) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Addresses[i]);\r\n }\r\n }\r\n }\r\n $scope.consignment.Customer = {\r\n 'Id': $scope.selectedCustomer.Id,\r\n 'Name': $scope.selectedCustomer.Name,\r\n 'NameShownOnInvoice': $scope.selectedCustomer.NameShownOnInvoice,\r\n 'PhoneNumber': $scope.selectedCustomer.PhoneNumber,\r\n 'CostCentre': $scope.selectedCustomer.CostCentre,\r\n 'AccountType': $scope.selectedCustomer.AccountType,\r\n 'Addresses': $scope.selectedCustomer.Addresses,\r\n 'AutoEmailOnCreate': $scope.selectedCustomer.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': $scope.selectedCustomer.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': $scope.selectedCustomer.AutoEmailOnDelivery,\r\n 'UseContactEmail': c.UseContactEmail,\r\n 'BookingEmailAddress': c.BookingEmailAddress\r\n };\r\n\r\n var unassignedConsignmentAddress = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n }\r\n\r\n var manifestAlreadyAdded = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses[i].Manifest) {\r\n unassignedConsignmentAddress = true;\r\n }\r\n else {\r\n $scope.consignmentHasManifests = true;\r\n\r\n for (var m = 0; m < $scope.consignmentManifests.length; m++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest.Id === $scope.consignmentManifests[m].Id) manifestAlreadyAdded = true;\r\n }\r\n\r\n if (!manifestAlreadyAdded) $scope.consignmentManifests.push($scope.consignment.ConsignmentAddresses[i].Manifest);\r\n }\r\n }\r\n\r\n if (!unassignedConsignmentAddress && $scope.consignmentManifests.length === 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentManifests[0].NumberOfConsignmentAddresses) {\r\n $scope.consignmentManifestOneToOneRelationship = true;\r\n }\r\n\r\n //$timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n\r\n //}, 1000);\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n\r\n if (ConsignmentFactory.copyConsignmentId) {\r\n delete $scope.consignment.Id;\r\n delete $scope.consignment.ConsignmentNumber;\r\n delete $scope.consignment.ConsignmentReference;\r\n delete $scope.consignment.ChangeLogs;\r\n delete $scope.consignment.Supplier;\r\n delete $scope.consignment.InvoiceDate;\r\n delete $scope.consignment.InvoiceNumber;\r\n delete $scope.consignment.DateCreated;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].Id;\r\n delete $scope.consignment.ConsignmentAddresses[i].Manifest;\r\n delete $scope.consignment.ConsignmentAddresses[i].LoadDetails;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsOnRoute;\r\n delete $scope.consignment.ConsignmentAddresses[i].StartTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].HasArrived;\r\n delete $scope.consignment.ConsignmentAddresses[i].ArrivalTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsCompleted;\r\n delete $scope.consignment.ConsignmentAddresses[i].CompletionTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].NotesFromSupplier;\r\n delete $scope.consignment.ConsignmentAddresses[i].SignatureName;\r\n delete $scope.consignment.ConsignmentAddresses[i].Signature_FileName;\r\n delete $scope.consignment.ConsignmentAddresses[i].RowVersion;\r\n\r\n //for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n // delete $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].Id;\r\n //}\r\n }\r\n\r\n ConsignmentFactory.copyConsignmentId = null;\r\n }\r\n\r\n if ($scope.consignmentToQuoteWarningCompleted) updateCosting();\r\n\r\n $scope.consignmentToQuoteWarningCompleted = false;\r\n $scope.consignmentBackdatedWarningCompleted = false;\r\n \r\n $scope.consignmentForm.$setPristine();\r\n\r\n $scope.consignmentConfirmationOpen = true;\r\n AtlasModalFactory.open('divConsignmentConfirmation');\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.savingConsignment = false;\r\n \r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.closeConsignmentQuoteToConsignmentWarningModal = function () {\r\n AtlasModalFactory.close('divConsignmentQuoteToConsignmentWarning');\r\n }\r\n\r\n $scope.closeConsignmentBackdatedConsignmentWarningModal = function () {\r\n AtlasModalFactory.close('divConsignmentBackdatedConsignmentWarning');\r\n\t}\r\n\r\n $scope.markConsignmentToQuoteWarningCompleted = function () {\r\n $scope.consignmentToQuoteWarningCompleted = true;\r\n\r\n $scope.saveConsignment();\r\n }\r\n\r\n $scope.markConsignmentBackdatedWarningCompleted = function () {\r\n $scope.consignmentBackdatedWarningCompleted = true;\r\n\r\n $scope.saveConsignment();\r\n }\r\n\r\n $scope.openFrequentConsignmentSettings = function () {\r\n $scope.isFrequentConsignment = true;\r\n var hasCollectionAddress = false;\r\n var hasDeliveryAddress = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses || $scope.consignment.ConsignmentAddresses.length < 2) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Collection') hasCollectionAddress = true;\r\n if ($scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType && $scope.consignment.ConsignmentAddresses[i].ConsignmentAddressType.Name === 'Delivery') hasDeliveryAddress = true;\r\n }\r\n\r\n if (!hasCollectionAddress || !hasDeliveryAddress) {\r\n $scope.ConsignmentFormSubmitted = true;\r\n $scope.MissingCollectionOrDeliveryAddress = true;\r\n return false;\r\n }\r\n\r\n var existingConsignment = ($scope.consignment.Id) ? true : false;\r\n\r\n if ($scope.selectedCustomer.InvoiceSettings[0].IsPONumberRequired && !$scope.ignorePORequired && ($scope.consignment.PONumber === '' || $scope.consignment.PONumber == null)) {\r\n AtlasModalFactory.open('divConsignmentMissingFieldsConfirmation');\r\n return false;\r\n }\r\n\r\n AtlasModalFactory.open('divFrequentConsignment');\r\n return false; \r\n }\r\n\r\n $scope.closeConsignmentMissingFieldsConfirmationModal = function () {\r\n AtlasModalFactory.close('divConsignmentMissingFieldsConfirmation');\r\n\t}\r\n\r\n $scope.closeFrequentConsignmentModal = function () {\r\n AtlasModalFactory.close('divFrequentConsignment');\r\n\t}\r\n\r\n $scope.saveFrequentConsignment = function () {\r\n $scope.manifestSuppliers = [];\r\n\r\n if (($scope.consignmentForm.txtConsignment_Customer && $scope.consignmentForm.txtConsignment_Customer.$invalid) || $scope.consignmentForm.txtConsignment_ContactName.$invalid || $scope.consignmentForm.ddlConsignment_VehicleType.$invalid) {\r\n $scope.ConsignmentDetailsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.consignment.SaveContact) {\r\n var contactNameAlreadyExists = false;\r\n\r\n for (var j = 0; j < $scope.selectedCustomer.Contacts.length; j++) {\r\n if ($scope.consignment.BookingContact !== null) {\r\n if ($scope.consignment.BookingContact.Id !== $scope.selectedCustomer.Contacts[j].Id) {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.consignment.ContactName.trim().toUpperCase() === $scope.selectedCustomer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n }\r\n\r\n $scope.savingConsignment = true;\r\n $scope.consignment.IsQuote = false;\r\n $scope.consignment.IsFrequentConsignment = true;\r\n $scope.consignmentFrequencySettings.WeekDays = [];\r\n\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n if ($scope.weekdays[i].selected) {\r\n $scope.consignmentFrequencySettings.WeekDays.push($scope.weekdays[i]);\r\n }\r\n }\r\n\r\n $scope.consignment.ConsignmentFrequencySettings = [];\r\n $scope.consignment.ConsignmentFrequencySettings.push($scope.consignmentFrequencySettings);\r\n $scope.errorMessage = null;\r\n\r\n AtlasModalFactory.close('divFrequentConsignment');\r\n\r\n ConsignmentFactory.saveConsignment($scope.consignment)\r\n .then(\r\n function (consignment) {\r\n $scope.consignmentForm.$setPristine();\r\n $scope.consignmentForm.$setUntouched();\r\n\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.savingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.consignmentForm.$setPristine();\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.savingConsignment = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.deleteConsignment = function () {\r\n $scope.deletingConsignment = true;\r\n $scope.errorMessage = null;\r\n\r\n AtlasModalFactory.close('divDeleteConsignmentConfirmation');\r\n\r\n ConsignmentFactory.deleteConsignment()\r\n .then(\r\n function (consignment) {\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.deletingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n },\r\n function (response) {\r\n $scope.deletingConsignment = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.deletingConsignment = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.openDeleteConsignmentConfirmationModal = function () {\r\n AtlasModalFactory.open('divDeleteConsignmentConfirmation');\r\n }\r\n\r\n $scope.closeDeleteConsignmentConfirmationModal = function () {\r\n AtlasModalFactory.close('divDeleteConsignmentConfirmation');\r\n\t}\r\n\r\n $scope.consignmentHasManifest = function (consignment) {\r\n var consignmentHasManifest = false;\r\n\r\n if ($scope.consignment) {\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest != null) {\r\n consignmentHasManifest = true;\r\n break;\r\n }\r\n }\r\n } \r\n\r\n return consignmentHasManifest;\r\n }\r\n\r\n $scope.createManifest = function () {\r\n $scope.creatingManifest = true;\r\n var locations = $scope.consignmentMap.getLocations();\r\n var totalDistance = $scope.consignmentMap.getTotalDistance() / 1609.34;\r\n var totalTime = 0;\r\n\r\n $scope.consignmentManifestOneToOneRelationship = true;\r\n\r\n if ($scope.consignment.CreatedBy && $scope.consignment.CreatedBy.Role === AtlasCourierExpress.Enums.Roles.Customer) AtlasModalFactory.close('divCustomerEmail');\r\n\r\n $scope.manifest = ManifestFactory.createNewManifest($scope.consignment.VehicleType, $scope.consignment.ConsignmentAddresses, $scope.consignment.TotalMiles, $scope.consignment.TotalTimeInMinutes);\r\n\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n //$scope.manifest.ConsignmentAddresses[i].ManifestOrder = (i + 1) * 10;\r\n $scope.manifest.ConsignmentAddresses[i].ManifestOrder = $scope.manifest.ConsignmentAddresses[i].ConsignmentOrder;\r\n $scope.manifest.ConsignmentAddresses[i].Consignment = { Id: $scope.consignment.Id };\r\n }\r\n\r\n if ($scope.consignment.Id && !$scope.consignmentManifestOneToOneRelationship) {\r\n var calculatedCost = 0;\r\n\r\n for (var i = 0; i < $scope.selectedCustomer.Matrices.length; i++) {\r\n if ($scope.manifest.VehicleType.Id == $scope.selectedCustomer.Matrices[i].VehicleType.Id && $scope.selectedCustomer.Matrices[i].MatrixType.Name.toUpperCase() == 'COSTING - SUPPLIER') {\r\n if ($scope.selectedCustomer.Matrices[i].MatrixPriceIncrement.Name.toUpperCase() == 'DISTANCE') {\r\n for (var p = 0; p < $scope.selectedCustomer.Matrices[i].PriceMatrices.length; p++) {\r\n if (totalDistance > $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) {\r\n if (totalDistance > $scope.selectedCustomer.Matrices[i].PriceMatrices[p].To) {\r\n calculatedCost += (($scope.selectedCustomer.Matrices[i].PriceMatrices[p].To - $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) / $scope.selectedCustomer.Matrices[i].PriceMatrices[p].Interval) * $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n else {\r\n calculatedCost += ((totalDistance - $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) / $scope.selectedCustomer.Matrices[i].PriceMatrices[p].Interval) * $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < $scope.selectedCustomer.Matrices[i].PriceMatrices.length; p++) {\r\n if (totalTime > $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) {\r\n //if (totalTime > $scope.selectedCustomer.Matrices[i].PriceMatrices[p].To) {\r\n // calculatedCost += (($scope.selectedCustomer.Matrices[i].PriceMatrices[p].To - $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) / $scope.selectedCustomer.Matrices[i].PriceMatrices[p].Interval) * $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n //}\r\n //else {\r\n // calculatedCost += ((totalTime - $scope.selectedCustomer.Matrices[i].PriceMatrices[p].From) / $scope.selectedCustomer.Matrices[i].PriceMatrices[p].Interval) * $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n //}\r\n calculatedCost += $scope.selectedCustomer.Matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n if (calculatedCost < $scope.selectedCustomer.Matrices[i].MinimumPrice) {\r\n calculatedCost = $scope.selectedCustomer.Matrices[i].MinimumPrice;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.manifest.ConsignmentAddresses) {\r\n for (var a = 0; a < $scope.manifest.ConsignmentAddresses.length; a++) {\r\n if ($scope.manifest.ConsignmentAddresses[a].AdditionalCharges) {\r\n for (var c = 0; c < $scope.manifest.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n calculatedCost += $scope.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Cost;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.manifest.CalculatedCost = $filter('number')(calculatedCost, 2);\r\n $scope.manifest.Cost = $filter('number')(calculatedCost, 2);\r\n }\r\n else {\r\n $scope.manifest.CalculatedCost = $filter('number')($scope.consignment.RecommendedCost, 2);\r\n $scope.manifest.Cost = $filter('number')($scope.consignment.Cost, 2);\r\n }\r\n \r\n\r\n // NOT SURE WHY, BUT THE CUSTOMER MESSAGE IS ONLY AVAILABLE ON 'THIS', RATHER THAN $SCOPE?!\r\n var customerMessage = this.customerMessage;\r\n\r\n ManifestFactory.saveManifest(customerMessage)\r\n .then(\r\n function (manifest) {\r\n $scope.creatingManifest = false;\r\n $scope.manifest = manifest;\r\n\r\n ConsignmentFactory.getConsignment($scope.consignment.Id)\r\n .then(\r\n function () {\r\n $scope.savingConsignment = false;\r\n $scope.existingConsignment = true;\r\n $scope.loadingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignment.RecommendedPrice = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n $scope.consignment.Price = $filter('number')($scope.consignment.Price, 2);\r\n $scope.selectedCustomer = $scope.consignment.Customer;\r\n $scope.existingAddresses = [];\r\n\r\n $rootScope.$emit('title-updated', 'Consignment ' + $scope.consignment.ConsignmentNumber);\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.Address != null) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Address);\r\n }\r\n if ($scope.selectedCustomer.Addresses != null) {\r\n for (var i = 0; i < $scope.selectedCustomer.Addresses.length; i++) {\r\n if ($scope.selectedCustomer.Addresses[i].Id != $scope.selectedCustomer.Address.Id) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Addresses[i]);\r\n }\r\n }\r\n }\r\n $scope.consignment.Customer = {\r\n 'Id': $scope.selectedCustomer.Id,\r\n 'Name': $scope.selectedCustomer.Name,\r\n 'NameShownOnInvoice': $scope.selectedCustomer.NameShownOnInvoice,\r\n 'PhoneNumber': $scope.selectedCustomer.PhoneNumber,\r\n 'CostCentre': $scope.selectedCustomer.CostCentre,\r\n 'AccountType': $scope.selectedCustomer.AccountType,\r\n 'Addresses': $scope.selectedCustomer.Addresses,\r\n 'AutoEmailOnCreate': $scope.selectedCustomer.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': $scope.selectedCustomer.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': $scope.selectedCustomer.AutoEmailOnDelivery,\r\n 'UseContactEmail': $scope.selectedCustomer.UseContactEmail,\r\n 'BookingEmailAddress': $scope.selectedCustomer.BookingEmailAddress\r\n };\r\n\r\n var unassignedConsignmentAddress = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n\r\n if ($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartToTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartToDateAndTime);\r\n }\r\n\r\n var manifestAlreadyAdded = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses[i].Manifest) {\r\n unassignedConsignmentAddress = true;\r\n }\r\n else {\r\n $scope.consignmentHasManifests = true;\r\n\r\n for (var m = 0; m < $scope.consignmentManifests.length; m++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest.Id === $scope.consignmentManifests[m].Id) manifestAlreadyAdded = true;\r\n }\r\n\r\n if (!manifestAlreadyAdded) $scope.consignmentManifests.push($scope.consignment.ConsignmentAddresses[i].Manifest);\r\n }\r\n }\r\n\r\n if (!unassignedConsignmentAddress && $scope.consignmentManifests.length === 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentManifests[0].NumberOfConsignmentAddresses) $scope.consignmentManifestOneToOneRelationship = true;\r\n\r\n //$timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n\r\n //}, 1000);\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (ConsignmentFactory.copyConsignmentId) {\r\n delete $scope.consignment.Id;\r\n delete $scope.consignment.ConsignmentNumber;\r\n delete $scope.consignment.ConsignmentReference;\r\n delete $scope.consignment.ChangeLogs;\r\n delete $scope.consignment.Supplier;\r\n delete $scope.consignment.InvoiceDate;\r\n delete $scope.consignment.InvoiceNumber;\r\n delete $scope.consignment.DateCreated;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].Id;\r\n delete $scope.consignment.ConsignmentAddresses[i].Manifest;\r\n delete $scope.consignment.ConsignmentAddresses[i].LoadDetails;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsOnRoute;\r\n delete $scope.consignment.ConsignmentAddresses[i].StartTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].HasArrived;\r\n delete $scope.consignment.ConsignmentAddresses[i].ArrivalTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsCompleted;\r\n delete $scope.consignment.ConsignmentAddresses[i].CompletionTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].NotesFromSupplier;\r\n delete $scope.consignment.ConsignmentAddresses[i].SignatureName;\r\n delete $scope.consignment.ConsignmentAddresses[i].Signature_FileName;\r\n delete $scope.consignment.ConsignmentAddresses[i].RowVersion;\r\n\r\n //for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n // delete $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].Id;\r\n //}\r\n }\r\n\r\n ConsignmentFactory.copyConsignmentId = null;\r\n }\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n $scope.errorMessage = null;\r\n\r\n if ($stateParams.id.length > 0 && !$scope.consignmentConfirmationOpen) {\r\n AtlasModalFactory.open('divManifestConfirmation');\r\n }\r\n },\r\n function (response) {\r\n $scope.creatingManifest = false;\r\n \r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = response.data.Message;\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n } \r\n\r\n $scope.closeDeleteConsignmentConfirmationModal = function(){\r\n AtlasModalFactory.close('divDeleteConsignmentConfirmation');\r\n }\r\n\r\n $scope.closeConsignmentAddressSignatureModal = function () {\r\n AtlasModalFactory.close('divConsignmentAddressSignature');\r\n\t}\r\n\r\n $scope.editManifest = function () {\r\n $state.go('manifest', { 'id': $scope.manifest.Id });\r\n }\r\n\r\n $scope.updateManifestCost = function () {\r\n $scope.updatingManifest = true; \r\n\r\n var manifest = $scope.consignment.ConsignmentAddresses[0].Manifest;\r\n\r\n manifest.CalculatedCost = $filter('number')($scope.consignment.RecommendedCost, 2);\r\n manifest.Cost = $filter('number')($scope.consignment.Cost, 2);\r\n\r\n ManifestFactory.updateManifestCost(manifest)\r\n .then(\r\n function(){\r\n $scope.updatingManifest = false;\r\n $scope.manifestUpdated = true;\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.checkCreateManifestCustomerMessage = function () {\r\n if (!$scope.consignment.CreatedBy || $scope.consignment.CreatedBy.Role !== AtlasCourierExpress.Enums.Roles.Customer) {\r\n $scope.createManifest();\r\n }\r\n else{\r\n AtlasModalFactory.open('divCustomerEmail');\r\n }\r\n }\r\n\r\n $scope.closeCustomerEmailModal = function () {\r\n AtlasModalFactory.close('divCustomerEmail');\r\n\t}\r\n\r\n $scope.getManifestConsignmentNumbers = function(){\r\n return ManifestFactory.getConsignmentNumbers();\r\n }\r\n\r\n $scope.getSupplierManifestOptionText = function (s) {\r\n var text = '';\r\n\r\n text += s.Name + ' - ' + s.Vehicles[0].Make + '/' + s.Vehicles[0].Model + ' (' + s.Vehicles[0].VehicleType.Name + ')';\r\n\r\n return text;\r\n }\r\n\r\n $scope.selectSupplier = function (s) {\r\n $scope.selectedSupplier = s;\r\n }\r\n\r\n $scope.assignSupplier = function () {\r\n if (!$scope.selectedSupplier) {\r\n $scope.errorMessage = 'No supplier selected';\r\n return false;\r\n }\r\n\r\n $scope.assigningSupplier = true;\r\n $scope.errorMessage = null;\r\n\r\n ManifestFactory.manifest.Supplier = $scope.selectedSupplier;\r\n $scope.manifest.Supplier = $scope.selectedSupplier;\r\n\r\n ManifestFactory.saveManifest()\r\n .then(\r\n function (manifest) {\r\n $scope.assigningSupplier = false;\r\n $scope.errorMessage = null;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.errorMessage = 'An error has occurred.'\r\n }\r\n );\r\n }\r\n\r\n $scope.getReport = function () {\r\n $scope.showReportOptions = true;\r\n $scope.showReport = false;\r\n $scope.showEmailDetailsForReport = false;\r\n\r\n AtlasModalFactory.open('divConsignmentReport');\r\n\r\n //ConsignmentFactory.getReport($scope.consignment.Id)\r\n // .then(\r\n // function (response) {\r\n // var filename = 'Report.pdf';\r\n // var contentDisposition = response.headers('Content-Disposition').split(';');\r\n // for (var i = 0; i < contentDisposition.length; i++) {\r\n // if (contentDisposition[i].indexOf('filename') >= 0) {\r\n // var parts = contentDisposition[i].split('=');\r\n // filename = parts[1].replace('\"', '');\r\n // }\r\n // }\r\n // var file = new Blob([response.data], { type: 'application/pdf' });\r\n // var fileURL = window.URL.createObjectURL(file);\r\n // $scope.report = $sce.trustAsResourceUrl(fileURL);\r\n // //var link = document.createElement('a');\r\n // //angular.element(link)\r\n // // .attr('href', fileURL)\r\n // // //.attr('download', filename)\r\n // // .attr('target', '_blank')\r\n // //link.click();\r\n // },\r\n // function (response) {\r\n // debugger;\r\n // }\r\n // );\r\n }\r\n\r\n $scope.generateReport = function () {\r\n $scope.showReportOptions = false;\r\n $scope.showReport = true;\r\n\r\n ConsignmentFactory.getReport($scope.consignment.Id, $scope.emailReport.ShowPrice, $scope.emailReport.ShowPhotos, $scope.emailReport.ShowSupplierNotes)\r\n .then(\r\n function (response) {\r\n var filename = 'Report.pdf';\r\n var contentDisposition = response.headers('Content-Disposition').split(';');\r\n for (var i = 0; i < contentDisposition.length; i++) {\r\n if (contentDisposition[i].indexOf('filename') >= 0) {\r\n var parts = contentDisposition[i].split('=');\r\n filename = parts[1].replace('\"', '');\r\n }\r\n }\r\n var file = new Blob([response.data], { type: 'application/pdf' });\r\n var fileURL = window.URL.createObjectURL(file);\r\n $scope.report = $sce.trustAsResourceUrl(fileURL);\r\n //var link = document.createElement('a');\r\n //angular.element(link)\r\n // .attr('href', fileURL)\r\n // //.attr('download', filename)\r\n // .attr('target', '_blank')\r\n //link.click();\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.closeConsignmentReportModal = function () {\r\n AtlasModalFactory.close('divConsignmentReport');\r\n\t}\r\n\r\n $scope.showEmailReportDetails = function () {\r\n $scope.showReport = false;\r\n $scope.showEmailDetailsForReport = true;\r\n }\r\n\r\n $scope.sendReportEmail = function () {\r\n $scope.reportEmailErrorMessage = null;\r\n\r\n ConsignmentFactory.sendReportEmail($scope.emailReport.To, $scope.emailReport.Body, $scope.consignment, $scope.emailReport.ShowPrice, $scope.emailReport.ShowPhotos, $scope.emailReport.ShowSupplierNotes);\r\n\r\n AtlasModalFactory.close('divConsignmentReport');\r\n }\r\n\r\n $scope.selectEmailReportTo = function () {\r\n if ($scope.emailReport.ExistingContact) {\r\n if ($scope.emailReport.ExistingContact.Id != '-1') $scope.emailReport.To = $scope.emailReport.ExistingContact.Email;\r\n if ($scope.emailReport.ExistingContact.Id === '-1') $scope.emailReport.To = '';\r\n }\r\n }\r\n\r\n $scope.setToRecommendedPrice = function () {\r\n $scope.consignment.Price = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n }\r\n\r\n $scope.addAdditionalMiscChargeRow = function () {\r\n if (!$scope.consignment.AdditionalCharges) $scope.consignment.AdditionalCharges = [];\r\n\r\n $scope.consignment.AdditionalCharges.push({ Description: '', Cost: $filter('number')(0, 2), Price: $filter('number')(0, 2) });\r\n }\r\n\r\n $scope.removeAdditionalMiscChargeRow = function (index) {\r\n $scope.consignment.RecommendedPrice = $filter('number')(parseFloat($scope.consignment.RecommendedPrice) - $scope.consignment.AdditionalCharges[index].Price, 2);\r\n $scope.consignment.Price = $filter('number')(parseFloat($scope.consignment.Price) - $scope.consignment.AdditionalCharges[index].Price, 2);\r\n\r\n //$scope.calculatedCost = $filter('number')(parseFloat($scope.calculatedCost) - $scope.consignment.AdditionalCharges[index].Cost, 2);\r\n //$scope.cost = $filter('number')(parseFloat($scope.cost) - $scope.consignment.AdditionalCharges[index].Cost, 2);\r\n\r\n $scope.consignment.AdditionalCharges.splice(index, 1);\r\n }\r\n\r\n $scope.changeAdditionalChargePrice = function (newPrice, oldPrice) {\r\n var priceDifference = (parseFloat(newPrice.Price) ? parseFloat(newPrice.Price) : 0) - (parseFloat(oldPrice) ? parseFloat(oldPrice) : 0);\r\n\r\n $scope.consignment.RecommendedPrice = $filter('number') (parseFloat($scope.consignment.RecommendedPrice) + priceDifference, 2);\r\n $scope.consignment.Price = $filter('number')(parseFloat($scope.consignment.Price) + priceDifference, 2);\r\n }\r\n\r\n //$scope.changeAdditionalChargeCost = function (newPrice, oldPrice) {\r\n // var priceDifference = (parseFloat(newPrice.Cost) ? parseFloat(newPrice.Cost) : 0) - (parseFloat(oldPrice) ? parseFloat(oldPrice) : 0);\r\n\r\n // $scope.calculatedCost = $filter('number')(parseFloat($scope.calculatedCost) + priceDifference, 2);\r\n // $scope.cost = $filter('number')(parseFloat($scope.cost) + priceDifference, 2);\r\n //}\r\n\r\n $scope.changeCost = function () {\r\n $scope.costsChanged = true;\r\n }\r\n\r\n $scope.showSignature = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n AtlasModalFactory.open('divConsignmentAddressSignature');\r\n }\r\n\r\n $scope.showGoodsPhotos = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n $scope.goodsPhotos = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.GoodsPhotos.length; i += 3) {\r\n $scope.goodsPhotos.push($scope.consignmentAddress.GoodsPhotos.slice(i, i + 3));\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentAddressGoodsPhotos');\r\n }\r\n\r\n $scope.closeConsignmentAddressGoodsPhotos = function () {\r\n AtlasModalFactory.close('divConsignmentAddressGoodsPhotos');\r\n }\r\n\r\n $scope.showPaperworkPhotos = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n $scope.paperworkPhotos = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.PaperworkPhotos.length; i += 3) {\r\n $scope.paperworkPhotos.push($scope.consignmentAddress.PaperworkPhotos.slice(i, i + 3));\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentAddressPaperworkPhotos');\r\n }\r\n\r\n $scope.closeConsignmentAddressPaperworkPhotos = function () {\r\n AtlasModalFactory.close('divConsignmentAddressPaperworkPhotos');\r\n }\r\n\r\n $scope.duplicateConsignment = function () {\r\n ConsignmentFactory.copyConsignmentId = $scope.consignment.Id;\r\n\r\n $state.go(\"consignment\", { id: null }, { location: true, reload: true });\r\n }\r\n\r\n $scope.openChangeLogModal = function(){\r\n AtlasModalFactory.open('divConsignmentChangeLog');\r\n }\r\n\r\n $scope.closeConsignmentChangeLogModal = function () {\r\n AtlasModalFactory.close('divConsignmentChangeLog');\r\n\t}\r\n\r\n $scope.requestCancellation = function () {\r\n $scope.requestingConsignmentCancellation = true;\r\n $scope.errorMessage = null;\r\n\r\n ConsignmentFactory.cancellationRequest($scope.consignment)\r\n .then(\r\n function (consignment) {\r\n $scope.consignmentForm.$setPristine();\r\n $scope.consignmentForm.$setUntouched();\r\n\r\n ConsignmentFactory.getConsignment(consignment.Id)\r\n .then(\r\n function () {\r\n $scope.requestingConsignmentCancellation = false;\r\n $scope.loadingConsignment = false;\r\n $scope.consignment = ConsignmentFactory.consignment;\r\n $scope.consignment.RecommendedPrice = $filter('number')($scope.consignment.RecommendedPrice, 2);\r\n $scope.consignment.Price = $filter('number')($scope.consignment.Price, 2);\r\n $scope.selectedCustomer = $scope.consignment.Customer;\r\n $scope.existingAddresses = [];\r\n\r\n $rootScope.$emit('title-updated', 'Consignment ' + $scope.consignment.ConsignmentNumber);\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.OnStop) {\r\n $scope.selectedCustomerOnStop = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.AccountType.Id.toUpperCase() === $scope.customerAccountTypesEnums.ProFormaAccountCustomer) {\r\n $scope.selectedCustomerIsProFormaAccountCustomer = true;\r\n }\r\n\r\n if ($scope.selectedCustomer.Address != null) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Address);\r\n }\r\n if ($scope.selectedCustomer.Addresses != null) {\r\n for (var i = 0; i < $scope.selectedCustomer.Addresses.length; i++) {\r\n if ($scope.selectedCustomer.Addresses[i].Id != $scope.selectedCustomer.Address.Id) {\r\n $scope.existingAddresses.push($scope.selectedCustomer.Addresses[i]);\r\n }\r\n }\r\n }\r\n $scope.consignment.Customer = {\r\n 'Id': $scope.selectedCustomer.Id,\r\n 'Name': $scope.selectedCustomer.Name,\r\n 'NameShownOnInvoice': $scope.selectedCustomer.NameShownOnInvoice,\r\n 'PhoneNumber': $scope.selectedCustomer.PhoneNumber,\r\n 'CostCentre': $scope.selectedCustomer.CostCentre,\r\n 'AccountType': $scope.selectedCustomer.AccountType,\r\n 'Addresses': $scope.selectedCustomer.Addresses,\r\n 'AutoEmailOnCreate': $scope.selectedCustomer.AutoEmailOnCreate,\r\n 'AutoEmailOnCollection': $scope.selectedCustomer.AutoEmailOnCollection,\r\n 'AutoEmailOnDelivery': $scope.selectedCustomer.AutoEmailOnDelivery,\r\n 'UseContactEmail': c.UseContactEmail,\r\n 'BookingEmailAddress': c.BookingEmailAddress\r\n };\r\n\r\n var unassignedConsignmentAddress = false;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDate = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime);\r\n\r\n var manifestAlreadyAdded = false;\r\n\r\n if (!$scope.consignment.ConsignmentAddresses[i].Manifest) {\r\n unassignedConsignmentAddress = true;\r\n }\r\n else {\r\n $scope.consignmentHasManifests = true;\r\n\r\n for (var m = 0; m < $scope.consignmentManifests.length; m++) {\r\n if ($scope.consignment.ConsignmentAddresses[i].Manifest.Id === $scope.consignmentManifests[m].Id) manifestAlreadyAdded = true;\r\n }\r\n\r\n if (!manifestAlreadyAdded) $scope.consignmentManifests.push($scope.consignment.ConsignmentAddresses[i].Manifest);\r\n }\r\n }\r\n\r\n if (!unassignedConsignmentAddress && $scope.consignmentManifests.length === 1 && $scope.consignment.ConsignmentAddresses.length === $scope.consignmentManifests[0].NumberOfConsignmentAddresses) $scope.consignmentManifestOneToOneRelationship = true;\r\n\r\n //$timeout(function () {\r\n // $scope.consignmentMap.triggerResize();\r\n\r\n // for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n // $scope.consignmentMap.addLocation(ConsignmentFactory.getFormattedConsignmentAddress(i), $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime, function () {\r\n // if ($scope.consignment.ConsignmentAddresses.length > 1) {\r\n // $scope.consignmentMap.getDirections();\r\n // }\r\n // });\r\n // }\r\n\r\n //}, 1000);\r\n\r\n if (ConsignmentFactory.consignment.IsFrequentConsignment && ConsignmentFactory.consignment.ConsignmentFrequencySettings && ConsignmentFactory.consignment.ConsignmentFrequencySettings[0]) {\r\n $scope.consignmentFrequencySettings = ConsignmentFactory.consignment.ConsignmentFrequencySettings[0];\r\n\r\n if ($scope.weekdays && $scope.consignmentFrequencySettings.WeekDays) {\r\n for (var i = 0; i < $scope.weekdays.length; i++) {\r\n for (var j = 0; j < $scope.consignmentFrequencySettings.WeekDays.length; j++) {\r\n if ($scope.weekdays[i].Id === $scope.consignmentFrequencySettings.WeekDays[j].Id) $scope.weekdays[i].selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.consignmentDisabled = ($scope.consignment.InvoiceStatus !== AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced || $scope.consignment.IsDeleted || ($scope.user.Role === $scope.roles.Customer && $scope.consignment.CancellationRequested));\r\n\r\n if (ConsignmentFactory.copyConsignmentId) {\r\n delete $scope.consignment.Id;\r\n delete $scope.consignment.ConsignmentNumber;\r\n delete $scope.consignment.ConsignmentReference;\r\n delete $scope.consignment.ChangeLogs;\r\n delete $scope.consignment.Supplier;\r\n delete $scope.consignment.InvoiceDate;\r\n delete $scope.consignment.InvoiceNumber;\r\n delete $scope.consignment.DateCreated;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].Id;\r\n delete $scope.consignment.ConsignmentAddresses[i].Manifest;\r\n delete $scope.consignment.ConsignmentAddresses[i].LoadDetails;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsOnRoute;\r\n delete $scope.consignment.ConsignmentAddresses[i].StartTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].HasArrived;\r\n delete $scope.consignment.ConsignmentAddresses[i].ArrivalTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsCompleted;\r\n delete $scope.consignment.ConsignmentAddresses[i].CompletionTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].NotesFromSupplier;\r\n delete $scope.consignment.ConsignmentAddresses[i].SignatureName;\r\n delete $scope.consignment.ConsignmentAddresses[i].Signature_FileName;\r\n delete $scope.consignment.ConsignmentAddresses[i].RowVersion;\r\n\r\n //for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n // delete $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].Id;\r\n //}\r\n }\r\n\r\n ConsignmentFactory.copyConsignmentId = null;\r\n }\r\n\r\n $scope.consignmentForm.$setPristine();\r\n\r\n AtlasModalFactory.open('divConsignmentRequestCancellationConfirmation');\r\n },\r\n function (response) {\r\n $scope.savingQuote = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.savingConsignment = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The consignment has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.closeConsignmentRequestCancellationConfirmationModal = function () {\r\n AtlasModalFactory.close('divConsignmentRequestCancellationConfirmation');\r\n\t}\r\n\r\n $scope.closeConsignmentConfirmation = function () {\r\n $scope.consignmentConfirmationOpen = false;\r\n AtlasModalFactory.close('divConsignmentConfirmation');\r\n }\r\n\r\n $scope.changeApplyPostcodePricingRules = function () {\r\n updateDistanceTimesAndPricing();\r\n updateCosting();\r\n }\r\n\r\n $scope.changeBackload = function () {\r\n updateDistanceTimesAndPricing();\r\n\r\n updateCosting();\r\n }\r\n\r\n $scope.showInvoicing = function () {\r\n $scope.showInvoicingSection = !$scope.showInvoicingSection;\r\n }\r\n\r\n function updateDistanceTimesAndPricing() {\r\n $timeout(function () {\r\n var dateTimeIndex = null;\r\n var locations = $scope.consignmentMap.getLocations();\r\n var totalDistance = $scope.consignmentMap.getTotalDistance() / 1609.34;\r\n var totalTime = 0;\r\n\r\n $scope.consignment.TotalMiles = Math.round(totalDistance);\r\n\r\n if ($scope.consignment.CalculateTimes) {\r\n var route = $scope.consignmentMap.getRoute();\r\n totalTime = $scope.consignmentMap.getTotalTime() / 60;\r\n\r\n $scope.consignment.TotalTimeInMinutes = Math.round(totalTime);\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n if (locations[i].datetime) {\r\n $scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime = locations[i].datetime;\r\n $scope.consignment.ConsignmentAddresses[i].DisplayScheduledStartDateAndTime = moment($scope.consignment.ConsignmentAddresses[i].ScheduledStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n }\r\n }\r\n else {\r\n var duration = moment.duration(moment($scope.consignment.ConsignmentAddresses[$scope.consignment.ConsignmentAddresses.length - 1].ScheduledStartDateAndTime).diff(moment($scope.consignment.ConsignmentAddresses[0].ScheduledStartDateAndTime)));\r\n totalTime = duration.asMinutes();\r\n\r\n $scope.consignment.TotalTimeInMinutes = Math.round(totalTime);\r\n }\r\n\r\n var recommendedPrice = 0;\r\n var matrices = null;\r\n\r\n if ($scope.selectedCustomer) {\r\n matrices = $scope.selectedCustomer.Matrices;\r\n }\r\n else {\r\n matrices = $scope.priceMatrices;\r\n }\r\n\r\n if ($scope.consignment.VehicleType) {\r\n for (var i = 0; i < matrices.length; i++) {\r\n if ($scope.consignment.VehicleType.Id == matrices[i].VehicleType.Id && matrices[i].MatrixType.Name.toUpperCase() == 'PRICING') {\r\n if (matrices[i].MatrixPriceIncrement.Name.toUpperCase() == 'DISTANCE') {\r\n for (var p = 0; p < matrices[i].PriceMatrices.length; p++) {\r\n if (totalDistance > matrices[i].PriceMatrices[p].From) {\r\n if (totalDistance > matrices[i].PriceMatrices[p].To) {\r\n recommendedPrice += Math.ceil(((matrices[i].PriceMatrices[p].To - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak);\r\n }\r\n else {\r\n recommendedPrice += Math.ceil(((totalDistance - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < matrices[i].PriceMatrices.length; p++) {\r\n if (totalTime > matrices[i].PriceMatrices[p].From) {\r\n //if (totalTime > matrices[i].PriceMatrices[p].To) {\r\n // recommendedPrice += Math.ceil(((matrices[i].PriceMatrices[p].To - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak);\r\n //}\r\n //else {\r\n // recommendedPrice += Math.ceil(((totalTime - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak);\r\n //}\r\n recommendedPrice += matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n if (recommendedPrice < matrices[i].MinimumPrice) {\r\n recommendedPrice = matrices[i].MinimumPrice;\r\n }\r\n }\r\n }\r\n\r\n /*\r\n TO DO:\r\n AREA ADDITIONAL CHARGE RULES\r\n \r\n LOOP THROUGH THE RULES BASED ON THEIR ORDER.\r\n CHECK IF THE CONSIGNMENT VEHICLE IS IN THE RULE *AND* THAT ANY OF THE CONSIGNMENT ADDRESSES POSTCODES ARE IN THE RULE\r\n IF FIND A RULE THEN MULTIPLY THE *BASE* PRICE BY THE RULES PRICE PERCENTAGE\r\n IF THIS PRICE TO ADD IS GREATER THAN THE RULES MAX PRICE ONLY ADD THE MAX PRICE, OTHERWISE ADD THE CALCULATED PRICE\r\n */\r\n\r\n if ($scope.consignment.ApplyPostcodePricingRules) {\r\n for (var r = 0; r < $scope.areaAdditionalChargeRules.length; r++) {\r\n var rule = $scope.areaAdditionalChargeRules[r];\r\n var postcodes = rule.Postcodes.split('\\n');\r\n var exclusions = (rule.PostcodeExclusions) ? rule.PostcodeExclusions.split('\\n') : null;\r\n var exclusionsFound = false;\r\n\r\n for (var v = 0; v < rule.VehicleTypes.length; v++) {\r\n if ($scope.consignment.VehicleType.Id === rule.VehicleTypes[v].Id) {\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n for (var p = 0; p < postcodes.length; p++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(postcodes[p].toUpperCase())) {\r\n if (exclusions) {\r\n for (var e = 0; e < exclusions.length; e++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(exclusions[e].toUpperCase())) {\r\n exclusionsFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!exclusionsFound) {\r\n var areaAdditionalChargePrice = Math.ceil(recommendedPrice * (rule.PricePercentage / 100));\r\n\r\n if (areaAdditionalChargePrice > rule.MaxPrice) {\r\n recommendedPrice += rule.MaxPrice;\r\n }\r\n else {\r\n recommendedPrice += areaAdditionalChargePrice;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargePrice) break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargePrice) break;\r\n }\r\n\r\n if (areaAdditionalChargePrice) break;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses) {\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].AdditionalCharges) {\r\n for (var c = 0; c < $scope.consignment.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n recommendedPrice += $scope.consignment.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Price;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.AdditionalCharges) {\r\n for (var a = 0; a < $scope.consignment.AdditionalCharges.length; a++) {\r\n recommendedPrice += $scope.consignment.AdditionalCharges[a].Price;\r\n }\r\n }\r\n\r\n if ($scope.settings && $scope.settings.BackloadMultiplier > 0 && $scope.consignment.IsBackload) {\r\n recommendedPrice = (recommendedPrice * ($scope.settings.BackloadMultiplier / 100));\r\n\t\t\t}\r\n\r\n $scope.consignment.RecommendedPrice = $filter('number')(recommendedPrice, 2);\r\n\r\n //if (!$scope.consignment.PriceManuallySet) {\r\n // $scope.consignment.Price = $filter('number')(recommendedPrice, 2);\r\n //}\r\n\r\n if (!$scope.consignment.Id) {\r\n $scope.consignment.Price = $filter('number')(recommendedPrice, 2);\r\n }\r\n });\r\n }\r\n\r\n function updateCosting() {\r\n if ($scope.consignment.Id && $scope.consignmentHasManifests && !$scope.consignmentManifestOneToOneRelationship) return false;\r\n\r\n $timeout(function () {\r\n var dateTimeIndex = null;\r\n var locations = $scope.consignmentMap.getLocations();\r\n var totalDistance = $scope.consignmentMap.getTotalDistance() / 1609.34;\r\n var totalTime = 0;\r\n\r\n var calculatedCost = 0;\r\n var matrices = null;\r\n\r\n if ($scope.selectedCustomer) {\r\n matrices = $scope.selectedCustomer.Matrices;\r\n }\r\n else {\r\n matrices = $scope.priceMatrices;\r\n }\r\n\r\n if ($scope.consignment.VehicleType) {\r\n for (var i = 0; i < matrices.length; i++) {\r\n if ($scope.consignment.VehicleType.Id == matrices[i].VehicleType.Id && matrices[i].MatrixType.Name.toUpperCase() == 'COSTING - SUPPLIER') {\r\n if (matrices[i].MatrixPriceIncrement.Name.toUpperCase() == 'DISTANCE') {\r\n for (var p = 0; p < matrices[i].PriceMatrices.length; p++) {\r\n if (totalDistance > matrices[i].PriceMatrices[p].From) {\r\n if (totalDistance > matrices[i].PriceMatrices[p].To) {\r\n calculatedCost += ((matrices[i].PriceMatrices[p].To - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n else {\r\n calculatedCost += ((totalDistance - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < matrices[i].PriceMatrices.length; p++) {\r\n if (totalTime > matrices[i].PriceMatrices[p].From) {\r\n //if (totalTime > matrices[i].PriceMatrices[p].To) {\r\n // calculatedCost += ((matrices[i].PriceMatrices[p].To - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak;\r\n //}\r\n //else {\r\n // calculatedCost += ((totalTime - matrices[i].PriceMatrices[p].From) / matrices[i].PriceMatrices[p].Interval) * matrices[i].PriceMatrices[p].PriceBreak;\r\n //}\r\n calculatedCost += matrices[i].PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n if (calculatedCost < matrices[i].MinimumPrice) {\r\n calculatedCost = matrices[i].MinimumPrice;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.ApplyPostcodePricingRules) {\r\n for (var r = 0; r < $scope.areaAdditionalChargeRules.length; r++) {\r\n var rule = $scope.areaAdditionalChargeRules[r];\r\n var postcodes = rule.Postcodes.split('\\n');\r\n var exclusions = (rule.PostcodeExclusions) ? rule.PostcodeExclusions.split('\\n') : null;\r\n var exclusionsFound = false;\r\n\r\n for (var v = 0; v < rule.VehicleTypes.length; v++) {\r\n if ($scope.consignment.VehicleType.Id === rule.VehicleTypes[v].Id) {\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n for (var p = 0; p < postcodes.length; p++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(postcodes[p].toUpperCase())) {\r\n if (exclusions) {\r\n for (var e = 0; e < exclusions.length; e++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(exclusions[e].toUpperCase())) {\r\n exclusionsFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!exclusionsFound) {\r\n var areaAdditionalChargeCost = calculatedCost * (rule.CostPercentage / 100);\r\n\r\n if (areaAdditionalChargeCost > rule.MaxCost) {\r\n calculatedCost += rule.MaxCost;\r\n }\r\n else {\r\n calculatedCost += areaAdditionalChargeCost;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.consignment.ConsignmentAddresses) {\r\n for (var a = 0; a < $scope.consignment.ConsignmentAddresses.length; a++) {\r\n if ($scope.consignment.ConsignmentAddresses[a].AdditionalCharges) {\r\n for (var c = 0; c < $scope.consignment.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n calculatedCost += $scope.consignment.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Cost;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if ($scope.settings && $scope.settings.BackloadMultiplier > 0 && $scope.consignment.IsBackload) {\r\n calculatedCost = (calculatedCost * ($scope.settings.BackloadMultiplier / 100));\r\n }\r\n\r\n $scope.consignment.RecommendedCost = $filter('number')(calculatedCost, 2);\r\n\r\n //if (!$scope.consignment.Id || ($scope.consignment.Id && !$scope.consignmentHasManifests)) {\r\n if (!$scope.consignment.Id) {\r\n $scope.consignment.Cost = $filter('number')(calculatedCost, 2);\r\n }\r\n });\r\n }\r\n\r\n function getMinimumFrequentConsignmentDate() {\r\n var minimumDate = moment();\r\n\r\n if (minimumDate.day() === 0 || minimumDate.day() === 1 || minimumDate.day() === 2) {\r\n minimumDate = minimumDate.add(7, 'd');\r\n }\r\n\r\n while (minimumDate.day() !== 1) {\r\n minimumDate = minimumDate.add(1, 'd');\r\n }\r\n\r\n return minimumDate;\r\n }\r\n\r\n function createCopyFromConsignment() {\r\n delete $scope.consignment.Id;\r\n delete $scope.consignment.ConsignmentNumber;\r\n delete $scope.consignment.ConsignmentReference;\r\n delete $scope.consignment.ConsignmentChangeLogs;\r\n delete $scope.consignment.Supplier;\r\n delete $scope.consignment.InvoiceDate;\r\n delete $scope.consignment.InvoiceNumber;\r\n delete $scope.consignment.DateCreated;\r\n\r\n for (var i = 0; i < $scope.consignment.ConsignmentAddresses.length; i++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].Id;\r\n delete $scope.consignment.ConsignmentAddresses[i].Manifest;\r\n delete $scope.consignment.ConsignmentAddresses[i].LoadDetails;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsOnRoute;\r\n delete $scope.consignment.ConsignmentAddresses[i].StartTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].HasArrived;\r\n delete $scope.consignment.ConsignmentAddresses[i].ArrivalTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].IsCompleted;\r\n delete $scope.consignment.ConsignmentAddresses[i].CompletionTime;\r\n delete $scope.consignment.ConsignmentAddresses[i].NotesFromSupplier;\r\n delete $scope.consignment.ConsignmentAddresses[i].SignatureName;\r\n delete $scope.consignment.ConsignmentAddresses[i].Signature_FileName;\r\n delete $scope.consignment.ConsignmentAddresses[i].GoodsPhotos;\r\n delete $scope.consignment.ConsignmentAddresses[i].PaperworkPhotos;\r\n delete $scope.consignment.ConsignmentAddresses[i].NoPaperworkProvided;\r\n delete $scope.consignment.ConsignmentAddresses[i].RowVersion;\r\n\r\n //for (var d = 0; d < $scope.consignment.ConsignmentAddresses[i].LoadDetails.length; d++) {\r\n // delete $scope.consignment.ConsignmentAddresses[i].LoadDetails[d].Id;\r\n //}\r\n\r\n for (var c = 0; c < $scope.consignment.ConsignmentAddresses[i].AdditionalCharges.length; c++) {\r\n delete $scope.consignment.ConsignmentAddresses[i].AdditionalCharges[c].Id;\r\n }\r\n }\r\n\r\n for (var i = 0; i < $scope.consignment.AdditionalCharges.length; i++) {\r\n delete $scope.consignment.AdditionalCharges[i].Id;\r\n }\r\n\r\n $scope.consignmentManifests = [];\r\n $scope.consignmentManifestOneToOneRelationship = false;\r\n $scope.manifestChangesRequired = false;\r\n $scope.consignmentHasManifests = false;\r\n\r\n $scope.consignment.InvoiceStatus = AtlasCourierExpress.Enums.InvoiceStatus.Uninvoiced;\r\n $scope.consignment.Paid = false;\r\n\r\n $rootScope.$emit('title-updated', 'Consignment');\r\n }\r\n\r\n function addSupplierLocationToMap(supplier, location, markerType) {\r\n var infoContent;\r\n var defaultColour = '#2c6fba';\r\n\r\n if (!markerType) markerType = clickinon.google.maps.enums.markerTypes.PIN;\r\n\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n infoContent = '
Driver: ' + supplier.Name + '
';\r\n\r\n if (location.Manifest) {\r\n //infoContent += '
Vehicle: ' + supplierLocation.Supplier.Manifests[0].VehicleType.Name + '
'\r\n infoContent += '
Vehicle: ' + supplier.Vehicles[0].VehicleType.Name + '
';\r\n infoContent += '
Manifest Number: ' + location.Manifest.ManifestNumber + '
';\r\n infoContent += '
Last Address: ' + location.Manifest.FormattedLastDeliveryAddress + '
';\r\n infoContent += '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.consignmentMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: location.Manifest.StatusColour.HexCode,\r\n fontColour: (location.Manifest.StatusColour.HexCode.indexOf('#595959') >= 0 || location.Manifest.StatusColour.HexCode.indexOf('#2c6fba') >= 0) ? ':#ffffff' : '#000000',\r\n //text: (supplierLocation.Supplier.Manifests.length > 0) ? supplierLocation.Supplier.Manifests[0].VehicleType.IconCode : '',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n else {\r\n infoContent += '
Vehicle: ' + supplier.Vehicles[0].VehicleType.Name + '
';\r\n infoContent += '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.consignmentMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: defaultColour,\r\n fontColour: '#000000',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n }\r\n else {\r\n infoContent = '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.consignmentMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n colour: defaultColour,\r\n fontColour: '#000000',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n }\r\n}]);","manifests.controller('ManifestController', ['$rootScope', '$scope', '$state', '$stateParams', '$timeout', '$filter', '$sce', 'FoundationApi', 'ModalFactory', 'ManifestFactory', 'SupplierFactory', 'ConsignmentFactory', 'UserFactory', 'AtlasUserFactory', 'SettingsFactory', 'AtlasModalFactory', function ($rootScope, $scope, $state, $stateParams, $timeout, $filter, $sce, FoundationApi, ModalFactory, ManifestFactory, SupplierFactory, ConsignmentFactory, UserFactory, AtlasUserFactory, SettingsFactory, AtlasModalFactory) {\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Manifest');\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n $scope.loadingManifest = false;\r\n $scope.suppliers = null;\r\n $scope.manifest = ManifestFactory.createNewManifest(null, [], 0, 0);\r\n $scope.manifestMap = new clickinon.google.maps.Map();\r\n $scope.selectedSupplier = null;\r\n $scope.suppliers = null;\r\n $scope.availableSuppliers = null;\r\n $scope.assigningSupplier = false;\r\n $scope.mapsLoaded = false;\r\n $scope.consignmentAddresses = null;\r\n $scope.loadingConsignmentAddresses = false;\r\n $scope.savingManifest = false;\r\n $scope.deletingManifest = false;\r\n $scope.consignmentAddressesView = 'Details';\r\n $scope.sendingManifest = false;\r\n $scope.consignmentAddress = null;\r\n $scope.selectedDateTime = null;\r\n $scope.costingMatrices = null;\r\n $scope.consignmentAddressCustomerNameFilter = '';\r\n $scope.consignmentAddressesCompleted = [];\r\n $scope.emails = null;\r\n $scope.currentEmail = null;\r\n $scope.currentEmailIndex = null;\r\n $scope.confirmationEmailErrorMessage = null;\r\n $scope.showReport = true;\r\n $scope.showEmailDetailsForReport = false;\r\n $scope.emailReport = {};\r\n $scope.supplierEmails = null;\r\n $scope.reportEmailErrorMessage = null;\r\n $scope.showTraffic = false;\r\n $scope.customerMessage = null;\r\n $scope.areaAdditionalChargeRules = [];\r\n $scope.goodsPhotos = [];\r\n $scope.paperworkPhotos = [];\r\n $scope.canSendToTransportExchange = false;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n $scope.transportExchangeManifestOptions = {\r\n tailLift: false,\r\n timed: false,\r\n notes: null\r\n }\r\n $scope.transportExchangeDefaultSupplier = AtlasCourierExpress.Enums.TransportExchangeDefaultSupplier;\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n }\r\n );\r\n\r\n SettingsFactory.getCostingMatrices()\r\n .then(\r\n function (response) {\r\n $scope.costingMatrices = response;\r\n }\r\n );\r\n\r\n SettingsFactory.getAreaAdditionalChargeRules()\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = response;\r\n }\r\n );\r\n\r\n if ($stateParams.id.length > 0) {\r\n $scope.loadingManifest = true;\r\n\r\n ManifestFactory.getManifest($stateParams.id)\r\n .then(\r\n function () {\r\n SupplierFactory.getSuppliers()\r\n .then(\r\n function () {\r\n $scope.suppliers = SupplierFactory.suppliers;\r\n $scope.availableSuppliers = $scope.suppliers;\r\n\r\n $scope.manifest = ManifestFactory.manifest;\r\n $scope.availableSuppliers = ManifestFactory.getAvailableSuppliers($scope.manifest, $scope.suppliers);\r\n $scope.loadingManifest = false;\r\n $scope.manifest.CalculateTimes = true;\r\n\r\n $rootScope.$emit('title-updated', 'Manifest ' + $scope.manifest.ManifestNumber);\r\n\r\n var found = false;\r\n $scope.supplierEmails = [];\r\n\r\n if ($scope.manifest.Supplier) {\r\n //$scope.selectedSupplier = $scope.manifest.Supplier;\r\n\r\n if ($scope.manifest.Supplier.Email) $scope.supplierEmails.push($scope.manifest.Supplier.Email);\r\n if ($scope.manifest.Supplier.SecondaryEmail) $scope.supplierEmails.push($scope.manifest.Supplier.SecondaryEmail);\r\n\r\n for (var i = 0; i < $scope.supplierEmails.length; i++) {\r\n if ($scope.manifest.Supplier.SupplierUsers[0] && $scope.supplierEmails[i] == $scope.manifest.Supplier.SupplierUsers[0].Email) found = true;\r\n }\r\n\r\n if (!found && $scope.manifest.Supplier.SupplierUsers[0] && $scope.manifest.Supplier.SupplierUsers[0].Email) $scope.supplierEmails.push($scope.manifest.Supplier.SupplierUsers[0].Email);\r\n }\r\n\r\n if ($scope.manifest.VehicleType.TransportExchangeVehicleMappings && $scope.manifest.VehicleType.TransportExchangeVehicleMappings.length > 0) {\r\n $scope.canSendToTransportExchange = true;\r\n }\r\n\r\n $scope.supplierEmails.push('-- Other Email Address --');\r\n\r\n if (!$scope.manifestMap.getMap()) $scope.manifestMap.initialize('divManifestMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n $timeout(function () {\r\n $scope.manifestMap.triggerResize();\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ManifestFactory.getFormattedConsignmentAddress(i) + ',' + $scope.manifest.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.manifest.ConsignmentAddresses[i].Address.Latitude,\r\n lng: $scope.manifest.ConsignmentAddresses[i].Address.Longitude,\r\n object: $scope.manifest.ConsignmentAddresses[i]\r\n }\r\n\r\n $scope.manifestMap.addLocation(address,\r\n { \r\n 'dateTime': (i === 0 ? $scope.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime : null), \r\n 'callback': function (location) {\r\n if ($scope.manifest.ConsignmentAddresses.length > 1 && $scope.manifest.ConsignmentAddresses.length === $scope.manifestMap.getLocations().length) {\r\n $scope.manifestMap.getDirections(function () {\r\n updateDistanceTimesAndPricing();\r\n\r\n if ($scope.manifest.Supplier && $scope.manifest.Supplier.SupplierUsers[0] && $scope.manifest.Supplier.SupplierUsers[0].LastKnownLocation) addSupplierLocationToMap($scope.manifest.Supplier, $scope.manifest.Supplier.SupplierUsers[0].LastKnownLocation, clickinon.google.maps.enums.markerType);\r\n });\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n }, 1000);\r\n }\r\n );\r\n },\r\n function () {\r\n $scope.loadingManifest = false;\r\n }\r\n )\r\n }\r\n else {\r\n $timeout(function () {\r\n if (!$scope.manifestMap.getMap()) $scope.manifestMap.initialize('divManifestMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function () {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n }, 1000);\r\n }\r\n\r\n $scope.getManifestConsignmentNumbers = function () {\r\n return ManifestFactory.getConsignmentNumbers();\r\n }\r\n\r\n $scope.getConsignmentAddresses = function () {\r\n if ($scope.consignmentAddresses == null) {\r\n $scope.loadingConsignmentAddresses = true;\r\n\r\n ConsignmentFactory.getConsignmentAddressesWithNoManifest()\r\n .then(\r\n function (response) {\r\n $scope.consignmentAddresses = response;\r\n\r\n $scope.loadingConsignmentAddresses = false;\r\n\r\n AtlasModalFactory.open('consignmentAddressesModal');\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.closeConsignmentAddressesModal = function () {\r\n AtlasModalFactory.close('consignmentAddressesModal');\r\n\t}\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName !== null && address.CompanyName !== '') {\r\n if (formattedAddress.length !== 0) formattedAddress += ', ';\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 !== null && address.AddressLine1 !== '') {\r\n if (formattedAddress.length !== 0) formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town !== null && address.Town !== '') {\r\n if (formattedAddress.length !== 0) formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode !== null && address.Postcode !== '') {\r\n if (formattedAddress.length !== 0) formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.costManuallySet = function () {\r\n $scope.manifest.CostManuallySet = true;\r\n }\r\n\r\n $scope.changeVehicleType = function () {\r\n updateDistanceTimesAndPricing();\r\n }\r\n\r\n $scope.moveConsignmentAddressUp = function (a, i) {\r\n //$scope.manifest.ConsignmentAddresses.move(i, (i - 1));\r\n $scope.manifest.ConsignmentAddresses = clickinon.utilities.moveElementInArray($scope.manifest.ConsignmentAddresses, i, (i - 1));\r\n\r\n $scope.manifestMap.moveLocation(i, (i - 1), function () {\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ManifestFactory.getFormattedConsignmentAddress(i) + ',' + $scope.manifest.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.manifest.ConsignmentAddresses[i].Latitude,\r\n lng: $scope.manifest.ConsignmentAddresses[i].Longitude,\r\n object: $scope.manifest.ConsignmentAddresses[i]\r\n }\r\n var options = {\r\n 'dateTime': $scope.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime,\r\n 'callback': updateDistanceTimesAndPricing\r\n };\r\n\r\n $scope.manifestMap.updateLocation(i, address, options);\r\n }\r\n });\r\n }\r\n\r\n $scope.moveConsignmentAddressDown = function (a, i) {\r\n //$scope.manifest.ConsignmentAddresses.move(i, (i + 1));\r\n $scope.manifest.ConsignmentAddresses = clickinon.utilities.moveElementInArray($scope.manifest.ConsignmentAddresses, i, (i + 1));\r\n\r\n $scope.manifestMap.moveLocation(i, (i + 1), function () {\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n var address = {\r\n text: ManifestFactory.getFormattedConsignmentAddress(i) + ',' + $scope.manifest.ConsignmentAddresses[i].Address.Country.Name,\r\n lat: $scope.manifest.ConsignmentAddresses[i].Latitude,\r\n lng: $scope.manifest.ConsignmentAddresses[i].Longitude,\r\n object: $scope.manifest.ConsignmentAddresses[i]\r\n }\r\n var options = {\r\n 'dateTime': (i === 0 ? $scope.manifest.ConsignmentAddresses[i].ScheduledStartDateAndTime : null),\r\n 'callback': updateDistanceTimesAndPricing\r\n };\r\n\r\n $scope.manifestMap.updateLocation(i, address, options);\r\n }\r\n });\r\n }\r\n\r\n $scope.deleteConsignmentAddress = function (index) {\r\n $scope.manifest.ConsignmentAddresses.splice(index, 1);\r\n\r\n $scope.manifestMap.removeLocation(index);\r\n\r\n updateDistanceTimesAndPricing();\r\n }\r\n\r\n $scope.addToManifest = function (a, index) {\r\n if (!a.LoadDetails) a.LoadDetails = [];\r\n\r\n if (!a.AdditionalCharges) a.AdditionalCharges = [];\r\n\r\n $scope.manifest.ConsignmentAddresses.push(a);\r\n\r\n if (!$scope.manifest.VehicleType || $scope.manifest.VehicleType.Order < a.Consignment.VehicleType.Order) $scope.manifest.VehicleType = a.Consignment.VehicleType;\r\n\r\n var address = {\r\n text: ConsignmentFactory.getFormattedConsignmentAddress(a) + ',' + a.Address.Country.Name,\r\n lat: a.Latitude,\r\n lng: a.Longitude,\r\n object: a\r\n }\r\n\r\n $scope.manifest.CalculateTimes = true;\r\n\r\n if (!$scope.manifestMap.getMap()) $scope.manifestMap.initialize('divManifestMap',\r\n {\r\n 'allowDuplicatesAddress': true,\r\n 'callback': function (location) {\r\n $timeout(function () {\r\n $scope.mapsLoaded = true;\r\n });\r\n }\r\n });\r\n\r\n if ($scope.manifest.ConsignmentAddresses.length === 1) {\r\n $scope.manifestMap.addLocation(address, \r\n {\r\n 'dateTime': $scope.manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime,\r\n 'callback': function () {\r\n $scope.manifestMap.getDirections(updateDistanceTimesAndPricing);\r\n }\r\n }\r\n );\r\n }\r\n else {\r\n $scope.manifestMap.addLocation(address, \r\n {\r\n 'callback': function () {\r\n $scope.manifestMap.getDirections(updateDistanceTimesAndPricing);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.saveManifest = function () {\r\n $scope.savingManifest = true;\r\n $scope.errorMessage = null;\r\n var openEmailConfirmation = false;\r\n\r\n if ($scope.manifest.ConsignmentAddresses.length < 2) {\r\n $scope.savingManifest = false;\r\n $scope.errorMessage = 'There must be at least 2 consignment addresses on a manifest.';\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n if ($scope.manifest.ConsignmentAddresses[i].isBeingCompleted) {\r\n $scope.consignmentAddressesCompleted.push($scope.manifest.ConsignmentAddresses[i]);\r\n }\r\n }\r\n\r\n ManifestFactory.saveManifest($scope.customerMessage)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n //ManifestFactory.getManifest($scope.manifest.Id)\r\n .then(\r\n function () {\r\n $scope.savingManifest = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n if ($scope.consignmentAddressesCompleted && $scope.consignmentAddressesCompleted.length > 0) {\r\n for(var i = 0; i < $scope.consignmentAddressesCompleted.length; i++){\r\n if($scope.consignmentAddressesCompleted[i].ConsignmentAddressType.Name.toUpperCase() === 'COLLECTION' && $scope.consignmentAddressesCompleted[i].Consignment.Customer.AutoEmailOnCollection){\r\n AtlasModalFactory.open('divConfirmEmails');\r\n break;\r\n }\r\n else if($scope.consignmentAddressesCompleted[i].ConsignmentAddressType.Name.toUpperCase() === 'DELIVERY' && $scope.consignmentAddressesCompleted[i].Consignment.Customer.AutoEmailOnDelivery){\r\n AtlasModalFactory.open('divConfirmEmails');\r\n break;\r\n }\r\n }\r\n\r\n //FoundationApi.publish('divConfirmEmails', 'open');\r\n }\r\n },\r\n function (response) {\r\n $scope.savingManifest = false;\r\n $scope.errorMessage = 'An error has occurred.';\r\n }\r\n );\r\n },\r\n function (response) {\r\n $scope.savingManifest = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = 'The manifest has been modified by another user after you loaded it. Please reload to get the latest version';\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.deleteManifest = function () {\r\n $scope.deletingManifest = true;\r\n $scope.errorMessage = null;\r\n\r\n ManifestFactory.deleteManifest()\r\n .then(\r\n function (manifest) {\r\n AtlasModalFactory.close('divDeleteManifestConfirmation');\r\n \r\n $state.go('control_screen');\r\n },\r\n function (response) {\r\n $scope.deletingManifest = false;\r\n\r\n switch (response.status) {\r\n case 608:\r\n $scope.errorMessage = response.data.Message;\r\n break;\r\n default:\r\n $scope.errorMessage = 'An error has occurred.';\r\n break;\r\n }\r\n }\r\n );\r\n }\r\n\r\n $scope.selectSupplier = function (s) {\r\n if ($scope.manifest.Supplier && $scope.manifest.Supplier.Id !== s.Id) {\r\n ManifestFactory.manifest.IsSent = false;\r\n $scope.manifest.IsSent = false;\r\n }\r\n\r\n var found = false;\r\n $scope.supplierEmails = [];\r\n\r\n if ($scope.selectedSupplier && $scope.selectedSupplier.Id === s.Id) {\r\n $scope.selectedSupplier = null;\r\n $scope.canSendToTransportExchange = true;\r\n }\r\n else {\r\n $scope.selectedSupplier = s;\r\n $scope.canSendToTransportExchange = false;\r\n\r\n if ($scope.selectedSupplier.Email) $scope.supplierEmails.push($scope.selectedSupplier.Email);\r\n if ($scope.selectedSupplier.SecondaryEmail) $scope.supplierEmails.push($scope.selectedSupplier.SecondaryEmail);\r\n\r\n for (var i = 0; i < $scope.supplierEmails.length; i++) {\r\n if ($scope.selectedSupplier.SupplierUsers[0] && $scope.supplierEmails[i] == $scope.selectedSupplier.SupplierUsers[0].Email) found = true;\r\n }\r\n\r\n if (!found && $scope.selectedSupplier.SupplierUsers[0] && $scope.selectedSupplier.SupplierUsers[0].Email) $scope.supplierEmails.push($scope.selectedSupplier.SupplierUsers[0].Email);\r\n }\r\n\r\n $scope.supplierEmails.push('-- Other Email Address --');\r\n }\r\n\r\n $scope.assignSupplier = function () {\r\n //if (!$scope.selectedSupplier) {\r\n // $scope.errorMessage = 'No supplier selected';\r\n // return false;\r\n //}\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n\r\n ManifestFactory.manifest.Supplier = $scope.selectedSupplier;\r\n ManifestFactory.manifest.IsSent = false;\r\n delete ManifestFactory.manifest.TransportExchangeManifests;\r\n\r\n $scope.manifest.Supplier = $scope.selectedSupplier;\r\n $scope.manifest.IsSent = false;\r\n delete $scope.manifest.TransportExchangeManifests;\r\n\r\n ManifestFactory.saveManifest()\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n var found = false;\r\n $scope.supplierEmails = [];\r\n\r\n if ($scope.manifest.Supplier) {\r\n //$scope.selectedSupplier = $scope.manifest.Supplier;\r\n\r\n if ($scope.manifest.Supplier.Email) $scope.supplierEmails.push($scope.manifest.Supplier.Email);\r\n if ($scope.manifest.Supplier.SecondaryEmail) $scope.supplierEmails.push($scope.manifest.Supplier.SecondaryEmail);\r\n\r\n for (var i = 0; i < $scope.supplierEmails.length; i++) {\r\n if ($scope.manifest.Supplier.SupplierUsers[0] && $scope.supplierEmails[i] == $scope.manifest.Supplier.SupplierUsers[0].Email) found = true;\r\n }\r\n\r\n if (!found && $scope.manifest.Supplier.SupplierUsers[0] && $scope.manifest.Supplier.SupplierUsers[0].Email) $scope.supplierEmails.push($scope.manifest.Supplier.SupplierUsers[0].Email);\r\n }\r\n\r\n $scope.supplierEmails.push('-- Other Email Address --');\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n \r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n }\r\n\r\n $scope.confirmAssignSupplier = function () {\r\n if ($scope.selectedManifest.Supplier && $scope.selectedManifest.Supplier.Id === $scope.transportExchangeDefaultSupplier.Id) {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n AtlasModalFactory.open('divConfirmAssignSupplier');\r\n return false;\r\n }\r\n else {\r\n $scope.assignSupplier();\r\n }\r\n }\r\n\r\n $scope.cancelAssignSupplier = function ($event) {\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n AtlasModalFactory.open('divAssignSupplier');\r\n if ($event) $event.stopPropagation();\r\n return false;\r\n }\r\n\r\n $scope.closeConfirmAssignSupplier = function () {\r\n AtlasModalFactory.close('divConfirmAssignSupplier');\r\n return false;\r\n }\r\n\r\n $scope.showSendingToTransportExchangeOptions = function () {\r\n $scope.assigningSupplierErrorMessage = null;\r\n\r\n if (moment($scope.manifest.ConsignmentAddresses[0].ScheduledStartDateAndTime).isBefore(moment(), 'day')) {\r\n $scope.assigningSupplierErrorMessage = 'Consignment address scheduled date / time is in the past';\r\n return;\r\n }\r\n\r\n $scope.sendingToTransportExchangeOptions = true;\r\n $scope.transportExchangeManifestOptions.timed = false;\r\n $scope.transportExchangeManifestOptions.notes = '';\r\n var manifestConsignments = [];\r\n var consignmentExists = false;\r\n\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n if ($scope.manifest.ConsignmentAddresses[i].ConsignmentAddressType.Name == 'Delivery' && $scope.manifest.ConsignmentAddresses[i].Timed) {\r\n $scope.transportExchangeManifestOptions.timed = true;\r\n }\r\n\r\n if (manifestConsignments.length == 0) {\r\n manifestConsignments.push($scope.manifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n else {\r\n consignmentExists = false;\r\n\r\n for (var m = 0; m < manifestConsignments.length; m++) {\r\n if ($scope.manifest.ConsignmentAddresses[i].Consignment.Id == manifestConsignments[m].Id) {\r\n consignmentExists = true;\r\n }\r\n }\r\n\r\n if (!consignmentExists) manifestConsignments.push($scope.manifest.ConsignmentAddresses[i].Consignment);\r\n }\r\n }\r\n\r\n for (var m = 0; m < manifestConsignments.length; m++) {\r\n if ($scope.transportExchangeManifestOptions.notes.length > 0) $scope.notes += ' --- ';\r\n\r\n $scope.transportExchangeManifestOptions.notes += manifestConsignments[m].NotesForSupplier;\r\n }\r\n }\r\n\r\n $scope.hideSendingToTransportExchange = function () {\r\n $scope.sendingToTransportExchangeOptions = false;\r\n }\r\n\r\n $scope.sendManifestToTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n $scope.manifest.TransportExchangeManifests = [];\r\n $scope.manifest.TransportExchangeManifests.push($scope.transportExchangeManifestOptions);\r\n\r\n ManifestFactory.sendManifestToTransportExchange($scope.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n }\r\n\r\n $scope.removeFromTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.removeManifestFromTransportExchange($scope.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n }\r\n\r\n $scope.rebookWithTransportExchange = function () {\r\n $scope.assigningSupplier = true;\r\n $scope.assigningSupplierErrorMessage = null;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n ManifestFactory.rebookManifestWithTransportExchange($scope.manifest)\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.assigningSupplier = false;\r\n $scope.manifest = ManifestFactory.manifest;\r\n\r\n AtlasModalFactory.close('divAssignSupplier');\r\n },\r\n function (response) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.assigningSupplier = false;\r\n $scope.assigningSupplierErrorMessage = 'An error has occurred.';\r\n }\r\n );\r\n }\r\n\r\n $scope.sendManifest = function () {\r\n $scope.sendingManifest = true;\r\n ManifestFactory.manifest.IsSent = true;\r\n\r\n ManifestFactory.saveManifest()\r\n .then(\r\n function (manifest) {\r\n ManifestFactory.getManifest(manifest.Id)\r\n .then(\r\n function () {\r\n $scope.manifest = ManifestFactory.manifest;\r\n $scope.sendingManifest = false;\r\n\r\n At('divLoading', 'close');\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.closeLoadingModal = function () {\r\n AtlasModalFactory.close('divLoading');\r\n }\r\n\r\n $scope.showSignature = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n\r\n AtlasModalFactory.open('divConsignmentAddressSignature');\r\n }\r\n\r\n $scope.closeConsignmentAddressSignature = function () {\r\n AtlasModalFactory.close('divConsignmentAddressSignature');\r\n }\r\n\r\n $scope.showGoodsPhotos = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n $scope.goodsPhotos = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.GoodsPhotos.length; i += 3) {\r\n $scope.goodsPhotos.push($scope.consignmentAddress.GoodsPhotos.slice(i, i + 3));\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentAddressGoodsPhotos');\r\n }\r\n\r\n $scope.closeConsignmentAddressGoodsPhotos = function () {\r\n AtlasModalFactory.close('divConsignmentAddressGoodsPhotos');\r\n }\r\n\r\n $scope.showPaperworkPhotos = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n $scope.paperworkPhotos = [];\r\n\r\n for (var i = 0; i < $scope.consignmentAddress.PaperworkPhotos.length; i += 3) {\r\n $scope.paperworkPhotos.push($scope.consignmentAddress.PaperworkPhotos.slice(i, i + 3));\r\n }\r\n\r\n AtlasModalFactory.open('divConsignmentAddressPaperworkPhotos');\r\n }\r\n\r\n $scope.closeConsignmentAddressPaperworkPhotos = function () {\r\n AtlasModalFactory.close('divConsignmentAddressPaperworkPhotos');\r\n }\r\n\r\n $scope.openManifestChangeLog = function () {\r\n AtlasModalFactory.open('divManifestChangeLog');\r\n }\r\n\r\n $scope.closeManifestChangeLog = function () {\r\n AtlasModalFactory.close('divManifestChangeLog');\r\n }\r\n\r\n $scope.openTransportExchangeManifestLog = function () {\r\n AtlasModalFactory.open('divTransportExchangeManifestLog');\r\n }\r\n\r\n $scope.closeTransportExchangeManifestLog = function () {\r\n AtlasModalFactory.close('divTransportExchangeManifestLog');\r\n }\r\n\r\n $scope.openAssignSupplier = function () {\r\n $scope.selectedManifest = $scope.manifest;\r\n $scope.sendingToTransportExchangeOptions = false;\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n }\r\n\r\n $scope.closeAssignSupplier = function () {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n }\r\n\r\n $scope.openDeleteManifestConfirmation = function () {\r\n AtlasModalFactory.open('divDeleteManifestConfirmation');\r\n }\r\n\r\n $scope.closeDeleteManifestConfirmation = function () {\r\n AtlasModalFactory.close('divDeleteManifestConfirmation');\r\n }\r\n\r\n $scope.getReport = function () {\r\n $scope.showReport = true;\r\n $scope.showEmailDetailsForReport = false;\r\n\r\n AtlasModalFactory.open('divManifestReport');\r\n\r\n ManifestFactory.getReport($scope.manifest.Id)\r\n .then(\r\n function (response) {\r\n var filename = 'Report.pdf';\r\n var contentDisposition = response.headers('Content-Disposition').split(';');\r\n for (var i = 0; i < contentDisposition.length; i++) {\r\n if (contentDisposition[i].indexOf('filename') >= 0) {\r\n var parts = contentDisposition[i].split('=');\r\n filename = parts[1].replace('\"', '');\r\n }\r\n }\r\n var file = new Blob([response.data], { type: 'application/pdf' });\r\n var fileURL = window.URL.createObjectURL(file);\r\n $scope.report = $sce.trustAsResourceUrl(fileURL);\r\n //var link = document.createElement('a');\r\n //angular.element(link)\r\n // .attr('href', fileURL)\r\n // //.attr('download', filename)\r\n // .attr('target', '_blank')\r\n //link.click();\r\n },\r\n function (response) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.selectEmailReportTo = function () {\r\n if ($scope.emailReport.ExistingEmail) {\r\n if ($scope.emailReport.ExistingEmail != '-- Other Email Address--') $scope.emailReport.To = $scope.emailReport.ExistingEmail;\r\n if ($scope.emailReport.ExistingEmail === '-- Other Email Address --') $scope.emailReport.To = '';\r\n }\r\n }\r\n\r\n $scope.closeManifestReport = function () {\r\n AtlasModalFactory.close('divManifestReport');\r\n\t}\r\n\r\n $scope.selectDateTime = function (manifest, consignmentAddress, propertyName, datetime) {\r\n /*\r\n $scope.selectedDateTime = datetime;\r\n\r\n debugger;\r\n\r\n FoundationApi.publish('divEditDateTime', 'open');\r\n */\r\n\r\n var template = '';\r\n\r\n switch (propertyName.toUpperCase()) {\r\n case 'ACKNOWLEDGEDTIME':\r\n template = 'templates/shared/controls/edit_date_time.html';\r\n break;\r\n default:\r\n template = 'templates/manifests/controls/edit_driver_manifest_date_time.html';\r\n break;\r\n }\r\n\r\n var modal = new ModalFactory({\r\n // Add CSS classes to the modal\r\n // Can be a single string or an array of classes\r\n class: 'ace-modal-large',\r\n // Set if the modal has a background overlay\r\n overlay: true,\r\n // Set if the modal can be closed by clicking on the overlay\r\n overlayClose: false,\r\n // Define a template to use for the modal\r\n templateUrl: template,\r\n // Allows you to pass in properties to the scope of the modal\r\n contentScope: {\r\n manifest: manifest,\r\n consignmentAddress: consignmentAddress,\r\n propertyName: propertyName,\r\n selectedDateTime: datetime,\r\n sameDateTimeForAll: false,\r\n updateDateTime: function () {\r\n if (this.sameDateTimeForAll) {\r\n consignmentAddress.IsOnRoute = true;\r\n consignmentAddress.StartTime = moment(this.selectedDateTime);\r\n consignmentAddress.HasArrived = true;\r\n consignmentAddress.ArrivalTime = moment(this.selectedDateTime);\r\n consignmentAddress.isBeingCompleted = true;\r\n consignmentAddress.IsCompleted = true;\r\n consignmentAddress.CompletionTime = moment(this.selectedDateTime);\r\n }\r\n else {\r\n switch (propertyName.toUpperCase()) {\r\n case 'ACKNOWLEDGEDTIME':\r\n manifest.IsAcknowledged = true;\r\n manifest.AcknowledgedTime = moment(this.selectedDateTime);\r\n break;\r\n case 'STARTTIME':\r\n consignmentAddress.IsOnRoute = true;\r\n consignmentAddress.StartTime = moment(this.selectedDateTime);\r\n break;\r\n case 'ARRIVALTIME':\r\n consignmentAddress.HasArrived = true;\r\n consignmentAddress.ArrivalTime = moment(this.selectedDateTime);\r\n break;\r\n case 'COMPLETIONTIME':\r\n consignmentAddress.isBeingCompleted = true;\r\n consignmentAddress.IsCompleted = true;\r\n consignmentAddress.CompletionTime = moment(this.selectedDateTime);\r\n break;\r\n }\r\n }\r\n\r\n modal.deactivate();\r\n\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n },\r\n clearDateTime: function () {\r\n switch (propertyName.toUpperCase()) {\r\n case 'ACKNOWLEDGEDTIME':\r\n manifest.IsAcknowledged = false;\r\n manifest.AcknowledgedTime = null;\r\n break;\r\n case 'STARTTIME':\r\n consignmentAddress.IsOnRoute = false;\r\n consignmentAddress.StartTime = null;\r\n break;\r\n case 'ARRIVALTIME':\r\n consignmentAddress.HasArrived = false;\r\n consignmentAddress.ArrivalTime = null;\r\n break;\r\n case 'COMPLETIONTIME':\r\n consignmentAddress.isBeingCompleted = false;\r\n consignmentAddress.IsCompleted = false;\r\n consignmentAddress.CompletionTime = null;\r\n break;\r\n }\r\n\r\n modal.deactivate();\r\n\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n },\r\n close: function () {\r\n modal.deactivate();\r\n\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n }\r\n }\r\n });\r\n modal.activate();\r\n }\r\n\r\n $scope.setToCalculatedCost = function () {\r\n $scope.manifest.Cost = $filter('number')($scope.manifest.CalculatedCost, 2);\r\n }\r\n\r\n $scope.checkEmailAddresses = function () {\r\n for (var i = 0; i < $scope.consignmentAddressesCompleted.length; i++) {\r\n if (!$scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress && !$scope.consignmentAddressesCompleted[i].Consignment.ContactEmailAddress) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n $scope.sendEmails = function () {\r\n var to;\r\n var body = '';\r\n\r\n for (var i = 0; i < $scope.consignmentAddressesCompleted.length; i++) {\r\n to = ($scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress && !$scope.consignmentAddressesCompleted[i].Consignment.Customer.UseContactEmail) ? $scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress : $scope.consignmentAddressesCompleted[i].Consignment.ContactEmailAddress;\r\n\r\n ManifestFactory.sendCompletedEmail(to, $scope.consignmentAddressesCompleted[i]);\r\n }\r\n\r\n $scope.consignmentAddressesCompleted = [];\r\n\r\n AtlasModalFactory.close('divConfirmEmails');\r\n }\r\n\r\n $scope.editEmails = function () {\r\n $scope.emails = [];\r\n $scope.currentEmailIndex = 0;\r\n var body = '';\r\n\r\n for (var i = 0; i < $scope.consignmentAddressesCompleted.length; i++) {\r\n body = ManifestFactory.generateCompletedEmailBody($scope.consignmentAddressesCompleted[i], $scope.manifest);\r\n\r\n $scope.emails.push({\r\n ConsignmentAddress: $scope.consignmentAddressesCompleted[i],\r\n To: ($scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress && !$scope.consignmentAddressesCompleted[i].Consignment.Customer.UseContactEmail) ? $scope.consignmentAddressesCompleted[i].Consignment.Customer.BookingEmailAddress : $scope.consignmentAddressesCompleted[i].Consignment.ContactEmailAddress,\r\n Body: body,\r\n Send: null\r\n })\r\n }\r\n\r\n $scope.currentEmail = $scope.emails[$scope.currentEmailIndex];\r\n }\r\n\r\n $scope.sendEmail = function () {\r\n $scope.confirmationEmailErrorMessage = null;\r\n\r\n if ($scope.currentEmail.To == null || $scope.currentEmail.To.length === 0) {\r\n $scope.confirmationEmailErrorMessage = 'A \\'To \\' address must be entered';\r\n return false;\r\n }\r\n\r\n $scope.currentEmail.Send = true;\r\n\r\n if ($scope.currentEmailIndex === ($scope.consignmentAddressesCompleted.length - 1)) {\r\n $scope.consignmentAddressesCompleted = [];\r\n\r\n for (var i = 0; i < $scope.emails.length; i++) {\r\n if ($scope.emails[i].Send) ManifestFactory.sendCompletedEmail($scope.emails[i].To, $scope.emails[i].ConsignmentAddress);\r\n }\r\n\r\n AtlasModalFactory.close('divConfirmEmails');\r\n }\r\n else {\r\n $scope.currentEmailIndex++;\r\n $scope.currentEmail = $scope.emails[$scope.currentEmailIndex];\r\n }\r\n }\r\n\r\n $scope.dontSendEmail = function () {\r\n $scope.currentEmail.Send = false;\r\n\r\n if ($scope.currentEmailIndex === ($scope.consignmentAddressesCompleted.length - 1)) {\r\n $scope.consignmentAddressesCompleted = [];\r\n\r\n for (var i = 0; i < $scope.emails.length; i++) {\r\n if ($scope.emails[i].Send) ManifestFactory.sendCompletedEmail($scope.emails.To, $scope.emails[i].ConsignmentAddress);\r\n }\r\n\r\n AtlasModalFactory.close('divConfirmEmails');\r\n }\r\n else {\r\n $scope.currentEmailIndex++;\r\n $scope.currentEmail = $scope.emails[$scope.currentEmailIndex];\r\n }\r\n }\r\n\r\n $scope.dontSendEmails = function () {\r\n $scope.consignmentAddressesCompleted = [];\r\n \r\n AtlasModalFactory.close('divConfirmEmails');\r\n }\r\n\r\n $scope.showEmailReportDetails = function () {\r\n $scope.showReport = false;\r\n $scope.showEmailDetailsForReport = true;\r\n }\r\n\r\n $scope.sendReportEmail = function () {\r\n $scope.reportEmailErrorMessage = null;\r\n\r\n ManifestFactory.sendReportEmail($scope.emailReport.To, $scope.emailReport.Body, $scope.manifest);\r\n\r\n AtlasModalFactory.close('divManifestReport');\r\n }\r\n\r\n $scope.showLoadDetails = function (consignmentAddress) {\r\n $scope.consignmentAddress = consignmentAddress;\r\n\r\n AtlasModalFactory.open('divLoadDetails');\r\n }\r\n\r\n $scope.closeLoadDetails = function () {\r\n AtlasModalFactory.close('divLoadDetails');\r\n\t}\r\n\r\n $scope.toggleTraffic = function () {\r\n if ($scope.showTraffic) {\r\n $scope.manifestMap.removeTraffic();\r\n $scope.showTraffic = false;\r\n }\r\n else {\r\n $scope.manifestMap.showTraffic();\r\n $scope.showTraffic = true;\r\n }\r\n }\r\n\r\n $scope.getCustomerName = function (consignmentAddress) {\r\n var customerName = '';\r\n\r\n if (consignmentAddress.Consignment.CustomerBranch) {\r\n customerName = consignmentAddress.Consignment.CustomerBranch.Name;\r\n\r\n if (consignmentAddress.Consignment.CustomerBranch.SLA && consignmentAddress.Consignment.CustomerBranch.SLA.length > 0) customerName += ' [' + consignmentAddress.Consignment.CustomerBranch.SLA + ']';\r\n }\r\n else {\r\n customerName = consignmentAddress.Consignment.Customer.Name;\r\n\r\n if (consignmentAddress.Consignment.Customer.SLA && consignmentAddress.Consignment.Customer.SLA.length > 0) customerName += ' [' + consignmentAddress.Consignment.Customer.SLA + ']';\r\n }\r\n\r\n return customerName;\r\n }\r\n\r\n function addSupplierLocationToMap(supplier, location, markerType) {\r\n var infoContent;\r\n var defaultColour = '#2c6fba';\r\n\r\n if (!markerType) markerType = clickinon.google.maps.enums.markerTypes.PIN;\r\n\r\n infoContent = '
Driver: ' + supplier.Name + '
';\r\n\r\n if (location.Manifest) {\r\n //infoContent += '
Vehicle: ' + supplierLocation.Supplier.Manifests[0].VehicleType.Name + '
'\r\n infoContent += '
Vehicle: ' + supplier.Vehicles[0].VehicleType.Name + '
';\r\n if ($scope.user.Role === AtlasCourierExpress.Enums.Roles.AtlasUser) infoContent += '
Manifest Number: ' + location.Manifest.ManifestNumber + '
';\r\n infoContent += '
Last Address: ' + location.Manifest.FormattedLastDeliveryAddress + '
';\r\n infoContent += '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.manifestMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: location.Manifest.StatusColour.HexCode,\r\n fontColour: (location.Manifest.StatusColour.HexCode.indexOf('#595959') >= 0 || location.Manifest.StatusColour.HexCode.indexOf('#2c6fba') >= 0) ? ':#ffffff' : '#000000',\r\n //text: (supplierLocation.Supplier.Manifests.length > 0) ? supplierLocation.Supplier.Manifests[0].VehicleType.IconCode : '',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n else {\r\n infoContent += '
Vehicle: ' + supplier.Vehicles[0].VehicleType.Name + '
';\r\n infoContent += '
Last Tracked: ' + moment(location.DateCreated).format('DD MMM YYYY HH:mm:ss') + '
';\r\n\r\n $scope.manifestMap.addMarker(\r\n location.Latitude,\r\n location.Longitude,\r\n {\r\n //title: supplierLocation.Supplier.Name + ' @ ' + moment(supplierLocation.DateCreated).format('DD MMM YYYY HH:mm:ss'),\r\n colour: defaultColour,\r\n fontColour: '#000000',\r\n text: supplier.Vehicles[0].VehicleType.IconCode,\r\n infoContent: infoContent,\r\n markerType: markerType,\r\n autoOpenContent: true\r\n }\r\n );\r\n }\r\n }\r\n\r\n function updateDistanceTimesAndPricing() {\r\n $timeout(function () {\r\n var dateTimeIndex = null;\r\n var locations = $scope.manifestMap.getLocations();\r\n var totalDistance = $scope.manifestMap.getTotalDistance() / 1609.34;\r\n var totalTime = 0;\r\n\r\n $scope.manifest.TotalMiles = Math.round(totalDistance);\r\n\r\n if ($scope.manifest.CalculateTimes) {\r\n var route = $scope.manifestMap.getRoute();\r\n totalTime = $scope.manifestMap.getTotalTime() / 60;\r\n\r\n $scope.manifest.TotalTimeInMinutes = Math.round(totalTime);\r\n\r\n for (var i = 0; i < $scope.manifest.ConsignmentAddresses.length; i++) {\r\n if (locations[i].datetime) {\r\n $scope.manifest.ConsignmentAddresses[i].EstimatedStartDateAndTime = locations[i].datetime;\r\n $scope.manifest.ConsignmentAddresses[i].DisplayEstimatedStartDateAndTime = moment($scope.manifest.ConsignmentAddresses[i].EstimatedStartDateAndTime).format('DD/MM/YYYY HH:mm');\r\n }\r\n }\r\n }\r\n else {\r\n var duration = moment.duration(moment($scope.manifest.ConsignmentAddresses[$scope.manifest.ConsignmentAddresses.length - 1].EstimatedStartDateAndTime).diff(moment($scope.manifest.ConsignmentAddresses[0].EstimatedStartDateAndTime)));\r\n totalTime = duration.asMinutes();\r\n\r\n $scope.manifest.TotalTimeInMinutes = Math.round(totalTime);\r\n }\r\n\r\n var calculatedCost = 0;\r\n\r\n if (!$scope.manifest.Matrix) {\r\n for (var i = 0; i < $scope.costingMatrices.length; i++) {\r\n if ($scope.manifest.VehicleType.Id === $scope.costingMatrices[i].VehicleType.Id) {\r\n $scope.manifest.Matrix = $scope.costingMatrices[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if ($scope.manifest.Matrix) {\r\n if ($scope.manifest.VehicleType.Id === $scope.manifest.Matrix.VehicleType.Id && $scope.manifest.Matrix.MatrixType.Name.toUpperCase() === 'COSTING - SUPPLIER') {\r\n if ($scope.manifest.Matrix.MatrixPriceIncrement.Name.toUpperCase() === 'DISTANCE') {\r\n for (var p = 0; p < $scope.manifest.Matrix.PriceMatrices.length; p++) {\r\n if (totalDistance > $scope.manifest.Matrix.PriceMatrices[p].From) {\r\n if (totalDistance > $scope.manifest.Matrix.PriceMatrices[p].To) {\r\n calculatedCost += (($scope.manifest.Matrix.PriceMatrices[p].To - $scope.manifest.Matrix.PriceMatrices[p].From) / $scope.manifest.Matrix.PriceMatrices[p].Interval) * $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n }\r\n else {\r\n calculatedCost += ((totalDistance - $scope.manifest.Matrix.PriceMatrices[p].From) / $scope.manifest.Matrix.PriceMatrices[p].Interval) * $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var p = 0; p < $scope.manifest.Matrix.PriceMatrices.length; p++) {\r\n if (totalTime > $scope.manifest.Matrix.PriceMatrices[p].From) {\r\n //if (totalTime > $scope.manifest.Matrix.PriceMatrices[p].To) {\r\n // calculatedCost += (($scope.manifest.Matrix.PriceMatrices[p].To - $scope.manifest.Matrix.PriceMatrices[p].From) / $scope.manifest.Matrix.PriceMatrices[p].Interval) * $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n //}\r\n //else {\r\n // calculatedCost += ((totalTime - $scope.manifest.Matrix.PriceMatrices[p].From) / $scope.manifest.Matrix.PriceMatrices[p].Interval) * $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n //}\r\n\r\n calculatedCost += $scope.manifest.Matrix.PriceMatrices[p].PriceBreak;\r\n }\r\n }\r\n }\r\n if (calculatedCost < $scope.manifest.Matrix.MinimumPrice) {\r\n calculatedCost = $scope.manifest.Matrix.MinimumPrice;\r\n }\r\n }\r\n\r\n for (var r = 0; r < $scope.areaAdditionalChargeRules.length; r++) {\r\n var rule = $scope.areaAdditionalChargeRules[r];\r\n var postcodes = rule.Postcodes.split('\\n');\r\n var exclusions = (rule.PostcodeExclusions) ? rule.PostcodeExclusions.split('\\n') : null;\r\n var exclusionsFound = false;\r\n\r\n for (var v = 0; v < rule.VehicleTypes.length; v++) {\r\n if ($scope.manifest.VehicleType.Id === rule.VehicleTypes[v].Id) {\r\n for (var a = 0; a < $scope.manifest.ConsignmentAddresses.length; a++) {\r\n for (var p = 0; p < postcodes.length; p++) {\r\n if ($scope.manifest.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(postcodes[p].toUpperCase())) {\r\n if (exclusions) {\r\n for (var e = 0; e < exclusions.length; e++) {\r\n if ($scope.manifest.ConsignmentAddresses[a].Address.Postcode.toUpperCase().startsWith(exclusions[e].toUpperCase())) {\r\n exclusionsFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!exclusionsFound) {\r\n var areaAdditionalChargeCost = calculatedCost * (rule.CostPercentage / 100);\r\n\r\n if (areaAdditionalChargeCost > rule.MaxCost) {\r\n calculatedCost += rule.MaxCost;\r\n }\r\n else {\r\n calculatedCost += areaAdditionalChargeCost;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n\r\n if (areaAdditionalChargeCost) break;\r\n }\r\n\r\n if ($scope.manifest.ConsignmentAddresses) {\r\n for (var a = 0; a < $scope.manifest.ConsignmentAddresses.length; a++) {\r\n if ($scope.manifest.ConsignmentAddresses[a].AdditionalCharges) {\r\n for (var c = 0; c < $scope.manifest.ConsignmentAddresses[a].AdditionalCharges.length; c++) {\r\n calculatedCost += $scope.manifest.ConsignmentAddresses[a].AdditionalCharges[c].AdditionalCharge.Cost;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.manifest.CalculatedCost = $filter('number')(calculatedCost, 2);\r\n\r\n //if (!$scope.manifest.CostManuallySet) {\r\n // $scope.manifest.Cost = $filter('number')(calculatedCost, 2);\r\n //}\r\n\r\n if (!$scope.manifest.Id) {\r\n $scope.manifest.Cost = $filter('number')(calculatedCost, 2);\r\n }\r\n }\r\n });\r\n }\r\n}]);","suppliers.controller('SuppliersController', ['$rootScope', '$scope', '$http', '$filter', '$state', 'FoundationApi', 'UserFactory', 'SupplierFactory', 'SettingsFactory', 'AtlasUserFactory', 'PhotosFactory', function ($rootScope, $scope, $http, $filter, $state, FoundationApi, UserFactory, SupplierFactory, SettingsFactory, AtlasUserFactory, PhotosFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Suppliers');\r\n $scope.suppliers = null;\r\n $scope.supplier = null;\r\n $scope.supplierTypes = null;\r\n $scope.supplierBillingTypes = null;\r\n $scope.vatCodes = null;\r\n $scope.licenceCategories = null;\r\n $scope.vehicleTypes = null;\r\n $scope.supplierLicence = null;\r\n $scope.vehicle = null;\r\n $scope.supplierUser = {};\r\n $scope.sortBy = 'Name';\r\n $scope.searchName = '';\r\n $scope.accountCodes = null;\r\n $scope.deduction = null;\r\n $scope.errorMessage = null;\r\n $scope.saving = false;\r\n $scope.loadingSuppliers = false;\r\n $scope.loadingSupplier = false;\r\n $scope.photo = null;\r\n $scope.supplierPhotos = null;\r\n $scope.imageFile = null;\r\n\r\n //SupplierFactory.getSuppliers()\r\n // .then(\r\n // function () {\r\n // $scope.suppliers = SupplierFactory.suppliers;\r\n // $scope.loadingSuppliers = false;\r\n // }\r\n // );\r\n\r\n SettingsFactory.getSupplierTypes()\r\n .then(\r\n function (response) {\r\n $scope.supplierTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getVatCodes()\r\n .then(\r\n function (response) {\r\n $scope.vatCodes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getLicenceCategories()\r\n .then(\r\n function (response) {\r\n $scope.licenceCategories = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getSupplierBillingTypes()\r\n .then(\r\n function (response) {\r\n $scope.supplierBillingTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n $scope.searchSuppliers = function () {\r\n $scope.suppliers = null;\r\n $scope.loadingSuppliers = true;\r\n\r\n SupplierFactory.searchSuppliers($scope.searchName, $scope.searchIsTrackingDisabled, $scope.searchIsDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.suppliers = response;\r\n $scope.loadingSuppliers = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.createNewSupplier = function () {\r\n $scope.supplier = SupplierFactory.createNewSupplier();\r\n }\r\n\r\n $scope.editSupplier = function (s) {\r\n $scope.loadingSupplier = true;\r\n FoundationApi.publish('SupplierDetails', 'open');\r\n\r\n SupplierFactory.getSupplier(s.Id)\r\n .then(\r\n function (response) {\r\n $scope.supplier = SupplierFactory.supplier;\r\n $scope.loadingSupplier = false;\r\n\r\n $rootScope.$emit('title-updated', $scope.supplier.Name);\r\n\r\n if ($scope.supplier.IsSelfBilling) {\r\n $scope.supplier.Type = 'IS_SELF_BILLING';\r\n }\r\n else if ($scope.supplier.IsEmployed) {\r\n $scope.supplier.Type = 'IS_EMPLOYED';\r\n }\r\n else {\r\n $scope.supplier.Type = 'SUBCONTRACTOR';\r\n }\r\n\r\n if ($scope.supplier.SupplierUsers.length > 0) {\r\n $scope.supplierUser = $scope.supplier.SupplierUsers[0];\r\n }\r\n else {\r\n $scope.supplierUser = {};\r\n }\r\n\r\n $scope.supplierPhotos = [];\r\n\r\n for (var i = 0; i < $scope.supplier.SupplierPhotos.length; i += 3) {\r\n $scope.supplierPhotos.push($scope.supplier.SupplierPhotos.slice(i, i + 3));\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewSupplierLicence = function () {\r\n $scope.supplierLicence = {};\r\n }\r\n\r\n $scope.editSupplierLicence = function (l) {\r\n $scope.supplierLicence = l;\r\n }\r\n\r\n $scope.updateSupplierLicenceList = function () {\r\n if ($scope.supplierDetailsForm.ddlSupplierDetails_LicenceType.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_LicenceFrom.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_LicenceTo.$invalid) {\r\n $scope.SupplierLicencesFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n $scope.supplierLicence.DisplayValidFrom = moment($scope.supplierLicence.ValidFrom).format('DD/MM/YYYY');\r\n $scope.supplierLicence.DisplayValidTo = moment($scope.supplierLicence.ValidTo).format('DD/MM/YYYY');\r\n\r\n if ($scope.supplierLicence.Id) {\r\n for (var i = 0; i < $scope.supplier.SupplierLicences.length; i++) {\r\n if ($scope.supplier.SupplierLicences[i].Id === $scope.supplierLicence.Id) {\r\n $scope.supplier.SupplierLicences[i] = $scope.supplierLicence;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if (!$scope.supplier.SupplierLicences) $scope.supplier.SupplierLicences = [];\r\n\r\n $scope.supplier.SupplierLicences.push($scope.supplierLicence);\r\n }\r\n\r\n $scope.supplierLicence = null;\r\n $scope.SupplierLicencesFormSubmitted = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_LicenceType.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_LicenceFrom.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_LicenceTo.$dirty = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_LicenceType.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_LicenceFrom.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_LicenceTo.$pristine = true;\r\n }\r\n\r\n $scope.deleteSupplierLicence = function (index, licence) {\r\n $scope.supplier.SupplierLicences.splice(index, 1);\r\n }\r\n\r\n $scope.cancelSupplierLicenceEdit = function () {\r\n $scope.supplierLicence = null;\r\n }\r\n\r\n $scope.addNewVehicle = function () {\r\n if (!$scope.supplier.Vehicles || $scope.supplier.Vehicles.length === 0) {\r\n $scope.vehicle = {\r\n IsDefaultVehicle: true\r\n };\r\n }\r\n else {\r\n $scope.vehicle = {};\r\n }\r\n }\r\n\r\n $scope.editVehicle = function (v) {\r\n $scope.vehicle = v;\r\n }\r\n\r\n $scope.updateVehicleList = function () {\r\n if ($scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$invalid) {\r\n $scope.SupplierVehiclesFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.vehicle.Id) {\r\n for (var i = 0; i < $scope.supplier.Vehicles.length; i++) {\r\n if ($scope.supplier.Vehicles[i].Id === $scope.vehicle.Id) {\r\n $scope.supplier.Vehicles[i] = $scope.vehicle;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if (!$scope.supplier.Vehicles) $scope.supplier.Vehicles = [];\r\n\r\n $scope.supplier.Vehicles.push($scope.vehicle);\r\n }\r\n\r\n $scope.vehicle = null;\r\n $scope.SupplierVehiclesFormSubmitted = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$dirty = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$pristine = true;\r\n $scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$pristine = true;\r\n }\r\n\r\n $scope.deleteVehicle = function (index, deduction) {\r\n $scope.supplier.Vehicles.splice(index, 1);\r\n }\r\n\r\n $scope.cancelVehicleEdit = function () {\r\n $scope.vehicle = null;\r\n }\r\n\r\n $scope.addNewDeduction = function () {\r\n $scope.deduction = {};\r\n $scope.selectedAccountCode = null;\r\n }\r\n\r\n $scope.searchAccountCode = function (searchText) {\r\n if (searchText.indexOf(' - ') > 0) searchText = searchText.slice(0, searchText.indexOf(' - '));\r\n\r\n return SettingsFactory.searchAccountCodes(searchText);\r\n }\r\n\r\n $scope.accountCodeSelected = function (accountCode) {\r\n $scope.selectedAccountCode = accountCode;\r\n\r\n $scope.deduction.AccountCode = accountCode.Item.Code;\r\n }\r\n\r\n $scope.editDeduction = function (deduction) {\r\n SettingsFactory.searchAccountCodes(deduction.AccountCode)\r\n .then(\r\n function (accountCodes) {\r\n $scope.deduction = deduction;\r\n $scope.selectedAccountCode = accountCodes[0];\r\n },\r\n function (error) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.updateSupplierDeductionList = function () {\r\n if ($scope.supplierDetailsForm.txtSupplierDetails_DeductionName.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_DeductionValue.$invalid || $scope.supplierDetailsForm.txtSupplierDetails_AccountCode.$invalid || $scope.supplierDetailsForm.ddlSupplierDetails_DeductionVATCode.$invalid) {\r\n $scope.SupplierDeductionsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.deduction.Id) {\r\n for (var i = 0; i < $scope.supplier.Deductions.length; i++) {\r\n if ($scope.supplier.Deductions[i].Id === $scope.deduction.Id) {\r\n $scope.supplier.Deductions[i] = $scope.deduction;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if (!$scope.supplier.Deductions) $scope.supplier.Deductions = [];\r\n\r\n $scope.supplier.Deductions.push($scope.deduction);\r\n }\r\n\r\n $scope.deduction = null;\r\n $scope.SupplierDeductionsFormSubmitted = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_DeductionName.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_DeductionValue.$dirty = false;\r\n $scope.supplierDetailsForm.txtSupplierDetails_AccountCode.$dirty = false;\r\n $scope.supplierDetailsForm.ddlSupplierDetails_DeductionVATCode.$dirty = false;\r\n }\r\n\r\n $scope.deleteDeduction = function (index, deduction) {\r\n $scope.supplier.Deductions.splice(index, 1);\r\n }\r\n\r\n $scope.cancelDeductionEdit = function () {\r\n $scope.deduction = null;\r\n $scope.selectedAccountCode = null;\r\n }\r\n\r\n $scope.saveSupplier = function () {\r\n $scope.errorMessage = null;\r\n var existingSupplier = ($scope.supplier.Id) ? true : false;\r\n\r\n if ($scope.supplier.SupplierLicences == null || $scope.supplier.SupplierLicences.length === 0) {\r\n $scope.errorMessage = 'Must add at least one licence';\r\n return false;\r\n }\r\n\r\n if ($scope.supplier.Vehicles == null || $scope.supplier.Vehicles.length === 0) {\r\n $scope.errorMessage = 'Must add at least one vehicle';\r\n return false;\r\n }\r\n\r\n var numberDefaultVehicles = 0;\r\n\r\n for (var i = 0; i < $scope.supplier.Vehicles.length; i++) {\r\n if ($scope.supplier.Vehicles[i].IsDefaultVehicle) numberDefaultVehicles++;\r\n }\r\n\r\n if (numberDefaultVehicles === 0) {\r\n $scope.errorMessage = 'You must select at least one vehicle as the default vehicle';\r\n return false;\r\n }\r\n\r\n if (numberDefaultVehicles > 1) {\r\n $scope.errorMessage = 'You can only have one vehicle as the default vehicle';\r\n return false;\r\n }\r\n\r\n switch ($scope.supplier.Type) {\r\n case 'IS_SELF_BILLING':\r\n $scope.supplier.IsSelfBilling = true;\r\n $scope.supplier.IsEmployed = false;\r\n break;\r\n case 'IS_EMPLOYED':\r\n $scope.supplier.IsSelfBilling = false;\r\n $scope.supplier.IsEmployed = true;\r\n break;\r\n default:\r\n $scope.supplier.IsSelfBilling = false;\r\n $scope.supplier.IsEmployed = false;\r\n break;\r\n }\r\n\r\n debugger;\r\n\r\n if ($scope.supplierUser && ($scope.supplierUser.Email || $scope.supplierUser.Username)) {\r\n if ($scope.supplierUser.NewPassword !== $scope.supplierUser.ConfirmPassword) {\r\n $scope.errorMessage = 'Supplier app passwords must match';\r\n return false;\r\n }\r\n\r\n if($scope.supplierUser.NewPassword) $scope.supplierUser.Password = $scope.supplierUser.NewPassword;\r\n $scope.supplier.SupplierUsers = [];\r\n $scope.supplier.SupplierUsers.push($scope.supplierUser);\r\n }\r\n\r\n $scope.saving = true;\r\n\r\n SupplierFactory.saveSupplier()\r\n .then(\r\n function (supplier) {\r\n SupplierFactory.getSupplier(supplier.Id)\r\n .then(\r\n function (supplier) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n $scope.supplier = supplier;\r\n\r\n $rootScope.$emit('title-updated', $scope.supplier.Name);\r\n\r\n if ($scope.supplier.IsSelfBilling) {\r\n $scope.supplier.Type = 'IS_SELF_BILLING';\r\n }\r\n else if ($scope.supplier.IsEmployed) {\r\n $scope.supplier.Type = 'IS_EMPLOYED';\r\n }\r\n else {\r\n $scope.supplier.Type = 'SUBCONTRACTOR';\r\n }\r\n\r\n if ($scope.supplier.SupplierUsers.length > 0) {\r\n $scope.supplierUser = $scope.supplier.SupplierUsers[0];\r\n }\r\n else {\r\n $scope.supplierUser = {};\r\n }\r\n\r\n if (existingSupplier) {\r\n for (var i = 0; i < $scope.suppliers.length; i++) {\r\n if ($scope.suppliers[i].Id === $scope.supplier.Id) {\r\n $scope.suppliers[i] = $scope.supplier;\r\n $scope.errorMessage = null;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.suppliers.push($scope.supplier);\r\n }\r\n\r\n FoundationApi.publish('supplier-notifications', { title: 'Supplier Record Saved', content: 'The supplier record for ' + $scope.supplier.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewPhoto = function () {\r\n if (!$scope.supplier.Photos || $scope.supplier.Photos.length === 0) {\r\n $scope.supplierPhoto = {};\r\n }\r\n else {\r\n $scope.supplierPhoto = {};\r\n }\r\n }\r\n\r\n $scope.editPhoto = function (p) {\r\n $scope.supplierPhoto = p;\r\n }\r\n\r\n $scope.photoSelected = function (element) {\r\n $scope.$apply(function () {\r\n $scope.saving = true;\r\n $scope.imageFile = element.files[0];\r\n\r\n PhotosFactory.upload(element.files[0])\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.supplierPhoto.Photo = response;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n }\r\n );\r\n });\r\n }\r\n\r\n $scope.updatePhotoList = function () {\r\n if ($scope.supplierDetailsForm.txtSupplierDetails_PhotoDescription.$invalid) {\r\n $scope.SupplierPhotosFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n $scope.saving = true;\r\n\r\n $scope.supplierPhoto.Supplier = $scope.supplier;\r\n\r\n SupplierFactory.saveSupplierPhoto($scope.supplierPhoto)\r\n .then(\r\n function (response) {\r\n SupplierFactory.getSupplier($scope.supplier.Id)\r\n .then(\r\n function (response) {\r\n $scope.supplier = SupplierFactory.supplier;\r\n $scope.saving = false;\r\n $scope.loadingSupplier = false;\r\n $scope.supplierPhoto = null;\r\n $scope.imageFile = null;\r\n\r\n if ($scope.supplier.IsSelfBilling) {\r\n $scope.supplier.Type = 'IS_SELF_BILLING';\r\n }\r\n else if ($scope.supplier.IsEmployed) {\r\n $scope.supplier.Type = 'IS_EMPLOYED';\r\n }\r\n else {\r\n $scope.supplier.Type = 'SUBCONTRACTOR';\r\n }\r\n\r\n if ($scope.supplier.SupplierUsers.length > 0) {\r\n $scope.supplierUser = $scope.supplier.SupplierUsers[0];\r\n }\r\n else {\r\n $scope.supplierUser = {};\r\n }\r\n\r\n $scope.supplierPhotos = [];\r\n\r\n for (var i = 0; i < $scope.supplier.SupplierPhotos.length; i += 3) {\r\n $scope.supplierPhotos.push($scope.supplier.SupplierPhotos.slice(i, i + 3));\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n \r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n }\r\n );\r\n\r\n //if ($scope.vehicle.Id) {\r\n // for (var i = 0; i < $scope.supplier.Vehicles.length; i++) {\r\n // if ($scope.supplier.Vehicles[i].Id === $scope.vehicle.Id) {\r\n // $scope.supplier.Vehicles[i] = $scope.vehicle;\r\n // break;\r\n // }\r\n // }\r\n //}\r\n //else {\r\n // if (!$scope.supplier.Vehicles) $scope.supplier.Vehicles = [];\r\n\r\n // $scope.supplier.Vehicles.push($scope.vehicle);\r\n //}\r\n\r\n //$scope.vehicle = null;\r\n //$scope.SupplierVehiclesFormSubmitted = false;\r\n //$scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$dirty = false;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$dirty = false;\r\n //$scope.supplierDetailsForm.ddlSupplierDetails_VehicleType.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleMake.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleModel.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleRegNumber.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleLength.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleWidth.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleHeight.$pristine = true;\r\n //$scope.supplierDetailsForm.txtSupplierDetails_VehicleInsuranceExpiry.$pristine = true;\r\n }\r\n\r\n $scope.deletePhoto = function () {\r\n $scope.imageFile = null;\r\n }\r\n\r\n $scope.deletePhotoFromList = function (photo) {\r\n $scope.saving = true;\r\n\r\n SupplierFactory.deleteSupplierPhoto(photo)\r\n .then(\r\n function (response) {\r\n SupplierFactory.getSupplier($scope.supplier.Id)\r\n .then(\r\n function (response) {\r\n $scope.supplier = SupplierFactory.supplier;\r\n $scope.saving = false;\r\n $scope.loadingSupplier = false;\r\n\r\n if ($scope.supplier.IsSelfBilling) {\r\n $scope.supplier.Type = 'IS_SELF_BILLING';\r\n }\r\n else if ($scope.supplier.IsEmployed) {\r\n $scope.supplier.Type = 'IS_EMPLOYED';\r\n }\r\n else {\r\n $scope.supplier.Type = 'SUBCONTRACTOR';\r\n }\r\n\r\n if ($scope.supplier.SupplierUsers.length > 0) {\r\n $scope.supplierUser = $scope.supplier.SupplierUsers[0];\r\n }\r\n else {\r\n $scope.supplierUser = {};\r\n }\r\n\r\n $scope.supplierPhotos = [];\r\n\r\n for (var i = 0; i < $scope.supplier.SupplierPhotos.length; i += 3) {\r\n $scope.supplierPhotos.push($scope.supplier.SupplierPhotos.slice(i, i + 3));\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelPhotoEdit = function () {\r\n $scope.supplierPhoto = null;\r\n }\r\n}]);","customers.controller('CustomersController', ['$rootScope', '$scope', '$http', '$filter', '$state', '$timeout', 'FoundationApi', 'UserFactory', 'CustomerFactory', 'CountryFactory', 'SettingsFactory', 'CommonFactory', 'AtlasUserFactory', 'AtlasModalFactory', function ($rootScope, $scope, $http, $filter, $state, $timeout, FoundationApi, UserFactory, CustomerFactory, CountryFactory, SettingsFactory, CommonFactory, AtlasUserFactory, AtlasModalFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n $scope.isUserManager = AtlasUserFactory.isUserManager();\r\n\r\n $rootScope.$emit('title-updated', 'Customers');\r\n $scope.customerAccountTypeEnums = AtlasCourierExpress.Enums.CustomerAccountTypes;\r\n $scope.customers = null;\r\n $scope.customer = null;\r\n $scope.customerIsOnStop = false;\r\n $scope.addresses = [];\r\n $scope.address = null;\r\n $scope.countries = null;\r\n $scope.contacts = [];\r\n $scope.contact = null;\r\n $scope.customerUser = null;\r\n $scope.createEditUser = false;\r\n $scope.priceMatrix = null;\r\n $scope.matrixTypes = null;\r\n $scope.priceMatrixIncrements = null;\r\n $scope.vehicleTypes = null;\r\n $scope.priceMatrices = null;\r\n $scope.priceMatrix = null;\r\n $scope.priceMatrixItem = null;\r\n $scope.searchName = '';\r\n $scope.searchCustomerAccountType = null;\r\n $scope.searchIsDeactivated = false;\r\n $scope.searchContactIsDeactivated = false;\r\n $scope.searchAddressIsDeactivated = false;\r\n $scope.sortBy = 'Name';\r\n $scope.sortReverse = false;\r\n $scope.errorMessage = null;\r\n $scope.saving = false;\r\n $scope.saved = false;\r\n $scope.changePasswordUser = null;\r\n $scope.changePasswordErrorMessage = null;\r\n $scope.changingPassword = false;\r\n $scope.customerAccountTypes = null;\r\n $scope.vatCodes = null;\r\n $scope.ledgerNumbers = null;\r\n $scope.invoiceSetupOptions = null;\r\n $scope.invoiceDeliveries = null;\r\n $scope.invoiceDeliveryOptions = null;\r\n $scope.paymentTermStartOptions = null;\r\n $scope.loadingCustomers = false;\r\n $scope.loadingCustomer = false;\r\n $scope.defaultControlScreenConsignmentColumns = null;\r\n $scope.controlScreenConsignmentColumns = null;\r\n $scope.contactErrorMessage = null;\r\n\r\n //CustomerFactory.getCustomers()\r\n // .then(\r\n // function (response) {\r\n // $scope.customers = response;\r\n // $scope.loadingCustomers = false;\r\n // },\r\n // function (response, status) {\r\n // debugger;\r\n // }\r\n // );\r\n\r\n CommonFactory.getCustomerAccountTypes()\r\n .then(\r\n function (response) {\r\n $scope.customerAccountTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getVatCodes()\r\n .then(\r\n function (response) {\r\n $scope.vatCodes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getLedgerNumbers()\r\n .then(\r\n function (response) {\r\n $scope.ledgerNumbers = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CountryFactory.getCountries()\r\n .then(\r\n function () {\r\n $scope.countries = CountryFactory.countries;\r\n }\r\n );\r\n\r\n CommonFactory.getMatrixTypes()\r\n .then(\r\n function (response) {\r\n $scope.matrixTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getMatrixPriceIncrements()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrixIncrements = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAllVehicleTypes()\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getMatrices()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrices = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getInvoiceSetupOptions()\r\n .then(\r\n function (response) {\r\n $scope.invoiceSetupOptions = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getInvoiceDeliveries()\r\n .then(\r\n function (response) {\r\n $scope.invoiceDeliveries = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getInvoiceDeliveryOptions()\r\n .then(\r\n function (response) {\r\n $scope.invoiceDeliveryOptions = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getPaymentTermStartOptions()\r\n .then(\r\n function (response) {\r\n $scope.paymentTermStartOptions = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getXeroOrganisations()\r\n .then(\r\n function (response) {\r\n $scope.xeroOrganisations = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getControlScreenConsignmentColumns()\r\n .then(\r\n function (response) {\r\n $scope.defaultControlScreenConsignmentColumns = response;\r\n $scope.controlScreenConsignmentColumns = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n $scope.searchCustomers = function () {\r\n $scope.customers = null;\r\n $scope.customer = null;\r\n $scope.address = null;\r\n $scope.contact = null;\r\n $scope.createEditUser = false;\r\n $scope.priceMatrix = null;\r\n $scope.priceMatrixItem = null;\r\n\r\n $scope.loadingCustomers = true;\r\n\r\n CustomerFactory.searchCustomers($scope.searchName, $scope.searchCustomerAccountType, $scope.searchIsDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.customers = response;\r\n $scope.loadingCustomers = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewCustomer = function () {\r\n $scope.addresses = [];\r\n $scope.contacts = [];\r\n $scope.customer = CustomerFactory.createNewCustomer();\r\n }\r\n\r\n $scope.editCustomer = function (c) {\r\n $scope.loadingCustomer = true;\r\n $scope.addresses = [];\r\n $scope.contacts = [];\r\n\r\n CustomerFactory.getCustomer(c.Id)\r\n .then(\r\n function (response) {\r\n $scope.loadingCustomer = false;\r\n $scope.customer = response;\r\n\r\n $rootScope.$emit('title-updated', $scope.customer.Name);\r\n\r\n if ($scope.customer.Parent !== null) {\r\n $scope.customer.HasParent = true;\r\n }\r\n else {\r\n $scope.customer.HasParent = false;\r\n }\r\n\r\n if ($scope.customer.AccountType.Id.toUpperCase() === $scope.customerAccountTypeEnums.OnStop) {\r\n $scope.customerIsOnStop = true;\r\n }\r\n else {\r\n $scope.customerIsOnStop = false;\r\n }\r\n\r\n //if ($scope.customer.Matrices == null || $scope.customer.Matrices.length == 0) {\r\n // $scope.customer.Matrices = $scope.priceMatrices;\r\n //}\r\n\r\n if ($scope.customer.Matrices) {\r\n for (var i = 0; i < $scope.customer.Matrices.length; i++) {\r\n $scope.customer.Matrices[i].MinimumPrice = $filter('number')($scope.customer.Matrices[i].MinimumPrice, 2);\r\n }\r\n }\r\n\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if (!$scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if (!$scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n\r\n if ($scope.customer.ConsignmentControlScreenColumns && $scope.customer.ConsignmentControlScreenColumns.length > 0) {\r\n $scope.customer.useCustomControlScreen = true;\r\n $scope.controlScreenConsignmentColumns = $scope.customer.ConsignmentControlScreenColumns;\r\n }\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.updateAddressList = function () {\r\n if ($scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$invalid || $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$invalid || $scope.customerDetailsForm.ddlCustomerAddresses_Country.$invalid) {\r\n $scope.CustomerAddressesFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.address.Id) {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if ($scope.customer.Addresses[i].Id === $scope.address.Id) {\r\n $scope.customer.Addresses[i] = $scope.address;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.customer.Addresses.push($scope.address);\r\n }\r\n\r\n $scope.addresses = [];\r\n\r\n if ($scope.searchAddressIsDeactivated) {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if ($scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if (!$scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n }\r\n\r\n $scope.address = null;\r\n $scope.CustomerAddressesFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$dirty = false;\r\n $scope.customerDetailsForm.ddlCustomerAddresses_Country.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$pristine = true;\r\n $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$pristine = true;\r\n $scope.customerDetailsForm.ddlCustomerAddresses_Country.$pristine = true;\r\n }\r\n\r\n $scope.addNewAddress = function () {\r\n $scope.address = {};\r\n }\r\n\r\n $scope.editAddress = function (a) {\r\n $scope.address = a;\r\n }\r\n\r\n $scope.cancelAddressEdit = function () {\r\n $scope.address = null;\r\n $scope.CustomerAddressesFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$dirty = false;\r\n $scope.customerDetailsForm.ddlCustomerAddresses_Country.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerAddresses_AddressLine1.$pristine = true;\r\n $scope.customerDetailsForm.txtCustomerAddresses_Postcode.$pristine = true;\r\n $scope.customerDetailsForm.ddlCustomerAddresses_Country.$pristine = true;\r\n }\r\n\r\n $scope.filterAddressList = function () {\r\n $scope.addresses = [];\r\n $scope.searchAddressIsDeactivated = !$scope.searchAddressIsDeactivated;\r\n\r\n if ($scope.searchAddressIsDeactivated) {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if ($scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if (!$scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n }\r\n }\r\n\r\n $scope.updateContactList = function () {\r\n if ($scope.customerDetailsForm.txtCustomerContacts_Name.$invalid) {\r\n $scope.CustomerContactsFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n var contactNameAlreadyExists = false;\r\n\r\n if ($scope.contact.Id) {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if ($scope.customer.Contacts[i].Id === $scope.contact.Id) {\r\n for (var j = 0; j < $scope.customer.Contacts.length; j++) {\r\n if ($scope.contact.Id !== $scope.customer.Contacts[j].Id) {\r\n if ($scope.contact.Name.trim().toUpperCase() === $scope.customer.Contacts[j].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n\t\t\t\t\t\t}\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n }\r\n\r\n $scope.customer.Contacts[i] = $scope.contact;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if ($scope.contact.Name.trim().toUpperCase() === $scope.customer.Contacts[i].Name.trim().toUpperCase()) {\r\n contactNameAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (contactNameAlreadyExists) {\r\n $scope.contactErrorMessage = \"A contact with this name already exists\";\r\n return false;\r\n\t\t\t}\r\n\r\n $scope.customer.Contacts.push($scope.contact);\r\n $scope.contacts.push($scope.contact);\r\n }\r\n\r\n $scope.contacts = [];\r\n\r\n if ($scope.searchContactIsDeactivated) {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if ($scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if (!$scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n }\r\n\r\n $scope.contact = null;\r\n $scope.CustomerContactsFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerContacts_Name.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerContacts_Name.$pristine = true;\r\n }\r\n\r\n $scope.addNewContact = function () {\r\n $scope.contact = {};\r\n }\r\n\r\n $scope.editContact = function (c) {\r\n $scope.contact = c;\r\n }\r\n\r\n $scope.cancelContactEdit = function () {\r\n $scope.contact = null;\r\n $scope.CustomerContactsFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerContacts_Name.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerContacts_Name.$pristine = true;\r\n }\r\n\r\n $scope.filterContactList = function () {\r\n $scope.contacts = [];\r\n $scope.searchContactIsDeactivated = !$scope.searchContactIsDeactivated;\r\n\r\n if ($scope.searchContactIsDeactivated) {\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if ($scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n }\r\n else{\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if (!$scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n }\r\n }\r\n\r\n $scope.updateUserList = function (customerUser) {\r\n if ($scope.customerDetailsForm.txtCustomerUsers_Email.$invalid || $scope.customerDetailsForm.txtCustomerUsers_Email.$invalid || ($scope.customerDetailsForm.txtCustomerUsers_Password.$invalid && $scope.customerUser.Id == null) || ($scope.customerDetailsForm.txtCustomerUsers_ConfirmPassword.$invalid && $scope.customerUser.Id == null)) {\r\n $scope.CustomerUsersFormSubmitted = true;\r\n return false;\r\n }\r\n\r\n if ($scope.customerUser.Id) {\r\n for (var i = 0; i < $scope.customer.CustomerUsers.length; i++) {\r\n if ($scope.customer.CustomerUsers[i].Id === $scope.customerUser.Id) {\r\n $scope.customer.CustomerUsers[i] = $scope.customerUser;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.customer.CustomerUsers.push($scope.customerUser);\r\n }\r\n\r\n $scope.customerUser = null;\r\n $scope.createEditUser = false;\r\n $scope.CustomerUsersFormSubmitted = false;\r\n $scope.customerDetailsForm.txtCustomerUsers_Email.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerUsers_Password.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerUsers_ConfirmPassword.$dirty = false;\r\n $scope.customerDetailsForm.txtCustomerUsers_Email.$pristine = true;\r\n $scope.customerDetailsForm.txtCustomerUsers_Password.$pristine = true;\r\n $scope.customerDetailsForm.txtCustomerUsers_ConfirmPassword.$pristine = true;\r\n }\r\n\r\n $scope.addNewUser = function () {\r\n $scope.customerUser = {};\r\n $scope.createEditUser = true;\r\n }\r\n\r\n $scope.editUser = function (u) {\r\n $scope.customerUser = u;\r\n $scope.createEditUser = true;\r\n }\r\n\r\n $scope.cancelUserEdit = function () {\r\n $scope.customerUser = null;\r\n $scope.createEditUser = false;\r\n\r\n if ($scope.customerContactForm) {\r\n $scope.customerContactForm.txtCustomerUsers_Email.$dirty = false;\r\n $scope.customerContactForm.txtCustomerUsers_Email.$dirty = false;\r\n $scope.customerContactForm.txtCustomerUsers_Password.$dirty = false;\r\n $scope.customerContactForm.txtCustomerUsers_ConfirmPassword.$dirty = false;\r\n $scope.customerContactForm.txtCustomerUsers_Email.$pristine = true;\r\n $scope.customerContactForm.txtCustomerUsers_Email.$pristine = true;\r\n $scope.customerContactForm.txtCustomerUsers_Password.$pristine = true;\r\n $scope.customerContactForm.txtCustomerUsers_ConfirmPassword.$pristine = true;\r\n }\r\n }\r\n\r\n $scope.selectUser = function (u) {\r\n $scope.changePasswordUser = {\r\n Id: u.Id,\r\n Role: u.Role,\r\n Email: u.Email,\r\n Username: u.Username,\r\n Password: '',\r\n ConfirmPassword: '',\r\n IsDeactivated: u.IsDeactivated\r\n };\r\n\r\n AtlasModalFactory.open('changePasswordModal');\r\n }\r\n\r\n $scope.openChangePasswordModal = function () {\r\n \r\n\t}\r\n\r\n $scope.changeUserPassword = function () {\r\n $scope.changingPassword = true;\r\n\r\n UserFactory.changePassword($scope.changePasswordUser)\r\n .then(\r\n function (response) {\r\n $scope.changingPassword = false;\r\n\r\n AtlasModalFactory.close('changePasswordModal');\r\n },\r\n function (response, status) {\r\n $scope.changingPassword = false;\r\n $scope.changePasswordErrorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.updatePricingList = function () {\r\n if ($scope.priceMatrix.Id) {\r\n for (var i = 0; i < $scope.customer.Matrices.length; i++) {\r\n if ($scope.customer.Matrices[i].Id === $scope.priceMatrix.Id) {\r\n $scope.customer.Matrices[i] = $scope.priceMatrix;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.customer.Matrices.push($scope.priceMatrix);\r\n }\r\n\r\n $scope.priceMatrix = null;\r\n }\r\n\r\n $scope.addNewPriceMatrix = function () {\r\n var type = null;\r\n\r\n for (var i = 0; i < $scope.matrixTypes.length; i++) {\r\n if ($scope.matrixTypes[i].Name.toUpperCase() === 'PRICING') {\r\n type = $scope.matrixTypes[i];\r\n }\r\n }\r\n\r\n $scope.priceMatrix = {\r\n MatrixType: type\r\n };\r\n }\r\n\r\n $scope.editPriceMatrix = function (m) {\r\n $scope.priceMatrix = m;\r\n }\r\n\r\n $scope.deletePriceMatrix = function (m, index) {\r\n $scope.customer.Matrices.splice(index, 1);\r\n }\r\n\r\n $scope.cancelPriceMatrixEdit = function () {\r\n $scope.priceMatrix = null;\r\n }\r\n\r\n $scope.updatePricingMatrixList = function () {\r\n if ($scope.priceMatrix.Id) {\r\n for (var i = 0; i < $scope.customer.Matrices.length; i++) {\r\n if ($scope.customer.Matrices[i].Id === $scope.priceMatrix.Id) {\r\n $scope.customer.Matrices[i] = $scope.priceMatrix;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n $scope.customer.Matrices.push($scope.priceMatrix);\r\n }\r\n\r\n $scope.priceMatrix = null;\r\n }\r\n\r\n $scope.addNewPriceMatrixItem = function () {\r\n $scope.priceMatrixItem = {};\r\n }\r\n\r\n $scope.editPriceMatrixItem = function (m, index) {\r\n $scope.priceMatrixItem = m;\r\n $scope.priceMatrixItem.Index = index;\r\n }\r\n\r\n $scope.removePriceMatrixItem = function (m, index) {\r\n $scope.priceMatrix.PriceMatrices.splice(index, 1);\r\n }\r\n\r\n $scope.updatePricingMatrixItemList = function () {\r\n if ($scope.priceMatrixItem.Index != null || $scope.priceMatrixItem.Index != undefined) {\r\n $scope.priceMatrix.PriceMatrices[$scope.priceMatrixItem.Index] = $scope.priceMatrixItem;\r\n }\r\n else {\r\n if (!$scope.priceMatrix.PriceMatrices) $scope.priceMatrix.PriceMatrices = [];\r\n\r\n $scope.priceMatrix.PriceMatrices.push($scope.priceMatrixItem);\r\n }\r\n\r\n $scope.priceMatrixItem = null;\r\n }\r\n\r\n $scope.cancelPriceMatrixItemEdit = function () {\r\n $scope.priceMatrixItem = null;\r\n }\r\n\r\n $scope.changeCustomerAccountType = function () {\r\n $scope.customerIsOnStop = false;\r\n\r\n if ($scope.customer.AccountType.Id.toUpperCase() === $scope.customerAccountTypeEnums.OnStop) {\r\n $scope.customerIsOnStop = true;\r\n }\r\n }\r\n\r\n $scope.closeChangePasswordModal = function () {\r\n AtlasModalFactory.close('changePasswordModal');\r\n\t}\r\n\r\n $scope.saveCustomer = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingCustomer = ($scope.customer.Id) ? true : false;\r\n\r\n if ($scope.customer.useCustomControlScreen && ($scope.customer.ConsignmentControlScreenColumns == null || $scope.customer.ConsignmentControlScreenColumns.length == 0)) {\r\n $scope.customer.ConsignmentControlScreenColumns = $scope.controlScreenConsignmentColumns;\r\n\r\n for (var i = 0; i < $scope.customer.ConsignmentControlScreenColumns.length; i++) {\r\n delete $scope.customer.ConsignmentControlScreenColumns[i].Id;\r\n }\r\n }\r\n else if(!$scope.customer.useCustomControlScreen && $scope.customer.ConsignmentControlScreenColumns != null && $scope.customer.ConsignmentControlScreenColumns.length > 0) {\r\n $scope.customer.ConsignmentControlScreenColumns = [];\r\n }\r\n\r\n CustomerFactory.saveCustomer()\r\n .then(\r\n function (customer) {\r\n CustomerFactory.getCustomer(customer.Id)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n $scope.customer = response;\r\n $scope.addresses = [];\r\n $scope.contacts = [];\r\n\r\n $rootScope.$emit('title-updated', $scope.customer.Name);\r\n\r\n if (existingCustomer) {\r\n for (var i = 0; i < $scope.customers.length; i++) {\r\n if ($scope.customers[i].Id === $scope.customer.Id) {\r\n $scope.customers[i] = $scope.customer;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if ($scope.customer.Parent !== null) {\r\n $scope.customer.HasParent = true;\r\n }\r\n else {\r\n $scope.customer.HasParent = false;\r\n }\r\n\r\n $scope.customers.push($scope.customer);\r\n }\r\n\r\n if ($scope.customer.AccountType.Id.toUpperCase() === $scope.customerAccountTypeEnums.OnStop) {\r\n $scope.customerIsOnStop = true;\r\n }\r\n\r\n //if ($scope.customer.Matrices == null || $scope.customer.Matrices.length == 0) {\r\n // $scope.customer.Matrices = $scope.priceMatrices;\r\n //}\r\n\r\n if ($scope.customer.Matrices) {\r\n for (var i = 0; i < $scope.customer.Matrices.length; i++) {\r\n $scope.customer.Matrices[i].MinimumPrice = $filter('number')($scope.customer.Matrices[i].MinimumPrice, 2);\r\n }\r\n }\r\n\r\n for (var i = 0; i < $scope.customer.Addresses.length; i++) {\r\n if (!$scope.customer.Addresses[i].IsDeactivated) $scope.addresses.push($scope.customer.Addresses[i]);\r\n }\r\n\r\n for (var i = 0; i < $scope.customer.Contacts.length; i++) {\r\n if (!$scope.customer.Contacts[i].IsDeactivated) $scope.contacts.push($scope.customer.Contacts[i]);\r\n }\r\n\r\n if ($scope.customer.ConsignmentControlScreenColumns && $scope.customer.ConsignmentControlScreenColumns.length > 0) {\r\n $scope.customer.useCustomControlScreen = true;\r\n $scope.controlScreenConsignmentColumns = $scope.customer.ConsignmentControlScreenColumns;\r\n }\r\n else {\r\n $scope.customer.useCustomControlScreen = false;\r\n $scope.controlScreenConsignmentColumns = $scope.defaultControlScreenConsignmentColumns;\r\n }\r\n\r\n FoundationApi.publish('customer-notifications', { title: 'Customer Record Saved', content: 'The customer record for ' + $scope.customer.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n }, \r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.moveColumnOrderUp = function (column, index) {\r\n if (column.Order === 1) return;\r\n\r\n $scope.controlScreenConsignmentColumns[index].Order -= 1;\r\n $scope.controlScreenConsignmentColumns[index - 1].Order += 1;\r\n\r\n $scope.controlScreenConsignmentColumns = clickinon.utilities.moveElementInArray($scope.controlScreenConsignmentColumns, index, (index - 1));\r\n }\r\n\r\n $scope.moveColumnOrderDown = function (column, index) {\r\n if (column.Order === ($scope.controlScreenConsignmentColumns.length + 1)) return;\r\n\r\n $scope.controlScreenConsignmentColumns[index].Order += 1;\r\n $scope.controlScreenConsignmentColumns[index + 1].Order -= 1;\r\n\r\n $scope.controlScreenConsignmentColumns = clickinon.utilities.moveElementInArray($scope.controlScreenConsignmentColumns, index, (index + 1));\r\n }\r\n}]);","settings.controller('SettingsController', ['$rootScope', '$scope', '$http', '$filter', '$state', 'FoundationApi', 'UserFactory', 'AtlasUserFactory', 'SettingsFactory', 'CommonFactory', 'AtlasModalFactory', function ($rootScope, $scope, $http, $filter, $state, FoundationApi, UserFactory, AtlasUserFactory, SettingsFactory, CommonFactory, AtlasModalFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $state.go('login');\r\n }\r\n\r\n $rootScope.$emit('title-updated', 'Settings');\r\n $scope.loading = true;\r\n $scope.globalSettings = null;\r\n $scope.vatCodes = null;\r\n $scope.vatCode = null;\r\n $scope.currencies = null;\r\n $scope.currency = null;\r\n $scope.supplierTypes = null;\r\n $scope.supplierType = null;\r\n $scope.supplierBillingTypes = null;\r\n $scope.supplierBillingType = null;\r\n $scope.supplierBillingTypeBrandingTheme = null;\r\n $scope.searchSupplierBillingType = {\r\n name: null,\r\n isDeactivated: false\r\n };\r\n $scope.brandingThemes = null;\r\n $scope.searchLicenceCategory = {\r\n name: null,\r\n isDeactivated: false\r\n }; \r\n $scope.licenceCategories = null;\r\n $scope.licenceCategory = null;\r\n $scope.ledgerNumbers = null;\r\n $scope.ledgerNumber = null;\r\n $scope.searchAtlasUser = {\r\n username: null,\r\n email: null,\r\n isDeactivated: false\r\n }; \r\n $scope.atlasUsers = null;\r\n $scope.atlasUser = null;\r\n $scope.roles = null;\r\n $scope.searchAdditionalCharge = {\r\n chargeFor: null,\r\n isDeactivated: false\r\n }; \r\n $scope.additionalCharges = null;\r\n $scope.additionalCharge = null;\r\n $scope.searchVehicleType = {\r\n name: null,\r\n isDeactivated: false\r\n }; \r\n $scope.vehicleTypes = null;\r\n $scope.vehicleType = null;\r\n $scope.priceMatrices = null;\r\n $scope.priceMatrix = null;\r\n $scope.priceMatrixItem = null;\r\n $scope.matrixTypes = null;\r\n $scope.priceMatrixIncrements = null;\r\n $scope.errorMessage = null;\r\n $scope.saving = null;\r\n $scope.changePasswordUser = null;\r\n $scope.changePasswordErrorMessage = null;\r\n $scope.changingPassword = false;\r\n $scope.updatingVehicleOrder = false;\r\n $scope.whitelistedIpAddresses = null;\r\n $scope.whitelistedIpAddress = null;\r\n $scope.userIpLogs = null;\r\n $scope.searchAreaAdditionalCharge = {\r\n name: null,\r\n postCode: null,\r\n isDeactivated: false\r\n }; \r\n $scope.areaAdditionalChargeRules = null;\r\n $scope.areaAdditionalChargeRule = null;\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n $scope.settingsForms = {};\r\n\r\n SettingsFactory.getGlobalSettings()\r\n .then(\r\n function (response) {\r\n $scope.globalSettings = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAllVatCodes()\r\n .then(\r\n function (response) {\r\n $scope.vatCodes = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAllSupplierTypes()\r\n .then(\r\n function (response) {\r\n $scope.supplierTypes = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchLicenceCategories($scope.searchLicenceCategory.name, $scope.searchLicenceCategory.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.licenceCategories = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getAllLedgerNumbers()\r\n .then(\r\n function (response) {\r\n $scope.ledgerNumbers = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchAdditionalCharges($scope.searchAdditionalCharge.chargeFor, $scope.searchAdditionalCharge.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.additionalCharges = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchVehicleTypes($scope.searchVehicleType.name, $scope.searchVehicleType.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n }\r\n );\r\n\r\n CommonFactory.getMatrixTypes()\r\n .then(\r\n function (response) {\r\n $scope.matrixTypes = response;\r\n\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getMatrixPriceIncrements()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrixIncrements = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getMatrices()\r\n .then(\r\n function (response) {\r\n $scope.priceMatrices = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchAtlasUsers($scope.searchAtlasUser.username, $scope.searchAtlasUser.email, $scope.searchAtlasUser.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.atlasUsers = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n CommonFactory.getAtlasUserRoles()\r\n .then(\r\n function (response) {\r\n $scope.roles = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getWhitelistedIpAddresses()\r\n .then(\r\n function (response) {\r\n $scope.whitelistedIpAddresses = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchAreaAdditionalChargeRules($scope.searchAreaAdditionalCharge.name, $scope.searchAreaAdditionalCharge.postCode, $scope.searchAreaAdditionalCharge.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.getBrandingThemes()\r\n .then(\r\n function (response) {\r\n $scope.brandingThemes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n SettingsFactory.searchSupplierBillingTypes($scope.searchSupplierBillingType.name, $scope.searchSupplierBillingType.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.supplierBillingTypes = response;\r\n\r\n if ($scope.globalSettings && $scope.vatCodes && $scope.supplierTypes && $scope.licenceCategories && $scope.ledgerNumbers && $scope.additionalCharges && $scope.atlasUsers && $scope.whitelistedIpAddresses && $scope.areaAdditionalChargeRules && $scope.supplierBillingTypes) $scope.loading = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n\r\n $scope.saveGlobalSettings = function () {\r\n $scope.saving = true;\r\n\r\n SettingsFactory.saveGlobalSettings()\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Global Settings Record Saved', content: 'The global settings have been successfully saved', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewVATCode = function(){\r\n $scope.vatCode = {};\r\n }\r\n\r\n $scope.editVatCode = function (v) {\r\n $scope.vatCode = v;\r\n }\r\n\r\n $scope.saveVATCode = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingVATCode = $scope.vatCode.Id ? true : false;\r\n\r\n SettingsFactory.saveVatCodes($scope.vatCode)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'VAT Code Saved', content: 'The vat code ' + $scope.vatCode.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.vatCode = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelVATCodeSave = function () {\r\n $scope.vatCode = null;\r\n }\r\n\r\n $scope.addNewCurrency = function () {\r\n $scope.currency = {};\r\n }\r\n\r\n $scope.editCurrency = function (c) {\r\n $scope.currency = c;\r\n }\r\n\r\n $scope.saveCurrency = function () {\r\n //$scope.errorMessage = null;\r\n //$scope.saving = true;\r\n\r\n //if (!$scope.currency.Id) {\r\n // $http.post(__WEB_SERVICE_BASE_URL + '/Currencies', $scope.currency)\r\n // .success(function (response) {\r\n // $scope.saving = false;\r\n // $scope.errorMessage = null;\r\n // $scope.currencies.push($scope.currency);\r\n // })\r\n // .error(function (response, status) {\r\n // $scope.saving = false;\r\n // $scope.errorMessage = \"An error has occurred.\"\r\n // });\r\n //}\r\n //else {\r\n // $http.put(__WEB_SERVICE_BASE_URL + '/Currencies/' + $scope.currency.Id, $scope.currency)\r\n // .success(function (response) {\r\n // for (var i = 0; i < $scope.currencies.length; i++) {\r\n // if ($scope.currencies[i].Id == $scope.currency.Id) {\r\n // $scope.currencies[i] = $scope.currency;\r\n // $scope.errorMessage = null;\r\n // break;\r\n // }\r\n // }\r\n // $scope.saving = false;\r\n // })\r\n // .error(function (response, status) {\r\n // $scope.saving = false;\r\n // $scope.errorMessage = \"An error has occurred.\"\r\n // });\r\n //}\r\n }\r\n\r\n $scope.cancelCurrencySave = function () {\r\n $scope.currency = null;\r\n }\r\n\r\n $scope.addNewSupplierType = function () {\r\n $scope.supplierType = {};\r\n }\r\n\r\n $scope.editSupplierType = function (t) {\r\n $scope.supplierType = t;\r\n }\r\n\r\n $scope.saveSupplierType = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingSupplierType = $scope.supplierType.Id ? true : false;\r\n\r\n SettingsFactory.saveSupplierTypes($scope.supplierType)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Supplier Type Saved', content: 'The supplier type ' + $scope.supplierType.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.supplierType = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelSupplierTypeSave = function () {\r\n $scope.supplierType = null;\r\n }\r\n\r\n $scope.addNewSupplierBillingType = function () {\r\n $scope.supplierBillingType = {};\r\n }\r\n\r\n $scope.editSupplierBillingType = function (t) {\r\n $scope.supplierBillingType = t;\r\n var brandingTheme = $scope.supplierBillingType.BrandingTheme;\r\n\r\n $scope.supplierBillingType.SelectedBrandingTheme = {\r\n Name: brandingTheme\r\n };\r\n }\r\n\r\n $scope.saveSupplierBillingType = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingSupplierBillingType = $scope.supplierBillingType.Id ? true : false;\r\n\r\n $scope.supplierBillingType.BrandingTheme = $scope.supplierBillingType.SelectedBrandingTheme.Name;\r\n\r\n SettingsFactory.saveSupplierBillingTypes($scope.supplierBillingType)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Supplier Billing Type Saved', content: 'The supplier billing type ' + $scope.supplierBillingType.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.supplierBillingType = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelSupplierBillingTypeSave = function () {\r\n $scope.supplierBillingType = null;\r\n }\r\n\r\n $scope.addNewLicenceCategory = function () {\r\n $scope.licenceCategory = {};\r\n }\r\n\r\n $scope.editLicenceCategory = function (c) {\r\n $scope.licenceCategory = c;\r\n }\r\n\r\n $scope.saveLicenceCategory = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingLicenceCategory = $scope.licenceCategory.Id ? true : false;\r\n\r\n SettingsFactory.saveLicenceCategories($scope.licenceCategory)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Licence Category Saved', content: 'The licence category ' + $scope.licenceCategory.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.licenceCategory = null;\r\n\r\n $scope.searchLicenceCategories();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelLicenceCategorySave = function () {\r\n $scope.licenceCategory = null;\r\n }\r\n\r\n $scope.searchLicenceCategories = function () {\r\n $scope.licenceCategories = null;\r\n\r\n SettingsFactory.searchLicenceCategories($scope.searchLicenceCategory.name, $scope.searchLicenceCategory.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.licenceCategories = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewLedgerNumber = function () {\r\n $scope.ledgerNumber = {};\r\n }\r\n\r\n $scope.editLedgerNumber = function (c) {\r\n $scope.ledgerNumber = c;\r\n }\r\n\r\n $scope.saveLedgerNumber = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingLedgerNumber = $scope.ledgerNumber.Id ? true : false;\r\n\r\n SettingsFactory.saveLedgerNumbers($scope.ledgerNumber)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Ledger Number Saved', content: 'The ledger number ' + $scope.ledgerNumber.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.ledgerNumber = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelLedgerNumberSave = function () {\r\n $scope.ledgerNumber = null;\r\n }\r\n\r\n $scope.addNewAdditionalCharge = function () {\r\n $scope.additionalCharge = {};\r\n }\r\n\r\n $scope.editAdditionalCharge = function (c) {\r\n $scope.additionalCharge = c;\r\n }\r\n\r\n $scope.saveAdditionalCharge = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingAdditionalCharge = $scope.additionalCharge.Id ? true : false;\r\n\r\n SettingsFactory.saveAdditionalCharges($scope.additionalCharge)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Additional Charge Saved', content: 'The additional charge ' + $scope.additionalCharge.ChargeFor + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.additionalCharge = null;\r\n\r\n $scope.searchAdditionalCharges();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelAdditionalChargeSave = function () {\r\n $scope.additionalCharge = null;\r\n }\r\n\r\n $scope.searchAdditionalCharges = function () {\r\n $scope.additionalCharges = null;\r\n\r\n SettingsFactory.searchAdditionalCharges($scope.searchAdditionalCharge.chargeFor, $scope.searchAdditionalCharge.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.additionalCharges = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.searchAtlasUsers = function () {\r\n $scope.atlasUsers = null;\r\n\r\n SettingsFactory.searchAtlasUsers($scope.searchAtlasUser.username, $scope.searchAtlasUser.email, $scope.searchAtlasUser.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.atlasUsers = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewUser = function () {\r\n $scope.atlasUser = {};\r\n }\r\n\r\n $scope.editUser = function (u) {\r\n $scope.atlasUser = u;\r\n }\r\n\r\n $scope.selectUser = function (u) {\r\n $scope.changePasswordUser = {\r\n Id: u.Id,\r\n AtlasUserRole: u.AtlasUserRole,\r\n Role: u.Role,\r\n Email: u.Email,\r\n Username: u.Username,\r\n Password: '',\r\n ConfirmPassword: '',\r\n IsDeactivated: u.IsDeactivated\r\n };\r\n\r\n AtlasModalFactory.open('changePasswordModal');\r\n }\r\n\r\n $scope.changeUserPassword = function () {\r\n $scope.changingPassword = true;\r\n\r\n UserFactory.changePassword($scope.changePasswordUser)\r\n .then(\r\n function (response) {\r\n $scope.changingPassword = false;\r\n\r\n AtlasModalFactory.close('changePasswordModal');\r\n },\r\n function (response, status) {\r\n $scope.changingPassword = false;\r\n $scope.changePasswordErrorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.closeChangePasswordModal = function () {\r\n AtlasModalFactory.close('changePasswordModal');\r\n\t}\r\n\r\n $scope.saveUser = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingUser = $scope.atlasUser.Id ? true : false;\r\n\r\n if ($scope.atlasUser.Id == null && $scope.atlasUser.Password !== $scope.atlasUser.ConfirmPassword) {\r\n $scope.errorMessage = 'Passwords do not match!';\r\n $scope.saving = false;\r\n return false;\r\n }\r\n\r\n SettingsFactory.saveAtlasUsers($scope.atlasUser)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'User Saved', content: 'The user ' + $scope.atlasUser.Username + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.atlasUser = null;\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelUserSave = function () {\r\n $scope.atlasUser = null;\r\n }\r\n\r\n $scope.addNewVehicleType = function () {\r\n $scope.vehicleType = {};\r\n }\r\n\r\n $scope.editVehicleType = function (v) {\r\n $scope.vehicleType = v;\r\n }\r\n\r\n $scope.moveVehicleTypeUp = function (v, i) {\r\n if (i !== 0 && !$scope.updatingVehicleOrder) {\r\n $scope.updatingVehicleOrder = true;\r\n\r\n $scope.vehicleTypes[(i - 1)].Order = ((i + 1) * 10);\r\n $scope.vehicleTypes[i].Order = (i * 10);\r\n\r\n SettingsFactory.saveVehicleTypes($scope.vehicleTypes[(i - 1)])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveVehicleTypes($scope.vehicleTypes[i])\r\n .then(\r\n function (response) {\r\n //$scope.vehicleTypes.move(i, (i - 1));\r\n $scope.vehicleTypes = clickinon.utilities.moveElementInArray($scope.vehicleTypes, i, (i - 1));\r\n\r\n $scope.updatingVehicleOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingVehicleOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingVehicleOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.moveVehicleTypeDown = function (v, i) {\r\n if (i !== ($scope.vehicleTypes.length - 1) && !$scope.updatingVehicleOrder) {\r\n $scope.updatingVehicleOrder = true;\r\n\r\n $scope.vehicleTypes[i].Order = ((i + 2) * 10);\r\n $scope.vehicleTypes[(i + 1)].Order = ((i + 1) * 10);\r\n\r\n SettingsFactory.saveVehicleTypes($scope.vehicleTypes[i])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveVehicleTypes($scope.vehicleTypes[(i + 1)])\r\n .then(\r\n function (response) {\r\n //$scope.vehicleTypes.move(i, (i + 1));\r\n $scope.vehicleTypes = clickinon.utilities.moveElementInArray($scope.vehicleTypes, i, (i + 1));\r\n\r\n $scope.updatingVehicleOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingVehicleOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingVehicleOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.saveVehicleType = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingVehicleType = $scope.vehicleType.Id ? true : false;\r\n\r\n SettingsFactory.saveVehicleTypes($scope.vehicleType)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Vehicle Type Saved', content: 'The vehicle type ' + $scope.vehicleType.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.vehicleType = null;\r\n this.vehicleTypesForm.$setPristine();\r\n this.vehicleTypesForm.$setUntouched();\r\n\r\n $scope.searchVehicleTypes();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelVehicleTypeSave = function () {\r\n $scope.vehicleType = null;\r\n }\r\n\r\n $scope.searchVehicleTypes = function () {\r\n $scope.vehicleTypes = null;\r\n\r\n SettingsFactory.searchVehicleTypes($scope.searchVehicleType.name, $scope.searchVehicleType.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.vehicleTypes = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewPriceMatrix = function () {\r\n $scope.priceMatrix = {};\r\n }\r\n\r\n $scope.editPriceMatrix = function (m) {\r\n $scope.priceMatrix = angular.copy(m);\r\n }\r\n\r\n $scope.copyPriceMatrix = function (m) {\r\n $scope.priceMatrix = angular.copy(m);\r\n\r\n delete $scope.priceMatrix.Id;\r\n $scope.priceMatrix.Name += ' - Copy';\r\n\r\n for (var i = 0; i < $scope.priceMatrix.PriceMatrices.length; i++) {\r\n delete $scope.priceMatrix.PriceMatrices[i].Id;\r\n\t\t}\r\n\t}\r\n\r\n $scope.savePriceMatrix = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingPriceMatrix = $scope.priceMatrix.Id ? true : false;\r\n\r\n SettingsFactory.saveMatrices($scope.priceMatrix)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Price Matrix Saved', content: 'The price matrix ' + $scope.priceMatrix.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\";\r\n }\r\n );\r\n }\r\n\r\n $scope.deletePriceMatrix = function (m, index) {\r\n SettingsFactory.deleteMatrix(m)\r\n .then(\r\n function (matrix) {\r\n $scope.priceMatrices.splice(1, index);\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Price Matrix Deleted', content: 'The price matrix ' + matrix.Name + ' has been successfully deleted', color: 'success', autoclose: 2000 });\r\n },\r\n function (response, status) {\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelPriceMatrixSave = function () {\r\n $scope.priceMatrix = null;\r\n }\r\n\r\n $scope.addNewPriceMatrixItem = function () {\r\n $scope.priceMatrixItem = {};\r\n }\r\n\r\n $scope.editPriceMatrixItem = function (m, index) {\r\n $scope.priceMatrixItem = m;\r\n $scope.priceMatrixItem.Index = index;\r\n }\r\n\r\n $scope.removePriceMatrixItem = function (m, index) {\r\n $scope.priceMatrix.PriceMatrices.splice(index, 1);\r\n }\r\n\r\n $scope.updatePricingMatrixList = function () {\r\n if ($scope.priceMatrixItem.Index != null) {\r\n $scope.priceMatrix.PriceMatrices[$scope.priceMatrixItem.Index] = $scope.priceMatrixItem;\r\n }\r\n else {\r\n if (!$scope.priceMatrix.PriceMatrices) $scope.priceMatrix.PriceMatrices = [];\r\n\r\n $scope.priceMatrix.PriceMatrices.push($scope.priceMatrixItem);\r\n }\r\n\r\n $scope.priceMatrixItem = null;\r\n }\r\n\r\n $scope.cancelPriceMatrixEdit = function () {\r\n $scope.priceMatrixItem = null;\r\n }\r\n\r\n $scope.addNewWhitelistedIpAddress = function () {\r\n $scope.whitelistedIpAddress = {};\r\n $scope.whitelistedIpAddress.Value1 = 0;\r\n $scope.whitelistedIpAddress.Value2 = 0;\r\n $scope.whitelistedIpAddress.Value3 = 0;\r\n $scope.whitelistedIpAddress.Value4 = 0;\r\n }\r\n\r\n $scope.editWhitelistedIpAddress = function (i) {\r\n $scope.whitelistedIpAddress = i;\r\n\r\n var whitelistedIpAddressParts = $scope.whitelistedIpAddress.Value.split('.');\r\n\r\n $scope.whitelistedIpAddress.Value1 = parseInt(whitelistedIpAddressParts[0], 0);\r\n $scope.whitelistedIpAddress.Value2 = parseInt(whitelistedIpAddressParts[1], 0);\r\n $scope.whitelistedIpAddress.Value3 = parseInt(whitelistedIpAddressParts[2], 0);\r\n $scope.whitelistedIpAddress.Value4 = parseInt(whitelistedIpAddressParts[3], 0);\r\n }\r\n\r\n $scope.saveWhitelistedIpAddress = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n\r\n $scope.whitelistedIpAddress.Value = $scope.whitelistedIpAddress.Value1 + '.' + $scope.whitelistedIpAddress.Value2 + '.' + $scope.whitelistedIpAddress.Value3 + '.' + $scope.whitelistedIpAddress.Value4;\r\n\r\n SettingsFactory.saveWhitelistedIpAddress($scope.whitelistedIpAddress)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Whitelisted Ip Address Saved', content: 'The whitelisted ip address ' + $scope.whitelistedIpAddress.Value + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.whitelistedIpAddress = null;\r\n this.whitelistedIpAddressesForm.$setPristine();\r\n this.whitelistedIpAddressesForm.$setUntouched();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\";\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelWhitelistedIpAddressSave = function () {\r\n $scope.whitelistedIpAddress = null;\r\n }\r\n\r\n $scope.deleteWhitelistedIpAddress = function (index, whitelistedIpAddress) {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n\r\n SettingsFactory.deleteWhitelistedIpAddress(whitelistedIpAddress)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Whitelisted Ip Address Deleted', content: 'The whitelisted ip address ' + whitelistedIpAddress.Value + ' has been successfully deleted', color: 'success', autoclose: 2000 });\r\n\r\n $scope.whitelistedIpAddresses.splice(index, 1);\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\";\r\n }\r\n );\r\n }\r\n\r\n $scope.addNewAreaAdditionalChargeRule = function () {\r\n $scope.areaAdditionalChargeRule = {};\r\n }\r\n\r\n $scope.editAreaAdditionalChargeRule = function (c) {\r\n $scope.areaAdditionalChargeRule = c;\r\n }\r\n\r\n $scope.moveAreaAdditionalChargeRuleUp = function (v, i) {\r\n if (i !== 0 && !$scope.updatingAreaAdditionalChargeRuleOrder) {\r\n $scope.updatingAreaAdditionalChargeRuleOrder = true;\r\n\r\n $scope.areaAdditionalChargeRules[(i - 1)].Order = ((i + 1) * 10);\r\n $scope.areaAdditionalChargeRules[i].Order = (i * 10);\r\n\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRules[(i - 1)])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRules[i])\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = clickinon.utilities.moveElementInArray($scope.areaAdditionalChargeRules, i, (i - 1));\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.moveAreaAdditionalChargeRuleDown = function (v, i) {\r\n if (i !== ($scope.vehicleTypes.length - 1) && !$scope.updatingAreaAdditionalChargeRuleOrder) {\r\n $scope.updatingAreaAdditionalChargeRuleOrder = true;\r\n\r\n $scope.areaAdditionalChargeRules[i].Order = ((i + 2) * 10);\r\n $scope.areaAdditionalChargeRules[(i + 1)].Order = ((i + 1) * 10);\r\n\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRules[i])\r\n .then(\r\n function (response) {\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRules[(i + 1)])\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = clickinon.utilities.moveElementInArray($scope.areaAdditionalChargeRules, i, (i + 1));\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n }\r\n );\r\n },\r\n function (response, status) {\r\n debugger;\r\n\r\n $scope.updatingAreaAdditionalChargeRuleOrder = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n $scope.saveAreaAdditionalChargeRule = function () {\r\n $scope.errorMessage = null;\r\n $scope.saving = true;\r\n var existingAreaAdditionalChargeRule = $scope.areaAdditionalChargeRule.Id ? true : false;\r\n\r\n SettingsFactory.saveAreaAdditionalChargeRules($scope.areaAdditionalChargeRule)\r\n .then(\r\n function (response) {\r\n $scope.saving = false;\r\n $scope.errorMessage = null;\r\n\r\n FoundationApi.publish('settings-notifications', { title: 'Area Additional Charge Rule Saved', content: 'The area additional charge rule ' + $scope.areaAdditionalChargeRule.Name + ' has been successfully saved', color: 'success', autoclose: 2000 });\r\n\r\n $scope.areaAdditionalChargeRule = null;\r\n $scope.settingsForms.areaAdditionalChargeRulesForm.$setPristine();\r\n $scope.settingsForms.areaAdditionalChargeRulesForm.$setUntouched();\r\n\r\n $scope.searchAreaAdditionalCharges();\r\n },\r\n function (response, status) {\r\n $scope.saving = false;\r\n $scope.errorMessage = \"An error has occurred.\"\r\n }\r\n );\r\n }\r\n\r\n $scope.cancelAreaAdditionalChargeRuleSave = function () {\r\n $scope.areaAdditionalChargeRule = null;\r\n }\r\n\r\n $scope.searchAreaAdditionalCharges = function () {\r\n $scope.areaAdditionalChargeRules = null;\r\n\r\n SettingsFactory.searchAreaAdditionalChargeRules($scope.searchAreaAdditionalCharge.name, $scope.searchAreaAdditionalCharge.postCode, $scope.searchAreaAdditionalCharge.isDeactivated)\r\n .then(\r\n function (response) {\r\n $scope.areaAdditionalChargeRules = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n}]);","accounts.controller('AccountsController', ['$scope', '$state', 'UserFactory', 'AtlasUserFactory', function ($scope, $state, UserFactory, AtlasUserFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.user = UserFactory.currentActiveUser;\r\n $scope.roles = AtlasCourierExpress.Enums.Roles;\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n $scope.isUserAccounts = AtlasUserFactory.isUserAccounts();\r\n\r\n if ($scope.user.Role !== AtlasCourierExpress.Enums.Roles.AtlasUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.tabs = [\r\n {\r\n 'name': 'Consignments',\r\n 'title': 'Consignments',\r\n },\r\n {\r\n 'name': 'Manifests',\r\n 'title': 'Manifests',\r\n }\r\n ];\r\n\r\n if ($scope.isUserAdmin || $scope.isUserAccounts) {\r\n $scope.tabs.push({\r\n 'name': 'TX PODs',\r\n 'title': 'TX PODs'\r\n });\r\n }\r\n\r\n $scope.tabs.activeTab = 'Consignments';\r\n}]);","accounts.controller('AccountsConsignmentController', ['$rootScope', '$scope', '$timeout', '$filter', 'FoundationApi', 'ModalFactory', 'ConsignmentFactory', 'ManifestFactory', 'CommonFactory', 'AtlasModalFactory', function ($rootScope, $scope, $timeout, $filter, FoundationApi, ModalFactory, ConsignmentFactory, ManifestFactory, CommonFactory, AtlasModalFactory) {\r\n\r\n $rootScope.$emit('title-updated', 'Accounts');\r\n $scope.eventCategoryType = AtlasCourierExpress.Enums.EventCategoryTypes;\r\n $scope.eventTypes = AtlasCourierExpress.Enums.EventTypes;\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.searchIssues = 'READY_TO_INVOICE';\r\n $scope.searchCustomerName = null;\r\n $scope.showFilters = false;\r\n $scope.consignments = null;\r\n $scope.allConsignmentsSelected = false;\r\n $scope.ignoringProfitMargins = false;\r\n $scope.creatingInvoices = false;\r\n $scope.invoiceDate = moment().add(-1, 'd');\r\n $scope.invoicingRunningEvent = null;\r\n $scope.consignments = [];\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n }\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n\r\n $scope.consignments.sort(function (a, b) {\r\n if (typeof a[field] === 'string' && moment(a[field], 'DD/MM/YYYY HH:mm', true).isValid()) {\r\n console.log('Sort type: date');\r\n if ($scope.sortReverse) {\r\n return $scope.dateComparator(b[field], a[field]);\r\n }\r\n else {\r\n return $scope.dateComparator(a[field], b[field]);\r\n }\r\n }\r\n else if (typeof a[field] === 'string' && a[field].indexOf('£') >= 0) {\r\n console.log('Sort type: currency');\r\n if ($scope.sortReverse) {\r\n return parseFloat(b[field].replace('£', '')) - parseFloat(a[field].replace('£', ''));\r\n }\r\n else {\r\n return parseFloat(a[field].replace('£', '')) - parseFloat(b[field].replace('£', ''));\r\n }\r\n }\r\n else if (typeof a[field] === 'number') {\r\n console.log('Sort type: number');\r\n if ($scope.sortReverse) {\r\n return b[field] - a[field];\r\n }\r\n else {\r\n return a[field] - b[field];\r\n }\r\n }\r\n else {\r\n console.log('Sort type: string');\r\n if ($scope.sortReverse) {\r\n return b[field].localeCompare(a[field]);\r\n }\r\n else {\r\n //console.log('\"' + a[field] + '\"');\r\n //console.log('\"' + b[field] + '\"');\r\n //console.log(a[field].localeCompare(b[field]));\r\n return a[field].localeCompare(b[field]);\r\n //return (a[field] < b[field]) ? -1 : (a[field] === b[field]) ? 0 : 1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n $scope.dateComparator = function (a, b) {\r\n var momentA = moment(a, 'DD/MM/YYYY HH:mm');\r\n var momentB = moment(b, 'DD/MM/YYYY HH:mm');\r\n var result = (momentA.isBefore(momentB) ? -1 : (momentA.isSame(momentB) ? 0 : 1));\r\n return result;\r\n }\r\n\r\n $scope.selectConsignment = function (consignment) {\r\n var allConsignmentsSelected = true;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if (!$scope.consignments[i]._selected) {\r\n allConsignmentsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n $scope.allConsignmentsSelected = allConsignmentsSelected;\r\n }\r\n\r\n $scope.selectAllConsignments = function () {\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n $scope.consignments[i]._selected = $scope.allConsignmentsSelected;\r\n }\r\n }\r\n\r\n $scope.getSelectedConsignmentCount = function () {\r\n var selectedConsignments = 0;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if ($scope.consignments[i]._selected) {\r\n selectedConsignments++;\r\n }\r\n }\r\n\r\n return selectedConsignments;\r\n }\r\n\r\n $scope.getTotalConsignmentPrice = function () {\r\n var totalPrice = 0;\r\n\r\n if ($scope.consignments) {\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n totalPrice += $scope.consignments[i].Price;\r\n }\r\n }\r\n\r\n return $filter('number')(totalPrice, 2);\r\n }\r\n\r\n $scope.getTotalSelectedConsignmentPrice = function () {\r\n var totalPrice = 0;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if ($scope.consignments[i]._selected) {\r\n totalPrice += $scope.consignments[i].Price;\r\n }\r\n }\r\n\r\n return $filter('number')(totalPrice, 2);\r\n }\r\n\r\n $scope.searchConsignments = function(){\r\n $scope.consignments = null;\r\n $scope.allConsignmentsSelected = false;\r\n\r\n switch ($scope.searchIssues) {\r\n case 'MISSING_PO_NUMBER':\r\n $scope.missingPO = true;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n case 'INCORRECT_PROFIT_MARGIN':\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = true;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n case 'MISSING_POD_DATETIME':\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = true;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n case 'HOLD_INVOICE':\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = true;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n case 'IGNORE_PROFIT_MARGIN':\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = true;\r\n break;\r\n default:\r\n $scope.missingPO = false;\r\n $scope.incorrectProfitMargin = false;\r\n $scope.missingPOD = false;\r\n $scope.holdInvoice = false;\r\n $scope.ignoreProfitMargin = false;\r\n break;\r\n }\r\n\r\n ConsignmentFactory.getAccountsConsignments($scope.searchStartDate, $scope.searchEndDate, $scope.searchCustomerName, $scope.missingPO, $scope.incorrectProfitMargin, $scope.missingPOD, $scope.holdInvoice, $scope.ignoreProfitMargin)\r\n .then(\r\n function () {\r\n $scope.consignments = ConsignmentFactory.consignments;\r\n getInvoicingRunningEvent();\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n $scope.confirmInvoice = function () {\r\n if ($scope.missingPO || $scope.incorrectProfitMargin || $scope.missingPOD) {\r\n //FoundationApi.publish('divConsignmentConfirmInvoice', 'open');\r\n AtlasModalFactory.open('divConsignmentConfirmInvoice');\r\n return false;\r\n }\r\n else {\r\n $scope.openInvoiceDateModal();\r\n }\r\n }\r\n\r\n $scope.cancelInvoice = function () {\r\n AtlasModalFactory.close('divConsignmentConfirmInvoice');\r\n return false;\r\n }\r\n\r\n $scope.openInvoiceDateModal = function () {\r\n var consignmentsToInvoice = [];\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if ($scope.consignments[i]._selected) {\r\n consignmentsToInvoice.push({ Id: $scope.consignments[i].Id });\r\n }\r\n }\r\n\r\n var template = 'templates/shared/controls/set_invoice_date.html';\r\n\r\n if (consignmentsToInvoice.length >= 0) {\r\n var modal = new ModalFactory({\r\n // Add CSS classes to the modal\r\n // Can be a single string or an array of classes\r\n class: 'ace-modal',\r\n // Set if the modal has a background overlay\r\n overlay: true,\r\n // Set if the modal can be closed by clicking on the overlay\r\n overlayClose: false,\r\n // Define a template to use for the modal\r\n templateUrl: template,\r\n // Allows you to pass in properties to the scope of the modal\r\n contentScope: {\r\n parentScope: $scope,\r\n consignments: consignmentsToInvoice,\r\n selectedDate: moment(),\r\n invoice: function () {\r\n var parentScope = this.parentScope;\r\n this.parentScope.creatingInvoices = true;\r\n\r\n ConsignmentFactory.invoiceConsignments(this.selectedDate, this.consignments)\r\n .then(\r\n function () {\r\n parentScope.creatingInvoices = false;\r\n FoundationApi.publish('accounts-notifications', { title: 'Invoices Scheduled', content: 'All invoices have been scheduled for creation', color: 'success', autoclose: 2000 });\r\n $scope.searchConsignments();\r\n getInvoicingRunningEvent();\r\n },\r\n function (error) {\r\n parentScope.creatingInvoices = false;\r\n console.log(error);\r\n }\r\n );\r\n\r\n modal.deactivate();\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n },\r\n close: function () {\r\n modal.deactivate();\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n }\r\n }\r\n });\r\n modal.activate();\r\n }\r\n }\r\n\r\n $scope.ignoreProfitMargins = function () {\r\n $scope.ignoringProfitMargins = true;\r\n\r\n var consignments = [];\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n if ($scope.consignments[i]._selected) {\r\n consignments.push({ Id: $scope.consignments[i].Id });\r\n }\r\n }\r\n\r\n ConsignmentFactory.ignoreProfitMargins(consignments)\r\n .then(\r\n function(){\r\n $scope.ignoringProfitMargins = false;\r\n\r\n $scope.searchConsignments();\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n function getInvoicingRunningEvent() {\r\n CommonFactory.getInvoicingEvent()\r\n .then(\r\n function (event) {\r\n if (event) { \r\n $scope.invoicingRunningEvent = event;\r\n\r\n if ($scope.invoicingRunningEvent.Type === AtlasCourierExpress.Enums.EventTypes.ConsignmentInvoicing) {\r\n if ($scope.invoicingRunningEvent.DateStarted == null) {\r\n $scope.invoicingRunningEventText = 'Consignment Invoicing scheduled, created by ' + $scope.invoicingRunningEvent.User.Username + ' at ' + moment($scope.invoicingRunningEvent.DateCreated).format('DD/MM/YYYY HH:mm:ss');\r\n }\r\n else {\r\n $scope.invoicingRunningEventText = 'Consignment Invoicing started at ' + moment($scope.invoicingRunningEvent.DateStarted).format('DD/MM/YYYY HH:mm:ss') + ', created by ' + $scope.invoicingRunningEvent.User.Username;\r\n }\r\n }\r\n else if ($scope.invoicingRunningEvent.Type === AtlasCourierExpress.Enums.EventTypes.ManifestInvoicing) {\r\n if ($scope.invoicingRunningEvent.DateStarted == null) {\r\n $scope.invoicingRunningEventText = 'Manifest Invoicing scheduled, created by ' + $scope.invoicingRunningEvent.User.Username + ' at ' + moment($scope.invoicingRunningEvent.DateCreated).format('DD/MM/YYYY HH:mm:ss');\r\n }\r\n else {\r\n $scope.invoicingRunningEventText = 'Manifest Invoicing started at ' + moment($scope.invoicingRunningEvent.DateStarted).format('DD/MM/YYYY HH:mm:ss') + ', created by ' + $scope.invoicingRunningEvent.User.Username;\r\n }\r\n }\r\n }\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n //$scope.searchConsignments();\r\n getInvoicingRunningEvent();\r\n}]);","accounts.controller('AccountsManifestController', ['$rootScope', '$scope', '$timeout', '$filter', 'FoundationApi', 'ModalFactory', 'ManifestFactory', 'CommonFactory', 'AtlasModalFactory', function ($rootScope, $scope, $timeout, $filter, FoundationApi, ModalFactory, ManifestFactory, CommonFactory, AtlasModalFactory) {\r\n\r\n $rootScope.$emit('title-updated', 'Accounts');\r\n $scope.eventCategoryType = AtlasCourierExpress.Enums.EventCategoryTypes;\r\n $scope.eventTypes = AtlasCourierExpress.Enums.EventTypes;\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.searchIssues = 'READY_TO_INVOICE';\r\n $scope.searchSupplierName = null;\r\n $scope.showFilters = false;\r\n $scope.manifests = null;\r\n $scope.allConsignmentsSelected = false;\r\n $scope.creatingInvoices = false;\r\n $scope.invoicingRunningEvent = null;\r\n $scope.manifests = [];\r\n $scope.sortBy = '';\r\n $scope.sortReverse = false;\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n }\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n\r\n $scope.manifests.sort(function (a, b) {\r\n if (typeof a[field] === 'string' && moment(a[field], 'DD/MM/YYYY HH:mm', true).isValid()) {\r\n if ($scope.sortReverse) {\r\n return $scope.dateComparator(b[field], a[field]);\r\n }\r\n else {\r\n return $scope.dateComparator(a[field], b[field]);\r\n }\r\n }\r\n else if (typeof a[field] === 'string' && a[field].indexOf('£') >= 0) {\r\n if ($scope.sortReverse) {\r\n return parseFloat(b[field].replace('£', '')) - parseFloat(a[field].replace('£', ''));\r\n }\r\n else {\r\n return parseFloat(a[field].replace('£', '')) - parseFloat(b[field].replace('£', ''));\r\n }\r\n }\r\n else if (typeof a[field] === 'number') {\r\n if ($scope.sortReverse) {\r\n return b[field] - a[field];\r\n }\r\n else {\r\n return a[field] - b[field];\r\n }\r\n }\r\n else {\r\n if ($scope.sortReverse) {\r\n return b[field].localeCompare(a[field]);\r\n }\r\n else {\r\n return a[field].localeCompare(b[field]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n $scope.dateComparator = function(a, b) {\r\n var momentA = moment(a, 'DD/MM/YYYY HH:mm');\r\n var momentB = moment(b, 'DD/MM/YYYY HH:mm');\r\n var result = (momentA.isBefore(momentB) ? -1 : (momentA.isSame(momentB) ? 0 : 1));\r\n return result;\r\n }\r\n\r\n $scope.selectManifest = function (manifest) {\r\n var allManifestsSelected = true;\r\n\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if (!$scope.manifests[i]._selected) {\r\n allManifestsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n $scope.allManifestsSelected = allManifestsSelected;\r\n\r\n AtlasModalFactory.open('divAssignSupplier');\r\n }\r\n\r\n $scope.closeAssignSupplier = function () {\r\n AtlasModalFactory.close('divAssignSupplier');\r\n\t}\r\n\r\n $scope.selectAllManifests = function () {\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n $scope.manifests[i]._selected = $scope.allManifestsSelected;\r\n }\r\n }\r\n\r\n $scope.getSelectedManifestCount = function () {\r\n var selectedManifests = 0;\r\n\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if ($scope.manifests[i]._selected) {\r\n selectedManifests++;\r\n }\r\n }\r\n\r\n return selectedManifests;\r\n }\r\n\r\n $scope.getTotalManifestCost = function () {\r\n var totalCost = 0;\r\n\r\n if ($scope.manifests) {\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n totalCost += $scope.manifests[i].Cost;\r\n }\r\n }\r\n\r\n return $filter('number')(totalCost, 2);\r\n }\r\n\r\n $scope.getTotalSelectedManifestCost = function () {\r\n var totalCost = 0;\r\n\r\n if ($scope.manifests) {\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if ($scope.manifests[i]._selected) {\r\n totalCost += $scope.manifests[i].Cost;\r\n }\r\n }\r\n }\r\n\r\n return $filter('number')(totalCost, 2);\r\n }\r\n\r\n $scope.searchManifests = function () {\r\n $scope.manifests = null;\r\n $scope.allManifestsSelected = false;\r\n\r\n switch ($scope.searchIssues) {\r\n case 'MISSING_POD_DATETIME':\r\n $scope.missingPOD = true;\r\n $scope.zeroCost = false;\r\n $scope.noInvoiceReference = false;\r\n $scope.holdInvoice = false;\r\n break;\r\n case 'ZERO_COST':\r\n $scope.missingPOD = false;\r\n $scope.zeroCost = true;\r\n $scope.noInvoiceReference = false;\r\n $scope.holdInvoice = false;\r\n break;\r\n case 'NO_INVOICE_REFERENCE':\r\n $scope.missingPOD = false;\r\n $scope.zeroCost = false;\r\n $scope.noInvoiceReference = true;\r\n $scope.holdInvoice = false;\r\n break;\r\n case 'HOLD_INVOICE':\r\n $scope.missingPOD = false;\r\n $scope.zeroCost = false;\r\n $scope.noInvoiceReference = false;\r\n $scope.holdInvoice = true;\r\n break;\r\n default:\r\n $scope.missingPOD = false;\r\n $scope.zeroCost = false;\r\n $scope.noInvoiceReference = false;\r\n \r\n }\r\n\r\n ManifestFactory.getAccountsManifests($scope.searchStartDate, $scope.searchEndDate, $scope.searchSupplierName, $scope.missingPOD, $scope.zeroCost, $scope.noInvoiceReference, $scope.holdInvoice)\r\n .then(\r\n function () {\r\n $scope.manifests = ManifestFactory.manifests;\r\n getInvoicingRunningEvent();\r\n }\r\n );\r\n\r\n }\r\n\r\n $scope.openInvoiceDateModal = function () {\r\n var manifestsToInvoice = [];\r\n var supplierExists = false;\r\n var totalDeductionAmount = 0;\r\n var hasIssues = false;\r\n $scope.supplierTotals = [];\r\n\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if ($scope.manifests[i]._selected) {\r\n supplierExists = false;\r\n\r\n for (var s = 0; s < $scope.supplierTotals.length; s++) {\r\n if ($scope.manifests[i].Supplier.Id === $scope.supplierTotals[s].Supplier.Id) {\r\n if ($scope.manifests[i].Supplier.SplitXeroInvoices) {\r\n if ($scope.manifests[i].ConsignmentAddresses[0].Consignment.Customer.XeroOrganisation.IsDefault) $scope.supplierTotals[s].TotalInvoiceAmount += $scope.manifests[i].Cost;\r\n }\r\n else {\r\n $scope.supplierTotals[s].TotalInvoiceAmount += $scope.manifests[i].Cost;\r\n }\r\n \r\n supplierExists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!supplierExists) {\r\n if ($scope.manifests[i].Supplier.SplitXeroInvoices) {\r\n if ($scope.manifests[i].ConsignmentAddresses[0].Consignment.Customer.XeroOrganisation.IsDefault) {\r\n totalDeductionAmount = 0;\r\n\r\n for (var d = 0; d < $scope.manifests[i].Supplier.Deductions.length; d++) {\r\n totalDeductionAmount += $scope.manifests[i].Supplier.Deductions[d].Value;\r\n }\r\n\r\n $scope.supplierTotals.push({\r\n Supplier: $scope.manifests[i].Supplier,\r\n TotalDeductions: totalDeductionAmount,\r\n TotalInvoiceAmount: $scope.manifests[i].Cost\r\n });\r\n }\r\n }\r\n else {\r\n totalDeductionAmount = 0;\r\n\r\n for (var d = 0; d < $scope.manifests[i].Supplier.Deductions.length; d++) {\r\n totalDeductionAmount += $scope.manifests[i].Supplier.Deductions[d].Value;\r\n }\r\n\r\n $scope.supplierTotals.push({\r\n Supplier: $scope.manifests[i].Supplier,\r\n TotalDeductions: totalDeductionAmount,\r\n TotalInvoiceAmount: $scope.manifests[i].Cost\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var s = 0; s < $scope.supplierTotals.length; s++) {\r\n if ($scope.supplierTotals[s].TotalDeductions > $scope.supplierTotals[s].TotalInvoiceAmount) {\r\n hasIssues = true;\r\n break;\r\n }\r\n }\r\n\r\n if (hasIssues) { \r\n AtlasModalFactory.open('divManifestInvoiceIssues');\r\n\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $scope.manifests.length; i++) {\r\n if ($scope.manifests[i]._selected) {\r\n manifestsToInvoice.push({ Id: $scope.manifests[i].Id });\r\n }\r\n }\r\n\r\n var template = 'templates/shared/controls/set_invoice_date.html';\r\n\r\n if (manifestsToInvoice.length >= 0) {\r\n var modal = new ModalFactory({\r\n // Add CSS classes to the modal\r\n // Can be a single string or an array of classes\r\n class: 'ace-modal',\r\n // Set if the modal has a background overlay\r\n overlay: true,\r\n // Set if the modal can be closed by clicking on the overlay\r\n overlayClose: false,\r\n // Define a template to use for the modal\r\n templateUrl: template,\r\n // Allows you to pass in properties to the scope of the modal\r\n contentScope: {\r\n parentScope: $scope,\r\n manifests: manifestsToInvoice,\r\n selectedDate: moment(),\r\n invoice: function () {\r\n var parentScope = this.parentScope;\r\n this.parentScope.creatingInvoices = true;\r\n\r\n ManifestFactory.invoiceManifests(this.selectedDate, this.manifests)\r\n .then(\r\n function () {\r\n parentScope.creatingInvoices = false;\r\n FoundationApi.publish('accounts-notifications', { title: 'Invoices Scheduled', content: 'All invoices have been scheduled for creation', color: 'success', autoclose: 2000 });\r\n $scope.searchManifests();\r\n getInvoicingRunningEvent();\r\n },\r\n function (error) {\r\n parentScope.creatingInvoices = false;\r\n console.log(error);\r\n }\r\n );\r\n\r\n modal.deactivate();\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n },\r\n close: function () {\r\n modal.deactivate();\r\n $timeout(function () {\r\n modal.destroy();\r\n }, 1000);\r\n }\r\n }\r\n });\r\n modal.activate();\r\n }\r\n }\r\n\r\n $scope.cancelManifestInvoiceIssues = function() {\r\n AtlasModalFactory.close('divManifestInvoiceIssues');\r\n }\r\n\r\n function getInvoicingRunningEvent() {\r\n CommonFactory.getInvoicingEvent()\r\n .then(\r\n function (event) {\r\n if (event) {\r\n $scope.invoicingRunningEvent = event;\r\n\r\n if ($scope.invoicingRunningEvent.Type === AtlasCourierExpress.Enums.EventTypes.ConsignmentInvoicing) {\r\n if ($scope.invoicingRunningEvent.DateStarted == null) {\r\n $scope.invoicingRunningEventText = 'Consignment Invoicing scheduled, created by ' + $scope.invoicingRunningEvent.User.Username + ' at ' + moment($scope.invoicingRunningEvent.DateCreated).format('DD/MM/YYYY HH:mm:ss');\r\n }\r\n else {\r\n $scope.invoicingRunningEventText = 'Consignment Invoicing started at ' + moment($scope.invoicingRunningEvent.DateStarted).format('DD/MM/YYYY HH:mm:ss') + ', created by ' + $scope.invoicingRunningEvent.User.Username;\r\n }\r\n }\r\n else if ($scope.invoicingRunningEvent.Type === AtlasCourierExpress.Enums.EventTypes.ManifestInvoicing) {\r\n if ($scope.invoicingRunningEvent.DateStarted == null) {\r\n $scope.invoicingRunningEventText = 'Manifest Invoicing scheduled, created by ' + $scope.invoicingRunningEvent.User.Username + ' at ' + moment($scope.invoicingRunningEvent.DateCreated).format('DD/MM/YYYY HH:mm:ss');\r\n }\r\n else {\r\n $scope.invoicingRunningEventText = 'Manifest Invoicing started at ' + moment($scope.invoicingRunningEvent.DateStarted).format('DD/MM/YYYY HH:mm:ss') + ', created by ' + $scope.invoicingRunningEvent.User.Username;\r\n }\r\n }\r\n }\r\n },\r\n function (error) {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n //$scope.searchManifests();\r\n getInvoicingRunningEvent();\r\n}]);","accounts.controller('AccountsTransportExchangePodsController', ['$rootScope', '$scope', '$state', '$filter', 'ManifestFactory', function ($rootScope, $scope, $state, $filter, ManifestFactory) {\r\n $rootScope.$emit('title-updated', 'Accounts');\r\n //$scope.searchStartDate = moment();\r\n //$scope.searchEndDate = moment();\r\n //$scope.showFilters = false;\r\n $scope.transportExchangePods = null;\r\n $scope.transportExchangePodsForApproving = [];\r\n $scope.transportExchangePodsForRejecting = [];\r\n $scope.approving = false;\r\n $scope.rejecting = false;\r\n $scope.approveAllTransportExchangePODs = false;\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.getTransportExchangePodApprovals = function () {\r\n ManifestFactory.getManifestTransportExchangePodApprovals()\r\n .then(\r\n function (response) {\r\n $scope.transportExchangePods = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.goToManifest = function(m) {\r\n\r\n }\r\n\r\n $scope.addForApproval = function (p) {\r\n if (p.readyForRejection) {\r\n p.readyForRejection = false;\r\n var i = $scope.transportExchangePodsForRejecting.length;\r\n\r\n while (i--) {\r\n if ($scope.transportExchangePodsForRejecting[i].Id === p.Id) $scope.transportExchangePodsForRejecting.splice(i, 1);\r\n }\r\n }\r\n\r\n if (p.readyForApproval) {\r\n $scope.transportExchangePodsForApproving.push(p);\r\n }\r\n else {\r\n var i = $scope.transportExchangePodsForApproving.length;\r\n\r\n while (i--) {\r\n if ($scope.transportExchangePodsForApproving[i].Id === p.Id) $scope.transportExchangePodsForApproving.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n $scope.addForRejection = function (p) {\r\n if (p.readyForApproval) {\r\n p.readyForApproval = false;\r\n var i = $scope.transportExchangePodsForApproving.length;\r\n\r\n while (i--) {\r\n if ($scope.transportExchangePodsForApproving[i].Id === p.Id) $scope.transportExchangePodsForApproving.splice(i, 1);\r\n }\r\n }\r\n\r\n if (p.readyForRejection) {\r\n $scope.transportExchangePodsForRejecting.push(p);\r\n }\r\n else {\r\n var i = $scope.transportExchangePodsForRejecting.length;\r\n\r\n while (i--) {\r\n if ($scope.transportExchangePodsForRejecting[i].Id === p.Id) $scope.transportExchangePodsForRejecting.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n $scope.selectApproveAllTransportExchangePODs = function () {\r\n //$scope.approveAllTransportExchangePODs = !$scope.approveAllTransportExchangePODs;\r\n\r\n if ($scope.approveAllTransportExchangePODs) {\r\n for (var i = 0; i < $scope.transportExchangePods.length; i++) {\r\n $scope.transportExchangePodsForApproving.push($scope.transportExchangePods[i].TransportExchangeManifests[0].TransportExchangeConsignmentAddresses[0]);\r\n $scope.transportExchangePods[i].TransportExchangeManifests[0].TransportExchangeConsignmentAddresses[0].readyForApproval = $scope.approveAllTransportExchangePODs;\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < $scope.transportExchangePods.length; i++) {\r\n $scope.transportExchangePods[i].TransportExchangeManifests[0].TransportExchangeConsignmentAddresses[0].readyForApproval = $scope.approveAllTransportExchangePODs;\r\n }\r\n\r\n $scope.transportExchangePodsForApproving = [];\r\n }\r\n }\r\n\r\n $scope.approve = function(p) {\r\n $scope.approving = true;\r\n\r\n ManifestFactory.approveTransportExchangePods($scope.transportExchangePodsForApproving)\r\n .then(\r\n function (response) {\r\n $scope.approving = false;\r\n $scope.approveAllTransportExchangePODs = false;\r\n $scope.transportExchangePodsForApproving = [];\r\n $scope.transportExchangePodsForRejecting = [];\r\n\r\n $scope.getTransportExchangePodApprovals();\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.reject = function () {\r\n $scope.rejecting = true;\r\n\r\n ManifestFactory.rejectTransportExchangePods($scope.transportExchangePodsForRejecting)\r\n .then(\r\n function (response) {\r\n $scope.rejecting = false;\r\n $scope.transportExchangePodsForApproving = [];\r\n $scope.transportExchangePodsForRejecting = [];\r\n\r\n $scope.getTransportExchangePodApprovals();\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.goToManifest = function(p){\r\n $state.go('manifest', { 'id': p.Id });\r\n }\r\n\r\n $scope.formatAddressForList = function (address) {\r\n var formattedAddress = '';\r\n\r\n if (address.CompanyName != null && address.CompanyName != '') {\r\n formattedAddress += address.CompanyName;\r\n }\r\n\r\n if (address.AddressLine1 != null && address.AddressLine1 != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.AddressLine1;\r\n }\r\n\r\n if (address.Town != null && address.Town != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Town;\r\n }\r\n\r\n if (address.Postcode != null && address.Postcode != '') {\r\n if (formattedAddress.length != '') formattedAddress += ', ';\r\n formattedAddress += address.Postcode;\r\n }\r\n\r\n return formattedAddress;\r\n }\r\n\r\n $scope.getTransportExchangePodApprovals();\r\n}]);","reports.controller('ReportsController', ['$scope', '$state', 'UserFactory', 'AtlasUserFactory', function ($scope, $state, UserFactory, AtlasUserFactory) {\r\n if (!UserFactory.currentActiveUser) {\r\n $state.go('login');\r\n }\r\n\r\n $scope.isUserAdmin = AtlasUserFactory.isUserAdmin();\r\n\r\n $scope.tabs = [\r\n {\r\n 'name': 'Sales Summary',\r\n 'title': 'Sales Summary'\r\n },\r\n {\r\n 'name': 'Sales',\r\n 'title': 'Sales'\r\n },\r\n {\r\n 'name': 'Earnings',\r\n 'title': 'Earnings'\r\n },\r\n {\r\n 'name': 'Credit',\r\n 'title': 'Credit'\r\n }\r\n ];\r\n\r\n if ($scope.isUserAdmin) {\r\n $scope.tabs.push({\r\n 'name': 'User Ip Logs',\r\n 'title': 'User Ip Logs'\r\n });\r\n }\r\n\r\n $scope.tabs.activeTab = 'Sales Summary';\r\n}]);","reports.controller('ReportsProfitabilityController', ['$rootScope', '$scope', '$state', '$filter', 'UserFactory', 'ConsignmentFactory', function ($rootScope, $scope, $state, $filter, UserFactory, ConsignmentFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.customerName = '';\r\n $scope.showFilters = false;\r\n $scope.consignments = [];\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'TOMORROW':\r\n $scope.searchStartDate = moment().add(1, 'd');\r\n $scope.searchEndDate = moment().add(1, 'd');\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'THIS_MONTH':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment().add(1, 'M');\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n case 'LAST_MONTH':\r\n $scope.searchStartDate = moment().subtract(1, 'M');\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment();\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n };\r\n }\r\n\r\n $scope.searchConsignments = function () {\r\n $scope.consignments = null;\r\n\r\n ConsignmentFactory.getProfitabilityConsignments($scope.searchStartDate, $scope.searchEndDate, $scope.customerName)\r\n .then(\r\n function () {\r\n $scope.consignments = ConsignmentFactory.consignments;\r\n }\r\n );\r\n }\r\n\r\n $scope.getConsignmentManifestNumbers = function (consignment) {\r\n var manifestNumbers = null;\r\n\r\n for (var a = 0; a < consignment.ConsignmentAddresses.length; a++) {\r\n if (!manifestNumbers) {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n manifestNumbers = consignment.ConsignmentAddresses[a].Manifest.ManifestNumber.toString();\r\n }\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (manifestNumbers.indexOf(consignment.ConsignmentAddresses[a].Manifest.ManifestNumber) < 0) {\r\n manifestNumbers += ', ' + consignment.ConsignmentAddresses[a].Manifest.ManifestNumber;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return manifestNumbers;\r\n }\r\n\r\n $scope.export = function () {\r\n var data = [];\r\n var manifestNumbers;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n manifestNumbers = $scope.getConsignmentManifestNumbers($scope.consignments[i]);\r\n\r\n data.push(\r\n {\r\n 'Consignment Number': $scope.consignments[i].ConsignmentNumber,\r\n 'Manifests': (manifestNumbers == null) ? '' : manifestNumbers,\r\n 'Customer': $scope.consignments[i].Customer.Name,\r\n 'Booked': $scope.consignments[i].DisplayDateCreated, \r\n 'Start Date': $scope.consignments[i].StartDeliveryDate,\r\n 'Start Postcode': $scope.consignments[i].StartDeliveryAddress.Postcode,\r\n 'Finish Date': $scope.consignments[i].LastDeliveryDate,\r\n 'Last Postcode': $scope.consignments[i].LastDeliveryAddress.Postcode,\r\n 'Number Of Addresses': $scope.consignments[i].ConsignmentAddresses.length,\r\n 'Supplier': $scope.consignments[i].Suppliers,\r\n 'Price': $scope.consignments[i].Price\r\n }\r\n );\r\n }\r\n\r\n var opts = [{ sheetid: 'Profitability', header: true }];\r\n var res = alasql('SELECT INTO XLSX(\"Profitability.xlsx\",?) FROM ?', [opts, [data]]);\r\n }\r\n\r\n $scope.getTotalPrice = function () {\r\n var totalPrice = 0;\r\n\r\n for (var i = 0; i < $scope.consignments.length; i++) {\r\n totalPrice += $scope.consignments[i].Price;\r\n }\r\n\r\n return $filter('number')(totalPrice, 2);\r\n }\r\n\r\n $scope.searchConsignments();\r\n}]);","reports.controller('ReportsSimpleProfitabilityController', ['$rootScope', '$scope', '$state', '$filter', 'UserFactory', 'ConsignmentFactory', function ($rootScope, $scope, $state, $filter, UserFactory, ConsignmentFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.customerName = '';\r\n $scope.showFilters = false;\r\n $scope.data = [];\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'TOMORROW':\r\n $scope.searchStartDate = moment().add(1, 'd');\r\n $scope.searchEndDate = moment().add(1, 'd');\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'THIS_MONTH':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment().add(1, 'M');\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n case 'LAST_MONTH':\r\n $scope.searchStartDate = moment().subtract(1, 'M');\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment();\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n };\r\n }\r\n\r\n $scope.getData = function () {\r\n $scope.data = null;\r\n\r\n ConsignmentFactory.getSimpleProfitabilityConsignmentsReport($scope.searchStartDate, $scope.searchEndDate, $scope.customerName)\r\n .then(\r\n function (data) {\r\n $scope.data = data;\r\n }\r\n );\r\n }\r\n\r\n $scope.getConsignmentManifestNumbers = function (consignment) {\r\n var manifestNumbers = null;\r\n\r\n for (var a = 0; a < consignment.ConsignmentAddresses.length; a++) {\r\n if (!manifestNumbers) {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n manifestNumbers = consignment.ConsignmentAddresses[a].Manifest.ManifestNumber.toString();\r\n }\r\n }\r\n else {\r\n if (consignment.ConsignmentAddresses[a].Manifest) {\r\n if (manifestNumbers.indexOf(consignment.ConsignmentAddresses[a].Manifest.ManifestNumber) < 0) {\r\n manifestNumbers += ', ' + consignment.ConsignmentAddresses[a].Manifest.ManifestNumber;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return manifestNumbers;\r\n }\r\n\r\n $scope.export = function () {\r\n var data = [];\r\n var manifestNumbers;\r\n\r\n for (var i = 0; i < $scope.data.Lines.length; i++) {\r\n data.push(\r\n {\r\n 'Date': $scope.data.Lines[i].Date,\r\n 'Day': $scope.data.Lines[i].Day,\r\n 'Total Manifests': $scope.data.Lines[i].TotalNumberManifests,\r\n 'Price': $scope.data.Lines[i].Price\r\n }\r\n );\r\n }\r\n\r\n var opts = [{ sheetid: 'Simple Profitability', header: true }];\r\n var res = alasql('SELECT INTO XLSX(\"Simple Profitability.xlsx\",?) FROM ?', [opts, [data]]);\r\n }\r\n\r\n $scope.getTotalManifests = function () {\r\n var totalManifests = 0;\r\n\r\n for (var i = 0; i < $scope.data.Lines.length; i++) {\r\n totalManifests += $scope.data.Lines[i].TotalNumberManifests;\r\n }\r\n\r\n return totalManifests;\r\n }\r\n\r\n $scope.getTotalPrice = function () {\r\n var totalPrice = 0;\r\n\r\n for (var i = 0; i < $scope.data.Lines.length; i++) {\r\n totalPrice += $scope.data.Lines[i].Price;\r\n }\r\n\r\n return $filter('number')(totalPrice, 2);\r\n }\r\n\r\n $scope.getData();\r\n}]);","reports.controller('ReportsEarningsController', ['$rootScope', '$scope', '$state', '$filter', 'UserFactory', 'SupplierFactory', function ($rootScope, $scope, $state, $filter, UserFactory, SupplierFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.sortBy = 'Name';\r\n $scope.sortReverse = false;\r\n $scope.showFilters = false;\r\n $scope.suppliers = [];\r\n\r\n $scope.changeDateRange = function () {\r\n switch ($scope.searchDateRange) {\r\n case 'TODAY':\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n break;\r\n case 'YESTERDAY':\r\n $scope.searchStartDate = moment().subtract(1, 'd');\r\n $scope.searchEndDate = moment().subtract(1, 'd');\r\n break;\r\n case 'THIS_WEEK':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'LAST_WEEK':\r\n $scope.searchStartDate = moment().subtract(7, 'd');\r\n\r\n if ($scope.searchStartDate.isoWeekday() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.isoWeekday() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment($scope.searchStartDate).add(7, 'd').subtract(1, 'd');\r\n break;\r\n case 'THIS_MONTH':\r\n $scope.searchStartDate = moment();\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment().add(1, 'M');\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n case 'LAST_MONTH':\r\n $scope.searchStartDate = moment().subtract(1, 'M');\r\n\r\n if ($scope.searchStartDate.date() > 1) {\r\n $scope.searchStartDate.subtract(($scope.searchStartDate.date() - 1), 'd');\r\n }\r\n\r\n $scope.searchEndDate = moment();\r\n $scope.searchEndDate.subtract(($scope.searchEndDate.date()), 'd');\r\n break;\r\n };\r\n }\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.updateEarnings = function () {\r\n $scope.suppliers = null;\r\n\r\n SupplierFactory.getEarnings($scope.searchStartDate, $scope.searchEndDate)\r\n .then(\r\n function (suppliers) {\r\n $scope.suppliers = suppliers;\r\n }\r\n );\r\n }\r\n\r\n $scope.export = function () {\r\n var data = [];\r\n var manifestNumbers;\r\n\r\n for (var i = 0; i < $scope.suppliers.length; i++) {\r\n data.push(\r\n {\r\n 'Supplier': $scope.suppliers[i].Name,\r\n 'Earnings': (($scope.suppliers[i].Earnings) ? $scope.suppliers[i].Earnings : 0)\r\n }\r\n );\r\n }\r\n\r\n var opts = [{ sheetid: 'Earnings', header: true }];\r\n var res = alasql('SELECT INTO XLSX(\"Earnings.xlsx\",?) FROM ?', [opts, [data]]);\r\n }\r\n\r\n $scope.updateEarnings();\r\n}]);","reports.controller('ReportsCreditController', ['$rootScope', '$scope', '$state', '$filter', 'UserFactory', 'CustomerFactory', function ($rootScope, $scope, $state, $filter, UserFactory, CustomerFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.sortBy = 'Name';\r\n $scope.sortReverse = false;\r\n $scope.showFilters = false;\r\n $scope.data = [];\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.export = function () {\r\n var data = [];\r\n var outstandingBalance = 0;\r\n var creditLimit = 0;\r\n var overLimit = 0;\r\n\r\n for (var i = 0; i < $scope.data.length; i++) {\r\n data.push(\r\n {\r\n 'Customer': $scope.data[i].Customer,\r\n 'OutstandingBalance': $scope.data[i].OutstandingBalance,\r\n 'CreditLimit': $scope.data[i].CreditLimit,\r\n 'OverLimit': $scope.data[i].OverLimit\r\n }\r\n );\r\n }\r\n\r\n var opts = [{ sheetid: 'Credit', header: true }];\r\n var res = alasql('SELECT INTO XLSX(\"Credit.xlsx\",?) FROM ?', [opts, [data]]);\r\n }\r\n\r\n CustomerFactory.getCustomersOverCreditLimit()\r\n .then(\r\n function (customers) {\r\n $scope.data = [];\r\n var outstandingBalance = 0;\r\n var creditLimit = 0;\r\n var overLimit = 0;\r\n\r\n for (var i = 0; i < customers.length; i++) {\r\n outstandingBalance = (customers[i].OutstandingBalance) ? customers[i].OutstandingBalance : 0;\r\n creditLimit = (customers[i].CreditLimit) ? customers[i].CreditLimit : 0;\r\n overLimit = outstandingBalance - creditLimit;\r\n\r\n $scope.data.push(\r\n {\r\n 'Customer': customers[i].Name,\r\n 'OutstandingBalance': outstandingBalance,\r\n 'CreditLimit': creditLimit,\r\n 'OverLimit': overLimit\r\n }\r\n );\r\n }\r\n },\r\n function (error) {\r\n debugger;\r\n }\r\n );\r\n}]);","reports.controller('ReportsUserIpLogController', ['$rootScope', '$scope', '$state', '$filter', 'SettingsFactory', function ($rootScope, $scope, $state, $filter, SettingsFactory) {\r\n $rootScope.$emit('title-updated', 'Reports');\r\n $scope.searchStartDate = moment();\r\n $scope.searchEndDate = moment();\r\n $scope.showFilters = false;\r\n $scope.userIpLogs = [];\r\n\r\n $scope.sort = function (field) {\r\n $scope.sortBy = field;\r\n $scope.sortReverse = !$scope.sortReverse;\r\n }\r\n\r\n $scope.searchUserIpLogs = function () {\r\n SettingsFactory.getUserIpLogs(moment($scope.searchStartDate), moment($scope.searchEndDate))\r\n .then(\r\n function (response) {\r\n $scope.userIpLogs = response;\r\n },\r\n function (response, status) {\r\n debugger;\r\n }\r\n );\r\n }\r\n\r\n $scope.searchUserIpLogs();\r\n}]);"]}