{"version":3,"sources":["app.js","dateSelector/dateSelector.js","contactUs/contactUs.js","documents/documents.js","header/header.js","home/home.js","login/login.js","pages/pages.js","paperwork/paperwork.js","reportSettings/reportSettings.js","account/payments/Payments.js","account/profile/profile.js","account/reports/reports.js","fuelCards/cards/fuelCardsCards.js","fuelCards/prices/fuelCardsPrices.js","fuelCards/transactions/fuelCardsTransactions.js","documents/account/account.js","orders/ordering/orders.js","orders/pricing/odPricing.js","httpService.js","directives/core.directives.js","directives/pdi.ng.extensions.js","directives/pdi.ng.validate.js","filters/core.filters.js","core/core.ajax.js","Services/services.paymentAccounts.js","core/core.constants.js","core/core.enums.js","core/core.error.js","core/core.objects.js","core/core.security.js","providers/core.providers.js","Services/services.browser.js","Services/services.bulkFuelPriceNotices.js","Services/services.contactUs.js","Services/services.customers.js","Services/services.documents.js","Services/services.edoc.js","Services/services.encrypt.js","Services/services.fuelCards.js","Services/services.globalizations.js","Services/services.home.js","Services/services.localizations.js","Services/services.logging.js","Services/services.orders.js","Services/services.pages.js","Services/services.paperwork.js","Services/services.paperworkDealerForms.js","Services/services.paperworkDeliveries.js","Services/services.paperworkMeters.js","Services/services.paperworkReports.js","Services/services.paperworkTanks.js","Services/services.payments.js","Services/services.profile.js","Services/services.reporting.js","Services/services.reports.js","Services/services.userAccounts.js","Services/services.warehousePriceNotices.js"],"names":["angular","module","$routeProvider","$httpProvider","$locationProvider","templateProvider","hashPrefix","templateUrl","getTemplate","controller","resolve","localStrings","localizationSvc","getCachedLocalizationsContainer","interceptors","push","$rootScope","$q","$injector","request","config","headers","loginInfo","userIsImpersonated","userId","userKey","userType","impersonatorUserId","impersonatorUserKey","impersonatorUserType","showLoader","when","response","get","pendingRequests","length","isAuthenticated","responseError","status","data","ExceptionMessage","match","notifier","show","getLocalizedString","reject","$scope","$http","Authentication","WebUserSvc","$location","WebFunctionGroups","WebFunctions","$window","BrowserService","WebProfileService","$timeout","$filter","encryptData","WebFunctionModules","PaymentService","PaperworkService","LoggingService","EdocService","localDateRangeStrings","openNewWindow","url","window","open","initialize","appInfo","profile","webUser","paperwork","fuelCards","userLoaded","profileKey","customText","backgroundImage","syscfg","isUndefinedOrNullOrEmpty","password","impersonationAccessGuid","undefined","path","search","indexOf","applySystemSettings","getLoggedInWebUserToken","logout","getAuthenticationToken","userToken","sessionExpired","clearInfo","goTo","loggingOut","paperworkLockInfo","amplify","store","RemovePaperworkLock","batchKey","custKey","lockData","unLockPayments","CustContKey","EmailAddress","CustKey","unlockInvoices","setTimeout","rememberMe","locationInfo","functionGroup","webFunctions","menuLocation","subMenuLocation","sideMenu","sideMenuData","applyAction","then","dataLayerData","Configuration","softwareVersion","SoftwareVersion","ContactUsText","poweredByPdiText","PoweredByPdiText","countryInfo","Country","passwordComplexity","PasswordComplexity","LandingLogoImage","LandingBannerImage","UseGoogleAnalytics","GoogleAnalyticsKey","isBlank","substring","addGoogleAnalytics","document","createElement","setAttribute","async","head","appendChild","addDataLayer","createTextNode","ga","applySystemSettingsSiteDisabled","initializeSiteDisabled","applySelectedProfile","getWebUser","CurrentWebProfile","Key","setProfileColor","PrimaryColor","authorizationIndex","getCurrentAuthorization","CurrentAuthorization","WebAuthorizations","MenuBackgroundImage","checkForAppliedProfile","setSubMenu","value","location","pendingNav","subMenu","setWebProfile","WebProfile","setSystemConfiguration","checkCurrentUserPermissions","contact","CustomerContact","CustomerContactWebFunctions","x","hasModuleAccess","checkCurrentCustomerModules","i","WebFnKey","Selected","checkCurrentUserPermission","AllWebFunctions","currentCustomer","Customer","isBulkFuel","BulkFuelCustomer","isCardLock","CardLockCustomer","isRetail","RetailCustomer","isWholesale","WholesaleCustomer","isWebEft","WebPmtEFTGrpKey","checkWebFunctionModules","openEdocByRefNo","type","key","refNo","renderEdocByRefNo","JSON","stringify","EdocDetailsKey","Type","RefNo","edoc","createUrl","openEdoc","edocKey","renderEdoc","openEdocEmail","senderAddress","encrypt","encodeURIComponent","openAttachment","attachmentGuid","getWebProfileMessage","messageKey","$on","event","next","current","previous","rejection","urlFormatDate","aDate","ignoreIe","browser","getBrowserType","aDate2","Date","Object","prototype","toString","call","substr","parse","replace","isNaN","getTime","getFullYear","getMonth","slice","getDate","formatDate","formatDateTime","addDaysToDate","date","days","result","setDate","successEventListener","opResults","HasWarnings","forEach","Warnings","item","failedEventListener","_accountLockError","HasErrors","Errors","lockedAccount","errorEventListener","obj","errors","Stacktrace","StackTrace","logErrors","console","log","setFocusOnReady","elemID","$apply","$","focus","paymentsEnabled","WebPaymentsEnabled","UsesWebEFT","CustWebPaymentSettings","CurrentProfileTerms","AddandEditWebPaymentAccounts","AddandEditWebPayments","ActiveAccountCount","execOnReady","func","resetDirtyFlags","form","$setPristine","removeClass","resizeKendoGrid","grid","count","offset","widowHeight","innerHeight","setOptions","height","scrollable","initializeDateSelector","dateSelector","displaySelector","selection","startDate","startMin","startMax","endDate","endMin","endMax","numOfDays","maxNumOfDays","options","name","valid","overrideDefaults","hideAllDays","disabled","dateSelectorInitialized","localizationFilesListener","localizationFilesInitialized","$watch","setCachedLocalizations","modalifier","display","title","text","showConfirm","closeBtnTxt","confirmBtnTxt","hide","showSetupError","showSavedError","showNoResults","page","confirm","fnYes","fnNo","confirmYes","isUndefined","confirmNo","restrict","require","link","scope","element","attrs","$formatters","modelValue","Number","$parsers","viewValue","getAttrTextFromNodeMap","attr","attributes","getNamedItem","$provide","constant","templates","initDateSelector","onChange","validateStartAndEndDate","today","year","month","getDay","parseInt","ContactUs","Message","ct","st","m","this","ContactUsSubject","SubjectText","ContactUsMessage","CustomerContactKey","showContactUsModal","message","CommentContexts","showErrorBox","loadContactUsContext","$parent","sendMessage","toNumber","validateMessage","saveMessage","MessageSent","$routeParams","$anchorScroll","menu","SiteLayout","HeaderMenu","Name","header","SubMenu","ParentKey","sub","SideMenu","side","setSiteMenuLocation","val","menuObject","subMenuObject","menuText","subMenuText","documentService","getDocuments","ref","desc","start","end","docType","contKey","listDocuments","RefDateFormatted","RefDate","kendo","documentsGridInit","documents","documentsGrid","documentsGridOptions","autoBind","change","e","dataItem","select","Guid","columns","field","width","class","filterable","cell","operator","showOperators","template","dataSource","DataSource","editable","mode","extra","navigatable","pageable","selectable","sortable","ds","documentsGridDS","read","minDate","thisMenu","find","SourceType","SourceKey","documentType","referenceNumber","description","showAccounts","showUserOpt","setMenuLocation","setSubMenuLocation","checkUserMenuSecurity","securityGroup","setNewCurrentAuthorization","index","previousIndex","previousAuthorization","retrieveSelectedProfile","Id","$broadcast","showAccountList","editUser","changePassword","showUserOptions","headerTimer","subMenuWaiter","menuKey","barWidth","getElementById","clientWidth","acctWidth","style","overflowX","startIndex","endIndex","menuLength","setMenuVisibility","maxMenuWidth","currentMenuWidth","menuItem","visible","moveMenuLeft","moveMenuRight","originalWhen","globalResolves","resolveWebUser","_user","route","extend","ajax","homeService","globalizationSvc","modalInfo","curArticle","toggleModal","modalHeader","modalContent","content","shown","updatePageInfo","loadHomePageInformation","PageInfo","formatArticles","formatCurrencies","accountChangeListener","showLastCreditNotification","DispType","HomeInfo","LastCreditNotification","emailPopUp","EdocDtlKey","AttachGUID","showAccountSummary","ViewCreditInformation","DisplayPastDueMsgAt","CrStatus","AccountNeedingVerificationv","showRecentActivity","homeInfo","ScheduledPayment","Amount","PendingEft","PostedEft","LastInvoice","CustomerActivity","LastRcptAmt","LastStmtAmt","CustomerPriceNotice","EdocDetails","DtlKey","getArticle","dir","Announcements","Text","trim","unescapeHTML","lastInv","lastStmt","lastEft","lastPmnt","pendEft","nextSchPmnt","acctBalance","AccountBalance","unbilledActivity","UnshippedBalance","creditLimit","CrLimitTotal","availableCred","AvailableCredit","AmountDisplay","formatCurrency","LastStmtAmtDisplay","LastRcptAmtDisplay","AccountBalanceDisplay","UnshippedBalanceDisplay","CrLimitTotalDisplay","AvailableCreditDisplay","validatorSvc","constantLists","impersonationGuid","showLogin","showProfileSelector","showForgotPassword","initializeLogin","clearValidationScopes","automatedLogin","getRememberMe","checkForAutomatedLogin","authenticateUser","executeValidations","error","passwordExpired","passwordDays","setRememberMe","login","user","token","Token","expires","timeout","validatePasswordComplexity","errorList","retrieveWebUser","err","webUserKey","Answer2","Answer","_webProfileCount","WebProfiles","loadSelectedProfile","getWebUserProfile","showForgotMyPassword","addScopeToValidate","submitForgotMyPassword","processForgotMyPassword","Success","signup","displayControls","Timestamp","AnswerClear","GUID","Password","PasswordClear","Question","QuestionClear","Reset","Validated","controls","confirmPassword","question","answer","confirmAnswer","secretQuestions","instance","getWebUserForSignup","sendWebUser","signupWebUser","clearErrors","clearAllValidations","resetPassword","displayTitle","displayQuestion","displayPassword","displayButton","buttonText","getWebUserForPasswordReset","sendAnswer","verifyWebUserSecretQuestionAnswer","setNewPassword","resetWebUserPassword","submitInfo","webUserToUpdate","customMessage","submitPassword","OldPassword","pageInfo","oldPassword","success","userAccountService","resultMessage","cont","unsubscribeContact","Successful","Unsubscibed","initializePage","controllerAs","input","PagesService","ctrl","Context","Pages","Tokens","ViewCustomPages","getWebProfileSiteLayout","customPagesMenuNode","MenuNodes","filter","$sce","$interval","reloadInterval","selectedPage","conf","selectedIndex","pages","foundPage","retrieveToken","getAccessToken","AccessToken","MenuNode","ClientAuthMethod","trustAsResourceUrl","PageURL","access_token","msg","AuthMethods","Header","req","method","Authorization","frame","querySelector","contentWindow","write","close","failed","URL","glue","includes","params","token_type","expires_in","failure","isSelected","retval","PaperworkReportsService","PaperworkEntry","context","reports","reviewPaperwork","loaded","unposted","getPaperworkContext","paperworkSites","PaperworkSites","selectedSite","SelectedSiteKey","lockPaperworkAfterDru","LockPaperworkAfterDru","calculatedPriceToPriorDaysPriceVariance","CalculatedPriceToPriorDaysPriceVariance","calculatedPriceToCapturedRetailPriceVariance","CalculatedPriceToCapturedRetailPriceVariance","netSalesDollarsToCapturedRetailPriceNetUnitsVariance","NetSalesDollarsToCapturedRetailPriceNetUnitsVariance","setSiteDescByKey","showEnterPaperworkMenuItem","CanEnterPaperwork","PaperworkReports","paperworkReports","site","SiteKey","selectedSiteObj","setupNav","retailWarningMessage","averageWarningMessage","setupAppNavigation","apps","app","MenuCode","deliveries","meters","tanks","DealerFormVersionKey","forms","AppKey","openNewPaperworkBatch","OpenPaperworkBatch","batch","PaperworkBatch","PaperworkApps","PaperworkForm","siteInfo","PaperworkSiteInfo","paperworkKey","pwLoadedListener","viewOnly","navPg","menuCode","$$path","resolveCurrentPageMenuCode","getSinglePath","reportingService","$root","reportSettings","reportKey","inventorySummary","reportType","setSiteAndDate","NextPaperworkDate","unwrapReportSettings","loadOptions","wrapReportSettings","saveOptions","setNextPaperworkDate","getNextPaperworkDate","sender","sitekey","paperworkDate","args","format","ValidatePaperworkSiteDateForContact","qs","exportReport","renderReport","localizeReports","sort","compareDisplayNames","report","DisplayName","a","b","localeCompare","isFirstPage","isLastPage","HistoryLimit","maxDate","FutureLimit","getRouterPath","SubmitStatus","paperworkHistoryGrid","paperworkHistoryGridOptions","paperworkHistoryGridInit","paperworkHistoryGridDS","selectedReviewSite","viewPaperworkHistory","reviewLoaded","noRecordsFound","allEntry","PaperworkDate","InvtyCOGSDate","FuelCOGSDate","getPaperworkBatchesByDate","each","PaperworkDateFormatted","TotalFuelSales","loadPaperwork","isEntry","PaperworkMetersService","showRetailPrice","showEndingDollar","showNetDollars","showEndingUnits","showNetUnits","showAvgPrice","showBeginMeters","metersLoaded","kInputOptions","culture","getLocale","decimals","spinners","MaxUnits","scopesToValidate","metersEditable","OpenPaperworkBatchByKey","res","firstLastPage","nextApp","loadMeters","navigateToPage","pwSubMenu","meterIndex","gridColEditorInput","container","fieldName","required","kendoNumericTextBox","max","min","appendTo","gridColNumber","cellIndex","rowIndex","meterGridColIsEditable","model","DollarsEndingState","DollarsNetState","UnitsEndingState","UnitsNetState","FuelPositionUnitReading","FuelPositionDollarReading","onGridKeydown","keyCode","keys","TAB","shiftKey","focusPreviousEditableCell","focusNextEditableCell","initializeMetersGrid","metersGridDS","schema","id","fields","DispenserNo","FuelPositionNo","ProductDescription","RtlPrice","EndAmount","NetAmount","EndUnits","NetUnits","CalcPrice","aggregate","metersGridOptions","data-field","footerTemplate","editor","headerTemplate","hidden","aggregates","dataBinding","parent","dataBound","setupMetersRows","edit","$input","addClass","prop","currentCell","tbody","children","gridInputCellOnBlur","retailChange","endAmountChange","netAmountChange","endUnitsChange","netUnitsChange","row","col","$col","setupGridColumnValidationNotificationUI","setupMetersGridColumns","some","meter","metersGrid","hideColumn","widget","on","calculatePageTotals","qtip","position","adjust","y","classes","processGridColumnValidationNotification","$row","errorMessages","warningMessages","idx","hasErrors","hasWarnings","messageList","append","warningList","meterRowValidation","parms","calcTotalSales","isValid","uid","errorRtlPrice","warningRtlPrice","PriorCalcPrice","Math","abs","errorEndUnits","warningEndUnits","BeginUnits","errorEndAmount","warningEndAmount","BeginAmount","warningCalcPrice","validateMeters","newPWBatchLoadedListener","loadMetersForEntry","PCKey","PaperworkMeters","priceToleranceAmount","PriceToleranceAmount","ShowRetailPrice","ShowEndingDollar","ShowNetDollars","ShowEndingUnits","ShowNetUnits","ShowAvgPrice","ShowBeginMeters","DRUPosted","Status","PageStage","hasChanges","saveMeters","submit","submitClicked","processSubmit","skipNav","submitPaperworkCmdParms","SubmitPaperwork","PreviouslySubmitted","HasBeenSubmitted","GetPaperworkBatchErrorWarning","submitPaperwork","fuelMetersAppInfo","HasData","IsRequired","isPrevious","paperworkMeterHeader","metersForm","FuelMtrKey","SiteDesc","ProfCtrKey","PaperworkBatchKey","UserName","Ts","HeaderTimeStamp","copy","toJSON","updateMeters","savePaperworkMeters","netAmountCalc","calcPerUnit","CheckAveragePriceToRetail","CheckAveragePriceOverDay","calculateNetAmountFromEnd","calculateNetUnitsFromEnd","totalAmount","calculatePageAmountTotals","totalUnits","calculatePageUnitTotals","nextCell","eq","hasClass","nextAll","editCell","prevAll","prev","openBeginMeter","beginAmount","beginUnits","useBeginUnits","useBeginAmount","openPumpTest","TestAmount","TestUnits","saveModalValues","BeginAmountOverride","BeginUnitsOverride","classList","add","PaperworkTanksService","tanksLoaded","postedReadingsExist","NewOSComments","postedTanks","loadTanks","tankIndex","selectOnFocus","partialUnitsEditor","partialUnits","dataTextField","dataValueField","selectionElement","selectedRow","selectedRowData","calculateTankValues","calculateWaterVolumeValues","_filterSource","getPartialDescFromValue","Value","PartialUnits","noReadingChkClick","modelRow","getByUid","NoReading","set","initializeTanksGrid","tanksGridDS","TankNo","ProductId","LargeUnits","SmallUnits","Quantity","WaterSmallUnits","WaterPartialUnits","WaterQuantity","Temperature","NetQuantity","Electronic","Depth","tanksGridOptions","ng-click","setupTankRows","last","tanksGrid","setupTankGridColumns","target","closest","checked","useLargeUnits","quantityOnly","trackWaterLevels","useTempCorrections","calculateVolumeForTemperature","depth","calculateTankDepth","metric","quantity","getVolumeFromTankChart","tankCharts","adjustVolumeForTemperature","tempCharts","calculateWaterDepth","getWaterVolumeFromTankChart","validateTankOverShort","referenceTank","hasWarning","UseOSWarnings","HasWarning","Min","Max","InventoryTankNo","tolerance","EndQty","OSWarningPct","OSWarningUnits","totalValue","calculateTankEndQuantity","tankCommentIsRequired","tank","inventoryTankNo","tankRowValidation","errorFuelQty","warningFuelQty","maxTankVolume","getMaxVolumeFromTankChart","validateTanks","tankCommentRequiredError","refreshDataSource","PaperworkTanks","PostedPaperworkTanks","PartialUnitsList","Metric","QuantityOnly","UseLargeUnits","UseTempCorrections","TrackWaterLevels","TankCharts","TempCharts","OSComments","RequireOSComments","tanksEditable","tankCommentValidation","validationMessage","validatorError","tankCommentErrorOnBlur","tankCommentErrorOnFocus","savePaperworkTanks","showPostedReadings","popupTitle","gridOptions","el","kendoGrid","refresh","HeaderKey","tanksForm","tankHeader","StickType","FuelStkHdrKey","NewText","getPartialValue","PaperworkDeliveriesService","$compile","deliveriesList","fuelDelivery","AuthorizedVendors","AuthorizedTerminals","AuthorizedCarriers","FuelDeliveryFreight","VendKey","TrmnlKey","CarrierKey","deliveriesLoaded","deliveryFilteredTanks","currentView","changeView","view","freightModalFormDelegate","productValidation","errorDescription","newDeliveryProduct","getDeliveriesWithContext","hideModals","FuelDeliveriesList","NewDelivery","LiftDatetime","DelivDateTime","fuelDeliveriesCount","initializeDeliveriesGrid","productEditor","SiteTankProducts","Description","tankEditor","getFilteredTanksList","ProdKey","addDeliveryGridRow","$newRow","deliveriesGridColIsEditable","deliveryIsEditable","getProductByKey","prodKey","deliveriesGridDS","ProdId","ProdDesc","DelivGrossQty","DelivNetQty","SelectedTank","FuelDeliveryProducts","deliveriesGridOptions","setupDeliveryRows","deliveriesGrid","addDeliveryAction","setupDeliveriesGridColumns","setupDeliveryRow","deliveryRow","selectedProduct","totalRows","$lastRow","cancelRow","AllocFuelContKey","AllocFuelContDtlKey","AllocLastPostedFuelContDtlKey","BasedOnUnits","BOLAutoMatched","BOLDtlKey","BusEntKey","CalcExtCost","CalcFrtCost","CalcUnitCost","CnfrmDateTime","CnfrmStatus","CnfrmUserID","ContractOverride","CostOverride","CostPosted","CustLocKey","DestProdKey","DestSiteKey","DestType","ExternalRecID","FrtInInventory","FrtOverride","FrtPLAmt","FrtPLInInvAmt","FrtPLInInventory","FueldelProdFrtReconGrossQty","FueldelProdFrtReconNetQty","FrtReconUserID","FrtReconciled","FrtUnitCost","FrtVndInvKey","FrtVndInvPndKey","FuelContKey","FuelContDtlKey","FuelDelKey","InvcExtCost","InvcFrtCost","InvcFrtUnitCost","InvcGrossQty","InvcNetQty","InvcUnitCost","LastPostedFuelContDtlKey","OrdQty","OrigProdKey","OwnerOption","ReconUserID","Reconciled","TaxPLAmt","TaxPLInInvAmt","VndInvKey","VndInvPndKey","FuelDeliveryTanks","DelivQty","DelProdKey","Ethanol","InventoryCost","LastCost","LastDelivGrossQty","LastDelivNetQty","LastEthanol","LastOctane","LastQty","LastRVP","LastTankNo","Octane","RplCarrierKey","RplCostAssigned","RplTrmnlKey","RplVendKey","RVP","insert","editRow","ShowGrossUnits","deleteDeliveryProductRow","dataRow","remove","newValue","oldValue","vendKey","UsesSiteAuthorizedTerminals","getSiteFuelAuthorizedOrigins","trmnlKey","terminals","savePaperworkDelivery","validateDeliveries","isNewRow","appForm","EntryUserID","paperworkDeliveryHeader","FuelDelivery","deliveryProduct","FilteredTanksList","displayDeleteConfirmationModal","deleteConfirmationModalDeferred","defer","showDeleteConfirmationModal","promise","deleteDeliveryHandler","deliveryListItem","deletePaperworkDelivery","displayCommentsModalForm","showCommentsEntryModalForm","perLoadFreightModalFormDeferred","displayPerLoadFreightModalForm","fuelDeliveryFreight","showPerLoadFreightEntryModalForm","editPerLoadFreight","productKey","SiteTanks","siteTankProductLookup","SiteTankProductLookup","findAll","ProductKey","authorizedTank","TankProductKey","isDefined","delivery","deliveryGridRowValidation","errorNetQty","warningNetQty","errorGrossQty","warningGrossQty","Capacity","showErrorTooltip","deliveriesGridRowsCount","$gridActionFooter","$gridActionFooterRowMiddle","getStatusDescription","liftDateValidation","validationMessageWrn","liftDateTime","hasError","errorMsg","liftDateTimeObject","maxDateTime","minDateTime","validatorWarning","validateLiftDate","pdi","ng","validate","PdiValidation","deliveryDateValidation","deliveryDateTime","delivDateTimeObject","validateDeliveryDate","viewDelivery","deliveryKey","getDelivery","editPerLoadFreightOkHandler","executeValidationsForScope","editPerLoadFreightCancelHandler","addDeliveryFreightRow","newFreightRow","CalcAmt","FrtRuleKey","InvcAmt","Override","validateFreightRow","freight","freightRuleValidation","PaperworkDealerFormsService","dealerFormsLoaded","formsEditable","kOptions","loadDealerForms","dealerForms","DealerForms","setupDisplayValues","Updated","updateDealerForms","setFocus","AllFieldsDisplay","AllFields","newObject","property","formatNumeric","saveDealerForms","dealerFormsForm","Caption","DealerFormVersion","focusSet","Rows","DisplayOnly","IsCalculated","onDealerFormChange","dataIDValue","DataIDValue","parseFloat","convertStringToNumber","CalcFields","calcField","Calcuations","calc","ResultTypeKey","TypeKey","CalcTypeKey","Operation","getReportFromSubMenu","PaperworkReportSites","SubjectArea","intervalPromise","paperworkBatchKey","beforeunloadEventCreated","refreshLock","RefreshPaperworkLock","startLockInterval","stopLockInterval","cancel","beforeUnloadHandler","ID","preventDefault","pwLockListener","addEventListener","pwSubmitListener","removeEventListener","currentPage","isView","menuOrder","findIndex","noKey","pathMode","ReportSettingsService","showSettingsBar","allowLoad","allowSave","allowExport","allowCsv","allowXml","allowPdf","allowExcel","exportReportData","initReportSettings","exportOptions","selectedExportOptions","saveSettingsName","showModalLoad","showModalSave","showModalConfirmSave","selectedKey","selectedReportContactKey","selectedDescription","canDelete","exportData","applyReportSettings","deleteReportSettings","saveReportSettings","getReportSettings","notify","returnedReportSettings","ReportSettings","ARWebSettings","saveSettings","loadSettings","saveConfirmReportSettings","selectKey","saveSettingsKey","fromJson","Options","apiService","deferred","apiSvcSettings","ApiServiceSettings","RptKey","skipValidations","execute","Data","ErrorMessages","custContKey","recStatus","settingsKey","toJson","RecStatus","ReportKey","SettingsKey","executeAndNotifyOnSuccess","getTermsAndConditions","theTermsAndConditions","declineTerms","acceptTerms","agreeToTerms","acceptTermsAndConditions","CustomerWebPaymentSettings","paymentKey","invoicesGrid","invoicesGridOptions","invoicesGridInit","charge","DueDate1","create","InvoiceDate","Balance","invoicesGridDS","creditsGrid","creditsGridOptions","creditsGridInit","UnAppAmount","creditsGridDS","unlockPaymentsAsync","localLockData","Headers","body","CustomerKey","fetch","keepalive","webPaymentLocked","paymentControlOptions","CurrentTerms","lockPayments","listeners","beforeunload","initializePart2","invoicesValueArr","invoiceWarning","webPayment","WebPaymentWithContext","CustomerScheduledPayment","PaymentType","InvoiceValues","selctedInvoicesValue","selctedInvoicesValueDisplay","setUpView","getPayment","lockInvoices","getScheduledPayments","HasPendingPayments","CustomerScheduledPayments","any","HasPendingBudgetPayments","selctedCreditsValue","totalInvoiceAmount","setPaymentType","lastStatementDate","LastStatementDate","isStatementCustomer","IsStatementCustomer","LastStatementAmount","HasUnpaidStatement","isBudgetCustomer","IsBudgetCustomer","isBBEnabled","IsBBEnabled","BudgetBalance","isInvoiceCustomer","IsOpenItemCustomer","Invoices","IsPrepaidCustomer","WebMinEFTDate","WebMaxEFTDate","PaymentDate","viewSetupComplete","paymentDate","termsDiscount","theValue","theGrossValue","theDiscount","TermsDiscountDate","TermsDiscount","TermsDiscountDate2","TermsDiscount2","TermsDiscountDate3","TermsDiscount3","TermsDiscountDate4","TermsDiscount4","TermsDiscountDate5","TermsDiscount5","TermsDiscountDate6","TermsDiscount6","round","selctedInvoicesGrossValue","selctedInvoicesGrossValueDisplay","selctedInvoicesDiscountValue","selctedInvoicesDiscountValueDisplay","credit","selctedCreditsValueDisplay","totalInvoiceAmountDisplay","getCssClasses","ngModelController","$invalid","$dirty","$valid","showError","$error","setScheduledPaymentAmount","verifyPayment","dataItems","invoice","Credits","CreatedByCustContKey","LastModifiedByCustContKey","CustPmtAcctKey","CreditAmount","GrossAmount","DiscountAmount","CreditAmountDisplay","GrossAmountDisplay","DiscountAmountDisplay","amount","$cancelPromptToSave","paymentIsValid","elem","css","paymentDateValidation","_localStrings","liftDate","replacementParms","validatePaymentDate","unlockInvoicesAsync","invoicesLocked","delay","paymentType","checkAll","paymentsInfo","lastStmtAmt","budgetBalance","LastStatementAmountDisplay","BudgetAmountDisplay","isBudgetPayment","budgetBalanceChanged","confirmPayment","getBudgetPaymentContext","savePayment","changePayment","reCalculateCreditValues","paymentHistory","scheduled","processed","canceled","getScheduledPaymentHistoryContext","accounts","CustomerPaymentAccounts","scheduledPayments","pmntGrid","pmntGridOptions","pmntGridInit","payment","pmntGridDS","CustPmtAcctDescription","FormattedDate","StatusDescription","FormattedActivityDate","Created","predicate","reverse","cancelPaymentKey","cancelConfirm","selectedAccount","LastModifiedDateTime","FormattedCreatedDate","CreatedDateTime","CreatedByCustContEmailAddress","confirmCancelPayment","cancelPayment","Payments","unloadPaymentHandler","persisted","unloadInvoiceHandler","resetValues","paymentLockListener","invoiceLockListener","paymentUnlockListener","invoiceUnlockListener","PaymentAccountService","acctGrid","acctGridOptions","acctGridInit","acctGridDS","WebPaymentAccounts","AccountStatusDesc","NextPaymentText","getPaymentAccountList","AccountLastActivity","FormattedPaymentDate","AccountNextPayment","AccountNextPaymentAmmount","editableAccount","paymentAccountKey","initializeEditAcount","AccountTypes","descr","WebPaymentAccount","AccountStatus","getPaymentAccount","AccountTypeDescr","AccountType","CustomerPaymentAccount","routingNumberIsValid","setAccountStatus","savePaymentAccount","verifyPaymentAccount","validateRoutingNumber","BankRoutingNo","verifyPaymentAccountOverride","routingNumberValidation","confirmDeactivate","confirmClose","no","acctInfo","confirmPaymentAccount","changePaymentAccount","AccountNoVerify","AccountNo","verifyAccount","webPaymentAccountKey","webPaymentAccountDesc","amt1","amount1","amt2","amount2","VerificationAmount1","VerificationAmount2","contactsGrid","contactsGridOptions","selectedRows","contactsGridInit","contactsGridDS","CustomerContacts","WebActive","ManageContactsAndSecurity","listContacts","FirstName","LastName","$route","expandWFGrids","expand","showAccountFNs","showFuelFNs","showOrdersFNs","showPaperworkFNs","showCustomPagesFNs","wbfns","Disabled","textMessagePhoneNumbers","modalMultiSave","modalCopySecurity","copyContact","clearSecurity","modalResetPassword","verify","modalChangeEmail","hash","email","pendingSave","phoneTypes","clearButton","canResetPassword","EnforcePasswordComplexity","getNextPasswordResetDate","hideActiveCheckbox","hideWebActiveControl","contactKey","customerContactKey","editWebUser","AnswerClear2","copyUser","CopyContacts","loadContactContext","WebQuestionAnswer2","WebQuestionAnswer","TextAddressPhone","setAllWebFunctions","editUserForm","wbFns","saveContact","secretQuestion","$angular_scope","scopeValidationErrors","MatchingContactCount","saveContactOnly","ApplyToAll","save","saveAllContacts","EditorName","EditorEmailAddress","PhoneFormatted","Phone","AltPhoneFormatted","AltPhone","AltPhone2Formatted","AltPhone2","FAXFormatted","FAX","saveWebUser","reload","retrieveWebUserData","setEditUserSelectedAuthorization","updateContactSecurity","currentContactWebFunctions","questionChanged","showChangeEmailModal","hideChangeEmailModal","saveChangeEmail","addUser","copyContacts","getBlankContact","createContact","validationsPassed","closeAddUser","customerService","contacts","primaryCreditContact","sendBalanceAlerts","SendBalanceAlerts","sendBalanceAlertText","balanceAlertThreshold","BalanceAlertThreshold","prepaidBalance","CrPrePaidBalance","balanceAlertThresholdDisplay","CreditContKey","num","saveAccountSettings","saveCustomerAccountSettings","settingsForm","currentCustomerId","auditLog","auditResults","auditLogGrid","auditLogGridOptions","auditLogGridInit","sideMenuLocation","includeAdds","includeChanges","includeDeletes","includeActions","subjectArea","changedBy","showContacts","subjectAreas","contactList","getWebAudits","WebAuditEntries","AudEntryDateTime","AccountActivity","invoices","reportTypeDetail","outstandingOnly","showReportDetail","transactionHistory","creditCardActivity","groupByDate","pending","setReport","tenNinetyNine","useDateRange","AccountReports","recentActivity","AccountPayments","unappliedPayments","FuelCardsService","viewCards","modalEdit","modalPin","modalReissue","modalDeactivate","modalChangeCardNo","viewCardsGrid","viewCardsGridOptions","displayFuelCard","viewCardsGridInit","viewCardsGridDS","cards","getCards","cardFormat","cardNumber","active","expired","locked","cancelled","department","Cards","NumberMasked","Template","statusCodes","act","ActivationDate","exp","ExpirationDate","Sort","FuelCardsCards","FuelCardsTrans","FuelCardsPrices","stringFromCharacterEntity","getCardsContext","formats","CardFormats","embossingReasons","CardEmbossingReasons","deactivateReasons","CardDeactivationReasons","states","States","alertRules","CardAlertRules","CustomerCardTemplates","company","Company","getCardsDepartments","departments","Departments","getCustomerLocations","locations","Locations","saveCards","state","closeModal","card","cardDetails","CardInfos","Number_Formatted","Number_Masked","isValidForWebTemplate","PIN","Activation_Date","Expiration_Date","Cards_Issued","Emboss_Date","Emboss_Line_1","Emboss_Line_2","Emboss_Line_3","Export_To_Embosser","Marked_For_Export","Last_Emboss_Date","CardDeactRsn_Key","Deactivation_Date","HasTransactions","TimeStamp","securityOptions","allowPending","CardCFs","editCards","getCardDetails","ViewCardNumbers","CardDetails","origCardDetails","setSecurityOptions","displayModelPin","saveChangesPrompt","PIN1","PIN2","displayModelReissue","CardEmbRsn_Key","displayModelDeactReasons","toISOString","displayChangeCardNo","command","nextDate","CardFmt_Key","VisibleOnWeb","PhysicalCard","AutoNo","AllowPending","UseExpirationDates","DefaultLifetimeSelection","AllowDefaultByCustomer","Next_Exp_Date","keyLookup","list","isArray","readOnly","formTitle","viewCardNumber","displayCardNumber","canChangeCardNo","showVehicleInfo","showCardAuths","showProdSite","showTaxExemeptions","showEmbossingAlert","showChangePin","showReissue","reissueTitle","showDeactivate","showSaveTemplate","shipToLocation","cardType","cardStatus","deactivationReason","embossingReason","alertRule","EditCards","AllowEditAfterEmbossed","autoNo","maxCardNoLength","Mask","CardAlertRule_Key","Max_Trans_PerDay","AllowVehicleInfo","Auth_By_Product","Single_Site_Auth_Site_Key","CardTaxExs","showSave","AllowPIN","AddNewCards","CardDptKey","Vehicle_State_Key","cols","addFooterBar","addCardAction","stateList","optionLabel","Code","addCardsGridOptions","nullable","validation","number","unique","matches","addCardsGrid","vehicleID","licenseNo","defaultValue","update","destroy","createAt","messages","commands","canceledit","mobile","table","getAttribute","addRow","showCardNo","showPIN","showVehInfo","sortBy","validateTemplates","templateKey","templateDropDown","saveChanges","templateDetails","clone","newCard","Cust_Key","SetExpirationDate","VehicleID","Vehicle_License_No","CardFmt_Allow_Pending","addCard","CardNumberValid","getCard","splice","myItem","AutoNoKey","locationsGrid","locationsGridOptions","selectLocation","locationsGridInit","locationsGridDS","results","selected","disableCtrls","LocIDFormat","LocIDLength","canAddorSave","ViewCards","pullLocations","unshift","addLocation","clearLocation","blankLocation","deleteLocation","pushLocation","saveLocation","loc","StateKey","State","saveCustomerLocations","locationsForm","updatePhone","departmentsGridReady","departmentsGrid","departmentsGridOptions","selectRow","deptKey","departmentsGridInit","departmentsGridDS","tableArray","html","FieldName","values","selDept","selVals","disableControls","pullDepartments","createObjects","hideCol1","hideCol2","hideCol3","hideCol4","hideCol5","Fields","Values","FieldNumber","CardDptFldKey","FieldValue","dept","makeTable","loadTable","deleteDept","pushDepartments","departmentForm","newDesc","saveCardsDepartments","n","cell2","cell4","deptName","cell1","cell1Key","cell1Value","cell2Key","cell2Value","cell3","cell3Key","cell3Value","cell4Key","cell4Value","cell5","cell5Key","cell5Value","formDisabled","pullFields","setFields","clickCancel","clickSave","pushFields","deptSetupForm","CPPriceNotices","lookupPrices","product","groupBy","sites","CustContCPSite_Site_Key","Site_Description","products","ProdAliasGrp_Key","ProdAliasGrp_Description","maxCPDays","getPriceNoticesSettings","CPPrcNtcRuleKey","PriceNoticesSettingsSites","concat","Site_Selected","PriceNoticesSettingsGroups","ProdAliasGrp_Selected","CPPriceRuleMaxDays","productsGrid","productsGridOptions","sitesGrid","sitesGridOptions","siteSearchGrid","siteSearchGridOptions","siteSearchGridInit","siteSearchGridDS","sitesGridInit","sitesGridDS","Site_Address1","Site_City","State_Code","Site_Zip","productsGridInit","productsGridDS","initPriceNoticesSettings","initModalSiteSelector","priceNoticesSettings","methods","allProducts","CustContCPProd_Key","CustContCPProd_CustCont_Key","ProdAliasGrp_ID","ts","refreshPriceNoticesSettings","PriceNoticesSettingsMethods","CompKey","modalSiteSelector","siteSearch","city","postal","limit","toManyResults","maxResults","showModalSiteSelector","retrieveSites","getSearchSites","SearchSites","checkAllProducts","disableNotices","EmailSelected","AltEmailSelected","PhoneTextSelected","addSites","CustContCPSite_Key","removeSite","savePriceNoticeSettings","hasProducts","hasSites","transactionAlerts","CardTransactions","transactionDetails","cardNoDesc","inclUnbilled","inclBilled","inclAdditionalInfo","viewCardNumbers","additionalInfoReportName","rptName","CPInvcRecapSumTaxesByInvcGrp","updateOptions","transactionSummary","invoiceNo","enableUnbilled","enableBilled","recap1","recap2","transactionByInvoice","getTaxAuthorities","taxAuthorities","TaxAuthorities","taxDetails","taxAuthKey","groupBy1","enableGroupBy1None","groupBy2","enableGroupBy2","groupBy3","enableGroupBy3","inclTransDetail","enableInclAdditionalInfo","taxSummary","transactionsAlerts","reportCount","refreshTransactionAlerts","transactionTaxRecap","showTaxRecap","statementsGrid","statementsGridOptions","StmtEdocKey","statementsGridInit","statementsGridDS","getStatements","stmt","StmtDateTime","notifications","types","fullName","Active","notificationsGrid","notificationsGridOptions","handleRowClick","notificationsGridInit","notificationsGridDS","getNotifications","note","NotcDate","EmailBody","trustAsHtml","NotcType","tenNinetyNineAdvice","yearsBack","adviceGrid","adviceGridOptions","Get1099AdviceList","DateTimeFormatted","DateTime","PmtYear","adviceGridInit","adviceGridDS","canOpenAddOrders","CanAddEditWebOrders","ordersService","errorsDisplayed","enableButton","removeAttr","setButtonVisiblity","displayOrders","orderDetails","OrdStatusKey","reopenBtn","submitBtn","WOGSettings","SubmitOnHold","cancelBtn","hasAnyItems","keyProperty","tanksAndEquipment","addOrder","tankIDCol","cancelCommentModal","blankOrderHeaderObj","creditHoldMessage","getOrdersContext","buttonBar","PONumber","DeliveryDT","ordKey","getOrderDetails","OrderDetails","getLocationDetails","getOrderLocationInfo","ReqDelivDateTime","TanksAndEquipment","OrdDelivDirections","DeliveryDirections","equipment","TankNumber","OrderQty","EquipmentKey","hasAnyTanks","hasAnyEquipment","saveOrder","Command","OrdCreatedByContKey","saveOrderDetails","OrdKey","cancelCommentModalDialogClose","editOrders","shipTo","prevCustLocKey","hideTankAndEquipment","ordersGrid","ordersGridOptions","ordersEquipmentGridOptions","ordersGridInit","showIdCol","ordersGridDS","TankID","Product","capacity","is","rowData","getKendoNumericTextBox","MaxVolume","rowDataMaxVolume","showColumn","ordersEquipmentGridInit","ordersEquipmentGridDS","EquipmentID","EquipmentDescription","ordersEquipmentGrid","validateOrderDate","savedTankData","dataBetweenDateChanges","getOrderContext","getOrderCustomerLocations","MinDateTime","OrderLocations","HasValidTankOrEquipment","updateCustomerLocationData","l","loadExistingOrder","initialOrderCustLocKey","validOrderQtys","items","map","order","isInteger","qtyValidityStates","every","Boolean","isFinite","floor","orderQtyWarning","orderTotal","sum","OrdQtyParams","OrdMinQty","OrdMaxQty","validOrder","editForm","updateCustomerLocationDataLock","source","validTankOrEquipment","isEmpty","finalItems","s","existing","CustFuelTankKey","copyTankData","te","OrderEquipmentDetails","copyEquipmentData","t","p","blankOrderDetailsObj","all","requestedDT","suggestedDT","theWinner","temp","reqDelivDateTimeString","oldReqDelivDateTimeString","isString","oldReqDelivDateTime","reqDelivDateTime","toDateString","openOrders","DeliveryDate","getOpenOrders","OpenOrders","openOrder","orders","ViewOrderHistoryandPriceNotices","quotes","ordered","dispatched","delivered","billed","fuel","warehouse","noninventory","productSearchText","packageSearchText","orderInvoiceBOLSearchTerm","bulkFuelPriceNoticesService","bulkPricesGrid","bulkPricesGridOptions","bulkPricesGridInit","bulkPricesGridDS","bulkFuelPrices","loadBulkFuelPrices","EffDateTimeFormatted","EffDateTime","warehousePriceNoticesService","warehousePricesGrid","warehousePricesGridOptions","warehousePricesGridInit","warehousePricesGridDS","warehousePrices","loadWarehousePrices","closeDialog","closeText","autoClose","transclude","$eval","dialogStyle","$element","$attrs","hideModal","ngModelCtrl","transformedInput","$setViewValue","$render","ele","dynamic","contents","NUMBER_REGEXP","lastValidValue","precision","symbol","unFormatNumber","formatViewValue","decimalPlaces","$isEmpty","nStr","split","x1","x2","rgx","test","addCommas","toFixed","applyFormat","$modelValue","$viewValue","empty","$setValidity","bind","customAutofocus","at","tip","corner","$parse","passwordMeterScore","pwdValidLength","pwdHasLetter","pwdHasNumber","pwdHasSpecial","PasswordMinLength","PasswordMinUpperCase","PasswordMinNumbers","score","total","$pristine","currentValue","imageArray","stop","advance","slider","getPrevImage","pauseAutoAdvance","getNextImage","modelCtrl","inputValue","alphaNumeric","initializeWindowSize","maxHeight","scrollHeight","documentElement","offsetHeight","clientHeight","windowHeight","windowWidth","innerWidth","newHeight","oldHeight","replaceWith","onCloseFn","onCloseMessage","onbeforeunload","onLeaveIfFn","onLeaveMessage","$locationChangeStartUnbind","localizedString","confirmPopUpText","pnLocalizationCtrl","localizations","overlayContainer","mainContent","getElementsByClassName","setHeight","postRender","terminal","paperworkLocalizedString","submitPopUpText","currentMenu","currentSubMenu","currentSideMenu","counter","findDirtyElements","formName","nextPath","nextPathIndex","yesFN","navigate","yes","noFN","localResetDirtyFlags","parseMenuLocation","kendoDateFormat","formatForCulture","kendoTimeFormat","kendoDateTimeFormat","inputMaskDateFormat","inputMaskTimeFormat","inputMaskDateTimeFormat","dateFormat","timeFormat","dateTimeFormat","dateTimeFormatPatterns","ntbCtrl","widgetInstance","ui","inputmask","clearMaskOnLostFocus","toBoolean","v","$$lowercase","String","theString","arguments","regEx","RegExp","validatorParms","executionExplicit","processElementErrorNotification","validationAttr","propertyName","validationValidationMsg","kendoDropDwnElm","errFocusHdlr","errBlurHdlr","errClickHdlr","ngModel","join","toggle","currentElement","span","unbind","processElementWarningNotification","wrnFocusHdlr","wrnBlurHdlr","kendoDropDwnElm1","processValidationNotification","compile","output","validationErr","viewport","my","collision","screen","fixed","scopeValidationWarnings","validationWrn","processValidationsSummaryNotification","createElementValidationMessageError","validationMsg","validationMessageElement","clearBtnElm","siblings","after","createElementValidationMessageWarning","removeElementValidationMessage","$this","requiredMsgDefault","minLengthMsgDefault","maxLengthMsgDefault","valueRuleRngMsgDefault","valueRuleGtMsgDefault","valueRuleLtMsgDefault","pdiRequiredExecutionExplicitDefault","ptrnEmailMsgDefault","pdiMinLengthExecutionExplicitDefault","pdiMaxLengthExecutionExplicitDefault","pdiMaxLengthEnforceMaxConstraintDefault","pdiValueRuleRangeExecutionExplicitDefault","pdiValueRuleGreaterThanExecutionExplicitDefault","pdiValueRuleLessThanExecutionExplicitDefault","pdiEmailValidataionExecutionExplicitDefault","evaluateIfConditions","ifExpr","cs","$$childHead","$$nextSibling","scopeValidations","hadError","validatorResult","validator","validateErrors","validateWarnings","warnings","formModelWatchers","addScope","scopeID","$id","pdivalidation","pdiValidations","elementValue","expression","isObject","isFunction","priority","validations","addValidation","showValidationNotification","ctrlIndex","errorValidatorFn","warningValidatorFn","validationErrorMsg","validationWarningMsg","formModel","newScope","$new","appHtml","addFormModelWatcher","watchUnBinder","unBinderFn","ctrls","requiredValidationMsg","requiredValidationMsgWrn","requiredExecutionExplicit","requiredIfExpr","requiredIfExprWrn","minlengthValidationMsg","minlengthValidationMsgWrn","minlengthExecutionExplicit","pdiMinlength","minlengthIfExpr","minlengthIfExprWrn","ifConditions","maxlengthValidationMsg","maxlengthValidationMsgWrn","enforceMaxConstraint","enforcemaxconstraint","maxlengthIfExpr","pdiMaxlength","maxlengthExecutionExplicit","lowerLimit","upperLimit","valueRuleRngValidationMsg","valueRuleRngValidationMsgWrn","valueruleRngValidationMsg","valueruleRngValidationMsgWrn","rangeParms","pdiValueruleRange","valueruleRngExecutionExplicit","valueruleRngIfExpr","valueruleRngIfExprWrn","valueruleGtValidationMsg","valueruleGtValidationMsgWrn","valueruleGtExecutionExplicit","pdiValueruleGreaterthan","valueruleGtIfExpr","valueruleGtIfExprWrn","valueruleLtValidationMsg","valueruleLtValidationMsgWrn","valueruleLtExecutionExplicit","pdiValueruleLessthan","valueruleLtIfExpr","valueruleLtIfExprWrn","ptrnValidationMsg","pdiValueIsNumeric","pdiValueIsNumericMsg","pdiDateIsGreaterEqualToMsg","pdiDateIsGreaterEqualToMsgWrn","fromDate","pdiDateIsGreaterEqualToFromDate","thruDate","ptrnValidationMsgWrn","regExPattern","ptrnEmailValidationMsg","ptrnEmailValidationMsgWrn","prtnEmailExecutionExplicit","emails","matchElementValidationMsg","matchElementValidationMsgWrn","valueruleNgModelMatch","valueruleMatchElementValidationMsg","valueruleMatchElementValidationMsgWrn","valueruleMatchElementIfExpr","valueruleMatchElementIfExprWrn","tel","country","constructor","settings","responseType","ApiServiceOperationResult","SuccessMsg","SucessMessage","ErrorTitle","WarningMessages","IsRedirect","RedirectUrl","account","AccountNoMasked","PrenoteDate","RejectedEmailSent","VerificationDate","IsDefault","AccountNextPaymentKey","ScheduledPaymentCount","post","Content-Type","NotificationService","webAPICall","notifyOnSuccess","suppressErrors","assign","handleSuccess","handleFailure","handleError","executeAndNotifyOnSuccessAndSuppressErrors","executeAndSuppressErrors","factory","service","All","BulkFuel","CardLock","Retail","Wholesale","CardAlerts","ViewNotificationsSenttoOtherContacts","AddAndEditBulkFuelOrders","Account","Orders","Paperwork","FuelCards","Comments","Documents","AccountAlerts","CustomPages","webFunction","customer","handle","HttpUtil","paymentInfo","sessionTimeout","$analytics","WebUserId","WebUserPassword","ImpersonationGuid","ImpersonatedUserId","ImpersonatedKey","ImpersonatedType","ImpersonatorUserId","ImpersonatorKey","ImpersonatorType","eventTrack","category","label","removeEmptySiteMenuEntries","WebUser","retrieveWebUserFromAPI","retrieveWebUserFromAPIWithToken","ProfileKey","retrieveSelectedProfileFromAPI","webUserId","quiet","isLogin","WebUserKey","IsLogin","date1_ms","PWCreatedDate","date2_ms","_token","_profile","$get","templateName","absurl","protocol","hostname","pathname","indexOfAppRel","toLowerCase","userAgent","navigator","browsers","chrome","safari","firefox","ie","custLocKey","StartDate","EndDate","alertAmount","sendAlerts","executeAndNotify","PrimaryContactKey","AlertAmount","locType","LocationType","Location","custkey","beginDate","BeginDate","customerKey","listAttachmentsCmdParms","ReferenceNumber","DocumentType","ContactKey","documetnList","cust","yb","YearsBack","EdocKey","parameters","Parameters","MimeType","blob","bytes","EdocStream","raw","atob","uint8Array","Uint8Array","charCodeAt","Blob","createBlob","file","createObjectURL","setDatesToNull","cardNumDesc","isActive","isExpired","isPending","isLocked","isCancelled","CardFormatKey","CardNumDesc","IsActive","IsExpired","IsPending","IsLocked","IsCancelled","Department","cardKey","canViewCardNumbers","CardKey","CanViewCardNumbers","compKey","CompanyKey","cardCF","Card","CardCF","getLookupPrices","daysBack","DaysBack","cpPriceNoticeRuleKey","CPPriceRuleKey","City","Zip","Limit","groups","Address1","Address2","County","PostalCode","Email","depts","vals","locale","language","toLocaleString","currency","dateString","_cachedLocalizations","setLocalizations","localizationFilesContainer","innerText","string","getStringFrom","r","doesNotExist","getCachedLocalizationsFor","rp","Array","replaceString","fromCharCode","str","localizationSvcFactory","moduleName","self","$onInit","requestedDeliveryDate","RequestedDeliveryDate","Comment","CustContName","CustContPhone","CustLocAddress","CustLocCity","CustLocDesc","CustLocState","CustLocZip","LangID","OrdDelivNotes","OrdNumber","OrdStatus","OrdType","OrdFuelKey","localCache","Cache","object","expiration","now","inserted","nodeKey","ignoreStatus","IgnoreStatus","siteKey","Unposted","PaperworkBatches","emailAddress","BatchKey","ReadOnly","readonly","forEntry","ForEntry","RefreshLock","customerId","LockType","LockKey","CustomerId","DealerFormsHeader","forViewOnly","vendorKey","deliveryHeader","DeliveryHeader","calculateNet","begin","diff","nMax","profitcenterKey","ProfitCenterKey","netUnits","rtlPrice","checkRetailPrice","checkAveragePrice","showRtlPrice","netAmounts","totalDollar","theVal","pumpTestVal","meterHeaders","PaperworkMeterHeader","getPaperworkReports","getPaperworkReportSites","reportName","ReportName","convertVolumeToSiteUnits","units","siteUOM","tankUOM","getVolume","UnitOfMeasure","MeasurementType","tankChart","TankTypeKey","convertLinearUnits","wholeNumber","decimalNumber","baseAmount","partialAmount","Volume","isMetric","WaterDepth","TmpChartKey","temperature","tempChart","conversionFactor","ConvFactor","qty","wQty","TmpChartUseNetQty","tankHeaders","PaperworkTankHeader","customerPaymentAccountKey","webPaymentAccount","routingNumber","webPaymentKey","WebPaymentKey","accountKey","AccountKey","Scheduled","Canceled","Processed","skipBroadcast","CmdSuccess","lockPaymentsAndInvoices","termsKey","LegalTermKey","getARCustWebSheet","styleSheets","setLandingColor","pcolor","landingClasses","profileClasses","resetStyle","cssOverrideStyle","attribute","classNames","pdiSheet","rules","cssRules","selectorText","ArWebProfile","WebProfileKey","retrieveWebProfileFromAPI","webProfileWithContext","WebProfileWithContext","sCfg","iniializeFromApi","LandingPrimaryColor","Timeout","webProfileKey","messageType","ca","MessageType","WebProfileMessage","retrieveWebProfileMessageFromAPI","includeEvents","nameEmail","IncludeAdds","IncludeChanges","IncludeDeletes","IncludeEvents","NameEmail","MaxRows","renderReportApi","ReportBytes","documentMode","msSaveBlob","Filename","blobUrl","filename","click","href","download","parentNode","removeChild","top","padCharacter","revokeObjectURL","AltEmailAddress","AltExt","AltExt2","AltPhone2Type","AltPhoneType","AltSpdDial","AltSpdDial2","CnSalKey","CPPrcNtcAllProducts","CPPrcNtcChgByDateTime","CPPrcNtcChgByUser","CPPrcNtcSignupDateTime","CPPrcNtcSignupUser","CreatedBy","EmailAddressOrig","Ext","FAXExt","FAXSpdDial","FaxPrefix","Greeting","LastChgBy","Notes","PhoneType","ReceiveMarketingLetters","SpdDial","TextAddressTextMsgDomKey","Title","WebMustChgPwd","WebPWAccessSingleSite","WebPWAccessSiteKey","WebPwd","WebQuestionType","CustomerContactWebAlerts","ConfirmEmail","customerContact"],"mappings":"AAIAA,QAAAC,OAAA,cAAA,CACA,iBACA,mBACA,yBACA,UACA,YACA,cACA,UACA,WACA,SACA,UACA,mBACA,oBACA,mBACA,oBACA,0BACA,WACA,cACA,cACA,cACA,eACA,iBACA,mBACA,UACA,kBACA,eACA,aACA,iBACA,aACA,eACA,gBACA,mBACA,gCACA,mBACA,qBACA,qBACA,qBACA,gBACA,0BACA,kBACA,qBACA,2BACA,0BACA,+BACA,gCACA,4BACA,oBACA,2BACA,wBACA,iCACA,sBACA,qBACA,iBACA,mBACA,qBACA,gBACA,eACA,iBACA,cACA,iC,gFAEA,SAAAC,eAAAC,cAAAC,kBAAAC,kBAIAD,kBAAAE,WAAA,IAEAJ,e,KACA,IACA,CACAK,YAAAF,iBAAAG,YAAA,SACAC,WAAA,YACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0B,KAKA,uCACA,CACAN,YAAA,oEACAE,WAAA,sB,UAGA,CACAF,YAAAF,iBAAAG,YAAA,QACAC,WAAA,WACAC,QAAA,CACAC,aAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,wBAMAV,cAAAW,aAAAC,KAAA,mBACAZ,cAAAW,aAAAC,KAAA,sB,QAKA,kBAAA,CAAA,aAAA,KAAA,YAAA,kBAAA,SAAAC,WAAAC,GAAAC,UAAAN,iBAGA,MAAA,CAEAO,QAAA,SAAAC,QAkBA,OAfAA,OAAAC,QAAAD,OAAAC,SAAA,GAGAL,WAAAM,WAAAN,WAAAM,UAAAC,qBACAH,OAAAC,QAAA,uBAAAL,WAAAM,UAAAE,OACAJ,OAAAC,QAAA,wBAAAL,WAAAM,UAAAG,QACAL,OAAAC,QAAA,yBAAAL,WAAAM,UAAAI,SACAN,OAAAC,QAAA,+BAAAL,WAAAM,UAAAK,mBACAP,OAAAC,QAAA,gCAAAL,WAAAM,UAAAM,oBACAR,OAAAC,QAAA,iCAAAL,WAAAM,UAAAO,sBAIAb,WAAAc,YAAA,EAEAV,QAAAH,GAAAc,KAAAX,SAGAY,SAAA,SAAAA,UAaA,OAVAd,UAAAe,IAAA,SAIAC,gBAAAC,OAAA,IAAA,IAAAnB,WAAAoB,mBAGApB,WAAAc,YAAA,GAGAE,UAAAf,GAAAc,KAAAC,WAIAK,cAAA,SAAAL,UAEA,IAAArB,aAAAC,gBAAAC,gCAAA,mBAqBA,OAlBA,MAFAmB,SAAAM,SAGAN,SAAAO,KAAAC,kBAAAR,SAAAO,KAAAC,iBAAAC,MAAA,2BAEAT,SAAAO,KAAAC,iBAAAC,MAAA,mBACAzB,WAAA0B,SAAAC,KAAA,MAAAhC,aAAAiC,mBAAA,cAAA,YAAAjC,aAAAiC,mBAAA,sBAAA,SAEA5B,WAAA0B,SAAAC,KAAA,MAAAhC,aAAAiC,mBAAA,cAAA,YAAAjC,aAAAiC,mBAAA,yBAAA,UAGAZ,SAAAO,KAAAC,kBAAAR,SAAAO,KAAAC,iBAAAC,MAAA,oBAEAzB,WAAA0B,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,UAKA5B,WAAAc,YAAA,EAEAb,GAAA4B,OAAAb,e,WAOA,YAAA,CAAA,SAAA,QAAA,KAAA,aAAA,iBAAA,aAAA,YAAA,oBAAA,eAAA,UAAA,iBAAA,oBAAA,WAAA,UAAA,cAAA,qBAAA,iBAAA,mBAAA,kBAAA,iBAAA,cAAA,SAAAc,OAAAC,MAAA9B,GAAAD,WAAAgC,eAAAC,WAAAC,UACAC,kBAAAC,mBAAAC,QAAAC,eAAAC,kBAAAC,SAAAC,QAAAC,YACAC,mBAAAC,eAAAC,iBAAAjD,gBAAAkD,eAAAC,0BAIA,IAAApD,aAAAC,gBAAAC,gCAAA,mBACAmD,sBAAApD,gBAAAC,gCAAA,4BA2SA,SAAAoD,cAAAC,KAEAC,OAAAC,KAAAF,IAAAvD,aAAAiC,mBAAA,kBAAA,kGA5SAE,OAAAuB,WAAA,WAEAvB,OAAAwB,QAAAxB,OAAAwB,SAAA,CACAC,QAAA,GACAC,QAAA,GACAC,UAAA,GACAC,UAAA,GACAC,YAAA,EACAC,YAAA,EACAC,WAAA,GACAC,gBAAA,GACAC,OAAA,IAGA/E,QAAAgF,yBAAAhE,WAAAM,aAEAN,WAAAM,UAAA,GACAN,WAAAM,UAAAE,OAAA,GACAR,WAAAM,UAAA2D,SAAA,GACAjE,WAAAM,UAAAG,SAAA,EACAT,WAAAM,UAAAI,SAAA,EACAV,WAAAM,UAAAC,oBAAA,EACAP,WAAAM,UAAAK,mBAAA,GACAX,WAAAM,UAAAM,qBAAA,EACAZ,WAAAM,UAAAO,qBAAA,EACAb,WAAAM,UAAA4D,6BAAAC,IAIA,IAAAjC,UAAAkC,OAAAC,OAAA,sDAEA,GAAAnC,UAAAkC,OAAAE,QAAA,eAGAxC,OAAAyC,sBAGAzC,OAAAwB,QAAAK,iBAAAQ,IAAArC,OAAAwB,QAAAE,cAEAW,IAAAlC,WAAAuC,2BACA1C,OAAA2C,WAKA3C,OAAA4C,uBAAA,WAEA,OAAA1C,eAAA2C,aAGA7C,OAAA2C,OAAA,WAEAzE,WAAA4E,gBAAA,EACA9C,OAAA+C,YACA/C,OAAAgD,KAAA,MAGAhD,OAAA+C,UAAA,WAEA7E,WAAA+E,YAAA,EACA,IAAAC,SAAAC,QAAAC,MAAA,kBACAlG,QAAAgF,yBAAAgB,WACAnC,iBAAAsC,oBAAAH,SAAAI,SAAAJ,SAAAK,SAsBAC,SAAAL,QAAAC,MAAA,mBACAlG,QAAAgF,yBAAAsB,YACA1C,eAAA2C,eAAAD,SAAAE,YAAAF,SAAAG,aAAAH,SAAAI,SACA9C,eAAA+C,eAAAL,SAAAE,YAAAF,SAAAG,aAAAH,SAAAI,SAEAT,QAAAC,MAAA,kBAAA,OAtBAU,WAAA,WACAX,QAAAC,MAAA,iBAAA,MACAD,QAAAC,MAAA,eAAA,MACAD,QAAAC,MAAA,YAAA,MACAD,QAAAC,MAAA,eAAA,MACAD,QAAAC,MAAA,cAAA,MACAlF,WAAAoB,iBAAA,EACApB,WAAAM,UAAA,GACAN,WAAAM,UAAAE,OAAA,GACAR,WAAAM,UAAA2D,SAAA,GACAjE,WAAAM,UAAAuF,YAAA,EACA/D,OAAAgE,aAAA,GACAhE,OAAAwB,QAAA,IACA,IAaAxB,OAAAiE,cAAA5D,kBACAL,OAAAkE,aAAA5D,mBACAN,OAAAgE,aAAA,CACAG,aAAA,EACAC,iBAAA,EACAC,SAAA,GACAC,aAAA,IAIAtE,OAAAuE,YAAA,aAMAvE,OAAAyC,oBAAA,WAEAhC,kBAAAc,aAAAiD,KAAA,SAAA/E,cAeA,IAUAgF,cAvBAzE,OAAAwB,QAAAS,OAAAxC,aAAAiF,cACA1E,OAAAwB,QAAAmD,gBAAAlF,aAAAmF,gBACA5E,OAAAwB,QAAAqD,cAAApF,aAAAoF,cACA7E,OAAAwB,QAAAsD,iBAAArF,aAAAsF,iBACA/E,OAAAwB,QAAAwD,YAAAvF,aAAAwF,QACAjF,OAAAwB,QAAA0D,mBAAAzF,aAAA0F,mBAEAnF,OAAAwB,QAAAK,aAEA7B,OAAAwB,QAAA4D,iBAAA3F,aAAA2F,iBACApF,OAAAwB,QAAAQ,gBAAAvC,aAAA4F,oBAGA,SAAArF,OAAAwB,QAAAS,OAAAqD,oBAAAtF,OAAAwB,QAAAS,OAAAsD,mBAAAC,YAEA,MAAAxF,OAAAwB,QAAAS,OAAAsD,mBAAAE,UAAA,EAAA,KAEAC,cAAAC,SAAAC,cAAA,WACAC,aAAA,qDAAA7F,OAAAwB,QAAAS,OAAAsD,sBACAG,cAAAI,MAAA,OACAH,SAAAI,KAAAC,YAAAN,eAEAO,aAAAN,SAAAC,cAAA,UACAnB,cAAAkB,SAAAO,0JAAAlG,OAAAwB,QAAAS,OAAAsD,yBACAU,aAAAD,YAAAvB,eACAkB,SAAAI,KAAAC,YAAAC,eAEAE,GAAA,SAAAnG,OAAAwB,QAAAS,OAAAsD,mBAAA,YAMAvF,OAAAoG,gCAAA,WAEA3F,kBAAA4F,yBAAA7B,KAAA,SAAA/E,MAEAO,OAAAwB,QAAAS,OAAAxC,KAAAiF,cACA1E,OAAAwB,QAAAmD,gBAAAlF,KAAAmF,gBACA5E,OAAAwB,QAAAsD,iBAAArF,KAAAsF,iBACA/E,OAAAwB,QAAAwD,YAAAvF,KAAAwF,QACAjF,OAAAwB,QAAA0D,mBAAAzF,KAAA0F,mBACAnF,OAAAwB,QAAAK,aAEA7B,OAAAwB,QAAA4D,iBAAA3F,KAAA2F,iBACApF,OAAAwB,QAAAQ,gBAAAvC,KAAA4F,uBAMArF,OAAAsG,qBAAA,WACAtG,OAAAwB,QAAAE,QAAAvB,WAAAoG,aACArJ,QAAAgF,yBAAAlC,OAAAwB,QAAAE,WACAxE,QAAAgF,yBAAAlC,OAAAwB,QAAAE,QAAA8E,qBACAxG,OAAAwB,QAAAC,QAAAzB,OAAAwB,QAAAE,QAAA8E,kBACAxG,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAE,QAAA8E,kBAAAC,IACAhG,kBAAAiG,gBAAA1G,OAAAwB,QAAAE,QAAA8E,kBAAAG,eAGAzJ,QAAAgF,yBAAAlC,OAAAwB,QAAAoF,sBACA5G,OAAAwB,QAAAoF,mBAAAzG,WAAA0G,2BACA3J,QAAAgF,yBAAAlC,OAAAwB,QAAAoF,sBACA5G,OAAAwB,QAAAE,QAAAoF,qBAAA9G,OAAAwB,QAAAE,QAAAqF,kBAAA/G,OAAAwB,QAAAoF,qBAEA5G,OAAAwB,QAAAQ,gBAAAhC,OAAAwB,QAAAE,QAAAsF,oBACAhH,OAAAwB,QAAAK,YAAA,IAIA7B,OAAAiH,uBAAA,YACA/J,QAAAgF,yBAAAlC,OAAAwB,QAAAE,UACAxE,QAAAgF,yBAAAlC,OAAAwB,QAAAE,QAAA8E,oBACAtJ,QAAAgF,yBAAAlC,OAAAwB,QAAAE,QAAAoF,wBACA9G,OAAAsG,wBAIAtG,OAAAkH,WAAA,SAAAC,MAAAC,UAEApH,OAAAgE,aAAAM,aAAA+C,WAAA3G,SAAA,WAEAV,OAAAgE,aAAAM,aAAAgD,QAAAH,MACAnH,OAAAgE,aAAAM,aAAA+C,gBAAAhF,GACA,IAGArC,OAAAuH,cAAA,SAAAzF,YAEA9B,OAAAwB,QAAAM,WAAAA,WACArB,kBAAA8G,cAAAzF,YAAA0C,KAAA,SAAA/E,MAEAO,OAAAwB,QAAAC,QAAAhC,KAAA+H,cAIAxH,OAAAyH,uBAAA,WAEAhH,kBAAAgH,yBAAAjD,KAAA,SAAA/E,UAMAO,OAAA0H,4BAAA,SAAAP,MAAAQ,SAIA,GAFA3H,OAAAiH,0BAEAU,QACA,CACA,IAAA3H,OAAAwB,QAAAE,QAAA,OAAA,EACA,IAAA1B,OAAAwB,QAAAE,QAAAoF,qBAAA,OAAA,EACAa,QAAA3H,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAGA,IADA,IAAA1D,aAAAyD,QAAAE,4BACAC,EAAA,EAAAA,EAAAX,MAAA9H,OAAAyI,IAIA,IAFA,IAAAC,gBAAA/H,OAAAgI,4BAAAb,MAAAW,IAEAG,EAAA,EAAAA,EAAA/D,aAAA7E,OAAA4I,IAGA,GAAA/D,aAAA+D,GAAAC,WAAAf,MAAAW,IACAC,iBAAA7D,aAAA+D,GAAAE,SACA,OAAA,EAEA,OAAA,GAGAnI,OAAAoI,2BAAA,SAAAjB,MAAAQ,SAIA,GAFA3H,OAAAiH,0BAEAU,QACA,CACA,IAAA3H,OAAAwB,QAAAE,QAAA,OAAA,EACA,IAAA1B,OAAAwB,QAAAE,QAAAoF,qBAAA,OAAA,EACAa,QAAA3H,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAIA,IAAA5H,OAAAgI,4BAAAb,OACA,OAAA,EAEA,GAAAQ,QAAAU,gBAAA,OAAA,EAGA,IADA,IAAAnE,aAAAyD,QAAAE,4BACAI,EAAA,EAAAA,EAAA/D,aAAA7E,OAAA4I,IACA,GAAA/D,aAAA+D,GAAAC,WAAAf,MAEA,OAAAjD,aAAA+D,GAAAE,SAEA,OAAA,GAGAnI,OAAAgI,4BAAA,SAAAb,OAEA,IAAAmB,gBAAAtI,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SACAC,WAAA,IAAAF,gBAAAG,iBACAC,WAAA,IAAAJ,gBAAAK,iBACAC,SAAA,IAAAN,gBAAAO,eACAC,YAAA,IAAAR,gBAAAS,kBACAC,SAAA,OAAAV,gBAAAW,iBAAA,IAAAX,gBAAAW,gBAGA,OAAApI,mBAAAqI,wBAAA/B,MAAAqB,WAAAE,WAAAE,SAAAE,YAAAE,SAAAV,kBAGAtI,OAAAmJ,gBAAA,SAAAC,KAAAC,IAAAC,MAAA/F,SAUAtC,YAAAsI,kBAAAC,KAAAC,UARA,CACAC,eAAA,EACAC,KAAAP,KACA3C,IAAA4C,IACAO,MAAAN,MACA1F,QAAAL,W,KAIA,SAAAsG,KACAzI,IAAAH,YAAA6I,UAAAD,KACAxI,OAAAC,KAAAF,IAAA,SAAA,8DASApB,OAAA+J,SAAA,SAAAC,SAEA/I,YAAAgJ,WAAAD,S,KACA,SAAAH,MACA1I,cAAAF,YAAA6I,UAAAD,UAIA7J,OAAAkK,cAAA,SAAAF,QAAAG,eAEAA,eAAA,EAAAA,cAAA9K,OAKAuB,YAAAwJ,QAHA,kBAAAJ,QACA,iBAAAG,eAEA3F,KAAA,SAAA/E,MAGA0B,cADA,gCAAAkJ,mBAAA5K,MAAA,MAAA4K,mBAAAnK,eAAA2C,gBAKA7C,OAAA+J,SAAAC,UAGAhK,OAAAsK,eAAA,SAAAC,gBAGApJ,cADA,wBAAAoJ,eAAA,MAAAF,mBAAAnK,eAAA2C,eAIA7C,OAAAwK,qBAAA,SAAAC,YAEA,IAAA3I,WAAA9B,OAAAwB,SAAAxB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAM,WAAA,EAEArB,kBAAA+J,qBAAA1I,WAAA2I,YAAAjG,KAAA,SAAA/E,MAEAO,OAAAwB,QAAAO,WAAAtC,QAKAO,OAAAwK,qBAAA,GAEAxK,OAAA0K,IAAA,uBAAA,SAAAC,MAAAC,KAAAC,UAEA,EAAAzK,UAAAkC,OAAAC,OAAA,yEAGArF,QAAAgF,yBAAAlC,OAAAwB,UACAtE,QAAAgF,yBAAA/B,WAAAuC,6BACA1C,OAAAgD,KAAA,KAGAhD,OAAAiH,yBAEA2D,MAAAC,SAAA7K,OAAAwB,QAAAE,SAEAkJ,KAAApI,QAAA,wBAAA,GACAoI,KAAApI,QAAA,gBAAA,GACAqI,SAAA,GAAAA,QAAArI,QAAA,gBACA1B,eAAA2C,eAAAzD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SACA9C,eAAA+C,eAAA7D,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SACAT,QAAAC,MAAA,kBAAA,UAIApD,OAAA0K,IAAA,oBAAA,SAAAC,MAAAE,QAAAC,SAAAC,WAMA,wCAJAA,WAKA/K,OAAAgD,KAAA,UACAhD,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,UAKAE,OAAAJ,SAAAC,KAAA,eAAA,WAIAG,OAAAgL,cAAA,SAAAC,MAAAC,UAEA,GAAA,iBAAA,QAAAD,MAAAzF,UAAA,CAEA,IAAA2F,QAAA3K,eAAA4K,iBACAC,OAAA,IAAAC,KAcA,MAbA,kBAAAC,OAAAC,UAAAC,SAAAC,KAAAT,QAEAA,MAAAA,MAAAU,OAAA,EAAA,IACAN,OAAA,IAAAC,KAAAA,KAAAM,MAAAX,MAAAY,QAAA,KAAA,KAAAA,QAAA,KAAA,OACAC,MAAAT,OAAAU,aAEAV,OAAA,IAAAC,OAIAD,OAAAJ,MAGA,OAAAE,SAAAD,SAEAG,OAAAW,cAAA,KAAA,KAAAX,OAAAY,WAAA,IAAAC,OAAA,GAAA,KAAA,IAAAb,OAAAc,WAAAD,OAAA,IADA,KAAAb,OAAAY,WAAA,IAAAC,OAAA,GAAA,KAAA,IAAAb,OAAAc,WAAAD,OAAA,GAAA,IAAAb,OAAAW,gBAIAhM,OAAAoM,WAAA,SAAAnB,OAEA,OAAAtK,QAAA,OAAAA,CAAAsK,MAAA,eAGAjL,OAAAqM,eAAA,SAAApB,OAEA,OAAAtK,QAAA,OAAAA,CAAAsK,MAAA,uBAGAjL,OAAAsM,cAAA,SAAAC,OAAAC,MAEAC,OAAA,IAAAnB,KAAAiB,QAEA,OADAE,OAAAC,QAAAD,OAAAN,UAAAK,MACAC,QAGAE,mBAAAzO,WAAAwM,IAAA,gBAAA,SAAAC,MAAAlL,MAEAO,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WAEAL,KAAAmN,UAAAC,aAEA3P,QAAA4P,QAAArN,KAAAmN,UAAAG,SAAA,SAAAC,MAEAhN,OAAAJ,SAAAC,KAAAmN,KAAA,eAKAhN,OAAA0K,IAAA,WAAAiC,oBAEAM,mBAAA/O,WAAAwM,IAAA,eAAA,SAAAC,MAAAlL,MAEA,IAGAyN,kBAHAzN,KAAAmN,UAAAO,YAGAD,kBAAArP,aAAAiC,mBAAA,oBAEA5C,QAAA4P,QAAArN,KAAAmN,UAAAQ,OAAA,SAAAJ,OAEAA,OAAAE,kBACAlN,OAAAqN,cAGArN,OAAAJ,UAHAC,KAAAmN,KAAA,YAOAvN,KAAAmN,UAAAC,aAEA3P,QAAA4P,QAAArN,KAAAmN,UAAAG,SAAA,SAAAC,MAEAhN,OAAAJ,SAAAC,KAAAmN,KAAA,eAKAhN,OAAA0K,IAAA,WAAAuC,oBAEAK,mBAAApP,WAAAwM,IAAA,cAAA,SAAA6C,IAAA9N,QACA+N,OAAA,CAAA9N,iBAAAD,OAAAmN,UAAAlN,iBAAA+N,WAAAhO,OAAAmN,UAAAc,YAEA1M,eAAA2M,UAAAH,QAAAhJ,KAAA,SAAA/E,MACAmO,QAAAC,IAAA,iEAIA7N,OAAA0K,IAAA,WAAA4C,oBAEAtN,OAAAgD,KAAA,SAAAV,MAEAlC,UAAAkC,KAAAA,OAGAtC,OAAA8N,gBAAA,SAAAC,QAEAjK,WAAA,WAEA9D,OAAAgO,OAAA,WAEAC,EAAAF,QAAAG,WAEA,MAGAlO,OAAAmO,gBAAA,WAEA,OAAAnO,OAAAwB,QAAAE,QAAA8E,kBAAA4H,oBACA,MAAApO,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA8F,YACA,EAAArO,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,sBACAvO,OAAAoI,2BAAApI,OAAAkE,aAAAsK,+BACAxO,OAAAoI,2BAAApI,OAAAkE,aAAAuK,wBAAA,EAAAzO,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAI,qBAGA1O,OAAA2O,YAAA,SAAAC,MAEA9K,WAAA,WAEA9D,OAAAgO,OAAAY,SACA,IAGA5O,OAAA6O,gBAAA,SAAAC,MAEApO,SAAA,WAEAoO,KAAAC,eACAd,EAAA,YAAAe,YAAA,WACAf,EAAA,iBAAAe,YAAA,iBACA,IAGAhP,OAAAiP,gBAAA,SAAAC,KAAAC,MAAAC,aAEAC,YAAApB,EAAA5M,QAAAiO,cAAAF,YAGAC,YAFA,GAAAF,MAIAD,KAAAK,WAAA,CACAC,OAAAH,YACAI,YAAA,IAKAP,KAAAK,WAAA,CACAC,OAAA,UACAC,YAAA,KAKAzP,OAAA0P,uBAAA,WACA1P,OAAA2P,aAAA,CACAC,iBAAA,EACAC,UAAA,EACAC,UAAA,GACAC,SAAA,WACAC,SAAA,WACAC,QAAA,GACAC,OAAA,WACAC,OAAA,WACAC,UAAA,EACAC,aAAA,GACAC,QAAA,CACA,CAAAC,KAAArP,sBAAApB,mBAAA,SAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,cAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,iBAAAqH,MAAA,GACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,kBAAAqH,MAAA,IACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,eAAAqH,MAAA,IACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,cAAAqH,MAAA,IACA,CAAAoJ,KAAArP,sBAAApB,mBAAA,WAAAqH,MAAA,KAEAqJ,OAAA,EACAC,kBAAA,EACAC,aAAA,EACAC,UAAA,GAGA3Q,OAAA4Q,yBAAA,GAGA5Q,OAAA0K,IAAA,qBAAA,WACAhK,SAAA,WAGA,IACAmQ,0BADA7Q,OAAA8Q,+BACAD,0BAAA7Q,OAAA+Q,OAAA9C,EAAA,uCAAAvN,SAAA,WACAmQ,4BACA/S,gBAAAkT,yBACAhR,OAAA8Q,8BAAA,IACA,GAAA,IAKA9Q,OAAA4Q,yBACA5Q,OAAA0P,yBAGA1P,OAAAiR,WAAA,CACAC,SAAA,EACAC,MAAA,GACAC,KAAA,GACAC,aAAA,EACAC,YAAAzT,aAAAiC,mBAAA,SACAyR,cAAA1T,aAAAiC,mBAAA,OACAD,KAAA,SAAAsR,MAAAC,MAEApR,OAAAiR,WAAAE,MAAAA,MACAnR,OAAAiR,WAAAG,KAAAA,KACApR,OAAAiR,WAAAI,aAAA,EACArR,OAAAiR,WAAAC,SAAA,GAEAM,KAAA,WAEAxR,OAAAiR,WAAAC,SAAA,GAEAO,eAAA,WAEAzR,OAAAiR,WAAAE,MAAAtT,aAAAiC,mBAAA,kBACAE,OAAAiR,WAAAG,KAAAvT,aAAAiC,mBAAA,sBAAA,QACAjC,aAAAiC,mBAAA,iBACAE,OAAAiR,WAAAI,aAAA,EACArR,OAAAiR,WAAAC,SAAA,GAEAQ,eAAA,WACA1R,OAAAiR,WAAAE,MAAAtT,aAAAiC,mBAAA,kBACAE,OAAAiR,WAAAG,KAAAvT,aAAAiC,mBAAA,yBAAA,QACAjC,aAAAiC,mBAAA,wBACAE,OAAAiR,WAAAI,aAAA,EACArR,OAAAiR,WAAAC,SAAA,GAEAS,cAAA,SAAAC,MAEA5R,OAAAiR,WAAAE,MAAAS,KACA5R,OAAAiR,WAAAG,KAAAvT,aAAAiC,mBAAA,qBACAE,OAAAiR,WAAAI,aAAA,EACArR,OAAAiR,WAAAC,SAAA,GAEAW,QAAA,SAAAT,KAAAU,MAAAC,KAAAZ,OAEAnR,OAAAiR,WAAAE,MAAAA,OAAAtT,aAAAiC,mBAAA,WACAE,OAAAiR,WAAAK,YAAAzT,aAAAiC,mBAAA,MACAE,OAAAiR,WAAAM,cAAA1T,aAAAiC,mBAAA,OACAE,OAAAiR,WAAAG,KAAAA,KACApR,OAAAiR,WAAAe,WAAA,WAEAhS,OAAAiR,WAAAC,SAAA,EACAhU,QAAA+U,YAAAH,QACAA,SAEA9R,OAAAiR,WAAAiB,UAAA,WAEAlS,OAAAiR,WAAAC,SAAA,EACAhU,QAAA+U,YAAAF,OACAA,QAEA/R,OAAAiR,WAAAI,aAAA,EACArR,OAAAiR,WAAAC,SAAA,GAEAgB,UAAA,KACAF,WAAA,OAEA,Q,UAGA,eAAA,CAAA,WACA,MAAA,CACAG,SAAA,IACAC,QAAA,UACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA7U,YACAA,WAAA8U,YAAAxU,KAAA,SAAAyU,YACA,OAAAC,OAAAD,cAEA/U,WAAAiV,SAAA3U,KAAA,SAAA4U,WACA,MAAA,GAAAA,iBC91BA,IAAAC,uBAAA,SAAAP,QAAAQ,MAEA,OAAA9E,EAAA,IAAAsE,SAAA,GAAAS,WAAAC,aAAAF,MAAA5L,OAGAjK,QAAAC,OAAA,iBAAA,CAAA,iB,sCACA,SAAA+V,SAAA3V,kBACA2V,SAAAC,SAAA,YAAA5V,qB,WAEA,mBAAA,CAAA,SAAA,SAAAyC,Y,UAIA,eAAA,CAAA,YAAA,SAAAoT,WAEA,MAAA,CACAjB,SAAA,IACAG,OAAA,EACA3U,WAAA,CAAA,SAAA,aAAA,UAAA,kBAAA,SAAAqC,OAAA9B,WAAAyC,QAAA7C,iBAEA,IAAAD,aAAAC,gBAAAC,gCAAA,4BACAiC,OAAAqT,iBAAA,WAGArT,OAAA2P,eACA3P,OAAA2P,aAAA,IAIA3P,OAAA2P,aAAAW,QAAA,IACA,IAAAtQ,OAAA2P,aAAAe,aACA1Q,OAAA2P,aAAAW,QAAArS,KACA,CAAAsS,KAAA1S,aAAAiC,mBAAA,WAAAqH,MAAA,KAEAnH,OAAA2P,aAAAW,QAAArS,KACA,CAAAsS,KAAA1S,aAAAiC,mBAAA,SAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,cAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,iBAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,kBAAAqH,MAAA,IACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,eAAAqH,MAAA,IACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,cAAAqH,MAAA,KAEAnH,OAAA2P,aAAAI,SAAA,WACA/P,OAAA2P,aAAAK,SAAA,WACAhQ,OAAA2P,aAAAO,OAAA,WACAlQ,OAAA2P,aAAAQ,OAAA,WACAnQ,OAAA2P,aAAAgB,UAAA,EACA3Q,OAAA2P,aAAAe,aAAA,EAGA1Q,OAAA2P,aAAAc,iBACAzQ,OAAA2P,aAAAc,kBAAA,GAIAzQ,OAAA2P,aAAAC,iBAAA,EACA5P,OAAA2P,aAAAE,UAAA,EACA7P,OAAA2P,aAAAG,UAAA,GACA9P,OAAA2P,aAAAM,QAAA,GACAjQ,OAAA2P,aAAAS,UAAA,EACApQ,OAAA2P,aAAAU,aAAA,GACArQ,OAAA2P,aAAAa,OAAA,GAEAxQ,OAAAsT,YAGAtT,OAAAuT,wBAAA,WAEAvT,OAAA2P,aAAAa,MAAAlF,KAAAM,MAAA5L,OAAA2P,aAAAG,YAAAxE,KAAAM,MAAA5L,OAAA2P,aAAAM,SACAjQ,OAAA2P,aAAAa,OAGAxQ,OAAAJ,SAAAC,KAAAiT,uBAAA,uBAAA,oCAAA,UAIA9S,OAAAsT,SAAA,WAEA,IAAAE,MAAA,IAAAlI,KACAmI,MAAA,IAAAnI,MAAAU,cAEA0H,OAAA,IAAApI,MAAAW,WACAM,MAAA,IAAAjB,MAAAa,UACAK,MAAA,IAAAlB,MAAAqI,SAEA,OAAAC,SAAA5T,OAAA2P,aAAAE,UAAA,K,KAEA,E,KACA,GACA7P,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA6S,MAAA,cACAxT,OAAA2P,aAAAM,QAAAjQ,OAAA2P,aAAAG,UACA,M,KACA,EACA9P,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAA,GAAA,cACAvM,OAAA2P,aAAAM,QAAAjQ,OAAA2P,aAAAG,UACA,M,KACA,EACA9P,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAA,GAAA,cACAvM,OAAA2P,aAAAM,QAAAjQ,OAAA2P,aAAAG,UACA,M,KACA,EACA9P,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAAC,MAAA,cACAxM,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAAC,KAAA,GAAA,cACA,M,KACA,EACAxM,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAA,GAAA,cACA1T,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAA,EAAA,GAAA,cACA,M,KACA,EACA1T,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAA,EAAA,GAAA,cACAzT,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAA,GAAA,IAAA,cACA,M,KACA,EACAzT,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAAC,KAAA,GAAA,cACAxM,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAAC,KAAA,GAAA,cACA,M,KACA,EACAxM,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAA,EAAA,GAAA,cACA1T,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAA,GAAA,cACA,M,KACA,EACA1T,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAA,EAAA,EAAA,GAAA,cACAzT,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAA,EAAA,GAAA,IAAA,cACA,M,KACA,E,KACA,GACAzT,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAA,GAAA,cACAvM,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAA,cACA,M,KACA,GACAtL,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAA,IAAA,cACAvM,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAA,cACA,M,KACA,GACAtL,OAAA2P,aAAAS,UAAApQ,OAAA2P,aAAAS,UAAApQ,OAAA2P,aAAAU,aAAArQ,OAAA2P,aAAAU,aAAArQ,OAAA2P,aAAAS,UACApQ,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAAmI,KAAAC,MAAAnH,KAAAvM,OAAA2P,aAAAS,UAAA,GAAA,cACApQ,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAA,cACA,M,KACA,GACAtL,OAAA2P,aAAAG,UAAAnP,QAAA,OAAAA,CAAA,IAAA2K,KAAA,KAAA,EAAA,GAAA,cACAtL,OAAA2P,aAAAM,QAAAtP,QAAA,OAAAA,CAAA,IAAA2K,KAAA,KAAA,EAAA,GAAA,kBASA7N,YAAA2V,UAAA1V,YAAA,oBC9JAR,QAAAC,OAAA,cAAA,CAAA,aAAA,eAAA,oBAAA,oB,WACA,YAAA,CAAA,SAAA,YAAA,kBAAA,SAAA6C,OAAA6T,UAAA/V,iBAEA,IAAAD,aAAAC,gBAAAC,gCAAA,mBACA,SAAA+V,QAAAC,GAAAC,GAAAC,GAEAC,KAAAC,iBAAAJ,IAAA,EACAG,KAAAE,YAAAJ,IAAA,GACAE,KAAAG,iBAAAJ,GAAA,GACAC,KAAAI,mBAAAtU,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAnB,KAAA,EAGAzG,OAAAwB,QAAA+S,oBAAA,EAEAvU,OAAA+Q,OAAA,6BAAA,WAEA/Q,OAAAwB,QAAA+S,qBAEAvU,OAAAwU,QAAA,IAAAV,QAAA9T,OAAAyU,gBAAA,GAAAzU,OAAAyU,gBAAA,GAAAhO,IAAA,IACAzG,OAAAwK,qBAAA,MAIAxK,OAAAuB,WAAA,WAEAvB,OAAAyU,gBAAA,GACAzU,OAAA0U,cAAA,EAEAb,UAAAc,uBAAAnQ,KAAA,SAAA/E,MAEAO,OAAAyU,gBAAAhV,KAAAgV,mBAIAzU,OAAA4U,QAAAC,YAAA,YAkBA,WAEA,IAAArE,OAAA,EAEA,EAAAxQ,OAAAyU,gBAAApV,QAAAW,OAAAwU,QAAAL,iBAAAW,WAAA,IAEAtE,OAAA,GAGAxQ,OAAAyU,gBAAApV,QAAA,GAAAW,OAAAwU,QAAAJ,YAAA5O,YAEAgL,OAAA,GAGAxQ,OAAAwU,QAAAH,iBAAA7O,YAEAgL,OAAA,GAIA,OADAxQ,OAAA0U,cAAAlE,MACAA,MApCAuE,IAGAlB,UAAAmB,YAAAhV,OAAAwU,SAAAhQ,KACA,SAAA/E,MAEAA,KAAAwV,aAEAjV,OAAAwB,QAAA+S,oBAAA,EACAvU,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,eAAA,YAGAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,kBAAA,eChDA5C,QAAAC,OAAA,cAAA,CAAA,aAAA,eAAA,oBAAA,oB,4CACA,SAAAC,eAAAG,kBAEAH,eAAA6B,KAAA,oBACA,CACAxB,YAAAF,iBAAAG,YAAA,OACAC,WAAA,iB,KAGA,yBACA,CACAF,YAAAF,iBAAAG,YAAA,OACAC,WAAA,iB,KAGA,0BACA,CACAF,YAAAF,iBAAAG,YAAA,OACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,iC,WAMA,uBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,gBAAA,UAAA,SAAAiC,OAAAC,MAAA9B,GAAA+W,aAAAC,cAAAxU,sBAGAX,OAAAuB,WAAA,WAEA,IAeA8C,SAfArE,OAAAgE,aAAAM,aAAAgD,SAAA,IAAAtH,OAAAgE,aAAAM,aAAAgD,QAAAjI,UAEA+V,SAAAzU,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAC,WAAA,CAAAC,KAAAL,aAAAM,SAAA,MAGAxV,OAAAgE,aAAAG,aAAAiR,SAAA3O,MAEAa,SAAA3G,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAI,QAAA,CACAC,UAAA1V,OAAAgE,aAAAG,aACAoR,KAAAL,aAAAS,MACA,MAGA3V,OAAAgE,aAAAI,gBAAAkD,SAAAb,MAEApC,SAAA1D,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAO,SAAA,CACAF,UAAA1V,OAAAgE,aAAAI,gBACAmR,KAAAL,aAAAW,OACA,MAGA7V,OAAAgE,aAAAM,aAAAgD,QAAAjD,SAAAoC,OAKAzG,OAAA8V,oBAAA,SAAAC,KAEA/V,OAAAgE,aAAAM,aAAAgD,QAAAyO,Q,WAGA,eAAA,CAAA,SAAA,QAAA,KAAA,eAAA,gBAAA,UAAA,YAAA,SAAA/V,OAAAC,MAAA9B,GAAA+W,aAAAC,cAAAxU,QAAAyS,wBAGApT,OAAAgE,aAAAgS,WAAA,GACAhW,OAAAgE,aAAAiS,cAAA,GACAjW,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAK,SAAA,GACArE,OAAAgE,aAAAkS,SAAAhB,aAAAM,OACAxV,OAAAgE,aAAAmS,YAAAjB,aAAAS,IACA,IAAArO,SAAA,GACAtH,OAAAgE,aAAAmS,aAUA7O,SAAA3G,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAI,QAAA,CACAC,UAAA1V,OAAAgE,aAAAG,aACAoR,KAAAvV,OAAAgE,aAAAmS,cACA,MAGAnW,OAAAgE,aAAAI,gBAAAkD,SAAAb,MAdAa,SAAA3G,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAI,QAAA,CAAAC,UAAA1V,OAAAgE,aAAAG,eAAA,MAGAnE,OAAAgE,aAAAmS,YAAA7O,SAAAiO,KACAvV,OAAAgE,aAAAI,gBAAAkD,SAAAb,KAcAzG,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,oBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,SAAA,IAAAtH,OAAAgE,aAAAM,aAAAgD,QAAAjI,UAEAgF,SAAA1D,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAO,SAAA,CAAAF,UAAA1V,OAAAgE,aAAAI,kBAAA,KAGApE,OAAAgD,KAAA,gCAGAqB,WAEArE,OAAAgE,aAAAM,aAAAgD,QAAAjD,SAAAoC,IACAzG,OAAAgD,KAAA,QAAAkS,aAAAM,OAAA,IAAAxV,OAAAgE,aAAAmS,YAAA,IAAA9R,SAAAkR,QAIAvV,OAAAuQ,KAAA,e,WAGA,mBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,gBAAA,UAAA,kBAAA,YAAA,eAAA,SAAAvQ,OAAAC,MAAA9B,GAAA+W,aAAAC,cAAAxU,QAAAyV,gBAAAhD,UAAAvV,2BAoFA,SAAAwY,aAAAC,IAAAC,KAAAC,MAAAC,IAAAlT,QAAAmT,QAAAC,SAEAP,gBAAAQ,cAAAN,IAAAC,KAAAC,MAAAC,IAAAlT,QAAAmT,QAAAC,SAAAnS,KAAA,SAAA/E,MAEA,IAAAA,KAAAJ,QAMAnC,QAAA4P,QAAArN,KAAA,SAAA8S,SAEAA,QAAAsE,iBAAA,wBAAAtE,QAAAuE,QAAA,KAAAnW,QAAA,OAAAA,CAAA4R,QAAAuE,QAAA,gBAGA9W,OAAA+W,MAAAC,kBAAAvX,OATAO,OAAAiR,WAAAU,cAAA3R,OAAAgE,aAAAiT,UAAA1G,QAtFAvQ,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAG,cAAA,GACAlX,OAAA+W,MAAAI,qBAAA,CACAC,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAArD,KAAAqD,SAAArD,KAAAsD,SAAA,IACAD,SAAAE,MAMAzX,OAAAsK,eAAAiN,SAAAE,MAEAzX,OAAAgO,UANAhO,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,aAAAjC,aAAAiC,mBAAA,8BAQA4X,QAAA,CACA,CACAC,MAAA,mBACAxG,MAAAtT,aAAAiC,mBAAA,iBACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,QACAxG,MAAAtT,aAAAiC,mBAAA,eACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAC,kBAAA,SAAA4B,IAEA5Y,OAAA+W,MAAA8B,gBAAA,IAAA9B,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,KAGA5Y,OAAA+W,MAAA8B,gBAAAC,OACA9Y,OAAA+W,MAAAG,cAAAiB,WAAA1Y,KAAAO,OAAA+W,MAAA8B,gBAAApZ,SAsBAO,OAAAuB,WAAA,WAEAvB,OAAAiH,yBAGA,IAAAjH,OAAAgE,aAAAG,cAEAnE,OAAAgD,KAAA,gCAGAhD,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,oBAEAsC,OAAAgE,aAAAkS,SAAAhB,aAAAM,OACAxV,OAAAgE,aAAAmS,YAAAjB,aAAAS,IACA3V,OAAAgE,aAAAiT,YAAAjX,OAAAgE,aAAAiT,UAAA,IACAjX,OAAAgE,aAAAiT,UAAA8B,QAAA,IAAAzN,KAAA,KAAA,EAAA,GACAtL,OAAAgE,aAAAiT,UAAA1G,KAAA2E,aAAAW,KAGA,IAAAmD,SAAAhZ,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAO,SAAAqD,KAAA,CAAA1D,KAAAvV,OAAAgE,aAAAiT,UAAA1G,OACAyI,UAAA,IAAAA,SAAAE,YAEA7C,aACA,GACA,GACA,aACA,aACArW,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAhE,QACAoV,SAAAG,UACAnZ,OAAAwB,QAAAE,QAAAoF,qBAAApD,cAMA1D,OAAA4U,QAAArQ,YAAA,SAAA6U,cAEA/C,aAAArW,OAAAgE,aAAAM,aAAA2S,UAAAoC,gBACArZ,OAAAgE,aAAAM,aAAA2S,UAAAqC,YACAtZ,OAAA2P,aAAAG,UACA9P,OAAA2P,aAAAM,QACAjQ,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAhE,QACAwV,aACApZ,OAAAwB,QAAAE,QAAAoF,qBAAApD,iB,WAIA,sBAAA,CAAA,SAAA,SAAA1D,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAA2S,YAAAjX,OAAAgE,aAAAM,aAAA2S,UAAA,IACAjX,OAAAgE,aAAAM,aAAA2S,UAAAoC,gBAAA,GACArZ,OAAAgE,aAAAM,aAAA2S,UAAAqC,YAAA,OChRApc,QAAAC,OAAA,WAAA,CAAA,e,WACA,iBAAA,CAAA,SAAA,aAAA,aAAA,UAAA,WAAA,iBAAA,SAAA6C,OAAA9B,WAAAiC,WAAAQ,QAAAD,SAAAI,6BAGAd,OAAAuZ,cAAA,EACAvZ,OAAAwZ,aAAA,EACAxZ,OAAAgE,aAAAG,aAAAnE,OAAAgE,aAAAG,cAAA,EACAnE,OAAAgE,aAAAI,gBAAApE,OAAAgE,aAAAI,kBAAA,EAEApE,OAAAyZ,gBAAA,SAAAtV,cAEAnE,OAAAgE,aAAAG,aAAAA,aACAnE,OAAAgE,aAAAI,iBAAA,GAEApE,OAAA0Z,mBAAA,SAAAtV,iBAEApE,OAAAgE,aAAAI,gBAAAA,iBAEApE,OAAA2Z,sBAAA,SAAAC,eAGA,OADA5Z,OAAAiH,2BACAjH,OAAAwB,QAAAE,YACA1B,OAAAwB,QAAAE,QAAAoF,yBACA9G,OAAAwB,QAAAE,QAAAoF,sBAEA9G,OAAA0H,4BAAAkS,kBAIA5Z,OAAA6Z,2BAAA,SAAAC,OAEA,IAAAC,cAAA/Z,OAAAwB,QAAAoF,mBACA,IAAAoT,sBAAAha,OAAAwB,QAAAE,QAAAqF,kBAAAgT,eACA/Z,OAAAwB,QAAAoF,mBAAAkT,MACA3W,QAAAC,MAAA,cAAApD,OAAAwB,QAAAoF,oBACA5G,OAAAuZ,cAAA,EAEApZ,WAAA8Z,wBAAAja,OAAAwB,QAAAE,QAAAwY,GAAAla,OAAAwB,QAAAM,YAAA0C,KAAA,SAAA/E,MAEA0D,QAAAC,MAAA,eAAApD,OAAAwB,QAAAM,YACA9B,OAAAsG,uBACAxF,eAAA2C,eAAAuW,sBAAAtW,YACAsW,sBAAApS,gBAAAjE,aACAqW,sBAAApW,SACA9C,eAAA+C,eAAAmW,sBAAAtW,YACAsW,sBAAApS,gBAAAjE,aACAqW,sBAAApW,SACAT,QAAAC,MAAA,kBAAA,MACApD,OAAAwB,QAAAE,QAAAoF,qBAAA9G,OAAAwB,QAAAE,QAAAqF,kBAAA/G,OAAAwB,QAAAoF,oBACA1I,WAAAic,WAAA,sBAAA,IACAna,OAAAgD,KAAA,YAIAhD,OAAAoa,gBAAA,WAEApa,OAAAwZ,aAAA,EACAxZ,OAAAuZ,cAAAvZ,OAAAuZ,cAGAvZ,OAAAqa,SAAA,WAEAra,OAAAwZ,aAAA,EACAxZ,OAAAgD,KAAA,iCAGAhD,OAAAsa,eAAA,WAEAta,OAAAwZ,aAAA,EACAxZ,OAAAgD,KAAA,mCAGAhD,OAAAua,gBAAA,WAEAva,OAAAuZ,cAAA,EACAvZ,OAAAwZ,aAAAxZ,OAAAwZ,aAGAxZ,OAAAwa,YAAA,GACAxa,OAAAya,cAAA,SAAAC,SAEA,IAAAC,SAAAhV,SAAAiV,eAAA,eAAAC,YACAC,UAAAnV,SAAAiV,eAAA,gBAAAC,YACAlV,SAAAiV,eAAA,UAAAF,SAAAK,MAAAnD,MAAA+C,SAAAG,UAAA,GAAA,KACAnV,SAAAiV,eAAA,UAAAF,SAAAK,MAAAC,UAAA,SAEAhb,OAAAib,WAAA,EACAjb,OAAAkb,SAAAva,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAI,QAAA,CAAAC,UAAAgF,UAAArb,OAAA,EACAW,OAAAmb,WAAAxa,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAI,QAAA,CAAAC,UAAAgF,UAAArb,OAAA,EAEAW,OAAAwa,YAAA9Z,SAAA,WAEAV,OAAAob,kBAAAV,UACA,MAGA1a,OAAAob,kBAAA,SAAAV,SAOA,IALA,IAAApT,QAAA3G,QAAA,SAAAA,CAAAX,OAAAwB,QAAAE,QAAAoF,qBAAAuO,WAAAI,QAAA,CAAAC,UAAAgF,UAGAW,aAFA1V,SAAAiV,eAAA,eAAAC,YACAlV,SAAAiV,eAAA,gBAAAC,YACA,GACAS,iBAAA,EACAxT,EAAA,EAAAA,EAAAR,QAAAjI,OAAAyI,IACA,CACA,IAAAyT,SAAAjU,QAAAQ,GACAyT,SAAAC,SAAA,EACAxb,OAAAgO,SACAlG,EAAA9H,OAAAib,WAEAM,SAAAC,SAAA,GAGAF,kBAAA3V,SAAAiV,eAAAW,SAAA9U,KAAAoU,YAAA,GACAU,SAAAC,QAAAF,iBAAAD,aACAE,SAAAC,UACAxb,OAAAkb,SAAApT,MAGA9H,OAAAyb,aAAA,SAAAf,SAEA,IAAA1a,OAAAib,eAEAjb,OAAAib,WACAjb,OAAAob,kBAAAV,WAEA1a,OAAA0b,cAAA,SAAAhB,SAEA1a,OAAAib,aAAAjb,OAAAmb,aAEAnb,OAAAib,YAAA,EACAjb,OAAAob,kBAAAV,cCnIAxd,QAAAC,OAAA,SAAA,CAAA,YAAA,e,OACA,CAAA,iBAAA,SAAAC,gBACA,IAAAue,aAAAve,eAAA6B,KACA2c,eAAA,CACAla,QAAA,SAAAvB,WAAAM,mBACA,OAAAN,WAAA0b,iBAAArX,KAAA,WACA,IAAAsX,MAAA3b,WAAAoG,aAKA,OAJArJ,QAAAgF,yBAAA4Z,QACA5e,QAAAgF,yBAAA4Z,MAAAtV,oBACA/F,kBAAAiG,gBAAAoV,MAAAtV,kBAAAG,cAEAmV,UAIA1e,eAAA6B,KAAA,SAAAqD,KAAAyZ,OAGA,OAFAA,MAAAne,QAAAme,MAAAne,UAAAme,MAAAne,QAAA,IACAV,QAAA8e,OAAAD,MAAAne,QAAAge,gBACAD,aAAAjQ,KAAAtO,eAAAkF,KAAAyZ,W,4CAGA,SAAA3e,eAAAG,kBAEAH,eAAA6B,KAAA,QACA,CACAxB,YAAAF,iBAAAG,YAAA,QACAC,WAAA,WACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,4B,WAMA,WAAA,CAAA,SAAA,aAAA,OAAA,KAAA,cAAA,eAAA,YAAA,mBAAA,SAAAiC,OAAA9B,sBAAA+d,KAAA9d,GAAA+d,YAAAre,aAAAuC,UAAA+b,+BAGAnc,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,iBAAA,EACApE,OAAAgE,aAAAK,SAAA,GACArE,OAAAoc,UAAA,GACApc,OAAAqc,WAAA,EACArc,OAAAiH,yBAGA7G,UAAAmC,OAAA,oBAAA,MAEAvC,OAAAsc,YAAA,SAAAC,YAAAC,cAEAxc,OAAAoc,UAAA5G,OAAA+G,YACAvc,OAAAoc,UAAAK,QAAAD,aACAxc,OAAAoc,UAAAM,OAAA1c,OAAAoc,UAAAM,OAGA1c,OAAA2c,eAAA,WAEA3c,OAAAwB,QAAAE,SAAA1B,OAAAwB,QAAAE,QAAAoF,qBACAoV,YAAAU,wBAAA5c,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAAc,KAAA,SAAA/E,MAEAO,OAAA6c,SAAApd,KACAO,OAAA8c,iBACA9c,OAAA+c,qBAIA/c,OAAA2C,UAGAqa,sBAAA9e,sBAAAwM,IAAA,sBAAA,SAAAC,MAAAlL,MAEAO,OAAA2c,mBAGA3c,OAAA0K,IAAA,WAAAsS,uBAEAhd,OAAA2c,iBAEA3c,OAAAid,2BAAA,SAAAjQ,MAEA,IAAA9P,QAAAgF,yBAAA8K,QAAA9P,QAAAgF,yBAAA8K,KAAAkQ,UAGA,OAAAld,OAAA6c,SAAAM,SAAAC,uBAAAF,U,KACA,EACAld,OAAAqd,WAAArQ,KACAhN,OAAAqd,WAAAxd,MAAA,EACA,M,KAEA,E,KACA,EACA,EAAAmN,KAAAsQ,WAAAtd,OAAA+J,SAAAiD,KAAAsQ,YAEAhL,MAAA1S,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,SACA,M,KAEA,EACA,OAAAkN,KAAAuQ,WAAAvd,OAAAsK,eAAA0C,KAAAuQ,YAEAjL,MAAA1S,SAAAC,KAAAhC,aAAAiC,mBAAA,0BAAA,WAMAE,OAAAwd,mBAAA,WAEA,QAAAxd,OAAAoI,2BAAApI,OAAAkE,aAAAuZ,yBAGA,EAAAzd,OAAA6c,SAAAM,SAAAO,sBAAA,IAAA1d,OAAA6c,SAAAM,SAAA5U,SAAAoV,UACA,IAAA3d,OAAA6c,SAAAM,SAAA5U,SAAAoV,UAAA,IAAA3d,OAAA6c,SAAAM,SAAA5U,SAAAoV,UACA,IAAA3d,OAAA6c,SAAAM,SAAA5U,SAAAoV,UAAA,IAAA3d,OAAA6c,SAAAM,SAAA5U,SAAAoV,WAGA3d,OAAAoI,2BAAApI,OAAAkE,aAAAsK,+BAAAxO,OAAA6c,SAAAM,SAAAS,8BAGA5d,OAAA6d,mBAAA,WAEA,IAAA7d,OAAA6c,SAAA,OAAA,EACA,IAAA7c,OAAA6c,SAAAM,SAAA,OAAA,EACA,IAAAW,SAAA9d,OAAA6c,SAAAM,SAEA,SAAAW,SAAAC,kBAAA,EAAAD,SAAAC,iBAAAC,aACAF,SAAAG,YAAA,EAAAH,SAAAG,WAAAD,aACAF,SAAAI,WAAA,EAAAJ,SAAAI,UAAAF,aACAF,SAAAK,aAAA,EAAAL,SAAAK,YAAAH,aACAF,SAAAM,kBAAA,EAAAN,SAAAM,iBAAAC,kBACAP,SAAAM,kBAAA,EAAAN,SAAAM,iBAAAE,kBACAR,SAAAS,qBAAAT,SAAAS,oBAAAC,aAAA,EAAAV,SAAAS,oBAAAC,YAAAC,YACAX,SAAAV,wBAAA,EAAAU,SAAAV,uBAAAF,iBAIAld,OAAA0e,WAAA,SAAAC,KAEA,OAAAA,K,IACA,MACA3e,OAAAqc,WACArc,OAAAqc,WAAA,IACArc,OAAAqc,WAAArc,OAAA6c,SAAAM,SAAAyB,cAAAvf,OAAA,GACA,M,IACA,MACAW,OAAAqc,WACArc,OAAAqc,aAAArc,OAAA6c,SAAAM,SAAAyB,cAAAvf,SACAW,OAAAqc,WAAA,KAKArc,OAAA8c,eAAA,WAEA5f,QAAAgF,yBAAAlC,OAAA6c,SAAAM,WAAAjgB,QAAAgF,yBAAAlC,OAAA6c,SAAAM,SAAAyB,gBAGA1hB,QAAA4P,QAAA9M,OAAA6c,SAAAM,SAAAyB,cAAA,SAAA5R,MAEAA,KAAA6R,KAAA7R,KAAA6R,KAAAC,OAAAC,eAAAlT,QAAA,WAAA,QAMA7L,OAAA+c,iBAAA,WAEA,IAAAe,SAAA9d,OAAA6c,SAAAM,SAEA6B,QAAAlB,SAAAK,YAAAH,OACAiB,UAAA,EAAAnB,SAAAM,iBAAAE,YACAY,QAAApB,SAAAI,UAAAF,OACAmB,SAAArB,SAAAM,iBAAAC,YACAe,QAAAtB,SAAAG,WAAAD,OACAqB,YAAAvB,SAAAC,iBAAAC,OACAsB,YAAAxB,SAAAvV,SAAAgX,eACAC,iBAAA1B,SAAAvV,SAAAkX,iBACAC,YAAA5B,SAAAvV,SAAAoX,aACAC,cAAA9B,SAAAvV,SAAAsX,gBAEA/B,SAAAK,YAAA2B,cAAA3D,iBAAA4D,eAAAf,SACAlB,SAAAM,iBAAA4B,mBAAA7D,iBAAA4D,eAAAd,UACAnB,SAAAI,UAAA4B,cAAA3D,iBAAA4D,eAAAb,SACApB,SAAAM,iBAAA6B,mBAAA9D,iBAAA4D,eAAAZ,UACArB,SAAAG,WAAA6B,cAAA3D,iBAAA4D,eAAAX,SACAtB,SAAAC,iBAAA+B,cAAA3D,iBAAA4D,eAAAV,aACAvB,SAAAvV,SAAA2X,sBAAA/D,iBAAA4D,eAAAT,aACAxB,SAAAvV,SAAA4X,wBAAAhE,iBAAA4D,eAAAP,kBACA1B,SAAAvV,SAAA6X,oBAAAjE,iBAAA4D,eAAAL,aACA5B,SAAAvV,SAAA8X,uBAAAlE,iBAAA4D,eAAAH,mBC5LA1iB,QAAAC,OAAA,UAAA,CACA,UACA,aACA,kB,4CAEA,SAAAC,eAAAG,kBAEAH,e,KACA,oBACA,CACAK,YAAAF,iBAAAG,YAAA,UACAC,WAAA,aACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0B,KAIA,2BACA,CACAN,YAAAF,iBAAAG,YAAA,iBACAC,WAAA,oBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0B,KAIA,oBACA,CACAN,YAAAF,iBAAAG,YAAA,uBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0B,KAIA,sBACA,CACAN,YAAAF,iBAAAG,YAAA,eACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,0B,KAIA,gBACA,CACAN,YAAAF,iBAAAG,YAAA,gBACAC,WAAA,wB,WAGA,YAAA,CAAA,SAAA,QAAA,KAAA,aAAA,WAAA,iBAAA,aAAA,oBAAA,eAAA,gBAAA,eAAA,YAAA,eAAA,SAAAqC,OAAAC,MAAA9B,GAAAD,WAAAwC,SAAAR,eAAAC,WAAAM,kBAAA6f,aAAAC,cAAArL,aAAA9U,UAAAvC,2BAGAX,QAAAgF,yBAAAgT,aAAAsL,oBACAxgB,OAAA2C,SAEA3C,OAAAygB,WAAA,EACAzgB,OAAA0gB,qBAAA,EACA1gB,OAAA2gB,oBAAA,EAEA3gB,OAAA4gB,gBAAA,WAEAN,aAAAO,wBAEA7gB,OAAAyC,sBACAzC,OAAAygB,WAAA,EAEAvL,aAAAsL,oBACAtiB,WAAAM,UAAA4D,wBAAA8S,aAAAsL,kBACAtiB,WAAAM,UAAAC,oBAAA,EACAP,WAAA4iB,gBAAA,GAGA9gB,OAAA+gB,iBAGA/gB,OAAAghB,uBAAA,WACA9iB,WAAA4iB,iBACA9gB,OAAAxB,UAAAE,OAAAR,WAAA4iB,eAAApiB,QAAA,GACAsB,OAAAxB,UAAA2D,SAAAjE,WAAA4iB,eAAA3e,UAAA,GACAnC,OAAAihB,mBACA/iB,WAAA4iB,oBAAAze,IAIArC,OAAAihB,iBAAA,YAGA/iB,WAAA4iB,gBAAAR,aAAAY,wBAGAlhB,OAAAmhB,MAAA,GACAjjB,WAAAkjB,gBAAA,GACAljB,WAAAmjB,aAAA,GACArhB,OAAAshB,gBAGAthB,OAAAqN,cAAAmE,OAGAtR,eAAAqhB,MAAAvhB,OAAAxB,UAAAE,OAAAsB,OAAAxB,UAAA2D,SAAAjE,WAAAM,UAAA4D,yBAAAoC,KAAA,SAAA/E,OAGA,IAAA+hB,KAAA/hB,MACAgiB,MAAAD,KAAAE,MACAve,QAAAC,MAAA,eAAAqe,MAAA,CAAAE,QAAAzjB,WAAA0jB,UAEAzhB,WAAA0hB,2BAAAL,KAAA/a,IAAAzG,OAAAxB,UAAA2D,UAAA,GAAAqC,KAAA,SAAAsd,WACA,EAAAA,UAAAziB,OAEAW,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,8BAAA,SAKAE,OAAA+hB,gBAAAP,KAAA/a,QAIA,SAAAub,KAEAhiB,OAAAmhB,MAAAa,QAIAhiB,OAAA+hB,gBAAA,SAAAE,YAEA/hB,eAAAZ,mBAEAa,WAAA4hB,gBAAAE,YAAAzd,KAAA,SAAA/E,kBAEAA,iBAAAyiB,QAAAziB,iBAAA0iB,OACAniB,OAAAwB,QAAAE,QAAAjC,iBAEA2iB,iBAAApiB,OAAAwB,QAAAE,QAAA2gB,YAAAhjB,OACA,OAAA,IAAA+iB,kBACApiB,OAAAygB,WAAA,OACAzgB,OAAAiR,WAAApR,KACAhC,aAAAiC,mBAAA,SACAjC,aAAAiC,mBAAA,kBAIA,EAAAsiB,kBACApiB,OAAAygB,WAAA,EACAzgB,OAAA0gB,qBAAA,OACA1gB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAE,QAAA2gB,YAAA,GAAA5b,WAIA,IAAA2b,mBACApiB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAE,QAAA2gB,YAAA,GAAA5b,IACAzG,OAAAsiB,2BAOAtiB,OAAAsiB,oBAAA,YAEAplB,QAAAgF,yBAAAlC,OAAAwB,QAAAM,aAAA9B,OAAAwB,QAAAM,WAAA,KACA9B,OAAAwB,QAAAM,WAAA3B,WAAAoiB,qBAGApiB,WAAA8Z,wBAAAja,OAAAwB,QAAAE,QAAAwY,GAAAla,OAAAwB,QAAAM,YAAA0C,KAAA,SAAA/E,MAEA0D,QAAAC,MAAA,cAAAjD,WAAA0G,2BAAA,GACA1D,QAAAC,MAAA,eAAApD,OAAAwB,QAAAM,YACA9B,OAAAsG,uBACAtG,OAAAgD,KAAA,YAIAhD,OAAAwiB,qBAAA,WAEAlC,aAAAO,wBACAP,aAAAmC,mBAAAziB,QAEAA,OAAAygB,WAAAzgB,OAAAygB,UACAzgB,OAAA2gB,oBAAA3gB,OAAA2gB,oBAGA3gB,OAAA0iB,uBAAA,WAEApC,aAAAY,uBAGA/gB,WAAAwiB,wBAAA3iB,OAAAxB,UAAAE,QAAA8F,KAAA,SAAA/E,MAEAA,KAAAmjB,QACA5iB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,yBAAA,WAEAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,uBAAA,WAEAE,OAAAwiB,yBAGAxiB,OAAAshB,cAAA,WAEAthB,OAAAxB,UAAAuF,WACAZ,QAAAC,MAAA,eAAAlF,WAAAM,UAAAE,QAEAyE,QAAAC,MAAA,eAAA,OAGApD,OAAA+gB,cAAA,WAEA,IAAAtU,OAAAtJ,QAAAC,MAAA,gBACAlG,QAAAgF,yBAAAuK,SAEAvO,WAAAM,UAAAE,OAAA,GACAR,WAAAM,UAAAuF,YAAA,IAIA7F,WAAAM,UAAAE,OAAA+N,OACAvO,WAAAM,UAAAuF,YAAA,O,WAIA,aAAA,CAAA,SAAA,aAAA,eAAA,aAAA,eAAA,gBAAA,eAAA,SAAA/D,OAAA9B,WAAAgX,aAAA/U,WAAAmgB,aAAAC,cAAA1iB,2BAGAmC,OAAAuB,WAAA,WAEA+e,aAAAO,wBAGA7gB,OAAAyC,sBAEAzC,OAAA6iB,OAAA,CACAC,iBAAA,EACAphB,QAAA,CACAqhB,UAAA,GACAZ,OAAA,GACAa,YAAA,GACAC,KAAA,GACA/I,GAAA,GACAzT,IAAA,GACAyc,SAAA,GACAC,cAAA,GACAC,SAAA,GACAC,cAAA,GACAC,MAAA,GACAC,UAAA,IAEApC,MAAA,GACAqC,SAAA,CACArhB,SAAA,GACAshB,gBAAA,GACAC,SAAA,GACAC,OAAA,GACAC,cAAA,GACApT,OAAA,EACAqT,gBAAAtD,cAAAsD,kBAIA7jB,OAAA+W,MAAA,CAAA+M,SAAA,MAEA9jB,OAAAuG,cAGAvG,OAAAuG,WAAA,WAEA2O,aAAA7W,SAEA2B,OAAA6iB,OAAAnhB,QAAAuhB,KAAA/N,aAAA7W,QACA8B,WAAA4jB,oBAAA/jB,OAAA6iB,OAAAnhB,SAAA8C,KACA,SAAA/E,MAEAvC,QAAAgF,yBAAAzC,KAAAya,KAQAla,OAAA6iB,OAAAC,iBAAA,EACA9iB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,yBAAA,SACAE,OAAAgD,KAAA,OARAhD,OAAA6iB,OAAAnhB,QAAAjC,KACAO,OAAA6iB,OAAAC,iBAAA,OAcA9iB,OAAAijB,KAAA,EACAjjB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,cAAA,SACAE,OAAAgD,KAAA,OAIAhD,OAAAgkB,YAAA,WAEA1D,aAAAY,uBAGAlhB,OAAA6iB,OAAAnhB,QAAAyhB,cAAAnjB,OAAA6iB,OAAAW,SAAArhB,SACAnC,OAAA6iB,OAAAnhB,QAAA2hB,cAAArjB,OAAA6iB,OAAAW,SAAAE,SACA1jB,OAAA6iB,OAAAnhB,QAAAshB,YAAAhjB,OAAA6iB,OAAAW,SAAAG,OAEAxjB,WAAA8jB,cAAAjkB,OAAA6iB,OAAAnhB,SAAA8C,KACA,SAAA/E,OAEA,IAAAA,KAAA8jB,YAEArlB,WAAA4iB,eAAA,CAAApiB,OAAAe,KAAAya,GAAA/X,SAAAnC,OAAA6iB,OAAAW,SAAArhB,UACAnC,OAAAgD,KAAA,OAGA,SAAAgf,KAEAhiB,OAAA6iB,OAAArV,OAAA,GAEAtQ,QAAA4P,QAAAkV,IAAA,SAAAhV,MAEAhN,OAAAJ,SAAAC,KAAAmN,KAAA,eAOAhN,OAAAkkB,YAAA,WAEA5D,aAAA6D,0B,WAGA,oBAAA,CAAA,SAAA,aAAA,eAAA,aAAA,eAAA,eAAA,SAAAnkB,OAAA9B,WAAAgX,aAAA/U,WAAAmgB,aAAAziB,2BAGAmC,OAAAuB,WAAA,WAEA+e,aAAAO,wBAGA7gB,OAAAyC,sBAEAzC,OAAAokB,cAAA,CACAC,aAAA,GACAC,iBAAA,EACAC,iBAAA,EACAC,eAAA,EACA9iB,QAAA,CACAqhB,UAAA,GACAZ,OAAA,GACAa,YAAA,GACAC,KAAA,GACA/I,GAAA,GACAzT,IAAA,GACAyc,SAAA,GACAC,cAAA,GACAC,SAAA,GACAC,cAAA,GACAC,MAAA,GACAC,UAAA,IAEApC,MAAA,GACAqC,SAAA,CACArhB,SAAA,GACAshB,gBAAA,GACAE,OAAA,GACAnT,OAAA,EACAiU,WAAA,WAIAzkB,OAAAuG,cAGAvG,OAAAuG,WAAA,WAEA2O,aAAA7W,SAEA2B,OAAAokB,cAAA1iB,QAAAuhB,KAAA/N,aAAA7W,QACA8B,WAAAukB,2BAAA1kB,OAAAokB,cAAA1iB,SAAA8C,KACA,SAAA/E,MAEAvC,QAAAgF,yBAAAzC,KAAAya,KAaAla,OAAAokB,cAAAE,iBAAA,EACAtkB,OAAAokB,cAAAG,iBAAA,EACAvkB,OAAAokB,cAAAI,eAAA,EACAxkB,OAAAokB,cAAAC,aAAAxmB,aAAAiC,mBAAA,kBACAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,SACAE,OAAAgD,KAAA,OAhBAhD,OAAAokB,cAAA1iB,QAAAjC,KACAO,OAAAokB,cAAAC,aAAAxmB,aAAAiC,mBAAA,2BACA,IAAA5B,WAAAkjB,kBAEAphB,OAAAokB,cAAAC,aAAAxmB,aAAAiC,mBAAA,mBAAA,QAAAE,OAAAokB,cAAAC,cAEArkB,OAAAokB,cAAAE,iBAAA,EACAtkB,OAAAokB,cAAAI,eAAA,OAgBAxkB,OAAAijB,KAAA,EACAjjB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,cAAA,SACAE,OAAAgD,KAAA,OAIAhD,OAAA2kB,WAAA,WAEA3kB,OAAAokB,cAAA1iB,QAAAshB,YAAAhjB,OAAAokB,cAAAZ,SAAAG,OACAxjB,WAAAykB,kCAAA5kB,OAAAokB,cAAA1iB,SAAA8C,KACA,SAAA/E,MAEA,IAAAA,MAEAO,OAAAokB,cAAAE,iBAAA,EACAtkB,OAAAokB,cAAAC,aAAAxmB,aAAAiC,mBAAA,2BACAE,OAAAokB,cAAAZ,SAAAiB,WAAA5mB,aAAAiC,mBAAA,gBACAE,OAAAokB,cAAAG,iBAAA,GAIAvkB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oBAAA,UAGA,SAAAkiB,SAOAhiB,OAAA6kB,eAAA,WAEA7kB,OAAAokB,cAAA1iB,QAAAyhB,cAAAnjB,OAAAokB,cAAAZ,SAAArhB,SACAhC,WAAA2kB,qBAAA9kB,OAAAokB,cAAA1iB,SAAA8C,KACA,SAAA/E,OAEA,IAAAA,KAAA8jB,YAEArlB,WAAA4iB,eAAA,CAAApiB,OAAAe,KAAAya,GAAA/X,SAAAnC,OAAAokB,cAAAZ,SAAArhB,UACAnC,OAAAgD,KAAA,OAGA,SAAAgf,KAEAhiB,OAAAokB,cAAA5W,OAAA,GAEAtQ,QAAA4P,QAAAkV,IAAA,SAAAhV,MAEAhN,OAAAJ,SAAAC,KAAAmN,KAAA,cAMAhN,OAAA+kB,WAAA,WAEA/kB,OAAAokB,cAAAjD,MAAA,GAEAb,aAAAY,uBAGAlhB,OAAAokB,cAAAE,iBAEAtkB,OAAA2kB,aAGA3kB,OAAAokB,cAAAG,iBAEAvkB,OAAA6kB,mBAIA7kB,OAAAkkB,YAAA,WAEA5D,aAAA6D,0B,WAGA,qBAAA,CAAA,SAAA,aAAA,eAAA,aAAA,eAAA,oBAAA,eAAA,SAAAnkB,OAAA9B,WAAAgX,aAAA/U,WAAAmgB,aAAA7f,kBAAA5C,2BAGAmC,OAAAiiB,YAAA,EACAjiB,OAAAglB,gBAAA,GAEAhlB,OAAAuB,WAAA,WAEA,IAAAO,WAAA9B,OAAAwB,SAAAxB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAM,WAAA,EAEArB,kBAAA+J,qBAAA1I,WAAA,IAAA0C,KAAA,SAAA/E,MAEAO,OAAAilB,cAAAxlB,KAAA+F,UAAA3H,aAAAiC,mBAAA,sBAAAL,OAGAyV,aAAA7L,MAEArJ,OAAAglB,gBAAA,CACAjC,UAAA,GACAZ,OAAA,GACAa,YAAA,GACAC,KAAA,GACA/I,GAAA,GACAzT,IAAAyO,aAAA7L,IACA6Z,SAAA,GACAC,cAAA,GACAC,SAAA,GACAC,cAAA,GACAC,MAAA,GACAC,UAAA,KAIAjD,aAAAO,yBAIA7gB,OAAAklB,eAAA,WAIA5E,aAAAY,sBAGAlhB,OAAA6kB,kBAGA7kB,OAAA6kB,eAAA,WAEA7kB,OAAAglB,gBAAAG,YAAAnlB,OAAAwB,QAAA4jB,SAAA5B,SAAA6B,YACArlB,OAAAglB,gBAAA7B,cAAAnjB,OAAAwB,QAAA4jB,SAAA5B,SAAArhB,SAEAhC,WAAA2kB,qBAAA9kB,OAAAglB,iBAAAxgB,KACA,SAAA/E,OAEAO,OAAAwB,QAAA4jB,SAAAE,SAAA,KACA7lB,KAAA8jB,YAEArlB,WAAA4iB,eAAA,CAAApiB,OAAAe,KAAAya,GAAA/X,SAAAnC,OAAAglB,gBAAA7B,eACAnjB,OAAAgD,KAAA,OAGA,SAAAgf,KAEA9kB,QAAA4P,QAAAkV,IAAA,SAAAhV,MAEAhN,OAAAJ,SAAAC,KAAAmN,KAAA,cAMAhN,OAAAkkB,YAAA,WAEA5D,aAAA6D,0B,WAGA,kBAAA,CAAA,SAAA,eAAA,eAAA,qBAAA,eAAA,SAAAnkB,OAAAkV,aAAAoL,aAAAiF,mBAAA1nB,2BAIAmC,OAAAuB,WAAA,WAEA+e,aAAAO,wBAGA7gB,OAAAyC,sBAEAzC,OAAAwlB,cAAA3nB,aAAAiC,mBAAA,sBAEAoV,aAAAuQ,KAEAF,mBAAAG,mBAAAxQ,aAAAuQ,MAAAjhB,KACA,SAAA/E,MAEAA,KAAAkmB,aAAAlmB,KAAAmmB,YAEA5lB,OAAAwlB,cAAA3nB,aAAAiC,mBAAA,yBAIAE,OAAAwlB,cAAA3nB,aAAAiC,mBAAA,6BAGA,SAAAL,MAEAO,OAAAwlB,cAAA3nB,aAAAiC,mBAAA,+BAKAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,yBAAA,SACAE,OAAAgD,KAAA,c,WAIA,mBAAA,CAAA,SAAA,UAAA,SAAAhD,OAAAO,sBAIAP,OAAA6lB,eAAA,WAEA7lB,OAAAoG,sCCrmBAlJ,QAAAC,OAAA,UAAA,CAAA,eAAA,iBAAA,oB,4CACA,SAAAC,eAAAG,kBACAH,e,KACA,UACA,CACAK,YAAAF,iBAAAG,YAAA,SACAC,WAAA,kBACAmoB,aAAA,S,KAEA,qBACA,CACAroB,YAAAF,iBAAAG,YAAA,eACAC,WAAA,wBACAmoB,aAAA,wBACAloB,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,6B,OAMA,qBAAA,CAAA,UAAA,SAAAwC,SACA,OAAA,SAAAwlB,OACA,OAAA1b,mBAAA0b,W,WAGA,kBAAA,CAAA,SAAA,YAAA,eAAA,eAAA,SAAA/lB,OAAAoT,UAAA4S,aAAA1lB,2BAEA,IAAA2lB,KAAA/R,KACA+R,KAAAC,QAAA,CACAC,MAAA,GACAC,OAAA,IAGAH,KAAA1kB,WAAA,WACAvB,OAAAoI,2BAAA9H,aAAA+lB,kBACArmB,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iBACAsC,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAiH,yBACA+e,aAAAM,wBAAAtmB,OAAAwB,QAAAM,YAAA0C,KAAA,SAAAtF,UACA,IAEAqnB,oBAFArnB,SAAAymB,aAEAY,oBAAArnB,SAAAmW,WAAAmR,UAAAC,OAAA,SAAA1Q,IAAA+D,OACA,MAAA,iBAAA/D,IAAAR,OAEArY,QAAAgF,yBAAAqkB,sBAAA,IAAAA,oBAAAlnB,SACA4mB,KAAAC,QAAAC,MAAAjnB,SAAAmW,WAAAmR,UAAAC,OAAA,SAAA1Q,IAAA+D,OACA,OAAA/D,IAAAL,YAAA6Q,oBAAA,GAAA9f,c,WAOA,wBAAA,CAAA,SAAA,eAAA,eAAA,OAAA,eAAA,YAAA,QAAA,eAAA,aAAA,WAAA,YAAA,SAAAzG,OAAAkV,aAAA8Q,aAAAU,KAAApmB,aAAA8S,UAAAnT,MAAApC,aAAAK,WAAAwC,SAAAimB,wBAEA,IAAAV,KAAA/R,KACA+R,KAAAW,eAAA,EACAX,KAAAY,aAAA,GACAZ,KAAA1kB,WAAA,SAAAulB,MACA9mB,OAAAoI,2BAAA9H,aAAA+lB,kBACArmB,OAAAgD,KAAA,SAGAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iBACAsC,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACA0e,aAAAM,wBAAAtmB,OAAAwB,QAAAM,YAAA0C,KAAA,SAAAtF,WACA,IAEAqnB,oBAOAld,IAEA0d,cAXA7nB,UAAAymB,aAEAY,oBAAArnB,UAAAmW,WAAAmR,UAAAC,OAAA,SAAA1Q,IAAA+D,OACA,MAAA,iBAAA/D,IAAAR,OAEArY,QAAAgF,yBAAAqkB,sBAAA,IAAAA,oBAAAlnB,SACA2nB,UAAA9nB,UAAAmW,WAAAmR,UAAAC,OAAA,SAAA1Q,IAAA+D,OACA,OAAA/D,IAAAL,YAAA6Q,oBAAA,GAAA9f,MAEA4C,IAAA6L,aAAA7L,IACAnM,QAAAgF,yBAAAmH,OACA0d,cAAA,EACAE,UAAAD,UAAAP,OAAA,SAAA1Q,IAAA+D,OACA,OAAA/D,IAAAtP,IAAAgF,aAAApC,MACA0d,cAAAjN,OACA,MAIA5c,QAAAgF,yBAAA+kB,YAAA,EAAAA,UAAA5nB,SACA4mB,KAAAY,aAAAI,UAAA,GACAjnB,OAAAgE,aAAAM,aAAAgD,QAAAyf,cASA,SAAAG,cAAAJ,MACAd,aAAAmB,eAAAnnB,OAAAwB,QAAAM,WAAAmkB,KAAAY,aAAApgB,KAAAjC,KACA,SAAAtF,UACA,GAAAA,UAAAA,SAAAymB,YAAAzmB,SAAAkoB,YAAAxE,QAAA,CACA,GAAA1lB,QAAAgF,yBAAAhD,SAAAmoB,SAAAC,kBAAA,CACA,IAAAlmB,IAAAslB,KAAAa,mBAAAtB,KAAAY,aAAAW,SACAtqB,QAAAqV,QAAA,sBAAAQ,KAAA,MAAA3R,UAGA,GAAAlE,QAAAgF,yBAAAhD,SAAAkoB,YAAAK,cAsCA,CACAC,IAAA7pB,aAAAiC,mBAAA,qBAAA+L,QAAA,MAAAoa,KAAAY,aAAAtR,MACArX,WAAA0B,SAAAC,KAAA6nB,IAAA,cAvCA,OAAAxoB,SAAAmoB,SAAAC,kB,KACAR,KAAAa,YAAAC,OACA,IAAAC,OAAA,CACAC,OAAA,MACA1mB,IAAA6kB,KAAAY,aAAAW,QACAjpB,QAAA,CACAwpB,cAAA,UAAA7oB,SAAAkoB,YAAAK,eAGAxnB,MAAA4nB,QAAArjB,KACA,SAAAtF,OAEA,IACAO,KADA,KAAAP,MAAAM,QAAAN,MAAAM,OAAA,MACAC,KAAAP,MAAAO,MAAA,GACAP,MAAAO,OAAA,IAAAP,MAAAO,KAAA+C,QAAA,WACA/C,KAAAP,MAAAO,KAAAoM,QAAA,SAAA,qBAAAoa,KAAAY,aAAAW,QAAA,QAEAQ,MAAAriB,SAAAsiB,cAAA,uBAEAC,cAAAviB,SAAArE,KAAA,YAAA,WACA0mB,MAAAE,cAAAviB,SAAAwiB,MAAA1oB,MACAuoB,MAAAE,cAAAviB,SAAAyiB,UAGA,SAAAC,QACA,IAAAX,IAAA7pB,aAAAiC,mBAAA,qBAAA+L,QAAA,MAAAoa,KAAAY,aAAAtR,MACArX,WAAA0B,SAAAC,KAAA6nB,IAAA,WAGA,M,KACAZ,KAAAa,YAAAW,IACA,IAAAC,OAAAtC,KAAAY,aAAAW,QAAAgB,SAAA,KAAA,IAAA,IACAC,OAAAF,OAAA,gBAAAle,mBAAAnL,SAAAkoB,YAAAK,cAAA,eAAAvoB,SAAAkoB,YAAAsB,WACAxrB,QAAAqV,QAAA,sBAAAQ,KAAA,MAAA2T,KAAAa,mBAAAtB,KAAAY,aAAAW,QAAAiB,SAUAvrB,QAAAgF,yBAAAhD,SAAAkoB,YAAAuB,aAAAzrB,QAAAgF,yBAAAhD,SAAAkoB,YAAAK,eACA/mB,SAAA,WACAwmB,cAAAJ,OACA,IAAA5nB,SAAAkoB,YAAAuB,cAIA,SAAAC,SACA,IAAAlB,IAAA7pB,aAAAiC,mBAAA,qBAAA+L,QAAA,MAAAoa,KAAAY,aAAAtR,MACArX,WAAA0B,SAAAC,KAAA6nB,IAAA,WAtEAR,CAAAJ,gB,WA0EA,0BAAA,CAAA,SAAA,aAAA,eAAA,eAAA,SAAA9mB,OAAA9B,WAAAgX,aAAA8Q,2BAEA,IAAAC,KAAA/R,KACA+R,KAAAC,QAAA,CACAC,MAAA,IAEAF,KAAA4C,WAAA,SAAA/O,OACA,IAAAgP,OAAA9oB,OAAAgE,aAAAM,aAAAgD,UAAAwS,MAIA,OAHAgP,SACA7C,KAAAY,aAAAZ,KAAAC,QAAAC,MAAArM,QAEAgP,QAEA7C,KAAA1kB,WAAA,WACAykB,aAAAM,wBAAAtmB,OAAAwB,QAAAM,YAAA0C,KAAA,SAAAtF,UACA,IAEAqnB,oBAFArnB,SAAAymB,aAEAY,oBAAArnB,SAAAmW,WAAAmR,UAAAC,OAAA,SAAA1Q,IAAA+D,OACA,MAAA,iBAAA/D,IAAAR,OAEArY,QAAAgF,yBAAAqkB,sBAAA,IAAAA,oBAAAlnB,SACA4mB,KAAAC,QAAAC,MAAAjnB,SAAAmW,WAAAmR,UAAAC,OAAA,SAAA1Q,IAAA+D,OACA,OAAA/D,IAAAL,YAAA6Q,oBAAA,GAAA9f,cChMAvJ,QAAAC,OAAA,cAAA,CAAA,iB,4CACA,SAAAC,eAAAG,kBAGAH,e,KACA,6BACA,CACAK,YAAAF,iBAAAG,YAAA,kBACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,0CACA,CACAN,YAAAF,iBAAAG,YAAA,wBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,oDACA,CACAN,YAAAF,iBAAAG,YAAA,4BACAC,WAAA,+BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,+CACA,CACAN,YAAAF,iBAAAG,YAAA,uBACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,qDACA,CACAN,YAAAF,iBAAAG,YAAA,6BACAC,WAAA,kC,KAEA,6BACA,CACAF,YAAAF,iBAAAG,YAAA,mBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,qBACA,CACAN,YAAAF,iBAAAG,YAAA,oBACAC,WAAA,4BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,iCACA,CACAN,YAAAF,iBAAAG,YAAA,oBACAC,WAAA,wB,KAEA,yCACA,CACAF,YAAAF,iBAAAG,YAAA,iBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,8CACA,CACAN,YAAAF,iBAAAG,YAAA,sBACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,mDACA,CACAN,YAAAF,iBAAAG,YAAA,2BACAC,WAAA,+BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAIA,oDACA,CACAN,YAAAF,iBAAAG,YAAA,4BACAC,WAAA,kC,KAEA,8BACA,CACAF,YAAAF,iBAAAG,YAAA,oBACAC,WAAA,yB,KAEA,sDACA,CACAF,YAAAF,iBAAAG,YAAA,oBACAC,WAAA,4B,WAGA,8BAAA,CAAA,SAAA,mBAAA,0BAAA,eAAA,YAAA,SAAAqC,OAAAe,iBAAAgoB,wBAAAzoB,aAAAF,wBAGAJ,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAhD,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwB,QAAAG,UAAAsnB,QAAAjpB,OAAAwB,QAAAG,UAAAsnB,SAAA,GACAjpB,OAAAwB,QAAAG,UAAAunB,QAAAlpB,OAAAwB,QAAAG,UAAAunB,SAAA,GACAlpB,OAAAgE,aAAAM,aAAA6kB,gBAAA,GACAnpB,OAAAgE,aAAAM,aAAA6kB,gBAAAC,QAAA,EACAppB,OAAAgE,aAAAM,aAAA6kB,gBAAAE,UAAA,EACArpB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GAIAlH,QAAAgF,yBAAAlC,OAAA2P,eACA3P,OAAA0P,yBAGA1P,OAAA2P,aAAAc,kBAAA,EACAzQ,OAAA2P,aAAAC,iBAAA,EACA5P,OAAA2P,aAAAU,aAAA,GACArQ,OAAA2P,aAAAE,UAAA,GAEA9O,iBAAAuoB,oBAAAtpB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,GAAAc,KACA,SAAA/E,MACAO,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA9pB,KAAA+pB,eACAxpB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,aAAAhqB,KAAAiqB,gBACA1pB,OAAAgE,aAAAM,aAAA6kB,gBAAAC,QAAA,EACAppB,OAAAwB,QAAAG,UAAAsnB,QAAAU,sBAAAlqB,KAAAmqB,sBAEA5pB,OAAAwB,QAAAG,UAAAsnB,QAAAY,wCAAApqB,KAAAqqB,wCACA9pB,OAAAwB,QAAAG,UAAAsnB,QAAAc,6CAAAtqB,KAAAuqB,6CACAhqB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,qDAAAxqB,KAAAyqB,qDACAlqB,OAAAmqB,mBAEAnqB,OAAAgE,aAAAomB,6BAAApqB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,IACAvpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,GAAAc,kBAGArqB,OAAAgE,aAAAomB,6BACApqB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAlH,UAAAkC,KAAA,gCAGA,SAAA0f,KACAhiB,OAAAgE,aAAAM,aAAA6kB,gBAAAC,QAAA,IAKAL,wB,oBACA/oB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,G,KACA,SAAAjE,MACAA,KAAAkmB,aAAAzoB,QAAAgF,yBAAAzC,KAAA6qB,oBACAtqB,OAAAwB,QAAAG,UAAAunB,QAAAqB,iBAAA9qB,KAAA6qB,qBAMAtqB,OAAAmqB,iBAAA,WAEAjtB,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,SAAAiB,KAAA1Q,OAEA0Q,KAAAC,UAAAzqB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,eACAzpB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAF,Y,WAIA,6BAAA,CAAA,SAAA,mBAAA,UAAA,eAAA,aAAA,kBAAA,WAAA,YAAA,SAAAxqB,OAAAe,iBAAAJ,QAAAL,aAAApC,WAAAJ,iBAAA6sB,SAAAvqB,wBAGAvC,iBAAAC,iBAAAC,gCAAA,yBACAiC,OAAA4qB,qBAAA/sB,iBAAAiC,mBAAA,sBACAE,OAAA6qB,sBAAAhtB,iBAAAiC,mBAAA,uBACAE,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAM,aAAA3C,UAAA,GACA3B,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,IAGApE,OAAA8qB,mBAAA,WAEA5tB,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAopB,KAAA,SAAAC,IAAAlR,OAEA,UAAAkR,IAAAC,WAEAjrB,OAAAgE,aAAAM,aAAA3C,UAAAupB,WAAAF,KAEA,UAAAA,IAAAC,WAEAjrB,OAAAgE,aAAAM,aAAA3C,UAAAwpB,OAAAH,KAEA,UAAAA,IAAAC,WAEAjrB,OAAAgE,aAAAM,aAAA3C,UAAAypB,MAAAJ,KAEA,EAAAA,IAAAK,uBAEAL,IAAAC,SAAA,QACAjrB,OAAAgE,aAAAM,aAAA3C,UAAA2pB,MAAAN,IACAhrB,OAAAwB,QAAAG,UAAAmN,KAAAyc,OAAAP,IAAAvkB,QAKAzG,OAAAwrB,sBAAA,WAEAzqB,iBAAA0qB,mBACAzrB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,aACAzpB,OAAAgL,cAAAhL,OAAAgE,aAAAM,aAAA3C,UAAA4K,MAAA,GACAvM,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAwY,IACA,G,KACA,SAAAza,MAEAO,OAAAwB,QAAAG,UAAA+pB,MAAAjsB,KAAAksB,eAAAA,eACA3rB,OAAAwB,QAAAG,UAAAopB,KAAAtrB,KAAAksB,eAAAC,cACA5rB,OAAAwB,QAAAG,UAAAmN,KAAArP,KAAAksB,eAAAE,cACA7rB,OAAAwB,QAAAG,UAAAmqB,SAAArsB,KAAAksB,eAAAI,kBACA/rB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IACAzG,OAAA8qB,qBAEA5sB,WAAAic,WAAA,gCAAA,OAIA8R,iBAAA/tB,WAAAwM,IAAA,wBAAA,SAAAC,MAAAuhB,SAAAzsB,MAEAO,OAAA8qB,uBAEA9qB,OAAA0K,IAAA,WAAAuhB,kBAEAjsB,OAAAmsB,MAAA,SAAAC,UAEApsB,OAAAwB,QAAAG,UAAAuqB,UAAA,GAEA,EAAA9rB,UAAAisB,OAAA7pB,QAAA,qBAAAxC,OAAAwB,QAAAG,UAAAuqB,UAAA,IACA,EAAA9rB,UAAAisB,OAAA7pB,QAAA,+BAAAxC,OAAAwB,QAAAG,UAAAuqB,UAAA,IACA,EAAA9rB,UAAAisB,OAAA7pB,QAAA,0BAAAxC,OAAAwB,QAAAG,UAAAuqB,UAAA,IACA,EAAA9rB,UAAAisB,OAAA7pB,QAAA,gCAAAxC,OAAAwB,QAAAG,UAAAuqB,UAAA,GAGAlsB,OAAAwB,QAAAG,UAAAuqB,UAAAhuB,WAAAic,WAAA,kBAAAwQ,SAAA2B,2BAAAlsB,UAAAisB,SAEArsB,OAAAgD,KAAA2nB,SAAA4B,cAAAH,SAAApsB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAAuqB,UAAA,Q,WAIA,+BAAA,CAAA,SAAA,mBAAA,0BAAA,eAAA,eAAA,mBAAA,eAAA,SAAAlsB,OAAAe,iBAAAgoB,wBAAA7T,aAAA5U,aAAAksB,iBAAAlM,2BAGAtgB,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAhD,OAAAysB,MAAAC,eAAAC,UAAA,GACA3sB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAsoB,iBAAA,GACA5sB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAgE,aAAAM,aAAAsoB,iBAAAC,WAAA,oBACA7sB,OAAAwB,QAAAxB,OAAAwB,SAAA,GACAxB,OAAAwB,QAAAG,UAAA3B,OAAAwB,QAAAG,WAAA,GACA3B,OAAAwB,QAAAG,UAAAsnB,QAAAjpB,OAAAwB,QAAAG,UAAAsnB,SAAA,GACAjpB,OAAAwB,QAAAG,UAAAunB,QAAAlpB,OAAAwB,QAAAG,UAAAunB,SAAA,GAEAlpB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAA,CAAAD,SAAA,GAIAvtB,QAAAgF,yBAAAlC,OAAA2P,eACA3P,OAAA0P,yBAGA1P,OAAA2P,aAAAc,kBAAA,EACAzQ,OAAA2P,aAAAC,iBAAA,EACA5P,OAAA2P,aAAAU,aAAA,GACArQ,OAAA2P,aAAAE,UAAA,GAEA9O,iB,oBACAf,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,G,KACA,SAAAjE,MAEAO,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA9pB,KAAA+pB,eACAxpB,OAAAwB,QAAAG,UAAAsnB,QAAAU,sBAAAlqB,KAAAmqB,sBAEA5pB,OAAAwB,QAAAG,UAAAsnB,QAAAY,wCAAApqB,KAAAqqB,wCACA9pB,OAAAwB,QAAAG,UAAAsnB,QAAAc,6CAAAtqB,KAAAuqB,6CACAhqB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,qDAAAxqB,KAAAyqB,qDAEAlqB,OAAA8sB,mBAEA9sB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QAAAhrB,KAAAiqB,gBACA1pB,OAAA2P,aAAAG,UAAA9P,OAAAoM,WAAA3M,KAAAstB,oBAGA/sB,OAAAgE,aAAAomB,6BAAApqB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,IACAvpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,GAAAc,kBAGArqB,OAAAgE,aAAAomB,6BAEApqB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAlH,UAAAkC,KAAA,+BAEAtC,OAAAuE,eAEA,SAAAyd,KAEAhiB,OAAAgE,aAAAM,aAAA6kB,gBAAAC,QAAA,IAKAL,wB,oBACA/oB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,G,KACA,SAAAjE,MACAA,KAAAkmB,aAAAzoB,QAAAgF,yBAAAzC,KAAA6qB,oBACAtqB,OAAAwB,QAAAG,UAAAunB,QAAAqB,iBAAA9qB,KAAA6qB,qBAMAtqB,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAsoB,iBAAA5sB,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QAAAzqB,OAAA0sB,eAAAO,YAAAxD,aACAzpB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,MAGAvM,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAsoB,iBACA5sB,OAAA0sB,eAAAS,YAAA1D,aAAAzpB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QACAzqB,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,cAGA3P,OAAAotB,qBAAA,SAAA9V,GAEAtX,OAAA8sB,kBAGA/rB,iBAAAssB,qBAAA/V,EAAAgW,OAAA/V,SAAAD,EAAAgW,OAAA9V,UAAAiT,SAAA,GAAAjmB,KACA,SAAA/E,MAEAO,OAAA2P,aAAAG,UAAA9P,OAAAoM,WAAA3M,SAKAO,OAAA8sB,eAAA,WAEA,SAAA5X,aAAAqY,UAAArY,aAAAsY,iBAEAxtB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAA,CAAAD,SAAA,GAEAzqB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QAAA7W,SAAAsB,aAAAqY,QAAA,IACAvtB,OAAA2P,aAAAG,UAAA9P,OAAAoM,WAAA8I,aAAAsY,gBACA,IAMAxtB,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEApN,aAAAY,sBACAngB,iBAAA4sB,oCACA3tB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QACAzqB,OAAAgL,cAAAhL,OAAA2P,aAAAG,WAAA,GACA9P,OAAAwB,QAAAE,QAAAoF,qBAAApD,aACA,G,KACA,SAAAjE,MAEA,IAAAmuB,GAAA,cAAA5tB,OAAAgE,aAAAM,aAAAsoB,iBAAAC,WACA,eAAA7sB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QACA,cAAAzqB,OAAA2P,aAAAG,UAEA4d,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,U,WAKA,4BAAA,CAAA,SAAA,eAAA,YAAA,eAAA,0BAAA,SAAA5tB,OAAAM,aAAA8S,UAAAvV,aAAAkrB,sCAIA/oB,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAxB,OAAAwB,SAAA,GACAxB,OAAAwB,QAAAG,UAAA,CACAsnB,QAAA,GACA+C,aAAA,EACA9C,QAAA,IAEAlpB,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAwB,QAAAG,UAAAunB,QAAAqB,iBAAA,GACAvqB,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA3C,UAAA,GACA3B,OAAAgE,aAAAomB,4BAAA,EACApqB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GAEA2kB,wB,oBACA/oB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,G,KACA,SAAAjE,MACAA,KAAAkmB,aAAAzoB,QAAAgF,yBAAAzC,KAAA6qB,kBACAtqB,OAAAwB,QAAAG,UAAAunB,QAAAqB,iBAAAvqB,OAAA+tB,gBAAAtuB,KAAA6qB,kBAAA0D,KAAAhuB,OAAAiuB,sBAGAjuB,OAAAgD,KAAA,6BACAhD,OAAAiR,WAAAQ,qBAMAzR,OAAA+tB,gBAAA,SAAA7E,SAKA,OAJAhsB,QAAA4P,QAAAoc,QAAA,SAAAgF,QACAA,OAAAC,YAAAtwB,aAAAiC,mBAAA,aAAAouB,OAAA3Y,QAGA2T,SAGAlpB,OAAAiuB,oBAAA,SAAAG,EAAAC,GACA,OAAAD,EAAAD,YAAAG,cAAAD,EAAAF,iB,WAGA,0BAAA,CAAA,SAAA,YAAA,mBAAA,0BAAA,eAAA,eAAA,YAAA,eAAA,WAAA,SAAAnuB,OAAAI,UAAAW,iBAAAgoB,wBAAAzoB,aAAAggB,aAAAlN,UAAAvV,aAAA8sB,uBAGA3qB,OAAA6qB,sBAAAhtB,aAAAiC,mBAAA,uBACAE,OAAA4qB,qBAAA/sB,aAAAiC,mBAAA,sBACAE,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAsd,aAAAO,wBAEA7gB,OAAAwB,QAAAxB,OAAAwB,SAAA,GACAxB,OAAAwB,QAAAG,UAAA,CACAsnB,QAAA,GACA+C,aAAA,EACA9C,QAAA,IAEAlpB,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAwB,QAAAG,UAAAunB,QAAAqB,iBAAA,GACAvqB,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAA3C,UAAA,GACA3B,OAAAgE,aAAAM,aAAAiqB,aAAA,EACAvuB,OAAAgE,aAAAM,aAAAkqB,YAAA,EACAxuB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAgE,aAAAomB,4BAAA,EACApqB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GAIAlH,QAAAgF,yBAAAlC,OAAA2P,eACA3P,OAAA0P,yBAGA1P,OAAA2P,aAAAC,iBAAA,EACA5P,OAAA2P,aAAAc,kBAAA,EACAzQ,OAAA2P,aAAAU,aAAA,GACArQ,OAAA2P,aAAAE,UAAA,GAEA9O,iBAAAuoB,oBAAAtpB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,GAAAc,KACA,SAAA/E,MAEAA,KAAAkmB,aAAAzoB,QAAAgF,yBAAAzC,KAAA+pB,iBAEAxpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA9pB,KAAA+pB,eACAxpB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,aAAAhqB,KAAAiqB,gBACA1pB,OAAAwB,QAAAG,UAAAsnB,QAAAU,sBAAAlqB,KAAAmqB,sBACA5pB,OAAAgE,aAAAM,aAAA3C,UAAA4K,KAAAvM,OAAAoM,WAAA3M,KAAAstB,mBACA/sB,OAAAgE,aAAAM,aAAA3C,UAAAoX,QAAA/Y,OAAAoM,WAAA3M,KAAAgvB,cACAzuB,OAAAgE,aAAAM,aAAA3C,UAAA+sB,QAAA1uB,OAAAoM,WAAA3M,KAAAkvB,aACA3uB,OAAAwB,QAAAG,UAAAsnB,QAAAY,wCAAApqB,KAAAqqB,wCACA9pB,OAAAwB,QAAAG,UAAAsnB,QAAAc,6CAAAtqB,KAAAuqB,6CACAhqB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,qDAAAxqB,KAAAyqB,qDACAlqB,OAAAmqB,mBAEAnqB,OAAAgE,aAAAomB,6BAAApqB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,IACAvpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,GAAAc,kBAGArqB,OAAAgE,aAAAomB,6BAEApqB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAlH,UAAAkC,KAAA,gCAIAtC,OAAAiR,WAAAQ,mBAIAsX,wB,oBACA/oB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,G,KACA,SAAAjE,MACAA,KAAAkmB,aAAAzoB,QAAAgF,yBAAAzC,KAAA6qB,oBACAtqB,OAAAwB,QAAAG,UAAAunB,QAAAqB,iBAAA9qB,KAAA6qB,qBAMAtqB,OAAAotB,qBAAA,SAAA9V,GAEAvW,iBAAAssB,qBAAA/V,EAAAgW,OAAA/V,SAAAD,EAAAgW,OAAA9V,UAAAiT,SAAA,GAAAjmB,KACA,SAAA/E,MAEAO,OAAA2P,aAAAG,UAAA9P,OAAAoM,WAAA3M,MACAO,OAAAgE,aAAAM,aAAA3C,UAAA4K,KAAAvM,OAAA2P,aAAAG,aAKA9P,OAAAmqB,iBAAA,WAEAjtB,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,SAAAiB,KAAA1Q,OAEA0Q,KAAAC,UAAAzqB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,eACAzpB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAF,SAIAxqB,OAAAwrB,sBAAA,WAEAlL,aAAAY,sBAGAngB,iBAAA0qB,mBACAzrB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,aACAzpB,OAAAgL,cAAAhL,OAAAgE,aAAAM,aAAA3C,UAAA4K,MAAA,GACAvM,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAwY,IACA,G,KACA,SAAAza,MAEAO,OAAAwB,QAAAG,UAAA+pB,MAAAjsB,KAAAksB,eAAAA,eACA3rB,OAAAwB,QAAAG,UAAAopB,KAAAtrB,KAAAksB,eAAAC,cACA5rB,OAAAwB,QAAAG,UAAAmN,KAAArP,KAAAksB,eAAAE,cACA7rB,OAAAwB,QAAAG,UAAAmqB,SAAArsB,KAAAksB,eAAAI,kBACA/rB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IAEAzG,OAAAgD,KAAA2nB,SAAAiE,cAAA5uB,OAAAwB,QAAAG,UAAAopB,KAAA,GAAA/qB,OAAAwB,QAAAG,UAAAqqB,aAAA,KAAAhsB,OAAAwB,QAAAG,UAAA+pB,MAAAmD,qB,WAIA,sBAAA,CAAA,SAAA,aAAA,eAAA,YAAA,mBAAA,eAAA,UAAA,YAAA,eAAA,mBAAA,WAAA,SAAA7uB,OAAA9B,WAAAoiB,aAAAlgB,UAAAW,iBAAAT,aAAAK,QAAAyS,UAAAvV,aAAAse,iBAAAwO,uBAGArK,aAAAO,wBACA7gB,OAAA+W,MAAA,GACA/W,OAAA+W,MAAA+X,qBAAA,GACA9uB,OAAA+W,MAAAgY,4BAAA,CACA3X,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,yBACAxG,MAAAtT,aAAAiC,mBAAA,iBACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,mBACAxG,MAAAtT,aAAAiC,mBAAA,UACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAxG,MAAAtT,aAAAiC,mBAAA,cACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,gFACAN,MAAA,IAEA,CACAM,SAAA,0GACAN,MAAA,KAGAO,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,EACAf,MAAA,OAGA5X,OAAA+W,MAAAiY,yBAAA,SAAApW,IAEA5Y,OAAA+W,MAAAkY,uBAAA,IAAAlY,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,KAGA5Y,OAAA+W,MAAAkY,uBAAAnW,OACA9Y,OAAA+W,MAAA+X,qBAAA3W,WAAA1Y,KAAAO,OAAA+W,MAAAkY,uBAAAxvB,SAGAO,OAAAmpB,gBAAA,GACAnpB,OAAAkvB,mBAAA,GACAlvB,OAAAmvB,sBAAA,EACAnvB,OAAAovB,cAAA,EACApvB,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAEAhD,OAAAqvB,gBAAA,EACArvB,OAAAwB,QAAAxB,OAAAwB,SAAA,GACAxB,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAovB,cAAA,GAGApvB,OAAAsvB,SAAA,SAAA5D,OAEA,OAAAA,MAAA6D,cAAA7D,MAAA8D,eACA9D,MAAA6D,cAAA7D,MAAA+D,eACA/D,MAAAmD,aAAA,IAAA7uB,OAAAwB,QAAAG,UAAAsnB,QAAAU,wBAGA3pB,OAAA4U,QAAArQ,YAAA,WAEA+b,aAAAY,uBAEAlhB,OAAAiR,WAAAO,OACAzQ,iBAAA2uB,0BACA1vB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QACAzqB,OAAAgL,cAAAhL,OAAA2P,aAAAG,WAAA,GACA9P,OAAAgL,cAAAhL,OAAA2P,aAAAM,SAAA,GACAjQ,OAAAgE,aAAAM,aAAA6kB,gBAAAE,SAAA,EAAA,G,KACA,SAAA5pB,MAEA,IAAAA,KAAAJ,QAEAW,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,qBAGAL,KAAAkwB,KAAA,SAAA3iB,MAEAA,KAAA4iB,uBAAAzT,iBAAA9P,eAAAW,KAAAuiB,cAAA,KACAviB,KAAA6iB,eAAA1T,iBAAA4D,eAAA/S,KAAA6iB,kBAGA7vB,OAAA+W,MAAAiY,yBAAAvvB,MACAO,OAAAmvB,sBAAA,MAIAnvB,OAAA8vB,cAAA,SAAA9iB,KAAA+iB,SAEAhvB,iBAAA4sB,oCACA3tB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QACAzd,KAAA4iB,uBACA5vB,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACAqsB,UAAA,GAGAhvB,iBAAA0qB,mBACAzrB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAD,QACAzd,KAAA4iB,uBACA5vB,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAwY,IACA6V,UAAA,G,KACA,SAAAtwB,MAEAA,KAAAksB,eAAAC,cAAA3S,KAAA,SAAAjM,MACA,EAAAA,KAAAqe,uBACAre,KAAAie,SAAA,WAIA7qB,UAAAkC,KAAAqoB,SAAA4B,cAAA9sB,KAAAksB,eAAAC,cAAA,GAAAX,SAAAje,KAAAvG,KAAAspB,SAAA,U,WAIA,qBAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,YAAA,WAAA,eAAA,yBAAA,eAAA,YAAA,eAAA,mBAAA,WAAA,SAAA/vB,OAAA9B,WAAAgX,aAAAnU,iBAAAJ,QAAAP,UAAAM,SAAAJ,aACA0vB,uBAAA1P,aAAAlN,UAAAvV,aAAAse,iBAAAwO,uBAGA3qB,OAAA6qB,sBAAAhtB,aAAAiC,mBAAA,uBACAE,OAAA4qB,qBAAA/sB,aAAAiC,mBAAA,sBACAE,OAAAwB,QAAAG,UAAAqqB,aAAA,EACAhsB,OAAAwB,QAAAG,UAAAsuB,iBAAA,EACAjwB,OAAAwB,QAAAG,UAAAuuB,kBAAA,EACAlwB,OAAAwB,QAAAG,UAAAwuB,gBAAA,EACAnwB,OAAAwB,QAAAG,UAAAyuB,iBAAA,EACApwB,OAAAwB,QAAAG,UAAA0uB,cAAA,EACArwB,OAAAwB,QAAAG,UAAA2uB,cAAA,EACAtwB,OAAAwB,QAAAG,UAAA4uB,iBAAA,EAEAvwB,OAAAwB,QAAAG,UAAAwpB,OAAA,GAEAnrB,OAAAoc,UAAA,GACApc,OAAAwwB,cAAA,EAEAxwB,OAAA+W,MAAA,GAEA/W,OAAAywB,cAAA,CACAC,QAAAvU,iBAAAwU,YACAjD,OAAA,IACAkD,SAAA,EACAC,UAAA,GAGA7wB,OAAA8wB,SAAA,IAGA9wB,OAAA0K,IAAA,WAAA,WAEAxM,WAAA6yB,iBAAA,KAGA/wB,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAG,UAAAuqB,UAAA,EAAA9rB,UAAAisB,OAAA7pB,QAAA,mBAEAxC,OAAAgxB,gBAAA,EAEA9b,aAAA8W,eAEAhsB,OAAAwB,QAAAG,UAAAqqB,aAAA9W,aAAA8W,cAGAhsB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAwB,QAAAG,UAAA+pB,MAAA,GAEA1rB,OAAAwB,QAAAG,UAAAsnB,SAEAloB,iBAAAuoB,oBAAAtpB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,GAAAc,KACA,SAAA/E,MAEAO,OAAAwB,QAAAG,UAAAsnB,QAAA,GACAjpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA9pB,KAAA+pB,eACAxpB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,aAAAhqB,KAAAiqB,gBACA1pB,OAAAwB,QAAAG,UAAAsnB,QAAAU,sBAAAlqB,KAAAmqB,sBAEA5pB,OAAAwB,QAAAG,UAAAsnB,QAAAY,wCAAApqB,KAAAqqB,wCACA9pB,OAAAwB,QAAAG,UAAAsnB,QAAAc,6CAAAtqB,KAAAuqB,6CACAhqB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,qDAAAxqB,KAAAyqB,qDAEAlqB,OAAAgE,aAAAomB,6BAAApqB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,IACAvpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,GAAAc,kBAGArqB,OAAAgE,aAAAomB,6BAEApqB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAlH,UAAAkC,KAAA,iCAUA,EAAAtC,OAAAwB,QAAAG,UAAAqqB,cAGAjrB,iBAAAkwB,wBACAjxB,OAAAwB,QAAAG,UAAAqqB,aACAhsB,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAwY,GACAla,OAAAwB,QAAAG,UAAAuqB,U,KACA,SAAAzsB,KAEAO,OAAAwB,QAAAG,UAAA+pB,MAAAjsB,IAAAksB,eAAAA,eACA3rB,OAAAwB,QAAAG,UAAAopB,KAAAtrB,IAAAksB,eAAAC,cACA5rB,OAAAwB,QAAAG,UAAAmN,KAAArP,IAAAksB,eAAAE,cACA7rB,OAAAwB,QAAAG,UAAAmqB,SAAArsB,IAAAksB,eAAAI,kBAGAmF,IAAAvG,SAAAwG,cAAA,QAAAnxB,OAAAwB,QAAAG,UAAAopB,MACA/qB,OAAAgE,aAAAM,aAAAiqB,YAAA2C,IAAA3C,YACAvuB,OAAAgE,aAAAM,aAAAkqB,WAAA0C,IAAA1C,WAEAtwB,WAAAic,WAAA,wBAAAna,OAAAwB,QAAAG,UAAAuqB,SAAAlsB,OAAAwB,QAAAG,UAAAqqB,cAEA,IAAAoF,SAAA,EACAl0B,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAopB,KAAA,SAAAC,IAAAlR,OAEA,UAAAkR,IAAAC,WAEAjrB,OAAAqxB,aACAD,SAAA,KAGAA,SAEApxB,OAAAgD,KAAA2nB,SAAA2G,eAAA,QAAAtxB,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAAuqB,UAAA,KAEA,WAEA9rB,UAAAkC,KAAA,gCAGAtC,OAAAgE,aAAAM,aAAAitB,UAAA,IACAvxB,OAAAwB,QAAAG,UAAA6vB,WAAA,GAKA,SAAAC,mBAAAC,UAAAphB,SAGA,IAAAqhB,UAAA,IAAArhB,QAAAqH,MAAA,IAEAia,SAAA3jB,EAAAyjB,WAAA3e,KAAA,YAKAgT,MAAA9X,EAAA,aACA8X,MAAA8L,oBAAA,CACAnB,QAAAvU,iBAAAwU,YACAjD,OAAA,KACAkD,SAAA,EACAkB,IAAA9xB,OAAA8wB,SACAiB,KAAA/xB,OAAA8wB,WAGA/K,MAAAhT,KAAA,OAAAzC,QAAAqH,OACAoO,MAAAhT,KAAA,YAAA,SAAAzC,QAAAqH,OACAoO,MAAAhT,KAAA,UAAA,iCAAA4e,UAAA,KACA5L,MAAAhT,KAAA,QAAA,uBAEA,IAAA6e,WAAA,IAAAA,WAEA7L,MAAAhT,KAAA,YACAgT,MAAAhT,KAAA,iCAGAgT,MAAAiM,SAAAN,WAMA,SAAAO,cAAAta,MAAA+V,QAEA,MAAA,4BAAA/V,MAAA,MAAA+V,OAAA,OAAAvR,iBAAAwU,YAAA,cAtCA,IAiCAuB,UAAA,GACAC,SAAA,GA4LA,SAAAC,uBAAAT,UAAAU,OAEA,OAAA,aAAAV,WACA3xB,OAAAwB,QAAAG,UAAAsuB,oBAMA,cAAA0B,WAEA,IAAAU,MAAAC,uBAMA,cAAAX,WAEA,IAAAU,MAAAE,oBAMA,aAAAZ,WAEA,IAAAU,MAAAG,qBAMA,aAAAb,WAEA,IAAAU,MAAAI,iBAMA,kBAAAd,WAEA,IAAAU,MAAAK,yBAAA,IAAAL,MAAAM,+BASA,SAAAC,cAAAtb,GAEAA,EAAAub,UAAA9b,MAAA+b,KAAAC,MAEAzb,EAAA0b,SACAhzB,OAAAizB,4BAGAjzB,OAAAkzB,yBAjPAlzB,OAAAmzB,qBAAA,WAGAnzB,OAAAozB,aAAA,IAAArc,MAAAtX,KAAA2Y,WAAA,CACAib,OAAA,CACAhB,MAAA,CACAiB,GAAA,cACAC,OAAA,CACAC,YAAA,CAAApqB,KAAA,SAAAiP,UAAA,GACAob,eAAA,CAAArqB,KAAA,SAAAiP,UAAA,GACAqb,mBAAA,CAAAtqB,KAAA,SAAAiP,UAAA,GACAsb,SAAA,CAAAvqB,KAAA,SAAAskB,OAAA,OAAArV,UAAA,GACAub,UAAA,CAAAxqB,KAAA,SAAAiP,UAAA,GACAwb,UAAA,CAAAzqB,KAAA,SAAAiP,UAAA,GACAyb,SAAA,CAAA1qB,KAAA,SAAAiP,UAAA,GACA0b,SAAA,CAAA3qB,KAAA,SAAAiP,UAAA,GACA2b,UAAA,CAAA5qB,KAAA,SAAAiP,UAAA,MAIA5Y,KAAAO,OAAAwB,QAAAG,UAAAwpB,OACAO,OAAA,EACAuI,UAAA,CAAA,CAAAtc,MAAA,WAAAsc,UAAA,OAAA,CAAAtc,MAAA,WAAAsc,UAAA,OAAA,CAAAtc,MAAA,YAAAsc,UAAA,UAGAj0B,OAAAk0B,kBAAA,CACA/b,WAAAnY,OAAAozB,aACA1b,QAAA,CACA,CACAvG,MAAAtT,aAAAiC,mBAAA,QACA4X,QAAA,CACA,CACAC,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,QACA8X,MAAA,GACA5E,WAAA,CAAAmhB,aAAA,cAAAtc,MAAA,sBAEA,CACAF,MAAA,iBACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,GACA5E,WAAA,CAAAmhB,aAAA,eAAAtc,MAAA,sBAEA,CACAF,MAAA,qBACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CACAmhB,aAAA,qBACAtc,MAAA,iCAEAuc,eAAAv2B,aAAAiC,mBAAA,aAIA,CACA6X,MAAA,WACAC,MAAA,GACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,WAAA,MACAqC,eAAA,sCAAAz2B,aAAAiC,mBAAA,eAAA,UACAkT,WAAA,CAAAmhB,aAAA,WAAAtc,MAAA,kBAAA+Z,SAAA,QACA2C,QAAAv0B,OAAAwB,QAAAG,UAAAsuB,gBACAuE,WAAA,CAAA,OACAJ,eAAA,qGAEA,CACAjjB,MAAAtT,aAAAiC,mBAAA,WACA4X,QAAA,CACA,CACAC,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,eACA8X,MAAA,IACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,YAAA,MACAjf,WAAA,CAAAmhB,aAAA,YAAAtc,MAAA,kBAAA+Z,SAAA,QACA2C,QAAAv0B,OAAAwB,QAAAG,UAAAuuB,kBAEA,CACAvY,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,IACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,YAAA,MACAjf,WAAA,CAAAmhB,aAAA,YAAAtc,MAAA,kBAAA+Z,SAAA,QACA2C,QAAAv0B,OAAAwB,QAAAG,UAAAwuB,eACAqE,WAAA,CAAA,OACAJ,eAAA,0GAIA,CACAjjB,MAAAtT,aAAAiC,mBAAA,SACA4X,QAAA,CACA,CACAC,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,eACA8X,MAAA,IACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,WAAA,MACAjf,WAAA,CAAAmhB,aAAA,WAAAtc,MAAA,kBAAA+Z,SAAA,QACA2C,QAAAv0B,OAAAwB,QAAAG,UAAAyuB,iBAEA,CACAzY,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,IACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,WAAA,MACAjf,WAAA,CAAAmhB,aAAA,WAAAtc,MAAA,kBAAA+Z,SAAA,QACA2C,QAAAv0B,OAAAwB,QAAAG,UAAA0uB,aACAmE,WAAA,CAAA,OACAJ,eAAA,uGAIA,CACAzc,MAAA,YACAC,MAAA,IACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,YAAA,MACAqC,eAAA,sCAAAz2B,aAAAiC,mBAAA,gBAAA,UACAkT,WAAA,CAAAmhB,aAAA,YAAAtc,MAAA,qBACA0c,QAAAv0B,OAAAwB,QAAAG,UAAA2uB,cAEA,CACApY,SAAA,0FACAoc,eAAA,sCAAAz2B,aAAAiC,mBAAA,cAAA,UACA8X,MAAA,GACA5E,WAAA,CAAAmhB,aAAA,iBACAI,QAAAv0B,OAAAwB,QAAAG,UAAA4uB,iBAEA,CACArY,SAAA,wFACAoc,eAAA,sCAAAz2B,aAAAiC,mBAAA,YAAA,UACA8X,MAAA,GACA5E,WAAA,CAAAmhB,aAAA,iBAGA1b,UAAA,EACAE,UAAA,EACAN,UAAA,EACAG,aAAA,EACA/I,YAAA,EACAglB,YAAA,SAAAnd,SACAzM,QAAAyM,QAAAgW,OAAAziB,WAAA,GACAA,QAAA,KACAqnB,UAAArnB,QAAAiP,QACAqY,SAAAtnB,QAAA6pB,SAAA5a,UAGA6a,UAAA,SAAArd,GAEAtX,OAAA40B,mBAEAC,KAAA,SAAAvd,MAEA,IAAAwd,YAAAxd,KAAAoa,UAAAzY,KAAA,SAOAmZ,uBANA0C,YAAA/hB,KAAA,QAMAuE,KAAA+a,QAMAyC,YAAAtd,SACAsd,YAAAC,SAAA,0BALAD,YAAAE,KAAA,YAAA,GAQA9lB,KAAAjB,EAAA,eAAAxO,KAAA,aACAw1B,YAAAhnB,EAAAiB,KAAAgmB,MAAAC,WAAAlc,KAAA,iBAEA/J,KAAArE,QAAAoqB,gBAsEAj1B,OAAAo1B,oBAAA,SAAA7d,SAAAoa,WAEA,aAAAA,WAEA3xB,OAAAq1B,aAAA9d,UAGA,cAAAoa,WAEA3xB,OAAAs1B,gBAAA/d,UAGA,cAAAoa,WAEA3xB,OAAAu1B,gBAAAhe,UAGA,aAAAoa,WAEA3xB,OAAAw1B,eAAAje,UAGA,aAAAoa,WAEA3xB,OAAAy1B,eAAAle,WAIAvX,OAAA40B,gBAAA,WAGA3mB,EAAA,kBAAA0hB,KAAA,SAAA7V,MAAA4b,KAGA,IAEAne,SAFA,EAAAuC,QAEAvC,SAAAtJ,EAAA,eAAAxO,KAAA,aAAA8X,SAAArD,MAEAjG,EAAAynB,KACAzc,KAAA,MAEA0W,KAAA,SAAA7V,MAAA6b,WAEA,IAAAC,KAAA3nB,EAAA0nB,WACAhE,UAAAiE,KAAA7iB,KAAA,cACAqf,uBAAAT,UAAApa,YAEAqe,KAAAb,SAAA,qBACAa,KAAA5mB,YAAA,mBAEA,kBAAA2iB,WAEAiE,KAAA3c,KAAA,KAAAzH,QAWAxR,OAAA61B,wCAAAD,YAOA51B,OAAA81B,uBAAA,WAGA91B,OAAAwB,QAAAG,UAAAwpB,OAAA4K,KAAA,SAAAC,OAEA,OAAA,EAAAA,MAAAxC,eAKAxzB,OAAA+W,MAAAkf,WAAAC,WAAA,eAGAl2B,OAAAwB,QAAAG,UAAAsuB,iBAEAjwB,OAAA+W,MAAAkf,WAAAC,WAAA,aAIAl2B,OAAA0K,IAAA,qBAAA,SAAAC,MAAAwrB,QAGA,IAAAjnB,KAAAjB,EAAA,eAAAxO,KAAA,aAMA02B,SAAAn2B,OAAA+W,MAAAkf,aAEA/mB,KAAAiJ,WAAA1Y,KAAAO,OAAAwB,QAAAG,UAAAwpB,QACAld,EAAA,eAAAgL,KAAA,SAAAmd,GAAA,UAAAxD,eACA5yB,OAAA81B,yBAEA91B,OAAAq2B,yBAIAr2B,OAAA61B,wCAAA,SAAAD,MAGA,IAAAjE,UAAAiE,KAAA7iB,KAAA,cAEA6iB,KAAAU,KAAA,CACAhD,GAAA,QAAA3B,UACAlV,QAAA,CACArL,KAAA,IAEAmlB,SAAA,CACAC,OAAA,CACA1uB,GAAA,GAAA2uB,GAAA,KAGA1b,MAAA,CACA2b,QAAA,kBAIAd,KAAAU,KAAA,WAAA,IAIAt2B,OAAA22B,wCAAA,SAAAC,KAAAjF,YAAAkF,cAAAC,iBAGA,IAAAC,IAAA,EAEAC,UAAA,EAAAH,cAAAx3B,OACA43B,YAAA,EAAAH,gBAAAz3B,OAEAu2B,KAAAgB,KAAA3d,KAAA,gBAAA0Y,YAAA,MAMA,GAHAiE,KAAA5mB,YAAA,YACA4mB,KAAA5mB,YAAA,cAEAgoB,WAAAC,YACA,CAEAC,YAAAjpB,EAAA,eAEA,GAAA+oB,UACA,CAEA,IADA,IAAAlV,UAAA7T,EAAA,oCAAApQ,aAAAiC,mBAAA,SAAA,YACAi3B,IAAA,EAAAA,IAAAF,cAAAx3B,OAAA03B,MAEAjV,UAAAqV,OAAA,wCAAAN,cAAAE,KAAA,SAGAG,YAAAC,OAAArV,WAGA,GAAAmV,YACA,CACA,IAAAG,YAAAnpB,EAAA,sCAAApQ,aAAAiC,mBAAA,WAAA,YACA,IAAAi3B,IAAA,EAAAA,IAAAD,gBAAAz3B,OAAA03B,MAEAK,YAAAD,OAAA,wCAAAL,gBAAAC,KAAA,SAGAG,YAAAC,OAAAC,aAGAxB,KAAAU,KAAA,SAAA,eAAAY,aAEAF,WAEApB,KAAAb,SAAA,YACAa,KAAAU,KAAA,SAAA,gBAAA,wBAGAV,KAAAb,SAAA,cACAa,KAAAU,KAAA,SAAA,gBAAA,yBAGAV,KAAAU,KAAA,WAAA,QAIAV,KAAAU,KAAA,WAAA,IAIA,IAAAe,6BAEA,SAAArB,MAAAsB,OAEA,IAsBAC,eAtBAC,SAAA,EAEAZ,KAAA3oB,EAAA,eAAAxO,KAAA,aAAAy1B,MAAAjc,KAAA,gBAAA+c,MAAAyB,IAAA,MAGAz3B,OAAAwB,QAAAG,UAAAsuB,kBAGAyH,eAAA,GAAAC,iBAAA,IAGAz6B,QAAAgF,yBAAA8zB,MAAArC,WAAA,IAAAqC,MAAArC,WAAA,EAAAqC,MAAAnC,WAAA,EAAAmC,MAAAjC,WAEAyD,SAAA,EAEAE,eAAAz5B,KAAAJ,aAAAiC,mBAAA,kBAIAE,OAAAwB,QAAAG,UAAAsuB,iBAAA/yB,QAAAgF,yBAAA8zB,MAAAhC,YAAA92B,QAAAgF,yBAAA8zB,MAAA4B,kBAGAL,eAAAvB,MAAArC,SAAAqC,MAAAjC,SAEA8D,KAAAC,IAAAP,eAAAvB,MAAAnC,WAAA7zB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,sDAAA,EAAAsN,gBAAA,EAAAvB,MAAAnC,WAAA,EAAA7zB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,sDAEA0N,iBAAA15B,KAAAJ,aAAAiC,mBAAA,yBAGA+3B,KAAAC,IAAA9B,MAAArC,SAAAqC,MAAAhC,WAAAh0B,OAAAwB,QAAAG,UAAAsnB,QAAAc,8CAAA,EAAAiM,MAAArC,UAAA,EAAAqC,MAAAhC,WAAA,EAAAh0B,OAAAwB,QAAAG,UAAAsnB,QAAAc,8CAEA4N,iBAAA15B,KAAAJ,aAAAiC,mBAAA,yBAIAE,OAAA22B,wCAAAC,KAAA,WAAAc,eAAAC,mBAIA,IAAAI,eAAA,GAAAC,iBAAA,GACA,EAAAhC,MAAAlC,WAEAkC,MAAAlC,SAAAkC,MAAAiC,YAAAj4B,OAAAwB,QAAAG,UAAA4uB,iBAEAyH,iBAAA/5B,KAAAJ,aAAAiC,mBAAA,gBAEAk2B,MAAAlC,UAAA9zB,OAAA8wB,WACA0G,SAAA,EACAO,eAAA95B,KAAAJ,aAAAiC,mBAAA,uBAGAE,OAAA22B,wCAAAC,KAAA,WAAAmB,eAAAC,kBAGAE,eAAA,GAAAC,iBAAA,GACA,EAAAnC,MAAApC,YAEAoC,MAAApC,UAAAoC,MAAAoC,aAAAp4B,OAAAwB,QAAAG,UAAA4uB,iBAEA4H,iBAAAl6B,KAAAJ,aAAAiC,mBAAA,gBAEAk2B,MAAApC,WAAA5zB,OAAA8wB,WACA0G,SAAA,EACAU,eAAAj6B,KAAAJ,aAAAiC,mBAAA,yBAGAE,OAAA22B,wCAAAC,KAAA,YAAAsB,eAAAC,kBAGAE,iBAAA,GAUA,OATAn7B,QAAAgF,yBAAA8zB,MAAAhC,YAAA92B,QAAAgF,yBAAA8zB,MAAA4B,kBAEAC,KAAAC,IAAA9B,MAAAhC,YAAAh0B,OAAA8wB,UAAA+G,KAAAC,IAAA9B,MAAAhC,UAAAgC,MAAA4B,gBAAA53B,OAAAwB,QAAAG,UAAAsnB,QAAAY,yCAAA,EAAAmM,MAAAhC,WAAA,EAAAgC,MAAA4B,gBAAA,EAAA53B,OAAAwB,QAAAG,UAAAsnB,QAAAY,0CAEAwO,iBAAAp6B,KAAAJ,aAAAiC,mBAAA,2BAGAE,OAAA22B,wCAAAC,KAAA,YARA,GAQAyB,kBAEAb,SAIAx3B,OAAAs4B,eAAA,WAGA,IAAAd,SAAA,EAEAvB,WAAAhoB,EAAA,eAAAxO,KAAA,aAOA,OALAvC,QAAA4P,QAAAmpB,WAAA9d,WAAA1Y,OAAA,SAAAu2B,OAEAwB,QAAAA,SAAAH,6BAAArB,SAGAwB,SAGA,IAAAe,UAAAr6B,WAAAwM,IAAA,gCAAA,SAAAC,MAAAlL,MAEAO,OAAAgE,aAAAM,aAAA3C,UAAAwpB,OACAnrB,OAAAqxB,aACArxB,OAAAgE,aAAAM,aAAA3C,UAAAypB,MAEAprB,OAAAwB,QAAAG,UAAAuqB,SACAlsB,OAAAgD,KAAA,iCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAEAhsB,OAAAgD,KAAA,kCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAEAhsB,OAAAgE,aAAAM,aAAA3C,UAAAupB,WAEAlrB,OAAAwB,QAAAG,UAAAuqB,SACAlsB,OAAAgD,KAAA,sCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAEAhsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAIAhsB,OAAAwB,QAAAG,UAAAuqB,SACAlsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAEAhsB,OAAAgD,KAAA,wCAAAhD,OAAAwB,QAAAG,UAAAqqB,gBAKAhsB,OAAA0K,IAAA,WAAA6tB,WAEAv4B,OAAAqxB,WAAA,WAEArxB,OAAAkU,KAEAhX,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,SAAAiB,KAAA1Q,OAEA0Q,KAAAC,UAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,UACAzqB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAF,QAEAwF,uBAAAwI,mBACAx4B,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IACAzG,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAA+N,MACAz4B,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,I,KACA,SAAA9vB,MAMAO,OAAAwB,QAAAG,UAAAwpB,OAAA1rB,KAAAi5B,gBACA14B,OAAAwB,QAAAG,UAAAg3B,qBAAAl5B,KAAAm5B,qBACA54B,OAAAwB,QAAAG,UAAAsuB,gBAAAxwB,KAAAo5B,gBACA74B,OAAAwB,QAAAG,UAAAuuB,iBAAAzwB,KAAAq5B,iBACA94B,OAAAwB,QAAAG,UAAAwuB,eAAA1wB,KAAAs5B,eACA/4B,OAAAwB,QAAAG,UAAAyuB,gBAAA3wB,KAAAu5B,gBACAh5B,OAAAwB,QAAAG,UAAA0uB,aAAA5wB,KAAAw5B,aACAj5B,OAAAwB,QAAAG,UAAA2uB,aAAA7wB,KAAAy5B,aACAl5B,OAAAwB,QAAAG,UAAA4uB,gBAAA9wB,KAAA05B,gBAEAn5B,OAAAmzB,uBAEAnzB,OAAAwwB,cAAA,EAEA,EAAAxwB,OAAAwB,QAAAG,UAAAwpB,OAAA9rB,SACAW,OAAAgxB,iBAAAhxB,OAAAwB,QAAAG,UAAAsnB,QAAAU,uBAAA3pB,OAAAwB,QAAAG,UAAAwpB,OAAA,GAAAiO,WAAA,IAAAp5B,OAAAwB,QAAAG,UAAAwpB,OAAA,GAAAkO,YA2BAC,UAAAp7B,WAAAwM,IAAA,kBAAA,SAAAC,MAAA8iB,MAEA,UAAAA,OAAAztB,OAAAwB,QAAAG,UAAAuqB,UAAAlsB,OAAAgxB,gBAAAhxB,OAAAozB,aAAAmG,cAEAv5B,OAAAw5B,WAAA,IAAA,GAAA,KAGAx5B,OAAA0K,IAAA,WAAA4uB,WAEAt5B,OAAA4K,KAAA,SAAAtI,OAEAtC,OAAAwB,QAAAG,UAAAuqB,UAAAlsB,OAAAgxB,gBAAAhxB,OAAAozB,aAAAmG,aAEAv5B,OAAAw5B,WAAAl3B,MAAA,GAAA,GAEAtC,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAAuqB,UAAA,KAIAlsB,OAAA8K,SAAA,SAAAxI,OAEAtC,OAAAwB,QAAAG,UAAAuqB,UAAAlsB,OAAAgxB,gBAAAhxB,OAAAozB,aAAAmG,aAEAv5B,OAAAw5B,WAAAl3B,MAAA,GAAA,GAAA,GAEAtC,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAAuqB,UAAA,KAIAlsB,OAAAooB,MAAA,YAEApoB,OAAAwB,QAAAG,UAAAuqB,UAAAlsB,OAAAgxB,eAEAhxB,OAAAw5B,WAAA,IAAA,GAAA,GAGAx5B,OAAAgD,KAAA,+BAKAhD,OAAAy5B,OAAA,WAEAz5B,OAAA05B,eAAA,EACA15B,OAAAw5B,WAAA,IAAA,GAAA,IAGAx5B,OAAA25B,cAAA,SAAAF,OAAAG,SAEA,IAAAC,wBACA,CACApP,QAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACA8E,cAAAvvB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACA5rB,aAAA3D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACAm2B,gBAAAL,OACAM,oBAAA/5B,OAAAwB,QAAAG,UAAA+pB,MAAAsO,kBAGAj5B,iBAAAk5B,8BAAAJ,yBAAAr1B,KAAA,SAAA/E,MAEAA,KAAAoN,YACA3P,QAAAgF,yBAAAzC,KAAAsN,SAAA,MACA/M,OAAAJ,SAAAC,KAAAJ,KAAAsN,SAAA,GAAA,WASA/M,OAAAiR,WAAAY,QAAApS,KAAAsN,SAAA,GAAA,QAAAlP,aAAAiC,mBAAA,kBAPA,WACAiB,iBAAA+4B,gBAAAD,yBAAAr1B,KAAA,SAAA/E,MACAg6B,SAAAG,SACA55B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,SAQAxuB,iBAAA+4B,gBAAAD,yBAAAr1B,KAAA,SAAA/E,MACAg6B,SAAAG,SACA55B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,SAMAvvB,OAAAk6B,gBAAA,SAAAT,OAAAG,SAEA,IAAAO,kBAAAn6B,OAAAwB,QAAAG,UAAAopB,KAAA,GAGA,IAAAoP,kBAAAC,SAAA,IAAAD,kBAAAE,WAQAr6B,OAAA25B,cAAAF,OAAAG,SANAl5B,SAAA,WACAV,OAAAiR,WAAAS,kBACA,MAOA1R,OAAAw5B,WAAA,SAAAl3B,KAAAm3B,OAAArR,MAAAkS,WAAAV,SAEA,IAQAW,qBARAv6B,OAAAs4B,mBAIAt4B,OAAA6O,gBAAA7O,OAAAw6B,YACAF,WAAAA,aAAA,EACAV,QAAAA,UAAA,EAEAW,qBACA,CACA9zB,IAAAzG,OAAAwB,QAAAG,UAAAwpB,OAAA,GAAAsP,WACAhQ,QAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACAiQ,SAAA16B,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAgQ,SACAC,WAAA36B,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAA+N,MACAmC,kBAAA56B,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IACA8oB,cAAAvvB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACAsL,SAAA76B,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACAwV,UAAA,EACA2hB,GAAA96B,OAAAwB,QAAAG,UAAAwpB,OAAA,GAAA4P,gBACAxP,OAAAvrB,OAAAgE,aAAAM,aAAA3C,UAAAwpB,OAAA1kB,KAGAvJ,QAAA89B,KAAAh7B,OAAAozB,aAAA3zB,OAAAw7B,SAAAj7B,OAAAwB,QAAAG,UAAAwpB,QAGA6E,uBAAAkL,aAAAl7B,OAAAwB,QAAAG,UAAAwpB,QAEA6E,uBAAAmL,oBAAAZ,qBAAAv6B,OAAAwB,QAAAG,UAAAwpB,QAAA3mB,KAAA,SAAA/E,MACA,IAAAyP,KAAAjB,EAAA,eAAAxO,KAAA,aACAO,OAAAwB,QAAAG,UAAAwpB,OAAA1rB,KAAAi5B,gBACAxpB,OACAA,KAAAiJ,WAAA1Y,KAAAA,KAAAi5B,iBAEA14B,OAAAs4B,kBAGAt4B,OAAAwB,QAAAG,UAAAopB,KAAA,GAAAqP,SAAA,EAEAX,OACAz5B,OAAAk6B,iBAAA,EAAAN,SAGAxR,MACApoB,OAAAk6B,iBAAA,EAAAN,SAGA,EAAAt3B,KAAAjD,QACAW,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,EAAAsO,iBAKAt6B,OAAAq1B,aAAA,SAAA9d,UAEAyY,uBAAAoL,cAAA7jB,UACAyY,uBAAAqL,YAAA9jB,SACAvX,OAAAwB,QAAAG,UAAAg3B,qBACA34B,OAAAwB,QAAAG,UAAAmqB,SAAAwP,0BACAt7B,OAAAwB,QAAAG,UAAAmqB,SAAAyP,0BACAv7B,OAAAq2B,uBAGAr2B,OAAAs1B,gBAAA,SAAA/d,UAEAyY,uBAAAwL,0BAAAjkB,UACAyY,uBAAAqL,YAAA9jB,SACAvX,OAAAwB,QAAAG,UAAAg3B,qBACA34B,OAAAwB,QAAAG,UAAAmqB,SAAAwP,0BACAt7B,OAAAwB,QAAAG,UAAAmqB,SAAAyP,yBACAv7B,OAAAwB,QAAAG,UAAAsuB,iBACAjwB,OAAAq2B,uBAGAr2B,OAAAu1B,gBAAA,SAAAhe,UAEAyY,uBAAAqL,YAAA9jB,SACAvX,OAAAwB,QAAAG,UAAAg3B,qBACA34B,OAAAwB,QAAAG,UAAAmqB,SAAAwP,0BACAt7B,OAAAwB,QAAAG,UAAAmqB,SAAAyP,yBACAv7B,OAAAwB,QAAAG,UAAAsuB,iBACAjwB,OAAAq2B,uBAGAr2B,OAAAy1B,eAAA,SAAAle,UAEAyY,uBAAAoL,cAAA7jB,UACAyY,uBAAAqL,YAAA9jB,SACAvX,OAAAwB,QAAAG,UAAAg3B,qBACA34B,OAAAwB,QAAAG,UAAAmqB,SAAAwP,0BACAt7B,OAAAwB,QAAAG,UAAAmqB,SAAAyP,yBACAv7B,OAAAwB,QAAAG,UAAAsuB,iBACAjwB,OAAAq2B,uBAGAr2B,OAAAw1B,eAAA,SAAAje,UAEAyY,uBAAAyL,yBAAAlkB,UACAyY,uBAAAoL,cAAA7jB,UACAyY,uBAAAqL,YAAA9jB,SACAvX,OAAAwB,QAAAG,UAAAg3B,qBACA34B,OAAAwB,QAAAG,UAAAmqB,SAAAwP,0BACAt7B,OAAAwB,QAAAG,UAAAmqB,SAAAyP,yBACAv7B,OAAAwB,QAAAG,UAAAsuB,iBACAjwB,OAAAq2B,uBAGAr2B,OAAAq2B,oBAAA,WAEA,IAAAJ,WAAAhoB,EAAA,eAAAxO,KAAA,aAEAO,OAAAwB,QAAAG,UAAA+5B,YAAA1L,uBAAA2L,0BAAA1F,WAAA9d,WAAA1Y,QACAO,OAAAwB,QAAAG,UAAAi6B,WAAA5L,uBAAA6L,wBAAA5F,WAAA9d,WAAA1Y,QAGAw2B,WAAA9d,WAAA1Y,KAAAw2B,WAAA9d,WAAA1Y,SAGAO,OAAAkzB,sBAAA,WACA,IAGAroB,QAMAixB,SATA7F,WAAAhoB,EAAA,eAAAxO,KAAA,aAEAqM,MAAAomB,aACArnB,QAAAorB,WAAAprB,QAAAorB,WAAAf,MAAAC,WAAA4G,GAAA5J,UAAAgD,WAAA4G,GAAA7J,YAEAC,SAAAD,UAAA,KAEArnB,QAAAmxB,SAAA,sBAEAF,SAAAjxB,QAAAoxB,QAAA,qBACA,KAGAH,SAAAjxB,QAAA6pB,SAAA9pB,OAAAuqB,SAAA,2BAEAc,WAAAprB,QAAAixB,UACA7F,WAAAiG,SAAAJ,SAAA,OAKA97B,OAAAizB,0BAAA,WACA,IAGApoB,QAKAixB,SARA7F,WAAAhoB,EAAA,eAAAxO,KAAA,aAEAqM,MAAAomB,aACArnB,QAAAorB,WAAAprB,QAAAorB,WAAAf,MAAAC,WAAA4G,GAAA5J,UAAAgD,WAAA4G,GAAA7J,YAEAC,SAAAD,UAAA,KAEArnB,QAAAmxB,SAAA,sBACAF,SAAAjxB,QAAAsxB,QAAA,qBACA,KAEAL,SAAAjxB,QAAA6pB,SAAA0H,OAAAjH,SAAA,0BAEAc,WAAAprB,QAAAixB,UACA7F,WAAAiG,SAAAJ,SAAA,OAKA97B,OAAAq8B,eAAA,SAAA9kB,UAGAvX,OAAAoc,UAAA7E,SAAAA,SACAvX,OAAAoc,UAAAkgB,YAAA/kB,SAAA6gB,YACAp4B,OAAAoc,UAAAmgB,WAAAhlB,SAAA0gB,WACAj4B,OAAAoc,UAAAogB,cAAA,IAAAjlB,SAAAmb,wBACA1yB,OAAAoc,UAAAqgB,eAAA,IAAAllB,SAAAob,0BACA3yB,OAAAoc,UAAAhT,KAAA,EACApJ,OAAAoc,UAAA5G,OAAA3X,aAAAiC,mBAAA,cACAE,OAAAoc,UAAAM,OAAA,GAGA1c,OAAA08B,aAAA,SAAAnlB,UAEAvX,OAAAoc,UAAA7E,SAAAA,SACAvX,OAAAoc,UAAAkgB,YAAA/kB,SAAAolB,WACA38B,OAAAoc,UAAAmgB,WAAAhlB,SAAAqlB,UACA58B,OAAAoc,UAAAogB,eAAA,EACAx8B,OAAAoc,UAAAqgB,gBAAA,EACAz8B,OAAAoc,UAAAhT,KAAA,EACApJ,OAAAoc,UAAA5G,OAAA3X,aAAAiC,mBAAA,YACAE,OAAAoc,UAAAM,OAAA,GAGA1c,OAAA68B,gBAAA,WAEA,GAAA78B,OAAAoc,UAAAkgB,YAAA,GAAAt8B,OAAAoc,UAAAmgB,WAAA,EAEAv8B,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,cAGA,GAAAE,OAAAoc,UAAAmgB,YAAAv8B,OAAA8wB,SACA9wB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oBAAA,cAGA,GAAAE,OAAAoc,UAAAkgB,aAAAt8B,OAAA8wB,SACA9wB,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,aADA,CAKA,OAAAE,OAAAoc,UAAAhT,M,KAEA,EACApJ,OAAAoc,UAAA7E,SAAAulB,oBACA98B,OAAAoc,UAAA7E,SAAA6gB,cAAAp4B,OAAAoc,UAAAkgB,YACAt8B,OAAAoc,UAAA7E,SAAA6gB,YAAAp4B,OAAAoc,UAAAkgB,YACAt8B,OAAAoc,UAAA7E,SAAAwlB,mBACA/8B,OAAAoc,UAAA7E,SAAA0gB,aAAAj4B,OAAAoc,UAAAmgB,WACAv8B,OAAAoc,UAAA7E,SAAA0gB,WAAAj4B,OAAAoc,UAAAmgB,WACAv8B,OAAAs1B,gBAAAt1B,OAAAoc,UAAA7E,UACAvX,OAAAw1B,eAAAx1B,OAAAoc,UAAA7E,UACA,M,KAEA,EACAvX,OAAAoc,UAAA7E,SAAAolB,WAAA38B,OAAAoc,UAAAkgB,YACAt8B,OAAAoc,UAAA7E,SAAAqlB,UAAA58B,OAAAoc,UAAAmgB,WACAv8B,OAAAq2B,sBAKA,IAAAJ,QAAAhoB,EAAA,eAAAxO,KAAA,aAEAqM,MAAAomB,aACArnB,QAAAorB,QAAAprB,QAAAorB,QAAAf,MAAAC,WAAA4G,GAAA5J,UAAAgD,WAAA4G,GAAA7J,YAEAC,SAAAD,UAAA,KACArnB,QAAA,GAAAmyB,UAAAC,IAAA,iBAGAj9B,OAAAoc,UAAA,GACApc,OAAAoc,UAAAM,OAAA,O,WAGA,0BAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,WAAA,wBAAA,YAAA,eAAA,eAAA,YAAA,eAAA,mBAAA,WAAA,SAAA1c,OAAA9B,WAAAgX,aAAAnU,iBAAAJ,QAAAD,SAAAw8B,sBACA98B,UAAAE,aAAAggB,aAAAlN,UAAAvV,aAAAse,iBAAAwO,uBAIA3qB,OAAA+W,MAAA,GAEA/W,OAAAwB,QAAAG,UAAAqqB,aAAA,EACAhsB,OAAAoc,UAAA,GACApc,OAAAm9B,aAAA,EACAn9B,OAAAo9B,qBAAA,EAGAp9B,OAAA0K,IAAA,WAAA,WAEAxM,WAAA6yB,iBAAA,KAGA/wB,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAxB,OAAAwB,SAAA,GAEAxB,OAAAwB,QAAAG,UAAAuqB,UAAA,EAAA9rB,UAAAisB,OAAA7pB,QAAA,wBACA0S,aAAA8W,eAEAhsB,OAAAwB,QAAAG,UAAAqqB,aAAA9W,aAAA8W,cAEAhsB,OAAAwB,QAAAG,UAAA07B,cAAA,GACAr9B,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwB,QAAAG,UAAA+pB,MAAA,GACA1rB,OAAAwB,QAAAG,UAAAypB,MAAA,GACAprB,OAAAwB,QAAAG,UAAA27B,YAAA,GAEAt9B,OAAAwB,QAAAG,UAAAsnB,SAEAloB,iBAAAuoB,oBAAAtpB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,GAAAc,KACA,SAAA/E,MAEAO,OAAAwB,QAAAG,UAAAsnB,QAAA,GACAjpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA9pB,KAAA+pB,eACAxpB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,aAAAhqB,KAAAiqB,gBACA1pB,OAAAwB,QAAAG,UAAAsnB,QAAAU,sBAAAlqB,KAAAmqB,sBAEA5pB,OAAAwB,QAAAG,UAAAsnB,QAAAY,wCAAApqB,KAAAqqB,wCACA9pB,OAAAwB,QAAAG,UAAAsnB,QAAAc,6CAAAtqB,KAAAuqB,6CACAhqB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,qDAAAxqB,KAAAyqB,qDAEAlqB,OAAAgE,aAAAomB,6BAAApqB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,IACAvpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,GAAAc,kBAGArqB,OAAAgE,aAAAomB,6BAEApqB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAlH,UAAAkC,KAAA,iCAMA,EAAAtC,OAAAwB,QAAAG,UAAAqqB,cAGAjrB,iBAAAkwB,wBACAjxB,OAAAwB,QAAAG,UAAAqqB,aACAhsB,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAwY,GACAla,OAAAwB,QAAAG,UAAAuqB,U,KACA,SAAAzsB,KAEAO,OAAAwB,QAAAG,UAAA+pB,MAAAjsB,IAAAksB,eAAAA,eACA3rB,OAAAwB,QAAAG,UAAAopB,KAAAtrB,IAAAksB,eAAAC,cACA5rB,OAAAwB,QAAAG,UAAAmN,KAAArP,IAAAksB,eAAAE,cACA7rB,OAAAwB,QAAAG,UAAAmqB,SAAArsB,IAAAksB,eAAAI,kBAGAmF,IAAAvG,SAAAwG,cAAA,QAAAnxB,OAAAwB,QAAAG,UAAAopB,MACA/qB,OAAAgE,aAAAM,aAAAiqB,YAAA2C,IAAA3C,YACAvuB,OAAAgE,aAAAM,aAAAkqB,WAAA0C,IAAA1C,WAEAtwB,WAAAic,WAAA,wBAAAna,OAAAwB,QAAAG,UAAAuqB,SAAAlsB,OAAAwB,QAAAG,UAAAqqB,cAEA,IAAAoF,SAAA,EACAl0B,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAopB,KAAA,SAAAC,IAAAlR,OAEA,UAAAkR,IAAAC,WAEAjrB,OAAAu9B,WAAA,GACAnM,SAAA,KAGAA,SAEApxB,OAAAgD,KAAA2nB,SAAA2G,eAAA,QAAAtxB,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAAuqB,UAAA,KAEA,WAEA9rB,UAAAkC,KAAA,gCAMAtC,OAAAgE,aAAAM,aAAAitB,UAAA,IACAvxB,OAAAwB,QAAAG,UAAA67B,UAAA,GAGA,IAAAjF,UAAAr6B,WAAAwM,IAAA,gCAAA,SAAAC,MAAAlL,MAEAO,OAAAgE,aAAAM,aAAA3C,UAAAypB,MACAprB,OAAAu9B,WAAA,GAGAv9B,OAAAwB,QAAAG,UAAAuqB,SACAlsB,OAAAgD,KAAA,sCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAEAhsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAqqB,gBAKAhsB,OAAA0K,IAAA,WAAA6tB,WAEA,SAAA9G,mBAAAC,UAAAphB,SAEA,IAAAqhB,UAAA,IAAArhB,QAAAqH,MAAA,IAEAia,SAAA3jB,EAAAyjB,WAAA3e,KAAA,kBAIA,IAAA6e,WAAA,IAAAA,SAEA3jB,EAAA,4BAAAqC,QAAAqH,MAAA,sBAAArH,QAAAqH,MAAA,4CAAAga,UAAA,kCAAA9zB,aAAAiC,mBAAA,YAAA,OAYAmO,EAAA,4BAAAqC,QAAAqH,MAAA,sBAAArH,QAAAqH,MAAA,4CAAAga,UAAA,U,SAXAD,W,oBACA,CACAd,SAAA,EACAlD,OAAA,IACAoE,IAAA,IACAC,IAAA,EACAlB,UAAA,EACA4M,eAAA,IAkBA,SAAAxL,cAAAta,MAAA+V,QAEA,MAAA,4BAAA/V,MAAA,MAAA+V,OAAA,OAAAvR,iBAAAwU,YAAA,cAGA,SAAA+M,mBAAAhM,UAAAphB,SAEArC,EAAA,gBAAAqC,QAAAqH,MAAA,qEAAArH,QAAAqH,MAAA,yD,SAEA+Z,W,cACA,CACA4B,GAAA,eACAnb,WAAA,CACA1Y,KAAAO,OAAAwB,QAAAG,UAAAg8B,cAEAlX,OAAA,WACAmX,cAAA//B,aAAAiC,mBAAA,OACA+9B,eAAA,QACAxmB,OAAA,SAAAC,MAGA,IAAAwmB,gBAAA7vB,EAAAqJ,KAAAgW,OAAA/a,QAAA,IAAAmiB,SAAAzb,KAAA,oBAGAhL,EAAAqJ,KAAAgW,OAAA/a,QAAA,IAAAypB,SAAA,aAEA8B,gBAAA/I,SAAA,wBAGA+I,gBAAA9uB,YAAA,uBAEAE,KAAAjB,EAAA,cAAAxO,KAAA,aAEAs+B,gBAAA9vB,EAAA,oBAEA+vB,gBAAA9uB,KAAAqI,SAAAwmB,iBAEA,iBAAAztB,QAAAqH,MAEA3X,OAAAi+B,oBAAAD,iBAGAh+B,OAAAk+B,2BAAAF,kBAIA9pB,KAAA/M,UAAA,IAAA+M,KAAA6S,gBAEA7S,KAAA/M,MAAA,IACA+M,KAAAiqB,cAAA,CACAh3B,MAAA,GACAwQ,MAAAzD,KAAA5D,QAAAstB,cACA5lB,SAAA,eAKAR,OAAA,SAAAF,GAGApD,KAAAqD,SAAAD,EAAAtK,KAAA8M,YAIA7L,EAAA,yCAAAqC,QAAAqH,MAAA,aAAAqa,SAAAN,WAIA,SAAA0M,wBAAA7mB,UAEA,OAAAvX,OAAAwB,QAAAG,UAAAg8B,aAAA1kB,KAAA,CAAAolB,MAAA9mB,SAAA+mB,eAAA73B,IAqTA,SAAAmsB,cAAAtb,UAEA,IAEApI,KAEArE,QAJAyM,SAAAub,UAAA9b,MAAA+b,KAAAC,OAIAloB,SAFAqE,KAAAjB,EAAA,cAAAxO,KAAA,cAEAoL,WAEAmxB,SAAA,sBAEAF,SAAAjxB,QAAAoxB,QAAA,qBACA,KAGApxB,QAAA6pB,SAAA9pB,OACAkxB,SAAAjxB,QAAA6pB,SAAA9pB,OAAAuqB,SAAA,2BAEAjmB,KAAArE,QAAAixB,UACA5sB,KAAAgtB,SAAAJ,SAAA,MAnUA97B,OAAAu+B,kBAAA,SAAAhnB,UACA,IAAAinB,SAAAvwB,EAAA,cAAAxO,KAAA,aAAA0Y,WAAAsmB,SAAAlnB,SAAAkgB,KAEAlgB,SAAAmnB,YACAF,SAAAG,IAAA,aAAA,GACAH,SAAAG,IAAA,aAAA,GACAH,SAAAG,IAAA,aAAA,GACAH,SAAAG,IAAA,WAAA,GACAH,SAAAG,IAAA,iBAAA,GACAH,SAAAG,IAAA,gBAAA,KAIA3+B,OAAA4+B,oBAAA,WAGA5+B,OAAA6+B,YAAA,IAAA9nB,MAAAtX,KAAA2Y,WAAA,CACAib,OAAA,CACAhB,MAAA,CACAkB,OAAA,CACAuL,OAAA,CAAA11B,KAAA,SAAAiP,UAAA,GACA0mB,UAAA,CAAA31B,KAAA,SAAAiP,UAAA,GACAqb,mBAAA,CAAAtqB,KAAA,SAAAiP,UAAA,GACAqmB,UAAA,CAAAt1B,KAAA,WACA41B,WAAA,CAAA51B,KAAA,UACA61B,WAAA,CAAA71B,KAAA,UACAk1B,aAAA,CAAAl1B,KAAA,UACA81B,SAAA,CAAA91B,KAAA,UACA+1B,gBAAA,CAAA/1B,KAAA,UACAg2B,kBAAA,CAAAh2B,KAAA,UACAi2B,cAAA,CAAAj2B,KAAA,UACAk2B,YAAA,CAAAl2B,KAAA,UACAm2B,YAAA,CAAAn2B,KAAA,UACAo2B,WAAA,CAAAp2B,KAAA,WACAq2B,MAAA,CAAAr2B,KAAA,aAIA3J,KAAAO,OAAAwB,QAAAG,UAAAypB,MACAM,OAAA,IAGA1rB,OAAA0/B,iBAAA,CACAvnB,WAAAnY,OAAA6+B,YACAnnB,QAAA,CACA,CACAvG,MAAAtT,aAAAiC,mBAAA,SACA4X,QAAA,CACA,CACAC,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,MACA8X,MAAA,GACA5E,WAAA,CAAAmhB,aAAA,SAAAtc,MAAA,qBACAK,SAAA,aAEA,CACAP,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,WACA8X,MAAA,GACA5E,WAAA,CAAAmhB,aAAA,YAAAtc,MAAA,iCACAK,SAAA,gBAEA,CACAP,MAAA,qBACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CACAmhB,aAAA,qBACAtc,MAAA,iCAEAK,SAAA,2BAIA,CACAP,MAAA,YACAC,MAAA,GACAM,SAAA,gFACAoc,eAAA,sCAAAz2B,aAAAiC,mBAAA,SAAA,UACAkT,WAAA,CAAAmhB,aAAA,YAAAtc,MAAA,gCAAA8nB,WAAA,iCAEA,CACAxuB,MAAAtT,aAAAiC,mBAAA,QACA4X,QAAA,CACA,CACAC,MAAA,aACAC,MAAA,GACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,aAAA,MACAqC,eAAA,qGACAthB,WAAA,CAAAmhB,aAAA,aAAAtc,MAAA,oBAEA,CACAF,MAAA,aACAC,MAAA,GACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,aAAA,MACAqC,eAAA,sGACAthB,WAAA,CAAAmhB,aAAA,aAAAtc,MAAA,oBAEA,CACAF,MAAA,eACAxG,MAAAtT,aAAAiC,mBAAA,WACA8X,MAAA,GACAyc,OAAAqJ,mBACAxlB,SAEAkmB,wBAEAprB,WAAA,CAAAmhB,aAAA,eAAAtc,MAAA,oBAEA,CACAF,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,IACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,WAAA,MACAjf,WAAA,CAAAmhB,aAAA,WAAAtc,MAAA,sBAIA,CACA1G,MAAAtT,aAAAiC,mBAAA,SACA4X,QAAA,CACA,CACAC,MAAA,kBACAC,MAAA,GACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,kBAAA,KACAqC,eAAA,sGACAthB,WAAA,CAAAmhB,aAAA,kBAAAtc,MAAA,oBAEA,CACAF,MAAA,oBAAAxG,MAAAtT,aAAAiC,mBAAA,WAAA8X,MAAA,GAAAyc,OAAAqJ,mBACAxlB,SAEAkmB,wBAEAprB,WAAA,CAAAmhB,aAAA,oBAAAtc,MAAA,oBAEA,CACAF,MAAA,gBACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,IACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,gBAAA,MACAjf,WAAA,CAAAmhB,aAAA,gBAAAtc,MAAA,sBAIA,CACA1G,MAAAtT,aAAAiC,mBAAA,kBACA4X,QAAA,CACA,CACAC,MAAA,cACAC,MAAA,GACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,cAAA,KACAqC,eAAA,4GACAthB,WAAA,CAAAmhB,aAAA,cAAAtc,MAAA,oBAEA,CACAF,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,GACAyc,OAAA5C,mBACAvZ,SAAA+Z,cAAA,cAAA,MACAjf,WAAA,CAAAmhB,aAAA,cAAAtc,MAAA,sBAIA,CACAF,MAAA,aACAC,MAAA,GACAM,SAAA,8EACAoc,eAAA,sCAAAz2B,aAAAiC,mBAAA,YAAA,UACAkT,WAAA,CAAAmhB,aAAA,aAAAtc,MAAA,mCAIAY,UAAA,EACAE,UAAA,EACAN,UAAA,EACA5I,YAAA,EACA+I,aAAA,EACAmc,UAAA,SAAArd,GAEA5W,SAAA,WAEAV,OAAA4/B,iBACA,MAGA/K,KAAA,SAAAvd,MAEA,IAEAwd,YADA,EAAAxd,KAAAoa,UAAAzY,KAAA,SAAA5Z,OACAiY,KAAAoa,UAAAzY,KAAA,iBAAA4mB,OAGAvoB,KAAAoa,UAAAzY,KAAA,SAEA6b,YAAA/hB,KAAA,QAEA+hB,YAAAtd,SACAsd,YAAAC,SAAA,yBAEA7lB,KAAAjB,EAAA,cAAAxO,KAAA,aACAw1B,YAAAhnB,EAAAiB,KAAAgmB,MAAAC,WAAAlc,KAAA,iBAEA/J,KAAArE,QAAAoqB,gBAMAj1B,OAAA0K,IAAA,qBAAA,SAAAC,MAAAwrB,QAGA,IAAAjnB,KAAAjB,EAAA,cAAAxO,KAAA,aAMA02B,SAAAn2B,OAAA+W,MAAA+oB,YAEA5wB,KAAAiJ,WAAA1Y,KAAAO,OAAAwB,QAAAG,UAAAypB,OAEAnd,EAAA,cAAAgL,KAAA,SAAAmd,GAAA,UAAAxD,eAEA5yB,OAAA+/B,qBAAA7wB,SAKAlP,OAAA4/B,cAAA,WAGA3xB,EAAA,iBAAA0hB,KAAA,SAAA7V,MAAA4b,KAGA,EAAA5b,QAEA7L,EAAA,cAAAxO,KAAA,aAAA8X,SAAArD,MAEAjG,EAAAynB,KACAzc,KAAA,MAEA0W,KAAA,SAAA7V,MAAA6b,WAEA,IAAAC,KAAA3nB,EAAA0nB,WACAhE,UAAAiE,KAAA7iB,KAAA,cAGA/S,OAAA61B,wCAAAD,MAGA,eAAAjE,YAGA,UAAA1jB,EAAA,cAAA8E,KAAA,eAEA6iB,KAAA5mB,YAAA,mBAEA4mB,KAAA3c,KAAA,SACAlG,KAAA,YAAA,IAIA6iB,KAAAQ,GAAA,SAAA,mBAAA,SAAA9e,GAEArJ,EAAA,cAAAxO,KAAA,aACA8X,SAAAtJ,EAAAqJ,EAAA0oB,QAAAC,QAAA,OAEAtB,IAAA,aAAAzqB,KAAAgsB,YAKA,cAAAvO,YAGA,UAAA1jB,EAAA,cAAA8E,KAAA,eAEA6iB,KAAA5mB,YAAA,mBAEA4mB,KAAA3c,KAAA,SACAlG,KAAA,YAAA,IAIA6iB,KAAAQ,GAAA,SAAA,qBAAA,SAAA9e,GAEArJ,EAAA,cAAAxO,KAAA,aACA8X,SAAAtJ,EAAAqJ,EAAA0oB,QAAAC,QAAA,gBAkCAjgC,OAAA+/B,qBAAA,SAAA7wB,MAEAlP,OAAAwB,QAAAG,UAAAw+B,gBAAAngC,OAAAwB,QAAAG,UAAAy+B,cACAlxB,KAAAgnB,WAAA,cAGAl2B,OAAAwB,QAAAG,UAAAy+B,eACAlxB,KAAAgnB,WAAA,cACAhnB,KAAAgnB,WAAA,iBAGAl2B,OAAAwB,QAAAG,UAAA0+B,mBAAArgC,OAAAwB,QAAAG,UAAAy+B,eACAlxB,KAAAgnB,WAAA,mBACAhnB,KAAAgnB,WAAA,sBAGAl2B,OAAAwB,QAAAG,UAAA0+B,kBACAnxB,KAAAgnB,WAAA,iBAGAl2B,OAAAwB,QAAAG,UAAA2+B,qBACApxB,KAAAgnB,WAAA,eACAhnB,KAAAgnB,WAAA,iBAKAl2B,OAAAo1B,oBAAA,SAAA7d,SAAAoa,WAEA,eAAAA,YAEApa,SAAAynB,WAAAznB,SAAAynB,YAAA,KAAAznB,SAAAynB,WAAAznB,SAAAynB,WAAA,EACAh/B,OAAAi+B,oBAAA1mB,WAGA,eAAAoa,YAEApa,SAAA0nB,WAAA1nB,SAAA0nB,YAAA,KAAA1nB,SAAA0nB,WAAA1nB,SAAA0nB,WAAA,EACAj/B,OAAAi+B,oBAAA1mB,WAGA,aAAAoa,YAEApa,SAAA2nB,SAAA3nB,SAAA2nB,UAAA,KAAA3nB,SAAA2nB,SAAA3nB,SAAA2nB,SAAA,EACAl/B,OAAAugC,8BAAAhpB,WAGA,oBAAAoa,YAEApa,SAAA4nB,gBAAA5nB,SAAA4nB,iBAAA,KAAA5nB,SAAA4nB,gBAAA5nB,SAAA4nB,gBAAA,EACAn/B,OAAAk+B,2BAAA3mB,WAGA,kBAAAoa,YAEApa,SAAA8nB,cAAA9nB,SAAA8nB,eAAA,KAAA9nB,SAAA8nB,cAAA9nB,SAAA8nB,cAAA,EACAr/B,OAAAugC,8BAAAhpB,WAGA,gBAAAoa,YAEApa,SAAA+nB,YAAA/nB,SAAA+nB,aAAA,KAAA/nB,SAAA+nB,YAAA/nB,SAAA+nB,YAAA,EACAt/B,OAAAugC,8BAAAhpB,YAMAvX,OAAAi+B,oBAAA,SAAA1mB,UAEA,IAAAinB,SAAAvwB,EAAA,cAAAxO,KAAA,aAAA0Y,WAAAsmB,SAAAlnB,SAAAkgB,KAEA,IAAAlgB,SAAAynB,YAAA,IAAAznB,SAAA0nB,YAAA,IAAA1nB,SAAA2nB,UAAA,IAAA3nB,SAAA4nB,iBAAA,IAAA5nB,SAAA8nB,eAAA,IAAA9nB,SAAA+nB,aACAd,SAAAG,IAAA,aAAA,GAGA,IAAA6B,SAAAtD,sBAAAuD,mBAAAlpB,SACAvX,OAAAwB,QAAAG,UAAA++B,QAEAlC,SAAAG,IAAA,QAAA6B,UAEAG,SAAAzD,sBAAA0D,uBAAArpB,SACAvX,OAAAwB,QAAAG,UAAAk/B,YAEArC,SAAAG,IAAA,WAAAgC,UAEA3gC,OAAAugC,8BAAAhpB,WAGAvX,OAAAugC,8BAAA,SAAAhpB,UAEA,IAAAinB,SAAAvwB,EAAA,cAAAxO,KAAA,aAAA0Y,WAAAsmB,SAAAlnB,SAAAkgB,KAEAyF,sBAAA4D,2BAAA9gC,OAAAwB,QAAAG,UAAA2+B,mBACA/oB,SAAAvX,OAAAwB,QAAAG,UAAAo/B,YAEA,IAAAxpB,SAAAynB,YAAA,IAAAznB,SAAA0nB,YAAA,IAAA1nB,SAAA2nB,UAAA,IAAA3nB,SAAA4nB,iBAAA,IAAA5nB,SAAA8nB,eACAb,SAAAG,IAAA,aAAA,IAKA3+B,OAAAk+B,2BAAA,SAAA3mB,UAEA,IAAAinB,SAAAvwB,EAAA,cAAAxO,KAAA,aAAA0Y,WAAAsmB,SAAAlnB,SAAAkgB,KAEA,IAAAlgB,SAAAynB,YAAA,IAAAznB,SAAA0nB,YAAA,IAAA1nB,SAAA2nB,UAAA,IAAA3nB,SAAA4nB,iBAAA,IAAA5nB,SAAA8nB,eACAb,SAAAG,IAAA,aAAA,GAGA,IAAA6B,SAAAtD,sBAAA8D,oBAAAzpB,UAEAinB,SAAAG,IAAA,aAAA6B,UAEAG,SAAAzD,sBAAA+D,4BAAA1pB,SACAvX,OAAAwB,QAAAG,UAAAk/B,YAEArC,SAAAG,IAAA,gBAAAgC,UAEA3gC,OAAAugC,8BAAAhpB,WAIAvX,OAAAkhC,sBAAA,SAAAC,eAEA,IAAAC,YAAA,EAGA,IAAAphC,OAAAwB,QAAAG,UAAA0/B,cAEA,MAAA,CACAC,YAAA,EACAC,IAAA,EACAC,IAAA,GAKA,GAAAL,cAAAM,kBAAAN,cAAArC,OAEA,IAAA,IAAAh3B,EAAA,EAAAA,EAAA9H,OAAAwB,QAAAG,UAAAypB,MAAA/rB,OAAAyI,IAEA,GAAA9H,OAAAwB,QAAAG,UAAAypB,MAAAtjB,GAAAg3B,SAAAqC,cAAAM,gBACA,CACAN,cAAAnhC,OAAAwB,QAAAG,UAAAypB,MAAAtjB,GACA,MAKA,IAAA45B,WAAAP,cAAAQ,QAAA3hC,OAAAwB,QAAAG,UAAAigC,aAAA,KAAA5hC,OAAAwB,QAAAG,UAAAkgC,eACA9P,IAAAoP,cAAAQ,OAAAD,WACA5P,IAAAqP,cAAAQ,OAAAD,WAEAI,WAAA9hC,OAAA+hC,yBAAAZ,eAQA,OAPAC,YAAAU,WAAA/P,KAAAD,IAAAgQ,cAAAX,cAAAzC,aAIA1+B,OAAAgiC,uBAAA,GAGA,CACAV,WAAAF,WACAG,IAAAxP,IACAyP,IAAA1P,MAIA9xB,OAAA+hC,yBAAA,SAAAE,MAEA,GAAAA,KAAAnD,SAAAmD,KAAAR,gBACA,OAAAQ,KAAA/C,SAGA,IAFA,IAAAgD,gBAAAD,KAAAR,gBACAd,SAAA,EACA74B,EAAA,EAAAA,EAAA9H,OAAAwB,QAAAG,UAAAypB,MAAA/rB,OAAAyI,IAEA9H,OAAAwB,QAAAG,UAAAypB,MAAAtjB,GAAA25B,kBAAAS,kBACAvB,UAAA3gC,OAAAwB,QAAAG,UAAAypB,MAAAtjB,GAAAo3B,UAEA,OAAAyB,UAGA3gC,OAAA61B,wCAAA,SAAAD,MAGA,IAAAjE,UAAAiE,KAAA7iB,KAAA,cAEA6iB,KAAAU,KAAA,CACAhD,GAAA,QAAA3B,UACAlV,QAAA,CACArL,KAAA,IAEAmlB,SAAA,CACAC,OAAA,CACA1uB,GAAA,GAAA2uB,GAAA,KAGA1b,MAAA,CACA2b,QAAA,kBAIAd,KAAAU,KAAA,WAAA,IAIAt2B,OAAA22B,wCAAA,SAAAC,KAAAjF,YAAAkF,cAAAC,iBAGA,IAAAC,IAAA,EAEAC,UAAA,EAAAH,cAAAx3B,OACA43B,YAAA,EAAAH,gBAAAz3B,OAEAu2B,KAAAgB,KAAA3d,KAAA,gBAAA0Y,YAAA,MAMA,GAHAiE,KAAA5mB,YAAA,YACA4mB,KAAA5mB,YAAA,cAEAgoB,WAAAC,YACA,CAEAC,YAAAjpB,EAAA,eAEA,GAAA+oB,UACA,CAEA,IADA,IAAAlV,UAAA7T,EAAA,oCAAApQ,aAAAiC,mBAAA,SAAA,YACAi3B,IAAA,EAAAA,IAAAF,cAAAx3B,OAAA03B,MAEAjV,UAAAqV,OAAA,wCAAAN,cAAAE,KAAA,SAGAG,YAAAC,OAAArV,WAGA,GAAAmV,YACA,CACA,IAAAG,YAAAnpB,EAAA,sCAAApQ,aAAAiC,mBAAA,WAAA,YACA,IAAAi3B,IAAA,EAAAA,IAAAD,gBAAAz3B,OAAA03B,MAEAK,YAAAD,OAAA,wCAAAL,gBAAAC,KAAA,SAGAG,YAAAC,OAAAC,aAGAxB,KAAAU,KAAA,SAAA,eAAAY,aAEAF,WAEApB,KAAAb,SAAA,YACAa,KAAAU,KAAA,SAAA,gBAAA,wBAGAV,KAAAb,SAAA,cACAa,KAAAU,KAAA,SAAA,gBAAA,yBAGAV,KAAAU,KAAA,WAAA,QAIAV,KAAAU,KAAA,WAAA,IAIA,IAAA6L,4BAEA,SAAAF,OAAA3K,OAEA,IAAAE,SAAA,EAEAZ,KAAA3oB,EAAA,cAAAxO,KAAA,aAAAy1B,MAAAjc,KAAA,gBAAAgpB,OAAAxK,IAAA,MAEA2K,aAAA,GAAAC,eAAA,GAGAC,cAAApF,sBAAAqF,0BAAAN,OAAAjiC,OAAAwB,QAAAG,UAAAk/B,YACAoB,OAAA/C,SAAAoD,gBAEAF,aAAAnkC,KAAAJ,aAAAiC,mBAAA,uBACA03B,SAAA,GAGA/qB,OAAAzM,OAAAkhC,sBAAAe,QAQA,OAPAx1B,OAAA60B,YAEAe,eAAApkC,KAAAJ,aAAAiC,mBAAA,2BAAA,IAAA2M,OAAA80B,IAAA,IAAA1jC,aAAAiC,mBAAA,OAAA,IAAA2M,OAAA+0B,KAGAxhC,OAAA22B,wCAAAC,KAAA,WAAAwL,aAAAC,gBAEA7K,SAIAx3B,OAAAwiC,cAAA,WAGA,IAAAhL,SAAA,EAEAsI,UAAA7xB,EAAA,cAAAxO,KAAA,aASA,OAPAO,OAAAgiC,uBAAA,EACAhiC,OAAAyiC,0BAAA,EACAvlC,QAAA4P,QAAAgzB,UAAA3nB,WAAA1Y,OAAA,SAAAwiC,MAEAzK,QAAAA,SAAA2K,4BAAAF,QAGAzK,SAGAx3B,OAAAu9B,UAAA,SAAAmF,mBAEA1iC,OAAAgE,aAAAM,aAAA3C,UAAAypB,QAEAprB,OAAAwB,QAAAG,UAAAuqB,SACAlsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAEAhsB,OAAAgD,KAAA,wCAAAhD,OAAAwB,QAAAG,UAAAqqB,eAGA9uB,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,SAAAiB,KAAA1Q,OAEA0Q,KAAAC,UAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,UACAzqB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAF,QAGA0S,sBAAAK,UACAv9B,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IACAzG,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,I,KACA,SAAA9vB,MAqBA,GAhBAO,OAAAwB,QAAAG,UAAAypB,MAAA3rB,KAAAkjC,eACA3iC,OAAAwB,QAAAG,UAAA27B,YAAA79B,KAAAmjC,qBACA5iC,OAAAwB,QAAAG,UAAAg8B,aAAAl+B,KAAAojC,iBACA7iC,OAAAwB,QAAAG,UAAA++B,OAAAjhC,KAAAqjC,OACA9iC,OAAAwB,QAAAG,UAAAy+B,aAAA3gC,KAAAsjC,aACA/iC,OAAAwB,QAAAG,UAAAw+B,cAAA1gC,KAAAujC,cACAhjC,OAAAwB,QAAAG,UAAA2+B,mBAAA7gC,KAAAwjC,mBACAjjC,OAAAwB,QAAAG,UAAA0+B,iBAAA5gC,KAAAyjC,iBACAljC,OAAAwB,QAAAG,UAAAk/B,WAAAphC,KAAA0jC,WACAnjC,OAAAwB,QAAAG,UAAAo/B,WAAAthC,KAAA2jC,WACApjC,OAAAwB,QAAAG,UAAA0hC,WAAA5jC,KAAA4jC,WACArjC,OAAAwB,QAAAG,UAAA0/B,cAAA5hC,KAAA4hC,cACArhC,OAAAwB,QAAAG,UAAAkgC,eAAApiC,KAAAoiC,eACA7hC,OAAAwB,QAAAG,UAAAigC,aAAAniC,KAAAmiC,aACA5hC,OAAAwB,QAAAG,UAAA2hC,kBAAA7jC,KAAA6jC,kBAEAZ,kBAIA,CACA,IAAAxzB,KAAAjB,EAAA,cAAAxO,KAAA,aACA,GAAAvC,QAAAgF,yBAAAgN,MAAA,OACAA,KAAAiJ,WAAA1Y,KAAAA,KAAAkjC,gBAEA3iC,OAAAwiC,qBAPAxiC,OAAA4+B,sBAUA5+B,OAAAm9B,aAAA,EAEA,EAAAn9B,OAAAwB,QAAAG,UAAA27B,YAAAj+B,SACAW,OAAAo9B,qBAAA,GAGA,EAAAp9B,OAAAwB,QAAAG,UAAAypB,MAAA/rB,SACAW,OAAAujC,gBAAAvjC,OAAAwB,QAAAG,UAAAsnB,QAAAU,uBAAA3pB,OAAAwB,QAAAG,UAAAypB,MAAA,GAAAgO,eAKAp5B,OAAAgiC,uBAAA,EACAhiC,OAAAyiC,0BAAA,EAEAziC,OAAAwjC,sBACA,CACAjzB,KAAA,sBACAkzB,kBAAA5lC,aAAAiC,mBAAA,yCACA4jC,eAAA,WAIA,OAFA1jC,OAAAyiC,0BAAA,IAEAziC,OAAAwB,QAAAG,UAAA0/B,eAAArhC,OAAAwB,QAAAG,UAAA2hC,mBAAAtjC,OAAAgiC,4BAMA,EAAAhiC,OAAAwB,QAAAG,UAAA07B,cAAAh+B,QAAAW,OAAAwB,QAAAG,UAAA0hC,WAAAxkB,MAAA,EAAA7e,OAAAwB,QAAAG,UAAA0hC,WAAAxkB,KAAAxf,WAKAW,OAAAyiC,0BAAA,MAKAziC,OAAA2jC,uBAAA,WAEA11B,EAAA,kCAAA8E,KAAA,QAAA,8BAGA/S,OAAA4jC,wBAAA,WAEA31B,EAAA,kCAAA8E,KAAA,QAAA,sCAGAumB,UAAAp7B,WAAAwM,IAAA,kBAAA,SAAAC,MAAA8iB,MAEA,UAAAA,MAAAztB,OAAAwB,QAAAG,UAAAuqB,UAEAlsB,OAAA6jC,mBAAA,IAAA,GAAA,KAGA7jC,OAAA0K,IAAA,WAAA4uB,WAEAt5B,OAAA4K,KAAA,SAAAtI,MAEAge,aAAAY,wBAIAlhB,OAAAwB,QAAAG,UAAAuqB,UAAAlsB,OAAAujC,cAEAvjC,OAAA6jC,mBAAAvhC,MAAA,GAAA,GAEAtC,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,GAAA,MAIAhsB,OAAA8K,SAAA,SAAAxI,MAEAge,aAAAY,wBAIAlhB,OAAAwB,QAAAG,UAAAuqB,UAAAlsB,OAAAujC,cAEAvjC,OAAA6jC,mBAAAvhC,MAAA,GAAA,GAAA,GAEAtC,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,GAAA,MAIAhsB,OAAAooB,MAAA,SAAA9lB,OAEAtC,OAAAwB,QAAAG,UAAAuqB,UAAAlsB,OAAAujC,cAEAvjC,OAAA6jC,mBAAA,IAAA,GAAA,GAEA7jC,OAAAgD,KAAA,+BAIAhD,OAAAy5B,OAAA,WAEAz5B,OAAA05B,eAAA,EACA15B,OAAA6jC,mBAAA,IAAA,GAAA,IAuCA7jC,OAAA8jC,mBAAA,WApCA,IACAC,WAoCA,EAAA91B,EAAA,uBAAA5O,OACAW,OAAAiR,WAAAC,SAAA,GArCA6yB,WAAAlmC,aAAAiC,mBAAA,0BAGAE,OAAAiR,WAAApR,KAAAkkC,WAFA,yDAIAjgC,WAAA,WAEA9D,OAAAgkC,YAAA,GACA9mC,QAAA89B,KAAAh7B,OAAA0/B,iBAAA1/B,OAAAgkC,aACAhkC,OAAAgkC,YAAA3rB,UAAA,EAGArY,OAAAgkC,YAAAtsB,QAAA,GAAAA,QAAA,GAAA4c,eAAAt0B,OAAAwB,QAAAG,UAAA++B,OAAA,kBAAA,mBACA1gC,OAAAgkC,YAAAtsB,QAAA,GAAAA,QAAA,GAAA4c,eAAAt0B,OAAAwB,QAAAG,UAAA++B,OAAA,mBAAA,mBACA1gC,OAAAgkC,YAAAtsB,QAAA,GAAAA,QAAA,GAAA4c,eAAAt0B,OAAAwB,QAAAG,UAAA++B,OAAA,mBAAA,mBACA1gC,OAAAgkC,YAAAtsB,QAAA,GAAAA,QAAA,GAAA4c,eAAAt0B,OAAAwB,QAAAG,UAAA++B,OAAA,sBAAA,sBAGA,IAAAuD,KAAAh2B,EAAA,uBACAg2B,KAAAC,UAAAlkC,OAAAgkC,aAGAC,KAAAhrB,KAAA,kBAAAlG,KAAA,YAAA,GAIA7D,KAAA+0B,KAAAxkC,KAAA,aACAO,OAAA+/B,qBAAA7wB,MAGAA,KAAAiJ,WAAA1Y,KAAAO,OAAAwB,QAAAG,UAAA27B,aACApuB,KAAAi1B,WACA,KAUAnkC,OAAA25B,cAAA,SAAAF,OAAAG,SAEA,IAAAC,wBACA,CACApP,QAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACA8E,cAAAvvB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACA5rB,aAAA3D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACAm2B,gBAAAL,OACAM,oBAAA/5B,OAAAwB,QAAAG,UAAA+pB,MAAAsO,kBAGAj5B,iBAAAk5B,8BAAAJ,yBAAAr1B,KAAA,SAAA/E,MAEAA,KAAAoN,YACA3P,QAAAgF,yBAAAzC,KAAAsN,SAAA,MACA/M,OAAAJ,SAAAC,KAAAJ,KAAAsN,SAAA,GAAA,WASA/M,OAAAiR,WAAAY,QAAApS,KAAAsN,SAAA,GAAA,QAAAlP,aAAAiC,mBAAA,kBAPA,WACAiB,iBAAA+4B,gBAAAD,yBAAAr1B,KAAA,SAAA/E,MACAg6B,SAAAG,SACA55B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,SAQAxuB,iBAAA+4B,gBAAAD,yBAAAr1B,KAAA,SAAA/E,MACAg6B,SAAAG,SACA55B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,SAMAvvB,OAAAk6B,gBAAA,SAAAT,OAAAG,SAEA,IAAAO,kBAAAn6B,OAAAwB,QAAAG,UAAAopB,KAAA,GAGA,IAAAoP,kBAAAC,SAAA,IAAAD,kBAAAE,WAOAr6B,OAAA25B,cAAAF,OAAAG,SANAl5B,SAAA,WACAV,OAAAiR,WAAAS,kBACA,MAOA1R,OAAA6jC,mBAAA,SAAAvhC,KAAAm3B,OAAArR,MAAAkS,WAAAV,SAMA,GAJAU,WAAAA,aAAA,EACAV,QAAAA,UAAA,EAGA,EAAA3rB,EAAA,4BAAA5O,QAAA,IAAAW,OAAAwB,QAAAG,UAAAypB,MAAA,GAAAgZ,UAAA,CAEA,IAAApkC,OAAAwiC,gBACA,OAEA,GAAAxiC,OAAAgiC,wBACAhiC,OAAAwjC,sBAAAE,iBAGA,OAKA1jC,OAAA6O,gBAAA7O,OAAAqkC,WAEAnnC,QAAA89B,KAAAh7B,OAAA6+B,YAAAp/B,OAAAw7B,SAAAj7B,OAAAwB,QAAAG,UAAAypB,OAEA,IAAAkZ,WAAA,CACA79B,IAAAzG,OAAAwB,QAAAG,UAAAypB,MAAA,GAAAgZ,UACA3Z,QAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACA8E,cAAAvvB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACA8J,OAAAr5B,OAAAwB,QAAAG,UAAAypB,MAAA,GAAAiO,OACAkL,UAAAvkC,OAAAwB,QAAAG,UAAAypB,MAAA,GAAAmZ,UACAzJ,GAAA96B,OAAAwB,QAAAG,UAAAypB,MAAA,GAAA2P,gBACAH,kBAAA56B,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IACA8kB,OAAAvrB,OAAAgE,aAAAM,aAAA3C,UAAAypB,MAAA3kB,IACAo0B,SAAA76B,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA0/B,WAAA,CACA58B,IAAAzG,OAAAwB,QAAAG,UAAA0hC,WAAA58B,IACA+9B,cAAAxkC,OAAAwB,QAAAG,UAAA0hC,WAAAmB,cACA3lB,KAAA7e,OAAAwB,QAAAG,UAAA0hC,WAAAxkB,KACA4lB,QAAAzkC,OAAAwB,QAAAG,UAAA07B,cACAvC,GAAA96B,OAAAwB,QAAAG,UAAA0hC,WAAAvI,GACA/X,UAAA/iB,OAAAwB,QAAAG,UAAA0hC,WAAAtgB,YAIAma,sBAAA2G,mBAAAS,WAAAtkC,OAAAwB,QAAAG,UAAAypB,OAAA5mB,KAAA,SAAA/E,MAEAO,OAAAu9B,WAAA,GAEAv9B,OAAAwB,QAAAG,UAAA07B,cAAA,GAEA5D,QACAz5B,OAAAk6B,iBAAA,EAAAN,gBAMA,GAAAH,OAEA,YADAz5B,OAAAk6B,iBAAA,EAAAN,SAKAxR,MACApoB,OAAAk6B,iBAAA,EAAAN,SAGA,EAAAt3B,KAAAjD,QACAW,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,EAAAsO,cAIAt6B,OAAA0kC,gBAAA,SAAAv9B,OAEA,IAAA,IAAAW,KAAA9H,OAAAwB,QAAAG,UAAAg8B,aAEA,GAAA39B,OAAAwB,QAAAG,UAAAg8B,aAAA71B,KAAAX,MACA,OAAAnH,OAAAwB,QAAAG,UAAAg8B,aAAA71B,O,WAKA,+BAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,6BAAA,YAAA,eAAA,eAAA,WAAA,KAAA,WAAA,YAAA,eAAA,mBAAA,WAAA,SAAA9H,OAAA9B,WAAAgX,aAAAnU,iBAAAJ,QAAAgkC,2BACAvkC,UAAAE,aAAAggB,aAAA5f,SAAAvC,GAAAymC,SAAAxxB,UAAAvV,aAAAse,iBAAAwO,uBAGA3qB,OAAA+W,MAAA,GACA/W,OAAAwB,QAAAG,UAAAqqB,aAAA,EACAhsB,OAAAwB,QAAAG,UAAAupB,WAAA,GACAlrB,OAAAwB,QAAAG,UAAAkjC,eAAA,GACA7kC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA,GACA9kC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAA,GACAjpB,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAA8b,kBAAA,GACA/kC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAA+b,oBAAA,GACAhlC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAgc,mBAAA,GACAjlC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAI,oBAAA,GACAllC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAK,SAAA,EACAnlC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAM,UAAA,EACAplC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAO,YAAA,EACArlC,OAAAslC,kBAAA,EACAtlC,OAAAulC,sBAAA,GAEAvlC,OAAAwlC,YAAA,EAEAxlC,OAAAylC,WAAA,SAAAC,MAKA,IAAAA,KAEA1lC,OAAAwlC,YAAA,GAGAxlC,OAAAwlC,YAAA,EACAxlC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA,KAIA9kC,OAAA2lC,yBAAA,GAGA3lC,OAAA4lC,kBAAA,CAAA5O,WAAA,EAAA6O,iBAAA,IAGA7lC,OAAA0K,IAAA,WAAA,WAEAxM,WAAA6yB,iBAAA,KAGA/wB,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAxB,OAAAwB,SAAA,GAEAxB,OAAAwB,QAAAG,UAAAuqB,UAAA,EAAA9rB,UAAAisB,OAAA7pB,QAAA,6BACA0S,aAAA8W,eAEAhsB,OAAAwB,QAAAG,UAAAqqB,aAAA9W,aAAA8W,cAEAhsB,OAAAwB,QAAAG,UAAA07B,cAAA,GACAr9B,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAmc,iBAAAA,iBAEAnc,OAAA8lC,mBAAA,GAEA9lC,OAAAwB,QAAAG,UAAA+pB,MAAA,GAEA1rB,OAAAwB,QAAAG,UAAAsnB,SAEAloB,iBAAAuoB,oBAAAtpB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,GAAAc,KACA,SAAA/E,MAEAO,OAAAwB,QAAAG,UAAAsnB,QAAA,GACAjpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA9pB,KAAA+pB,eACAxpB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,aAAAhqB,KAAAiqB,gBACA1pB,OAAAwB,QAAAG,UAAAsnB,QAAAU,sBAAAlqB,KAAAmqB,sBAEA5pB,OAAAwB,QAAAG,UAAAsnB,QAAAY,wCAAApqB,KAAAqqB,wCACA9pB,OAAAwB,QAAAG,UAAAsnB,QAAAc,6CAAAtqB,KAAAuqB,6CACAhqB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,qDAAAxqB,KAAAyqB,qDAEAlqB,OAAAgE,aAAAomB,6BAAApqB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,IACAvpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,GAAAc,kBAGArqB,OAAAgE,aAAAomB,6BAEApqB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAlH,UAAAkC,KAAA,iCAMA,EAAAtC,OAAAwB,QAAAG,UAAAqqB,cAGAjrB,iBAAAkwB,wBACAjxB,OAAAwB,QAAAG,UAAAqqB,aACAhsB,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAwY,GACAla,OAAAwB,QAAAG,UAAAuqB,U,KACA,SAAAzsB,KAEAO,OAAAwB,QAAAG,UAAA+pB,MAAAjsB,IAAAksB,eAAAA,eACA3rB,OAAAwB,QAAAG,UAAAopB,KAAAtrB,IAAAksB,eAAAC,cACA5rB,OAAAwB,QAAAG,UAAAmN,KAAArP,IAAAksB,eAAAE,cACA7rB,OAAAwB,QAAAG,UAAAmqB,SAAArsB,IAAAksB,eAAAI,kBAGAmF,IAAAvG,SAAAwG,cAAA,QAAAnxB,OAAAwB,QAAAG,UAAAopB,MACA/qB,OAAAgE,aAAAM,aAAAiqB,YAAA2C,IAAA3C,YACAvuB,OAAAgE,aAAAM,aAAAkqB,WAAA0C,IAAA1C,WAEAtwB,WAAAic,WAAA,wBAAAna,OAAAwB,QAAAG,UAAAuqB,SAAAlsB,OAAAwB,QAAAG,UAAAqqB,cAEA,IAAAoF,SAAA,EACAl0B,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAopB,KAAA,SAAAC,IAAAlR,OAEA,UAAAkR,IAAAC,WAEAjrB,OAAA+lC,2BACA3U,SAAA,KAGAA,SAEApxB,OAAAgD,KAAA2nB,SAAA2G,eAAA,QAAAtxB,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAAuqB,UAAA,KAEA,WAEA9rB,UAAAkC,KAAA,gCAMAtC,OAAAgE,aAAAM,aAAAitB,UAAA,IAEAvxB,OAAAgmC,cAGA,IAAAzN,uBAAAr6B,WAAAwM,IAAA,gCAAA,SAAAC,MAAAlL,MAEAO,OAAAgE,aAAAM,aAAA3C,UAAAypB,MACAprB,OAAA+lC,2BAGA/lC,OAAAwB,QAAAG,UAAAuqB,SACAlsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAEAhsB,OAAAgD,KAAA,wCAAAhD,OAAAwB,QAAAG,UAAAqqB,gBAKAhsB,OAAA0K,IAAA,WAAA6tB,wBAEAv4B,OAAA+lC,yBAAA,WAEA/lC,OAAAgE,aAAAM,aAAA3C,UAAAupB,aAEAlrB,OAAAwB,QAAAG,UAAAuqB,SACAlsB,OAAAgD,KAAA,uCAAAhD,OAAAwB,QAAAG,UAAAqqB,cAEAhsB,OAAAgD,KAAA,wCAAAhD,OAAAwB,QAAAG,UAAAqqB,eAGA9uB,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,SAAAiB,KAAA1Q,OAEA0Q,KAAAC,UAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,UAEAzqB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAF,QAIAma,2BAAAoB,yBACA/lC,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IAAAzG,OAAAwB,QAAAG,UAAAuqB,U,KACA,SAAAzsB,MAEAO,OAAAwB,QAAAG,UAAAupB,WAAA,GACAlrB,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA,GACA9kC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAxpB,KAAAymB,QACAlmB,OAAAwB,QAAAG,UAAAupB,WAAA2Z,eAAAplC,KAAAwmC,mBAGA,IAAAxmC,KAAAwmC,mBAAA5mC,SAGAI,KAAAymC,YAAAC,aAAAhqB,iBAAA9P,eAAA5M,KAAAymC,YAAAC,aAAA,KACA1mC,KAAAymC,YAAAE,cAAAjqB,iBAAA9P,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,cAAA,KAEAvvB,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAArlC,KAAAymC,YAEAlmC,OAAAqmC,oBAAA5mC,KAAAwmC,mBAAA5mC,OAEAW,OAAAsmC,2BAEAtmC,OAAAylC,WAAA,IAGAzlC,OAAAslC,kBAAA,KAIA,SAAA7T,mBAAAC,UAAAphB,SAGAA,QAAAqH,MAAA,IAEAia,SAAA3jB,EAAAyjB,WAAA3e,KAAA,kBAIA,IAAA6e,WAAA,IAAAA,SAEA3jB,EAAA,4BAAAqC,QAAAqH,MAAA,sBAAArH,QAAAqH,MAAA,kCAAA9Z,aAAAiC,mBAAA,YAAA,QASAmO,EAAA,4BAAAqC,QAAAqH,MAAA,sBAAArH,QAAAqH,MAAA,S,SARA+Z,W,oBACA,CACAhE,OAAA,IACAoE,IAAA,IACAC,KAAA,MAeA,SAAAE,cAAAta,MAAA+V,QAEA,MAAA,4BAAA/V,MAAA,MAAA+V,OAAA,OAAAvR,iBAAAwU,YAAA,cAGA,SAAA4V,cAAA7U,UAAAphB,SAEArC,EAAA,gBAAAqC,QAAAqH,MAAA,kEAAArH,QAAAqH,MAAA,4CAAA9Z,aAAAiC,mBAAA,YAAA,Q,SAEA4xB,W,cACA,CACA4B,GAAA,cACAnb,WAAA,CACA1Y,KAAAO,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAud,kBAEA/f,OAAA,WACAmX,cAAA//B,aAAAiC,mBAAA,MACA+9B,eAAA,MACA3lB,SAAA,iFACAb,OAAA,SAAAC,UAGA,IAAAwmB,iBAAA7vB,EAAAqJ,SAAAgW,OAAA/a,QAAA,IAAAmiB,SAAAzb,KAAA,oBAWA,GARAhL,EAAAqJ,SAAAgW,OAAA/a,QAAA,IAAAypB,SAAA,aAEA8B,iBAAA/I,SAAA,uBAGA+I,iBAAA9uB,YAAA,uBAGAkF,KAAA/M,UAAA,IAAA+M,KAAA6S,cAQA,OANA7S,KAAA/M,MAAA,SACA+M,KAAAiqB,cAAA,CACAh3B,MAAA,GACAwQ,MAAAzD,KAAA5D,QAAAstB,cACA5lB,SAAA,aAKAT,SAAAD,SAAAgW,OAAA/V,WACAjH,QAAA+hB,MAAAsM,IAAA,SAAApnB,SAAA2C,IACA5J,QAAA+hB,MAAAsM,IAAA,WAAApnB,SAAAkvB,cAEAnlC,KAAA,SAAAgW,GACA,IAAAM,MAAA3J,EAAA,eAAA2J,QAAA,IACA3J,EAAA,0BAAA2J,MAAAA,OACA3J,EAAA,qBAAA2J,MAAAA,MAAA,MAIA3J,EAAA,yCAAAqC,QAAAqH,MAAA,aAAAqa,SAAAN,WAIA,SAAAgV,WAAAhV,UAAAphB,SAEArC,EAAA,gBAAAqC,QAAAqH,MAAA,yEAAArH,QAAAqH,MAAA,4CAAA9Z,aAAAiC,mBAAA,YAAA,Q,SAEA4xB,W,cACA,CACA4B,GAAA,WACA7M,OAAA,WACAtO,WAAA,CACA1Y,KAAAO,OAAA2mC,qBAAAr2B,QAAA+hB,MAAAuU,UAEAhJ,cAAA,SACAC,eAAA,SACAxmB,OAAA,SAAAC,UAGA,IAAAwmB,iBAAA7vB,EAAAqJ,SAAAgW,OAAA/a,QAAA,IAAAmiB,SAAAzb,KAAA,oBAWA,GARAhL,EAAAqJ,SAAAgW,OAAA/a,QAAA,IAAAypB,SAAA,aAEA8B,iBAAA/I,SAAA,uBAGA+I,iBAAA9uB,YAAA,uBAGAkF,KAAA/M,UAAA,IAAA+M,KAAA6S,cAQA,OANA7S,KAAA/M,MAAA,SACA+M,KAAAiqB,cAAA,CACAh3B,MAAA,GACAwQ,MAAAzD,KAAA5D,QAAAstB,cACA5lB,SAAA,aAKAT,SAAAD,SAAAgW,OAAA/V,WACAjH,QAAA+hB,MAAAsM,IAAA,eAAApnB,aAIAtJ,EAAA,yCAAAqC,QAAAqH,MAAA,aAAAqa,SAAAN,WA0KA,SAAAkB,cAAAtb,SAEA,IAEApI,KAEArE,QAIAixB,SARAxkB,QAAAub,UAAA9b,MAAA+b,KAAAC,OAIAloB,SAFAqE,KAAAjB,EAAA,mBAAAxO,KAAA,cAEAoL,WAEAmxB,SAAA,sBAEAF,SAAAjxB,QAAAoxB,QAAA,qBACA,IAyBA/sB,KAAArE,QAAAixB,UACA5sB,KAAAgtB,SAAAJ,SAAA,KApBA,IAHAjxB,QAAA6pB,SAAA9pB,OAGAvL,QAEAW,OAAA6mC,sBAEAC,QAAA74B,EAAAiB,KAAAgmB,MAAAC,WAAA0K,SAEA5mB,KAAA,kBAAA/K,QAEAgB,KAAArE,QADAixB,SAAAgL,WAKAhL,SAAAjxB,QAAA6pB,SAAA9pB,OAAAuqB,SAAA,0BAEAjmB,KAAArE,QAAAixB,UACA5sB,KAAAgtB,SAAAJ,SAAA,OA8NA,SAAAiL,4BAAApV,WAGA,MAAA,YAAAA,UAEA3xB,OAAAgnC,qBAGA,aAAArV,YAKA,WAAAA,WAEA3xB,OAAAgnC,sBApbAhnC,OAAAinC,gBAAA,SAAAC,SAEA,OAAAlnC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAud,iBAAAvtB,KAAA,CAAAxS,IAAAygC,WAGAlnC,OAAAsmC,yBAAA,WAGAtmC,OAAAmnC,iBAAA,IAAApwB,MAAAtX,KAAA2Y,WAAA,CACAib,OAAA,CACAhB,MAAA,CACAkB,OAAA,CACAqT,QAAA,CAAAx9B,KAAA,UACAg+B,OAAA,CAAAh+B,KAAA,UACAi+B,SAAA,CAAAj+B,KAAA,UACA01B,OAAA,CAAA11B,KAAA,UACAk+B,cAAA,CAAAl+B,KAAA,UACAm+B,YAAA,CAAAn+B,KAAA,UACAo+B,aAAA,MAIA/nC,KAAAO,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA2C,qBACA/b,OAAA,IAGA1rB,OAAA0nC,sBAAA,CACAvvB,WAAAnY,OAAAmnC,iBACAzvB,QAAA,CACA,CACAvG,MAAAtT,aAAAiC,mBAAA,WACA4X,QAAA,CACA,CACAC,MAAA,UACAxG,MAAAtT,aAAAiC,mBAAA,MACA8X,MAAA,IACA5E,WAAA,CAAAmhB,aAAA,UAAAtc,MAAA,kBAAA+Z,SAAA,QACA1Z,SAAA,YACAmc,OAAAkS,eAEA,CACA5uB,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CAAAmhB,aAAA,WAAAtc,MAAA,iCACAK,SAAA,cACAmc,OAAA,SAAA9hB,QAAAjC,SAEAiC,QAAAnB,KAAAd,QAAA+hB,MAAAgV,cAKA,CACA1vB,MAAA,8BACAC,MAAA,IACAM,SAAA,mCACAmc,OAAAqS,WACApS,eAAAz2B,aAAAiC,mBAAA,QACAkT,WAAA,CAAAmhB,aAAA,SAAAtc,MAAA,kBAAA+Z,SAAA,SAEA,CACAzgB,MAAAtT,aAAAiC,mBAAA,SACA4X,QAAA,CACA,CACAC,MAAA,gBACAxG,MAAAtT,aAAAiC,mBAAA,SACA8X,MAAA,GACA5E,WAAA,CACAmhB,aAAA,gBACAtc,MAAA,kBACA+Z,SAAA,QAEA1Z,SAAA+Z,cAAA,gBAAA,MACAoC,OAAA5C,oBAEA,CACA9Z,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,GACA5E,WAAA,CACAmhB,aAAA,cACAtc,MAAA,kBACA+Z,SAAA,QAEA1Z,SAAA+Z,cAAA,cAAA,MACAoC,OAAA5C,sBAIA,CACA9Z,MAAA,oBACAO,SAAA,qGACAN,MAAA,GACA5E,WAAA,CAAAmhB,aAAA,qBACAG,eAAA,UAGA7b,UAAA,EACAE,UAAA,EACAN,SAAArY,OAAAgnC,qBACAv3B,YAAA,EACA+I,aAAA,EACAmc,UAAA,SAAArd,GAEAtX,OAAA2nC,qBAEA9S,KAAA,SAAAvd,MAEA,IAEAwd,YADA,EAAAxd,KAAAoa,UAAAzY,KAAA,SAAA5Z,OACAiY,KAAAoa,UAAAzY,KAAA,iBAAA4mB,OAGAvoB,KAAAoa,UAAAzY,KAAA,SAQA8tB,4BANAjS,YAAA/hB,KAAA,QAMAuE,KAAA+a,QAMAyC,YAAAtd,SACAsd,YAAAC,SAAA,0BALAD,YAAAE,KAAA,YAAA,GAQA9lB,KAAAjB,EAAA,mBAAAxO,KAAA,aACAw1B,YAAAhnB,EAAAiB,KAAAgmB,MAAAC,WAAAlc,KAAA,iBAEA/J,KAAArE,QAAAoqB,gBAOAj1B,OAAA0K,IAAA,qBAAA,SAAAC,MAAAwrB,QAGA,IAAAjnB,kBAAAjB,EAAA,mBAAAxO,KAAA,aAMA02B,SAAAn2B,OAAA+W,MAAA6wB,iBAEA14B,kBAAAiJ,WAAA1Y,KAAAO,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA2C,sBAEAx5B,EAAA,mBAAAgL,KAAA,SAAAmd,GAAA,UAAAxD,eAEA5yB,OAAAgnC,uBAEAa,kBAAA55B,EAAA,kXAAA+jB,SAAA/jB,EAAA,oBACA22B,SAAAiD,kBAAAjD,CAAA5kC,SAGAA,OAAA8nC,gCAiDA9nC,OAAA2nC,kBAAA,WAGA15B,EAAA,sBAAA0hB,KAAA,SAAA7V,MAAA4b,KAGA,EAAA5b,OAGA9Z,OAAA+nC,iBAAArS,QAKA11B,OAAA+nC,iBAAA,SAAAC,iBAGA,IAAAzwB,SAAAtJ,EAAA,mBAAAxO,KAAA,aAAA8X,SAAAywB,iBAEApR,KAAA3oB,EAAA+5B,iBAGAC,gBAAAjoC,OAAAinC,gBAAA1vB,SAAAqvB,SAEAqB,kBAEA1wB,SAAAonB,IAAA,SAAAsJ,gBAAA/tB,IACA3C,SAAAonB,IAAA,WAAAsJ,gBAAAxB,cAGA7P,KAAA3d,KAAA,MAEA0W,KAAA,SAAA7V,MAAA6b,MAEAC,KAAA3nB,EAAA0nB,MAEAoR,4BADAnR,KAAA7iB,KAAA,iBAGA6iB,KAAAb,SAAA,qBACAa,KAAA5mB,YAAA,oBAOAhP,OAAA61B,wCAAAD,SAIA51B,OAAA6mC,mBAAA,WAEA,IAuBA1uB,WACA+vB,UAEApC,mBA1BA52B,QAAAjB,EAAA,mBAAAxO,KAAA,aAEAyP,WAKAi5B,mBAAAl6B,EAAAiB,QAAAgmB,MAAAC,WAAA0K,SACA7D,SAAA,WAMA,IAFAmM,mBAAAlvB,KAAA,YAEA5Z,QAEA6P,QAAAk5B,YAIAn6B,EAAA,kBAAAe,YAAA,UAIAk5B,WADA/vB,WAAAjJ,QAAAiJ,YACA1Y,OAAAJ,OAEAymC,mBAAA,CACAuC,iBAAA,KACAC,oBAAA,KACAC,8BAAA,KACAC,aAAA,EACAC,eAAA,EACAC,UAAA,KACAC,UAAA,KACAC,YAAA,EACAC,YAAA,EACAC,aAAA,EACAC,cAAA,KACAC,YAAA,EACAC,YAAA,KACAC,iBAAA,EACAC,aAAA,EACAC,WAAA,EACAC,WAAA,KACAjD,cAAApmC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAsB,cACAkB,cAAA,EACAC,YAAA,EACA+B,YAAA,KACAC,YAAAvpC,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACA+e,SAAA,EACAC,cAAA,KACAC,gBAAA,EACAC,YAAA,EACAC,SAAA,EACAC,cAAA,EACAC,kBAAA,EACAC,4BAAA,EACAC,0BAAA,EACAC,eAAA,KACAC,cAAA,EACAC,YAAA,EACAC,aAAA,KACAC,gBAAA,KACAC,YAAA,KACAC,eAAA,KACAC,WAAAxqC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAr+B,IACAgkC,YAAA,EACAC,YAAA,EACAC,gBAAA,EACAC,aAAA,EACAC,WAAA,EACAC,aAAA,EACArkC,IAAA,EACAskC,yBAAA,KACAC,OAAA,EACAC,YAAA,KACAC,YAAA,EACAtE,QAAA,GACAuE,YAAA,KACAC,WAAA,EACA3gB,QAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACAtR,UAAA,EACAD,WAAA,EACAmyB,SAAA,EACAC,cAAA,EACAC,UAAA,KACAC,aAAA,KACAzoB,UAAA,GACA0oB,kBAAA,CACA,CACAC,SAAA,EACAC,WAAA,EACAC,QAAA,EACAC,cAAA,EACAplC,IAAA,EACAqlC,SAAA,EACAC,kBAAA,EACAC,gBAAA,EACAC,YAAA,EACAC,WAAA,EACAC,QAAA,EACAC,QAAA,EACAC,WAAA,KACAC,OAAA,EACAtB,OAAA,EACAuB,cAAA,KACAC,gBAAA,EACAC,YAAA,KACAC,WAAA,KACAC,IAAA,EACA7N,OAAA,GACA/b,UAAA,KAGAqkB,OAAA,GACAC,SAAA,IAGAlvB,WAAAy0B,OAAA1E,UAAApC,oBAEA52B,QAAA29B,QAAA39B,QAAAgmB,MAAAC,WAAA0K,SAEAiH,QAAA74B,EAAAiB,QAAAgmB,MAAAC,WAAA0K,SACA9K,SAAA,UACA/0B,OAAA+nC,iBAAAjB,WAKA9mC,OAAA8nC,2BAAA,WAGA9nC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAA6jB,gBAEA9sC,OAAA+W,MAAA6wB,eAAA1R,WAAA,iBAGAl2B,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAgQ,cAEAj5B,OAAA+W,MAAA6wB,eAAA1R,WAAA,eAGAl2B,OAAAgnC,sBAEAhnC,OAAA+W,MAAA6wB,eAAA1R,WAAA,sBAMAl2B,OAAA+sC,yBAAA,SAAAx1B,SAGAy1B,QAAA/+B,EAAA,mBAAAxO,KAAA,aAAA0Y,WAAAsmB,SAAAlnB,QAAAkgB,KACAxpB,EAAA,mBAAAxO,KAAA,aAAA0Y,WAAA80B,OAAAD,UAmCAhtC,OAAA61B,wCAAA,SAAAD,MAGA,IAAAjE,UAAAiE,KAAA7iB,KAAA,cAEA6iB,KAAAU,KAAA,CACAhD,GAAA,QAAA3B,UACAlV,QAAA,CACArL,KAAA,IAEAmlB,SAAA,CACAC,OAAA,CACA1uB,GAAA,GAAA2uB,GAAA,KAGA1b,MAAA,CACA2b,QAAA,kBAIAd,KAAAU,KAAA,WAAA,IAIAt2B,OAAA22B,wCAAA,SAAAC,KAAAjF,YAAAkF,cAAAC,iBAGA,IAAAC,IAAA,EAEAC,UAAA,EAAAH,cAAAx3B,OACA43B,YAAA,EAAAH,gBAAAz3B,OAEAu2B,KAAAgB,KAAA3d,KAAA,gBAAA0Y,YAAA,MAMA,GAHAiE,KAAA5mB,YAAA,YACA4mB,KAAA5mB,YAAA,cAEAgoB,WAAAC,YACA,CAEAC,YAAAjpB,EAAA,eAEA,GAAA+oB,UACA,CAEA,IADA,IAAAlV,UAAA7T,EAAA,oCAAApQ,aAAAiC,mBAAA,SAAA,YACAi3B,IAAA,EAAAA,IAAAF,cAAAx3B,OAAA03B,MAEAjV,UAAAqV,OAAA,wCAAAN,cAAAE,KAAA,SAGAG,YAAAC,OAAArV,WAGA,GAAAmV,YACA,CACA,IAAAG,YAAAnpB,EAAA,sCAAApQ,aAAAiC,mBAAA,WAAA,YACA,IAAAi3B,IAAA,EAAAA,IAAAD,gBAAAz3B,OAAA03B,MAEAK,YAAAD,OAAA,wCAAAL,gBAAAC,KAAA,SAGAG,YAAAC,OAAAC,aAGAxB,KAAAU,KAAA,SAAA,eAAAY,aAEAF,WAEApB,KAAAb,SAAA,YACAa,KAAAU,KAAA,SAAA,gBAAA,wBAGAV,KAAAb,SAAA,cACAa,KAAAU,KAAA,SAAA,gBAAA,yBAGAV,KAAAU,KAAA,WAAA,QAIAV,KAAAU,KAAA,WAAA,IAIAt2B,OAAAwB,QAAAG,UAAAuqB,UAEAlsB,OAAA+Q,OAAA,oDAAA,SAAAm8B,SAAAC,SAEA,KAAAjwC,QAAAgF,yBAAAgrC,WAAAA,SAAA,GAAAA,WAAAC,SAAA,IAAAntC,OAAAwlC,aAAA,CAKA4H,QAAAF,SAEA,GAAAltC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAokB,4BACA,CAEA,GAAA,KAAAH,SAIA,OAFAltC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAM,SAAA,QACAplC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAA+b,oBAAA,IAIAL,2BAAA2I,6BACAttC,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IAAA2mC,S,KACA,SAAA3tC,UAEAvC,QAAA89B,KAAAv7B,SAAAO,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAA+b,qBAGAuI,SAAAvtC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAM,SAEAplC,OAAA+W,MAAAy2B,UAAAr1B,WAAA1Y,KAAAO,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAA+b,qBAEAhlC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAM,SAAAmI,eAQAjU,uBAAAp7B,WAAAwM,IAAA,kBAAA,SAAAC,MAAA8iB,MAEA,UAAAA,MAAAztB,OAAAwB,QAAAG,UAAAuqB,UAEAlsB,OAAAytC,sBAAA,IAAA,GAAA,KAGAztC,OAAA0K,IAAA,WAAA4uB,wBAEAt5B,OAAA4K,KAAA,SAAAtI,MAEAtC,OAAA0tC,uBAGAz/B,EAAA,YAAA+tB,SAAA,YAEAh8B,OAAAwB,QAAAG,UAAAuqB,SAEAlsB,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,GAAA,IAIAhsB,OAAAytC,sBAAAnrC,MAAA,GAAA,GAIAtC,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAAuqB,UAAA,MAIAlsB,OAAA8K,SAAA,SAAAxI,MAEA2L,EAAA,YAAA+tB,SAAA,YAEAh8B,OAAAwB,QAAAG,UAAAuqB,SAEAlsB,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,GAAA,IAIAhsB,OAAAytC,sBAAAnrC,MAAA,GAAA,GAAA,GAIAtC,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,aAAAhsB,OAAAwB,QAAAG,UAAAuqB,UAAA,KAIAlsB,OAAAooB,MAAA,SAAA9lB,MAEAtC,OAAAwB,QAAAG,UAAAuqB,SAKAlsB,OAAAgD,KAAA,8BAHAhD,OAAAytC,sBAAA,IAAA,GAAA,IAOAztC,OAAAy5B,OAAA,WAEAz5B,OAAA05B,eAAA,EACA15B,OAAA0tC,uBAGA,IAAA1tC,OAAAwlC,aAAAv3B,EAAA,YAAA+tB,SAAA,eAEAh8B,OAAAk6B,iBAAA,GAIAl6B,OAAAytC,sBAAA,IAAA,GAAA,KAIAztC,OAAA25B,cAAA,SAAAF,OAAAG,SAEA,IAAAC,wBACA,CACApP,QAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACA8E,cAAAvvB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACA5rB,aAAA3D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACAm2B,gBAAAL,OACAM,oBAAA/5B,OAAAwB,QAAAG,UAAA+pB,MAAAsO,kBAGAj5B,iBAAAk5B,8BAAAJ,yBAAAr1B,KAAA,SAAA/E,MAEAA,KAAAoN,YACA3P,QAAAgF,yBAAAzC,KAAAsN,SAAA,MACA/M,OAAAJ,SAAAC,KAAAJ,KAAAsN,SAAA,GAAA,WASA/M,OAAAiR,WAAAY,QAAApS,KAAAsN,SAAA,GAAA,QAAAlP,aAAAiC,mBAAA,kBAPA,WACAiB,iBAAA+4B,gBAAAD,yBAAAr1B,KAAA,SAAA/E,MACAg6B,SAAAG,SACA55B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,SAQAxuB,iBAAA+4B,gBAAAD,yBAAAr1B,KAAA,SAAA/E,MACAg6B,SAAAG,SACA55B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,SAMAvvB,OAAAk6B,gBAAA,SAAAT,OAAAG,SAEA,IAAAO,kBAAAn6B,OAAAwB,QAAAG,UAAAopB,KAAA,GAGA,IAAAoP,kBAAAC,SAAA,IAAAD,kBAAAE,WAOAr6B,OAAA25B,cAAAF,OAAAG,SANAl5B,SAAA,WACAV,OAAAiR,WAAAS,kBACA,MAOA1R,OAAAytC,sBAAA,SAAAnrC,KAAAm3B,OAAArR,MAAAkS,WAAAV,SAEA,IAAAgO,wBAAA35B,EAAA,mBAAAxO,KAAA,aAGA0oC,SAAAl6B,EAAA25B,wBAAA1S,MAAAC,WAAA0K,QACA8N,SAAAxF,SAAAnM,SAAA,UACA1B,WAAAA,aAAA,EACAV,QAAAA,UAAA,EACA+T,UAIA,IAFAxF,SAAAlvB,KAAA,YAEA5Z,QAEAuoC,wBAAAQ,YAIA9nB,aAAAY,sBAAAlhB,OAAA0tC,uBAKA1tC,OAAAwB,QAAAG,UAAAupB,WAAA0iB,SAEA5tC,OAAA6O,gBAAA7O,OAAAwB,QAAAG,UAAAupB,WAAA0iB,SAIA,IAAA5tC,OAAAwlC,aAEA,EAAAljC,KAAAjD,OAEAW,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,EAAAsO,cAKAp9B,QAAA89B,KAAAh7B,OAAAmnC,iBAAA1nC,OAAAw7B,SAAAj7B,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA2C,sBAGAznC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAr+B,KAAA,IAEAzG,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA+I,YAAA7tC,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,cAEAmqC,wBACA,CACAlT,kBAAA56B,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,IACA8kB,OAAAvrB,OAAAgE,aAAAM,aAAA3C,UAAAupB,WAAAzkB,KAGAk+B,2BAAA8I,sBAAAK,wBAAA9tC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,c,KACA,SAAArlC,MAEAA,KAAAsuC,aAAA5H,aAAAhqB,iBAAA9P,eAAA5M,KAAAsuC,aAAA5H,aAAA,KACA1mC,KAAAsuC,aAAA3H,cAAAjqB,iBAAA9P,eAAA5M,KAAAsuC,aAAA3H,cAAA,KAEApmC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAArlC,KAAAsuC,aAEA/tC,OAAAwB,QAAAG,UAAAupB,WAAA2Z,eAAAplC,KAAAwmC,mBAGA/oC,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA2C,qBAAA,SAAAuG,iBAEAA,gBAAAC,kBAAAjuC,OAAA2mC,qBAAAqH,gBAAApH,SACAoH,gBAAAxG,aAAAwG,gBAAAC,kBAAAh1B,KAAA,CAAA6lB,OAAAkP,gBAAAvC,kBAAA,GAAA3M,WAGA7wB,EAAA,mBAAAxO,KAAA,aACA0Y,WAAA1Y,KAAAA,KAAAsuC,aAAAtG,sBAEAznC,OAAA0tC,qBAEAjU,OAEAz5B,OAAAk6B,iBAAA,EAAAN,SAGAxR,MAEApoB,OAAAk6B,iBAAA,EAAAN,SAGA,EAAAt3B,KAAAjD,QAEAW,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,EAAAsO,kBAKAt6B,OAAAkuC,+BAAA,WAOA,OAJAluC,OAAAmuC,gCAAAhwC,GAAAiwC,QAEApuC,OAAAquC,6BAAA,EAEAruC,OAAAmuC,gCAAAG,SAIAtuC,OAAAuuC,sBAAA,SAAAC,kBAEAxuC,OAAAkuC,iCAAA1pC,KAAA,WAEAxE,OAAAyuC,wBAAAD,kBACAxuC,OAAAmuC,qCAAA9rC,EACArC,OAAAquC,6BAAA,GACA,WAEAruC,OAAAmuC,qCAAA9rC,EACArC,OAAAquC,6BAAA,KAIAruC,OAAAyuC,wBAAA,SAAAD,kBAEA7J,2BAAA8J,wBAAAD,iBAAAxuC,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,K,KACA,SAAAhH,MAGAO,OAAAwB,QAAAG,UAAAupB,WAAA2Z,eAAAplC,KAAAwmC,sBAKAjmC,OAAA0uC,yBAAA,WAEA1uC,OAAA2uC,4BAAA,GAGA3uC,OAAA4uC,qCAAAvsC,EAEArC,OAAA6uC,+BAAA,WASA,OANA7uC,OAAA4uC,gCAAAzwC,GAAAiwC,QAEApuC,OAAA2lC,yBAAAmJ,oBAAA5xC,QAAA89B,KAAAh7B,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAI,qBAEAllC,OAAA+uC,kCAAA,EAEA/uC,OAAA4uC,gCAAAN,SAIAtuC,OAAAgvC,mBAAA,WAEAhvC,OAAA6uC,iCAAArqC,KAAA,WAEAxE,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAI,oBAAAhoC,QAAA89B,KAAAh7B,OAAA2lC,yBAAAmJ,qBACA9uC,OAAA2lC,yBAAAmJ,oBAAA,GACA9uC,OAAA4uC,qCAAAvsC,EACArC,OAAA+uC,kCAAA,GACA,WAEA/uC,OAAA4uC,qCAAAvsC,EACArC,OAAA+uC,kCAAA,KAIA/uC,OAAAgmC,WAAA,WAEAhmC,OAAAquC,6BAAA,EACAruC,OAAA2uC,4BAAA,EACA3uC,OAAA+uC,kCAAA,EACAzuB,aAAA6D,uBAGAnkB,OAAA2mC,qBAAA,SAAAsI,YAEA,IAAA7jB,MAAAprB,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAimB,UACAC,sBAAAnvC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAmmB,sBAEA3vC,KAAA,GAaA,OAXAvC,QAAA4P,QAAAqiC,sBAAAE,QAAA,CAAAC,WAAAL,aAAA,SAAAM,MAGAtN,KAAA7W,MAAAnS,KAAA,CAAAq2B,WAAAC,KAAAC,iBAEAtyC,QAAAuyC,UAAAxN,OAEAxiC,KAAAxB,KAAAgkC,QAIAxiC,MAGAO,OAAAgnC,mBAAA,SAAA0I,UAOA,YALArtC,IAAAqtC,WAEAA,SAAA1vC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,cAGA,UAAA72B,EAAA,mBAAA8E,KAAA,kBAGA,EAAA28B,SAAArW,WAEAr5B,OAAAwB,QAAAG,UAAAsnB,QAAAU,wBAAA+lB,SAAAtW,aAOA,IAAAuW,oCAEA,SAAA3B,gBAAA1W,OAEA,IA+BAsY,YAAAC,cA/BArY,SAAA,EAEAZ,KAAA3oB,EAAA,mBAAAxO,KAAA,aAAAy1B,MAAAjc,KAAA,gBAAA+0B,gBAAAvW,IAAA,MA8CA,OA3CAz3B,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAA6jB,iBAGAgD,YAAA,GAAAC,cAAA,GAEA,IAAA/B,gBAAA1G,gBAEA9P,SAAA,EAEAsY,YAAA7xC,KAAAJ,aAAAiC,mBAAA,iBAGA,EAAAkuC,gBAAA1G,eAAA0G,gBAAA1G,cAAA0G,gBAAAxG,aAAAwI,UAGAD,cAAA9xC,KAAAJ,aAAAiC,mBAAA,wBAIAE,OAAA22B,wCAAAC,KAAA,gBAAAkZ,YAAAC,gBAIA/vC,OAAAwB,QAAAG,UAAAupB,WAAAjC,QAAAgQ,eAGA2W,YAAA,GAAAC,cAAA,GAEA,IAAA7B,gBAAAzG,cAEA/P,SAAA,EAEAoY,YAAA3xC,KAAAJ,aAAAiC,mBAAA,iBAGA,EAAAkuC,gBAAAzG,aAAAyG,gBAAAzG,YAAAyG,gBAAAxG,aAAAwI,UAEAH,cAAA5xC,KAAAJ,aAAAiC,mBAAA,wBAGAE,OAAA22B,wCAAAC,KAAA,cAAAgZ,YAAAC,gBAGArY,SAIAx3B,OAAAiwC,iBAAA,SAAAhM,IAGA,IAAAtS,UAAAsS,GAAAlxB,KAAA,cAEAkxB,GAAA3N,KAAA,CACAhD,GAAA,QAAA3B,UACAlV,QAAA,CACArL,KAAA,IAEAmlB,SAAA,CACAC,OAAA,CACA1uB,EAAA,GAAA2uB,GAAA,KAGA1b,MAAA,CACA2b,QAAA,kBAIAuN,GAAA3N,KAAA,WAAA,GAEA2N,GAAA3N,KAAA,SAAA,eAAAz4B,aAAAiC,mBAAA,yBACAmkC,GAAA3N,KAAA,SAAA,gBAAA,sBACA2N,GAAA3N,KAAA,WAAA,IAGAt2B,OAAA0tC,mBAAA,WAGA,IAAAz/B,EAAA,mBAAAxO,KAAA,aACA,OAAA,EAEA,IAAAywC,wBAAAjiC,EAAA,mBAAAxO,KAAA,aAAA0Y,WAAA1Y,OAAAJ,OAEA,GAAA,IAAA6wC,0BAAAjiC,EAAA,YAAA+tB,SAAA,YACA,OAAA,EAGA,IAAA1b,aAAAY,qBACA,OAAA,IAAAgvB,wBAGA,IAAAC,kBAAAliC,EAAA,gCACAmiC,eAAAniC,EAAA,sCAEAkiC,kBAAAnhC,YAAA,YACAohC,eAAAphC,YAAA,YAEA,IAAAwoB,SAAA,EAEA,GAAA,IAAA0Y,wBAQA,OANAC,kBAAApb,SAAA,YACAqb,eAAArb,SAAA,YAEA/0B,OAAAiwC,iBAAAE,mBACAnwC,OAAAiwC,iBAAAG,iBAEA,EAGAxI,eAAA35B,EAAA,mBAAAxO,KAAA,aAOA,OALAvC,QAAA4P,QAAA86B,eAAAzvB,WAAA1Y,OAAA,SAAAiwC,UAEAlY,QAAAA,SAAAmY,oCAAAD,YAGAlY,SAGAx3B,OAAAqwC,qBAAA,WAEA,OAAA,IAAArwC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAzL,OAEA,YACA,IAAAr5B,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAzL,OAEA,WAEA,IAAAr5B,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAzL,OAEA,UAEA,IAAAr5B,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAzL,OAEA,SAEA,IAAAr5B,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAzL,OAEA,YAEA,IAAAr5B,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAzL,OAEA,kBAFA,GAMAiX,uBACA,CACA//B,KAAA,mBACAkzB,kBAAA,GACA8M,qBAAA,GACA7M,eAAA,SAAA8M,YAAAlZ,OAEA,GAAAp6B,QAAAgF,yBAAAsuC,aACA,OAAA,EAGA,IAAAC,UAAA,EACAC,SAAA,GAEAC,mBAAA,IAAArlC,KAAAklC,aAOA,GANA,IAAAllC,KAAAtL,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAsB,eAEAuK,qBACAD,SAAA7yC,aAAAiC,mBAAA,eACA2wC,UAAA,IAEAA,SACA,OAAAA,SAEA,IAAAG,YAAA5wC,OAAAsM,cAAAtM,OAAAqM,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACAshB,YAAA7wC,OAAAsM,cAAAtM,OAAAqM,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,gBAAA,GAYA,OAVAqhB,YAAAD,oBAAAA,mBAAAE,eACA,KAAAH,WACAA,UAAA,QAEAA,UAAA7yC,aAAAiC,mBAAA,qBACA2wC,UAAA,GAGAv8B,KAAAuvB,kBAAAiN,UAEAD,UAEAK,iBAAA,SAAAN,YAAAlZ,OAEA,GAAAp6B,QAAAgF,yBAAAsuC,aACA,OAAA,EAGA,IAAApP,YAAA,EAEAuP,mBAAA,IAAArlC,KAAAklC,aAEAI,YAAA5wC,OAAAsM,cAAAtM,OAAAqM,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACAshB,YAAA7wC,OAAAsM,cAAAtM,OAAAqM,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,gBAAA,GAOA,OALAqhB,YAAAD,oBAAAA,mBAAAE,eACA38B,KAAAq8B,qBAAA1yC,aAAAiC,mBAAA,qBACAshC,YAAA,IAGAA,aAIAphC,OAAA+wC,iBAAA,IAAAC,IAAAC,GAAAC,SAAAC,cAAAb,wBAEAc,uBACA,CACA7gC,KAAA,uBACAkzB,kBAAA,GACA8M,qBAAA,GACA7M,eAAA,SAAA2N,YAAA/Z,OAEA,IAAAmZ,UAAA,EACAC,SAAA,GAEAC,YAAA,IAAArlC,KAAAtL,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAqB,cACAmL,oBAAA,IAAAhmC,KAAA+lC,aAMA,GAJAC,oBAAAX,cACAD,SAAA7yC,aAAAiC,mBAAA,mBACA2wC,UAAA,IAEAA,SACA,OAAAA,SAGAG,YAAA5wC,OAAAsM,cAAAtM,OAAAqM,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACAshB,YAAA7wC,OAAAsM,cAAAtM,OAAAqM,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,gBAAA,GAWA,OATAqhB,YAAAU,qBAAAA,oBAAAT,eACA,KAAAH,WACAA,UAAA,QAEAA,UAAA7yC,aAAAiC,mBAAA,yBACA2wC,UAAA,GAGAv8B,KAAAuvB,kBAAAiN,UACAD,UAEAK,iBAAA,SAAAO,YAAA/Z,OAEA,IAAA8J,YAAA,EAEAkQ,oBAAA,IAAAhmC,KAAA+lC,aAEAT,YAAA5wC,OAAAsM,cAAAtM,OAAAqM,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACAshB,YAAA7wC,OAAAsM,cAAAtM,OAAAqM,eAAArM,OAAAwB,QAAAG,UAAA+pB,MAAA6D,gBAAA,GAOA,OALAqhB,YAAAU,qBAAAA,oBAAAT,eACA38B,KAAAq8B,qBAAA1yC,aAAAiC,mBAAA,yBACAshC,YAAA,IAGAA,aAIAphC,OAAAuxC,qBAAA,IAAAP,IAAAC,GAAAC,SAAAC,cAAAC,wBAGApxC,OAAAwxC,aAAA,SAAAC,aAEA9M,2BAAA+M,YACAD,YACAzxC,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,K,KACA,SAAAhH,MAEAO,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA,GAEArlC,KAAA0mC,aAAAhqB,iBAAA9P,eAAA5M,KAAA0mC,aAAA,KACA1mC,KAAA2mC,cAAAjqB,iBAAA9P,eAAA5M,KAAA2mC,cAAA,KAEApmC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAArlC,KAEAO,OAAA2lC,yBAAAmJ,oBAAA9uC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAI,oBAGAhoC,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAA2C,qBAAA,SAAAuG,iBAEAA,gBAAAC,kBAAAjuC,OAAA2mC,qBAAAqH,gBAAApH,SACAoH,gBAAAxG,aAAAwG,gBAAAC,kBAAAh1B,KAAA,CAAA6lB,OAAAkP,gBAAAvC,kBAAA,GAAA3M,WAGA9+B,OAAAsmC,2BAEAtmC,OAAAylC,WAAA,MAKAzlC,OAAA2xC,4BAAA,WAGArxB,aAAAsxB,2BAAA5xC,OAAA2lC,2BAMAjlC,SAAA,WAKA,EAFAuN,EAAA,yBAAAgL,KAAA,aAEA5Z,QAKAW,OAAA4uC,gCAAAhxC,WACA,MAGAoC,OAAA6xC,gCAAA,WAEA7xC,OAAA4uC,gCAAA7uC,a,WAIA,2CAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,UAAA,6BAAA,YAAA,eAAA,eAAA,WAAA,kBAAA,mBAAA,SAAAC,OAAA9B,WAAAgX,aAAAnU,iBAAAJ,QACAgkC,2BAAAvkC,UAAAE,aAAAggB,aAAA5f,SAAA5C,gBAAAqe,+BAIAnc,OAAAoc,UAAA,GACApc,OAAAywB,cAAA,CACAC,QAAAvU,iBAAAwU,YACAjD,OAAA,IACAkD,SAAA,EACAC,UAAA,IAGA3zB,QAAAqV,QAAA,mBAAAD,QAEAqzB,yBAAA3lC,QAEA8uC,oBAAA,GAEA9uC,OAAA8xC,sBAAA,WAEA,IAAAC,cAAA,CACAC,QAAA,EACArG,WAAA,KACAvB,aAAA,KACAC,gBAAA,KACA4H,WAAA,KACAzH,WAAAxqC,OAAAwB,QAAAG,UAAAupB,WAAA4Z,aAAAr+B,IACAyrC,QAAA,EACAzrC,IAAA,EACA0rC,UAAA,EACAhH,YAAA,KACAC,WAAA,EACAzhC,KAAA,EACAoZ,UAAA,IAGA/iB,OAAA8uC,oBAAA7wC,KAAA8zC,gBA8BA/xC,OAAAoyC,mBAAA,IAAApB,IAAAC,GAAAC,SAAAC,cAzBA,CACA5gC,KAAA,qBACAkzB,kBAAA,GACAC,eAAA,SAAA2O,QAAA/a,OAEA,IAAAE,SAAA,EAgBA,OAbA6a,QAAAC,sBAAA,CAAAtb,WAAA,EAAA6O,iBAAA,IAEA3oC,QAAAgF,yBAAAmwC,QAAAJ,cAGAI,QAAAC,sBAAA,CAAAtb,YADAQ,SAAA,GACAqO,iBAAAhoC,aAAAiC,mBAAA,cAGA03B,UAEA6a,QAAAC,sBAAA,IAGA9a,c,WAOA,gCAAA,CAAA,SAAA,aAAA,eAAA,mBAAA,kBAAA,UAAA,8BAAA,YAAA,eAAA,WAAA,YAAA,mBAAA,WAAA,SAAAx3B,OAAA9B,WAAAgX,aAAAnU,iBAAAjD,UAAA6C,QAAA4xC,4BAAAnyC,UAAAE,aAAAI,SAAA0S,UAAA+I,iBAAAwO,uBAGA3qB,OAAAwyC,mBAAA,EACA,IAAA30C,aAAAC,UAAAC,gCAAA,yBAGAiC,OAAA0K,IAAA,WAAA,WAEAxM,WAAA6yB,iBAAA,KAGA/wB,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAhD,OAAAwB,QAAAG,UAAAuqB,UAAA,EAAA9rB,UAAAisB,OAAA7pB,QAAA,8BAEAxC,OAAAyyC,eAAA,EAEAv9B,aAAA8W,eAEAhsB,OAAAwB,QAAAG,UAAAqqB,aAAA9W,aAAA8W,cAEAhsB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwB,QAAAG,UAAA+pB,MAAA,GAGA1rB,OAAAwB,QAAAG,UAAA+wC,SAAA,CACAhiB,QAAAvU,iBAAAwU,YACAjD,OAAA,IACAkD,SAAA,EACAC,UAAA,EACAkB,KAAA,WAGA/xB,OAAAwB,QAAAG,UAAAsnB,SAEAloB,iBAAAuoB,oBAAAtpB,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,GAAAc,KACA,SAAA/E,MAEAO,OAAAwB,QAAAG,UAAAsnB,QAAA,GACAjpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA9pB,KAAA+pB,eACAxpB,OAAAwB,QAAAG,UAAAsnB,QAAAQ,aAAAhqB,KAAAiqB,gBACA1pB,OAAAwB,QAAAG,UAAAsnB,QAAAU,sBAAAlqB,KAAAmqB,sBAEA5pB,OAAAwB,QAAAG,UAAAsnB,QAAAY,wCAAApqB,KAAAqqB,wCACA9pB,OAAAwB,QAAAG,UAAAsnB,QAAAc,6CAAAtqB,KAAAuqB,6CACAhqB,OAAAwB,QAAAG,UAAAsnB,QAAAgB,qDAAAxqB,KAAAyqB,qDAEAlqB,OAAAgE,aAAAomB,6BAAApqB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,IACAvpB,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,GAAAc,kBAGArqB,OAAAgE,aAAAomB,6BAEApqB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAlH,UAAAkC,KAAA,iCAMA,EAAAtC,OAAAwB,QAAAG,UAAAqqB,cAGAjrB,iBAAAkwB,wBACAjxB,OAAAwB,QAAAG,UAAAqqB,aACAhsB,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAwY,GACAla,OAAAwB,QAAAG,UAAAuqB,U,KACA,SAAAzsB,KAEAO,OAAAwB,QAAAG,UAAA+pB,MAAAjsB,IAAAksB,eAAAA,eACA3rB,OAAAwB,QAAAG,UAAAopB,KAAAtrB,IAAAksB,eAAAC,cACA5rB,OAAAwB,QAAAG,UAAAmN,KAAArP,IAAAksB,eAAAE,cACA7rB,OAAAwB,QAAAG,UAAAmqB,SAAArsB,IAAAksB,eAAAI,kBAGAmF,IAAAvG,SAAAwG,cAAA,QAAAnxB,OAAAwB,QAAAG,UAAAopB,MACA/qB,OAAAgE,aAAAM,aAAAiqB,YAAA2C,IAAA3C,YACAvuB,OAAAgE,aAAAM,aAAAkqB,WAAA0C,IAAA1C,WAEAtwB,WAAAic,WAAA,wBAAAna,OAAAwB,QAAAG,UAAAuqB,SAAAlsB,OAAAwB,QAAAG,UAAAqqB,cAEA,IAAAoF,SAAA,EACAl0B,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAopB,KAAA,SAAAC,IAAAlR,OAEA,UAAAkR,IAAAC,WAEAjrB,OAAA2yC,kBACAvhB,SAAA,KAGAA,SAEApxB,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,KAEA,WAEAnvB,UAAAkC,KAAA,gCAMAtC,OAAAgE,aAAAM,aAAAitB,UAAA,KAGAgH,UAAAr6B,WAAAwM,IAAA,gCAAA,SAAAC,MAAAlL,MAEAO,OAAA2yC,oBAGA3yC,OAAA0K,IAAA,WAAA6tB,WAEAv4B,OAAA2yC,gBAAA,WAEAz1C,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAsnB,QAAAM,eAAA,SAAAiB,KAAA1Q,OAEA0Q,KAAAC,UAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,UACAzqB,OAAAwB,QAAAG,UAAAsnB,QAAAyB,gBAAAF,QAGA+nB,4BAAAI,gBAAA3yC,OAAAwB,QAAAG,UAAA+pB,MAAAjlB,KAAAjC,KAAA,SAAA/E,MAKAO,OAAAwB,QAAAG,UAAAixC,YAAAnzC,KAAAozC,YACA7yC,OAAA8yC,qBAEA9yC,OAAAwyC,mBAAA,EAEAxyC,OAAAyyC,gBAAAzyC,OAAAwB,QAAAG,UAAAsnB,QAAAU,uBAAA3pB,OAAAwB,QAAAG,UAAAixC,YAAAhrB,OAAAmrB,SAEAryC,SAAA,WACAV,OAAAyyC,eACAxkC,EAAA,6BAAA8E,KAAA,YAAA,KAIA/S,OAAAgzC,oBACAhzC,OAAAizC,cAIAjzC,OAAA8yC,mBAAA,WACA9yC,OAAAwB,QAAAG,UAAAixC,YAAAM,iBAAA,GAEAh2C,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAA,SAAAx7B,MAAAmC,OACA,IAAAs5B,UAAA,GAEAl2C,QAAA4P,QAAAvB,OAAAunB,KAAAnb,OAAA,SAAA07B,SAAAv5B,OACA,gBAAAu5B,WACAD,UAAAC,UAAAl3B,iBAAAm3B,cAAA37B,MAAA07B,UAAA,SAGArzC,OAAAwB,QAAAG,UAAAixC,YAAAM,iBAAAv7B,MAAAlR,KAAA2sC,aAIA9Z,UAAAp7B,WAAAwM,IAAA,kBAAA,SAAAC,MAAA8iB,MAEA,UAAAA,MAAAztB,OAAAwB,QAAAG,UAAAuqB,UAEAlsB,OAAAuzC,gBAAA,IAAA,GAAA,KAGAvzC,OAAA0K,IAAA,WAAA4uB,WAEAt5B,OAAA4K,KAAA,SAAAtI,MAEAtC,OAAAwB,QAAAG,UAAAuqB,SAGAlsB,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,GAAA,IAFAhsB,OAAAuzC,gBAAAjxC,MAAA,GAAA,IAKAtC,OAAA8K,SAAA,SAAAxI,MAEAtC,OAAAwB,QAAAG,UAAAuqB,SAGAlsB,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,GAAA,IAFAhsB,OAAAuzC,gBAAAjxC,MAAA,GAAA,GAAA,IAKAtC,OAAAooB,MAAA,WAEApoB,OAAAwB,QAAAG,UAAAuqB,SAKAlsB,OAAAgD,KAAA,8BAHAhD,OAAAuzC,gBAAA,IAAA,GAAA,IAOAvzC,OAAAy5B,OAAA,WAEAz5B,OAAA05B,eAAA,EACA15B,OAAAuzC,gBAAA,IAAA,GAAA,IAGAvzC,OAAA25B,cAAA,SAAAF,OAAAG,SACA,IAAAC,wBACA,CACApP,QAAAzqB,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QACA8E,cAAAvvB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,GACA5rB,aAAA3D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACAm2B,gBAAAL,OACAM,oBAAA/5B,OAAAwB,QAAAG,UAAA+pB,MAAAsO,kBAGAj5B,iBAAAk5B,8BAAAJ,yBAAAr1B,KAAA,SAAA/E,MAEAA,KAAAoN,YACA3P,QAAAgF,yBAAAzC,KAAAsN,SAAA,MACA/M,OAAAJ,SAAAC,KAAAJ,KAAAsN,SAAA,GAAA,WASA/M,OAAAiR,WAAAY,QAAApS,KAAAsN,SAAA,GAAA,QAAAlP,aAAAiC,mBAAA,kBAPA,WACAiB,iBAAA+4B,gBAAAD,yBAAAr1B,KAAA,SAAA/E,MACAg6B,SAAAG,SACA55B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,SAQAxuB,iBAAA+4B,gBAAAD,yBAAAr1B,KAAA,SAAA/E,MACAg6B,SAAAG,SACA55B,OAAAgD,KAAA,8BAAAhD,OAAAwB,QAAAG,UAAA+pB,MAAAjB,QAAA,IAAAzqB,OAAAgL,cAAAhL,OAAAwB,QAAAG,UAAA+pB,MAAA6D,eAAA,SAMAvvB,OAAAk6B,gBAAA,SAAAT,OAAAG,SAEA,IAAAO,kBAAAn6B,OAAAwB,QAAAG,UAAAopB,KAAA,GAGA,IAAAoP,kBAAAC,SAAA,IAAAD,kBAAAE,WAOAr6B,OAAA25B,cAAAF,OAAAG,SANAl5B,SAAA,WACAV,OAAAiR,WAAAS,kBACA,MAOA1R,OAAAuzC,gBAAA,SAAAjxC,KAAAm3B,OAAArR,MAAAkS,WAAAV,SAEAU,WAAAA,aAAA,EACAV,QAAAA,UAAA,EAEA55B,OAAA6O,gBAAA7O,OAAAwzC,iBAEAxzC,OAAAwB,QAAAG,UAAAixC,aACA5yC,OAAAwB,QAAAG,UAAAixC,YAAAhrB,QACA5nB,OAAAwB,QAAAG,UAAAmN,OACA9O,OAAAwB,QAAAG,UAAAixC,YAAAhrB,OAAAiT,SAAA76B,OAAAwB,QAAAG,UAAAmN,KAAA+rB,SACA76B,OAAAwB,QAAAG,UAAAmN,KAAA2kC,QAAAzzC,OAAAwB,QAAAG,UAAAixC,YAAAc,kBAAAD,QAGA,IAAAzzC,OAAAwB,QAAAG,UAAAixC,YAAAhrB,OAAA2D,QACAruB,QAAAgF,yBAAAlC,OAAAwB,QAAAG,UAAAmN,KAAAyc,UACAvrB,OAAAwB,QAAAG,UAAAixC,YAAAhrB,OAAA2D,OAAAvrB,OAAAwB,QAAAG,UAAAmN,KAAAyc,QAEAgnB,4BAAAgB,gBAAAvzC,OAAAwB,QAAAG,UAAAixC,YAAAhrB,OACA5nB,OAAAwB,QAAAG,UAAAixC,YAAAO,WAAA3uC,KAAA,SAAA/E,MACAO,OAAAwB,QAAAG,UAAAixC,YAAAnzC,KAAAozC,YACA7yC,OAAA8yC,qBAEArZ,OACAz5B,OAAAk6B,iBAAA,EAAAN,SAEAxR,OACApoB,OAAAk6B,iBAAA,EAAAN,YAKA,EAAAt3B,KAAAjD,QACAW,OAAAgD,KAAA2nB,SAAA2G,eAAAhvB,KAAAtC,OAAAwB,QAAAG,UAAAopB,KAAA/qB,OAAAwB,QAAAG,UAAAqqB,cAAA,EAAAsO,cAIAt6B,OAAAizC,SAAA,WAGA,IADA,IAAAU,UAAA,EACA7rC,EAAA,EAAAA,EAAA9H,OAAAwB,QAAAG,UAAAixC,YAAAgB,KAAA,GAAAv0C,OAAAyI,IAEA,IAAA,IAAA2uB,EAAA,EAAAA,EAAAz2B,OAAAwB,QAAAG,UAAAixC,YAAAgB,KAAAv0C,OAAAo3B,IACA,CACA,IAAAptB,IAAArJ,OAAAwB,QAAAG,UAAAixC,YAAAgB,KAAAnd,GAAA3uB,GACA,EAAAuB,MAEArJ,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAA9pC,KAAAwqC,aAAA7zC,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAA9pC,KAAAyqC,cAAAH,SAMA3zC,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAA9pC,KAAA4pC,UAAA,EAHAU,SADA3zC,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAA9pC,KAAA4pC,UAAA,KAUAjzC,OAAA+zC,mBAAA,SAAAj6B,MAAA3S,OACA,IAAA6sC,YAAAh0C,OAAAwB,QAAAG,UAAAixC,YAAAM,iBAAAp5B,OAAAm6B,YACAj0C,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAAr5B,OAAAm6B,YAAAnoC,MAAAooC,WAAAF,cAAA,EAAAE,WAAA/3B,iBAAAg4B,sBAAAn0C,OAAAwB,QAAAG,UAAAixC,YAAAM,iBAAAp5B,OAAAm6B,eAGAj0C,OAAAgzC,kBAAA,WAEA91C,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAixC,YAAAwB,WAAA,SAAAC,UAAAv6B,OAGA9Z,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAAkB,UAAA5tC,KAAAwtC,YAAA,EACA/2C,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAixC,YAAA0B,YAAA,SAAAC,KAAAz6B,OAEAy6B,KAAAC,gBAAAH,UAAAI,SAEAv3C,QAAA4P,QAAA9M,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAA,SAAAx7B,MAAAmC,OAEA9Z,OAAAwB,QAAAG,UAAAixC,YAAAM,iBAAAp5B,OAAAm6B,YAAA93B,iBAAAm3B,cAAAtzC,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAAr5B,OAAAm6B,YAAA,MAEAM,KAAAG,cAAA/8B,MAAA88B,UAEA,IAAAF,KAAAI,UAEA30C,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAAkB,UAAA5tC,KAAAwtC,YACAj0C,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAAkB,UAAA5tC,KAAAwtC,YACAt8B,MAAAs8B,YAGAj0C,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAAkB,UAAA5tC,KAAAwtC,YACAj0C,OAAAwB,QAAAG,UAAAixC,YAAAO,UAAAkB,UAAA5tC,KAAAwtC,YACAt8B,MAAAs8B,uB,WASA,uBAAA,CAAA,SAAA,aAAA,eAAA,WAAA,YAAA,SAAAj0C,OAAA9B,WAAAoC,aAAAI,SAAA0S,wBAKApT,OAAA0K,IAAA,WAAA,WAEAxM,WAAA6yB,iBAAA,KAGA/wB,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAA0oB,iBAEAhpB,OAAAgD,KAAA,SAGAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IAEA5G,SAAA,WAEAxD,QAAAqV,QAAA,6BAAAD,QAEAwa,uB,WAMA,+BAAA,CAAA,SAAA,SAAA9sB,qBAGAA,OAAAuB,WAAA,WACAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,O,WAGA,8BAAA,CAAA,SAAA,mBAAA,0BAAA,eAAA,mBAAA,mBAAA,SAAAtE,OAAAe,iBAAAgoB,wBAAAzI,aAAAkM,iBAAArQ,+BAEAnc,OAAAuB,WAAA,WAEA,IAgBA2sB,OAhBAluB,OAAAgE,aAAAM,aAAAgD,SAOApK,QAAAgF,yBAAAlC,OAAA2P,eACA3P,OAAA0P,yBAGA1P,OAAA2P,aAAAc,kBAAA,EACAzQ,OAAA2P,aAAAC,iBAAA,EACA5P,OAAA2P,aAAAE,UAAA,EACA7P,OAAA2P,aAAAe,aAAA,GAEAwd,OAAAluB,OAAA40C,qBAAA50C,OAAAgE,aAAAM,aAAAgD,UAOAyhB,wB,wBACAmF,OAAA3Y,KAAAvV,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAA,G,KACA,SAAAjE,MACAA,KAAAkmB,aAAAzoB,QAAAgF,yBAAAzC,KAAAo1C,uBACA70C,OAAAwB,QAAAG,UAAAunB,QAAA2rB,qBAAAp1C,KAAAo1C,qBACA70C,OAAAwB,QAAAG,UAAAunB,QAAAsB,KAAA/qB,KAAAo1C,qBAAA,IAGA70C,OAAAiR,WAAAQ,mBAZAzR,OAAAgD,KAAA,uBAlBAhD,OAAAgD,KAAA,uBAoCAhD,OAAA40C,qBAAA,SAAAttC,SACA,GAAAtH,OAAAwB,QAAAG,UAAAunB,QAAAqB,iBACA,OAAAvqB,OAAAwB,QAAAG,UAAAunB,QAAAqB,iB,OACA,SAAAvd,MACA,OAAAA,KAAAuI,OAAAjO,UACA,IAIAtH,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MACAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QACA,IAIAQ,OAJA5N,aAAAY,wBAIAgN,OAAAluB,OAAA40C,qBAAA50C,OAAAgE,aAAAM,aAAAgD,UAOAvG,iB,oCAEAf,OAAAwB,QAAAG,UAAAunB,QAAAsB,KAAA/jB,IACAzG,OAAAgL,cAAAhL,OAAA2P,aAAAG,WAAA,GACA9P,OAAAwB,QAAAE,QAAAoF,qBAAApD,aACA,G,KACA,SAAAjE,MACA,IAAAmuB,GAAA,cAAAM,OAAA3Y,KACA,sBAAA2Y,OAAA4mB,YACA,4BACA90C,OAAAwB,QAAAG,UAAAunB,QAAAsB,KAAAtQ,GACA,eAAAla,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QACA,gBAAAkM,iBAAAwU,YAAAzkB,MAAA,EAAA,GACA,kBAEAwhB,OACAlB,iBAAAqB,aAAAD,GAAAF,QAGAlB,iBAAAsB,aAAAF,MAxBA5tB,OAAAgD,KAAA,2B,WA6BA,sBAAA,CAAA,SAAA,aAAA,eAAA,YAAA,SAAAhD,OAAA9B,WAAAoC,aAAA8S,wBAIApT,OAAA0K,IAAA,WAAA,WACAxM,WAAA6yB,iBAAA,KAGA/wB,OAAAuB,WAAA,WACAvB,OAAAoI,2BAAA9H,aAAA0oB,gBAKAhpB,OAAAgE,aAAAM,aAAAgD,SAKAtH,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,oBANAsC,OAAAgD,KAAA,sBALAhD,OAAAgD,KAAA,a,WAcA,wBAAA,CAAA,SAAA,mBAAA,aAAA,YAAA,SAAAhD,OAAAe,iBAAA7C,WAAAyoB,wBAWA,IAAAouB,gBACAC,kBAAA,EAEAC,0BAAA,EAEA,SAAAC,cACA,EAAAF,oBACApnC,QAAAC,IAAA,4BAAAmnC,mBACAj0C,iBAAAo0C,qBAAAH,oBAIAh1C,OAAAo1C,kBAAA,SAAA31C,MACAO,OAAAq1C,mBACAN,gBAAApuB,UAAAuuB,YAZA,OAeAl1C,OAAAq1C,iBAAA,WACA1uB,UAAA2uB,OAAAP,kBAGA,MAAAQ,oBAAA,SAAA5qC,OAEA5J,iBAAAsC,oBAAA2xC,kBAAAh1C,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAitC,IACA7qC,MAAA8qC,kBAIA,IAAAC,eAAAx3C,WAAAwM,IAAA,wBAAA,SAAAC,MAAAuhB,SAAAzsB,MACAysB,UAAAhvB,QAAAgF,yBAAAzC,QACAu1C,kBAAAv1C,KACA0D,QAAAC,MAAA,iBAAA,CAAAE,SAAA0xC,kBAAAzxC,QAAAvD,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAitC,KACAx1C,OAAAo1C,oBACAH,2BACA5zC,OAAAs0C,iBAAA,eAAAJ,qBACAN,0BAAA,MAMAW,iBAAA13C,WAAAwM,IAAA,2BAAA,WACA1K,OAAAq1C,mBACAt0C,iBAAAsC,oBAAA2xC,kBAAAh1C,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAitC,IACAR,kBAAA,IAIAh1C,OAAA0K,IAAA,WAAA,WACA1K,OAAAq1C,mBACAn4C,QAAAgF,yBAAAlC,OAAAwB,QAAAE,UACAX,iBAAAsC,oBAAA2xC,kBAAAh1C,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAitC,IAEAE,iBACAE,mBACAZ,kBAAA,EACAC,0BACA5zC,OAAAw0C,oBAAA,eAAAN,0B,QAKA,WAAA,CAAA,WAGA,MAAA,CACA3mB,cAAAA,cACA0C,eAgEA,SAAAwkB,YAAA/qB,KAAAiB,aAAA+pB,OAAAzb,YACA,GAAAwb,aAAA/qB,MAAAiB,aAAA,CAIA,IAAAgqB,UAAAjrB,KAAAkrB,UAAA,SAAAhS,IACA,OAAAA,GAAAhZ,WAAA6qB,cAGA,OAAAlnB,cAAA0L,WAAAvP,KAAAirB,UAAA,GAAAjrB,KAAAirB,UAAA,GAAAhqB,aAAA+pB,UAxEA5kB,cA2EA,SAAA/E,SAAArB,MACA,IAAAte,OAAA,CAAA8hB,aAAA,EAAAC,YAAA,GAYA,OAXAzD,KAAA9R,KAAA,SAAAjM,MAAA,EAAAA,KAAAqe,uBAAAre,KAAAie,SAAA,WACAF,KAAA,GAAAwD,aAAA,EACAxD,KAAAA,KAAA1rB,OAAA,GAAAmvB,YAAA,EAEAzD,KAAAje,QAAA,SAAAyF,SACAA,QAAA0Y,WAAAmB,WACA3f,OAAA8hB,YAAAhc,QAAAgc,YACA9hB,OAAA+hB,WAAAjc,QAAAic,cAIA/hB,QAvFA8f,cAkCA,SAAAH,SAAAJ,aAAA+pB,OAAAG,OAEA,GAAA9pB,UAAAJ,aAAA,CACA,IAAA1pB,KAAA,GACA6zC,SAAAJ,OAAA,OAAA,QAGA,OAFAG,QAAAlqB,aAAA,IAEAI,U,IACA,QACA9pB,mBAAA6zC,+BAAAnqB,aACA,M,IACA,QACA1pB,mBAAA6zC,gCAAAnqB,aACA,M,IACA,QACA1pB,mBAAA6zC,0BAAAnqB,aACA,M,IACA,QACA1pB,mBAAA6zC,qBAAAnqB,aACA,M,QAEA1pB,KAAA,QAGA,OAAAA,OAzDAgqB,2BAyFA,SAAAhqB,MACA,IAAAmK,OAAA,IAEA,EAAAnK,KAAAE,QAAA,sBAAAiK,OAAA,UACA,EAAAnK,KAAAE,QAAA,gCAAAiK,OAAA,UACA,EAAAnK,KAAAE,QAAA,2BAAAiK,OAAA,UACA,EAAAnK,KAAAE,QAAA,iCAAAiK,OAAA,SAEA,OAAAA,SA9FA,SAAAmiB,cAAA5D,IAAAgB,aAAA+pB,QACA,GAAA/qB,KAAAgB,aAAA,CACA,IAAA1pB,KAAA,GACA6zC,SAAAJ,OAAA,OAAA,QAMA,OAJA,EAAA/qB,IAAAK,uBAAAL,IAAAC,WACAD,IAAAC,SAAA,SAGAD,IAAAC,U,IACA,QACA3oB,mBAAA6zC,+BAAAnqB,aACA,M,IACA,QACA1pB,mBAAA6zC,gCAAAnqB,aACA,M,IACA,QACA1pB,mBAAA6zC,0BAAAnqB,aACA,M,IACA,QACA1pB,mBAAA6zC,qBAAAnqB,aACA,M,QAEA1pB,KAAA,QAGA,OAAAA,UC3yKApF,QAAAC,OAAA,mBAAA,CAAA,c,UACA,iBAAA,CAAA,wBAAA,YAAA,kBAAA,SAAAi5C,sBAAAhjC,UAAAtV,iBAEA,MAAA,CACAqU,SAAA,IACAG,MAAA,CACA+jC,gBAAA,IACAC,UAAA,IACAC,UAAA,IACAC,YAAA,IACAC,SAAA,IACAC,SAAA,IACAC,SAAA,IACAC,WAAA,IACAC,iBAAA,IACA1pB,YAAA,KAEAxvB,WAAA,CAAA,aAAA,SAAA,SAAAO,WAAA8B,QAEAA,OAAA82C,mBAAA,WAEA92C,OAAA+2C,cAAA,GACA,UAAA/2C,OAAAy2C,UACAz2C,OAAA+2C,cAAA94C,KAAA,CAAAq1B,GAAA,IAAA/iB,KAAA,QACA,UAAAvQ,OAAA02C,UACA12C,OAAA+2C,cAAA94C,KAAA,CAAAq1B,GAAA,IAAA/iB,KAAA,QACA,UAAAvQ,OAAA22C,UACA32C,OAAA+2C,cAAA94C,KAAA,CAAAq1B,GAAA,IAAA/iB,KAAA,QACA,UAAAvQ,OAAA42C,YACA52C,OAAA+2C,cAAA94C,KAAA,CAAAq1B,GAAA,IAAA/iB,KAAA,UACA,EAAAvQ,OAAA+2C,cAAA13C,SACAW,OAAAg3C,sBAAAh3C,OAAA+2C,cAAA,GAAAzjB,IAEAp1B,WAAAwuB,iBAEAxuB,WAAAwuB,eAAA,CAAAO,YAAA,GAAAE,YAAA,QAKA9a,KAAA,SAAAC,MAAAC,QAAAC,OACA,IAAA3U,aAAAC,gBAAAC,gCAAA,8BACAyU,MAAA6jC,kBACA7jC,MAAA6jC,iBAAA,GACA7jC,MAAA8jC,YACA9jC,MAAA8jC,WAAA,GACA9jC,MAAA+jC,YACA/jC,MAAA+jC,WAAA,GACA/jC,MAAAgkC,cACAhkC,MAAAgkC,aAAA,GAEAlkC,MAAA8J,UAAA,CAAA66B,iBAAA,IACA3kC,MAAA4kC,eAAA,EACA5kC,MAAA6kC,eAAA,EACA7kC,MAAA8kC,sBAAA,EACA9kC,MAAA+kC,YAAA,EACA/kC,MAAAglC,yBAAA,EACAhlC,MAAAilC,oBAAA,GAEAjlC,MAAAklC,UAAA,SAAAnuC,KAEA,OAAAiJ,MAAAsC,QAAAA,QAAApT,QAAAE,QAAAoF,qBAAApD,cAAA2F,KAGAiJ,MAAAmlC,WAAA,WAEAv6C,QAAAgF,yBAAAoQ,MAAAukC,qBAEAvkC,MAAAukC,oBAGAvkC,MAAAolC,oBAAA,WAEA,IAAAplC,MAAA+kC,aAKA/kC,MAAAma,MAAAC,eAAAM,uBACA1a,MAAA4kC,eAAA,GAJA5kC,MAAAsC,QAAAhV,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,UAOAwS,MAAAqlC,qBAAA,SAAAtuC,KAoBAiJ,MAAAsC,QAAAA,QAAA3D,WAAAY,QAAAhU,aAAAiC,mBAAA,gCAlBA,WAEAs2C,sBAAAwB,mBAEAtlC,MAAAsC,QAAAA,QAAApT,QAAAE,QAAAoF,qBAAApD,YACA4O,MAAAsC,QAAAA,QAAApT,QAAAE,QAAAoF,qBAAAlD,QACA,GACA,GACA,EACA0O,MAAAma,MAAAC,eAAAC,UACAtjB,K,KAEA,WAEAiJ,MAAAulC,mBAAA,QAOAvlC,MAAAulC,kBAAA,SAAAC,QAEA1B,sBAAAyB,kBACAvlC,MAAAsC,QAAAA,QAAApT,QAAAE,QAAAoF,qBAAAlD,QACA0O,MAAAma,MAAAC,eAAAC,W,KAGA,SAAAltB,MAEA6S,MAAAylC,uBAAAt4C,KAAAu4C,eACA,IAAA1lC,MAAAylC,uBAAAE,cAAA54C,QAAAy4C,QACAxlC,MAAAsC,QAAAhV,SAAAC,KAAAhC,aAAAiC,mBAAA,8BAAA,cAKAwS,MAAA4lC,aAAA,WAEA5lC,MAAAylC,wBACAzlC,MAAAulC,mBAAA,GACAvlC,MAAA6kC,eAAA7kC,MAAA6kC,eAGA7kC,MAAA6lC,aAAA,WAEA7lC,MAAAulC,mBAAA,GACAvlC,MAAA4kC,eAAA5kC,MAAA4kC,eAGA5kC,MAAA8lC,0BAAA,WAEA9lC,MAAA6kC,eAAA,EACA,EAAA7kC,MAAA+kC,aAAA/kC,MAAAilC,sBAAAjlC,MAAA8J,UAAA66B,iBAEA3kC,MAAA8kC,sBAAA,GAGA9kC,MAAA+kC,YAAA,EACA/kC,MAAAslC,uBAGAtlC,MAAAslC,mBAAA,WAEA,EAAAtlC,MAAA+kC,aACA/kC,MAAAqlC,sBAAA,GACAz6C,QAAAuyC,UAAAn9B,MAAAma,MAAAC,eAAAQ,qBAEA5a,MAAAma,MAAAC,eAAAQ,qBACAkpB,sBAAAwB,mBAEAtlC,MAAAsC,QAAAA,QAAApT,QAAAE,QAAAoF,qBAAApD,YACA4O,MAAAsC,QAAAA,QAAApT,QAAAE,QAAAoF,qBAAAlD,QACA0O,MAAA8J,UAAA66B,iBACA3kC,MAAAma,MAAAC,eAAAS,YACA,EACA7a,MAAAma,MAAAC,eAAAC,WACA,GAGAra,MAAA8kC,sBAAA,EACA9kC,MAAA6kC,eAAA,GAGA7kC,MAAAsC,QAAAhV,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,UAGAwS,MAAA+lC,UAAA,SAAArrC,MAEAsF,MAAA+kC,YAAArqC,KAAAvG,IACA6L,MAAAilC,oBAAAvqC,KAAAy5B,YACAn0B,MAAA8J,UAAA66B,iBAAAjqC,KAAAy5B,YACAn0B,MAAA8J,UAAAk8B,gBAAAtrC,KAAAvG,IAEA6L,MAAAma,MAAAC,eAAAO,YAAA/vB,QAAAq7C,SAAAvrC,KAAAwrC,WAGA/6C,YAAA2V,UAAA1V,YAAA,sB,QAIA,wBAAA,CAAA,KAAA,aAAA,SAAAS,GAAAs6C,YAEA,MAAA,CACAZ,kBAAA,SAAAt0C,QAAAopB,gBAEA,IAAA+rB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACAmE,QAAAL,QACAs1C,OAAAlsB,gBAEAmsB,iBAAA,IAaA,OAVAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAEAi5C,SAAA34C,OAAAN,KAAAw5C,iBAGAP,SAAApK,SAEAsJ,mBAAA,SAAAsB,YAAA31C,QAAA+V,YAAAhJ,QAAA6oC,UAAAxsB,UAAAysB,gBAEA,IAAAV,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,6BACA3B,KAAA,CACAiE,YAAAw1C,YACAt1C,QAAAL,QACAkjC,YAAAntB,YACAk/B,QAAAt7C,QAAAm8C,OAAA/oC,SAAA,GACAgpC,UAAAH,UACAI,UAAA5sB,UACA6sB,YAAAJ,kBAcA,OAVAX,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAEAi5C,SAAA34C,OAAAN,KAAAw5C,iBAGAP,SAAApK,aClPApxC,QAAAC,OAAA,oBAAA,CAAA,aAAA,eAAA,oBAAA,oB,uDACA,SAAA+V,SAAA9V,eAAAG,kBAEAH,eAAA6B,KAAA,iCACA,CACAxB,YAAAF,iBAAAG,YAAA,gBACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,6CACA,CACAN,YAAAF,iBAAAG,YAAA,gBACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,yCACA,CACAN,YAAAF,iBAAAG,YAAA,wBACAC,WAAA,sB,KAGA,0CACA,CACAF,YAAAF,iBAAAG,YAAA,yBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,0CACA,CACAN,YAAAF,iBAAAG,YAAA,yBACAC,WAAA,8BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,wCACA,CACAN,YAAAF,iBAAAG,YAAA,uBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,uCACA,CACAN,YAAAF,iBAAAG,YAAA,sBACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,0DACA,CACAN,YAAAF,iBAAAG,YAAA,sBACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,yCACA,CACAN,YAAAF,iBAAAG,YAAA,wBACAC,WAAA,oBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,6DACA,CACAN,YAAAF,iBAAAG,YAAA,yBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,kEACA,CACAN,YAAAF,iBAAAG,YAAA,8BACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,wEACA,CACAN,YAAAF,iBAAAG,YAAA,oCACAC,WAAA,sCACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,8EACA,CACAN,YAAAF,iBAAAG,YAAA,0CACAC,WAAA,sCACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,wCACA,CACAN,YAAAF,iBAAAG,YAAA,sBACAC,WAAA,yBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAKA,uDACA,CACAN,YAAAF,iBAAAG,YAAA,qCACAC,WAAA,8BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,uC,WAOA,yBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,iBAAA,eAAA,eAAA,YAAA,eAAA,SAAAiC,OAAAC,MAAA9B,GAAA+W,aAAAvU,QAAAG,eAAAwf,aAAAhgB,aAAA8S,UAAAvV,cAEAmC,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAmO,wBAEAzO,OAAAgD,KAAA,SAEAsd,aAAAO,wBACA7gB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAA,GACAtE,OAAAoI,2BAAApI,OAAAkE,aAAAuK,uBACAzO,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAoD,eAAA44C,sBAAA15C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBAAA/J,KAAA,SAAA/E,MAEAO,OAAA25C,sBAAAl6C,QAIAO,OAAA45C,aAAA,WAEA55C,OAAAgD,KAAA,UAGAhD,OAAA65C,YAAA,WAEA75C,OAAA85C,aAMAh5C,eAAAi5C,yBACA/5C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,oBACAvO,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAwB,QAAAE,QAAAoF,qBAAApD,a,KACA,SAAAjE,MAEAO,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAA7O,KAAAu6C,2BACAh6C,OAAAoI,2BAAApI,OAAAkE,aAAAuK,wBACA,EAAAzO,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAI,mBACA1O,OAAAgD,KAAA,2CACA,EAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAI,mBACA1O,OAAAgD,KAAA,yCAEAhD,OAAAgD,KAAA,0CAjBAhD,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,+BAAA,a,WAsBA,mBAAA,CAAA,SAAA,eAAA,iBAAA,eAAA,eAAA,YAAA,eAAA,kBAAA,mBAAA,SAAAE,OAAAkV,aAAApU,eAAAwf,aAAAhgB,aAAA8S,UAAAvV,aAAAC,gBAAAqe,+BAGAnc,OAAAi6C,WAAA,EACAj6C,OAAA+B,WAAA,GACA/B,OAAA+W,MAAA,GAEA/W,OAAA+W,MAAAmjC,aAAA,GACAl6C,OAAA+W,MAAAojC,oBAAA,CACA/iC,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,WACAC,MAAA,GACA5E,WAAA,CAAA6E,MAAA,eACAC,YAAA,EACAa,UAAA,EACA2b,eAAA,yHACApc,SAAA,yDAEA,CACAP,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,WACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,UACAxG,MAAAtT,aAAAiC,mBAAA,UACA4tB,OAAA,QACA1a,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,QACAxG,MAAAtT,aAAAiC,mBAAA,cACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,WACA4tB,OAAA,QACA1a,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAI,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAEA3Y,OAAA+W,MAAAqjC,iBAAA,SAAAxhC,IAEAA,GAAA+W,KAAA,SAAA0qB,QAEAA,OAAAC,SAAAhvC,KAAAivC,OAAAF,OAAAC,UAAA5sB,OAAA,oBACA2sB,OAAAG,YAAAlvC,KAAAivC,OAAAF,OAAAG,aAAA9sB,OAAA,oBACA2sB,OAAAI,QAAAt+B,iBAAA4D,eAAAs6B,OAAAI,SACAJ,OAAAr8B,OAAA7B,iBAAA4D,eAAAs6B,OAAAr8B,UAGAhe,OAAA+W,MAAA2jC,eAAA,IAAA3jC,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,KAGA5Y,OAAA+W,MAAA2jC,eAAA5hC,OACA9Y,OAAA+W,MAAAmjC,aAAA/hC,WAAA1Y,KAAAO,OAAA+W,MAAA2jC,eAAAj7C,SAEAO,OAAA+W,MAAA4jC,YAAA,GACA36C,OAAA+W,MAAA6jC,mBAAA,CACAxjC,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,WACAC,MAAA,GACA5E,WAAA,CAAA6E,MAAA,eACAC,YAAA,EACAa,UAAA,EACA2b,eAAA,8HACApc,SAAA,yDAEA,CACAP,MAAA,UACAxG,MAAAtT,aAAAiC,mBAAA,QACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,sBACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,OACA4tB,OAAA,QACA1a,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,QACAxG,MAAAtT,aAAAiC,mBAAA,gBACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAI,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAEA3Y,OAAA+W,MAAA8jC,gBAAA,SAAAjiC,IAEAA,GAAA+W,KAAA,SAAA0qB,QAEAA,OAAAvjC,QAAAxL,KAAAivC,OAAAF,OAAAvjC,SAAA4W,OAAA,oBACA2sB,OAAAS,YAAA3+B,iBAAA4D,eAAAs6B,OAAAS,eAGA96C,OAAA+W,MAAAgkC,cAAA,IAAAhkC,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,KAGA5Y,OAAA+W,MAAAgkC,cAAAjiC,OACA9Y,OAAA+W,MAAA4jC,YAAAxiC,WAAA1Y,KAAAO,OAAA+W,MAAAgkC,cAAAt7C,SAGAqG,eAAAk1C,oBAAArwC,OACA,IAAAswC,KAAA93C,QAAAC,MAAA,mBACA,IAAA7E,QAAA,IAAA28C,QACA38C,QAAA44B,OAAA,eAAA,oBACA54B,QAAA44B,OAAA,iBAAAh0B,QAAAC,MAAA,iBAEA+3C,KAAA3xC,KAAAC,UAAA,CAAA/F,YAAAu3C,KAAAv3C,YAAAC,aAAAs3C,KAAAt3C,aAAAy3C,YAAAH,KAAAG,oBAEAC,MAAA,iCAAA,CAAAvzB,OAAA,OAAAvpB,QAAAA,QAAA48C,KAAAA,KAAAG,WAAA,IAGAt7C,OAAAuB,WAAA,WAEAvB,OAAAwB,QAAA+5C,kBAAA,EACAv7C,OAAAwB,QAAAg6C,sBAAA,CACA9tB,OAAA,IACAgD,QAAAvU,iBAAAwU,YACAE,UAAA,GAEAvQ,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAmO,wBAAAzO,OAAAmO,mBAEAnO,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAxG,eAAA46C,aAAA17C,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MAEA4B,OAAAs6C,WAAA,IAAAt6C,OAAAs6C,UAAAC,aAAAzsC,SACA9N,OAAAs0C,iBAAA,eAAAqF,qBAAA,GAEAh7C,OAAA67C,mBAEA,SAAA75B,KAEA7e,QAAAC,MAAA,oBACA/B,OAAAs6C,WAAA,IAAAt6C,OAAAs6C,UAAAC,aAAAzsC,SACA9N,OAAAs0C,iBAAA,eAAAqF,qBAAA,GAEAh7C,OAAA67C,mBAEA77C,OAAAwB,QAAA+5C,kBAAA,KAOAv7C,OAAA67C,gBAAA,WAcA,IAKAC,iBAjBAx7B,aAAAO,wBAEA7gB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAA+7C,gBAAA,EAEA7mC,aAAA+kC,aAEAj6C,OAAAi6C,WAAA/kC,aAAA+kC,WAAAnlC,YAGA9U,OAAAi6C,WAAA,IAAA/8C,QAAAgF,yBAAAlC,OAAAwB,QAAAw6C,aAIA,MAAAh8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,cACAL,iBAAA97C,OAAAo8C,gBACAp8C,OAAAq8C,qBAAAP,iBAAA,GACA97C,OAAAs8C,4BAAAR,iBAAA,IAEA97C,OAAAu8C,YACA,IAAAv8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA7iB,QAEAr5B,OAAAgD,KAAA,6CAIAhD,OAAAwB,QAAAw6C,WAAA,GACAh8C,OAAAwB,QAAAw6C,WAAAC,sBAAA,GACAn7C,eAAA07C,WAAAx8C,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAAA5D,OAAAi6C,YAAAz1C,KAAA,SAAA/E,MAEAO,OAAAwB,QAAAw6C,WAAAC,sBAAAx8C,KAEA,IAAAmU,SAAA5T,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAA,MACAn8C,OAAAy8C,eACAz8C,OAAAwB,QAAAw6C,WAAAC,sBAAAx8C,MAGAqB,eAAA47C,qBACA18C,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAAA,GAAA,aAAA,cAAA,GAAA,GAAA,G,KACA,SAAAnE,MAEAO,OAAAwB,QAAAw6C,WAAAC,sBAAAU,mBAAAl9C,KAAAm9C,0BAAAC,IAAA,CAAAxjB,OAAA,IACAr5B,OAAAwB,QAAAw6C,WAAAC,sBAAAa,yBAAAr9C,KAAAm9C,0BAAAC,IAAA,CAAAxjB,OAAA,EAAA8iB,YAAA,MAAA18C,KAAAm9C,0BAAAC,IAAA,CAAAp2C,IAAAzG,OAAAi6C,WAAA5gB,OAAA,EAAA8iB,YAAA,MAGAn8C,OAAAu8C,YAEA,IAAAv8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA7iB,QACAr5B,OAAAgD,KAAA,8CAIAhD,OAAAq8C,qBAAA,EACAr8C,OAAA+8C,oBAAA,EACA/8C,OAAAg9C,mBAAA,EAEAh9C,OAAAwK,qBAAA,KAGAxK,OAAAi9C,eAAA,SAAA91C,OAEAnH,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAAh1C,OAGAnH,OAAAu8C,UAAA,WAEA,IAAA1L,YAAA,IAAAvlC,KAAA,sBAAAO,QAAA,KAAA,KAAAA,QAAA,KAAA,MACAqxC,kBAAA,IAAA5xC,KAAAtL,OAAAwB,QAAAw6C,WAAAC,sBAAAkB,kBAAAtxC,QAAA,KAAA,KAAAA,QAAA,KAAA,MACA7L,OAAAo9C,oBAAAp9C,OAAAwB,QAAAw6C,WAAAC,sBAAAoB,oBACAr9C,OAAAo9C,oBAAAF,oBAAArM,YACA7wC,OAAAo9C,oBAAAp9C,OAAAo9C,qBAAA,EAAAp9C,OAAAwB,QAAAw6C,WAAAC,sBAAAqB,oBACA,IAAAt9C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAz1C,KAGA,MAAAzG,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,cACAn8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAAn8C,OAAAo9C,qBAAAp9C,OAAAwB,QAAAw6C,WAAAC,sBAAAsB,mBAAA,IAAA,KAIAv9C,OAAAw9C,iBAAAx9C,OAAAwB,QAAAw6C,WAAAC,sBAAAwB,iBACAz9C,OAAA09C,YAAA19C,OAAAwB,QAAAw6C,WAAAC,sBAAA0B,YAEA39C,OAAAwB,QAAAw6C,WAAAC,sBAAA2B,cAAA9oC,WAAA,IACA9U,OAAAwB,QAAAw6C,WAAAC,sBAAA2B,cAAA,QAGA59C,OAAA69C,kBAAA79C,OAAAwB,QAAAw6C,WAAAC,sBAAA6B,oBAAA,EAAA99C,OAAAwB,QAAAw6C,WAAAC,sBAAA8B,SAAA1+C,OACAW,OAAAwB,QAAAw6C,WAAAC,sBAAA+B,oBAEAh+C,OAAAo9C,qBAAA,EACAp9C,OAAA69C,mBAAA,GAEA79C,OAAAwB,QAAAw6C,WAAAC,sBAAAgC,cAAAj+C,OAAAoM,WAAApM,OAAAwB,QAAAw6C,WAAAC,sBAAAgC,eACAj+C,OAAAwB,QAAAw6C,WAAAC,sBAAAiC,cAAAl+C,OAAAoM,WAAApM,OAAAwB,QAAAw6C,WAAAC,sBAAAiC,eAEA,IAAAl+C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAz1C,IAEAzG,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAiC,YAAAn+C,OAAAwB,QAAAw6C,WAAAC,sBAAAgC,cAIAj+C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA7iB,OAAA,EAEA,IAAA/tB,KAAAtL,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAiC,aAAA,IAAA7yC,KAAAtL,OAAAwB,QAAAw6C,WAAAC,sBAAAgC,iBAEAj+C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAiC,YAAAn+C,OAAAwB,QAAAw6C,WAAAC,sBAAAgC,cACAj+C,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,4BAAA,YAIAE,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAiC,YAAAn+C,OAAAoM,WAAApM,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAiC,aAGAn+C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAhe,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAlJ,YAAA,EACA9U,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAp8B,cAAA3D,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,QACAhe,OAAA+c,mBACA,IAAA/c,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,cACAn8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAA,KAEAn8C,OAAAo+C,mBAAA,GAGAp+C,OAAAo8C,cAAA,WAEA,IAGAiC,YACAC,cAJAC,SAAA,EACAC,cAAA,EACAC,YAAA,EA8EA,OA1EAvhD,QAAAgF,yBAAAlC,OAAA+W,MAAAmjC,aAAA/hC,aACAjb,QAAA4P,QAAA9M,OAAA+W,MAAAmjC,aAAA/hC,WAAA1Y,OAAA,SAAA46C,OAAAvgC,OAEAugC,OAAAlyC,WAEAk2C,YAAA,IAAA/yC,KAAAtL,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAiC,aACAG,cAAA,EAEAD,aAAA,IAAA/yC,KAAA+uC,OAAAqE,mBAEAJ,cAAAjE,OAAAsE,cAEAN,aAAA,IAAA/yC,KAAA+uC,OAAAuE,oBAEAN,cAAAjE,OAAAwE,eAEAR,aAAA,IAAA/yC,KAAA+uC,OAAAyE,oBAEAR,cAAAjE,OAAA0E,eAEAV,aAAA,IAAA/yC,KAAA+uC,OAAA2E,oBAEAV,cAAAjE,OAAA4E,eAEAZ,aAAA,IAAA/yC,KAAA+uC,OAAA6E,oBAEAZ,cAAAjE,OAAA8E,eAEAd,aAAA,IAAA/yC,KAAA+uC,OAAA+E,sBAEAd,cAAAjE,OAAAgF,gBAGAb,eAAAtK,WAAA/3B,iBAAAg4B,sBAAAkG,OAAAI,UAEA,IAAA6D,eAEAG,aAAAH,cACAC,UAAA1mB,KAAAynB,MAAA,KAAApL,WAAA/3B,iBAAAg4B,sBAAAkG,OAAAI,UAAA6D,gBAAA,KAIAC,UAAArK,WAAA/3B,iBAAAg4B,sBAAAkG,OAAAI,aAKAz6C,OAAAq8C,qBAAAkC,SACAv+C,OAAAu/C,0BAAAf,cACAx+C,OAAAw/C,iCAAArjC,iBAAA4D,eAAAy+B,eACAx+C,OAAAy/C,6BAAAhB,YACAz+C,OAAA0/C,oCAAAvjC,iBAAA4D,eAAA0+B,aAEAF,SAAA,EACArhD,QAAAgF,yBAAAlC,OAAA+W,MAAA4jC,YAAAxiC,aACAjb,QAAA4P,QAAA9M,OAAA+W,MAAA4jC,YAAAxiC,WAAA1Y,OAAA,SAAAkgD,OAAA7lC,OAEA6lC,OAAAx3C,WAEAo2C,UAAArK,WAAA/3B,iBAAAg4B,sBAAAwL,OAAA7E,iBAIA96C,OAAA+8C,oBAAA7I,WAAAqK,UACAv+C,OAAA4/C,2BAAAzjC,iBAAA4D,eAAAw+B,UAEAv+C,OAAAg9C,mBAAAnlB,KAAAynB,MAAA,KAAAt/C,OAAAq8C,qBAAAr8C,OAAA+8C,sBAAA,IACA/8C,OAAAg9C,mBAAA,IAEAh9C,OAAAg9C,mBAAA,GAEAh9C,OAAA6/C,0BAAA1jC,iBAAA4D,eAAA8X,KAAAynB,MAAA,KAAAt/C,OAAAq8C,qBAAAr8C,OAAA+8C,sBAAA,KAEA/8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAhe,OAAAg9C,mBACA,CAAAh9C,OAAAq8C,qBAAAlgC,iBAAA4D,eAAA/f,OAAAq8C,wBAGAr8C,OAAA8/C,cAAA,SAAAC,mBAEA,MAAA,CACA5+B,MAAA4+B,mBAAAA,kBAAAC,UAAAD,kBAAAE,OACA36B,QAAAy6B,mBAAAA,kBAAAG,QAAAH,kBAAAE,SAIAjgD,OAAAmgD,UAAA,SAAAJ,kBAAA5+B,OAEA,OAAA4+B,kBAAAK,OAAAj/B,QAGAnhB,OAAAqgD,0BAAA,WACArgD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAA7B,iBAAAg4B,sBAAAn0C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAp8B,gBAGA9f,OAAAsgD,cAAA,WAyCA,OAtCA,MAAAtgD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,cAEAn8C,OAAA+W,MAAAmjC,aAGAqG,YAAAzzC,QAAA,SAAAE,MACA,IAAAwzC,QAAAxgD,OAAAwB,QAAAw6C,WAAAC,sBAAA8B,SAAA9kC,KAAA,CAAAxS,IAAAuG,KAAAvG,MAEAvJ,QAAAuyC,UAAA+Q,WACAA,QAAAr4C,SAAA6E,KAAA7E,YAMAnI,OAAA+W,MAAA4jC,YAGA4F,YAAAzzC,QAAA,SAAAE,MACA,IAAA2yC,OAAA3/C,OAAAwB,QAAAw6C,WAAAC,sBAAAwE,QAAAxnC,KAAA,CAAAxS,IAAAuG,KAAAvG,MAEAvJ,QAAAuyC,UAAAkQ,UACAA,OAAAx3C,SAAA6E,KAAA7E,aAOAnI,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAt4C,QAAA5D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,IAAA5D,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAz1C,MACAzG,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAwE,qBAAA1gD,OAAAwB,QAAAE,QAAAoF,qBAAApD,aACA1D,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAyE,0BAAA3gD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA7iB,OAAA,EAEAr5B,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA0E,eAAA5gD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA0E,eAAA9rC,WAGA9U,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,a,IAEA,IACAn8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAhe,OAAAwB,QAAAw6C,WAAAC,sBAAAqB,oBACAt9C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAp8B,cAAA3D,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,QACA,M,IAEA,IACAhe,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA2E,aAAA7gD,OAAA+8C,oBACA/8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA4E,YAAA9gD,OAAAu/C,0BACAv/C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAhe,OAAAg9C,mBACAh9C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA6E,eAAA/gD,OAAAy/C,6BACAz/C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA8E,oBAAA7kC,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA2E,cACA7gD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA+E,mBAAA9kC,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA4E,aACA9gD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAp8B,cAAA3D,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,QACAhe,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAgF,sBAAA/kC,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA6E,gBACA,M,IAEA,IACA/gD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAhe,OAAAwB,QAAAw6C,WAAAC,sBAAA18B,eACAvf,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAp8B,cAAA3D,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,QACA,M,IAEA,IACAhe,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAhe,OAAAwB,QAAAw6C,WAAAC,sBAAA2B,cACA59C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAp8B,cAAA3D,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,QACA,M,QAGA,IAAAmjC,OAAAnhD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAlJ,YAAA,EACA9U,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAmjC,OACAnhD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAp8B,cAAA3D,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,QAKAsC,aAAAY,uBAIAlhB,OAAAohD,sBACAphD,OAAAgD,KAAA,4CAGAhD,OAAAqhD,eAAA,WAGA,IAAAC,KAAArzC,EAAA,qBAGA,GAFAqzC,KAAAC,IAAA,SAAA,IAEAvhD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,QACA,KAAAhe,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OACA,CACA,IAAAugC,SAAAv+C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,OAAAvS,WAAAI,QAAA,KAAA,IAEA,GAAA,GADA0yC,SAAArK,WAAAqK,WAEA,OAAA,EAKA,OAFA+C,KAAAC,IAAA,SAAA,kBAEA,GAGA,IAAAC,sBACA,CACAC,cAAA3jD,gBAAAC,gCAAA,+BACAwS,KAAA,mBACAkzB,kBAAA,GACA8M,qBAAA,GACA7M,eAAA,SAAA8M,aAAAlZ,OAEA,IACAve,QAAA,IAAAzN,KAAAtL,OAAAwB,QAAAw6C,WAAAC,sBAAAgC,eACAvvB,iBAAA,IAAApjB,KAAAtL,OAAAwB,QAAAw6C,WAAAC,sBAAAiC,eACAwD,SAAA,IAAAp2C,KAAAklC,cAEA,GAAA,iBAAAllC,KAAAivC,OAAA/J,cAAA9iB,OAAA,qBAAAg0B,SAAA3oC,SAAA2V,iBAAAgzB,SAAA,CAKAC,iBAAA,CAAA5oC,QAAA2U,OAAA,oBAAAgB,iBAAAhB,OAAA,qBAIA,OAFAxZ,KAAAuvB,kBAAA+d,sBAAAC,cAAA3hD,mBAAA,2BAAA6hD,mBAEA,EAGA,OAjBA,GAmBA7Q,iBAAA,SAAAN,aAAAlZ,OAGA,OAAA,IAIAt3B,OAAA4hD,oBAAA,IAAA5Q,IAAAC,GAAAC,SAAAC,cAAAqQ,uBAEA17C,eAAA+7C,oBAAAl3C,OACA,IAAAswC,KAAA93C,QAAAC,MAAA,mBACA,IAAA7E,QAAA,IAAA28C,QACA38C,QAAA44B,OAAA,eAAA,oBACA54B,QAAA44B,OAAA,iBAAAh0B,QAAAC,MAAA,iBAEA+3C,KAAA3xC,KAAAC,UAAA,CAAA/F,YAAAu3C,KAAAv3C,YAAAC,aAAAs3C,KAAAt3C,aAAAy3C,YAAAH,KAAAG,oBAEAC,MAAA,iCAAA,CAAAvzB,OAAA,OAAAvpB,QAAAA,QAAA48C,KAAAA,KAAAG,WAAA,IAGAt7C,OAAAy8C,aAAA,WAEA37C,eAAA27C,aAAAz8C,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MAEA4B,OAAAs6C,WAAA,IAAAt6C,OAAAs6C,UAAAC,aAAAzsC,SACA9N,OAAAs0C,iBAAA,eAAAkM,qBAAA,GAEA7hD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAA,IACAn8C,OAAA8hD,gBAAA,EACA9hD,OAAA+W,MAAAqjC,iBAAA2H,MAAA,GAAA/hD,OAAAwB,QAAAw6C,WAAAC,sBAAA8B,UACA/9C,OAAA+W,MAAA8jC,gBAAAkH,MAAA,GAAA/hD,OAAAwB,QAAAw6C,WAAAC,sBAAAwE,UAEA,SAAAz+B,KAEA7e,QAAAC,MAAA,oBACA/B,OAAAs6C,WAAA,IAAAt6C,OAAAs6C,UAAAC,aAAAzsC,SACA9N,OAAAs0C,iBAAA,eAAAkM,qBAAA,GAEA7hD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAA,IACAn8C,OAAA8hD,gBAAA,EACA9hD,OAAA+W,MAAAqjC,iBAAA2H,MAAA,GAAA/hD,OAAAwB,QAAAw6C,WAAAC,sBAAA8B,UACA/9C,OAAA+W,MAAA8jC,gBAAAkH,MAAA,GAAA/hD,OAAAwB,QAAAw6C,WAAAC,sBAAAwE,WAEAzgD,OAAA8hD,gBAAA,EACA9hD,OAAA+7C,gBAAA,EACA/7C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAA,QAMAn8C,OAAA6D,eAAA,SAAAm+C,aAEA,MAAAhiD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,cAEAn8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAA6F,aAEAlhD,eAAA+C,eAAA7D,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SACA5D,OAAA8hD,gBAAA,EACA9hD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YAAA6F,aAGAhiD,OAAAiiD,SAAA,SAAA/yC,KAAAokB,IAEA,IAAA4M,QAAAv6B,SAAAiV,eAAA0Y,IAAA4M,UAAA,EACAhxB,KAAAqxC,YAAAzzC,QAAA,SAAAE,MAEAA,KAAA7E,SAAA+3B,WAIAlgC,OAAA+c,iBAAA,WACA,IAAAmlC,aAAAliD,OAAAwB,QAAAw6C,WAAAC,sBAEAkG,YAAAD,aAAA5E,oBACAh+B,YAAA4iC,aAAA3iC,eACA6iC,cAAAF,aAAAtE,cAEAsE,aAAAG,2BAAAlmC,iBAAA4D,eAAAoiC,aACAD,aAAAhiC,sBAAA/D,iBAAA4D,eAAAT,aACA4iC,aAAAI,oBAAAnmC,iBAAA4D,eAAAqiC,gBAGApiD,OAAA0K,IAAA,WAAA,WACArJ,OAAAw0C,oBAAA,eAAAmF,qBAAA,GACA35C,OAAAw0C,oBAAA,eAAAgM,qBAAA,Q,WAGA,oBAAA,CAAA,SAAA,QAAA,KAAA,iBAAA,eAAA,YAAA,mBAAA,SAAA7hD,OAAAC,MAAA9B,GAAA2C,eAAAR,aAAA8S,UAAA+I,+BAGAnc,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAmO,wBAAAzO,OAAAmO,mBACAnO,OAAAgD,KAAA,SAEA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwK,qBAAA,IACAxK,OAAAuiD,gBAAA,MAAAviD,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,YACAn8C,OAAAw9C,iBAAAx9C,OAAAwB,QAAAw6C,WAAAC,sBAAAwB,iBACAz9C,OAAA09C,YAAA19C,OAAAwB,QAAAw6C,WAAAC,sBAAA0B,YACA39C,OAAAwiD,sBAAA,GAEAxiD,OAAAyiD,eAAA,WAEAziD,OAAAuiD,gBACAzhD,eAAA4hD,wBAAA1iD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MACAO,OAAAw9C,iBAAA/9C,KAAAg+C,iBACAz9C,OAAA09C,YAAAj+C,KAAAk+C,YACA39C,OAAAwiD,qBAAAxiD,OAAAwB,QAAAw6C,WAAAC,sBAAA2B,gBAAAn+C,KAAAm+C,cACA59C,OAAA09C,aAAA19C,OAAAw9C,mBAAAx9C,OAAAwiD,sBACAxiD,OAAA2iD,gBAKA3iD,OAAA2iD,eAGA3iD,OAAA2iD,YAAA,WAEA,IAAA3G,WAAAh8C,OAAAwB,QAAAw6C,WAGAA,WAAAC,sBAAA8B,SAAAjxC,QAAA,SAAAE,MACAA,KAAAytC,QAAAt+B,iBAAAg4B,sBAAAnnC,KAAAytC,WAIAuB,WAAAC,sBAAAwE,QAAA3zC,QAAA,SAAAE,MACAA,KAAAgR,OAAA7B,iBAAAg4B,sBAAAnnC,KAAAgR,QACAhR,KAAA8tC,YAAA3+B,iBAAAg4B,sBAAAnnC,KAAA8tC,eAGAh6C,eAAA6hD,YAAA3G,WAAAC,uBAAAz3C,KACA,SAAA/E,MACAO,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAz8C,KAAAy8C,yBACAl8C,OAAAwB,QAAAw6C,WAAAC,sBAAA8B,SAAAt+C,KAAAs+C,SACA/9C,OAAAwB,QAAAw6C,WAAAC,sBAAAwE,QAAAhhD,KAAAghD,QACAzgD,OAAAgD,KAAA,2CACAlC,eAAA2C,eAAAzD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SACA9C,eAAA+C,eAAA7D,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SACAT,QAAAC,MAAA,kBAAA,SAIApD,OAAA4iD,cAAA,WAEA5iD,OAAAwB,QAAAw6C,WAAAC,sBAAA8B,SAAAjxC,QAAA,SAAAE,MACAA,KAAA7E,UAAA,IAGAnI,OAAAwB,QAAAw6C,WAAAC,sBAAAwE,QAAA3zC,QAAA,SAAAE,MACAA,KAAA7E,UAAA,IAGArH,eAAA2C,eAAAzD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SACA9C,eAAA+C,eAAA7D,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aACA3D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAEAT,QAAAC,MAAA,kBAAA,MAEAtC,eAAA4hD,wBAAA1iD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MACAO,OAAAwB,QAAAw6C,WAAAC,sBAAAwB,iBAAAh+C,KAAAg+C,iBACAz9C,OAAAwB,QAAAw6C,WAAAC,sBAAA0B,YAAAl+C,KAAAk+C,YACA39C,OAAAwB,QAAAw6C,WAAAC,sBAAA2B,cAAAn+C,KAAAm+C,gBAGA59C,OAAAgD,KAAA,yC,WAGA,qBAAA,CAAA,SAAA,QAAA,KAAA,iBAAA,eAAA,YAAA,mBAAA,SAAAhD,OAAAC,MAAA9B,GAAA2C,eAAAR,aAAA8S,UAAA+I,+BAKAnc,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAp8B,cAAA3D,iBAAA4D,eAAA/f,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAl+B,QAEAhe,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAmO,wBAAAzO,OAAAmO,mBAEAnO,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCACAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACA,MAAAtH,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAAC,cACAn8C,OAAAwB,QAAAw6C,WAAAC,sBAAAC,yBAAA2E,aAAA7gD,OAAA6iD,2BACA7iD,OAAAwK,qBAAA,KAEAxK,OAAA6iD,wBAAA,WAEA,IAAAtE,SAAA,EAMA,OALArhD,QAAA4P,QAAA9M,OAAAwB,QAAAw6C,WAAAC,sBAAAwE,QAAA,SAAAd,OAAA7lC,OAEA6lC,OAAAx3C,WACAo2C,SAAArK,WAAAqK,UAAArK,WAAAyL,OAAA7E,gBAEAyD,a,WAIA,sCAAA,CAAA,SAAA,QAAA,KAAA,iBAAA,eAAA,SAAAv+C,OAAAC,MAAA9B,GAAA2C,eAAAR,2BAGAN,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,aAAAw+C,eAAA,CACAC,UAAA,OACAC,UAAA,QACAC,SAAA,SAEAjjD,OAAA2P,aAAAc,kBAAA,EACAzQ,OAAA2P,aAAAU,aAAA,GACArQ,OAAA2P,aAAAE,UAAA,GACA/O,eAAAoiD,kCAAAljD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAO,OAAAgE,aAAAM,aAAAw+C,eAAA,CACAC,WAAA,EACAC,WAAA,EACAC,UAAA,EACAE,SAAA1jD,KAAA2jD,+B,WAKA,8BAAA,CAAA,SAAA,QAAA,KAAA,iBAAA,eAAA,UAAA,YAAA,eAAA,eAAA,mBAAA,SAAApjD,OAAAC,MAAA9B,GAAA2C,eAAAR,aAAAK,QAAAyS,UAAAkN,aAAAziB,aAAAse,+BAIAnc,OAAAqjD,kBAAA,GACArjD,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAusC,SAAA,GACAtjD,OAAA+W,MAAAwsC,gBAAA,CACAnsC,UAAA,EACAM,QAAA,CACA,CACAvG,MAAAtT,aAAAiC,mBAAA,WACA6X,MAAA,yBACAC,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,UACA8X,MAAA,IACA8V,OAAA,QACA1a,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,gBACAxG,MAAAtT,aAAAiC,mBAAA,eACA8X,MAAA,IACA8V,OAAA,iBACA1a,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,oBACAxG,MAAAtT,aAAAiC,mBAAA,UACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,wBACAxG,MAAAtT,aAAAiC,mBAAA,gBACA8X,MAAA,IACA8V,OAAA,iBACA1a,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,MACAxG,MAAAtT,aAAAiC,mBAAA,gBACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,UACAxG,MAAAtT,aAAAiC,mBAAA,WACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,sLACAN,MAAA,IAEA,CACAM,SAAA,2HACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CAAAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAysC,aAAA,WAEAxjD,OAAAqjD,kBAAA1zB,KAAA,SAAA8zB,SACAA,QAAAzlC,OAAA7B,iBAAAm3B,cAAAmQ,QAAAzlC,UAGAhe,OAAA+W,MAAA2sC,WAAA,IAAA3sC,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAAqjD,kBACAhwB,OAAA,CACAhB,MAAA,CACAkB,OAAA,CACAowB,uBAAA,CACAtrC,UAAA,GAEA2F,OAAA,CACA3F,UAAA,GAEAurC,cAAA,CACAvrC,UAAA,GAEAwrC,kBAAA,CACAxrC,UAAA,GAEAyrC,sBAAA,CACAzrC,UAAA,GAEA5R,IAAA,CACA4R,UAAA,GAEA0rC,QAAA,CACA1rC,UAAA,MAKAqT,OAAA,IAGA1rB,OAAA+W,MAAA2sC,WAAA5qC,OACA9Y,OAAA+W,MAAAusC,SAAAnrC,WAAA1Y,KAAAO,OAAA+W,MAAA2sC,WAAAjkD,SAGAO,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAmO,wBAEAzO,OAAAgD,KAAA,yCAGA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCACAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwK,qBAAA,IACAxK,OAAAqjD,kBAAA,GACArjD,OAAAgkD,UAAA,gBACAhkD,OAAAikD,SAAA,EACAjkD,OAAAkkD,kBAAA,EACAlkD,OAAAmkD,eAAA,GAGAnkD,OAAA4U,QAAArQ,YAAA,WAEA+b,aAAAY,uBACAlhB,OAAAgE,aAAAM,aAAAw+C,eAAAC,WACA/iD,OAAAgE,aAAAM,aAAAw+C,eAAAE,WACAhjD,OAAAgE,aAAAM,aAAAw+C,eAAAG,SAMAniD,eAAA47C,qBAAA18C,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAgE,aAAAM,aAAAw+C,eAAAsB,gBACApkD,OAAA2P,aAAAG,UACA9P,OAAA2P,aAAAM,QACAjQ,OAAAgE,aAAAM,aAAAw+C,eAAAC,UACA/iD,OAAAgE,aAAAM,aAAAw+C,eAAAE,UACAhjD,OAAAgE,aAAAM,aAAAw+C,eAAAG,UAAAz+C,KAAA,SAAA/E,MAEA,IAAAA,KAAAm9C,0BAAAv9C,QAEAW,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,0BAEAE,OAAAqjD,kBAAA5jD,KAAAm9C,0BACA1/C,QAAA4P,QAAA9M,OAAAqjD,kBAAA,SAAA9wC,SAEAA,QAAAyL,OAAA7B,iBAAA4D,eAAAxN,QAAAyL,QACAzL,QAAAqxC,cAAAjjD,QAAA,OAAAA,CAAA4R,QAAA4rC,YAAA,cACA5rC,QAAAuxC,sBAAAnjD,QAAA,OAAAA,CAAA4R,QAAA8xC,qBAAA,cACA9xC,QAAA+xC,qBAAA3jD,QAAA,OAAAA,CAAA4R,QAAAgyC,gBAAA,cACAhyC,QAAAwxC,QAAAxxC,QAAA+xC,qBAAA,IAAAzmD,aAAAiC,mBAAA,MAAA,IAAAyS,QAAAiyC,gCAGAxkD,OAAA+W,MAAAysC,iBA1BAxjD,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oBAAA,WA8BAE,OAAAykD,qBAAA,SAAAxK,YAEAj6C,OAAAkkD,iBAAAjK,WACAj6C,OAAAmkD,eAAA,GAGAnkD,OAAA0kD,cAAA,SAAAzK,YAEAn5C,eAAA07C,WAAAx8C,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAAAq2C,YAAAz1C,KAAA,SAAA/E,uBAGAw8C,sBAAAC,yBAAA7iB,OAAA,EACA4iB,sBAAAC,yBAAAyE,0BAAA3gD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA5C,eAAA6hD,YAAA1G,uBAAAz3C,KAAA,SAAA/E,MAEAO,OAAA4U,QAAArQ,kBAGAvE,OAAAmkD,eAAA,M,WAGA,sBAAA,CAAA,SAAA,oBAAA,aAAA,SAAAnkD,OAAAK,kBAAAnC,yBAQA,IAAAsF,SALAxD,OAAA0H,4BAAArH,kBAAAskD,WAEA3kD,OAAAgD,KAAA,SAMA,MAAA4hD,qBAAA9+C,eAAA6E,MACA,GAAAnH,WAAAmH,KAAAk6C,UAAA,CACA5J,KAAAz3C,SACA,IAAAjF,QAAA,IAAA28C,QACA38C,QAAA44B,OAAA,eAAA,oBACA54B,QAAA44B,OAAA,iBAAAh0B,QAAAC,MAAA,iBAEA+3C,KAAA3xC,KAAAC,UAAA,CAAA/F,YAAAu3C,KAAAv3C,YAAAC,aAAAs3C,KAAAt3C,aAAAy3C,YAAAH,KAAAG,oBAEAC,MAAA,iCAAA,CAAAvzB,OAAA,OAAAvpB,QAAAA,QAAA48C,KAAAA,KAAAG,WAAA,MAIAwJ,qBAAAh/C,eAAA6E,MACA,GAAAnH,WAAAmH,KAAAk6C,UAAA,CACA5J,KAAAz3C,SACA,IAAAjF,QAAA,IAAA28C,QACA38C,QAAA44B,OAAA,eAAA,oBACA54B,QAAA44B,OAAA,iBAAAh0B,QAAAC,MAAA,iBAEA+3C,KAAA3xC,KAAAC,UAAA,CAAA/F,YAAAu3C,KAAAv3C,YAAAC,aAAAs3C,KAAAt3C,aAAAy3C,YAAAH,KAAAG,oBAEAC,MAAA,iCAAA,CAAAvzB,OAAA,OAAAvpB,QAAAA,QAAA48C,KAAAA,KAAAG,WAAA,MAIA,SAAAyJ,cAEAvhD,SAAA,KAIA,IAAAwhD,oBAAA9mD,WAAAwM,IAAA,sBAAA,SAAAC,MAAAlL,MACAvC,QAAAgF,yBAAAzC,QACA+D,SAAA/D,KACA0D,QAAAC,MAAA,kBAAAI,UAEAnC,OAAAs0C,iBAAA,WAAAiP,sBAAA,GACAvjD,OAAAs0C,iBAAA,eAAAiP,sBAAA,MAIAK,oBAAA/mD,WAAAwM,IAAA,sBAAA,SAAAC,MAAAlL,MACAvC,QAAAgF,yBAAAzC,QACA+D,SAAA/D,KAGA4B,OAAAs0C,iBAAA,WAAAmP,sBAAA,GACAzjD,OAAAs0C,iBAAA,eAAAmP,sBAAA,MAKAI,sBAAAhnD,WAAAwM,IAAA,wBAAA,WACAq6C,gBAGAI,sBAAAjnD,WAAAwM,IAAA,wBAAA,WACAo3C,IAIA9hD,OAAA0K,IAAA,WAAA,WACAw6C,wBACAC,wBACAH,sBACAC,sBACAF,cACA1jD,OAAAw0C,oBAAA,WAAAiP,sBAAA,GACAzjD,OAAAw0C,oBAAA,eAAAiP,sBAAA,GACAzjD,OAAAw0C,oBAAA,WAAA+O,sBAAA,GACAvjD,OAAAw0C,oBAAA,eAAA+O,sBAAA,Q,WAIA,sBAAA,CAAA,SAAA,wBAAA,eAAA,UAAA,YAAA,eAAA,mBAAA,SAAA5kD,OAAAolD,sBAAA9kD,aAAAK,QAAAyS,UAAAvV,aAAAse,+BAIAnc,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAsuC,SAAA,GACArlD,OAAA+W,MAAAuuC,gBAAA,CACAluC,UAAA,EACAM,QAAA,CACA,CACAvG,MAAAtT,aAAAiC,mBAAA,eACA6X,MAAA,cACA3E,WAAA,CAAA6E,MAAA,aACAK,SAAA,oJACAJ,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACA9G,MAAAtT,aAAAiC,mBAAA,UACA6X,MAAA,oBACA3E,WAAA,CAAA6E,MAAA,aACAD,MAAA,IACAM,SAAA,oOACAJ,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACA9G,MAAAtT,aAAAiC,mBAAA,eACA6X,MAAA,wBACAC,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACA9G,MAAAtT,aAAAiC,mBAAA,wBACA6X,MAAA,kBACAC,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAK,SAAA,+JACAJ,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,qKACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CAAAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAwuC,aAAA,WAEAvlD,OAAA+W,MAAAyuC,WAAA,IAAAzuC,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAAylD,mBACApyB,OAAA,CACAhB,MAAA,CACAkB,OAAA,CACAkT,YAAA,CACApuB,UAAA,GAEAqtC,kBAAA,CACArtC,UAAA,GAEAyrC,sBAAA,CACAzrC,UAAA,GAEAstC,gBAAA,CACAttC,UAAA,MAKAqT,OAAA,IAGA1rB,OAAA+W,MAAAyuC,WAAA1sC,OACA9Y,OAAA+W,MAAAsuC,SAAAltC,WAAA1Y,KAAAO,OAAA+W,MAAAyuC,WAAA/lD,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAkO,+BAAAxO,OAAAmO,mBAEAnO,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCACAhD,OAAAgkD,UAAA,YACAhkD,OAAAikD,SAAA,EACAjkD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwK,qBAAA,IACAxK,OAAAmkC,WAGAnkC,OAAAmkC,QAAA,WAEAihB,sBAAAQ,sBAAA5lD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAO,OAAAylD,mBAAAhmD,KACAvC,QAAA4P,QAAA9M,OAAAylD,mBAAA,SAAAlzC,SAEAA,QAAAuxC,sBAAA,wBAAAvxC,QAAAszC,oBAAA,KAAAllD,QAAA,OAAAA,CAAA4R,QAAAszC,oBAAA,cACAtzC,QAAAuzC,qBAAA,wBAAAvzC,QAAAwzC,mBAAA,KAAAplD,QAAA,OAAAA,CAAA4R,QAAAwzC,mBAAA,cACAxzC,QAAAozC,gBAAA,OAAApzC,QAAAuzC,qBAAA,KAAAvzC,QAAAuzC,qBAAA,IAAAjoD,aAAAiC,mBAAA,OAAA,IAAAqc,iBAAA4D,eAAAxN,QAAAyzC,6BAEAhmD,OAAA+W,MAAAwuC,qB,WAIA,kBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,wBAAA,eAAA,eAAA,YAAA,eAAA,SAAAvlD,OAAAC,MAAA9B,GAAA+W,aAAAvU,QAAAykD,sBAAA9kC,aAAAhgB,aAAA8S,UAAAvV,2BAGAmC,OAAAimD,iBAAA,EACAjmD,OAAAkmD,kBAAA,EACAlmD,OAAA+B,WAAA,GACA/B,OAAAmmD,qBAAA,WAEAnmD,OAAAomD,aACA,CACA,CAAA/8C,IAAA,EAAAg9C,MAAAxoD,aAAAiC,mBAAA,aACA,CAAAuJ,IAAA,EAAAg9C,MAAAxoD,aAAAiC,mBAAA,aAGAE,OAAAoI,2BAAA9H,aAAAkO,+BAAAxO,OAAAmO,mBAEAnO,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCACAsd,aAAAO,wBACA7gB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEA4N,aAAAgxC,oBAEAlmD,OAAAkmD,kBAAAhxC,aAAAgxC,mBAGAlmD,OAAAkmD,kBAAA,GAEAlmD,OAAAsmD,kBAAAlB,sBAAAkB,kBACAtmD,OAAAimD,gBAAAjmD,OAAAsmD,kBAAAC,eAAA,GAAA,IAAAvmD,OAAAsmD,kBAAAC,eACA,EAAAvmD,OAAAkmD,kBAEAd,sBAAAoB,kBAAAxmD,OAAAkmD,kBAAAlmD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAO,OAAAsmD,kBAAA7mD,KACAO,OAAAsmD,kBAAAG,iBAAAzmD,OAAAomD,aAAApmD,OAAAsmD,kBAAAI,aAAAL,MACArmD,OAAAsmD,kBAAA3F,0BAAA3gD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAimD,gBAAAjmD,OAAAsmD,kBAAAC,eAAA,GAAA,IAAAvmD,OAAAsmD,kBAAAC,gBAEA,IAAAvmD,OAAAkmD,oBAEAlmD,OAAAsmD,kBAAA,IAAAK,uBACA,CACA/iD,QAAA5D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA88C,qBAAA1gD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACAi9C,0BAAA3gD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA6iD,cAAA,EACAb,kBAAA7nD,aAAAiC,mBAAA,OACA2G,IAAA,IAGAzG,OAAAimD,iBAAA,IAIAjmD,OAAA4mD,sBAAA,EAEA5mD,OAAA6mD,iBAAA,SAAArnD,QAEA,IAAAA,QAAA,IAAAA,QAEA4lD,sBAAAoB,kBAAAxmD,OAAAsmD,kBAAA7/C,IAAAzG,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAO,OAAAsmD,kBAAA7mD,KACAO,OAAAsmD,kBAAAC,cAAA/mD,OACA4lD,sBAAA0B,mBAAA9mD,OAAAsmD,mBAAA9hD,KACA,SAAA/E,MAEAO,OAAAsmD,kBAAA7mD,KACAO,OAAAgD,KAAA,yCAEA,SAAAvD,MAEAO,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,cAAAjC,aAAAiC,mBAAA,sBAAAL,WAMAO,OAAA+mD,qBAAA,WAEA/mD,OAAAimD,iBAEAjmD,OAAAsmD,kBAAAG,iBAAAzmD,OAAAomD,aAAApmD,OAAAsmD,kBAAAI,aAAAL,MACAjB,sBAAA4B,sBAAAhnD,OAAAsmD,kBAAAW,eAAAziD,KACA,SAAA/E,MAEAO,OAAA4mD,sBAAA,EACA5mD,OAAAknD,gCAEA,SAAA/lC,OAEAnhB,OAAA4mD,sBAAA,EACA5mD,OAAAknD,kCAIAlnD,OAAAknD,gCAIAlnD,OAAAknD,6BAAA,WAEA5mC,aAAAY,uBAGAkkC,sBAAAkB,kBAAAtmD,OAAAsmD,kBACAtmD,OAAAohD,sBACAphD,OAAAgD,KAAA,4CAGA,IAAAmkD,wBACA,CACA52C,KAAA,wBACAkzB,kBAAA5lC,aAAAiC,mBAAA,wBACA4jC,eAAA,SAAA3tB,KAEA,OAAA/V,OAAA4mD,uBAIA5mD,OAAAgnD,sBAAA,IAAAhW,IAAAC,GAAAC,SAAAC,cAAAgW,yBAEAnnD,OAAAonD,kBAAA,WAYApnD,OAAAiR,WAAAY,QAAAhU,aAAAiC,mBAAA,qBAVA,WAEAE,OAAA6mD,iBAAA,IAGA,eAQA7mD,OAAAqnD,aAAA,WAEA,SAAAC,KAEAtnD,OAAAgD,KAAA,wCAGAhD,OAAAunD,SAAAtH,OAEAjgD,OAAAiR,WAAAY,QAAAhU,aAAAiC,mBAAA,kBAAAE,OAAA+mD,qBAAAO,IAGAA,S,WAGA,oBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,wBAAA,eAAA,eAAA,YAAA,eAAA,SAAAtnD,OAAAC,MAAA9B,GAAA+W,aAAAvU,QAAAykD,sBAAA9kC,aAAAhgB,aAAA8S,UAAAvV,2BAGAmC,OAAA+B,WAAA,GACA/B,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAkO,+BAAAxO,OAAAmO,mBAEAnO,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAsmD,kBAAAlB,sBAAAkB,mBAGAtmD,OAAA4mD,sBAAA,EAEA5mD,OAAAwnD,sBAAA,WAEApC,sBAAA0B,mBAAA9mD,OAAAsmD,mBAAA9hD,KACA,SAAA/E,MAEAO,OAAAgD,KAAA,2CAAAvD,KAAAgH,MAEA,SAAAhH,MAEAO,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,cAAAjC,aAAAiC,mBAAA,sBAAAL,SAKAO,OAAAynD,qBAAA,WAEAznD,OAAAgD,KAAA,+C,WAGA,qBAAA,CAAA,SAAA,QAAA,KAAA,eAAA,UAAA,wBAAA,eAAA,YAAA,eAAA,SAAAhD,OAAAC,MAAA9B,GAAA+W,aAAAvU,QAAAykD,sBAAA9kD,aAAA8S,UAAAvV,2BAGAmC,OAAAomD,aACA,CACA,CAAA/8C,IAAA,EAAAg9C,MAAAxoD,aAAAiC,mBAAA,aACA,CAAAuJ,IAAA,EAAAg9C,MAAAxoD,aAAAiC,mBAAA,aAEAE,OAAAkmD,kBAAA,EACAlmD,OAAA+B,WAAA,GACA/B,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAkO,+BAAAxO,OAAAmO,mBAEAnO,OAAAgD,KAAA,SAGA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCACAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEA4N,aAAAgxC,oBAEAlmD,OAAAkmD,kBAAAhxC,aAAAgxC,mBAGAhxC,aAAAgxC,mBAAA,EAEAlmD,OAAAgD,KAAA,SACA,EAAAkS,aAAAgxC,mBAEAd,sBAAAoB,kBAAAxmD,OAAAkmD,kBAAAlmD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAO,OAAAsmD,kBAAA7mD,KACAO,OAAAsmD,kBAAAG,iBAAAzmD,OAAAomD,aAAApmD,OAAAsmD,kBAAAI,aAAAL,MACArmD,OAAAsmD,kBAAAoB,gBAAA1nD,OAAAsmD,kBAAAqB,gB,WAKA,0BAAA,CAAA,SAAA,wBAAA,UAAA,eAAA,eAAA,eAAA,YAAA,SAAA3nD,OAAAolD,sBAAAzkD,QAAA2f,aAAAhgB,aAAA4U,aAAA9B,WAEApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAkO,+BAAAxO,OAAAmO,mBACAnO,OAAAgD,KAAA,SAEA,IAAAhD,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,cACAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAmtC,eAAAz7C,OAAAwB,QAAAE,QAAAoF,qBAAAwH,uBAAAC,qBACAvO,OAAAgD,KAAA,yCAEAhD,OAAAwB,QAAAomD,cAAA,GACAtnC,aAAAO,wBACA3L,aAAAgxC,kBACAlmD,OAAAwB,QAAAomD,cAAAC,qBAAA3yC,aAAAgxC,kBAEAlmD,OAAAgD,KAAA,yCAEAhD,OAAAwB,QAAAomD,cAAA,GACA5nD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEA89C,sBAAAQ,sBAAA5lD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAO,OAAAwB,QAAAomD,cAAAE,sBAAAnnD,QAAA,SAAAA,CAAAlB,KAAA,CAAAgH,IAAAzG,OAAAwB,QAAAomD,cAAAC,uBAAA,GAAAphB,YACAzmC,OAAAwB,QAAAomD,cAAAnC,mBAAA9kD,QAAA,SAAAA,CAAAlB,KAAA,CAAA8mD,cAAA,MAEAvmD,OAAAwK,qBAAA,KAGAxK,OAAA+mD,qBAAA,WAEAzmC,aAAAY,sBAEAlhB,OAAAgD,KAAA,sDAAAkS,aAAAgxC,uB,WAGA,sCAAA,CAAA,SAAA,wBAAA,UAAA,eAAA,eAAA,eAAA,YAAA,SAAAlmD,OAAAolD,sBAAAzkD,QAAA2f,aAAAhgB,aAAA4U,aAAA9B,WAEApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAkO,+BAAAxO,OAAAmO,mBACAnO,OAAAgD,KAAA,SAEAkS,aAAAgxC,kBACAlmD,OAAAwB,QAAAomD,cAAAC,qBAAA3yC,aAAAgxC,kBAEAlmD,OAAAgD,KAAA,yCAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAwK,qBAAA,KAGAxK,OAAAwnD,sBAAA,WAEApC,sBAAAoB,kBAAAxmD,OAAAwB,QAAAomD,cAAAC,qBAAA7nD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEA,IAAAsoD,KAAA7T,WAAAl0C,OAAAwB,QAAAomD,cAAAI,SACAC,KAAA/T,WAAAl0C,OAAAwB,QAAAomD,cAAAM,SACA,GAAAzoD,KAAA0oD,sBAAAJ,MAAAtoD,KAAA0oD,sBAAAF,MACAxoD,KAAA2oD,sBAAAL,MAAAtoD,KAAA2oD,sBAAAH,KAKA,OAHAxoD,KAAA8mD,cAAA,EACAnB,sBAAA0B,mBAAArnD,WACAO,OAAAgD,KAAA,wDAGAvD,KAAA8mD,cAAA,EACAnB,sBAAA0B,mBAAArnD,MACAO,OAAAgD,KAAA,4DAAAkS,aAAAgxC,sBAIAlmD,OAAA+mD,qBAAA,WAEA/mD,OAAAgD,KAAA,gDAAAkS,aAAAgxC,uB,WAIA,sCAAA,CAAA,SAAA,wBAAA,UAAA,eAAA,eAAA,eAAA,YAAA,SAAAlmD,OAAAolD,sBAAAzkD,QAAA2f,aAAAhgB,aAAA4U,aAAA9B,WAEApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAkO,+BAAAxO,OAAAmO,mBACAnO,OAAAgD,KAAA,SAEAkS,aAAAgxC,mBACAlmD,OAAAgD,KAAA,yCAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEA89C,sBAAAQ,sBAAA5lD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAO,OAAAwB,QAAAomD,cAAAnC,mBAAA9kD,QAAA,SAAAA,CAAAlB,KAAA,CAAA8mD,cAAA,MAEAvmD,OAAAwK,qBAAA,Q,WAGA,8BAAA,CAAA,SAAA,wBAAA,UAAA,eAAA,eAAA,eAAA,YAAA,SAAAxK,OAAAolD,sBAAAzkD,QAAA2f,aAAAhgB,aAAA4U,aAAA9B,WAEApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAkO,+BACAxO,OAAAgD,KAAA,SAEAhD,OAAAwB,QAAAomD,cAAA,GACA5nD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEA89C,sBAAAQ,sBAAA5lD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAO,OAAAwB,QAAAomD,cAAAnC,mBAAA9kD,QAAA,SAAAA,CAAAlB,KAAA,CAAA8mD,cAAA,MAEAvmD,OAAAwK,qBAAA,QCx4DAtN,QAAAC,OAAA,UAAA,CAAA,aAAA,eAAA,oBAAA,kBAAA,aAAA,kB,4CACA,SAAAC,eAAAG,kBAEAH,eAAA6B,KAAA,+BACA,CACAxB,YAAAF,iBAAAG,YAAA,eACAC,WAAA,eACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,2CACA,CACAN,YAAAF,iBAAAG,YAAA,eACAC,WAAA,eACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,4BACA,CACAN,YAAAF,iBAAAG,YAAA,YACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,8BACA,CACAN,YAAAF,iBAAAG,YAAA,cACAC,WAAA,cACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,mCACA,CACAN,YAAAF,iBAAAG,YAAA,mBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,iCACA,CACAN,YAAAF,iBAAAG,YAAA,wBACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,4BACA,CACAN,YAAAF,iBAAAG,YAAA,YACAC,WAAA,eACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,sC,WAMA,sBAAA,CAAA,SAAA,SAAAiC,qBAGAA,OAAAuB,WAAA,gB,WAMA,mBAAA,CAAA,SAAA,qBAAA,eAAA,UAAA,YAAA,eAAA,SAAAvB,OAAAulB,mBAAAjlB,aAAAK,QAAAyS,UAAAvV,2BAIAmC,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAsxC,aAAA,GACAroD,OAAA+W,MAAAuxC,oBAAA,CACAlxC,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAixC,SAAAr0C,KAAAsD,SACAD,SAAArD,KAAAqD,SAAAgxC,SAAA,IACAvoD,OAAAgD,KAAA,gCAAAuU,SAAA9Q,KACAzG,OAAAgO,UAEA0J,QAAA,CACA,CACAC,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,WACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,eACAxG,MAAAtT,aAAAiC,mBAAA,SACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,UACA8X,MAAA,GACAM,SAAA,kEACAJ,YAAA,GAEA,CACAI,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAGAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAyxC,iBAAA,WAEAxoD,OAAA+W,MAAA0xC,eAAA,IAAA1xC,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAA0oD,iBACAr1B,OAAA,CACAhB,MAAA,CACAkB,OAAA,CACApF,YAAA,CACA9V,UAAA,GAEA1U,aAAA,CACA0U,UAAA,GAEAswC,UAAA,CACAtwC,UAAA,MAKAqT,OAAA,IAGA1rB,OAAA+W,MAAA0xC,eAAA3vC,OACA9Y,OAAA+W,MAAAsxC,aAAAlwC,WAAA1Y,KAAAO,OAAA+W,MAAA0xC,eAAAhpD,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsoD,4BAEA5oD,OAAAgD,KAAA,SAGAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAA0oD,iBAAA,GACAnjC,mBAAAsjC,aAAA7oD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAA,KAAAkmB,WAEA,IAAAlmB,KAAAipD,iBAAArpD,QAMAnC,QAAA4P,QAAArN,KAAAipD,iBAAA,SAAA17C,MAEAA,KAAAmhB,YAAAnhB,KAAA87C,UAAA,IAAA97C,KAAA+7C,WAEA/oD,OAAA0oD,iBAAA/nD,QAAA,UAAAA,CAAAlB,KAAAipD,iBAAA,eACA1oD,OAAA+W,MAAAyxC,oBATAxoD,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,aAYAE,OAAAiR,WAAAQ,uB,WAIA,eAAA,CAAA,KAAA,SAAA,UAAA,eAAA,qBAAA,gBAAA,SAAA,eAAA,aAAA,eAAA,YAAA,YAAA,eAAA,SAAAtT,GAAA6B,OAAAW,QAAAL,aAAAilB,mBAAAhF,cAAAyoC,OAAA9zC,aAAA/U,WAAAmgB,aAAAlgB,UAAAgT,UAAAvV,2BAMA,SAAAorD,cAAAC,QAEAlpD,OAAAmpD,eAAAD,OACAlpD,OAAAopD,YAAAF,OACAlpD,OAAAqpD,cAAAH,OACAlpD,OAAAspD,iBAAAJ,OACAlpD,OAAAupD,mBAAAL,OATAlpD,OAAAP,KAAA,GACAO,OAAA+W,MAAA,GAmEA/W,OAAA+Q,OAAA,mDAxDA,WAEA,IAGAy4C,MAHAtsD,QAAAgF,yBAAAlC,OAAAP,KAAAmI,kBAAA5H,OAAAP,KAAAmI,gBAAAS,kBAGAmhD,MAAAxpD,OAAAP,KAAAmI,gBAAAC,4BAEA3K,QAAA4P,QAAA08C,MAAA,SAAAx8C,MAEA,OAAAA,KAAA9E,U,KAEA,EAEAvH,QAAA,SAAAA,CAAA6oD,MAAA,CAAAthD,SAAA,IAAA,GAAA,GACAC,SAEA6E,KAAAy8C,UAAA,GAIAz8C,KAAA7E,UAAA,EACA6E,KAAAy8C,UAAA,GAEA,M,KAEA,EAEA9oD,QAAA,SAAAA,CAAA6oD,MAAA,CAAAthD,SAAA,IAAA,GAAA,GACAC,SAEA6E,KAAAy8C,UAAA,GAIAz8C,KAAA7E,UAAA,EACA6E,KAAAy8C,UAAA,GAEA,M,KAEA,GAEA9oD,QAAA,SAAAA,CAAA6oD,MAAA,CAAAthD,SAAA,IAAA,GAAA,GACAC,SAEA6E,KAAAy8C,UAAA,GAIAz8C,KAAA7E,UAAA,EACA6E,KAAAy8C,UAAA,SAOA,GAEAzpD,OAAA0pD,wBAAA,CACA,CACAviD,OAAA,EACAiK,KAAAvT,aAAAiC,mBAAA,SAEA,CACAqH,MAAA,EACAiK,KAAAvT,aAAAiC,mBAAA,UAEA,CACAqH,MAAA,EACAiK,KAAAvT,aAAAiC,mBAAA,aAEA,CACAqH,MAAA,EACAiK,KAAAvT,aAAAiC,mBAAA,eAIAE,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAiH,yBAEAjH,OAAAwB,UAAAxB,OAAAwB,QAAA,IAEAxB,OAAAwB,QAAA6Y,SAAA,CACAsvC,eAAA,CACAjtC,OAAA,GAEAktC,kBAAA,CACAltC,OAAA,EACAmtC,YAAA,GACAC,eAAA,GAEAC,mBAAA,CACArtC,OAAA,EACA8G,SAAA,CACArhB,SAAA,GACA6nD,OAAA,GACA3lC,aAAAxmB,aAAAiC,mBAAA,wBAEA4B,QAAA,CACAqhB,UAAA,GACAZ,OAAA,GACAa,YAAA,GACAC,KAAA,GACA/I,GAAA,GACAzT,IAAA,GACAyc,SAAA,GACAC,cAAA,GACAC,SAAA,GACAE,MAAA,GACAC,UAAA,IAEApC,MAAA,CACAjQ,SAAA,EACAE,KAAA,KAGA64C,iBAAA,CACAvtC,MAAA,UAAAtc,UAAA8pD,OACAC,MAAA,GACAC,aAAA,IAGApqD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,KAGAtH,OAAAqqD,WAAA9pC,cAAA8pC,WAAAxsD,cACAmC,OAAA6jB,gBAAAtD,cAAAsD,gBAAAhmB,cACAmC,OAAAP,KAAA,GACAO,OAAA+W,MAAA,GAEA/W,OAAAsqD,YAAA,CACAA,aAAA,GAGAtqD,OAAAuqD,kBAAArtD,QAAAgF,yBAAAlC,OAAAwB,QAAA0D,sBAAAlF,OAAAwB,QAAA0D,mBAAAslD,2BACArqD,WAAAsqD,yBAAAzqD,OAAAwB,QAAAE,SAAA,EAEA1B,OAAA0qD,mBAAA1qD,OAAA2qD,qBAAA3qD,OAAA4U,QAAA1Q,cAEAgR,aAAA01C,YAEA5qD,OAAA6qD,mBAAA31C,aAAA01C,WACA5qD,OAAA8qD,YAAAl3C,SAAA5T,OAAA6qD,mBAAA,MAAA7qD,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAnB,IACAzG,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAoI,2BAAA9H,aAAAsoD,4BAEA5oD,OAAAgD,KAAA,WAKAhD,OAAA8qD,aAAA,EACA9qD,OAAA6qD,mBAAA7qD,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAnB,IACAzG,OAAAwB,QAAAE,QAAAshB,YAAAhjB,OAAAwB,QAAAE,QAAAygB,OACAniB,OAAAwB,QAAAE,QAAAqpD,aAAA/qD,OAAAwB,QAAAE,QAAAygB,OACAniB,OAAAgrD,YAGAzlC,mBAAAsjC,aAAA7oD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAA,KAAAkmB,YAEA,IAAAlmB,KAAAipD,iBAAArpD,QACAW,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,aAEA5C,QAAA4P,QAAArN,KAAAipD,iBAAA,SAAA17C,MAEAA,KAAAmhB,YAAAnhB,KAAA87C,UAAA,IAAA97C,KAAA+7C,WAEA/oD,OAAAirD,aAAAtqD,QAAA,UAAAA,CAAAlB,KAAAipD,iBAAA,gBAGA1oD,OAAAiR,WAAAQ,mBAGA8T,mBAAA2lC,mBAAAlrD,OAAA6qD,oBAAArmD,KAAA,SAAA/E,MAEAA,KAAAmI,gBAAAujD,mBAAA1rD,KAAAmI,gBAAAwjD,kBACA,MAAA3rD,KAAAmI,gBAAAyjD,mBAAA5rD,KAAAmI,gBAAAyjD,kBAAA,GAEArrD,OAAAP,KAAAA,KACAO,OAAAsrD,oBAAA,GACAxnD,WAAA,WAEA5G,QAAAgF,yBAAAlC,OAAAurD,eACAvrD,OAAAgO,OAAAhO,OAAAurD,aAAAx8C,iBAEA,SAIA/O,OAAAgrD,SAAA,WAEAhrD,OAAAwB,QAAA6Y,SAAA0vC,mBAAAroD,QACA,CACAqhB,UAAA/iB,OAAAwB,QAAAE,QAAAqhB,UACAZ,OAAAniB,OAAAwB,QAAAE,QAAAygB,OACAa,YAAAhjB,OAAAwB,QAAAE,QAAAshB,YACAC,KAAAjjB,OAAAwB,QAAAE,QAAA+V,KACAyC,GAAAla,OAAAwB,QAAAE,QAAAwY,GACAzT,IAAAzG,OAAAwB,QAAAE,QAAA+E,IACAyc,SAAAljB,OAAAwB,QAAAE,QAAAwhB,SACAC,cAAAnjB,OAAAwB,QAAAE,QAAAwhB,SACAE,SAAApjB,OAAAwB,QAAAE,QAAA0hB,SACAE,OAAA,EACAC,WAAA,IAIAvjB,OAAA2qD,qBAAA,SAAAa,OACA,OAAAxrD,OAAAoI,2BAAA9H,aAAAsoD,4BAGA5oD,OAAAsrD,mBAAA,SAAApC,QAEAlpD,OAAAP,KAAAmI,gBAAAS,gBAEAnL,QAAA4P,QAAA9M,OAAAP,KAAAmI,gBAAAC,4BAAA,SAAAmF,MAEAA,KAAA7E,UAAA,EACA6E,KAAAy8C,UAAA,IAKAvsD,QAAA4P,QAAA9M,OAAAP,KAAAmI,gBAAAC,4BAAA,SAAAmF,MAEAA,KAAAy8C,UAAA,IAGAR,cAAAC,SAGAlpD,OAAAyrD,YAAA,WAEAnrC,aAAAY,qBAGAjT,EAAA,qBAAA+tB,SAAA,qBAAA/tB,EAAA,kBAAA+tB,SAAA,qBAIAh8B,OAAA8qD,aAEA,EAAA9qD,OAAA+W,MAAA20C,eAAAC,eAAAC,sBAAAvsD,SAOA,EAAAW,OAAAP,KAAAosD,qBAEA7rD,OAAAwB,QAAA6Y,SAAAsvC,eAAAjtC,OAAA,EAGA1c,OAAA8rD,oBAOA9rD,OAAA8rD,gBAAA,WAEA9rD,OAAAP,KAAAmI,gBAAAmkD,YAAA,EACA/rD,OAAAwB,QAAA6Y,SAAAsvC,eAAAjtC,OAAA,EACA1c,OAAAgsD,QAGAhsD,OAAAisD,gBAAA,WAEAjsD,OAAAP,KAAAmI,gBAAAmkD,YAAA,EACA/rD,OAAAwB,QAAA6Y,SAAAsvC,eAAAjtC,OAAA,EACA1c,OAAAgsD,QAGAhsD,OAAAgsD,KAAA,WAEA,IAAArkD,QAAA3H,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBACA5H,OAAAP,KAAAmI,gBAAAskD,WAAAvkD,QAAAmhD,UAAA,IAAAnhD,QAAAohD,SACA/oD,OAAAP,KAAAmI,gBAAAukD,mBAAAnsD,OAAAwB,QAAAE,QAAAwY,GAEAla,OAAAP,KAAAmI,gBAAAwkD,eAAAzrD,QAAA,MAAAA,CAAAX,OAAAP,KAAAmI,gBAAAykD,OACArsD,OAAAP,KAAAmI,gBAAA0kD,kBAAA3rD,QAAA,MAAAA,CAAAX,OAAAP,KAAAmI,gBAAA2kD,UACAvsD,OAAAP,KAAAmI,gBAAA4kD,mBAAA7rD,QAAA,MAAAA,CAAAX,OAAAP,KAAAmI,gBAAA6kD,WACAzsD,OAAAP,KAAAmI,gBAAA8kD,aAAA/rD,QAAA,MAAAA,CAAAX,OAAAP,KAAAmI,gBAAA+kD,KAEApnC,mBAAAkmC,YAAAzrD,OAAAP,KAAAmI,iBAAApD,KAAA,SAAA/E,MAEAO,OAAAP,KAAAmI,gBAAAnI,KAAAmI,gBACA5H,OAAAwB,QAAAE,QAAAygB,SAAAniB,OAAAwB,QAAAE,QAAAshB,YACAhjB,OAAA4sD,cAGA5sD,OAAAwB,QAAA6Y,SAAA4vC,iBAAAG,YACApqD,OAAA2C,SAEAqmD,OAAA6D,YAQA7sD,OAAA4sD,YAAA,WAIA,IAEAlrD,QAKA+f,MAPAzhB,OAAA8qD,eAEAppD,QAAAxE,QAAA89B,KAAAh7B,OAAAwB,QAAAE,UACAwY,GAAAla,OAAAP,KAAAmI,gBAAAjE,aACAjC,QAAA0hB,SAAApjB,OAAAwB,QAAAE,QAAA0hB,SACA1hB,QAAAshB,YAAAhjB,OAAAwB,QAAAE,QAAAshB,YAEAvB,MAAAthB,WAAAuC,0BACAvC,WAAA2sD,oBAAArrC,MAAAzhB,OAAAwB,QAAAM,YAAA0C,KAAA,SAAA/E,MACAiC,QAAAqhB,UAAAtjB,KAAAsjB,UACArhB,QAAAuhB,KAAA,KAEA9iB,WAAAysD,YAAAlrD,SAAA,GAAA8C,KAAA,SAAA/E,MACAO,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAitC,GACAr1C,WAAA8Z,wBAAAja,OAAAwB,QAAAE,QAAAwY,GAAAla,OAAAwB,QAAAM,YAAA0C,KAAA,SAAA/E,MACAO,OAAAwB,QAAAE,QAAAjC,KAEAO,OAAAwB,QAAA6Y,SAAA4vC,iBAAAG,YACApqD,OAAA2C,SAEAqmD,OAAA6D,iBAMA7sD,OAAA+sD,iCAAA,SAAAz5B,IAEA,IAAA,IAAAxrB,EAAA,EAAAA,EAAA9H,OAAAwB,QAAAE,QAAAqF,kBAAA1H,OAAAyI,IAEA,GAAA9H,OAAAwB,QAAAE,QAAAqF,kBAAAe,GAAAS,SAAAitC,KAAAliB,GAGA,YADAtzB,OAAAwB,QAAAE,QAAAoF,qBAAA9G,OAAAwB,QAAAE,QAAAqF,kBAAAe,KAMA9H,OAAAgtD,sBAAA,WAEA,IAAAnC,mBAAA7qD,OAAAwB,QAAA6Y,SAAAuvC,kBAAAC,YACAtkC,mBAAA2lC,mBAAAL,oBAAArmD,KAAA,SAAA/E,MAEA,IAAAyE,aAAAzE,KAAAmI,gBAAAC,4BACAolD,2BAAAjtD,OAAAP,KAAAmI,gBAAAC,4BACA7H,OAAAP,KAAAmI,gBAAAS,iBAAA,EACA,IAAA,IAAAJ,EAAA,EAAAA,EAAA/D,aAAA7E,OAAA4I,IAEA,IAAA,IAAAH,EAAA,EAAAA,EAAAmlD,2BAAA5tD,OAAAyI,IAEAmlD,2BAAAnlD,GAAAI,WAAAhE,aAAA+D,GAAAC,WAEAlI,OAAAwB,QAAA6Y,SAAAuvC,kBAAAE,gBACAmD,2BAAAnlD,GAAAK,UAAA,GACAjE,aAAA+D,GAAAE,WACA8kD,2BAAAnlD,GAAAK,UAAA,GACA8kD,2BAAAnlD,GAAAK,WACAnI,OAAAP,KAAAmI,gBAAAS,iBAAA,IAIA4gD,eAAA,GACAjpD,OAAAwB,QAAA6Y,SAAAuvC,kBAAAltC,OAAA,KAIA1c,OAAAokB,cAAA,WAEApkB,OAAAgD,KAAA,mCAGAhD,OAAAktD,gBAAA,SAAA51C,GAEAtX,OAAA+W,MAAA20C,eAAAC,eAAA/2C,QAAA22C,aAAA7nC,SAAAu8B,SAEAjgD,OAAAwB,QAAAE,QAAAshB,YAAA,GACAhjB,OAAAwB,QAAAE,QAAAqpD,aAAA,KAIA/qD,OAAAmtD,qBAAA,WAEA,UAAA/sD,UAAA8pD,OAEAlB,OAAA6D,SAGAzsD,UAAA8pD,KAAA,UAIAlqD,OAAAotD,qBAAA,WAEAhtD,UAAA8pD,KAAA,KAGAlqD,OAAAqtD,gBAAA,WAEA/sC,aAAAY,qBACAjT,EAAA,gBAAA+tB,SAAA,sBAGAh8B,OAAAwB,QAAA6Y,SAAA4vC,iBAAAvtC,OAAA,EACA1c,OAAAwB,QAAA6Y,SAAA4vC,iBAAAG,aAAA,EACApqD,OAAAP,KAAAmI,gBAAAjE,aAAA3D,OAAAwB,QAAA6Y,SAAA4vC,iBAAAE,MACAnqD,OAAAyrD,mB,WAGA,cAAA,CAAA,KAAA,SAAA,UAAA,eAAA,qBAAA,eAAA,eAAA,aAAA,YAAA,eAAA,SAAAttD,GAAA6B,OAAAW,QAAAL,aAAAilB,mBAAAjF,aAAApL,aAAA/U,WAAAiT,UAAAvV,2BAGAmC,OAAAwB,QAAA8rD,QAAA,CACA5wC,OAAA,EACA6wC,aAAA,GACA5lD,QAAA4d,mBAAAioC,mBAEAxtD,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsoD,4BAEA5oD,OAAAgD,KAAA,SAGAsd,aAAAO,wBACA7gB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAie,mBAAAsjC,aAAA7oD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAA,KAAAkmB,YAEA,IAAAlmB,KAAAipD,iBAAArpD,QACAW,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,eAEA5C,QAAA4P,QAAArN,KAAAipD,iBAAA,SAAA17C,MAEAA,KAAAmhB,YAAAnhB,KAAA87C,UAAA,IAAA97C,KAAA+7C,WAEA/oD,OAAAwB,QAAA8rD,QAAAC,aAAA5sD,QAAA,UAAAA,CAAAlB,KAAAipD,iBAAA,gBAGA1oD,OAAAiR,WAAAQ,mBAEAzR,OAAAwB,QAAA8rD,QAAA5wC,OAAA,GAGA1c,OAAAytD,cAAA,WAEA,IAeA9lD,QAfA+lD,mBAAA,EACAptC,aAAAY,sBAEAhkB,QAAA4P,QAAA9M,OAAA4rD,sBAAA,SAAAzkD,MAAAkC,KACA,sCAAAlC,MAAAkrB,QACAq7B,mBAAA,KAIAA,oBAGA1tD,OAAAgtD,0BAGArlD,QAAA3H,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBACA5H,OAAAwB,QAAA8rD,QAAA3lD,QAAAukD,WAAAvkD,QAAAmhD,UAAA,IAAAnhD,QAAAohD,SACA/oD,OAAAwB,QAAA8rD,QAAA3lD,QAAAwkD,mBAAAnsD,OAAAwB,QAAAE,QAAAwY,GACAla,OAAAwB,QAAA8rD,QAAA3lD,QAAA/D,QAAA5D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAEA2hB,mBAAAkmC,YAAAzrD,OAAAwB,QAAA8rD,QAAA3lD,SAAAnD,KAAA,SAAA/E,MAEAO,OAAAwB,QAAA8rD,QAAA5wC,OAAA,EAEAjd,KAAAmI,iBAAA,IAAAnI,KAAAmI,gBAAAhE,SAEA5D,OAAAgD,KAAA,4BACAhD,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,iBACAjC,aAAAiC,mBAAA,0BAIAE,OAAAgD,KAAA,gCAAAvD,KAAAmI,gBAAAnB,UAMAzG,OAAAgtD,sBAAA,WAEA,IAAAhtD,OAAAwB,QAAA8rD,QAAAzD,YAAA,OAAA,EAGA,IAAAgB,mBAAA7qD,OAAAwB,QAAA8rD,QAAAzD,YAuBA,OAtBAtkC,mBAAA2lC,mBAAAL,oBAAArmD,KAAA,SAAA/E,SAEAO,OAAAwB,QAAA8rD,QAAA3lD,QAAAE,4BAAApI,QAAAmI,gBAAAC,4BACA7H,OAAAwB,QAAA8rD,QAAA3lD,QAAAU,gBAAA5I,QAAAmI,gBAAAS,gBACAV,QAAA3H,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBACA5H,OAAAwB,QAAA8rD,QAAA3lD,QAAAukD,WAAAvkD,QAAAmhD,UAAA,IAAAnhD,QAAAohD,SACA/oD,OAAAwB,QAAA8rD,QAAA3lD,QAAAwkD,mBAAAnsD,OAAAwB,QAAAE,QAAAwY,GACAla,OAAAwB,QAAA8rD,QAAA3lD,QAAA/D,QAAA5D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA2hB,mBAAAkmC,YAAAzrD,OAAAwB,QAAA8rD,QAAA3lD,SAAAnD,KAAA,SAAA/E,MAEAO,OAAAwB,QAAA8rD,QAAA5wC,OAAA,EAEAjd,KAAAmI,iBAAA,IAAAnI,KAAAmI,gBAAAhE,SACA5D,OAAAgD,KAAA,4BACAhD,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,iBACAjC,aAAAiC,mBAAA,0BAGAE,OAAAgD,KAAA,gCAAAvD,KAAAmI,gBAAAnB,UAIA,GAGAzG,OAAA2tD,aAAA,WAEA3tD,OAAAwB,QAAA8rD,QAAA5wC,OAAA,EACA1c,OAAAwB,QAAA8rD,QAAA,GACAttD,OAAAgD,KAAA,iC,WAGA,sBAAA,CAAA,SAAA,UAAA,eAAA,qBAAA,eAAA,kBAAA,aAAA,YAAA,eAAA,mBAAA,SAAAhD,OAAAW,QAAAL,aAAAilB,mBAAAjF,aAAAstC,gBAAAztD,WAAAiT,UAAAvV,aAAAse,+BAGAnc,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAmd,wBAEAzd,OAAAgD,KAAA,SAGAsd,aAAAO,wBACA7gB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,GACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwB,QAAA4jB,SAAA,CACAyoC,SAAA,GACAC,qBAAA,EACAC,kBAAA,IAAA/tD,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAylD,kBACAC,qBAAApwD,aAAAiC,mBAAA,4BACAouD,sBAAAluD,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA4lD,sBACAC,eAAA,IAAApuD,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA8lD,iBACAC,6BAAAnyC,iBAAA4D,eAAA/f,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA4lD,wBAEA5oC,mBAAAsjC,aAAA7oD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MAEAA,KAAAkmB,WAEA,IAAAlmB,KAAAipD,iBAAArpD,OAEAW,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,qBAIA5C,QAAA4P,QAAArN,KAAAipD,iBAAA,SAAA17C,MACAA,KAAAmhB,YAAAnhB,KAAA87C,UAAA,IAAA97C,KAAA+7C,SAEA/oD,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAgmD,gBAAAvhD,KAAAvG,MACAzG,OAAAwB,QAAA4jB,SAAA0oC,qBAAA9gD,KAAAvG,OAGAzG,OAAAwB,QAAA4jB,SAAAyoC,SAAAltD,QAAA,UAAAA,CAAAlB,KAAAipD,iBAAA,eACA1oD,OAAAwB,QAAA4jB,SAAA0oC,qBAAA,IAAA9tD,OAAAwB,QAAA4jB,SAAA0oC,qBAAA9tD,OAAAwB,QAAA4jB,SAAAyoC,SAAA,GAAApnD,IACAzG,OAAAwB,QAAA4jB,SAAA0oC,sBAIA9tD,OAAAiR,WAAAQ,mBAEAzR,OAAAwB,QAAA4jB,SAAAgpC,iBACApuD,OAAAwB,QAAA4jB,SAAA6oC,qBAAApwD,aAAAiC,mBAAA,4BAIAE,OAAA+f,eAAA,WAGA,IAOAyuC,IAPAtxD,QAAAgF,yBAAAlC,OAAAwB,QAAA4jB,SAAAkpC,gCAIAE,IAAAta,WAAA/3B,iBAAAg4B,sBAAAn0C,OAAAwB,QAAA4jB,SAAAkpC,+BAGAE,IAAAryC,iBAAA4D,eAAAyuC,KAGAxuD,OAAAwB,QAAA4jB,SAAAkpC,6BAAAE,MAGAxuD,OAAAyuD,oBAAA,WAEAnuC,aAAA6D,sBAEAnkB,OAAAwB,QAAA4jB,SAAA2oC,oBAAAztC,aAAAY,uBAIAlhB,OAAAwB,QAAA4jB,SAAA8oC,sBAAAha,WAAA/3B,iBAAAg4B,sBAAAn0C,OAAAwB,QAAA4jB,SAAAkpC,+BAEAV,gBAAAc,4BAAA1uD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAwB,QAAA4jB,SAAA0oC,qBACA9tD,OAAAwB,QAAA4jB,SAAA8oC,sBACAluD,OAAAwB,QAAA4jB,SAAA2oC,mBAAAvpD,KAAA,SAAA/E,MAEAO,OAAA6O,gBAAA7O,OAAA2uD,cAEA,IAAAC,kBAAA5uD,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAitC,GACAr1C,WAAA8Z,wBAAAja,OAAAwB,QAAAE,QAAAwY,GAAAla,OAAAwB,QAAAM,YAAA0C,KAAA,SAAA/E,MAEAO,OAAAwB,QAAAE,QAAAjC,KACA,IAAA,IAAAqI,EAAA,EAAAA,EAAA9H,OAAAwB,QAAAE,QAAAqF,kBAAA1H,OAAAyI,IAEA,GAAA9H,OAAAwB,QAAAE,QAAAqF,kBAAAe,GAAAS,SAAAitC,KAAAoZ,kBAGA,YADA5uD,OAAAwB,QAAAE,QAAAoF,qBAAA9G,OAAAwB,QAAAE,QAAAqF,kBAAAe,IAIA9H,OAAAuB,eAGAvB,OAAA+f,wB,WAIA,kBAAA,CAAA,SAAA,iBAAA,UAAA,eAAA,qBAAA,eAAA,kBAAA,aAAA,oBAAA,YAAA,eAAA,SAAA/f,OAAAE,eAAAS,QAAAL,aAAAilB,mBAAAjF,aAAAstC,gBAAAztD,WAAAM,kBAAA2S,UAAAvV,2BAGAmC,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAwB,UAAAxB,OAAAwB,QAAA,IACAxB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,KAGA,IAAAxF,WAAA9B,OAAAwB,SAAAxB,OAAAwB,QAAAM,WAAA9B,OAAAwB,QAAAM,WAAA,EACArB,kBAAA+J,qBAAA1I,WAAA,IAAA0C,KAAA,SAAA/E,MAEAO,OAAAilB,cAAAxlB,KAAA+F,UAAA3H,aAAAiC,mBAAA,mBAAAL,OAGAO,OAAAwB,QAAA4jB,SAAA,CACA5B,SAAA,CACA6B,YAAA,GACAljB,SAAA,GACA6nD,OAAA,GACA3lC,aAAAxmB,aAAAiC,mBAAA,wBAEA4B,QAAA,CACAqhB,UAAA/iB,OAAAwB,QAAAE,QAAAqhB,UACAZ,OAAAniB,OAAAwB,QAAAE,QAAAygB,OACAa,YAAAhjB,OAAAwB,QAAAE,QAAAshB,YACAC,KAAAjjB,OAAAwB,QAAAE,QAAA+V,KACAyC,GAAAla,OAAAwB,QAAAE,QAAAwY,GACAzT,IAAAzG,OAAAwB,QAAAE,QAAA+E,IACAyc,SAAAljB,OAAAwB,QAAAE,QAAAwhB,SACAiC,YAAA,GACAhC,cAAA,GACAC,SAAApjB,OAAAwB,QAAAE,QAAA0hB,SACAE,OAAA,EACAC,WAAA,GAEApC,MAAA,CACAjQ,SAAA,EACAE,KAAA,IAEAkU,SAAA,IAIAtlB,OAAAklB,eAAA,WAIA5E,aAAAY,sBAGAlhB,OAAA6kB,kBAGA7kB,OAAA6kB,eAAA,WAGA7kB,OAAAwB,QAAA4jB,SAAA1jB,QAAAyjB,YAAAnlB,OAAAwB,QAAA4jB,SAAA5B,SAAA6B,YACArlB,OAAAwB,QAAA4jB,SAAA1jB,QAAAyhB,cAAAnjB,OAAAwB,QAAA4jB,SAAA5B,SAAArhB,SAEAhC,WAAA2kB,qBAAA9kB,OAAAwB,QAAA4jB,SAAA1jB,SAAA8C,KACA,SAAA/E,OAKA,KAFAO,OAAAwB,QAAA4jB,SAAA1jB,QAAAjC,MAEA8jB,YAGArjB,eAAAqhB,MAAAvhB,OAAAwB,QAAAE,QAAAwY,GAAAla,OAAAwB,QAAA4jB,SAAA5B,SAAArhB,SAAA,IAAAqC,KAAA,SAAA/E,OAEAgiB,MADAhiB,MACAiiB,MACAve,QAAAC,MAAA,eAAAqe,OAGA,IAAAmtC,kBAAA5uD,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAAitC,GACAr1C,WAAA2sD,oBAAArrC,MAAAzhB,OAAAwB,QAAAM,YAAA0C,KAAA,SAAA/E,MACAO,OAAAwB,QAAAE,QAAAjC,KACA,IAAA,IAAAqI,EAAA,EAAAA,EAAA9H,OAAAwB,QAAAE,QAAAqF,kBAAA1H,OAAAyI,IACA,GAAA9H,OAAAwB,QAAAE,QAAAqF,kBAAAe,GAAAS,SAAAitC,KAAAoZ,kBAEA,YADA5uD,OAAAwB,QAAAE,QAAAoF,qBAAA9G,OAAAwB,QAAAE,QAAAqF,kBAAAe,KAKA,SAAAka,UAKAhiB,OAAAwB,QAAA4jB,SAAAE,SAAA,IAIA,SAAAtD,KAEA9kB,QAAA4P,QAAAkV,IAAA,SAAAhV,MAEAhN,OAAAJ,SAAAC,KAAAmN,KAAAnP,aAAAiC,mBAAA,eAMAE,OAAAkkB,YAAA,WAEA5D,aAAA6D,0B,WAGA,eAAA,CAAA,SAAA,YAAA,eAAA,SAAAnkB,OAAAoT,UAAAvV,2BAGAmC,OAAAgE,aAAAM,aAAA,CACAuqD,SAAA,CACAC,aAAA,KAGA9uD,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAg4C,aAAA,GACA/uD,OAAA+W,MAAAi4C,oBAAA,CACA53C,UAAA,EACAC,OAAA,SAAAC,GACA,IAAAixC,SAAAr0C,KAAAsD,SACAD,SAAArD,KAAAqD,SAAAgxC,SAAA,IACAvoD,OAAAgD,KAAA,gCAAAuU,SAAA9Q,KACAzG,OAAAgO,UAEA0J,QAAA,CACA,CACAC,MAAA,iBACAxG,MAAAtT,aAAAiC,mBAAA,aACA6Y,UAAA,EACAf,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,mBACAxG,MAAAtT,aAAAiC,mBAAA,YACA6Y,UAAA,EACAf,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAxG,MAAAtT,aAAAiC,mBAAA,QACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,mBACAxG,MAAAtT,aAAAiC,mBAAA,YACA6Y,UAAA,EACAf,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,sBACAxG,MAAAtT,aAAAiC,mBAAA,eACA6Y,UAAA,EACA3F,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,sBACAxG,MAAAtT,aAAAiC,mBAAA,aACA6Y,UAAA,EACA3F,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,qBACAxG,MAAAtT,aAAAiC,mBAAA,YACA6Y,UAAA,EACA3F,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,qBACAxG,MAAAtT,aAAAiC,mBAAA,YACA6Y,UAAA,EACA3F,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAE,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA4U,QAAAq6C,iBAAA,WACAjvD,OAAA+W,MAAAg4C,aAAA52C,WAAA1Y,KAAAO,OAAAgE,aAAAM,aAAAuqD,SAAAC,eAGA9uD,OAAAuB,WAAA,WACAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAGA,uBAAA,CAAA,SAAA,eAAA,qBAAA,eAAA,mBAAA,oBAAA,kBAAA,SAAAtH,OAAAsgB,aAAAiF,mBAAAjlB,aAAAksB,iBAAA/rB,kBAAA3C,8BAEA,IAAAD,aAAAC,gBAAAC,gCAAA,8BACAiC,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAkrD,iBAAA,EACAprD,WAAA,WACA9D,OAAAgE,aAAAM,aAAAuqD,SAAA,CACAM,aAAA,EACAC,gBAAA,EACAC,gBAAA,EACAC,gBAAA,EACAC,YAAA,KACAC,UAAA,KACAC,cAAA,IAEA,GACAzvD,OAAA0vD,aAAA,CACA,CAAAjpD,IAAA,KAAAggC,YAAA5oC,aAAAiC,mBAAA,QACA,CAAA2G,IAAA,MAAAggC,YAAA5oC,aAAAiC,mBAAA,YACA,CAAA2G,IAAA,MAAAggC,YAAA5oC,aAAAiC,mBAAA,cACA,CAAA2G,IAAA,MAAAggC,YAAA5oC,aAAAiC,mBAAA,WACA,CAAA2G,IAAA,MAAAggC,YAAA5oC,aAAAiC,mBAAA,cACA,CAAA2G,IAAA,MAAAggC,YAAA5oC,aAAAiC,mBAAA,WAEAE,OAAA2vD,YAAA,CACA,CAAAhsD,aAAA,KAAAwqB,YAAAtwB,aAAAiC,mBAAA,SAEAE,OAAAoI,2BAAA9H,aAAAsoD,4BACArjC,mBAAAsjC,aAAA7oD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KAAA,SAAA/E,MACAA,KAAAkmB,WACA,IAAAlmB,KAAAipD,iBAAArpD,QAKAnC,QAAA4P,QAAArN,KAAAipD,iBAAA,SAAA17C,MACAA,KAAAmhB,YAAAnhB,KAAArJ,eAEA3D,OAAA2vD,YAAAlwD,KAAAipD,iB,OACA,gB,OACA,gB,IACA,CAAA/kD,aAAA,KAAAwqB,YAAAtwB,aAAAiC,mBAAA,QAAA,IAVAE,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,mBAaAE,OAAAiR,WAAAQ,mBAEAzR,OAAAgE,aAAAM,aAAAuqD,SAAAY,cAAA,GAIAzvD,OAAAgE,aAAAM,aAAAuqD,SAAAW,UAAAxvD,OAAAwB,QAAAE,QAAAoF,qBAAAc,gBAAAjE,aAEA3D,OAAAysB,MAAAC,eAAAC,UAAA,IAGA3sB,OAAAuE,YAAA,WACA,IASAgrD,YACAC,UAVAlvC,aAAAY,uBACAlhB,OAAAgE,aAAAM,aAAAuqD,SAAAM,aACAnvD,OAAAgE,aAAAM,aAAAuqD,SAAAO,gBACApvD,OAAAgE,aAAAM,aAAAuqD,SAAAQ,gBACArvD,OAAAgE,aAAAM,aAAAuqD,SAAAS,gBAKAC,YAAAvvD,OAAAgE,aAAAM,aAAAuqD,SAAAU,YACAC,UAAAxvD,OAAAgE,aAAAM,aAAAuqD,SAAAW,UAKA/uD,kBAAAmvD,aACA5vD,OAAA2P,aAAAG,UACA9P,OAAA2P,aAAAM,QALAs/C,YADA,SAAAA,YACA,KAMAA,YACAvvD,OAAAgE,aAAAM,aAAAuqD,SAAAM,YACAnvD,OAAAgE,aAAAM,aAAAuqD,SAAAO,eACApvD,OAAAgE,aAAAM,aAAAuqD,SAAAQ,eACArvD,OAAAgE,aAAAM,aAAAuqD,SAAAS,eACAtvD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QATA4rD,UADA,SAAAA,UACA,KAUAA,W,KACA,SAAA/vD,MACAO,OAAAgE,aAAAM,aAAAuqD,SAAAC,aAAArvD,KAAAowD,gBAAAlgC,KAAA,SAAA3iB,MACAA,KAAA8iD,iBAAAxkD,KAAAivC,OAAAvtC,KAAA8iD,kBAAApiC,OAAA,uCAEA,IAAAjuB,KAAAowD,gBAAAxwD,OAIAW,OAAAivD,mBAHAjvD,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,sBAxBAE,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,qBA+BAE,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAA2P,aAAAE,UAAA+D,SAAA5T,OAAA0sB,eAAAO,YAAApd,UAAA,IACA7P,OAAA2P,aAAAS,UAAAwD,SAAA5T,OAAA0sB,eAAAO,YAAA7c,UAAA,IACApQ,OAAA2P,aAAAG,UAAA9P,OAAA0sB,eAAAO,YAAAnd,UACA9P,OAAA2P,aAAAM,QAAAjQ,OAAA0sB,eAAAO,YAAAhd,QACAjQ,OAAAgE,aAAAM,aAAAuqD,SAAAM,YAAAnvD,OAAA0sB,eAAAO,YAAAkiC,YACAnvD,OAAAgE,aAAAM,aAAAuqD,SAAAO,eAAApvD,OAAA0sB,eAAAO,YAAAmiC,eACApvD,OAAAgE,aAAAM,aAAAuqD,SAAAQ,eAAArvD,OAAA0sB,eAAAO,YAAAoiC,eACArvD,OAAAgE,aAAAM,aAAAuqD,SAAAS,eAAAtvD,OAAA0sB,eAAAO,YAAAqiC,eAEA,IAAAC,YAAAvvD,OAAA0sB,eAAAO,YAAAsiC,YACAC,UAAAxvD,OAAA0sB,eAAAO,YAAAuiC,UAGA,SAAAA,YACAA,UAAA,MACAxvD,OAAAgE,aAAAM,aAAAuqD,SAAAU,YAHAA,YADA,SAAAA,YACA,KAGAA,YACAvvD,OAAAgE,aAAAM,aAAAuqD,SAAAW,UAAAA,WAGAxvD,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAAtd,UAAA7P,OAAA2P,aAAAE,UACA7P,OAAA0sB,eAAAS,YAAA/c,UAAApQ,OAAA2P,aAAAS,UACApQ,OAAA0sB,eAAAS,YAAArd,UAAA9P,OAAA2P,aAAAG,UACA9P,OAAA0sB,eAAAS,YAAAld,QAAAjQ,OAAA2P,aAAAM,QACAjQ,OAAA0sB,eAAAS,YAAAgiC,YAAAnvD,OAAAgE,aAAAM,aAAAuqD,SAAAM,YACAnvD,OAAA0sB,eAAAS,YAAAiiC,eAAApvD,OAAAgE,aAAAM,aAAAuqD,SAAAO,eACApvD,OAAA0sB,eAAAS,YAAAkiC,eAAArvD,OAAAgE,aAAAM,aAAAuqD,SAAAQ,eACArvD,OAAA0sB,eAAAS,YAAAmiC,eAAAtvD,OAAAgE,aAAAM,aAAAuqD,SAAAS,eACAtvD,OAAA0sB,eAAAS,YAAAoiC,YAAAvvD,OAAAgE,aAAAM,aAAAuqD,SAAAU,YACAvvD,OAAA0sB,eAAAS,YAAAqiC,UAAAxvD,OAAAgE,aAAAM,aAAAuqD,SAAAW,WAGAxvD,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEA,IAAA8hC,YAAAvvD,OAAAgE,aAAAM,aAAAuqD,SAAAU,YACAC,UAAAxvD,OAAAgE,aAAAM,aAAAuqD,SAAAW,UACA5hC,GAAA,kCACA5tB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QACA,mBAAAjQ,OAAAgE,aAAAM,aAAAuqD,SAAAM,YACA,sBAAAnvD,OAAAgE,aAAAM,aAAAuqD,SAAAO,eACA,sBAAApvD,OAAAgE,aAAAM,aAAAuqD,SAAAQ,eACA,sBAAArvD,OAAAgE,aAAAM,aAAAuqD,SAAAS,eACA,SAAAC,cACA3hC,GAAAA,GAAA,mBAAA2hC,aAIA/iC,iBAAAqB,aAFAD,GADA,SAAA4hC,UACA5hC,GAAA,iBAAA4hC,UAEA5hC,GAAAH,KAAAC,aCjwCAxwB,QAAAC,OAAA,mBAAA,CAAA,iB,4CACA,SAAAC,eAAAG,kBAEAH,e,KACA,kCACA,CACAK,YAAAF,iBAAAG,YAAA,kBACAC,WAAA,uB,KAGA,4BACA,CACAF,YAAAF,iBAAAG,YAAA,YACAC,WAAA,iB,KAGA,kCACA,CACAF,YAAAF,iBAAAG,YAAA,kBACAC,WAAA,uB,KAGA,sCACA,CACAF,YAAAF,iBAAAG,YAAA,sBACAC,WAAA,2B,KAGA,qCACA,CACAF,YAAAF,iBAAAG,YAAA,qBACAC,WAAA,0B,KAGA,qCACA,CACAF,YAAAF,iBAAAG,YAAA,qBACAC,WAAA,0B,KAGA,sCACA,CACAF,YAAAF,iBAAAG,YAAA,sBACAC,WAAA,2B,KAGA,iCACA,CACAF,YAAAF,iBAAAG,YAAA,iBACAC,WAAA,yB,WAMA,qBAAA,CAAA,SAAA,eAAA,SAAAqC,OAAAM,2BAGAN,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,Q,WAGA,6BAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAtE,OAAAsgB,aAAAhgB,aAAAksB,iBAAAtsB,eAAAkT,wBAGApT,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAA0rD,WAAAhwD,OAAAgE,aAAAM,aAAA0rD,SAAA,IACAhwD,OAAAgE,aAAAM,aAAA0rD,SAAAnjC,WAAA,qBACA7sB,OAAAgE,aAAAM,aAAA0rD,SAAAC,iBAAA,2BACAjwD,OAAAgE,aAAAM,aAAA0rD,SAAAE,gBAAA,OACAlwD,OAAAgE,aAAAM,aAAA0rD,SAAAG,iBAAA,QACAnwD,OAAAysB,MAAAC,eAAAC,UAAA,EAEA3sB,OAAA2P,aAAAc,kBAAA,EACAzQ,OAAA2P,aAAAU,aAAA,GACArQ,OAAA2P,aAAAE,UAAA,IAGA7P,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAA0rD,SAAAE,gBAAAlwD,OAAA0sB,eAAAO,YAAAijC,gBACAlwD,OAAAgE,aAAAM,aAAA0rD,SAAAG,iBAAAnwD,OAAA0sB,eAAAO,YAAAkjC,iBACAnwD,OAAA2P,aAAAE,UAAA+D,SAAA5T,OAAA0sB,eAAAO,YAAApd,UAAA,IACA7P,OAAA2P,aAAAS,UAAAwD,SAAA5T,OAAA0sB,eAAAO,YAAA7c,UAAA,IACApQ,OAAA2P,aAAAG,UAAA9P,OAAA0sB,eAAAO,YAAAnd,UACA9P,OAAA2P,aAAAM,QAAAjQ,OAAA0sB,eAAAO,YAAAhd,SAGAjQ,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA+iC,gBAAAlwD,OAAAgE,aAAAM,aAAA0rD,SAAAE,gBACAlwD,OAAA0sB,eAAAS,YAAAgjC,iBAAAnwD,OAAAgE,aAAAM,aAAA0rD,SAAAG,iBACAnwD,OAAA0sB,eAAAS,YAAAtd,UAAA7P,OAAA2P,aAAAE,UACA7P,OAAA0sB,eAAAS,YAAA/c,UAAApQ,OAAA2P,aAAAS,UACApQ,OAAA0sB,eAAAS,YAAArd,UAAA9P,OAAA2P,aAAAG,UACA9P,OAAA0sB,eAAAS,YAAAld,QAAAjQ,OAAA2P,aAAAM,SAGAjQ,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAKAE,GALAtN,aAAAY,uBAKA0M,GAAA,eAJA,SAAA5tB,OAAAgE,aAAAM,aAAA0rD,SAAAG,iBACAnwD,OAAAgE,aAAAM,aAAA0rD,SAAAC,iBACAjwD,OAAAgE,aAAAM,aAAA0rD,SAAAnjC,YAGA,eAAA7sB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,uBAAA5D,OAAAgE,aAAAM,aAAA0rD,SAAAE,gBACA,iBAAAlwD,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QACA,wBAAAjQ,OAAAgE,aAAAM,aAAA0rD,SAAAG,iBAEAziC,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,S,WAGA,uCAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAA5tB,OAAAsgB,aAAAhgB,aAAAksB,iBAAAtsB,eAAAkT,wBAGApT,OAAAuB,WAAA,WAEA+e,aAAAO,wBAEA7gB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAA8rD,qBAAApwD,OAAAgE,aAAAM,aAAA8rD,mBAAA,IACApwD,OAAAgE,aAAAM,aAAA8rD,mBAAAvjC,WAAA,qBACA7sB,OAAAgE,aAAAM,aAAA8rD,mBAAAD,iBAAA,QACAnwD,OAAAysB,MAAAC,eAAAC,UAAA,GAIA3sB,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAA2P,aAAAE,UAAA+D,SAAA5T,OAAA0sB,eAAAO,YAAApd,UAAA,IACA7P,OAAA2P,aAAAS,UAAAwD,SAAA5T,OAAA0sB,eAAAO,YAAA7c,UAAA,IACApQ,OAAA2P,aAAAG,UAAA9P,OAAA0sB,eAAAO,YAAAnd,UACA9P,OAAA2P,aAAAM,QAAAjQ,OAAA0sB,eAAAO,YAAAhd,SAGAjQ,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAAtd,UAAA7P,OAAA2P,aAAAE,UACA7P,OAAA0sB,eAAAS,YAAA/c,UAAApQ,OAAA2P,aAAAS,UACApQ,OAAA0sB,eAAAS,YAAArd,UAAA9P,OAAA2P,aAAAG,UACA9P,OAAA0sB,eAAAS,YAAAld,QAAAjQ,OAAA2P,aAAAM,SAGAjQ,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IACAE,GADAtN,aAAAY,uBACA0M,GAAA,cAAA5tB,OAAAgE,aAAAM,aAAA8rD,mBAAAvjC,WACA,eAAA7sB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QAEAyd,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,S,WAGA,uCAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAA5tB,OAAAsgB,aAAAhgB,aAAAksB,iBAAAtsB,eAAAkT,wBAGApT,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAA+rD,qBAAArwD,OAAAgE,aAAAM,aAAA+rD,mBAAA,IACArwD,OAAAgE,aAAAM,aAAA+rD,mBAAAC,YAAA,EACAtwD,OAAAgE,aAAAM,aAAA+rD,mBAAAF,iBAAA,QACAnwD,OAAAgE,aAAAM,aAAA+rD,mBAAAE,QAAA,IACAvwD,OAAAysB,MAAAC,eAAAC,UAAA,GAGA3sB,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAA+rD,mBAAAC,YAAAtwD,OAAA0sB,eAAAS,YAAAmjC,YACAtwD,OAAA2P,aAAAE,UAAA+D,SAAA5T,OAAA0sB,eAAAO,YAAApd,UAAA,IACA7P,OAAA2P,aAAAS,UAAAwD,SAAA5T,OAAA0sB,eAAAO,YAAA7c,UAAA,IACApQ,OAAA2P,aAAAG,UAAA9P,OAAA0sB,eAAAO,YAAAnd,UACA9P,OAAA2P,aAAAM,QAAAjQ,OAAA0sB,eAAAO,YAAAhd,QACAjQ,OAAAwwD,aAGAxwD,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAAmjC,YAAAtwD,OAAAgE,aAAAM,aAAA+rD,mBAAAC,YACAtwD,OAAA0sB,eAAAS,YAAAtd,UAAA7P,OAAA2P,aAAAE,UACA7P,OAAA0sB,eAAAS,YAAA/c,UAAApQ,OAAA2P,aAAAS,UACApQ,OAAA0sB,eAAAS,YAAArd,UAAA9P,OAAA2P,aAAAG,UACA9P,OAAA0sB,eAAAS,YAAAld,QAAAjQ,OAAA2P,aAAAM,SAGAjQ,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAEAE,GAFAtN,aAAAY,uBAEA0M,GAAA,eADA,IAAA5tB,OAAAgE,aAAAM,aAAA+rD,mBAAAC,YAAA,2BAAA,mCAEA,eAAAtwD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QAEAyd,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,S,WAGA,sCAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAA5tB,OAAAsgB,aAAAhgB,aAAAksB,iBAAAtsB,eAAAkT,wBAGApT,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAA++C,oBAAArjD,OAAAgE,aAAAM,aAAA++C,kBAAA,IACArjD,OAAAgE,aAAAM,aAAA++C,kBAAAx2B,WAAA,2BACA7sB,OAAAgE,aAAAM,aAAA++C,kBAAA4M,iBAAA,iCAEAjwD,OAAAgE,aAAAM,aAAA++C,kBAAA8M,iBAAA,QACAnwD,OAAAgE,aAAAM,aAAA++C,kBAAAkN,QAAA,IACAvwD,OAAAysB,MAAAC,eAAAC,UAAA,GAGA3sB,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAA++C,kBAAAkN,QAAAvwD,OAAA0sB,eAAAO,YAAAsjC,QACAvwD,OAAAgE,aAAAM,aAAA++C,kBAAA8M,iBAAAnwD,OAAA0sB,eAAAO,YAAAkjC,iBACAnwD,OAAA2P,aAAAE,UAAA+D,SAAA5T,OAAA0sB,eAAAO,YAAApd,UAAA,IACA7P,OAAA2P,aAAAS,UAAAwD,SAAA5T,OAAA0sB,eAAAO,YAAA7c,UAAA,IACApQ,OAAA2P,aAAAG,UAAA9P,OAAA0sB,eAAAO,YAAAnd,UACA9P,OAAA2P,aAAAM,QAAAjQ,OAAA0sB,eAAAO,YAAAhd,SAGAjQ,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAAojC,QAAAvwD,OAAAgE,aAAAM,aAAA++C,kBAAAkN,QACAvwD,OAAA0sB,eAAAS,YAAAgjC,iBAAAnwD,OAAAgE,aAAAM,aAAA++C,kBAAA8M,iBACAnwD,OAAA0sB,eAAAS,YAAAtd,UAAA7P,OAAA2P,aAAAE,UACA7P,OAAA0sB,eAAAS,YAAA/c,UAAApQ,OAAA2P,aAAAS,UACApQ,OAAA0sB,eAAAS,YAAArd,UAAA9P,OAAA2P,aAAAG,UACA9P,OAAA0sB,eAAAS,YAAAld,QAAAjQ,OAAA2P,aAAAM,SAGAjQ,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAKAE,GALAtN,aAAAY,uBAKA0M,GAAA,eAJA,SAAA5tB,OAAAgE,aAAAM,aAAA++C,kBAAA8M,iBACAnwD,OAAAgE,aAAAM,aAAA++C,kBAAA4M,iBACAjwD,OAAAgE,aAAAM,aAAA++C,kBAAAx2B,YAGA,eAAA7sB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QACA,eAAAjQ,OAAAgE,aAAAM,aAAA++C,kBAAAkN,QACA,wBAAAvwD,OAAAgE,aAAAM,aAAA++C,kBAAA8M,iBAEAziC,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,S,WAGA,mCAAA,CAAA,SAAA,eAAA,aAAA,eAAA,mBAAA,iBAAA,YAAA,SAAA5tB,OAAAsgB,aAAApiB,WAAAoC,aAAAksB,iBAAAtsB,eAAAkT,wBAGApT,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAw+C,iBAAA9iD,OAAAgE,aAAAM,aAAAw+C,eAAA,IACA9iD,OAAAgE,aAAAM,aAAAw+C,eAAAqN,kBAAA,EACAnwD,OAAAysB,MAAAC,eAAAC,UAAA,GAGA3sB,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAw+C,eAAAqN,iBAAAnwD,OAAA0sB,eAAAO,YAAAkjC,iBACAnwD,OAAA2P,aAAAE,UAAA+D,SAAA5T,OAAA0sB,eAAAO,YAAApd,UAAA,IACA7P,OAAA2P,aAAAS,UAAAwD,SAAA5T,OAAA0sB,eAAAO,YAAA7c,UAAA,IACApQ,OAAA2P,aAAAG,UAAA9P,OAAA0sB,eAAAO,YAAAnd,UACA9P,OAAA2P,aAAAM,QAAAjQ,OAAA0sB,eAAAO,YAAAhd,SAGAjQ,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAAgjC,iBAAAnwD,OAAAgE,aAAAM,aAAAw+C,eAAAqN,iBACAnwD,OAAA0sB,eAAAS,YAAAtd,UAAA7P,OAAA2P,aAAAE,UACA7P,OAAA0sB,eAAAS,YAAA/c,UAAApQ,OAAA2P,aAAAS,UACApQ,OAAA0sB,eAAAS,YAAArd,UAAA9P,OAAA2P,aAAAG,UACA9P,OAAA0sB,eAAAS,YAAAld,QAAAjQ,OAAA2P,aAAAM,SAGAjQ,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAEAE,GAFAtN,aAAAY,uBAEA0M,GAAA,eADA5tB,OAAAgE,aAAAM,aAAAw+C,eAAAqN,iBAAA,oBAAA,kBAEA,eAAAnwD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QAEAyd,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,S,WAGA,kCAAA,CAAA,SAAA,eAAA,eAAA,mBAAA,iBAAA,YAAA,SAAA5tB,OAAAsgB,aAAAhgB,aAAAksB,iBAAAtsB,eAAAkT,wBAGApT,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAmsD,gBAAAzwD,OAAAgE,aAAAM,aAAAmsD,cAAA,IACAzwD,OAAAgE,aAAAM,aAAAmsD,cAAA5jC,WAAA,eACA7sB,OAAAgE,aAAAM,aAAAmsD,cAAAC,aAAA,IACA1wD,OAAAysB,MAAAC,eAAAC,UAAA,EACA3sB,OAAA6tB,cAAA,GAGA7tB,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAA2P,aAAAE,UAAA+D,SAAA5T,OAAA0sB,eAAAO,YAAApd,UAAA,IACA7P,OAAA2P,aAAAS,UAAAwD,SAAA5T,OAAA0sB,eAAAO,YAAA7c,UAAA,IACApQ,OAAA2P,aAAAG,UAAA9P,OAAA0sB,eAAAO,YAAAnd,UACA9P,OAAA2P,aAAAM,QAAAjQ,OAAA0sB,eAAAO,YAAAhd,SAGAjQ,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAAtd,UAAA7P,OAAA2P,aAAAE,UACA7P,OAAA0sB,eAAAS,YAAA/c,UAAApQ,OAAA2P,aAAAS,UACApQ,OAAA0sB,eAAAS,YAAArd,UAAA9P,OAAA2P,aAAAG,UACA9P,OAAA0sB,eAAAS,YAAAld,QAAAjQ,OAAA2P,aAAAM,SAGAjQ,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IACAE,GADAtN,aAAAY,uBACA0M,GAAA,cAAA5tB,OAAAgE,aAAAM,aAAAmsD,cAAA5jC,WACA,eAAA7sB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QAEAyd,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,S,WAGA,qBAAA,CAAA,SAAA,eAAA,oBAAA,mBAAA,iBAAA,YAAA,SAAA5tB,OAAAM,aAAAD,kBAAAmsB,iBAAAtsB,eAAAkT,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAA0H,4BAAArH,kBAAAswD,iBAAA3wD,OAAAoI,2BAAA9H,aAAAyvD,kBASA/vD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAssD,iBAAA5wD,OAAAgE,aAAAM,aAAAssD,eAAA,IACA5wD,OAAAgE,aAAAM,aAAAssD,eAAA/jC,WAAA,kBACA7sB,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAuD,QAAAvD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAA6tB,aAAA,QACA7tB,OAAAuE,eAhBAvE,OAAA0H,4BAAArH,kBAAAwwD,iBACA7wD,OAAAgD,KAAA,2CAEAhD,OAAAgD,KAAA,iCAgBAhD,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAAAE,GAAA,cAAA5tB,OAAAgE,aAAAM,aAAAssD,eAAA/jC,WACA,eAAA7sB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAEA8pB,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,Q,WAGA,eAAA,CAAA,SAAA,eAAA,YAAA,SAAA5tB,OAAAM,aAAA8S,wBAIApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAA0rD,WAAAhwD,OAAAgE,aAAAM,aAAA0rD,SAAA,IACAhwD,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAGA,qBAAA,CAAA,SAAA,eAAA,YAAA,SAAAtH,OAAAM,aAAA8S,wBAGApT,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,O,WAEA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAAtH,OAAAM,aAAA8S,wBAGApT,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,O,WAEA,wBAAA,CAAA,SAAA,eAAA,YAAA,SAAAtH,OAAAM,aAAA8S,wBAGApT,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,O,WAEA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAAtH,OAAAM,aAAA8S,wBAGApT,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,O,WAEA,wBAAA,CAAA,SAAA,eAAA,mBAAA,iBAAA,YAAA,SAAAtH,OAAAM,aAAAksB,iBAAAtsB,eAAAkT,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAGAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAgE,aAAAM,aAAAwsD,kBAAA,GACA9wD,OAAAgE,aAAAM,aAAAwsD,kBAAAjkC,WAAA,qBACA7sB,OAAAuE,eAGAvE,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAAAE,GAAA,cAAA5tB,OAAAgE,aAAAM,aAAAwsD,kBAAAjkC,WACA,eAAA7sB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAEA8pB,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,Q,WAGA,oBAAA,CAAA,SAAA,eAAA,YAAA,SAAA5tB,OAAAM,aAAA8S,wBAGApT,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,OC3kBApK,QAAAC,OAAA,mBAAA,CAAA,iB,4CACA,SAAAC,eAAAG,kBAEAH,e,KACA,6BACA,CACAK,YAAAF,iBAAAG,YAAA,aACAC,WAAA,gBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,4BACA,CACAN,YAAAF,iBAAAG,YAAA,YACAC,WAAA,eACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,gCACA,CACAN,YAAA,qDACAE,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,+BACA,CACAN,YAAAF,iBAAAG,YAAA,eACAC,WAAA,kBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,mCACA,CACAN,YAAAF,iBAAAG,YAAA,mBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,mC,KAIA,6BACA,CACAN,YAAAF,iBAAAG,YAAA,aACAC,WAAA,gBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,sC,WAMA,6BAAA,CAAA,SAAA,aAAA,mBAAA,SAAAiC,OAAA9B,WAAA6yD,+BAIA/wD,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,Q,WAGA,gBAAA,CAAA,SAAA,mBAAA,eAAA,oBAAA,kBAAA,eAAA,UAAA,KAAA,WAAA,YAAA,eAAA,SAAAtE,OAAA+wD,iBAAAzwD,aAAAD,kBAAAutD,gBAAAttC,aAAA3f,QAAAxC,GAAAuC,SAAA0S,UAAAvV,2BAIAmC,OAAAwB,QAAAI,YACA5B,OAAAwB,QAAAI,UAAA,IACA5B,OAAAwB,QAAAI,UAAAovD,UAAA,CAAAt0C,OAAA,GACA1c,OAAAwB,QAAAI,UAAAqvD,UAAA,CAAAv0C,OAAA,GACA1c,OAAAwB,QAAAI,UAAAsvD,SAAA,CAAAx0C,OAAA,GACA1c,OAAAwB,QAAAI,UAAAuvD,aAAA,CAAAz0C,OAAA,GACA1c,OAAAwB,QAAAI,UAAAwvD,gBAAA,CAAA10C,OAAA,GACA1c,OAAAwB,QAAAI,UAAAyvD,kBAAA,CAAA30C,OAAA,EAAApE,KAAA,QAEAtY,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAu6C,cAAA,GACAtxD,OAAA+W,MAAAw6C,qBAAA,CACAn6C,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAArD,KAAAqD,SAAArD,KAAAsD,SAAA,IACAxX,OAAAwxD,gBAAAj6C,SAAA9Q,KACAzG,OAAAgO,UAEA0J,QAAA,CACA,CACAC,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,mBACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,UACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAxG,MAAAtT,aAAAiC,mBAAA,kBACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAxG,MAAAtT,aAAAiC,mBAAA,kBACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+LACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAGAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAA06C,kBAAA,WAEAzxD,OAAA+W,MAAA26C,gBAAA,IAAA36C,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAAwB,QAAAI,UAAAovD,UAAAW,QAGA3xD,OAAA+W,MAAA26C,gBAAA54C,OACA9Y,OAAA+W,MAAAu6C,cAAAn5C,WAAA1Y,KAAAO,OAAA+W,MAAA26C,gBAAAjyD,SAGAO,OAAA4U,QAAArQ,YAAA,WAEAvE,OAAAwB,QAAAI,UAAAovD,UAAAW,MAAA,GACA3xD,OAAAiR,WAAAO,OACAxR,OAAAwB,QAAAI,UAAAovD,UAAAt0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAqvD,UAAAv0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAuvD,aAAAz0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAuvD,aAAAz0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAwvD,gBAAA10C,OAAA,EACAq0C,iBAAAa,SAEA5xD,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAgE,aAAAM,aAAA0sD,UAAAa,WACA7xD,OAAAgE,aAAAM,aAAA0sD,UAAAc,WACA,SAAA9xD,OAAAgE,aAAAM,aAAA0sD,UAAAe,QAAA,EAAA,EACA,SAAA/xD,OAAAgE,aAAAM,aAAA0sD,UAAAgB,SAAA,EAAA,EACA,SAAAhyD,OAAAgE,aAAAM,aAAA0sD,UAAAT,SAAA,EAAA,EACA,SAAAvwD,OAAAgE,aAAAM,aAAA0sD,UAAAiB,QAAA,EAAA,EACA,SAAAjyD,OAAAgE,aAAAM,aAAA0sD,UAAAkB,WAAA,EAAA,EACAlyD,OAAAgE,aAAAM,aAAA0sD,UAAAmB,WACAnyD,OAAAgE,aAAAM,aAAA0sD,UAAA94C,U,KAGA,SAAAzY,MAEA,IAAAA,KAAA2yD,MAAA/yD,QAMAW,OAAAwB,QAAAI,UAAAovD,UAAAW,MAAA,GACAz0D,QAAA4P,QAAArN,KAAA2yD,MAAA,SAAAplD,MAEA,IAAAuJ,KAAAvJ,KAAAqlD,aAAA,MAAArlD,KAAAy5B,YACAlwB,OAAA,IAAAvJ,KAAAslD,SAAA,cAAA,GAEA,IAAA9yD,OAAAmB,QAAA,SAAAA,CAAAX,OAAAwB,QAAAI,UAAA2wD,YAAA,CAAA9rD,IAAAuG,KAAAqsB,SAEAm5B,IAAA7xD,QAAA,OAAAA,CAAAqM,KAAAylD,eAAA,eAAA,GACAC,IAAA/xD,QAAA,OAAAA,CAAAqM,KAAA2lD,eAAA,eAAA,GAEA3yD,OAAAwB,QAAAI,UAAAovD,UAAAW,MAAA1zD,KAAA,CACAwI,IAAAuG,KAAAvG,IACAmsD,KAAA5lD,KAAAy5B,YACAA,YAAAlwB,KACA8iB,OAAA75B,OAAA,GAAAinC,YACAgsB,eAAAD,IACAG,eAAAD,QAGA1yD,OAAA+W,MAAA06C,qBAxBAzxD,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,aA6BAE,OAAAuB,WAAA,WAIAvB,OAAA0H,4BAAArH,kBAAAwyD,kBAEA7yD,OAAA0H,4BAAArH,kBAAAyyD,gBACA9yD,OAAAgD,KAAA,8CACAhD,OAAA0H,4BAAArH,kBAAA0yD,iBACA/yD,OAAAgD,KAAA,kCAEAhD,OAAAgD,KAAA,UAGAsd,aAAAO,wBACA7gB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,0BACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAwB,QAAAI,UAAA2wD,YAAA,CACA,CAAA9rD,IAAA,IAAAggC,YAAA5oC,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,YACA,CAAA2G,IAAA,IAAAggC,YAAA5oC,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,eACA,CAAA2G,IAAA,IAAAggC,YAAA5oC,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,aACA,CAAA2G,IAAA,IAAAggC,YAAA5oC,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,YACA,CAAA2G,IAAA,IAAAggC,YAAA5oC,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,cAEAE,OAAAwB,QAAAI,UAAAovD,UAAAW,MAAA,GACAZ,iBAAAkC,gBACAjzD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,S,KAEA,SAAAnE,MACAO,OAAAwB,QAAAI,UAAAsxD,QAAAvyD,QAAA,UAAAA,CAAAlB,KAAA0zD,YAAA,eACAnzD,OAAAwB,QAAAI,UAAAwxD,iBAAAzyD,QAAA,UAAAA,CAAAlB,KAAA4zD,qBAAA,eACArzD,OAAAwB,QAAAI,UAAA0xD,kBAAA3yD,QAAA,UAAAA,CAAAlB,KAAA8zD,wBAAA,eACAvzD,OAAAwB,QAAAI,UAAA4xD,OAAA/zD,KAAAg0D,OACAzzD,OAAAwB,QAAAI,UAAA8xD,WAAA/yD,QAAA,UAAAA,CAAAlB,KAAAk0D,eAAA,MACA3zD,OAAAwB,QAAAI,UAAAwR,UAAAzS,QAAA,UAAAA,CAAAlB,KAAAm0D,sBAAA,eACA5zD,OAAAwB,QAAAI,UAAAiyD,QAAAp0D,KAAAq0D,UAIA/C,iBAAAgD,oBAAA/zD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,S,KACA,SAAAnE,MACAA,KAAAkmB,aACA3lB,OAAAwB,QAAAI,UAAAoyD,YAAArzD,QAAA,UAAAA,CAAAlB,KAAAw0D,YAAA,kBAKArG,gBAAAsG,qBAAAl0D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAAA,G,KACA,SAAAnE,MACAA,KAAAkmB,aACA3lB,OAAAwB,QAAAI,UAAAuyD,UAAAxzD,QAAA,UAAAA,CAAAlB,KAAA20D,UAAA,kBAKAp0D,OAAAgmC,cAGAhmC,OAAAq0D,UAAA,SAAAC,OAEA,IAAAnb,UAAA,EACAob,YAAA,EACAC,KAAAx0D,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAEA,GAAAF,KAAA/tB,YAAAjhC,UAIA,OAFAxF,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,YAAA,cACAE,OAAA8N,gBAAA,oBAIA,OAAAwmD,O,IAEA,OACAnb,UAAA,GACA,M,IAEA,eACAA,UAAA,GACAob,YAAA,EACA,M,IAEA,SACApb,UAAA,GACAqb,KAAAG,iBAAA,KACAH,KAAAI,cAAA,KACA,M,IAEA,MACAzb,UAAA,EACA,M,IAEA,WAEA,IAAAn5C,OAAA60D,sBAAAL,MACA,OAEArb,UAAA,EACAqb,KAAA7hD,OAAA,EACA6hD,KAAAnC,aAAA,KACAmC,KAAAlC,SAAA,KACAkC,KAAAM,IAAA,KACAN,KAAAO,gBAAA,KACAP,KAAAQ,gBAAA,KACAR,KAAAS,aAAA,IACAT,KAAAU,YAAA,KACAV,KAAAW,cAAA,KACAX,KAAAY,cAAA,KACAZ,KAAAa,cAAA,KACAb,KAAAc,mBAAA,IACAd,KAAAe,kBAAA,IACAf,KAAAgB,iBAAA,KACAhB,KAAAiB,iBAAA,EACAjB,KAAAkB,kBAAA,KACAlB,KAAAmB,gBAAA,IACAnB,KAAA/tD,IAAA,EACA+tD,KAAAoB,UAAA,KACApB,KAAAn7B,OAAAr5B,OAAA61D,gBAAAC,aAAA,IAAA,IACAvB,YAAA,EAIAxD,iBAAAsD,UAEAlb,UACAqb,KACAx0D,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAsB,QAAA,GACA/1D,OAAAwB,QAAAE,QAAAoF,qBAAApD,a,KAGA,SAAAjE,MAEA80D,WAGAv0D,OAAAuB,aAFAvB,OAAAwxD,gBAAAgD,KAAA/tD,KAIAzG,OAAA6O,gBAAA7O,OAAAg2D,cAKAh2D,OAAAwxD,gBAAA,SAAAnoD,KAEA0nD,iBAAAkF,eAEA5sD,IACArJ,OAAAoI,2BAAA9H,aAAA41D,kB,KAGA,SAAAz2D,MAEAO,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAh1D,KAAA02D,YACAn2D,OAAAwB,QAAAI,UAAAqvD,UAAAmF,gBAAAl5D,QAAA89B,KAAAv7B,KAAA02D,aAEAn2D,OAAAq2D,qBACAr2D,OAAA6O,gBAAA7O,OAAAg2D,cAKAh2D,OAAAs2D,gBAAA,SAAAhC,OAEA,OAAAA,O,IAEA,UACAt0D,OAAAu2D,oBACAj2C,aAAA6D,sBACAnkB,OAAAwB,QAAAI,UAAAsvD,SAAAsF,KAAA,KACAx2D,OAAAwB,QAAAI,UAAAsvD,SAAAuF,KAAA,KACAz2D,OAAAwB,QAAAI,UAAAsvD,SAAA/vC,OAAA,EACAnhB,OAAAwB,QAAAI,UAAAsvD,SAAAx0C,OAAA,EACA,M,IAEA,OACA,IAAA4D,aAAAY,qBACA,OAEAlhB,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAAAI,IAAA90D,OAAAwB,QAAAI,UAAAsvD,SAAAsF,KACAx2D,OAAAwB,QAAAI,UAAAsvD,SAAAx0C,OAAA,EACA1c,OAAAq0D,UAAA,UAKAr0D,OAAA02D,oBAAA,SAAApC,OAEA,OAAAA,O,IAEA,UACAt0D,OAAAu2D,oBACAv2D,OAAAwB,QAAAI,UAAAuvD,aAAAthD,UAAA7P,OAAAwB,QAAAI,UAAAwxD,iBAAA,GAAA3sD,IACAzG,OAAAwB,QAAAI,UAAAuvD,aAAAz0C,OAAA,EACA,M,IAEA,OACA1c,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAAAiC,eAAA32D,OAAAwB,QAAAI,UAAAuvD,aAAAthD,UACA7P,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAAAY,mBAAA,KACAt1D,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAAAQ,YAAA,IAAA5pD,KACAtL,OAAAwB,QAAAI,UAAAuvD,aAAAz0C,OAAA,EACA1c,OAAAq0D,UAAA,UAKAr0D,OAAA42D,yBAAA,SAAAtC,OAEA,OAAAA,O,IAEA,UACAt0D,OAAAu2D,oBACAv2D,OAAAwB,QAAAI,UAAAwvD,gBAAAvhD,UAAA7P,OAAAwB,QAAAI,UAAA0xD,kBAAA,GAAA7sD,IACAzG,OAAAwB,QAAAI,UAAAwvD,gBAAA10C,OAAA,EACA,M,IAEA,OACA1c,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAAAe,iBAAAz1D,OAAAwB,QAAAI,UAAAwvD,gBAAAvhD,UACA7P,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAAAr7B,OAAA,IACAr5B,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAAAgB,mBAAA,IAAApqD,MAAAurD,cAAA3qD,MAAA,EAAA,IACAlM,OAAAwB,QAAAI,UAAAwvD,gBAAA10C,OAAA,EACA1c,OAAAq0D,UAAA,UAKAr0D,OAAA82D,oBAAA,SAAAC,SAEA,OAAAA,S,IAEA,OACA/2D,OAAAu2D,oBAAA/xD,KACA,WAEAxE,OAAAq0D,UAAA,QACAr0D,OAAAwB,QAAAI,UAAAyvD,kBAAA/4C,KAAA,OACAtY,OAAAwB,QAAAI,UAAAyvD,kBAAA30C,OAAA,GAEA,WAEA1c,OAAAwB,QAAAI,UAAAyvD,kBAAA/4C,KAAA,OACAtY,OAAAwB,QAAAI,UAAAyvD,kBAAA30C,OAAA,IAGA,M,IAEA,OACA,OAAA1c,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GAAAiB,gBACA31D,OAAAwB,QAAAI,UAAAyvD,kBAAA/4C,KAAA,WAGAtY,OAAAq0D,UAAA,UACAr0D,OAAA82D,oBAAAj5D,aAAAiC,mBAAA,WAEA,M,IAEA,UACAE,OAAAq0D,UAAA,UACAr0D,OAAA82D,oBAAAj5D,aAAAiC,mBAAA,UACA,M,IAEA,QACAE,OAAAwB,QAAAI,UAAAyvD,kBAAA30C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAyvD,kBAAA/4C,KAAA,SAKAtY,OAAAgmC,WAAA,WAEAhmC,OAAAwB,QAAAI,UAAAovD,UAAAt0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAqvD,UAAAv0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAuvD,aAAAz0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAuvD,aAAAz0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAwvD,gBAAA10C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAyvD,kBAAA30C,OAAA,EACA4D,aAAA6D,uBAGAnkB,OAAA60D,sBAAA,SAAAL,MAEA,IA6CAwC,SA7CAx/B,SAAA,EACA9J,MAAA/sB,QAAA,SAAAA,CAAAX,OAAAwB,QAAAI,UAAAsxD,QAAA,CAAAzsD,IAAA+tD,KAAAyC,cAAA,GAAA,IAAA,GAEA,OAAA/5D,QAAAgF,yBAAAwrB,QAAA,IAAAA,MAAAwpC,cAEAl3D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,qBAAA,UACA,IAGA,OAAA00D,KAAAlC,UAEAp1D,QAAA4P,QAAA9M,OAAAwB,QAAAI,UAAAwR,UAAA,SAAApG,MAEAwnD,KAAA/tB,cAAAz5B,KAAAy5B,cAEAzmC,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,6BAAA,SACA03B,SAAA,MAYA,IAAA9J,MAAAypC,cAAA,IAAAzpC,MAAA0pC,QAAA,IAAA1pC,MAAA2pC,eAEAr3D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,sBAAA,SACA03B,SAAA,IAIA,IAAA9J,MAAA4pC,oBAAA,IAAA5pC,MAAA6pC,0BAAA,IAAA7pC,MAAA8pC,yBAEAx3D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,iCAAA,SACA03B,SAAA,IAIA,IAAA9J,MAAA4pC,qBAAA,IAAA5pC,MAAA8pC,yBAGAR,SAAA95D,QAAAgF,yBAAAsyD,KAAAiD,eAAA,IAAAnsD,KAAA,cAAA,IAAAA,KAAAkpD,KAAAiD,gBACAv6D,QAAAgF,yBAAAsyD,KAAAQ,iBAAA,IAAA1pD,KAAA,cAAA,IAAAA,KAAAkpD,KAAAQ,oBACAxhD,MAAA,IAAAlI,OAEA0rD,UAAAxjD,QAEAxT,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,yBAAA,SACA03B,SAAA,IAIAA,UAGAx3B,OAAAu2D,kBAAA,WAEA,IAAA7d,SAAAv6C,GAAAiwC,QAMA,OALApuC,OAAAg2D,UAAA/V,OACAjgD,OAAAiR,WAAAY,QAAAhU,aAAAiC,mBAAA,kBAAA44C,SAAA96C,QAAA86C,SAAA34C,QAEA24C,SAAA34C,SAEA24C,SAAApK,SAGAtuC,OAAAq2D,mBAAA,WAkCA,SAAAqB,UAAAC,KAAAh4D,KAAAgY,MAAAxQ,OAEA,IAAAoE,OAAAqsD,QAAAD,OAAA,IAAAA,KAAAt4D,QAAAnC,QAAAgF,yBAAAvC,OAAAzC,QAAAgF,yBAAAyV,OACA,OAAAxQ,MAEA6F,KAAA2qD,KAAA1+C,KAAA,CAAAxS,IAAA9G,OAEA,OAAAqN,KACAA,KAAA2K,OAEAxQ,MAzCAnH,OAAA61D,gBAAA,CACAgC,UAAA,EACAC,UAAA,GAEAC,gBAAA,EACAC,kBAAA,GACAC,iBAAA,EAEAC,iBAAA,EACAC,eAAA,EACAC,cAAA,EACAC,oBAAA,EACAC,oBAAA,EAEAC,eAAA,EACAC,aAAA,EACAC,aAAA,GACAC,gBAAA,EACAC,kBAAA,EAEAC,eAAA,GACAC,SAAA,GACA1G,WAAA,GACAzkC,OAAA,GACA4mC,MAAA,GACAwE,WAAA,GACAC,mBAAA,GACAC,gBAAA,GACAC,UAAA,IAgBA,IAAAzE,KAAAx0D,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAC,UAAA,GACAhnC,OAAA/sB,QAAA,SAAAA,CAAAX,OAAAwB,QAAAI,UAAAsxD,QAAA,CAAAzsD,IAAA+tD,KAAAyC,cAAA,GAAA,GAGAzC,MAAA9mC,QAOA1tB,OAAA61D,gBAAAgC,WAAA73D,OAAAoI,2BAAA9H,aAAA44D,cACA,IAAAxrC,OAAAyrC,wBACA,MAAA3E,KAAAS,eACAj1D,OAAA61D,gBAAAiC,UAAA93D,OAAA61D,gBAAAgC,SAAAh6D,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,YACAE,OAAA61D,gBAAAiC,WAAA,OAAAtD,KAAAlC,SAAA,YAAA,GACAtyD,OAAA61D,gBAAAC,cAAA,IAAApoC,OAAA2pC,aAGAr3D,OAAA61D,gBAAAuD,QAAA,IAAA1rC,OAAA0pC,OACAp3D,OAAA61D,gBAAAwD,gBAAA3rC,OAAA4rC,KAAA35D,MAAA,MAAAN,QAAA,GACAW,OAAA61D,gBAAAoC,iBAAAj4D,OAAA61D,gBAAAgC,WAAA73D,OAAA61D,gBAAAuD,QAAAp5D,OAAAoI,2BAAA9H,aAAA41D,iBAGAl2D,OAAA61D,gBAAAyC,mBAAA,OAAA9D,KAAAc,mBACAt1D,OAAA61D,gBAAAsC,cAAAn4D,OAAA61D,gBAAAgC,UACA,EAAArD,KAAA+E,mBACA,EAAA/E,KAAAgF,kBACA,EAAAx5D,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAsB,QAAA12D,OACAW,OAAA61D,gBAAAqC,iBAAA,IAAAxqC,OAAA+rC,iBACAz5D,OAAA61D,gBAAAuC,aAAA,MAAA5D,KAAAkF,iBAAA,IAAAlF,KAAAmF,0BACA35D,OAAA61D,gBAAAwC,mBAAA,EAAAr4D,OAAAwB,QAAAI,UAAAqvD,UAAAwD,YAAAmF,WAAAv6D,OAGAW,OAAA61D,gBAAAgE,UAAA75D,OAAA61D,gBAAAgC,SACA73D,OAAA61D,gBAAA0C,eAAAv4D,OAAA61D,gBAAAgC,UAAA,IAAAnqC,OAAAosC,SACA95D,OAAA61D,gBAAA2C,aAAAx4D,OAAA61D,gBAAAgC,SACA73D,OAAA61D,gBAAA4C,aAAA,IAAA/qC,OAAAypC,aAAAt5D,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,iBAAAjC,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,gBACAE,OAAA61D,gBAAA6C,gBAAA14D,OAAA61D,gBAAAgC,SACA73D,OAAA61D,gBAAA8C,iBAAA34D,OAAAoI,2BAAA9H,aAAAy5D,aAGA/5D,OAAA61D,gBAAA+C,eAAAlB,UAAA13D,OAAAwB,QAAAI,UAAAuyD,UAAAK,KAAAnrB,WAAA,KAAA,aACArpC,OAAA61D,gBAAAnoC,OAAAA,OAAA+Y,YACAzmC,OAAA61D,gBAAA1D,WAAAuF,UAAA13D,OAAAwB,QAAAI,UAAAoyD,YAAAQ,KAAAwF,WAAA,cAAA,IACAh6D,OAAA61D,gBAAAvB,MAAAoD,UAAA13D,OAAAwB,QAAAI,UAAA4xD,OAAAgB,KAAAyF,kBAAA,cAAA,IACAj6D,OAAA61D,gBAAAgD,SAAA,MAAArE,KAAA7qD,KAAA,cAAA,eACA3J,OAAA61D,gBAAAiD,WAAApB,UAAA13D,OAAAwB,QAAAI,UAAA2wD,YAAAiC,KAAAn7B,OAAA,cAAA,IACAr5B,OAAA61D,gBAAAkD,mBAAArB,UAAA13D,OAAAwB,QAAAI,UAAA0xD,kBAAAkB,KAAAiB,iBAAA,cAAA,IACAz1D,OAAA61D,gBAAAmD,gBAAAtB,UAAA13D,OAAAwB,QAAAI,UAAAwxD,iBAAAoB,KAAAmC,eAAA,cAAA,IACA32D,OAAA61D,gBAAAoD,UAAAvB,UAAA13D,OAAAwB,QAAAI,UAAA8xD,WAAAc,KAAA+E,kBAAA,KAAA,IAGAv5D,OAAAwB,QAAAI,UAAAovD,UAAAt0C,OAAA,EACA1c,OAAAwB,QAAAI,UAAAqvD,UAAAv0C,OAAA,GAhDA1c,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,SAAAjC,aAAAiC,mBAAA,4B,WAmDA,wBAAA,CAAA,SAAA,mBAAA,eAAA,mBAAA,UAAA,SAAAE,OAAA+wD,iBAAAzwD,aAAAksB,iBAAA7rB,sBAGAX,OAAAk6D,KAAA,GAEAl6D,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAA0sD,YAAAhxD,OAAAgE,aAAAM,aAAA0sD,UAAA,IACAhxD,OAAAgE,aAAAM,aAAA0sD,UAAAnkC,WAAA,YACA7sB,OAAAgE,aAAAM,aAAA0sD,UAAAa,WAAA,IACA7xD,OAAAgE,aAAAM,aAAA0sD,UAAAc,WAAA,GACA9xD,OAAAgE,aAAAM,aAAA0sD,UAAAe,OAAA,OACA/xD,OAAAgE,aAAAM,aAAA0sD,UAAAgB,QAAA,QACAhyD,OAAAgE,aAAAM,aAAA0sD,UAAAT,QAAA,QACAvwD,OAAAgE,aAAAM,aAAA0sD,UAAAiB,OAAA,QACAjyD,OAAAgE,aAAAM,aAAA0sD,UAAAkB,UAAA,QACAlyD,OAAAysB,MAAAC,eAAAC,UAAA,IAGA3sB,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAA0sD,UAAAa,WAAA7xD,OAAA0sB,eAAAO,YAAA4kC,WACA7xD,OAAAgE,aAAAM,aAAA0sD,UAAAc,WAAA9xD,OAAA0sB,eAAAO,YAAA6kC,WACA9xD,OAAAgE,aAAAM,aAAA0sD,UAAAe,OAAA/xD,OAAA0sB,eAAAO,YAAA8kC,OACA/xD,OAAAgE,aAAAM,aAAA0sD,UAAAgB,QAAAhyD,OAAA0sB,eAAAO,YAAA+kC,QACAhyD,OAAAgE,aAAAM,aAAA0sD,UAAAT,QAAAvwD,OAAA0sB,eAAAO,YAAAsjC,QACAvwD,OAAAgE,aAAAM,aAAA0sD,UAAAiB,OAAAjyD,OAAA0sB,eAAAO,YAAAglC,OACAjyD,OAAAgE,aAAAM,aAAA0sD,UAAAkB,UAAAlyD,OAAA0sB,eAAAO,YAAAilC,UACAlyD,OAAAgE,aAAAM,aAAA0sD,UAAAmB,WAAAnyD,OAAA0sB,eAAAO,YAAAklC,WACAnyD,OAAAgE,aAAAM,aAAA0sD,UAAA94C,SAAAlY,OAAA0sB,eAAAO,YAAA/U,UAGAlY,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA0kC,WAAA7xD,OAAAgE,aAAAM,aAAA0sD,UAAAa,WACA7xD,OAAA0sB,eAAAS,YAAA2kC,WAAA9xD,OAAAgE,aAAAM,aAAA0sD,UAAAc,WACA9xD,OAAA0sB,eAAAS,YAAA4kC,OAAA/xD,OAAAgE,aAAAM,aAAA0sD,UAAAe,OACA/xD,OAAA0sB,eAAAS,YAAA6kC,QAAAhyD,OAAAgE,aAAAM,aAAA0sD,UAAAgB,QACAhyD,OAAA0sB,eAAAS,YAAAojC,QAAAvwD,OAAAgE,aAAAM,aAAA0sD,UAAAT,QACAvwD,OAAA0sB,eAAAS,YAAA8kC,OAAAjyD,OAAAgE,aAAAM,aAAA0sD,UAAAiB,OACAjyD,OAAA0sB,eAAAS,YAAA+kC,UAAAlyD,OAAAgE,aAAAM,aAAA0sD,UAAAkB,UACAlyD,OAAA0sB,eAAAS,YAAAglC,WAAAnyD,OAAAgE,aAAAM,aAAA0sD,UAAAmB,WACAnyD,OAAA0sB,eAAAS,YAAAjV,SAAAlY,OAAAgE,aAAAM,aAAA0sD,UAAA94C,UAGAlY,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEA,IAAAC,OAAA,KAAA1tB,OAAAgE,aAAAM,aAAA0sD,UAAAa,WAAA,IACA7xD,OAAAgE,aAAAM,aAAA0sD,UAAAa,WACAE,OAAA,SAAA/xD,OAAAgE,aAAAM,aAAA0sD,UAAAe,QAAA,EAAA,EACAC,QAAA,SAAAhyD,OAAAgE,aAAAM,aAAA0sD,UAAAgB,SAAA,EAAA,EACAzB,QAAA,SAAAvwD,OAAAgE,aAAAM,aAAA0sD,UAAAT,SAAA,EAAA,EACA0B,OAAA,SAAAjyD,OAAAgE,aAAAM,aAAA0sD,UAAAiB,QAAA,EAAA,EACAC,UAAA,SAAAlyD,OAAAgE,aAAAM,aAAA0sD,UAAAkB,WAAA,EAAA,EACAC,GAAA,KAAAnyD,OAAAgE,aAAAM,aAAA0sD,UAAAmB,WAAA,IACAnyD,OAAAgE,aAAAM,aAAA0sD,UAAAmB,WAEAvkC,GAAA,0CACA5tB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,qBAAA8pB,OACA,mBAAA1tB,OAAAgE,aAAAM,aAAA0sD,UAAAc,WACA,gBAAAC,OACA,iBAAAC,QACA,iBAAAzB,QACA,gBAAA0B,OACA,mBAAAC,UACA,kBAAAC,GACA,gBAAAnyD,OAAAgE,aAAAM,aAAA0sD,UAAA94C,SACA,0BAAAlY,OAAAoI,2BAAA9H,aAAA41D,iBAEA1pC,iBAAAqB,aAAAD,GAAAH,KAAAC,a,WAGA,eAAA,CAAA,SAAA,WAAA,mBAAA,eAAA,UAAA,eAAA,YAAA,eAAA,SAAA1tB,OAAA4kC,SAAAmsB,iBAAAzwD,aAAAK,QAAA2f,aAAAlN,UAAAvV,2BAgPA,SAAAs8D,eAEA,IAAAC,cAAAnsD,EAAA,+EAAA+jB,SAAA/jB,EAAA,kBACA22B,SAAAw1B,cAAAx1B,CAAA5kC,QA/OAA,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAW,QAAA,CACA,CACAC,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,mBACAkT,WAAA,CAAA6E,MAAA,aACAwc,OAAA,SAAA9hB,QAAAjC,SAEArC,EAAA,Y,KACA,OAAAqC,QAAAqH,O,KACA,YAAA,SAAArH,QAAAqH,O,KACA,QAAA,qB,KACA,YAAA,I,KACA,YAAA,G,KACA,oBAAA9Z,aAAAiC,mBAAA,a,SACAyS,SAEAtE,EAAA,iB,KACA,WAAAqC,QAAAqH,O,KACA,QAAA,iB,SACApF,WAGA,CACAoF,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,cACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAwc,OAAA,SAAA9hB,QAAAjC,SAEArC,EAAA,Y,KACA,OAAAqC,QAAAqH,O,KACA,YAAA,SAAArH,QAAAqH,O,KACA,YAAA3X,OAAAipB,QAAAowC,iB,KACA,YAAA,G,KACA,oBAAAx7D,aAAAiC,mBAAA,a,SACAyS,S,oBACA,CACAqe,SAAA,EACAlD,OAAA,IACAqE,IAAA,EACAlB,UAAA,IAGA5iB,EAAA,iB,KACA,WAAAqC,QAAAqH,O,KACA,QAAA,iB,SACApF,WAGA,CACAoF,MAAA,MACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAwc,OAAA,SAAA9hB,QAAAjC,SAEArC,EAAA,Y,KACA,OAAAqC,QAAAqH,O,KACA,YAAA,SAAArH,QAAAqH,O,KACA,YAAA,I,SACApF,S,oBACA,CACAqe,SAAA,EACAlD,OAAA,IACAqE,IAAA,EACAlB,UAAA,MAIA,CACAlZ,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,aACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAwc,OAAA,SAAA9hB,QAAAjC,SAEArC,EAAA,Y,KACA,OAAAqC,QAAAqH,O,KACA,YAAA,SAAArH,QAAAqH,O,KACA,QAAA,qB,KACA,YAAA,I,SACApF,SAEAtE,EAAA,iB,KACA,WAAAqC,QAAAqH,O,KACA,QAAA,iB,SACApF,WAGA,CACAoF,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,aACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAwc,OAAA,SAAA9hB,QAAAjC,SAEArC,EAAA,Y,KACA,OAAAqC,QAAAqH,O,KACA,YAAA,SAAArH,QAAAqH,O,KACA,QAAA,qB,KACA,YAAA,I,SACApF,SAEAtE,EAAA,iB,KACA,WAAAqC,QAAAqH,O,KACA,QAAA,iB,SACApF,WAGA,CACAoF,MAAA,QACAxG,MAAAtT,aAAAiC,mBAAA,gBACA8X,MAAA,GACAM,SAAA,gBACAlF,WAAA,CAAA6E,MAAA,aACAwc,OAAA,SAAA9hB,QAAAjC,SAEAtQ,OAAA+W,MAAAsjD,UAAApsD,EAAA,Y,KACA,OAAAqC,QAAAqH,O,KACA,YAAA,SAAArH,QAAAqH,O,SACApF,S,kBACA,CACA6E,UAAA,EACAe,WAAAnY,OAAAipB,QAAAuqC,OACA51B,cAAA,OACAC,eAAA,MACAy8B,YAAA,CACA7zD,IAAA,KACA8zD,KAAA,QAKA,CACAppD,MAAA,IACA+G,SAAA,wIACAN,MAAA,IAEA,CACAzG,MAAA,IACA+G,SAAA,2IACAN,MAAA,KAGA5X,OAAA+W,MAAAyjD,oBAAA,CACApjD,UAAA,EACAM,QAAA1X,OAAA+W,MAAAW,QACAS,WAAA,IAAApB,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAA,GACA4zB,OAAA,CACAhB,MAAA,CACAiB,GAAA,cACAC,OAAA,CACAlqB,IAAA,CACAD,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,YAAA,GAEAphD,YAAA,CACAlQ,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,YAAA,GAEAC,OAAA,CACAvxD,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,WAAA,CACAE,OAAA,SAAA70C,OAEA,GAAA,WAAAA,MAAAhT,KAAA,SAAA,KAAAgT,MAAAhQ,MAOA,OAAA,EALA,IAAA8kD,QAAA76D,OAAA+W,MAAA+jD,aAAA3iD,WAAA1Y,OAAAw7B,SAAAoU,QAAA,CAAAsrB,OAAA50C,MAAAhQ,MAAAjB,cAAA,GAEA,OADAiR,MAAAhT,KAAA,kBAAAlV,aAAAiC,mBAAA,iBACA+6D,QAAAx7D,QAAA,KAOAy1D,IAAA,CACA1rD,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,YAAA,GAEAK,UAAA,CACA3xD,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,YAAA,GAEAM,UAAA,CACA5xD,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,YAAA,GACApG,MAAA,CACAj8C,UAAA,EACA4iD,aAAA,CAAAx0D,IAAA,KAAA8zD,KAAA,UAMAliD,SAAA,CACAC,KAAA,SACA4iD,QAAA,EACAC,SAAA,EACAC,SAAA,UAEAtjD,YAAA,EACAujD,SAAA,CACAC,SAAA,CACAhmB,OAAA,GACAimB,WAAA,GACAhhB,OAAA,GACA4gB,QAAA,GACAtmC,KAAA,GACAm3B,KAAA,GACAx0C,OAAA,GACA0jD,OAAA,KAGAM,QAAA,EACAhjD,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,YAAA,EACAC,UAAA,GASA3Y,OAAA0K,IAAA,qBAAA,SAAAC,MAAAwrB,QAEAA,SAAAn2B,OAAA+W,MAAA+jD,eAEAX,eAEAn6D,OAAA+W,MAAA+jD,aAAAW,MAAArlC,GAAA,UAAA,SAAA9e,GAEAA,EAAAub,UAAA9b,MAAA+b,KAAAC,KAAA,UAAAzb,EAAA0oB,OAAAC,QAAA,MAAAy7B,aAAA,wBAEA17D,OAAA27D,SACArkD,EAAAm+B,oBAIAz1C,OAAA+W,MAAA+jD,aAAA5lC,MAAAkB,GAAA,QAAA,2BAAA,SAAA9e,GAEAtX,OAAA+W,MAAA+jD,aAAAjuB,QAAA7sC,OAAA+W,MAAA+jD,aAAA5lC,MAAAjc,KAAA,6BAKAjZ,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAy5D,cAAA/5D,OAAAoI,2BAAA9H,aAAA44D,YAMA54C,aAAAO,wBAEA7gB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,0BACAsC,OAAAgE,aAAAM,eAEAtE,OAAAgE,aAAAM,aAAA,IAEAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAipB,QAAA,CACA/Q,SAAA,GACAwV,OAAA,GACAkuC,YAAA,EACAC,SAAA,EACAC,aAAA,GAGA/K,iBAAAkC,gBAAAjzD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,KAEAA,IAAAkmB,YAMA3lB,OAAAipB,QAAAiqC,QAAAzzD,IAAA0zD,YACAnzD,OAAAipB,QAAAuqC,OAAA/zD,IAAAg0D,OACAzzD,OAAAipB,QAAA7V,UAAA3T,IAAAm0D,sBAAAmI,OAAA,eAEAC,oBAEA,IAAAh8D,OAAAipB,QAAA7V,UAAA/T,QAEAqoB,IAAA1nB,OAAAoI,2BAAA9H,aAAAy5D,aAAA,IAAAl8D,aAAAiC,mBAAA,eAAA,IAAA,IACAE,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,mBAAA4nB,IAAA7pB,aAAAiC,mBAAA,wBACAE,OAAAipB,QAAAgzC,YAAA,GAGAj8D,OAAAipB,QAAAgzC,YAAAj8D,OAAAipB,QAAA7V,UAAA,GAAA3M,IAGA,EAAAzG,OAAAipB,QAAAgzC,aACAj8D,OAAAtC,YAAAsC,OAAAipB,QAAAgzC,cArBAj8D,OAAAiR,WAAAQ,oBA5BAzR,OAAAgD,KAAA,UAsDAhD,OAAA27D,OAAA,WAEA37D,OAAA+W,MAAAmlD,iBAAA/0D,QAAA3B,UAEAxF,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,YAAAjC,aAAAiC,mBAAA,2BAIAE,OAAA+W,MAAA+jD,aAAAqB,cACAn8D,OAAA+W,MAAA+jD,aAAAa,WAGA37D,OAAAtC,YAAA,SAAA2L,KAEAA,KAKA0nD,iBAAAkF,eAAA5sD,KAAA7E,KACA,SAAA/E,MAEAA,KAAAkmB,YAOA3lB,OAAAipB,QAAAmzC,gBAAA38D,KAAA02D,YAGAn2D,OAAAipB,QAAA/Q,SAAAvX,QAAA,SAAAA,CAAAX,OAAAipB,QAAA7V,UAAA,CAAA3M,IAAA4C,IAAAyL,aAAA,GAAA,GACA9U,OAAAipB,QAAAyE,OAAA/sB,QAAA,SAAAA,CAAAX,OAAAipB,QAAAiqC,QAAA,CAAAzsD,IAAAzG,OAAAipB,QAAAmzC,gBAAA1H,UAAA,GAAAuC,cAAA,GAAA,GACAj3D,OAAAipB,QAAAowC,gBAAAr5D,OAAAipB,QAAAyE,OAAA4rC,KAAA35D,MAAA,MAAAN,QAAA,GAEAW,OAAA+W,MAAA+jD,aAAA1yB,YACA8xB,KAAAl6D,OAAA+W,MAAAW,QAAA2kD,SAEA,IAAAr8D,OAAAipB,QAAA/Q,SAAAi/C,cACA+C,KAAAjtB,OAAA,CAAAt1B,MAAA,YAEA,IAAA3X,OAAAipB,QAAA/Q,SAAA4hD,UACAI,KAAAjtB,OAAA,CAAAt1B,MAAA,SAEA,IAAA3X,OAAAipB,QAAAyE,OAAA+rC,mBAEAS,KAAAjtB,OAAA,CAAAt1B,MAAA,cACAuiD,KAAAjtB,OAAA,CAAAt1B,MAAA,cACAuiD,KAAAjtB,OAAA,CAAAt1B,MAAA,WAGA3X,OAAA+W,MAAA+jD,aAAAvrD,WAAA,CACAmI,QAAAwiD,OAGAC,gBAhCAn6D,OAAAiR,WAAAQ,oBAoCAzR,OAAAq0D,UAAA,WAIA,IAGA1C,MALA3xD,OAAA+W,MAAA+jD,aAAAqB,cAEA,EAAAn8D,OAAA+W,MAAA+jD,aAAA5lC,MAAAjc,KAAA,cAAA5Z,SAGAsyD,MAAA3xD,OAAA+W,MAAA+jD,aAAA3iD,WAAA1Y,OAGAvC,QAAAgF,yBAAAyvD,OAEA3xD,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,iBAAA,SAKA5C,QAAA4P,QACA6kD,MACA,SAAA3kD,MAGA,IAAAsvD,QAAAp/D,QAAA89B,KAAAh7B,OAAAipB,QAAAmzC,gBAAA1H,UAAA,IAEA4H,QAAAC,SAAAv8D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA04D,QAAA71B,YAAAz5B,KAAAsM,YACAgjD,QAAA3pD,OAAA3F,KAAA2tD,OACA2B,QAAAxH,IAAA9nD,KAAA8nD,IACAwH,QAAAtH,gBAAAh1D,OAAAipB,QAAA/Q,SAAAskD,kBACAF,QAAAG,UAAAzvD,KAAA+tD,UACAuB,QAAAI,mBAAA1vD,KAAAguD,UACAsB,QAAArC,kBAAAjtD,KAAAsnD,MAAA7tD,IACA61D,QAAAhK,SAAA,EACAgK,QAAAjjC,OAAA,OAAAijC,QAAAK,sBAAA,IAAA,IAEA5L,iBAAA6L,QACA,EACAN,QACAt8D,OAAAipB,QAAAmzC,gBAAArG,QAAA,GACA/1D,OAAAwB,QAAAE,QAAAoF,qBAAApD,aAAAc,KACA,SAAA/E,GAEAA,EAAAkmB,WAEAlmB,EAAAo9D,iBAQApwD,EAAAqwD,UACA70D,EAAA0pD,MAAAnvD,QAAAiK,GACAklD,MAAAoL,OAAA90D,EAAA,GACAjI,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,YARAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oBAAA,SAaAE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,kBAAA,WAMA,IAEAk9D,OAFAF,SAEAE,OAAAhwD,KACA,WAEA,OAAAgwD,aAOA,IAAAhB,kBAAA,WAEA,IAAA,IAAA/zD,EAAAjI,OAAAipB,QAAA7V,UAAA/T,OAAA,EAAA,GAAA4I,EAAAA,KAEA,IAAAjI,OAAAipB,QAAA7V,UAAAnL,GAAAkvD,eAAA,IAAAn3D,OAAAipB,QAAA7V,UAAAnL,GAAAg1D,YACA,IAAAj9D,OAAAipB,QAAA7V,UAAAnL,GAAAovD,cAEAr3D,OAAAipB,QAAA7V,UAAA2pD,OAAA90D,EAAA,O,WAMA,gBAAA,CAAA,SAAA,mBAAA,kBAAA,eAAA,UAAA,eAAA,YAAA,eAAA,SAAAjI,OAAA+wD,iBAAAnD,gBAAAttC,aAAA3f,QAAAL,aAAA8S,UAAAvV,2BAGAmC,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAmmD,cAAA,GACAl9D,OAAA+W,MAAAomD,qBAAA,CACA/lD,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAixC,SAAAr0C,KAAAsD,SACAD,SAAArD,KAAAqD,SAAAgxC,SAAA,IACAvoD,OAAAo9D,eAAA7lD,UACAvX,OAAAgO,UAEA0J,QAAA,CACA,CACAC,MAAA,KACAxG,MAAAtT,aAAAiC,mBAAA,MACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,WACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,OACAxG,MAAAtT,aAAAiC,mBAAA,QACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,UACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,QACAxG,MAAAtT,aAAAiC,mBAAA,iBACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACAxG,MAAAtT,aAAAiC,mBAAA,cACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+HACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAsmD,kBAAA,WAEAr9D,OAAA+W,MAAAumD,gBAAA,IAAAvmD,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAAwB,QAAAI,UAAAuyD,UAAAoJ,UAGAv9D,OAAA+W,MAAAumD,gBAAAxkD,OACA9Y,OAAA+W,MAAAmmD,cAAA/kD,WAAA1Y,KAAAO,OAAA+W,MAAAumD,gBAAA79D,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAiH,yBACAjH,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,0BACAsC,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwB,QAAAI,UAAA4xD,QAEAzC,iBAAAkC,gBACAjzD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,S,KAEA,SAAAnE,MAEAO,OAAAwB,QAAAI,UAAA4xD,OAAA/zD,KAAAg0D,SAIAzzD,OAAAwB,QAAAI,UAAAuyD,UAAA,CACAoJ,QAAA,GACAC,SAAA,GACAC,cAAA,EACAC,YAAA,EACAC,YAAA,IAGA39D,OAAA49D,aAAA59D,OAAAoI,2BAAA9H,aAAAu9D,aAAA79D,OAAAoI,2BAAA9H,aAAAy5D,cACA/5D,OAAAoI,2BAAA9H,aAAA44D,YAEA54C,aAAAO,wBAEA7gB,OAAAwB,QAAAI,UAAA4xD,OAcAxzD,OAAA89D,gBAZA/M,iBAAAkC,gBACAjzD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,S,KAEA,SAAAnE,MAEAO,OAAAwB,QAAAI,UAAA4xD,OAAA/zD,KAAAg0D,OACAzzD,OAAAwB,QAAAI,UAAA4xD,OAAAuK,QAAA,CAAAt3D,IAAA,EAAA8O,KAAA,MACAvV,OAAA89D,kBAMA99D,OAAAgkD,UAAA,KACAhkD,OAAAikD,SAAA,GAGAjkD,OAAAg+D,YAAA,WAEAh+D,OAAAi+D,gBACAj+D,OAAAwB,QAAAI,UAAAuyD,UAAAsJ,cAAA,GAGAz9D,OAAAi+D,cAAA,WAEA/gE,QAAA89B,KAAA+1B,iBAAAmN,cAAAl+D,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,UACAx9D,OAAAwB,QAAAI,UAAAuyD,UAAAsJ,cAAA,EACAn9C,aAAA6D,uBAGAnkB,OAAAm+D,eAAA,SAAA/2D,UAOApH,OAAAiR,WAAAY,QAAAhU,aAAAiC,mBAAA,kBALA,WAEAE,OAAAo+D,aAAA,EAAAh3D,aAMApH,OAAAq+D,aAAA,WAEA/9C,aAAAY,uBAGA,IAAAlhB,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,SAAA/2D,KAEAzG,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,SAAA55D,QAAA5D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,SAAA7zD,KAAA,EACA3J,OAAAo+D,aAAA,EAAAp+D,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,WAEAx9D,OAAAo+D,aAAA,GAAAp+D,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,YAGAx9D,OAAAo9D,eAAA,SAAAh2D,UAEApH,OAAAi+D,gBACA/gE,QAAA89B,KAAA5zB,SAAApH,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,UACAx9D,OAAAwB,QAAAI,UAAAuyD,UAAAsJ,cAAAz9D,OAAAoI,2BAAA9H,aAAA44D,YAGAl5D,OAAA89D,cAAA,WAEAlQ,gBAAAsG,qBAAAl0D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAAA,G,KACA,SAAAnE,MAEAA,KAAAkmB,WAEA,EAAAlmB,KAAA20D,UAAA/0D,QAEAW,OAAAwB,QAAAI,UAAAuyD,UAAAuJ,YAAAj+D,KAAAi+D,aAAA,EACA19D,OAAAwB,QAAAI,UAAAuyD,UAAAwJ,YAAAl+D,KAAAk+D,aAAA,GACA39D,OAAAwB,QAAAI,UAAAuyD,UAAAoJ,QAAA99D,KAAA20D,U,KACA,SAAAkK,IAAAr2D,GAEA,IAAAqsD,MAAAt0D,OAAAwB,QAAAI,UAAA4xD,OAAAv6C,KAAA,CAAAxS,IAAA63D,IAAAC,WACAD,IAAAE,MAAAlK,MAAAA,MAAAiG,KAAA,O,OAEA,eACAv6D,OAAAo9D,eAAAp9D,OAAAwB,QAAAI,UAAAuyD,UAAAoJ,QAAA,IACAv9D,OAAA+W,MAAAsmD,oBACAr9D,OAAA+W,MAAAsmD,qBAGAr9D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,aAAA,WAGAE,OAAAiR,WAAAQ,oBAMAzR,OAAAo+D,aAAA,SAAA5+D,OAAA4H,UAEAwmD,gBAAA6Q,sBACAj/D,OACA4H,SACApH,OAAAwB,QAAAE,QAAAoF,qBAAApD,a,KAEA,SAAAjE,MAEAO,OAAAi+D,gBACAj+D,OAAA89D,gBACA99D,OAAA6O,gBAAA7O,OAAAwB,QAAAI,UAAAuyD,UAAAuK,kBAKA1+D,OAAA2+D,YAAA,WAEA3+D,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,SAAAnR,MAAArsD,OAAAwB,QAAAI,UAAAuyD,UAAAqJ,SAAApR,eAAAvgD,QAAA,UAAA,Q,WAGA,kBAAA,CAAA,SAAA,UAAA,WAAA,mBAAA,eAAA,eAAA,YAAA,eAAA,SAAA7L,OAAAW,QAAAD,SAAAqwD,iBAAAzwC,aAAAhgB,aAAA8S,UAAAvV,2BAGAmC,OAAAk6D,KAAA,GACAl6D,OAAA+W,MAAA,CAAA6nD,sBAAA,GACA5+D,OAAA+W,MAAA8nD,gBAAA,GACA7+D,OAAA+W,MAAA+nD,uBAAA,CACA1nD,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAArD,KAAAqD,SAAArD,KAAAsD,SAAA,IACAxX,OAAA++D,UAAAxnD,SAAAynD,SACAh/D,OAAAgO,UAEA0J,QAAA,CACA,CACAC,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACA3E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,iJACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAGAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAkoD,oBAAA,WAEAj/D,OAAA+W,MAAAmoD,kBAAA,IAAAnoD,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAAm/D,aAGAn/D,OAAA+W,MAAAmoD,kBAAApmD,OACA9Y,OAAA+W,MAAA8nD,gBAAA1mD,WAAA1Y,KAAAO,OAAA+W,MAAAmoD,kBAAAz/D,QAEAO,OAAAk6D,KAAA,GACAjsD,EAAA,gDAAAmxD,KAAAp/D,OAAAk6D,KAAA,GAAAmF,WAEAr/D,OAAA+W,MAAA8nD,gBAAA3oC,WAAA,GAEAl2B,OAAAk6D,KAAA,GACAjsD,EAAA,gDAAAmxD,KAAAp/D,OAAAk6D,KAAA,GAAAmF,WAEAr/D,OAAA+W,MAAA8nD,gBAAA3oC,WAAA,GAEAl2B,OAAAk6D,KAAA,GACAjsD,EAAA,gDAAAmxD,KAAAp/D,OAAAk6D,KAAA,GAAAmF,WAEAr/D,OAAA+W,MAAA8nD,gBAAA3oC,WAAA,GAEAl2B,OAAAk6D,KAAA,GACAjsD,EAAA,gDAAAmxD,KAAAp/D,OAAAk6D,KAAA,GAAAmF,WAEAr/D,OAAA+W,MAAA8nD,gBAAA3oC,WAAA,GAEAl2B,OAAAk6D,KAAA,GACAjsD,EAAA,gDAAAmxD,KAAAp/D,OAAAk6D,KAAA,GAAAmF,WAEAr/D,OAAA+W,MAAA8nD,gBAAA3oC,WAAA,IAGAl2B,OAAAuB,WAAA,WAGAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,0BACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAg0D,YAAA,GACAh0D,OAAAuzB,OAAA,GACAvzB,OAAAs/D,OAAA,GACAt/D,OAAAu/D,QAAA,GACAv/D,OAAAw/D,QAAA,GACAx/D,OAAAy/D,iBAAA,EAEAz/D,OAAA49D,aAAA59D,OAAAoI,2BAAA9H,aAAAu9D,aAAA79D,OAAAoI,2BAAA9H,aAAAy5D,cACA/5D,OAAAoI,2BAAA9H,aAAA44D,YAEA54C,aAAAO,wBACA7gB,OAAA0/D,kBAEAxiE,QAAAgF,yBAAAlC,OAAAm/D,aACAn/D,OAAA++D,UAAA/+D,OAAAm/D,WAAA,GAAAH,UAGAh/D,OAAA2/D,cAAA,SAAAlgE,MAEAO,OAAAkR,QAAA,CACA0uD,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAC,UAAA,EACAP,iBAAA,GAGAhgE,KAAAkmB,YAEA3lB,OAAAg0D,YAAAv0D,KAAAw0D,aAAA,GACAj0D,OAAAuzB,OAAA9zB,KAAAwgE,QAAA,GACAjgE,OAAAs/D,OAAA7/D,KAAAygE,QAAA,GAEA,IAAAlgE,OAAAg0D,YAAA30D,QAAA,IAAAW,OAAAuzB,OAAAl0B,QAEAW,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,aAAA,WAUA5C,QAAA4P,QAAA9M,OAAAuzB,OAAA,SAAAvmB,MAEA,EAAAA,KAAAvG,KAAAuG,KAAAqyD,UAAA75D,YACAwH,KAAAqyD,UAAAxhE,aAAAiC,mBAAA,aAAA,IAAAkN,KAAAmzD,eAIA,IAAAngE,OAAAg0D,YAAA30D,QAEAW,OAAAu/D,QAAA,CACA37D,QAAA5D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA6iC,YAAA,GACAhgC,IAAA,EACAmvD,UAAA,IAIA14D,QAAA4P,QAAA9M,OAAAuzB,OAAA,SAAA5b,OAEA3X,OAAAw/D,QAAAvhE,KAAA,CACAmiE,cAAAzoD,MAAAlR,IACAuzD,WAAA,EACAqG,WAAA,GACA55D,IAAA,EACAmvD,UAAA,QAQA14D,QAAA4P,QAAA9M,OAAAg0D,YAAA,SAAAsM,MAEApjE,QAAA4P,QAAA9M,OAAAuzB,OAAA,SAAA5b,OAMA,IAJAhX,QAAA,SAAA,CAAAX,OAAAs/D,OAAA,CACAtF,WAAAsG,KAAA75D,IACA25D,cAAAzoD,MAAAlR,MAEApH,QAEAW,OAAAs/D,OAAArhE,KAAA,CACAmiE,cAAAzoD,MAAAlR,IACAuzD,WAAAsG,KAAA75D,IACA45D,WAAA,GACA55D,IAAA,EACAmvD,UAAA,SAOA,EAAA51D,OAAAg0D,YAAA30D,QAAA,EAAAW,OAAAuzB,OAAAl0B,QACAW,OAAAugE,YAEA,EAAAvgE,OAAAg0D,YAAA30D,QAAA,IAAAW,OAAAuzB,OAAAl0B,QACAW,OAAAwgE,YAEA,IAAAxgE,OAAAg0D,YAAA30D,SACAW,OAAAm/D,WAAA,IAEA7+C,aAAA6D,sBAEAnkB,OAAA+W,MAAAkoD,uBAtEAj/D,OAAAiR,WAAAQ,kBAyEAzR,OAAAygE,WAAA,WAOAzgE,OAAAiR,WAAAY,QAAAhU,aAAAiC,mBAAA,oBALA,WAEAE,OAAA0gE,gBAAA,MAMA1gE,OAAA0/D,gBAAA,WAEA3O,iBAAAgD,oBAAA/zD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,S,KACA,SAAAnE,MAEAO,OAAA2/D,cAAAlgE,MACAO,OAAA6O,gBAAA7O,OAAA2gE,mBAKA3gE,OAAA0gE,gBAAA,SAAAvnB,WAEA,IAAAA,YAAA74B,aAAAY,uBAGAhkB,QAAAgF,yBAAAi3C,aACAA,UAAA,IAAAn5C,OAAAu/D,QAAA94D,IAAA,EAAA,IAEAzG,OAAAu/D,QAAA94B,YAAAzmC,OAAAu/D,QAAAqB,QAEA7P,iBAAA8P,qBACA1nB,UACAn5C,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,CAAA5D,OAAAu/D,SACA,KACAv/D,OAAAw/D,QACAx/D,OAAAwB,QAAAE,QAAAoF,qBAAApD,a,KAEA,SAAAjE,MAEAO,OAAAu/D,QAAA,GACAv/D,OAAAw/D,QAAA,GACAx/D,OAAAkR,QAAAuuD,iBAAA,EACAz/D,OAAA2/D,cAAAlgE,MACAO,OAAA6O,gBAAA7O,OAAA2gE,kBAIA3gE,OAAAu/D,QAAA,GACAv/D,OAAAw/D,QAAA,GACAx/D,OAAAkR,QAAAuuD,iBAAA,IAIAz/D,OAAA27D,OAAA,WAEA37D,OAAAkR,QAAAuuD,iBAAAz/D,OAAA49D,aACA59D,OAAAu/D,QAAA,CACA37D,QAAA5D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA6iC,YAAA,GACAhgC,IAAA,EACAmvD,UAAA,IAGA51D,OAAAw/D,QAAA,GAEAtiE,QAAA4P,QAAA9M,OAAAuzB,OAAA,SAAAvmB,MAEAhN,OAAAw/D,QAAAvhE,KAAA,CACAmiE,cAAApzD,KAAAvG,IACAuzD,WAAA,EACAqG,WAAA,GACA55D,IAAA,EACAmvD,UAAA,OAIA51D,OAAA8N,gBAAA,yBAGA9N,OAAA++D,UAAA,SAAA11D,MAEAiX,aAAA6D,sBACAm8C,KAAA3/D,QAAA,SAAAA,CAAAX,OAAAg0D,YAAA,CAAAvtD,IAAA4C,OAAA,GAAA,GACArJ,OAAAu/D,QAAAe,KACAtgE,OAAAu/D,QAAAqB,QAAAN,KAAA75B,YACAzmC,OAAAw/D,QAAAx/D,OAAAs/D,OAAAjwB,QAAA,CAAA2qB,WAAAsG,KAAA75D,MAAAs1D,OAAA,SAAA+E,GAEA,OAAA9gE,OAAAuzB,OAAAta,KAAA,CAAAxS,IAAAq6D,EAAAV,gBAAAD,cAEAngE,OAAAkR,QAAAuuD,iBAAAz/D,OAAA49D,aAEA59D,OAAA8N,gBAAA,yBAGA9N,OAAAugE,UAAA,WAEAvgE,OAAAm/D,WAAA,GAGAn/D,OAAAk6D,KAAAv5D,QAAA,UAAAA,CAAAX,OAAAuzB,OAAA,eAEAr2B,QAAA4P,QAAA9M,OAAAg0D,YAAA,SAAAsM,OAEA,IAoBAS,MA4BAC,MAhDAtrC,IAAA,GACAA,IAAAspC,QAAAsB,MAAA75D,IACAivB,IAAAurC,SAAAX,MAAA75B,YACAvpC,QAAAgF,yBAAAlC,OAAAk6D,KAAA,MAEAgH,MAAAvgE,QAAA,SAAAA,CAAAX,OAAAs/D,OAAA,CACAtF,WAAAsG,MAAA75D,IACA25D,cAAApgE,OAAAk6D,KAAA,GAAAzzD,MACA,GAEAvJ,QAAAgF,yBAAAg/D,SAEAxrC,IAAAyrC,SAAAD,MAAAz6D,IACAivB,IAAA0rC,WAAAF,MAAAb,WACArgE,OAAAkR,QAAA0uD,UAAA,IAIA1iE,QAAAgF,yBAAAlC,OAAAk6D,KAAA,MAEA6G,MAAApgE,QAAA,SAAAA,CAAAX,OAAAs/D,OAAA,CACAtF,WAAAsG,MAAA75D,IACA25D,cAAApgE,OAAAk6D,KAAA,GAAAzzD,MACA,GACAvJ,QAAAgF,yBAAA6+D,SAEArrC,IAAA2rC,SAAAN,MAAAt6D,IACAivB,IAAA4rC,WAAAP,MAAAV,WACArgE,OAAAkR,QAAA2uD,UAAA,IAIA3iE,QAAAgF,yBAAAlC,OAAAk6D,KAAA,MAEAqH,MAAA5gE,QAAA,SAAAA,CAAAX,OAAAs/D,OAAA,CACAtF,WAAAsG,MAAA75D,IACA25D,cAAApgE,OAAAk6D,KAAA,GAAAzzD,MACA,GACAvJ,QAAAgF,yBAAAq/D,SAEA7rC,IAAA8rC,SAAAD,MAAA96D,IACAivB,IAAA+rC,WAAAF,MAAAlB,WACArgE,OAAAkR,QAAA4uD,UAAA,IAIA5iE,QAAAgF,yBAAAlC,OAAAk6D,KAAA,MAEA8G,MAAArgE,QAAA,SAAAA,CAAAX,OAAAs/D,OAAA,CACAtF,WAAAsG,MAAA75D,IACA25D,cAAApgE,OAAAk6D,KAAA,GAAAzzD,MACA,GACAvJ,QAAAgF,yBAAA8+D,SAEAtrC,IAAAgsC,SAAAV,MAAAv6D,IACAivB,IAAAisC,WAAAX,MAAAX,WACArgE,OAAAkR,QAAA6uD,UAAA,IAIA7iE,QAAAgF,yBAAAlC,OAAAk6D,KAAA,MAEA0H,MAAAjhE,QAAA,SAAAA,CAAAX,OAAAs/D,OAAA,CACAtF,WAAAsG,MAAA75D,IACA25D,cAAApgE,OAAAk6D,KAAA,GAAAzzD,MACA,GACAvJ,QAAAgF,yBAAA0/D,SAEAlsC,IAAAmsC,SAAAD,MAAAn7D,IACAivB,IAAAosC,WAAAF,MAAAvB,WACArgE,OAAAkR,QAAA8uD,UAAA,IAIAhgE,OAAAm/D,WAAAlhE,KAAAy3B,OAGAx4B,QAAAgF,yBAAAlC,OAAAm/D,cACAn/D,OAAAm/D,WAAAx+D,QAAA,UAAAA,CAAAX,OAAAm/D,WAAA,gBAGAn/D,OAAAwgE,UAAA,WAEAxgE,OAAAm/D,WAAA,GACAjiE,QAAA4P,QAAA9M,OAAAg0D,YAAA,SAAAsM,MAEAtgE,OAAAm/D,WAAAlhE,KAAA,CAAA+gE,QAAAsB,KAAA75D,IAAAw6D,SAAAX,KAAA75B,oB,WAIA,sBAAA,CAAA,SAAA,mBAAA,eAAA,UAAA,eAAA,YAAA,SAAAzmC,OAAA+wD,iBAAAzwC,aAAA3f,QAAAL,aAAA8S,wBAIApT,OAAAuB,WAAA,WAGAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,0BACAsC,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAA+hE,aAAA/hE,OAAAoI,2BAAA9H,aAAAu9D,cAAA79D,OAAAoI,2BAAA9H,aAAAy5D,cACA/5D,OAAAoI,2BAAA9H,aAAA44D,YACA54C,aAAAO,wBACA7gB,OAAAgiE,cAGAhiE,OAAAiiE,UAAA,WAEA3hD,aAAA6D,sBACAnkB,OAAAuzB,OAAA,CAAA,GAAA,GAAA,GAAA,GAAA,IACA,IAAA,IAAAzZ,MAAA,EAAAA,MAAA,IAAAA,MACA,CACA,IAAAna,MAAAgB,QAAA,SAAAA,CAAAX,OAAAu9D,QAAA,CAAA4C,YAAArmD,MAAA,IAAA,GACA5c,QAAAgF,yBAAAvC,OAEAK,OAAAuzB,OAAAzZ,OAAA,CACAlW,QAAA5D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACAy7D,UAAA,GACAc,YAAArmD,MAAA,EACArT,IAAA,EACAmvD,UAAA,IAKA51D,OAAAuzB,OAAAzZ,OAAAna,MAIAK,OAAA8N,gBAAA,mCAGA9N,OAAAkiE,YAAA,WAEAliE,OAAAiiE,aAGAjiE,OAAAmiE,UAAA,WAGA,GAAA7hD,aAAAY,qBAAA,CAIA,IAAA,IAAAjZ,EAAAjI,OAAAuzB,OAAAl0B,OAAA,EAAA,GAAA4I,EAAAA,IAEA,IAAAjI,OAAAuzB,OAAAtrB,GAAAxB,KAAA,KAAAzG,OAAAuzB,OAAAtrB,GAAAo3D,WACAr/D,OAAAuzB,OAAAwpC,OAAA90D,EAAA,GAIAjI,OAAAoiE,eAGApiE,OAAAgiE,WAAA,WAEAjR,iBAAAgD,oBAAA/zD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,S,KACA,SAAAnE,MAEAA,KAAAkmB,WAEA3lB,OAAAu9D,QAAA99D,KAAAwgE,QAAA,IAIAjgE,OAAAiR,WAAAQ,iBACAzR,OAAAu9D,QAAA,IAEAv9D,OAAAiiE,eAMAjiE,OAAAoiE,WAAA,WAEArR,iBAAA8P,qBACA,EACA7gE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,KACA5D,OAAAuzB,OACA,KACAvzB,OAAAwB,QAAAE,QAAAoF,qBAAApD,a,KAEA,SAAAjE,MAEAA,KAAAkmB,aAEAlmB,KAAAkmB,YAEA3lB,OAAAu9D,QAAA99D,KAAAwgE,QAAA,GACAjgE,OAAA6O,gBAAA7O,OAAAqiE,gBAIAriE,OAAAu9D,QAAA,GAEAv9D,OAAAiiE,mBCvhEA/kE,QAAAC,OAAA,oBAAA,CAAA,iB,4CACA,SAAAC,eAAAG,kBAEAH,e,KACA,iCACA,CACAK,YAAAF,iBAAAG,YAAA,gBACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,oC,KAIA,wCACA,CACAN,YAAAF,iBAAAG,YAAA,uBACAC,WAAA,0BACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,uC,WAMA,8BAAA,CAAA,SAAA,SAAAiC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,Q,WAIA,mBAAA,CAAA,SAAA,eAAA,YAAA,SAAAtE,OAAAM,aAAA8S,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAgiE,iBAEAtiE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,2BACAsC,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAIA,2BAAA,CAAA,SAAA,UAAA,mBAAA,mBAAA,kBAAA,WAAA,SAAAtH,OAAAW,QAAAowD,iBAAAvkC,iBAAA1uB,gBAAA4C,uBAGA,IAAA7C,aAAAC,gBAAAC,gCAAA,+BACAiC,OAAAuB,WAAA,WAIAvB,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAi+D,aAAA,CACA11C,WAAA,eACArC,KAAA,EACAg4C,QAAA,EACAC,QAAA,GAEAziE,OAAAipB,QAAA,CACAy5C,MAAA,CAAA,CAAAC,wBAAA,EAAAC,iBAAA/kE,aAAAiC,mBAAA,SACA+iE,SAAA,CAAA,CAAAC,iBAAA,EAAAC,yBAAAllE,aAAAiC,mBAAA,SACAkjE,UAAA,GAIAhjE,OAAAysB,MAAAC,eAAAC,UAAA,GAGAokC,iBAAAkS,wBACAjjE,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA26D,iBAAA1+D,KACA,SAAA/E,MAEAA,KAAAkmB,YAEA,EAAAlmB,KAAA0jE,0BAAA9jE,QAEAW,OAAAipB,QAAAy5C,MAAA1iE,OAAAipB,QAAAy5C,MAAAU,OAAAziE,QAAA,SAAAA,CAAAlB,KAAA0jE,0BAAA,CAAAE,cAAA,QACArjE,OAAAipB,QAAAy5C,MAAA/hE,QAAA,UAAAA,CAAAX,OAAAipB,QAAAy5C,MAAA,qBAIA1iE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,qBAAA,WAGA,EAAAL,KAAA6jE,2BAAAjkE,QAGAI,KAAA6jE,2BAAAvG,OAAA,EAAA,GAEA/8D,OAAAipB,QAAA45C,SAAA7iE,OAAAipB,QAAA45C,SAAAO,OAAAziE,QAAA,SAAAA,CAAAlB,KAAA6jE,2BAAA,CAAAC,sBAAA,QACAvjE,OAAAipB,QAAA45C,SAAAliE,QAAA,UAAAA,CAAAX,OAAAipB,QAAA45C,SAAA,6BAIA7iE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,WAGAE,OAAAipB,QAAA+5C,UAAAvjE,KAAA+jE,oBAGAxjE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,4BAAA,WAKAE,OAAA2P,aAAAE,UAAA,GACA7P,OAAA2P,aAAAU,aAAArQ,OAAAipB,QAAA+5C,WAAA,EACAhjE,OAAA2P,aAAAc,kBAAA,EACA/P,SAAA,WACAV,OAAA2P,aAAAW,QAAA,CACA,CAAAC,KAAA1S,aAAAiC,mBAAA,WAAAqH,MAAA,IACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,SAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,iBAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,cAAAqH,MAAA,MACA,IAGAnH,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAi+D,aAAAviE,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,MAGAvM,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAi+D,aACAviE,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,cAGA3P,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAGA,IAAAs1C,GAAA,CAAAhjE,OAAAipB,QAAA+5C,WACA13D,KAAAM,MAAA5L,OAAA2P,aAAAM,SAAA3E,KAAAM,MAAA5L,OAAA2P,aAAAG,WAAA,MAAA9P,OAAAipB,QAAA+5C,YAEAhjE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,mBAAAkjE,IAAA,WACAhjE,OAAA2P,aAAAS,UAAApQ,OAAAipB,QAAA+5C,WAGAp1C,GAAA,4CACA5tB,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA,gBAAA1D,OAAA2P,aAAAG,UACA,gBAAA9P,OAAA2P,aAAAM,QACA,eAAAjQ,OAAAgE,aAAAM,aAAAi+D,aAAA/3C,KACA,kBAAAxqB,OAAAgE,aAAAM,aAAAi+D,aAAAC,QACA,eAAAxiE,OAAAgE,aAAAM,aAAAi+D,aAAAE,QAEA/0C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,Q,WAIA,0BAAA,CAAA,SAAA,mBAAA,eAAA,UAAA,YAAA,eAAA,SAAA5tB,OAAA+wD,iBAAAzwD,aAAAK,QAAAyS,UAAAvV,2BAGAmC,OAAA+W,MAAA,GACA/W,OAAA+W,MAAA0sD,aAAA,GACAzjE,OAAA+W,MAAA2sD,oBAAA,CACAtsD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,wBACAxG,MAAAtT,aAAAiC,mBAAA,UACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,eACAC,YAAA,EACAI,SAAA,sNAEA,CACAP,MAAA,2BACAxG,MAAAtT,aAAAiC,mBAAA,WACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAE,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAEA3Y,OAAA+W,MAAA4sD,UAAA,GACA3jE,OAAA+W,MAAA6sD,iBAAA,CACAxsD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,mBACAxG,MAAAtT,aAAAiC,mBAAA,mBACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,gBACAxG,MAAAtT,aAAAiC,mBAAA,WACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,QACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACAxG,MAAAtT,aAAAiC,mBAAA,SACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,gEACAN,MAAA,KAGAO,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAEA3Y,OAAA+W,MAAA8sD,eAAA,GACA7jE,OAAA+W,MAAA+sD,sBAAA,CACA1sD,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,wBACAxG,MAAAtT,aAAAiC,mBAAA,UACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,eACAC,YAAA,EACAI,SAAA,6GAEA,CACAP,MAAA,mBACAxG,MAAAtT,aAAAiC,mBAAA,eACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,gBACAxG,MAAAtT,aAAAiC,mBAAA,WACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,QACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,aACAxG,MAAAtT,aAAAiC,mBAAA,SACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,OACA8X,MAAA,GACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,MAKAE,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,EACAnJ,OAAA,KAGAxP,OAAA+W,MAAAgtD,mBAAA,SAAAnrD,IAEA5Y,OAAA+W,MAAAitD,iBAAA,IAAAjtD,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,KAGA5Y,OAAA+W,MAAAitD,iBAAAlrD,OACA9Y,OAAA+W,MAAA8sD,eAAA1rD,WAAA1Y,KAAAO,OAAA+W,MAAAitD,iBAAAvkE,SAGAO,OAAA+W,MAAAktD,cAAA,SAAArrD,IAEA5Y,OAAA+W,MAAAmtD,YAAA,IAAAntD,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,GACAya,OAAA,CACAhB,MAAA,CACAkB,OAAA,CACAqvC,iBAAA,CACAvqD,UAAA,GAEA8rD,cAAA,CACA9rD,UAAA,GAEA+rD,UAAA,CACA/rD,UAAA,GAEAgsD,WAAA,CACAhsD,UAAA,GAEAisD,SAAA,CACAjsD,UAAA,GAEAgrD,cAAA,CACAhrD,UAAA,MAQAqT,OAAA,IAGA1rB,OAAA+W,MAAAmtD,YAAAprD,OACA9Y,OAAA+W,MAAA4sD,UAAAxrD,WAAA1Y,KAAAO,OAAA+W,MAAAmtD,YAAAzkE,SAGAO,OAAA+W,MAAAwtD,iBAAA,SAAA3rD,IAEA5Y,OAAA+W,MAAAytD,eAAA,IAAAztD,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,GACAya,OAAA,CACAhB,MAAA,CACAkB,OAAA,CACAgwC,sBAAA,CACAlrD,UAAA,GAEA0qD,yBAAA,CACA1qD,UAAA,MAKAqT,OAAA,IAGA1rB,OAAA+W,MAAAytD,eAAA1rD,OACA9Y,OAAA+W,MAAA0sD,aAAAtrD,WAAA1Y,KAAAO,OAAA+W,MAAAytD,eAAA/kE,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAgiE,iBAEAtiE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,2BACAsC,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAwK,qBAAA,GACAxK,OAAAykE,2BACAzkE,OAAA0kE,yBAGA1kE,OAAAykE,yBAAA,WAEAzkE,OAAAwB,QAAAI,UAAA+iE,qBAAA,GACA3kE,OAAAwB,QAAAI,UAAA+iE,qBAAAC,QAAA,GACA5kE,OAAAwB,QAAAI,UAAA+iE,qBAAAE,YAAA,CACAC,oBAAA,EACAC,4BAAA,KACAjC,kBAAA,EACAkC,gBAAA,MACAjC,yBAAAllE,aAAAiC,mBAAA,eACAyjE,sBAAA,IACA0B,GAAA,MAEAjlE,OAAAklE,+BAGAllE,OAAAklE,4BAAA,WAGAnU,iBAAAkS,wBACAjjE,OAAAwB,QAAAE,QAAAoF,qBAAApD,a,KAGA,SAAAjE,MAGA,EAAAA,KAAA6jE,2BAAAjkE,SACAW,OAAAwB,QAAAI,UAAA+iE,qBAAAE,YAAAplE,KAAA6jE,2BAAAvG,OAAA,EAAA,GAAA,IAAA,IAEA/8D,OAAA+W,MAAAktD,cAAAxkE,KAAA0jE,0BAAApH,OAAA,qBACA/7D,OAAA+W,MAAAwtD,iBAAA9kE,KAAA6jE,2BAAAvH,OAAA,6BACA/7D,OAAAwB,QAAAI,UAAA+iE,qBAAAC,QAAAnlE,KAAA0lE,4BAEAnlE,OAAA+W,MAAA4sD,UAAApjB,YAAAzzC,QAAA,SAAAE,MAEA,MAAAA,KAAAq2D,eAEAp1D,EAAA,gBAAAjB,KAAAyqB,IAAA,MAAAjmB,WAMAxR,OAAAwB,QAAAI,UAAAiyD,SAEA9C,iBAAAkC,gBACAjzD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAwB,QAAAE,QAAAoF,qBAAAs+D,S,KAEA,SAAA3lE,MAEAO,OAAAwB,QAAAI,UAAA4xD,OAAA/zD,KAAAg0D,OACAzzD,OAAAwB,QAAAI,UAAAiyD,QAAAp0D,KAAAq0D,WAMA9zD,OAAA0kE,sBAAA,WAEA1kE,OAAAwB,QAAAI,UAAAyjE,kBAAA,GACArlE,OAAAwB,QAAAI,UAAAyjE,kBAAA3oD,OAAA,EACA1c,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAA,GACAtlE,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAAC,KAAA,KACAvlE,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAAhR,MAAA,GACAt0D,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAAE,OAAA,KACAxlE,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAAG,OAAA,EACAzlE,OAAAwB,QAAAI,UAAAyjE,kBAAAK,eAAA,EACA1lE,OAAAwB,QAAAI,UAAAyjE,kBAAAM,WAAA,KAGA3lE,OAAA4lE,sBAAA,WAEA5lE,OAAA0kE,wBACA1kE,OAAAwB,QAAAI,UAAAyjE,kBAAA3oD,OAAA,GAGA1c,OAAA6lE,cAAA,WAEA9U,iBAAA+U,eACA9lE,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAAC,KACAvlE,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAAhR,MACAt0D,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAAE,OACAxlE,OAAAwB,QAAAI,UAAAyjE,kBAAAC,WAAAG,O,KAGA,SAAAhmE,MAEAO,OAAA+W,MAAAgtD,mBAAAtkE,KAAAsmE,YAAAhK,OAAA,qBAEA,IAAAt8D,KAAAsmE,YAAA1mE,OAOAW,OAAA+W,MAAAitD,iBAAAvkE,OAAAJ,OAAAW,OAAAwB,QAAAI,UAAAyjE,kBAAAM,WACA3lE,OAAAwB,QAAAI,UAAAyjE,kBAAAK,eAAA,EAEA1lE,OAAAwB,QAAAI,UAAAyjE,kBAAAK,eAAA,EARA1lE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,aAAA,cAaAE,OAAAgmE,iBAAA,WAEA9oE,QAAA4P,QAAA9M,OAAA+W,MAAAytD,eAAA/kE,OAAA,SAAAuN,MAEAA,KAAAu2D,sBAAAvjE,OAAAwB,QAAAI,UAAA+iE,qBAAAE,YAAAtB,uBAAA,OAIAvjE,OAAAimE,eAAA,WAEA/oE,QAAA4P,QAAA9M,OAAAwB,QAAAI,UAAA+iE,qBAAAC,QAAA,SAAA53D,MAEAA,KAAAk5D,cAAA,IACAl5D,KAAAm5D,iBAAA,IACAn5D,KAAAo5D,kBAAA,OAIApmE,OAAAqmE,SAAA,WAEAnpE,QAAA4P,QAAA9M,OAAA+W,MAAAitD,iBAAAvkE,OAAA,SAAA+qB,MAEA,IAAAA,KAAA87C,oBAAA,OAAA97C,KAAA64C,eAEArjE,OAAA+W,MAAAmtD,YAAAjnC,IAAAzS,QAGAxqB,OAAA0kE,yBAGA1kE,OAAAumE,WAAA,SAAA7wC,KAEAA,IAAA2tC,cAAA,IACAp1D,EAAA,gBAAAynB,IAAA+B,IAAA,MAAAjmB,QAGAxR,OAAAwmE,wBAAA,WAEA,IAAA3D,SAAA7iE,OAAA+W,MAAAytD,eAAA/kE,OAAAw7B,SACAynC,MAAA1iE,OAAA+W,MAAAmtD,YAAAzkE,OAAAw7B,SACAwrC,YAAA5D,SAAAhmB,IAAA,CAAA0mB,sBAAA,OACAmD,SAAAhE,MAAA7lB,IAAA,CAAAwmB,cAAA,OACAoD,aAAAC,UAOA7D,SAAA9E,QAAA/9D,OAAAwB,QAAAI,UAAA+iE,qBAAAE,aAEA9T,iBAAAyV,wBACAxmE,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACAg/D,MACAG,SACA7iE,OAAAwB,QAAAI,UAAA+iE,qBAAAC,S,KAGA,SAAAnlE,MAEAO,OAAAuB,gBAhBAvB,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,uBAAAjC,aAAAiC,mBAAA,0BCxmBA5C,QAAAC,OAAA,0BAAA,CAAA,iB,4CACA,SAAAC,eAAAG,kBAEAH,e,KACA,6CACA,CACAK,YAAAF,iBAAAG,YAAA,sBACAC,WAAA,2B,KAEA,6CACA,CACAF,YAAAF,iBAAAG,YAAA,sBACAC,WAAA,2B,KAEA,+CACA,CACAF,YAAAF,iBAAAG,YAAA,wBACAC,WAAA,6B,KAEA,8CACA,CACAF,YAAAF,iBAAAG,YAAA,uBACAC,WAAA,4B,KAEA,qCACA,CACAF,YAAAF,iBAAAG,YAAA,cACAC,WAAA,mB,KAEA,qCACA,CACAF,YAAAF,iBAAAG,YAAA,cACAC,WAAA,mB,KAEA,4CACA,CACAF,YAAAF,iBAAAG,YAAA,qBACAC,WAAA,8B,WAIA,oCAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,eACAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAwB,QAAAI,YACA5B,OAAAwB,QAAAI,UAAA,IACA5B,OAAAwB,QAAAI,YACA5B,OAAAwB,QAAAI,UAAA+kE,kBAAA,Q,WAIA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAA3mE,OAAAM,aAAA8S,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsmE,mBAEA5mE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iCACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAIA,iCAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAtH,OAAAsgB,aAAAkM,iBAAAlsB,2BAGAN,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAysB,MAAAC,eAAAC,UAAA,GACA3sB,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACAu/D,mBAAA,CACAC,WAAA,GACAC,cAAA,EACAC,YAAA,EACAvE,QAAA,IACAwE,oBAAA,EACAC,gBAAAlnE,OAAAoI,2BAAA9H,aAAA41D,mBAAA,KAKAl2D,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAuiE,mBAAA7mE,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,MAGAvM,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAuiE,mBACA7mE,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,cAGA3P,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAEAy5C,yBAGAv5C,GALAtN,aAAAY,uBACAkmD,GAAA,yBACAD,yBAAAnnE,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA8+D,6BAAA,uCAAA,4BAGAz5C,GAAA,eAFAw5C,GAAApnE,OAAAgE,aAAAM,aAAAuiE,mBAAAI,mBAAAE,yBAAAC,IAGA,eAAApnE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,kBAAA5D,OAAAgE,aAAAM,aAAAuiE,mBAAAC,WACA,eAAA9mE,OAAAgL,cAAAhL,OAAA2P,aAAAG,WACA,eAAA9P,OAAAgL,cAAAhL,OAAA2P,aAAAM,SACA,kBAAAjQ,OAAAgE,aAAAM,aAAAuiE,mBAAAG,WACA,oBAAAhnE,OAAAgE,aAAAM,aAAAuiE,mBAAAE,aACA,eAAA/mE,OAAAgE,aAAAM,aAAAuiE,mBAAApE,QACA,uBAAAziE,OAAAgE,aAAAM,aAAAuiE,mBAAAK,gBAEAx5C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA5tB,OAAAsnE,cAAA,YAEA,IAAAtnE,OAAAgE,aAAAM,aAAAuiE,mBAAAE,eAAA,IAAA/mE,OAAAgE,aAAAM,aAAAuiE,mBAAAG,aAEAhnE,OAAAgE,aAAAM,aAAAuiE,mBAAAE,cAAA,O,WAKA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAA/mE,OAAAM,aAAA8S,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsmE,mBAEA5mE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iCACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAIA,iCAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAtH,OAAAsgB,aAAAkM,iBAAAlsB,2BAGAN,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAysB,MAAAC,eAAAC,UAAA,GACA3sB,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACAigE,mBAAA,CACAT,WAAA,GACAU,UAAA,GACAT,cAAA,EACAU,gBAAA,EACAT,YAAA,EACAU,cAAA,EACAC,OAAA,EACAC,OAAA,KAKA5nE,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAijE,mBAAAvnE,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,KACAvM,OAAAsnE,iBAGAtnE,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAijE,mBACAvnE,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,cAGA3P,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IACAE,GADAtN,aAAAY,uBACA0M,GAAA,gDACA5tB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,kBAAA5D,OAAAgE,aAAAM,aAAAijE,mBAAAT,WACA,iBAAA9mE,OAAAgE,aAAAM,aAAAijE,mBAAAC,UACA,eAAAxnE,OAAAgL,cAAAhL,OAAA2P,aAAAG,WACA,eAAA9P,OAAAgL,cAAAhL,OAAA2P,aAAAM,SACA,kBAAAjQ,OAAAgE,aAAAM,aAAAijE,mBAAAP,WACA,oBAAAhnE,OAAAgE,aAAAM,aAAAijE,mBAAAR,aACA,cAAA/mE,OAAAgE,aAAAM,aAAAijE,mBAAAI,OACA,cAAA3nE,OAAAgE,aAAAM,aAAAijE,mBAAAK,OACA,uBAAA5nE,OAAAoI,2BAAA9H,aAAA41D,mBAAA,EAEAxoC,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA5tB,OAAAsnE,cAAA,WAEA,KAAAtnE,OAAAgE,aAAAM,aAAAijE,mBAAAC,WAEAxnE,OAAAgE,aAAAM,aAAAijE,mBAAAE,gBAAA,EACAznE,OAAAgE,aAAAM,aAAAijE,mBAAAG,cAAA,IAIA1nE,OAAAgE,aAAAM,aAAAijE,mBAAAR,cAAA,EACA/mE,OAAAgE,aAAAM,aAAAijE,mBAAAP,YAAA,EACAhnE,OAAAgE,aAAAM,aAAAijE,mBAAAE,gBAAA,EACAznE,OAAAgE,aAAAM,aAAAijE,mBAAAG,cAAA,IAGA,IAAA1nE,OAAAgE,aAAAM,aAAAijE,mBAAAR,eAAA,IAAA/mE,OAAAgE,aAAAM,aAAAijE,mBAAAP,aAEAhnE,OAAAgE,aAAAM,aAAAijE,mBAAAR,cAAA,O,WAKA,2BAAA,CAAA,SAAA,eAAA,eAAA,YAAA,SAAA/mE,OAAAsgB,aAAAhgB,aAAA8S,wBAGAkN,aAAAO,wBACA7gB,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsmE,mBAEA5mE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iCACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAIA,mCAAA,CAAA,SAAA,mBAAA,eAAA,eAAA,SAAAtH,OAAAwsB,iBAAAlsB,aAAAggB,2BAGAtgB,OAAAuB,WAAA,WAEAvB,OAAAysB,MAAAC,eAAAC,UAAA,GACA3sB,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACAugE,qBAAA,CACAL,UAAA,GACA/E,QAAA,EACAwE,oBAAA,KAKAjnE,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAujE,qBAAA7nE,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,MAGAvM,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAujE,qBACA7nE,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,cAGA3P,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAEAy5C,yBAGAv5C,GALAtN,aAAAY,uBACAkmD,GAAA,4BACAD,yBAAAnnE,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA8+D,6BAAA,4CAAA,+BAGAz5C,GAAA,eAFAw5C,GAAApnE,OAAAgE,aAAAM,aAAAujE,qBAAAZ,mBAAAE,yBAAAC,IAGA,eAAApnE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAAgE,aAAAM,aAAAujE,qBAAAL,UACA,eAAAxnE,OAAAgL,cAAAhL,OAAA2P,aAAAG,WACA,eAAA9P,OAAAgL,cAAAhL,OAAA2P,aAAAM,SACA,eAAAjQ,OAAAgE,aAAAM,aAAAujE,qBAAApF,QACA,uBAAAziE,OAAAoI,2BAAA9H,aAAA41D,mBAAA,EAEAxoC,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,S,WAIA,iBAAA,CAAA,SAAA,eAAA,YAAA,SAAA5tB,OAAAM,aAAA8S,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsmE,mBAEA5mE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iCACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAIA,yBAAA,CAAA,SAAA,eAAA,mBAAA,mBAAA,eAAA,kBAAA,SAAAtH,OAAAsgB,aAAAkM,iBAAAukC,iBAAAzwD,aAAAxC,8BAGA,IAAAD,aAAAC,gBAAAC,gCAAA,qCACAiC,OAAAuB,WAAA,WAGA+e,aAAAO,wBACAkwC,iBAAA+W,kBACA9nE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,S,KAEA,SAAAnE,MAEAO,OAAAwB,QAAAI,UAAAmmE,eAAAtoE,KAAAuoE,eACAhoE,OAAAwB,QAAAI,UAAAmmE,eAAAhK,QAAA,CAAAt3D,IAAA,EAAAggC,YAAA5oC,aAAAiC,mBAAA,UAEAE,OAAAysB,MAAAC,eAAAC,UAAA,GACA3sB,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACA2gE,WAAA,CACAT,UAAA,GACAU,WAAA,IACAC,SAAA,EACAC,oBAAA,EACAC,SAAA,EACAC,gBAAA,EACAC,SAAA,EACAC,gBAAA,EACAC,iBAAA,EACAxB,oBAAA,EACAyB,0BAAA,OAQA1oE,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAA2jE,WAAAjoE,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,KACAvM,OAAAsnE,iBAGAtnE,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAA2jE,WACAjoE,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,cAGA3P,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAGA05C,QAIAx5C,GAPAtN,aAAAY,uBACAkmD,QAAA,iBACAA,SAAApnE,OAAAgE,aAAAM,aAAA2jE,WAAAQ,gBAAA,KAAA,KACArB,QAAApnE,OAAAgE,aAAAM,aAAA2jE,WAAAhB,mBAAA,oBAAAG,QAEAc,GAAAloE,OAAAgE,aAAAM,aAAA2jE,WAAAC,YAAA,IAEAt6C,GAAA,cAAAw5C,QACA,eAAApnE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAAgE,aAAAM,aAAA2jE,WAAAT,UACA,eAAAxnE,OAAAgL,cAAAhL,OAAA2P,aAAAG,WACA,eAAA9P,OAAAgL,cAAAhL,OAAA2P,aAAAM,SACA,kBAAAi4D,GACA,gBAAAloE,OAAAgE,aAAAM,aAAA2jE,WAAAE,SACA,gBAAAnoE,OAAAgE,aAAAM,aAAA2jE,WAAAI,SACA,gBAAAroE,OAAAgE,aAAAM,aAAA2jE,WAAAM,SAEA76C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA5tB,OAAAsnE,cAAA,YAEA,IAAAtnE,OAAAgE,aAAAM,aAAA2jE,WAAAQ,iBAEAzoE,OAAAgE,aAAAM,aAAA2jE,WAAAS,0BAAA,EACA1oE,OAAAgE,aAAAM,aAAA2jE,WAAAG,oBAAA,IAIApoE,OAAAgE,aAAAM,aAAA2jE,WAAAS,0BAAA,EACA1oE,OAAAgE,aAAAM,aAAA2jE,WAAAhB,oBAAA,EACA,MAAAjnE,OAAAgE,aAAAM,aAAA2jE,WAAAE,WAEAnoE,OAAAgE,aAAAM,aAAA2jE,WAAAE,SAAA,IACAnoE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,oCAAA,YAEAE,OAAAgE,aAAAM,aAAA2jE,WAAAG,oBAAA,GAGA,MAAApoE,OAAAgE,aAAAM,aAAA2jE,WAAAE,UAEAnoE,OAAAgE,aAAAM,aAAA2jE,WAAAI,SAAA,IACAroE,OAAAgE,aAAAM,aAAA2jE,WAAAK,gBAAA,GAIAtoE,OAAAgE,aAAAM,aAAA2jE,WAAAK,gBAAA,EAGA,MAAAtoE,OAAAgE,aAAAM,aAAA2jE,WAAAI,UAEAroE,OAAAgE,aAAAM,aAAA2jE,WAAAM,SAAA,IACAvoE,OAAAgE,aAAAM,aAAA2jE,WAAAO,gBAAA,GAIAxoE,OAAAgE,aAAAM,aAAA2jE,WAAAO,gBAAA,M,WAKA,iBAAA,CAAA,SAAA,eAAA,YAAA,SAAAxoE,OAAAM,aAAA8S,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsmE,mBAEA5mE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iCACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAIA,yBAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAtH,OAAAsgB,aAAAkM,iBAAAlsB,2BAGAN,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAysB,MAAAC,eAAAC,UAAA,GACA3sB,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACAqhE,WAAA,CACAnB,UAAA,GACAW,SAAA,IACAE,SAAA,IACAE,SAAA,IACAD,gBAAA,EACAE,gBAAA,KAKAxoE,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAqkE,WAAA3oE,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,KACAvM,OAAAsnE,iBAGAtnE,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAqkE,WACA3oE,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,cAGA3P,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAIAE,GAJAtN,aAAAY,uBACAkmD,GAAA,iBAGAx5C,GAAA,eAFAw5C,GAAApnE,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA8+D,6BAAA,+BAAAD,IAGA,eAAApnE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,iBAAA5D,OAAAgE,aAAAM,aAAAqkE,WAAAnB,UACA,eAAAxnE,OAAAgL,cAAAhL,OAAA2P,aAAAG,WACA,eAAA9P,OAAAgL,cAAAhL,OAAA2P,aAAAM,SACA,gBAAAjQ,OAAAgE,aAAAM,aAAAqkE,WAAAR,SACA,gBAAAnoE,OAAAgE,aAAAM,aAAAqkE,WAAAN,SACA,gBAAAroE,OAAAgE,aAAAM,aAAAqkE,WAAAJ,SAEA76C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA5tB,OAAAsnE,cAAA,WAEA,MAAAtnE,OAAAgE,aAAAM,aAAAqkE,WAAAR,UAEAnoE,OAAAgE,aAAAM,aAAAqkE,WAAAN,SAAA,IACAroE,OAAAgE,aAAAM,aAAAqkE,WAAAL,gBAAA,GAIAtoE,OAAAgE,aAAAM,aAAAqkE,WAAAL,gBAAA,EAGA,MAAAtoE,OAAAgE,aAAAM,aAAAqkE,WAAAN,UAEAroE,OAAAgE,aAAAM,aAAAqkE,WAAAJ,SAAA,IACAvoE,OAAAgE,aAAAM,aAAAqkE,WAAAH,gBAAA,GAIAxoE,OAAAgE,aAAAM,aAAAqkE,WAAAH,gBAAA,M,WAKA,yBAAA,CAAA,SAAA,eAAA,YAAA,SAAAxoE,OAAAM,aAAA8S,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsmE,mBAEA5mE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iCACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAIA,iCAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAtH,OAAAsgB,aAAAkM,iBAAAlsB,2BAGAN,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,IACAtE,OAAAgE,aAAAM,aAAAskE,qBAAA5oE,OAAAgE,aAAAM,aAAAskE,mBAAA,IACA5oE,OAAAgE,aAAAM,aAAAskE,mBAAA/7C,WAAA,8BACA7sB,OAAAgE,aAAAM,aAAAskE,mBAAAC,YAAA,KACA7oE,OAAAysB,MAAAC,eAAAC,UAAA,IAGA3sB,OAAA8oE,yBAAA,WAEA9oE,OAAAwB,QAAAI,UAAA+kE,kBAAA,IAGA3mE,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAskE,mBAAA5oE,OAAA0sB,eAAAO,YAAAzJ,UAGAxjB,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAskE,oBAGA5oE,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IACAE,GADAtN,aAAAY,uBACA0M,GAAA,+CACA5tB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,sBAAA5D,OAAAgE,aAAAM,aAAAskE,mBAAAC,YAEAn7C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,S,WAIA,0BAAA,CAAA,SAAA,eAAA,YAAA,SAAA5tB,OAAAM,aAAA8S,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAsmE,mBAEA5mE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,iCACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAIA,kCAAA,CAAA,SAAA,eAAA,mBAAA,eAAA,SAAAtH,OAAAsgB,aAAAkM,iBAAAlsB,2BAGAN,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAA+W,MAAA,GACA/W,OAAAysB,MAAAC,eAAAC,UAAA,GACA3sB,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACAyhE,oBAAA,CACAjC,WAAA,GACAC,cAAA,EACAU,gBAAA,EACAT,YAAA,EACAU,cAAA,EACAjF,QAAA,EACAkF,OAAA,EACAC,OAAA,EACAoB,cAAA,KAKAhpE,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAykE,oBAAA/oE,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,KACAvM,OAAAsnE,iBAGAtnE,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAykE,oBACA/oE,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,cAGA3P,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAGAE,GAHAtN,aAAAY,uBAGA0M,GAAA,eADA5tB,OAAAwB,QAAAE,QAAAoF,qBAAAyB,SAAA8+D,6BAAA,kDAAA,gCAEA,eAAArnE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,kBAAA5D,OAAAgE,aAAAM,aAAAykE,oBAAAjC,WACA,eAAA9mE,OAAAgL,cAAAhL,OAAA2P,aAAAG,WACA,eAAA9P,OAAAgL,cAAAhL,OAAA2P,aAAAM,SACA,kBAAAjQ,OAAAgE,aAAAM,aAAAykE,oBAAA/B,WACA,oBAAAhnE,OAAAgE,aAAAM,aAAAykE,oBAAAhC,aACA,eAAA/mE,OAAAgE,aAAAM,aAAAykE,oBAAAtG,QACA,gBAAAziE,OAAAgE,aAAAM,aAAAykE,oBAAApB,OACA,gBAAA3nE,OAAAgE,aAAAM,aAAAykE,oBAAAnB,OACA,6BAAA5nE,OAAAgE,aAAAM,aAAAykE,oBAAAC,aAEAt7C,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,MAGA5tB,OAAAsnE,cAAA,YAEA,IAAAtnE,OAAAgE,aAAAM,aAAAykE,oBAAAhC,eAAA,IAAA/mE,OAAAgE,aAAAM,aAAAykE,oBAAA/B,aAEAhnE,OAAAgE,aAAAM,aAAAykE,oBAAAhC,cAAA,OC/rBA7pE,QAAAC,OAAA,eAAA,CAAA,aAAA,eAAA,oB,4CACA,SAAAC,eAAAG,kBAEAH,eAAA6B,KAAA,gCACA,CACAxB,YAAAF,iBAAAG,YAAA,cACAC,WAAA,iBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAKA,mCACA,CACAN,YAAAF,iBAAAG,YAAA,iBACAC,WAAA,oBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,KAKA,4BACA,CACAN,YAAAF,iBAAAG,YAAA,UACAC,WAAA,aACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,iC,WAOA,yBAAA,CAAA,SAAA,SAAAiC,qBAIAA,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,O,WAGA,yBAAA,CAAA,SAAA,kBAAA,SAAApE,OAAAlC,8BAGA,IAAAD,aAAAC,gBAAAC,gCAAA,4BACAiC,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GAEApE,OAAA2P,aAAAc,kBAAA,EACAzQ,OAAA2P,aAAAU,aAAA,GACArQ,OAAA2P,aAAAW,QAAA,CACA,CAAAC,KAAA1S,aAAAiC,mBAAA,WAAAqH,MAAA,IACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,SAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,YAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,cAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,aAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,iBAAAqH,MAAA,GACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,kBAAAqH,MAAA,IACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,eAAAqH,MAAA,IACA,CAAAoJ,KAAA1S,aAAAiC,mBAAA,cAAAqH,MAAA,S,WAGA,iBAAA,CAAA,SAAA,eAAA,eAAA,kBAAA,YAAA,eAAA,SAAAnH,OAAAsgB,aAAAhgB,aAAA8V,gBAAAhD,UAAAvV,2BAIAyiB,aAAAO,wBACA7gB,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAkyD,eAAA,GACAjpE,OAAA+W,MAAAmyD,sBAAA,CACA9xD,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAArD,KAAAqD,SAAArD,KAAAsD,SAAA,IACAD,SAAA4xD,aAMAnpE,OAAA+J,SAAAwN,SAAA4xD,aAEAnpE,OAAAgO,UANAhO,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,aAAAjC,aAAAiC,mBAAA,8BAQA4X,QAAA,CACA,CACAC,MAAA,eACAxG,MAAAtT,aAAAiC,mBAAA,iBACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAqyD,mBAAA,SAAAxwD,IAEA5Y,OAAA+W,MAAAsyD,iBAAA,IAAAtyD,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,KAGA5Y,OAAA+W,MAAAsyD,iBAAAvwD,OACA9Y,OAAA+W,MAAAkyD,eAAA9wD,WAAA1Y,KAAAO,OAAA+W,MAAAsyD,iBAAA5pE,SA8BAO,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,oCAIAhD,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,KAGAtH,OAAA4U,QAAArQ,YAAA,WAEA+b,aAAAY,sBA3CA9K,gBAAAkzD,cACAtpE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAA2P,aAAAG,UACA9P,OAAA2P,aAAAM,SAAAzL,KAAA,SAAA/E,MAEAA,KAAAmjB,QAEA,IAAAnjB,KAAAu5C,KAAA35C,QAMAI,KAAAu5C,KAAArpB,KAAA,SAAA45C,MAEAA,KAAAC,aAAAl+D,KAAAivC,OAAAgvB,KAAAC,cAAA97C,OAAA,sBAGA1tB,OAAA+W,MAAAqyD,mBAAA3pE,KAAAu5C,OATAh5C,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,eAYAE,OAAAiR,WAAAQ,uB,WA0BA,4BAAA,CAAA,SAAA,qBAAA,kBAAA,SAAAzR,OAAAulB,mBAAAznB,8BAGA,IAAAD,aAAAC,gBAAAC,gCAAA,yBACAiC,OAAA+W,MAAA,GAoBA/W,OAAAuB,WAAA,WAGAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAAmlE,cAAA,CACA9hE,QAAA,KACAkmD,SAAA,GACAzkD,KAAA,KACAsgE,MAAA,CAAA,CAAArgE,IAAA,KAAAlC,MAAAtJ,aAAAiC,mBAAA,QACA,CAAAuJ,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,gBACA,CAAAuJ,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,mBACA,CAAAuJ,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,mBACA,CAAAuJ,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,8BACA,CAAAuJ,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,qBACA,CAAAuJ,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,oCA/BAylB,mBAAAsjC,aAAA7oD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MACAA,KAAAkmB,aAAAzoB,QAAAgF,yBAAAzC,KAAAipD,mBAKAxrD,QAAA4P,QAAArN,KAAAipD,iBAAA,SAAA17C,MACAA,KAAA28D,SAAA38D,KAAA87C,UAAA,IAAA97C,KAAA+7C,WAGA/oD,OAAAgE,aAAAM,aAAAmlE,cAAA5b,SAAApuD,KAAAipD,iBAAArZ,QAAA,CAAAu6B,QAAA,IAAA7N,OAAA,YACA/7D,OAAAgE,aAAAM,aAAAmlE,cAAA5b,SAAA5wB,IAAA,CAAAx2B,IAAA,KAAAkjE,SAAA9rE,aAAAiC,mBAAA,QAAA,IATAE,OAAAiR,WAAAQ,uB,WAiCA,oBAAA,CAAA,SAAA,eAAA,OAAA,kBAAA,YAAA,eAAA,SAAAzR,OAAAsgB,aAAAoG,KAAAtQ,gBAAAhD,UAAAvV,2BAGAyiB,aAAAO,wBACA7gB,OAAA+W,MAAA,GACA/W,OAAA+W,MAAA8yD,kBAAA,GACA7pE,OAAA+W,MAAA+yD,yBAAA,CACA1yD,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAArD,KAAAqD,SAAArD,KAAAsD,SAAA,IACAD,UAMAvX,OAAA+pE,eAAAxyD,UACAvX,OAAAgO,UALAhO,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,iBAAAjC,aAAAiC,mBAAA,8BAOA4X,QAAA,CACA,CACAC,MAAA,kBACAxG,MAAAtT,aAAAiC,mBAAA,gBACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,QACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,aACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,QACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+HACAN,MAAA,KAGAO,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAizD,sBAAA,SAAApxD,IAEA5Y,OAAA+W,MAAAkzD,oBAAA,IAAAlzD,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,KAKA5Y,OAAA+W,MAAAkzD,oBAAAnxD,OACA9Y,OAAA+W,MAAA8yD,kBAAA1xD,WAAA1Y,KAAAO,OAAA+W,MAAAkzD,oBAAAxqE,SAyCAO,OAAA4U,QAAArQ,YAAA,WACA+b,aAAAY,sBArCA9K,gBAAA8zD,iBACAlqE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAgE,aAAAM,aAAAmlE,cAAA9hE,QACA3H,OAAAgE,aAAAM,aAAAmlE,cAAArgE,KACApJ,OAAA2P,aAAAG,UACA9P,OAAA2P,aAAAM,S,KACA,SAAAxQ,MAEAA,KAAAmjB,QAEA,IAAAnjB,KAAAu5C,KAAA35C,QAMAI,KAAAu5C,KAAArpB,KAAA,SAAAw6C,MAEAA,KAAAC,SAAA9+D,KAAAivC,OAAA4vB,KAAAC,UAAA18C,OAAA,oBACAy8C,KAAAE,UAAA3jD,KAAA4jD,YAAAH,KAAAE,WACA,IAAAF,KAAAjtD,UAAA,IAAAitD,KAAAjtD,WAGAitD,KAAAI,SAAA,gBAMAvqE,OAAA+W,MAAAizD,sBAAAvqE,KAAAu5C,OAjBAh5C,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,kBAoBAE,OAAAiR,WAAAQ,oBASAzR,OAAA+pE,eAAA,SAAA/8D,MAEA,OAAAA,KAAAkQ,U,KAEA,EACAld,OAAAqd,WAAArQ,KACAhN,OAAAqd,WAAAxd,MAAA,EACA,M,KAEA,E,KACA,EACA,EAAAmN,KAAAsQ,WAAAtd,OAAA+J,SAAAiD,KAAAsQ,YAEAhL,MAAA1S,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,SACA,M,KAEA,EACA,OAAAkN,KAAAuQ,WAAAvd,OAAAsK,eAAA0C,KAAAuQ,YAEAjL,MAAA1S,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,WAKAE,OAAAuB,WAAA,WAGAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IACAtH,OAAAqd,WAAA,CAAAxd,MAAA,O,WAGA,qBAAA,CAAA,SAAA,UAAA,eAAA,eAAA,kBAAA,YAAA,kBAAA,SAAAG,OAAAW,QAAAL,aAAAggB,aAAAlK,gBAAAhD,UAAAtV,8BAGAA,gBAAAC,gCAAA,yBACAiC,OAAAuB,WAAA,WAEAvB,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAGAsd,aAAAO,wBAEA7gB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBAEAsC,OAAAgE,aAAAM,aAAAkmE,oBAAA,CACAC,UAAA,GAEAzqE,OAAA6tB,cAAA,M,WAGA,aAAA,CAAA,SAAA,UAAA,eAAA,YAAA,eAAA,eAAA,kBAAA,SAAA7tB,OAAAW,QAAAL,aAAA8S,UAAAvV,aAAAyiB,aAAAlK,8BAIApW,OAAA+W,MAAA,GACA/W,OAAA+W,MAAA2zD,WAAA,GACA1qE,OAAA+W,MAAA4zD,kBAAA,CACAvzD,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAC,SAAArD,KAAAqD,SAAArD,KAAAsD,SAAA,IACAD,SAAA+F,YAMAtd,OAAA+J,SAAAwN,SAAA+F,YACAtd,OAAAgO,UALAhO,OAAAiR,WAAApR,KAAAhC,aAAAiC,mBAAA,aAAAjC,aAAAiC,mBAAA,8BAOA4X,QAAA,CACA,CACAC,MAAA,UACAxG,MAAAtT,aAAAiC,mBAAA,cACA8X,MAAA,IACAE,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,oBACAxG,MAAAtT,aAAAiC,mBAAA,eACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,OACAxG,MAAAtT,aAAAiC,mBAAA,kBACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,eACA8X,MAAA,IACAE,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,GACAE,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA4U,QAAArQ,YAAA,WAEA+b,aAAAY,uBAGAlhB,OAAAgkD,UAAA,oBACAhkD,OAAAikD,SAAA,EACAjkD,OAAAiR,WAAAO,OAEA4E,gBAAAw0D,kBACA5qE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAgE,aAAAM,aAAAkmE,oBAAAC,WAAAjmE,KACA,SAAA/E,MAEAA,KAAAmjB,QAEA,IAAAnjB,KAAAu5C,KAAA35C,OACAW,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,0BAIAL,KAAAu5C,KAAArpB,KAAA,SAAApd,SAEAA,QAAAs4D,kBAAAlqE,QAAA,OAAAA,CAAA4R,QAAAu4D,SAAA,cACAv4D,QAAAw4D,QAAAx4D,QAAAw4D,QAAAt/D,aAGAzL,OAAA+W,MAAAi0D,eAAAvrE,KAAAu5C,OAIAh5C,OAAAiR,WAAAQ,qBAIAzR,OAAA+W,MAAAi0D,eAAA,SAAApyD,IAEA5Y,OAAA+W,MAAAk0D,aAAA,IAAAl0D,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,KAGA5Y,OAAA+W,MAAAk0D,aAAAnyD,OACA9Y,OAAA+W,MAAA2zD,WAAAvyD,WAAA1Y,KAAAO,OAAA+W,MAAAk0D,aAAAxrE,SAGAO,OAAAoI,2BAAA9H,aAAAyvD,kBAEA/vD,OAAAgD,KAAA,SAGAhD,OAAAuB,WAAA,WAGAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,mBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,QCzjBApK,QAAAC,OAAA,WAAA,CAAA,eAAA,kBAAA,oB,4CACA,SAAAC,eAAAG,kBAEAH,e,KACA,6BACA,CACAK,YAAAF,iBAAAG,YAAA,aACAC,WAAA,gBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,2B,KAKA,gCACA,CACAN,YAAAF,iBAAAG,YAAA,gBACAC,WAAA,mBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,2B,KAKA,qBACA,CACAN,YAAAF,iBAAAG,YAAA,cACAC,WAAA,iBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,2B,KAKA,uBACA,CACAN,YAAAF,iBAAAG,YAAA,gBACAC,WAAA,wB,WAIA,qBAAA,CAAA,SAAA,SAAAqC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAiH,yBACAjH,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAM,aAAA4mE,iBAAAlrE,OAAAwB,QAAAE,QAAAoF,qBAAAqkE,wB,WAGA,mBAAA,CAAA,SAAA,UAAA,SAAA,eAAA,eAAA,oBAAA,kBAAA,qBAAA,gBAAA,YAAA,eAAA,mBAAA,SAAAnrE,OAAAW,QAAAqoD,OAAA9zC,aAAAoL,aAAA7f,kBAAAmtD,gBACAroC,mBAAA6lD,cAAAh4D,UAAAvV,aAAAse,+BAIA,SAAA6a,UAAAxpB,QAEA,IAAA69D,iBAAA,EAOA,OANAnuE,QAAA4P,QAAAU,OAAA,SAAAR,MAEAhN,OAAAJ,SAAAC,KAAAmN,KAAA,SACAq+D,iBAAA,IAGAA,gBAiHA,SAAAC,eACAr9D,EAAA,uBAAAs9D,WAAA,YACAt9D,EAAA,uBAAAs9D,WAAA,YACAt9D,EAAA,uBAAAs9D,WAAA,YACAt9D,EAAA,8BAAAs9D,WAAA,YAGA,SAAAC,qBAGA,OAAAxrE,OAAAyrE,cAAAC,aAAAC,c,KAEA,GACA3rE,OAAAyrE,cAAA5rE,KAAA+rE,WAAA,EACA5rE,OAAAyrE,cAAA5rE,KAAAgsE,WA2BA3uE,QAAAgF,yBAAAlC,OAAAyrE,cAAAxiD,QAAA6iD,eAGA9rE,OAAAyrE,cAAAxiD,QAAA6iD,YAAAC,cAAA,IAAA/rE,OAAAyrE,cAAAxiD,QAAA6iD,YAAAnuD,UA7BA3d,OAAAyrE,cAAA5rE,KAAAmsE,WAAA,EACA,M,KAEA,E,KACA,EACAhsE,OAAAyrE,cAAA5rE,KAAA+rE,WAAA,EACA5rE,OAAAyrE,cAAA5rE,KAAAgsE,WAAA,EACA7rE,OAAAyrE,cAAA5rE,KAAAmsE,WAAA,EACA,M,KAEA,GACAhsE,OAAAyrE,cAAA5rE,KAAA+rE,WAAA,EACA5rE,OAAAyrE,cAAA5rE,KAAAgsE,WAAA,EACA7rE,OAAAyrE,cAAA5rE,KAAAmsE,WAAA,EACA,M,QAGAhsE,OAAAyrE,cAAA5rE,KAAA+rE,WAAA,EACA5rE,OAAAyrE,cAAA5rE,KAAAgsE,WAAA,EACA7rE,OAAAyrE,cAAA5rE,KAAAmsE,WAAA,GAuHA,SAAAC,YAAAC,aACA,GAAAlsE,OAAAyrE,cAAAxiD,SAAAjpB,OAAAyrE,cAAAxiD,QAAAkjD,kBACA,IAAA,IAAAlkE,EAAA,EAAAA,EAAAjI,OAAAyrE,cAAAxiD,QAAAkjD,kBAAA9sE,OAAA4I,IACA,GAAAjI,OAAAyrE,cAAAxiD,QAAAkjD,kBAAAlkE,GAAAikE,aACA,OAAA,EAIA,OAAA,EAlHAlsE,OAAAuB,WAAA,WAGA+e,aAAAO,wBAGA7gB,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAM,aAAA8nE,SAAApsE,OAAAgE,aAAAM,aAAA8nE,UAAA,GACApsE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IAGAtH,OAAAyrE,cAAA,CACA5rE,KAAA,CACA+rE,WAAA,EACAC,WAAA,EACAG,WAAA,EACAK,WAAA,EACAC,oBAAA,GAEArjD,QAAA,GACAyiD,aAAAN,cAAAmB,uBAGAvsE,OAAAmc,iBAAAA,iBAGA1b,kBAAA+J,qBAAAxK,OAAAwB,QAAAM,WAAA,IAAA0C,KAAA,SAAA/E,MAEAO,OAAAyrE,cAAAxiD,QAAAujD,kBAAA/sE,OAzLAO,OAAAwB,QAAAK,WAKAupE,cAAAqB,iBAAAzsE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MAEA,OAAAA,KAAAkmB,YAAAzoB,QAAAgF,yBAAAzC,KAAAqsE,cAEA9rE,OAAAiR,WAAAQ,sBACAzR,OAAAyrE,cAAA5rE,KAAA6sE,WAAA,KAIA1sE,OAAAyrE,cAAAxiD,QAAA6iD,YAAArsE,KAAAqsE,YAAA,IAAA,GACA9rE,OAAAyrE,cAAAxiD,QAAA0jD,SAAAltE,KAAAktE,SACA3sE,OAAAyrE,cAAAxiD,QAAA2jD,WAAAntE,KAAAmtE,gBAEApB,wBAlBAxrE,OAAAgD,KAAA,sBA8LAkS,aAAA23D,QAEAzB,cAAA0B,gBAAA53D,aAAA23D,QAAAroE,KACA,SAAA/E,MAEAO,OAAAyrE,cAAAC,aAAAjsE,KAAAstE,cAAA,GAGA/sE,OAAAgtE,qBAEAxB,wBAMAxrE,OAAAgtE,mBAAA,WAEAhtE,OAAAyrE,cAAAxiD,QAAAkjD,kBAAA,GACAf,cAAA6B,qBAAAjtE,OAAAyrE,cAAAC,aAAAriC,WAAArpC,OAAAyrE,cAAAC,aAAAwB,kBAAA1oE,KACA,SAAA/E,MAEAA,KAAAkmB,aAAAzoB,QAAAgF,yBAAAzC,KAAA0tE,oBAOAntE,OAAAyrE,cAAAxiD,QAAAkjD,kBAAA1sE,KAAA0tE,kBAIAjwE,QAAAgF,yBAAAlC,OAAAyrE,cAAAC,aAAA0B,sBACAptE,OAAAyrE,cAAAC,aAAA0B,mBAAA3tE,KAAA4tE,oBAGArtE,OAAAyrE,cAAA5rE,KAAAwsE,WAAA,EACAnvE,QAAA4P,QAAA9M,OAAAyrE,cAAAxiD,QAAAkjD,kBAAA,SAAAn/D,MAQA,IAMAsgE,UAXAtgE,KAAAwoC,KACAx1C,OAAAyrE,cAAA5rE,KAAAwsE,WAAAr/D,KAAAwoC,GAAAhwC,WAIAtI,QAAAgF,yBAAA8K,KAAAugE,cACAtrC,UAAAthC,QAAA,SAAAA,CAAAX,OAAAyrE,cAAAC,aAAAqB,aAAA,CAAAQ,WAAAvgE,KAAAugE,aAAA,GAAA,GACAvgE,KAAAkyB,SAAAhiC,QAAAgF,yBAAA+/B,WAAA,EAAA9lB,iBAAAm3B,cAAArR,UAAAurC,WAGAtwE,QAAAgF,yBAAA8K,KAAAygE,gBACAH,UAAA3sE,QAAA,SAAAA,CAAAX,OAAAyrE,cAAAC,aAAAqB,aAAA,CAAAU,aAAAzgE,KAAAygE,eAAA,GAAA,GACAzgE,KAAAkyB,SAAAhiC,QAAAgF,yBAAAorE,WAAA,EAAAnxD,iBAAAm3B,cAAAg6B,UAAAE,cA7BAxtE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,qBAAA,YAqCAE,OAAA0tE,YAAA,WACA,OAAAzB,YAAA,eAGAjsE,OAAA2tE,gBAAA,WACA,OAAA1B,YAAA,iBAcAjsE,OAAA4tE,UAAA,SAAA7W,SAKA,OAHA/2D,OAAAyrE,cAAAC,aAAAmC,QAAA9W,QACA/2D,OAAAyrE,cAAAC,aAAAoC,oBAAA9tE,OAAAwB,QAAAE,QAAAoF,qBAAApD,YAEAqzD,S,IAEA,UA3OAqU,cAAA2C,iBAAA/tE,OAAAyrE,cAAAC,cAAAlnE,KACA,SAAA/E,MAGA,OAAAvC,QAAAgF,yBAAAzC,KAAAstE,aAAAiB,SAAA,IAAAvuE,KAAAstE,aAAAiB,QAEAhuE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,mBAAA,cACAwrE,qBAIAt0C,UAAAv3B,KAAAstE,aAAA3/D,QAEAk+D,gBAKAtrE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WACAE,OAAAgD,KAAA,oBAAAvD,KAAAstE,aAAAiB,YA0NA,M,IAEA,SA9LA5C,cAAA2C,iBAAA/tE,OAAAyrE,cAAAC,cAAAlnE,KACA,SAAA/E,MAEAu3B,UAAAv3B,KAAAstE,aAAA3/D,QAEAk+D,gBAKAtrE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,WACAkpD,OAAA6D,YAqLA,M,IAEA,SAvMA7sD,OAAAiR,WAAAY,QAAAhU,aAAAiC,mBAAA,oBAAA,QAAAjC,aAAAiC,mBAAA,eAAA,aAAAjC,aAAAiC,mBAAA,kBAnBA,WAEAsrE,cAAA2C,iBAAA/tE,OAAAyrE,cAAAC,cAAAlnE,KACA,SAAA/E,MAEAu3B,UAAAv3B,KAAAstE,aAAA3/D,QAEAk+D,eAIAtrE,OAAAgD,KAAA,oBAAAvD,KAAAstE,aAAAiB,WAIA,WACA1C,iBA4MA,M,IAEA,SAxQAtrE,OAAAyrE,cAAA5rE,KAAAysE,oBAAA,EACAlB,cAAA2C,iBAAA/tE,OAAAyrE,cAAAC,cAAAlnE,KACA,SAAA/E,MAEAu3B,UAAAv3B,KAAAstE,aAAA3/D,QAEAk+D,gBAIAtrE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WACAE,OAAAgD,KAAA,2BAmQAhD,OAAAiuE,8BAAA,WACA3C,mB,WAIA,gBAAA,CAAA,SAAA,UAAA,SAAA,eAAA,eAAA,oBAAA,kBAAA,qBAAA,gBAAA,YAAA,eAAA,mBAAA,WAAA,SAAAtrE,OAAAW,QAAAqoD,OAAA9zC,aAAAoL,aAAA7f,kBAAAmtD,gBAAAroC,mBAAA6lD,cAAAh4D,UAAAvV,aAAAse,kBAAAzb,uBAIAV,OAAAkuE,WAAA,CACAruE,KAAA,CACA6sE,WAAA,EACAyB,QAAA,EACA9B,WAAA,EACAR,WAAA,EACAS,oBAAA,GAEAnY,eAAA9xD,EACAwrD,cAAAxrD,EACA4mB,QAAA,GACAyiD,aAAA,IAGA1rE,OAAAouE,oBAAA/rE,EACArC,OAAAquE,sBAAA,EAEAruE,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAu3D,WAAA,GACAtuE,OAAA+W,MAAAw3D,kBAAA,CACAn3D,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,aACAxG,MAAAtT,aAAAiC,mBAAA,QACAkT,WAAA,CAAA6E,MAAA,eACAD,MAAA,GACAE,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,MACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,UACAxG,MAAAtT,aAAAiC,mBAAA,WACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,YACA8X,MAAA,IACA8V,OAAA,SACA1a,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,IAGAC,SAAA,6CAAAiE,kBAAAwU,YAAA,cACA0D,OAAA,SAAA9hB,QAAAjC,SAEArC,EAAA,Y,KACA,OAAAqC,QAAAqH,O,KACA,YAAA,SAAArH,QAAAqH,O,KACA,QAAA,c,SACApF,S,oBACA,CACAqe,SAAA,EACAlD,OAAA,IACAqE,IAAA,EACAlB,UAAA,IAGA5iB,EAAA,iB,KACA,WAAAqC,QAAAqH,O,KACA,QAAA,iB,SACApF,YAIA4F,WAAA,GACAE,UAAA,EACAP,YAAA,EACAU,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAEA3Y,OAAA+W,MAAAy3D,2BAAA,CACAp3D,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,cACAxG,MAAAtT,aAAAiC,mBAAA,aACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,IAGAC,SAAA,0EAEA,CACAP,MAAA,UACAxG,MAAAtT,aAAAiC,mBAAA,WACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,YACA8X,MAAA,IACA8V,OAAA,SACA1a,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,IAGAoc,OAAA,SAAA9hB,QAAAjC,SACArC,EAAA,Y,KACA,OAAAqC,QAAAqH,O,KACA,YAAA,SAAArH,QAAAqH,O,KACA,QAAA,c,SACApF,S,oBACA,CACAqe,SAAA,EACAlD,OAAA,IACAqE,IAAA,EACAlB,UAAA,IAGA5iB,EAAA,iB,KACA,WAAAqC,QAAAqH,O,KACA,QAAA,iB,SACApF,YAIA4F,WAAA,GACAE,UAAA,EACAP,YAAA,EACAU,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAA03D,eAAA,SAAA71D,GAAA81D,WAEA1uE,OAAA+W,MAAA43D,aAAA,IAAA53D,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,GACAya,OAAA,CACAhB,MAAA,CACAiB,GAAA,aACAC,OAAA,CACAg6C,WAAA,CACAnkE,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,YAAA,GAEAkU,OAAA,CACAxlE,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,YAAA,GAEAmU,QAAA,CACAzlE,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,YAAA,GAEA8S,SAAA,CACApkE,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,WAAA,CACAoU,SAAA,SAAAx3D,GAEA,GAAAA,EAAAy3D,GAAA,mBACA,CACA,IAAAC,iBAAAhvE,OAAA+W,MAAAu3D,WAAA/2D,SAAAD,EAAA2oB,QAAA,OACAlqB,IAAAuB,EAAA23D,yBAAA9nE,QAIA,GAFA6nE,iBAAAxB,SAAAz3D,IAEAuB,EAAAvB,MAAAvQ,UAGA,OADA8R,EAAAvE,KAAA,oBAAAlV,aAAAiC,mBAAA,cACA,EAGA,GAAAiW,IAAA,EAGA,OADAuB,EAAAvE,KAAA,oBAAAlV,aAAAiC,mBAAA,kBACA,EAGA,GAAAiW,IAAAi5D,iBAAAE,UACA,CACAC,iBAAA,CAAAH,iBAAAE,WAEA,OADA53D,EAAAvE,KAAA,oBAAAlV,aAAAiC,mBAAA,WAAAqvE,oBACA,GAGA,OAAA,UASAnvE,OAAA+W,MAAA43D,aAAA71D,OACA9Y,OAAA+W,MAAAu3D,WAAAn2D,WAAA1Y,KAAAO,OAAA+W,MAAA43D,aAAAlvE,QAEAivE,UACA1uE,OAAA+W,MAAAu3D,WAAAc,WAAA,GAEApvE,OAAA+W,MAAAu3D,WAAAp4C,WAAA,IAEAl2B,OAAA+W,MAAAs4D,wBAAA,SAAAz2D,IACA5Y,OAAA+W,MAAAu4D,sBAAA,IAAAv4D,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAmZ,GACAya,OAAA,CACAhB,MAAA,CACAiB,GAAA,eACAC,OAAA,CACAk6C,aAAA,CACArkE,KAAA,SACAiP,UAAA,GAEAk3D,YAAA,CACAnmE,KAAA,SACAiP,UAAA,GAEAm3D,qBAAA,CACApmE,KAAA,SACAiP,UAAA,GAEAw2D,QAAA,CACAzlE,KAAA,SACAiP,UAAA,GAEAm1D,SAAA,CACApkE,KAAA,SACAiP,UAAA,EACAoiD,UAAA,EACAC,WAAA,CACAoU,SAAA,SAAAx3D,GACA,GAAAA,EAAAy3D,GAAA,mBAAA,CACA,IAAAC,iBAAAhvE,OAAA+W,MAAA04D,oBAAAl4D,SAAAD,EAAA2oB,QAAA,OACAlqB,IAAAuB,EAAA23D,yBAAA9nE,QAIA,GAFA6nE,iBAAAxB,SAAAz3D,IAEAuB,EAAAvB,MAAAvQ,UAEA,OADA8R,EAAAvE,KAAA,oBAAAlV,aAAAiC,mBAAA,cACA,EAGA,GAAAiW,IAAA,EAEA,OADAuB,EAAAvE,KAAA,oBAAAlV,aAAAiC,mBAAA,kBACA,EAIA,IAAA5C,QAAAgF,yBAAA8sE,iBAAAE,YACAn5D,IAAAi5D,iBAAAE,UAAA,CACAC,iBAAA,CAAAH,iBAAAE,WAEA,OADA53D,EAAAvE,KAAA,oBAAAlV,aAAAiC,mBAAA,WAAAqvE,oBACA,GAIA,OAAA,UASAnvE,OAAA+W,MAAAu4D,sBAAAx2D,OACA9Y,OAAA+W,MAAA04D,oBAAAt3D,WAAA1Y,KAAAO,OAAA+W,MAAAu4D,sBAAA7vE,SAGA,IAAAiwE,kBACA,CACAn/D,KAAA,oBACAkzB,kBAAA5lC,aAAAiC,mBAAA,+BAAA,QAAAjC,aAAAiC,mBAAA,gBACA4jC,eAAA,WAEA,MAAA,WAAA1jC,OAAAkuE,WAAAxC,aAAAmC,UAKA7tE,OAAAkuE,WAAAxC,aAAAwB,iBAAA1nE,aAIA,IAAA8F,KAAAtL,OAAAkuE,WAAAxC,aAAAwB,kBACA,IAAA5hE,QAKAqkE,cAAA,GAAAC,uBAAA,GAGA,SAAA54C,UAAAxpB,QAEA,IAAA69D,iBAAA,EAOA,OANAnuE,QAAA4P,QAAAU,OAAA,SAAAR,MAEAhN,OAAAJ,SAAAC,KAAAmN,KAAA,SACAq+D,iBAAA,IAGAA,gBAoEA,SAAAwE,kBAEAzE,cAAAqB,iBAAAzsE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MAEA,OAAAA,KAAAkmB,YAAAzoB,QAAAgF,yBAAAzC,KAAAqsE,cAEA9rE,OAAAiR,WAAAQ,sBACAzR,OAAAkuE,WAAAruE,KAAA6sE,WAAA,KAIA1sE,OAAAkuE,WAAAjlD,QAAA6iD,YAAArsE,KAAAqsE,YAAA,IAAA,GACA9rE,OAAAkuE,WAAAjlD,QAAA0jD,SAAAltE,KAAAktE,SACA3sE,OAAAkuE,WAAAjlD,QAAA2jD,WAAAntE,KAAAmtE,WAEA5sE,OAAAkuE,WAAAruE,KAAAgsE,UAAApsE,KAAAqsE,YAAAC,cAAA,IAAAtsE,KAAAqsE,YAAAnuD,cAjDAytD,cAAA0E,0BAAA9vE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAAA5D,OAAAkuE,WAAAxC,aAAAwB,kBAAAltE,OAAAkuE,WAAAjlD,QAAA8mD,aAAAvrE,KACA,SAAA/E,MACA,OAAAA,KAAAkmB,YAAAzoB,QAAAgF,yBAAAzC,KAAAuwE,iBACAhwE,OAAAiR,WAAAQ,sBACAzR,OAAAkuE,WAAAruE,KAAA6sE,WAAA,KAIA1sE,OAAAkuE,WAAA/Z,UAAA10D,KAAAuwE,eAAA/iC,OAAA,CAAA28B,OAAA,IAAA7N,OAAA,eAEA,EAAA/7D,OAAAkuE,WAAA/Z,UAAA90D,OACAW,OAAAkuE,WAAAruE,KAAAsuE,QAAA,EAEAnuE,OAAAkuE,WAAAruE,KAAAsuE,QAAA,OAGAjxE,QAAAgF,yBAAAgT,aAAA23D,SAEA7sE,OAAAkuE,WAAA/Z,UAAAn0D,OAAAkuE,WAAA/Z,UAAAlnB,OAAA,CAAAgjC,wBAAA,IACAjwE,OAAAkuE,WAAAxC,aAAAriC,WAAArpC,OAAAkuE,WAAA/Z,UAAA,GAAA1tD,IACAzG,OAAAkwE,+BAGAlwE,OAAAkuE,WAAA/Z,UAAAn0D,OAAAkuE,WAAA/Z,UAAA1tC,OAAA,SAAA0pD,GACA,OAAA,IAAAA,EAAAF,yBAAAE,EAAA1pE,MAAAzG,OAAAkuE,WAAAxC,aAAAriC,aAEArpC,OAAAkuE,WAAA/Z,UAAAnmC,KAAA,SAAAmiD,GACA,OAAAA,EAAA9mC,YAAA8mC,EAAA9mC,aAAArpC,OAAAkuE,WAAAxC,aAAAriC,WAAA8mC,EAAA1pE,IAAA,EAAA0pE,EAAA9mC,WAAA,aA4BA,SAAA+mC,oBAEAhF,cAAA0B,gBAAA53D,aAAA23D,QAAAroE,KACA,SAAA/E,MAEAkwE,cAAAlwE,KAAAstE,aAAAA,aAAA1Q,QACA58D,KAAAstE,aAAAA,aAAA,GACA/sE,OAAAkuE,WAAAxC,aAAAjsE,KAAAstE,aACA/sE,OAAAkuE,WAAAjlD,QAAA2jD,WAAAntE,KAAAstE,aAAAG,iBACAltE,OAAAkuE,WAAAruE,KAAAmsE,WAAA,EAEAhsE,OAAAkuE,WAAAxC,aAAAhoE,YAAA1D,OAAAkuE,WAAAxC,aAAAhoE,YAAAoR,WACA9U,OAAAouE,eAAApuE,OAAAqwE,uBAAArwE,OAAAkuE,WAAAxC,aAAAriC,WACArpC,OAAAkwE,+BAsCA,SAAAI,eAAAC,OACA,OAtBA,SAAAA,OACA,OAAAA,MAAAC,IACA,SAAAC,OACA,QAAA99D,OAAA+9D,UAAAD,MAAAjD,cAIAiD,MAAAjD,SAAA,OAIAtwE,QAAAgF,yBAAAuuE,MAAAvB,YAAAuB,MAAAjD,SAAAiD,MAAAvB,cAWAyB,CAAAJ,OAAAK,MAAAC,SA8IA,SAAAvF,eACAr9D,EAAA,qBAAAs9D,WAAA,YACAt9D,EAAA,oBAAAs9D,WAAA,YACAt9D,EAAA,oBAAAs9D,WAAA,YACAt9D,EAAA,2BAAAs9D,WAAA,YA3SAvrE,OAAA0vE,kBAAA,IAAA1+B,IAAAC,GAAAC,SAAAC,cAAAu+B,mBA8HA/8D,OAAA+9D,UAAA/9D,OAAA+9D,WAAA,SAAAvpE,OACA,MAAA,iBAAAA,OACA2pE,SAAA3pE,QACA0wB,KAAAk5C,MAAA5pE,SAAAA,OA+DAnH,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAiH,yBAEAjH,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAM,aAAA8nE,SAAApsE,OAAAgE,aAAAM,aAAA8nE,UAAA,GACApsE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IA1LAie,mBAAAsjC,aAAA7oD,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MAEA,OAAAA,KAAAkmB,YAAAzoB,QAAAgF,yBAAAzC,KAAAipD,mBAEA1oD,OAAAiR,WAAAQ,sBACAzR,OAAAkuE,WAAAruE,KAAA6sE,WAAA,KAIAxvE,QAAA4P,QAAArN,KAAAipD,iBAAA,SAAA17C,MAEAA,KAAA28D,SAAA38D,KAAA87C,UAAA,IAAA97C,KAAA+7C,gBAGA/oD,OAAAkuE,WAAArgB,SAAApuD,KAAAipD,iBAAArZ,QAAA,CAAAu6B,QAAA,IAAA7N,OAAA,gBA8KA8T,kBAvKApvE,kBAAA+J,qBAAAxK,OAAAwB,QAAAM,WAAA,IAAA0C,KAAA,SAAA/E,MAEAO,OAAAkuE,WAAAjlD,QAAAujD,kBAAA/sE,OAwKAyV,aAAA23D,OACAuD,qBAxFApwE,OAAAkuE,WAAAxC,aAAA,IAAAN,cAAAmB,oBAEAvsE,OAAAkuE,WAAAxC,aAAAhoE,YAAA1D,OAAAwB,QAAAE,QAAAoF,qBAAApD,cA6FA1D,OAAA4tE,UAAA,SAAA7W,SAGA/2D,OAAAkuE,WAAAxC,aAAAmC,QADA,WAAA9W,QACA,UAEAA,QAjEA,WAEA/2D,OAAAgxE,gBAAA,CACAnxE,MAAA,EACAuR,KAAA,IAGA,IAAA6/D,YAAAjxE,OAAA+W,MAAAu3D,WAAAn2D,WAAA1Y,OAAAw7B,SAAAi2C,IAAA,aAAA,IAAAlxE,OAAA+W,MAAA04D,oBAAAt3D,WAAA1Y,OAAAw7B,SAAAi2C,IAAA,aAAA,GACAC,aAAA,CAAAnxE,OAAAkuE,WAAAjlD,QAAA6iD,YAAAsF,UAAApxE,OAAAkuE,WAAAjlD,QAAA6iD,YAAAuF,WAyBA,OAvBAf,eAAAtwE,OAAA+W,MAAAu3D,WAAAn2D,WAAA1Y,SAAA6wE,eAAAtwE,OAAA+W,MAAA04D,oBAAAt3D,WAAA1Y,UACAO,OAAAgxE,gBAAA,CACAnxE,MAAA,EACAuR,KAAAvT,aAAAiC,mBAAA,yBAIAmxE,WAAAjxE,OAAAkuE,WAAAjlD,QAAA6iD,YAAAsF,YAEApxE,OAAAgxE,gBAAA,CACAnxE,MAAA,EACAuR,KAAAvT,aAAAiC,mBAAA,qBAAAqxE,gBAIAF,WAAAjxE,OAAAkuE,WAAAjlD,QAAA6iD,YAAAuF,YAEArxE,OAAAgxE,gBAAA,CACAnxE,MAAA,EACAuR,KAAAvT,aAAAiC,mBAAA,sBAAAqxE,gBAIA7wD,aAAAY,uBAAAlhB,OAAAgxE,gBAAAnxE,KAmCAyxE,IAKAtxE,OAAA6O,gBAAA7O,OAAAkuE,WAAAqD,UAEAvxE,OAAAkuE,WAAAxC,aAAAoC,oBAAA9tE,OAAAwB,QAAAE,QAAAoF,qBAAApD,YACA1D,OAAAkuE,WAAAxC,aAAAqB,aAAA/sE,OAAA+W,MAAAu3D,WAAAn2D,WAAA1Y,OAAAw7B,SAAAmoC,OAAApjE,OAAA+W,MAAA04D,oBAAAt3D,WAAA1Y,OAAAw7B,UACAmwC,cAAA2C,iBAAA/tE,OAAAkuE,WAAAxC,cAAAlnE,KACA,SAAA/E,MAEA,GAAAvC,QAAAgF,yBAAAzC,KAAAstE,aAAAiB,SAAA,IAAAvuE,KAAAstE,aAAAiB,OAIA,OAHAhuE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,mBAAA,SACAk3B,UAAAv3B,KAAAstE,aAAA3/D,aACAk+D,eAIA,GAAAt0C,UAAAv3B,KAAAstE,aAAA3/D,QACAk+D,oBAyBA,OArBAtrE,OAAAkuE,WAAAxC,aAAAmC,UAAA9W,UACAt3D,KAAAstE,aAAAc,QAAA9W,QAEAqU,cAAA2C,iBAAAtuE,KAAAstE,cAAAvoE,KACA,SAAAi1B,QAEA,OAAAv8B,QAAAgF,yBAAAu3B,OAAAszC,aAAAiB,SAAA,IAAAv0C,OAAAszC,aAAAiB,QACAhuE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,mBAAA,SACAk3B,UAAAyC,OAAAszC,aAAA3/D,aACAk+D,qBAIAt0C,UAAAyC,OAAAszC,aAAA3/D,SACAk+D,mBAOAvU,S,IACA,UACA/2D,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WACAE,OAAAgD,KAAA,oBAAAvD,KAAAstE,aAAAiB,QACAoC,oBACA9E,eACA,M,IAEA,SACAtrE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,wBAAA,WACAE,OAAAgD,KAAA,uBAAAvD,KAAAstE,aAAAiB,QACA,M,IAEA,SACAhuE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,gBAAA,WACAE,OAAAgD,KAAA,0BA3DAsoE,gBAkEAtrE,OAAAiuE,8BAAA,WACA3C,gBAgGA,IAAAkG,+BAAA,EACAxxE,OAAAkwE,2BAAA,WAEAhzE,QAAAgF,yBAAAlC,OAAAkuE,WAAAxC,aAAAriC,aAAAnsC,QAAAgF,yBAAAlC,OAAAkuE,WAAAxC,aAAAwB,mBAIA,IAAAsE,iCACAA,iCAEApG,cAAA6B,qBAAAjtE,OAAAkuE,WAAAxC,aAAAriC,WAAArpC,OAAAkuE,WAAAxC,aAAAwB,kBAAA1oE,KACA,SAAA/E,MACA,IAAAA,KAAAkmB,YAAAzoB,QAAAgF,yBAAAzC,KAAA0tE,mBAKA,OAJAntE,OAAAkuE,WAAAruE,KAAA6sE,WAAA,EACA1sE,OAAAJ,SAAAC,KAAA,wEAAA,SACAG,OAAAquE,sBAAA,OACAmD,iCAIA,IA1GAxxC,OAAAyxC,OA0GAC,sBAAA,EACA/B,cAAAgC,WAxDA,SAAAF,QAEA,IAAAG,WAAA,GAEAH,OAAA9hD,KAAA,SAAAkiD,GAEA,IAAAC,SAAAlC,uBAAA32D,KAAA,CAAA84D,gBAAAF,EAAAE,kBAEAD,SACAF,WAAA3zE,KAAA6zE,WAGA50E,QAAAgF,yBAAA2vE,EAAA,YAAAA,EAAA,SAAA,GACAD,WAAA3zE,KAAA4zE,MAIA7xE,OAAAkuE,WAAAxC,aAAAqB,aAAA6E,WAAA7V,OAAA,cA6CAiW,CAAAvyE,KAAA0tE,kBAAA1mD,OAAA,SAAAwrD,IAAA,OAAAA,GAAA1E,cA3CA,SAAAkE,QACA,IAAAG,WAAA,GACAH,OAAA9hD,KAAA,SAAAkiD,GACA,IAAAC,SAAAlC,uBAAA32D,KAAA,CAAAw0D,aAAAoE,EAAApE,eACAqE,SACAF,WAAA3zE,KAAA6zE,WAGA50E,QAAAgF,yBAAA2vE,EAAA,YAAAA,EAAA,SAAA,GACAD,WAAA3zE,KAAA4zE,MAIA7xE,OAAAkuE,WAAAxC,aAAAwG,sBAAAN,WAAA7V,OAAA,eA+BAoW,CAAA1yE,KAAA0tE,kBAAA1mD,OAAA,SAAAwrD,IAAA,OAAAA,GAAAxE,gBACAztE,OAAAkuE,WAAAxC,aAAAqB,aAAA1tE,QAAA,GACAW,OAAAJ,SAAAC,KAAA,wEAAA,aApHAmgC,OA4GA2vC,cA5GA8B,OA4GAhyE,KAAA0tE,kBAzGAntC,OAAAA,OAAAvZ,OAAA,SAAA2rD,GACA,IAAA,IAAAnqE,EAAA,EAAAA,EAAAwpE,OAAApyE,OAAA4I,IACA,GAAAmqE,EAAA7E,YAAAkE,OAAAxpE,GAAAslE,aAAA6E,EAAA7E,YAAA6E,EAAA3E,cAAAgE,OAAAxpE,GAAAwlE,eAAA2E,EAAA3E,aACA,OAAA,EAMA,OAHA2E,EAAA7E,YAAAvtE,OAAAqwE,yBAAArwE,OAAAkuE,WAAAxC,aAAAriC,YACArpC,OAAAJ,SAAAC,KAAA,SAAAuyE,EAAA7E,WAAA,0IAAA,YAEA,IAGAkE,OAAA9hD,KAAA,SAAAkiD,GAEA,IAmBAQ,EAnBAD,EAAA,KAmBA,IAAAC,KAlBAR,EAAApE,cACA2E,EAAApyC,OAAA/mB,KAAA,CAAAw0D,aAAAoE,EAAApE,iBAGAztC,OAAA/C,IADAm1C,EAAA,IASAA,GAJAA,EAAApyC,OAAA/mB,KAAA,CAAAs0D,WAAAsE,EAAAtE,eAIAvtC,O,IACA,IAAAorC,cAAAkH,sB,OAKAT,EAEA30E,QAAAgF,yBAAAkwE,EAAAC,MACAD,EAAAC,GAAAR,EAAAQ,IAIAn1E,QAAAgF,yBAAAkwE,EAAA,YAAAA,EAAA,SAAA,KAGApyE,OAAAkuE,WAAAxC,aAAAqB,aAAA/sC,OAAAvZ,OAAA,SAAA2rD,GAAA,OAAAA,EAAA7E,aAAAxR,OAAA,cACA/7D,OAAAkuE,WAAAxC,aAAAwG,sBAAAlyC,OAAAvZ,OAAA,SAAA2rD,GAAA,OAAAA,EAAA3E,eAAA1R,OAAA,eACA4T,cAAA,GA8DA+B,qBAAA,EAAA1xE,OAAAkuE,WAAAxC,aAAAqB,aAAA1tE,QAAA,EAAAW,OAAAkuE,WAAAxC,aAAAwG,sBAAA7yE,QASAuwE,uBAAA,GAEA5vE,OAAAquE,sBAAAqD,qBACA1xE,OAAAkuE,WAAAruE,KAAA6sE,UAAAgF,qBAGA1xE,OAAAkuE,WAAAjlD,QAAA2jD,WAAAntE,KAAAmtE,YAEA1vE,QAAAgF,yBAAAlC,OAAAkuE,WAAAxC,aAAA0B,qBACAlwE,QAAAgF,yBAAAlC,OAAAkuE,WAAAxC,aAAAsC,WACAhuE,OAAAkuE,WAAAxC,aAAA0B,mBAAA3tE,KAAA4tE,oBAGAnwE,QAAAgF,yBAAAlC,OAAAouE,iBACApuE,OAAA,iBAAAA,OAAAkuE,WAAAxC,aAAA,aACA1rE,OAAAkuE,WAAAxC,aAAA0B,mBAAA3tE,KAAA4tE,mBACArtE,OAAAouE,eAAApuE,OAAAkuE,WAAAxC,aAAAriC,YAGArpC,OAAA+W,MAAA03D,eAAAzuE,OAAAkuE,WAAAxC,aAAAqB,cAAA/sE,OAAAkuE,WAAAxC,aAAAqB,aAAAwF,IAAA,CAAA/8B,GAAA,MACAx1C,OAAA+W,MAAAs4D,wBAAArvE,OAAAkuE,WAAAxC,aAAAwG,uBACAV,kCACA,SAAArwD,OAEA,MADAqwD,iCACArwD,UAMAnhB,OAAA+Q,OAAA,gCAAA,WAEA,IAAAyhE,YAAAC,YAAAC,UAOA,GALAx1E,QAAAgF,yBAAAlC,OAAAkuE,WAAAxC,aAAAwB,mBACAphE,MAAAR,KAAAM,MAAA5L,OAAAkuE,WAAAxC,aAAAwB,qBACAsF,YAAA,IAAAlnE,KAAAtL,OAAAkuE,WAAAxC,aAAAwB,iBAAArhE,QAAA,KAAA,KAAAA,QAAA,KAAA,QAGA3O,QAAAgF,yBAAAlC,OAAAkuE,WAAAjlD,QAAA2jD,cACA9gE,MAAAR,KAAAM,MAAA5L,OAAAkuE,WAAAjlD,QAAA2jD,aACA,CACA,IAAA+F,KAAA3yE,OAAAkuE,WAAAjlD,QAAA2jD,WACA6F,YAAA,IAAAnnE,KAAAqnE,KAAA9mE,QAAA,KAAA,KAAAA,QAAA,KAAA,MAGA2mE,aAAAC,cACAC,UAAAF,aAIAxyE,OAAAkuE,WAAAjlD,QAAA8mD,YAAA2C,UACA1yE,OAAAkuE,WAAAxC,aAAAwB,iBAAAvsE,QAAA,OAAAA,CAAA,IAAA2K,KAAAonE,WAAA,uBAGA1yE,OAAA+Q,OAAA,2CAAA,SAAA6hE,iBAAAC,qBAEA,IAAArB,gCACAoB,mBAAAC,sBACA31E,QAAAgF,yBAAA2wE,uBAAA31E,QAAAgF,yBAAA0wE,mBACA11E,QAAA41E,SAAAD,sBAAA31E,QAAA41E,SAAAF,oBACAG,oBAAA,IAAAznE,KAAAunE,oBAAAhnE,QAAA,KAAA,KAAAA,QAAA,KAAA,MACAmnE,iBAAA,IAAA1nE,KAAAsnE,iBAAA/mE,QAAA,KAAA,KAAAA,QAAA,KAAA,MAEAknE,oBAAAE,iBAAAD,iBAAAC,iBAGArD,uBAAA5vE,OAAA+W,MAAAu3D,WAAAn2D,WAAA1Y,OAAAw7B,SAAAmoC,OAAApjE,OAAA+W,MAAA04D,oBAAAt3D,WAAA1Y,OAAAw7B,UACAj7B,OAAAkwE,iCAMAlwE,OAAA0tE,YAAA,WACA,OAAA1tE,OAAAkuE,WAAAxC,aAAAqB,cAAA,EAAA/sE,OAAAkuE,WAAAxC,aAAAqB,aAAA1tE,SACAW,OAAAquE,sBAGAruE,OAAA2tE,gBAAA,WACA,OAAA3tE,OAAAkuE,WAAAxC,aAAAwG,uBAAA,EAAAlyE,OAAAkuE,WAAAxC,aAAAwG,sBAAA7yE,SACAW,OAAAquE,yB,WAGA,iBAAA,CAAA,SAAA,gBAAA,YAAA,eAAA,SAAAruE,OAAAorE,cAAAh4D,UAAAvV,2BAGAmC,OAAAiH,yBAEAjH,OAAAwB,QAAAE,QAAAoF,qBAAAqkE,qBACAnrE,OAAAgD,KAAA,uBAwBAhD,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAu3D,WAAA,GACAtuE,OAAA+W,MAAAw3D,kBAAA,CACAn3D,UAAA,EACAM,QAAA,CACA,CACAC,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,SACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,YACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,iBACAxG,MAAAtT,aAAAiC,mBAAA,UACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,UACAxG,MAAAtT,aAAAiC,mBAAA,WACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,eACAxG,MAAAtT,aAAAiC,mBAAA,YACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,SACAxG,MAAAtT,aAAAiC,mBAAA,UACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,YACAxG,MAAAtT,aAAAiC,mBAAA,aACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,uFACAN,MAAA,IAEA,CACAM,SAAA,mHACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAA03D,eAAA,WAEAzuE,OAAA+W,MAAA43D,aAAA,IAAA53D,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAAkzE,WACA7/C,OAAA,CACAznB,MAAA,SAAA1M,UASA,OAPA+O,EAAA0hB,KAAAzwB,SAAA,SAAA63B,IAAAuqB,MAEAA,KAAA6xB,cAAA,iBAAA7xB,KAAA6xB,eAEA7xB,KAAA6xB,aAAA7nE,KAAAivC,OAAA+G,KAAA6xB,cAAAzlD,OAAA,wCAGAxuB,aAKAc,OAAA+W,MAAA43D,aAAA71D,OACA9Y,OAAA+W,MAAAu3D,WAAAn2D,WAAA1Y,KAAAO,OAAA+W,MAAA43D,aAAAlvE,SAGAO,OAAAuB,WAAA,WAGAvB,OAAAwB,QAAAE,QAAAoF,qBAAAqkE,qBACAnrE,OAAAgD,KAAA,uBAEAhD,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAM,aAAA4uE,WAAAlzE,OAAAgE,aAAAM,aAAA4uE,YAAA,GACAlzE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,IAEAtH,OAAAkzE,WAAA,GAhKA9H,cAAAgI,cAAApzE,OAAAwB,QAAAE,QAAAoF,qBAAAlD,SAAAY,KACA,SAAA/E,MAEAA,KAAAkmB,WAEAzoB,QAAAgF,yBAAAzC,KAAA4zE,YAMArzE,OAAAJ,SAAAC,KAAAhC,aAAAiC,mBAAA,8BAAA,YAJAE,OAAAkzE,WAAAzzE,KAAA4zE,WACArzE,OAAA+W,MAAA03D,kBAMAzuE,OAAAiR,WAAAQ,oBAsJAzR,OAAAszE,UAAA,SAAA7C,OAIA,YAFAA,MAAAp3C,OAGAr5B,OAAAgD,KAAA,oBAAAytE,MAAAhqE,KAIAzG,OAAAgD,KAAA,uBAAAytE,MAAAhqE,S,WAKA,mBAAA,CAAA,SAAA,kBAAA,YAAA,SAAAzG,OAAA4tD,gBAAAx6C,wBAGApT,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAM,aAAAivE,OAAAvzE,OAAAgE,aAAAM,aAAAivE,QAAA,GACAvzE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,kBACAsC,OAAAgE,aAAAM,aAAAgD,QAAA,Q,WAGA,2BAAA,CAAA,SAAA,eAAA,kBAAA,eAAA,UAAA,mBAAA,iBAAA,kBAAA,SAAAtH,OAAAsgB,aAAAstC,gBAAAttD,aAAAK,QAAA6rB,iBAAAtsB,eAAApC,8BAIA,IAAAD,aAAAC,gBAAAC,gCAAA,sBACAiC,OAAAuB,WAAA,WAEA+e,aAAAO,wBACA7gB,OAAAoI,2BAAA9H,aAAAkzE,kCAEAxzE,OAAAgD,KAAA,SAEAhD,OAAAgE,aAAAM,aAAAtE,OAAAgE,aAAAM,cAAA,GACAtE,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAM,aAAAivE,OAAA,CACAE,OAAA,KACAC,QAAA,KACAC,WAAA,KACAC,UAAA,KACAC,OAAA,KACAC,KAAA,KACAC,UAAA,KACAC,aAAA,KACA5sE,SAAA,EACA6sE,kBAAA,GACAC,kBAAA,GACAC,0BAAA,GACAtnD,WAAA,SACAsjC,kBAAA,GAEAnwD,OAAAysB,MAAAC,eAAAC,UAAA,GAEAihC,gBAAAsG,qBAAAl0D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAAA,GAAAY,KAAA,SAAA/E,MAEAO,OAAAm0D,UAAAxzD,QAAA,SAAAA,CAAAlB,KAAA20D,UAAA,CAAAwV,OAAA,OACA5pE,OAAAm0D,UAAA4J,QAAA,CACA6L,QAAA,EACAnjC,YAAA5oC,aAAAiC,mBAAA,OACA2G,IAAA,IAEA3C,WAAA,WACA9D,OAAAgE,aAAAM,aAAAivE,OAAAnsE,SAAA,GACA,MAIApH,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAivE,OAAAvzE,OAAA0sB,eAAAS,YAAAomD,QAGAvzE,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAAomD,OAAAvzE,OAAAgE,aAAAM,aAAAivE,QAGAvzE,OAAA0K,IAAA,kBAAA,SAAAC,MAAA8iB,MAEAztB,OAAAuE,YAAAkpB,KAAAC,UAGA1tB,OAAAuE,YAAA,SAAAmpB,QAEA,IAKAE,GALAtN,aAAAY,uBAKA0M,GAAA,eAHA5tB,OAAAgE,aAAAM,aAAAivE,OAAApjB,iBACA,iBAAAnwD,OAAAgE,aAAAM,aAAAivE,OAAA1mD,YAGA,eAAA7sB,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA,yBAAA5D,OAAAgE,aAAAM,aAAAivE,OAAAE,OACA,4BAAAzzE,OAAAgE,aAAAM,aAAAivE,OAAAG,QACA,+BAAA1zE,OAAAgE,aAAAM,aAAAivE,OAAAI,WACA,8BAAA3zE,OAAAgE,aAAAM,aAAAivE,OAAAK,UACA,2BAAA5zE,OAAAgE,aAAAM,aAAAivE,OAAAM,OACA,uBAAA7zE,OAAAgE,aAAAM,aAAAivE,OAAAO,KACA,4BAAA9zE,OAAAgE,aAAAM,aAAAivE,OAAAQ,UACA,iBAAA/zE,OAAA2P,aAAAG,UACA,eAAA9P,OAAA2P,aAAAM,QACA,iBAAAjQ,OAAAgE,aAAAM,aAAAivE,OAAAnsE,SACA,yBAAApH,OAAAgE,aAAAM,aAAAivE,OAAAU,kBACA,yBAAAj0E,OAAAgE,aAAAM,aAAAivE,OAAAW,kBACA,+BAAAl0E,OAAAgE,aAAAM,aAAAivE,OAAAS,aACA,iCAAAh0E,OAAAgE,aAAAM,aAAAivE,OAAAY,0BAEAzmD,OACAlB,iBAAAqB,aAAAD,GAAAF,QAEAlB,iBAAAsB,aAAAF,SCx+CA1wB,QAAAC,OAAA,cAAA,CAAA,eAAA,oBAAA,oB,4CACA,SAAAC,eAAAG,kBAEAH,e,KACA,yBACA,CACAK,YAAAF,iBAAAG,YAAA,kBACAC,WAAA,qBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,2B,KAKA,0BACA,CACAN,YAAAF,iBAAAG,YAAA,mBACAC,WAAA,sBACAC,QAAA,CACAC,aAAA,CAAA,kBAAA,SAAAC,iBACA,OAAAA,gBAAAC,gCAAA,8B,WAMA,wBAAA,CAAA,SAAA,SAAAiC,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAM,eAAAtE,OAAAgE,aAAAM,aAAA,Q,WAGA,qBAAA,CAAA,SAAA,8BAAA,UAAA,YAAA,eAAA,SAAAtE,OAAAo0E,4BAAAzzE,QAAAyS,UAAAvV,2BAIAmC,OAAA+W,MAAA,GACA/W,OAAA+W,MAAAs9D,eAAA,GACAr0E,OAAA+W,MAAAu9D,sBAAA,CACAl9D,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAixC,SAAAr0C,KAAAsD,SACAD,SAAArD,KAAAqD,SAAAgxC,SAAA,IACAvoD,OAAA+J,SAAAwN,SAAA+F,YACAtd,OAAAgO,UAEA0J,QAAA,CACA,CACAC,MAAA,uBACAxG,MAAAtT,aAAAiC,mBAAA,cACA8X,MAAA,IACA5E,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAN,MAAA,WACAxG,MAAAtT,aAAAiC,mBAAA,YACAkT,WAAA,CAAA6E,MAAA,aACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAw9D,mBAAA,WAEAv0E,OAAA+W,MAAAy9D,iBAAA,IAAAz9D,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAAwB,QAAAizE,iBAGAz0E,OAAA+W,MAAAy9D,iBAAA17D,OACA9Y,OAAA+W,MAAAs9D,eAAAl8D,WAAA1Y,KAAAO,OAAA+W,MAAAy9D,iBAAA/0E,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACAmtE,eAAA,CACArtE,SAAA,IAGApH,OAAAwB,QAAAizE,iBAAAz0E,OAAAwB,QAAAizE,eAAA,KAGAz0E,OAAA4U,QAAArQ,YAAA,WAEAvE,OAAAiR,WAAAO,OACAxR,OAAAgkD,UAAA,uBACAhkD,OAAAikD,SAAA,EACAmwB,4BAAAM,mBAAA10E,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAAgE,aAAAM,aAAAmwE,eAAArtE,SACApH,OAAA2P,aAAAG,UACA9P,OAAA2P,aAAAM,SAAAzL,KAAA,SAAA/E,MAEA,IAAAA,KAAAJ,QAEAW,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,mBAEAE,OAAAwB,QAAAizE,eAAAh1E,KACAvC,QAAA4P,QAAA9M,OAAAwB,QAAAizE,eAAA,SAAAliE,SAEAA,QAAAoiE,qBAAAh0E,QAAA,OAAAA,CAAA4R,QAAAqiE,YAAA,gBAEA50E,OAAA+W,MAAAw9D,2B,WAIA,6BAAA,CAAA,SAAA,YAAA,kBAAA,UAAA,kBAAA,SAAAv0E,OAAAoT,UAAAw6C,gBAAAjtD,QAAA7C,8BAGA,IAAAD,aAAAC,gBAAAC,gCAAA,sBACAiC,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACAmtE,eAAA,CACArtE,SAAA,IAGApH,OAAAysB,MAAAC,eAAAC,UAAA,GACAihC,gBAAAsG,qBAAAl0D,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QAAA,GAAAY,KAAA,SAAA/E,MAEAO,OAAAm0D,UAAAxzD,QAAA,SAAAA,CAAAlB,KAAA20D,UAAA,CAAAwV,OAAA,OACA5pE,OAAAm0D,UAAA4J,QAAA,CACA6L,QAAA,EACAnjC,YAAA5oC,aAAAiC,mBAAA,OACA2G,IAAA,IAEAzG,OAAAgE,aAAAM,aAAAmwE,eAAArtE,SAAA,KAIApH,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAAmwE,eAAAz0E,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,MAGAvM,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAAmwE,eACAz0E,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,iB,WAGA,sBAAA,CAAA,SAAA,+BAAA,UAAA,YAAA,eAAA,SAAA3P,OAAA60E,6BAAAl0E,QAAAyS,UAAAvV,2BAIAmC,OAAA+W,MAAA,GACA/W,OAAA+W,MAAA+9D,oBAAA,GACA90E,OAAA+W,MAAAg+D,2BAAA,CACA39D,UAAA,EACAC,OAAA,SAAAC,GAEA,IAAAixC,SAAAr0C,KAAAsD,SACAD,SAAArD,KAAAqD,SAAAgxC,SAAA,IACAvoD,OAAA+J,SAAAwN,SAAA+F,YACAtd,OAAAgO,UAEA0J,QAAA,CACA,CACAC,MAAA,uBACAxG,MAAAtT,aAAAiC,mBAAA,cACAkT,WAAA,CAAA6E,MAAA,cACAC,WAAA,CACAC,KAAA,CACAC,SAAA,WACAC,eAAA,KAIA,CACAC,SAAA,+BACAN,MAAA,KAGAO,WAAA,IAAApB,MAAAtX,KAAA2Y,WACAC,UAAA,EACAP,WAAA,CACAQ,KAAA,MAAAC,OAAA,GAEAC,aAAA,EACAC,UAAA,EACAhJ,YAAA,EACAiJ,WAAA,MACAC,UAAA,GAGA3Y,OAAA+W,MAAAi+D,wBAAA,WAEAh1E,OAAA+W,MAAAk+D,sBAAA,IAAAl+D,MAAAtX,KAAA2Y,WAAA,CACA3Y,KAAAO,OAAAwB,QAAA0zE,kBAGAl1E,OAAA+W,MAAAk+D,sBAAAn8D,OACA9Y,OAAA+W,MAAA+9D,oBAAA38D,WAAA1Y,KAAAO,OAAA+W,MAAAk+D,sBAAAx1E,SAGAO,OAAAuB,WAAA,WAEAvB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,gBAAA,GACApE,OAAAgE,aAAAK,SAAA+O,UAAA1V,YAAA,qBACAsC,OAAAgE,aAAAM,aAAA,CACAgD,QAAA,IACA4tE,gBAAA,IAEAl1E,OAAAwB,QAAA0zE,kBAAAl1E,OAAAwB,QAAA0zE,gBAAA,KAGAl1E,OAAA4U,QAAArQ,YAAA,WAEAvE,OAAAiR,WAAAO,OACAxR,OAAAgkD,UAAA,uBACAhkD,OAAAikD,SAAA,EACA4wB,6BAAAM,oBAAAn1E,OAAAwB,QAAAE,QAAAoF,qBAAAlD,QACA5D,OAAA2P,aAAAG,UACA9P,OAAA2P,aAAAM,SAAAzL,KAAA,SAAA/E,MAEA,IAAAA,KAAAJ,QAEAW,OAAAiR,WAAAU,cAAA9T,aAAAiC,mBAAA,oBAEAE,OAAAwB,QAAA0zE,gBAAAz1E,KACAvC,QAAA4P,QAAA9M,OAAAwB,QAAA0zE,gBAAA,SAAA3iE,SAEAA,QAAAoiE,qBAAAh0E,QAAA,OAAAA,CAAA4R,QAAAqiE,YAAA,gBAEA50E,OAAA+W,MAAAi+D,gC,WAMA,8BAAA,CAAA,SAAA,SAAAh1E,qBAGAA,OAAAuB,WAAA,WAEAvB,OAAAysB,MAAAC,eAAAC,UAAA,IAGA3sB,OAAAysB,MAAAC,eAAA1sB,OAAAysB,MAAAC,gBAAA,GACA1sB,OAAAysB,MAAAC,eAAAM,qBAAA,WAEAhtB,OAAAgE,aAAAM,aAAA4wE,gBAAAl1E,OAAA0sB,eAAAO,YAAAzJ,SACAxjB,OAAA2P,aAAA3P,OAAA0sB,eAAAO,YAAA1gB,MAGAvM,OAAAysB,MAAAC,eAAAQ,mBAAA,WAEAltB,OAAA0sB,eAAAS,YAAA3J,SAAAxjB,OAAAgE,aAAAM,aAAA4wE,gBACAl1E,OAAA0sB,eAAAS,YAAA5gB,KAAAvM,OAAA2P,iBC/RAzS,QAAAC,OAAA,uBAAA,ICSAD,QAAAC,OAAA,kBAAA,IASAD,QAAAC,OAAA,mB,UACA,cAAA,CAAA,aAAA,SAAAe,YAEA,MAAA,CACAiU,SAAA,IACAG,MAAA,CACAzS,KAAA,IACAu1E,YAAA,IACAC,UAAA,IACAC,UAAA,KAEAzpE,SAAA,EACA0pE,YAAA,EACAljE,KAAA,SAAAC,MAAAC,QAAAC,OAEAtV,QAAAgF,yBAAAsQ,MAAA8iE,WAEA9iE,MAAA8iE,WAAA,EAGA9iE,MAAA8iE,UAAAhjE,MAAAkjE,MAAAhjE,MAAA8iE,WAGAhjE,MAAAmjE,YAAA,GACAjjE,MAAAoF,QACAtF,MAAAmjE,YAAA79D,MAAApF,MAAAoF,OACApF,MAAAhD,SACA8C,MAAAmjE,YAAAjmE,OAAAgD,MAAAhD,SAIA7R,WAAA,CAAA,SAAA,WAAA,SAAA,SAAAqC,OAAA01E,SAAAC,QAGA31E,OAAA41E,UAAA,SAAAnE,QAEA,IAAAA,SAAAkE,OAAAL,YAKAp4E,QAAAgF,yBAAAlC,OAAAo1E,gBAEAp1E,OAAAo1E,cAGAp1E,OAAAH,MAAA,MAGAqY,SAAA,yT,UAGA,WAAA,CAAA,WAEA,MAAA,CACA/F,SAAA,IACAC,QAAA,UACAC,KAAA,SAAAC,MAAAgvC,KAAA9uC,MAAA7U,YAEAA,WAAA8U,YAAAxU,KAAA,SAAAyU,YAEA,MAAA,GAAAA,aAGA/U,WAAAiV,SAAA3U,KAAA,SAAA4U,WAEA,OAAAe,SAAAf,UAAA,W,UAKA,aAAA,CAAA,WAEA,MAAA,CACAV,SAAA,IACAC,QAAA,UACAC,KAAA,SAAAC,MAAAgvC,KAAA9uC,MAAA7U,YAEAA,WAAA8U,YAAAxU,KAAA,SAAAyU,YAEA,MAAA,GAAAA,aAGA/U,WAAAiV,SAAA3U,KAAA,SAAA4U,WAEA,OAAAqhC,WAAArhC,kB,UAKA,YAAA,WAEA,MAAA,CACAT,QAAA,UACAC,KAAA,SAAAC,MAAAC,QAAAQ,KAAA8iE,aAaAA,YAAAjjE,SAAA3U,KAXA,SAAAmT,MAEA,IAAA0kE,iBAAA1kE,KAAAvF,QAAA,UAAA,IAMA,OALAiqE,mBAAA1kE,OAEAykE,YAAAE,cAAAD,kBACAD,YAAAG,WAEAF,uB,UAOA,cAAA,CAAA,WAAA,SAAAlxC,UAEA,MAAA,CACAzyB,SAAA,IACAtG,SAAA,EACAwG,KAAA,SAAAC,MAAA2jE,IAAAzjE,OAEAF,MAAAvB,OAAAyB,MAAA0jE,QAAA,SAAA9W,MAEA6W,IAAA7W,KAAAA,MACAx6B,SAAAqxC,IAAAE,WAAAvxC,CAAAtyB,c,UAKA,QAAA,CAAA,UAAA,SAAA3R,sBAGA,IAAAy1E,cAAA,qCAsHA,MAAA,CACAjkE,SAAA,IACAC,QAAA,UACAC,KAvHA,SAAAC,MAAA2xB,GAAAzxB,MAAAqjE,aAEA,IAGAQ,eAHAtkD,IAAAmiB,WAAA1hC,MAAAuf,KAAA,GACAukD,UAAApiC,WAAA1hC,MAAA8jE,WAAA,GACAC,OAAA/jE,MAAA+jE,QAAA,GAGA,SAAAC,eAAA7b,QAYA,OAAA,KAFAA,QAFA,GAFAA,QAFA,GAFAA,QAAA,IAEAlvD,WAAAjJ,QAAA,KAEAm4D,OAAA9uD,QAAA,KAAA,IAEA8uD,QAAAlvD,WAAAjJ,QAAA,KAEAm4D,OAAA9uD,QAAA,MAAA,IAEA8uD,QAAAt7D,OACA,IACAs7D,OAGA,SAAA8b,gBAAAtvE,OAUA,IAAA4O,IAAA2gE,cALA,OAHAvvE,MAAAqvE,eAAArvE,OACAA,MAAA0uE,YAAAc,SAAAxvE,OAAA,GAAA,GAAAovE,QAOAG,cAPAJ,UASAvgE,IAAAygE,eAFAzgE,IAPA5O,OAWA4O,IAIA,SAAA6gE,IAGA,IAAA9uE,IADA8uE,IAAA,IACAC,MAAA,KACAC,GAAAhvE,GAAA,GACAivE,GAAA,EAAAjvE,GAAAzI,OAAA,IAAAyI,GAAA,GAAA,GACAkvE,IAAA,eACA,KAAAA,IAAAC,KAAAH,KAEAA,GAAAA,GAAAjrE,QAAAmrE,IAAA,SAEA,OAAAF,GAAAC,GAfAG,CADAnhE,IAAAm+B,WAAAn+B,KAAAohE,QAAAT,iBATAL,eAAAlvE,MAuEA,SAAAiwE,cAEA,IAAAjwE,MAAAqvE,eAAAX,YAAAwB,aACAvrE,MAAA3E,SAEA0uE,YAAAyB,WAAAb,gBAAAtvE,OACAkvE,eAAAR,YAAAyB,WACAzB,YAAAG,WAOA,OAjFAH,YAAApjE,YAAAxU,KAAAw4E,iBAwBAZ,YAAAjjE,SAAA3U,KAAA,SAAAkJ,OAEAA,MAAAqvE,eAAArvE,OAaA,KAJAA,MAFA,KAJAA,MAFAjK,QAAA+U,YAAA9K,OAEA,GAIAA,OAAA3E,QAAA,KAEA,IAAA2E,MAIAA,OAAA3E,QAAA,OAEA,GAAAuvB,KAEA5qB,MAAA,KACA0uE,YAAAE,cAAA,IACAF,YAAAG,WACA,MAAA7uE,QAEAA,MAAA,KAIA,IAAAowE,MAAA1B,YAAAc,SAAAxvE,OAYA,OAXAowE,OAAAnB,cAAAa,KAAA9vE,OAEAkvE,eAAA,KAAAlvE,MAAA,KAAAowE,MAAApwE,MAAA+sC,WAAA/sC,QAIA0uE,YAAAE,cAAAU,gBAAAJ,iBACAR,YAAAG,WAGAH,YAAA2B,aAAA,UAAA,GACAnB,iBAcApyC,GAAAwzC,KAAA,OAAAL,aACAnzC,GAAAwzC,KAAA,SAAAL,aAEAA,mB,UASA,kBAAA,WAEA,MAAA,CACAjlE,SAAA,IACAE,KAAA,SAAAC,MAAAC,QAAAC,OAEAF,MAAAvB,OAAA,WAEA,OAAAuB,MAAAkjE,MAAAhjE,MAAAklE,kBACA,SAAAxqC,WAEA,IAAAA,WAEA36B,QAAA,GAAAiF,SACAjF,QAAA,GAAArE,e,UAQA,WAAA,CAAA,WAAA,SAAA02B,UAEA,IAAAy3B,MAAAz3B,SAAA,2CA6BA,MAAA,CACAzyB,SAAA,IACAE,KA7BA,SAAAC,MAAA2xB,GAAAlxB,MAEAT,MAAAlB,MAAA,EAAAkB,MAAAlB,KAAA/R,QAEA4kC,GAAA3N,KAAA,CACAC,SAAA,CACAohD,GAAA,gBAEA58D,MAAA,CACA68D,IAAA,CACAC,OAAA,YAEAnhD,QAAA,gBAEAja,QAAA,CACArL,KAAA,WAEA,OAAAkB,MAAAtE,OAAA,WAEA,OAAAquD,MAAA/pD,cAWAA,MAAA,CACAlB,KAAA,iB,UAIA,WAAA,CAAA,SAAA,SAAA0mE,QAEA,MAAA,CACA1lE,QAAA,UACAD,SAAA,IACAG,MAAA,CACApN,mBAAA,IACA6yE,mBAAA,KAEA1lE,KAAA,SAAAC,MAAAgvC,KAAA9uC,MAAAyT,MAEAA,KAAArT,SAAAmrD,QAAA,SAAAlrD,WAEA,IAAAmlE,eAAAC,aAAAC,aAOAC,cALA7lE,MAAApN,mBAAAslD,2BAEAwtB,kBAAAnlE,WAAAA,UAAAxT,QAAAiT,MAAApN,mBAAAkzE,mBACAH,gBAAAplE,WAAAA,UAAAlT,MAAA,WAAAkT,UAAAlT,MAAA,UAAAN,QAAAiT,MAAApN,mBAAAmzE,sBACAH,gBAAArlE,WAAAA,UAAAlT,MAAA,QAAAkT,UAAAlT,MAAA,OAAAN,QAAAiT,MAAApN,mBAAAozE,uBACAzlE,WAAAA,UAAAlT,MAAA,kBAAAkT,UAAAlT,MAAA,iBAAAN,QAAAiT,MAAApN,mBAAAmzE,wBAIAL,kBAAAnlE,WAAA,GAAAA,UAAAxT,QACA44E,gBAAAplE,YAAA,QAAAokE,KAAApkE,YACAqlE,gBAAArlE,YAAA,KAAAokE,KAAApkE,eACAA,YAAA,eAAAokE,KAAApkE,aAGA0lE,OAAA1lE,UAAA,QACA,QAAAokE,KAAApkE,WAAA,EAAA,IACA,QAAAokE,KAAApkE,WAAA,EAAA,IACA,KAAAokE,KAAApkE,WAAA,EAAA,IACA,eAAAokE,KAAApkE,WAAA,EAAA,GAEA2lE,MAAA,EAAA3lE,UAAAxT,OAAAwT,UAAAxT,OAAA,EAAA,GAUA,OATAiT,MAAAylE,mBAAAQ,MAAAC,MAEAR,gBAAAC,cAAAC,cAAAC,cAEAlyD,KAAAuxD,aAAA,OAAA,GAGAvxD,KAAAuxD,aAAA,OAAA,GAEA3kE,iB,UAKA,QAAA,CAAA,SAAA,SAAAilE,QAEA,MAAA,CACA1lE,QAAA,UACAD,SAAA,IACAE,KAAA,SAAAC,MAAAgvC,KAAA9uC,MAAAyT,MAEA3T,MAAAvB,OAAA,WAEA,OAAAkV,KAAAwyD,WAAAv7E,QAAA+U,YAAAgU,KAAAoxD,cAAAS,OAAAtlE,MAAA7S,MAAAm4E,CAAAxlE,SAAA2T,KAAAoxD,aACA,SAAAqB,cAEAzyD,KAAAuxD,aAAA,QAAAkB,qB,UAKA,cAAA,CAAA,YAAA,WAAA,SAAA/xD,UAAAjmB,UAEA,MAAA,CACAyR,SAAA,IACAG,MAAA,CACAqmE,WAAA,KAEAzgE,SAAA,okBACA7F,KAAA,SAAAC,MAAAgvC,KAAA9uC,MAAAyT,MAOA,IALA,IAAAzP,MACAoiE,KACAC,QAGA5wE,EAAAqK,MAAAqmE,WAAAt5E,OAAA,EAAA,GAAA4I,EAAAA,IAEAqK,MAAAqmE,WAAA1wE,GAAA2hE,QACAt3D,MAAAqmE,WAAA5b,OAAA90D,EAAA,GAGAqK,MAAAwmE,OAAA,CAAAh/D,MAAA,IAEAtD,MAAA,WAKAqiE,QAHAA,SAGAlyD,UAAA,WAEArU,MAAAwmE,OAAAh/D,QAAAxH,MAAAqmE,WAAAt5E,OAAA,EACAiT,MAAAwmE,OAAAh/D,MAAA,IAEAxH,MAAAwmE,OAAAh/D,OACA,SAKA8+D,KAAA,WAEAC,UAEAlyD,UAAA2uB,OAAAujC,SACAA,aAAAx2E,IAIAiQ,MAAAymE,aAAA,SAAAj/D,OAEAxH,MAAA0mE,mBAEA1mE,MAAAwmE,OAAAh/D,MADA,IAAAA,MACAxH,MAAAqmE,WAAAt5E,OAAA,EAEAya,MAAA,GAGAxH,MAAA2mE,aAAA,SAAAn/D,OAEAxH,MAAA0mE,mBACAl/D,QAAAxH,MAAAqmE,WAAAt5E,OAAA,EACAiT,MAAAwmE,OAAAh/D,MAAA,EAEAxH,MAAAwmE,OAAAh/D,MAAAA,MAAA,GAGAxH,MAAA0mE,iBAAA,WAEAH,UAEAD,OACAl4E,SAAA8V,MAAA,OAIAlE,MAAA5H,IAAA,WAAA,WAEAkuE,c,UAOA,eAAA,WAEA,MAAA,CACAxmE,QAAA,UACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA0mE,WAEAA,UAAAtmE,SAAA3U,KAAA,SAAAk7E,YAKA,QAAA92E,IAAA82E,WAAA,MAAA,GACA,IAAArD,iBAAA,MAAAtjE,MAAA4mE,aAAAD,WAAAttE,QAAA,UAAA,IAAAstE,WAAAttE,QAAA,gBAAA,IAOA,OANAiqE,mBAAAqD,aAEAD,UAAAnD,cAAAD,kBACAoD,UAAAlD,WAGAF,uB,UAKA,aAAA,CAAA,UAAA,SAAAv1E,SAEA,OAAA,SAAAP,QAkBA,OAhBAA,OAAAq5E,qBAAA,WASA,OAPAr5E,OAAAs5E,UAAAzhD,KAAA/F,IACAnsB,SAAAw1C,KAAAo+B,aAAA5zE,SAAA6zE,gBAAAD,aACA5zE,SAAAw1C,KAAAs+B,aAAA9zE,SAAA6zE,gBAAAC,aACA9zE,SAAAw1C,KAAAu+B,aAAA/zE,SAAA6zE,gBAAAE,aACAr4E,OAAAiO,aAEAtP,OAAA25E,aAAAp5E,QAAA+O,YACAtP,OAAA45E,YAAAr5E,QAAAs5E,YAEA75E,OAAAq5E,uBACAr5E,OAAA+Q,OAAA,WAAA,SAAA+oE,UAAAC,WAEA/5E,OAAAq5E,yBAEAn8E,QAAAqV,QAAAhS,SAAAk3E,KAAA,SAAA,WAGA,OADAz3E,OAAAq5E,uBACAr5E,OAAAgO,e,UAIA,gBAAA,CAAA,WAAA,SAAA42B,UAEA,OAAA,SAAAtyB,MAAA2xB,GAAAzxB,OAEAyxB,GAAA+1C,YAAAp1C,SAAApyB,MAAA4sD,KAAAx6B,CAAAtyB,Y,UAGA,YAAA,WASA,MAAA,CACAA,MAAA,CACA2nE,UAAA,IACAC,eAAA,KAEA7nE,KAAA,SAAArS,OAAAshD,KAAA9uC,OAEAnR,OAAA84E,eAAA,WAEA,GAAAn6E,OAAAi6E,YAEA,OAAAj6E,OAAAk6E,gBAAA,KAIAl6E,OAAA0K,IAAA,WAAA,WAEArJ,OAAA84E,eAAA,W,UAKA,YAAA,WASA,MAAA,CACA7nE,MAAA,CACA8nE,YAAA,IACAC,eAAA,KAEAhoE,KAAA,SAAArS,OAAAshD,KAAA9uC,OAGA,IAAA8nE,2BAAAt6E,OAAA0K,IAAA,uBAAA,SAAAC,MAAAC,KAAAC,SAEA7K,OAAAo6E,gBAEAvoE,QAAA7R,OAAAq6E,gBAAA,qBAEA1vE,MAAA8qC,oBAKAz1C,OAAA0K,IAAA,WAAA,WAEA4vE,mC,UAKA,eAAA,CAAA,WAAA,SAAA55E,UAEA,MAAA,CACA2R,KAAA,SAAArS,OAAAshD,KAAA9uC,MAAAyT,MAEA,IAAA7Q,KAAApV,OAAAgE,aAAAG,aACAmD,QAAAtH,OAAAgE,aAAAI,gBACAC,SAAArE,OAAAgE,aAAAM,aAAAgD,QAEAtH,OAAAohD,oBAAAphD,OAAA0K,IAAA,uBAAA,SAAAC,MAAAC,KAAAC,SAEA,IAOA0vE,gBACAC,iBANA,EAFAl5B,KAAAroC,KAAA,uBAAA5Z,OAAAiiD,KAAAroC,KAAA,iBAAA5Z,OAAAiiD,KAAAroC,KAAA,YAAA5Z,SAIAm7E,iBAAA,kEACAx6E,OAAA8Q,+BAGA0pE,kBADAD,gBAAAv6E,OAAAy6E,mBAAAC,cAAA38E,gCAAA,oBACAi1D,0BAAAunB,gBAAAz6E,mBAAA,kBAAA,OAAAy6E,gBAAAz6E,mBAAA,2BAGA+R,QAAA2oE,oBAIA7vE,MAAA8qC,iBACAz1C,OAAAgE,aAAAG,aAAAiR,KACApV,OAAAgE,aAAAI,gBAAAkD,QACAtH,OAAAgE,aAAAM,aAAA+C,YACA3G,SAAA40C,OAAAt1C,OAAAgE,aAAAM,aAAA+C,YACArH,OAAAgE,aAAAM,aAAAgD,QAAAjD,aAKArE,OAAA0K,IAAA,WAAA,WAEA1K,OAAAohD,6B,UAKA,oBAAA,CAAA,aAAA,UAAA,WAAA,SAAAljD,WAAAqC,QAAAG,UAEA,MAAA,CACAyR,SAAA,KACAtG,SAAA,EACAwG,KAAA,SAAAC,MAAAC,QAAAC,OAEA,IAAAmoE,iBAAAh1E,SAAAiV,eAAA,qBACA+/D,iBAAA5/D,MAAAnD,MAAA,QAEA,IAAAgjE,YAAAj1E,SAAAk1E,uBAAA,gBAAA,GAuBA,SAAAC,YAEA7sE,EAAA,sBAAAuB,OAAAorE,YAAAlB,cAvBAx7E,WAAA6S,OAAA,2BAAA,WAEA+pE,cAGA58E,WAAA6S,OAAA,aAAA,SAAAlR,MAEAA,MAEA86E,iBAAA5/D,MAAA7J,QAAA,QACAxQ,SAAA,WAEAo6E,eAKAH,iBAAA5/D,MAAA7J,QAAA,UASAgH,SAAA,wE,UAKA,aAAA,CAAA,WAAA,SAAAxX,UAEA,MAAA,CACA4R,MAAA,CACAyoE,WAAA,KAEA5oE,SAAA,IACA6oE,UAAA,EACAzF,YAAA,EACAljE,KAAA,SAAAC,MAAAC,QAAAC,OACA9R,SAAA4R,MAAAyoE,WAAA,Q,UAIA,qBAAA,CAAA,aAAA,WAAA,eACA,SAAA78E,WAAAwC,SAAA4f,cACA,MAAA,CACAlO,QAAA,OACAD,SAAA,IACAE,KAAA,SAAArS,OAAAuS,QAAAC,OAEA,IAAA+nE,gBAAAv6E,OAAAy6E,mBAAAC,cAAA38E,gCAAA,mBACAk9E,2BAAAj7E,OAAAy6E,mBAAAC,cAAA38E,gCAAA,yBAEAy8E,iBAAAD,gBAAAz6E,mBAAA,qBACAo7E,gBAAAD,2BAAAn7E,mBAAA,wBAEAq7E,YAAAn7E,OAAAgE,aAAAG,aACAi3E,eAAAp7E,OAAAgE,aAAAI,gBACAi3E,gBAAAr7E,OAAAgE,aAAAM,aAAAgD,QAEAg0E,QAAA,EAEAhB,2BAAAt6E,OAAA0K,IAAA,uBAAA,SAAAC,MAAAC,KAAAC,SAEA,KAAA3N,QAAAgF,yBAAAlC,OAAAwB,QAAAG,YACAzD,WAAA+E,YACAjD,OAAA05B,eAKA,IAHA4hD,SAMAt7E,OAAAwB,QAAAG,UAAAuqB,UAAA,CAEA,IAAAzf,OAmKA,SAAA8F,SACA,OAAAA,QAAA0G,KAAA,uBAAA5Z,OAAAkT,QAAA0G,KAAA,iBAAA5Z,OAAAkT,QAAA0G,KAAA,YAAA5Z,OApKAk8E,CAAAhpE,SACA,IAAAipE,SAAAhpE,MAAAjC,KACAkrE,UAuCA,KADAC,MADAp5E,MArCAsI,MAsCApI,QAAA,MAKA,QAHAF,MAAAmD,UAAAi2E,KAAA,GAvCAjiD,QAAA,EAEAgiD,SAAAjzD,SAAA,oBACAiR,QAAA,GAGA,IAAAkiD,MAAA,MAmFA,SAAAH,SAAAC,SAAAhiD,QACA,IAAAjC,SAAA,EAEA,OAAAgkD,U,IACA,aACAl7D,aAAAY,sBAAAlhB,OAAAs4B,mBAEAd,SAAA,GAEAx3B,OAAAw5B,WAAA,GAAAC,QAAA,GAAA,EAAAA,QACA,M,IACA,uCACA,IAAAz5B,OAAAwlC,aAAAv3B,EAAA,YAAA+tB,SAAA,eAEAh8B,OAAAk6B,iBAAA,GAAA,IAEA5Z,aAAAY,sBAAAlhB,OAAA0tC,uBAEAlW,SAAA,GAEAx3B,OAAAytC,sBAAA,GAAAhU,QAAA,GAAA,EAAAA,SAEA,M,IACA,YACAz5B,OAAAwiC,gBAGAxiC,OAAAgiC,wBACAxK,QAAAx3B,OAAAwjC,sBAAAE,kBAHAlM,SAAA,EAMAx3B,OAAA6jC,mBAAA,GAAApK,QAAA,GAAA,EAAAA,QACA,M,IACA,kBACAz5B,OAAAuzC,gBAAA,GAAA9Z,QAAA,GAAA,EAAAA,QAKAgiD,UAEA/6E,SAAA,WACAk7E,SAAAH,SAAAjkD,UACA,KA9HAqkD,CAAAL,SAAAC,SAAAhiD,SAEAqiD,KAAA,MAgIA,SAAAN,SAAAC,UACA,OAAAD,U,IACA,aACAO,qBAAA/7E,OAAAw6B,YACA,M,IACA,uCACAuhD,qBAAA/7E,OAAAwB,QAAAG,UAAAupB,WAAA0iB,SACA,M,IACA,YACAmuC,qBAAA/7E,OAAAqkC,WACA,M,IACA,kBACA03C,qBAAA/7E,OAAAwzC,iBACA,M,QAEA,OAEAioC,UACA/6E,SAAA,WACAk7E,SAAAH,UAAA,IACA,GApJAn0B,CAAAk0B,SAAAC,YAEA,EAAAhvE,QAAAgtB,UAEA9uB,MAAA8qC,iBAEAhc,OAGAz5B,OAAAiR,WAAAY,QAAAqpE,gBAAAS,MAAAG,MAFA97E,OAAAiR,WAAAY,QAAA2oE,iBAAAmB,MAAAG,UASA,SAAAF,SAAAt5E,KAAAk1B,UAwBA,SAAAl1B,KAAAk1B,SACAA,SAQAl1B,KAAAkmB,SAAA,UACAxoB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,iBAAA,GAEA9B,KAAAkmB,SAAA,aACAxoB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,iBAAA,GAEA9B,KAAAkmB,SAAA,YACAxoB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,iBAAA,GAEA9B,KAAAkmB,SAAA,eACAxoB,OAAAgE,aAAAG,aAAA,EACA7B,KAAAkmB,SAAA,aACAxoB,OAAAgE,aAAAI,gBAAA,KAGA9B,KAAAkmB,SAAA,eACAxoB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,iBAAA,GAEA9B,KAAAkmB,SAAA,eACAxoB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,iBAAA,GAEA9B,KAAAkmB,SAAA,WACAxoB,OAAAgE,aAAAG,aAAA,EACAnE,OAAAgE,aAAAI,iBAAA,KAnCApE,OAAAgE,aAAAG,aAAAg3E,YACAn7E,OAAAgE,aAAAI,gBAAAg3E,eACAp7E,OAAAgE,aAAAM,aAAA+C,YACA3G,SAAA40C,OAAAt1C,OAAAgE,aAAAM,aAAA+C,YACArH,OAAAgE,aAAAM,aAAAgD,QAAA+zE,iBA7BAW,CAAA15E,KAAAk1B,SACAA,SACAx3B,OAAAgD,KAAAV,MAGA,SAAAy5E,qBAAAjtE,MACAA,KAAAC,eACAd,EAAA,YAAAe,YAAA,WACAf,EAAA,iBAAAe,YAAA,gBAXAhP,OAAA0K,IAAA,WAAA4vE,iCChwBAp9E,QAAAC,OAAA,iBAAA,I,QACA,yBAAA,wBAqDA,MAAA,CACA8+E,gBAAAC,aACAC,gBAAAD,UACAE,oBAAAF,qBACAG,oBAAAH,WACAI,oBAAAJ,UACAK,wBAAAL,eACAM,WAAAN,aACAO,WAAAP,UACAQ,eAAAR,wB,UAIA,kBAAA,CACA,WAAA,yBAAA,SAAAx7E,SAAAi8E,qCAGA,MAAA,CACAxqE,SAAA,IACAC,QAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAyT,MAEA,IAAA22D,QAEAl8E,SAAA,gBAGA2B,KAFAu6E,QAAA7lE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,OAGAF,QAAAlvD,OAAAivD,uBAAAV,gBACAhuE,EAAAsE,SAAAwqE,UAAAJ,uBAAAN,oBAAA,CAAAW,sBAAA,MAGA,U,UAQA,sBAAA,CACA,WAAA,yBAAA,SAAAt8E,SAAAi8E,qCAGA,MAAA,CACAxqE,SAAA,IACAC,QAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAyT,MAEA,IAAA22D,QAEAl8E,SAAA,gBAGA2B,KAFAu6E,QAAA7lE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,OAGAF,QAAAlvD,OAAAivD,uBAAAP,oBACAnuE,EAAAsE,SAAAwqE,UAAAJ,uBAAAJ,wBAAA,CAAAS,sBAAA,MAEA,U,UAQA,kBAAA,CACA,WAAA,yBAAA,SAAAt8E,SAAAi8E,qCAGA,MAAA,CACAxqE,SAAA,IACAC,QAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAyT,MAEA,IAAA22D,QAEAl8E,SAAA,gBAGA2B,KAFAu6E,QAAA7lE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,OAGAF,QAAAlvD,OAAAivD,uBAAAR,gBACAluE,EAAAsE,SAAAwqE,UAAAJ,uBAAAL,oBAAA,CAAAU,sBAAA,MAEA,UC1IA,IAAAhsC,IAAAA,KAAA,GAkCA,SAAAisC,UAAA91E,oBAEA,IAGA+1E,EAKA,OAPA/1E,QADA,mBAAAA,QAAAjK,QAAA+U,YAAA9K,YAEAA,OAAA,IAAAA,MAAA9H,WAEA,OADA69E,EAAAhgF,QAAAigF,YAAA,GAAAh2E,SACA,MAAA+1E,GAAA,UAAAA,GAAA,OAAAA,GAAA,MAAAA,GAAA,OAAAA,GAvCAlsC,IAAAC,GAAAD,IAAAC,IAAA,GACAD,IAAAC,GAAAC,SAAAF,IAAAC,GAAAC,UAAA,GAMAh0C,QAAAgF,yBAAA,SAAA6T,kBAEA,OAAA7Y,QAAA+U,YAAA8D,MAAA,OAAAA,KAAA,KAAAA,KAAA,IAAAA,IAAA1W,QAGA+9E,OAAA1vD,OAAA,wBAMA,IAAA2vD,UAAAC,UAAA,GAEA,IAAApgF,QAAA+U,YAAAorE,WAAA,CAGA,IAAA,IAAAp1E,EAAA,EAAAA,EAAAq1E,UAAAj+E,OAAA4I,IAGA,IAAAs1E,MAAA,IAAAC,OAAA,OAAAv1E,EAAA,GAAA,MAAA,MACAo1E,UAAAA,UAAAxxE,QAAA0xE,MAAAD,UAAAr1E,IAGA,OAAAo1E,YAgBArsC,IAAAC,GAAAC,SAAAC,cACA,SAAAupB,WAAApjC,oBAEA,OAAA,WACA,MAAA,CACA/mB,KAAAmqD,WAAAnqD,KACAktE,eAAAnmD,OAAA,GACAmM,kBAAAi3B,WAAAj3B,mBAAA,gDAAAi3B,WAAAnqD,KACAmzB,eAAAg3B,WAAAh3B,eACA6M,qBAAAmqB,WAAAnqB,sBAAA,gDAAAmqB,WAAAnqD,KACAugC,iBAAA4pB,WAAA5pB,iBACA4sC,kBAAAhjB,WAAAgjB,oBAAA,KAMA1sC,IAAAC,GAAAC,SAAAysC,gCAAA,SAAAC,eAAAntC,SAAAl+B,QAAAC,6BAGA,IAEAqrE,aAEAC,wBAsBAC,gBApBA,SAAAC,eACA/vE,EAAA,UAAA2vE,eAAA,IAAAC,cAAA9qE,KAAA,QAAA,qCAGA,SAAAkrE,cACAhwE,EAAA,UAAA2vE,eAAA,IAAAC,cAAA9qE,KAAA,QAAA,6BAGA,SAAAmrE,eACAjwE,EAAA,UAAA2vE,eAAA,IAAAC,cAAA9qE,KAAA,QAAA,qCAMAjP,WAJA,WACAmK,EAAA,UAAA2vE,eAAA,IAAAC,cAAA9qE,KAAA,QAAA,8BAGA,UArBA1Q,IAAAmQ,eAAA2rE,UAEAN,aAAArrE,eAAA2rE,QAAAtH,MAAA,KAAAuH,KAAA,MAEAN,wBAAA7vE,EAAA,IAAA2vE,eAAA,IAAAC,eAoBAQ,OAAA5tC,UAGA6tC,eAAArwE,EAAAsE,SAEAk+B,UACAl+B,QAAAwiB,SAAA,oBACA+oD,wBAAA/qE,KAAA,QAAA,qCAEAurE,eAAA7+E,KAAA,mBAEAs+E,gBAAAhnE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,KAEA/2D,MAAA0xD,KAAA,QAAAuG,cACAD,gBAAAh4D,MAAA0xD,KAAA,OAAAwG,cAEAK,eAAA7+E,KAAA,sBACAs+E,gBAAAhnE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,KAEAyB,KAAA9G,KAAA,QAAAyG,eAGA3rE,QAAAklE,KAAA,QAAAuG,cACAzrE,QAAAklE,KAAA,OAAAwG,gBAKA1rE,QAAAvD,YAAA,oBACA8uE,wBAAA/qE,KAAA,QAAA,6BAEAurE,eAAA7+E,KAAA,mBAEAs+E,gBAAAhnE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,KAEA/2D,MAAAy4D,OAAA,QAAAR,cACAD,gBAAAh4D,MAAAy4D,OAAA,OAAAP,cAEAK,eAAA7+E,KAAA,sBACAs+E,gBAAAhnE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,KAEAyB,KAAAC,OAAA,QAAAN,eAGA3rE,QAAAisE,OAAA,QAAAR,cACAzrE,QAAAisE,OAAA,OAAAP,iBAOAjtC,IAAAC,GAAAC,SAAAutC,kCAAA,SAAAb,eAAAx8C,gBAAA7uB,QAAAC,+BAGA,IAEAqrE,aAEAC,wBAEA,SAAAY,eACAzwE,EAAA,YAAA2vE,eAAA,IAAAC,cAAA9qE,KAAA,QAAA,qCAGA,SAAA4rE,cACA1wE,EAAA,YAAA2vE,eAAA,IAAAC,cAAA9qE,KAAA,QAAA,kCAXA1Q,IAAAmQ,iBAAA2rE,UAEAN,aAAArrE,iBAAA2rE,QAAAtH,MAAA,KAAAuH,KAAA,KAEAN,wBAAA7vE,EAAA,IAAA2vE,eAAA,IAAAC,aAAA,QAUAS,iBAAArwE,EAAAsE,SAEA6uB,iBACA7uB,QAAAwiB,SAAA,sBACA+oD,wBAAA/qE,KAAA,QAAA,qCAEAurE,iBAAA7+E,KAAA,kBAAA6+E,iBAAA7+E,KAAA,uBACAs+E,gBAAAhnE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,KAEA/2D,MAAA0xD,KAAA,QAAAiH,cACAX,gBAAAh4D,MAAA0xD,KAAA,OAAAkH,eAEApsE,QAAAklE,KAAA,QAAAiH,cACAnsE,QAAAklE,KAAA,OAAAkH,gBAMApsE,QAAAvD,YAAA,sBACA8uE,wBAAA/qE,KAAA,QAAA,6BAEAurE,iBAAA7+E,KAAA,kBAAA6+E,iBAAA7+E,KAAA,uBACAm/E,iBAAA7nE,MAAA8lE,eAAA5uE,EAAAsE,QAAA,IAAAwE,MAAA+lE,KAEA/2D,MAAAy4D,OAAA,QAAAE,cACAE,iBAAA74D,MAAAy4D,OAAA,OAAAG,eAEApsE,QAAAisE,OAAA,QAAAE,cACAnsE,QAAAisE,OAAA,OAAAG,iBAOA3tC,IAAAC,GAAAC,SAAA2tC,8BAAA,SAAAtsE,QAAAC,MAAAssE,QAAAxsE,oBAGAC,QAAAvD,YAAA,gBACAuD,QAAAvD,YAAA,kBACAuD,QAAAvD,YAAA,yBAEA,IAAA+vE,OAAA,GAKA,GAAA,EAAAzsE,MAAAs5C,sBAAAvsD,OAEA,IAAA,IAMA2/E,cANA/2E,EAAA,EAAAA,GAAAqK,MAAAs5C,sBAAAvsD,OAAA,EAAA4I,IAEAuK,MAAAjC,OAAA+B,MAAAs5C,sBAAA3jD,GAAAsI,OACAgC,QAAAwiB,SAAA,yBACAxiB,QAAAwiB,SAAA,gBAEAiqD,cAAA1sE,MAAAs5C,sBAAA3jD,GACA82E,QAAA,uCAAAC,cAAAt3D,IAAA,SAEAnV,QAAA+jB,KAAA,CACA7Z,QAfAsiE,OAgBAxoD,SAAA,CACA0oD,SAAAhxE,EAAA5M,QACA69E,GAAA,cACAvH,GAAA,YACAwH,UAAA,WACA3oD,OAAA,CAAAC,EAAA,EAAA2oD,QAAA,IAEAv/E,KAAA,CAAAkiD,MAAA,GACAvwC,KAAA,CAAA6tE,OAAA,GACAtkE,MAAA,CAAA2b,QAAA,+BAQA,GAAA,EAAApkB,MAAAgtE,wBAAAjgF,OAEA,IAAA,IAOAkgF,cAPAz3E,EAAA,EAAAA,GAAAwK,MAAAgtE,wBAAAjgF,OAAA,EAAAyI,IAEA0K,MAAAjC,OAAA+B,MAAAgtE,wBAAAx3E,GAAAyI,OAEAgC,QAAAwiB,SAAA,yBACAxiB,QAAAwiB,SAAA,kBAEAwqD,cAAAjtE,MAAAgtE,wBAAAx3E,GACAi3E,QAAA,yCAAAQ,cAAA73D,IAAA,SAEAnV,QAAA+jB,KAAA,CACA7Z,QA9CAsiE,OA+CAxoD,SAAA,CACA0oD,SAAAhxE,EAAA5M,QACA69E,GAAA,cACAvH,GAAA,YACAwH,UAAA,WACA3oD,OAAA,CAAAC,EAAA,EAAA2oD,QAAA,IAEAv/E,KAAA,CAAAkiD,MAAA,GACAvwC,KAAA,CAAA6tE,OAAA,GACAtkE,MAAA,CAAA2b,QAAA,4BAMAooD,QAAAvsE,QAAAusE,CAAAxsE,QAKA0+B,IAAAC,GAAAC,SAAAsuC,sCAAA,SAAAjtE,QAAAC,MAAAssE,QAAAxsE,oBAGAC,QAAAvD,YAAA,gBACAuD,QAAAvD,YAAA,kBACAuD,QAAAvD,YAAA,yBAEA,EAAAsD,MAAAs5C,sBAAAvsD,QACAkT,QAAAwiB,SAAA,yBACAxiB,QAAAwiB,SAAA,gBAEAxiB,QAAA+jB,KAAA,CACA7Z,QAAA,WAGA,IAFA,IAAAsiE,OAAA,GAEA92E,EAAA,EAAAA,GAAAqK,MAAAs5C,sBAAAvsD,OAAA,EAAA4I,IAIA82E,QAAA,uCAFAzsE,MAAAs5C,sBAAA3jD,GAEAyf,IAAA,SAIA,OAAAq3D,QAEAxoD,SAAA,CACA0oD,SAAAhxE,EAAA5M,QACA69E,GAAA,cACAvH,GAAA,YACAwH,UAAA,WACA3oD,OAAA,CAAAC,EAAA,EAAA2oD,QAAA,IAEAv/E,KAAA,CAAAkiD,MAAA,GACAvwC,KAAA,CAAA6tE,OAAA,GACAtkE,MAAA,CAAA2b,QAAA,0BAIA,EAAApkB,MAAAgtE,wBAAAjgF,SACAkT,QAAAwiB,SAAA,yBACAxiB,QAAAwiB,SAAA,kBAEAxiB,QAAA+jB,KAAA,CACA7Z,QAAA,WAGA,IAFA,IAAAsiE,OAAA,GAEA92E,EAAA,EAAAA,GAAAqK,MAAAgtE,wBAAAjgF,OAAA,EAAA4I,IAIA82E,QAAA,yCAFAzsE,MAAAgtE,wBAAAr3E,GAEAyf,IAAA,SAIA,OAAAq3D,QAEAxoD,SAAA,CACA0oD,SAAAhxE,EAAA5M,QACA69E,GAAA,cACAvH,GAAA,YACAwH,UAAA,WACA3oD,OAAA,CAAAC,EAAA,EAAA2oD,QAAA,IAEAv/E,KAAA,CAAAkiD,MAAA,GACAvwC,KAAA,CAAA6tE,OAAA,GACAtkE,MAAA,CAAA2b,QAAA,4BAIAooD,QAAAvsE,QAAAusE,CAAAxsE,QAKA0+B,IAAAC,GAAAC,SAAAuuC,oCAAA,SAAA7B,eAAA8B,yBAAAntE,QAAAC,YAAAF,MAAAwsE,sBAGA,IAAAjB,aAAArrE,YAAA2rE,QAAAtH,MAAA,KAAAuH,KAAA,KACAE,YAAArwE,EAAAsE,SAEAotE,yBAAAziF,QAAAqV,QACA,YAAAqrE,eAAA,IAAAC,aAAA,6EACAD,eACA,sEACAA,eAAA,IAAAC,aAAA,iDACA6B,yBAAA,2BAEApB,YAAA7+E,KAAA,iBACA8S,QACA+rE,YAAA7+E,KAAA,qBACAwO,EAAAsE,QAAA,IAAAmiB,SACA4pD,YAAA7+E,KAAA,mBACAwO,EAAAsE,QAAA,IAAA0tB,QAAA,iBACAq+C,YAAA7+E,KAAA,uBACAwO,EAAAsE,QAAA,IAAA0tB,QAAA,qBAKA,GADA2/C,YAAArtE,QAAAstE,SAAA,wBACAxgF,OACAugF,YAEArtE,SAdAutE,MAAAH,0BAiBAb,QAAAa,yBAAAb,CAAAxsE,OACAqtE,yBAAAnuE,QAKAw/B,IAAAC,GAAAC,SAAA6uC,sCAAA,SAAAnC,eAAA8B,yBAAAntE,QAAAC,YAAAF,MAAAwsE,sBAGA,IAAAjB,aAAArrE,YAAA2rE,QAAAtH,MAAA,KAAAuH,KAAA,KACAE,YAAArwE,EAAAsE,SAEAotE,yBAAAziF,QAAAqV,QACA,YAAAqrE,eAAA,IAAAC,aAAA,iFACAD,eACA,0EACAA,eAAA,IAAAC,aAAA,mDACA6B,yBAAA,2BAGApB,YAAA7+E,KAAA,iBACA8S,QACA+rE,YAAA7+E,KAAA,qBACAwO,EAAAsE,QAAA,IAAAmiB,SACA4pD,YAAA7+E,KAAA,mBACAwO,EAAAsE,QAAA,IAAA0tB,QAAA,iBACAq+C,YAAA7+E,KAAA,uBACAwO,EAAAsE,QAAA,IAAA0tB,QAAA,qBAKA,GADA2/C,YAAArtE,QAAAstE,SAAA,wBACAxgF,OACAugF,YAEArtE,SAdAutE,MAAAH,0BAiBAb,QAAAa,yBAAAb,CAAAxsE,OACAqtE,yBAAAnuE,QAKAw/B,IAAAC,GAAAC,SAAA8uC,+BAAA,SAAAztE,QAAAC,MAAAF,MAAAwsE,sBAGA,IAAAR,eAAArwE,EAAAsE,SAEAA,QAAAypB,SAAA,kBACAzpB,QAAAvD,YAAA,gBACAuD,QAAAvD,YAAA,kBACAuD,QAAAvD,YAAA,2BAGAsvE,eAAA7+E,KAAA,qBACA8S,QAAAmiB,SAAAmrD,WAUAttE,QAAAmiB,SAAAS,YAVAxF,KAAA,WACA,IAAAswD,MAAAhyE,EAAAiG,MAEA+rE,MAAAjkD,SAAA,kBACAikD,MAAAhzC,SAGA6xC,SAAAA,CAAAxsE,UAmBA0+B,IAAAC,GAAAC,SAAAgvC,mBAAA,GACAlvC,IAAAC,GAAAC,SAAAivC,oBAAA,GACAnvC,IAAAC,GAAAC,SAAAkvC,oBAAA,GACApvC,IAAAC,GAAAC,SAAAmvC,uBAAA,GACArvC,IAAAC,GAAAC,SAAAovC,sBAAA,GACAtvC,IAAAC,GAAAC,SAAAqvC,sBAAA,GAGA,IAAAC,sCAFAxvC,IAAAC,GAAAC,SAAAuvC,oBAAA,IAGAC,sCAAA,EACAC,sCAAA,EACAC,yCAAA,EACAC,2CAAA,EACAC,iDAAA,EACAC,8CAAA,EACAC,6CAAA,EAGA,SAAAC,qBAAAC,OAAA5uE,oBAEA,OAAA2qE,UAAA3qE,MAAAkjE,MAAA0L,SAGAhkF,QAAAC,OAAA,eAAA,I,QACA,eAAA,CACA,aAAA,SAAAe,YAKA,SAAA0zC,2BAAAt/B,oBAGA,IAAA,IAYAooD,WAZAymB,GAAA7uE,MAAA8uE,YAAAD,GAAAA,GAAAA,GAAAE,cACAzvC,2BAAAuvC,IAGA,GAAAjkF,QAAAgF,yBAAAoQ,MAAAgvE,kBACA,OAAA,EAIAhvE,MAAA6H,WAAA,sCAAA,IACA7H,MAAA6H,WAAA,sCAAA,IAKA7H,MAAAs5C,sBAAA,GAMA,IAHA,IAAA21B,WAFAjvE,MAAAgtE,wBAAAjgF,OAAA,IAGAmiF,gBAAA,GAEAv5E,EAAA,EAAAA,GAAAqK,MAAAgvE,iBAAAjiF,OAAA,EAAA4I,IAGAs5E,UAAA,EAGA,KALA7mB,WAAApoD,MAAAgvE,iBAAAr5E,IAKAuK,MAAAhF,OAAAnO,cAIAgD,KAFAm/E,gBAAA9mB,WAAA+mB,YAAAC,mBAGAF,gBAAA/wC,WACAn+B,MAAAs5C,sBAAA3tD,KAAAujF,iBACA9mB,WAAAloD,MAAAhF,OAAAvP,KAAAujF,sBAEAn/E,IAAAq4D,WAAAloD,MAAAqjE,YAAA2B,cACA9c,WAAAloD,MAAAqjE,YAAA2B,aAAAgK,gBAAAjxE,MAAA,GAGAgxE,UAAA,GAIAA,eAGAl/E,KAFAm/E,gBAAA9mB,WAAA+mB,YAAAE,qBAGAH,gBAAApgD,aACA9uB,MAAAgtE,wBAAArhF,KAAAujF,iBACA9mB,WAAAloD,MAAAovE,SAAA3jF,KAAAujF,mBAUA,OAHAlvE,MAAA6H,WAAA,wCAAA,IACA7H,MAAA6H,WAAA,wCAAA,IAEA,IAAA7H,MAAAs5C,sBAAAvsD,OAGA,OArEAnB,WAAA6yB,iBAAA,GACA7yB,WAAA2jF,kBAAA,GAoEA,CACA3gE,mBAAA,wBAKA,IAFA,IAAAsW,SAAA,EAEAvvB,EAAA,EAAAA,GAAA/J,WAAA6yB,iBAAA1xB,OAAA,EAAA4I,IACA,IAAAu5E,gBAAA5vC,2BAAA1zC,WAAA6yB,iBAAA9oB,GAAAqK,OACAklB,QAAAA,SAAAgqD,gBAGA,OAAAhqD,SAEAoa,2BAAAA,2BACAnvB,mBAAA,SAAAnQ,MAAAozB,mBAMA,IAHA,IAAAo8C,UAAA,EAGA75E,EAAA,EAAAA,GAAA/J,WAAA6yB,iBAAA1xB,OAAA,EAAA4I,IACA,GAAA/J,WAAA6yB,iBAAA9oB,GAAA85E,UAAAzvE,MAAA0vE,IAAA,CACAF,UAAA,EACA,MAIA,GAAAA,SAAA,CACA5jF,WAAA6yB,iBAAA9yB,KAAA,CAAA8jF,QAAAzvE,MAAA0vE,IAAA1vE,MAAAA,MAAAozB,KAAAA,OAEA,IAAA,IAAAy7C,GAAA7uE,MAAA8uE,YAAAD,GAAAA,GAAAA,GAAAE,cACAnjF,WAAA6yB,iBAAA9yB,KAAA,CAAA8jF,QAAAZ,GAAAa,IAAA1vE,MAAA6uE,GAAAz7C,KAAAA,SAIA7kB,sBAAA,wBAEA3iB,WAAA6yB,iBAAA,IAGA5M,oBAAA,WACAjmB,WAAAic,WAAA,sCAAA,S,UAMA,iBAAA,CAAA,eAAA,WAAA,WAAA,SAAAmG,aAAAskB,SAAAlkC,UAEA,MAAA,CACAyR,SAAA,IACAC,QAAA,UACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAAyT,mBAEA,IAIAoM,MAEA4vD,cANAh8D,MAAA,KAAAzT,MAAA0vE,iBAEA1vE,MAAAqjE,YAAA5vD,KAEAoM,MAAA7f,MAAA2rE,QAEA8D,cAAA3vE,MAAAkjE,MAAAhjE,MAAA0vE,gBAgDA5vE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA0xE,cAAA1xE,KAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UA9CA,WAEA,MAAA,CACAC,eAAA,WAEA,QAAAr/E,IAAA4/E,cAAAv+C,eAAA,CAEA,IAAA+5C,WAAAwE,cAAAxE,eAEA0E,aAAA7vE,MAAAkjE,MAAAnjD,OACA+vD,WAAAH,cAAAv+C,eAAAy+C,aAAA1E,YAEA,GAAAvgF,QAAAmlF,SAAAD,aAAAllF,QAAAolF,WAAAF,WAAA59E,MAAA,CAEA,IAAAk0C,SAAAv6C,GAAAiwC,QAOA,OANAg0C,WAAA59E,KAAA,WACAk0C,SAAA96C,QAAA,KACA,WACA,IAAAujB,MAAA,CAAA5Q,KAAA0xE,cAAA1xE,KAAA8hB,MAAAA,MAAA3K,IAAAu6D,cAAAx+C,kBAAAgN,UAAA,GACAiI,SAAA34C,OAAAohB,SAEAu3B,SAAApK,QACA,OAAA8zC,gBAAA,EAEA,CAAA7xE,KAAA0xE,cAAA1xE,KAAA8hB,MAAAA,MAAA3K,IAAAu6D,cAAAx+C,kBAAAgN,UAAA,KAGAkxC,iBAAA,WAEA,QAAAt/E,IAAA4/E,cAAAnxC,iBAAA,CAEA,IAAA2sC,eAAAwE,cAAAxE,eAEA0E,aAAA7vE,MAAAkjE,MAAAnjD,OAIA,OAHA4vD,cAAAnxC,iBAAAqxC,aAAA1E,qBAGA,EACA,CAAAltE,KAAA0xE,cAAA1xE,KAAA8hB,MAAAA,MAAA3K,IAAAu6D,cAAA1xC,qBAAAnP,YAAA,OAQAmhD,SAAA,MAkDA5kF,WAAA,CAAA,SAAA,WAAA,SAAA,SAAAqC,OAAA01E,SAAAC,qBAGA31E,OAAAshF,iBAAAthF,OAAAshF,kBAAA,GACAthF,OAAA4rD,sBAAA5rD,OAAA4rD,uBAAA,GACA5rD,OAAAs/E,wBAAAt/E,OAAAs/E,yBAAA,GAEAh/D,aAAAmC,mBAAAziB,QAEA21E,OAAA6M,YAAA,GACA7M,OAAAnoE,OAAA,GACAmoE,OAAAiM,SAAA,GAEAjM,OAAAE,YAAA,GAEAF,OAAA1+C,aAAA,EAEA/iB,KAAAuuE,cAAA,SAAA/nB,YACAib,OAAA6M,YAAAvkF,KAAAy8D,aAGA16D,OAAA0K,IAAA,6BAAA,WACA4V,aAAAsxB,2BAAA5xC,UAIAA,OAAA0K,IAAA,wCAAA,YACAxN,QAAA+U,YAAA0jE,OAAA+M,6BAAA1iF,OAAAw1E,MAAAG,OAAA+M,+BAEA,EAAA/M,OAAAnoE,OAAAnO,QACA2xC,IAAAC,GAAAC,SAAAuuC,oCAAA9J,OAAAnoE,OAAA,GAAA+C,KAAAolE,OAAAnoE,OAAA,GAAAka,IAAAguD,SAAAC,OAAA31E,OAAA4kC,UACAoM,IAAAC,GAAAC,SAAAysC,gCAAAhI,OAAAnoE,OAAA,GAAA+C,MAAA,EAAAmlE,SAAAC,SACA,EAAAA,OAAAiM,SAAAviF,SACA2xC,IAAAC,GAAAC,SAAA6uC,sCAAApK,OAAAiM,SAAA,GAAArxE,KAAAolE,OAAAiM,SAAA,GAAAl6D,IAAAguD,SAAAC,OAAA31E,OAAA4kC,UACAoM,IAAAC,GAAAC,SAAAutC,kCAAA9I,OAAAiM,SAAA,GAAArxE,MAAA,EAAAmlE,SAAAC,YAKA31E,OAAA0K,IAAA,sCAAA,WAEAsmC,IAAAC,GAAAC,SAAA8uC,+BAAAtK,SAAAC,OAAA31E,OAAA4kC,UAEA,EAAA+wC,OAAAnoE,OAAAnO,QACA2xC,IAAAC,GAAAC,SAAAysC,gCAAAhI,OAAAnoE,OAAA,GAAA+C,MAAA,EAAAmlE,SAAAC,QAGA,EAAAA,OAAAiM,SAAAviF,QACA2xC,IAAAC,GAAAC,SAAAutC,kCAAA9I,OAAAiM,SAAA,GAAArxE,MAAA,EAAAmlE,SAAAC,QAIAA,OAAAnoE,OAAAnO,OAAA,EACAs2E,OAAAiM,SAAAviF,OAAA,U,UAOA,gBAAA,CAAA,aAAA,eAAA,WAAA,WAAA,SAAAnB,WAAAoiB,aAAAskB,SAAAlkC,UAEA,MAAA,CACAyR,SAAA,IACAtG,SAAA,EACAmvE,UAAA,EACA9iE,SAAA,cACA7F,KAAA,SAAAC,MAAAC,QAAAC,oBAGA,IAEAmwE,eAFAtgF,IAAAmQ,MAAAowE,uBAAAvgF,IAAAmQ,MAAAqwE,qBAEAF,UAAArwE,MAAAgvE,iBAAAjiF,OAAA,EAEAmT,MAAAjC,KAAA,gBAAAoyE,UAAAl3E,WAgCA6G,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,gBAAAoyE,UAAAl3E,WAAA8G,QAAAA,QAAAC,MAAAA,MAAAivE,UA9BA,WAEA,MAAA,CACAC,eAAA,WAEA,QAAAr/E,IAAAmQ,MAAAowE,iBAIA,OAFAtwE,MAAAkjE,MAAAhjE,MAAAowE,kBAGA,CAAAryE,KAAA,gBAAAoyE,UAAAl3E,WAAAic,IAAAlV,MAAAswE,mBAAAryC,UAAA,QADA,GAMAkxC,iBAAA,WAEA,QAAAt/E,IAAAmQ,MAAAqwE,mBAIA,OAFArwE,MAAAqwE,qBAGA,CAAAtyE,KAAA,gBAAAoyE,UAAAl3E,WAAAic,IAAAlV,MAAAuwE,qBAAA3hD,YAAA,QADA,KASAmhD,SAAA,MAIA5kF,WAAA,CAAA,SAAA,WAAA,SAAA,SAAAqC,OAAA01E,SAAAC,qBAGA31E,OAAAshF,iBAAAthF,OAAAshF,kBAAA,GACAthF,OAAA4rD,sBAAA5rD,OAAA4rD,uBAAA,GACA5rD,OAAAs/E,wBAAAt/E,OAAAs/E,yBAAA,GAEAh/D,aAAAmC,mBAAAziB,QAEA21E,OAAA6M,YAAA,GACA7M,OAAAnoE,OAAA,GACAmoE,OAAAiM,SAAA,GAEAjM,OAAAE,YAAA,GAEAF,OAAA1+C,aAAA,EAGAj3B,OAAA0K,IAAA,wCAAA,WACAsmC,IAAAC,GAAAC,SAAA2tC,8BAAAnJ,SAAAC,OAAA/wC,SAAA5kC,UAIAA,OAAA0K,IAAA,sCAAA,WAEAsmC,IAAAC,GAAAC,SAAA2tC,8BAAAnJ,SAAAC,OAAA/wC,SAAA5kC,QACAgxC,IAAAC,GAAAC,SAAA8uC,+BAAAtK,SAAAC,OAAA31E,OAAA4kC,UAGA+wC,OAAAnoE,OAAAnO,OAAA,EACAs2E,OAAAiM,SAAAviF,OAAA,U,UAMA,wBAAA,CAAA,aAAA,eAAA,WAAA,WAAA,SAAAnB,WAAAoiB,aAAAskB,SAAAlkC,UAEA,MAAA,CACAyR,SAAA,IACAtG,SAAA,EACAmvE,UAAA,EACA9iE,SAAA,cACA7F,KAAA,SAAAC,MAAAC,QAAAC,oBAGA,QAAAnQ,IAAAmQ,MAAA/S,WAAA4C,IAAAmQ,MAAAwwE,UAAA,CACA,IAAAC,SAAA/kF,WAAAglF,OAEAC,cAAAl1E,EAAA,mBAAAmxD,OACA6W,cAAA/4E,QAAAqV,QAAA4wE,eAEAF,SAAAzwE,MAAAwwE,WAAA1wE,MAAAkjE,MAAAhjE,MAAA/S,MAEAimC,cAAAd,SAAAqxC,cAAArxC,CAAAq+C,UAEA3iE,aAAAmC,mBAAAwgE,SAAAv9C,eAGAu9C,SAAAv4E,IAAA,wCAAA,WACAsmC,IAAAC,GAAAC,SAAAsuC,sCAAAjtE,QAAAC,MAAAoyB,SAAAq+C,YAIAA,SAAAv4E,IAAA,sCAAA,WACAsmC,IAAAC,GAAAC,SAAAsuC,sCAAAjtE,QAAAC,MAAAoyB,SAAAq+C,YAMA,IAHA,IAAAG,qBAAA,EAGAn7E,EAAA,EAAAA,GAAA/J,WAAA2jF,kBAAAxiF,OAAA,EAAA4I,IACA,GAAA/J,WAAA2jF,kBAAA55E,GAAA+6E,YAAAxwE,MAAAwwE,UAAA,CACAI,qBAAA,EACA,MAIAA,sBAEAC,cAAAnlF,WAAA6S,OAAA,WACA,OAAAuB,MAAAkjE,MAAAhjE,MAAAwwE,YACA,SAAA91C,SAAAC,eACA9qC,IAAA8qC,UAIAzsC,SAAA,WACA4R,MAAAsC,QAAAuF,WAAA,sCAAA,IACAmG,aAAAY,qBACA5O,MAAAsC,QAAAuF,WAAA,wCAAA,QAIAjc,WAAA2jF,kBAAA5jF,KAAA,CAAA+kF,UAAAxwE,MAAAwwE,UAAAM,WAAAD,uB,UAOA,cAAA,CAAA,eAAA,SAAA/iE,cAWA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,oBAGA,IAGAt9D,KAEAoM,MAEAqvD,eACAC,iBAEA6B,sBACAC,yBAXA,IAAAF,MAAAlkF,SAEAkkF,MAAA,GACAt9D,KAAAs9D,MAAA,GAEAlxD,MAAA7f,MAAA2rE,QAEAuD,kBAAAlvE,MAAA,wBAAAA,MAAAgxE,uBAAAhxE,MAAAixE,2BACA9B,mBAAAnvE,MAAA,yBAEAgxE,sBAAAhxE,MAAAgxE,uBAAAxyC,IAAAC,GAAAC,SAAAgvC,oBAAA,gCACAuD,yBAAAjxE,MAAAixE,yBACAjxE,MAAAkxE,0BAkCApxE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,cAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UAhCA,WAEA,MAAA,CACAC,eAAA,WAEA,IAAAlvE,MAAA7B,UAEA+wE,eAEA,OAAAT,qBAAAzuE,MAAAmxE,eAAArxE,QACA2T,KAAA0wD,SAAA1wD,KAAAqxD,YAEA,CAAA/mE,KAAA,cAAA8hB,MAAAA,MAAA3K,IAAA87D,sBAAA/yC,UAAA,QAHA,GAQAkxC,iBAAA,WAEA,GAAAA,iBAEA,OAAAV,qBAAAzuE,MAAAoxE,kBAAAtxE,QACA2T,KAAA0wD,SAAA1wD,KAAAqxD,YAEA,CAAA/mE,KAAA,cAAA8hB,MAAAA,MAAA3K,IAAA+7D,yBAAAriD,YAAA,QAHA,KAWAmhD,SAAA,U,UAMA,eAAA,CAAA,eAAA,SAAAjiE,cAOA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,oBAGA,IAGAt9D,KAEAoM,MAEAqvD,eACAC,iBAMAkC,uBACAC,0BAfA,IAAAP,MAAAlkF,SAEAkkF,MAAA,GACAt9D,KAAAs9D,MAAA,GAEAlxD,MAAA7f,MAAA2rE,QAEAuD,kBAAAlvE,MAAA,yBAAAA,MAAAqxE,wBAAArxE,MAAAsxE,4BACAnC,mBAAAnvE,MAAA,0BAEAqxE,uBAAArxE,MAAAqxE,wBAAA,iCACAC,0BAAAtxE,MAAAsxE,0BACAtxE,MAAAuxE,2BAEAF,uBAAAzG,OAAA1vD,OAAAm2D,uBAAArxE,MAAAwxE,cACAF,0BAAA1G,OAAA1vD,OAAAo2D,0BAAAtxE,MAAAwxE,cA+BA1xE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,eAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UA7BA,WACA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAT,qBAAAzuE,MAAAyxE,gBAAA3xE,SACA2T,KAAA0wD,SAAA1wD,KAAAqxD,aAAArxD,KAAAqxD,WAAAj4E,OAAAmT,MAAAwxE,cAEA,CAAAzzE,KAAA,eAAA8hB,MAAAA,MAAA3K,IAAAm8D,uBAAApzC,UAAA,QAHA,GAQAkxC,iBAAA,WAEA,GAAAA,iBAEA,OAAAV,qBAAAzuE,MAAA0xE,mBAAA5xE,SACA2T,KAAA0wD,SAAA1wD,KAAAqxD,aAAArxD,KAAAqxD,WAAAj4E,OAAAmT,MAAAwxE,cAEA,CAAAzzE,KAAA,eAAA8hB,MAAAA,MAAA3K,IAAAo8D,0BAAA1iD,YAAA,QAHA,KAWAmhD,SAAA,U,UAKA,eAAA,CAAA,eAAA,SAAAjiE,cAQA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,mCAGA,IAGAt9D,KAEAoM,MAEAqvD,eACAC,iBAIAwC,aAoBAC,uBACAC,0BAjCA,IAAAd,qBAAAlkF,SAEAkkF,qBAAA,GACAt9D,KAAAs9D,qBAAA,GAEAlxD,MAAA7f,MAAA2rE,QAEAuD,kBAAAlvE,MAAA,yBAAAA,MAAA4xE,wBAAA5xE,MAAA6xE,4BACA1C,mBAAAnvE,MAAA,0BAEA8xE,qBAAA9xE,MAAA+xE,sBAAA3D,wCAEAuD,aAAAlD,qBAAAzuE,MAAAgyE,gBAAAlyE,OAIAgyE,sBAAAH,aACA5xE,QAAAklE,KAAA,WAAA,SAAA9sE,OAEA4H,QAAAwD,MAAA1W,QAAAmT,MAAAiyE,cAEA,IAAA95E,MAAAkoB,SACAloB,MAAA8qC,oBAMA2uC,uBAAA5xE,MAAA4xE,wBAAA,iCACAC,0BAAA7xE,MAAA6xE,0BACA7xE,MAAAkyE,2BAEAN,uBAAAhH,OAAA1vD,OAAA02D,uBAAA5xE,MAAAiyE,cACAJ,0BAAAjH,OAAA1vD,OAAA22D,0BAAA7xE,MAAAiyE,cA6BAnyE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,eAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UA3BA,WACA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAyC,cAAAl+D,KAAAqxD,WAAAj4E,OAAAmT,MAAAiyE,aAEA,CAAAl0E,KAAA,eAAA8hB,MAAAA,MAAA3K,IAAA08D,uBAAA3zC,UAAA,QAFA,GAOAkxC,iBAAA,WAEA,GAAAA,iBAEA,OAAAwC,cAAAl+D,KAAAqxD,WAAAj4E,OAAAmT,MAAAiyE,aAEA,CAAAl0E,KAAA,eAAA8hB,MAAAA,MAAA3K,IAAA28D,0BAAAjjD,YAAA,QAFA,KAUAmhD,SAAA,W,UAMA,oBAAA,CAAA,eAAA,SAAAjiE,cAWA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,yBAGA,IAGAt9D,KAEAoM,MAEAqvD,eACAC,iBAMAgD,WACAC,WAMAC,0BACAC,6BAtBA,IAAAvB,WAAAlkF,SAEAkkF,WAAA,GACAt9D,KAAAs9D,WAAA,GAEAlxD,MAAA7f,MAAA2rE,QAEAuD,kBAAAlvE,MAAA,4BAAAA,MAAAuyE,2BAAAvyE,MAAAwyE,+BACArD,mBAAAnvE,MAAA,6BAIA,KAFAyyE,WAAAzyE,MAAA0yE,kBAAArO,MAAA,MAEAx3E,SAEAslF,WAAAM,WAAA,GAAAnwE,WACA8vE,WAAAK,WAAA,GAAAnwE,WAEA+vE,0BAAAryE,MAAAuyE,2BAAA,oCACAD,6BAAAtyE,MAAAwyE,6BACAxyE,MAAA2yE,8BAEAN,0BAAAzH,OAAA1vD,OAAAm3D,0BAAAF,WAAAC,YACAE,6BAAA1H,OAAA1vD,OAAAo3D,6BAAAH,WAAAC,YAgCAtyE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,oBAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UA9BA,WAEA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAT,qBAAAzuE,MAAA4yE,mBAAA9yE,SACA2T,KAAAqxD,WAAAxiE,WAAA6vE,YAAA1+D,KAAAqxD,WAAAxiE,WAAA8vE,YAEA,CAAAr0E,KAAA,oBAAA8hB,MAAAA,MAAA3K,IAAAm9D,0BAAAp0C,UAAA,QAHA,GAQAkxC,iBAAA,WAEA,GAAAA,iBAEA,OAAAV,qBAAAzuE,MAAA6yE,sBAAA/yE,SACAsB,SAAAqS,KAAAqxD,WAAA,IAAAqN,YAAA/wE,SAAAqS,KAAAqxD,WAAA,IAAAsN,YAEA,CAAAr0E,KAAA,oBAAA8hB,MAAAA,MAAA3K,IAAAo9D,6BAAA1jD,YAAA,QAHA,KAWAmhD,SAAA,W,UAMA,0BAAA,CAAA,eAAA,SAAAjiE,cAWA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,oBAGA,IAGAt9D,KAEAoM,MAEAqvD,eACAC,iBAMA2D,yBACAC,4BAfA,IAAAhC,MAAAlkF,SAEAkkF,MAAA,GACAt9D,KAAAs9D,MAAA,GAEAlxD,MAAA7f,MAAA2rE,QAEAuD,kBAAAlvE,MAAA,2BAAAA,MAAA8yE,0BAAA9yE,MAAA+yE,8BACA5D,mBAAAnvE,MAAA,4BAEA8yE,yBAAA9yE,MAAA8yE,0BAAA,mCACAC,4BAAA/yE,MAAA+yE,4BACA/yE,MAAAgzE,6BAEAF,yBAAAlI,OAAA1vD,OAAA43D,yBAAA9yE,MAAAizE,yBACAF,4BAAAnI,OAAA1vD,OAAA63D,4BAAA/yE,MAAAizE,yBAgCAnzE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,0BAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UA9BA,WAEA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAT,qBAAAzuE,MAAAkzE,kBAAApzE,QACA4hC,WAAAjuB,KAAAqxD,aAAA9kE,MAAAizE,wBAEA,CAAAl1E,KAAA,0BAAA8hB,MAAAA,MAAA3K,IAAA49D,yBAAA70C,UAAA,QAHA,GAQAkxC,iBAAA,WAEA,GAAAA,iBAEA,OAAAV,qBAAAzuE,MAAAmzE,qBAAArzE,QACA4hC,WAAAjuB,KAAAqxD,aAAA9kE,MAAAizE,wBAEA,CAAAl1E,KAAA,0BAAA8hB,MAAAA,MAAA3K,IAAA69D,4BAAAnkD,YAAA,QAHA,KAWAmhD,SAAA,U,UAMA,uBAAA,CAAA,eAAA,SAAAjiE,cAWA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,oBAGA,IAGAt9D,KAEAoM,MAEAqvD,eACAC,iBAMAiE,yBACAC,4BAfA,IAAAtC,MAAAlkF,SAEAkkF,MAAA,GACAt9D,KAAAs9D,MAAA,GAEAlxD,MAAA7f,MAAA2rE,QAEAuD,kBAAAlvE,MAAA,2BAAAA,MAAAozE,0BAAApzE,MAAAqzE,8BACAlE,mBAAAnvE,MAAA,4BAEAozE,yBAAApzE,MAAAozE,0BAAA,mCACAC,4BAAArzE,MAAAqzE,4BACArzE,MAAAszE,6BAEAF,yBAAAxI,OAAA1vD,OAAAk4D,yBAAApzE,MAAAuzE,sBACAF,4BAAAzI,OAAA1vD,OAAAm4D,4BAAArzE,MAAAuzE,sBAgCAzzE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,uBAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UA9BA,WAEA,MAAA,CACAC,eAAA,WAEA,GAAAA,eAEA,OAAAT,qBAAAzuE,MAAAwzE,kBAAA1zE,QACAsB,SAAAqS,KAAAqxD,WAAA,KAAA9kE,MAAAuzE,qBAEA,CAAAx1E,KAAA,uBAAA8hB,MAAAA,MAAA3K,IAAAk+D,yBAAAn1C,UAAA,QAHA,GAQAkxC,iBAAA,WAEA,GAAAA,iBAEA,OAAAV,qBAAAzuE,MAAAyzE,qBAAA3zE,QACAsB,SAAAqS,KAAAqxD,WAAA,KAAA9kE,MAAAuzE,qBAEA,CAAAx1E,KAAA,uBAAA8hB,MAAAA,MAAA3K,IAAAm+D,4BAAAzkD,YAAA,QAHA,KAWAmhD,SAAA,U,UAMA,oBAAA,CAAA,eAAA,SAAAjiE,cAQA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,oBAGA,IAGAt9D,KACAoM,MAIA6zD,kBARA,IAAA3C,MAAAlkF,SAEAkkF,MAAA,GACAt9D,KAAAs9D,MAAA,GACAlxD,MAAA7f,MAAA2rE,QAEA3rE,MAAA2zE,oBAAA3zE,MAAA2zE,mBAAA3zE,MAAA2zE,mBAEAD,kBAAA1zE,MAAA4zE,sBAAA,yCAkBA9zE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,oBAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UAhBA,WACA,MAAA,CACAC,eAAA,WAGA,GAFA,EAEA51E,MAAAma,KAAAqxD,YAIA,MAAA,CAAA/mE,KAAA,oBAAA8hB,MAAAA,MAAA3K,IAAAw+D,kBAAAz1C,UAAA,IAEAkxC,iBAAA,WACAzkF,QAAAgF,yBAAA+jB,KAAAqxD,eAIAiL,SAAA,U,UAKA,0BAAA,CAAA,eAAA,SAAAjiE,cASA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,oBAGA,IAGAt9D,KACAoM,MAIA6zD,kBARA,IAAA3C,MAAAlkF,SAEAkkF,MAAA,GACAt9D,KAAAs9D,MAAA,GACAlxD,MAAA7f,MAAA2rE,QAEA3rE,MAAA6zE,6BAAA7zE,MAAA6zE,4BAAA7zE,MAAA8zE,+BAEAJ,kBAAA1zE,MAAA6zE,4BAAA,+CAmBA/zE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,0BAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UAjBA,WACA,IAAA8E,SAAA/zE,MAAAg0E,gCACAC,SAAAxgE,KAAAqxD,WAEA,MAAA,CACAoK,eAAA,WAEA,GADA,IACAp2E,KAAAM,MAAA66E,WAAAn7E,KAAAM,MAAA26E,WAGA,MAAA,CAAAh2E,KAAA,0BAAA8hB,MAAAA,MAAA3K,IAAAw+D,kBAAAz1C,UAAA,IAEAkxC,iBAAA,WACAzkF,QAAAgF,yBAAA+jB,KAAAqxD,eAIAiL,SAAA,U,UAKA,kBAAA,CAAA,eAAA,SAAAjiE,cASA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,oBAGA,IAGAt9D,KAEAoM,MAEAqvD,eACAC,iBAEAuE,kBACAQ,qBAGAC,aAdA,IAAApD,MAAAlkF,SAEAkkF,MAAA,GACAt9D,KAAAs9D,MAAA,GAEAlxD,MAAA7f,MAAA2rE,QAEAuD,kBAAAlvE,MAAA,yBAAAA,MAAAo0E,wBAAAp0E,MAAAq0E,4BACAlF,mBAAAnvE,MAAA,0BAEA0zE,kBAAA1zE,MAAAo0E,wBAAA,iCACAF,qBAAAl0E,MAAAq0E,0BACAr0E,MAAAs0E,2BAEAH,aAAA,IAAAnJ,OAAA,wFAyCAlrE,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,kBAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UAvCA,WAEA,MAAA,CACAC,eAAA,WAEA,GAAAA,iBAAAxkF,QAAAgF,yBAAA+jB,KAAAqxD,YAKA,IAHA,IAAAyP,OAAA9gE,KAAAqxD,WAAAT,MAAA,KAGA5uE,EAAA,EAAAA,GAAA8+E,OAAA1nF,OAAA,EAAA4I,IACA,IAAA0+E,aAAA1P,KAAA8P,OAAA9+E,GAAA6W,QAEA,OADAonE,kBAAA9I,OAAA1vD,OAAAw4D,kBAAAa,OAAA9+E,IACA,CAAAsI,KAAA,kBAAA8hB,MAAAA,MAAA3K,IAAAw+D,kBAAAz1C,UAAA,IAMAkxC,iBAAA,WAEA,GAAAA,mBAAAzkF,QAAAgF,yBAAA+jB,KAAAqxD,YAKA,IAHA,IAAAyP,OAAA9gE,KAAAqxD,WAAAT,MAAA,KAGA5uE,EAAA,EAAAA,GAAA8+E,OAAA1nF,OAAA,EAAA4I,IACA,IAAA0+E,aAAA1P,KAAA8P,OAAA9+E,IAGA,OAFAy+E,qBAAAtJ,OAAA1vD,OAAAg5D,qBAAAK,OAAA9+E,IAEA,CAAAsI,KAAA,kBAAA8hB,MAAAA,MAAA3K,IAAAg/D,qBAAAtlD,YAAA,MASAmhD,SAAA,U,UAIA,2BAAA,CAAA,eAAA,SAAAjiE,cAYA,MAAA,CACAnO,SAAA,IACAC,QAAA,CAAA,iBAAA,WACAC,KAAA,SAAAC,MAAAC,QAAAC,MAAA+wE,MAAAzL,qBAGA,IAKAzlD,MACA1yB,MAEA+hF,eACAC,iBAEAqF,0BACAC,6BAZA,IAAA1D,MAAAlkF,SAEAkkF,MAAA,GACAA,MAAA,GAEAlxD,MAAA7f,MAAA2rE,QACAx+E,MAAA6S,MAAA00E,sBAEAxF,kBAAAlvE,MAAA,qCAAAA,MAAA20E,oCAAA30E,MAAA40E,wCACAzF,mBAAAnvE,MAAA,sCAEAw0E,0BAAAx0E,MAAA20E,oCAAA,uBACAF,6BAAAz0E,MAAA40E,sCAkCA90E,MAAAgvE,iBAAArjF,KAAA,CAAAsS,KAAA,2BAAA8hB,MAAAA,MAAA9f,QAAAA,QAAAC,MAAAA,MAAAivE,UAhCA,WAEA,MAAA,CACAC,eAAA,WACA,GAAAA,iBAEAT,qBAAAzuE,MAAA60E,4BAAA/0E,QACAA,MAAAkjE,MAAA71E,SACA2S,MAAAkjE,MAAAnjD,QAEA,MAAA,CAAA9hB,KAAA,2BAAA8hB,MAAAA,MAAA3K,IAAAs/D,0BAAAv2C,UAAA,IAMAkxC,iBAAA,WACA,GAAAA,mBAEAV,qBAAAzuE,MAAA80E,+BAAAh1E,QACAA,MAAAkjE,MAAA71E,SACA2S,MAAAkjE,MAAAnjD,QAEA,MAAA,CAAA9hB,KAAA,2BAAA8hB,MAAAA,MAAA3K,IAAAu/D,6BAAA7lD,YAAA,MASAmhD,SAAA,UCziDArlF,QAAAC,OAAA,eAAA,IAGAD,QAAAC,OAAA,gB,OACA,kBAAA,WACA,OAAA,SAAAiU,MACA,OAAAgsE,OAAAhsE,MAAAvF,QAAA,YAAA,O,OAGA,MAAA,WACA,OAAA,SAAA07E,KACA,IAAAA,IAAA,MAAA,GAEA,IAMAC,QAAAjiB,KAAA5K,OANAxzD,MAAAogF,IAAA97E,WAAAqT,OAAAjT,QAAA,MAAA,IAEA,GAAA1E,MAAAxH,MAAA,UACA,OAAA4nF,IAKA,OAAApgF,MAAA9H,Q,KACA,GACAmoF,QAAA,EACAjiB,KAAAp+D,MAAA+E,MAAA,EAAA,GACAyuD,OAAAxzD,MAAA+E,MAAA,GACA,M,KAEA,GACAs7E,QAAArgF,MAAA,GACAo+D,KAAAp+D,MAAA+E,MAAA,EAAA,GACAyuD,OAAAxzD,MAAA+E,MAAA,GACA,M,KAEA,GACAs7E,QAAArgF,MAAA+E,MAAA,EAAA,GACAq5D,KAAAp+D,MAAA+E,MAAA,EAAA,GACAyuD,OAAAxzD,MAAA+E,MAAA,GACA,M,QAGA,OAAAq7E,IASA,QALAC,QADA,IAAAA,QACA,GAKAA,SAAA,KAAAjiB,KAAA,MAFA5K,OAAAA,OAAAzuD,MAAA,EAAA,GAAA,IAAAyuD,OAAAzuD,MAAA,KAEA4S,gBCrDA85B,mBACA6uC,YAAAC,UACAxzE,KAAA9S,IAAAsmF,SAAAtmF,IACA8S,KAAAzU,KAAAioF,SAAAjoF,KACAyU,KAAA4T,OAAA4/D,SAAA5/D,OACA5T,KAAAuU,OAAAi/D,SAAAj/D,OACAvU,KAAAyzE,aAAAD,SAAAC,aACAzzE,KAAA5B,MAAAo1E,SAAAp1E,MACA4B,KAAA4kC,gBAAA4uC,SAAA5uC,kBAAA,SAGA8uC,0BACAH,YAAAhoF,MACAyU,KAAA0O,QAAAnjB,KAAAmjB,QACA1O,KAAA2zE,WAAApoF,KAAAqoF,cACA5zE,KAAA6zE,WAAAtoF,KAAAsoF,WACA7zE,KAAA9G,OAAA3N,KAAAw5C,eAAA,GACA/kC,KAAAnH,SAAAtN,KAAAuoF,iBAAA,GACA9zE,KAAA/G,UAAA,EAAA+G,KAAA9G,OAAA/N,OACA6U,KAAArH,YAAA,EAAAqH,KAAAnH,SAAA1N,OACA6U,KAAA+zE,WAAAxoF,KAAAwoF,WACA/zE,KAAAg0E,YAAAzoF,KAAAyoF,YACAh0E,KAAA8kC,KAAAv5C,KAAAu5C,MCnBA,SAAA2N,uBAAAwhC,SACAj0E,KAAAyzC,UAAAwgC,QAAAxgC,UACAzzC,KAAAwzC,gBAAAygC,QAAAzgC,gBACAxzC,KAAAk0E,gBAAAD,QAAAC,gBACAl0E,KAAAqyC,cAAA4hC,QAAA5hC,cACAryC,KAAAwxC,kBAAAyiC,QAAAziC,kBACAxxC,KAAAwyC,YAAAyhC,QAAAzhC,YACAxyC,KAAA+yC,cAAAkhC,QAAAlhC,cACA/yC,KAAAqwC,gBAAA4jC,QAAA5jC,gBACArwC,KAAAwsC,qBAAAynC,QAAAznC,qBACAxsC,KAAAtQ,QAAAukF,QAAAvkF,QACAsQ,KAAAuyB,YAAA0hD,QAAA1hD,YACAvyB,KAAAzN,IAAA0hF,QAAA1hF,IACAyN,KAAAmwC,qBAAA8jC,QAAA9jC,qBACAnwC,KAAAysC,0BAAAwnC,QAAAxnC,0BACAzsC,KAAAm0E,YAAAF,QAAAE,YACAn0E,KAAAo0E,kBAAAH,QAAAG,kBACAp0E,KAAAi0C,oBAAAggC,QAAAhgC,oBACAj0C,KAAAk0C,oBAAA+/B,QAAA//B,oBACAl0C,KAAAq0E,iBAAAJ,QAAAI,iBACAr0E,KAAA0hD,UAAAuyB,QAAAvyB,UACA1hD,KAAAs0E,UAAAL,QAAAK,UACAt0E,KAAA2xC,oBAAAsiC,QAAAtiC,oBACA3xC,KAAAu0E,sBAAAN,QAAAM,sBACAv0E,KAAA6xC,mBAAAoiC,QAAApiC,mBACA7xC,KAAA8xC,0BAAAmiC,QAAAniC,0BACA9xC,KAAAw0E,sBAAAP,QAAAO,sBDHAxrF,QAAAC,OAAA,YAAA,I,QASA,OAAA,CAAA,QAAA,SAAA8C,oBAIA,MAAA,CAQAd,IAAA,SAAAiC,IAAA3B,MAEA,OAEAQ,WAFAoC,IAAA5C,KAEA,CACAqoB,OAAA,MACA1mB,IAAAA,KAIA,CACA0mB,OAAA,MACA1mB,IAAAA,IAAA,IAAA3B,QAWAkpF,KAAA,SAAAvnF,IAAA3B,MAEA,OAAAQ,MAAA,CACA6nB,OAAA,OACA1mB,IAAAA,IACA3B,KAAAA,KACAlB,QAAA,CACAqqF,eAAA,2B,QAOA,aACA,CAAA,QAAA,KAAA,UAAA,sBACA,SAAA3oF,MAAA9B,GAAAoC,QAAAsoF,qBAEA,SAAAC,WAAApB,SAAAqB,gBAAAC,gBAEA,IAAAp8E,UACA8rC,SAAAv6C,GAAAiwC,QA8CA,OArCAnuC,MAAA,CACA6nB,OAAA4/D,SAAA5/D,QAAA,MACA1mB,IAAAsmF,SAAAtmF,IACA3B,KAAAioF,SAAAjoF,KACAgpB,OAAAi/D,SAAAj/D,S,KAEA,SAAAhpB,KAAAD,OAAAjB,QAAAD,SAEAsO,UAAA,IAAAg7E,0BAAAnoF,KAAAA,OAEAwoF,WAEA1nF,QAAA6G,SAAA6hF,OAAAr8E,UAAAs7E,aAIAt7E,UAAAgW,SAEAmmE,iBACAF,oBAAAK,cAAAxB,SAAA96E,UAAApN,OAAAjB,QAAAD,QACAo6C,SAAA96C,QAAAgP,UAAApN,OAAAjB,QAAAD,SAGA0qF,gBACAH,oBAAAM,cAAAzB,SAAA96E,UAAApN,OAAAjB,QAAAD,U,MAMA,SAAAmB,KAAAD,OAAAjB,QAAAD,QAEA0qF,gBACAH,oBAAAO,YAAA1B,SAAAjoF,KAAAA,KAAAD,OAAAjB,QAAAD,UAIAo6C,SAAApK,QAGA,MAAA,CACAmL,0BAAA,SAAAiuC,UAEA,OAAAoB,WAAApB,UAAA,GAAA,IAEA2B,2CAAA,SAAA3B,UAEA,OAAAoB,WAAApB,UAAA,GAAA,IAEA3uC,QAAA,SAAA2uC,UAEA,OAAAoB,WAAApB,UAAA,GAAA,IAEA4B,yBAAA,SAAA5B,UAEA,OAAAoB,WAAApB,UAAA,GAAA,QE/JAxqF,QAAAC,OAAA,iBAAA,IAAAosF,QAAA,gBAAA,CAAA,kBAAA,SAAAzrF,iBACA,IAAA+lB,gBAAA,GACAwmC,WAAA,GAkCA,MAAA,CACAxmC,gBAjCA,SAAAhmB,cAcA,OAbAX,QAAAgF,yBAAArE,gBACAA,aAAAC,gBAAAC,gCAAA,+BAGA,IAAA8lB,gBAAAxkB,SACAwkB,gBAAA,GAAAhmB,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,oBACA+jB,gBAAA,GAAAhmB,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,oBACA+jB,gBAAA,GAAAhmB,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,oBACA+jB,gBAAA,GAAAhmB,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,oBACA+jB,gBAAA,GAAAhmB,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,oBACA+jB,gBAAA,GAAAhmB,aAAAm1D,0BAAAn1D,aAAAiC,mBAAA,qBAGA+jB,iBAoBAwmC,WAjBA,SAAAxsD,cAaA,OAZAX,QAAAgF,yBAAArE,gBACAA,aAAAC,gBAAAC,gCAAA,+BAGA,IAAAssD,WAAAhrD,SACAgrD,WAAA,GAAA,CAAAhhD,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,YACAuqD,WAAA,GAAA,CAAAhhD,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,SACAuqD,WAAA,GAAA,CAAAhhD,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,WACAuqD,WAAA,GAAA,CAAAhhD,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,UACAuqD,WAAA,GAAA,CAAAhhD,IAAA,EAAAlC,MAAAtJ,aAAAiC,mBAAA,UAGAuqD,gBC9BAntD,QAAAC,OAAA,aAAA,IAAAqsF,QAAA,UAAA,WASA,MAAA,CACAC,IAPA,MAQAC,SAPA,WAQAC,SAPA,WAQAC,OAPA,SAQAC,UAPA,e,QASA,eAAA,WAoBA,MAAA,CACA95B,gBAnBA,EAoBA/mC,eAnBA,EAoBA49C,iBAnBA,EAoBA/I,UAnBA,EAoBA3E,UAnBA,EAoBA4wB,WAnBA,EAoBA/vB,YAnBA,EAoBAvrD,6BAnBA,EAoBAC,sBAnBA,EAqBA6zD,eAnBA,GAoBApM,gBAnBA,GAoBA6zB,qCAnBA,GAoBAnhC,0BAnBA,GAoBAnrC,sBAnBA,GAoBA+1D,gCAnBA,GAoBAwW,yBAnBA,GAoBA3jE,gBAnBA,M,QAsBA,oBAAA,CAAA,eAAA,SAAA/lB,cAEA,IACAmpF,IAAA,CADAnpF,aACAyvD,gBADAzvD,aACA0oB,eADA1oB,aACAsmE,iBADAtmE,aACAu9D,UADAv9D,aACA44D,UADA54D,aACAwpF,WADAxpF,aAEAy5D,YAFAz5D,aAEAkO,6BAFAlO,aAEAmO,sBAFAnO,aAEAmd,sBAFAnd,aAGAgiE,eAHAhiE,aAGA41D,gBAHA51D,aAGAypF,qCAHAzpF,aAGAsoD,0BAHAtoD,aAIAkzE,gCAJAlzE,aAIA0pF,0BACAC,QAAA,CALA3pF,aAKAyvD,gBALAzvD,aAKAsmE,iBALAtmE,aAKAkO,6BALAlO,aAKAmO,uBACAk2C,SAAA,CANArkD,aAMAkO,6BANAlO,aAMAmO,uBAaA,MAAA,CACAg7E,IAAAA,IACAQ,QAAAA,QACAC,OAfA,CAPA5pF,aAOAkzE,gCAPAlzE,aAOA0pF,0BAgBAG,UAfA,CARA7pF,aAQA0oB,gBAgBA27B,SAAAA,SACAylC,UAhBA,CATA9pF,aASAsmE,iBATAtmE,aASAu9D,UATAv9D,aASA44D,UATA54D,aASAwpF,WATAxpF,aASAy5D,YATAz5D,aASAgiE,gBAiBA+nB,SAhBAZ,IAiBAa,UAhBAb,IAiBA94B,eAhBA,CAZArwD,aAYAyvD,iBAiBAc,gBAhBA,CAbAvwD,aAaAkO,6BAbAlO,aAaAmO,uBAiBA87E,cAhBA,CAdAjqF,aAcAmO,uBAiBAokD,eAhBA,CAfAvyD,aAeAu9D,UAfAv9D,aAeA44D,UAfA54D,aAeAy5D,aAiBAjH,eAhBA,CAhBAxyD,aAgBAsmE,kBAiBA7T,gBAhBA,CAjBAzyD,aAiBAgiE,gBAiBAkoB,YAhBA,CAlBAlqF,aAkBA+lB,qB,QAkBA,qBAAA,CAAA,eAAA,SAAA/lB,cAEA,MAAA,CACA4I,wBAAA,SAAAuhF,YAAAjiF,WAAAE,WAAAE,SAAAE,YAAAE,SAAA0hF,UAEA,OAAAD,cAAAnqF,aAAAsmE,kBACA6jB,cAAAnqF,aAAAu9D,WACA4sB,cAAAnqF,aAAA44D,WACAuxB,cAAAnqF,aAAAwpF,YACAW,cAAAnqF,aAAAy5D,YAJArxD,WAKA+hF,cAAAnqF,aAAAkO,8BACAi8E,cAAAnqF,aAAAmO,sBADAzF,SAEAyhF,cAAAnqF,aAAAgiE,eAAA55D,YAAA,OAAAgiF,SAAAxnB,iBAAA,EAAAwnB,SAAAxnB,gBACAunB,cAAAnqF,aAAA41D,gBAAAxtD,WACA+hF,cAAAnqF,aAAAkzE,iCACAiX,cAAAnqF,aAAA0pF,0BADAxhF,YAAAM,iBC3GA5L,QAAAC,OAAA,aAAA,IAWAD,QAAAC,OAAA,cAAAosF,QAAA,sBAAA,CAAA,aAAA,SAAArrF,yBAEA,SAAAysF,OAAAhgF,MAAA+8E,SAAA96E,UAAApN,OAAAjB,QAAAD,QAQAJ,WAAAic,WAAA,SAAAxP,MAPA,CACA+8E,SAAAA,SACA96E,UAAAA,UACApN,OAAAA,OACAjB,QAAAA,QACAD,OAAAA,SAIA,MAAA,CACA8qF,YAAA,SAAA1B,SAAA96E,UAAApN,OAAAjB,QAAAD,QACAqsF,OAAA,QAAAjD,SAAA96E,UAAApN,OAAAjB,QAAAD,SAEA6qF,cAAA,SAAAzB,SAAA96E,UAAApN,OAAAjB,QAAAD,QACAqsF,OAAA,SAAAjD,SAAA96E,UAAApN,OAAAjB,QAAAD,SAEA4qF,cAAA,SAAAxB,SAAA96E,UAAApN,OAAAjB,QAAAD,QACAqsF,OAAA,UAAAjD,SAAA96E,UAAApN,OAAAjB,QAAAD,aCxCApB,QAAAC,OAAA,eAAA,I,QACA,UAAA,CAAA,WAAA,SAAAytF,uBAGA,MAAA,CACAC,YAFA,O,QAKA,WAAA,CAAA,QAAA,KAAA,SAAA5qF,MAAA9B,iBAEA,MAAA,MCHAjB,QAAAC,OAAA,gBAAA,CAAA,cAUAD,QAAAC,OAAA,iBAAAosF,QAAA,kBAAA,CAAA,KAAA,aAAA,YAAA,YAAA,SAAAprF,GAAAD,WAAAkC,UAAAumB,WAEA,SAAAhkB,SAEAzE,WAAA4E,gBAAA,EAGA,MAAA,CAEAzE,QAAA,SAAAC,QAMA,IAIAmjB,MAkBA,OA1BAkF,UAAA2uB,OAAAp3C,WAAA4sF,gBACAxsF,OAAAC,QAAAD,OAAAC,SAAA,QAGA8D,IAAAc,QAAAC,MAAA,iBAIAqe,MAAAte,QAAAC,MAAA,gBACA9E,OAAAC,QAAA2B,eAAAuhB,MAEAte,QAAAC,MAAA,eAAAqe,MAAA,CAAAE,QAAAzjB,WAAA0jB,UACA,EAAA1jB,WAAA0jB,UAEA1jB,WAAA4sF,eAAAnkE,UAAA,WAEAhkB,UACAzE,WAAA0jB,WAIA,MAAAxhB,UAAAisB,SACA,IAAAjsB,UAAAisB,OAAA9pB,OAAA,2EACAI,SAGArE,QAAAH,GAAAc,KAAAX,aAcApB,QAAAC,OAAA,iBAAAosF,QAAA,iBAAA,CAAA,KAAA,aAAA,aAAA,YAAA,aAAA,SAAAprF,GAAAD,WAAAu6C,WAAAr4C,UAAA2qF,YAGA,MAAA,CACAzrF,gBAAA,WAEA,IAAAo5C,SAAAv6C,GAAAiwC,QAaA,YAVA/rC,IAFAc,QAAAC,MAAA,iBAIAlF,WAAAoB,iBAAA,EACAo5C,SAAA34C,OAAA,yCAIA7B,WAAAoB,iBAAA,EACAo5C,SAAA96C,QAAA,uCAEA86C,SAAApK,SAEA/sB,MAAA,SAAA7iB,OAAAyD,SAAAqe,gBAEA,IAAAk4B,SAAAv6C,GAAAiwC,QACA3uC,eAAA,CACAurF,UAAAtsF,QAAA,GACAusF,gBAAA9oF,UAAA,GACA+oF,kBAAA1qE,gBAAA,IAEAm4B,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,eACA3B,KAAAA,iBAyBA,OAtBAg5C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAvB,WAAAM,UAAAE,OAAAe,KAAAu5C,KAAAmyC,mBACAjtF,WAAAM,UAAAG,QAAAc,KAAAu5C,KAAAoyC,gBACAltF,WAAAM,UAAAI,SAAAa,KAAAu5C,KAAAqyC,iBACAntF,WAAAM,UAAAK,mBAAAY,KAAAu5C,KAAAsyC,mBACAptF,WAAAM,UAAAM,oBAAAW,KAAAu5C,KAAAuyC,gBACArtF,WAAAM,UAAAO,qBAAAU,KAAAu5C,KAAAwyC,iBAGAT,WAAAU,WAAA,mBAAA,CAAAC,SAAA,cAAAC,MAAAlsF,KAAAu5C,KAAAvyC,MACAiyC,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAGAsrF,WAAAU,WAAA,eAAA,CAAAC,SAAA,cAAAC,MAAAlsF,KAAA2N,OAAA,IAAA,qCACAsrC,SAAA34C,OAAAN,KAAAw5C,iBAIAP,SAAApK,SAEAzrC,UAAA,WAEA,QAAAR,IAAAc,QAAAC,MAAA,gBAEA,OAAAD,QAAAC,MAAA,gBAGAhD,UAAAkC,KAAA,UAaApF,QAAAC,OAAA,iB,QACA,aAAA,CAAA,KAAA,aAAA,iBAAA,aAAA,SAAAgB,GAAAD,WAAAgC,eAAAu4C,YAEA,IAAA/2C,QAEA,SAAAkqF,2BAAAnsF,MAEAA,KAAAu5C,KAAA6yC,SAAApsF,KAAAu5C,KAAA6yC,QAAA/kF,sBAAArH,KAAAu5C,KAAA6yC,QAAA/kF,qBAAAuO,YAKA5V,KAAAu5C,KAAA6yC,QAAA/kF,qBAAAuO,WAAAI,QAAAw3B,OAAA,SAAA73B,MAEA,OAAA3V,KAAAu5C,KAAA6yC,QAAA/kF,qBAAAuO,WAAAO,SAAAinC,IAAA,CAAAnnC,UAAAN,KAAA3O,QAIA,SAAAqlF,uBAAAtqE,gBAEA,IAAAk3B,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,qBAAAogB,eACAiH,OAAA,KAUA,OARAgwB,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAmsF,2BAAAnsF,MACAiC,QAAAjC,KAAAu5C,KAAA6yC,QACAnzC,SAAA96C,QAAA8D,WAGAg3C,SAAApK,QAGA,SAAAy9C,gCAAAtqE,eAAAhgB,SACA,IAAAi3C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACAusF,WAAAvqF,QACAigB,MAAAD,kBAUA,OAPAg3B,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAmsF,2BAAAnsF,MACAiC,QAAAjC,KAAAu5C,KAAA6yC,QACAnzC,SAAA96C,QAAA8D,WAGAg3C,SAAApK,QA4BA,MAAA,CACA5rC,wBAAA,WAEA,IAAA+e,MAAAte,QAAAC,MAAA,gBAEA,QAAAf,IAAAof,MAOA,OAFAvjB,WAAAoB,iBAAA,EAEAmiB,MALAvjB,WAAAoB,iBAAA,GAOAijB,kBAAA,WACA,OAAApf,QAAAC,MAAA,iBAEAyD,wBAAA,WACA,OAAA1D,QAAAC,MAAA,gBAEA2e,gBAAA,SAAAP,MAEA,IAAAk3B,SAAAv6C,GAAAiwC,QAIA,OAHA09C,uBAAAtqE,MAAAhd,KAAA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,QAEAi5C,SAAApK,SAEAwe,oBAAA,SAAArrC,MAAAhgB,SACA,IAAAi3C,SAAAv6C,GAAAiwC,QAIA,OAHA29C,gCAAAtqE,MAAAhgB,SAAA+C,KAAA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,QAEAi5C,SAAApK,SAEAw9C,uBAAAA,uBACAC,gCAAAA,gCACA9xE,wBAAA,SAAAuH,KAAA/f,SAEA,IAAAi3C,SAAAv6C,GAAAiwC,QAIA,OApEA,SAAA5sB,KAAA/f,gBAEA,IAAAi3C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,+BAAAogB,KAAA,IAAA/f,eACAgnB,OAAA,KAUA,OARAgwB,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAmsF,2BAAAnsF,MACAiC,QAAAjC,KAAAu5C,KAAA6yC,QACAnzC,SAAA96C,QAAA8D,WAGAg3C,SAAApK,QAgDA29C,CAAAzqE,KAAA/f,SAAA+C,KAAA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,QAEAi5C,SAAApK,SAEAvqB,oBAAA,SAAAriB,gBAEA,IAAAg3C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,8BAAAM,eAAAuhB,KACAwF,OAAA,KAaA,OAVAgwB,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAEAi5C,SAAA34C,OAAAN,KAAA2N,UAGAsrC,SAAApK,SAEArqB,cAAA,SAAAviB,gBAEA,IAAAg3C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,wBACA3B,KAAAiC,iBAaA,OAVA+2C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAEAi5C,SAAA34C,OAAAN,KAAA2N,UAGAsrC,SAAApK,SAEA5pB,2BAAA,SAAAhjB,gBAEA,IAAAg3C,SAAAv6C,GAAAiwC,MAAA1sC,gBACAi3C,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,qCAAAM,eAAAuhB,KACAwF,OAAA,KAaA,OAVAgwB,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAEAi5C,SAAA34C,OAAAN,KAAA2N,UAGAsrC,SAAApK,SAEA1pB,kCAAA,SAAAljB,gBAEA,IAAAg3C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,4CAAAM,eAAAuhB,KAAA,IAAAvhB,eAAAshB,YACAyF,OAAA,KAaA,OAVAgwB,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAEAi5C,SAAA34C,OAAAN,KAAA2N,UAGAsrC,SAAApK,SAEAxpB,qBAAA,SAAApjB,SAEA,IAAAg3C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAAiC,UAcA,OAXA+2C,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MAEAiC,QAAAjC,KAAAu5C,KACAN,SAAA96C,QAAA8D,UAEA,SAAAjC,MAEAi5C,SAAA34C,OAAAN,KAAA2N,UAGAsrC,SAAApK,SAEA3rB,wBAAA,SAAAwnC,gBAEA,IAAAzR,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,sCACAqnB,OAAA,CACAyjE,UAAA/hC,kBAcA,OAVA1R,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,OAEA,SAAAA,MAEAi5C,SAAA34C,OAAAN,KAAAw5C,iBAGAP,SAAApK,SAEAse,YAAA,SAAAlrD,QAAAyqF,OAEA,IAAAzzC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,sBACA3B,KAAAiC,UA8BA,OA3BAyqF,MAEA1zC,WAAAM,QAAAJ,gBAaAF,WAAAgB,0BAAAd,iBAbAn0C,KACA,SAAA/E,MAEAiC,QAAAjC,KAAAu5C,KAAA6yC,QACAnzC,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAEAi5C,SAAA34C,OAAAN,KAAA2N,UAiBAsrC,SAAApK,SAEAzsB,2BAAA,SAAAI,WAAA9f,SAAAiqF,gBAEA,IAAA1zC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,qCACA3B,KAAA,CACA4sF,WAAApqE,WACAiB,SAAA/gB,SACAmqF,QAAAF,kBAcA,OAVA3zC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MAEAi5C,SAAA96C,QAAA6B,KAAA2N,UAGAsrC,SAAApK,SAEAmc,yBAAA,SAAA/oD,UAEA,IAEA6qF,SAAA,IAAAjhF,KAAAA,KAAAM,MAAAlK,SAAA8qF,gBACAC,UAAA,IAAAnhF,MAAAS,UAEA,OAAA8rB,KAAAynB,OADAitC,SAAAE,UAJA,QAOAlmF,WAnQA,WAEA,OAAA7E,SAkQAma,eAAA,WACA,IAAA68B,SAAAv6C,GAAAiwC,QACAtyB,MAAA5H,KAAA3N,aACAmmF,OAAAx4E,KAAAxR,0BACAiqF,SAAAz4E,KAAAqO,oBAYA,OATArlB,QAAAgF,yBAAA4Z,QAGA5e,QAAAgF,yBAAAwqF,SAAAxvF,QAAAgF,yBAAAyqF,UAHAj0C,SAAA96C,UAIAsW,KAAA44C,oBAAA4/B,OAAAC,UAAAnoF,KAAA,WAAAk0C,SAAA96C,YAKA86C,SAAApK,aCvfApxC,QAAAC,OAAA,iBAAA,I,SACA,WAAA,CAAA,WAEA+W,KAAA04E,KAAA,WACA,MAAA,IAGA14E,KAAAxW,YAAA,SAAAmvF,cACA,IAAAC,OAAAzrF,OAAA+F,SAAA2lF,SAAA,KAAA1rF,OAAA+F,SAAA4lF,SAAA3rF,OAAA+F,SAAA6lF,SACAC,cAAAJ,OAAAK,cAAA3qF,QAAA,eAEA,OADAsqF,OAAArnF,UAAA,EAAAynF,eAAA,aAAAL,iB,SAKA,YAAA,SAAAtvF,kBAAA,OAAAA,mBCfAL,QAAAC,OAAA,mBAAA,I,QACA,iBAAA,CAAA,UAAA,SAAAoD,SAEA,MAAA,CACA6K,eAAA,WAEA,IAEA/B,IAFA+jF,UAAA7sF,QAAA8sF,UAAAD,UACAE,SAAA,CAAAC,OAAA,UAAAC,OAAA,UAAAC,QAAA,WAAAC,GAAA,YACA,IAAArkF,OAAAikF,SACA,GAAAA,SAAAjkF,KAAA4tE,KAAAmW,WACA,OAAA/jF,IAGA,MAAA,UCVAnM,QAAAC,OAAA,gCAAA,CAAA,cAEAD,QAAAC,OAAA,gCAAA,IAAAqsF,QAAA,8BAAA,CAAA,KAAA,aAAA,SAAArrF,GAAAs6C,yBAEA,MAAA,CACAi8B,mBAAA,SAAAnxE,QAAAoqF,WAAA79E,UAAAG,gBACA,IAAAyoC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,kCACA3B,KAAA,CACAmE,QAAAL,QACA8lC,WAAAskD,WACAC,UAAA99E,UACA+9E,QAAA59E,kBASA,OALAwoC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aCjBApxC,QAAAC,OAAA,qBAAA,CAAA,cAUAD,QAAAC,OAAA,qBAAA,IAAAqsF,QAAA,YAAA,CAAA,KAAA,aAAA,UAAA,SAAArrF,GAAAs6C,WAAA93C,sBAEA,MAAA,CACAgU,qBAAA,WACA,IAAA+jC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,8BACA3B,KAAA,KAQA,OALAg5C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAt5B,YAAA,SAAAR,gBACA,IAAAkkC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA+U,iBAQA,OALAikC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aClDApxC,QAAAC,OAAA,qBAAA,CAAA,cAEAD,QAAAC,OAAA,qBAAA,IAAAqsF,QAAA,kBAAA,CAAA,KAAA,aAAA,SAAArrF,GAAAs6C,yBAmBA,MAAA,CACAiW,4BAAA,SAAAnrD,QAAAqnD,WAAAkjC,YAAAC,YAEA,IAAAr1C,SAAAv6C,GAAAiwC,QAcA,OAzBA,SAAAuK,eAAAD,UACAD,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAoBAg1C,CAZA,IAAAp1C,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,2CACA3B,KAAA,CACA27C,YAAA73C,QACA0qF,kBAAArjC,WACAsjC,YAAAJ,YACA9/B,kBAAA+/B,cAIAr1C,UACAA,SAAApK,SAEA4lB,qBAAA,SAAA3wD,QAAA4qF,gBACA,IAAAz1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACAmE,QAAAL,QACA6qF,aAAAD,kBASA,OALA11C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAmwB,sBAAA,SAAAtlB,UAAA/xC,eAAA8xC,aACA,IAAAR,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,gCACA3B,KAAA,CACAiE,YAAAw1C,YACAI,UAAAH,UACAk1C,SAAAjnF,kBASA,OALAqxC,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aC3EApxC,QAAAC,OAAA,qBAAA,CAAA,cAKAD,QAAAC,OAAA,qBAAA,IAAAosF,QAAA,kBAAA,CAAA,KAAA,OAAA,aAAA,SAAAprF,GAAA8d,KAAAw8B,yBAIA,MAAA,CACAyxB,iBAAA,SAAAokB,QAAAp1C,YAAA9vC,KAAAmlF,UAAAt+E,gBAEA,IAAAyoC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACAmE,QAAA0qF,QACA5qF,YAAA,SAAAw1C,YAAA,KAAAA,YACAvvC,KAAA,SAAAP,KAAA,KAAAA,KACAolF,UAAAD,UACAV,QAAA59E,kBAUA,OANAwoC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,QAGAi5C,SAAApK,SAEAg7B,cAAA,SAAAglB,QAAAC,UAAAt+E,gBAEA,IAAAyoC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACAmE,QAAA0qF,QACAE,UAAAD,UACAV,QAAA59E,kBAUA,OANAwoC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,QAGAi5C,SAAApK,SAEA13B,cAAA,SAAAyC,gBAAAC,YAAAxJ,UAAAG,QAAAw+E,YAAAr1E,aAAAwxC,gBAEA,IAAAlS,SAAAv6C,GAAAiwC,QACAsgD,eAAA,CACAC,gBAAAt1E,gBACAotB,YAAAntB,YACAs0E,UAAA99E,UACA+9E,QAAA59E,QACAmrC,YAAAqzC,YACAG,aAAAx1E,aACAy1E,WAAAjkC,gBAGAjS,eAAA,IAAAC,mBAAA,CACA9wB,OAAA,OACA1mB,IAAA,yBACA3B,KAAAivF,iBAQA,OANAj2C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,cACAqvF,aAAArvF,aAAAu5C,KACAN,SAAA96C,QAAAkxF,gBAGAp2C,SAAApK,SAEAs8B,kBAAA,SAAAmkB,KAAAC,gBAEA,IAAAt2C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACAmE,QAAAmrF,KACAE,UAAAD,kBAUA,OANAv2C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,QAGAi5C,SAAApK,aC3GApxC,QAAAC,OAAA,gBAAA,CAAA,c,QACA,cAAA,CAAA,KAAA,aAAA,SAAAgB,GAAAs6C,yBA+FA,MAAA,CACAxuC,WApEA,SAAAD,gBACA,IAAA0uC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,2BACA3B,KAAA,CACAyvF,QAAAllF,kBASA,OALAyuC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAqDA/kC,kBA7CA,SAAA4lF,gBACA,IAAAz2C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,sCACA3B,KAAA,CACA2vF,WAAAD,kBASA,OALA12C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SA8BAxkC,UApBA,SAAAD,MACA,GAAAA,KAAA,CAGA,GAAA,cAAAA,KAAAwlF,SAEA,MADA,8BAIAC,KA9EA,SAAAzlF,MAMA,IALA,IAAA0lF,MAAA1lF,KAAA2lF,WACApmF,KAAAS,KAAAwlF,SAEAI,IAAAC,KAAAH,OACAI,WAAA,IAAAC,WAAAH,IAAApwF,QACA4I,EAAA,EAAAA,EAAAwnF,IAAApwF,OAAA4I,IACA0nF,WAAA1nF,GAAAwnF,IAAAI,WAAA5nF,GAIA,OAFA,IAAA6nF,KAAA,CAAAH,YAAA,CAAAvmF,KAAAA,OAqEA2mF,CAAAlmF,MACAmmF,KAAA1nE,IAAA2nE,gBAAAX,MAGA,MAFA,qCAAAjlF,mBAAA2lF,YChFA9yF,QAAAC,OAAA,mBAAA,CAAA,cAUAD,QAAAC,OAAA,mBAAA,IAAAqsF,QAAA,cAAA,CAAA,KAAA,aAAA,SAAArrF,GAAAs6C,yBAqBA,MAAA,CACAruC,QApBA,SAAAjD,gBACA,IAAAuxC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,wBACA3B,KAAA,CACA4+B,MAAAl3B,kBASA,OALAsxC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aC/BApxC,QAAAC,OAAA,qBAAA,CAAA,cAUAD,QAAAC,OAAA,qBAAA,I,QACA,mBAAA,CAAA,KAAA,aAAA,SAAAgB,GAAAs6C,yBAGA,SAAAy3C,eAAA3iF,KAEA,IAAA,IAAAynB,QAAAznB,IACA,CACA,IAAApG,MAAAoG,IAAAynB,MACA,iBAAA7tB,MAEA+oF,eAAA/oF,QAIA,EAAA,CAAA,sBAAA,sBAAA,uBAAA3E,QAAA+K,IAAAynB,SACAznB,IAAAynB,MAAA,OAKA,MAAA,CACA48B,SAAA,SAAA/G,mBAAA4jC,YAAA58B,WAAAs+B,YAAAC,SAAAC,UAAAC,UAAAC,SAAAC,YAAAr+B,WAAAj6C,gBAEA,IAAAwgC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,mBACA3B,KAAA,CACA6U,mBAAAu2C,mBACAzP,YAAAqzC,YACAgC,cAAA5+B,WACA6+B,YAAAP,YACAQ,SAAAP,SACAQ,UAAAP,UACAQ,UAAAP,UACAQ,SAAAP,SACAQ,YAAAP,YACAQ,WAAA7+B,WACAG,SAAAp6C,gBAEA4gC,iBAAA,IAUA,OAPAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAywF,eAAAzwF,KAAAu5C,MACAN,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGA2nB,eAAA,SAAAg7B,QAAAC,gBAEA,IAAAx4C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,yBACA3B,KAAA,CACA0xF,QAAAF,QACAG,mBAAAF,gBAEAp4C,iBAAA,IAUA,OAPAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAywF,eAAAzwF,KAAAu5C,MACAN,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGA2kB,gBAAA,SAAAw7B,YAAA4C,gBAEA,IAAA34C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,0BACA3B,KAAA,CACA27C,YAAAqzC,YACA6C,WAAAD,gBAEAv4C,iBAAA,IASA,OANAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAw5B,kBAAA,SAAAvkE,gBAEA,IAAAm1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACA27C,YAAA73C,gBAEAu1C,iBAAA,IASA,OANAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAsuB,QAAA,SAAAzjB,UAAAqb,KAAA+8B,OAAAr4C,gBAEAg3C,eAAA17B,MACA,IAAA9b,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,oBACA3B,KAAA,CACA+xF,KAAAh9B,KACAi9B,OAAAF,OACAp4C,UAAAA,UACAz1C,YAAAw1C,kBAUA,OANAT,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGA+lB,UAAA,SAAAlb,UAAAqb,KAAA+8B,OAAAr4C,gBAEAg3C,eAAA17B,MACA,IAAA9b,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,oBACA3B,KAAA,CACA+xF,KAAAh9B,KACAi9B,OAAAF,OACAp4C,UAAAA,UACAz1C,YAAAw1C,kBAUA,OANAT,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAojD,gBAAA,SAAAx4C,YAAAy4C,gBAEA,IAAAj5C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,8BACA3B,KAAA,CACAiE,YAAAw1C,YACA04C,SAAAD,gBAEA74C,iBAAA,IASA,OANAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGA20B,wBAAA,SAAA/pB,YAAA24C,gBAEA,IAAAn5C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,kCACA3B,KAAA,CACAiE,YAAAw1C,YACA44C,eAAAD,gBAEA/4C,iBAAA,IASA,OANAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAw3B,eAAA,SAAA5sB,YAAAqsB,KAAAjR,MAAAkR,OAAAC,gBAEA,IAAA/sB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,yBACA3B,KAAA,CACAiE,YAAAw1C,YACA64C,KAAAxsB,KACA/G,MAAAlK,MACA09B,IAAAxsB,OACAysB,MAAAxsB,gBAEA3sB,iBAAA,IASA,OANAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAk4B,wBAAA,SAAAttB,YAAAwpB,MAAAwvB,OAAAttB,gBAEA,IAAAlsB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,mCACA3B,KAAA,CACAiE,YAAAw1C,YACAiqB,0BAAAT,MACAY,2BAAA4uB,OACA/sB,4BAAAP,kBAUA,OANAnsB,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGA4vB,cAAA,CACAz3D,IAAA,EACA+uC,GAAA,GACA/O,YAAA,GACA0rD,SAAA,GACAC,SAAA,GACAL,KAAA,GACAM,OAAA,GACA9zB,SAAA,EACA+zB,WAAA,GACA1oB,QAAA,EACAr0D,KAAA,GACA82C,MAAA,GACAD,eAAA,GACAmmC,MAAA,IAGAx+B,oBAAA,SAAAxwD,gBAEA,IAAAm1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,8BACA3B,KAAA,CACAmE,QAAAL,kBAUA,OANAk1C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAuyB,qBAAA,SAAA1nB,UAAA51C,QAAAivF,MAAAj/D,OAAAk/D,eAAAv5C,aAEA,IAAAR,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACA65C,UAAAH,UACAv1C,QAAAL,QACAG,YAAAw1C,YACA+a,YAAAu+B,MACAvyB,OAAA1sC,OACA2sC,OAAAuyB,kBAUA,OANAh6C,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aCzVApxC,QAAAC,OAAA,0BAAA,CAAA,cAKAD,QAAAC,OAAA,0BAAA,IAAAosF,QAAA,mBAAA,wBAKA,IAAAmJ,OAAA,UAAArxF,OAAAgsF,UAAAsF,UAAA,UAAAtxF,OAAAgsF,UAAAsF,SAAAtxF,OAAAgsF,UAAAsF,SAAA,QAEA,MAAA,CACAhiE,UAAA,WACA,OAAA+hE,QAGA3yE,eAAA,SAAAyuC,KAIA,OAAAA,IAAAokC,eAAAF,OAAA,CAAA33E,MAAA,WAAA83E,SAFA,UAAAH,OAAA,MAAA,SAKAp/C,cAAA,SAAAkb,IAAA9gC,QACA,OAAA3W,MAAAtL,SAAA+iD,IAAA9gC,OAAAglE,SAIArmF,eAAA,SAAAymF,KAAAplE,QACA,IAAAolE,MAAA,KAAAA,KAEA,MAAA,GAIAvmF,KAAA,IAAAjB,KAAAwnF,MACA,OAAA/7E,MAAAtL,SAAAc,KAAAmhB,OAAAglE,SAGAv+C,sBAAA,SAAAqa,KACA,MAAA,iBAAA,MAGA,UAAAkkC,OACAlkC,IAAAA,IAAA3iD,QAAA,QAAA,IAEA,UAAA6mF,SACAlkC,IAAAA,IAAA3iD,QAAA,SAAA,IAAAA,QAAA,IAAA,OANA2iD,QCvCAtxD,QAAAC,OAAA,gBAAA,CAAA,cAKAD,QAAAC,OAAA,gBAAA,IAAAosF,QAAA,cAAA,CAAA,KAAA,OAAA,aAAA,SAAAprF,GAAA8d,KAAAw8B,yBAGA,MAAA,CACA77B,wBAAA,SAAAs8B,gBACA,IAAAR,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,eACA3B,KAAA,CACA6U,mBAAA4kC,kBASA,OALAT,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aC/BApxC,QAAAC,OAAA,yBAAA,I,QACA,yBAAA,CAAA,aAAA,SAAAe,YACA,IAAA60F,qBAAA,GAEAvJ,QAAA,CACAwJ,iBAAA,SAAAtY,eACAqY,qBAAArY,eAAAx8E,WAAAs3E,MAAAkF,gBAEA1pE,uBAAA,WACA,IAAAiiF,2BAAAhlF,EAAA,sBAEA/Q,QAAAgF,yBAAA+wF,6BACA/1F,QAAA4P,QAAAmmF,2BAAA99D,WAAA,SAAAnoB,MACA+lF,qBAAA/lF,KAAAsmB,IAAAp1B,WAAAs3E,MAAAxoE,KAAAkmF,cAIAn1F,gCAAA,SAAA6T,MACA,MAAA,CACA9R,mBAAA,SAAAqzF,OAAAxxC,kBAiCA,SAAAyxC,cAAAxhF,IACA,OALAyhF,EAbA,SAAAzhF,MAGA0hF,aAAAP,uBACAvJ,QAAAx4E,yBAGA,IAAAvE,OAAAsmF,qBAAAnhF,MAGA,OAAAnF,QAAA+8E,QAAAwJ,iBAAAphF,MAQA2hF,CAAA3hF,IAAAuhF,SALAK,GAKA7xC,mBAJA6xC,GAAA/L,cAAAgM,MA3BA,SAAAhnF,OAAAk1C,kBACA,IAAA,IAAA15C,EAAA,EAAAA,EAAA05C,iBAAAtiD,OAAA4I,IACAwE,OAAAA,OAAAZ,QAAA,IAAA5D,EAAAwD,WAAA,IAAAk2C,iBAAA15C,IAEA,OAAAwE,OAuBAinF,CAAAL,EAAAG,IAAAH,EADA,IAAAA,EA5BA,IAAAC,aAAAp2F,QAAAgF,yBAoCAuK,OAAA2mF,cAAAxhF,MAMA,OAHAnF,OAAAA,QAAA2mF,cAAA,CAAA,qBAGA3mF,OAhCAZ,QAAA,YAAA,SAAAlM,MAAAg7D,QACA,OAAAyiB,OAAAuW,aAAAh5B,UA+BAw4B,QAGAngC,0BAAA,SAAA4gC,KAMA,OAAA3lF,EAAA,WAAAmxD,KAAAw0B,KAAAxiF,WAMA,OAAAo4E,W,QAEA,kBAAA,CAAA,yBAAA,SAAAqK,wBAEA,OAAAA,0B,UAEA,qBAAA,CAAA,YAAA,kBAAA,SAAAzgF,UAAAtV,iBAEA,MAAA,CACAqU,SAAA,IACAtG,SAAA,EACAwG,KAAA,SAAAC,MAAAC,QAAAC,OAEA1U,gBAAAk1F,iBAAAzgF,QAAAnB,OAAA0N,SAEArhB,YAAA,SAAA8U,QAAAC,OACA,OAAAY,UAAA1V,YAAA8U,MAAAshF,iB,UAIA,kBAAA,CAAA,YAAA,yBAAA,SAAA1gF,UAAAygF,wBAEA,MAAA,CACA1hF,SAAA,IACAtG,SAAA,EACAia,aAAA,qBACAzT,KAAA,SAAAC,MAAAC,QAAAC,OAEAF,MAAAmoE,mBAAAC,cAAAsY,iBAAAzgF,QAAAnB,OAAA0N,SAEArhB,YAAA,SAAA8U,QAAAC,OACA,OAAAY,UAAA1V,YAAA8U,MAAAshF,aAEAn2F,WAAA,WACA,IAAAo2F,KAAA7/E,KACA6/E,KAAAC,QAAA,WACAD,KAAArZ,cAAAmZ,6B,UAKA,aAAA,CAAA,YAAA,SAAAzgF,WAEA,MAAA,CACAjB,SAAA,IACAtG,SAAA,EACApO,YAAA,SAAA8U,QAAAC,OACA,OAAAY,UAAA1V,YAAA8U,MAAAq6E,mBCzHA3vF,QAAAC,OAAA,mBAAA,CAAA,cAKAD,QAAAC,OAAA,mBAAA,IAAAosF,QAAA,iBAAA,CAAA,KAAA,aAAA,SAAAprF,GAAAs6C,yBAGA,MAAA,CACA9qC,UAAA,SAAAwT,gBACA,IAAAu3B,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,kBACA3B,KAAA,CACAC,iBAAAyhB,eAAAzhB,iBACA+N,WAAA0T,eAAA1T,cASA,OALAgrC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,QAGAi5C,SAAApK,aCvBApxC,QAAAC,OAAA,kBAAA,CAAA,cAKAD,QAAAC,OAAA,kBAAA,I,QACA,gBAAA,CAAA,KAAA,OAAA,aAAA,SAAAgB,GAAA8d,KAAAw8B,yBAGA,MAAA,CACA26B,cAAA,SAAA7vE,gBAEA,IAAAm1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,wBACA3B,KAAA,CACAmE,QAAAL,kBAUA,OANAk1C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAwhC,0BAAA,SAAAvsE,QAAA0wF,gBACA,IAAAv7C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,oCACA3B,KAAA,CACAmE,QAAAL,QACA2wF,sBAAAD,kBASA,OALAx7C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAm+B,iBAAA,SAAAlpE,gBAEA,IAAAm1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,2BACA3B,KAAA,CACAmE,QAAAL,kBAUA,OANAk1C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGA2+B,qBAAA,SAAA0gB,WAAAsG,gBAEA,IAAAv7C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACA4pC,WAAAskD,WACAuG,sBAAAD,kBAUA,OANAx7C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAw+B,gBAAA,SAAAD,gBAEA,IAAAn0B,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,0BACA3B,KAAA,CACAuuE,OAAAnB,kBAUA,OANAp0B,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAy/B,iBAAA,SAAArC,gBAEA,IAAAhzB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,2BACA3B,KAAA,CACAstE,aAAArB,kBAUA,OANAjzB,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAi+B,oBAAA,WAEA,MAAA,CACAsB,QAAA,KACAsmB,QAAA,KACAzwF,YAAA,KACA0wF,aAAA,KACAC,cAAA,KACAC,eAAA,KACAC,YAAA,KACAC,YAAA,KACAnrD,WAAA,KACAorD,aAAA,KACAC,WAAA,KACAtnF,OAAA,GACAunF,OAAA,KACA7mB,oBAAA,KACAV,mBAAA,KACAwnB,cAAA,KACA7nB,aAAA,GACAiB,OAAA,KACA6mB,UAAA,KACAC,UAAA,KACAnpB,aAAA,KACAopB,QAAA,EACApoB,SAAA,KACAO,iBAAA,KACAnqD,UAAA,OAIAuvD,qBAAA,WAEA,MAAA,CACAP,gBAAA,KACAv8B,GAAA,KACA05B,UAAA,KACA1B,SAAA,EACAwnB,WAAA,KACAhnB,OAAA,KACAa,QAAA,KACAv/B,WAAA,KACAi+B,WAAA,KACA3X,UAAA,WCzLA14D,QAAAC,OAAA,iBAAA,CAAA,cACAD,QAAAC,OAAA,iBAAA,I,QACA,eAAA,CAAA,KAAA,aAAA,SAAAgB,GAAAs6C,yBAEA,IAAAw8C,WAAA,GACAC,UACA,SAAA3kF,KAAA4kF,OAAAC,KACA,IAAA1iC,IAAA0iC,KAAA,EACAC,KAAA,IAAA/pF,MAAAS,UACAkpF,WAAA1kF,MAAA,CACA9Q,KAAA01F,OACAG,SAAAD,IACAD,WAAA,IAAA1iC,IAAA,EAAA2iC,IAAA,IAAA3iC,MAPAwiC,UAUA,SAAA3kF,MACA,IAAA8kF,KAAA,IAAA/pF,MAAAS,UACA,OACA,IAAAR,OAAAunB,KAAAmiE,YAAAzyF,QAAA+N,OAAA,IAAA0kF,WAAA1kF,MAAA6kF,aAAA,IAAA7pF,OAAAunB,KAAAmiE,YAAAzyF,QAAA+N,OAAA0kF,WAAA1kF,MAAA6kF,WAAAC,IAEAJ,WAAA1kF,MAAA9Q,OAIA,IAAA8L,OAAAunB,KAAAmiE,YAAAzyF,QAAA+N,cACA0kF,WAAA1kF,MAEA,OAtBA2kF,aAyBA,SAAA3kF,MACA,IAAA8kF,KAAA,IAAA/pF,MAAAS,UAIA,OACA,IAAAR,OAAAunB,KAAAmiE,YAAAzyF,QAAA+N,OAAA,IAAA0kF,WAAA1kF,MAAA6kF,aAAA,IAAA7pF,OAAAunB,KAAAmiE,YAAAzyF,QAAA+N,OAAA0kF,WAAA1kF,MAAA6kF,WAAAC,KAIA,MAAA,CACA/uE,wBAAA,SAAAxkB,gBACA,IAAA42C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,kCAAAU,eAAA,IACAg3C,iBAAA,IAiBA,OAdAo8C,aAAA,2BACAx8C,SAAA96C,QAAAs3F,UAAA,4BAGAz8C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAy1F,UAAA,0BAAAz1F,KAAAu5C,MACAN,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MACAi5C,SAAA34C,OAAAN,KAAAw5C,iBAIAP,SAAApK,SAEAnnB,eAAA,SAAArlB,WAAAyzF,gBACA,IAAA78C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,yBAAAU,WAAA,IAAAyzF,eAAA,IACAz8C,iBAAA,IAWA,OARAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,OAEA,SAAAv5C,MACAi5C,SAAA34C,OAAAN,KAAAw5C,iBAGAP,SAAApK,aCzEApxC,QAAAC,OAAA,qBAAA,CAAA,cAUAD,QAAAC,OAAA,qBAAA,IAAAosF,QAAA,mBAAA,CAAA,KAAA,aAAA,aAAA,SAAAprF,GAAAs6C,WAAAv6C,yBAEA,MAAA,CACAorB,oBAAA,SAAAuhC,mBAAA2qC,gBACA,IAAA98C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,8BACA3B,KAAA,CACA6U,mBAAAu2C,mBACA4qC,aAAAD,gBAEA18C,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAjhB,qBAAA,SAAAqoE,QAAAF,gBACA,IAAA98C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACAgrB,QAAAirE,QACAD,aAAAD,gBAEA18C,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,KAAAjsB,qBAGA2rB,SAAApK,SAEA5e,0BAAA,SAAAgmE,QAAA5lF,UAAAG,QAAAoZ,gBACA,IAAAqvB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,oCACA3B,KAAA,CACAgrB,QAAAirE,QACA9H,UAAA99E,UACA+9E,QAAA59E,QACA0lF,SAAAtsE,gBAEAyvB,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,KAAA48C,oBAGAl9C,SAAApK,SAEA7iB,mBAAA,SAAAiqE,QAAAloE,cAAAq9B,mBAAAgrC,aAAAh+B,gBACA,IAAAnf,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,mCACA3B,KAAA,CACAq2F,SAAA,EACArrE,QAAA,iBAAA,QACA,iBAAAirE,QAAA,QAAAA,QAAAjrE,QAAA,EACA,iBAAA,QAAAirE,QAAA,EACAnmE,cAAA/B,cACAqhE,WAAAhkC,mBACAlnD,aAAAkyF,aACAE,SAAAl+B,gBAEA/e,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEArd,wBAAA,SAAA3tB,SAAAunD,mBAAAgrC,aAAAG,gBACA,IAAAt9C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,wCACA3B,KAAA,CACAq2F,SAAAxyF,SACAurF,WAAAhkC,mBACAlnD,aAAAkyF,aACAE,SAAAC,gBAEAl9C,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAxU,gBAAA,SAAAD,gBACA,IAAA6e,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAAo6B,iBASA,OANA4e,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAvB,WAAAic,WAAA,2BAAA,IACAu+B,SAAA96C,QAAA6B,QAGAi5C,SAAApK,SAEArU,8BAAA,SAAAJ,gBACA,IAAA6e,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,wCACA3B,KAAAo6B,iBAQA,OALA4e,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,QAGAi5C,SAAApK,SAEA3gB,oCAAA,SAAA+nE,QAAAloE,cAAAq9B,mBAAAorC,gBACA,IAAAv9C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,8CACA3B,KAAA,CACAgrB,QAAAirE,QACAnmE,cAAA/B,cACAqhE,WAAAhkC,mBACAqrC,SAAAD,gBAEAn9C,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEA6G,qBAAA,SAAAH,gBACA,IAAA0D,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACAm7B,kBAAAoa,eACAmhD,aAAA,KASA,OALA19C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAjrC,oBAAA,SAAA2xC,kBAAAohD,gBACA,IAAA19C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,8BACA3B,KAAA,CACA42F,SAAA,EACAC,QAAAthD,kBACAuhD,WAAAH,kBASA,OALA39C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aCvNApxC,QAAAC,OAAA,gCAAA,CAAA,cAUAD,QAAAC,OAAA,gCAAA,IAAAqsF,QAAA,8BAAA,CAAA,KAAA,aAAA,UAAA,SAAArrF,GAAAs6C,WAAA93C,sBAMA,MAAA,CACAgyC,gBAAA,SAAAqC,gBACA,IAAA0D,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,kCACA3B,KAAA,CACAm7B,kBAAAoa,gBAEA8D,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAiF,gBAAA,SAAA/9B,OAAA8V,gBACA,IAAAotB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,mCACA3B,KAAA,CACA+2F,kBAAAhhF,OACAq9B,YAAAvnB,kBASA,OALAmtB,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aCrDApxC,QAAAC,OAAA,0BAAA,CAAA,cAUAD,QAAAC,OAAA,+BAAA,IAAAqsF,QAAA,6BAAA,CAAA,KAAA,aAAA,UAAA,SAAArrF,GAAAs6C,WAAA93C,sBAGA,MAAA,CACAolC,yBAAA,SAAAiP,kBAAAyhD,gBACA,IAAA/9C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,4CACAqnB,OAAA,CAAAusB,kBAAAA,kBAAAyhD,YAAAA,kBAQA,OALAh+C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAoD,YAAA,SAAAD,YAAAuD,gBACA,IAAA0D,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,+BACAqnB,OAAA,CAAAgpB,YAAAA,YAAAuD,kBAAAA,kBAQA,OALAyD,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAhB,6BAAA,SAAA0H,kBAAA0hD,gBACA,IAAAh+C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,uCACAqnB,OAAA,CAAAusB,kBAAAA,kBAAA0hD,UAAAA,kBAQA,OALAj+C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAb,sBAAA,SAAAkpD,eAAAjnD,gBACA,IAAAgJ,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,gCACA3B,KAAA,CACAm3F,eAAAD,eACA5oD,aAAA2B,kBASA,OALA+I,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAG,wBAAA,SAAAiB,eAAAsF,mBACA,IAAA0D,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,kCACAqnB,OAAA,CAAAusB,kBAAAA,mBACAv1C,KAAAiwC,iBAQA,OALA+I,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aCvGApxC,QAAAC,OAAA,2BAAA,CAAA,c,QAEA,yBAAA,CAAA,KAAA,aAAA,mBAAA,SAAAgB,GAAAs6C,WAAAt8B,+BAMA,SAAA06E,aAAAC,MAAArgF,KAEAqgF,MAAA36E,iBAAAg4B,sBAAA2iD,OAEA,IAAAC,MADAtgF,IAAA0F,iBAAAg4B,sBAAA19B,MACAqgF,MAEA,GAAA5iD,WAAAz9B,KAAAy9B,WAAA4iD,OACA,CAGA,IAFA,IAAAhlE,IAAAglE,MAAArrF,WACAurF,KAAA,GACA/uF,EAAA,EAAAA,EAAA6pB,IAAAzyB,QAEA,MAAAyyB,IAAA7pB,GAFAA,IAIA+uF,MAAA,IAGAD,KADA7iD,WAAA8iD,MAAA,EACAF,MAAArgF,IAEA,OAAAy9B,WAAA6iD,MAGA,MAAA,CACAv+D,mBAAA,SAAAwc,eAAAiiD,gBAAAzpE,eACA,IAAAkrB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,6BACA3B,KAAA,CACAy3F,gBAAAD,gBACA1nE,cAAA/B,cACAoN,kBAAAoa,gBAGA8D,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAlT,cAAA,SAAApF,OACA,IACAmhE,SACAC,SAlDA,IAgDAphE,MAAArD,4BACAwkE,SAAAh7E,iBAAAg4B,sBAAAne,MAAAjC,UACAqjE,SAAAj7E,iBAAAg4B,sBAAAne,MAAArC,UACA,EAAAwjE,UAAA,EAAAC,WACAphE,MAAAnC,UAAAujE,SAAAD,YAGA97D,YAAA,SAAArF,MAAA2C,qBAAA0+D,iBAAAC,kBAAAC,cAEA,IAAAJ,SAAAh7E,iBAAAg4B,sBAAAne,MAAAjC,UACAyjE,WAAAr7E,iBAAAg4B,sBAAAne,MAAAnC,WACAujE,SAAAj7E,iBAAAg4B,sBAAAne,MAAArC,UAEAqC,MAAAhC,UADA,EAAAmjE,UAAA,EAAAK,WACAA,WAAAL,SAIA,EAAAC,UAAAG,aACAH,SAEA,GAIA57D,0BAAA,SAAAxF,MAAAlc,OAzEA,IA0EAkc,MAAArD,4BAEAqD,MAAAnC,UAAAgjE,aAAA7gE,MAAAoC,YAAApC,MAAApC,aAEA6H,yBAAA,SAAAzF,MAAAlc,OA9EA,IA+EAkc,MAAAtD,0BAEAsD,MAAAjC,SAAA8iE,aAAA7gE,MAAAiC,WAAAjC,MAAAlC,YAEA6H,0BAAA,SAAAxQ,QACA,IAAAssE,YAAA,EAMA,OALAtsE,OAAAre,QAAA,cACA,IAAA4qF,OAAAv7E,iBAAAg4B,sBAAAne,YAAAnC,WACA8jE,YAAAx7E,iBAAAg4B,sBAAAne,YAAA2G,YACA86D,YAAAA,YAAAvjD,WAAAwjD,QAAAxjD,WAAAyjD,eAEAF,aAEA57D,wBAAA,SAAA1Q,QACA,IAAAyQ,WAAA,EAMA,OALAzQ,OAAAre,QAAA,cACA,IAAA4qF,OAAAv7E,iBAAAg4B,sBAAAne,YAAAjC,UACA4jE,YAAAx7E,iBAAAg4B,sBAAAne,YAAA4G,WACAhB,WAAAA,WAAAsY,WAAAwjD,QAAAxjD,WAAAyjD,eAEA/7D,YAEAV,aAAA,SAAA/P,QACAA,OAAAre,QAAA,QACAkpB,MAAAiC,WAAA,iBAAAjC,MAAA,WAAA7Z,iBAAAg4B,sBAAAne,MAAAiC,YAAAjC,MAAAiC,WACAjC,MAAAoC,YAAA,iBAAApC,MAAA,YAAA7Z,iBAAAg4B,sBAAAne,MAAAoC,aAAApC,MAAAoC,YACApC,MAAA4G,UAAA,iBAAA5G,MAAA,UAAA7Z,iBAAAg4B,sBAAAne,MAAA4G,WAAA5G,MAAA4G,UACA5G,MAAA2G,WAAA,iBAAA3G,MAAA,WAAA7Z,iBAAAg4B,sBAAAne,MAAA2G,YAAA3G,MAAA2G,cAGAxB,oBAAA,SAAAy8D,aAAAzsE,gBAEA,IAAAutB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,8BACA3B,KAAA,CACAo4F,qBAAAD,aACAl/D,gBAAAvN,kBASA,OALAstB,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aC7HApxC,QAAAC,OAAA,4BAAA,CAAA,c,QASA,0BAAA,CAAA,KAAA,aAAA,SAAAgB,GAAAs6C,yBAGA,MAAA,CACAq/C,oBAAA,SAAAjtC,gBACA,IAAAnS,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,8BACA3B,KAAA,CACA6U,mBAAAu2C,gBAEA/R,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAGAypD,wBAAA,SAAAC,WAAAntC,gBACA,IAAAnS,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,kCACA3B,KAAA,CACAw4F,WAAAD,WACA1jF,mBAAAu2C,gBAEA/R,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aCnDApxC,QAAAC,OAAA,0BAAA,CAAA,cAUAD,QAAAC,OAAA,0BAAA,IAAAqsF,QAAA,wBAAA,CAAA,KAAA,aAAA,UAAA,SAAArrF,GAAAs6C,WAAA93C,sBAqCA,SAAAu3F,yBAAAC,MAAAC,QAAAC,SAEA,GAAA,IAAAD,SAAAA,UAAAC,QACA,OAAAA,S,KACA,EACA,OAAA,SAAAF,M,KACA,EACA,MAAA,QAAAA,MAMA,OAAAA,MAEA,SAAAG,UAAAz3D,YAAAoB,cAAAzB,YACA,IAAA63D,QAAAp2D,cAAAs2D,cACAH,QAAAn2D,cAAAu2D,gBAEAC,UAAA53D,YADAoB,cAAAy2D,YACA,IAIA5wF,eArCA,SAAAqwF,MAAAC,QAAAC,SAEA,GAAA,IAAAD,SAAAA,UAAAC,QACA,OAAAA,S,KACA,EACA,MAAA,MAAAF,M,KACA,EACA,OAAA,KAAAA,MAKA,OAAAA,MAuBAQ,CAAAn4D,WAAA43D,QAAAC,SACA,IACAxhB,MAAA,KACA+hB,YAAAhlF,SAAA9L,cAAA,GAAA,IAAA,EACA+wF,cAAA3kD,WAAA,EAAApsC,cAAAzI,OAAA,KAAAyI,cAAA,GAAA,OACAgxF,WAAA,EACAC,cAAA,EAYA,OAXA,EAAAH,aAAAA,YAAAH,UAAAp5F,SACAy5F,WAAAL,UAAAG,aAAAI,QAEA,EAAAH,eAAA,EAAAD,YAAAH,UAAAp5F,SAGA05F,eAFAN,UAAA,EAAAG,aAAAI,OACAF,YACAD,eAKAX,0BAFAY,WADAF,aAAAH,UAAAp5F,OACAo5F,UAAAA,UAAAp5F,OAAA,GAAA25F,OACAF,YAAAC,cACAX,QAAAC,SAEA,MAAA,CACA96D,UAAA,SAAAyX,kBAAA0gD,QAAAloE,gBACA,IAAAkrB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACAm7B,kBAAAoa,kBACAvqB,QAAAirE,QACAnmE,cAAA/B,gBAEAsrB,iBAAA,IAQA,OALAL,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEA7N,mBAAA,SAAAwB,KAAAg3D,UAKA,OAHAh3D,KAAAjD,YADAi6D,SAAA,IAAA,IAEAh3D,KAAAhD,WACAgD,KAAA3D,cAGA0C,oBAAA,SAAAiB,MAGA,OAFAA,KAAA9C,gBACA8C,KAAA7C,mBAGAwB,uBAAA,SAAAqB,KAAApB,YACA,OAAAy3D,UAAAz3D,WAAAoB,KAAAA,KAAAxC,QAEA8C,0BAAA,SAAAN,UAAApB,YACA,IAAAw3D,QAAAp2D,UAAAs2D,cACAH,QAAAn2D,UAAAu2D,gBAEAC,UAAA53D,WADAoB,UAAAy2D,YACA,IAEA,OAAAR,yBADAO,UAAAA,UAAAp5F,OAAA,GAAA25F,OACAZ,QAAAC,UAEAp3D,4BAAA,SAAAgB,KAAApB,YACA,OAAAy3D,UAAAz3D,WAAAoB,KAAAA,KAAAi3D,aAEAp4D,2BAAA,SAAAR,IAAA2B,KAAAlB,MACA,IAAAT,KAAA2B,KAAAk3D,aAAA,EACA,OAAAl3D,KAAA/C,SAOA,IAJA,IAAAk6D,YAAAn3D,KAAA3C,YAEA+5D,UAAAt4D,KADAkB,KAAAk3D,YACA,IACAG,iBAAA,EACAxxF,EAAA,EAAAA,EAAAuxF,UAAAh6F,OAAAyI,IAAA,CACA,GAAAuxF,UAAAvxF,GAAAw3B,aAAA85D,YAAA,CACAE,iBAAAD,UAAAvxF,GAAAyxF,WACA,MAEAD,iBAAAD,UAAAvxF,GAAAyxF,WAEAC,IAAAv3D,KAAA/C,SACAu6D,KAAAx3D,KAAA5C,cACA,OAAA4C,KAAAy3D,mBACAF,IAAAC,MAAAH,iBAAAG,KACAD,IAAAF,kBAGAz1D,mBAAA,SAAA81D,YAAAvuE,gBACA,IAAAstB,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,6BACA3B,KAAA,CACAm6F,oBAAAD,YACAh3D,eAAAvX,kBASA,OALAqtB,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,a1BjJApxC,QAAAC,OAAA,2BAAA,CAAA,cAUAD,QAAAC,OAAA,2BAAA,IAAAosF,QAAA,wBAAA,CAAA,KAAA,OAAA,aAAA,SAAAprF,GAAA8d,KAAAw8B,yBAGA,MAAA,CACA6N,kBAFA,GAGAV,sBAAA,SAAA6oC,gBACA,IAAA91C,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,6BAAAqtF,eACAhmE,OAAA,KAEAiwB,SAAAv6C,GAAAiwC,QAMA,OALAqK,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAkY,kBAAA,SAAAqzC,0BAAApL,gBACA,IAAA91C,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,4BAAAy4F,0BAAA,IAAApL,eACAhmE,OAAA,KAEAiwB,SAAAv6C,GAAAiwC,QAMA,OALAqK,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAwY,mBAAA,SAAAgzC,gBACA,IAAAnhD,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,2BACA3B,KAAAq6F,iBAGAphD,SAAAv6C,GAAAiwC,QAMA,OALAqK,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEA0Y,sBAAA,SAAA+yC,eACA,IAAArhD,SAAAv6C,GAAAiwC,QAUA,OATAnyB,KAAA9c,IAAA,gDAAA46F,e,KACA,SAAAt6F,KAAAD,OAAAlB,OAAAC,SAEAm6C,SAAA96C,SADA,K,MAGA,SAAA6B,KAAAD,OAAAlB,OAAAC,SAEAm6C,SAAA34C,OADAN,QAGAi5C,SAAApK,a2BvGApxC,QAAAC,OAAA,oBAAA,CAAA,cAUAD,QAAAC,OAAA,oBAAA,IAAAosF,QAAA,iBAAA,CAAA,KAAA,aAAA,aAAA,SAAAprF,GAAAs6C,WAAAv6C,yBAGA,MAAA,CACAs+C,WAAA,SAAAiyC,YAAAuL,eACA,IAAAthD,SAAAv6C,GAAAiwC,QAeA,OANAqK,WAAAM,QARA,CACAjxB,OAAA,OACA1mB,IAAA,6BACA3B,KAAA,CACA27C,YAAAqzC,YACAwL,cAAAD,iBAGAx1F,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAIAN,SAAApK,SAEAoU,wBAAA,SAAA+rC,aACA,IAAA/1C,SAAAv6C,GAAAiwC,QAaA,OALAqK,WAAAM,QAPA,CACAjxB,OAAA,OACA1mB,IAAA,kCACA3B,KAAA,CACA27C,YAAAqzC,eAGAjqF,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAqU,YAAA,SAAAc,gBACA,IAAA/K,SAAAv6C,GAAAiwC,QACAuK,eAAA,CACA7wB,OAAA,OACA1mB,IAAA,qBACA3B,KAAA,CACAy8C,yBAAAuH,eAAAvH,yBACA6B,SAAA0F,eAAA1F,SACA0C,QAAAgD,eAAAhD,UAQA,OALAhI,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEA4U,kCAAA,SAAAurC,aACA,IAAA/1C,SAAAv6C,GAAAiwC,QAaA,OALAqK,WAAAM,QAPA,CACAjxB,OAAA,OACA1mB,IAAA,mCACA3B,KAAA,CACA27C,YAAAqzC,eAGAjqF,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAoO,qBAAA,SAAA+xC,YAAAyL,WAAApqF,UAAAG,QAAA8yC,UAAAC,UAAAkP,WACA,IAAAxZ,SAAAv6C,GAAAiwC,QAmBA,OALAqK,WAAAM,QAbA,CACAjxB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACA27C,YAAAqzC,YACA0L,WAAAD,WACAtM,UAAA99E,UACA+9E,QAAA59E,QACAmqF,UAAAr3C,UACAs3C,SAAAnoC,UACAooC,UAAAt3C,aAGAx+C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAoN,aAAA,SAAAxC,YAAA28C,aAAAtyF,QAAAg3F,eACA,IAAA7hD,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACAiE,YAAAw1C,YACAv1C,aAAAkyF,aACAz6C,YAAA73C,WAeA,OAXAk1C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAA,KAAAu5C,KAAAwhD,YAEAD,eAAAr8F,WAAAic,WAAA,sBAAA,CAAAzW,YAAAw1C,YAAAv1C,aAAAkyF,aAAAz6C,YAAA73C,UACAm1C,SAAA96C,QAAA6B,KAAAu5C,OAEAN,SAAA34C,OAAAN,KAAAu5C,QAIAN,SAAApK,SAEA7qC,eAAA,SAAAy1C,YAAA28C,aAAAtyF,gBACA,IAAAm1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,iCACA3B,KAAA,CACAiE,YAAAw1C,YACAv1C,aAAAkyF,aACAz6C,YAAA73C,kBAUA,OANAk1C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAvB,WAAAic,WAAA,wBAAA,IACAu+B,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAmO,aAAA,SAAAvD,YAAA28C,aAAAtyF,SACA,IAAAm1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACAiE,YAAAw1C,YACAv1C,aAAAkyF,aACAz6C,YAAA73C,WAeA,OAXAk1C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAA,KAAAu5C,KAAAwhD,YAEAt8F,WAAAic,WAAA,sBAAA,CAAAzW,YAAAw1C,YAAAv1C,aAAAkyF,aAAAz6C,YAAA73C,UACAm1C,SAAA96C,QAAA6B,KAAAu5C,OAEAN,SAAA34C,OAAAN,KAAAu5C,QAIAN,SAAApK,SAEAzqC,eAAA,SAAAq1C,YAAA28C,aAAAtyF,gBACA,IAAAm1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,iCACA3B,KAAA,CACAiE,YAAAw1C,YACAv1C,aAAAkyF,aACAz6C,YAAA73C,kBAUA,OANAk1C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAvB,WAAAic,WAAA,wBAAA,IACAu+B,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,SAEAmsD,wBAAA,SAAAvhD,YAAA28C,aAAAtyF,gBACA,IAAAm1C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,sCACA3B,KAAA,CACAiE,YAAAw1C,YACAv1C,aAAAkyF,aACAz6C,YAAA73C,kBAaA,OATAk1C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAA,KAAAu5C,KAAAwhD,WACA9hD,SAAA96C,QAAA6B,KAAAu5C,MAEAN,SAAA34C,OAAAN,KAAAu5C,QAIAN,SAAApK,SAEAoL,sBAAA,SAAAghD,gBACA,IAAAhiD,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,wBACA3B,KAAA,CACAk7F,aAAAD,kBAQA,OAJAjiD,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAEAN,SAAApK,SAEAyL,yBAAA,SAAA2gD,SAAAn3F,QAAAqnD,gBACA,IAAAlS,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,2BACA3B,KAAA,CACAk7F,aAAAD,SACAt/C,YAAA73C,QACA+Q,mBAAAs2C,kBAQA,OAJAnS,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAEAN,SAAApK,aChQApxC,QAAAC,OAAA,sBAAA,CAAA,cAEAD,QAAAC,OAAA,sBAAA,IAAAosF,QAAA,oBAAA,CAAA,KAAA,aAAA,OAAA,aAAA,SAAAprF,GAAAD,WAAA+d,KAAAw8B,yBAwHA,SAAAmiD,oBAEA,MAAA,GAAA1uF,MAAAR,KAAA/F,SAAAk1F,aAAA5hF,KAAA,CAAA9H,MAAA,iBAgBA,SAAA2pF,gBAAAC,QAEA78F,WAAA88F,gBAIA98F,WAAA+8F,iBACAC,WAAA,kBAAA,qBAAAh9F,WAAA+8F,gBACAC,WAAA,QAAA,qBAAAh9F,WAAA+8F,iBAEAC,WAAA,kBAAA,qBAAAh9F,WAAA88F,gBACAE,WAAA,QAAA,qBAAAh9F,WAAA88F,iBARA98F,WAAA88F,eAAA,GAWAG,iBAAA,kBAAA,qBAAA,IAAAJ,OAAA78F,WAAA88F,gBACAG,iBAAA,QAAA,qBAAA,IAAAJ,OAAA78F,WAAA88F,gBAGA,SAAAG,iBAAAC,UAAAz7F,MAAAwH,MAAAk0F,YAEA,IAAAC,SAAAV,oBACA,GAAA19F,QAAAgF,yBAAAo5F,UAUAt7F,OAAAJ,SAAAC,KAAA,kCAAA,cARA,IADA,IAAA07F,MAAAD,SAAAE,UAAAF,SAAAC,MACAtzF,EAAA,EAAAA,EAAAszF,MAAAl8F,SAAA4I,EACA/K,QAAAgF,yBAAAq5F,MAAAtzF,GAAA8S,QAAAwgF,MAAAtzF,GAAA8S,MAAAqgF,aAAAz7F,QACA47F,MAAAtzF,GAAA8S,MAAAqgF,WAAAj0F,MACAk0F,WAAAp9F,KAAA,CAAAs9F,MAAAtzF,GAAAwzF,aAAAF,MAAAtzF,GAAA8S,MAAAqgF,cASA,SAAAF,WAAAE,UAAAz7F,MAAA07F,YAEA,IAAAC,SAAAV,oBACA,IAAA19F,QAAAgF,yBAAAo5F,UAEA,IADA,IAAAC,MAAAD,SAAAE,UAAAF,SAAAC,MACAzzF,EAAA,EAAAA,EAAAuzF,WAAAh8F,OAAAyI,IACA,IAAA,IAAAG,EAAA,EAAAA,EAAAszF,MAAAl8F,SAAA4I,EACA/K,QAAAgF,yBAAAq5F,MAAAtzF,GAAA8S,QAAAwgF,MAAAtzF,GAAAwzF,eAAAJ,WAAAvzF,GAAA,IAAAyzF,MAAAtzF,GAAA8S,MAAAqgF,aAAAC,WAAAvzF,GAAA,KACAyzF,MAAAtzF,GAAA8S,MAAAqgF,WAAAz7F,OAoCA,MAAA,CACA+G,gBA7FA,SAAAq0F,QAEA78F,WAAA+8F,gBAIAC,WAAA,kBAAA,qBAAAh9F,WAAA+8F,gBACAC,WAAA,QAAA,qBAAAh9F,WAAA+8F,iBAJA/8F,WAAA+8F,eAAA,GAMAE,iBAAA,kBAAA,qBAAA,IAAAJ,OAAA78F,WAAA+8F,gBACAE,iBAAA,QAAA,qBAAA,IAAAJ,OAAA78F,WAAA+8F,iBAoFAH,gBAAAA,gBACAvzF,cAAA,SAAA9F,SAEA,IAAAi3C,SAAAv6C,GAAAiwC,QAaA,OAZAjrC,QAAAC,MAAA,cACA03F,gBAAA33F,QAAAC,MAAA,aAAAs4F,aAAA/0F,cACA+xC,SAAA96C,QAAAuF,QAAAC,MAAA,eA9NA,SAAA3B,gBAEA,IAAAi3C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,qBACA3B,KAAA,CACAk8F,cAAAl6F,kBAUA,OANAg3C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,QA8MAstD,CAAAn6F,SAAA+C,KAAA,SAAA/E,uBAEAo8F,sBAAA3+F,QAAAq7C,SAAA/uC,KAAAoC,MAAAnM,wBAAAq8F,sBACAhB,gBAAAe,sBAAAH,aAAA/0F,cACAxD,QAAAC,MAAA,YAAAy4F,uBACAnjD,SAAA96C,QAAAi+F,yBAGAnjD,SAAApK,SAEA/sC,WAAA,WAEA,IACAw6F,KACAn6E,QAFA82B,SAAAv6C,GAAAiwC,QAEAx6B,SAAA,GAAA,IAWA,OAxLA,WAEA,IAAA8kC,SAAAv6C,GAAAiwC,QAGAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,eACAqnB,OAAA,KAUA,OAPAgwB,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAIAN,SAAApK,QA4JA0tD,GAAAx3F,KAAA,SAAA/E,MAGAq7F,iBADAiB,KAAAt8F,KAAAiF,eACAu3F,qBACAr6E,QAAA,GAAAhO,SAAAmoF,KAAAG,QAAA,IAAA,IACAh+F,WAAA0jB,QAAAA,QACA82B,SAAA96C,QAAA6B,QAGAi5C,SAAApK,SAEAjoC,uBAAA,WAEA,IAAAqyC,SAAAv6C,GAAAiwC,QAEAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,MACA1mB,IAAA,wCACAqnB,OAAA,KAWA,OARAgwB,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAq7F,gBAAAr7F,KAAAu5C,KAAAt0C,cAAAu3F,qBACAvjD,SAAA96C,QAAA6B,KAAAu5C,QAIAN,SAAApK,SAEA9jC,qBAAA,SAAA2xF,cAAAC,aAEA,IAAA1jD,SAAAv6C,GAAAiwC,QAOA,OApQA,SAAA+tD,cAAAC,aAEA,IAgBA74F,QAGAo1C,eAnBAD,SAAAv6C,GAAAiwC,QAuCA,OArCA+tD,cAAArnF,WAAA,EAEA4jC,SAAA96C,QAAA,CACA6I,IAAA,EACAoY,KAAA,GACAkE,UAAA,KACApZ,KAAA,KACAgyF,cAAA,KAOAp4F,SAFA84F,eAAAn+F,WAAAkjF,YAAA5/E,SAAAtD,WAAAkjF,YAAA5/E,QAAAE,SAAAxD,WAAAkjF,YAAA5/E,QAAAE,QAAAoF,qBACA5I,WAAAkjF,YAAA5/E,QAAAE,QAAAoF,qBAAA,MACAu1F,eAAAz4F,QAAA,KACAgnD,eAAAyxC,eAAAA,eAAA34F,YAAA,KAEAi1C,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACAk8F,cAAAQ,cACAG,YAAAF,YACAhhD,YAAA73C,QACAsrF,WAAAjkC,kBAIAnS,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,KAAAujD,sBAKA7jD,SAAApK,QAsNAkuD,CAAAL,cAAAC,aAAA53F,KAAA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAof,QAGA65B,SAAApK,SAEAshB,aApMA,SAAA2+B,UAAAt+E,QAAAmc,SAAA+iC,YAAAC,eAAAC,eAAAotC,cAAAl5F,QAAAm5F,gBAEA,IAAAhkD,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,6BACA3B,KAAA,CACA+uF,UAAAD,UACAV,QAAA59E,QACAgb,SAAAmB,SACAuwE,YAAAxtC,YACAytC,eAAAxtC,eACAytC,eAAAxtC,eACAytC,cAAAL,cACA74F,QAAAL,QACAw5F,UAAAL,eACAM,QAAA,OAUA,OAPAvkD,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAIAN,SAAApK,aCjIApxC,QAAAC,OAAA,qBAAA,CAAA,c,QACA,mBAAA,CAAA,KAAA,aAAA,SAAAgB,GAAAs6C,yBAGA,SAAAwkD,gBAAA9N,gBACA,IAAAz2C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,oBACA3B,KAAA,CACA2vF,WAAAD,kBASA,OALA12C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,QAQA,SAAAyhD,WAAA7hE,MAMA,IALA,IAAAqhE,MAAArhE,KAAAgvE,YACA9zF,KAAA8kB,KAAAmhE,SAEAI,IAAAC,KAAAH,OACAI,WAAA,IAAAC,WAAAH,IAAApwF,QACA4I,EAAA,EAAAA,EAAAwnF,IAAApwF,OAAA4I,IACA0nF,WAAA1nF,GAAAwnF,IAAAI,WAAA5nF,GAIA,OAFA,IAAA6nF,KAAA,CAAAH,YAAA,CAAAvmF,KAAAA,OAwFA,MAAA,CACA0kB,aA5CA,SAAAwJ,OAGA2lE,gBAFA3lE,MAAA,iBAEA9yB,KAAA,SAAA0pB,MACA,IAKA9sB,IALA8sB,OACA9sB,IAAA,qCAEAkuF,KAAAS,WAAA7hE,MACA8hE,KAAA1nE,IAAA2nE,gBAAAX,MACAluF,IAJA,qCAIAiJ,mBAAA2lF,MAEA/hF,EAAA,SAAA8E,KAAA,MAAA3R,SAkCAysB,aAvBA,SAAAyJ,MAAA5J,QAGAuvE,gBAFA3lE,MAAA,6BAAA5J,QAEAlpB,KAAA,SAAA0pB,QACA,IAMA8hE,KANA9hE,SACAohE,KAAAS,WAAA7hE,QACAvoB,SAAAw3F,aAEA97F,OAAAgsF,UAAA+P,WAAA9N,KAAAphE,OAAAmvE,WAtEA,SAAAC,QAAAC,UACA,IAAAnvE,aAAAzoB,SAAAC,cAAA,KACAwoB,aAAAovE,OAUApvE,aAAAqvE,KAAAH,QACAlvE,aAAA4R,OAAA,UAGA,aAAA5R,eACAA,aAAAsvE,SAAAH,WAIA53F,SAAAw1C,MAAAx1C,SAAA6zE,iBAAAxzE,YAAAooB,cACAA,aAAAovE,QACApvE,aAAAuvE,WAAAC,YAAAxvE,gBAEA/sB,OAAAw8F,MAAAx8F,QACAi8F,QAAAzmB,MAAA,KAAA,KAAAx1E,OAAA+F,SAAAq2F,KAAA5mB,MAAA,KAAA,KAGAinB,cAAA,IAAAR,QAAA96F,QAAA,KAAA,IAAA,IACA86F,QAAAA,QAAAzxF,QAAA,MAAAiyF,aAAA,OAEAz8F,OAAAC,KAAAg8F,QAAA,YA0CAI,CAFA1N,KAAA1nE,IAAA2nE,gBAAAX,MACAphE,OAAAmvE,UAIA/0E,IAAAy1E,gBAAA/N,eC7GA9yF,QAAAC,OAAA,mBAAA,CAAA,cAEAD,QAAAC,OAAA,mBAAA,IAAAosF,QAAA,uBAAA,CAAA,KAAA,aAAA,OAAA,aAAA,SAAAprF,GAAAD,WAAA+d,KAAAw8B,yBAGA,MAAA,CACAruC,QAAA,SAAA3K,gBACA,IAAAi5C,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,wBACA3B,KAAAA,iBAQA,OALAg5C,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK,aC3BApxC,QAAAC,OAAA,wBAAA,CAAA,cAEAD,QAAAC,OAAA,wBAAA,IAAAqsF,QAAA,qBAAA,CAAA,KAAA,aAAA,SAAArrF,GAAAs6C,yBAGA,SAAAM,QAAAJ,eAAAD,UAEAD,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAeA,MAAA,CACAkS,mBAAA,SAAAL,oBAEA,IAAAnS,SAAAv6C,GAAAiwC,QAYA,OADA2K,QAVA,IAAAH,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,4BACA3B,KAAA,CACA6U,mBAAAu2C,oBAEA/R,iBAAA,IAGAJ,UACAA,SAAApK,SAEAua,aAAA,SAAA6hC,UAEA,IAAAhyC,SAAAv6C,GAAAiwC,QAYA,OADA2K,QAVA,IAAAH,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,+BACA3B,KAAA,CACA27C,YAAAsvC,UAEA5xC,iBAAA,IAGAJ,UACAA,SAAApK,SAEAkf,gBAAA,WA6DA,MA3DA,CACAoc,QAAA,EACAo0B,gBAAA,GACAC,OAAA,GACAC,QAAA,GACA3xC,SAAA,GACAE,UAAA,GACAD,mBAAA,GACA2xC,eAAA,EACA7xC,kBAAA,GACA8xC,cAAA,EACAC,WAAA,GACAC,YAAA,GACAC,SAAA,KACAC,oBAAA,EACAC,sBAAA,KACAC,kBAAA,KACAC,uBAAA,KACAC,mBAAA,KACAC,UAAA,GACAj7F,QAAA,EACAD,aAAA,GACAm7F,iBAAA,GACAC,IAAA,GACApyC,IAAA,GACAqyC,OAAA,GACAtyC,aAAA,GACAuyC,WAAA,GACAC,UAAA,GACAp2C,UAAA,GACAq2C,SAAA,GACA14F,KAAA,EACA24F,UAAA,GACAr2C,SAAA,GACAs2C,MAAA,GACAhzC,MAAA,GACAD,eAAA,GACAkzC,WAAA,EACAC,yBAAA,EACAC,QAAA,GACAn0C,kBAAA,EACAo0C,0BAAA,EACAC,MAAA,GACA/2C,WAAA,EACAtgD,iBAAA,EACAs3F,eAAA,EACAC,sBAAA,EACAC,mBAAA,KACAC,OAAA,GACA10C,kBAAA,GACA20C,iBAAA,EACAh9E,UAAA,GACAmpC,WAAA,KACAC,mBAAA,KACAJ,YAAA,EACAlkD,4BAAA,GACAm4F,yBAAA,GACAC,aAAA,KAIAx0C,YAAA,SAAAy0C,iBAEA,IAAAxnD,SAAAv6C,GAAAiwC,QAWA,OAvHA,SAAAuK,eAAAD,UAEAD,WAAAgB,0BAAAd,gBAAAn0C,KACA,SAAA/E,MAEAi5C,SAAA96C,QAAA6B,KAAAu5C,QAiHAg1C,CATA,IAAAp1C,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,sBACA3B,KAAA,CACAmI,gBAAAs4F,mBAIAxnD,UACAA,SAAApK,SAEA5oB,mBAAA,SAAA/O,SAEA,IAAA+hC,SAAAv6C,GAAAiwC,QAWA,OADA2K,QATA,IAAAH,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,6BACA3B,KAAA,CACAovF,WAAAl4E,WAIA+hC,UACAA,SAAApK,aCrJApxC,QAAAC,OAAA,iCAAA,CAAA,cAEAD,QAAAC,OAAA,iCAAA,IAAAqsF,QAAA,+BAAA,CAAA,KAAA,aAAA,SAAArrF,GAAAs6C,yBAEA,MAAA,CACA08B,oBAAA,SAAA5xE,QAAAuM,UAAAG,gBACA,IAAAyoC,SAAAv6C,GAAAiwC,QACAuK,eAAA,IAAAC,mBACA,CACA9wB,OAAA,OACA1mB,IAAA,mCACA3B,KAAA,CACAmE,QAAAL,QACAqqF,UAAA99E,UACA+9E,QAAA59E,kBASA,OALAwoC,WAAAM,QAAAJ,gBAAAn0C,KACA,SAAA/E,MACAi5C,SAAA96C,QAAA6B,KAAAu5C,QAGAN,SAAApK","file":"ARCustWeb.min.js","sourcesContent":["/**\r\n * Created by rhampton on 3/6/14.\r\n */\r\n\r\nangular.module('petronetApp', [\r\n 'core.providers',\r\n 'kendo.directives',\r\n 'services.localizations',\r\n 'ngRoute',\r\n 'ngAnimate',\r\n 'pnContactUs',\r\n 'pnLogin',\r\n 'pnHeader',\r\n 'pnHome',\r\n 'pnAdmin',\r\n 'pnAccountReports',\r\n 'pnAccountPayments',\r\n 'pnFuelCardsCards',\r\n 'pnFuelCardsPrices',\r\n 'pnFuelCardsTransactions',\r\n 'pnOrders',\r\n 'pnODPricing',\r\n 'pnPaperwork',\r\n 'pnDocuments',\r\n 'pnDocAccount',\r\n 'pnDateSelector',\r\n 'pnReportSettings',\r\n 'pnPages',\r\n 'core.directives',\r\n 'core.filters',\r\n 'core.enums',\r\n 'core.constants',\r\n 'core.error',\r\n 'core.objects',\r\n 'core.security',\r\n 'services.browser',\r\n 'services.bulkFuelPriceNotices',\r\n 'services.encrypt',\r\n 'services.FuelCards',\r\n 'services.contactUs',\r\n 'services.documents',\r\n 'services.home',\r\n 'services.globalizations',\r\n 'services.orders',\r\n 'services.paperwork',\r\n 'services.paperworkMeters',\r\n 'services.paperworkTanks',\r\n 'services.paperworkDeliveries',\r\n 'services.paperworkDealerForms',\r\n 'services.paperworkReports',\r\n 'services.payments',\r\n 'services.paymentAccounts',\r\n 'services.userAccounts',\r\n 'services.warehousePriceNotices',\r\n 'services.WebProfile',\r\n 'services.customers',\r\n 'services.pages',\r\n 'services.logging',\r\n 'services.reporting',\r\n 'services.edoc',\r\n 'pdi.validate',\r\n 'pdi.extensions',\r\n 'angulartics',\r\n 'angulartics.google.analytics'\r\n])\r\n .config(function ($routeProvider, $httpProvider, $locationProvider, templateProvider)\r\n {\r\n // as of angularjs 1.6.0 they append ! to hashbang urls which causes undesired behavior\r\n // reset that functionlity by adding this hashPrefix change\r\n $locationProvider.hashPrefix('');\r\n\r\n $routeProvider\r\n .when(\"/\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"LogIn\"),\r\n controller: 'loginCtrl',\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Alerts/BalanceAlertSettings\",\r\n {\r\n templateUrl: \"account/alerts/balanceAlertSettings/balanceAlertSettings.tpl.html\",\r\n controller: \"VerifyPaymentCtrl\"\r\n }\r\n )\r\n .otherwise({\r\n templateUrl: templateProvider.getTemplate(\"Home\"),\r\n controller: \"homeCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"HomeLocalization\");\r\n }\r\n }\r\n });\r\n\r\n // Add our custom Interceptors\r\n $httpProvider.interceptors.push('httpInterceptor');\r\n $httpProvider.interceptors.push('AuthInterceptor');\r\n\r\n // For backwards compatibility to old browsers, set this to false\r\n //$locationProvider.html5Mode(false).hashPrefix('!');\r\n })\r\n .factory('httpInterceptor', function ($rootScope, $q, $injector, localizationSvc)\r\n {\r\n\r\n return {\r\n\r\n request: function (config)\r\n {\r\n\r\n config.headers = config.headers || {};\r\n\r\n\r\n if ($rootScope.loginInfo && $rootScope.loginInfo.userIsImpersonated) {\r\n config.headers['customerweb-user-id'] = $rootScope.loginInfo.userId;\r\n config.headers['customerweb-user-key'] = $rootScope.loginInfo.userKey;\r\n config.headers['customerweb-user-type'] = $rootScope.loginInfo.userType;\r\n config.headers['customerweb-impersonator-id'] = $rootScope.loginInfo.impersonatorUserId;\r\n config.headers['customerweb-impersonator-key'] = $rootScope.loginInfo.impersonatorUserKey;\r\n config.headers['customerweb-impersonator-type'] = $rootScope.loginInfo.impersonatorUserType;\r\n }\r\n\r\n // Show our ajax spinner\r\n $rootScope.showLoader = true;\r\n\r\n return config || $q.when(config);\r\n },\r\n\r\n response: function (response)\r\n {\r\n\r\n var $http = $http || $injector.get('$http');\r\n\r\n // If all the pending http requests are done or\r\n // the user is not authenticated\r\n if ($http.pendingRequests.length < 1 || $rootScope.isAuthenticated === false)\r\n {\r\n // Hide the ajax spinner\r\n $rootScope.showLoader = false;\r\n }\r\n\r\n return response || $q.when(response);\r\n\r\n },\r\n\r\n responseError: function (response)\r\n {\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"AppLocalization\");\r\n switch (response.status)\r\n {\r\n case 500:\r\n if (response.data.ExceptionMessage && response.data.ExceptionMessage.match(\"UNIQUE KEY constraint\"))\r\n {\r\n if (response.data.ExceptionMessage.match(\"AR_Web_Settings\"))\r\n $rootScope.notifier.show('' + localStrings.getLocalizedString(\"SaveFailed\") + '
' + localStrings.getLocalizedString(\"UniqueNameRequired\"), 'error');\r\n else\r\n $rootScope.notifier.show('' + localStrings.getLocalizedString(\"SaveFailed\") + '
' + localStrings.getLocalizedString(\"CannotInsertDuplicate\"), 'error');\r\n }\r\n\r\n if (response.data.ExceptionMessage && response.data.ExceptionMessage.match(\"Timeout expired\"))\r\n {\r\n $rootScope.notifier.show(localStrings.getLocalizedString(\"ConnectionTimedOut\"), 'error');\r\n }\r\n }\r\n\r\n // An error has occurred, hide the ajax spinner\r\n $rootScope.showLoader = false;\r\n\r\n return $q.reject(response);\r\n\r\n }\r\n\r\n };\r\n\r\n })\r\n .controller(\"indexCtrl\", function ($scope, $http, $q, $rootScope, Authentication, WebUserSvc, $location,\r\n WebFunctionGroups, WebFunctions, $window, BrowserService, WebProfileService, $timeout, $filter, encryptData,\r\n WebFunctionModules, PaymentService, PaperworkService, localizationSvc, LoggingService, EdocService)\r\n {\r\n 'use strict';\r\n\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"AppLocalization\");\r\n var localDateRangeStrings = localizationSvc.getCachedLocalizationsContainer(\"DateSelectorLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n $scope.appInfo = $scope.appInfo || {\r\n profile: {},\r\n webUser: {},\r\n paperwork: {},\r\n fuelCards: {},\r\n userLoaded: false,\r\n profileKey: -1,\r\n customText: \"\",\r\n backgroundImage: {},\r\n syscfg: {}\r\n };\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($rootScope.loginInfo))\r\n {\r\n $rootScope.loginInfo = {};\r\n $rootScope.loginInfo.userId = \"\";\r\n $rootScope.loginInfo.password = \"\";\r\n $rootScope.loginInfo.userKey = -1;\r\n $rootScope.loginInfo.userType = 1;\r\n $rootScope.loginInfo.userIsImpersonated = false;\r\n $rootScope.loginInfo.impersonatorUserId = \"\";\r\n $rootScope.loginInfo.impersonatorUserKey = -1;\r\n $rootScope.loginInfo.impersonatorUserType = 0;\r\n $rootScope.loginInfo.impersonationAccessGuid = undefined;\r\n\r\n }\r\n\r\n if ($location.path().search(/(SignUp|ResetPassword|unsubscribe|SiteDisabled)/i) === -1)\r\n {\r\n if ($location.path().indexOf(\"SetPassword\") >= 0)\r\n {\r\n\r\n $scope.applySystemSettings();\r\n\r\n }\r\n else if (!$scope.appInfo.userLoaded || $scope.appInfo.webUser === undefined)\r\n {\r\n if (WebUserSvc.getLoggedInWebUserToken() === undefined)\r\n $scope.logout();\r\n }\r\n }\r\n };\r\n\r\n $scope.getAuthenticationToken = function ()\r\n {\r\n return Authentication.userToken();\r\n };\r\n\r\n $scope.logout = function ()\r\n {\r\n $rootScope.sessionExpired = false;\r\n $scope.clearInfo();\r\n $scope.goTo('/');\r\n };\r\n\r\n $scope.clearInfo = function ()\r\n {\r\n $rootScope.loggingOut = true;\r\n let paperworkLockInfo = amplify.store(\"removeLockInfo\");\r\n if (!angular.isUndefinedOrNullOrEmpty(paperworkLockInfo)) {\r\n PaperworkService.RemovePaperworkLock(paperworkLockInfo.batchKey, paperworkLockInfo.custKey);\r\n }\r\n\r\n clearPaymentLocks();\r\n\r\n setTimeout(function() {\r\n amplify.store(\"removeLockInfo\", null);\r\n amplify.store(\"pnuser-token\", null);\r\n amplify.store(\"pnprofile\", null);\r\n amplify.store(\"pnWebProfile\", null);\r\n amplify.store(\"pnAuthIndex\", null);\r\n $rootScope.isAuthenticated = false;\r\n $rootScope.loginInfo = {};\r\n $rootScope.loginInfo.userId = \"\";\r\n $rootScope.loginInfo.password = \"\";\r\n $rootScope.loginInfo.rememberMe = false;\r\n $scope.locationInfo = {};\r\n $scope.appInfo = {};\r\n }, 0);\r\n };\r\n\r\n function clearPaymentLocks() {\r\n let lockData = amplify.store(\"paymentLockData\");\r\n if (!angular.isUndefinedOrNullOrEmpty(lockData)) {\r\n PaymentService.unLockPayments(lockData.CustContKey, lockData.EmailAddress, lockData.CustKey);\r\n PaymentService.unlockInvoices(lockData.CustContKey, lockData.EmailAddress, lockData.CustKey);\r\n\r\n amplify.store(\"paymentLockData\", null);\r\n }\r\n }\r\n\r\n $scope.functionGroup = WebFunctionGroups;\r\n $scope.webFunctions = WebFunctions;\r\n $scope.locationInfo = {\r\n menuLocation: 0,\r\n subMenuLocation: -1,\r\n sideMenu: \"\",\r\n sideMenuData: {}\r\n };\r\n\r\n //default actions for side menu apply buttons\r\n $scope.applyAction = function ()\r\n {\r\n //todo: set error condition indicating there is no assigned action\r\n };\r\n\r\n\r\n $scope.applySystemSettings = function ()\r\n {\r\n WebProfileService.initialize().then(function (data)\r\n {\r\n $scope.appInfo.syscfg = data.Configuration;\r\n $scope.appInfo.softwareVersion = data.SoftwareVersion;\r\n $scope.appInfo.ContactUsText = data.ContactUsText;\r\n $scope.appInfo.poweredByPdiText = data.PoweredByPdiText;\r\n $scope.appInfo.countryInfo = data.Country;\r\n $scope.appInfo.passwordComplexity = data.PasswordComplexity;\r\n\r\n if (!$scope.appInfo.userLoaded)\r\n {\r\n $scope.appInfo.LandingLogoImage = data.LandingLogoImage;\r\n $scope.appInfo.backgroundImage = data.LandingBannerImage;\r\n }\r\n\r\n if ($scope.appInfo.syscfg.UseGoogleAnalytics === 'True' && !$scope.appInfo.syscfg.GoogleAnalyticsKey.isBlank())\r\n {\r\n let isGA4 = $scope.appInfo.syscfg.GoogleAnalyticsKey.substring(0,1) === 'G';\r\n if (isGA4) {\r\n var addGoogleAnalytics = document.createElement(\"script\");\r\n addGoogleAnalytics.setAttribute(\"src\",`https://www.googletagmanager.com/gtag/js?id=${$scope.appInfo.syscfg.GoogleAnalyticsKey}`);\r\n addGoogleAnalytics.async = \"true\";\r\n document.head.appendChild(addGoogleAnalytics);\r\n\r\n var addDataLayer = document.createElement(\"script\");\r\n var dataLayerData = document.createTextNode(`window.dataLayer = window.dataLayer || []; \\n function gtag(){dataLayer.push(arguments);} \\n gtag('js', new Date()); \\n gtag('config', '${$scope.appInfo.syscfg.GoogleAnalyticsKey}');`);\r\n addDataLayer.appendChild(dataLayerData);\r\n document.head.appendChild(addDataLayer);\r\n } else {\r\n ga('create', $scope.appInfo.syscfg.GoogleAnalyticsKey, 'auto'); // 'none' while you are working on localhost else 'auto'\r\n }\r\n }\r\n });\r\n };\r\n\r\n $scope.applySystemSettingsSiteDisabled = function ()\r\n {\r\n WebProfileService.initializeSiteDisabled().then(function (data)\r\n {\r\n $scope.appInfo.syscfg = data.Configuration;\r\n $scope.appInfo.softwareVersion = data.SoftwareVersion;\r\n $scope.appInfo.poweredByPdiText = data.PoweredByPdiText;\r\n $scope.appInfo.countryInfo = data.Country;\r\n $scope.appInfo.passwordComplexity = data.PasswordComplexity;\r\n if (!$scope.appInfo.userLoaded)\r\n {\r\n $scope.appInfo.LandingLogoImage = data.LandingLogoImage;\r\n $scope.appInfo.backgroundImage = data.LandingBannerImage;\r\n }\r\n\r\n });\r\n };\r\n\r\n $scope.applySelectedProfile = function () {\r\n $scope.appInfo.webUser = WebUserSvc.getWebUser();\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser)) {\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser.CurrentWebProfile)) {\r\n $scope.appInfo.profile = $scope.appInfo.webUser.CurrentWebProfile;\r\n $scope.appInfo.profileKey = $scope.appInfo.webUser.CurrentWebProfile.Key;\r\n WebProfileService.setProfileColor($scope.appInfo.webUser.CurrentWebProfile.PrimaryColor);\r\n }\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.authorizationIndex))\r\n $scope.appInfo.authorizationIndex = WebUserSvc.getCurrentAuthorization();\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.authorizationIndex))\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[$scope.appInfo.authorizationIndex];\r\n\r\n $scope.appInfo.backgroundImage = $scope.appInfo.webUser.MenuBackgroundImage;\r\n $scope.appInfo.userLoaded = true;\r\n }\r\n };\r\n\r\n $scope.checkForAppliedProfile = function () {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser) ||\r\n angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser.CurrentWebProfile) ||\r\n angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser.CurrentAuthorization)) {\r\n $scope.applySelectedProfile();\r\n }\r\n };\r\n\r\n $scope.setSubMenu = function (value, location)\r\n {\r\n $scope.locationInfo.sideMenuData.pendingNav = $timeout(function ()\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = value;\r\n $scope.locationInfo.sideMenuData.pendingNav = undefined;\r\n }, 0);\r\n };\r\n\r\n $scope.setWebProfile = function (profileKey)\r\n {\r\n $scope.appInfo.profileKey = profileKey;\r\n WebProfileService.setWebProfile(profileKey).then(function (data)\r\n {\r\n $scope.appInfo.profile = data.WebProfile;\r\n });\r\n };\r\n\r\n $scope.setSystemConfiguration = function ()\r\n {\r\n WebProfileService.setSystemConfiguration().then(function (data)\r\n {\r\n\r\n });\r\n };\r\n\r\n $scope.checkCurrentUserPermissions = function (value, contact)\r\n {\r\n $scope.checkForAppliedProfile();\r\n\r\n if (!contact)\r\n {\r\n if (!$scope.appInfo.webUser) return false;\r\n if (!$scope.appInfo.webUser.CurrentAuthorization) return false;\r\n contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n }\r\n var webFunctions = contact.CustomerContactWebFunctions;\r\n for (var x = 0; x < value.length; x++)\r\n {\r\n var hasModuleAccess = $scope.checkCurrentCustomerModules(value[x]);\r\n\r\n for (var i = 0; i < webFunctions.length; i++)\r\n //check to see if the current customer has the allowed function.\r\n //then check the contact security.\r\n if (webFunctions[i].WebFnKey === value[x])\r\n if (hasModuleAccess && webFunctions[i].Selected)\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n $scope.checkCurrentUserPermission = function (value, contact)\r\n {\r\n $scope.checkForAppliedProfile();\r\n\r\n if (!contact)\r\n {\r\n if (!$scope.appInfo.webUser) return false;\r\n if (!$scope.appInfo.webUser.CurrentAuthorization) return false;\r\n contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n }\r\n\r\n //check to see if the current customer has the allowed function.\r\n if (!$scope.checkCurrentCustomerModules(value))\r\n return false;\r\n\r\n if (contact.AllWebFunctions) return true;\r\n\r\n var webFunctions = contact.CustomerContactWebFunctions;\r\n for (var i = 0; i < webFunctions.length; i++)\r\n if (webFunctions[i].WebFnKey === value)\r\n {\r\n return webFunctions[i].Selected;\r\n }\r\n return false;\r\n };\r\n\r\n $scope.checkCurrentCustomerModules = function (value)\r\n {\r\n var currentCustomer = $scope.appInfo.webUser.CurrentAuthorization.Customer;\r\n var isBulkFuel = currentCustomer.BulkFuelCustomer !== 0;\r\n var isCardLock = currentCustomer.CardLockCustomer !== 0;\r\n var isRetail = currentCustomer.RetailCustomer !== 0;\r\n var isWholesale = currentCustomer.WholesaleCustomer !== 0;\r\n var isWebEft = (currentCustomer.WebPmtEFTGrpKey !== null && currentCustomer.WebPmtEFTGrpKey !== 0);\r\n\r\n //check to see if the current customer has the allowed function.\r\n return WebFunctionModules.checkWebFunctionModules(value, isBulkFuel, isCardLock, isRetail, isWholesale, isWebEft, currentCustomer);\r\n };\r\n\r\n $scope.openEdocByRefNo = function (type, key, refNo, custKey)\r\n {\r\n var qs = {\r\n \"EdocDetailsKey\" : 0,\r\n \"Type\" : type,\r\n \"Key\" : key,\r\n \"RefNo\" : refNo,\r\n \"CustKey\" : custKey\r\n };\r\n\r\n EdocService.renderEdocByRefNo(JSON.stringify(qs))\r\n .then(function (edoc) {\r\n var url = EdocService.createUrl(edoc);\r\n window.open(url, '_blank', 'menubar=no,resizable=no,height=600,width=770,toolbar=no');\r\n });\r\n };\r\n\r\n function openNewWindow(url)\r\n {\r\n window.open(url, localStrings.getLocalizedString(\"DocumentViewer\"), 'location=no,menubar=no,resizable=no,scrollbars=no,status=no ,toolbar=no, height=600, width=770');\r\n }\r\n\r\n $scope.openEdoc = function (edocKey)\r\n {\r\n EdocService.renderEdoc(edocKey)\r\n .then(function (edoc){\r\n openNewWindow(EdocService.createUrl(edoc));\r\n });\r\n };\r\n\r\n $scope.openEdocEmail = function (edocKey, senderAddress)\r\n {\r\n if (senderAddress && senderAddress.length > 0)\r\n {\r\n var qs = \"EdocDetailsKey=\" + edocKey +\r\n \"senderAddress=\" + senderAddress;\r\n\r\n encryptData.encrypt(qs).then(function (data)\r\n {\r\n var url = '../EdocDetailsEmail/Index/?x=' + encodeURIComponent(data) + '&y=' + encodeURIComponent(Authentication.userToken());\r\n openNewWindow(url);\r\n });\r\n return;\r\n }\r\n $scope.openEdoc(edocKey);\r\n };\r\n\r\n $scope.openAttachment = function (attachmentGuid)\r\n {\r\n var url = '../api/Attachment/?x=' + attachmentGuid + '&y=' + encodeURIComponent(Authentication.userToken());\r\n openNewWindow(url);\r\n };\r\n\r\n $scope.getWebProfileMessage = function (messageKey)\r\n {\r\n var profileKey = ($scope.appInfo && $scope.appInfo.profileKey) ? $scope.appInfo.profileKey : 0;\r\n\r\n WebProfileService.getWebProfileMessage(profileKey, messageKey).then(function (data)\r\n {\r\n $scope.appInfo.customText = data;\r\n });\r\n };\r\n\r\n //spin up the webprofile service to make sure future calls will load correctly\r\n $scope.getWebProfileMessage(1);\r\n\r\n $scope.$on('$locationChangeStart', function (event, next, current) {\r\n\r\n if ($location.path().search(/(login|SignUp|ResetPassword|SetPassword|SiteDisabled|unsubscribe)/i) > -1)\r\n return;\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo) ||\r\n angular.isUndefinedOrNullOrEmpty(WebUserSvc.getLoggedInWebUserToken())) {\r\n $scope.goTo('/');\r\n }\r\n\r\n $scope.checkForAppliedProfile();\r\n\r\n if (!next || !current || !$scope.appInfo.webUser) return;\r\n\r\n if (next.indexOf('AccountVerifyPayment') < 0 &&\r\n next.indexOf('MakeAPayment') < 0 &&\r\n (current && current.indexOf('/Payments/') >= 0)) {\r\n PaymentService.unLockPayments($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n PaymentService.unlockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n amplify.store(\"paymentLockData\", null);\r\n }\r\n });\r\n\r\n $scope.$on('$routeChangeError', function (event, current, previous, rejection)\r\n {\r\n switch (rejection)\r\n {\r\n\r\n // Handle invalid auth token errors on route change\r\n case 'authentication:auth-token not valid':\r\n $scope.goTo('/login');\r\n $scope.notifier.show(localStrings.getLocalizedString(\"InvalidCredentials\"), 'error');\r\n break;\r\n\r\n default:\r\n // Display error message to user\r\n $scope.notifier.show('Invalid path', 'error');\r\n }\r\n });\r\n\r\n $scope.urlFormatDate = function (aDate, ignoreIe)\r\n {\r\n if (typeof(aDate) !== 'string' || aDate.isBlank()) return;\r\n\r\n var browser = BrowserService.getBrowserType();\r\n var aDate2 = new Date();\r\n if (Object.prototype.toString.call(aDate) !== '[object Date]')\r\n {\r\n aDate = aDate.substr(0, 10);\r\n aDate2 = new Date(Date.parse(aDate.replace(/-/g, \"/\").replace(/T/g, \" \")));\r\n if (isNaN(aDate2.getTime()))\r\n {\r\n aDate2 = new Date();\r\n }\r\n } else\r\n {\r\n aDate2 = aDate;\r\n }\r\n\r\n if (browser === 'ie' && !ignoreIe)\r\n return (\"0\" + (aDate2.getMonth() + 1)).slice(-2) + '/' + (\"0\" + aDate2.getDate()).slice(-2) + '/' + aDate2.getFullYear();\r\n return aDate2.getFullYear() + '-' + (\"0\" + (aDate2.getMonth() + 1)).slice(-2) + '-' + (\"0\" + aDate2.getDate()).slice(-2);\r\n };\r\n\r\n $scope.formatDate = function (aDate)\r\n {\r\n return $filter('date')(aDate, 'MM/dd/yyyy');\r\n };\r\n\r\n $scope.formatDateTime = function (aDate)\r\n {\r\n return $filter('date')(aDate, 'MM/dd/yyyy hh:mm a');\r\n };\r\n\r\n $scope.addDaysToDate = function addDays(date, days)\r\n {\r\n var result = new Date(date);\r\n result.setDate(result.getDate() + days);\r\n return result;\r\n };\r\n\r\n var successEventListener = $rootScope.$on('event:Success', function (event, data)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesSaved\"), \"success\");\r\n\r\n if (data.opResults.HasWarnings)\r\n {\r\n angular.forEach(data.opResults.Warnings, function (item)\r\n {\r\n $scope.notifier.show(item, \"warning\");\r\n });\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', successEventListener);\r\n\r\n var failedEventListener = $rootScope.$on('event:Failed', function (event, data)\r\n {\r\n if (data.opResults.HasErrors)\r\n {\r\n // Account lock errors go into a custom kendo notification widget\r\n var _accountLockError = localStrings.getLocalizedString(\"AccountLockError\");\r\n\r\n angular.forEach(data.opResults.Errors, function (item)\r\n {\r\n if (item === _accountLockError) {\r\n $scope.lockedAccount.show(item, \"error\");\r\n }\r\n else\r\n $scope.notifier.show(item, \"error\");\r\n });\r\n }\r\n\r\n if (data.opResults.HasWarnings)\r\n {\r\n angular.forEach(data.opResults.Warnings, function (item)\r\n {\r\n $scope.notifier.show(item, \"warning\");\r\n });\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', failedEventListener);\r\n\r\n var errorEventListener = $rootScope.$on('event:Error', function (obj, data) {\r\n var errors = { ExceptionMessage: data.opResults.ExceptionMessage, Stacktrace: data.opResults.StackTrace };\r\n\r\n LoggingService.logErrors(errors).then(function(data) {\r\n console.log(\"Exception was logged please check SIEL in Enterprise Web.\");\r\n });\r\n });\r\n\r\n $scope.$on('$destroy', errorEventListener);\r\n\r\n $scope.goTo = function (path)\r\n {\r\n $location.path(path);\r\n };\r\n\r\n $scope.setFocusOnReady = function setFocusOnReady(elemID)\r\n {\r\n setTimeout(function ()\r\n {\r\n $scope.$apply(function ()\r\n {\r\n $(elemID).focus();\r\n });\r\n }, 100);\r\n };\r\n\r\n $scope.paymentsEnabled = function ()\r\n {\r\n return $scope.appInfo.webUser.CurrentWebProfile.WebPaymentsEnabled &&\r\n $scope.appInfo.webUser.CurrentAuthorization.Customer.UsesWebEFT !== '0' &&\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms > 0 &&\r\n ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPaymentAccounts) ||\r\n ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPayments) && $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.ActiveAccountCount > 0 ));\r\n };\r\n\r\n $scope.execOnReady = function execOnReady(func)\r\n {\r\n setTimeout(function ()\r\n {\r\n $scope.$apply(func());\r\n }, 0);\r\n };\r\n\r\n $scope.resetDirtyFlags = function resetDirtyFlags(form)\r\n {\r\n $timeout(function ()\r\n {\r\n form.$setPristine();\r\n $('.k-dirty').removeClass('k-dirty');\r\n $('.k-dirty-cell').removeClass('k-dirty-cell');\r\n }, 0);\r\n };\r\n\r\n $scope.resizeKendoGrid = function resizeKendoGrid(grid, count, offset)\r\n {\r\n var widowHeight = $(window).innerHeight() - offset;\r\n var dataHeight = count * 35;\r\n\r\n if (dataHeight > widowHeight)\r\n {\r\n grid.setOptions({\r\n height: widowHeight,\r\n scrollable: true\r\n });\r\n }\r\n else\r\n {\r\n grid.setOptions({\r\n height: 'inherit',\r\n scrollable: false\r\n });\r\n }\r\n };\r\n\r\n $scope.initializeDateSelector = function() {\r\n $scope.dateSelector = {\r\n displaySelector: true,\r\n selection: 9,\r\n startDate: '',\r\n startMin: '1/1/1900',\r\n startMax: '6/6/2079',\r\n endDate: '',\r\n endMin: '1/1/1900',\r\n endMax: '6/6/2079',\r\n numOfDays: 7,\r\n maxNumOfDays: 90,\r\n options: [\r\n { name: localDateRangeStrings.getLocalizedString(\"Today\"), value: 0 },\r\n { name: localDateRangeStrings.getLocalizedString(\"Yesterday\"), value: 1 },\r\n { name: localDateRangeStrings.getLocalizedString(\"Tomorrow\"), value: 2 },\r\n { name: localDateRangeStrings.getLocalizedString(\"ThisWeek\"), value: 3 },\r\n { name: localDateRangeStrings.getLocalizedString(\"ThisMonth\"), value: 4 },\r\n { name: localDateRangeStrings.getLocalizedString(\"ThisYear\"), value: 5 },\r\n { name: localDateRangeStrings.getLocalizedString(\"PriorWeek\"), value: 6 },\r\n { name: localDateRangeStrings.getLocalizedString(\"PriorMonth\"), value: 7 },\r\n { name: localDateRangeStrings.getLocalizedString(\"PriorYear\"), value: 8 },\r\n { name: localDateRangeStrings.getLocalizedString(\"LastSevenDays\"), value: 9 },\r\n { name: localDateRangeStrings.getLocalizedString(\"LastThirtyDays\"), value: 10 },\r\n { name: localDateRangeStrings.getLocalizedString(\"SelectDates\"), value: 11 },\r\n { name: localDateRangeStrings.getLocalizedString(\"SelectDays\"), value: 12 },\r\n { name: localDateRangeStrings.getLocalizedString(\"AllDays\"), value: 13 }\r\n ],\r\n valid: false,\r\n overrideDefaults: false,\r\n hideAllDays: false,\r\n disabled: false\r\n };\r\n\r\n $scope.dateSelectorInitialized = true;\r\n };\r\n\r\n $scope.$on('$viewContentLoaded', function () {\r\n $timeout(function () {\r\n\r\n //Build localized strings for the entire application once all localization files are rendered\r\n if (!$scope.localizationFilesInitialized) {\r\n var localizationFilesListener = $scope.$watch($('#DateSelectorLocalization innerText'), $timeout(function () {\r\n localizationFilesListener();//Destroy the $watch\r\n localizationSvc.setCachedLocalizations();\r\n $scope.localizationFilesInitialized = true;//Only initialize once\r\n }, true), 0);\r\n }\r\n\r\n // Initialize the dateselector control if it has not been initialized\r\n // From one of the other javascript files\r\n if (!$scope.dateSelectorInitialized) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.modalifier = {\r\n display: false,\r\n title: '',\r\n text: '',\r\n showConfirm: false,\r\n closeBtnTxt: localStrings.getLocalizedString(\"Close\"),\r\n confirmBtnTxt: localStrings.getLocalizedString(\"Yes\"),\r\n show: function (title, text)\r\n {\r\n $scope.modalifier.title = title;\r\n $scope.modalifier.text = text;\r\n $scope.modalifier.showConfirm = false;\r\n $scope.modalifier.display = true;\r\n },\r\n hide: function ()\r\n {\r\n $scope.modalifier.display = false;\r\n },\r\n showSetupError: function ()\r\n {\r\n $scope.modalifier.title = localStrings.getLocalizedString(\"PageSetupError\");\r\n $scope.modalifier.text = localStrings.getLocalizedString(\"SomeDataFailedLoad\") + '
' +\r\n localStrings.getLocalizedString(\"PleaseRefresh\");\r\n $scope.modalifier.showConfirm = false;\r\n $scope.modalifier.display = true;\r\n },\r\n showSavedError: function () {\r\n $scope.modalifier.title = localStrings.getLocalizedString(\"PageSetupError\");\r\n $scope.modalifier.text = localStrings.getLocalizedString(\"DailySettlementFailed\") + '
' +\r\n localStrings.getLocalizedString(\"FuelMetersSaveFailed\");\r\n $scope.modalifier.showConfirm = false;\r\n $scope.modalifier.display = true;\r\n },\r\n showNoResults: function (page)\r\n {\r\n $scope.modalifier.title = page;\r\n $scope.modalifier.text = localStrings.getLocalizedString(\"CriteriaNoResults\");\r\n $scope.modalifier.showConfirm = false;\r\n $scope.modalifier.display = true;\r\n },\r\n confirm: function (text, fnYes, fnNo, title)\r\n {\r\n $scope.modalifier.title = title || localStrings.getLocalizedString(\"Confirm\");\r\n $scope.modalifier.closeBtnTxt = localStrings.getLocalizedString(\"No\");\r\n $scope.modalifier.confirmBtnTxt = localStrings.getLocalizedString(\"Yes\");\r\n $scope.modalifier.text = text;\r\n $scope.modalifier.confirmYes = function ()\r\n {\r\n $scope.modalifier.display = false;\r\n if (!angular.isUndefined(fnYes))\r\n fnYes();\r\n };\r\n $scope.modalifier.confirmNo = function ()\r\n {\r\n $scope.modalifier.display = false;\r\n if (!angular.isUndefined(fnNo))\r\n fnNo();\r\n };\r\n $scope.modalifier.showConfirm = true;\r\n $scope.modalifier.display = true;\r\n },\r\n confirmNo: null,\r\n confirmYes: null\r\n };\r\n }, 0);\r\n });\r\n })\r\n .directive('stringNumber', [function () {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, controller) {\r\n controller.$formatters.push(function (modelValue) {\r\n return Number(modelValue); /*convert to number, for going from to view*/\r\n });\r\n controller.$parsers.push(function (viewValue) {\r\n return '' + viewValue; /*convert to string, for going from view to model*/\r\n });\r\n }\r\n };\r\n }]);\r\n","/**\r\n * Created by jvitoria on 1/30/2015.\r\n */\r\n\r\n//helper functions\r\nvar getAttrTextFromNodeMap = function (element, attr) {\r\n // get html element attribute by name from a NamedNodeMap\r\n return $('#' + element )[0].attributes.getNamedItem(attr).value;\r\n};\r\n\r\nangular.module(\"pnDateSelector\", ['core.objects'])\r\n .config(function ($provide, templateProvider) {\r\n $provide.constant('templates', templateProvider);\r\n })\r\n .controller(\"dateSelectorCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n })\r\n .directive('dateSelector', function (templates)\r\n {\r\n return {\r\n restrict: 'E',\r\n scope: false,\r\n controller: function ($scope, $rootScope, $filter, localizationSvc)\r\n {\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"DateSelectorLocalization\"); \r\n $scope.initDateSelector = function ()\r\n {\r\n // set defaults\r\n if (!$scope.dateSelector) {\r\n $scope.dateSelector = {};\r\n }\r\n \r\n // reset dateSelector.options based on hideAllDays flag\r\n $scope.dateSelector.options = [];\r\n if ($scope.dateSelector.hideAllDays !== true) {\r\n $scope.dateSelector.options.push(\r\n {name: localStrings.getLocalizedString(\"AllDays\"), value: 13});\r\n }\r\n $scope.dateSelector.options.push(\r\n {name: localStrings.getLocalizedString(\"Today\"), value: 0},\r\n {name: localStrings.getLocalizedString(\"Yesterday\"), value: 1},\r\n {name: localStrings.getLocalizedString(\"Tomorrow\"), value: 2},\r\n {name: localStrings.getLocalizedString(\"ThisWeek\"), value: 3},\r\n {name: localStrings.getLocalizedString(\"ThisMonth\"), value: 4},\r\n {name: localStrings.getLocalizedString(\"ThisYear\"), value: 5},\r\n {name: localStrings.getLocalizedString(\"PriorWeek\"), value: 6},\r\n {name: localStrings.getLocalizedString(\"PriorMonth\"), value: 7},\r\n {name: localStrings.getLocalizedString(\"PriorYear\"), value: 8},\r\n {name: localStrings.getLocalizedString(\"LastSevenDays\"), value: 9},\r\n {name: localStrings.getLocalizedString(\"LastThirtyDays\"), value: 10},\r\n {name: localStrings.getLocalizedString(\"SelectDates\"), value: 11},\r\n {name: localStrings.getLocalizedString(\"SelectDays\"), value: 12});\r\n\r\n $scope.dateSelector.startMin = '1/1/1900';\r\n $scope.dateSelector.startMax = '6/6/2079';\r\n $scope.dateSelector.endMin = '1/1/1900';\r\n $scope.dateSelector.endMax = '6/6/2079';\r\n $scope.dateSelector.disabled = false;\r\n $scope.dateSelector.hideAllDays = false;\r\n\r\n // override parameer data if flag is false\r\n if ($scope.dateSelector.overrideDefaults) {\r\n $scope.dateSelector.overrideDefaults = false;\r\n }\r\n else\r\n {\r\n $scope.dateSelector.displaySelector = true;\r\n $scope.dateSelector.selection = 9;\r\n $scope.dateSelector.startDate = '';\r\n $scope.dateSelector.endDate = '';\r\n $scope.dateSelector.numOfDays = 7;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.valid = false;\r\n }\r\n $scope.onChange();\r\n };\r\n\r\n $scope.validateStartAndEndDate = function ()\r\n {\r\n $scope.dateSelector.valid = Date.parse($scope.dateSelector.startDate) <= Date.parse($scope.dateSelector.endDate);\r\n if (!$scope.dateSelector.valid)\r\n {\r\n // (htmlElement, attribute) \r\n $scope.notifier.show(getAttrTextFromNodeMap('dateSelectorFromThru', 'pdi-date-is-greater-equal-to-msg'), 'error');\r\n }\r\n };\r\n\r\n $scope.onChange = function ()\r\n {\r\n var today = new Date();\r\n var year = new Date().getFullYear();\r\n //month is the only zero based date variable\r\n var month = new Date().getMonth();\r\n var date = new Date().getDate();\r\n var days = new Date().getDay();\r\n\r\n switch (parseInt($scope.dateSelector.selection, 10))\r\n {\r\n case 0: //today\r\n case 14: //single date selector\r\n $scope.dateSelector.startDate = $filter('date')(today, 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $scope.dateSelector.startDate;\r\n break;\r\n case 1: //yesterday\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $scope.dateSelector.startDate;\r\n break;\r\n case 2: //tomorrow\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date + 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $scope.dateSelector.startDate;\r\n break;\r\n case 3: //this week\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - days), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, month, date - days + 6), 'MM/dd/yyyy');\r\n break;\r\n case 4: //this month\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, month + 1, 0), 'MM/dd/yyyy');\r\n break;\r\n case 5: //this year\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, 0, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, 11, 31), 'MM/dd/yyyy');\r\n break;\r\n case 6: //previous week\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - days - 7), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, month, date - days - 1), 'MM/dd/yyyy');\r\n break;\r\n case 7: //previous month\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month - 1, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year, month, 0), 'MM/dd/yyyy');\r\n break;\r\n case 8: //previous year\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year - 1, 0, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(year - 1, 11, 31), 'MM/dd/yyyy');\r\n break;\r\n case 9: //last 7 days\r\n case 11: //select dates\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - 6), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(), 'MM/dd/yyyy');\r\n break;\r\n case 10: //last 30 days\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - 29), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(), 'MM/dd/yyyy');\r\n break;\r\n case 12: //select days\r\n $scope.dateSelector.numOfDays = ($scope.dateSelector.numOfDays > $scope.dateSelector.maxNumOfDays) ? $scope.dateSelector.maxNumOfDays : $scope.dateSelector.numOfDays;\r\n $scope.dateSelector.startDate = $filter('date')(new Date(year, month, date - $scope.dateSelector.numOfDays + 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(), 'MM/dd/yyyy');\r\n break;\r\n case 13: //all days\r\n $scope.dateSelector.startDate = $filter('date')(new Date(1900, 0, 1), 'MM/dd/yyyy');\r\n $scope.dateSelector.endDate = $filter('date')(new Date(2079, 0, 1), 'MM/dd/yyyy');\r\n break;\r\n }\r\n\r\n /*var debug = 'Date Changed
Start Date: '+ $scope.dateSelector.startDate + '
End Date: '+ $scope.dateSelector.endDate;\r\n $scope.notifier.show(debug ,'info');*/\r\n };\r\n\r\n },\r\n templateUrl: templates.getTemplate(\"DateSelector\")\r\n };\r\n });","/**\r\n * Created by rhampton on 2/27/2015.\r\n */\r\nangular.module(\"pnContactUs\", ['ngSanitize', 'core.objects', 'services.payments', 'core.directives'])\r\n .controller(\"ContactUs\", function ($scope, ContactUs, localizationSvc)\r\n {\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"AppLocalization\");\r\n function Message(ct, st, m)\r\n {\r\n this.ContactUsSubject = ct || 0;\r\n this.SubjectText = st || '';\r\n this.ContactUsMessage = m || '';\r\n this.CustomerContactKey = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.Key || 0;\r\n }\r\n\r\n $scope.appInfo.showContactUsModal = false;\r\n\r\n $scope.$watch('appInfo.showContactUsModal', function ()\r\n {\r\n if ($scope.appInfo.showContactUsModal)\r\n {\r\n $scope.message = new Message($scope.CommentContexts[0] ? $scope.CommentContexts[0].Key : '');\r\n $scope.getWebProfileMessage(2);\r\n }\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.CommentContexts = {};\r\n $scope.showErrorBox = false;\r\n\r\n ContactUs.loadContactUsContext().then(function (data)\r\n {\r\n $scope.CommentContexts = data.CommentContexts;\r\n });\r\n };\r\n\r\n $scope.$parent.sendMessage = function ()\r\n {\r\n if (!validateMessage())\r\n return;\r\n\r\n ContactUs.saveMessage($scope.message).then(\r\n function (data)\r\n {\r\n if (data.MessageSent)\r\n {\r\n $scope.appInfo.showContactUsModal = false;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"MessageSent\"), 'success');\r\n }\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"MessageNotSent\"), 'error');\r\n });\r\n };\r\n\r\n function validateMessage()\r\n {\r\n var valid = true;\r\n\r\n if($scope.CommentContexts.length > 0 && $scope.message.ContactUsSubject.toNumber() < 1)\r\n {\r\n valid = false;\r\n }\r\n\r\n if($scope.CommentContexts.length <= 0 && $scope.message.SubjectText.isBlank())\r\n {\r\n valid = false;\r\n }\r\n\r\n if($scope.message.ContactUsMessage.isBlank())\r\n {\r\n valid = false;\r\n }\r\n\r\n $scope.showErrorBox = !valid;\r\n return valid;\r\n }\r\n });\r\n","/**\r\n * Created by rhampton on 1/29/2015.\r\n */\r\nangular.module(\"pnDocuments\", ['ngSanitize', 'core.objects', 'services.payments', 'core.directives'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Dyn/:header/Home\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Dyn\"),\r\n controller: \"DocumentCtrl\"\r\n }\r\n )\r\n .when(\"/Dyn/:header/:sub/Home\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Dyn\"),\r\n controller: \"DocumentCtrl\"\r\n }\r\n )\r\n .when(\"/Dyn/:header/:sub/:side\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Dyn\"),\r\n controller: \"DocumentBodyCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n }\r\n }\r\n }\r\n );\r\n })\r\n .controller(\"DocumentSideMenuCtrl\", function ($scope, $http, $q, $routeParams, $anchorScroll, $filter)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData.subMenu || $scope.locationInfo.sideMenuData.subMenu.length === 0)\r\n {\r\n var menu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.HeaderMenu, {Name: $routeParams.header})[0];\r\n if (menu)\r\n {\r\n $scope.locationInfo.menuLocation = menu.Key;\r\n }\r\n var subMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {\r\n ParentKey: $scope.locationInfo.menuLocation,\r\n Name: $routeParams.sub\r\n })[0];\r\n if (subMenu)\r\n {\r\n $scope.locationInfo.subMenuLocation = subMenu.Key;\r\n }\r\n var sideMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SideMenu, {\r\n ParentKey: $scope.locationInfo.subMenuLocation,\r\n Name: $routeParams.side\r\n })[0];\r\n if (sideMenu)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = sideMenu.Key;\r\n }\r\n }\r\n };\r\n\r\n $scope.setSiteMenuLocation = function (val)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = val;\r\n };\r\n })\r\n .controller(\"DocumentCtrl\", function ($scope, $http, $q, $routeParams, $anchorScroll, $filter, templates)\r\n {\r\n 'use strict';\r\n $scope.locationInfo.menuObject = {};\r\n $scope.locationInfo.subMenuObject = {};\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenu = '';\r\n $scope.locationInfo.menuText = $routeParams.header;\r\n $scope.locationInfo.subMenuText = $routeParams.sub;\r\n var subMenu = {};\r\n if (!$scope.locationInfo.subMenuText)\r\n {\r\n subMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {ParentKey: $scope.locationInfo.menuLocation})[0];\r\n if (subMenu)\r\n {\r\n $scope.locationInfo.subMenuText = subMenu.Name;\r\n $scope.locationInfo.subMenuLocation = subMenu.Key;\r\n }\r\n } else\r\n {\r\n subMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {\r\n ParentKey: $scope.locationInfo.menuLocation,\r\n Name: $scope.locationInfo.subMenuText\r\n })[0];\r\n if (subMenu)\r\n {\r\n $scope.locationInfo.subMenuLocation = subMenu.Key;\r\n }\r\n\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"DocumentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.subMenu || $scope.locationInfo.sideMenuData.subMenu.length === 0)\r\n {\r\n var sideMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SideMenu, {ParentKey: $scope.locationInfo.subMenuLocation})[0];\r\n if (!sideMenu)\r\n {\r\n $scope.goTo('Documents/Account/Statements');\r\n }\r\n\r\n if (sideMenu)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = sideMenu.Key;\r\n $scope.goTo(\"/Dyn/\" + $routeParams.header + \"/\" + $scope.locationInfo.subMenuText + \"/\" + sideMenu.Name);\r\n }\r\n }\r\n\r\n $scope.name = 'document';\r\n };\r\n })\r\n .controller(\"DocumentBodyCtrl\", function ($scope, $http, $q, $routeParams, $anchorScroll, $filter, documentService, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.documentsGrid = {};\r\n $scope.kendo.documentsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n if (!dataItem.Guid)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Documents\"), localStrings.getLocalizedString(\"SelectedDocumentNoLonger\"));\r\n return;\r\n }\r\n else\r\n $scope.openAttachment(dataItem.Guid);\r\n\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"RefDateFormatted\",\r\n title: localStrings.getLocalizedString(\"ReferenceDate\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"RefNo\",\r\n title: localStrings.getLocalizedString(\"ReferenceNo\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Description\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.documentsGridInit = function (ds)\r\n {\r\n $scope.kendo.documentsGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.documentsGridDS.read();\r\n $scope.kendo.documentsGrid.dataSource.data($scope.kendo.documentsGridDS.data());\r\n };\r\n\r\n function getDocuments(ref, desc, start, end, custKey, docType, contKey)\r\n {\r\n documentService.listDocuments(ref, desc, start, end, custKey, docType, contKey).then(function (data)\r\n {\r\n if (data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults($scope.locationInfo.documents.name);\r\n return;\r\n }\r\n\r\n angular.forEach(data, function (element)\r\n {\r\n element.RefDateFormatted = element.RefDate === \"0001-01-01T00:00:00\" ? null : $filter('date')(element.RefDate, 'MM/dd/yyyy');\r\n });\r\n\r\n $scope.kendo.documentsGridInit(data);\r\n });\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.checkForAppliedProfile();\r\n\r\n //required to rebuild dymanic sub and side menus in case of user pressing refresh.\r\n if($scope.locationInfo.menuLocation === 0)\r\n {\r\n $scope.goTo('Documents/Account/Statements');\r\n }\r\n\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"DocumentSideMenu\");\r\n\r\n $scope.locationInfo.menuText = $routeParams.header;\r\n $scope.locationInfo.subMenuText = $routeParams.sub;\r\n if (!$scope.locationInfo.documents) $scope.locationInfo.documents = {};\r\n $scope.locationInfo.documents.minDate = new Date(1990, 0, 1);\r\n $scope.locationInfo.documents.name = $routeParams.side;\r\n\r\n //auto load non-transaction document types\r\n var thisMenu = $scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SideMenu.find({Name:$scope.locationInfo.documents.name});\r\n if(thisMenu && thisMenu.SourceType === 0)\r\n {\r\n getDocuments(\r\n '',\r\n '',\r\n '01/01/1900',\r\n '06/01/2075',\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.CustKey,\r\n thisMenu.SourceKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n );\r\n }\r\n\r\n };\r\n\r\n $scope.$parent.applyAction = function (documentType)\r\n {\r\n getDocuments($scope.locationInfo.sideMenuData.documents.referenceNumber,\r\n $scope.locationInfo.sideMenuData.documents.description,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.CustKey,\r\n documentType,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n );\r\n };\r\n })\r\n .controller(\"SectionSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.documents) $scope.locationInfo.sideMenuData.documents = {};\r\n $scope.locationInfo.sideMenuData.documents.referenceNumber = '';\r\n $scope.locationInfo.sideMenuData.documents.description = '';\r\n };\r\n });","/**\r\n * Created by rhampton on 4/25/2014.\r\n */\r\nangular.module('pnHeader', ['core.enums'])\r\n .controller(\"headerMenuCtrl\", function ($scope, $rootScope, WebUserSvc, $filter, $timeout, PaymentService)\r\n {\r\n 'use strict';\r\n $scope.showAccounts = false;\r\n $scope.showUserOpt = false;\r\n $scope.locationInfo.menuLocation = $scope.locationInfo.menuLocation || 0;\r\n $scope.locationInfo.subMenuLocation = $scope.locationInfo.subMenuLocation || -1;\r\n\r\n $scope.setMenuLocation = function (menuLocation)\r\n {\r\n $scope.locationInfo.menuLocation = menuLocation;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n };\r\n $scope.setSubMenuLocation = function (subMenuLocation)\r\n {\r\n $scope.locationInfo.subMenuLocation = subMenuLocation;\r\n };\r\n $scope.checkUserMenuSecurity = function (securityGroup)\r\n {\r\n $scope.checkForAppliedProfile();\r\n if (!$scope.appInfo.webUser) return false;\r\n if (!$scope.appInfo.webUser.CurrentAuthorization) return false;\r\n if ($scope.appInfo.webUser.CurrentAuthorization)\r\n {\r\n return $scope.checkCurrentUserPermissions(securityGroup);\r\n }\r\n return false;\r\n };\r\n $scope.setNewCurrentAuthorization = function (index)\r\n {\r\n let previousIndex = $scope.appInfo.authorizationIndex;\r\n let previousAuthorization = $scope.appInfo.webUser.WebAuthorizations[previousIndex];\r\n $scope.appInfo.authorizationIndex = index;\r\n amplify.store('pnAuthIndex', $scope.appInfo.authorizationIndex);\r\n $scope.showAccounts = false;\r\n\r\n WebUserSvc.retrieveSelectedProfile($scope.appInfo.webUser.Id, $scope.appInfo.profileKey).then(function (data)\r\n {\r\n amplify.store('pnWebProfile', $scope.appInfo.profileKey);\r\n $scope.applySelectedProfile();\r\n PaymentService.unLockPayments(previousAuthorization.CustContKey,\r\n previousAuthorization.CustomerContact.EmailAddress,\r\n previousAuthorization.CustKey);\r\n PaymentService.unlockInvoices(previousAuthorization.CustContKey,\r\n previousAuthorization.CustomerContact.EmailAddress,\r\n previousAuthorization.CustKey);\r\n amplify.store(\"paymentLockData\", null);\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[$scope.appInfo.authorizationIndex];\r\n $rootScope.$broadcast('event:AccountChange', {});\r\n $scope.goTo('/Home');\r\n });\r\n };\r\n\r\n $scope.showAccountList = function ()\r\n {\r\n $scope.showUserOpt = false;\r\n $scope.showAccounts = !$scope.showAccounts;\r\n };\r\n\r\n $scope.editUser = function ()\r\n {\r\n $scope.showUserOpt = false;\r\n $scope.goTo('/Account/Profile/YourProfile');\r\n };\r\n\r\n $scope.changePassword = function ()\r\n {\r\n $scope.showUserOpt = false;\r\n $scope.goTo('/Account/Profile/ResetPassword');\r\n };\r\n\r\n $scope.showUserOptions = function ()\r\n {\r\n $scope.showAccounts = false;\r\n $scope.showUserOpt = !$scope.showUserOpt;\r\n };\r\n\r\n $scope.headerTimer = {};\r\n $scope.subMenuWaiter = function (menuKey)\r\n {\r\n var barWidth = document.getElementById(\"hdr-submenu\").clientWidth;\r\n var acctWidth = document.getElementById(\"hdr-acctInfo\").clientWidth;\r\n document.getElementById(\"subMenu\" + menuKey).style.width = (barWidth - acctWidth - 30) + 'px';\r\n document.getElementById(\"subMenu\" + menuKey).style.overflowX = \"hidden\";\r\n\r\n $scope.startIndex = 0;\r\n $scope.endIndex = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {ParentKey: menuKey}).length - 1;\r\n $scope.menuLength = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {ParentKey: menuKey}).length - 1;\r\n\r\n $scope.headerTimer = $timeout(function ()\r\n {\r\n $scope.setMenuVisibility(menuKey);\r\n }, 100);\r\n };\r\n\r\n $scope.setMenuVisibility = function (menuKey)\r\n {\r\n var subMenu = $filter(\"filter\")($scope.appInfo.webUser.CurrentAuthorization.SiteLayout.SubMenu, {ParentKey: menuKey});\r\n var barWidth = document.getElementById(\"hdr-submenu\").clientWidth;\r\n var acctWidth = document.getElementById(\"hdr-acctInfo\").clientWidth;\r\n var maxMenuWidth = barWidth - acctWidth - 80;\r\n var currentMenuWidth = 0;\r\n for (var x = 0; x < subMenu.length; x++)\r\n {\r\n var menuItem = subMenu[x];\r\n menuItem.visible = true;\r\n $scope.$apply();\r\n if (x < $scope.startIndex)\r\n {\r\n menuItem.visible = false;\r\n continue;\r\n }\r\n currentMenuWidth += document.getElementById(menuItem.Key).clientWidth + 50;\r\n menuItem.visible = currentMenuWidth < maxMenuWidth;\r\n if (menuItem.visible)\r\n $scope.endIndex = x;\r\n }\r\n };\r\n $scope.moveMenuLeft = function (menuKey)\r\n {\r\n if ($scope.startIndex === 0)\r\n return;\r\n $scope.startIndex -= 1;\r\n $scope.setMenuVisibility(menuKey);\r\n };\r\n $scope.moveMenuRight = function (menuKey)\r\n {\r\n if ($scope.startIndex === $scope.menuLength)\r\n return;\r\n $scope.startIndex += 1;\r\n $scope.setMenuVisibility(menuKey);\r\n };\r\n });","/**\r\n * Created by rhampton on 3/11/14.\r\n */\r\nangular.module('pnHome', ['core.ajax', 'ngSanitize'])\r\n .config(['$routeProvider', function ($routeProvider) {\r\n var originalWhen = $routeProvider.when;\r\n var globalResolves = {\r\n webUser: function (WebUserSvc, WebProfileService) {\r\n return WebUserSvc.resolveWebUser().then(function () {\r\n var _user = WebUserSvc.getWebUser();\r\n if (!angular.isUndefinedOrNullOrEmpty(_user) &&\r\n !angular.isUndefinedOrNullOrEmpty(_user.CurrentWebProfile)) {\r\n WebProfileService.setProfileColor(_user.CurrentWebProfile.PrimaryColor);\r\n }\r\n return _user;\r\n });\r\n }\r\n };\r\n $routeProvider.when = function (path, route) {\r\n route.resolve = route.resolve || (route.resolve = {});\r\n angular.extend(route.resolve, globalResolves);\r\n return originalWhen.call($routeProvider, path, route);\r\n };\r\n }])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Home\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Home\"),\r\n controller: \"homeCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"HomeLocalization\");\r\n }\r\n }\r\n }\r\n );\r\n })\r\n .controller('homeCtrl', function ($scope, $rootScope, ajax, $q, homeService, localStrings, $location, globalizationSvc)\r\n {\r\n 'use strict';\r\n $scope.locationInfo.menuLocation = 0;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n $scope.locationInfo.sideMenu = '';\r\n $scope.modalInfo = {};\r\n $scope.curArticle = 0;\r\n $scope.checkForAppliedProfile();\r\n\r\n //Remove the impersonation GUID from the URL - we no longer need it once we get to Home\r\n $location.search('impersonationGuid', null);\r\n\r\n $scope.toggleModal = function (modalHeader, modalContent)\r\n {\r\n $scope.modalInfo.header = modalHeader;\r\n $scope.modalInfo.content = modalContent;\r\n $scope.modalInfo.shown = !$scope.modalInfo.shown;\r\n };\r\n\r\n $scope.updatePageInfo = function ()\r\n {\r\n if ($scope.appInfo.webUser && $scope.appInfo.webUser.CurrentAuthorization) {\r\n homeService.loadHomePageInformation($scope.appInfo.webUser.CurrentAuthorization.CustContKey).then(function (data)\r\n {\r\n $scope.PageInfo = data;\r\n $scope.formatArticles();\r\n $scope.formatCurrencies();\r\n });\r\n }\r\n else\r\n $scope.logout();\r\n };\r\n\r\n var accountChangeListener = $rootScope.$on('event:AccountChange', function (event, data)\r\n {\r\n $scope.updatePageInfo();\r\n });\r\n\r\n $scope.$on('$destroy', accountChangeListener);\r\n\r\n $scope.updatePageInfo();\r\n\r\n $scope.showLastCreditNotification = function (item)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(item) || angular.isUndefinedOrNullOrEmpty(item.DispType))\r\n return;\r\n\r\n switch ($scope.PageInfo.HomeInfo.LastCreditNotification.DispType) {\r\n case 0:\r\n $scope.emailPopUp = item;\r\n $scope.emailPopUp.show = true;\r\n break;\r\n\r\n case 1:\r\n case 2:\r\n if (item.EdocDtlKey > 0) $scope.openEdoc(item.EdocDtlKey);\r\n else\r\n scope.notifier.show(localStrings.getLocalizedString(\"DocumentNotRetrieved\"), 'error');\r\n break;\r\n\r\n case 3:\r\n if (item.AttachGUID !== null) $scope.openAttachment(item.AttachGUID);\r\n else\r\n scope.notifier.show(localStrings.getLocalizedString(\"AttachmentNotRetrieved\"), 'error');\r\n break;\r\n }\r\n\r\n };\r\n\r\n $scope.showAccountSummary = function ()\r\n {\r\n if ($scope.checkCurrentUserPermission($scope.webFunctions.ViewCreditInformation))\r\n return true;\r\n\r\n if (($scope.PageInfo.HomeInfo.DisplayPastDueMsgAt > 0 && ($scope.PageInfo.HomeInfo.Customer.CrStatus === 1 ||\r\n $scope.PageInfo.HomeInfo.Customer.CrStatus === 6 || $scope.PageInfo.HomeInfo.Customer.CrStatus === 7 ||\r\n $scope.PageInfo.HomeInfo.Customer.CrStatus === 8 || $scope.PageInfo.HomeInfo.Customer.CrStatus === 9)))\r\n return true;\r\n\r\n return ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPaymentAccounts) && $scope.PageInfo.HomeInfo.AccountNeedingVerificationv);\r\n };\r\n\r\n $scope.showRecentActivity = function ()\r\n {\r\n if (!$scope.PageInfo) return false;\r\n if (!$scope.PageInfo.HomeInfo) return false;\r\n var homeInfo = $scope.PageInfo.HomeInfo;\r\n\r\n if (homeInfo.ScheduledPayment && homeInfo.ScheduledPayment.Amount > 0) return true;\r\n if (homeInfo.PendingEft && homeInfo.PendingEft.Amount > 0) return true;\r\n if (homeInfo.PostedEft && homeInfo.PostedEft.Amount > 0) return true;\r\n if (homeInfo.LastInvoice && homeInfo.LastInvoice.Amount > 0) return true;\r\n if (homeInfo.CustomerActivity && homeInfo.CustomerActivity.LastRcptAmt > 0) return true;\r\n if (homeInfo.CustomerActivity && homeInfo.CustomerActivity.LastStmtAmt > 0) return true;\r\n if (homeInfo.CustomerPriceNotice && homeInfo.CustomerPriceNotice.EdocDetails && homeInfo.CustomerPriceNotice.EdocDetails.DtlKey > 0) return true;\r\n if (homeInfo.LastCreditNotification && homeInfo.LastCreditNotification.DispType > 0) return true;\r\n return false;\r\n };\r\n\r\n $scope.getArticle = function (dir)\r\n {\r\n switch (dir) {\r\n case 'p':\r\n --$scope.curArticle;\r\n if ($scope.curArticle < 0)\r\n $scope.curArticle = $scope.PageInfo.HomeInfo.Announcements.length - 1;\r\n break;\r\n case 'n':\r\n ++$scope.curArticle;\r\n if ($scope.curArticle === $scope.PageInfo.HomeInfo.Announcements.length)\r\n $scope.curArticle = 0;\r\n break;\r\n }\r\n };\r\n\r\n $scope.formatArticles = function ()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.PageInfo.HomeInfo) || angular.isUndefinedOrNullOrEmpty($scope.PageInfo.HomeInfo.Announcements))\r\n return;\r\n\r\n angular.forEach($scope.PageInfo.HomeInfo.Announcements, function (item)\r\n {\r\n item.Text = item.Text.trim().unescapeHTML().replace(/ /gi, ' ');\r\n });\r\n\r\n };\r\n\r\n // Format all of the currency fields on the home page to whatever the browser locale is\r\n $scope.formatCurrencies = function ()\r\n {\r\n var homeInfo = $scope.PageInfo.HomeInfo;\r\n \r\n var lastInv = homeInfo.LastInvoice.Amount;\r\n var lastStmt = homeInfo.CustomerActivity.LastStmtAmt*-1;\r\n var lastEft = homeInfo.PostedEft.Amount;\r\n var lastPmnt = homeInfo.CustomerActivity.LastRcptAmt;\r\n var pendEft = homeInfo.PendingEft.Amount;\r\n var nextSchPmnt = homeInfo.ScheduledPayment.Amount;\r\n var acctBalance = homeInfo.Customer.AccountBalance;\r\n var unbilledActivity = homeInfo.Customer.UnshippedBalance;\r\n var creditLimit = homeInfo.Customer.CrLimitTotal;\r\n var availableCred = homeInfo.Customer.AvailableCredit;\r\n\r\n homeInfo.LastInvoice.AmountDisplay = globalizationSvc.formatCurrency(lastInv);\r\n homeInfo.CustomerActivity.LastStmtAmtDisplay = globalizationSvc.formatCurrency(lastStmt);\r\n homeInfo.PostedEft.AmountDisplay = globalizationSvc.formatCurrency(lastEft);\r\n homeInfo.CustomerActivity.LastRcptAmtDisplay = globalizationSvc.formatCurrency(lastPmnt);\r\n homeInfo.PendingEft.AmountDisplay = globalizationSvc.formatCurrency(pendEft);\r\n homeInfo.ScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency(nextSchPmnt);\r\n homeInfo.Customer.AccountBalanceDisplay = globalizationSvc.formatCurrency(acctBalance);\r\n homeInfo.Customer.UnshippedBalanceDisplay = globalizationSvc.formatCurrency(unbilledActivity);\r\n homeInfo.Customer.CrLimitTotalDisplay = globalizationSvc.formatCurrency(creditLimit);\r\n homeInfo.Customer.AvailableCreditDisplay = globalizationSvc.formatCurrency(availableCred);\r\n };\r\n });","/**\r\n * Created by rhampton on 5/27/2014.\r\n */\r\nangular.module(\"pnLogin\", [\r\n 'ngRoute',\r\n 'core.enums',\r\n 'core.security'\r\n])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/SignUp/:request?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"SignUp\"),\r\n controller: \"signupCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/ResetPassword/:request?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ResetPassword\"),\r\n controller: \"resetPasswordCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/SetPassword/:key\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"GetPasswordTemplate\"),\r\n controller: \"setNewPasswordCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/unsubscribe/:cont?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Unsubscribe\"),\r\n controller: \"unsubscribeCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"LoginLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/SiteDisabled\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"SiteDisabled\"),\r\n controller: \"siteDisabledCtrl\"\r\n });\r\n })\r\n .controller(\"loginCtrl\", function loginCtrl($scope, $http, $q, $rootScope, $timeout, Authentication, WebUserSvc, WebProfileService, validatorSvc, constantLists, $routeParams, $location, localStrings)\r\n {\r\n 'use strict';\r\n if (angular.isUndefinedOrNullOrEmpty($routeParams.impersonationGuid)) {\r\n $scope.logout();\r\n }\r\n $scope.showLogin = false;\r\n $scope.showProfileSelector = false;\r\n $scope.showForgotPassword = false;\r\n\r\n $scope.initializeLogin = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.applySystemSettings();\r\n $scope.showLogin = true;\r\n\r\n if ($routeParams.impersonationGuid) {\r\n $rootScope.loginInfo.impersonationAccessGuid = $routeParams.impersonationGuid;\r\n $rootScope.loginInfo.userIsImpersonated = true;\r\n $rootScope.automatedLogin = true;\r\n }\r\n\r\n $scope.getRememberMe();\r\n };\r\n\r\n $scope.checkForAutomatedLogin = function () {\r\n if ($rootScope.automatedLogin) {\r\n $scope.loginInfo.userId = $rootScope.automatedLogin.userId || \"\";\r\n $scope.loginInfo.password = $rootScope.automatedLogin.password || \"\";\r\n $scope.authenticateUser();\r\n $rootScope.automatedLogin = undefined;\r\n }\r\n };\r\n\r\n $scope.authenticateUser = function ()\r\n {\r\n // Omit automated logins from triggering empty password / userid validations on elements\r\n if (!$rootScope.automatedLogin && !validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.error = \"\";\r\n $rootScope.passwordExpired = {};\r\n $rootScope.passwordDays = {};\r\n $scope.setRememberMe();\r\n\r\n // Reset the locked account display\r\n $scope.lockedAccount.hide();\r\n\r\n // Attempt to log the user in\r\n Authentication.login($scope.loginInfo.userId, $scope.loginInfo.password, $rootScope.loginInfo.impersonationAccessGuid).then(function (data)\r\n {\r\n // Store the token via LocalStorage (more secure than normal cookies)\r\n var user = data;\r\n var token = user.Token;\r\n amplify.store('pnuser-token', token, { expires: $rootScope.timeout });\r\n\r\n WebUserSvc.validatePasswordComplexity(user.Key, $scope.loginInfo.password, true).then(function (errorList) {\r\n if (errorList.length > 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PasswordComplexityEnforced\"), 'error');\r\n return;\r\n }\r\n else\r\n {\r\n $scope.retrieveWebUser(user.Key);\r\n }\r\n });\r\n\r\n }, function (err)\r\n {\r\n $scope.error = err;\r\n });\r\n };\r\n\r\n $scope.retrieveWebUser = function (webUserKey)\r\n {\r\n if (Authentication.isAuthenticated())\r\n {\r\n WebUserSvc.retrieveWebUser(webUserKey).then(function (data)\r\n {\r\n data.Answer2 = data.Answer;\r\n $scope.appInfo.webUser = data;\r\n\r\n var _webProfileCount = $scope.appInfo.webUser.WebProfiles.length;\r\n if (_webProfileCount === 0) {\r\n $scope.showLogin = true;\r\n $scope.modalifier.show(\r\n localStrings.getLocalizedString(\"LogIn\"),\r\n localStrings.getLocalizedString(\"NoWebProfile\"));\r\n return;\r\n }\r\n\r\n if (_webProfileCount > 1) {\r\n $scope.showLogin = false;\r\n $scope.showProfileSelector = true;\r\n $scope.appInfo.profileKey = $scope.appInfo.webUser.WebProfiles[0].Key;\r\n return;\r\n }\r\n\r\n if ( _webProfileCount === 1 ) {\r\n $scope.appInfo.profileKey = $scope.appInfo.webUser.WebProfiles[0].Key;\r\n $scope.loadSelectedProfile();\r\n } \r\n return;\r\n });\r\n }\r\n };\r\n\r\n $scope.loadSelectedProfile = function ()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.profileKey) || $scope.appInfo.profileKey < 0) {\r\n $scope.appInfo.profileKey = WebUserSvc.getWebUserProfile();\r\n }\r\n\r\n WebUserSvc.retrieveSelectedProfile($scope.appInfo.webUser.Id, $scope.appInfo.profileKey).then(function (data)\r\n {\r\n amplify.store('pnAuthIndex', WebUserSvc.getCurrentAuthorization() || 0);\r\n amplify.store('pnWebProfile', $scope.appInfo.profileKey);\r\n $scope.applySelectedProfile();\r\n $scope.goTo('/Home');\r\n });\r\n };\r\n\r\n $scope.showForgotMyPassword = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n validatorSvc.addScopeToValidate($scope);\r\n\r\n $scope.showLogin = !$scope.showLogin;\r\n $scope.showForgotPassword = !$scope.showForgotPassword;\r\n };\r\n\r\n $scope.submitForgotMyPassword = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n WebUserSvc.processForgotMyPassword($scope.loginInfo.userId).then(function (data)\r\n {\r\n if (data.Success)\r\n $scope.notifier.show(localStrings.getLocalizedString(\"RequestBeingProcessed\"), 'success');\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"RequestNotProcessed\"), 'error');\r\n });\r\n $scope.showForgotMyPassword();\r\n };\r\n\r\n $scope.setRememberMe = function ()\r\n {\r\n if ($scope.loginInfo.rememberMe)\r\n amplify.store('pnLoginEmail', $rootScope.loginInfo.userId);\r\n else\r\n amplify.store('pnLoginEmail', null);\r\n };\r\n\r\n $scope.getRememberMe = function ()\r\n {\r\n var result = amplify.store('pnLoginEmail');\r\n if (angular.isUndefinedOrNullOrEmpty(result))\r\n {\r\n $rootScope.loginInfo.userId = '';\r\n $rootScope.loginInfo.rememberMe = false;\r\n }\r\n else\r\n {\r\n $rootScope.loginInfo.userId = result;\r\n $rootScope.loginInfo.rememberMe = true;\r\n }\r\n };\r\n })\r\n .controller(\"signupCtrl\", function ($scope, $rootScope, $routeParams, WebUserSvc, validatorSvc, constantLists, localStrings)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n //grab the branding information for the site\r\n $scope.applySystemSettings();\r\n\r\n $scope.signup = {\r\n displayControls: false,\r\n webUser: {\r\n Timestamp: '',\r\n Answer: '',\r\n AnswerClear: '',\r\n GUID: '',\r\n Id: '',\r\n Key: '',\r\n Password: '',\r\n PasswordClear: '',\r\n Question: '',\r\n QuestionClear: '',\r\n Reset: '',\r\n Validated: ''\r\n },\r\n error: [],\r\n controls: {\r\n password: '',\r\n confirmPassword: '',\r\n question: '',\r\n answer: '',\r\n confirmAnswer: '',\r\n valid: true,\r\n secretQuestions: constantLists.secretQuestions\r\n }\r\n };\r\n\r\n $scope.kendo = {instance: null};\r\n\r\n $scope.getWebUser();\r\n };\r\n\r\n $scope.getWebUser = function ()\r\n {\r\n if ($routeParams.request)\r\n {\r\n $scope.signup.webUser.GUID = $routeParams.request;\r\n WebUserSvc.getWebUserForSignup($scope.signup.webUser).then(\r\n function (data)\r\n {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.Id))\r\n {\r\n $scope.signup.webUser = data;\r\n $scope.signup.displayControls = true;\r\n return;\r\n }\r\n else\r\n {\r\n $scope.signup.displayControls = false;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"InvalidRequestContact\"), 'error');\r\n $scope.goTo('/');\r\n }\r\n }\r\n );\r\n }\r\n else\r\n {\r\n $scope.GUID = 0;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"URLInvalid\"), \"error\");\r\n $scope.goTo('/');\r\n }\r\n };\r\n\r\n $scope.sendWebUser = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.signup.webUser.PasswordClear = $scope.signup.controls.password;\r\n $scope.signup.webUser.QuestionClear = $scope.signup.controls.question;\r\n $scope.signup.webUser.AnswerClear = $scope.signup.controls.answer;\r\n\r\n WebUserSvc.signupWebUser($scope.signup.webUser).then(\r\n function (data)\r\n {\r\n if (data.Validated === true)\r\n {\r\n $rootScope.automatedLogin = {userId: data.Id, password: $scope.signup.controls.password};\r\n $scope.goTo(\"/\");\r\n }\r\n },\r\n function (err)\r\n {\r\n $scope.signup.errors = [];\r\n\r\n angular.forEach(err, function (item)\r\n {\r\n $scope.notifier.show(item, 'error');\r\n });\r\n }\r\n );\r\n\r\n };\r\n\r\n $scope.clearErrors = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n };\r\n })\r\n .controller(\"resetPasswordCtrl\", function ($scope, $rootScope, $routeParams, WebUserSvc, validatorSvc, localStrings)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n //grab the branding information for the site\r\n $scope.applySystemSettings();\r\n\r\n $scope.resetPassword = {\r\n displayTitle: '',\r\n displayQuestion: false,\r\n displayPassword: false,\r\n displayButton: false,\r\n webUser: {\r\n Timestamp: '',\r\n Answer: '',\r\n AnswerClear: '',\r\n GUID: '',\r\n Id: '',\r\n Key: '',\r\n Password: '',\r\n PasswordClear: '',\r\n Question: '',\r\n QuestionClear: '',\r\n Reset: '',\r\n Validated: ''\r\n },\r\n error: [],\r\n controls: {\r\n password: '',\r\n confirmPassword: '',\r\n answer: '',\r\n valid: true,\r\n buttonText: 'Submit'\r\n }\r\n };\r\n\r\n $scope.getWebUser();\r\n };\r\n\r\n $scope.getWebUser = function ()\r\n {\r\n if ($routeParams.request)\r\n {\r\n $scope.resetPassword.webUser.GUID = $routeParams.request;\r\n WebUserSvc.getWebUserForPasswordReset($scope.resetPassword.webUser).then(\r\n function (data)\r\n {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.Id))\r\n {\r\n $scope.resetPassword.webUser = data;\r\n $scope.resetPassword.displayTitle = localStrings.getLocalizedString(\"AnswerSecurityQuestion\");\r\n if ($rootScope.passwordExpired === true)\r\n {\r\n $scope.resetPassword.displayTitle = localStrings.getLocalizedString(\"PasswordExpired\") + '
' + $scope.resetPassword.displayTitle;\r\n }\r\n $scope.resetPassword.displayQuestion = true;\r\n $scope.resetPassword.displayButton = true;\r\n }\r\n else\r\n {\r\n $scope.resetPassword.displayQuestion = false;\r\n $scope.resetPassword.displayPassword = false;\r\n $scope.resetPassword.displayButton = false;\r\n $scope.resetPassword.displayTitle = localStrings.getLocalizedString(\"InvalidRequest\");\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ContactAdmin\"), \"error\");\r\n $scope.goTo('/');\r\n }\r\n }\r\n );\r\n }\r\n else\r\n {\r\n $scope.GUID = 0;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"URLInvalid\"), \"error\");\r\n $scope.goTo('/');\r\n }\r\n };\r\n\r\n $scope.sendAnswer = function ()\r\n {\r\n $scope.resetPassword.webUser.AnswerClear = $scope.resetPassword.controls.answer;\r\n WebUserSvc.verifyWebUserSecretQuestionAnswer($scope.resetPassword.webUser).then(\r\n function (data)\r\n {\r\n if (data === 1)\r\n {\r\n $scope.resetPassword.displayQuestion = false;\r\n $scope.resetPassword.displayTitle = localStrings.getLocalizedString(\"EnterConfirmNewPassword\");\r\n $scope.resetPassword.controls.buttonText = localStrings.getLocalizedString(\"SaveAndLogin\");\r\n $scope.resetPassword.displayPassword = true;\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"AnswerNotCorrect\"), \"error\");\r\n }\r\n },\r\n function (err)\r\n {\r\n }\r\n );\r\n\r\n };\r\n\r\n $scope.setNewPassword = function ()\r\n {\r\n $scope.resetPassword.webUser.PasswordClear = $scope.resetPassword.controls.password;\r\n WebUserSvc.resetWebUserPassword($scope.resetPassword.webUser).then(\r\n function (data)\r\n {\r\n if (data.Validated === true)\r\n {\r\n $rootScope.automatedLogin = {userId: data.Id, password: $scope.resetPassword.controls.password};\r\n $scope.goTo(\"/\");\r\n }\r\n },\r\n function (err)\r\n {\r\n $scope.resetPassword.errors = [];\r\n\r\n angular.forEach(err, function (item)\r\n {\r\n $scope.notifier.show(item, \"error\");\r\n });\r\n }\r\n );\r\n };\r\n\r\n $scope.submitInfo = function ()\r\n {\r\n $scope.resetPassword.error = [];\r\n\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n if ($scope.resetPassword.displayQuestion)\r\n {\r\n $scope.sendAnswer();\r\n }\r\n\r\n if ($scope.resetPassword.displayPassword)\r\n {\r\n $scope.setNewPassword();\r\n }\r\n };\r\n\r\n $scope.clearErrors = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n };\r\n })\r\n .controller(\"setNewPasswordCtrl\", function ($scope, $rootScope, $routeParams, WebUserSvc, validatorSvc, WebProfileService, localStrings)\r\n {\r\n 'use strict';\r\n $scope.webUserKey = -1;\r\n $scope.webUserToUpdate = {};\r\n\r\n $scope.initialize = function ()\r\n {\r\n var profileKey = ($scope.appInfo && $scope.appInfo.profileKey) ? $scope.appInfo.profileKey : 0;\r\n\r\n WebProfileService.getWebProfileMessage(profileKey, 27).then(function (data)\r\n {\r\n $scope.customMessage = data.isBlank() ? localStrings.getLocalizedString(\"PasswordExpiredNew\") : data;\r\n });\r\n\r\n if ($routeParams.key)\r\n {\r\n $scope.webUserToUpdate = {\r\n Timestamp: '',\r\n Answer: '',\r\n AnswerClear: '',\r\n GUID: '',\r\n Id: '',\r\n Key: $routeParams.key,\r\n Password: '',\r\n PasswordClear: '',\r\n Question: '',\r\n QuestionClear: '',\r\n Reset: '',\r\n Validated: ''\r\n };\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n };\r\n\r\n $scope.submitPassword = function ()\r\n {\r\n //$scope.resetPassword.error = [];\r\n\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.setNewPassword();\r\n };\r\n\r\n $scope.setNewPassword = function ()\r\n {\r\n $scope.webUserToUpdate.OldPassword = $scope.appInfo.pageInfo.controls.oldPassword;\r\n $scope.webUserToUpdate.PasswordClear = $scope.appInfo.pageInfo.controls.password;\r\n\r\n WebUserSvc.resetWebUserPassword($scope.webUserToUpdate).then(\r\n function (data)\r\n {\r\n $scope.appInfo.pageInfo.success = true;\r\n if (data.Validated === true)\r\n {\r\n $rootScope.automatedLogin = {userId: data.Id, password: $scope.webUserToUpdate.PasswordClear};\r\n $scope.goTo(\"/\");\r\n }\r\n },\r\n function (err)\r\n {\r\n angular.forEach(err, function (item)\r\n {\r\n $scope.notifier.show(item, \"error\");\r\n });\r\n }\r\n );\r\n };\r\n\r\n $scope.clearErrors = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n };\r\n })\r\n .controller(\"unsubscribeCtrl\", function ($scope, $routeParams, validatorSvc, userAccountService, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n //apply the branding information for the site\r\n $scope.applySystemSettings();\r\n\r\n $scope.resultMessage = localStrings.getLocalizedString(\"UnsubscribeRequest\");\r\n\r\n if ($routeParams.cont)\r\n {\r\n userAccountService.unsubscribeContact($routeParams.cont).then(\r\n function (data)\r\n {\r\n if (data.Successful && !data.Unsubscibed)\r\n {\r\n $scope.resultMessage = localStrings.getLocalizedString(\"UnsubscribeSuccessful\");\r\n }\r\n else\r\n {\r\n $scope.resultMessage = localStrings.getLocalizedString(\"UnsubscribeNotSuccessful\");\r\n }\r\n },\r\n function (data) //http request failed\r\n {\r\n $scope.resultMessage = localStrings.getLocalizedString(\"UnsubscribeNotSuccessful\");\r\n });\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"InvalidRequestContact\"), 'error');\r\n $scope.goTo('/Home');\r\n }\r\n };\r\n })\r\n .controller(\"siteDisabledCtrl\", function siteDisabledCtrl($scope, $window)\r\n {\r\n 'use strict';\r\n\r\n $scope.initializePage = function ()\r\n {\r\n $scope.applySystemSettingsSiteDisabled();\r\n };\r\n });\r\n","angular.module(\"pnPages\", ['core.objects', 'services.pages', 'core.directives'])\n .config(function ($routeProvider, templateProvider) {\n $routeProvider\n .when(\"/Pages/\",\n {\n templateUrl: templateProvider.getTemplate(\"Pages\"),\n controller: \"customPagesCtrl\",\n controllerAs: \"ctrl\"\n })\n .when(\"/Pages/Detail/:key\",\n {\n templateUrl: templateProvider.getTemplate(\"PagesDetail\"),\n controller: \"customPagesDetailCtrl\",\n controllerAs: \"customPagesDetailCtrl\",\n resolve: {\n localStrings: function (localizationSvc) {\n return localizationSvc.getCachedLocalizationsContainer(\"PagesLocalization\");\n }\n }\n })\n ;\n })\n .filter('encodeURIComponent', ['$window', function ($window) {\n return function (input) {\n return encodeURIComponent(input);\n };\n }])\n .controller('customPagesCtrl', function ($scope, templates, PagesService, WebFunctions) {\n 'use strict';\n var ctrl = this;\n ctrl.Context = {\n Pages: [],\n Tokens: []\n };\n\n ctrl.initialize = function () {\n if (!$scope.checkCurrentUserPermission(WebFunctions.ViewCustomPages)) {\n $scope.goTo(\"/Home\");\n }\n $scope.locationInfo.menuLocation = 7;\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PagesSideMenu\");\n if (!$scope.locationInfo.sideMenuData)\n $scope.locationInfo.sideMenuData = {};\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\n\n $scope.checkForAppliedProfile();\n PagesService.getWebProfileSiteLayout($scope.appInfo.profileKey).then(function (response) {\n if (response.Successful) {\n //get custom pages key\n var customPagesMenuNode = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.Name === 'Custom Pages';\n });\n if (!angular.isUndefinedOrNullOrEmpty(customPagesMenuNode) && customPagesMenuNode.length === 1) {\n ctrl.Context.Pages = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.ParentKey === customPagesMenuNode[0].Key;\n });\n }\n }\n });\n };\n })\n .controller('customPagesDetailCtrl', function ($scope, $routeParams, PagesService, $sce, WebFunctions, templates, $http, localStrings, $rootScope, $timeout, $interval) {\n 'use strict';\n var ctrl = this;\n ctrl.reloadInterval = 0;\n ctrl.selectedPage = {};\n ctrl.initialize = function (conf) {\n if (!$scope.checkCurrentUserPermission(WebFunctions.ViewCustomPages)) {\n $scope.goTo(\"/Home\");\n }\n\n $scope.locationInfo.menuLocation = 7;\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PagesSideMenu\");\n if (!$scope.locationInfo.sideMenuData)\n $scope.locationInfo.sideMenuData = {};\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\n PagesService.getWebProfileSiteLayout($scope.appInfo.profileKey).then(function (response) {\n if (response.Successful) {\n //get custom pages key\n var customPagesMenuNode = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.Name === 'Custom Pages';\n });\n if (!angular.isUndefinedOrNullOrEmpty(customPagesMenuNode) && customPagesMenuNode.length === 1) {\n var pages = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.ParentKey === customPagesMenuNode[0].Key;\n });\n var key = $routeParams.key;\n if (!angular.isUndefinedOrNullOrEmpty(key)) {\n var selectedIndex = 0;\n var foundPage = pages.filter(function (val, index) {\n if (val.Key.toString() === key) {\n selectedIndex = index;\n return true;\n }\n return false;\n });\n if (!angular.isUndefinedOrNullOrEmpty(foundPage) && foundPage.length > 0) {\n ctrl.selectedPage = foundPage[0];\n $scope.locationInfo.sideMenuData.subMenu = selectedIndex;\n retrieveToken(conf);\n }\n }\n }\n }\n });\n };\n\n function retrieveToken(conf) {\n PagesService.getAccessToken($scope.appInfo.profileKey, ctrl.selectedPage.Key).then(\n function (response) {\n if (response && response.Successful && response.AccessToken.Success) {\n if (angular.isUndefinedOrNullOrEmpty(response.MenuNode.ClientAuthMethod)) {\n var url = $sce.trustAsResourceUrl(ctrl.selectedPage.PageURL);\n angular.element(\"#customPageWrapper\").attr('src', url);\n }\n else {\n if (!angular.isUndefinedOrNullOrEmpty(response.AccessToken.access_token)) {\n switch (response.MenuNode.ClientAuthMethod) {\n case conf.AuthMethods.Header:\n var req = {\n method: 'GET',\n url: ctrl.selectedPage.PageURL,\n headers: {\n 'Authorization': 'Bearer ' + response.AccessToken.access_token\n }\n };\n $http(req).then(\n function (response) {\n // A response status code between 200 and 299 is considered a success status\n if (response.status >= 200 && response.status < 300) {\n var data = response.data || '';\n if (response.data && response.data.indexOf('', '');\n }\n var frame = document.querySelector('#customPageWrapper');\n \n frame.contentWindow.document.open('text/html', 'replace');\n frame.contentWindow.document.write(data);\n frame.contentWindow.document.close();\n }\n },\n function (failed) {\n var msg = localStrings.getLocalizedString(\"UnableProcessPage\").replace('{0}', ctrl.selectedPage.Name);\n $rootScope.notifier.show(msg, 'error');\n }\n );\n break;\n case conf.AuthMethods.URL:\n var glue = (ctrl.selectedPage.PageURL.includes('?') ? '&' : '?');\n var params = glue + 'access_token=' + encodeURIComponent(response.AccessToken.access_token) + '&token_type=' + response.AccessToken.token_type;\n angular.element(\"#customPageWrapper\").attr('src', $sce.trustAsResourceUrl(ctrl.selectedPage.PageURL + params));\n break;\n }\n }\n else {\n var msg = localStrings.getLocalizedString(\"UnableProcessPage\").replace('{0}', ctrl.selectedPage.Name);\n $rootScope.notifier.show(msg, 'error');\n }\n }\n // register auto refresh - force to reload iFrame when approaching token expiration\n if (!angular.isUndefinedOrNullOrEmpty(response.AccessToken.expires_in) && !angular.isUndefinedOrNullOrEmpty(response.AccessToken.access_token)) {\n $timeout(function () {\n retrieveToken(conf);\n }, (response.AccessToken.expires_in * 1000));\n }\n }\n },\n function (failure) {\n var msg = localStrings.getLocalizedString(\"UnableProcessPage\").replace('{0}', ctrl.selectedPage.Name);\n $rootScope.notifier.show(msg, 'error');\n });\n }\n })\n .controller('customPagesSideMenuCtrl', function ($scope, $rootScope, $routeParams, PagesService) {\n 'use strict';\n var ctrl = this;\n ctrl.Context = {\n Pages: []\n };\n ctrl.isSelected = function (index) {\n var retval = $scope.locationInfo.sideMenuData.subMenu === index;\n if (retval) {\n ctrl.selectedPage = ctrl.Context.Pages[index];\n }\n return retval;\n };\n ctrl.initialize = function () {\n PagesService.getWebProfileSiteLayout($scope.appInfo.profileKey).then(function (response) {\n if (response.Successful) {\n //get custom pages key\n var customPagesMenuNode = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.Name === 'Custom Pages';\n });\n if (!angular.isUndefinedOrNullOrEmpty(customPagesMenuNode) && customPagesMenuNode.length === 1) {\n ctrl.Context.Pages = response.SiteLayout.MenuNodes.filter(function (val, index) {\n return val.ParentKey === customPagesMenuNode[0].Key;\n });\n }\n }\n });\n };\n });\n","/**\r\n * Created by rhampton on 8/19/2014.\r\n */\r\nangular.module(\"pnPaperwork\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n\r\n $routeProvider\r\n .when(\"/Paperwork/EnterPaperwork/\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperwork\"),\r\n controller: \"enterPaperworkStartCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/EnterPaperwork/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperworkMeters\"),\r\n controller: \"enterPaperworkCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/EnterPaperworkDeliveries/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperworkDeliveries\"),\r\n controller: \"enterPaperworkDeliveriesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/EnterPaperworkTanks/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperworkTanks\"),\r\n controller: \"enterPaperworkTanksCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/EnterPaperworkDealerForms/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EnterPaperworkDealerForms\"),\r\n controller: \"enterPaperworkDealerFormsCtrl\"\r\n })\r\n .when(\"/Paperwork/ReviewPaperwork\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ReviewPaperwork\"),\r\n controller: \"reviewPaperworkCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/Reports\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ReportsPaperwork\"),\r\n controller: \"reportsPaperworkStartCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/Reports/:reportName\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ReportsPaperwork\"),\r\n controller: \"paperworkReportCtrl\"\r\n })\r\n .when(\"/Paperwork/ViewPaperwork/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaperwork\"),\r\n controller: \"enterPaperworkCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/ViewPaperworkTanks/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaperworkTanks\"),\r\n controller: \"enterPaperworkTanksCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/ViewPaperworkDeliveries/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaperworkDeliveries\"),\r\n controller: \"enterPaperworkDeliveriesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/Paperwork/ViewPaperworkDealerForms/:paperworkKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaperworkDealerForms\"),\r\n controller: \"enterPaperworkDealerFormsCtrl\"\r\n })\r\n .when(\"/Paperwork/InventorySummary\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"InventorySummary\"),\r\n controller: \"inventorySummaryCtrl\"\r\n })\r\n .when(\"/Paperwork/InventorySummary/:sitekey/:paperworkDate\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"InventorySummary\"),\r\n controller: \"inventorySummaryCtrl\"\r\n });\r\n })\r\n .controller('reviewPaperworkSideMenuCtrl', function ($scope, PaperworkService, PaperworkReportsService, WebFunctions, $location)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $scope.appInfo.paperwork.context = $scope.appInfo.paperwork.context || {};\r\n $scope.appInfo.paperwork.reports = $scope.appInfo.paperwork.reports || {};\r\n $scope.locationInfo.sideMenuData.reviewPaperwork = {};\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.loaded = false;\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.unposted = true;\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n\r\n // There is a race condition when reloading the page\r\n // Check if the date selector is undefined, if it is then initialize it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.dateSelector)) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.displaySelector = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 11;\r\n\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data) {\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.loaded = true;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n $scope.setSiteDescByKey();\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem) {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n },\r\n function (err) {\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.loaded = true;\r\n //TODO: notify somebody\r\n }\r\n );\r\n\r\n PaperworkReportsService\r\n .getPaperworkReports($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReports)) {\r\n $scope.appInfo.paperwork.reports.paperworkReports = data.PaperworkReports;\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.setSiteDescByKey = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.context.selectedSite)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n };\r\n })\r\n .controller('enterPaperworkSideMenuCtrl', function ($scope, PaperworkService, $filter, WebFunctions, $rootScope, localizationSvc, setupNav, $location)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n $scope.retailWarningMessage = localStrings.getLocalizedString(\"WarningRetailPrice\");\r\n $scope.averageWarningMessage = localStrings.getLocalizedString(\"WarningAveragePrice\");\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.paperwork = {};\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n };\r\n\r\n $scope.setupAppNavigation = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DREFD')\r\n {\r\n $scope.locationInfo.sideMenuData.paperwork.deliveries = app;\r\n }\r\n if (app.MenuCode === 'DREGM')\r\n {\r\n $scope.locationInfo.sideMenuData.paperwork.meters = app;\r\n }\r\n if (app.MenuCode === 'DREGS')\r\n {\r\n $scope.locationInfo.sideMenuData.paperwork.tanks = app;\r\n }\r\n if (app.DealerFormVersionKey > 0)\r\n {\r\n app.MenuCode = 'DRDFE';\r\n $scope.locationInfo.sideMenuData.paperwork.forms = app;\r\n $scope.appInfo.paperwork.form.AppKey = app.Key;\r\n }\r\n });\r\n };\r\n\r\n $scope.openNewPaperworkBatch = function ()\r\n {\r\n PaperworkService.OpenPaperworkBatch(\r\n $scope.appInfo.paperwork.context.selectedSite,\r\n $scope.urlFormatDate($scope.locationInfo.sideMenuData.paperwork.date, true),\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n false\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n $scope.appInfo.paperwork.paperworkKey = $scope.appInfo.paperwork.batch.Key;\r\n $scope.setupAppNavigation();\r\n \r\n $rootScope.$broadcast('event:NewPaperworkBatchLoaded', {});\r\n });\r\n };\r\n\r\n var pwLoadedListener = $rootScope.$on('event:PaperworkLoaded', function (event, viewOnly, data)\r\n {\r\n $scope.setupAppNavigation();\r\n });\r\n $scope.$on('$destroy', pwLoadedListener);\r\n\r\n $scope.navPg = function (menuCode)\r\n {\r\n $scope.appInfo.paperwork.viewOnly = false;\r\n\r\n if ($location.$$path.indexOf('/ViewPaperwork/') > -1) $scope.appInfo.paperwork.viewOnly = true;\r\n if ($location.$$path.indexOf('/ViewPaperworkDeliveries/') > -1) $scope.appInfo.paperwork.viewOnly = true;\r\n if ($location.$$path.indexOf('/ViewPaperworkTanks/') > -1) $scope.appInfo.paperwork.viewOnly = true;\r\n if ($location.$$path.indexOf('/ViewPaperworkDealerForms/') > -1) $scope.appInfo.paperwork.viewOnly = true;\r\n \r\n // Broadcast the current module menu code this will trigger save in each controller when paperwork is in Enter mode before going to another menu\r\n if($scope.appInfo.paperwork.viewOnly) $rootScope.$broadcast('event:PageStage', setupNav.resolveCurrentPageMenuCode($location.$$path));\r\n\r\n $scope.goTo(setupNav.getSinglePath(menuCode,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n };\r\n\r\n })\r\n .controller('inventorySummarySideMenuCtrl', function ($scope, PaperworkService, PaperworkReportsService, $routeParams, WebFunctions, reportingService, validatorSvc)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.$root.reportSettings.reportKey = 19;\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.inventorySummary = {};\r\n $scope.locationInfo.sideMenuData.subMenu = '3';\r\n $scope.locationInfo.sideMenuData.inventorySummary.reportType = 'PaperworkSummary ';\r\n $scope.appInfo = $scope.appInfo || {};\r\n $scope.appInfo.paperwork = $scope.appInfo.paperwork || {};\r\n $scope.appInfo.paperwork.context = $scope.appInfo.paperwork.context || {};\r\n $scope.appInfo.paperwork.reports = $scope.appInfo.paperwork.reports || {};\r\n\r\n $scope.appInfo.paperwork.context.selectedSiteObj = { SiteKey: -1 };\r\n\r\n // There is a race condition when reloading the page\r\n // Check if the date selector is undefined, if it is then initialize it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.dateSelector)) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.displaySelector = false;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 14;\r\n\r\n PaperworkService\r\n .getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true)\r\n .then(function (data)\r\n {\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n if (!$scope.setSiteAndDate())\r\n {\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey = data.SelectedSiteKey;\r\n $scope.dateSelector.startDate = $scope.formatDate(data.NextPaperworkDate);\r\n }\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n $scope.applyAction();\r\n },\r\n function (err)\r\n {\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.loaded = true;\r\n //TODO: notify somebody\r\n }\r\n );\r\n\r\n PaperworkReportsService\r\n .getPaperworkReports($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReports)) {\r\n $scope.appInfo.paperwork.reports.paperworkReports = data.PaperworkReports;\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.inventorySummary = $scope.reportSettings.loadOptions.controls;\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey = $scope.reportSettings.loadOptions.selectedSite;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.inventorySummary;\r\n $scope.reportSettings.saveOptions.selectedSite = $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.setNextPaperworkDate = function (e)\r\n {\r\n if ($scope.setSiteAndDate())\r\n return;\r\n\r\n PaperworkService.getNextPaperworkDate(e.sender.dataItem(e.sender.select()).SiteKey, true).then(\r\n function (data)\r\n {\r\n $scope.dateSelector.startDate = $scope.formatDate(data);\r\n }\r\n );\r\n };\r\n\r\n $scope.setSiteAndDate = function ()\r\n {\r\n if ($routeParams.sitekey && $routeParams.paperworkDate)\r\n {\r\n $scope.appInfo.paperwork.context.selectedSiteObj = {SiteKey: -1};\r\n\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey = parseInt($routeParams.sitekey, 10);\r\n $scope.dateSelector.startDate = $scope.formatDate($routeParams.paperworkDate);\r\n return true;\r\n }\r\n else\r\n return false;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n PaperworkService.ValidatePaperworkSiteDateForContact(\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey,\r\n $scope.urlFormatDate($scope.dateSelector.startDate, true),\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n false // not for entry\r\n ).then(function (data)\r\n {\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.inventorySummary.reportType +\r\n \"&RP-SiteKey=\" + $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey +\r\n \"&RP-PWDate=\" + $scope.dateSelector.startDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n });\r\n\r\n };\r\n })\r\n .controller('reportsPaperworkStartCtrl', function ($scope, WebFunctions, templates, localStrings, PaperworkReportsService)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n \r\n $scope.appInfo = $scope.appInfo || {};\r\n $scope.appInfo.paperwork = {\r\n context: {},\r\n paperworkKey: 0,\r\n reports: {}\r\n };\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.appInfo.paperwork.reports.paperworkReports = [];\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportsSideMenu\");\r\n $scope.locationInfo.sideMenuData.paperwork = {};\r\n $scope.locationInfo.showEnterPaperworkMenuItem = false;\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 31;\r\n\r\n PaperworkReportsService\r\n .getPaperworkReports($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReports)) {\r\n $scope.appInfo.paperwork.reports.paperworkReports = $scope.localizeReports(data.PaperworkReports).sort($scope.compareDisplayNames);\r\n }\r\n else {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork\");\r\n $scope.modalifier.showSetupError();\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.localizeReports = function (reports) {\r\n angular.forEach(reports, function (report) {\r\n report.DisplayName = localStrings.getLocalizedString('SSRSReport' + report.Name);\r\n });\r\n\r\n return reports;\r\n };\r\n\r\n $scope.compareDisplayNames = function (a, b) {\r\n return a.DisplayName.localeCompare(b.DisplayName);\r\n };\r\n })\r\n .controller('enterPaperworkStartCtrl', function ($scope, $location, PaperworkService, PaperworkReportsService, WebFunctions, validatorSvc, templates, localStrings, setupNav)\r\n {\r\n 'use strict';\r\n $scope.averageWarningMessage = localStrings.getLocalizedString(\"WarningAveragePrice\");\r\n $scope.retailWarningMessage = localStrings.getLocalizedString(\"WarningRetailPrice\");\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.appInfo = $scope.appInfo || {};\r\n $scope.appInfo.paperwork = {\r\n context: {},\r\n paperworkKey: 0,\r\n reports: {}\r\n };\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.appInfo.paperwork.reports.paperworkReports = [];\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.paperwork = {};\r\n $scope.locationInfo.sideMenuData.isFirstPage = false;\r\n $scope.locationInfo.sideMenuData.isLastPage = false;\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n $scope.locationInfo.showEnterPaperworkMenuItem = false;\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n\r\n // There is a race condition when reloading the page\r\n // Check if the date selector is undefined, if it is then initialize it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.dateSelector)) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.dateSelector.displaySelector = true;\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 11;\r\n\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false).then(\r\n function (data)\r\n {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkSites))\r\n {\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n $scope.locationInfo.sideMenuData.paperwork.date = $scope.formatDate(data.NextPaperworkDate);\r\n $scope.locationInfo.sideMenuData.paperwork.minDate = $scope.formatDate(data.HistoryLimit);\r\n $scope.locationInfo.sideMenuData.paperwork.maxDate = $scope.formatDate(data.FutureLimit);\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n $scope.setSiteDescByKey();\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n }\r\n );\r\n\r\n PaperworkReportsService\r\n .getPaperworkReports($scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReports)) {\r\n $scope.appInfo.paperwork.reports.paperworkReports = data.PaperworkReports;\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.setNextPaperworkDate = function (e)\r\n {\r\n PaperworkService.getNextPaperworkDate(e.sender.dataItem(e.sender.select()).SiteKey, false).then(\r\n function (data)\r\n {\r\n $scope.dateSelector.startDate = $scope.formatDate(data);\r\n $scope.locationInfo.sideMenuData.paperwork.date = $scope.dateSelector.startDate;\r\n }\r\n );\r\n };\r\n\r\n $scope.setSiteDescByKey = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.context.selectedSite)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n };\r\n\r\n $scope.openNewPaperworkBatch = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n PaperworkService.OpenPaperworkBatch(\r\n $scope.appInfo.paperwork.context.selectedSite,\r\n $scope.urlFormatDate($scope.locationInfo.sideMenuData.paperwork.date, true),\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n false\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n $scope.appInfo.paperwork.paperworkKey = $scope.appInfo.paperwork.batch.Key;\r\n \r\n $scope.goTo(setupNav.getRouterPath($scope.appInfo.paperwork.apps[0],$scope.appInfo.paperwork.paperworkKey, ($scope.appInfo.paperwork.batch.SubmitStatus >= \"3\")));\r\n });\r\n };\r\n })\r\n .controller('reviewPaperworkCtrl', function ($scope, $rootScope, validatorSvc, $location, PaperworkService, WebFunctions, $filter, templates, localStrings, globalizationSvc, setupNav)\r\n {\r\n 'use strict';\r\n validatorSvc.clearValidationScopes();\r\n $scope.kendo = {};\r\n $scope.kendo.paperworkHistoryGrid = {};\r\n $scope.kendo.paperworkHistoryGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"PaperworkDateFormatted\",\r\n title: localStrings.getLocalizedString(\"PaperworkDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"SubmitStatusDesc\",\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"TotalFuelSales\",\r\n title: localStrings.getLocalizedString(\"DailyTotal\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true,\r\n width: '50%'\r\n };\r\n\r\n $scope.kendo.paperworkHistoryGridInit = function (ds)\r\n {\r\n $scope.kendo.paperworkHistoryGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.paperworkHistoryGridDS.read();\r\n $scope.kendo.paperworkHistoryGrid.dataSource.data($scope.kendo.paperworkHistoryGridDS.data());\r\n };\r\n\r\n $scope.reviewPaperwork = {};\r\n $scope.selectedReviewSite = {};\r\n $scope.viewPaperworkHistory = false;\r\n $scope.reviewLoaded = false;\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.noRecordsFound = false;\r\n $scope.appInfo = $scope.appInfo || {};\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $scope.reviewLoaded = true;\r\n };\r\n\r\n $scope.allEntry = function (batch)\r\n {\r\n return (batch.PaperworkDate > batch.InvtyCOGSDate) &&\r\n (batch.PaperworkDate > batch.FuelCOGSDate) &&\r\n (batch.SubmitStatus < 3 || !$scope.appInfo.paperwork.context.lockPaperworkAfterDru);\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n\r\n $scope.modalifier.hide();\r\n PaperworkService.getPaperworkBatchesByDate(\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey,\r\n $scope.urlFormatDate($scope.dateSelector.startDate, true),\r\n $scope.urlFormatDate($scope.dateSelector.endDate, true),\r\n $scope.locationInfo.sideMenuData.reviewPaperwork.unposted ? 1 : 0\r\n ).then(function (data)\r\n {\r\n if (data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"PaperworkHistory\"));\r\n }\r\n\r\n data.each(function (item)\r\n {\r\n item.PaperworkDateFormatted = globalizationSvc.formatDateTime(item.PaperworkDate, 'd');\r\n item.TotalFuelSales = globalizationSvc.formatCurrency(item.TotalFuelSales);\r\n });\r\n\r\n $scope.kendo.paperworkHistoryGridInit(data);\r\n $scope.viewPaperworkHistory = true;\r\n });\r\n };\r\n\r\n $scope.loadPaperwork = function (item, isEntry)\r\n {\r\n PaperworkService.ValidatePaperworkSiteDateForContact(\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey,\r\n item.PaperworkDateFormatted,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n isEntry || false\r\n );\r\n\r\n PaperworkService.OpenPaperworkBatch(\r\n $scope.appInfo.paperwork.context.selectedSiteObj.SiteKey,\r\n item.PaperworkDateFormatted,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n !isEntry || false\r\n ).then(function (data)\r\n {\r\n data.PaperworkBatch.PaperworkApps.find(function (item){\r\n if (item.DealerFormVersionKey > 0) {\r\n item.MenuCode = 'DRDFE';\r\n }\r\n });\r\n \r\n $location.path(setupNav.getSinglePath(data.PaperworkBatch.PaperworkApps[0].MenuCode, item.Key, !isEntry, false));\r\n });\r\n };\r\n })\r\n .controller('enterPaperworkCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter, $location, $timeout, WebFunctions,\r\n PaperworkMetersService, validatorSvc, templates, localStrings, globalizationSvc, setupNav)\r\n {\r\n 'use strict';\r\n $scope.averageWarningMessage = localStrings.getLocalizedString(\"WarningAveragePrice\");\r\n $scope.retailWarningMessage = localStrings.getLocalizedString(\"WarningRetailPrice\");\r\n $scope.appInfo.paperwork.paperworkKey = 0;\r\n $scope.appInfo.paperwork.showRetailPrice = false;\r\n $scope.appInfo.paperwork.showEndingDollar = false;\r\n $scope.appInfo.paperwork.showNetDollars = false;\r\n $scope.appInfo.paperwork.showEndingUnits = false;\r\n $scope.appInfo.paperwork.showNetUnits = false;\r\n $scope.appInfo.paperwork.showAvgPrice = false;\r\n $scope.appInfo.paperwork.showBeginMeters = false;\r\n\r\n $scope.appInfo.paperwork.meters = {};\r\n\r\n $scope.modalInfo = {};\r\n $scope.metersLoaded = false;\r\n\r\n $scope.kendo = {};\r\n\r\n $scope.kInputOptions = {\r\n culture: globalizationSvc.getLocale(),\r\n format: \"n\",\r\n decimals: 2,\r\n spinners: false\r\n };\r\n\r\n $scope.MaxUnits = 100000000;\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.appInfo.paperwork.viewOnly = $location.$$path.indexOf('/ViewPaperwork/') > -1;\r\n\r\n $scope.metersEditable = true;\r\n\r\n if ($routeParams.paperworkKey)\r\n {\r\n $scope.appInfo.paperwork.paperworkKey = $routeParams.paperworkKey;\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n // $scope.getWebProfileMessage(19);\r\n $scope.appInfo.paperwork.batch = {};\r\n\r\n if (!$scope.appInfo.paperwork.context)\r\n {\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data)\r\n {\r\n $scope.appInfo.paperwork.context = {};\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n );\r\n } else\r\n {\r\n\r\n }\r\n\r\n\r\n if ($scope.appInfo.paperwork.paperworkKey > 0)\r\n {\r\n //We are loading a known existing paperwork batch\r\n PaperworkService.OpenPaperworkBatchByKey(\r\n $scope.appInfo.paperwork.paperworkKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n \r\n // resolve if this is the first or last page\r\n var res = setupNav.firstLastPage('DREGM',$scope.appInfo.paperwork.apps);\r\n $scope.locationInfo.sideMenuData.isFirstPage = res.isFirstPage;\r\n $scope.locationInfo.sideMenuData.isLastPage = res.isLastPage;\r\n\r\n $rootScope.$broadcast('event:PaperworkLoaded', $scope.appInfo.paperwork.viewOnly, $scope.appInfo.paperwork.paperworkKey);\r\n\r\n var nextApp = true;\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DREGM')\r\n {\r\n $scope.loadMeters();\r\n nextApp = false;\r\n }\r\n });\r\n if (nextApp)\r\n {\r\n $scope.goTo(setupNav.navigateToPage('DREGM',$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n }, function ()\r\n {\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n });\r\n }\r\n $scope.locationInfo.sideMenuData.pwSubMenu = '1';\r\n $scope.appInfo.paperwork.meterIndex = 0;\r\n\r\n\r\n };\r\n\r\n var gridColEditorInput = function (container, options)\r\n {\r\n\r\n var fieldName = \"'\" + options.field + \"'\";\r\n\r\n var required = $(container).attr('required'); // field is required\r\n\r\n // For some browsers, `attr` is undefined; for others,\r\n // `attr` is false. Check for both.\r\n\r\n var input = $('');\r\n input.kendoNumericTextBox({\r\n culture: globalizationSvc.getLocale(),\r\n format: 'n3',\r\n decimals: 3,\r\n max: $scope.MaxUnits,\r\n min: -$scope.MaxUnits\r\n });\r\n\r\n input.attr('name', options.field);\r\n input.attr('data-bind', 'value:' + options.field);\r\n input.attr('ng-blur', 'gridInputCellOnBlur(dataItem, ' + fieldName + ')');\r\n input.attr('style', 'border: \"none\"');\r\n\r\n if (typeof required !== typeof undefined && required !== false)\r\n {\r\n input.attr('required');\r\n input.attr('data-Required-msg=\"Required\"');\r\n }\r\n\r\n input.appendTo(container);\r\n };\r\n\r\n var cellIndex = \"\";\r\n var rowIndex = \"\";\r\n\r\n var gridColNumber = function (field, format)\r\n {\r\n return '';\r\n };\r\n\r\n $scope.initializeMetersGrid = function ()\r\n {\r\n\r\n $scope.metersGridDS = new kendo.data.DataSource({\r\n schema: {\r\n model: {\r\n id: \"DispenserNo\",\r\n fields: {\r\n DispenserNo: {type: 'number', editable: false},\r\n FuelPositionNo: {type: 'number', editable: false},\r\n ProductDescription: {type: 'string', editable: false},\r\n RtlPrice: {type: \"number\", format: \"{n3}\", editable: true},\r\n EndAmount: {type: \"number\", editable: true},\r\n NetAmount: {type: \"number\", editable: true},\r\n EndUnits: {type: \"number\", editable: true},\r\n NetUnits: {type: \"number\", editable: true},\r\n CalcPrice: {type: \"number\", editable: false}\r\n }\r\n }\r\n },\r\n data: $scope.appInfo.paperwork.meters,\r\n batch: true,\r\n aggregate: [{ field: \"RtlPrice\", aggregate: \"sum\" }, { field: \"NetUnits\", aggregate: \"sum\" }, { field: \"NetAmount\", aggregate: \"sum\" }]\r\n });\r\n\r\n $scope.metersGridOptions = {\r\n dataSource: $scope.metersGridDS,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"Fuel\"),\r\n columns: [\r\n {\r\n field: \"DispenserNo\",\r\n title: localStrings.getLocalizedString(\"Disp\"),\r\n width: 40,\r\n attributes: {\"data-field\": \"DispenserNo\", \"class\": \"tableCellDisabled\"}\r\n },\r\n {\r\n field: \"FuelPositionNo\",\r\n title: localStrings.getLocalizedString(\"Pos\"),\r\n width: 40,\r\n attributes: {\"data-field\": \"FuelPosition\", \"class\": \"tableCellDisabled\"}\r\n },\r\n {\r\n field: \"ProductDescription\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {\r\n \"data-field\": \"ProductDescription\",\r\n \"class\": \"tableCellDisabled description\"\r\n },\r\n footerTemplate: localStrings.getLocalizedString(\"Totals\")\r\n }\r\n ]\r\n },\r\n {\r\n field: \"RtlPrice\",\r\n width: 80,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"RtlPrice\", \"n3\"),\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"RetailPrice\") +\"\",\r\n attributes: {\"data-field\": \"RtlPrice\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showRetailPrice,\r\n aggregates: [\"sum\"],\r\n footerTemplate: \"
#=sum.toLocaleString('en-US', {minimumFractionDigits: 3})#
\"\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Dollars\"),\r\n columns: [\r\n {\r\n field: \"EndAmount\",\r\n title: localStrings.getLocalizedString(\"EndingMeter\"),\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"EndAmount\", \"n2\"),\r\n attributes: {\"data-field\": \"EndAmount\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showEndingDollar\r\n },\r\n {\r\n field: \"NetAmount\",\r\n title: localStrings.getLocalizedString(\"Net\"),\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"NetAmount\", \"n2\"),\r\n attributes: {\"data-field\": \"NetAmount\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showNetDollars,\r\n aggregates: [\"sum\"],\r\n footerTemplate: \"
#= sum.toLocaleString('en-US', { minimumFractionDigits: 2 })#
\"\r\n }\r\n ]\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Units\"),\r\n columns: [\r\n {\r\n field: \"EndUnits\",\r\n title: localStrings.getLocalizedString(\"EndingMeter\"),\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"EndUnits\", \"n3\"),\r\n attributes: {\"data-field\": \"EndUnits\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showEndingUnits\r\n },\r\n {\r\n field: \"NetUnits\",\r\n title: localStrings.getLocalizedString(\"Net\"),\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"NetUnits\", \"n3\"),\r\n attributes: {\"data-field\": \"NetUnits\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n hidden: !$scope.appInfo.paperwork.showNetUnits,\r\n aggregates: [\"sum\"],\r\n footerTemplate: \"
#=sum.toLocaleString('en-US', {minimumFractionDigits: 3})#
\"\r\n }\r\n ]\r\n },\r\n {\r\n field: \"CalcPrice\",\r\n width: 110,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"CalcPrice\", \"n3\"),\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"CalcAvgPrice\") + \"\",\r\n attributes: {\"data-field\": \"CalcPrice\", \"class\": \"tableCellDisabled\"},\r\n hidden: !$scope.appInfo.paperwork.showAvgPrice\r\n },\r\n {\r\n template: \"\",\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"BeginMeter\") + \"\",\r\n width: 60,\r\n attributes: {\"data-field\": \"BeginMeterBtn\"},\r\n hidden: !$scope.appInfo.paperwork.showBeginMeters\r\n },\r\n {\r\n template: \"\",\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"PumpTest\") + \"\",\r\n width: 60,\r\n attributes: {\"data-field\": \"PumpTestBtn\"}\r\n }\r\n ],\r\n pageable: false,\r\n sortable: false,\r\n editable: true,\r\n navigatable: true,\r\n scrollable: false,\r\n dataBinding: function (e) {\r\n var current = e.sender.current() || [];\r\n if (current[0]) {\r\n cellIndex = current.index();\r\n rowIndex = current.parent().index();\r\n }\r\n },\r\n dataBound: function (e)\r\n {\r\n $scope.setupMetersRows();\r\n },\r\n edit: function (e)\r\n {\r\n var $input = e.container.find(\"input\");\r\n var fieldName = $input.attr(\"name\");\r\n\r\n // alternative (if you don't have the name attribute in your editable):\r\n // var columnIndex = this.cellIndex(e.container);\r\n // var fieldName = this.thead.find(\"th\").eq(columnIndex).data(\"field\");\r\n\r\n if (!meterGridColIsEditable(fieldName, e.model))\r\n {\r\n $input.prop('readonly', true);\r\n //this.closeCell(); // prevent editing\r\n } else\r\n {\r\n $input.select();\r\n $input.addClass('k-cell-state-selected');\r\n }\r\n\r\n var grid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n var currentCell = $(grid.tbody.children().find(\".k-edit-cell\"));\r\n\r\n grid.current(currentCell);\r\n }\r\n };\r\n };\r\n\r\n function meterGridColIsEditable(fieldName, model)\r\n {\r\n if (fieldName === \"RtlPrice\") {\r\n if (!$scope.appInfo.paperwork.showRetailPrice)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"EndAmount\")\r\n {\r\n if (model.DollarsEndingState !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"NetAmount\")\r\n {\r\n if (model.DollarsNetState !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"EndUnits\")\r\n {\r\n if (model.UnitsEndingState !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"NetUnits\")\r\n {\r\n if (model.UnitsNetState !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n if (fieldName === \"BeginMeterBtn\")\r\n {\r\n if (model.FuelPositionUnitReading !== 1 && model.FuelPositionDollarReading !== 1)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n return true; // default to editable\r\n }\r\n\r\n function onGridKeydown(e)\r\n {\r\n if (e.keyCode === kendo.keys.TAB) {\r\n //check for shift key being down\r\n if (e.shiftKey) {\r\n $scope.focusPreviousEditableCell();\r\n }\r\n else {\r\n $scope.focusNextEditableCell();\r\n }\r\n }\r\n }\r\n\r\n $scope.gridInputCellOnBlur = function (dataItem, fieldName)\r\n {\r\n if (fieldName === \"RtlPrice\")\r\n {\r\n $scope.retailChange(dataItem);\r\n }\r\n\r\n if (fieldName === \"EndAmount\")\r\n {\r\n $scope.endAmountChange(dataItem);\r\n }\r\n\r\n if (fieldName === \"NetAmount\")\r\n {\r\n $scope.netAmountChange(dataItem);\r\n }\r\n\r\n if (fieldName === \"EndUnits\")\r\n {\r\n $scope.endUnitsChange(dataItem);\r\n }\r\n\r\n if (fieldName === \"NetUnits\")\r\n {\r\n $scope.netUnitsChange(dataItem);\r\n }\r\n };\r\n\r\n $scope.setupMetersRows = function ()\r\n {\r\n\r\n $(\"#metersGrid tr\").each(function (index, row)\r\n {\r\n\r\n if (index > 1)\r\n { // skip header rows\r\n var dataItem = $(\"#metersGrid\").data(\"kendoGrid\").dataItem(this);\r\n\r\n var $row = $(row);\r\n var $rowColumns = $row.find('td');\r\n\r\n $rowColumns.each(function (index, col)\r\n {\r\n var $col = $(col);\r\n var fieldName = $col.attr('data-field');\r\n if (!meterGridColIsEditable(fieldName, dataItem))\r\n {\r\n $col.addClass(\"tableCellDisabled\");\r\n $col.removeClass(\"k-editable-cell\");\r\n\r\n if (fieldName === \"BeginMeterBtn\")\r\n {\r\n $col.find('i').hide();\r\n }\r\n }\r\n\r\n //setup checkbox columns\r\n /* if (fieldName === \"BeginMeterBtn\") {\r\n $col.on(\"click\", \"input.elecChkBox\", function (e) {\r\n $scope.openBeginMeter(dataItem)\r\n });\r\n }*/\r\n\r\n $scope.setupGridColumnValidationNotificationUI($col);\r\n });\r\n\r\n }\r\n });\r\n };\r\n\r\n $scope.setupMetersGridColumns = function ()\r\n {\r\n\r\n var showDispenserNo = $scope.appInfo.paperwork.meters.some(function (meter)\r\n {\r\n return meter.DispenserNo > 0;\r\n });\r\n\r\n if (!showDispenserNo)\r\n {\r\n $scope.kendo.metersGrid.hideColumn(\"DispenserNo\");\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.showRetailPrice)\r\n {\r\n $scope.kendo.metersGrid.hideColumn(\"RtlPrice\");\r\n }\r\n };\r\n\r\n $scope.$on(\"kendoWidgetCreated\", function (event, widget)\r\n {\r\n\r\n var grid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n // the event is emitted for every widget; if we have multiple\r\n // widgets in this controller, we need to check that the event\r\n // is for the one we're interested in.\r\n\r\n if (widget === $scope.kendo.metersGrid)\r\n {\r\n grid.dataSource.data($scope.appInfo.paperwork.meters);\r\n $(\"#metersGrid\").find(\"table\").on(\"keydown\", onGridKeydown);\r\n $scope.setupMetersGridColumns();\r\n\r\n $scope.calculatePageTotals();\r\n }\r\n });\r\n\r\n $scope.setupGridColumnValidationNotificationUI = function ($col)\r\n {\r\n\r\n var fieldName = $col.attr('data-field');\r\n\r\n $col.qtip({\r\n id: \"qtip-\" + fieldName,\r\n content: {\r\n text: \"\"\r\n },\r\n position: {\r\n adjust: {\r\n x: -10, y: -10\r\n }\r\n },\r\n style: {\r\n classes: \"toolTipStyle\"\r\n }\r\n });\r\n\r\n $col.qtip('disable', true);\r\n\r\n };\r\n\r\n $scope.processGridColumnValidationNotification = function ($row, fieldName, errorMessages, warningMessages)\r\n {\r\n\r\n var idx = 0;\r\n\r\n var hasErrors = (errorMessages.length > 0);\r\n var hasWarnings = (warningMessages.length > 0);\r\n\r\n var $col = $row.find(\"[data-field='\" + fieldName + \"']\");\r\n\r\n //clear classes\r\n $col.removeClass(\"td-error\");\r\n $col.removeClass(\"td-warning\");\r\n\r\n if (hasErrors || hasWarnings)\r\n {\r\n\r\n var messageList = $(\"
\");\r\n\r\n if (hasErrors)\r\n {\r\n var errorList = $(\"
\" + localStrings.getLocalizedString(\"Error\") + \" :
\");\r\n for (idx = 0; idx < errorMessages.length; idx++)\r\n {\r\n errorList.append(\"
  • \" + errorMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(errorList);\r\n }\r\n\r\n if (hasWarnings)\r\n {\r\n var warningList = $(\"
    \" + localStrings.getLocalizedString(\"Warning\") + \" :
    \");\r\n for (idx = 0; idx < warningMessages.length; idx++)\r\n {\r\n warningList.append(\"
  • \" + warningMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(warningList);\r\n }\r\n\r\n $col.qtip('option', 'content.text', messageList);\r\n\r\n if (hasErrors)\r\n {\r\n $col.addClass(\"td-error\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-error');\r\n } else\r\n {\r\n $col.addClass(\"td-warning\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-warning');\r\n }\r\n\r\n $col.qtip('disable', false);\r\n }\r\n else\r\n {\r\n $col.qtip('disable', true);\r\n }\r\n };\r\n\r\n var meterRowValidation =\r\n {\r\n validator: function (meter, parms)\r\n {\r\n var isValid = true;\r\n\r\n var $row = $(\"#metersGrid\").data(\"kendoGrid\").tbody.find(\"tr[data-uid='\" + meter.uid + \"']\");\r\n \r\n // retail price validation\r\n if ($scope.appInfo.paperwork.showRetailPrice)\r\n {\r\n\r\n var errorRtlPrice = [], warningRtlPrice = [];\r\n \r\n // retail price errors\r\n if ((angular.isUndefinedOrNullOrEmpty(meter.RtlPrice) || meter.RtlPrice === 0) && (meter.NetAmount > 0 && meter.NetUnits > 0))\r\n {\r\n isValid = false;\r\n\r\n errorRtlPrice.push(localStrings.getLocalizedString(\"GTZeroError\"));\r\n }\r\n\r\n // retail price warnings\r\n if ($scope.appInfo.paperwork.showRetailPrice && !angular.isUndefinedOrNullOrEmpty(meter.CalcPrice) && !angular.isUndefinedOrNullOrEmpty(meter.PriorCalcPrice))\r\n {\r\n\r\n var calcTotalSales = (meter.RtlPrice * meter.NetUnits);\r\n\r\n if ((Math.abs(calcTotalSales - meter.NetAmount) > $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance) && calcTotalSales > 0 && meter.NetAmount > 0 && $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance > 0)\r\n {\r\n warningRtlPrice.push(localStrings.getLocalizedString(\"CapturedTotalOutside\"));\r\n }\r\n\r\n if ((Math.abs(meter.RtlPrice - meter.CalcPrice) > $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance) && meter.RtlPrice > 0 && meter.CalcPrice > 0 && $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance > 0)\r\n {\r\n warningRtlPrice.push(localStrings.getLocalizedString(\"CapturedRetailPrice\"));\r\n }\r\n }\r\n\r\n $scope.processGridColumnValidationNotification($row, 'RtlPrice', errorRtlPrice, warningRtlPrice);\r\n }\r\n\r\n //end units validation\r\n var errorEndUnits = [], warningEndUnits = [];\r\n if (meter.EndUnits > 0)\r\n {\r\n if (meter.EndUnits < meter.BeginUnits && $scope.appInfo.paperwork.showBeginMeters)\r\n {\r\n warningEndUnits.push(localStrings.getLocalizedString(\"UnitsRolled\"));\r\n }\r\n if (meter.EndUnits >= $scope.MaxUnits) {\r\n isValid = false;\r\n errorEndUnits.push(localStrings.getLocalizedString(\"UnitsMaxExceeded\"));\r\n }\r\n }\r\n $scope.processGridColumnValidationNotification($row, 'EndUnits', errorEndUnits, warningEndUnits);\r\n\r\n //end amount validation\r\n var errorEndAmount = [], warningEndAmount = [];\r\n if (meter.EndAmount > 0)\r\n {\r\n if (meter.EndAmount < meter.BeginAmount && $scope.appInfo.paperwork.showBeginMeters)\r\n {\r\n warningEndAmount.push(localStrings.getLocalizedString(\"UnitsRolled\"));\r\n }\r\n if (meter.EndAmount >= $scope.MaxUnits) {\r\n isValid = false;\r\n errorEndAmount.push(localStrings.getLocalizedString(\"DollarsMaxExceeded\"));\r\n }\r\n }\r\n $scope.processGridColumnValidationNotification($row, 'EndAmount', errorEndAmount, warningEndAmount);\r\n\r\n //calc price validation\r\n var errorCalcPrice = [], warningCalcPrice = [];\r\n if (!angular.isUndefinedOrNullOrEmpty(meter.CalcPrice) && !angular.isUndefinedOrNullOrEmpty(meter.PriorCalcPrice))\r\n {\r\n if (Math.abs(meter.CalcPrice) >= $scope.MaxUnits || (Math.abs(meter.CalcPrice - meter.PriorCalcPrice) > $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance) && meter.CalcPrice > 0 && meter.PriorCalcPrice > 0 && $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance > 0)\r\n {\r\n warningCalcPrice.push(localStrings.getLocalizedString(\"CalculatedPriceOutside\"));\r\n }\r\n }\r\n $scope.processGridColumnValidationNotification($row, 'CalcPrice', errorCalcPrice, warningCalcPrice);\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n $scope.validateMeters = function ()\r\n {\r\n\r\n var isValid = true;\r\n\r\n var metersGrid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n angular.forEach(metersGrid.dataSource.data(), function (meter)\r\n {\r\n isValid = isValid && meterRowValidation.validator(meter);\r\n });\r\n\r\n return isValid;\r\n };\r\n\r\n var newPWBatchLoadedListener = $rootScope.$on('event:NewPaperworkBatchLoaded', function (event, data)\r\n {\r\n if ($scope.locationInfo.sideMenuData.paperwork.meters)\r\n $scope.loadMeters();\r\n else if ($scope.locationInfo.sideMenuData.paperwork.tanks)\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkTanks/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkTanks/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n else if ($scope.locationInfo.sideMenuData.paperwork.deliveries)\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDeliveries/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDeliveries/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n else\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n });\r\n\r\n // $scope $destroy\r\n $scope.$on('$destroy', newPWBatchLoadedListener);\r\n\r\n $scope.loadMeters = function ()\r\n {\r\n $scope = this;\r\n\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.batch.SiteKey)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n PaperworkMetersService.loadMetersForEntry(\r\n $scope.appInfo.paperwork.batch.Key,\r\n $scope.appInfo.paperwork.context.selectedSiteObj.PCKey,\r\n $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true)\r\n ).then(function (data)\r\n {\r\n // if(data.count == 0){\r\n // TODO: No meters, do something...\r\n //\r\n // }\r\n $scope.appInfo.paperwork.meters = data.PaperworkMeters;\r\n $scope.appInfo.paperwork.priceToleranceAmount = data.PriceToleranceAmount;\r\n $scope.appInfo.paperwork.showRetailPrice = data.ShowRetailPrice;\r\n $scope.appInfo.paperwork.showEndingDollar = data.ShowEndingDollar;\r\n $scope.appInfo.paperwork.showNetDollars = data.ShowNetDollars;\r\n $scope.appInfo.paperwork.showEndingUnits = data.ShowEndingUnits;\r\n $scope.appInfo.paperwork.showNetUnits = data.ShowNetUnits;\r\n $scope.appInfo.paperwork.showAvgPrice = data.ShowAvgPrice;\r\n $scope.appInfo.paperwork.showBeginMeters = data.ShowBeginMeters;\r\n\r\n $scope.initializeMetersGrid();\r\n\r\n $scope.metersLoaded = true;\r\n\r\n if ($scope.appInfo.paperwork.meters.length > 0) {\r\n $scope.metersEditable = !(($scope.appInfo.paperwork.context.lockPaperworkAfterDru && $scope.appInfo.paperwork.meters[0].DRUPosted) || $scope.appInfo.paperwork.meters[0].Status === 1);\r\n }\r\n\r\n //If entering a new paperwork batch create the default header form in the database\r\n //if (!$scope.appInfo.paperwork.viewOnly && $scope.metersEditable && $scope.appInfo.paperwork.form.PaperworkBatchKey === 0) {\r\n // var paperworkMeterHeader =\r\n // {\r\n // Key: $scope.appInfo.paperwork.meters[0].FuelMtrKey,\r\n // SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n // SiteDesc: $scope.appInfo.paperwork.context.selectedSiteObj.SiteDesc,\r\n // ProfCtrKey: $scope.appInfo.paperwork.context.selectedSiteObj.PCKey,\r\n // PaperworkBatchKey: $scope.appInfo.paperwork.batch.Key,\r\n // PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n // UserName: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n // SourceKey: 0,\r\n // Ts: $scope.appInfo.paperwork.meters[0].HeaderTimeStamp,\r\n // AppKey: $scope.locationInfo.sideMenuData.paperwork.meters.Key\r\n // };\r\n\r\n //Pass in default meters data since the grid has not yet been modified\r\n //PaperworkMetersService.savePaperworkMeters(paperworkMeterHeader, $scope.appInfo.paperwork.meters, true);\r\n //}\r\n\r\n //$scope.metersLoaded = true;\r\n });\r\n };\r\n\r\n var PageStage = $rootScope.$on('event:PageStage', function (event, args)\r\n {\r\n if (args === 'DREGM' && !$scope.appInfo.paperwork.viewOnly && $scope.metersEditable && $scope.metersGridDS.hasChanges())\r\n {\r\n $scope.saveMeters('', false, false);\r\n } \r\n });\r\n $scope.$on('$destroy', PageStage);\r\n\r\n $scope.next = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.metersEditable && $scope.metersGridDS.hasChanges())\r\n {\r\n $scope.saveMeters(path, false, false);\r\n } else {\r\n $scope.goTo(setupNav.navigateToPage(path, $scope.appInfo.paperwork.apps, $scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n };\r\n\r\n $scope.previous = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.metersEditable && $scope.metersGridDS.hasChanges())\r\n {\r\n $scope.saveMeters(path, false, false, true);\r\n } else {\r\n $scope.goTo(setupNav.navigateToPage(path, $scope.appInfo.paperwork.apps, $scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, true));\r\n }\r\n };\r\n\r\n $scope.close = function ()\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.metersEditable)\r\n {\r\n $scope.saveMeters(\"\", false, false);\r\n } else\r\n {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork/\");\r\n }\r\n\r\n };\r\n\r\n $scope.submit = function ()\r\n {\r\n $scope.submitClicked = true;\r\n $scope.saveMeters(\"\", true, false);\r\n };\r\n\r\n $scope.processSubmit = function (submit, skipNav) {\r\n\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: submit,\r\n PreviouslySubmitted: $scope.appInfo.paperwork.batch.HasBeenSubmitted\r\n };\r\n\r\n PaperworkService.GetPaperworkBatchErrorWarning(submitPaperworkCmdParms).then(function (data) {\r\n //If warnings - show confirm dialog\r\n if (data.HasWarnings) {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.Warnings[0])) {\r\n $scope.notifier.show(data.Warnings[0], \"warning\");\r\n\r\n var yes = function () {\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data) {\r\n if (submit && !skipNav)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n };\r\n\r\n $scope.modalifier.confirm(data.Warnings[0] + \"
    \" + localStrings.getLocalizedString(\"WishToContinue\"), yes);\r\n }\r\n }\r\n else { \r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data) {\r\n if (submit && !skipNav)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n }\r\n });\r\n };\r\n\r\n $scope.submitPaperwork = function (submit, skipNav)\r\n {\r\n var fuelMetersAppInfo = $scope.appInfo.paperwork.apps[0];\r\n\r\n //If we have fuelMeters and fuelMeters are required, but not saved; then throw error\r\n if (fuelMetersAppInfo.HasData === 0 && fuelMetersAppInfo.IsRequired !== 0)\r\n {\r\n $timeout(function () {\r\n $scope.modalifier.showSavedError();\r\n }, 100);\r\n return;\r\n }\r\n\r\n $scope.processSubmit(submit, skipNav);\r\n };\r\n\r\n $scope.saveMeters = function (path, submit, close, isPrevious, skipNav)\r\n {\r\n if (!$scope.validateMeters()) {\r\n return;\r\n }\r\n \r\n $scope.resetDirtyFlags($scope.metersForm);\r\n isPrevious = isPrevious ? isPrevious: false;\r\n skipNav = skipNav ? skipNav : false;\r\n\r\n var paperworkMeterHeader =\r\n {\r\n Key: $scope.appInfo.paperwork.meters[0].FuelMtrKey,\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n SiteDesc: $scope.appInfo.paperwork.context.selectedSiteObj.SiteDesc,\r\n ProfCtrKey: $scope.appInfo.paperwork.context.selectedSiteObj.PCKey,\r\n PaperworkBatchKey: $scope.appInfo.paperwork.batch.Key,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n UserName: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SourceKey: 0,\r\n Ts: $scope.appInfo.paperwork.meters[0].HeaderTimeStamp,\r\n AppKey: $scope.locationInfo.sideMenuData.paperwork.meters.Key\r\n };\r\n\r\n angular.copy($scope.metersGridDS.data().toJSON(), $scope.appInfo.paperwork.meters);\r\n\r\n // Call these functions to translate the french numeric value to a actual number value.\r\n PaperworkMetersService.updateMeters($scope.appInfo.paperwork.meters);\r\n \r\n PaperworkMetersService.savePaperworkMeters(paperworkMeterHeader, $scope.appInfo.paperwork.meters).then(function (data) {\r\n var grid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n $scope.appInfo.paperwork.meters = data.PaperworkMeters;\r\n if (grid) {\r\n grid.dataSource.data(data.PaperworkMeters);\r\n\r\n $scope.validateMeters(); // call validate to re add any warnings after save\r\n }\r\n\r\n $scope.appInfo.paperwork.apps[0].HasData = -1;\r\n\r\n if (submit) {\r\n $scope.submitPaperwork(true, skipNav);\r\n return;\r\n }\r\n if (close) {\r\n $scope.submitPaperwork(false, skipNav);\r\n return;\r\n }\r\n if (path.length > 0){\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n }\r\n });\r\n };\r\n\r\n $scope.retailChange = function (dataItem)\r\n {\r\n PaperworkMetersService.netAmountCalc(dataItem);\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.endAmountChange = function (dataItem)\r\n {\r\n PaperworkMetersService.calculateNetAmountFromEnd(dataItem);\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay,\r\n $scope.appInfo.paperwork.showRetailPrice);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.netAmountChange = function (dataItem)\r\n {\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay,\r\n $scope.appInfo.paperwork.showRetailPrice);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.netUnitsChange = function (dataItem)\r\n {\r\n PaperworkMetersService.netAmountCalc(dataItem);\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay,\r\n $scope.appInfo.paperwork.showRetailPrice);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.endUnitsChange = function (dataItem)\r\n {\r\n PaperworkMetersService.calculateNetUnitsFromEnd(dataItem);\r\n PaperworkMetersService.netAmountCalc(dataItem);\r\n PaperworkMetersService.calcPerUnit(dataItem,\r\n $scope.appInfo.paperwork.priceToleranceAmount,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceToRetail,\r\n $scope.appInfo.paperwork.siteInfo.CheckAveragePriceOverDay,\r\n $scope.appInfo.paperwork.showRetailPrice);\r\n $scope.calculatePageTotals();\r\n };\r\n\r\n $scope.calculatePageTotals = function ()\r\n {\r\n var metersGrid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n $scope.appInfo.paperwork.totalAmount = PaperworkMetersService.calculatePageAmountTotals(metersGrid.dataSource.data());\r\n $scope.appInfo.paperwork.totalUnits = PaperworkMetersService.calculatePageUnitTotals(metersGrid.dataSource.data());\r\n\r\n // update the grid and make sure it has the latest data\r\n metersGrid.dataSource.data(metersGrid.dataSource.data());\r\n };\r\n\r\n $scope.focusNextEditableCell = function () {\r\n var metersGrid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n if (!isNaN(cellIndex)) {\r\n var current = metersGrid.current(metersGrid.tbody.children().eq(rowIndex).children().eq(cellIndex));\r\n\r\n rowIndex = cellIndex = null;\r\n \r\n if (current.hasClass(\"k-editable-cell\"))\r\n {\r\n var nextCell = current.nextAll(\".k-editable-cell\");\r\n if (!nextCell[0])\r\n {\r\n //search the next row\r\n nextCell = current.parent().next().children(\".k-editable-cell:first\");\r\n }\r\n metersGrid.current(nextCell);\r\n metersGrid.editCell(nextCell[0]);\r\n }\r\n }\r\n };\r\n\r\n $scope.focusPreviousEditableCell = function () {\r\n var metersGrid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n if (!isNaN(cellIndex)) {\r\n var current = metersGrid.current(metersGrid.tbody.children().eq(rowIndex).children().eq(cellIndex));\r\n\r\n rowIndex = cellIndex = null;\r\n\r\n if (current.hasClass(\"k-editable-cell\")) {\r\n var nextCell = current.prevAll(\".k-editable-cell\");\r\n if (!nextCell[0]) {\r\n //search the previous row\r\n nextCell = current.parent().prev().children(\".k-editable-cell:last\");\r\n }\r\n metersGrid.current(nextCell);\r\n metersGrid.editCell(nextCell[0]);\r\n }\r\n }\r\n };\r\n\r\n $scope.openBeginMeter = function (dataItem)\r\n {\r\n \r\n $scope.modalInfo.dataItem = dataItem;\r\n $scope.modalInfo.beginAmount = dataItem.BeginAmount;\r\n $scope.modalInfo.beginUnits = dataItem.BeginUnits;\r\n $scope.modalInfo.useBeginUnits = (dataItem.FuelPositionUnitReading === 1);\r\n $scope.modalInfo.useBeginAmount = (dataItem.FuelPositionDollarReading === 1);\r\n $scope.modalInfo.type = 0;\r\n $scope.modalInfo.header = localStrings.getLocalizedString(\"BeginMeter\");\r\n $scope.modalInfo.shown = true;\r\n };\r\n\r\n $scope.openPumpTest = function (dataItem)\r\n {\r\n $scope.modalInfo.dataItem = dataItem;\r\n $scope.modalInfo.beginAmount = dataItem.TestAmount;\r\n $scope.modalInfo.beginUnits = dataItem.TestUnits;\r\n $scope.modalInfo.useBeginUnits = true;\r\n $scope.modalInfo.useBeginAmount = true;\r\n $scope.modalInfo.type = 1;\r\n $scope.modalInfo.header = localStrings.getLocalizedString(\"PumpTest\");\r\n $scope.modalInfo.shown = true;\r\n };\r\n\r\n $scope.saveModalValues = function ()\r\n {\r\n if ($scope.modalInfo.beginAmount < 0 || $scope.modalInfo.beginUnits < 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"GTZeroError2\"), 'error');\r\n return;\r\n }\r\n if ($scope.modalInfo.beginUnits >= $scope.MaxUnits) {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"UnitsMaxExceeded\"), 'error');\r\n return;\r\n }\r\n if ($scope.modalInfo.beginAmount >= $scope.MaxUnits) {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"DollarsMaxExceeded\"), 'error');\r\n return;\r\n }\r\n\r\n switch ($scope.modalInfo.type)\r\n {\r\n case 0:\r\n $scope.modalInfo.dataItem.BeginAmountOverride =\r\n ($scope.modalInfo.dataItem.BeginAmount === $scope.modalInfo.beginAmount);\r\n $scope.modalInfo.dataItem.BeginAmount = $scope.modalInfo.beginAmount;\r\n $scope.modalInfo.dataItem.BeginUnitsOverride =\r\n ($scope.modalInfo.dataItem.BeginUnits === $scope.modalInfo.beginUnits);\r\n $scope.modalInfo.dataItem.BeginUnits = $scope.modalInfo.beginUnits;\r\n $scope.endAmountChange($scope.modalInfo.dataItem);\r\n $scope.endUnitsChange($scope.modalInfo.dataItem);\r\n break;\r\n\r\n case 1:\r\n $scope.modalInfo.dataItem.TestAmount = $scope.modalInfo.beginAmount;\r\n $scope.modalInfo.dataItem.TestUnits = $scope.modalInfo.beginUnits;\r\n $scope.calculatePageTotals();\r\n break;\r\n }\r\n\r\n // Need to do this so our prompt/change detector knows we made a change to form\r\n var metersGrid = $(\"#metersGrid\").data(\"kendoGrid\");\r\n\r\n if (!isNaN(cellIndex)) {\r\n var current = metersGrid.current(metersGrid.tbody.children().eq(rowIndex).children().eq(cellIndex));\r\n\r\n rowIndex = cellIndex = null;\r\n current[0].classList.add(\"k-dirty-cell\");\r\n }\r\n\r\n $scope.modalInfo = {};\r\n $scope.modalInfo.shown = false;\r\n };\r\n })\r\n .controller('enterPaperworkTanksCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter, $timeout, PaperworkTanksService,\r\n $location, WebFunctions, validatorSvc, templates, localStrings, globalizationSvc, setupNav)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n\r\n $scope.appInfo.paperwork.paperworkKey = 0;\r\n $scope.modalInfo = {};\r\n $scope.tanksLoaded = false;\r\n $scope.postedReadingsExist = false;\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.appInfo = $scope.appInfo || {};\r\n\r\n $scope.appInfo.paperwork.viewOnly = $location.$$path.indexOf('/ViewPaperworkTanks/') > -1;\r\n if ($routeParams.paperworkKey)\r\n {\r\n $scope.appInfo.paperwork.paperworkKey = $routeParams.paperworkKey;\r\n }\r\n $scope.appInfo.paperwork.NewOSComments = '';\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n $scope.appInfo.paperwork.batch = {};\r\n $scope.appInfo.paperwork.tanks = [];\r\n $scope.appInfo.paperwork.postedTanks = [];\r\n\r\n if (!$scope.appInfo.paperwork.context)\r\n {\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data)\r\n {\r\n $scope.appInfo.paperwork.context = {};\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n if ($scope.appInfo.paperwork.paperworkKey > 0)\r\n {\r\n //We are loading a known existing paperwork batch\r\n PaperworkService.OpenPaperworkBatchByKey(\r\n $scope.appInfo.paperwork.paperworkKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n\r\n // resolve if this is the first or last page\r\n var res = setupNav.firstLastPage('DREGS',$scope.appInfo.paperwork.apps);\r\n $scope.locationInfo.sideMenuData.isFirstPage = res.isFirstPage;\r\n $scope.locationInfo.sideMenuData.isLastPage = res.isLastPage;\r\n\r\n $rootScope.$broadcast('event:PaperworkLoaded', $scope.appInfo.paperwork.viewOnly, $scope.appInfo.paperwork.paperworkKey);\r\n\r\n var nextApp = true;\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DREGS')\r\n {\r\n $scope.loadTanks(false);\r\n nextApp = false;\r\n }\r\n });\r\n if (nextApp)\r\n {\r\n $scope.goTo(setupNav.navigateToPage('DREGS',$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n }, function ()\r\n {\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n });\r\n } else\r\n {\r\n //todo: goback...\r\n }\r\n $scope.locationInfo.sideMenuData.pwSubMenu = '2';\r\n $scope.appInfo.paperwork.tankIndex = 0;\r\n };\r\n\r\n var newPWBatchLoadedListener = $rootScope.$on('event:NewPaperworkBatchLoaded', function (event, data)\r\n {\r\n if ($scope.locationInfo.sideMenuData.paperwork.tanks)\r\n $scope.loadTanks(false);\r\n else\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDeliveries/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDeliveries/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n });\r\n\r\n // $scope $destroy\r\n $scope.$on('$destroy', newPWBatchLoadedListener);\r\n\r\n var gridColEditorInput = function (container, options)\r\n {\r\n var fieldName = \"'\" + options.field + \"'\";\r\n\r\n var required = $(container).attr('required'); // field is required\r\n\r\n // For some browsers, `attr` is undefined; for others,\r\n // `attr` is false. Check for both.\r\n if (typeof required !== typeof undefined && required !== false)\r\n {\r\n $('')\r\n .appendTo(container)\r\n .kendoNumericTextBox({\r\n decimals: 2,\r\n format: \"#\",\r\n max: 100000000,\r\n min: 0,\r\n spinners: false,\r\n selectOnFocus: true\r\n });\r\n } else\r\n {\r\n $('')\r\n .appendTo(container)\r\n .kendoNumericTextBox({\r\n decimals: 2,\r\n format: \"#\",\r\n max: 100000000,\r\n min: 0,\r\n spinners: false,\r\n selectOnFocus: true\r\n });\r\n }\r\n\r\n };\r\n\r\n var gridColNumber = function (field, format)\r\n {\r\n return '';\r\n };\r\n\r\n var partialUnitsEditor = function (container, options)\r\n {\r\n $(\"\")\r\n\r\n .appendTo(container)\r\n .kendoComboBox({\r\n id: \"partialUnits\",\r\n dataSource: {\r\n data: $scope.appInfo.paperwork.partialUnits\r\n },\r\n filter: \"contains\",\r\n dataTextField: localStrings.getLocalizedString(\"Key\"),\r\n dataValueField: \"Value\",\r\n change: function (e)\r\n {\r\n\r\n var selectionElement = $(e.sender.element[0]).parent().find(\".k-dropdown-wrap\");\r\n\r\n // check if valid\r\n if ($(e.sender.element[0]).hasClass(\"k-invalid\"))\r\n {\r\n selectionElement.addClass(\"k-selection-invalid\");\r\n } else\r\n {\r\n selectionElement.removeClass(\"k-selection-invalid\");\r\n\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n\r\n var selectedRow = $(\".k-grid-edit-row\");\r\n //Get the item from the grid\r\n var selectedRowData = grid.dataItem(selectedRow);\r\n\r\n if (options.field === \"PartialUnits\")\r\n {\r\n $scope.calculateTankValues(selectedRowData);\r\n } else\r\n {\r\n $scope.calculateWaterVolumeValues(selectedRowData);\r\n }\r\n }\r\n\r\n if (this.value() && this.selectedIndex === -1)\r\n {\r\n this.value('');\r\n this._filterSource({\r\n value: \"\",\r\n field: this.options.dataTextField,\r\n operator: \"contains\"\r\n });\r\n return;\r\n }\r\n },\r\n select: function (e)\r\n {\r\n\r\n var dataItem = this.dataItem(e.item.index());\r\n }\r\n });\r\n\r\n $('').appendTo(container);\r\n\r\n };\r\n\r\n function getPartialDescFromValue(dataItem)\r\n {\r\n return $scope.appInfo.paperwork.partialUnits.find({Value: dataItem.PartialUnits}).Key;\r\n }\r\n\r\n //If No Reading checkbox is selected ,set fields to 0\r\n $scope.noReadingChkClick = function (dataItem) {\r\n var modelRow = $(\"#tanksGrid\").data(\"kendoGrid\").dataSource.getByUid(dataItem.uid);\r\n\r\n if (!dataItem.NoReading) { \r\n modelRow.set('NoReading', true);\r\n modelRow.set('LargeUnits', 0);\r\n modelRow.set('SmallUnits', 0);\r\n modelRow.set('Quantity', 0);\r\n modelRow.set('WaterSmallUnit', 0);\r\n modelRow.set('WaterQuantity', 0);\r\n }\r\n };\r\n\r\n $scope.initializeTanksGrid = function ()\r\n {\r\n\r\n $scope.tanksGridDS = new kendo.data.DataSource({\r\n schema: {\r\n model: {\r\n fields: {\r\n TankNo: {type: \"number\", editable: false},\r\n ProductId: {type: \"string\", editable: false},\r\n ProductDescription: {type: \"string\", editable: false},\r\n NoReading: {type: \"boolean\"},\r\n LargeUnits: {type: \"number\"},\r\n SmallUnits: {type: \"number\"},\r\n PartialUnits: {type: \"number\"},\r\n Quantity: {type: \"number\"},\r\n WaterSmallUnits: {type: \"number\"},\r\n WaterPartialUnits: {type: \"number\"},\r\n WaterQuantity: {type: \"number\"},\r\n Temperature: {type: \"number\"},\r\n NetQuantity: {type: \"number\"},\r\n Electronic: {type: \"boolean\"},\r\n Depth: {type: \"number\"}\r\n }\r\n }\r\n },\r\n data: $scope.appInfo.paperwork.tanks,\r\n batch: true\r\n });\r\n\r\n $scope.tanksGridOptions = {\r\n dataSource: $scope.tanksGridDS,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"Tanks\"),\r\n columns: [\r\n {\r\n field: \"TankNo\",\r\n title: localStrings.getLocalizedString(\"No\"),\r\n width: 40,\r\n attributes: {\"data-field\": \"TankNo\", \"class\": \"tableCellDisabled\"},\r\n template: \"#=TankNo#\"\r\n },\r\n {\r\n field: \"ProductId\",\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n width: 65,\r\n attributes: {\"data-field\": \"ProductId\", \"class\": \"tableCellDisabled description\"},\r\n template: \"#=ProductId#\"\r\n },\r\n {\r\n field: \"ProductDescription\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {\r\n \"data-field\": \"ProductDescription\",\r\n \"class\": \"tableCellDisabled description\"\r\n },\r\n template: \"#=ProductDescription#\" \r\n }\r\n ]\r\n },\r\n {\r\n field: \"NoReading\",\r\n width: 40,\r\n template: \"\",\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"NoRdg\") + \"\",\r\n attributes: {\"data-field\": \"NoReading\", \"class\": \"k-editable-cell grid-checkbox\", \"ng-click\":\"noReadingChkClick(dataItem);\"}\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Fuel\"),\r\n columns: [\r\n {\r\n field: \"LargeUnits\",\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"LargeUnits\", \"n2\"),\r\n headerTemplate: \"ft.m.\",\r\n attributes: {\"data-field\": \"LargeUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"SmallUnits\",\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"SmallUnits\", \"n2\"),\r\n headerTemplate: \"in.cm.\",\r\n attributes: {\"data-field\": \"SmallUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"PartialUnits\",\r\n title: localStrings.getLocalizedString(\"Partial\"),\r\n width: 70,\r\n editor: partialUnitsEditor,\r\n template: function (dataItem)\r\n {\r\n return getPartialDescFromValue(dataItem);\r\n },\r\n attributes: {\"data-field\": \"PartialUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"Quantity\",\r\n title: localStrings.getLocalizedString(\"Qty\"),\r\n width: 120,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"Quantity\", \"n2\"),\r\n attributes: {\"data-field\": \"Quantity\", \"class\": \"k-editable-cell\"}\r\n }\r\n ]\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Water\"),\r\n columns: [\r\n {\r\n field: \"WaterSmallUnits\",\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"WaterSmallUnits\", \"n\"),\r\n headerTemplate: \"in.cm.\",\r\n attributes: {\"data-field\": \"WaterSmallUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"WaterPartialUnits\", title: localStrings.getLocalizedString(\"Partial\"), width: 70, editor: partialUnitsEditor,\r\n template: function (dataItem)\r\n {\r\n return getPartialDescFromValue(dataItem);\r\n },\r\n attributes: {\"data-field\": \"WaterPartialUnits\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"WaterQuantity\",\r\n title: localStrings.getLocalizedString(\"Qty\"),\r\n width: 120,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"WaterQuantity\", \"n2\"),\r\n attributes: {\"data-field\": \"WaterQuantity\", \"class\": \"k-editable-cell\"}\r\n }\r\n ]\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"TempCorrection\"),\r\n columns: [\r\n {\r\n field: \"Temperature\",\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"Temperature\", \"n\"),\r\n headerTemplate: \"°F°C\",\r\n attributes: {\"data-field\": \"Temperature\", \"class\": \"k-editable-cell\"}\r\n },\r\n {\r\n field: \"NetQuantity\",\r\n title: localStrings.getLocalizedString(\"Net\"),\r\n width: 50,\r\n editor: gridColEditorInput,\r\n template: gridColNumber(\"NetQuantity\", \"n2\"),\r\n attributes: {\"data-field\": \"NetQuantity\", \"class\": \"k-editable-cell\"}\r\n }\r\n ]\r\n },\r\n {\r\n field: \"Electronic\",\r\n width: 40,\r\n template: \"\",\r\n headerTemplate: \"\" + localStrings.getLocalizedString(\"ElectRdg\") + \"\",\r\n attributes: {\"data-field\": \"Electronic\", \"class\": \"k-editable-cell grid-checkbox\"}\r\n }\r\n\r\n ],\r\n pageable: false,\r\n sortable: false,\r\n editable: true,\r\n scrollable: false,\r\n navigatable: true,\r\n dataBound: function (e)\r\n {\r\n $timeout(function ()\r\n {\r\n $scope.setupTankRows();\r\n },100);\r\n\r\n },\r\n edit: function (e)\r\n {\r\n var $input;\r\n if (e.container.find(\"input\").length > 1) {\r\n $input = e.container.find(\"input.k-input\").last(); // find(\"input\") returns two input elements which causes issue.\r\n }\r\n else {\r\n $input = e.container.find(\"input\");\r\n }\r\n var fieldName = $input.attr(\"name\");\r\n\r\n $input.select();\r\n $input.addClass('k-cell-state-selected');\r\n \r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n var currentCell = $(grid.tbody.children().find(\".k-edit-cell\"));\r\n\r\n grid.current(currentCell);\r\n }\r\n\r\n };\r\n }; \r\n \r\n $scope.$on(\"kendoWidgetCreated\", function (event, widget)\r\n {\r\n\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n\r\n // the event is emitted for every widget; if we have multiple\r\n // widgets in this controller, we need to check that the event\r\n // is for the one we're interested in.\r\n\r\n if (widget === $scope.kendo.tanksGrid)\r\n {\r\n grid.dataSource.data($scope.appInfo.paperwork.tanks);\r\n\r\n $(\"#tanksGrid\").find(\"table\").on(\"keydown\", onGridKeydown);\r\n\r\n $scope.setupTankGridColumns(grid);\r\n\r\n }\r\n });\r\n \r\n $scope.setupTankRows = function ()\r\n {\r\n\r\n $(\"#tanksGrid tr\").each(function (index, row)\r\n {\r\n\r\n if (index > 1)\r\n { // skip header rows\r\n var dataItem = $(\"#tanksGrid\").data(\"kendoGrid\").dataItem(this);\r\n\r\n var $row = $(row);\r\n var $rowColumns = $row.find('td');\r\n\r\n $rowColumns.each(function (index, col)\r\n {\r\n var $col = $(col);\r\n var fieldName = $col.attr('data-field');\r\n var $inputElm;\r\n\r\n $scope.setupGridColumnValidationNotificationUI($col);\r\n\r\n //setup checkbox columns\r\n if (fieldName === \"Electronic\")\r\n {\r\n //check to see if grid is editable\r\n if ($(\"#tanksGrid\").attr(\"k-editable\") === \"false\")\r\n {\r\n $col.removeClass(\"k-editable-cell\");\r\n\r\n $inputElm = $col.find(\"input\");\r\n $inputElm.attr(\"disabled\", true);\r\n\r\n } else\r\n {\r\n $col.on(\"change\", \"input.elecChkBox\", function (e)\r\n {\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\"),\r\n dataItem = grid.dataItem($(e.target).closest(\"tr\"));\r\n\r\n dataItem.set(\"Electronic\", this.checked);\r\n });\r\n }\r\n }\r\n\r\n if (fieldName === \"NoReading\")\r\n {\r\n //check to see if grid is editable\r\n if ($(\"#tanksGrid\").attr(\"k-editable\") === \"false\")\r\n {\r\n $col.removeClass(\"k-editable-cell\");\r\n\r\n $inputElm = $col.find(\"input\");\r\n $inputElm.attr(\"disabled\", true);\r\n\r\n } else\r\n {\r\n $col.on(\"change\", \"input.noReadChkBox\", function (e)\r\n {\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\"),\r\n dataItem = grid.dataItem($(e.target).closest(\"tr\"));\r\n\r\n });\r\n }\r\n }\r\n });\r\n\r\n }\r\n });\r\n };\r\n\r\n function onGridKeydown(e)\r\n {\r\n if (e.keyCode === kendo.keys.TAB)\r\n {\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n\r\n var current = grid.current();\r\n\r\n if (!current.hasClass(\"k-editable-cell\"))\r\n {\r\n var nextCell = current.nextAll(\".k-editable-cell\");\r\n if (!nextCell[0])\r\n {\r\n //search the next row\r\n var nextRow = current.parent().next();\r\n nextCell = current.parent().next().children(\".k-editable-cell:first\");\r\n }\r\n grid.current(nextCell);\r\n grid.editCell(nextCell[0]);\r\n }\r\n }\r\n }\r\n\r\n $scope.setupTankGridColumns = function (grid) {\r\n\r\n if (!($scope.appInfo.paperwork.useLargeUnits && !$scope.appInfo.paperwork.quantityOnly)) {\r\n grid.hideColumn(\"LargeUnits\");\r\n }\r\n\r\n if ($scope.appInfo.paperwork.quantityOnly) {\r\n grid.hideColumn(\"SmallUnits\");\r\n grid.hideColumn(\"PartialUnits\");\r\n }\r\n\r\n if (!($scope.appInfo.paperwork.trackWaterLevels && !$scope.appInfo.paperwork.quantityOnly)) {\r\n grid.hideColumn(\"WaterSmallUnits\");\r\n grid.hideColumn(\"WaterPartialUnits\");\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.trackWaterLevels) {\r\n grid.hideColumn(\"WaterQuantity\");\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.useTempCorrections) {\r\n grid.hideColumn(\"Temperature\");\r\n grid.hideColumn(\"NetQuantity\");\r\n }\r\n\r\n };\r\n\r\n $scope.gridInputCellOnBlur = function (dataItem, fieldName)\r\n {\r\n if (fieldName === \"LargeUnits\")\r\n {\r\n dataItem.LargeUnits = (!dataItem.LargeUnits || dataItem.LargeUnits === \"\") ? 0 : dataItem.LargeUnits;\r\n $scope.calculateTankValues(dataItem);\r\n }\r\n\r\n if (fieldName === \"SmallUnits\")\r\n {\r\n dataItem.SmallUnits = (!dataItem.SmallUnits || dataItem.SmallUnits === \"\") ? 0 : dataItem.SmallUnits;\r\n $scope.calculateTankValues(dataItem);\r\n }\r\n\r\n if (fieldName === \"Quantity\")\r\n {\r\n dataItem.Quantity = (!dataItem.Quantity || dataItem.Quantity === \"\") ? 0 : dataItem.Quantity;\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n }\r\n\r\n if (fieldName === \"WaterSmallUnits\") \r\n {\r\n dataItem.WaterSmallUnits = (!dataItem.WaterSmallUnits || dataItem.WaterSmallUnits === \"\") ? 0 : dataItem.WaterSmallUnits;\r\n $scope.calculateWaterVolumeValues(dataItem);\r\n }\r\n\r\n if (fieldName === \"WaterQuantity\")\r\n {\r\n dataItem.WaterQuantity = (!dataItem.WaterQuantity || dataItem.WaterQuantity === \"\") ? 0 : dataItem.WaterQuantity;\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n }\r\n\r\n if (fieldName === \"Temperature\")\r\n {\r\n dataItem.Temperature = (!dataItem.Temperature || dataItem.Temperature === \"\") ? 0 : dataItem.Temperature;\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n }\r\n\r\n\r\n };\r\n\r\n $scope.calculateTankValues = function (dataItem)\r\n {\r\n var modelRow = $(\"#tanksGrid\").data(\"kendoGrid\").dataSource.getByUid(dataItem.uid); \r\n\r\n if (dataItem.LargeUnits !== 0 || dataItem.SmallUnits !== 0 || dataItem.Quantity !== 0 || dataItem.WaterSmallUnits !== 0 || dataItem.WaterQuantity !== 0 || dataItem.Temperature !== 0) {\r\n modelRow.set('NoReading', false);\r\n }\r\n \r\n var depth = PaperworkTanksService.calculateTankDepth(dataItem,\r\n $scope.appInfo.paperwork.metric);\r\n\r\n modelRow.set('Depth', depth);\r\n\r\n var quantity = PaperworkTanksService.getVolumeFromTankChart(dataItem,\r\n $scope.appInfo.paperwork.tankCharts);\r\n\r\n modelRow.set('Quantity', quantity);\r\n\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n };\r\n\r\n $scope.calculateVolumeForTemperature = function (dataItem)\r\n {\r\n var modelRow = $(\"#tanksGrid\").data(\"kendoGrid\").dataSource.getByUid(dataItem.uid);\r\n\r\n var netQuantity = PaperworkTanksService.adjustVolumeForTemperature($scope.appInfo.paperwork.useTempCorrections,\r\n dataItem, $scope.appInfo.paperwork.tempCharts); \r\n\r\n if (dataItem.LargeUnits !== 0 || dataItem.SmallUnits !== 0 || dataItem.Quantity !== 0 || dataItem.WaterSmallUnits !== 0 || dataItem.WaterQuantity !== 0 ) {\r\n modelRow.set('NoReading', false);\r\n }\r\n\r\n };\r\n\r\n $scope.calculateWaterVolumeValues = function (dataItem)\r\n {\r\n var modelRow = $(\"#tanksGrid\").data(\"kendoGrid\").dataSource.getByUid(dataItem.uid);\r\n\r\n if (dataItem.LargeUnits !== 0 || dataItem.SmallUnits !== 0 || dataItem.Quantity !== 0 || dataItem.WaterSmallUnits !== 0 || dataItem.WaterQuantity !== 0) {\r\n modelRow.set('NoReading', false);\r\n }\r\n\r\n var depth = PaperworkTanksService.calculateWaterDepth(dataItem);\r\n\r\n modelRow.set('WaterDepth', depth);\r\n\r\n var quantity = PaperworkTanksService.getWaterVolumeFromTankChart(dataItem,\r\n $scope.appInfo.paperwork.tankCharts);\r\n\r\n modelRow.set('WaterQuantity', quantity);\r\n\r\n $scope.calculateVolumeForTemperature(dataItem);\r\n\r\n };\r\n\r\n $scope.validateTankOverShort = function (referenceTank)\r\n {\r\n var hasWarning = false;\r\n\r\n //First check to see if we even care.\r\n if (!$scope.appInfo.paperwork.UseOSWarnings)\r\n {\r\n return {\r\n HasWarning: false,\r\n Min: 0,\r\n Max: 0\r\n };\r\n }\r\n\r\n //Figure out what the base tank is going to be.\r\n if (referenceTank.InventoryTankNo !== referenceTank.TankNo)\r\n {\r\n for (var x = 0; x < $scope.appInfo.paperwork.tanks.length; x++)\r\n {\r\n if ($scope.appInfo.paperwork.tanks[x].TankNo === referenceTank.InventoryTankNo)\r\n {\r\n referenceTank = $scope.appInfo.paperwork.tanks[x];\r\n break;\r\n }\r\n }\r\n }\r\n //Then find the tolerance\r\n var tolerance = (referenceTank.EndQty * ($scope.appInfo.paperwork.OSWarningPct / 100)) + $scope.appInfo.paperwork.OSWarningUnits;\r\n var min = referenceTank.EndQty - tolerance;\r\n var max = referenceTank.EndQty + tolerance;\r\n //Find the total value of all tanks manifolded togather then check the tolerances.\r\n var totalValue = $scope.calculateTankEndQuantity(referenceTank);\r\n hasWarning = (totalValue < min || totalValue > max) && !referenceTank.NoReading;\r\n\r\n if (hasWarning)\r\n {\r\n $scope.tankCommentIsRequired = true;\r\n }\r\n \r\n return {\r\n HasWarning: hasWarning,\r\n Min: min,\r\n Max: max\r\n } ;\r\n };\r\n\r\n $scope.calculateTankEndQuantity = function (tank)\r\n {\r\n if (tank.TankNo === tank.InventoryTankNo)\r\n return tank.Quantity;\r\n var inventoryTankNo = tank.InventoryTankNo;\r\n var quantity = 0.00;\r\n for (var x = 0; x < $scope.appInfo.paperwork.tanks.length; x++)\r\n {\r\n if ($scope.appInfo.paperwork.tanks[x].InventoryTankNo === inventoryTankNo)\r\n quantity += $scope.appInfo.paperwork.tanks[x].Quantity;\r\n }\r\n return quantity;\r\n };\r\n\r\n $scope.setupGridColumnValidationNotificationUI = function ($col)\r\n {\r\n\r\n var fieldName = $col.attr('data-field');\r\n\r\n $col.qtip({\r\n id: \"qtip-\" + fieldName,\r\n content: {\r\n text: \"\"\r\n },\r\n position: {\r\n adjust: {\r\n x: -10, y: -10\r\n }\r\n },\r\n style: {\r\n classes: \"toolTipStyle\"\r\n }\r\n });\r\n\r\n $col.qtip('disable', true);\r\n\r\n };\r\n\r\n $scope.processGridColumnValidationNotification = function ($row, fieldName, errorMessages, warningMessages)\r\n {\r\n\r\n var idx = 0;\r\n\r\n var hasErrors = (errorMessages.length > 0);\r\n var hasWarnings = (warningMessages.length > 0);\r\n\r\n var $col = $row.find(\"[data-field='\" + fieldName + \"']\");\r\n\r\n //clear classes\r\n $col.removeClass(\"td-error\");\r\n $col.removeClass(\"td-warning\");\r\n\r\n if (hasErrors || hasWarnings)\r\n {\r\n\r\n var messageList = $(\"
    \");\r\n\r\n if (hasErrors)\r\n {\r\n var errorList = $(\"
    \" + localStrings.getLocalizedString(\"Error\") + \" :
    \");\r\n for (idx = 0; idx < errorMessages.length; idx++)\r\n {\r\n errorList.append(\"
  • \" + errorMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(errorList);\r\n }\r\n\r\n if (hasWarnings)\r\n {\r\n var warningList = $(\"
    \" + localStrings.getLocalizedString(\"Warning\") + \" :
    \");\r\n for (idx = 0; idx < warningMessages.length; idx++)\r\n {\r\n warningList.append(\"
  • \" + warningMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(warningList);\r\n }\r\n\r\n $col.qtip('option', 'content.text', messageList);\r\n\r\n if (hasErrors)\r\n {\r\n $col.addClass(\"td-error\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-error');\r\n } else\r\n {\r\n $col.addClass(\"td-warning\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-warning');\r\n }\r\n\r\n $col.qtip('disable', false);\r\n }\r\n else\r\n {\r\n $col.qtip('disable', true);\r\n }\r\n };\r\n\r\n var tankRowValidation =\r\n {\r\n validator: function (tank, parms)\r\n {\r\n var isValid = true;\r\n\r\n var $row = $(\"#tanksGrid\").data(\"kendoGrid\").tbody.find(\"tr[data-uid='\" + tank.uid + \"']\");\r\n\r\n var errorFuelQty = [], warningFuelQty = [];\r\n\r\n // fuel quantity validation\r\n var maxTankVolume = PaperworkTanksService.getMaxVolumeFromTankChart(tank, $scope.appInfo.paperwork.tankCharts);\r\n if (tank.Quantity > maxTankVolume)\r\n {\r\n errorFuelQty.push(localStrings.getLocalizedString(\"TankReadingExceeds\"));\r\n isValid = false;\r\n }\r\n\r\n var result = $scope.validateTankOverShort(tank);\r\n if (result.HasWarning)\r\n {\r\n warningFuelQty.push(localStrings.getLocalizedString(\"FuelMeasurementsEntered\") + \" \" + result.Min + \" \" + localStrings.getLocalizedString(\"And\") + \" \" + result.Max);\r\n }\r\n\r\n $scope.processGridColumnValidationNotification($row, 'Quantity', errorFuelQty, warningFuelQty);\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n $scope.validateTanks = function ()\r\n {\r\n\r\n var isValid = true;\r\n\r\n var tanksGrid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n\r\n $scope.tankCommentIsRequired = false;\r\n $scope.tankCommentRequiredError = false;\r\n angular.forEach(tanksGrid.dataSource.data(), function (tank)\r\n {\r\n isValid = isValid && tankRowValidation.validator(tank);\r\n });\r\n\r\n return isValid;\r\n };\r\n\r\n $scope.loadTanks = function (refreshDataSource)\r\n {\r\n if (!$scope.locationInfo.sideMenuData.paperwork.tanks)\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.batch.SiteKey)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n\r\n PaperworkTanksService.loadTanks(\r\n $scope.appInfo.paperwork.batch.Key,\r\n $scope.appInfo.paperwork.batch.SiteKey,\r\n $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true)\r\n ).then(function (data)\r\n {\r\n // if(data.count == 0){\r\n // TODO: No tanks, do something...\r\n // }\r\n $scope.appInfo.paperwork.tanks = data.PaperworkTanks;\r\n $scope.appInfo.paperwork.postedTanks = data.PostedPaperworkTanks;\r\n $scope.appInfo.paperwork.partialUnits = data.PartialUnitsList;\r\n $scope.appInfo.paperwork.metric = data.Metric;\r\n $scope.appInfo.paperwork.quantityOnly = data.QuantityOnly;\r\n $scope.appInfo.paperwork.useLargeUnits = data.UseLargeUnits;\r\n $scope.appInfo.paperwork.useTempCorrections = data.UseTempCorrections;\r\n $scope.appInfo.paperwork.trackWaterLevels = data.TrackWaterLevels;\r\n $scope.appInfo.paperwork.tankCharts = data.TankCharts;\r\n $scope.appInfo.paperwork.tempCharts = data.TempCharts;\r\n $scope.appInfo.paperwork.OSComments = data.OSComments;\r\n $scope.appInfo.paperwork.UseOSWarnings = data.UseOSWarnings;\r\n $scope.appInfo.paperwork.OSWarningUnits = data.OSWarningUnits;\r\n $scope.appInfo.paperwork.OSWarningPct = data.OSWarningPct;\r\n $scope.appInfo.paperwork.RequireOSComments = data.RequireOSComments;\r\n\r\n if (!refreshDataSource)\r\n {\r\n $scope.initializeTanksGrid();\r\n } else\r\n {\r\n var grid = $(\"#tanksGrid\").data(\"kendoGrid\");\r\n if(angular.isUndefinedOrNullOrEmpty(grid)) return;\r\n grid.dataSource.data(data.PaperworkTanks);\r\n\r\n $scope.validateTanks(); // call00 validate to re add any warnings after save\r\n }\r\n\r\n $scope.tanksLoaded = true;\r\n\r\n if ($scope.appInfo.paperwork.postedTanks.length > 0) {\r\n $scope.postedReadingsExist = true;\r\n }\r\n\r\n if ($scope.appInfo.paperwork.tanks.length > 0) {\r\n $scope.tanksEditable = !($scope.appInfo.paperwork.context.lockPaperworkAfterDru && $scope.appInfo.paperwork.tanks[0].DRUPosted);\r\n }\r\n });\r\n };\r\n\r\n $scope.tankCommentIsRequired = false;\r\n $scope.tankCommentRequiredError = false;\r\n\r\n $scope.tankCommentValidation =\r\n {\r\n name: 'validateTankComment',\r\n validationMessage: localStrings.getLocalizedString(\"FuelMeasurementsNotInToleranceComment\"),\r\n validatorError: function ()\r\n {\r\n $scope.tankCommentRequiredError = false;\r\n\r\n if (!$scope.appInfo.paperwork.UseOSWarnings || !$scope.appInfo.paperwork.RequireOSComments || !$scope.tankCommentIsRequired)\r\n {\r\n return true; // not required or not overshort warning\r\n }\r\n\r\n\r\n if ($scope.appInfo.paperwork.NewOSComments.length > 0 || ($scope.appInfo.paperwork.OSComments.Text && $scope.appInfo.paperwork.OSComments.Text.length > 0))\r\n {\r\n return true;\r\n }\r\n\r\n $scope.tankCommentRequiredError = true;\r\n return false;\r\n }\r\n };\r\n\r\n $scope.tankCommentErrorOnBlur = function ()\r\n {\r\n $(\"#tankCommmentValidationMessage\").attr('style', 'display: none !important;');\r\n };\r\n\r\n $scope.tankCommentErrorOnFocus = function ()\r\n {\r\n $(\"#tankCommmentValidationMessage\").attr('style', 'display: inline-block !important;');\r\n };\r\n\r\n var PageStage = $rootScope.$on('event:PageStage', function (event, args)\r\n {\r\n if (args === 'DREGS' && !$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.savePaperworkTanks('', false, false);\r\n } \r\n });\r\n $scope.$on('$destroy', PageStage);\r\n\r\n $scope.next = function (path)\r\n {\r\n if (!validatorSvc.executeValidations()) {\r\n return;\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.tanksEditable)\r\n {\r\n $scope.savePaperworkTanks(path, false, false);\r\n } else {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, false));\r\n }\r\n };\r\n\r\n $scope.previous = function (path)\r\n {\r\n if (!validatorSvc.executeValidations()) {\r\n return;\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.tanksEditable)\r\n {\r\n $scope.savePaperworkTanks(path, false, false, true);\r\n } else {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, true));\r\n }\r\n };\r\n\r\n $scope.close = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly && $scope.tanksEditable)\r\n {\r\n $scope.savePaperworkTanks(\"\", false, false);\r\n } else {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork/\");\r\n }\r\n };\r\n\r\n $scope.submit = function ()\r\n {\r\n $scope.submitClicked = true;\r\n $scope.savePaperworkTanks(\"\", true, false);\r\n };\r\n\r\n function initPopup() {\r\n var popupTitle = localStrings.getLocalizedString(\"PostedFuelTankReadings\");\r\n var postedHtml = '
    ';\r\n\r\n $scope.modalifier.show(popupTitle, postedHtml);\r\n\r\n setTimeout(function () {\r\n //get and modify the original grids options\r\n $scope.gridOptions = {};\r\n angular.copy($scope.tanksGridOptions, $scope.gridOptions);\r\n $scope.gridOptions.editable = false;\r\n\r\n // manually update imperial/metric units in header (large units, small units, temperature) - angular directives are not evaluated in popup\r\n $scope.gridOptions.columns[2].columns[0].headerTemplate = $scope.appInfo.paperwork.metric ? \"m.\" : \"ft.\";\r\n $scope.gridOptions.columns[2].columns[1].headerTemplate = $scope.appInfo.paperwork.metric ? \"cm.\" : \"in.\";\r\n $scope.gridOptions.columns[3].columns[0].headerTemplate = $scope.appInfo.paperwork.metric ? \"cm.\" : \"in.\";\r\n $scope.gridOptions.columns[4].columns[0].headerTemplate = $scope.appInfo.paperwork.metric ? \"°C\" : \"°F\";\r\n\r\n // grab the empty element and make it a kendo grid\r\n var el = $('div.popupTanksTable');\r\n el.kendoGrid($scope.gridOptions);\r\n\r\n // checkbox imputs must be manually disabled\r\n el.find('.grid-checkbox').attr('readonly', true);\r\n //$('input.noReadChkBox').Attr('disabled', true);\r\n\r\n // hide columns based on record type\r\n var grid = el.data('kendoGrid');\r\n $scope.setupTankGridColumns(grid);\r\n\r\n // set datasource\r\n grid.dataSource.data($scope.appInfo.paperwork.postedTanks);\r\n grid.refresh();\r\n }, 0);\r\n }\r\n\r\n $scope.showPostedReadings = function () {\r\n if ($('div.popupTanksTable').length > 0)\r\n $scope.modalifier.display = true;\r\n else\r\n initPopup();\r\n };\r\n\r\n $scope.processSubmit = function (submit, skipNav) {\r\n\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: submit,\r\n PreviouslySubmitted: $scope.appInfo.paperwork.batch.HasBeenSubmitted\r\n };\r\n\r\n PaperworkService.GetPaperworkBatchErrorWarning(submitPaperworkCmdParms).then(function (data) {\r\n //If warnings - show confirm dialog\r\n if (data.HasWarnings) {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.Warnings[0])) {\r\n $scope.notifier.show(data.Warnings[0], \"warning\");\r\n\r\n var yes = function () {\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data) {\r\n if (submit && !skipNav)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n };\r\n\r\n $scope.modalifier.confirm(data.Warnings[0] + \"
    \" + localStrings.getLocalizedString(\"WishToContinue\"), yes);\r\n }\r\n }\r\n else {\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data) {\r\n if (submit && !skipNav)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n }\r\n });\r\n };\r\n\r\n $scope.submitPaperwork = function (submit, skipNav)\r\n {\r\n var fuelMetersAppInfo = $scope.appInfo.paperwork.apps[0];\r\n\r\n //If we have fuelMeters and fuelMeters are required, but not saved; then throw error\r\n if (fuelMetersAppInfo.HasData === 0 && fuelMetersAppInfo.IsRequired !== 0) {\r\n $timeout(function () {\r\n $scope.modalifier.showSavedError();\r\n }, 100);\r\n return;\r\n }\r\n\r\n $scope.processSubmit(submit, skipNav);\r\n };\r\n\r\n $scope.savePaperworkTanks = function (path, submit, close, isPrevious, skipNav)\r\n {\r\n isPrevious = isPrevious ? isPrevious : false;\r\n skipNav = skipNav ? skipNav : false;\r\n \r\n //Allow saving first time when just visiting page without cliking anything on page\r\n if ($('#tanksGrid .k-dirty-cell').length > 0 || $scope.appInfo.paperwork.tanks[0].HeaderKey === 0) {\r\n\r\n if (!$scope.validateTanks()) {\r\n return;\r\n } else {\r\n if ($scope.tankCommentIsRequired) {\r\n var commentIsValid = $scope.tankCommentValidation.validatorError();\r\n\r\n if (!commentIsValid) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n $scope.resetDirtyFlags($scope.tanksForm);\r\n\r\n angular.copy($scope.tanksGridDS.data().toJSON(), $scope.appInfo.paperwork.tanks);\r\n\r\n var tankHeader = {\r\n Key: $scope.appInfo.paperwork.tanks[0].HeaderKey,\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n Status: $scope.appInfo.paperwork.tanks[0].Status,\r\n StickType: $scope.appInfo.paperwork.tanks[0].StickType,\r\n Ts: $scope.appInfo.paperwork.tanks[0].HeaderTimeStamp,\r\n PaperworkBatchKey: $scope.appInfo.paperwork.batch.Key,\r\n AppKey: $scope.locationInfo.sideMenuData.paperwork.tanks.Key,\r\n UserName: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n OSComments: {\r\n Key: $scope.appInfo.paperwork.OSComments.Key,\r\n FuelStkHdrKey: $scope.appInfo.paperwork.OSComments.FuelStkHdrKey,\r\n Text: $scope.appInfo.paperwork.OSComments.Text,\r\n NewText: $scope.appInfo.paperwork.NewOSComments,\r\n Ts: $scope.appInfo.paperwork.OSComments.Ts,\r\n Timestamp: $scope.appInfo.paperwork.OSComments.Timestamp\r\n }\r\n };\r\n\r\n PaperworkTanksService.savePaperworkTanks(tankHeader, $scope.appInfo.paperwork.tanks).then(function (data) {\r\n //get updated data\r\n $scope.loadTanks(true);\r\n\r\n $scope.appInfo.paperwork.NewOSComments = \"\";\r\n //Submit after saving for Fuel Tank Reading \r\n if (submit) {\r\n $scope.submitPaperwork(true, skipNav);\r\n return;\r\n }\r\n });\r\n }\r\n else {\r\n if (submit) {\r\n $scope.submitPaperwork(true, skipNav);\r\n return;\r\n }\r\n }\r\n\r\n if (close) {\r\n $scope.submitPaperwork(false, skipNav);\r\n return;\r\n }\r\n if (path.length > 0){\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n }\r\n };\r\n\r\n $scope.getPartialValue = function (value)\r\n {\r\n for (var x in $scope.appInfo.paperwork.partialUnits)\r\n {\r\n if ($scope.appInfo.paperwork.partialUnits[x] === value)\r\n return $scope.appInfo.paperwork.partialUnits[x];\r\n }\r\n };\r\n\r\n })\r\n .controller('enterPaperworkDeliveriesCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter, PaperworkDeliveriesService,\r\n $location, WebFunctions, validatorSvc, $timeout, $q, $compile, templates, localStrings, globalizationSvc,setupNav)\r\n {\r\n 'use strict';\r\n $scope.kendo = {};\r\n $scope.appInfo.paperwork.paperworkKey = 0;\r\n $scope.appInfo.paperwork.deliveries = {};\r\n $scope.appInfo.paperwork.deliveriesList = {};\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = {};\r\n $scope.appInfo.paperwork.deliveries.context = {};\r\n $scope.appInfo.paperwork.deliveries.context.AuthorizedVendors = [];\r\n $scope.appInfo.paperwork.deliveries.context.AuthorizedTerminals = [];\r\n $scope.appInfo.paperwork.deliveries.context.AuthorizedCarriers = [];\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryFreight = [];\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.VendKey = -1;\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.TrmnlKey = -1;\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.CarrierKey = -1;\r\n $scope.deliveriesLoaded = false;\r\n $scope.deliveryFilteredTanks = [];\r\n\r\n $scope.currentView = 0; // 0 = record selector; 1= entry\r\n\r\n $scope.changeView = function (view)\r\n {\r\n\r\n // 0 = record selector; 1= entry\r\n\r\n if (view === 1)\r\n { // chnange to entry\r\n $scope.currentView = 1;\r\n } else\r\n {\r\n $scope.currentView = 0;\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = {}; // clear delivery\r\n }\r\n };\r\n\r\n $scope.freightModalFormDelegate = {};\r\n\r\n //grid validations\r\n $scope.productValidation = {hasErrors: false, errorDescription: \"\"};\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.appInfo = $scope.appInfo || {};\r\n\r\n $scope.appInfo.paperwork.viewOnly = $location.$$path.indexOf('/ViewPaperworkDeliveries/') > -1;\r\n if ($routeParams.paperworkKey)\r\n {\r\n $scope.appInfo.paperwork.paperworkKey = $routeParams.paperworkKey;\r\n }\r\n $scope.appInfo.paperwork.NewOSComments = '';\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n // $scope.getWebProfileMessage(19);\r\n $scope.globalizationSvc = globalizationSvc;\r\n\r\n $scope.newDeliveryProduct = {};\r\n\r\n $scope.appInfo.paperwork.batch = {};\r\n\r\n if (!$scope.appInfo.paperwork.context)\r\n {\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data)\r\n {\r\n $scope.appInfo.paperwork.context = {};\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n if ($scope.appInfo.paperwork.paperworkKey > 0)\r\n {\r\n //We are loading a known existing paperwork batch\r\n PaperworkService.OpenPaperworkBatchByKey(\r\n $scope.appInfo.paperwork.paperworkKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n \r\n // resolve if this is the first or last page\r\n var res = setupNav.firstLastPage('DREFD',$scope.appInfo.paperwork.apps);\r\n $scope.locationInfo.sideMenuData.isFirstPage = res.isFirstPage;\r\n $scope.locationInfo.sideMenuData.isLastPage = res.isLastPage;\r\n\r\n $rootScope.$broadcast('event:PaperworkLoaded', $scope.appInfo.paperwork.viewOnly, $scope.appInfo.paperwork.paperworkKey);\r\n\r\n var nextApp = true;\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DREFD')\r\n {\r\n $scope.getDeliveriesWithContext();\r\n nextApp = false;\r\n }\r\n });\r\n if (nextApp)\r\n {\r\n $scope.goTo(setupNav.navigateToPage('DREFD',$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n }, function ()\r\n {\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n });\r\n } else\r\n {\r\n //todo: goback...\r\n }\r\n $scope.locationInfo.sideMenuData.pwSubMenu = '4';\r\n\r\n $scope.hideModals();\r\n };\r\n\r\n var newPWBatchLoadedListener = $rootScope.$on('event:NewPaperworkBatchLoaded', function (event, data)\r\n {\r\n if ($scope.locationInfo.sideMenuData.paperwork.tanks)\r\n $scope.getDeliveriesWithContext();\r\n else\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n });\r\n\r\n // $scope $destroy\r\n $scope.$on('$destroy', newPWBatchLoadedListener);\r\n\r\n $scope.getDeliveriesWithContext = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData.paperwork.deliveries)\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n $scope.goTo(\"/Paperwork/ViewPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n else\r\n $scope.goTo(\"/Paperwork/EnterPaperworkDealerForms/\" + $scope.appInfo.paperwork.paperworkKey);\r\n }\r\n\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.batch.SiteKey)\r\n {\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n }\r\n });\r\n\r\n PaperworkDeliveriesService.getDeliveriesWithContext(\r\n $scope.appInfo.paperwork.batch.Key, $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.deliveries = {};\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = {};\r\n $scope.appInfo.paperwork.deliveries.context = data.Context;\r\n $scope.appInfo.paperwork.deliveries.deliveriesList = data.FuelDeliveriesList;\r\n\r\n // if there are no deliveries for this paperwork batch then drop in to add mode for new delivery\r\n if (data.FuelDeliveriesList.length === 0)\r\n {\r\n // currently petronet can only edit petronet source fuel delivery so expect on one row returned\r\n data.NewDelivery.LiftDatetime = globalizationSvc.formatDateTime(data.NewDelivery.LiftDatetime, 'g');\r\n data.NewDelivery.DelivDateTime = globalizationSvc.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate, 'g');\r\n\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = data.NewDelivery;\r\n\r\n $scope.fuelDeliveriesCount = data.FuelDeliveriesList.length;\r\n\r\n $scope.initializeDeliveriesGrid();\r\n\r\n $scope.changeView(1);\r\n }\r\n\r\n $scope.deliveriesLoaded = true;\r\n });\r\n };\r\n\r\n var gridColEditorInput = function (container, options)\r\n {\r\n\r\n var fieldName = \"'\" + options.field + \"'\";\r\n\r\n var required = $(container).attr('required'); // field is required\r\n\r\n // For some browsers, `attr` is undefined; for others,\r\n // `attr` is false. Check for both.\r\n if (typeof required !== typeof undefined && required !== false)\r\n {\r\n $('')\r\n .appendTo(container)\r\n .kendoNumericTextBox({\r\n format: \"#\",\r\n max: 100000000,\r\n min: -100000000,\r\n });\r\n } else\r\n {\r\n $('')\r\n .appendTo(container)\r\n .kendoNumericTextBox({\r\n format: \"#\",\r\n max: 100000000,\r\n min: -100000000,\r\n });\r\n }\r\n\r\n };\r\n\r\n var gridColNumber = function (field, format)\r\n {\r\n return '';\r\n };\r\n\r\n var productEditor = function (container, options)\r\n {\r\n $(\"\")\r\n\r\n .appendTo(container)\r\n .kendoComboBox({\r\n id: \"productList\",\r\n dataSource: {\r\n data: $scope.appInfo.paperwork.deliveries.context.SiteTankProducts\r\n },\r\n filter: \"contains\",\r\n dataTextField: localStrings.getLocalizedString(\"ID\"),\r\n dataValueField: \"Key\",\r\n template: \"
    ${ Id }${ Description }
    \",\r\n change: function (e)\r\n {\r\n\r\n var selectionElement = $(e.sender.element[0]).parent().find(\".k-dropdown-wrap\");\r\n\r\n // check if valid\r\n if ($(e.sender.element[0]).hasClass(\"k-invalid\"))\r\n {\r\n selectionElement.addClass(\"k-selection-invalid\");\r\n } else\r\n {\r\n selectionElement.removeClass(\"k-selection-invalid\");\r\n }\r\n\r\n if (this.value() && this.selectedIndex === -1)\r\n {\r\n this.value('');\r\n this._filterSource({\r\n value: \"\",\r\n field: this.options.dataTextField,\r\n operator: \"contains\"\r\n });\r\n return;\r\n }\r\n\r\n var dataItem = e.sender.dataItem();\r\n options.model.set(\"ProdId\", dataItem.Id);\r\n options.model.set(\"ProdDesc\", dataItem.Description);\r\n },\r\n open: function(e) {\r\n var width = $(\".k-combobox\").width() + 300;\r\n $(\".k-animation-container\").width(width);\r\n $(\".k-list-container\").width(width - 4);\r\n }\r\n });\r\n\r\n $('').appendTo(container);\r\n\r\n };\r\n\r\n var tankEditor = function (container, options)\r\n {\r\n $(\"\")\r\n\r\n .appendTo(container)\r\n .kendoComboBox({\r\n id: \"tankList\",\r\n filter: \"contains\",\r\n dataSource: {\r\n data: $scope.getFilteredTanksList(options.model.ProdKey)\r\n },\r\n dataTextField: \"TankNo\",\r\n dataValueField: \"TankNo\",\r\n change: function (e)\r\n {\r\n\r\n var selectionElement = $(e.sender.element[0]).parent().find(\".k-dropdown-wrap\");\r\n\r\n // check if valid\r\n if ($(e.sender.element[0]).hasClass(\"k-invalid\"))\r\n {\r\n selectionElement.addClass(\"k-selection-invalid\");\r\n } else\r\n {\r\n selectionElement.removeClass(\"k-selection-invalid\");\r\n }\r\n\r\n if (this.value() && this.selectedIndex === -1)\r\n {\r\n this.value('');\r\n this._filterSource({\r\n value: \"\",\r\n field: this.options.dataTextField,\r\n operator: \"contains\"\r\n });\r\n return;\r\n }\r\n\r\n var dataItem = e.sender.dataItem();\r\n options.model.set(\"SelectedTank\", dataItem);\r\n }\r\n });\r\n\r\n $('').appendTo(container);\r\n };\r\n\r\n $scope.getProductByKey = function (prodKey)\r\n {\r\n return $scope.appInfo.paperwork.deliveries.context.SiteTankProducts.find({Key: prodKey});\r\n };\r\n\r\n $scope.initializeDeliveriesGrid = function ()\r\n {\r\n\r\n $scope.deliveriesGridDS = new kendo.data.DataSource({\r\n schema: {\r\n model: {\r\n fields: {\r\n ProdKey: {type: \"number\"},\r\n ProdId: {type: \"string\"},\r\n ProdDesc: {type: \"string\"},\r\n TankNo: {type: \"number\"},\r\n DelivGrossQty: {type: \"number\"},\r\n DelivNetQty: {type: \"number\"},\r\n SelectedTank: {}\r\n }\r\n }\r\n },\r\n data: $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts,\r\n batch: true\r\n });\r\n\r\n $scope.deliveriesGridOptions = {\r\n dataSource: $scope.deliveriesGridDS,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n columns: [\r\n {\r\n field: \"ProdKey\",\r\n title: localStrings.getLocalizedString(\"ID\"),\r\n width: 100,\r\n attributes: {\"data-field\": \"ProdKey\", \"class\": \"k-editable-cell\", \"required\": \"true\"},\r\n template: \"#=ProdId#\",\r\n editor: productEditor\r\n },\r\n {\r\n field: \"ProdDesc\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {\"data-field\": \"ProdDesc\", \"class\": \"tableCellDisabled description\"},\r\n template: \"#=ProdDesc#\",\r\n editor: function (element, options)\r\n {\r\n element.text(options.model.ProdDesc);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n field: \"FuelDeliveryTanks[0].TankNo\",\r\n width: 100,\r\n template: \"#= FuelDeliveryTanks[0].TankNo #\",\r\n editor: tankEditor,\r\n headerTemplate: localStrings.getLocalizedString(\"Tank\"),\r\n attributes: {\"data-field\": \"TankNo\", \"class\": \"k-editable-cell\", \"required\": \"true\"}\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Units\"),\r\n columns: [\r\n {\r\n field: \"DelivGrossQty\",\r\n title: localStrings.getLocalizedString(\"Gross\"),\r\n width: 80,\r\n attributes: {\r\n \"data-field\": \"DelivGrossQty\",\r\n \"class\": \"k-editable-cell\",\r\n \"required\": \"true\"\r\n },\r\n template: gridColNumber(\"DelivGrossQty\", \"n2\"),\r\n editor: gridColEditorInput\r\n },\r\n {\r\n field: \"DelivNetQty\",\r\n title: localStrings.getLocalizedString(\"Net\"),\r\n width: 80,\r\n attributes: {\r\n \"data-field\": \"DelivNetQty\",\r\n \"class\": \"k-editable-cell\",\r\n \"required\": \"true\"\r\n },\r\n template: gridColNumber(\"DelivNetQty\", \"n2\"),\r\n editor: gridColEditorInput\r\n }\r\n ]\r\n },\r\n {\r\n field: \"DeleteDeliveryBtn\",\r\n template: \"\",\r\n width: 60,\r\n attributes: {\"data-field\": \"DeleteDeliveryBtn\"},\r\n headerTemplate: \" \"\r\n }\r\n ],\r\n pageable: false,\r\n sortable: false,\r\n editable: $scope.deliveryIsEditable(),\r\n scrollable: false,\r\n navigatable: true,\r\n dataBound: function (e)\r\n {\r\n $scope.setupDeliveryRows();\r\n },\r\n edit: function (e)\r\n { \r\n var $input;\r\n if (e.container.find(\"input\").length > 1) {\r\n $input = e.container.find(\"input.k-input\").last(); // find(\"input\") returns two input elements which causes issue.\r\n }\r\n else {\r\n $input = e.container.find(\"input\");\r\n }\r\n var fieldName = $input.attr(\"name\");\r\n\r\n // alternative (if you don't have the name attribute in your editable):\r\n // var columnIndex = this.cellIndex(e.container);\r\n // var fieldName = this.thead.find(\"th\").eq(columnIndex).data(\"field\");\r\n\r\n if (!deliveriesGridColIsEditable(fieldName, e.model))\r\n {\r\n $input.prop('readonly', true);\r\n //this.closeCell(); // prevent editing\r\n } else\r\n {\r\n $input.select();\r\n $input.addClass('k-cell-state-selected');\r\n }\r\n\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n var currentCell = $(grid.tbody.children().find(\".k-edit-cell\"));\r\n\r\n grid.current(currentCell);\r\n }\r\n\r\n };\r\n\r\n };\r\n\r\n $scope.$on(\"kendoWidgetCreated\", function (event, widget)\r\n {\r\n\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n // the event is emitted for every widget; if we have multiple\r\n // widgets in this controller, we need to check that the event\r\n // is for the one we're interested in.\r\n\r\n if (widget === $scope.kendo.deliveriesGrid)\r\n {\r\n grid.dataSource.data($scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts);\r\n\r\n $(\"#deliveriesGrid\").find(\"table\").on(\"keydown\", onGridKeydown);\r\n\r\n if ($scope.deliveryIsEditable())\r\n {\r\n var addDeliveryAction = $('
    ').appendTo($('#deliveriesGrid'));\r\n $compile(addDeliveryAction)($scope);\r\n }\r\n\r\n $scope.setupDeliveriesGridColumns();\r\n\r\n }\r\n });\r\n\r\n function onGridKeydown(e)\r\n {\r\n if (e.keyCode === kendo.keys.TAB)\r\n {\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n var current = grid.current();\r\n\r\n if (!current.hasClass(\"k-editable-cell\"))\r\n {\r\n var nextCell = current.nextAll(\".k-editable-cell\");\r\n if (!nextCell[0])\r\n {\r\n //search the next row\r\n var nextRow = current.parent().next();\r\n\r\n // if tabbing and reached the last cell then create new row\r\n if (nextRow.length === 0)\r\n {\r\n $scope.addDeliveryGridRow();\r\n\r\n var $newRow = $(grid.tbody.children().last());\r\n\r\n $newRow.find(\"td:eq(0) input\").focus();\r\n nextCell = $newRow;\r\n grid.current(nextCell);\r\n\r\n } else\r\n {\r\n nextCell = current.parent().next().children(\".k-editable-cell:first\");\r\n\r\n grid.current(nextCell);\r\n grid.editCell(nextCell[0]);\r\n }\r\n } else\r\n {\r\n grid.current(nextCell);\r\n grid.editCell(nextCell[0]);\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n $scope.setupDeliveryRows = function ()\r\n {\r\n\r\n $(\"#deliveriesGrid tr\").each(function (index, row)\r\n {\r\n\r\n if (index > 1)\r\n { // skip header rows\r\n\r\n $scope.setupDeliveryRow(row);\r\n }\r\n });\r\n };\r\n\r\n $scope.setupDeliveryRow = function (deliveryRow)\r\n {\r\n\r\n var dataItem = $(\"#deliveriesGrid\").data(\"kendoGrid\").dataItem(deliveryRow);\r\n\r\n var $row = $(deliveryRow);\r\n\r\n //set prod id and description for product key\r\n var selectedProduct = $scope.getProductByKey(dataItem.ProdKey);\r\n\r\n if (selectedProduct)\r\n {\r\n dataItem.set(\"ProdId\", selectedProduct.Id);\r\n dataItem.set(\"ProdDesc\", selectedProduct.Description);\r\n }\r\n\r\n var $rowColumns = $row.find('td');\r\n\r\n $rowColumns.each(function (index, col)\r\n {\r\n var $col = $(col);\r\n var fieldName = $col.attr('data-field');\r\n if (!deliveriesGridColIsEditable(fieldName, dataItem))\r\n {\r\n $col.addClass(\"tableCellDisabled\");\r\n $col.removeClass(\"k-editable-cell\");\r\n\r\n /*if (fieldName === \"DeleteDeliveryBtn\") {\r\n $col.find('i').hide();\r\n }*/\r\n }\r\n\r\n $scope.setupGridColumnValidationNotificationUI($col);\r\n });\r\n };\r\n\r\n $scope.addDeliveryGridRow = function ()\r\n {\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n if (grid)\r\n {\r\n\r\n // check if there is a new row already and if it is not valid then don't create a another new row\r\n // if there is a invalid new row remove it before validating\r\n var $lastRow = $(grid.tbody.children().last());\r\n var isNewRow = $lastRow.hasClass('newRow');\r\n\r\n if (isNewRow)\r\n {\r\n var hasDirtyRow = $lastRow.find('.k-dirty');\r\n\r\n if (hasDirtyRow.length === 0)\r\n {\r\n grid.cancelRow();\r\n }\r\n }\r\n\r\n $(\"deliveriesGrid\").removeClass(\"newRow\");\r\n\r\n //this logic creates a new item in the datasource/datagrid\r\n var dataSource = grid.dataSource;\r\n var totalRows = dataSource.data().length;\r\n\r\n var newDeliveryProduct = {\r\n \"AllocFuelContKey\": null,\r\n \"AllocFuelContDtlKey\": null,\r\n \"AllocLastPostedFuelContDtlKey\": null,\r\n \"BasedOnUnits\": 0,\r\n \"BOLAutoMatched\": 0,\r\n \"BOLDtlKey\": null,\r\n \"BusEntKey\": null,\r\n \"CalcExtCost\": 0,\r\n \"CalcFrtCost\": 0,\r\n \"CalcUnitCost\": 0,\r\n \"CnfrmDateTime\": null,\r\n \"CnfrmStatus\": 0,\r\n \"CnfrmUserID\": null,\r\n \"ContractOverride\": 0,\r\n \"CostOverride\": 0,\r\n \"CostPosted\": 0,\r\n \"CustLocKey\": null,\r\n \"DelivDateTime\": $scope.appInfo.paperwork.deliveries.fuelDelivery.DelivDateTime,\r\n \"DelivGrossQty\": 0,\r\n \"DelivNetQty\": 0,\r\n \"DestProdKey\": null,\r\n \"DestSiteKey\": $scope.appInfo.paperwork.batch.SiteKey,\r\n \"DestType\": 0,\r\n \"ExternalRecID\": null,\r\n \"FrtInInventory\": -1,\r\n \"FrtOverride\": 0,\r\n \"FrtPLAmt\": 0,\r\n \"FrtPLInInvAmt\": 0,\r\n \"FrtPLInInventory\": -1,\r\n \"FueldelProdFrtReconGrossQty\": 0,\r\n \"FueldelProdFrtReconNetQty\": 0,\r\n \"FrtReconUserID\": null,\r\n \"FrtReconciled\": 0,\r\n \"FrtUnitCost\": 0,\r\n \"FrtVndInvKey\": null,\r\n \"FrtVndInvPndKey\": null,\r\n \"FuelContKey\": null,\r\n \"FuelContDtlKey\": null,\r\n \"FuelDelKey\": $scope.appInfo.paperwork.deliveries.fuelDelivery.Key,\r\n \"InvcExtCost\": 0,\r\n \"InvcFrtCost\": 0,\r\n \"InvcFrtUnitCost\": 0,\r\n \"InvcGrossQty\": 0,\r\n \"InvcNetQty\": 0,\r\n \"InvcUnitCost\": 0,\r\n \"Key\": 0,\r\n \"LastPostedFuelContDtlKey\": null,\r\n \"OrdQty\": 0,\r\n \"OrigProdKey\": null,\r\n \"OwnerOption\": 0,\r\n \"ProdKey\": \"\",\r\n \"ReconUserID\": null,\r\n \"Reconciled\": 0,\r\n \"SiteKey\": $scope.appInfo.paperwork.batch.SiteKey,\r\n \"SourceKey\": 0,\r\n \"SourceType\": 1,\r\n \"TaxPLAmt\": 0,\r\n \"TaxPLInInvAmt\": 0,\r\n \"VndInvKey\": null,\r\n \"VndInvPndKey\": null,\r\n \"Timestamp\": \"\",\r\n \"FuelDeliveryTanks\": [\r\n {\r\n \"DelivQty\": 0,\r\n \"DelProdKey\": 0,\r\n \"Ethanol\": 0,\r\n \"InventoryCost\": 0,\r\n \"Key\": 0,\r\n \"LastCost\": 0,\r\n \"LastDelivGrossQty\": 0,\r\n \"LastDelivNetQty\": 0,\r\n \"LastEthanol\": 0,\r\n \"LastOctane\": 0,\r\n \"LastQty\": 0,\r\n \"LastRVP\": 0,\r\n \"LastTankNo\": null,\r\n \"Octane\": 0,\r\n \"OrdQty\": 0,\r\n \"RplCarrierKey\": null,\r\n \"RplCostAssigned\": 0,\r\n \"RplTrmnlKey\": null,\r\n \"RplVendKey\": null,\r\n \"RVP\": 0,\r\n \"TankNo\": \"\",\r\n \"Timestamp\": \"\"\r\n }\r\n ],\r\n ProdId: \"\",\r\n ProdDesc: \"\"\r\n };\r\n\r\n dataSource.insert(totalRows, newDeliveryProduct);\r\n\r\n grid.editRow(grid.tbody.children().last());\r\n\r\n var $newRow = $(grid.tbody.children().last());\r\n $newRow.addClass(\"newRow\");\r\n $scope.setupDeliveryRow($newRow);\r\n\r\n }\r\n };\r\n\r\n $scope.setupDeliveriesGridColumns = function ()\r\n {\r\n\r\n if (!$scope.appInfo.paperwork.deliveries.context.ShowGrossUnits)\r\n {\r\n $scope.kendo.deliveriesGrid.hideColumn(\"DelivGrossQty\");\r\n }\r\n\r\n if (!$scope.appInfo.paperwork.deliveries.context.ShowNetUnits)\r\n {\r\n $scope.kendo.deliveriesGrid.hideColumn(\"DelivNetQty\");\r\n }\r\n\r\n if (!$scope.deliveryIsEditable())\r\n {\r\n $scope.kendo.deliveriesGrid.hideColumn(\"DeleteDeliveryBtn\");\r\n }\r\n\r\n };\r\n\r\n\r\n $scope.deleteDeliveryProductRow = function (dataItem)\r\n {\r\n\r\n var dataRow = $('#deliveriesGrid').data(\"kendoGrid\").dataSource.getByUid(dataItem.uid);\r\n $('#deliveriesGrid').data(\"kendoGrid\").dataSource.remove(dataRow);\r\n\r\n };\r\n\r\n function deliveriesGridColIsEditable(fieldName, model)\r\n {\r\n\r\n if (fieldName === \"ProdKey\")\r\n {\r\n return $scope.deliveryIsEditable();\r\n }\r\n\r\n if (fieldName === \"ProdDesc\")\r\n {\r\n return false;\r\n }\r\n\r\n if (fieldName === \"TankNo\")\r\n {\r\n return $scope.deliveryIsEditable();\r\n }\r\n\r\n if (fieldName === \"DelivGrossQty\")\r\n {\r\n return true;\r\n }\r\n\r\n if (fieldName === \"DelivNetQty\")\r\n {\r\n return true;\r\n }\r\n\r\n return true; // default to editable\r\n }\r\n\r\n $scope.setupGridColumnValidationNotificationUI = function ($col)\r\n {\r\n\r\n var fieldName = $col.attr('data-field');\r\n\r\n $col.qtip({\r\n id: \"qtip-\" + fieldName,\r\n content: {\r\n text: \"\"\r\n },\r\n position: {\r\n adjust: {\r\n x: -10, y: -10\r\n }\r\n },\r\n style: {\r\n classes: \"toolTipStyle\"\r\n }\r\n });\r\n\r\n $col.qtip('disable', true);\r\n\r\n };\r\n\r\n $scope.processGridColumnValidationNotification = function ($row, fieldName, errorMessages, warningMessages)\r\n {\r\n\r\n var idx = 0;\r\n\r\n var hasErrors = (errorMessages.length > 0);\r\n var hasWarnings = (warningMessages.length > 0);\r\n\r\n var $col = $row.find(\"[data-field='\" + fieldName + \"']\");\r\n\r\n //clear classes\r\n $col.removeClass(\"td-error\");\r\n $col.removeClass(\"td-warning\");\r\n\r\n if (hasErrors || hasWarnings)\r\n {\r\n\r\n var messageList = $(\"
    \");\r\n\r\n if (hasErrors)\r\n {\r\n var errorList = $(\"
    \" + localStrings.getLocalizedString(\"Error\") + \" :
    \");\r\n for (idx = 0; idx < errorMessages.length; idx++)\r\n {\r\n errorList.append(\"
  • \" + errorMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(errorList);\r\n }\r\n\r\n if (hasWarnings)\r\n {\r\n var warningList = $(\"
    \" + localStrings.getLocalizedString(\"Warning\") + \" :
    \");\r\n for (idx = 0; idx < warningMessages.length; idx++)\r\n {\r\n warningList.append(\"
  • \" + warningMessages[idx] + \"
  • \");\r\n }\r\n\r\n messageList.append(warningList);\r\n }\r\n\r\n $col.qtip('option', 'content.text', messageList);\r\n\r\n if (hasErrors)\r\n {\r\n $col.addClass(\"td-error\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-error');\r\n } else\r\n {\r\n $col.addClass(\"td-warning\");\r\n $col.qtip('option', 'style.classes', 'toolTipStyle-warning');\r\n }\r\n\r\n $col.qtip('disable', false);\r\n }\r\n else\r\n {\r\n $col.qtip('disable', true);\r\n }\r\n };\r\n\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.$watch('appInfo.paperwork.deliveries.fuelDelivery.VendKey', function (newValue, oldValue)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(newValue) || (newValue < 0) || (newValue === oldValue) || $scope.currentView === 0)\r\n {\r\n return;\r\n }\r\n\r\n var vendKey = newValue;\r\n\r\n if ($scope.appInfo.paperwork.deliveries.context.UsesSiteAuthorizedTerminals)\r\n { // uses selected or exculusive site authorized terminals\r\n\r\n if (newValue === \"\")\r\n {\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.TrmnlKey = \"\";\r\n $scope.appInfo.paperwork.deliveries.context.AuthorizedTerminals = [];\r\n return;\r\n }\r\n\r\n PaperworkDeliveriesService.getSiteFuelAuthorizedOrigins(\r\n $scope.appInfo.paperwork.batch.Key, vendKey\r\n ).then(function (data)\r\n {\r\n angular.copy(data, $scope.appInfo.paperwork.deliveries.context.AuthorizedTerminals);\r\n\r\n //save of bound terminal key before updating datasource\r\n var trmnlKey = $scope.appInfo.paperwork.deliveries.fuelDelivery.TrmnlKey;\r\n\r\n $scope.kendo.terminals.dataSource.data($scope.appInfo.paperwork.deliveries.context.AuthorizedTerminals);\r\n\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.TrmnlKey = trmnlKey;\r\n\r\n });\r\n }\r\n\r\n });\r\n }\r\n\r\n var PageStage = $rootScope.$on('event:PageStage', function (event, args)\r\n {\r\n if (args === 'DREFD' && !$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.savePaperworkDelivery('', false, false);\r\n } \r\n });\r\n $scope.$on('$destroy', PageStage);\r\n\r\n $scope.next = function (path)\r\n {\r\n if (!$scope.validateDeliveries())\r\n return;\r\n\r\n if ($(\"#appForm\").hasClass(\"ng-dirty\"))\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, false));\r\n }\r\n else\r\n {\r\n $scope.savePaperworkDelivery(path, false, false);\r\n }\r\n } else\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, false));\r\n }\r\n };\r\n\r\n $scope.previous = function (path)\r\n {\r\n if ($(\"#appForm\").hasClass(\"ng-dirty\"))\r\n {\r\n if ($scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, true));\r\n }\r\n else\r\n {\r\n $scope.savePaperworkDelivery(path, false, false, true);\r\n }\r\n } else\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, $scope.appInfo.paperwork.viewOnly, true));\r\n }\r\n };\r\n\r\n $scope.close = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.savePaperworkDelivery(\"\", false, false);\r\n } else\r\n {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork/\");\r\n }\r\n };\r\n\r\n $scope.submit = function ()\r\n {\r\n $scope.submitClicked = true;\r\n if (!$scope.validateDeliveries())\r\n return;\r\n\r\n if ($scope.currentView === 0 || $(\"#appForm\").hasClass(\"ng-pristine\"))\r\n { // if in record selector just submit\r\n $scope.submitPaperwork(true);\r\n } else\r\n { // if in form save and then submit\r\n\r\n $scope.savePaperworkDelivery(\"\", true, false);\r\n }\r\n };\r\n\r\n $scope.processSubmit = function (submit, skipNav) {\r\n\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: submit,\r\n PreviouslySubmitted: $scope.appInfo.paperwork.batch.HasBeenSubmitted\r\n };\r\n\r\n PaperworkService.GetPaperworkBatchErrorWarning(submitPaperworkCmdParms).then(function (data) {\r\n //If warnings - show confirm dialog\r\n if (data.HasWarnings) {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.Warnings[0])) {\r\n $scope.notifier.show(data.Warnings[0], \"warning\");\r\n\r\n var yes = function () {\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data) {\r\n if (submit && !skipNav)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n };\r\n\r\n $scope.modalifier.confirm(data.Warnings[0] + \"
    \" + localStrings.getLocalizedString(\"WishToContinue\"), yes);\r\n }\r\n }\r\n else {\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data) {\r\n if (submit && !skipNav)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n }\r\n });\r\n };\r\n\r\n $scope.submitPaperwork = function (submit, skipNav)\r\n {\r\n var fuelMetersAppInfo = $scope.appInfo.paperwork.apps[0];\r\n\r\n //If we have fuelMeters and fuelMeters are required, but not saved; then throw error\r\n if (fuelMetersAppInfo.HasData === 0 && fuelMetersAppInfo.IsRequired !== 0) {\r\n $timeout(function () {\r\n $scope.modalifier.showSavedError();\r\n }, 100);\r\n return;\r\n }\r\n\r\n $scope.processSubmit(submit, skipNav);\r\n };\r\n\r\n $scope.savePaperworkDelivery = function (path, submit, close, isPrevious, skipNav)\r\n {\r\n var deliveriesGrid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n // if there is a invalid new row remove it before validating\r\n var $lastRow = $(deliveriesGrid.tbody.children().last());\r\n var isNewRow = $lastRow.hasClass('newRow');\r\n isPrevious = isPrevious ? isPrevious : false;\r\n skipNav = skipNav ? skipNav : false;\r\n if (isNewRow)\r\n {\r\n var rowIsDirty = $lastRow.find('.k-dirty'); // find any columns that are dirty\r\n\r\n if (rowIsDirty.length === 0)\r\n {\r\n deliveriesGrid.cancelRow();\r\n }\r\n }\r\n\r\n if (!validatorSvc.executeValidations() || !$scope.validateDeliveries())\r\n {\r\n return;\r\n }\r\n\r\n if ($scope.appInfo.paperwork.deliveries.appForm)\r\n {\r\n $scope.resetDirtyFlags($scope.appInfo.paperwork.deliveries.appForm);\r\n }\r\n\r\n // if current view is record selector then don't save fuel delivery. just navigate to selected path\r\n if ($scope.currentView === 0)\r\n {\r\n if (path.length > 0)\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n return;\r\n }\r\n }\r\n\r\n angular.copy($scope.deliveriesGridDS.data().toJSON(), $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts);\r\n\r\n // if new delivery then set entry user id\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Key <= 0)\r\n {\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.EntryUserID = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress;\r\n }\r\n var paperworkDeliveryHeader =\r\n {\r\n PaperworkBatchKey: $scope.appInfo.paperwork.batch.Key,\r\n AppKey: $scope.locationInfo.sideMenuData.paperwork.deliveries.Key\r\n };\r\n\r\n PaperworkDeliveriesService.savePaperworkDelivery(paperworkDeliveryHeader, $scope.appInfo.paperwork.deliveries.fuelDelivery)\r\n .then(function (data)\r\n {\r\n data.FuelDelivery.LiftDatetime = globalizationSvc.formatDateTime(data.FuelDelivery.LiftDatetime, 'g');\r\n data.FuelDelivery.DelivDateTime = globalizationSvc.formatDateTime(data.FuelDelivery.DelivDateTime, 'g');\r\n\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = data.FuelDelivery;\r\n\r\n $scope.appInfo.paperwork.deliveries.deliveriesList = data.FuelDeliveriesList;\r\n\r\n // initalize product filtered tanks list\r\n angular.forEach($scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts, function (deliveryProduct)\r\n {\r\n deliveryProduct.FilteredTanksList = $scope.getFilteredTanksList(deliveryProduct.ProdKey);\r\n deliveryProduct.SelectedTank = deliveryProduct.FilteredTanksList.find({TankNo: deliveryProduct.FuelDeliveryTanks[0].TankNo});\r\n });\r\n\r\n var grid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n grid.dataSource.data(data.FuelDelivery.FuelDeliveryProducts);\r\n\r\n $scope.validateDeliveries();\r\n\r\n if (submit)\r\n {\r\n $scope.submitPaperwork(true, skipNav);\r\n return;\r\n }\r\n if (close)\r\n {\r\n $scope.submitPaperwork(false, skipNav);\r\n return;\r\n }\r\n if (path.length > 0)\r\n {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n }\r\n });\r\n };\r\n\r\n $scope.displayDeleteConfirmationModal = function ()\r\n {\r\n\r\n $scope.deleteConfirmationModalDeferred = $q.defer();\r\n\r\n $scope.showDeleteConfirmationModal = true;\r\n\r\n return $scope.deleteConfirmationModalDeferred.promise;\r\n\r\n };\r\n\r\n $scope.deleteDeliveryHandler = function (deliveryListItem)\r\n {\r\n $scope.displayDeleteConfirmationModal().then(function ()\r\n { // ok handler\r\n $scope.deletePaperworkDelivery(deliveryListItem);\r\n $scope.deleteConfirmationModalDeferred = undefined;\r\n $scope.showDeleteConfirmationModal = false;\r\n }, function ()\r\n { // cancel handler\r\n $scope.deleteConfirmationModalDeferred = undefined;\r\n $scope.showDeleteConfirmationModal = false;\r\n });\r\n };\r\n\r\n $scope.deletePaperworkDelivery = function (deliveryListItem)\r\n {\r\n PaperworkDeliveriesService.deletePaperworkDelivery(deliveryListItem, $scope.appInfo.paperwork.batch.Key)\r\n .then(function (data)\r\n {\r\n //update record selector list\r\n $scope.appInfo.paperwork.deliveries.deliveriesList = data.FuelDeliveriesList;\r\n }\r\n );\r\n };\r\n\r\n $scope.displayCommentsModalForm = function ()\r\n {\r\n $scope.showCommentsEntryModalForm = true;\r\n };\r\n\r\n $scope.perLoadFreightModalFormDeferred = undefined;\r\n\r\n $scope.displayPerLoadFreightModalForm = function ()\r\n {\r\n\r\n $scope.perLoadFreightModalFormDeferred = $q.defer();\r\n\r\n $scope.freightModalFormDelegate.fuelDeliveryFreight = angular.copy($scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryFreight);\r\n\r\n $scope.showPerLoadFreightEntryModalForm = true;\r\n\r\n return $scope.perLoadFreightModalFormDeferred.promise;\r\n\r\n };\r\n\r\n $scope.editPerLoadFreight = function ()\r\n {\r\n $scope.displayPerLoadFreightModalForm().then(function ()\r\n { // ok handler\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryFreight = angular.copy($scope.freightModalFormDelegate.fuelDeliveryFreight);\r\n $scope.freightModalFormDelegate.fuelDeliveryFreight = {};\r\n $scope.perLoadFreightModalFormDeferred = undefined;\r\n $scope.showPerLoadFreightEntryModalForm = false;\r\n }, function ()\r\n { // cancel handler\r\n $scope.perLoadFreightModalFormDeferred = undefined;\r\n $scope.showPerLoadFreightEntryModalForm = false;\r\n });\r\n };\r\n\r\n $scope.hideModals = function ()\r\n {\r\n $scope.showDeleteConfirmationModal = false;\r\n $scope.showCommentsEntryModalForm = false;\r\n $scope.showPerLoadFreightEntryModalForm = false;\r\n validatorSvc.clearAllValidations();\r\n };\r\n\r\n $scope.getFilteredTanksList = function (productKey)\r\n {\r\n var tanks = $scope.appInfo.paperwork.deliveries.context.SiteTanks;\r\n var siteTankProductLookup = $scope.appInfo.paperwork.deliveries.context.SiteTankProductLookup;\r\n\r\n var data = [];\r\n\r\n angular.forEach(siteTankProductLookup.findAll({ProductKey: productKey}), function (authorizedTank)\r\n {\r\n\r\n var tank = tanks.find({ProductKey: authorizedTank.TankProductKey});\r\n\r\n if (angular.isDefined(tank))\r\n {\r\n data.push(tank);\r\n }\r\n });\r\n\r\n return data;\r\n };\r\n\r\n $scope.deliveryIsEditable = function (delivery)\r\n {\r\n if (delivery === undefined)\r\n {\r\n delivery = $scope.appInfo.paperwork.deliveries.fuelDelivery;\r\n }\r\n\r\n if ($(\"#deliveriesGrid\").attr(\"k-editable\") === \"false\")\r\n {\r\n return false;\r\n } else if (delivery.Status > 2) { // scheduled (0) or verified (1) or entered (2) = true else false\r\n return false;\r\n } else if ($scope.appInfo.paperwork.context.lockPaperworkAfterDru && delivery.DRUPosted) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n var deliveryGridRowValidation =\r\n {\r\n validator: function (deliveryProduct, parms)\r\n {\r\n var isValid = true;\r\n\r\n var $row = $(\"#deliveriesGrid\").data(\"kendoGrid\").tbody.find(\"tr[data-uid='\" + deliveryProduct.uid + \"']\");\r\n\r\n //gross quantity validation\r\n if ($scope.appInfo.paperwork.deliveries.context.ShowGrossUnits)\r\n {\r\n\r\n var errorGrossQty = [], warningGrossQty = [];\r\n\r\n if (deliveryProduct.DelivGrossQty === 0)\r\n {\r\n isValid = false;\r\n\r\n errorGrossQty.push(localStrings.getLocalizedString(\"GTZeroError\"));\r\n }\r\n\r\n if ((deliveryProduct.DelivGrossQty > 0) && (deliveryProduct.DelivGrossQty > deliveryProduct.SelectedTank.Capacity ))\r\n {\r\n\r\n warningGrossQty.push(localStrings.getLocalizedString(\"QuantityExceedsTank\"));\r\n\r\n }\r\n\r\n $scope.processGridColumnValidationNotification($row, 'DelivGrossQty', errorGrossQty, warningGrossQty);\r\n }\r\n\r\n //net quantity validation\r\n if ($scope.appInfo.paperwork.deliveries.context.ShowNetUnits)\r\n {\r\n\r\n var errorNetQty = [], warningNetQty = [];\r\n\r\n if (deliveryProduct.DelivNetQty === 0)\r\n {\r\n isValid = false;\r\n\r\n errorNetQty.push(localStrings.getLocalizedString(\"GTZeroError\"));\r\n }\r\n\r\n if ((deliveryProduct.DelivNetQty > 0) && (deliveryProduct.DelivNetQty > deliveryProduct.SelectedTank.Capacity ))\r\n {\r\n warningNetQty.push(localStrings.getLocalizedString(\"QuantityExceedsTank\"));\r\n }\r\n\r\n $scope.processGridColumnValidationNotification($row, 'DelivNetQty', errorNetQty, warningNetQty);\r\n }\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n $scope.showErrorTooltip = function (el) {\r\n //$scope.setupGridColumnValidationNotificationUI(el);\r\n\r\n var fieldName = el.attr('data-field');\r\n\r\n el.qtip({\r\n id: \"qtip-\" + fieldName,\r\n content: {\r\n text: \"\"\r\n },\r\n position: {\r\n adjust: {\r\n x: 15, y: -30\r\n }\r\n },\r\n style: {\r\n classes: \"toolTipStyle\"\r\n }\r\n });\r\n\r\n el.qtip('disable', true);\r\n\r\n el.qtip('option', 'content.text', localStrings.getLocalizedString('DelivDetailsRequired'));\r\n el.qtip('option', 'style.classes', 'toolTipStyle-error');\r\n el.qtip('disable', false);\r\n };\r\n\r\n $scope.validateDeliveries = function ()\r\n {\r\n // checks if control is not null, undefined and so on ...\r\n if (!$(\"#deliveriesGrid\").data(\"kendoGrid\"))\r\n return true;\r\n\r\n var deliveriesGridRowsCount = $(\"#deliveriesGrid\").data(\"kendoGrid\").dataSource.data().length;\r\n\r\n if (deliveriesGridRowsCount === 0 && !$(\"#appForm\").hasClass(\"ng-dirty\")) {\r\n return true;\r\n }\r\n \r\n if (!validatorSvc.executeValidations()) {\r\n return deliveriesGridRowsCount === 0;\r\n }\r\n\r\n var $gridActionFooter = $(\"#petronetGridActionFooterRow\");\r\n var $gridActionFooterRowMiddle = $(\"#petronetGridActionFooterRowMiddle\");\r\n\r\n $gridActionFooter.removeClass(\"td-error\");\r\n $gridActionFooterRowMiddle.removeClass(\"td-error\");\r\n\r\n var isValid = true;\r\n\r\n if (deliveriesGridRowsCount === 0) {\r\n\r\n $gridActionFooter.addClass(\"td-error\");\r\n $gridActionFooterRowMiddle.addClass(\"td-error\");\r\n\r\n $scope.showErrorTooltip($gridActionFooter);\r\n $scope.showErrorTooltip($gridActionFooterRowMiddle);\r\n\r\n return false;\r\n }\r\n\r\n var deliveriesGrid = $(\"#deliveriesGrid\").data(\"kendoGrid\");\r\n\r\n angular.forEach(deliveriesGrid.dataSource.data(), function (delivery)\r\n {\r\n isValid = isValid && deliveryGridRowValidation.validator(delivery);\r\n });\r\n\r\n return isValid;\r\n };\r\n\r\n $scope.getStatusDescription = function ()\r\n {\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 0)\r\n {\r\n return 'Scheduled';\r\n } else if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 1)\r\n {\r\n return 'Verified';\r\n }\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 2)\r\n {\r\n return 'Entered';\r\n }\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 3)\r\n {\r\n return 'Posted';\r\n }\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 4)\r\n {\r\n return 'Confirmed';\r\n }\r\n if ($scope.appInfo.paperwork.deliveries.fuelDelivery.Status === 5)\r\n {\r\n return 'Reconciled';\r\n }\r\n };\r\n\r\n var liftDateValidation =\r\n {\r\n name: 'validateLiftDate',\r\n validationMessage: '',\r\n validationMessageWrn: '',\r\n validatorError: function (liftDateTime, parms)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(liftDateTime)) {\r\n return true;\r\n }\r\n\r\n var hasError = false;\r\n var errorMsg = '';\r\n\r\n var liftDateTimeObject = new Date(liftDateTime);\r\n var delivDateTimeObject = new Date($scope.appInfo.paperwork.deliveries.fuelDelivery.DelivDateTime);\r\n\r\n if (delivDateTimeObject < liftDateTimeObject) {\r\n errorMsg = localStrings.getLocalizedString(\"LiftDateNot\");\r\n hasError = true;\r\n }\r\n if (!hasError) {\r\n return !hasError;\r\n }\r\n var maxDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), 1);\r\n var minDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), -1);\r\n\r\n if ((liftDateTimeObject > maxDateTime) || (liftDateTimeObject < minDateTime)) {\r\n if (errorMsg !== '') {\r\n errorMsg = errorMsg + '\\r\\n';\r\n }\r\n errorMsg = errorMsg + localStrings.getLocalizedString(\"LiftDateNotWithin\");\r\n hasError = true;\r\n }\r\n\r\n this.validationMessage = errorMsg;\r\n\r\n return !hasError;\r\n },\r\n validatorWarning: function (liftDateTime, parms)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(liftDateTime)) {\r\n return true;\r\n }\r\n\r\n var hasWarning = false;\r\n\r\n var liftDateTimeObject = new Date(liftDateTime);\r\n\r\n var maxDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), 1);\r\n var minDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), -1);\r\n\r\n if ((liftDateTimeObject > maxDateTime) || (liftDateTimeObject < minDateTime)) {\r\n this.validationMessageWrn = localStrings.getLocalizedString(\"LiftDateNotWithin\");\r\n hasWarning = true;\r\n }\r\n\r\n return !hasWarning;\r\n }\r\n };\r\n\r\n $scope.validateLiftDate = new pdi.ng.validate.PdiValidation(liftDateValidation);\r\n\r\n var deliveryDateValidation =\r\n {\r\n name: 'validateDeliveryDate',\r\n validationMessage: '',\r\n validationMessageWrn: '',\r\n validatorError: function (deliveryDateTime, parms)\r\n {\r\n var hasError = false;\r\n var errorMsg = '';\r\n\r\n var liftDateTimeObject = new Date($scope.appInfo.paperwork.deliveries.fuelDelivery.LiftDatetime);\r\n var delivDateTimeObject = new Date(deliveryDateTime);\r\n\r\n if (delivDateTimeObject < liftDateTimeObject) {\r\n errorMsg = localStrings.getLocalizedString(\"DeliveryDateNot\");\r\n hasError = true;\r\n }\r\n if (!hasError) {\r\n return !hasError;\r\n }\r\n\r\n var maxDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), 1);\r\n var minDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), -1);\r\n\r\n if ((delivDateTimeObject > maxDateTime) || (delivDateTimeObject < minDateTime)) {\r\n if (errorMsg !== '') {\r\n errorMsg = errorMsg + '\\r\\n';\r\n }\r\n errorMsg = errorMsg + localStrings.getLocalizedString(\"DeliveryDateNotWithin\");\r\n hasError = true;\r\n }\r\n\r\n this.validationMessage = errorMsg;\r\n return !hasError;\r\n },\r\n validatorWarning: function (deliveryDateTime, parms)\r\n {\r\n var hasWarning = false;\r\n\r\n var delivDateTimeObject = new Date(deliveryDateTime);\r\n\r\n var maxDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), 1);\r\n var minDateTime = $scope.addDaysToDate($scope.formatDateTime($scope.appInfo.paperwork.batch.PaperworkDate), -1);\r\n\r\n if ((delivDateTimeObject > maxDateTime) || (delivDateTimeObject < minDateTime)) {\r\n this.validationMessageWrn = localStrings.getLocalizedString(\"DeliveryDateNotWithin\");\r\n hasWarning = true;\r\n }\r\n\r\n return !hasWarning;\r\n }\r\n };\r\n\r\n $scope.validateDeliveryDate = new pdi.ng.validate.PdiValidation(deliveryDateValidation);\r\n\r\n\r\n $scope.viewDelivery = function (deliveryKey)\r\n {\r\n PaperworkDeliveriesService.getDelivery(\r\n deliveryKey,\r\n $scope.appInfo.paperwork.batch.Key\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = {};\r\n\r\n data.LiftDatetime = globalizationSvc.formatDateTime(data.LiftDatetime, 'g');\r\n data.DelivDateTime = globalizationSvc.formatDateTime(data.DelivDateTime, 'g');\r\n\r\n $scope.appInfo.paperwork.deliveries.fuelDelivery = data;\r\n\r\n $scope.freightModalFormDelegate.fuelDeliveryFreight = $scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryFreight;\r\n\r\n // initalize product filtered tanks list\r\n angular.forEach($scope.appInfo.paperwork.deliveries.fuelDelivery.FuelDeliveryProducts, function (deliveryProduct)\r\n {\r\n deliveryProduct.FilteredTanksList = $scope.getFilteredTanksList(deliveryProduct.ProdKey);\r\n deliveryProduct.SelectedTank = deliveryProduct.FilteredTanksList.find({TankNo: deliveryProduct.FuelDeliveryTanks[0].TankNo});\r\n });\r\n\r\n $scope.initializeDeliveriesGrid();\r\n\r\n $scope.changeView(1);\r\n\r\n });\r\n };\r\n\r\n $scope.editPerLoadFreightOkHandler = function ()\r\n {\r\n\r\n if (!validatorSvc.executeValidationsForScope($scope.freightModalFormDelegate))\r\n {\r\n return;\r\n }\r\n\r\n // workaround for the above code does not set the validatity of the model correctly. maybe a timing issue\r\n $timeout(function ()\r\n {\r\n\r\n var hasError = $(\"#deliveryFreightTable\").find(\".td-error\");\r\n\r\n if (hasError.length > 0)\r\n {\r\n return;\r\n }\r\n\r\n $scope.perLoadFreightModalFormDeferred.resolve();\r\n }, 100);\r\n };\r\n\r\n $scope.editPerLoadFreightCancelHandler = function ()\r\n {\r\n $scope.perLoadFreightModalFormDeferred.reject();\r\n };\r\n\r\n })\r\n .controller('enterPaperworkDeliveriesFreightModalCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, $filter,\r\n PaperworkDeliveriesService, $location, WebFunctions, validatorSvc, $timeout, localizationSvc, globalizationSvc)\r\n {\r\n 'use strict';\r\n\r\n $scope.modalInfo = {};\r\n $scope.kInputOptions = {\r\n culture: globalizationSvc.getLocale(),\r\n format: \"n\",\r\n decimals: 2,\r\n spinners: false\r\n };\r\n\r\n var parentController = angular.element('#deliveriesForm').scope();\r\n\r\n parentController.freightModalFormDelegate = $scope;\r\n\r\n $scope.fuelDeliveryFreight = {};\r\n\r\n $scope.addDeliveryFreightRow = function ()\r\n {\r\n var newFreightRow = {\r\n \"CalcAmt\": 0,\r\n \"DelProdKey\": null,\r\n \"FrtVndInvKey\": null,\r\n \"FrtVndInvPndKey\": null,\r\n \"FrtRuleKey\": null,\r\n \"FuelDelKey\": $scope.appInfo.paperwork.deliveries.fuelDelivery.Key,\r\n \"InvcAmt\": 0,\r\n \"Key\": 0,\r\n \"Override\": -1,\r\n \"ReconUserID\": null,\r\n \"Reconciled\": 0,\r\n \"Type\": 6,\r\n \"Timestamp\": \"\"\r\n };\r\n\r\n $scope.fuelDeliveryFreight.push(newFreightRow);\r\n };\r\n\r\n\r\n var freightRowValidation =\r\n {\r\n name: 'validateFreightRow',\r\n validationMessage: '',\r\n validatorError: function (freight, parms)\r\n {\r\n var isValid = true;\r\n\r\n //reset Errors\r\n freight.freightRuleValidation = {hasErrors: false, errorDescription: \"\"};\r\n\r\n if (angular.isUndefinedOrNullOrEmpty(freight.FrtRuleKey))\r\n {\r\n isValid = false;\r\n freight.freightRuleValidation = { hasErrors: true, errorDescription: localStrings.getLocalizedString(\"Required\") };\r\n }\r\n\r\n if (isValid)\r\n { //cleanup view model\r\n freight.freightRuleValidation = {};\r\n }\r\n\r\n return isValid;\r\n }\r\n };\r\n\r\n $scope.validateFreightRow = new pdi.ng.validate.PdiValidation(freightRowValidation);\r\n\r\n })\r\n .controller('enterPaperworkDealerFormsCtrl', function ($scope, $rootScope, $routeParams, PaperworkService, localizationSvc,$filter, PaperworkDealerFormsService, $location, WebFunctions, $timeout, templates, globalizationSvc, setupNav)\r\n {\r\n 'use strict';\r\n $scope.dealerFormsLoaded = false;\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n $scope.appInfo.paperwork.viewOnly = $location.$$path.indexOf('/ViewPaperworkDealerForms/') > -1;\r\n\r\n $scope.formsEditable = true;\r\n\r\n if ($routeParams.paperworkKey)\r\n {\r\n $scope.appInfo.paperwork.paperworkKey = $routeParams.paperworkKey;\r\n }\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n $scope.appInfo.paperwork.batch = {};\r\n\r\n // TODO To add the ability to add this to every possible field, we would run a foreach for each field in loadDealerForms and then attach this with their precision\r\n $scope.appInfo.paperwork.kOptions = {\r\n culture: globalizationSvc.getLocale(),\r\n format: \"n\",\r\n decimals: 2,\r\n spinners: false,\r\n min: -999999999\r\n };\r\n\r\n if (!$scope.appInfo.paperwork.context)\r\n {\r\n PaperworkService.getPaperworkContext($scope.appInfo.webUser.CurrentAuthorization.CustContKey, true).then(\r\n function (data)\r\n {\r\n $scope.appInfo.paperwork.context = {};\r\n $scope.appInfo.paperwork.context.paperworkSites = data.PaperworkSites;\r\n $scope.appInfo.paperwork.context.selectedSite = data.SelectedSiteKey;\r\n $scope.appInfo.paperwork.context.lockPaperworkAfterDru = data.LockPaperworkAfterDru;\r\n\r\n $scope.appInfo.paperwork.context.calculatedPriceToPriorDaysPriceVariance = data.CalculatedPriceToPriorDaysPriceVariance;\r\n $scope.appInfo.paperwork.context.calculatedPriceToCapturedRetailPriceVariance = data.CalculatedPriceToCapturedRetailPriceVariance;\r\n $scope.appInfo.paperwork.context.netSalesDollarsToCapturedRetailPriceNetUnitsVariance = data.NetSalesDollarsToCapturedRetailPriceNetUnitsVariance;\r\n\r\n $scope.locationInfo.showEnterPaperworkMenuItem = $scope.appInfo.paperwork.context.paperworkSites[0] ?\r\n $scope.appInfo.paperwork.context.paperworkSites[0].CanEnterPaperwork :\r\n false;\r\n\r\n if (!$scope.locationInfo.showEnterPaperworkMenuItem)\r\n {\r\n $scope.locationInfo.sideMenuData.subMenu = '2';\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n }\r\n }\r\n );\r\n }\r\n\r\n if ($scope.appInfo.paperwork.paperworkKey > 0)\r\n {\r\n //We are loading a known existing paperwork batch\r\n PaperworkService.OpenPaperworkBatchByKey(\r\n $scope.appInfo.paperwork.paperworkKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.Id,\r\n $scope.appInfo.paperwork.viewOnly\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.paperwork.batch = data.PaperworkBatch.PaperworkBatch;\r\n $scope.appInfo.paperwork.apps = data.PaperworkBatch.PaperworkApps;\r\n $scope.appInfo.paperwork.form = data.PaperworkBatch.PaperworkForm;\r\n $scope.appInfo.paperwork.siteInfo = data.PaperworkBatch.PaperworkSiteInfo;\r\n \r\n // resolve if this is the first or last page\r\n var res = setupNav.firstLastPage('DRDFE',$scope.appInfo.paperwork.apps);\r\n $scope.locationInfo.sideMenuData.isFirstPage = res.isFirstPage;\r\n $scope.locationInfo.sideMenuData.isLastPage = res.isLastPage;\r\n \r\n $rootScope.$broadcast('event:PaperworkLoaded', $scope.appInfo.paperwork.viewOnly, $scope.appInfo.paperwork.paperworkKey);\r\n\r\n var nextApp = true;\r\n angular.forEach($scope.appInfo.paperwork.apps, function (app, index)\r\n {\r\n if (app.MenuCode === 'DRDFE')\r\n {\r\n $scope.loadDealerForms();\r\n nextApp = false;\r\n }\r\n });\r\n if (nextApp)\r\n {\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n }\r\n }, function ()\r\n {\r\n $location.path(\"/Paperwork/ReviewPaperwork\");\r\n });\r\n } else\r\n {\r\n //todo: goback...\r\n }\r\n $scope.locationInfo.sideMenuData.pwSubMenu = '3';\r\n };\r\n\r\n var newPWBatchLoadedListener = $rootScope.$on('event:NewPaperworkBatchLoaded', function (event, data)\r\n {\r\n $scope.loadDealerForms();\r\n });\r\n\r\n $scope.$on('$destroy', newPWBatchLoadedListener);\r\n\r\n $scope.loadDealerForms = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.context.paperworkSites, function (site, index)\r\n {\r\n if (site.SiteKey === $scope.appInfo.paperwork.batch.SiteKey)\r\n $scope.appInfo.paperwork.context.selectedSiteObj = site;\r\n });\r\n\r\n PaperworkDealerFormsService.loadDealerForms($scope.appInfo.paperwork.batch.Key).then(function (data)\r\n {\r\n // if(data.count == 0){\r\n // TODO: No forms, do something...\r\n // }\r\n $scope.appInfo.paperwork.dealerForms = data.DealerForms;\r\n $scope.setupDisplayValues();\r\n\r\n $scope.dealerFormsLoaded = true;\r\n\r\n $scope.formsEditable = !($scope.appInfo.paperwork.context.lockPaperworkAfterDru && $scope.appInfo.paperwork.dealerForms.Header.Updated);\r\n\r\n $timeout(function(){\r\n if (!$scope.formsEditable) {\r\n $('#sectionDealerForms input').attr(\"disabled\", true);\r\n }\r\n });\r\n\r\n $scope.updateDealerForms();\r\n $scope.setFocus();\r\n });\r\n };\r\n\r\n $scope.setupDisplayValues = function () {\r\n $scope.appInfo.paperwork.dealerForms.AllFieldsDisplay = {};\r\n\r\n angular.forEach($scope.appInfo.paperwork.dealerForms.AllFields, function (field, index) {\r\n var newObject = {};\r\n\r\n angular.forEach(Object.keys(field), function (property, index) {\r\n if (property === \"DataIDValue\")\r\n newObject[property] = globalizationSvc.formatNumeric(field[property], \"n2\");\r\n });\r\n\r\n $scope.appInfo.paperwork.dealerForms.AllFieldsDisplay[field.Key] = newObject;\r\n });\r\n };\r\n\r\n var PageStage = $rootScope.$on('event:PageStage', function (event, args)\r\n {\r\n if (args === 'DRDFE' && !$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.saveDealerForms('', false, true);\r\n } \r\n });\r\n $scope.$on('$destroy', PageStage);\r\n\r\n $scope.next = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n $scope.saveDealerForms(path, false, true);\r\n else\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, false));\r\n };\r\n\r\n $scope.previous = function (path)\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n $scope.saveDealerForms(path, false, false, true);\r\n else\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, true, true));\r\n };\r\n\r\n $scope.close = function ()\r\n {\r\n if (!$scope.appInfo.paperwork.viewOnly)\r\n {\r\n $scope.saveDealerForms('', false, false);\r\n } else\r\n {\r\n $scope.goTo(\"/Paperwork/EnterPaperwork/\");\r\n }\r\n };\r\n\r\n $scope.submit = function ()\r\n {\r\n $scope.submitClicked = true;\r\n $scope.saveDealerForms('', true, false);\r\n };\r\n\r\n $scope.processSubmit = function (submit, skipNav) {\r\n var submitPaperworkCmdParms =\r\n {\r\n SiteKey: $scope.appInfo.paperwork.batch.SiteKey,\r\n PaperworkDate: $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true),\r\n EmailAddress: $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n SubmitPaperwork: submit,\r\n PreviouslySubmitted: $scope.appInfo.paperwork.batch.HasBeenSubmitted\r\n };\r\n\r\n PaperworkService.GetPaperworkBatchErrorWarning(submitPaperworkCmdParms).then(function (data) {\r\n //If warnings - show confirm dialog\r\n if (data.HasWarnings) {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.Warnings[0])) {\r\n $scope.notifier.show(data.Warnings[0], \"warning\");\r\n\r\n var yes = function () {\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data) {\r\n if (submit && !skipNav)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n };\r\n\r\n $scope.modalifier.confirm(data.Warnings[0] + \"
    \" + localStrings.getLocalizedString(\"WishToContinue\"), yes);\r\n }\r\n }\r\n else {\r\n PaperworkService.SubmitPaperwork(submitPaperworkCmdParms).then(function (data) {\r\n if (submit && !skipNav)\r\n $scope.goTo(\"Paperwork/InventorySummary/\" + $scope.appInfo.paperwork.batch.SiteKey + \"/\" + $scope.urlFormatDate($scope.appInfo.paperwork.batch.PaperworkDate, true));\r\n });\r\n }\r\n });\r\n };\r\n\r\n $scope.submitPaperwork = function (submit, skipNav)\r\n {\r\n var fuelMetersAppInfo = $scope.appInfo.paperwork.apps[0];\r\n\r\n //If we have fuelMeters and fuelMeters are required, but not saved; then throw error\r\n if (fuelMetersAppInfo.HasData === 0 && fuelMetersAppInfo.IsRequired !== 0) {\r\n $timeout(function () {\r\n $scope.modalifier.showSavedError();\r\n }, 100);\r\n return;\r\n }\r\n\r\n $scope.processSubmit(submit, skipNav);\r\n };\r\n\r\n $scope.saveDealerForms = function (path, submit, close, isPrevious, skipNav)\r\n {\r\n isPrevious = isPrevious ? isPrevious : false;\r\n skipNav = skipNav ? skipNav : false;\r\n\r\n $scope.resetDirtyFlags($scope.dealerFormsForm);\r\n\r\n if ($scope.appInfo.paperwork.dealerForms &&\r\n $scope.appInfo.paperwork.dealerForms.Header &&\r\n $scope.appInfo.paperwork.form) {\r\n $scope.appInfo.paperwork.dealerForms.Header.UserName = $scope.appInfo.paperwork.form.UserName;\r\n $scope.appInfo.paperwork.form.Caption = $scope.appInfo.paperwork.dealerForms.DealerFormVersion.Caption;\r\n\r\n // Set the AppKey on the dealer forms header\r\n if ($scope.appInfo.paperwork.dealerForms.Header.AppKey === 0 &&\r\n !angular.isUndefinedOrNullOrEmpty($scope.appInfo.paperwork.form.AppKey)) {\r\n $scope.appInfo.paperwork.dealerForms.Header.AppKey = $scope.appInfo.paperwork.form.AppKey;\r\n }\r\n PaperworkDealerFormsService.saveDealerForms($scope.appInfo.paperwork.dealerForms.Header,\r\n $scope.appInfo.paperwork.dealerForms.AllFields).then(function (data) {\r\n $scope.appInfo.paperwork.dealerForms = data.DealerForms;\r\n $scope.setupDisplayValues();\r\n\r\n if (submit) {\r\n $scope.submitPaperwork(true, skipNav);\r\n return;\r\n } else if (close) {\r\n $scope.submitPaperwork(false, skipNav);\r\n return;\r\n }\r\n });\r\n }\r\n if (path.length > 0) {\r\n $scope.goTo(setupNav.navigateToPage(path,$scope.appInfo.paperwork.apps,$scope.appInfo.paperwork.paperworkKey, false, isPrevious));\r\n }\r\n };\r\n\r\n $scope.setFocus = function ()\r\n {\r\n var focusSet = false;\r\n for (var x = 0; x < $scope.appInfo.paperwork.dealerForms.Rows[0].length; x++)\r\n {\r\n for (var y = 0; y < $scope.appInfo.paperwork.dealerForms.Rows.length; y++)\r\n {\r\n var key = $scope.appInfo.paperwork.dealerForms.Rows[y][x];\r\n if (key > 0)\r\n {\r\n if (!$scope.appInfo.paperwork.dealerForms.AllFields[key].DisplayOnly && !$scope.appInfo.paperwork.dealerForms.AllFields[key].IsCalculated && !focusSet)\r\n {\r\n $scope.appInfo.paperwork.dealerForms.AllFields[key].setFocus = true;\r\n focusSet = true;\r\n }\r\n else\r\n $scope.appInfo.paperwork.dealerForms.AllFields[key].setFocus = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n $scope.onDealerFormChange = function (index, value) {\r\n var dataIDValue = $scope.appInfo.paperwork.dealerForms.AllFieldsDisplay[index].DataIDValue;\r\n $scope.appInfo.paperwork.dealerForms.AllFields[index].DataIDValue = isNaN(parseFloat(dataIDValue)) ? 0.00 : parseFloat(globalizationSvc.convertStringToNumber($scope.appInfo.paperwork.dealerForms.AllFieldsDisplay[index].DataIDValue));\r\n };\r\n\r\n $scope.updateDealerForms = function ()\r\n {\r\n angular.forEach($scope.appInfo.paperwork.dealerForms.CalcFields, function (calcField, index)\r\n {//look through all the calc field references\r\n \r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue = 0;//We actually store all values in AllFields collection\r\n angular.forEach($scope.appInfo.paperwork.dealerForms.Calcuations, function (calc, index)\r\n {\r\n if (calc.ResultTypeKey === calcField.TypeKey)\r\n {//If the result of the calculation is stored on this calc field then...\r\n angular.forEach($scope.appInfo.paperwork.dealerForms.AllFields, function (field, index)\r\n {\r\n $scope.appInfo.paperwork.dealerForms.AllFieldsDisplay[index].DataIDValue = globalizationSvc.formatNumeric($scope.appInfo.paperwork.dealerForms.AllFields[index].DataIDValue, \"n2\");\r\n\r\n if (calc.CalcTypeKey === field.TypeKey)\r\n {//If this field is the calc type from this calculation then\r\n if (calc.Operation === 0)\r\n {//Add\r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue =\r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue +\r\n field.DataIDValue;//Store the data back in the AllFields collection.\r\n } else\r\n {//Subtract\r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue =\r\n $scope.appInfo.paperwork.dealerForms.AllFields[calcField.Key].DataIDValue -\r\n field.DataIDValue;//Store the data back in the AllFields collection.\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }; \r\n })\r\n .controller('inventorySummaryCtrl', function ($scope, $rootScope, WebFunctions, $timeout, templates)\r\n {\r\n 'use strict';\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler()\r\n {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 30;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaperworkSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = '3';\r\n\r\n $timeout(function ()\r\n {\r\n var inventorySideMenuController = angular.element('#inventorySummarySideMenu').scope();\r\n\r\n inventorySideMenuController.setSiteAndDate();\r\n });\r\n\r\n\r\n };\r\n })\r\n .controller(\"paperworkReportsSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function () {\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 31;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n };\r\n })\r\n .controller(\"paperworkReportSideMenuCtrl\", function ($scope, PaperworkService, PaperworkReportsService, validatorSvc, reportingService, globalizationSvc) {\r\n 'use strict';\r\n $scope.initialize = function () {\r\n\r\n if (!$scope.locationInfo.sideMenuData.subMenu) {\r\n $scope.goTo(\"/Paperwork/Reports\");\r\n return;\r\n }\r\n\r\n //There is a race condition when reloading the page\r\n //Check if the date selector is undefined, if it is then initialize it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.dateSelector)) {\r\n $scope.initializeDateSelector();\r\n }\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.displaySelector = true;\r\n $scope.dateSelector.selection = 0;\r\n $scope.dateSelector.hideAllDays = true;\r\n\r\n var report = $scope.getReportFromSubMenu($scope.locationInfo.sideMenuData.subMenu);\r\n\r\n if (!report) {\r\n $scope.goTo(\"/Paperwork/Reports\");\r\n return;\r\n }\r\n\r\n PaperworkReportsService\r\n .getPaperworkReportSites(report.Name, $scope.appInfo.webUser.CurrentAuthorization.CustContKey, false)\r\n .then(function (data) {\r\n if (data.Successful && !angular.isUndefinedOrNullOrEmpty(data.PaperworkReportSites)) {\r\n $scope.appInfo.paperwork.reports.PaperworkReportSites = data.PaperworkReportSites;\r\n $scope.appInfo.paperwork.reports.site = data.PaperworkReportSites[0];\r\n }\r\n else {\r\n $scope.modalifier.showSetupError();\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.getReportFromSubMenu = function (subMenu) {\r\n if ($scope.appInfo.paperwork.reports.paperworkReports) {\r\n return $scope.appInfo.paperwork.reports.paperworkReports\r\n .filter(function (item) {\r\n return item.Name === subMenu;\r\n })[0];\r\n }\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args) {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format) {\r\n if (!validatorSvc.executeValidations()) {\r\n return;\r\n }\r\n\r\n var report = $scope.getReportFromSubMenu($scope.locationInfo.sideMenuData.subMenu);\r\n\r\n if (!report) {\r\n $scope.goTo(\"/Paperwork/Reports\");\r\n return;\r\n }\r\n\r\n PaperworkService\r\n .ValidatePaperworkSiteDateForContact(\r\n $scope.appInfo.paperwork.reports.site.Key,\r\n $scope.urlFormatDate($scope.dateSelector.startDate, true),\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n false)\r\n .then(function (data) {\r\n var qs = \"reportName=\" + report.Name +\r\n \"&reportSubjectArea=\" + report.SubjectArea +\r\n \"&isStoreReport=\" + \"1\" +\r\n \"&RP-Site=\" + $scope.appInfo.paperwork.reports.site.Id +\r\n \"&RP-BegDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-EndDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-Language=\" + globalizationSvc.getLocale().slice(0, 2) +\r\n \"&RP-UseLatest=\" + \"0\";\r\n\r\n if (format) {\r\n reportingService.exportReport(qs, format);\r\n }\r\n else {\r\n reportingService.renderReport(qs);\r\n }\r\n });\r\n };\r\n })\r\n .controller('paperworkReportCtrl', function ($scope, $rootScope, WebFunctions, templates) {\r\n 'use strict';\r\n\r\n // controller destructor\r\n $scope.$on(\"$destroy\", function handler() {\r\n $rootScope.scopesToValidate = [];\r\n });\r\n\r\n $scope.initialize = function () {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.PaperworkEntry)) {\r\n $scope.goTo(\"/Home\");\r\n return;\r\n }\r\n\r\n if (!$scope.locationInfo.sideMenuData.subMenu) {\r\n $scope.goTo(\"/Paperwork/Reports\");\r\n return;\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 3;\r\n $scope.locationInfo.subMenuLocation = 31;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportsSideMenu\");\r\n };\r\n })\r\n .controller(\"paperworkSideMenuCtrl\", function ($scope, PaperworkService, $rootScope, $interval)\r\n {\r\n 'use strict';\r\n\r\n /*\r\n Use $interval to periodically refresh the paperwork lock.\r\n When the user navigates away from the page the $destroy listener is triggered to kill off the $interval.\r\n Likewise, the $interval is stopped when the paperwork is submitted in services.paperwork.\r\n This is paired with a query in CustomerRepository in EntWeb that wipes out Petronet Locks if they are > 20 minutes old.\r\n */\r\n\r\n var intervalPromise;\r\n var paperworkBatchKey = 0;\r\n var intervalTime = 120000;//Every 2 mins\r\n var beforeunloadEventCreated = false;\r\n\r\n function refreshLock() {\r\n if (paperworkBatchKey > 0) {\r\n console.log(\"Lock refreshed for Batch#\" + paperworkBatchKey);\r\n PaperworkService.RefreshPaperworkLock(paperworkBatchKey);\r\n }\r\n }\r\n\r\n $scope.startLockInterval = function (data) {\r\n $scope.stopLockInterval();\r\n intervalPromise = $interval(refreshLock, intervalTime);\r\n };\r\n\r\n $scope.stopLockInterval = function () {\r\n $interval.cancel(intervalPromise);\r\n };\r\n\r\n const beforeUnloadHandler = function (event) {\r\n // Remove the paperwork lock\r\n PaperworkService.RemovePaperworkLock(paperworkBatchKey, $scope.appInfo.webUser.CurrentAuthorization.Customer.ID);\r\n event.preventDefault();\r\n };\r\n\r\n //When we load a paperwork batch, detect if we need to periodically refresh the lock\r\n var pwLockListener = $rootScope.$on('event:PaperworkLoaded', function (event, viewOnly, data) {\r\n if (!viewOnly && !angular.isUndefinedOrNullOrEmpty(data)) {\r\n paperworkBatchKey = data;\r\n amplify.store(\"removeLockInfo\", {batchKey: paperworkBatchKey, custKey: $scope.appInfo.webUser.CurrentAuthorization.Customer.ID});\r\n $scope.startLockInterval();\r\n if (!beforeunloadEventCreated) {\r\n window.addEventListener(\"beforeunload\", beforeUnloadHandler);\r\n beforeunloadEventCreated = true;\r\n }\r\n }\r\n });\r\n\r\n //When paperwork is submitted stop the lock refresh\r\n var pwSubmitListener = $rootScope.$on('event:PaperworkSubmitted', function () {\r\n $scope.stopLockInterval();\r\n PaperworkService.RemovePaperworkLock(paperworkBatchKey, $scope.appInfo.webUser.CurrentAuthorization.Customer.ID);\r\n paperworkBatchKey = 0;\r\n });\r\n\r\n //When we navigate away from this page destroy the listeners and interval\r\n $scope.$on('$destroy', function () {\r\n $scope.stopLockInterval();\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.webUser)) {\r\n PaperworkService.RemovePaperworkLock(paperworkBatchKey, $scope.appInfo.webUser.CurrentAuthorization.Customer.ID);\r\n }\r\n pwLockListener();\r\n pwSubmitListener();\r\n paperworkBatchKey = 0;\r\n if (beforeunloadEventCreated) {\r\n window.removeEventListener(\"beforeunload\", beforeUnloadHandler);\r\n }\r\n });\r\n\r\n })\r\n .factory(\"setupNav\", [ function()\r\n {\r\n\r\n return {\r\n getRouterPath: getRouterPath,\r\n navigateToPage: navigateToPage,\r\n firstLastPage: firstLastPage,\r\n getSinglePath: getSinglePath,\r\n resolveCurrentPageMenuCode: resolveCurrentPageMenuCode\r\n };\r\n\r\n function getRouterPath (app, paperworkKey, isView){\r\n if (app && paperworkKey) {\r\n var path = '';\r\n var pathMode = !isView?'Enter':'View';\r\n \r\n if (app.DealerFormVersionKey > 0 && !app.MenuCode) {\r\n app.MenuCode = 'DRDFE';\r\n }\r\n\r\n switch (app.MenuCode) {\r\n case 'DREFD':\r\n path = `/Paperwork/${pathMode}PaperworkDeliveries/` + paperworkKey;\r\n break;\r\n case 'DRDFE':\r\n path = `/Paperwork/${pathMode}PaperworkDealerForms/` + paperworkKey;\r\n break;\r\n case 'DREGS':\r\n path = `/Paperwork/${pathMode}PaperworkTanks/` + paperworkKey;\r\n break;\r\n case 'DREGM':\r\n path = `/Paperwork/${pathMode}Paperwork/` + paperworkKey;\r\n break;\r\n default:\r\n path = '/Home';\r\n }\r\n \r\n return path;\r\n }\r\n }\r\n\r\n function getSinglePath(menuCode, paperworkKey, isView, noKey){\r\n \r\n if (menuCode && paperworkKey) {\r\n var path = '';\r\n var pathMode = !isView?'Enter':'View';\r\n if (noKey) paperworkKey = '';\r\n\r\n switch (menuCode) {\r\n case 'DREFD':\r\n path = `/Paperwork/${pathMode}PaperworkDeliveries/` + paperworkKey;\r\n break;\r\n case 'DRDFE':\r\n path = `/Paperwork/${pathMode}PaperworkDealerForms/` + paperworkKey;\r\n break;\r\n case 'DREGS':\r\n path = `/Paperwork/${pathMode}PaperworkTanks/` + paperworkKey;\r\n break;\r\n case 'DREGM':\r\n path = `/Paperwork/${pathMode}Paperwork/` + paperworkKey;\r\n break;\r\n default:\r\n path = '/Home';\r\n }\r\n \r\n return path;\r\n }\r\n }\r\n\r\n function navigateToPage(currentPage, apps, paperworkKey, isView, isPrevious){\r\n if (!currentPage || !apps || !paperworkKey)\r\n return;\r\n\r\n // find current page based on the menu code\r\n var menuOrder = apps.findIndex(function(el){\r\n return el.MenuCode === currentPage;\r\n });\r\n\r\n return !isPrevious? getRouterPath(apps[menuOrder + 1], paperworkKey, isView): getRouterPath(apps[menuOrder - 1], paperworkKey, isView);\r\n }\r\n \r\n function firstLastPage (menuCode, apps){\r\n var result = {isFirstPage: false, isLastPage: false};\r\n apps.find(function(item){if (item.DealerFormVersionKey > 0) item.MenuCode = 'DRDFE';});\r\n apps[0].isFirstPage = true;\r\n apps[apps.length - 1].isLastPage = true;\r\n\r\n apps.forEach(function(element){\r\n if (element.MenuCode === menuCode) {\r\n result.isFirstPage = element.isFirstPage;\r\n result.isLastPage = element.isLastPage;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n function resolveCurrentPageMenuCode(path){\r\n var result = '';\r\n \r\n if (path.indexOf('/EnterPaperwork/') > -1) result = 'DREGM';\r\n if (path.indexOf('/EnterPaperworkDeliveries/') > -1) result = 'DREFD';\r\n if (path.indexOf('/EnterPaperworkTanks/') > -1) result = 'DREGS';\r\n if (path.indexOf('/EnterPaperworkDealerForms/') > -1) result = 'DRDFE';\r\n\r\n return result;\r\n } \r\n }]\r\n);\r\n","/**\r\n * Created by jvitoria on 1/6/2015.\r\n */\r\nangular.module('pnReportSettings', ['core.ajax'])\r\n .directive('reportSettings', ['ReportSettingsService', 'templates', 'localizationSvc', function (ReportSettingsService, templates, localizationSvc)\r\n {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n showSettingsBar: '@',\r\n allowLoad: '@',\r\n allowSave: '@',\r\n allowExport: '@',\r\n allowCsv: '@',\r\n allowXml: '@',\r\n allowPdf: '@',\r\n allowExcel: '@',\r\n exportReportData: '&',\r\n saveOptions: '='\r\n },\r\n controller: function ($rootScope, $scope)\r\n {\r\n $scope.initReportSettings = function ()\r\n {\r\n $scope.exportOptions = [];\r\n if ($scope.allowCsv !== 'false')\r\n { $scope.exportOptions.push({id: '2', name: 'CSV'}); }\r\n if ($scope.allowXml !== 'false')\r\n { $scope.exportOptions.push({id: '7', name: 'XML'}); }\r\n if ($scope.allowPdf !== 'false')\r\n { $scope.exportOptions.push({id: '1', name: 'PDF'}); }\r\n if ($scope.allowExcel !== 'false')\r\n { $scope.exportOptions.push({id: '3', name: 'Excel'}); }\r\n if ($scope.exportOptions.length > 0)\r\n { $scope.selectedExportOptions = $scope.exportOptions[0].id; }\r\n\r\n if (!$rootScope.reportSettings)\r\n {\r\n $rootScope.reportSettings = {loadOptions: {}, saveOptions: {}};\r\n }\r\n };\r\n },\r\n\r\n link: function (scope, element, attrs) {\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"ReportSettingsLocalization\");\r\n if (!attrs.showSettingsBar)\r\n { attrs.showSettingsBar = true; }\r\n if (!attrs.allowLoad)\r\n { attrs.allowLoad = true; }\r\n if (!attrs.allowSave)\r\n { attrs.allowSave = true; }\r\n if (!attrs.allowExport)\r\n { attrs.allowExport = true; }\r\n\r\n scope.modalInfo = {saveSettingsName: ''};\r\n scope.showModalLoad = false;\r\n scope.showModalSave = false;\r\n scope.showModalConfirmSave = false;\r\n scope.selectedKey = 0;\r\n scope.selectedReportContactKey = 0;\r\n scope.selectedDescription = \"\";\r\n\r\n scope.canDelete = function (key)\r\n {\r\n return scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustContKey === key;\r\n };\r\n\r\n scope.exportData = function ()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(scope.exportReportData()))\r\n return;\r\n scope.exportReportData();\r\n };\r\n\r\n scope.applyReportSettings = function ()\r\n {\r\n if (scope.selectedKey === 0)\r\n {\r\n scope.$parent.notifier.show(localStrings.getLocalizedString(\"PleaseSelectReport\"), 'error');\r\n return;\r\n }\r\n scope.$root.reportSettings.unwrapReportSettings();\r\n scope.showModalLoad = false;\r\n };\r\n\r\n scope.deleteReportSettings = function (key)\r\n {\r\n var apply = function ()\r\n {\r\n ReportSettingsService.saveReportSettings\r\n (\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustKey,\r\n \"\",\r\n \"\",\r\n 8,\r\n scope.$root.reportSettings.reportKey,\r\n key\r\n ).then\r\n (function ()\r\n {\r\n scope.getReportSettings(true);\r\n });\r\n };\r\n\r\n scope.$parent.$parent.modalifier.confirm(localStrings.getLocalizedString(\"DeleteSelectedReportSettings\"), apply);\r\n };\r\n\r\n scope.getReportSettings = function (notify)\r\n {\r\n ReportSettingsService.getReportSettings(\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustKey,\r\n scope.$root.reportSettings.reportKey\r\n ).then\r\n (\r\n function (data)\r\n {\r\n scope.returnedReportSettings = data.ReportSettings;\r\n if (scope.returnedReportSettings.ARWebSettings.length === 0 && notify)\r\n scope.$parent.notifier.show(localStrings.getLocalizedString(\"SelectionCriteriaNoResults\"), 'warning');\r\n }\r\n );\r\n };\r\n\r\n scope.saveSettings = function ()\r\n {\r\n if (!scope.returnedReportSettings)\r\n scope.getReportSettings(false);\r\n scope.showModalSave = !scope.showModalSave;\r\n };\r\n\r\n scope.loadSettings = function ()\r\n {\r\n scope.getReportSettings(true);\r\n scope.showModalLoad = !scope.showModalLoad;\r\n };\r\n\r\n scope.saveConfirmReportSettings = function ()\r\n {\r\n scope.showModalSave = false;\r\n if (scope.selectedKey > 0 && scope.selectedDescription === scope.modalInfo.saveSettingsName)\r\n {\r\n scope.showModalConfirmSave = true;\r\n return;\r\n }\r\n scope.selectedKey = 0;\r\n scope.saveReportSettings();\r\n };\r\n\r\n scope.saveReportSettings = function ()\r\n {\r\n if (scope.selectedKey > 0)\r\n scope.deleteReportSettings(true);\r\n if (angular.isDefined(scope.$root.reportSettings.wrapReportSettings))\r\n {\r\n scope.$root.reportSettings.wrapReportSettings();\r\n ReportSettingsService.saveReportSettings\r\n (\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n scope.$parent.$parent.appInfo.webUser.CurrentAuthorization.CustKey,\r\n scope.modalInfo.saveSettingsName,\r\n scope.$root.reportSettings.saveOptions,\r\n 4,\r\n scope.$root.reportSettings.reportKey,\r\n -1\r\n );\r\n\r\n scope.showModalConfirmSave = false;\r\n scope.showModalSave = false;\r\n }\r\n else\r\n scope.$parent.notifier.show(localStrings.getLocalizedString(\"ProcessFailedError\"), 'error');\r\n };\r\n\r\n scope.selectKey = function (item)\r\n {\r\n scope.selectedKey = item.Key;\r\n scope.selectedDescription = item.Description;\r\n scope.modalInfo.saveSettingsName = item.Description;\r\n scope.modalInfo.saveSettingsKey = item.Key;\r\n\r\n scope.$root.reportSettings.loadOptions = angular.fromJson(item.Options);\r\n };\r\n },\r\n templateUrl: templates.getTemplate(\"ReportSettings\") //'reportSettings/reportSettings.tpl.html'\r\n };\r\n }])\r\n\r\n .factory('ReportSettingsService', function ($q, apiService)\r\n {\r\n return {\r\n getReportSettings: function (custKey, reportKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetReportSettings/',\r\n data: {\r\n CustKey: custKey,\r\n RptKey: reportKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.ErrorMessages);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n saveReportSettings: function (custContKey, custKey, description, options, recStatus, reportKey, settingsKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/saveReportSettings/',\r\n data: {\r\n CustContKey: custContKey,\r\n CustKey: custKey,\r\n Description: description,\r\n Options: angular.toJson(options, false),\r\n RecStatus: recStatus,\r\n ReportKey: reportKey,\r\n SettingsKey: settingsKey\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.ErrorMessages);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n });\r\n","/**\r\n * Created by rhampton on 2/26/14.\r\n */\r\nangular.module(\"pnAccountPayments\", ['ngSanitize', 'core.objects', 'services.payments', 'core.directives'])\r\n .config(function ($provide, $routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Account/Payments/MakeAPayment\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"MakeAPayment\"),\r\n controller: \"MakeAPaymentCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/MakeAPayment/:paymentKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"MakeAPayment\"),\r\n controller: \"MakeAPaymentCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/AccountVerifyPayment\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AccountVerifyPayment\"),\r\n controller: \"VerifyPaymentCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Payments/AccountConfirmPayment\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AccountConfirmPayment\"),\r\n controller: \"ConfirmPaymentCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/ViewScheduledPayments\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewScheduledPayments\"),\r\n controller: \"ScheduledPaymentHistoryCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/ViewPaymentAccounts\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewPaymentAccounts\"),\r\n controller: \"PaymentAccountsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/EditPaymentAccount\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EditPaymentAccount\"),\r\n controller: \"EditAccountCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/EditPaymentAccount/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EditPaymentAccount\"),\r\n controller: \"EditAccountCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/VerifyPaymentAccount\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"VerifyPaymentAccount\"),\r\n controller: \"VerifyAccountCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/ConfirmPaymentAccount/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ConfirmPaymentAccount\"),\r\n controller: \"ConfirmAccountCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/PaymentAccountVerification/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentAccountVerification\"),\r\n controller: \"AccountVerificationCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/PaymentAccountVerificationVerify/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentAccountVerificationVerify\"),\r\n controller: \"AccountVerificationVerificationCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/PaymentAccountVerificationConfirmation/:paymentAccountKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentAccountVerificationConfirmation\"),\r\n controller: \"AccountVerificationConfirmationCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/TermsAndConditions/\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TermsAndConditions\"),\r\n controller: \"TermsAndConditionsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Account/Payments/PaymentAccountVerificationFailure/\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentAccountVerificationFailure\"),\r\n controller: \"AccountVerificationFailCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n ;\r\n })\r\n .controller(\"TermsAndConditionsCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentService, validatorSvc, WebFunctions, templates, localStrings)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenuData = {};\r\n if ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPayments))\r\n $scope.locationInfo.sideMenuData.subMenu = '4';\r\n else\r\n $scope.locationInfo.sideMenuData.subMenu = '5';\r\n\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n PaymentService.getTermsAndConditions($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms).then(function (data)\r\n {\r\n $scope.theTermsAndConditions = data;\r\n });\r\n };\r\n\r\n $scope.declineTerms = function ()\r\n {\r\n $scope.goTo(\"/Home\");\r\n };\r\n\r\n $scope.acceptTerms = function ()\r\n {\r\n if (!$scope.agreeToTerms)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PleaseAcceptTermsConditions\"), 'error');\r\n return;\r\n }\r\n\r\n PaymentService.acceptTermsAndConditions(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings = data.CustomerWebPaymentSettings;\r\n if ($scope.checkCurrentUserPermission($scope.webFunctions.AddandEditWebPayments) &&\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.ActiveAccountCount > 0)\r\n $scope.goTo('/Account/Payments/ViewScheduledPayments');\r\n else if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.ActiveAccountCount > 0)\r\n $scope.goTo('/Account/Payments/ViewPaymentAccounts');\r\n else\r\n $scope.goTo('/Account/Payments/EditPaymentAccount');\r\n });\r\n };\r\n\r\n })\r\n .controller(\"MakeAPaymentCtrl\", function ($scope, $routeParams, PaymentService, validatorSvc, WebFunctions, templates, localStrings, localizationSvc, globalizationSvc)\r\n {\r\n 'use strict';\r\n $scope.paymentKey = 0;\r\n $scope.customText = \"\";\r\n $scope.kendo = {};\r\n\r\n $scope.kendo.invoicesGrid = {};\r\n $scope.kendo.invoicesGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"Selected\",\r\n width: 35,\r\n attributes: {class: \"alignCenter\"},\r\n filterable: false,\r\n sortable: false,\r\n headerTemplate: \"\",\r\n template: \"\"\r\n },\r\n {\r\n field: \"DueDate1\",\r\n title: localStrings.getLocalizedString(\"DueDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Balance\",\r\n title: localStrings.getLocalizedString(\"AmtDue\"),\r\n format: \"{0:c}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"RefNo\",\r\n title: localStrings.getLocalizedString(\"InvoiceNum\"),\r\n attributes: {class: \"alignLeftt\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"InvoiceDate\",\r\n title: localStrings.getLocalizedString(\"InvoiceDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Amount\",\r\n title: localStrings.getLocalizedString(\"OrigAmt\"),\r\n format: \"{0:c}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.invoicesGridInit = function (ds)\r\n {\r\n ds.each(function (charge)\r\n {\r\n charge.DueDate1 = Date.create(charge.DueDate1).format('{MM}/{dd}/{yyyy}');\r\n charge.InvoiceDate = Date.create(charge.InvoiceDate).format('{MM}/{dd}/{yyyy}');\r\n charge.Balance = globalizationSvc.formatCurrency(charge.Balance);\r\n charge.Amount = globalizationSvc.formatCurrency(charge.Amount);\r\n });\r\n\r\n $scope.kendo.invoicesGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.invoicesGridDS.read();\r\n $scope.kendo.invoicesGrid.dataSource.data($scope.kendo.invoicesGridDS.data());\r\n };\r\n $scope.kendo.creditsGrid = {};\r\n $scope.kendo.creditsGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"Selected\",\r\n width: 35,\r\n attributes: {class: \"alignCenter\"},\r\n filterable: false,\r\n sortable: false,\r\n headerTemplate: \"\",\r\n template: \"\"\r\n },\r\n {\r\n field: \"RefDate\",\r\n title: localStrings.getLocalizedString(\"Date\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"TranCodeDescription\",\r\n title: localStrings.getLocalizedString(\"PaymentType\"),\r\n attributes: {class: \"alignLeftt\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"UnAppAmount\",\r\n title: localStrings.getLocalizedString(\"Amt\"),\r\n format: \"{0:c}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"RefNo\",\r\n title: localStrings.getLocalizedString(\"ReferenceNum\"),\r\n attributes: {class: \"alignLeftt\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.creditsGridInit = function (ds)\r\n {\r\n ds.each(function (charge)\r\n {\r\n charge.RefDate = Date.create(charge.RefDate).format('{MM}/{dd}/{yyyy}');\r\n charge.UnAppAmount = globalizationSvc.formatCurrency(charge.UnAppAmount);\r\n });\r\n\r\n $scope.kendo.creditsGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.creditsGridDS.read();\r\n $scope.kendo.creditsGrid.dataSource.data($scope.kendo.creditsGridDS.data());\r\n };\r\n\r\n async function unlockPaymentsAsync (event) {\r\n let localLockData = amplify.store('paymentLockData');\r\n let headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authentication', amplify.store('pnuser-token'));\r\n\r\n const body = JSON.stringify({CustContKey: localLockData.CustContKey,EmailAddress: localLockData.EmailAddress,CustomerKey: localLockData.CustomerKey});\r\n \r\n await fetch('../api/UnLockCustomerPayments/', {method: 'POST', headers: headers, body: body, keepalive: true});\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.appInfo.webPaymentLocked = false;\r\n $scope.appInfo.paymentControlOptions = {\r\n format: 'c',\r\n culture: globalizationSvc.getLocale(),\r\n spinners: false\r\n };\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n PaymentService.lockPayments($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!window.listeners || window.listeners.beforeunload.count() === 0) {\r\n window.addEventListener('beforeunload', unlockPaymentsAsync, false);\r\n }\r\n $scope.initializePart2();\r\n },\r\n function (err)\r\n {\r\n if (amplify.store('paymentLockData')) {\r\n if (!window.listeners || window.listeners.beforeunload.count() === 0) {\r\n window.addEventListener('beforeunload', unlockPaymentsAsync, false);\r\n }\r\n $scope.initializePart2();\r\n } else {\r\n $scope.appInfo.webPaymentLocked = true;\r\n }\r\n }\r\n );\r\n \r\n };\r\n\r\n $scope.initializePart2 = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.invoiceWarning = false;\r\n\r\n if ($routeParams.paymentKey)\r\n {\r\n $scope.paymentKey = $routeParams.paymentKey.toNumber();\r\n }\r\n\r\n if ($scope.paymentKey < 0 && !angular.isUndefinedOrNullOrEmpty($scope.appInfo.webPayment))\r\n {\r\n //You should only get here by clicking the change button on verify payment\r\n //We reset invoice selection if payment type is select invoices\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === \"2\") {\r\n var invoicesValueArr = $scope.InvoiceValues();\r\n $scope.selctedInvoicesValue = invoicesValueArr[0];\r\n $scope.selctedInvoicesValueDisplay = invoicesValueArr[1];\r\n }\r\n $scope.setUpView();\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Status !== 0)\r\n {\r\n $scope.goTo(\"/Account/Payments/AccountConfirmPayment\");\r\n }\r\n } else\r\n {\r\n $scope.appInfo.webPayment = {};\r\n $scope.appInfo.webPayment.WebPaymentWithContext = {};\r\n PaymentService.getPayment($scope.appInfo.webUser.CurrentAuthorization.CustKey, $scope.paymentKey).then(function (data)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext = data;\r\n\r\n if (parseInt($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType, 10) === 2) {\r\n $scope.lockInvoices();\r\n $scope.appInfo.webPayment.WebPaymentWithContext = data;\r\n }\r\n\r\n PaymentService.getScheduledPayments(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey, \"\", \"01/01/1900\", \"01/01/2079\", true, false, false\r\n ).then(function (data)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.HasPendingPayments = data.CustomerScheduledPayments.any({ Status: 0 });\r\n $scope.appInfo.webPayment.WebPaymentWithContext.HasPendingBudgetPayments = data.CustomerScheduledPayments.any({ Status: 0, PaymentType: 4 }) && !data.CustomerScheduledPayments.any({ Key: $scope.paymentKey, Status: 0, PaymentType: 4 });\r\n });\r\n\r\n $scope.setUpView();\r\n\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Status !== 0)\r\n $scope.goTo(\"/Account/Payments/AccountConfirmPayment\");\r\n });\r\n }\r\n\r\n $scope.selctedInvoicesValue = 0.00;\r\n $scope.selctedCreditsValue = 0.00;\r\n $scope.totalInvoiceAmount = 0.00;\r\n\r\n $scope.getWebProfileMessage(18);\r\n };\r\n\r\n $scope.setPaymentType = function (value)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = value;\r\n };\r\n\r\n $scope.setUpView = function ()\r\n {\r\n var minDateTime = new Date(\"0001-01-01T00:00:00\".replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n var lastStatementDate = new Date($scope.appInfo.webPayment.WebPaymentWithContext.LastStatementDate.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n $scope.isStatementCustomer = $scope.appInfo.webPayment.WebPaymentWithContext.IsStatementCustomer;\r\n $scope.isStatementCustomer = lastStatementDate !== minDateTime;\r\n $scope.isStatementCustomer = $scope.isStatementCustomer && $scope.appInfo.webPayment.WebPaymentWithContext.LastStatementAmount > 0;\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Key === 0)\r\n {\r\n // we keep Budget Balance payment type when changing budget web payment\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType !== \"4\") {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = ($scope.isStatementCustomer && $scope.appInfo.webPayment.WebPaymentWithContext.HasUnpaidStatement) ? '1' : '0';\r\n }\r\n }\r\n\r\n $scope.isBudgetCustomer = $scope.appInfo.webPayment.WebPaymentWithContext.IsBudgetCustomer;\r\n $scope.isBBEnabled = $scope.appInfo.webPayment.WebPaymentWithContext.IsBBEnabled;\r\n // we do not want to display negative baudget balance\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance.toNumber() < 0) {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance = '0.00';\r\n }\r\n\r\n $scope.isInvoiceCustomer = $scope.appInfo.webPayment.WebPaymentWithContext.IsOpenItemCustomer && $scope.appInfo.webPayment.WebPaymentWithContext.Invoices.length > 0;\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.IsPrepaidCustomer)\r\n {\r\n $scope.isStatementCustomer = false;\r\n $scope.isInvoiceCustomer = false;\r\n }\r\n $scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate = $scope.formatDate($scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate);\r\n $scope.appInfo.webPayment.WebPaymentWithContext.WebMaxEFTDate = $scope.formatDate($scope.appInfo.webPayment.WebPaymentWithContext.WebMaxEFTDate);\r\n\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Key === 0)\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate = $scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate;\r\n }\r\n else\r\n {\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Status < 2)\r\n {\r\n if (new Date($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate) < new Date($scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate))\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate = $scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate;\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PaymentDateNoLongerValid\"), 'warning');\r\n }\r\n }\r\n else\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate = $scope.formatDate($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate);\r\n }\r\n\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount.toNumber() || 0;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n $scope.formatCurrencies();\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === 4) {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = '4';\r\n }\r\n $scope.viewSetupComplete = true;\r\n };\r\n\r\n $scope.InvoiceValues = function ()\r\n {\r\n var theValue = 0.00;\r\n var theGrossValue = 0.00;\r\n var theDiscount = 0.00;\r\n var paymentDate;\r\n var termsDiscount;\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.kendo.invoicesGrid.dataSource))\r\n angular.forEach($scope.kendo.invoicesGrid.dataSource.data(), function (charge, index)\r\n {\r\n if (charge.Selected)\r\n {\r\n paymentDate = new Date($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentDate);\r\n termsDiscount = 0.00;\r\n\r\n if (paymentDate <= new Date(charge.TermsDiscountDate))\r\n {\r\n termsDiscount = charge.TermsDiscount;\r\n }\r\n else if (paymentDate <= new Date(charge.TermsDiscountDate2))\r\n {\r\n termsDiscount = charge.TermsDiscount2;\r\n }\r\n else if (paymentDate <= new Date(charge.TermsDiscountDate3))\r\n {\r\n termsDiscount = charge.TermsDiscount3;\r\n }\r\n else if (paymentDate <= new Date(charge.TermsDiscountDate4))\r\n {\r\n termsDiscount = charge.TermsDiscount4;\r\n }\r\n else if (paymentDate <= new Date(charge.TermsDiscountDate5))\r\n {\r\n termsDiscount = charge.TermsDiscount5;\r\n }\r\n else if (paymentDate <= new Date(charge.TermsDiscountDate6))\r\n {\r\n termsDiscount = charge.TermsDiscount6;\r\n }\r\n\r\n theGrossValue = theGrossValue + parseFloat(globalizationSvc.convertStringToNumber(charge.Balance));\r\n\r\n if (termsDiscount !== 0.00)\r\n {\r\n theDiscount = theDiscount + termsDiscount;\r\n theValue = theValue + (Math.round((parseFloat(globalizationSvc.convertStringToNumber(charge.Balance)) - termsDiscount) * 10000) / 10000);\r\n }\r\n else\r\n {\r\n theValue = theValue + parseFloat(globalizationSvc.convertStringToNumber(charge.Balance));\r\n }\r\n }\r\n });\r\n\r\n $scope.selctedInvoicesValue = theValue;\r\n $scope.selctedInvoicesGrossValue = theGrossValue;\r\n $scope.selctedInvoicesGrossValueDisplay = globalizationSvc.formatCurrency(theGrossValue);\r\n $scope.selctedInvoicesDiscountValue = theDiscount;\r\n $scope.selctedInvoicesDiscountValueDisplay = globalizationSvc.formatCurrency(theDiscount);\r\n\r\n theValue = 0;\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.kendo.creditsGrid.dataSource))\r\n angular.forEach($scope.kendo.creditsGrid.dataSource.data(), function (credit, index)\r\n {\r\n if (credit.Selected)\r\n {\r\n theValue = theValue + parseFloat(globalizationSvc.convertStringToNumber(credit.UnAppAmount));\r\n }\r\n });\r\n\r\n $scope.selctedCreditsValue = parseFloat(theValue);\r\n $scope.selctedCreditsValueDisplay = globalizationSvc.formatCurrency(theValue);\r\n\r\n $scope.totalInvoiceAmount = Math.round(($scope.selctedInvoicesValue - $scope.selctedCreditsValue) * 10000) / 10000;\r\n if ($scope.totalInvoiceAmount < 0)\r\n {\r\n $scope.totalInvoiceAmount = 0.0;\r\n }\r\n $scope.totalInvoiceAmountDisplay = globalizationSvc.formatCurrency(Math.round(($scope.selctedInvoicesValue - $scope.selctedCreditsValue) * 10000) / 10000);\r\n\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.totalInvoiceAmount;\r\n return [$scope.selctedInvoicesValue, globalizationSvc.formatCurrency($scope.selctedInvoicesValue)];\r\n };\r\n\r\n $scope.getCssClasses = function (ngModelController)\r\n {\r\n return {\r\n error: ngModelController && ngModelController.$invalid && ngModelController.$dirty,\r\n success: ngModelController && ngModelController.$valid && ngModelController.$dirty\r\n };\r\n };\r\n\r\n $scope.showError = function (ngModelController, error)\r\n {\r\n return ngModelController.$error[error];\r\n };\r\n\r\n $scope.setScheduledPaymentAmount = function () {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = globalizationSvc.convertStringToNumber($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay);\r\n };\r\n\r\n $scope.verifyPayment = function ()\r\n {\r\n // pay by invoice\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === \"2\") {\r\n //set selected invoices\r\n var grid = $scope.kendo.invoicesGrid;\r\n\r\n //set invoices that are selected in grid\r\n grid.dataItems().forEach(function (item) {\r\n var invoice = $scope.appInfo.webPayment.WebPaymentWithContext.Invoices.find({Key: item.Key});\r\n\r\n if (angular.isDefined(invoice)) {\r\n invoice.Selected = item.Selected;\r\n }\r\n\r\n });\r\n\r\n //set selected credits\r\n var gridCr = $scope.kendo.creditsGrid;\r\n\r\n //set invoices that are selected in grid\r\n gridCr.dataItems().forEach(function (item) {\r\n var credit = $scope.appInfo.webPayment.WebPaymentWithContext.Credits.find({Key: item.Key});\r\n\r\n if (angular.isDefined(credit)) {\r\n credit.Selected = item.Selected;\r\n }\r\n\r\n });\r\n }\r\n\r\n //update who made this payment\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CustKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Key === 0)\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreatedByCustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.LastModifiedByCustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Status = 0;\r\n //CustPmtAcctKey has been set to a string from the kendo accounts dropdown, so cast it back to a number\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CustPmtAcctKey = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CustPmtAcctKey.toNumber();\r\n\r\n //handle the selected payment type\r\n switch ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType)\r\n {\r\n case '1':\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.appInfo.webPayment.WebPaymentWithContext.LastStatementAmount;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n break;\r\n\r\n case '2':\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreditAmount = $scope.selctedCreditsValue;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.GrossAmount = $scope.selctedInvoicesGrossValue;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.totalInvoiceAmount;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.DiscountAmount = $scope.selctedInvoicesDiscountValue;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreditAmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreditAmount);\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.GrossAmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.GrossAmount);\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.DiscountAmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.DiscountAmount);\r\n break;\r\n\r\n case '3':\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.appInfo.webPayment.WebPaymentWithContext.AccountBalance;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n break;\r\n\r\n case '4':\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = $scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n break;\r\n\r\n default:\r\n var amount = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount.toNumber() || 0;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount = amount;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n break;\r\n }\r\n\r\n //ensure that payment amount is greater than 0\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n //passed all tests; continue with process\r\n $scope.$cancelPromptToSave();\r\n $scope.goTo(\"/Account/Payments/AccountVerifyPayment\");\r\n };\r\n\r\n $scope.paymentIsValid = function ()\r\n {//Return true if there are errors.\r\n\r\n var elem = $('#paymentSelection');\r\n elem.css(\"border\", \"\");\r\n\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount &&\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount !== '')\r\n {\r\n var theValue = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount.toString().replace(/$/g, \"\");\r\n theValue = parseFloat(theValue);\r\n if (theValue > 0)\r\n return false;\r\n }\r\n\r\n elem.css('border', '1px solid red');\r\n\r\n return true;\r\n };\r\n\r\n var paymentDateValidation =\r\n {\r\n _localStrings: localizationSvc.getCachedLocalizationsContainer(\"AccountPaymentsLocalization\"),\r\n name: 'validateLiftDate',\r\n validationMessage: '',\r\n validationMessageWrn: '',\r\n validatorError: function (liftDateTime, parms)\r\n {\r\n var isValid = true;\r\n var minDate = new Date($scope.appInfo.webPayment.WebPaymentWithContext.WebMinEFTDate);\r\n var maxDate = new Date($scope.appInfo.webPayment.WebPaymentWithContext.WebMaxEFTDate);\r\n var liftDate = new Date(liftDateTime);\r\n\r\n if (Date.create(liftDateTime).format('{MM}/{dd}/{yyyy}') === \"Invalid Date\" || (liftDate < minDate) || (liftDate > maxDate)) {\r\n /*this.validationMessage = \"Please select or enter a payment date between \" +\r\n minDate.format('{MM}/{dd}/{yyyy}') + \" and \" +\r\n maxDate.format('{MM}/{dd}/{yyyy}') + \".\";*/\r\n\r\n var replacementParms = [ minDate.format('{MM}/{dd}/{yyyy}'), maxDate.format('{MM}/{dd}/{yyyy}')];\r\n\r\n this.validationMessage = paymentDateValidation._localStrings.getLocalizedString(\"PaymentDateValidationMsg\", replacementParms);\r\n\r\n return false;\r\n }\r\n\r\n return isValid;\r\n },\r\n validatorWarning: function (liftDateTime, parms)\r\n {\r\n var hasWarning = false;\r\n return !hasWarning;\r\n }\r\n };\r\n\r\n $scope.validatePaymentDate = new pdi.ng.validate.PdiValidation(paymentDateValidation);\r\n\r\n async function unlockInvoicesAsync (event) {\r\n let localLockData = amplify.store('paymentLockData');\r\n let headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authentication', amplify.store('pnuser-token'));\r\n\r\n const body = JSON.stringify({CustContKey: localLockData.CustContKey,EmailAddress: localLockData.EmailAddress,CustomerKey: localLockData.CustomerKey});\r\n \r\n await fetch('../api/UnLockCustomerInvoices/', {method: 'POST', headers: headers, body: body, keepalive: true});\r\n }\r\n\r\n $scope.lockInvoices = function ()\r\n {\r\n PaymentService.lockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!window.listeners || window.listeners.beforeunload.count() === 0) {\r\n window.addEventListener('beforeunload', unlockInvoicesAsync, false);\r\n }\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = '2';\r\n $scope.invoicesLocked = true;\r\n $scope.kendo.invoicesGridInit.delay(10, $scope.appInfo.webPayment.WebPaymentWithContext.Invoices);\r\n $scope.kendo.creditsGridInit.delay(10, $scope.appInfo.webPayment.WebPaymentWithContext.Credits);\r\n },\r\n function (err)\r\n {\r\n if (amplify.store('paymentLockData')) {\r\n if (!window.listeners || window.listeners.beforeunload.count() === 0) {\r\n window.addEventListener('beforeunload', unlockInvoicesAsync, false);\r\n }\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = '2';\r\n $scope.invoicesLocked = true;\r\n $scope.kendo.invoicesGridInit.delay(10, $scope.appInfo.webPayment.WebPaymentWithContext.Invoices);\r\n $scope.kendo.creditsGridInit.delay(10, $scope.appInfo.webPayment.WebPaymentWithContext.Credits);\r\n } else {\r\n $scope.invoicesLocked = false;\r\n $scope.invoiceWarning = true;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = '0';\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.unlockInvoices = function (paymentType)\r\n {\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType !== '2')\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = paymentType;\r\n }\r\n PaymentService.unlockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n $scope.invoicesLocked = false;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType = paymentType;\r\n };\r\n\r\n $scope.checkAll = function (grid, id)\r\n {\r\n var checked = document.getElementById(id).checked || false;\r\n grid.dataItems().forEach(function (item)\r\n {\r\n item.Selected = checked;\r\n });\r\n };\r\n\r\n $scope.formatCurrencies = function () { \r\n var paymentsInfo = $scope.appInfo.webPayment.WebPaymentWithContext;\r\n\r\n var lastStmtAmt = paymentsInfo.LastStatementAmount;\r\n var acctBalance = paymentsInfo.AccountBalance;\r\n var budgetBalance = paymentsInfo.BudgetBalance;\r\n\r\n paymentsInfo.LastStatementAmountDisplay = globalizationSvc.formatCurrency(lastStmtAmt);\r\n paymentsInfo.AccountBalanceDisplay = globalizationSvc.formatCurrency(acctBalance);\r\n paymentsInfo.BudgetAmountDisplay = globalizationSvc.formatCurrency(budgetBalance);\r\n };\r\n\r\n $scope.$on('$destroy', function () {\r\n window.removeEventListener('beforeunload', unlockPaymentsAsync, false);\r\n window.removeEventListener('beforeunload', unlockInvoicesAsync, false);\r\n });\r\n })\r\n .controller(\"VerifyPaymentCtrl\", function ($scope, $http, $q, PaymentService, WebFunctions, templates, globalizationSvc)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments) || !$scope.paymentsEnabled())\r\n $scope.goTo(\"/Home\"); \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n $scope.getWebProfileMessage(18);\r\n $scope.isBudgetPayment = $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === \"4\";\r\n $scope.isBudgetCustomer = $scope.appInfo.webPayment.WebPaymentWithContext.IsBudgetCustomer;\r\n $scope.isBBEnabled = $scope.appInfo.webPayment.WebPaymentWithContext.IsBBEnabled;\r\n $scope.budgetBalanceChanged = false;\r\n };\r\n $scope.confirmPayment = function () {\r\n //validate budget billing state if budget payment\r\n if ($scope.isBudgetPayment) {\r\n PaymentService.getBudgetPaymentContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data) {\r\n $scope.isBudgetCustomer = data.IsBudgetCustomer;\r\n $scope.isBBEnabled = data.IsBBEnabled;\r\n $scope.budgetBalanceChanged = $scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance !== data.BudgetBalance;\r\n if ($scope.isBBEnabled && $scope.isBudgetCustomer && !$scope.budgetBalanceChanged) {\r\n $scope.savePayment();\r\n }\r\n }\r\n );\r\n } else {\r\n $scope.savePayment();\r\n }\r\n };\r\n $scope.savePayment = function () {\r\n //create variable of webpayment data\r\n var webPayment = $scope.appInfo.webPayment;\r\n\r\n //for each invoice, convert the string balance to a number so it properly gets sent to controller\r\n webPayment.WebPaymentWithContext.Invoices.forEach(function (item) {\r\n item.Balance = (globalizationSvc.convertStringToNumber(item.Balance)); \r\n });\r\n\r\n //for each credit, convert unappAmmount and amount to numbers\r\n webPayment.WebPaymentWithContext.Credits.forEach(function (item) {\r\n item.Amount = (globalizationSvc.convertStringToNumber(item.Amount));\r\n item.UnAppAmount = (globalizationSvc.convertStringToNumber(item.UnAppAmount));\r\n });\r\n\r\n PaymentService.savePayment(webPayment.WebPaymentWithContext).then(\r\n function (data) {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment = data.CustomerScheduledPayment;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.Invoices = data.Invoices;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.Credits = data.Credits;\r\n $scope.goTo(\"/Account/Payments/AccountConfirmPayment\");\r\n PaymentService.unLockPayments($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n PaymentService.unlockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n amplify.store('paymentLockData', null);\r\n }\r\n );\r\n };\r\n $scope.changePayment = function ()\r\n {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.Invoices.forEach(function (item) {\r\n item.Selected = false;\r\n });\r\n\r\n $scope.appInfo.webPayment.WebPaymentWithContext.Credits.forEach(function (item) {\r\n item.Selected = false;\r\n });\r\n\r\n PaymentService.unLockPayments($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n PaymentService.unlockInvoices($scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey);\r\n\r\n amplify.store('paymentLockData', null);\r\n\r\n PaymentService.getBudgetPaymentContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data) {\r\n $scope.appInfo.webPayment.WebPaymentWithContext.IsBudgetCustomer = data.IsBudgetCustomer;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.IsBBEnabled = data.IsBBEnabled;\r\n $scope.appInfo.webPayment.WebPaymentWithContext.BudgetBalance = data.BudgetBalance;\r\n }\r\n );\r\n $scope.goTo(\"/Account/Payments/MakeAPayment/-1\");\r\n };\r\n })\r\n .controller(\"ConfirmPaymentCtrl\", function ($scope, $http, $q, PaymentService, WebFunctions, templates, globalizationSvc)\r\n {\r\n 'use strict';\r\n //Once you come bace from saving the payment type will be an integer not a string so drop the quotes.\r\n\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.AmountDisplay = globalizationSvc.formatCurrency($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.Amount);\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n if ($scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.PaymentType === '2')\r\n $scope.appInfo.webPayment.WebPaymentWithContext.CustomerScheduledPayment.CreditAmount = $scope.reCalculateCreditValues();\r\n $scope.getWebProfileMessage(21);\r\n };\r\n $scope.reCalculateCreditValues = function ()\r\n {\r\n var theValue = 0;\r\n angular.forEach($scope.appInfo.webPayment.WebPaymentWithContext.Credits, function (credit, index)\r\n {\r\n if (credit.Selected)\r\n theValue = parseFloat(theValue) + parseFloat(credit.UnAppAmount);\r\n });\r\n return theValue;\r\n };\r\n\r\n })\r\n .controller(\"ScheduledPaymentHistorySideMenuCtrl\", function ($scope, $http, $q, PaymentService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.paymentHistory = {\r\n scheduled: 'true',\r\n processed: 'false',\r\n canceled: 'false'\r\n };\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 13;\r\n PaymentService.getScheduledPaymentHistoryContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.locationInfo.sideMenuData.paymentHistory = {\r\n scheduled: true,\r\n processed: false,\r\n canceled: false,\r\n accounts: data.CustomerPaymentAccounts\r\n };\r\n });\r\n };\r\n })\r\n .controller(\"ScheduledPaymentHistoryCtrl\", function ($scope, $http, $q, PaymentService, WebFunctions, $filter, templates, validatorSvc, localStrings, globalizationSvc)\r\n {\r\n 'use strict';\r\n\r\n $scope.scheduledPayments = [];\r\n $scope.kendo = {};\r\n $scope.kendo.pmntGrid = {};\r\n $scope.kendo.pmntGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"Account\"),\r\n field: \"CustPmtAcctDescription\",\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Amount\",\r\n title: localStrings.getLocalizedString(\"Amount\"),\r\n width: 100,\r\n format: \"{0:c}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"FormattedDate\",\r\n title: localStrings.getLocalizedString(\"PaymentDate\"),\r\n width: 100,\r\n format: \"{0:MM/dd/yyyy}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"StatusDescription\",\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n width: 75,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"FormattedActivityDate\",\r\n title: localStrings.getLocalizedString(\"LastActivity\"),\r\n width: 100,\r\n format: \"{0:MM/dd/yyyy}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Key\",\r\n title: localStrings.getLocalizedString(\"Confirmation\"),\r\n width: 90,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Created\",\r\n title: localStrings.getLocalizedString(\"Entered\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {mode: \"row\", extra: false},\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.pmntGridInit = function ()\r\n {\r\n $scope.scheduledPayments.each(function (payment) {\r\n payment.Amount = globalizationSvc.formatNumeric(payment.Amount);\r\n });\r\n \r\n $scope.kendo.pmntGridDS = new kendo.data.DataSource({\r\n data: $scope.scheduledPayments,\r\n schema: {\r\n model: {\r\n fields: {\r\n CustPmtAcctDescription: {\r\n editable: false\r\n },\r\n Amount: {\r\n editable: false\r\n },\r\n FormattedDate: {\r\n editable: false\r\n },\r\n StatusDescription: {\r\n editable: false\r\n },\r\n FormattedActivityDate: {\r\n editable: false\r\n },\r\n Key: {\r\n editable: false\r\n },\r\n Created: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n batch: true\r\n });\r\n\r\n $scope.kendo.pmntGridDS.read();\r\n $scope.kendo.pmntGrid.dataSource.data($scope.kendo.pmntGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPayments))\r\n {\r\n $scope.goTo(\"/Account/Payments/ViewPaymentAccounts\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\"); //'account/payments/paymentSideMenu.tpl.html';\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n $scope.getWebProfileMessage(19);\r\n $scope.scheduledPayments = [];\r\n $scope.predicate = 'FormattedDate';\r\n $scope.reverse = true;\r\n $scope.cancelPaymentKey = -1;\r\n $scope.cancelConfirm = false;\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n if (!($scope.locationInfo.sideMenuData.paymentHistory.scheduled ||\r\n $scope.locationInfo.sideMenuData.paymentHistory.processed ||\r\n $scope.locationInfo.sideMenuData.paymentHistory.canceled))\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"AtLeastOneOption\"), 'error');\r\n return;\r\n }\r\n\r\n PaymentService.getScheduledPayments($scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.paymentHistory.selectedAccount,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate,\r\n $scope.locationInfo.sideMenuData.paymentHistory.scheduled,\r\n $scope.locationInfo.sideMenuData.paymentHistory.processed,\r\n $scope.locationInfo.sideMenuData.paymentHistory.canceled).then(function (data)\r\n {\r\n if (data.CustomerScheduledPayments.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"ScheduledPaymentsHist\"));\r\n }\r\n $scope.scheduledPayments = data.CustomerScheduledPayments;\r\n angular.forEach($scope.scheduledPayments, function (element)\r\n {\r\n element.Amount = globalizationSvc.formatCurrency(element.Amount);\r\n element.FormattedDate = $filter('date')(element.PaymentDate, 'MM/dd/yyyy');\r\n element.FormattedActivityDate = $filter('date')(element.LastModifiedDateTime, 'MM/dd/yyyy');\r\n element.FormattedCreatedDate = $filter('date')(element.CreatedDateTime, 'MM/dd/yyyy');\r\n element.Created = element.FormattedCreatedDate + ' ' + localStrings.getLocalizedString(\"By\") + ' ' + element.CreatedByCustContEmailAddress;\r\n });\r\n\r\n $scope.kendo.pmntGridInit();\r\n });\r\n };\r\n\r\n $scope.confirmCancelPayment = function (paymentKey)\r\n {\r\n $scope.cancelPaymentKey = paymentKey;\r\n $scope.cancelConfirm = true;\r\n };\r\n\r\n $scope.cancelPayment = function (paymentKey)\r\n {\r\n PaymentService.getPayment($scope.appInfo.webUser.CurrentAuthorization.CustKey, paymentKey).then(function (data)\r\n {\r\n var WebPaymentWithContext = data;\r\n WebPaymentWithContext.CustomerScheduledPayment.Status = 1;\r\n WebPaymentWithContext.CustomerScheduledPayment.LastModifiedByCustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n PaymentService.savePayment(WebPaymentWithContext).then(function (data)\r\n {\r\n $scope.$parent.applyAction();\r\n });\r\n });\r\n $scope.cancelConfirm = false;\r\n };\r\n })\r\n .controller(\"paymentSideMenuCtrl\", function ($scope, WebFunctionGroups, $rootScope)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermissions(WebFunctionGroups.Payments))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n var lockData;\r\n var invoicesLocked;\r\n\r\n const unloadPaymentHandler = async function (event) {\r\n if (lockData && !event.persisted) {\r\n let localLockData = lockData;\r\n let headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authentication', amplify.store('pnuser-token'));\r\n\r\n const body = JSON.stringify({CustContKey: localLockData.CustContKey,EmailAddress: localLockData.EmailAddress,CustomerKey: localLockData.CustomerKey});\r\n \r\n await fetch('../api/UnLockCustomerPayments/', {method: 'POST', headers: headers, body: body, keepalive: true});\r\n }\r\n };\r\n\r\n const unloadInvoiceHandler = async function (event) {\r\n if (lockData && !event.persisted) {\r\n let localLockData = lockData;\r\n let headers = new Headers();\r\n headers.append('Content-Type', 'application/json');\r\n headers.append('Authentication', amplify.store('pnuser-token'));\r\n\r\n const body = JSON.stringify({CustContKey: localLockData.CustContKey,EmailAddress: localLockData.EmailAddress,CustomerKey: localLockData.CustomerKey});\r\n \r\n await fetch('../api/UnLockCustomerInvoices/', {method: 'POST', headers: headers, body: body, keepalive: true});\r\n }\r\n };\r\n\r\n function resetValues() {\r\n invoicesLocked = false;\r\n lockData = null;\r\n }\r\n\r\n //Start periodic refresh on lock\r\n var paymentLockListener = $rootScope.$on('event:PaymentLocked', function (event, data) {\r\n if (!angular.isUndefinedOrNullOrEmpty(data)) {\r\n lockData = data;\r\n amplify.store('paymentLockData', lockData);\r\n\r\n window.addEventListener('pagehide', unloadPaymentHandler, false);\r\n window.addEventListener('beforeunload', unloadPaymentHandler, false);\r\n }\r\n });\r\n\r\n var invoiceLockListener = $rootScope.$on('event:InvoiceLocked', function (event, data) {\r\n if (!angular.isUndefinedOrNullOrEmpty(data)) {\r\n lockData = data;\r\n invoicesLocked = true;\r\n\r\n window.addEventListener('pagehide', unloadInvoiceHandler, false);\r\n window.addEventListener('beforeunload', unloadInvoiceHandler, false);\r\n }\r\n });\r\n\r\n //Stop the interval when unlocked\r\n var paymentUnlockListener = $rootScope.$on('event:PaymentUnlocked', function () {\r\n resetValues();\r\n });\r\n\r\n var invoiceUnlockListener = $rootScope.$on('event:InvoiceUnlocked', function () {\r\n invoicesLocked = false;\r\n });\r\n \r\n //Destroy the listeners and intervals when we navigate away from this page \r\n $scope.$on('$destroy', function () {\r\n paymentUnlockListener();\r\n invoiceUnlockListener();\r\n paymentLockListener();\r\n invoiceLockListener();\r\n resetValues();\r\n window.removeEventListener('pagehide', unloadInvoiceHandler, false);\r\n window.removeEventListener('beforeunload', unloadInvoiceHandler, false);\r\n window.removeEventListener('pagehide', unloadPaymentHandler, false);\r\n window.removeEventListener('beforeunload', unloadPaymentHandler, false);\r\n });\r\n\r\n })\r\n .controller(\"PaymentAccountsCtrl\", function ($scope, PaymentAccountService, WebFunctions, $filter, templates, localStrings, globalizationSvc)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.acctGrid = {};\r\n $scope.kendo.acctGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n title: localStrings.getLocalizedString(\"AccountName\"),\r\n field: \"Description\",\r\n attributes: {class: \"alignLeft\"},\r\n template: \"\",\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n field: \"AccountStatusDesc\",\r\n attributes: {class: \"alignLeft\"},\r\n width: 150,\r\n template: \"{{dataItem.AccountStatusDesc}} {{dataItem.AccountStatusDesc}}\",\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"LastPayment\"),\r\n field: \"FormattedActivityDate\",\r\n width: 150,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n title: localStrings.getLocalizedString(\"NextScheduledPayment\"),\r\n field: \"NextPaymentText\",\r\n width: 200,\r\n attributes: {class: \"alignLeft\"},\r\n template: \"{{dataItem.NextPaymentText}}\",\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \" \",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {mode: \"row\", extra: false},\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.acctGridInit = function ()\r\n {\r\n $scope.kendo.acctGridDS = new kendo.data.DataSource({\r\n data: $scope.WebPaymentAccounts,\r\n schema: {\r\n model: {\r\n fields: {\r\n Description: {\r\n editable: false\r\n },\r\n AccountStatusDesc: {\r\n editable: false\r\n },\r\n FormattedActivityDate: {\r\n editable: false\r\n },\r\n NextPaymentText: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n batch: true\r\n });\r\n\r\n $scope.kendo.acctGridDS.read();\r\n $scope.kendo.acctGrid.dataSource.data($scope.kendo.acctGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n $scope.predicate = 'SortOrder';\r\n $scope.reverse = false;\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n $scope.getWebProfileMessage(12);\r\n $scope.refresh();\r\n };\r\n\r\n $scope.refresh = function ()\r\n {\r\n PaymentAccountService.getPaymentAccountList($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.WebPaymentAccounts = data;\r\n angular.forEach($scope.WebPaymentAccounts, function (element)\r\n {\r\n element.FormattedActivityDate = element.AccountLastActivity === '0001-01-01T00:00:00' ? null : $filter('date')(element.AccountLastActivity, 'MM/dd/yyyy');\r\n element.FormattedPaymentDate = element.AccountNextPayment === '0001-01-01T00:00:00' ? null : $filter('date')(element.AccountNextPayment, 'MM/dd/yyyy');\r\n element.NextPaymentText = element.FormattedPaymentDate === null ? null : element.FormattedPaymentDate + ' ' + localStrings.getLocalizedString(\"For\") + ' ' + globalizationSvc.formatCurrency(element.AccountNextPaymentAmmount);\r\n });\r\n $scope.kendo.acctGridInit();\r\n });\r\n };\r\n })\r\n .controller(\"EditAccountCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentAccountService, validatorSvc, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.editableAccount = false;\r\n $scope.paymentAccountKey = 0; \r\n $scope.customText = \"\";\r\n $scope.initializeEditAcount = function ()\r\n {\r\n $scope.AccountTypes =\r\n [\r\n { key: 0, descr: localStrings.getLocalizedString(\"Checking\") },\r\n { key: 1, descr: localStrings.getLocalizedString(\"Savings\") }\r\n ];\r\n\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"7\";\r\n\r\n if ($routeParams.paymentAccountKey)\r\n {\r\n $scope.paymentAccountKey = $routeParams.paymentAccountKey;\r\n }\r\n\r\n if ($scope.paymentAccountKey < 0)\r\n {//Edit from verify page\r\n $scope.WebPaymentAccount = PaymentAccountService.WebPaymentAccount;\r\n $scope.editableAccount = $scope.WebPaymentAccount.AccountStatus <= 1 || $scope.WebPaymentAccount.AccountStatus === 5;\r\n } else if ($scope.paymentAccountKey > 0)\r\n {//Existing\r\n PaymentAccountService.getPaymentAccount($scope.paymentAccountKey, $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.WebPaymentAccount = data;\r\n $scope.WebPaymentAccount.AccountTypeDescr = $scope.AccountTypes[$scope.WebPaymentAccount.AccountType].descr;\r\n $scope.WebPaymentAccount.LastModifiedByCustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n $scope.editableAccount = $scope.WebPaymentAccount.AccountStatus <= 1 || $scope.WebPaymentAccount.AccountStatus === 5;\r\n });\r\n } else if ($scope.paymentAccountKey === 0)\r\n {//New\r\n $scope.WebPaymentAccount = new CustomerPaymentAccount(\r\n {\r\n CustKey: $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n CreatedByCustContKey: $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n LastModifiedByCustContKey: $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n AccountStatus: 0,\r\n AccountStatusDesc: localStrings.getLocalizedString(\"New\"),\r\n Key: 0\r\n }\r\n );\r\n $scope.editableAccount = true;\r\n }\r\n };\r\n\r\n $scope.routingNumberIsValid = false;\r\n\r\n $scope.setAccountStatus = function (status)\r\n {\r\n if (status !== 0 && status !== 8)\r\n return;\r\n PaymentAccountService.getPaymentAccount($scope.WebPaymentAccount.Key, $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.WebPaymentAccount = data;\r\n $scope.WebPaymentAccount.AccountStatus = status;\r\n PaymentAccountService.savePaymentAccount($scope.WebPaymentAccount).then(\r\n function (data)\r\n {\r\n $scope.WebPaymentAccount = data;//refresh once you save to update timestamps\r\n $scope.goTo('Account/Payments/ViewPaymentAccounts');\r\n },\r\n function (data)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddAccount\"), localStrings.getLocalizedString(\"ErrorSavingAccount\") + data);\r\n }\r\n );\r\n });\r\n };\r\n\r\n $scope.verifyPaymentAccount = function ()\r\n {\r\n if ($scope.editableAccount)\r\n {\r\n $scope.WebPaymentAccount.AccountTypeDescr = $scope.AccountTypes[$scope.WebPaymentAccount.AccountType].descr;\r\n PaymentAccountService.validateRoutingNumber($scope.WebPaymentAccount.BankRoutingNo).then(\r\n function (data)\r\n {\r\n $scope.routingNumberIsValid = true;\r\n $scope.verifyPaymentAccountOverride();\r\n },\r\n function (error)\r\n {\r\n $scope.routingNumberIsValid = false;\r\n $scope.verifyPaymentAccountOverride();\r\n });\r\n } else\r\n {\r\n $scope.verifyPaymentAccountOverride();\r\n }\r\n };\r\n\r\n $scope.verifyPaymentAccountOverride = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n PaymentAccountService.WebPaymentAccount = $scope.WebPaymentAccount;\r\n $scope.$cancelPromptToSave();\r\n $scope.goTo(\"/Account/Payments/VerifyPaymentAccount\");\r\n };\r\n\r\n var routingNumberValidation =\r\n {\r\n name: 'validateRoutingNumber',\r\n validationMessage: localStrings.getLocalizedString(\"InvalidRoutingNumber\"),\r\n validatorError: function (val)\r\n {\r\n return $scope.routingNumberIsValid;\r\n }\r\n };\r\n\r\n $scope.validateRoutingNumber = new pdi.ng.validate.PdiValidation(routingNumberValidation);\r\n\r\n $scope.confirmDeactivate = function ()\r\n {\r\n var yes = function ()\r\n {\r\n $scope.setAccountStatus(8);\r\n };\r\n\r\n var no = function ()\r\n {\r\n return;\r\n };\r\n\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"DeactivateAccount\"), yes, no);\r\n };\r\n\r\n $scope.confirmClose = function ()\r\n {\r\n var no = function ()\r\n {\r\n $scope.goTo('Account/Payments/ViewPaymentAccounts');\r\n };\r\n\r\n if ($scope.acctInfo.$dirty)\r\n {\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"UnsavedChanges\"), $scope.verifyPaymentAccount, no);\r\n }\r\n else\r\n no();\r\n };\r\n })\r\n .controller(\"VerifyAccountCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentAccountService, validatorSvc, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.customText = \"\";\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"8\";\r\n\r\n $scope.WebPaymentAccount = PaymentAccountService.WebPaymentAccount;\r\n };\r\n\r\n $scope.routingNumberIsValid = false;\r\n\r\n $scope.confirmPaymentAccount = function ()\r\n {\r\n PaymentAccountService.savePaymentAccount($scope.WebPaymentAccount).then(\r\n function (data)\r\n {\r\n $scope.goTo(\"/Account/Payments/ConfirmPaymentAccount/\" + data.Key);\r\n },\r\n function (data)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddAccount\"), localStrings.getLocalizedString(\"ErrorSavingAccount\") + data);\r\n }\r\n );\r\n };\r\n\r\n $scope.changePaymentAccount = function ()\r\n {\r\n $scope.goTo(\"/Account/Payments/EditPaymentAccount/-1\");\r\n };\r\n })\r\n .controller(\"ConfirmAccountCtrl\", function ($scope, $http, $q, $routeParams, $filter, PaymentAccountService, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.AccountTypes =\r\n [\r\n { key: 0, descr: localStrings.getLocalizedString(\"Checking\") },\r\n { key: 1, descr: localStrings.getLocalizedString(\"Savings\") }\r\n ];\r\n $scope.paymentAccountKey = 0;\r\n $scope.customText = \"\";\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n {\r\n $scope.goTo(\"/Home\");\r\n } \r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"9\";\r\n\r\n if ($routeParams.paymentAccountKey)\r\n {\r\n $scope.paymentAccountKey = $routeParams.paymentAccountKey;\r\n }\r\n\r\n if ($routeParams.paymentAccountKey <= 0)\r\n {\r\n $scope.goTo(\"/Home\");\r\n } else if ($routeParams.paymentAccountKey > 0)\r\n {\r\n PaymentAccountService.getPaymentAccount($scope.paymentAccountKey, $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.WebPaymentAccount = data;\r\n $scope.WebPaymentAccount.AccountTypeDescr = $scope.AccountTypes[$scope.WebPaymentAccount.AccountType].descr;\r\n $scope.WebPaymentAccount.AccountNoVerify = $scope.WebPaymentAccount.AccountNo;\r\n });\r\n }\r\n };\r\n })\r\n .controller(\"AccountVerificationCtrl\", function ($scope, PaymentAccountService, $filter, validatorSvc, WebFunctions, $routeParams, templates)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n $scope.goTo(\"/Home\");\r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms === 0 ||\r\n $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentTerms !== $scope.appInfo.webUser.CurrentAuthorization.CustWebPaymentSettings.CurrentProfileTerms)\r\n $scope.goTo(\"/Account/Payments/TermsAndConditions/\");\r\n\r\n $scope.appInfo.verifyAccount = {};\r\n validatorSvc.clearValidationScopes();\r\n if ($routeParams.paymentAccountKey)\r\n $scope.appInfo.verifyAccount.webPaymentAccountKey = $routeParams.paymentAccountKey;\r\n else\r\n $scope.goTo(\"/Account/Payments/ViewPaymentAccounts\");\r\n\r\n $scope.appInfo.verifyAccount = {};\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n\r\n PaymentAccountService.getPaymentAccountList($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.appInfo.verifyAccount.webPaymentAccountDesc = $filter(\"filter\")(data, {Key: $scope.appInfo.verifyAccount.webPaymentAccountKey})[0].Description;\r\n $scope.appInfo.verifyAccount.WebPaymentAccounts = $filter(\"filter\")(data, {AccountStatus: 4});\r\n });\r\n $scope.getWebProfileMessage(15);\r\n };\r\n\r\n $scope.verifyPaymentAccount = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n $scope.goTo(\"/Account/Payments/PaymentAccountVerificationVerify/\" + $routeParams.paymentAccountKey);\r\n };\r\n })\r\n .controller(\"AccountVerificationVerificationCtrl\", function ($scope, PaymentAccountService, $filter, validatorSvc, WebFunctions, $routeParams, templates)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n $scope.goTo(\"/Home\");\r\n\r\n if ($routeParams.paymentAccountKey)\r\n $scope.appInfo.verifyAccount.webPaymentAccountKey = $routeParams.paymentAccountKey;\r\n else\r\n $scope.goTo(\"/Account/Payments/ViewPaymentAccounts\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n\r\n $scope.getWebProfileMessage(15);\r\n };\r\n\r\n $scope.confirmPaymentAccount = function ()\r\n {\r\n PaymentAccountService.getPaymentAccount($scope.appInfo.verifyAccount.webPaymentAccountKey, $scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n var amt1 = parseFloat($scope.appInfo.verifyAccount.amount1);\r\n var amt2 = parseFloat($scope.appInfo.verifyAccount.amount2);\r\n if ((data.VerificationAmount1 !== amt1 && data.VerificationAmount1 !== amt2) ||\r\n (data.VerificationAmount2 !== amt1 && data.VerificationAmount2 !== amt2))\r\n {\r\n data.AccountStatus = 6;\r\n PaymentAccountService.savePaymentAccount(data);\r\n $scope.goTo(\"/Account/Payments/PaymentAccountVerificationFailure/\");\r\n return;\r\n }\r\n data.AccountStatus = 7;\r\n PaymentAccountService.savePaymentAccount(data);\r\n $scope.goTo(\"/Account/Payments/PaymentAccountVerificationConfirmation/\" + $routeParams.paymentAccountKey);\r\n });\r\n };\r\n\r\n $scope.verifyPaymentAccount = function ()\r\n {\r\n $scope.goTo(\"/Account/Payments/PaymentAccountVerification/\" + $routeParams.paymentAccountKey);\r\n };\r\n\r\n })\r\n .controller(\"AccountVerificationConfirmationCtrl\", function ($scope, PaymentAccountService, $filter, validatorSvc, WebFunctions, $routeParams, templates)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts) || !$scope.paymentsEnabled())\r\n $scope.goTo(\"/Home\");\r\n\r\n if (!$routeParams.paymentAccountKey)\r\n $scope.goTo(\"/Account/Payments/ViewPaymentAccounts\");\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n\r\n PaymentAccountService.getPaymentAccountList($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.appInfo.verifyAccount.WebPaymentAccounts = $filter(\"filter\")(data, {AccountStatus: 4});\r\n });\r\n $scope.getWebProfileMessage(16);\r\n };\r\n })\r\n .controller(\"AccountVerificationFailCtrl\", function ($scope, PaymentAccountService, $filter, validatorSvc, WebFunctions, $routeParams, templates)\r\n {\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddandEditWebPaymentAccounts))\r\n $scope.goTo(\"/Home\");\r\n\r\n $scope.appInfo.verifyAccount = {};\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 11;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"PaymentSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n\r\n PaymentAccountService.getPaymentAccountList($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n $scope.appInfo.verifyAccount.WebPaymentAccounts = $filter(\"filter\")(data, {AccountStatus: 4});\r\n });\r\n $scope.getWebProfileMessage(17);\r\n };\r\n });","/**\r\n * Created by rhampton on 8/13/2014.\r\n */\r\nangular.module(\"pnAdmin\", ['ngSanitize', 'core.objects', 'services.payments', 'core.directives', 'core.enums','core.security'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Account/Profile/YourProfile\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"YourProfile\"),\r\n controller: \"EditUserCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/YourProfile/:contactKey\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"YourProfile\"),\r\n controller: \"EditUserCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/Contacts\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Contacts\"),\r\n controller: \"ListContactsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/AddContact\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AddContact\"),\r\n controller: \"AddUserCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/AccountSettings\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AccountSettings\"),\r\n controller: \"AccountSettingsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/ResetPassword\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ProfileResetPassword\"),\r\n controller: \"SetPasswordCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n ).when(\"/Account/Profile/AuditLog\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AuditLog\"),\r\n controller: \"auditLogCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n }\r\n }\r\n );\r\n })//AccountSettings\r\n .controller(\"ProfileSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n\r\n };\r\n\r\n })\r\n .controller(\"ListContactsCtrl\", function ($scope, userAccountService, WebFunctions, $filter, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.contactsGrid = {};\r\n $scope.kendo.contactsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.goTo(\"/Account/Profile/YourProfile/\" + dataItem.Key);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"DisplayName\",\r\n title: localStrings.getLocalizedString(\"Contact\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"EmailAddress\",\r\n title: localStrings.getLocalizedString(\"Email\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"WebActive\",\r\n title: localStrings.getLocalizedString(\"Active\"),\r\n width: 50,\r\n template: \"\",\r\n filterable: false\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.contactsGridInit = function ()\r\n {\r\n $scope.kendo.contactsGridDS = new kendo.data.DataSource({\r\n data: $scope.CustomerContacts,\r\n schema: {\r\n model: {\r\n fields: {\r\n DisplayName: {\r\n editable: false\r\n },\r\n EmailAddress: {\r\n editable: false\r\n },\r\n WebActive: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n batch: true\r\n });\r\n\r\n $scope.kendo.contactsGridDS.read();\r\n $scope.kendo.contactsGrid.dataSource.data($scope.kendo.contactsGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n $scope.CustomerContacts = [];\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.CustomerContacts.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Contacts\"));\r\n return;\r\n }\r\n\r\n angular.forEach(data.CustomerContacts, function (item)\r\n {\r\n item.DisplayName = item.FirstName + ' ' + item.LastName;\r\n });\r\n $scope.CustomerContacts = $filter('orderBy')(data.CustomerContacts, 'DisplayName');\r\n $scope.kendo.contactsGridInit();\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n };\r\n })\r\n .controller(\"EditUserCtrl\", function ($q, $scope, $filter, WebFunctions, userAccountService, constantLists, $route, $routeParams, WebUserSvc, validatorSvc, $location, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.data = {};\r\n $scope.kendo = {};\r\n\r\n function expandWFGrids(expand)\r\n {\r\n $scope.showAccountFNs = expand;\r\n $scope.showFuelFNs = expand;\r\n $scope.showOrdersFNs = expand;\r\n $scope.showPaperworkFNs = expand;\r\n $scope.showCustomPagesFNs = expand;\r\n }\r\n\r\n function setDependancies()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.data.CustomerContact) || $scope.data.CustomerContact.AllWebFunctions)\r\n return;\r\n\r\n var wbfns = $scope.data.CustomerContact.CustomerContactWebFunctions;\r\n\r\n angular.forEach(wbfns, function (item)\r\n {\r\n switch (item.WebFnKey)\r\n {\r\n case 5:\r\n //View Cards => Edit cards\r\n var view = $filter('filter')(wbfns, {WebFnKey: 4}, true)[0];\r\n if (view.Selected)\r\n {\r\n item.Disabled = false;\r\n }\r\n else\r\n {\r\n item.Selected = false;\r\n item.Disabled = true;\r\n }\r\n break;\r\n\r\n case 6:\r\n //View Card Transactions => View Card Transactions Alerts\r\n var trans = $filter('filter')(wbfns, {WebFnKey: 3}, true)[0];\r\n if (trans.Selected)\r\n {\r\n item.Disabled = false;\r\n }\r\n else\r\n {\r\n item.Selected = false;\r\n item.Disabled = true;\r\n }\r\n break;\r\n\r\n case 15:\r\n //Acount Activity => View Credit Info\r\n var acct = $filter('filter')(wbfns, {WebFnKey: 1}, true)[0];\r\n if (acct.Selected)\r\n {\r\n item.Disabled = false;\r\n }\r\n else\r\n {\r\n item.Selected = false;\r\n item.Disabled = true;\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n\r\n $scope.$watch(\"data.CustomerContact.CustomerContactWebFunctions\", setDependancies, true);\r\n\r\n $scope.textMessagePhoneNumbers = [\r\n {\r\n value: -1,\r\n text: localStrings.getLocalizedString(\"None\")\r\n },\r\n {\r\n value: 0,\r\n text: localStrings.getLocalizedString(\"Phone\")\r\n },\r\n {\r\n value: 1,\r\n text: localStrings.getLocalizedString(\"AltPhone\")\r\n },\r\n {\r\n value: 2,\r\n text: localStrings.getLocalizedString(\"AltPhone2\")\r\n }\r\n ];\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.checkForAppliedProfile();\r\n\r\n if (!$scope.appInfo) $scope.appInfo = {};\r\n\r\n $scope.appInfo.editUser = {\r\n modalMultiSave: {\r\n shown: false\r\n },\r\n modalCopySecurity: {\r\n shown: false,\r\n copyContact: {},\r\n clearSecurity: false\r\n },\r\n modalResetPassword: {\r\n shown: false,\r\n controls: {\r\n password: '',\r\n verify: '',\r\n displayTitle: localStrings.getLocalizedString(\"EnterVerifyPassword\")\r\n },\r\n webUser: {\r\n Timestamp: '',\r\n Answer: '',\r\n AnswerClear: '',\r\n GUID: '',\r\n Id: '',\r\n Key: '',\r\n Password: '',\r\n PasswordClear: '',\r\n Question: '',\r\n Reset: '',\r\n Validated: ''\r\n },\r\n error: {\r\n display: false,\r\n text: ''\r\n }\r\n },\r\n modalChangeEmail: {\r\n shown: $location.hash() === 'Email',\r\n email: \"\",\r\n pendingSave: false\r\n }\r\n };\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\"\r\n };\r\n\r\n $scope.phoneTypes = constantLists.phoneTypes(localStrings);\r\n $scope.secretQuestions = constantLists.secretQuestions(localStrings);\r\n $scope.data = {};\r\n $scope.kendo = {};\r\n\r\n $scope.clearButton = {\r\n clearButton: false\r\n };\r\n\r\n $scope.canResetPassword = (!angular.isUndefinedOrNullOrEmpty($scope.appInfo.passwordComplexity) && !$scope.appInfo.passwordComplexity.EnforcePasswordComplexity) ||\r\n (WebUserSvc.getNextPasswordResetDate($scope.appInfo.webUser) < 0);\r\n\r\n $scope.hideActiveCheckbox = $scope.hideWebActiveControl($scope.$parent.webFunctions);\r\n\r\n if ($routeParams.contactKey)\r\n {\r\n $scope.customerContactKey = $routeParams.contactKey;\r\n $scope.editWebUser = parseInt($scope.customerContactKey, 10) === $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.Key;\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n //If we are managing someone other than ourselves we need to check to see if the user has permissions.\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n }\r\n else\r\n {\r\n $scope.editWebUser = true;\r\n $scope.customerContactKey = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.Key;\r\n $scope.appInfo.webUser.AnswerClear = $scope.appInfo.webUser.Answer;\r\n $scope.appInfo.webUser.AnswerClear2 = $scope.appInfo.webUser.Answer;\r\n $scope.copyUser();\r\n }\r\n\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.CustomerContacts.length === 0)\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Contacts\"));\r\n\r\n angular.forEach(data.CustomerContacts, function (item)\r\n {\r\n item.DisplayName = item.FirstName + ' ' + item.LastName;\r\n });\r\n $scope.CopyContacts = $filter('orderBy')(data.CustomerContacts, 'DisplayName');\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n\r\n userAccountService.loadContactContext($scope.customerContactKey).then(function (data)\r\n {\r\n data.CustomerContact.WebQuestionAnswer2 = data.CustomerContact.WebQuestionAnswer;\r\n if(data.CustomerContact.TextAddressPhone == null) data.CustomerContact.TextAddressPhone = -1;\r\n\r\n $scope.data = data;\r\n $scope.setAllWebFunctions(false);\r\n setTimeout(function ()\r\n {\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.editUserForm)) {\r\n $scope.$apply($scope.editUserForm.$setPristine());\r\n }\r\n }, 1500);\r\n });\r\n };\r\n\r\n $scope.copyUser = function ()\r\n {\r\n $scope.appInfo.editUser.modalResetPassword.webUser =\r\n {\r\n Timestamp: $scope.appInfo.webUser.Timestamp,\r\n Answer: $scope.appInfo.webUser.Answer,\r\n AnswerClear: $scope.appInfo.webUser.AnswerClear,\r\n GUID: $scope.appInfo.webUser.Guid,\r\n Id: $scope.appInfo.webUser.Id,\r\n Key: $scope.appInfo.webUser.Key,\r\n Password: $scope.appInfo.webUser.Password,\r\n PasswordClear: $scope.appInfo.webUser.Password,\r\n Question: $scope.appInfo.webUser.Question,\r\n Reset: true,\r\n Validated: false\r\n };\r\n };\r\n\r\n $scope.hideWebActiveControl = function (wbFns) {\r\n return $scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity) ? false : true;\r\n };\r\n\r\n $scope.setAllWebFunctions = function (expand)\r\n {\r\n if ($scope.data.CustomerContact.AllWebFunctions)\r\n {\r\n angular.forEach($scope.data.CustomerContact.CustomerContactWebFunctions, function (item)\r\n {\r\n item.Selected = true;\r\n item.Disabled = true;\r\n });\r\n }\r\n else\r\n {\r\n angular.forEach($scope.data.CustomerContact.CustomerContactWebFunctions, function (item)\r\n {\r\n item.Disabled = false;\r\n });\r\n }\r\n expandWFGrids(expand);\r\n };\r\n\r\n $scope.saveContact = function ()\r\n {\r\n validatorSvc.executeValidations();\r\n\r\n //Validations for both Your Profile and Contacts pages\r\n if ($('#editUserAltEmail').hasClass('validation-error') || $('#editUserEmail').hasClass('validation-error'))\r\n return;\r\n\r\n //Validations only for the Your Profile page\r\n if ($scope.editWebUser)\r\n {\r\n if ($scope.kendo.secretQuestion.$angular_scope.scopeValidationErrors.length > 0)\r\n {\r\n return;\r\n }\r\n\r\n }\r\n\r\n if ($scope.data.MatchingContactCount > 1)\r\n {\r\n $scope.appInfo.editUser.modalMultiSave.shown = true;\r\n return;\r\n }\r\n $scope.saveContactOnly();\r\n };\r\n\r\n /*\r\n * Save contat only and save all contacts will still update the names on all contacts sharing the\r\n * current email address.\r\n * */\r\n $scope.saveContactOnly = function ()\r\n {\r\n $scope.data.CustomerContact.ApplyToAll = false;\r\n $scope.appInfo.editUser.modalMultiSave.shown = false;\r\n $scope.save();\r\n };\r\n\r\n $scope.saveAllContacts = function ()\r\n {\r\n $scope.data.CustomerContact.ApplyToAll = true;\r\n $scope.appInfo.editUser.modalMultiSave.shown = false;\r\n $scope.save();\r\n };\r\n\r\n $scope.save = function ()\r\n {\r\n var contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n $scope.data.CustomerContact.EditorName = contact.FirstName + \" \" + contact.LastName;\r\n $scope.data.CustomerContact.EditorEmailAddress = $scope.appInfo.webUser.Id;\r\n\r\n $scope.data.CustomerContact.PhoneFormatted = $filter('tel')($scope.data.CustomerContact.Phone);\r\n $scope.data.CustomerContact.AltPhoneFormatted = $filter('tel')($scope.data.CustomerContact.AltPhone);\r\n $scope.data.CustomerContact.AltPhone2Formatted = $filter('tel')($scope.data.CustomerContact.AltPhone2);\r\n $scope.data.CustomerContact.FAXFormatted = $filter('tel')($scope.data.CustomerContact.FAX);\r\n\r\n userAccountService.saveContact($scope.data.CustomerContact).then(function (data)\r\n {\r\n $scope.data.CustomerContact = data.CustomerContact;\r\n if ($scope.appInfo.webUser.Answer !== $scope.appInfo.webUser.AnswerClear)\r\n $scope.saveWebUser();\r\n else\r\n {\r\n if($scope.appInfo.editUser.modalChangeEmail.pendingSave)\r\n $scope.logout();\r\n else\r\n $route.reload();\r\n }\r\n\r\n });\r\n };\r\n\r\n //This part get's messy because we need to save the web user and relaod it into the current application scope\r\n //with out bothering the users...\r\n $scope.saveWebUser = function ()\r\n {\r\n /*If this isn;t the current logged in contact dont update the web user informtion.\r\n This shouldn;t be possible anyway.*/\r\n if (!$scope.editWebUser) return;\r\n\r\n var webUser = angular.copy($scope.appInfo.webUser);\r\n webUser.Id = $scope.data.CustomerContact.EmailAddress;\r\n webUser.Question = $scope.appInfo.webUser.Question;\r\n webUser.AnswerClear = $scope.appInfo.webUser.AnswerClear;\r\n\r\n var token = WebUserSvc.getLoggedInWebUserToken();\r\n WebUserSvc.retrieveWebUserData(token, $scope.appInfo.profileKey).then(function (data) {\r\n webUser.Timestamp = data.Timestamp;\r\n webUser.GUID = null;\r\n\r\n WebUserSvc.saveWebUser(webUser, false).then(function (data) {\r\n var currentCustomerId = $scope.appInfo.webUser.CurrentAuthorization.Customer.ID;\r\n WebUserSvc.retrieveSelectedProfile($scope.appInfo.webUser.Id, $scope.appInfo.profileKey).then(function (data) {\r\n $scope.appInfo.webUser = data;\r\n\r\n if ($scope.appInfo.editUser.modalChangeEmail.pendingSave)\r\n $scope.logout();\r\n else\r\n $route.reload();\r\n });\r\n });\r\n });\r\n };\r\n\r\n $scope.setEditUserSelectedAuthorization = function (id)\r\n {\r\n for (var x = 0; x < $scope.appInfo.webUser.WebAuthorizations.length; x++)\r\n {\r\n if ($scope.appInfo.webUser.WebAuthorizations[x].Customer.ID === id)\r\n {\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[x];\r\n return;\r\n }\r\n }\r\n };\r\n\r\n $scope.updateContactSecurity = function ()\r\n {\r\n var customerContactKey = $scope.appInfo.editUser.modalCopySecurity.copyContact;\r\n userAccountService.loadContactContext(customerContactKey).then(function (data)\r\n {\r\n var webFunctions = data.CustomerContact.CustomerContactWebFunctions;\r\n var currentContactWebFunctions = $scope.data.CustomerContact.CustomerContactWebFunctions;\r\n $scope.data.CustomerContact.AllWebFunctions = true;\r\n for (var i = 0; i < webFunctions.length; i++)\r\n {\r\n for (var x = 0; x < currentContactWebFunctions.length; x++)\r\n {\r\n if (currentContactWebFunctions[x].WebFnKey === webFunctions[i].WebFnKey)\r\n {\r\n if ($scope.appInfo.editUser.modalCopySecurity.clearSecurity)\r\n currentContactWebFunctions[x].Selected = false;\r\n if (webFunctions[i].Selected)\r\n currentContactWebFunctions[x].Selected = true;\r\n if (!currentContactWebFunctions[x].Selected)\r\n $scope.data.CustomerContact.AllWebFunctions = false;\r\n }\r\n }\r\n }\r\n expandWFGrids(false);\r\n $scope.appInfo.editUser.modalCopySecurity.shown = false;\r\n });\r\n };\r\n\r\n $scope.resetPassword = function ()\r\n {\r\n $scope.goTo('/Account/Profile/ResetPassword');\r\n };\r\n\r\n $scope.questionChanged = function (e)\r\n {\r\n if ($scope.kendo.secretQuestion.$angular_scope.$parent.editUserForm.question.$dirty)\r\n {\r\n $scope.appInfo.webUser.AnswerClear = '';\r\n $scope.appInfo.webUser.AnswerClear2 = '';\r\n }\r\n };\r\n\r\n $scope.showChangeEmailModal = function()\r\n {\r\n if ($location.hash() === 'Email')\r\n {\r\n $route.reload();\r\n } else\r\n {\r\n $location.hash('Email');\r\n }\r\n };\r\n\r\n $scope.hideChangeEmailModal = function()\r\n {\r\n $location.hash('');\r\n };\r\n\r\n $scope.saveChangeEmail = function()\r\n {\r\n validatorSvc.executeValidations();\r\n if ($('#changeEmail').hasClass('validation-error'))\r\n return;\r\n\r\n $scope.appInfo.editUser.modalChangeEmail.shown = false;\r\n $scope.appInfo.editUser.modalChangeEmail.pendingSave = true;\r\n $scope.data.CustomerContact.EmailAddress = $scope.appInfo.editUser.modalChangeEmail.email;\r\n $scope.saveContact();\r\n };\r\n })\r\n .controller(\"AddUserCtrl\", function ($q, $scope, $filter, WebFunctions, userAccountService, validatorSvc, $routeParams, WebUserSvc, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.appInfo.addUser = {\r\n shown: true,\r\n copyContacts: [],\r\n contact: userAccountService.getBlankContact()\r\n };\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.CustomerContacts.length === 0)\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"AddContact\"));\r\n\r\n angular.forEach(data.CustomerContacts, function (item)\r\n {\r\n item.DisplayName = item.FirstName + ' ' + item.LastName;\r\n });\r\n $scope.appInfo.addUser.copyContacts = $filter('orderBy')(data.CustomerContacts, 'DisplayName');\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n $scope.appInfo.addUser.shown = true;\r\n };\r\n\r\n $scope.createContact = function ()\r\n {\r\n var validationsPassed = true;\r\n if (!validatorSvc.executeValidations()) {\r\n //Bypass shared scope validations with Contacts/Your Profile pages; we only care about add new contact validations\r\n angular.forEach($scope.scopeValidationErrors, function (value, key) {\r\n if (value.model !== \"data.CustomerContact.EmailAddress\")\r\n validationsPassed = false;\r\n });\r\n }\r\n\r\n if (!validationsPassed)\r\n return;\r\n\r\n if ($scope.updateContactSecurity())\r\n return;\r\n\r\n var contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n $scope.appInfo.addUser.contact.EditorName = contact.FirstName + \" \" + contact.LastName;\r\n $scope.appInfo.addUser.contact.EditorEmailAddress = $scope.appInfo.webUser.Id;\r\n $scope.appInfo.addUser.contact.CustKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n\r\n userAccountService.saveContact($scope.appInfo.addUser.contact).then(function (data)\r\n {\r\n $scope.appInfo.addUser.shown = false;\r\n\r\n if(data.CustomerContact && data.CustomerContact.CustKey === 0)\r\n {\r\n $scope.goTo(\"Account/Profile/Contacts\");\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddNewContact\"),\r\n localStrings.getLocalizedString(\"NewContactNotCreated\"));\r\n }\r\n else\r\n {\r\n $scope.goTo(\"/Account/Profile/YourProfile/\" + data.CustomerContact.Key);\r\n }\r\n });\r\n\r\n };\r\n\r\n $scope.updateContactSecurity = function ()\r\n {\r\n if (!$scope.appInfo.addUser.copyContact) return false;\r\n //if (!$scope.appInfo.addUser.copyContact.Key) return false;\r\n\r\n var customerContactKey = $scope.appInfo.addUser.copyContact;\r\n userAccountService.loadContactContext(customerContactKey).then(function (data)\r\n {\r\n $scope.appInfo.addUser.contact.CustomerContactWebFunctions = data.CustomerContact.CustomerContactWebFunctions;\r\n $scope.appInfo.addUser.contact.AllWebFunctions = data.CustomerContact.AllWebFunctions;\r\n var contact = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact;\r\n $scope.appInfo.addUser.contact.EditorName = contact.FirstName + \" \" + contact.LastName;\r\n $scope.appInfo.addUser.contact.EditorEmailAddress = $scope.appInfo.webUser.Id;\r\n $scope.appInfo.addUser.contact.CustKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n userAccountService.saveContact($scope.appInfo.addUser.contact).then(function (data)\r\n {\r\n $scope.appInfo.addUser.shown = false;\r\n\r\n if (data.CustomerContact && data.CustomerContact.CustKey === 0) {\r\n $scope.goTo(\"Account/Profile/Contacts\");\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddNewContact\"),\r\n localStrings.getLocalizedString(\"NewContactNotCreated\"));\r\n }\r\n else {\r\n $scope.goTo(\"/Account/Profile/YourProfile/\" + data.CustomerContact.Key);\r\n }\r\n });\r\n });\r\n return true;\r\n };\r\n\r\n $scope.closeAddUser = function ()\r\n {\r\n $scope.appInfo.addUser.shown = false;\r\n $scope.appInfo.addUser = {};\r\n $scope.goTo(\"/Account/Profile/Contacts\");\r\n };\r\n })\r\n .controller(\"AccountSettingsCtrl\", function ($scope, $filter, WebFunctions, userAccountService, validatorSvc, customerService, WebUserSvc, templates, localStrings, globalizationSvc)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ViewCreditInformation))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n $scope.appInfo.pageInfo = {\r\n contacts: [],\r\n primaryCreditContact: 0,\r\n sendBalanceAlerts: $scope.appInfo.webUser.CurrentAuthorization.Customer.SendBalanceAlerts !== 0,\r\n sendBalanceAlertText: localStrings.getLocalizedString(\"SendAlertsBalanceExceeds\"),\r\n balanceAlertThreshold: $scope.appInfo.webUser.CurrentAuthorization.Customer.BalanceAlertThreshold,\r\n prepaidBalance: $scope.appInfo.webUser.CurrentAuthorization.Customer.CrPrePaidBalance !== 0,\r\n balanceAlertThresholdDisplay: globalizationSvc.formatCurrency($scope.appInfo.webUser.CurrentAuthorization.Customer.BalanceAlertThreshold)\r\n };\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.CustomerContacts.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"AccountSettings\"));\r\n }\r\n else\r\n {\r\n angular.forEach(data.CustomerContacts, function (item) {\r\n item.DisplayName = item.FirstName + ' ' + item.LastName;\r\n\r\n if ($scope.appInfo.webUser.CurrentAuthorization.Customer.CreditContKey === item.Key) {\r\n $scope.appInfo.pageInfo.primaryCreditContact = item.Key;\r\n }\r\n });\r\n $scope.appInfo.pageInfo.contacts = $filter('orderBy')(data.CustomerContacts, 'DisplayName');\r\n $scope.appInfo.pageInfo.primaryCreditContact = ($scope.appInfo.pageInfo.primaryCreditContact === 0) ? $scope.appInfo.pageInfo.contacts[0].Key\r\n : $scope.appInfo.pageInfo.primaryCreditContact;\r\n }\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n if ($scope.appInfo.pageInfo.prepaidBalance)\r\n $scope.appInfo.pageInfo.sendBalanceAlertText = localStrings.getLocalizedString(\"SendAlertsBalanceBelow\");\r\n };\r\n\r\n // This method is used to format the text of the input box whenever we lose focus\r\n $scope.formatCurrency = function ()\r\n {\r\n // If the text is empty or null then do not try to format it\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.pageInfo.balanceAlertThresholdDisplay))\r\n return;\r\n\r\n // Convert the string to a number and parse it as a float\r\n var num = parseFloat(globalizationSvc.convertStringToNumber($scope.appInfo.pageInfo.balanceAlertThresholdDisplay));\r\n\r\n // Format the number back into a currency string to be displayed\r\n num = globalizationSvc.formatCurrency(num);\r\n\r\n // Set the display value to the currency string\r\n $scope.appInfo.pageInfo.balanceAlertThresholdDisplay = num;\r\n };\r\n\r\n $scope.saveAccountSettings = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n\r\n if ($scope.appInfo.pageInfo.sendBalanceAlerts && !validatorSvc.executeValidations())\r\n return;\r\n\r\n // Convert the display value to a number and parse it as a float so we can save a number and not some currency string\r\n $scope.appInfo.pageInfo.balanceAlertThreshold = parseFloat(globalizationSvc.convertStringToNumber($scope.appInfo.pageInfo.balanceAlertThresholdDisplay));\r\n\r\n customerService.saveCustomerAccountSettings($scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.appInfo.pageInfo.primaryCreditContact,\r\n $scope.appInfo.pageInfo.balanceAlertThreshold,\r\n $scope.appInfo.pageInfo.sendBalanceAlerts).then(function (data)\r\n {\r\n $scope.resetDirtyFlags($scope.settingsForm);\r\n //Reload the web user once customer data has been changed.\r\n var currentCustomerId = $scope.appInfo.webUser.CurrentAuthorization.Customer.ID;\r\n WebUserSvc.retrieveSelectedProfile($scope.appInfo.webUser.Id, $scope.appInfo.profileKey).then(function (data)\r\n {\r\n $scope.appInfo.webUser = data;\r\n for (var x = 0; x < $scope.appInfo.webUser.WebAuthorizations.length; x++)\r\n {\r\n if ($scope.appInfo.webUser.WebAuthorizations[x].Customer.ID === currentCustomerId)\r\n {\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[x];\r\n return;\r\n }\r\n }\r\n $scope.initialize();\r\n });\r\n // This will function will call will take whatever was saved and convert it back to a currency string to be displayed after save\r\n $scope.formatCurrency();\r\n });\r\n };\r\n })\r\n .controller(\"SetPasswordCtrl\", function ($scope, Authentication, $filter, WebFunctions, userAccountService, validatorSvc, customerService, WebUserSvc, WebProfileService, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.appInfo) $scope.appInfo = {};\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\"\r\n };\r\n\r\n var profileKey = ($scope.appInfo && $scope.appInfo.profileKey) ? $scope.appInfo.profileKey : 0;\r\n WebProfileService.getWebProfileMessage(profileKey, 27).then(function (data)\r\n {\r\n $scope.customMessage = data.isBlank() ? localStrings.getLocalizedString(\"ExpiredPassword\") : data;\r\n });\r\n\r\n $scope.appInfo.pageInfo = {\r\n controls: {\r\n oldPassword: '',\r\n password: '',\r\n verify: '',\r\n displayTitle: localStrings.getLocalizedString(\"EnterVerifyPassword\")\r\n },\r\n webUser: {\r\n Timestamp: $scope.appInfo.webUser.Timestamp,\r\n Answer: $scope.appInfo.webUser.Answer,\r\n AnswerClear: $scope.appInfo.webUser.AnswerClear,\r\n GUID: $scope.appInfo.webUser.Guid,\r\n Id: $scope.appInfo.webUser.Id,\r\n Key: $scope.appInfo.webUser.Key,\r\n Password: $scope.appInfo.webUser.Password,\r\n OldPassword: '',\r\n PasswordClear: '',\r\n Question: $scope.appInfo.webUser.Question,\r\n Reset: false, // password reset is only true for forgot password and false for change password\r\n Validated: false\r\n },\r\n error: {\r\n display: false,\r\n text: ''\r\n },\r\n success: false\r\n };\r\n };\r\n\r\n $scope.submitPassword = function ()\r\n {\r\n //$scope.resetPassword.error = [];\r\n\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.setNewPassword();\r\n };\r\n\r\n $scope.setNewPassword = function ()\r\n {\r\n\r\n $scope.appInfo.pageInfo.webUser.OldPassword = $scope.appInfo.pageInfo.controls.oldPassword;\r\n $scope.appInfo.pageInfo.webUser.PasswordClear = $scope.appInfo.pageInfo.controls.password;\r\n\r\n WebUserSvc.resetWebUserPassword($scope.appInfo.pageInfo.webUser).then(\r\n function (data)\r\n {\r\n //store the new webuser record so the timestamps match the db\r\n $scope.appInfo.pageInfo.webUser = data;\r\n\r\n if (data.Validated === true)\r\n {\r\n // If password reset was successful then we need to login again since we dont store anything in local storage so we need a new token.\r\n Authentication.login($scope.appInfo.webUser.Id, $scope.appInfo.pageInfo.controls.password, \"\").then(function (data) {\r\n var user = data;\r\n var token = user.Token;\r\n amplify.store('pnuser-token', token);\r\n\r\n //Reload the web user once the password has been set.\r\n var currentCustomerId = $scope.appInfo.webUser.CurrentAuthorization.Customer.ID;\r\n WebUserSvc.retrieveWebUserData(token, $scope.appInfo.profileKey).then(function (data) {\r\n $scope.appInfo.webUser = data;\r\n for (var x = 0; x < $scope.appInfo.webUser.WebAuthorizations.length; x++) {\r\n if ($scope.appInfo.webUser.WebAuthorizations[x].Customer.ID === currentCustomerId) {\r\n $scope.appInfo.webUser.CurrentAuthorization = $scope.appInfo.webUser.WebAuthorizations[x];\r\n return;\r\n }\r\n }\r\n },\r\n function (err) {\r\n });\r\n\r\n });\r\n //display the conformation page\r\n $scope.appInfo.pageInfo.success = true;\r\n\r\n }\r\n },\r\n function (err)\r\n {\r\n angular.forEach(err, function (item)\r\n {\r\n $scope.notifier.show(item, localStrings.getLocalizedString(\"Error\"));\r\n });\r\n }\r\n );\r\n };\r\n\r\n $scope.clearErrors = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n };\r\n })\r\n .controller(\"auditLogCtrl\", function ($scope, templates, localStrings) {\r\n 'use strict';\r\n\r\n $scope.locationInfo.sideMenuData = {\r\n auditLog: {\r\n auditResults: []\r\n }\r\n };\r\n $scope.kendo = {};\r\n $scope.kendo.auditLogGrid = {};\r\n $scope.kendo.auditLogGridOptions = {\r\n autoBind: false,\r\n change: function (e) {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.goTo(\"/Account/Profile/YourProfile/\" + dataItem.Key);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"AudEntryUserID\",\r\n title: localStrings.getLocalizedString(\"ChangedBy\"),\r\n sortable: true,\r\n width: 120,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntryDateTime\",\r\n title: localStrings.getLocalizedString(\"DateTime\"),\r\n sortable: true,\r\n width: 130,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntryAction\",\r\n title: localStrings.getLocalizedString(\"Type\"),\r\n width: 50,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntryMenuCode\",\r\n title: localStrings.getLocalizedString(\"SubjArea\"),\r\n sortable: true,\r\n width: 80,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntryDescription\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n sortable: true,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntDtlsFieldDesc\",\r\n title: localStrings.getLocalizedString(\"FieldName\"),\r\n sortable: true,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntDtlsOldValue\",\r\n title: localStrings.getLocalizedString(\"OldValue\"),\r\n sortable: true,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"AudEntDtlsNewValue\",\r\n title: localStrings.getLocalizedString(\"NewValue\"),\r\n sortable: true,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.$parent.auditLogGridInit = function () {\r\n $scope.kendo.auditLogGrid.dataSource.data($scope.locationInfo.sideMenuData.auditLog.auditResults);\r\n };\r\n\r\n $scope.initialize = function () {\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ProfileSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n };\r\n })\r\n .controller(\"auditLogSideMenuCtrl\", function ($scope, validatorSvc, userAccountService, WebFunctions, reportingService, WebProfileService, localizationSvc) {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n $scope.initialize = function () {\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 12;\r\n $scope.locationInfo.sideMenuLocation = 5;\r\n setTimeout(function() {\r\n $scope.locationInfo.sideMenuData.auditLog = {\r\n includeAdds: true,\r\n includeChanges: true,\r\n includeDeletes: true,\r\n includeActions: true,\r\n subjectArea: null,\r\n changedBy: null,\r\n showContacts: false\r\n };\r\n }, 0);\r\n $scope.subjectAreas = [\r\n { Key: null, Description: localStrings.getLocalizedString(\"All\") },\r\n { Key: \"ARW\", Description: localStrings.getLocalizedString(\"Account\") },\r\n { Key: \"CPW\", Description: localStrings.getLocalizedString(\"FuelCards\") },\r\n { Key: \"ODW\", Description: localStrings.getLocalizedString(\"Orders\") },\r\n { Key: \"DRW\", Description: localStrings.getLocalizedString(\"Paperwork\") },\r\n { Key: \"UAL\", Description: localStrings.getLocalizedString(\"Login\") }\r\n ];\r\n $scope.contactList = [\r\n { EmailAddress: null, DisplayName: localStrings.getLocalizedString(\"Any\") }\r\n ];\r\n if ($scope.checkCurrentUserPermission(WebFunctions.ManageContactsAndSecurity)) {\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(function (data) {\r\n if (data.Successful) {\r\n if (data.CustomerContacts.length === 0) {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Contacts\"), localStrings.getLocalizedString(\"NoResultsFound\"));\r\n return;\r\n }\r\n\r\n angular.forEach(data.CustomerContacts, function (item) {\r\n item.DisplayName = item.EmailAddress;\r\n });\r\n $scope.contactList = data.CustomerContacts\r\n .sortBy('EmailAddress')\r\n .unique('EmailAddress')\r\n .add({ EmailAddress: null, DisplayName: localStrings.getLocalizedString(\"Any\") }, 0);\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n $scope.locationInfo.sideMenuData.auditLog.showContacts = true;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.auditLog.changedBy = $scope.appInfo.webUser.CurrentAuthorization.CustomerContact.EmailAddress;\r\n }\r\n $scope.$root.reportSettings.reportKey = 33;\r\n };\r\n\r\n $scope.applyAction = function () {\r\n if (!validatorSvc.executeValidations()) return;\r\n if(!$scope.locationInfo.sideMenuData.auditLog.includeAdds &&\r\n !$scope.locationInfo.sideMenuData.auditLog.includeChanges &&\r\n !$scope.locationInfo.sideMenuData.auditLog.includeDeletes &&\r\n !$scope.locationInfo.sideMenuData.auditLog.includeActions)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AuditLog\"), localStrings.getLocalizedString(\"AtLeastOneType\"));\r\n return;\r\n }\r\n var subjectArea = $scope.locationInfo.sideMenuData.auditLog.subjectArea;\r\n var changedBy = $scope.locationInfo.sideMenuData.auditLog.changedBy;\r\n if(subjectArea === 'null')\r\n subjectArea = null;\r\n if(changedBy === 'null')\r\n changedBy = null;\r\n WebProfileService.getWebAudits(\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate,\r\n subjectArea,\r\n $scope.locationInfo.sideMenuData.auditLog.includeAdds,\r\n $scope.locationInfo.sideMenuData.auditLog.includeChanges,\r\n $scope.locationInfo.sideMenuData.auditLog.includeDeletes,\r\n $scope.locationInfo.sideMenuData.auditLog.includeActions,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n changedBy\r\n ).then(function (data) {\r\n $scope.locationInfo.sideMenuData.auditLog.auditResults = data.WebAuditEntries.each(function(item) {\r\n item.AudEntryDateTime = Date.create(item.AudEntryDateTime).format('{MM}/{dd}/{yyyy} {12hr}:{mm} {tt}');\r\n });\r\n if (data.WebAuditEntries.length === 0) {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AuditLog\"), localStrings.getLocalizedString(\"NoResultsFound\"));\r\n return;\r\n }\r\n $scope.auditLogGridInit();\r\n });\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n $scope.locationInfo.sideMenuData.auditLog.includeAdds = $scope.reportSettings.loadOptions.includeAdds;\r\n $scope.locationInfo.sideMenuData.auditLog.includeChanges = $scope.reportSettings.loadOptions.includeChanges;\r\n $scope.locationInfo.sideMenuData.auditLog.includeDeletes = $scope.reportSettings.loadOptions.includeDeletes;\r\n $scope.locationInfo.sideMenuData.auditLog.includeActions = $scope.reportSettings.loadOptions.includeActions;\r\n\r\n var subjectArea = $scope.reportSettings.loadOptions.subjectArea;\r\n var changedBy = $scope.reportSettings.loadOptions.changedBy;\r\n if(subjectArea === 'null')\r\n subjectArea = null;\r\n if(changedBy === 'null')\r\n changedBy = null;\r\n $scope.locationInfo.sideMenuData.auditLog.subjectArea = subjectArea;\r\n $scope.locationInfo.sideMenuData.auditLog.changedBy = changedBy;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n $scope.reportSettings.saveOptions.includeAdds = $scope.locationInfo.sideMenuData.auditLog.includeAdds;\r\n $scope.reportSettings.saveOptions.includeChanges = $scope.locationInfo.sideMenuData.auditLog.includeChanges;\r\n $scope.reportSettings.saveOptions.includeDeletes = $scope.locationInfo.sideMenuData.auditLog.includeDeletes;\r\n $scope.reportSettings.saveOptions.includeActions = $scope.locationInfo.sideMenuData.auditLog.includeActions;\r\n $scope.reportSettings.saveOptions.subjectArea = $scope.locationInfo.sideMenuData.auditLog.subjectArea;\r\n $scope.reportSettings.saveOptions.changedBy = $scope.locationInfo.sideMenuData.auditLog.changedBy;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n var subjectArea = $scope.locationInfo.sideMenuData.auditLog.subjectArea;\r\n var changedBy = $scope.locationInfo.sideMenuData.auditLog.changedBy;\r\n var qs = \"reportName=\" + 'AuditLog' +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-StartDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-EndDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-IncludeAdds=\" + $scope.locationInfo.sideMenuData.auditLog.includeAdds +\r\n \"&RP-IncludeChanges=\" + $scope.locationInfo.sideMenuData.auditLog.includeChanges +\r\n \"&RP-IncludeDeletes=\" + $scope.locationInfo.sideMenuData.auditLog.includeDeletes +\r\n \"&RP-IncludeActions=\" + $scope.locationInfo.sideMenuData.auditLog.includeActions;\r\n if(subjectArea !== 'null')\r\n qs = qs + \"&RP-SubjectArea=\" + subjectArea;\r\n if(changedBy !== 'null')\r\n qs = qs + \"&RP-ChangedBy=\" + changedBy;\r\n\r\n reportingService.exportReport(qs, args.format);\r\n });\r\n });\r\n","/**\r\n * Created by rhampton on 3/24/14.\r\n */\r\nangular.module(\"pnAccountReports\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/Account/Reports/RecentActivity\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"RecentActivity\"),\r\n controller: \"recentActivityCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/Invoices\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Invoices\"),\r\n controller: \"invoicesCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/PaymentHistory\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PaymentHistory\"),\r\n controller: \"paymentHistoryCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/TransactionHistory\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionHistory\"),\r\n controller: \"transactionHistoryCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/ScheduledPayments\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ScheduledPayments\"),\r\n controller: \"scheduledPaymentsCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/UnappliedPayments\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"UnappliedPayments\"),\r\n controller: \"unappliedPaymentsCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/CreditCardActivity\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"CreditCardActivity\"),\r\n controller: \"creditCardActivityCtrl\"\r\n }\r\n )\r\n .when(\"/Account/Reports/TenNinetyNine\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TenNinetyNine\"),\r\n controller: \"tenNinetyNineCtrl\"\r\n }\r\n )\r\n\r\n;\r\n})\r\n.controller('reportSideMenuCtrl', function ($scope, WebFunctions)\r\n{\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n };\r\n })\r\n .controller('reportSideMenuInvoicesCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.invoices) $scope.locationInfo.sideMenuData.invoices = {};\r\n $scope.locationInfo.sideMenuData.invoices.reportType = 'InvoiceByDateRange';\r\n $scope.locationInfo.sideMenuData.invoices.reportTypeDetail = 'InvoiceByDateRangeDetail';\r\n $scope.locationInfo.sideMenuData.invoices.outstandingOnly = 'True';\r\n $scope.locationInfo.sideMenuData.invoices.showReportDetail = 'False';\r\n $scope.$root.reportSettings.reportKey = 2;\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.selection = 13;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.invoices.outstandingOnly = $scope.reportSettings.loadOptions.outstandingOnly;\r\n $scope.locationInfo.sideMenuData.invoices.showReportDetail = $scope.reportSettings.loadOptions.showReportDetail;\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.outstandingOnly = $scope.locationInfo.sideMenuData.invoices.outstandingOnly;\r\n $scope.reportSettings.saveOptions.showReportDetail = $scope.locationInfo.sideMenuData.invoices.showReportDetail;\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var reportName = $scope.locationInfo.sideMenuData.invoices.showReportDetail === 'True' ?\r\n $scope.locationInfo.sideMenuData.invoices.reportTypeDetail :\r\n $scope.locationInfo.sideMenuData.invoices.reportType;\r\n\r\n var qs = \"reportName=\" + reportName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-HideZeroBalance=\" + $scope.locationInfo.sideMenuData.invoices.outstandingOnly +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-showReportDetail=\" + $scope.locationInfo.sideMenuData.invoices.showReportDetail;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuTransactionHistoryCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.transactionHistory) $scope.locationInfo.sideMenuData.transactionHistory = {};\r\n $scope.locationInfo.sideMenuData.transactionHistory.reportType = 'TransactionHistory';\r\n $scope.locationInfo.sideMenuData.transactionHistory.showReportDetail = 'False';\r\n $scope.$root.reportSettings.reportKey = 6;\r\n\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.transactionHistory.reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuCreditCardActivityCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.creditCardActivity) $scope.locationInfo.sideMenuData.creditCardActivity = {};\r\n $scope.locationInfo.sideMenuData.creditCardActivity.groupByDate = 0;\r\n $scope.locationInfo.sideMenuData.creditCardActivity.showReportDetail = 'False';\r\n $scope.locationInfo.sideMenuData.creditCardActivity.pending = '0';\r\n $scope.$root.reportSettings.reportKey = 7;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.creditCardActivity.groupByDate = $scope.reportSettings.saveOptions.groupByDate;\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n $scope.setReport();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.groupByDate = $scope.locationInfo.sideMenuData.creditCardActivity.groupByDate;\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var reportType = $scope.locationInfo.sideMenuData.creditCardActivity.groupByDate === 1 ? 'CreditCardActivityByDate' : 'CreditCardActivityByDescription';\r\n var qs = \"reportName=\" + reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuScheduledPaymentsCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.scheduledPayments) $scope.locationInfo.sideMenuData.scheduledPayments = {};\r\n $scope.locationInfo.sideMenuData.scheduledPayments.reportType = 'ScheduledPaymentsAndEfts';\r\n $scope.locationInfo.sideMenuData.scheduledPayments.reportTypeDetail = 'ScheduledPaymentsAndEftsDetail';\r\n\r\n $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail = 'False';\r\n $scope.locationInfo.sideMenuData.scheduledPayments.pending = '0';\r\n $scope.$root.reportSettings.reportKey = 5;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.scheduledPayments.pending = $scope.reportSettings.loadOptions.pending;\r\n $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail = $scope.reportSettings.loadOptions.showReportDetail;\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.pending = $scope.locationInfo.sideMenuData.scheduledPayments.pending;\r\n $scope.reportSettings.saveOptions.showReportDetail = $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail;\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var reportName = $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail === 'True' ?\r\n $scope.locationInfo.sideMenuData.scheduledPayments.reportTypeDetail :\r\n $scope.locationInfo.sideMenuData.scheduledPayments.reportType;\r\n\r\n var qs = \"reportName=\" + reportName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-pending=\" + $scope.locationInfo.sideMenuData.scheduledPayments.pending +\r\n \"&RP-showReportDetail=\" + $scope.locationInfo.sideMenuData.scheduledPayments.showReportDetail;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuPaymentHistoryCtrl', function ($scope, validatorSvc, $rootScope, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.paymentHistory) $scope.locationInfo.sideMenuData.paymentHistory = {};\r\n $scope.locationInfo.sideMenuData.paymentHistory.showReportDetail = false;\r\n $scope.$root.reportSettings.reportKey = 3;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.paymentHistory.showReportDetail = $scope.reportSettings.loadOptions.showReportDetail;\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.showReportDetail = $scope.locationInfo.sideMenuData.paymentHistory.showReportDetail;\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = $scope.locationInfo.sideMenuData.paymentHistory.showReportDetail ? 'PaymentHistoryIAD' : 'PaymentHistory';\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-startDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-endDate=\" + $scope.dateSelector.endDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller('reportSideMenuTenNinetyNineCtrl', function ($scope, validatorSvc, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.tenNinetyNine) $scope.locationInfo.sideMenuData.tenNinetyNine = {};\r\n $scope.locationInfo.sideMenuData.tenNinetyNine.reportType = '1099-KByDate';\r\n $scope.locationInfo.sideMenuData.tenNinetyNine.useDateRange = '1';\r\n $scope.$root.reportSettings.reportKey = 8;\r\n $scope.exportReport = false;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.dateSelector.selection = parseInt($scope.reportSettings.loadOptions.selection, 10);\r\n $scope.dateSelector.numOfDays = parseInt($scope.reportSettings.loadOptions.numOfDays, 10);\r\n $scope.dateSelector.startDate = $scope.reportSettings.loadOptions.startDate;\r\n $scope.dateSelector.endDate = $scope.reportSettings.loadOptions.endDate;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.selection = $scope.dateSelector.selection;\r\n $scope.reportSettings.saveOptions.numOfDays = $scope.dateSelector.numOfDays;\r\n $scope.reportSettings.saveOptions.startDate = $scope.dateSelector.startDate;\r\n $scope.reportSettings.saveOptions.endDate = $scope.dateSelector.endDate;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.tenNinetyNine.reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-StartDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-EndDate=\" + $scope.dateSelector.endDate;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller(\"recentActivityCtrl\", function ($scope, WebFunctions, WebFunctionGroups, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermissions(WebFunctionGroups.AccountReports) || !$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n if ($scope.checkCurrentUserPermissions(WebFunctionGroups.AccountPayments))\r\n $scope.goTo(\"/Account/Payments/ViewScheduledPayments\");\r\n else\r\n $scope.goTo(\"/Account/Profile/YourProfile\");\r\n return;\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.recentActivity) $scope.locationInfo.sideMenuData.recentActivity = {};\r\n $scope.locationInfo.sideMenuData.recentActivity.reportType = '/RecentActivity';\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n $scope.custKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n $scope.exportReport = \"false\";\r\n $scope.applyAction();\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.recentActivity.reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller(\"invoicesCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.invoices) $scope.locationInfo.sideMenuData.invoices = {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n };\r\n })\r\n .controller(\"paymentHistoryCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n })\r\n .controller(\"transactionHistoryCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"8\";\r\n })\r\n .controller(\"scheduledPaymentsCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n })\r\n .controller(\"creditCardActivityCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"6\";\r\n })\r\n .controller(\"unappliedPaymentsCtrl\", function ($scope, WebFunctions, reportingService, Authentication, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n $scope.locationInfo.sideMenuData.unappliedPayments = {};\r\n $scope.locationInfo.sideMenuData.unappliedPayments.reportType = '/UnappliedPayments';\r\n $scope.applyAction();\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n var qs = \"reportName=\" + $scope.locationInfo.sideMenuData.unappliedPayments.reportType +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n .controller(\"tenNinetyNineCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = 10;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"ReportSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"7\";\r\n })\r\n;","/**\r\n * Created by jvitoria on 9/5/14.\r\n */\r\nangular.module(\"pnFuelCardsCards\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/FuelCards/Cards/ViewCards\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"ViewCards\"),\r\n controller: \"viewCardsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/AddCards\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"AddCards\"),\r\n controller: \"addCardsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/AddTemplates\",\r\n {\r\n templateUrl: \"fuelCards/cards/addTemplates/addTemplates.tpl.html\",\r\n controller: \"addTemplatesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/Departments\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Departments\"),\r\n controller: \"departmentsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/DepartmentSetup\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"DepartmentSetup\"),\r\n controller: \"departmentSetupCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Cards/Locations\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Locations\"),\r\n controller: \"locationsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsCardsLocalization\");\r\n }\r\n }\r\n })\r\n ;\r\n })\r\n .controller('fuelCardsCardsSideMenuCtrl', function ($scope, $rootScope, FuelCardsService)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n };\r\n })\r\n .controller(\"viewCardsCtrl\", function ($scope, FuelCardsService, WebFunctions, WebFunctionGroups, customerService, validatorSvc, $filter, $q, $timeout, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n if (!$scope.appInfo.fuelCards)\r\n $scope.appInfo.fuelCards = {};\r\n $scope.appInfo.fuelCards.viewCards = {shown: true};\r\n $scope.appInfo.fuelCards.modalEdit = {shown: false};\r\n $scope.appInfo.fuelCards.modalPin = {shown: false};\r\n $scope.appInfo.fuelCards.modalReissue = {shown: false};\r\n $scope.appInfo.fuelCards.modalDeactivate = {shown: false};\r\n $scope.appInfo.fuelCards.modalChangeCardNo = {shown: false, mode: 'edit'};\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.viewCardsGrid = {};\r\n $scope.kendo.viewCardsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n $scope.displayFuelCard(dataItem.Key);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"Description\",\r\n title: localStrings.getLocalizedString(\"CardDescription\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Status\",\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"ActivationDate\",\r\n title: localStrings.getLocalizedString(\"ActivationDate\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"ExpirationDate\",\r\n title: localStrings.getLocalizedString(\"ExpirationDate\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \" \",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.viewCardsGridInit = function ()\r\n {\r\n $scope.kendo.viewCardsGridDS = new kendo.data.DataSource({\r\n data: $scope.appInfo.fuelCards.viewCards.cards\r\n });\r\n\r\n $scope.kendo.viewCardsGridDS.read();\r\n $scope.kendo.viewCardsGrid.dataSource.data($scope.kendo.viewCardsGridDS.data());\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n $scope.appInfo.fuelCards.viewCards.cards = [];\r\n $scope.modalifier.hide();\r\n $scope.appInfo.fuelCards.viewCards.shown = true;\r\n $scope.appInfo.fuelCards.modalEdit.shown = false;\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.appInfo.fuelCards.modalDeactivate.shown = false;\r\n FuelCardsService.getCards\r\n (\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.viewCards.cardFormat,\r\n $scope.locationInfo.sideMenuData.viewCards.cardNumber,\r\n $scope.locationInfo.sideMenuData.viewCards.active === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.expired === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.pending === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.locked === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.cancelled === \"True\" ? -1 : 0,\r\n $scope.locationInfo.sideMenuData.viewCards.department,\r\n $scope.locationInfo.sideMenuData.viewCards.template\r\n ).then\r\n (\r\n function (data)\r\n {\r\n if (data.Cards.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Cards\"));\r\n return;\r\n }\r\n\r\n $scope.appInfo.fuelCards.viewCards.cards = [];\r\n angular.forEach(data.Cards, function (item)\r\n {\r\n var desc = item.NumberMasked + ' - ' + item.Description;\r\n desc += item.Template === -1 ? ' (Template)' : '';\r\n\r\n var status = $filter('filter')($scope.appInfo.fuelCards.statusCodes, {Key: item.Status});\r\n\r\n var act = $filter('date')(item.ActivationDate, 'MM/dd/yyyy') || '';\r\n var exp = $filter('date')(item.ExpirationDate, 'MM/dd/yyyy') || '';\r\n\r\n $scope.appInfo.fuelCards.viewCards.cards.push({\r\n Key: item.Key,\r\n Sort: item.Description,\r\n Description: desc,\r\n Status: status[0].Description,\r\n ActivationDate: act,\r\n ExpirationDate: exp\r\n });\r\n });\r\n $scope.kendo.viewCardsGridInit();\r\n }\r\n );\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n //if user doesnt have permission for the section landing page, test to see if they can land on another one\r\n //before sending them to the home page\r\n if (!$scope.checkCurrentUserPermissions(WebFunctionGroups.FuelCardsCards))\r\n {\r\n if ($scope.checkCurrentUserPermissions(WebFunctionGroups.FuelCardsTrans))\r\n $scope.goTo(\"/FuelCards/Transactions/TransactionDetails\");\r\n else if ($scope.checkCurrentUserPermissions(WebFunctionGroups.FuelCardsPrices))\r\n $scope.goTo(\"/FuelCards/Prices/LookupPrices\");\r\n else\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\r\n\r\n $scope.appInfo.fuelCards.statusCodes = [\r\n { Key: '0', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Active\")) },\r\n { Key: '1', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Cancelled\")) },\r\n { Key: '2', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Expired\")) },\r\n { Key: '3', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Locked\")) },\r\n { Key: '4', Description: localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"Pending\")) }\r\n ];\r\n $scope.appInfo.fuelCards.viewCards.cards = [];\r\n FuelCardsService.getCardsContext(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey\r\n ).then(\r\n function (data) {\r\n $scope.appInfo.fuelCards.formats = $filter('orderBy')(data.CardFormats, 'Description');\r\n $scope.appInfo.fuelCards.embossingReasons = $filter('orderBy')(data.CardEmbossingReasons, 'Description');\r\n $scope.appInfo.fuelCards.deactivateReasons = $filter('orderBy')(data.CardDeactivationReasons, 'Description');\r\n $scope.appInfo.fuelCards.states = data.States;\r\n $scope.appInfo.fuelCards.alertRules = $filter('orderBy')(data.CardAlertRules, 'ID');\r\n $scope.appInfo.fuelCards.templates = $filter('orderBy')(data.CustomerCardTemplates, 'Description');\r\n $scope.appInfo.fuelCards.company = data.Company;\r\n }\r\n );\r\n\r\n FuelCardsService.getCardsDepartments($scope.appInfo.webUser.CurrentAuthorization.CustKey)\r\n .then(function (data) {\r\n if (data.Successful) {\r\n $scope.appInfo.fuelCards.departments = $filter('orderBy')(data.Departments, 'Description');\r\n }\r\n }\r\n );\r\n\r\n customerService.getCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, 2)\r\n .then(function (data) {\r\n if (data.Successful) {\r\n $scope.appInfo.fuelCards.locations = $filter('orderBy')(data.Locations, 'Description');\r\n }\r\n }\r\n );\r\n\r\n $scope.hideModals();\r\n };\r\n\r\n $scope.saveCards = function (state)\r\n {\r\n var recStatus = 0;\r\n var closeModal = false;\r\n var card = $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0];\r\n\r\n if (card.Description.isBlank())\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"Required\"), 'error');\r\n $scope.setFocusOnReady('#efc-description');\r\n return;\r\n }\r\n\r\n switch (state)\r\n {\r\n case 'save':\r\n recStatus = 16;\r\n break;\r\n\r\n case 'saveAndClose':\r\n recStatus = 16;\r\n closeModal = true;\r\n break;\r\n\r\n case 'saveCN':\r\n recStatus = 16;\r\n card.Number_Formatted = null;\r\n card.Number_Masked = null;\r\n break;\r\n\r\n case 'add':\r\n recStatus = 4;\r\n break;\r\n\r\n case 'template':\r\n\r\n if (!$scope.isValidForWebTemplate(card))\r\n return;\r\n\r\n recStatus = 4;\r\n card.Number = 0;\r\n card.NumberMasked = null;\r\n card.Template = \"-1\";\r\n card.PIN = null;\r\n card.Activation_Date = null;\r\n card.Expiration_Date = null;\r\n card.Cards_Issued = '0';\r\n card.Emboss_Date = null;\r\n card.Emboss_Line_1 = null;\r\n card.Emboss_Line_2 = null;\r\n card.Emboss_Line_3 = null;\r\n card.Export_To_Embosser = '0';\r\n card.Marked_For_Export = '0';\r\n card.Last_Emboss_Date = null;\r\n card.CardDeactRsn_Key = 0;\r\n card.Deactivation_Date = null;\r\n card.HasTransactions = '0';\r\n card.Key = 0;\r\n card.TimeStamp = null;\r\n card.Status = $scope.securityOptions.allowPending ? '4' : '0';\r\n closeModal = true;\r\n break;\r\n }\r\n\r\n FuelCardsService.saveCards\r\n (\r\n recStatus,\r\n card,\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardCFs[0],\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n ).then\r\n (\r\n function (data)\r\n {\r\n if (!closeModal)\r\n $scope.displayFuelCard(card.Key);\r\n else\r\n $scope.initialize();\r\n\r\n $scope.resetDirtyFlags($scope.editCards);\r\n }\r\n );\r\n };\r\n\r\n $scope.displayFuelCard = function (key)\r\n {\r\n FuelCardsService.getCardDetails\r\n (\r\n key,\r\n $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers)\r\n ).then\r\n (\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails = data.CardDetails;\r\n $scope.appInfo.fuelCards.modalEdit.origCardDetails = angular.copy(data.CardDetails);\r\n\r\n $scope.setSecurityOptions();\r\n $scope.resetDirtyFlags($scope.editCards);\r\n }\r\n );\r\n };\r\n\r\n $scope.displayModelPin = function (state)\r\n {\r\n switch (state)\r\n {\r\n case 'display':\r\n $scope.saveChangesPrompt();\r\n validatorSvc.clearAllValidations();\r\n $scope.appInfo.fuelCards.modalPin.PIN1 = null;\r\n $scope.appInfo.fuelCards.modalPin.PIN2 = null;\r\n $scope.appInfo.fuelCards.modalPin.error = false;\r\n $scope.appInfo.fuelCards.modalPin.shown = true;\r\n break;\r\n\r\n case 'save':\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].PIN = $scope.appInfo.fuelCards.modalPin.PIN1;\r\n $scope.appInfo.fuelCards.modalPin.shown = false;\r\n $scope.saveCards('save');\r\n break;\r\n }\r\n };\r\n\r\n $scope.displayModelReissue = function (state)\r\n {\r\n switch (state)\r\n {\r\n case 'display':\r\n $scope.saveChangesPrompt();\r\n $scope.appInfo.fuelCards.modalReissue.selection = $scope.appInfo.fuelCards.embossingReasons[0].Key;\r\n $scope.appInfo.fuelCards.modalReissue.shown = true;\r\n break;\r\n\r\n case 'save':\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].CardEmbRsn_Key = $scope.appInfo.fuelCards.modalReissue.selection;\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].Export_To_Embosser = '-1';\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].Emboss_Date = new Date();\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.saveCards('save');\r\n break;\r\n }\r\n };\r\n\r\n $scope.displayModelDeactReasons = function (state)\r\n {\r\n switch (state)\r\n {\r\n case 'display':\r\n $scope.saveChangesPrompt();\r\n $scope.appInfo.fuelCards.modalDeactivate.selection = $scope.appInfo.fuelCards.deactivateReasons[0].Key;\r\n $scope.appInfo.fuelCards.modalDeactivate.shown = true;\r\n break;\r\n\r\n case 'save':\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].CardDeactRsn_Key = $scope.appInfo.fuelCards.modalDeactivate.selection;\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].Status = '1';\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].Deactivation_Date = new Date().toISOString().slice(0, 19);\r\n $scope.appInfo.fuelCards.modalDeactivate.shown = false;\r\n $scope.saveCards('save');\r\n break;\r\n }\r\n };\r\n\r\n $scope.displayChangeCardNo = function (command)\r\n {\r\n switch (command)\r\n {\r\n case 'open':\r\n $scope.saveChangesPrompt().then(\r\n function ()\r\n {\r\n $scope.saveCards('save');\r\n $scope.appInfo.fuelCards.modalChangeCardNo.mode = 'edit';\r\n $scope.appInfo.fuelCards.modalChangeCardNo.shown = true;\r\n },\r\n function ()\r\n {\r\n $scope.appInfo.fuelCards.modalChangeCardNo.mode = 'edit';\r\n $scope.appInfo.fuelCards.modalChangeCardNo.shown = true;\r\n }\r\n );\r\n break;\r\n\r\n case 'save':\r\n if ($scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0].HasTransactions === '-1')\r\n $scope.appInfo.fuelCards.modalChangeCardNo.mode = 'confirm';\r\n else\r\n {\r\n $scope.saveCards('saveCN');\r\n $scope.displayChangeCardNo(localStrings.getLocalizedString(\"Close\"));\r\n }\r\n break;\r\n\r\n case 'confirm':\r\n $scope.saveCards('saveCN');\r\n $scope.displayChangeCardNo(localStrings.getLocalizedString(\"Close\"));\r\n break;\r\n\r\n case 'close':\r\n $scope.appInfo.fuelCards.modalChangeCardNo.shown = false;\r\n $scope.appInfo.fuelCards.modalChangeCardNo.mode = 'edit';\r\n break;\r\n }\r\n };\r\n\r\n $scope.hideModals = function ()\r\n {\r\n $scope.appInfo.fuelCards.viewCards.shown = true;\r\n $scope.appInfo.fuelCards.modalEdit.shown = false;\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.appInfo.fuelCards.modalReissue.shown = false;\r\n $scope.appInfo.fuelCards.modalDeactivate.shown = false;\r\n $scope.appInfo.fuelCards.modalChangeCardNo.shown = false;\r\n validatorSvc.clearAllValidations();\r\n };\r\n\r\n $scope.isValidForWebTemplate = function (card)\r\n {\r\n var isValid = true;\r\n var format = $filter('filter')($scope.appInfo.fuelCards.formats, {Key: card.CardFmt_Key}, true)[0] || {};\r\n\r\n if (angular.isUndefinedOrNullOrEmpty(format) || format.VisibleOnWeb === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"CardFormatInvalid\"), 'error');\r\n return false;\r\n }\r\n\r\n if (card.Template === '-1')\r\n {\r\n angular.forEach($scope.appInfo.fuelCards.templates, function (item)\r\n {\r\n if (card.Description === item.Description)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"TemplateDescriptionUnique\"), 'error');\r\n isValid = false;\r\n }\r\n\r\n //if(card.Number === item.Number)\r\n //{\r\n // $scope.notifier.show('Template card number must be unique', 'error');\r\n // isValid = false;\r\n //}\r\n });\r\n }\r\n\r\n //physical card w/o auto number or pending\r\n if (format.PhysicalCard === -1 && format.AutoNo === 0 && format.AllowPending === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PhysicalCardsError\"), 'error');\r\n isValid = false;\r\n }\r\n\r\n //expiration dates\r\n if (format.UseExpirationDates === -1 && format.DefaultLifetimeSelection === 0 && format.AllowDefaultByCustomer === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ExpirationDateConfiguredError\"), 'error');\r\n isValid = false;\r\n }\r\n\r\n //expiration dates\r\n if (format.UseExpirationDates === -1 && format.AllowDefaultByCustomer === -1)\r\n {\r\n\r\n var nextDate = angular.isUndefinedOrNullOrEmpty(card.Next_Exp_Date) ? new Date('01/01/1900') : new Date(card.Next_Exp_Date);\r\n var expDate = angular.isUndefinedOrNullOrEmpty(card.Expiration_Date) ? new Date('01/01/1900') : new Date(card.Expiration_Date);\r\n var today = new Date();\r\n\r\n if (expDate <= today && nextDate <= today)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"MissingExpirationDate\"), 'error');\r\n isValid = false;\r\n }\r\n }\r\n\r\n return isValid;\r\n };\r\n\r\n $scope.saveChangesPrompt = function ()\r\n {\r\n var deferred = $q.defer();\r\n if ($scope.editCards.$dirty)\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"UnsavedChanges\"), deferred.resolve, deferred.reject);\r\n else\r\n deferred.reject();\r\n\r\n return deferred.promise;\r\n };\r\n\r\n $scope.setSecurityOptions = function ()\r\n {\r\n\r\n $scope.securityOptions = {\r\n readOnly: true,\r\n formTitle: '',\r\n\r\n viewCardNumber: false,\r\n displayCardNumber: '',\r\n canChangeCardNo: false,\r\n\r\n showVehicleInfo: false,\r\n showCardAuths: false,\r\n showProdSite: false,\r\n showTaxExemeptions: false,\r\n showEmbossingAlert: false,\r\n\r\n showChangePin: false,\r\n showReissue: false,\r\n reissueTitle: '',\r\n showDeactivate: false,\r\n showSaveTemplate: false,\r\n\r\n shipToLocation: '',\r\n cardType: '',\r\n department: '',\r\n format: '',\r\n state: '',\r\n cardStatus: '',\r\n deactivationReason: '',\r\n embossingReason: '',\r\n alertRule: ''\r\n };\r\n\r\n function keyLookup(list, match, field, value)\r\n {\r\n if(!Object.isArray(list) || list.length === 0 || angular.isUndefinedOrNullOrEmpty(match)|| angular.isUndefinedOrNullOrEmpty(field))\r\n return value;\r\n\r\n var item = list.find({Key: match});\r\n\r\n if (item)\r\n return item[field];\r\n else\r\n return value;\r\n }\r\n\r\n var card = $scope.appInfo.fuelCards.modalEdit.cardDetails.CardInfos[0];\r\n var format = $filter('filter')($scope.appInfo.fuelCards.formats, {Key: card.CardFmt_Key}, true)[0];\r\n\r\n //sanity check\r\n if (!card || !format)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Cards\"), localStrings.getLocalizedString(\"CardSelectionFailed\"));\r\n return;\r\n }\r\n\r\n //form options\r\n $scope.securityOptions.readOnly = !($scope.checkCurrentUserPermission(WebFunctions.EditCards) &&\r\n (format.AllowEditAfterEmbossed === -1 ||\r\n card.Cards_Issued === '0'));\r\n $scope.securityOptions.formTitle = $scope.securityOptions.readOnly ? localStrings.getLocalizedString(\"ViewCard\") : localStrings.getLocalizedString(\"EditCard\");\r\n $scope.securityOptions.formTitle += card.Template === \"-1\" ? ' Template' : '';\r\n $scope.securityOptions.allowPending = format.AllowPending === -1;\r\n\r\n //card number options\r\n $scope.securityOptions.autoNo = format.AutoNo === -1;\r\n $scope.securityOptions.maxCardNoLength = format.Mask.match(/0/g).length || 20;\r\n $scope.securityOptions.canChangeCardNo = !$scope.securityOptions.readOnly && !$scope.securityOptions.autoNo && $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers);\r\n\r\n // section visibility options\r\n $scope.securityOptions.showEmbossingAlert = card.Export_To_Embosser === '-1';\r\n $scope.securityOptions.showCardAuths = $scope.securityOptions.readOnly ||\r\n card.CardAlertRule_Key > 0 ||\r\n card.Max_Trans_PerDay > 0 ||\r\n $scope.appInfo.fuelCards.modalEdit.cardDetails.CardCFs.length > 0;\r\n $scope.securityOptions.showVehicleInfo = format.AllowVehicleInfo === -1;\r\n $scope.securityOptions.showProdSite = card.Auth_By_Product !== '0' && card.Single_Site_Auth_Site_Key !== 0;\r\n $scope.securityOptions.showTaxExemeptions = $scope.appInfo.fuelCards.modalEdit.cardDetails.CardTaxExs.length > 0;\r\n\r\n // button options\r\n $scope.securityOptions.showSave = !$scope.securityOptions.readOnly;\r\n $scope.securityOptions.showChangePin = !$scope.securityOptions.readOnly && format.AllowPIN !== 0;\r\n $scope.securityOptions.showReissue = !$scope.securityOptions.readOnly;\r\n $scope.securityOptions.reissueTitle = format.PhysicalCard === 0 ? localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"ActivateCard\")) : localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"ReissueCard\"));\r\n $scope.securityOptions.showDeactivate = !$scope.securityOptions.readOnly;\r\n $scope.securityOptions.showSaveTemplate = $scope.checkCurrentUserPermission(WebFunctions.AddNewCards);\r\n\r\n // child field lookups\r\n $scope.securityOptions.shipToLocation = keyLookup($scope.appInfo.fuelCards.locations, card.CustLocKey, 'ID', '(Default)');\r\n $scope.securityOptions.format = format.Description;\r\n $scope.securityOptions.department = keyLookup($scope.appInfo.fuelCards.departments, card.CardDptKey, 'Description', '');\r\n $scope.securityOptions.state = keyLookup($scope.appInfo.fuelCards.states, card.Vehicle_State_Key, 'Description', '');\r\n $scope.securityOptions.cardType = card.Type === \"0\" ? 'Card Holder' : 'Vehicle Card';\r\n $scope.securityOptions.cardStatus = keyLookup($scope.appInfo.fuelCards.statusCodes, card.Status, 'Description', '');\r\n $scope.securityOptions.deactivationReason = keyLookup($scope.appInfo.fuelCards.deactivateReasons, card.CardDeactRsn_Key, 'Description', '');\r\n $scope.securityOptions.embossingReason = keyLookup($scope.appInfo.fuelCards.embossingReasons, card.CardEmbRsn_Key, 'Description', '');\r\n $scope.securityOptions.alertRule = keyLookup($scope.appInfo.fuelCards.alertRules, card.CardAlertRule_Key, 'ID', '');\r\n\r\n //show the card detail screen\r\n $scope.appInfo.fuelCards.viewCards.shown = false;\r\n $scope.appInfo.fuelCards.modalEdit.shown = true;\r\n };\r\n })\r\n .controller(\"viewCardsSideMenuCtrl\", function ($scope, FuelCardsService, WebFunctions, reportingService, $filter)\r\n {\r\n 'use strict';\r\n $scope.cols = [];\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.viewCards) $scope.locationInfo.sideMenuData.viewCards = [];\r\n $scope.locationInfo.sideMenuData.viewCards.reportType = 'ViewCards';\r\n $scope.locationInfo.sideMenuData.viewCards.cardFormat = '0';\r\n $scope.locationInfo.sideMenuData.viewCards.cardNumber = '';\r\n $scope.locationInfo.sideMenuData.viewCards.active = 'True';\r\n $scope.locationInfo.sideMenuData.viewCards.expired = 'False';\r\n $scope.locationInfo.sideMenuData.viewCards.pending = 'False';\r\n $scope.locationInfo.sideMenuData.viewCards.locked = 'False';\r\n $scope.locationInfo.sideMenuData.viewCards.cancelled = 'False';\r\n $scope.$root.reportSettings.reportKey = 20;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.viewCards.cardFormat = $scope.reportSettings.loadOptions.cardFormat;\r\n $scope.locationInfo.sideMenuData.viewCards.cardNumber = $scope.reportSettings.loadOptions.cardNumber;\r\n $scope.locationInfo.sideMenuData.viewCards.active = $scope.reportSettings.loadOptions.active;\r\n $scope.locationInfo.sideMenuData.viewCards.expired = $scope.reportSettings.loadOptions.expired;\r\n $scope.locationInfo.sideMenuData.viewCards.pending = $scope.reportSettings.loadOptions.pending;\r\n $scope.locationInfo.sideMenuData.viewCards.locked = $scope.reportSettings.loadOptions.locked;\r\n $scope.locationInfo.sideMenuData.viewCards.cancelled = $scope.reportSettings.loadOptions.cancelled;\r\n $scope.locationInfo.sideMenuData.viewCards.department = $scope.reportSettings.loadOptions.department;\r\n $scope.locationInfo.sideMenuData.viewCards.template = $scope.reportSettings.loadOptions.template;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.cardFormat = $scope.locationInfo.sideMenuData.viewCards.cardFormat;\r\n $scope.reportSettings.saveOptions.cardNumber = $scope.locationInfo.sideMenuData.viewCards.cardNumber;\r\n $scope.reportSettings.saveOptions.active = $scope.locationInfo.sideMenuData.viewCards.active;\r\n $scope.reportSettings.saveOptions.expired = $scope.locationInfo.sideMenuData.viewCards.expired;\r\n $scope.reportSettings.saveOptions.pending = $scope.locationInfo.sideMenuData.viewCards.pending;\r\n $scope.reportSettings.saveOptions.locked = $scope.locationInfo.sideMenuData.viewCards.locked;\r\n $scope.reportSettings.saveOptions.cancelled = $scope.locationInfo.sideMenuData.viewCards.cancelled;\r\n $scope.reportSettings.saveOptions.department = $scope.locationInfo.sideMenuData.viewCards.department;\r\n $scope.reportSettings.saveOptions.template = $scope.locationInfo.sideMenuData.viewCards.template;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n var format = $scope.locationInfo.sideMenuData.viewCards.cardFormat === '' ? '0' :\r\n $scope.locationInfo.sideMenuData.viewCards.cardFormat;\r\n var active = $scope.locationInfo.sideMenuData.viewCards.active === \"True\" ? -1 : 0;\r\n var expired = $scope.locationInfo.sideMenuData.viewCards.expired === \"True\" ? -1 : 0;\r\n var pending = $scope.locationInfo.sideMenuData.viewCards.pending === \"True\" ? -1 : 0;\r\n var locked = $scope.locationInfo.sideMenuData.viewCards.locked === \"True\" ? -1 : 0;\r\n var cancelled = $scope.locationInfo.sideMenuData.viewCards.cancelled === \"True\" ? -1 : 0;\r\n var department = $scope.locationInfo.sideMenuData.viewCards.department === '' ? '0':\r\n $scope.locationInfo.sideMenuData.viewCards.department;\r\n\r\n var qs = \"reportName=\" + 'CustomerCardList' +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-CardFormatKey=\" + format +\r\n \"&RP-CardNumDesc=\" + $scope.locationInfo.sideMenuData.viewCards.cardNumber +\r\n \"&RP-IsActive=\" + active +\r\n \"&RP-IsExpired=\" + expired +\r\n \"&RP-IsPending=\" + pending +\r\n \"&RP-IsLocked=\" + locked +\r\n \"&RP-IsCancelled=\" + cancelled +\r\n \"&RP-Department=\" + department +\r\n \"&RP-Template=\" + $scope.locationInfo.sideMenuData.viewCards.template +\r\n \"&RP-CanViewCardNumbers=\" + $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers);\r\n\r\n reportingService.exportReport(qs, args.format);\r\n });\r\n })\r\n .controller(\"addCardsCtrl\", function ($scope, $compile, FuelCardsService, WebFunctions, $filter, validatorSvc, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.columns = [\r\n {\r\n field: \"description\",\r\n title: localStrings.getLocalizedString(\"CardDescription\"),\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"k-input k-textbox\")\r\n .attr(\"maxlength\", 30)\r\n .prop('required', true)\r\n .attr(\"data-required-msg\", localStrings.getLocalizedString(\"Required\"))\r\n .appendTo(element);\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n },\r\n {\r\n field: \"number\",\r\n title: localStrings.getLocalizedString(\"CardNumber\"),\r\n width: 160,\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"maxlength\", $scope.context.maxCardNoLength)\r\n .prop('required', true)\r\n .attr(\"data-required-msg\", localStrings.getLocalizedString(\"Required\"))\r\n .appendTo(element)\r\n .kendoNumericTextBox({\r\n decimals: 0,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n },\r\n {\r\n field: \"PIN\",\r\n title: localStrings.getLocalizedString(\"PIN\"),\r\n width: 120,\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"maxlength\", 16)\r\n .appendTo(element)\r\n .kendoNumericTextBox({\r\n decimals: 0,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n }\r\n },\r\n {\r\n field: \"vehicleID\",\r\n title: localStrings.getLocalizedString(\"VehicleID\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"k-input k-textbox\")\r\n .attr(\"maxlength\", 20)\r\n .appendTo(element);\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n },\r\n {\r\n field: \"licenseNo\",\r\n title: localStrings.getLocalizedString(\"LicenseNo\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"k-input k-textbox\")\r\n .attr(\"maxlength\", 15)\r\n .appendTo(element);\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n },\r\n {\r\n field: \"state\",\r\n title: localStrings.getLocalizedString(\"LicenseState\"),\r\n width: 60,\r\n template: \"#=state.Code#\",\r\n attributes: {class: \"alignLeft\"},\r\n editor: function (element, options)\r\n {\r\n $scope.kendo.stateList = $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .appendTo(element)\r\n .kendoDropDownList({\r\n autoBind: false,\r\n dataSource: $scope.context.states,\r\n dataTextField: \"Code\",\r\n dataValueField: \"Key\",\r\n optionLabel: {\r\n Key: null,\r\n Code: \"\"\r\n }\r\n });\r\n }\r\n },\r\n {\r\n title: ' ',\r\n template: \"\",\r\n width: 50\r\n },\r\n {\r\n title: ' ',\r\n template: \"\",\r\n width: 50\r\n }\r\n ];\r\n $scope.kendo.addCardsGridOptions = {\r\n autoBind: true,\r\n columns: $scope.kendo.columns,\r\n dataSource: new kendo.data.DataSource({\r\n data: [],\r\n schema: {\r\n model: {\r\n id: \"description\",\r\n fields: {\r\n key: {\r\n type: \"number\",\r\n editable: false,\r\n nullable: false,\r\n validation: false\r\n },\r\n description: {\r\n type: \"string\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n },\r\n number: {\r\n type: \"number\",\r\n editable: true,\r\n nullable: true,\r\n validation: {\r\n unique: function (input)\r\n {\r\n if (input.attr(\"name\") === \"number\" && input.val() !== '')\r\n {\r\n var matches = $scope.kendo.addCardsGrid.dataSource.data().toJSON().findAll({number: input.val().toNumber()}) || [];\r\n input.attr(\"data-unique-msg\", localStrings.getLocalizedString(\"MustBeUnique\"));\r\n return matches.length <= 1;\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n },\r\n PIN: {\r\n type: \"number\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n },\r\n vehicleID: {\r\n type: \"string\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n },\r\n licenseNo: {\r\n type: \"string\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n }, state: {\r\n editable: true,\r\n defaultValue: {Key: null, Code: \"\"}\r\n }\r\n }\r\n }\r\n }\r\n }),\r\n editable: {\r\n mode: \"inline\",\r\n update: true,\r\n destroy: true,\r\n createAt: \"bottom\"\r\n },\r\n filterable: false,\r\n messages: {\r\n commands: {\r\n cancel: \"\",\r\n canceledit: \"\",\r\n create: \"\",\r\n destroy: \"\",\r\n edit: \"\",\r\n save: \"\",\r\n select: \"\",\r\n update: \"\"\r\n }\r\n },\r\n mobile: true,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: true,\r\n sortable: true\r\n };\r\n\r\n function addFooterBar()\r\n {\r\n var addCardAction = $('
    ').appendTo($('#addCardsGrid'));\r\n $compile(addCardAction)($scope);\r\n }\r\n\r\n $scope.$on(\"kendoWidgetCreated\", function (event, widget)\r\n {\r\n if (widget === $scope.kendo.addCardsGrid)\r\n {\r\n addFooterBar();\r\n\r\n $scope.kendo.addCardsGrid.table.on(\"keydown\", function (e)\r\n {\r\n if (e.keyCode === kendo.keys.TAB && e.target.closest(\"td\").getAttribute(\"data-container-for\") === \"state\")\r\n {\r\n $scope.addRow();\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n $scope.kendo.addCardsGrid.tbody.on(\"click\", \"tr:not(.k-grid-edit-row)\", function (e)\r\n {\r\n $scope.kendo.addCardsGrid.editRow($scope.kendo.addCardsGrid.tbody.find(\"tr.k-state-selected\"));\r\n });\r\n }\r\n });\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AddNewCards) || !$scope.checkCurrentUserPermission(WebFunctions.EditCards))\r\n {\r\n $scope.goTo(\"/Home\");\r\n return;\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData)\r\n {\r\n $scope.locationInfo.sideMenuData = {};\r\n }\r\n $scope.locationInfo.sideMenuData.subMenu = '1';\r\n\r\n $scope.context = {\r\n template: {},\r\n format: {},\r\n showCardNo: false,\r\n showPIN: false,\r\n showVehInfo: false\r\n };\r\n\r\n FuelCardsService.getCardsContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!data.Successful)\r\n {\r\n $scope.modalifier.showSetupError();\r\n return;\r\n }\r\n\r\n $scope.context.formats = data.CardFormats;\r\n $scope.context.states = data.States;\r\n $scope.context.templates = data.CustomerCardTemplates.sortBy('Description');\r\n\r\n validateTemplates();\r\n\r\n if ($scope.context.templates.length === 0)\r\n {\r\n var msg = $scope.checkCurrentUserPermission(WebFunctions.AddNewCards) ? ' ' + localStrings.getLocalizedString(\"CreateOneOr\") + ' ' : ' ';\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddCards\"), localStrings.getLocalizedString(\"NoCardTemplates\") + msg + localStrings.getLocalizedString(\"ContactAccountAdmin\"));\r\n $scope.context.templateKey = 0;\r\n }\r\n else\r\n $scope.context.templateKey = $scope.context.templates[0].Key;\r\n\r\n // Need to make sure the template details are loaded when the add cards page is loaded\r\n if ($scope.context.templateKey > 0) {\r\n $scope.getTemplate($scope.context.templateKey);\r\n }\r\n });\r\n };\r\n\r\n $scope.addRow = function ()\r\n {\r\n if ($scope.kendo.templateDropDown.value().isBlank())\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"AddCards\"), localStrings.getLocalizedString(\"ValidTemplateRequired\"));\r\n return;\r\n }\r\n\r\n $scope.kendo.addCardsGrid.saveChanges();\r\n $scope.kendo.addCardsGrid.addRow();\r\n };\r\n\r\n $scope.getTemplate = function (key)\r\n {\r\n if (!key)\r\n {\r\n return;\r\n }\r\n\r\n FuelCardsService.getCardDetails(key).then(\r\n function (data)\r\n {\r\n if (!data.Successful)\r\n {\r\n $scope.modalifier.showSetupError();\r\n return;\r\n }\r\n\r\n //store complete card object\r\n $scope.context.templateDetails = data.CardDetails;\r\n\r\n //get selected template and format\r\n $scope.context.template = $filter('filter')($scope.context.templates, {Key: key.toNumber()}, true)[0];\r\n $scope.context.format = $filter('filter')($scope.context.formats, {Key: $scope.context.templateDetails.CardInfos[0].CardFmt_Key}, true)[0];\r\n $scope.context.maxCardNoLength = $scope.context.format.Mask.match(/0/g).length || 20;\r\n\r\n $scope.kendo.addCardsGrid.cancelRow();\r\n var cols = $scope.kendo.columns.clone();\r\n\r\n if ($scope.context.template.PhysicalCard !== -1)\r\n cols.remove({field: 'number'});\r\n\r\n if ($scope.context.template.AllowPIN === -1)\r\n cols.remove({field: 'PIN'});\r\n\r\n if ($scope.context.format.AllowVehicleInfo === -1)\r\n {\r\n cols.remove({field: 'vehicleID'});\r\n cols.remove({field: 'licenseNo'});\r\n cols.remove({field: 'state'});\r\n }\r\n\r\n $scope.kendo.addCardsGrid.setOptions({\r\n columns: cols\r\n });\r\n\r\n addFooterBar();\r\n });\r\n };\r\n\r\n $scope.saveCards = function ()\r\n {\r\n $scope.kendo.addCardsGrid.saveChanges();\r\n\r\n if ($scope.kendo.addCardsGrid.tbody.find(\".k-invalid\").length > 0)\r\n return;\r\n\r\n var cards = $scope.kendo.addCardsGrid.dataSource.data();\r\n\r\n //make sure there is at least one card to save\r\n if (angular.isUndefinedOrNullOrEmpty(cards))\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoCardsToSave\"), 'error');\r\n return;\r\n }\r\n\r\n //process each card entry for save\r\n angular.forEach(\r\n cards,\r\n function (item)\r\n {\r\n //create a complete card record from the selected template and push to the DB\r\n var newCard = angular.copy($scope.context.templateDetails.CardInfos[0]);\r\n\r\n newCard.Cust_Key = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n newCard.Description = item.description;\r\n newCard.Number = item.number;\r\n newCard.PIN = item.PIN;\r\n newCard.Expiration_Date = $scope.context.template.SetExpirationDate;\r\n newCard.VehicleID = item.vehicleID;\r\n newCard.Vehicle_License_No = item.licenseNo;\r\n newCard.Vehicle_State_Key = item.state.Key;\r\n newCard.Template = 0;\r\n newCard.Status = newCard.CardFmt_Allow_Pending === '-1' ? '4' : '0';\r\n\r\n FuelCardsService.addCard(\r\n 4,\r\n newCard,\r\n $scope.context.templateDetails.CardCFs[0],\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey).then(\r\n function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (!data.CardNumberValid)\r\n //notify on failure\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"CardNumberUnique\"), 'error');\r\n }\r\n else\r\n {\r\n //remove saved cards\r\n var result = getCard();\r\n var i = cards.indexOf(result);\r\n cards.splice(i, 1);\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesSaved\"), \"success\");\r\n }\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"RecordNotSaved\"), 'error');\r\n }\r\n });\r\n\r\n //javascript closure to capture index and hold it until the promise returns\r\n /*jshint latedef: false */\r\n var getCard = (function ()\r\n {\r\n var myItem = item;\r\n return function ()\r\n {\r\n return myItem;\r\n };\r\n })();\r\n });\r\n };\r\n\r\n /*jshint latedef: false */\r\n var validateTemplates = function ()\r\n {\r\n for (var i = $scope.context.templates.length - 1; i >= 0; i--)\r\n {\r\n if ($scope.context.templates[i].PhysicalCard === -1 && !($scope.context.templates[i].AutoNoKey === -1 ||\r\n $scope.context.templates[i].AllowPending === -1))\r\n {\r\n $scope.context.templates.splice(i, 1);\r\n }\r\n }\r\n };\r\n\r\n })\r\n .controller(\"locationsCtrl\", function ($scope, FuelCardsService, customerService, validatorSvc, $filter, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.kendo = {};\r\n $scope.kendo.locationsGrid = {};\r\n $scope.kendo.locationsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.selectLocation(dataItem);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"ID\",\r\n title: localStrings.getLocalizedString(\"ID\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Description\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Address1\",\r\n title: localStrings.getLocalizedString(\"Address\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"City\",\r\n title: localStrings.getLocalizedString(\"City\"),\r\n width: 125,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"County\",\r\n title: localStrings.getLocalizedString(\"County\"),\r\n width: 125,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"State\",\r\n title: localStrings.getLocalizedString(\"StateProvince\"),\r\n width: 90,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"PostalCode\",\r\n title: localStrings.getLocalizedString(\"PostalCode\"),\r\n width: 90,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.locationsGridInit = function ()\r\n {\r\n $scope.kendo.locationsGridDS = new kendo.data.DataSource({\r\n data: $scope.appInfo.fuelCards.locations.results\r\n });\r\n\r\n $scope.kendo.locationsGridDS.read();\r\n $scope.kendo.locationsGrid.dataSource.data($scope.kendo.locationsGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.checkForAppliedProfile();\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"5\";\r\n if (!$scope.appInfo.fuelCards.states)\r\n {\r\n FuelCardsService.getCardsContext(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey\r\n ).then(\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.states = data.States;\r\n }\r\n );\r\n }\r\n $scope.appInfo.fuelCards.locations = {\r\n results: [],\r\n selected: {},\r\n disableCtrls: true,\r\n LocIDFormat: 1,\r\n LocIDLength: 10\r\n };\r\n\r\n $scope.canAddorSave = $scope.checkCurrentUserPermission(WebFunctions.ViewCards) && ($scope.checkCurrentUserPermission(WebFunctions.AddNewCards) ||\r\n $scope.checkCurrentUserPermission(WebFunctions.EditCards));\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n if (!$scope.appInfo.fuelCards.states)\r\n {\r\n FuelCardsService.getCardsContext(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey\r\n ).then(\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.states = data.States;\r\n $scope.appInfo.fuelCards.states.unshift({Key: 0, Name: ' '});\r\n $scope.pullLocations();\r\n }\r\n );\r\n }\r\n else\r\n $scope.pullLocations();\r\n $scope.predicate = 'ID';\r\n $scope.reverse = false;\r\n };\r\n\r\n $scope.addLocation = function ()\r\n {\r\n $scope.clearLocation();\r\n $scope.appInfo.fuelCards.locations.disableCtrls = false;\r\n };\r\n\r\n $scope.clearLocation = function ()\r\n {\r\n angular.copy(FuelCardsService.blankLocation, $scope.appInfo.fuelCards.locations.selected);\r\n $scope.appInfo.fuelCards.locations.disableCtrls = true;\r\n validatorSvc.clearAllValidations();\r\n };\r\n\r\n $scope.deleteLocation = function (location)\r\n {\r\n var yes = function ()\r\n {\r\n $scope.pushLocation(8, location);\r\n };\r\n\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"DeleteLocation\"), yes);\r\n };\r\n\r\n $scope.saveLocation = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n if ($scope.appInfo.fuelCards.locations.selected.Key === 0)\r\n {\r\n $scope.appInfo.fuelCards.locations.selected.CustKey = $scope.appInfo.webUser.CurrentAuthorization.CustKey;\r\n $scope.appInfo.fuelCards.locations.selected.Type = 2;\r\n $scope.pushLocation(4, $scope.appInfo.fuelCards.locations.selected);\r\n } else\r\n $scope.pushLocation(16, $scope.appInfo.fuelCards.locations.selected);\r\n };\r\n\r\n $scope.selectLocation = function (location)\r\n {\r\n $scope.clearLocation();\r\n angular.copy(location, $scope.appInfo.fuelCards.locations.selected);\r\n $scope.appInfo.fuelCards.locations.disableCtrls = !$scope.checkCurrentUserPermission(WebFunctions.EditCards);\r\n };\r\n\r\n $scope.pullLocations = function ()\r\n {\r\n customerService.getCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, 2)\r\n .then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.Locations.length > 0)\r\n {\r\n $scope.appInfo.fuelCards.locations.LocIDFormat = data.LocIDFormat || 0;\r\n $scope.appInfo.fuelCards.locations.LocIDLength = data.LocIDLength || 10;\r\n $scope.appInfo.fuelCards.locations.results = data.Locations\r\n .each(function (loc, i)\r\n {\r\n var state = $scope.appInfo.fuelCards.states.find({Key: loc.StateKey});\r\n loc.State = state ? state.Code : null;\r\n })\r\n .sortBy('Description');\r\n $scope.selectLocation($scope.appInfo.fuelCards.locations.results[0]);\r\n $scope.kendo.locationsGridInit();\r\n $scope.kendo.locationsGridInit();\r\n }\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoResults\"), 'warning');\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n }\r\n );\r\n\r\n };\r\n\r\n $scope.pushLocation = function (status, location)\r\n {\r\n customerService.saveCustomerLocations(\r\n status,\r\n location,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n )\r\n .then(function (data)\r\n {\r\n $scope.clearLocation();\r\n $scope.pullLocations();\r\n $scope.resetDirtyFlags($scope.appInfo.fuelCards.locations.locationsForm);\r\n }\r\n );\r\n };\r\n\r\n $scope.updatePhone = function ()\r\n {\r\n $scope.appInfo.fuelCards.locations.selected.Phone = $scope.appInfo.fuelCards.locations.selected.PhoneFormatted.replace(/[^0-9]/g, '');\r\n };\r\n })\r\n .controller(\"departmentsCtrl\", function ($scope, $filter, $timeout, FuelCardsService, validatorSvc, WebFunctions, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.cols = [];\r\n $scope.kendo = {departmentsGridReady: false};\r\n $scope.kendo.departmentsGrid = {};\r\n $scope.kendo.departmentsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n $scope.selectRow(dataItem.deptKey);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"deptName\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell1Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell2Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell3Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell4Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"cell5Value\",\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n //height: $(document).height() - 375,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.departmentsGridInit = function ()\r\n {\r\n $scope.kendo.departmentsGridDS = new kendo.data.DataSource({\r\n data: $scope.tableArray\r\n });\r\n\r\n $scope.kendo.departmentsGridDS.read();\r\n $scope.kendo.departmentsGrid.dataSource.data($scope.kendo.departmentsGridDS.data());\r\n\r\n if ($scope.cols[0])\r\n $(\"#departmentsGrid th[data-field=cell1Value] a\").html($scope.cols[0].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(1);\r\n\r\n if ($scope.cols[1])\r\n $(\"#departmentsGrid th[data-field=cell2Value] a\").html($scope.cols[1].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(2);\r\n\r\n if ($scope.cols[2])\r\n $(\"#departmentsGrid th[data-field=cell3Value] a\").html($scope.cols[2].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(3);\r\n\r\n if ($scope.cols[3])\r\n $(\"#departmentsGrid th[data-field=cell4Value] a\").html($scope.cols[3].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(4);\r\n\r\n if ($scope.cols[4])\r\n $(\"#departmentsGrid th[data-field=cell5Value] a\").html($scope.cols[4].FieldName);\r\n else\r\n $scope.kendo.departmentsGrid.hideColumn(5);\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n $scope.departments = [];\r\n $scope.fields = [];\r\n $scope.values = [];\r\n $scope.selDept = {};\r\n $scope.selVals = [];\r\n $scope.disableControls = true;\r\n\r\n $scope.canAddorSave = $scope.checkCurrentUserPermission(WebFunctions.ViewCards) && ($scope.checkCurrentUserPermission(WebFunctions.AddNewCards) ||\r\n $scope.checkCurrentUserPermission(WebFunctions.EditCards));\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.pullDepartments();\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.tableArray))\r\n $scope.selectRow($scope.tableArray[0].deptKey);\r\n };\r\n\r\n $scope.createObjects = function (data)\r\n {\r\n $scope.display = {\r\n hideCol1: true,\r\n hideCol2: true,\r\n hideCol3: true,\r\n hideCol4: true,\r\n hideCol5: true,\r\n disableControls: true\r\n };\r\n\r\n if (data.Successful)\r\n {\r\n $scope.departments = data.Departments || [];\r\n $scope.fields = data.Fields || [];\r\n $scope.values = data.Values || [];\r\n\r\n if ($scope.departments.length === 0 && $scope.fields.length === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoResults\"), 'warning');\r\n }\r\n }\r\n else\r\n {\r\n $scope.modalifier.showSetupError();\r\n return;\r\n }\r\n\r\n //(rare) catch any empty field names and give them a default value\r\n angular.forEach($scope.fields, function (item)\r\n {\r\n if (item.Key > 0 && item.FieldName.isBlank())\r\n item.FieldName = localStrings.getLocalizedString(\"DeptField\") + ' ' + item.FieldNumber;\r\n });\r\n\r\n // No depts defined, create empty binding objs\r\n if ($scope.departments.length === 0)\r\n {\r\n $scope.selDept = {\r\n \"CustKey\": $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n \"Description\": \"\",\r\n \"Key\": 0,\r\n \"TimeStamp\": \"\"\r\n };\r\n\r\n // create a blank value obj for any defined fields\r\n angular.forEach($scope.fields, function (field)\r\n {\r\n $scope.selVals.push({\r\n \"CardDptFldKey\": field.Key,\r\n \"CardDptKey\": 0,\r\n \"FieldValue\": \"\",\r\n \"Key\": 0,\r\n \"TimeStamp\": \"\"\r\n });\r\n });\r\n }\r\n else\r\n // depts exist, create any needed empty values for fields not previously defined\r\n {\r\n var temp = {};\r\n angular.forEach($scope.departments, function (dept)\r\n {\r\n angular.forEach($scope.fields, function (field)\r\n {\r\n temp = ($filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: field.Key\r\n }));\r\n if (temp.length === 0)\r\n {\r\n $scope.values.push({\r\n \"CardDptFldKey\": field.Key,\r\n \"CardDptKey\": dept.Key,\r\n \"FieldValue\": \"\",\r\n \"Key\": 0,\r\n \"TimeStamp\": \"\"\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n if ($scope.departments.length > 0 && $scope.fields.length > 0)\r\n $scope.makeTable();\r\n\r\n if ($scope.departments.length > 0 && $scope.fields.length === 0)\r\n $scope.loadTable();\r\n\r\n if ($scope.departments.length === 0)\r\n $scope.tableArray = [];\r\n\r\n validatorSvc.clearAllValidations();\r\n\r\n $scope.kendo.departmentsGridInit();\r\n };\r\n\r\n $scope.deleteDept = function ()\r\n {\r\n var yes = function ()\r\n {\r\n $scope.pushDepartments(8);\r\n };\r\n\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"DeleteDepartment\"), yes);\r\n };\r\n\r\n $scope.pullDepartments = function ()\r\n {\r\n FuelCardsService.getCardsDepartments($scope.appInfo.webUser.CurrentAuthorization.CustKey)\r\n .then(function (data)\r\n {\r\n $scope.createObjects(data);\r\n $scope.resetDirtyFlags($scope.departmentForm);\r\n }\r\n );\r\n };\r\n\r\n $scope.pushDepartments = function (recStatus)\r\n {\r\n if (recStatus !== 8 && !validatorSvc.executeValidations())\r\n return;\r\n\r\n if (angular.isUndefinedOrNullOrEmpty(recStatus))\r\n recStatus = $scope.selDept.Key === 0 ? 4 : 16;\r\n\r\n $scope.selDept.Description = $scope.selDept.newDesc;\r\n\r\n FuelCardsService.saveCardsDepartments(\r\n recStatus,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n [$scope.selDept],\r\n null,\r\n $scope.selVals,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n )\r\n .then(function (data)\r\n {\r\n $scope.selDept = {};\r\n $scope.selVals = [];\r\n $scope.display.disableControls = true;\r\n $scope.createObjects(data);\r\n $scope.resetDirtyFlags($scope.departmentForm);\r\n }\r\n );\r\n\r\n $scope.selDept = {};\r\n $scope.selVals = [];\r\n $scope.display.disableControls = true;\r\n\r\n };\r\n\r\n $scope.addRow = function ()\r\n {\r\n $scope.display.disableControls = !$scope.canAddorSave;\r\n $scope.selDept = {\r\n CustKey: $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n Description: \"\",\r\n Key: 0,\r\n TimeStamp: ''\r\n };\r\n\r\n $scope.selVals = [];\r\n\r\n angular.forEach($scope.fields, function (item)\r\n {\r\n $scope.selVals.push({\r\n CardDptFldKey: item.Key,\r\n CardDptKey: 0,\r\n FieldValue: '',\r\n Key: 0,\r\n TimeStamp: ''\r\n });\r\n });\r\n\r\n $scope.setFocusOnReady(\"#fc-dept-description\");\r\n };\r\n\r\n $scope.selectRow = function (key)\r\n {\r\n validatorSvc.clearAllValidations();\r\n var dept = $filter('filter')($scope.departments, {Key: key}, true)[0];\r\n $scope.selDept = dept;\r\n $scope.selDept.newDesc = dept.Description;\r\n $scope.selVals = $scope.values.findAll({CardDptKey: dept.Key}).sortBy(function (n)\r\n {\r\n return $scope.fields.find({Key: n.CardDptFldKey}).FieldNumber;\r\n });\r\n $scope.display.disableControls = !$scope.canAddorSave;\r\n\r\n $scope.setFocusOnReady(\"#fc-dept-description\");\r\n };\r\n\r\n $scope.makeTable = function ()\r\n {\r\n $scope.tableArray = [];\r\n\r\n //get columns into the righ torder\r\n $scope.cols = $filter('orderBy')($scope.fields, 'FieldNumber');\r\n\r\n angular.forEach($scope.departments, function (dept)\r\n {\r\n var row = {};\r\n row.deptKey = dept.Key;\r\n row.deptName = dept.Description;\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[0]))\r\n {\r\n var cell1 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[0].Key\r\n })[0];\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty(cell1))\r\n {\r\n row.cell1Key = cell1.Key;\r\n row.cell1Value = cell1.FieldValue;\r\n $scope.display.hideCol1 = false;\r\n }\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[1]))\r\n {\r\n var cell2 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[1].Key\r\n })[0];\r\n if (!angular.isUndefinedOrNullOrEmpty(cell2))\r\n {\r\n row.cell2Key = cell2.Key;\r\n row.cell2Value = cell2.FieldValue;\r\n $scope.display.hideCol2 = false;\r\n }\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[2]))\r\n {\r\n var cell3 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[2].Key\r\n })[0];\r\n if (!angular.isUndefinedOrNullOrEmpty(cell3))\r\n {\r\n row.cell3Key = cell3.Key;\r\n row.cell3Value = cell3.FieldValue;\r\n $scope.display.hideCol3 = false;\r\n }\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[3]))\r\n {\r\n var cell4 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[3].Key\r\n })[0];\r\n if (!angular.isUndefinedOrNullOrEmpty(cell4))\r\n {\r\n row.cell4Key = cell4.Key;\r\n row.cell4Value = cell4.FieldValue;\r\n $scope.display.hideCol4 = false;\r\n }\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.cols[4]))\r\n {\r\n var cell5 = $filter('filter')($scope.values, {\r\n CardDptKey: dept.Key,\r\n CardDptFldKey: $scope.cols[4].Key\r\n })[0];\r\n if (!angular.isUndefinedOrNullOrEmpty(cell5))\r\n {\r\n row.cell5Key = cell5.Key;\r\n row.cell5Value = cell5.FieldValue;\r\n $scope.display.hideCol5 = false;\r\n }\r\n }\r\n\r\n $scope.tableArray.push(row);\r\n });\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.tableArray))\r\n $scope.tableArray = $filter('orderBy')($scope.tableArray, 'department');\r\n };\r\n\r\n $scope.loadTable = function ()\r\n {\r\n $scope.tableArray = [];\r\n angular.forEach($scope.departments, function (dept)\r\n {\r\n $scope.tableArray.push({deptKey: dept.Key, deptName: dept.Description});\r\n });\r\n };\r\n })\r\n .controller(\"departmentSetupCtrl\", function ($scope, FuelCardsService, validatorSvc, $filter, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 40;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsCardsSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n\r\n $scope.formDisabled = $scope.checkCurrentUserPermission(WebFunctions.ViewCards) && !($scope.checkCurrentUserPermission(WebFunctions.AddNewCards) ||\r\n $scope.checkCurrentUserPermission(WebFunctions.EditCards));\r\n validatorSvc.clearValidationScopes();\r\n $scope.pullFields();\r\n };\r\n\r\n $scope.setFields = function ()\r\n {\r\n validatorSvc.clearAllValidations();\r\n $scope.fields = [{}, {}, {}, {}, {}];\r\n for (var index = 0; index < 5; ++index)\r\n {\r\n var match = $filter('filter')($scope.results, {FieldNumber: index + 1})[0];\r\n if (angular.isUndefinedOrNullOrEmpty(match))\r\n {\r\n $scope.fields[index] = {\r\n \"CustKey\": $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n \"FieldName\": \"\",\r\n \"FieldNumber\": index + 1,\r\n \"Key\": 0,\r\n \"TimeStamp\": \"\"\r\n };\r\n }\r\n else\r\n {\r\n $scope.fields[index] = match;\r\n }\r\n }\r\n\r\n $scope.setFocusOnReady(\"#fc-deptSU-content input:first\");\r\n };\r\n\r\n $scope.clickCancel = function ()\r\n {\r\n $scope.setFields();\r\n };\r\n\r\n $scope.clickSave = function ()\r\n {\r\n //fire off validations\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n //remove any empty records\r\n for (var i = $scope.fields.length - 1; i >= 0; i--)\r\n {\r\n if ($scope.fields[i].Key === 0 && $scope.fields[i].FieldName === '')\r\n $scope.fields.splice(i, 1);\r\n }\r\n\r\n //save the fields\r\n $scope.pushFields();\r\n };\r\n\r\n $scope.pullFields = function ()\r\n {\r\n FuelCardsService.getCardsDepartments($scope.appInfo.webUser.CurrentAuthorization.CustKey)\r\n .then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n $scope.results = data.Fields || [];\r\n }\r\n else\r\n {\r\n $scope.modalifier.showSetupError();\r\n $scope.results = [];\r\n }\r\n $scope.setFields();\r\n }\r\n );\r\n\r\n };\r\n\r\n $scope.pushFields = function ()\r\n {\r\n FuelCardsService.saveCardsDepartments(\r\n 5,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n null,\r\n $scope.fields,\r\n null,\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n )\r\n .then(function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.Successful)\r\n {\r\n $scope.results = data.Fields || [];\r\n $scope.resetDirtyFlags($scope.deptSetupForm);\r\n }\r\n else\r\n {\r\n $scope.results = [];\r\n }\r\n $scope.setFields();\r\n }\r\n }\r\n );\r\n };\r\n });","/**\r\n * Created by jvitoria on 9/5/14.\r\n */\r\nangular.module(\"pnFuelCardsPrices\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/FuelCards/Prices/LookupPrices\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"LookupPrices\"),\r\n controller: \"pricesLookupCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsPricesLocalization\");\r\n }\r\n }\r\n })\r\n .when(\"/FuelCards/Prices/PriceNoticeSettings\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"PriceNoticeSettings\"),\r\n controller: \"priceNoticeSettingsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"FuelCardsPricesLocalization\");\r\n }\r\n }\r\n });\r\n })\r\n\r\n .controller('fuelCardsPricesSideMenuCtrl', function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n };\r\n })\r\n\r\n .controller(\"pricesLookupCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CPPriceNotices))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 42;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsPricesSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\r\n };\r\n })\r\n\r\n .controller(\"pricesLookupSideMenuCtrl\", function ($scope, $filter, FuelCardsService, reportingService, localizationSvc, $timeout)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"FuelCardsPricesLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n\r\n // instantiate variables\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.lookupPrices = {\r\n reportType: 'PricesLookup',\r\n site: 0,\r\n product: 0,\r\n groupBy: 4\r\n };\r\n $scope.context = {\r\n sites: [{ CustContCPSite_Site_Key: 0, Site_Description: localStrings.getLocalizedString(\"Any\") }],\r\n products: [{ ProdAliasGrp_Key: 0, ProdAliasGrp_Description: localStrings.getLocalizedString(\"Any\") }],\r\n maxCPDays: 7\r\n };\r\n\r\n //set save / load settings parameter\r\n $scope.$root.reportSettings.reportKey = 30;\r\n\r\n //get context data for drop-downs\r\n FuelCardsService.getPriceNoticesSettings(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.Customer.CPPrcNtcRuleKey).then(\r\n function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (data.PriceNoticesSettingsSites.length > 0)\r\n {\r\n $scope.context.sites = $scope.context.sites.concat($filter('filter')(data.PriceNoticesSettingsSites, {Site_Selected: '-1'}));\r\n $scope.context.sites = $filter('orderBy')($scope.context.sites, 'Site_Description');\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoSitesConfigured\"), 'warning');\r\n }\r\n\r\n if (data.PriceNoticesSettingsGroups.length > 0)\r\n {\r\n //pull All Products record from the array and handle separately\r\n data.PriceNoticesSettingsGroups.splice(0, 1);\r\n\r\n $scope.context.products = $scope.context.products.concat($filter('filter')(data.PriceNoticesSettingsGroups, {ProdAliasGrp_Selected: '-1'}));\r\n $scope.context.products = $filter('orderBy')($scope.context.products, 'ProdAliasGrp_Description');\r\n }\r\n else\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoProductsConfigured\"), 'warning');\r\n }\r\n\r\n $scope.context.maxCPDays = data.CPPriceRuleMaxDays;\r\n }\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"FailedLoadContextualData\"), 'error');\r\n }\r\n );\r\n\r\n //Override default date selector options\r\n $scope.dateSelector.selection = 13;\r\n $scope.dateSelector.maxNumOfDays = $scope.context.maxCPDays || 7;\r\n $scope.dateSelector.overrideDefaults = true;\r\n $timeout(function () {\r\n $scope.dateSelector.options = [\r\n { name: localStrings.getLocalizedString(\"AllDays\"), value: 13 },\r\n { name: localStrings.getLocalizedString(\"Today\"), value: 0 },\r\n { name: localStrings.getLocalizedString(\"Yesterday\"), value: 1 },\r\n { name: localStrings.getLocalizedString(\"Tomorrow\"), value: 2 },\r\n { name: localStrings.getLocalizedString(\"LastSevenDays\"), value: 9 },\r\n { name: localStrings.getLocalizedString(\"SelectDays\"), value: 12 }];\r\n }, 0);\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.lookupPrices = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.lookupPrices;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n // Notify the user their date selection exceeds the configured limit\r\n var maxCPDays = [$scope.context.maxCPDays];\r\n if ((Date.parse($scope.dateSelector.endDate) - Date.parse($scope.dateSelector.startDate)) > ($scope.context.maxCPDays * 86400000))\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"PricingLimitedTo\", maxCPDays), 'warning');\r\n $scope.dateSelector.numOfDays = $scope.context.maxCPDays;\r\n }\r\n\r\n var qs = \"reportName=\" + 'CPPriceNotices' +\r\n \"&RP-CustContKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustContKey +\r\n \"&RP-FromDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-ThruDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-SiteKey=\" + $scope.locationInfo.sideMenuData.lookupPrices.site +\r\n \"&RP-ProductKey=\" + $scope.locationInfo.sideMenuData.lookupPrices.product +\r\n \"&RP-GroupBy=\" + $scope.locationInfo.sideMenuData.lookupPrices.groupBy;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n\r\n .controller(\"priceNoticeSettingsCtrl\", function ($scope, FuelCardsService, WebFunctions, $filter, templates, localStrings)\r\n {\r\n 'use strict';\r\n $scope.kendo = {};\r\n $scope.kendo.productsGrid = {};\r\n $scope.kendo.productsGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"ProdAliasGrp_Selected\",\r\n title: localStrings.getLocalizedString(\"Select\"),\r\n width: 70,\r\n attributes: {class: \"alignCenter\"},\r\n filterable: false,\r\n template: \"\"\r\n },\r\n {\r\n field: \"ProdAliasGrp_Description\",\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.sitesGrid = {};\r\n $scope.kendo.sitesGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"Site_Description\",\r\n title: localStrings.getLocalizedString(\"SiteDescription\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_Address1\",\r\n title: localStrings.getLocalizedString(\"Address\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_City\",\r\n title: localStrings.getLocalizedString(\"City\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"State_Code\",\r\n title: localStrings.getLocalizedString(\"State\"),\r\n width: 60,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_Zip\",\r\n title: localStrings.getLocalizedString(\"Zip\"),\r\n width: 60,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.siteSearchGrid = {};\r\n $scope.kendo.siteSearchGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"ProdAliasGrp_Selected\",\r\n title: localStrings.getLocalizedString(\"Select\"),\r\n width: 70,\r\n attributes: {class: \"alignCenter\"},\r\n filterable: false,\r\n template: \"\"\r\n },\r\n {\r\n field: \"Site_Description\",\r\n title: localStrings.getLocalizedString(\"Description\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_Address1\",\r\n title: localStrings.getLocalizedString(\"Address\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_City\",\r\n title: localStrings.getLocalizedString(\"City\"),\r\n width: 150,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"State_Code\",\r\n title: localStrings.getLocalizedString(\"State\"),\r\n width: 60,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Site_Zip\",\r\n title: localStrings.getLocalizedString(\"Zip\"),\r\n width: 60,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: true,\r\n selectable: \"row\",\r\n sortable: true,\r\n height:250 \r\n };\r\n\r\n $scope.kendo.siteSearchGridInit = function (ds)\r\n {\r\n $scope.kendo.siteSearchGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.siteSearchGridDS.read();\r\n $scope.kendo.siteSearchGrid.dataSource.data($scope.kendo.siteSearchGridDS.data());\r\n };\r\n\r\n $scope.kendo.sitesGridInit = function (ds)\r\n {\r\n $scope.kendo.sitesGridDS = new kendo.data.DataSource({\r\n data: ds,\r\n schema: {\r\n model: {\r\n fields: {\r\n Site_Description: {\r\n editable: false\r\n },\r\n Site_Address1: {\r\n editable: false\r\n },\r\n Site_City: {\r\n editable: false\r\n },\r\n State_Code: {\r\n editable: false\r\n },\r\n Site_Zip: {\r\n editable: false\r\n },\r\n Site_Selected: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n //filter: [\r\n // {field: \"Site_Selected\", operator: \"eq\", value: \"'-1'\"}\r\n //],\r\n batch: true\r\n });\r\n\r\n $scope.kendo.sitesGridDS.read();\r\n $scope.kendo.sitesGrid.dataSource.data($scope.kendo.sitesGridDS.data());\r\n };\r\n\r\n $scope.kendo.productsGridInit = function (ds)\r\n {\r\n $scope.kendo.productsGridDS = new kendo.data.DataSource({\r\n data: ds,\r\n schema: {\r\n model: {\r\n fields: {\r\n ProdAliasGrp_Selected: {\r\n editable: false\r\n },\r\n ProdAliasGrp_Description: {\r\n editable: false\r\n }\r\n }\r\n }\r\n },\r\n batch: true\r\n });\r\n\r\n $scope.kendo.productsGridDS.read();\r\n $scope.kendo.productsGrid.dataSource.data($scope.kendo.productsGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CPPriceNotices))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 42;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsPricesSideMenu\");\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n $scope.getWebProfileMessage(5);\r\n $scope.initPriceNoticesSettings();\r\n $scope.initModalSiteSelector();\r\n };\r\n\r\n $scope.initPriceNoticesSettings = function ()\r\n {\r\n $scope.appInfo.fuelCards.priceNoticesSettings = {};\r\n $scope.appInfo.fuelCards.priceNoticesSettings.methods = {};\r\n $scope.appInfo.fuelCards.priceNoticesSettings.allProducts = {\r\n CustContCPProd_Key: -1,\r\n CustContCPProd_CustCont_Key: null,\r\n ProdAliasGrp_Key: -1,\r\n ProdAliasGrp_ID: \"All\",\r\n ProdAliasGrp_Description: localStrings.getLocalizedString(\"AllProducts\"),\r\n ProdAliasGrp_Selected: \"0\",\r\n ts: null\r\n };\r\n $scope.refreshPriceNoticesSettings();\r\n };\r\n\r\n $scope.refreshPriceNoticesSettings = function ()\r\n {\r\n\r\n FuelCardsService.getPriceNoticesSettings(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey\r\n ).then\r\n (\r\n function (data)\r\n {\r\n //pull All Products record from the array and handle separately\r\n if (data.PriceNoticesSettingsGroups.length > 0)\r\n $scope.appInfo.fuelCards.priceNoticesSettings.allProducts = data.PriceNoticesSettingsGroups.splice(0, 1)[0] || [];\r\n\r\n $scope.kendo.sitesGridInit(data.PriceNoticesSettingsSites.sortBy('Site_Description'));\r\n $scope.kendo.productsGridInit(data.PriceNoticesSettingsGroups.sortBy('ProdAliasGrp_Description'));\r\n $scope.appInfo.fuelCards.priceNoticesSettings.methods = data.PriceNoticesSettingsMethods;\r\n\r\n $scope.kendo.sitesGrid.dataItems().forEach(function (item)\r\n {\r\n if (item.Site_Selected === '0')\r\n {\r\n $(\"tr[data-uid='\" + item.uid + \"']\").hide();\r\n }\r\n });\r\n }\r\n );\r\n\r\n if (!$scope.appInfo.fuelCards.company)\r\n {\r\n FuelCardsService.getCardsContext(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.appInfo.webUser.CurrentAuthorization.CompKey\r\n ).then(\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.states = data.States;\r\n $scope.appInfo.fuelCards.company = data.Company;\r\n }\r\n );\r\n }\r\n };\r\n\r\n $scope.initModalSiteSelector = function ()\r\n {\r\n $scope.appInfo.fuelCards.modalSiteSelector = {};\r\n $scope.appInfo.fuelCards.modalSiteSelector.shown = false;\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch = {};\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.city = null;\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.state = '';\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.postal = null;\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.limit = false;\r\n $scope.appInfo.fuelCards.modalSiteSelector.toManyResults = false;\r\n $scope.appInfo.fuelCards.modalSiteSelector.maxResults = 100;\r\n };\r\n\r\n $scope.showModalSiteSelector = function ()\r\n {\r\n $scope.initModalSiteSelector();\r\n $scope.appInfo.fuelCards.modalSiteSelector.shown = true;\r\n };\r\n\r\n $scope.retrieveSites = function ()\r\n {\r\n FuelCardsService.getSearchSites(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.city,\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.state,\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.postal,\r\n $scope.appInfo.fuelCards.modalSiteSelector.siteSearch.limit\r\n ).then\r\n (\r\n function (data)\r\n {\r\n $scope.kendo.siteSearchGridInit(data.SearchSites.sortBy('Site_Description'));\r\n\r\n if (data.SearchSites.length === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoResults\"), 'warning');\r\n return;\r\n }\r\n\r\n \r\n if ($scope.kendo.siteSearchGridDS.data().length > $scope.appInfo.fuelCards.modalSiteSelector.maxResults)\r\n $scope.appInfo.fuelCards.modalSiteSelector.toManyResults = true;\r\n else\r\n $scope.appInfo.fuelCards.modalSiteSelector.toManyResults = false;\r\n }\r\n );\r\n };\r\n\r\n $scope.checkAllProducts = function ()\r\n {\r\n angular.forEach($scope.kendo.productsGridDS.data(), function (item)\r\n {\r\n item.ProdAliasGrp_Selected = $scope.appInfo.fuelCards.priceNoticesSettings.allProducts.ProdAliasGrp_Selected || '0';\r\n });\r\n };\r\n\r\n $scope.disableNotices = function ()\r\n {\r\n angular.forEach($scope.appInfo.fuelCards.priceNoticesSettings.methods, function (item)\r\n {\r\n item.EmailSelected = '0';\r\n item.AltEmailSelected = '0';\r\n item.PhoneTextSelected = '0';\r\n });\r\n };\r\n\r\n $scope.addSites = function ()\r\n {\r\n angular.forEach($scope.kendo.siteSearchGridDS.data(), function (site)\r\n {\r\n if (site.CustContCPSite_Key === 0 && site.Site_Selected === '-1')\r\n {\r\n $scope.kendo.sitesGridDS.add(site);\r\n }\r\n });\r\n $scope.initModalSiteSelector();\r\n };\r\n\r\n $scope.removeSite = function (row)\r\n {\r\n row.Site_Selected = '0';\r\n $(\"tr[data-uid='\" + row.uid + \"']\").hide();\r\n };\r\n\r\n $scope.savePriceNoticeSettings = function ()\r\n {\r\n var products = $scope.kendo.productsGridDS.data().toJSON();\r\n var sites = $scope.kendo.sitesGridDS.data().toJSON();\r\n var hasProducts = products.any({ProdAliasGrp_Selected: '-1'});\r\n var hasSites = sites.any({Site_Selected: '-1'});\r\n if (!hasProducts || !hasSites)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"PriceNoticeSettings\"), localStrings.getLocalizedString(\"AtLeastOneProduct\"));\r\n return;\r\n }\r\n\r\n //put All Products back in its array for save\r\n products.unshift($scope.appInfo.fuelCards.priceNoticesSettings.allProducts);\r\n\r\n FuelCardsService.savePriceNoticeSettings(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustContKey,\r\n sites,\r\n products,\r\n $scope.appInfo.fuelCards.priceNoticesSettings.methods\r\n ).then\r\n (\r\n function (data)\r\n {\r\n $scope.initialize();\r\n }\r\n );\r\n };\r\n })\r\n;","/**\r\n * Created by jvitoria on 9/5/14.\r\n */\r\nangular.module(\"pnFuelCardsTransactions\", ['core.objects'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/FuelCards/Transactions/TransactionDetails\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionDetails\"),\r\n controller: \"transactionDetailsCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TransactionSummary\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionSummary\"),\r\n controller: \"transactionSummaryCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TransactionByInvoice\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionByInvoice\"),\r\n controller: \"transactionByInvoiceCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TransactionTaxRecap\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionTaxRecap\"),\r\n controller: \"transactionTaxRecapCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TaxDetails\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TaxDetails\"),\r\n controller: \"taxDetailsCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TaxSummary\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TaxSummary\"),\r\n controller: \"taxSummaryCtrl\"\r\n })\r\n .when(\"/FuelCards/Transactions/TransactionAlerts\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"TransactionAlerts\"),\r\n controller: \"transactionsAlertsCtrl\"\r\n });\r\n })\r\n\r\n .controller('fuelCardsTransactionsSideMenuCtrl', function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData)\r\n $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.appInfo.fuelCards)\r\n $scope.appInfo.fuelCards = {};\r\n if (!$scope.appInfo.fuelCards)\r\n $scope.appInfo.fuelCards.transactionAlerts = {};\r\n };\r\n })\r\n\r\n .controller(\"transactionDetailsCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"0\";\r\n };\r\n })\r\n\r\n .controller(\"transactionDetailsSideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.$root.reportSettings.reportKey = 22;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"0\",\r\n transactionDetails: {\r\n cardNoDesc: '',\r\n inclUnbilled: true,\r\n inclBilled: false,\r\n groupBy: \"0\",\r\n inclAdditionalInfo: false,\r\n viewCardNumbers: $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers) || false\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionDetails = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionDetails;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = 'CardTransactionDetails';\r\n var additionalInfoReportName = $scope.appInfo.webUser.CurrentAuthorization.Customer.CPInvcRecapSumTaxesByInvcGrp ? 'CardTransactionDetailsByTaxInvGroups' : 'CardTransactionDetailsIAD';\r\n rptName = $scope.locationInfo.sideMenuData.transactionDetails.inclAdditionalInfo ? additionalInfoReportName : rptName;\r\n\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-CardNoDesc=\" + $scope.locationInfo.sideMenuData.transactionDetails.cardNoDesc +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-InclBilled=\" + $scope.locationInfo.sideMenuData.transactionDetails.inclBilled +\r\n \"&RP-InclUnbilled=\" + $scope.locationInfo.sideMenuData.transactionDetails.inclUnbilled +\r\n \"&RP-GroupBy=\" + $scope.locationInfo.sideMenuData.transactionDetails.groupBy +\r\n \"&RP-ViewCardNumbers=\" + $scope.locationInfo.sideMenuData.transactionDetails.viewCardNumbers;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.transactionDetails.inclUnbilled === false && $scope.locationInfo.sideMenuData.transactionDetails.inclBilled === false)\r\n {\r\n $scope.locationInfo.sideMenuData.transactionDetails.inclUnbilled = true;\r\n }\r\n };\r\n })\r\n\r\n .controller(\"transactionSummaryCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n };\r\n })\r\n\r\n .controller(\"transactionSummarySideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.$root.reportSettings.reportKey = 23;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\",\r\n transactionSummary: {\r\n cardNoDesc: '',\r\n invoiceNo: '',\r\n inclUnbilled: true,\r\n enableUnbilled: true,\r\n inclBilled: true,\r\n enableBilled: true,\r\n recap1: 4,\r\n recap2: 0\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionSummary = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n $scope.updateOptions();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionSummary;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var qs = \"reportName=\" + 'CardTransactionSummary' +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-CardNoDesc=\" + $scope.locationInfo.sideMenuData.transactionSummary.cardNoDesc +\r\n \"&RP-InvoiceNo=\" + $scope.locationInfo.sideMenuData.transactionSummary.invoiceNo +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-InclBilled=\" + $scope.locationInfo.sideMenuData.transactionSummary.inclBilled +\r\n \"&RP-InclUnbilled=\" + $scope.locationInfo.sideMenuData.transactionSummary.inclUnbilled +\r\n \"&RP-Recap1=\" + $scope.locationInfo.sideMenuData.transactionSummary.recap1 +\r\n \"&RP-Recap2=\" + $scope.locationInfo.sideMenuData.transactionSummary.recap2 +\r\n \"&RP-ViewCardNumbers=\" + $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers) || false;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.transactionSummary.invoiceNo === '')\r\n {\r\n $scope.locationInfo.sideMenuData.transactionSummary.enableUnbilled = true;\r\n $scope.locationInfo.sideMenuData.transactionSummary.enableBilled = true;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.transactionSummary.inclUnbilled = false;\r\n $scope.locationInfo.sideMenuData.transactionSummary.inclBilled = true;\r\n $scope.locationInfo.sideMenuData.transactionSummary.enableUnbilled = false;\r\n $scope.locationInfo.sideMenuData.transactionSummary.enableBilled = false;\r\n }\r\n\r\n if ($scope.locationInfo.sideMenuData.transactionSummary.inclUnbilled === false && $scope.locationInfo.sideMenuData.transactionSummary.inclBilled === false)\r\n {\r\n $scope.locationInfo.sideMenuData.transactionSummary.inclUnbilled = true;\r\n }\r\n };\r\n })\r\n\r\n .controller(\"transactionByInvoiceCtrl\", function ($scope, validatorSvc, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n validatorSvc.clearValidationScopes();\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n };\r\n })\r\n\r\n .controller(\"transactionByInvoiceSideMenuCtrl\", function ($scope, reportingService, WebFunctions, validatorSvc)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.$root.reportSettings.reportKey = 24;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"2\",\r\n transactionByInvoice: {\r\n invoiceNo: '',\r\n groupBy: 0,\r\n inclAdditionalInfo: false\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionByInvoice = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionByInvoice;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = 'CardTransactionsByInvoice';\r\n var additionalInfoReportName = $scope.appInfo.webUser.CurrentAuthorization.Customer.CPInvcRecapSumTaxesByInvcGrp ? 'CardTransactionsByInvoiceWithTaxInvGroups' : 'CardTransactionsByInvoiceIAD';\r\n rptName = $scope.locationInfo.sideMenuData.transactionByInvoice.inclAdditionalInfo ? additionalInfoReportName : rptName;\r\n\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-InvoiceNo=\" + $scope.locationInfo.sideMenuData.transactionByInvoice.invoiceNo +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-GroupBy=\" + $scope.locationInfo.sideMenuData.transactionByInvoice.groupBy +\r\n \"&RP-ViewCardNumbers=\" + $scope.checkCurrentUserPermission(WebFunctions.ViewCardNumbers) || false;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n\r\n .controller(\"taxDetailsCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n };\r\n })\r\n\r\n .controller(\"taxDetailsSideMenuCtrl\", function ($scope, validatorSvc, reportingService, FuelCardsService, WebFunctions, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"FuelCardsTransactionsLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n\r\n validatorSvc.clearValidationScopes();\r\n FuelCardsService.getTaxAuthorities(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey\r\n ).then(\r\n function (data)\r\n {\r\n $scope.appInfo.fuelCards.taxAuthorities = data.TaxAuthorities;\r\n $scope.appInfo.fuelCards.taxAuthorities.unshift({ Key: 0, Description: localStrings.getLocalizedString(\"None\") });\r\n\r\n $scope.$root.reportSettings.reportKey = 25;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"3\",\r\n taxDetails: {\r\n invoiceNo: '',\r\n taxAuthKey: '0',\r\n groupBy1: 1,\r\n enableGroupBy1None: true,\r\n groupBy2: 0,\r\n enableGroupBy2: true,\r\n groupBy3: 0,\r\n enableGroupBy3: false,\r\n inclTransDetail: true,\r\n inclAdditionalInfo: false,\r\n enableInclAdditionalInfo: true\r\n }\r\n };\r\n \r\n }\r\n );\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n $scope.updateOptions();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.taxDetails;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = 'CardTaxDetails';\r\n rptName += $scope.locationInfo.sideMenuData.taxDetails.inclTransDetail ? 'IT' : 'NT';\r\n rptName = $scope.locationInfo.sideMenuData.taxDetails.inclAdditionalInfo ? 'CardTaxDetailsIAD' : rptName;\r\n\r\n var taxAuthKey = $scope.locationInfo.sideMenuData.taxDetails.taxAuthKey ? $scope.locationInfo.sideMenuData.taxDetails.taxAuthKey : '0';\r\n\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-InvoiceNo=\" + $scope.locationInfo.sideMenuData.taxDetails.invoiceNo +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-TaxAuthKey=\" + taxAuthKey +\r\n \"&RP-GroupBy1=\" + $scope.locationInfo.sideMenuData.taxDetails.groupBy1 +\r\n \"&RP-GroupBy2=\" + $scope.locationInfo.sideMenuData.taxDetails.groupBy2 +\r\n \"&RP-GroupBy3=\" + $scope.locationInfo.sideMenuData.taxDetails.groupBy3;\r\n \r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.taxDetails.inclTransDetail === true)\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.enableInclAdditionalInfo = true;\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy1None = true;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.enableInclAdditionalInfo = false;\r\n $scope.locationInfo.sideMenuData.taxDetails.inclAdditionalInfo = false;\r\n if ($scope.locationInfo.sideMenuData.taxDetails.groupBy1 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.groupBy1 = \"1\";\r\n $scope.notifier.show(localStrings.getLocalizedString(\"IncludeTransactionDetailsWarning\"), 'warning');\r\n }\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy1None = false;\r\n }\r\n\r\n if ($scope.locationInfo.sideMenuData.taxDetails.groupBy1 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.groupBy2 = \"0\";\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy2 = false;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy2 = true;\r\n }\r\n\r\n if ($scope.locationInfo.sideMenuData.taxDetails.groupBy2 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.groupBy3 = \"0\";\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy3 = false;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxDetails.enableGroupBy3 = true;\r\n }\r\n };\r\n })\r\n\r\n .controller(\"taxSummaryCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"4\";\r\n };\r\n })\r\n\r\n .controller(\"taxSummarySideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.$root.reportSettings.reportKey = 26;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"4\",\r\n taxSummary: {\r\n invoiceNo: '',\r\n groupBy1: \"1\",\r\n groupBy2: \"0\",\r\n groupBy3: \"0\",\r\n enableGroupBy2: true,\r\n enableGroupBy3: false\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n $scope.updateOptions();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.taxSummary;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = 'CardTaxSummary';\r\n rptName = $scope.appInfo.webUser.CurrentAuthorization.Customer.CPInvcRecapSumTaxesByInvcGrp ? 'CardTaxSummaryByTaxInvGroups' : rptName;\r\n\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-InvoiceNo=\" + $scope.locationInfo.sideMenuData.taxSummary.invoiceNo +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-GroupBy1=\" + $scope.locationInfo.sideMenuData.taxSummary.groupBy1 +\r\n \"&RP-GroupBy2=\" + $scope.locationInfo.sideMenuData.taxSummary.groupBy2 +\r\n \"&RP-GroupBy3=\" + $scope.locationInfo.sideMenuData.taxSummary.groupBy3;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.taxSummary.groupBy1 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary.groupBy2 = \"0\";\r\n $scope.locationInfo.sideMenuData.taxSummary.enableGroupBy2 = false;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary.enableGroupBy2 = true;\r\n }\r\n\r\n if ($scope.locationInfo.sideMenuData.taxSummary.groupBy2 === \"0\")\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary.groupBy3 = \"0\";\r\n $scope.locationInfo.sideMenuData.taxSummary.enableGroupBy3 = false;\r\n }\r\n else\r\n {\r\n $scope.locationInfo.sideMenuData.taxSummary.enableGroupBy3 = true;\r\n }\r\n };\r\n })\r\n\r\n .controller(\"transactionsAlertsCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"6\";\r\n };\r\n })\r\n\r\n .controller(\"transactionsAlertsSideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n if (!$scope.locationInfo.sideMenuData.transactionsAlerts) $scope.locationInfo.sideMenuData.transactionsAlerts = {};\r\n $scope.locationInfo.sideMenuData.transactionsAlerts.reportType = 'fuelCardsTransactionsAlerts';\r\n $scope.locationInfo.sideMenuData.transactionsAlerts.reportCount = '10';\r\n $scope.$root.reportSettings.reportKey = 28;\r\n };\r\n\r\n $scope.refreshTransactionAlerts = function ()\r\n {\r\n $scope.appInfo.fuelCards.transactionAlerts = {};\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionsAlerts = $scope.reportSettings.loadOptions.controls;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionsAlerts;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var qs = \"reportName=CPAlertReportsArchive\" +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-NumberToReturn=\" + $scope.locationInfo.sideMenuData.transactionsAlerts.reportCount;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n })\r\n\r\n .controller(\"transactionTaxRecapCtrl\", function ($scope, WebFunctions, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.CardTransactions))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = 41;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"FuelCardsTransactionsSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"7\";\r\n };\r\n })\r\n\r\n .controller(\"transactionTaxRecapSideMenuCtrl\", function ($scope, validatorSvc, reportingService, WebFunctions)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.kendo = {};\r\n $scope.$root.reportSettings.reportKey = 34;\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"7\",\r\n transactionTaxRecap: {\r\n cardNoDesc: '',\r\n inclUnbilled: true,\r\n enableUnbilled: true,\r\n inclBilled: true,\r\n enableBilled: true,\r\n groupBy: 0,\r\n recap1: 0,\r\n recap2: 0,\r\n showTaxRecap: false\r\n }\r\n };\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.transactionTaxRecap = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n $scope.updateOptions();\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.transactionTaxRecap;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n var rptName = \r\n $scope.appInfo.webUser.CurrentAuthorization.Customer.CPInvcRecapSumTaxesByInvcGrp ? 'CardTransactionwithTaxRecapsAndTaxInvoiceGroups' : 'CardTransactionwithTaxRecaps';\r\n var qs = \"reportName=\" + rptName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-CardNoDesc=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.cardNoDesc +\r\n \"&RP-BegDate=\" + $scope.urlFormatDate($scope.dateSelector.startDate) +\r\n \"&RP-EndDate=\" + $scope.urlFormatDate($scope.dateSelector.endDate) +\r\n \"&RP-InclBilled=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.inclBilled +\r\n \"&RP-InclUnbilled=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.inclUnbilled +\r\n \"&RP-GroupBy=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.groupBy +\r\n \"&RP-RecapBy1=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.recap1 +\r\n \"&RP-RecapBy2=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.recap2 +\r\n \"&RP-ShowTaxRecapByGroupBy=\" + $scope.locationInfo.sideMenuData.transactionTaxRecap.showTaxRecap;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n };\r\n\r\n $scope.updateOptions = function ()\r\n {\r\n if ($scope.locationInfo.sideMenuData.transactionTaxRecap.inclUnbilled === false && $scope.locationInfo.sideMenuData.transactionTaxRecap.inclBilled === false)\r\n {\r\n $scope.locationInfo.sideMenuData.transactionTaxRecap.inclUnbilled = true;\r\n }\r\n };\r\n });","/**\r\n * Created by jvitoria on 7/12/2015.\r\n */\r\nangular.module(\"pnDocAccount\", ['ngSanitize', 'core.objects', 'core.directives'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider.when(\"/Documents/Account/Statements\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Statements\"),\r\n controller: \"statementsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Documents/Account/Notifications\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Notifications\"),\r\n controller: \"notificationsCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Documents/Account/Advice\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"Advice\"),\r\n controller: \"adviceCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n ;\r\n })\r\n .controller(\"docAccountSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n };\r\n })\r\n .controller(\"statementsSideMenuCtrl\", function ($scope, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"DateSelectorLocalization\"); \r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n\r\n $scope.dateSelector.overrideDefaults = true;\r\n $scope.dateSelector.maxNumOfDays = 90;\r\n $scope.dateSelector.options = [\r\n {name: localStrings.getLocalizedString(\"AllDays\"), value: 13},\r\n {name: localStrings.getLocalizedString(\"Today\"), value: 0},\r\n {name: localStrings.getLocalizedString(\"Yesterday\"), value: 1},\r\n {name: localStrings.getLocalizedString(\"ThisWeek\"), value: 3},\r\n {name: localStrings.getLocalizedString(\"ThisMonth\"), value: 4},\r\n {name: localStrings.getLocalizedString(\"ThisYear\"), value: 5},\r\n {name: localStrings.getLocalizedString(\"PriorWeek\"), value: 6},\r\n {name: localStrings.getLocalizedString(\"PriorMonth\"), value: 7},\r\n {name: localStrings.getLocalizedString(\"PriorYear\"), value: 8},\r\n {name: localStrings.getLocalizedString(\"LastSevenDays\"), value: 9},\r\n {name: localStrings.getLocalizedString(\"LastThirtyDays\"), value: 10},\r\n {name: localStrings.getLocalizedString(\"SelectDates\"), value: 11},\r\n {name: localStrings.getLocalizedString(\"SelectDays\"), value: 12}];\r\n };\r\n })\r\n .controller(\"statementsCtrl\", function ($scope, validatorSvc, WebFunctions, documentService, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n validatorSvc.clearValidationScopes();\r\n $scope.kendo = {};\r\n $scope.kendo.statementsGrid = {};\r\n $scope.kendo.statementsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n if (!dataItem.StmtEdocKey)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Documents\"), localStrings.getLocalizedString(\"SelectedDocumentNoLonger\"));\r\n return;\r\n }\r\n else\r\n $scope.openEdoc(dataItem.StmtEdocKey);\r\n\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"StmtDateTime\",\r\n title: localStrings.getLocalizedString(\"StatementDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.statementsGridInit = function (ds)\r\n {\r\n $scope.kendo.statementsGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.statementsGridDS.read();\r\n $scope.kendo.statementsGrid.dataSource.data($scope.kendo.statementsGridDS.data());\r\n };\r\n\r\n function getStatements()\r\n {\r\n documentService.getStatements(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate).then(function (data)\r\n {\r\n if (data.Success)\r\n {\r\n if (data.Data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Statements\"));\r\n return;\r\n }\r\n\r\n data.Data.each(function (stmt)\r\n {\r\n stmt.StmtDateTime = Date.create(stmt.StmtDateTime).format('{MM}/{dd}/{yyyy}');\r\n });\r\n\r\n $scope.kendo.statementsGridInit(data.Data);\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Documents/Account/Notifications\");\r\n }\r\n\r\n //set the side menu location info\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"AccountSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n getStatements();\r\n };\r\n })\r\n .controller(\"notificationsSideMenuCtrl\", function ($scope, userAccountService, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n $scope.kendo = {};\r\n\r\n function getContactsContext()\r\n {\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data) {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.CustomerContacts)) {\r\n $scope.modalifier.showSetupError();\r\n return;\r\n }\r\n\r\n angular.forEach(data.CustomerContacts, function (item) {\r\n item.fullName = item.FirstName + ' ' + item.LastName;\r\n });\r\n\r\n $scope.locationInfo.sideMenuData.notifications.contacts = data.CustomerContacts.findAll({ Active: -1 }).sortBy('fullName');\r\n $scope.locationInfo.sideMenuData.notifications.contacts.add({Key: null, fullName: localStrings.getLocalizedString(\"Any\")}, 0);\r\n });\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenuData.notifications = {\r\n contact: null,\r\n contacts: {},\r\n type: null,\r\n types: [{ key: null, value: localStrings.getLocalizedString(\"Any\") },\r\n { key: 0, value: localStrings.getLocalizedString(\"CreditLimit\") },\r\n { key: 1, value: localStrings.getLocalizedString(\"PrepaidBalance\") },\r\n { key: 2, value: localStrings.getLocalizedString(\"PastDuePayment\") },\r\n { key: 3, value: localStrings.getLocalizedString(\"OtherCreditCorrespondence\") },\r\n { key: 4, value: localStrings.getLocalizedString(\"ProductsServices\") },\r\n { key: 5, value: localStrings.getLocalizedString(\"GeneralBusinessCorrespondence\") }]\r\n };\r\n getContactsContext();\r\n };\r\n })\r\n .controller(\"notificationsCtrl\", function ($scope, validatorSvc, $sce, documentService, templates, localStrings)\r\n {\r\n 'use strict';\r\n validatorSvc.clearValidationScopes();\r\n $scope.kendo = {};\r\n $scope.kendo.notificationsGrid = {};\r\n $scope.kendo.notificationsGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n if (!dataItem)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Notifications\"), localStrings.getLocalizedString(\"SelectedDocumentNoLonger\"));\r\n return;\r\n }\r\n\r\n $scope.handleRowClick(dataItem);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"NotcDescription\",\r\n title: localStrings.getLocalizedString(\"SubjectTitle\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"NotcType\",\r\n title: localStrings.getLocalizedString(\"Type\"),\r\n width: 200,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"RcptEmail\",\r\n title: localStrings.getLocalizedString(\"Recipient\"),\r\n width: 200,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"NotcDate\",\r\n title: localStrings.getLocalizedString(\"Date\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.notificationsGridInit = function (ds)\r\n {\r\n $scope.kendo.notificationsGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n //$scope.resizeKendoGrid($scope.kendo.notificationsGrid, ds.length || 0, 295);\r\n\r\n $scope.kendo.notificationsGridDS.read();\r\n $scope.kendo.notificationsGrid.dataSource.data($scope.kendo.notificationsGridDS.data());\r\n };\r\n\r\n function getNotifications()\r\n {\r\n documentService.getNotifications(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.notifications.contact,\r\n $scope.locationInfo.sideMenuData.notifications.type,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate\r\n ).then(function (data)\r\n {\r\n if (data.Success)\r\n {\r\n if (data.Data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"Notifications\"));\r\n return;\r\n }\r\n\r\n data.Data.each(function (note)\r\n {\r\n note.NotcDate = Date.create(note.NotcDate).format('{MM}/{dd}/{yyyy}');\r\n note.EmailBody = $sce.trustAsHtml(note.EmailBody);\r\n if (note.DispType === 1 || note.DispType === 3)\r\n {\r\n //note.NotcDescription = '';\r\n note.NotcType = 'Attachment';\r\n //note.RcptEmail = '';\r\n //note.NotcDate = '';\r\n }\r\n });\r\n\r\n $scope.kendo.notificationsGridInit(data.Data);\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n }\r\n\r\n $scope.$parent.applyAction = function () {\r\n if (!validatorSvc.executeValidations()) return;\r\n getNotifications();\r\n };\r\n\r\n $scope.handleRowClick = function handleRowClick(item)\r\n {\r\n switch (item.DispType)\r\n {\r\n case 0:\r\n $scope.emailPopUp = item;\r\n $scope.emailPopUp.show = true;\r\n break;\r\n\r\n case 1:\r\n case 2:\r\n if (item.EdocDtlKey > 0) $scope.openEdoc(item.EdocDtlKey);\r\n else\r\n scope.notifier.show(localStrings.getLocalizedString(\"DocumentNotRetrieved\"), 'error');\r\n break;\r\n\r\n case 3:\r\n if (item.AttachGUID !== null) $scope.openAttachment(item.AttachGUID);\r\n else\r\n scope.notifier.show(localStrings.getLocalizedString(\"DocumentNotRetrieved\"), 'error');\r\n break;\r\n }\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n //set the side menu location info\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"AccountSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n $scope.emailPopUp = {show: false};\r\n };\r\n })\r\n .controller('adviceSideMenuCtrl', function ($scope, $filter, WebFunctions, validatorSvc, documentService, templates, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"DocumentsLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n validatorSvc.clearValidationScopes();\r\n\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"AccountSideMenu\");\r\n\r\n $scope.locationInfo.sideMenuData.tenNinetyNineAdvice = {\r\n yearsBack: 5\r\n };\r\n $scope.exportReport = false;\r\n };\r\n })\r\n .controller(\"adviceCtrl\", function ($scope, $filter, WebFunctions, templates, localStrings, validatorSvc, documentService)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.adviceGrid = {};\r\n $scope.kendo.adviceGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var dataItem = this.dataItem(this.select()[0]);\r\n if(!dataItem.EdocDtlKey)\r\n {\r\n $scope.modalifier.show(localStrings.getLocalizedString(\"Documents\"), localStrings.getLocalizedString(\"SelectedDocumentNoLonger\"));\r\n return;\r\n }\r\n\r\n $scope.openEdoc(dataItem.EdocDtlKey);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"PmtYear\",\r\n title: localStrings.getLocalizedString(\"AdviceYear\"),\r\n width: 100,\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"DateTimeFormatted\",\r\n title: localStrings.getLocalizedString(\"ProcessDate\"),\r\n width: 150,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Name\",\r\n title: localStrings.getLocalizedString(\"BusinessEntity\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"PaymentType\",\r\n title: localStrings.getLocalizedString(\"PaymentType\"),\r\n width: 150,\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: [],\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n if (!validatorSvc.executeValidations())\r\n return;\r\n\r\n $scope.predicate = 'DateTimeFormatted';\r\n $scope.reverse = false;\r\n $scope.modalifier.hide();\r\n\r\n documentService.Get1099AdviceList(\r\n $scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.tenNinetyNineAdvice.yearsBack).then(\r\n function (data)\r\n {\r\n if (data.Success)\r\n {\r\n if (data.Data.length === 0) {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"TenNinetyNineKAdvice\"));\r\n }\r\n else\r\n {\r\n data.Data.each(function (element)\r\n {\r\n element.DateTimeFormatted = $filter('date')(element.DateTime, 'MM/dd/yyyy');\r\n element.PmtYear = element.PmtYear.toString();\r\n });\r\n\r\n $scope.kendo.adviceGridInit(data.Data);\r\n }\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n });\r\n };\r\n\r\n $scope.kendo.adviceGridInit = function (ds)\r\n {\r\n $scope.kendo.adviceGridDS = new kendo.data.DataSource({\r\n data: ds\r\n });\r\n\r\n $scope.kendo.adviceGridDS.read();\r\n $scope.kendo.adviceGrid.dataSource.data($scope.kendo.adviceGridDS.data());\r\n };\r\n\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.AccountActivity))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n //set the side menu location info\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = 60;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"AccountSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n };\r\n })\r\n;","/**\r\n * Created by rhampton on 7/25/2014.\r\n */\r\nangular.module(\"pnOrders\", ['core.objects', 'services.orders', 'core.directives'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/Orders/EditOrder/:ordKey?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"EditOrder\"),\r\n controller: \"editOrderCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Orders/DisplayOrder/:ordKey?\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"DisplayOrder\"),\r\n controller: \"displayOrderCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Orders/OpenOrders\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"OpenOrders\"),\r\n controller: \"openOrdersCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Orders/OrderHistory\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"OrderHistory\"),\r\n controller: \"orderHistoryCtrl\"\r\n }\r\n );\r\n })\r\n .controller(\"ordersSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.checkForAppliedProfile();\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.canOpenAddOrders = $scope.appInfo.webUser.CurrentAuthorization.CanAddEditWebOrders;\r\n };\r\n })\r\n .controller(\"displayOrderCtrl\", function ($scope, $filter, $route, $routeParams, validatorSvc, WebProfileService, customerService,\r\n userAccountService, ordersService, templates, localStrings, globalizationSvc)\r\n {\r\n 'use strict';\r\n\r\n function hasErrors(errors)\r\n {\r\n var errorsDisplayed = false;\r\n angular.forEach(errors, function (item)\r\n {\r\n $scope.notifier.show(item, 'error');\r\n errorsDisplayed = true;\r\n });\r\n\r\n return errorsDisplayed;\r\n }\r\n\r\n function getOrderContext()\r\n {\r\n // Do not try to load an order if the user info isnt loaded\r\n if (!$scope.appInfo.userLoaded) {\r\n $scope.goTo('Orders/OpenOrders/');\r\n return;\r\n }\r\n\r\n ordersService.getOrdersContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.WOGSettings))\r\n {\r\n $scope.modalifier.showSetupError();\r\n $scope.displayOrders.show.buttonBar = false;\r\n return;\r\n }\r\n\r\n $scope.displayOrders.context.WOGSettings = data.WOGSettings[0] || [];\r\n $scope.displayOrders.context.PONumber = data.PONumber;\r\n $scope.displayOrders.context.DeliveryDT = data.DeliveryDT;\r\n\r\n setButtonVisiblity();\r\n }\r\n );\r\n }\r\n\r\n function handleCancelOrder()\r\n {\r\n $scope.displayOrders.show.cancelCommentModal = false;\r\n ordersService.saveOrderDetails($scope.displayOrders.orderDetails).then(\r\n function (data)\r\n {\r\n if (hasErrors(data.OrderDetails.Errors))\r\n {\r\n enableButton();\r\n return;\r\n }\r\n\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SavedChanges\"), \"success\");\r\n $scope.goTo('Orders/OpenOrders/');\r\n });\r\n }\r\n\r\n function handlePendingOrder()\r\n {\r\n ordersService.saveOrderDetails($scope.displayOrders.orderDetails).then(\r\n function (data)\r\n {\r\n //notify and drop out on errors\r\n if (angular.isUndefinedOrNullOrEmpty(data.OrderDetails.OrdKey) || data.OrderDetails.OrdKey === 0)\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesNotSaved\"), \"error\");\r\n enableButton();\r\n return;\r\n }\r\n\r\n if (hasErrors(data.OrderDetails.Errors))\r\n {\r\n enableButton();\r\n return;\r\n }\r\n\r\n //notify and handle success\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SavedChanges\"), \"success\");\r\n $scope.goTo('Orders/EditOrder/' + data.OrderDetails.OrdKey);\r\n });\r\n }\r\n\r\n function handleReOpenOrder()\r\n {\r\n var yes = function ()\r\n {\r\n ordersService.saveOrderDetails($scope.displayOrders.orderDetails).then(\r\n function (data)\r\n {\r\n if (hasErrors(data.OrderDetails.Errors))\r\n {\r\n enableButton();\r\n return;\r\n }\r\n\r\n $scope.goTo('Orders/EditOrder/' + data.OrderDetails.OrdKey);\r\n });\r\n };\r\n\r\n var no = function () {\r\n enableButton();\r\n };\r\n\r\n $scope.modalifier.confirm(localStrings.getLocalizedString(\"IfYouReopenOrder\") + '
    ' + localStrings.getLocalizedString(\"MayNoLonger\") + '

    ' + localStrings.getLocalizedString(\"WishToContinue\"), yes, no);\r\n }\r\n\r\n function handleSubmitOrder()\r\n {\r\n ordersService.saveOrderDetails($scope.displayOrders.orderDetails).then(\r\n function (data)\r\n {\r\n if (hasErrors(data.OrderDetails.Errors))\r\n {\r\n enableButton();\r\n return;\r\n }\r\n\r\n //notify and handle success\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesBeenSubmitted\"), \"success\");\r\n $route.reload();\r\n });\r\n }\r\n\r\n function enableButton() {\r\n $('#displayOrderReOpen').removeAttr('disabled');\r\n $('#displayOrderSubmit').removeAttr('disabled');\r\n $('#displayOrderCancel').removeAttr('disabled');\r\n $('#displayOrderCancelComment').removeAttr('disabled');\r\n }\r\n\r\n function setButtonVisiblity()\r\n {\r\n // show buttons based ont he order status\r\n switch ($scope.displayOrders.orderDetails.OrdStatusKey)\r\n {\r\n case 16:\r\n $scope.displayOrders.show.reopenBtn = false;\r\n $scope.displayOrders.show.submitBtn = submitOnHold();\r\n $scope.displayOrders.show.cancelBtn = true;\r\n break;\r\n\r\n case 0:\r\n case 1:\r\n $scope.displayOrders.show.reopenBtn = true;\r\n $scope.displayOrders.show.submitBtn = false;\r\n $scope.displayOrders.show.cancelBtn = true;\r\n break;\r\n\r\n case 10:\r\n $scope.displayOrders.show.reopenBtn = false;\r\n $scope.displayOrders.show.submitBtn = false;\r\n $scope.displayOrders.show.cancelBtn = true;\r\n break;\r\n\r\n default:\r\n $scope.displayOrders.show.reopenBtn = false;\r\n $scope.displayOrders.show.submitBtn = false;\r\n $scope.displayOrders.show.cancelBtn = false;\r\n break;\r\n }\r\n }\r\n\r\n function submitOnHold()\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.displayOrders.context.WOGSettings))\r\n return false;\r\n else\r\n return $scope.displayOrders.context.WOGSettings.SubmitOnHold || $scope.displayOrders.context.WOGSettings.CrStatus !== 1;\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n //clear any residual validations from the scope\r\n validatorSvc.clearValidationScopes();\r\n\r\n //set the side menu location info\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.addOrder = $scope.locationInfo.sideMenuData.addOrder || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OrdersSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n\r\n //start with a clean data structure\r\n $scope.displayOrders = {\r\n show: {\r\n reopenBtn: false,\r\n submitBtn: false,\r\n cancelBtn: false,\r\n tankIDCol: false,\r\n cancelCommentModal: false\r\n },\r\n context: {},\r\n orderDetails: ordersService.blankOrderHeaderObj()\r\n };\r\n\r\n $scope.globalizationSvc = globalizationSvc;\r\n\r\n //get the credit hold message\r\n WebProfileService.getWebProfileMessage($scope.appInfo.profileKey, 25).then(function (data)\r\n {\r\n $scope.displayOrders.context.creditHoldMessage = data;\r\n });\r\n\r\n getOrderContext();\r\n\r\n //get the order to be displayed\r\n if ($routeParams.ordKey)\r\n {\r\n ordersService.getOrderDetails($routeParams.ordKey).then(\r\n function (data)\r\n {\r\n $scope.displayOrders.orderDetails = data.OrderDetails || {};\r\n\r\n //get the tank/product context for this location\r\n $scope.getLocationDetails();\r\n\r\n setButtonVisiblity();\r\n }\r\n );\r\n }\r\n };\r\n\r\n $scope.getLocationDetails = function getLocationDetails()\r\n {\r\n $scope.displayOrders.context.tanksAndEquipment = [];\r\n ordersService.getOrderLocationInfo($scope.displayOrders.orderDetails.CustLocKey, $scope.displayOrders.orderDetails.ReqDelivDateTime).then(\r\n function (data)\r\n {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.TanksAndEquipment))\r\n {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"NoTankInformation\"), 'error');\r\n return;\r\n }\r\n else\r\n {\r\n $scope.displayOrders.context.tanksAndEquipment = data.TanksAndEquipment;\r\n }\r\n\r\n //use default directions if the order has none\r\n if (angular.isUndefinedOrNullOrEmpty($scope.displayOrders.orderDetails.OrdDelivDirections))\r\n $scope.displayOrders.orderDetails.OrdDelivDirections = data.DeliveryDirections;\r\n\r\n //determine if TankID column is shown\r\n $scope.displayOrders.show.tankIDCol = false;\r\n angular.forEach($scope.displayOrders.context.tanksAndEquipment, function (item)\r\n {\r\n // check if ID is null or undefined first\r\n if (item.ID) {\r\n $scope.displayOrders.show.tankIDCol = !item.ID.isBlank();\r\n }\r\n\r\n //match and copy over the qty to be displayed\r\n if (!angular.isUndefinedOrNullOrEmpty(item.TankNumber)) {\r\n var tank = $filter('filter')($scope.displayOrders.orderDetails.OrderDetails, { TankNumber: item.TankNumber }, true)[0];\r\n item.Quantity = angular.isUndefinedOrNullOrEmpty(tank) ? 0 : globalizationSvc.formatNumeric(tank.OrderQty);\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty(item.EquipmentKey)) {\r\n var equipment = $filter('filter')($scope.displayOrders.orderDetails.OrderDetails, { EquipmentKey: item.EquipmentKey }, true)[0];\r\n item.Quantity = angular.isUndefinedOrNullOrEmpty(equipment) ? 0 : globalizationSvc.formatNumeric(equipment.OrderQty);\r\n }\r\n \r\n });\r\n }\r\n );\r\n };\r\n\r\n $scope.hasAnyTanks = function () {\r\n return hasAnyItems('TankNumber');\r\n };\r\n\r\n $scope.hasAnyEquipment = function () {\r\n return hasAnyItems('EquipmentKey');\r\n };\r\n\r\n function hasAnyItems(keyProperty) {\r\n if ($scope.displayOrders.context && $scope.displayOrders.context.tanksAndEquipment) {\r\n for (var i = 0; i < $scope.displayOrders.context.tanksAndEquipment.length; i++) {\r\n if ($scope.displayOrders.context.tanksAndEquipment[i][keyProperty]) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n $scope.saveOrder = function saveOrder(command)\r\n {\r\n $scope.displayOrders.orderDetails.Command = command;\r\n $scope.displayOrders.orderDetails.OrdCreatedByContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n\r\n switch (command)\r\n {\r\n case 'Pending':\r\n handlePendingOrder();\r\n break;\r\n\r\n case 'Submit':\r\n handleSubmitOrder();\r\n break;\r\n\r\n case 'ReOpen':\r\n handleReOpenOrder();\r\n break;\r\n\r\n case 'Cancel':\r\n handleCancelOrder();\r\n break;\r\n }\r\n };\r\n\r\n $scope.cancelCommentModalDialogClose = function () {\r\n enableButton();\r\n };\r\n\r\n })\r\n .controller(\"editOrderCtrl\", function ($scope, $filter, $route, $routeParams, validatorSvc, WebProfileService, customerService, userAccountService, ordersService, templates, localStrings, globalizationSvc, $timeout)\r\n {\r\n 'use strict';\r\n\r\n $scope.editOrders = {\r\n show: {\r\n buttonBar: true,\r\n shipTo: false,\r\n tankIDCol: false,\r\n submitBtn: false,\r\n cancelCommentModal: false\r\n },\r\n locations: undefined,\r\n contacts: undefined,\r\n context: {},\r\n orderDetails: {}\r\n };\r\n\r\n $scope.prevCustLocKey = undefined;\r\n $scope.hideTankAndEquipment = false;\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.ordersGrid = {};\r\n $scope.kendo.ordersGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"TankNumber\",\r\n title: localStrings.getLocalizedString(\"Tank\"),\r\n attributes: {class: \"alignCenter\"},\r\n width: 50,\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"TankID\",\r\n title: localStrings.getLocalizedString(\"ID\"),\r\n width: 100,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Product\",\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"OrderQty\",\r\n title: localStrings.getLocalizedString(\"Quantity\"),\r\n width: 100,\r\n format: \"{0:n0}\",\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n },\r\n template: '',\r\n editor: function (element, options)\r\n {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"alignRight\")\r\n .appendTo(element)\r\n .kendoNumericTextBox({\r\n decimals: 0,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n }\r\n ],\r\n dataSource: [],\r\n editable: true,\r\n filterable: false,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n $scope.kendo.ordersEquipmentGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"EquipmentID\",\r\n title: localStrings.getLocalizedString(\"Equipment\"),\r\n width: 200,\r\n attributes: { class: \"alignLeft\" },\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n },\r\n template: \"# if (EquipmentID) { # #:EquipmentID# - #:EquipmentDescription# # } # \"\r\n },\r\n {\r\n field: \"Product\",\r\n title: localStrings.getLocalizedString(\"Product\"),\r\n attributes: { class: \"alignLeft\" },\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"OrderQty\",\r\n title: localStrings.getLocalizedString(\"Quantity\"),\r\n width: 100,\r\n format: \"{0:n0}\",\r\n attributes: { class: \"alignRight\" },\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n },\r\n editor: function (element, options) {\r\n $(\"\")\r\n .attr(\"name\", options.field)\r\n .attr(\"data-bind\", \"value:\" + options.field)\r\n .attr(\"class\", \"alignRight\")\r\n .appendTo(element)\r\n .kendoNumericTextBox({\r\n decimals: 0,\r\n format: \"#\",\r\n min: 0,\r\n spinners: false\r\n });\r\n\r\n $('')\r\n .attr(\"data-for\", options.field)\r\n .attr(\"class\", \"k-invalid-msg\")\r\n .appendTo(element);\r\n }\r\n }\r\n ],\r\n dataSource: [],\r\n editable: true,\r\n filterable: false,\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.ordersGridInit = function (ds, showIdCol)\r\n {\r\n $scope.kendo.ordersGridDS = new kendo.data.DataSource({\r\n data: ds,\r\n schema: {\r\n model: {\r\n id: \"TankNumber\",\r\n fields: {\r\n TankNumber: {\r\n type: \"number\",\r\n editable: false,\r\n nullable: false,\r\n validation: false\r\n },\r\n TankID: {\r\n type: \"string\",\r\n editable: true,\r\n nullable: true,\r\n validation: false\r\n },\r\n Product: {\r\n type: \"string\",\r\n editable: false,\r\n nullable: false,\r\n validation: false\r\n },\r\n OrderQty: {\r\n type: \"number\",\r\n editable: true,\r\n nullable: false,\r\n validation: {\r\n capacity: function (e)\r\n {\r\n if(e.is('[name=OrderQty]'))\r\n {\r\n var rowData = $scope.kendo.ordersGrid.dataItem(e.closest('tr'));\r\n var val = e.getKendoNumericTextBox().value();\r\n\r\n rowData.OrderQty = val; //stop kendo from zeroing out the value on error\r\n\r\n if (e.val().isBlank())\r\n {\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"Required\"));\r\n return false;\r\n }\r\n\r\n if (val < 0)\r\n {\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"MinValueZero\"));\r\n return false;\r\n }\r\n\r\n if (val > rowData.MaxVolume)\r\n {\r\n var rowDataMaxVolume = [rowData.MaxVolume];\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"MaxValue\", rowDataMaxVolume));\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n $scope.kendo.ordersGridDS.read();\r\n $scope.kendo.ordersGrid.dataSource.data($scope.kendo.ordersGridDS.data());\r\n\r\n if (showIdCol)\r\n $scope.kendo.ordersGrid.showColumn(1);\r\n else\r\n $scope.kendo.ordersGrid.hideColumn(1);\r\n };\r\n $scope.kendo.ordersEquipmentGridInit = function (ds) {\r\n $scope.kendo.ordersEquipmentGridDS = new kendo.data.DataSource({\r\n data: ds,\r\n schema: {\r\n model: {\r\n id: \"EquipmentKey\",\r\n fields: {\r\n EquipmentKey: {\r\n type: \"number\",\r\n editable: false\r\n },\r\n EquipmentID: {\r\n type: \"string\",\r\n editable: false\r\n },\r\n EquipmentDescription: {\r\n type: \"string\",\r\n editable: false\r\n },\r\n Product: {\r\n type: \"string\",\r\n editable: false\r\n },\r\n OrderQty: {\r\n type: \"number\",\r\n editable: true,\r\n nullable: false,\r\n validation: {\r\n capacity: function (e) {\r\n if (e.is('[name=OrderQty]')) {\r\n var rowData = $scope.kendo.ordersEquipmentGrid.dataItem(e.closest('tr'));\r\n var val = e.getKendoNumericTextBox().value();\r\n\r\n rowData.OrderQty = val; //stop kendo from zeroing out the value on error\r\n\r\n if (e.val().isBlank()) {\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"Required\"));\r\n return false;\r\n }\r\n\r\n if (val < 0) {\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"MinValueZero\"));\r\n return false;\r\n }\r\n\r\n // If equipment does not have ActualSize or RatedSize (MaxVolume) -> we won't be validating MaxVolume\r\n if (!angular.isUndefinedOrNullOrEmpty(rowData.MaxVolume)) {\r\n if (val > rowData.MaxVolume) {\r\n var rowDataMaxVolume = [rowData.MaxVolume];\r\n e.attr(\"data-capacity-msg\", localStrings.getLocalizedString(\"MaxValue\", rowDataMaxVolume));\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n $scope.kendo.ordersEquipmentGridDS.read();\r\n $scope.kendo.ordersEquipmentGrid.dataSource.data($scope.kendo.ordersEquipmentGridDS.data());\r\n };\r\n\r\n var validateOrderDate =\r\n {\r\n name: 'validateOrderDate',\r\n validationMessage: localStrings.getLocalizedString(\"RequestedDeliveryDateTimeIs\") + '
    ' + localStrings.getLocalizedString(\"NotAvailable\"),\r\n validatorError: function ()\r\n {\r\n if ($scope.editOrders.orderDetails.Command === 'Cancel')\r\n {\r\n return true;\r\n }\r\n\r\n if ($scope.editOrders.orderDetails.ReqDelivDateTime.isBlank()) {\r\n return false;\r\n }\r\n\r\n var valueDate = new Date($scope.editOrders.orderDetails.ReqDelivDateTime);\r\n var nowDate = new Date();\r\n\r\n return valueDate < nowDate ? false : true;\r\n }\r\n };\r\n var savedTankData = [], dataBetweenDateChanges = [];\r\n $scope.validateOrderDate = new pdi.ng.validate.PdiValidation(validateOrderDate);\r\n\r\n function hasErrors(errors)\r\n {\r\n var errorsDisplayed = false;\r\n angular.forEach(errors, function (item)\r\n {\r\n $scope.notifier.show(item, 'error');\r\n errorsDisplayed = true;\r\n });\r\n\r\n return errorsDisplayed;\r\n }\r\n\r\n function getContactsContext()\r\n {\r\n userAccountService.listContacts($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.CustomerContacts))\r\n {\r\n $scope.modalifier.showSetupError();\r\n $scope.editOrders.show.buttonBar = false;\r\n return;\r\n }\r\n\r\n angular.forEach(data.CustomerContacts, function (item)\r\n {\r\n item.fullName = item.FirstName + ' ' + item.LastName;\r\n });\r\n\r\n $scope.editOrders.contacts = data.CustomerContacts.findAll({Active: -1}).sortBy('fullName');\r\n\r\n });\r\n }\r\n\r\n function getCreditHoldMsg()\r\n {\r\n WebProfileService.getWebProfileMessage($scope.appInfo.profileKey, 25).then(function (data)\r\n {\r\n $scope.editOrders.context.creditHoldMessage = data;\r\n });\r\n }\r\n\r\n function getLocationsContext()\r\n {\r\n ordersService.getOrderCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, $scope.editOrders.orderDetails.ReqDelivDateTime || $scope.editOrders.context.MinDateTime).then(\r\n function (data) {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.OrderLocations)) {\r\n $scope.modalifier.showSetupError();\r\n $scope.editOrders.show.buttonBar = false;\r\n return;\r\n }\r\n\r\n $scope.editOrders.locations = data.OrderLocations.remove({ Active: 0 }).sortBy('Description');\r\n\r\n if ($scope.editOrders.locations.length > 1)\r\n $scope.editOrders.show.shipTo = true;\r\n else {\r\n $scope.editOrders.show.shipTo = false;\r\n }\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($routeParams.ordKey)) {\r\n // in case of a new order, remove all locations without valid tanks / equipment\r\n $scope.editOrders.locations = $scope.editOrders.locations.remove({ HasValidTankOrEquipment: 0 });\r\n $scope.editOrders.orderDetails.CustLocKey = $scope.editOrders.locations[0].Key;\r\n $scope.updateCustomerLocationData();\r\n } else {\r\n // in case of an existing order, remove all locations without valid tanks / equipment except location on order\r\n $scope.editOrders.locations = $scope.editOrders.locations.filter(function (l) {\r\n return l.HasValidTankOrEquipment !== 0 || l.Key === $scope.editOrders.orderDetails.CustLocKey;\r\n });\r\n $scope.editOrders.locations.sort(function (l) {\r\n return l.CustLocKey - (l.CustLocKey === $scope.editOrders.orderDetails.CustLocKey ? l.Key + 1 : l.CustLocKey - 2);\r\n });\r\n }\r\n });\r\n }\r\n\r\n function getOrderContext()\r\n {\r\n ordersService.getOrdersContext($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.WOGSettings))\r\n {\r\n $scope.modalifier.showSetupError();\r\n $scope.editOrders.show.buttonBar = false;\r\n return;\r\n }\r\n\r\n $scope.editOrders.context.WOGSettings = data.WOGSettings[0] || [];\r\n $scope.editOrders.context.PONumber = data.PONumber;\r\n $scope.editOrders.context.DeliveryDT = data.DeliveryDT;\r\n\r\n $scope.editOrders.show.submitBtn = data.WOGSettings.SubmitOnHold || data.WOGSettings.CrStatus !== 1;\r\n getLocationsContext();\r\n }\r\n );\r\n }\r\n\r\n function loadExistingOrder()\r\n {\r\n ordersService.getOrderDetails($routeParams.ordKey).then(\r\n function (data)\r\n {\r\n savedTankData = data.OrderDetails.OrderDetails.clone();\r\n data.OrderDetails.OrderDetails = [];\r\n $scope.editOrders.orderDetails = data.OrderDetails;\r\n $scope.editOrders.context.DeliveryDT = data.OrderDetails.ReqDelivDateTime;\r\n $scope.editOrders.show.cancelBtn = true;\r\n\r\n $scope.editOrders.orderDetails.CustContKey = $scope.editOrders.orderDetails.CustContKey.toNumber();\r\n $scope.prevCustLocKey = $scope.initialOrderCustLocKey = $scope.editOrders.orderDetails.CustLocKey;\r\n $scope.updateCustomerLocationData();\r\n }\r\n );\r\n }\r\n\r\n function loadNewOrder()\r\n {\r\n $scope.editOrders.orderDetails = new ordersService.blankOrderHeaderObj();\r\n\r\n $scope.editOrders.orderDetails.CustContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n\r\n }\r\n Number.isInteger = Number.isInteger || function (value) {\r\n return typeof value === \"number\" &&\r\n isFinite(value) &&\r\n Math.floor(value) === value;\r\n };\r\n function qtyValidityStates(items) {\r\n return items.map(\r\n function (order) {\r\n if (!Number.isInteger(order.OrderQty)) {\r\n return false;\r\n }\r\n\r\n if (order.OrderQty < 0) {\r\n return false;\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty(order.MaxVolume) && order.OrderQty > order.MaxVolume) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n );\r\n }\r\n\r\n // This returns an array of boolean values\r\n // use .every to see if all the values are true or false\r\n function validOrderQtys(items) {\r\n return (qtyValidityStates(items).every(Boolean));\r\n }\r\n\r\n function validOrder()\r\n {\r\n $scope.orderQtyWarning = {\r\n show: false,\r\n text: ''\r\n };\r\n\r\n var orderTotal = ($scope.kendo.ordersGrid.dataSource.data().toJSON().sum('OrderQty') || 0) + ($scope.kendo.ordersEquipmentGrid.dataSource.data().toJSON().sum('OrderQty') || 0);\r\n var OrdQtyParams = [$scope.editOrders.context.WOGSettings.OrdMinQty, $scope.editOrders.context.WOGSettings.OrdMaxQty];\r\n\r\n if (!validOrderQtys($scope.kendo.ordersGrid.dataSource.data()) || !validOrderQtys($scope.kendo.ordersEquipmentGrid.dataSource.data())) {\r\n $scope.orderQtyWarning = {\r\n show: true,\r\n text: localStrings.getLocalizedString(\"InvalidTankQuantity\")\r\n };\r\n }\r\n\r\n if (orderTotal < $scope.editOrders.context.WOGSettings.OrdMinQty)\r\n {\r\n $scope.orderQtyWarning = {\r\n show: true,\r\n text: localStrings.getLocalizedString(\"DoesNotMeetMinimum\", OrdQtyParams)\r\n };\r\n }\r\n\r\n if (orderTotal > $scope.editOrders.context.WOGSettings.OrdMaxQty)\r\n {\r\n $scope.orderQtyWarning = {\r\n show: true,\r\n text: localStrings.getLocalizedString(\"OrderExceedsMaximum\", OrdQtyParams)\r\n };\r\n }\r\n\r\n return validatorSvc.executeValidations() && !$scope.orderQtyWarning.show;\r\n }\r\n\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n $scope.checkForAppliedProfile();\r\n\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.addOrder = $scope.locationInfo.sideMenuData.addOrder || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OrdersSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"2\";\r\n\r\n getContactsContext();\r\n getOrderContext();\r\n getCreditHoldMsg();\r\n\r\n if ($routeParams.ordKey) {\r\n loadExistingOrder();\r\n }\r\n else {\r\n loadNewOrder();\r\n }\r\n };\r\n\r\n $scope.saveOrder = function saveOrder(command) {\r\n // If command is submit we need to save the details before we submit them.\r\n if (command === 'Submit') {\r\n $scope.editOrders.orderDetails.Command = 'Pending';\r\n } else {\r\n $scope.editOrders.orderDetails.Command = command;\r\n }\r\n\r\n if (!validOrder()) {\r\n enableButton();\r\n return;\r\n }\r\n\r\n $scope.resetDirtyFlags($scope.editOrders.editForm);\r\n\r\n $scope.editOrders.orderDetails.OrdCreatedByContKey = $scope.appInfo.webUser.CurrentAuthorization.CustContKey;\r\n $scope.editOrders.orderDetails.OrderDetails = $scope.kendo.ordersGrid.dataSource.data().toJSON().concat($scope.kendo.ordersEquipmentGrid.dataSource.data().toJSON());\r\n ordersService.saveOrderDetails($scope.editOrders.orderDetails).then(\r\n function (data) {\r\n //notify and drop out on errors\r\n if (angular.isUndefinedOrNullOrEmpty(data.OrderDetails.OrdKey) || data.OrderDetails.OrdKey === 0) {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesNotSaved\"), \"error\");\r\n hasErrors(data.OrderDetails.Errors);\r\n enableButton();\r\n return;\r\n }\r\n\r\n if (hasErrors(data.OrderDetails.Errors)) {\r\n enableButton();\r\n return;\r\n }\r\n\r\n if ($scope.editOrders.orderDetails.Command !== command) {\r\n data.OrderDetails.Command = command;\r\n\r\n ordersService.saveOrderDetails(data.OrderDetails).then(\r\n function (submit) {\r\n //notify and drop out on errors\r\n if (angular.isUndefinedOrNullOrEmpty(submit.OrderDetails.OrdKey) || submit.OrderDetails.OrdKey === 0) {\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesNotSaved\"), \"error\");\r\n hasErrors(submit.OrderDetails.Errors);\r\n enableButton();\r\n return;\r\n }\r\n\r\n if (hasErrors(submit.OrderDetails.Errors)) {\r\n enableButton();\r\n return;\r\n }\r\n });\r\n }\r\n\r\n //notify and handle success\r\n switch (command) {\r\n case 'Pending':\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SavedChanges\"), \"success\");\r\n $scope.goTo('Orders/EditOrder/' + data.OrderDetails.OrdKey);\r\n loadExistingOrder();\r\n enableButton();\r\n break;\r\n\r\n case 'Submit':\r\n $scope.notifier.show(localStrings.getLocalizedString(\"ChangesBeenSubmitted\"), \"success\");\r\n $scope.goTo('Orders/DisplayOrder/' + data.OrderDetails.OrdKey);\r\n break;\r\n\r\n case 'Cancel':\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SavedChanges\"), \"success\");\r\n $scope.goTo('Orders/OpenOrders/');\r\n break;\r\n }\r\n }\r\n );\r\n };\r\n\r\n $scope.cancelCommentModalDialogClose = function () {\r\n enableButton();\r\n };\r\n\r\n function enableButton() {\r\n $('#editOrderPending').removeAttr('disabled');\r\n $('#editOrderSubmit').removeAttr('disabled');\r\n $('#editOrderCancel').removeAttr('disabled');\r\n $('#editOrderCancelComment').removeAttr('disabled');\r\n }\r\n\r\n function mergeTankData(target, source)\r\n {\r\n //filter out records with non-existent tank / equipment\r\n target = target.filter(function (t) {\r\n for (var i = 0; i < source.length; i++) {\r\n if ((t.TankNumber && source[i].TankNumber === t.TankNumber) || (t.EquipmentKey && source[i].EquipmentKey === t.EquipmentKey)) {\r\n return true;\r\n }\r\n }\r\n if (t.TankNumber && $scope.initialOrderCustLocKey === $scope.editOrders.orderDetails.CustLocKey) {\r\n $scope.notifier.show(\"Tank #\" + t.TankNumber + \" is no longer valid for this customer's location and will be removed from the order. Please click save or resubmit the order to proceed\", 'warning');\r\n }\r\n return false;\r\n });\r\n //iterate through each item(s) in the source array\r\n source.each(function (s)\r\n {\r\n var t = null;\r\n if (s.EquipmentKey) {\r\n t = target.find({ EquipmentKey: s.EquipmentKey });\r\n if (!t) {\r\n t = {};\r\n target.add(t);\r\n }\r\n } else {\r\n //look for a matching item in the target\r\n t = target.find({TankNumber: s.TankNumber});\r\n\r\n //not matching item so lets make one\r\n if (!t)\r\n t = target\r\n .add(new ordersService.blankOrderDetailsObj())\r\n .last();\r\n }\r\n\r\n //if the source property value is empty, copy over the target value\r\n for (var p in s)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(t[p]))\r\n t[p] = s[p];\r\n }\r\n\r\n //set null quantity to zero\r\n if (angular.isUndefinedOrNullOrEmpty(t['OrderQty'])) t['OrderQty'] = 0;\r\n });\r\n\r\n $scope.editOrders.orderDetails.OrderDetails = target.filter(function (t) { return t.TankNumber; }).sortBy('TankNumber');\r\n $scope.editOrders.orderDetails.OrderEquipmentDetails = target.filter(function (t) { return t.EquipmentKey; }).sortBy('EquipmentID');\r\n savedTankData = [];\r\n }\r\n\r\n function copyTankData(source)\r\n {\r\n var finalItems = [];\r\n //iterate through each item (s) in the source array\r\n source.each(function (s)\r\n {\r\n var existing = dataBetweenDateChanges.find({ CustFuelTankKey: s.CustFuelTankKey });\r\n\r\n if (existing) {\r\n finalItems.push(existing);\r\n } else {\r\n //set null quantity to zero\r\n if (angular.isUndefinedOrNullOrEmpty(s['OrderQty'])) s['OrderQty'] = 0;\r\n finalItems.push(s);\r\n }\r\n });\r\n\r\n $scope.editOrders.orderDetails.OrderDetails = finalItems.sortBy('TankNumber');\r\n }\r\n function copyEquipmentData(source) {\r\n var finalItems = [];\r\n source.each(function (s) {\r\n var existing = dataBetweenDateChanges.find({ EquipmentKey: s.EquipmentKey });\r\n if (existing) {\r\n finalItems.push(existing);\r\n } else {\r\n //set null quantity to zero\r\n if (angular.isUndefinedOrNullOrEmpty(s['OrderQty'])) s['OrderQty'] = 0;\r\n finalItems.push(s);\r\n }\r\n });\r\n\r\n $scope.editOrders.orderDetails.OrderEquipmentDetails = finalItems.sortBy('EquipmentID');\r\n }\r\n\r\n var updateCustomerLocationDataLock = 0;\r\n $scope.updateCustomerLocationData = function() {\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.CustLocKey) || angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.ReqDelivDateTime)) {\r\n return;\r\n }\r\n\r\n if (updateCustomerLocationDataLock === 0) {\r\n updateCustomerLocationDataLock++;\r\n // because of equipment we have to send also date parameter\r\n ordersService.getOrderLocationInfo($scope.editOrders.orderDetails.CustLocKey, $scope.editOrders.orderDetails.ReqDelivDateTime).then( // OMG this is string instead of date!\r\n function (data) {\r\n if (!data.Successful || angular.isUndefinedOrNullOrEmpty(data.TanksAndEquipment)) {\r\n $scope.editOrders.show.buttonBar = false;\r\n $scope.notifier.show('Could not find any tank information for the selected Ship To location', 'error');\r\n $scope.hideTankAndEquipment = true;\r\n updateCustomerLocationDataLock--;\r\n return;\r\n }\r\n else {\r\n var validTankOrEquipment = true;\r\n if (!savedTankData.isEmpty()) {\r\n mergeTankData(savedTankData, data.TanksAndEquipment);\r\n // check if order customer location has valid tank and / or equipment\r\n validTankOrEquipment = $scope.editOrders.orderDetails.OrderDetails.length > 0 || $scope.editOrders.orderDetails.OrderEquipmentDetails.length > 0;\r\n }\r\n else {\r\n copyTankData(data.TanksAndEquipment.filter(function (te) { return te.TankNumber; }));\r\n copyEquipmentData(data.TanksAndEquipment.filter(function (te) { return te.EquipmentKey; }));\r\n if ($scope.editOrders.orderDetails.OrderDetails.length <= 0) {\r\n $scope.notifier.show('Could not find any tank information for the selected Ship To location', 'warning');\r\n }\r\n }\r\n dataBetweenDateChanges = [];\r\n\r\n $scope.hideTankAndEquipment = !validTankOrEquipment;\r\n $scope.editOrders.show.buttonBar = validTankOrEquipment;\r\n }\r\n\r\n $scope.editOrders.context.DeliveryDT = data.DeliveryDT;\r\n\r\n if (angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.OrdDelivDirections) ||\r\n angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.OrdKey)) {\r\n $scope.editOrders.orderDetails.OrdDelivDirections = data.DeliveryDirections;\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.prevCustLocKey) &&\r\n ($scope.prevCustLocKey) !== ($scope.editOrders.orderDetails.CustLocKey)) {\r\n $scope.editOrders.orderDetails.OrdDelivDirections = data.DeliveryDirections;\r\n $scope.prevCustLocKey = $scope.editOrders.orderDetails.CustLocKey;\r\n }\r\n\r\n $scope.kendo.ordersGridInit($scope.editOrders.orderDetails.OrderDetails, !$scope.editOrders.orderDetails.OrderDetails.all({ ID: \"\" }));\r\n $scope.kendo.ordersEquipmentGridInit($scope.editOrders.orderDetails.OrderEquipmentDetails);\r\n updateCustomerLocationDataLock--;\r\n }, function (error) {\r\n updateCustomerLocationDataLock--;\r\n throw error;\r\n }\r\n );\r\n }\r\n };\r\n\r\n $scope.$watch('editOrders.context.DeliveryDT', function updateDateTime()\r\n {\r\n let requestedDT, suggestedDT, theWinner;\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.editOrders.orderDetails.ReqDelivDateTime) && \r\n !isNaN(Date.parse($scope.editOrders.orderDetails.ReqDelivDateTime))) {\r\n requestedDT = new Date($scope.editOrders.orderDetails.ReqDelivDateTime.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n }\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.editOrders.context.DeliveryDT) && \r\n !isNaN(Date.parse($scope.editOrders.context.DeliveryDT)))\r\n {\r\n let temp = $scope.editOrders.context.DeliveryDT;\r\n suggestedDT = new Date(temp.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n }\r\n\r\n if (requestedDT >= suggestedDT) {\r\n theWinner = requestedDT;\r\n }\r\n\r\n //save for validation\r\n $scope.editOrders.context.MinDateTime = theWinner;\r\n $scope.editOrders.orderDetails.ReqDelivDateTime = $filter('date')(new Date(theWinner), 'MM/dd/yyyy h:mm a');\r\n });\r\n\r\n $scope.$watch('editOrders.orderDetails.ReqDelivDateTime', function (reqDelivDateTimeString, oldReqDelivDateTimeString) {\r\n // OMG using strings instead of Date objects :(...\r\n if (updateCustomerLocationDataLock === 0) {\r\n if (reqDelivDateTimeString !== oldReqDelivDateTimeString &&\r\n !angular.isUndefinedOrNullOrEmpty(oldReqDelivDateTimeString) && !angular.isUndefinedOrNullOrEmpty(reqDelivDateTimeString) &&\r\n angular.isString(oldReqDelivDateTimeString) && angular.isString(reqDelivDateTimeString)) {\r\n var oldReqDelivDateTime = new Date(oldReqDelivDateTimeString.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n var reqDelivDateTime = new Date(reqDelivDateTimeString.replace(/-/g, \"/\").replace(/T/g, \" \"));\r\n\r\n if (oldReqDelivDateTime.toDateString() !== reqDelivDateTime.toDateString()) {\r\n // user changed date => get equipment list for that date\r\n // we save quantities - so we will be able to merge them with new values, because a lot of items might be the same when you just change a date.\r\n dataBetweenDateChanges = $scope.kendo.ordersGrid.dataSource.data().toJSON().concat($scope.kendo.ordersEquipmentGrid.dataSource.data().toJSON());\r\n $scope.updateCustomerLocationData();\r\n }\r\n }\r\n }\r\n });\r\n\r\n $scope.hasAnyTanks = function () {\r\n return $scope.editOrders.orderDetails.OrderDetails && $scope.editOrders.orderDetails.OrderDetails.length > 0 && !\r\n $scope.hideTankAndEquipment;\r\n };\r\n\r\n $scope.hasAnyEquipment = function () {\r\n return $scope.editOrders.orderDetails.OrderEquipmentDetails && $scope.editOrders.orderDetails.OrderEquipmentDetails.length > 0 && !\r\n $scope.hideTankAndEquipment;\r\n };\r\n })\r\n .controller(\"openOrdersCtrl\", function ($scope, ordersService, templates, localStrings)\r\n {\r\n 'use strict'; \r\n $scope.checkForAppliedProfile();\r\n\r\n if (!$scope.appInfo.webUser.CurrentAuthorization.CanAddEditWebOrders) {\r\n $scope.goTo('Orders/OrderHistory');\r\n }\r\n\r\n function getOpenOrders()\r\n {\r\n ordersService.getOpenOrders($scope.appInfo.webUser.CurrentAuthorization.CustKey).then(\r\n function (data)\r\n {\r\n if (data.Successful)\r\n {\r\n if (!angular.isUndefinedOrNullOrEmpty(data.OpenOrders))\r\n {\r\n $scope.openOrders = data.OpenOrders;\r\n $scope.kendo.ordersGridInit();\r\n }\r\n else\r\n $scope.notifier.show(localStrings.getLocalizedString(\"SelectionCriteriaNoResults\"), 'warning');\r\n }\r\n else\r\n $scope.modalifier.showSetupError();\r\n }\r\n );\r\n }\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.ordersGrid = {};\r\n $scope.kendo.ordersGridOptions = {\r\n autoBind: false,\r\n columns: [\r\n {\r\n field: \"Number\",\r\n title: localStrings.getLocalizedString(\"Order\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"PONumber\",\r\n title: localStrings.getLocalizedString(\"PONumber\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"LocDescription\",\r\n title: localStrings.getLocalizedString(\"ShipTo\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Contact\",\r\n title: localStrings.getLocalizedString(\"Contact\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"DeliveryDate\",\r\n title: localStrings.getLocalizedString(\"DateTime\"),\r\n width: 130,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Status\",\r\n title: localStrings.getLocalizedString(\"Status\"),\r\n width: 130,\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"EnteredBy\",\r\n title: localStrings.getLocalizedString(\"EnteredBy\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.ordersGridInit = function ()\r\n {\r\n $scope.kendo.ordersGridDS = new kendo.data.DataSource({\r\n data: $scope.openOrders,\r\n schema: {\r\n parse: function (response)\r\n {\r\n $.each(response, function (idx, elem)\r\n {\r\n if (elem.DeliveryDate && typeof elem.DeliveryDate === \"string\")\r\n {\r\n elem.DeliveryDate = Date.create(elem.DeliveryDate).format('{MM}/{dd}/{yyyy} {12hr}:{mm} {tt}');\r\n }\r\n });\r\n return response;\r\n }\r\n }\r\n });\r\n\r\n $scope.kendo.ordersGridDS.read();\r\n $scope.kendo.ordersGrid.dataSource.data($scope.kendo.ordersGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n\r\n if (!$scope.appInfo.webUser.CurrentAuthorization.CanAddEditWebOrders)\r\n $scope.goTo('Orders/OrderHistory');\r\n\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.openOrders = $scope.locationInfo.sideMenuData.openOrders || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OrdersSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"1\";\r\n\r\n $scope.openOrders = [];\r\n getOpenOrders();\r\n };\r\n\r\n $scope.openOrder = function openOrder(order)\r\n {\r\n switch (order.Status)\r\n {\r\n case 'Pending':\r\n $scope.goTo('Orders/EditOrder/' + order.Key);\r\n break;\r\n\r\n default:\r\n $scope.goTo('Orders/DisplayOrder/' + order.Key);\r\n break;\r\n }\r\n };\r\n })\r\n .controller(\"orderHistoryCtrl\", function ($scope, customerService, templates)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.sideMenuData.orders = $scope.locationInfo.sideMenuData.orders || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OrdersSideMenu\");\r\n $scope.locationInfo.sideMenuData.subMenu = \"3\";\r\n };\r\n })\r\n .controller(\"orderHistorySideMenuCtrl\", function ($scope, validatorSvc, customerService, WebFunctions, $filter, reportingService, Authentication, localizationSvc)\r\n {\r\n 'use strict';\r\n // $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n validatorSvc.clearValidationScopes();\r\n if (!$scope.checkCurrentUserPermission(WebFunctions.ViewOrderHistoryandPriceNotices))\r\n {\r\n $scope.goTo(\"/Home\");\r\n }\r\n $scope.locationInfo.sideMenuData = $scope.locationInfo.sideMenuData || {};\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 20;\r\n $scope.locationInfo.sideMenuData.orders = {\r\n quotes: \"-1\",\r\n ordered: \"-1\",\r\n dispatched: \"-1\",\r\n delivered: \"-1\",\r\n billed: \"-1\",\r\n fuel: \"-1\",\r\n warehouse: \"-1\",\r\n noninventory: \"-1\",\r\n location: 0,\r\n productSearchText: '',\r\n packageSearchText: '',\r\n orderInvoiceBOLSearchTerm: '',\r\n reportType: 'Orders',\r\n showReportDetail: false\r\n };\r\n $scope.$root.reportSettings.reportKey = 13;\r\n\r\n customerService.getCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, 1).then(function (data)\r\n {\r\n $scope.locations = $filter('filter')(data.Locations, {Active: '!0'});\r\n $scope.locations.unshift({\r\n Active: -1,\r\n Description: localStrings.getLocalizedString(\"All\"),\r\n Key: 0\r\n });\r\n setTimeout(function() {\r\n $scope.locationInfo.sideMenuData.orders.location = 0;\r\n }, 0);\r\n });\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.orders = $scope.reportSettings.saveOptions.orders;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.orders = $scope.locationInfo.sideMenuData.orders;\r\n };\r\n\r\n $scope.$on('exportingReport', function (event, args)\r\n {\r\n $scope.applyAction(args.format);\r\n });\r\n\r\n $scope.applyAction = function (format)\r\n {\r\n if (!validatorSvc.executeValidations()) return;\r\n\r\n var reportName = $scope.locationInfo.sideMenuData.orders.showReportDetail ?\r\n \"OrdersDetailed\" : $scope.locationInfo.sideMenuData.orders.reportType;\r\n\r\n var qs = \"reportName=\" + reportName +\r\n \"&RP-CustKey=\" + $scope.appInfo.webUser.CurrentAuthorization.CustKey +\r\n \"&RP-IncludeStatusOpen=\" + $scope.locationInfo.sideMenuData.orders.quotes +\r\n \"&RP-IncludeStatusOrdered=\" + $scope.locationInfo.sideMenuData.orders.ordered +\r\n \"&RP-IncludeStatusDispatched=\" + $scope.locationInfo.sideMenuData.orders.dispatched +\r\n \"&RP-IncludeStatusDelivered=\" + $scope.locationInfo.sideMenuData.orders.delivered +\r\n \"&RP-IncludeStatusBilled=\" + $scope.locationInfo.sideMenuData.orders.billed +\r\n \"&RP-IncludeTypeFuel=\" + $scope.locationInfo.sideMenuData.orders.fuel +\r\n \"&RP-IncludeTypeWarehouse=\" + $scope.locationInfo.sideMenuData.orders.warehouse +\r\n \"&RP-StartDate=\" + $scope.dateSelector.startDate +\r\n \"&RP-EndDate=\" + $scope.dateSelector.endDate +\r\n \"&RP-ShipToKey=\" + $scope.locationInfo.sideMenuData.orders.location +\r\n \"&RP-ProductSearchTerm=\" + $scope.locationInfo.sideMenuData.orders.productSearchText +\r\n \"&RP-PackageSearchTerm=\" + $scope.locationInfo.sideMenuData.orders.packageSearchText +\r\n \"&RP-IncludeTypeNonInventory=\" + $scope.locationInfo.sideMenuData.orders.noninventory +\r\n \"&RP-OrderInvoiceBOLSearchTerm=\" + $scope.locationInfo.sideMenuData.orders.orderInvoiceBOLSearchTerm;\r\n\r\n if (format)\r\n reportingService.exportReport(qs, format);\r\n else\r\n reportingService.renderReport(qs);\r\n\r\n };\r\n })\r\n;","/**\r\n * Created by rhampton on 7/25/2014.\r\n */\r\nangular.module(\"pnODPricing\", ['core.objects', 'services.payments', 'core.directives'])\r\n .config(function ($routeProvider, templateProvider)\r\n {\r\n $routeProvider\r\n .when(\"/Orders/BulkFuelPrices\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"BulkFuelPrices\"),\r\n controller: \"bulkFuelPricesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n )\r\n .when(\"/Orders/WarehousePrices\",\r\n {\r\n templateUrl: templateProvider.getTemplate(\"WarehousePrices\"),\r\n controller: \"warehousePricesCtrl\",\r\n resolve: {\r\n localStrings: function (localizationSvc) {\r\n return localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n }\r\n }\r\n }\r\n );\r\n })\r\n .controller(\"odPricingSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n if (!$scope.locationInfo.sideMenuData) $scope.locationInfo.sideMenuData = {};\r\n };\r\n })\r\n .controller(\"bulkFuelPricesCtrl\", function ($scope, bulkFuelPriceNoticesService, $filter, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.bulkPricesGrid = {};\r\n $scope.kendo.bulkPricesGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.openEdoc(dataItem.EdocDtlKey);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"EffDateTimeFormatted\",\r\n title: localStrings.getLocalizedString(\"ReportDate\"),\r\n width: 100,\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n field: \"Location\",\r\n title: localStrings.getLocalizedString(\"Location\"),\r\n attributes: {class: \"alignLeft\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.bulkPricesGridInit = function ()\r\n {\r\n $scope.kendo.bulkPricesGridDS = new kendo.data.DataSource({\r\n data: $scope.appInfo.bulkFuelPrices\r\n });\r\n\r\n $scope.kendo.bulkPricesGridDS.read();\r\n $scope.kendo.bulkPricesGrid.dataSource.data($scope.kendo.bulkPricesGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 21;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OdPricingSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\",\r\n bulkFuelPrices: {\r\n location: 0\r\n }\r\n };\r\n if (!$scope.appInfo.bulkFuelPrices) $scope.appInfo.bulkFuelPrices = [];\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n $scope.modalifier.hide();\r\n $scope.predicate = 'EffDateTimeFormatted';\r\n $scope.reverse = false;\r\n bulkFuelPriceNoticesService.loadBulkFuelPrices($scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.locationInfo.sideMenuData.bulkFuelPrices.location,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate).then(function (data)\r\n {\r\n if (data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"BulkFuelPrices\"));\r\n }\r\n $scope.appInfo.bulkFuelPrices = data;\r\n angular.forEach($scope.appInfo.bulkFuelPrices, function (element)\r\n {\r\n element.EffDateTimeFormatted = $filter('date')(element.EffDateTime, 'MM/dd/yyyy');\r\n });\r\n $scope.kendo.bulkPricesGridInit();\r\n });\r\n };\r\n })\r\n .controller(\"bulkFuelPricesSideMenuCtrl\", function ($scope, templates, customerService, $filter, localizationSvc)\r\n {\r\n 'use strict';\r\n var localStrings = localizationSvc.getCachedLocalizationsContainer(\"OrdersLocalization\");\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 21;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OdPricingSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"1\",\r\n bulkFuelPrices: {\r\n location: 0\r\n }\r\n };\r\n $scope.$root.reportSettings.reportKey = 16;\r\n customerService.getCustomerLocations($scope.appInfo.webUser.CurrentAuthorization.CustKey, 1).then(function (data)\r\n {\r\n $scope.locations = $filter('filter')(data.Locations, {Active: '!0'});\r\n $scope.locations.unshift({\r\n Active: -1,\r\n Description: localStrings.getLocalizedString(\"All\"),\r\n Key: 0\r\n });\r\n $scope.locationInfo.sideMenuData.bulkFuelPrices.location = 0;\r\n });\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.bulkFuelPrices = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.bulkFuelPrices;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n })\r\n .controller(\"warehousePricesCtrl\", function ($scope, warehousePriceNoticesService, $filter, templates, localStrings)\r\n {\r\n 'use strict';\r\n\r\n $scope.kendo = {};\r\n $scope.kendo.warehousePricesGrid = {};\r\n $scope.kendo.warehousePricesGridOptions = {\r\n autoBind: false,\r\n change: function (e)\r\n {\r\n var selectedRows = this.select();\r\n var dataItem = this.dataItem(selectedRows[0]);\r\n $scope.openEdoc(dataItem.EdocDtlKey);\r\n $scope.$apply();\r\n },\r\n columns: [\r\n {\r\n field: \"EffDateTimeFormatted\",\r\n title: localStrings.getLocalizedString(\"ReportDate\"),\r\n attributes: {class: \"alignRight\"},\r\n filterable: {\r\n cell: {\r\n operator: \"contains\",\r\n showOperators: false\r\n }\r\n }\r\n },\r\n {\r\n template: \"\",\r\n width: 50\r\n }\r\n ],\r\n dataSource: new kendo.data.DataSource(),\r\n editable: false,\r\n filterable: {\r\n mode: \"row\", extra: false\r\n },\r\n navigatable: true,\r\n pageable: false,\r\n scrollable: false,\r\n selectable: \"row\",\r\n sortable: true\r\n };\r\n\r\n $scope.kendo.warehousePricesGridInit = function ()\r\n {\r\n $scope.kendo.warehousePricesGridDS = new kendo.data.DataSource({\r\n data: $scope.appInfo.warehousePrices\r\n });\r\n\r\n $scope.kendo.warehousePricesGridDS.read();\r\n $scope.kendo.warehousePricesGrid.dataSource.data($scope.kendo.warehousePricesGridDS.data());\r\n };\r\n\r\n $scope.initialize = function ()\r\n {\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = 21;\r\n $scope.locationInfo.sideMenu = templates.getTemplate(\"OdPricingSideMenu\");\r\n $scope.locationInfo.sideMenuData = {\r\n subMenu: \"2\",\r\n warehousePrices: {}\r\n };\r\n if (!$scope.appInfo.warehousePrices) $scope.appInfo.warehousePrices = [];\r\n };\r\n\r\n $scope.$parent.applyAction = function ()\r\n {\r\n $scope.modalifier.hide();\r\n $scope.predicate = 'EffDateTimeFormatted';\r\n $scope.reverse = false;\r\n warehousePriceNoticesService.loadWarehousePrices($scope.appInfo.webUser.CurrentAuthorization.CustKey,\r\n $scope.dateSelector.startDate,\r\n $scope.dateSelector.endDate).then(function (data)\r\n {\r\n if (data.length === 0)\r\n {\r\n $scope.modalifier.showNoResults(localStrings.getLocalizedString(\"WarehousePrices\"));\r\n }\r\n $scope.appInfo.warehousePrices = data;\r\n angular.forEach($scope.appInfo.warehousePrices, function (element)\r\n {\r\n element.EffDateTimeFormatted = $filter('date')(element.EffDateTime, 'MM/dd/yyyy');\r\n });\r\n $scope.kendo.warehousePricesGridInit();\r\n });\r\n };\r\n\r\n\r\n })\r\n .controller(\"warehousePricesSideMenuCtrl\", function ($scope)\r\n {\r\n 'use strict';\r\n $scope.initialize = function ()\r\n {\r\n $scope.$root.reportSettings.reportKey = 31;\r\n };\r\n\r\n $scope.$root.reportSettings = $scope.$root.reportSettings || {};\r\n $scope.$root.reportSettings.unwrapReportSettings = function ()\r\n {\r\n $scope.locationInfo.sideMenuData.warehousePrices = $scope.reportSettings.loadOptions.controls;\r\n $scope.dateSelector = $scope.reportSettings.loadOptions.date;\r\n };\r\n\r\n $scope.$root.reportSettings.wrapReportSettings = function ()\r\n {\r\n $scope.reportSettings.saveOptions.controls = $scope.locationInfo.sideMenuData.warehousePrices;\r\n $scope.reportSettings.saveOptions.date = $scope.dateSelector;\r\n };\r\n })\r\n;","/**\r\n * Created by rhampton on 2/28/14.\r\n */\r\nangular.module('services.httpService', []);","/**\r\n * Created by rhampton on 6/17/2014.\r\n */\r\n\r\n\r\n/* ==============================================================================\r\n\r\n CORE.DIRECTIVES MODULE\r\n\r\n Defines the module namespace for the core.directives\r\n\r\n ============================================================================= */\r\nangular.module('core.directives', []);\r\n\r\n/* ==============================================================================\r\n\r\n Modal Dialog\r\n\r\n Shows and hides a modal dialog centered on the page.\r\n\r\n ============================================================================= */\r\nangular.module('core.directives')\r\n .directive('modalDialog', function ($rootScope)\r\n {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n show: '=',\r\n closeDialog: '&',\r\n closeText: '@',\r\n autoClose: '@'\r\n },\r\n replace: true, // Replace with the template below\r\n transclude: true, // we want to insert custom content inside the directive\r\n link: function (scope, element, attrs)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty(attrs.autoClose))\r\n {\r\n attrs.autoClose = true;\r\n } else\r\n {\r\n attrs.autoClose = scope.$eval(attrs.autoClose);\r\n }\r\n\r\n scope.dialogStyle = {};\r\n if (attrs.width)\r\n scope.dialogStyle.width = attrs.width;\r\n if (attrs.height)\r\n scope.dialogStyle.height = attrs.height;\r\n\r\n\r\n },\r\n controller: function ($scope, $element, $attrs)\r\n {\r\n\r\n $scope.hideModal = function (source)\r\n {\r\n if ((source === 1) && (!$attrs.autoClose))\r\n {\r\n return;\r\n } // if clicked outside of modal and autoClose is set to false then don't close modal\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty($scope.closeDialog()))\r\n {\r\n $scope.closeDialog();\r\n }\r\n\r\n $scope.show = false;\r\n };\r\n },\r\n template: \"
    \"\r\n };\r\n })\r\n .directive('parseInt', [function ()\r\n {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attrs, controller)\r\n {\r\n controller.$formatters.push(function (modelValue)\r\n {\r\n return '' + modelValue;\r\n });\r\n\r\n controller.$parsers.push(function (viewValue)\r\n {\r\n return parseInt(viewValue, 10);\r\n });\r\n }\r\n };\r\n }])\r\n .directive('parseFloat', [function ()\r\n {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attrs, controller)\r\n {\r\n controller.$formatters.push(function (modelValue)\r\n {\r\n return '' + modelValue;\r\n });\r\n\r\n controller.$parsers.push(function (viewValue)\r\n {\r\n return parseFloat(viewValue);\r\n });\r\n }\r\n };\r\n }])\r\n .directive('parseDate', function ()\r\n {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attr, ngModelCtrl)\r\n {\r\n function fromUser(text)\r\n {\r\n var transformedInput = text.replace(/[^0-9/]/, '');\r\n if (transformedInput !== text)\r\n {\r\n ngModelCtrl.$setViewValue(transformedInput);\r\n ngModelCtrl.$render();\r\n }\r\n return transformedInput;\r\n }\r\n\r\n ngModelCtrl.$parsers.push(fromUser);\r\n }\r\n };\r\n })\r\n .directive('dynamicHtml', function ($compile)\r\n {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n link: function (scope, ele, attrs)\r\n {\r\n scope.$watch(attrs.dynamic, function (html)\r\n {\r\n ele.html(html);\r\n $compile(ele.contents())(scope);\r\n });\r\n }\r\n };\r\n })\r\n .directive('money', function ($filter)\r\n {\r\n 'use strict';\r\n var NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))\\s*$/;\r\n\r\n function link(scope, el, attrs, ngModelCtrl)\r\n {\r\n var min = parseFloat(attrs.min || 0);\r\n var precision = parseFloat(attrs.precision || 2);\r\n var symbol = attrs.symbol || '';\r\n var lastValidValue;\r\n\r\n function unFormatNumber(number)\r\n {\r\n number += '';\r\n\r\n if (number.toString().indexOf(',') > -1)\r\n {\r\n number = number.replace(/,/g, \"\");\r\n }\r\n if (number.toString().indexOf('$') > -1)\r\n {\r\n number = number.replace(/\\$/g, \"\");\r\n }\r\n if (number.length === 0)// || isNaN(number))\r\n return \"0\";\r\n return number;\r\n }\r\n\r\n function formatViewValue(value)\r\n {\r\n value = unFormatNumber(value);\r\n value = ngModelCtrl.$isEmpty(value) ? '' : '' + symbol + formatNumber(value, precision);\r\n lastValidValue = value;\r\n return value;\r\n }\r\n\r\n ngModelCtrl.$formatters.push(formatViewValue);\r\n\r\n function formatNumber(val, decimalPlaces)\r\n {\r\n val = unFormatNumber(val);\r\n val = parseFloat(val).toFixed(decimalPlaces);\r\n val = addCommas(val);\r\n return val;\r\n }\r\n\r\n function addCommas(nStr)\r\n {\r\n nStr += '';\r\n var x = nStr.split('.');\r\n var x1 = x[0];\r\n var x2 = x.length > 1 ? '.' + x[1] : '';\r\n var rgx = /(\\d+)(\\d{3})/;\r\n while (rgx.test(x1))\r\n {\r\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n }\r\n return x1 + x2;\r\n }\r\n\r\n ngModelCtrl.$parsers.push(function (value)\r\n {\r\n value = unFormatNumber(value);\r\n if (angular.isUndefined(value))\r\n {\r\n value = '';\r\n }\r\n // value = unFormatNumber(value);\r\n // Handle leading decimal point, like \".5\"\r\n if (value.indexOf('.') === 0)\r\n {\r\n value = '0' + value;\r\n }\r\n\r\n // Allow \"-\" inputs only when min < 0\r\n if (value.indexOf('-') === 0)\r\n {\r\n if (min >= 0)\r\n {\r\n value = null;\r\n ngModelCtrl.$setViewValue('');\r\n ngModelCtrl.$render();\r\n } else if (value === '-')\r\n {\r\n value = '';\r\n }\r\n }\r\n\r\n var empty = ngModelCtrl.$isEmpty(value);\r\n if (empty || NUMBER_REGEXP.test(value))\r\n {\r\n lastValidValue = (value === '') ? null : (empty ? value : parseFloat(value));\r\n } else\r\n {\r\n // Render the last valid input in the field\r\n ngModelCtrl.$setViewValue(formatViewValue(lastValidValue));\r\n ngModelCtrl.$render();\r\n }\r\n\r\n ngModelCtrl.$setValidity('number', true);\r\n return lastValidValue;\r\n });\r\n\r\n function applyFormat()\r\n {\r\n var value = unFormatNumber(ngModelCtrl.$modelValue);\r\n if (!isNaN(value))\r\n {\r\n ngModelCtrl.$viewValue = formatViewValue(value);\r\n lastValidValue = ngModelCtrl.$viewValue;\r\n ngModelCtrl.$render();\r\n }\r\n }\r\n\r\n el.bind('blur', applyFormat);\r\n el.bind('change', applyFormat);\r\n\r\n return applyFormat();\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: link\r\n };\r\n })\r\n .directive('customAutofocus', function ()\r\n {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs)\r\n {\r\n scope.$watch(function ()\r\n {\r\n return scope.$eval(attrs.customAutofocus);\r\n }, function (newValue)\r\n {\r\n if (newValue === true)\r\n {\r\n element[0].select();\r\n element[0].focus();\r\n //use focus function instead of autofocus attribute to avoid cross browser problem.\r\n // And autofocus should only be used to mark an element to be focused when page loads.\r\n }\r\n });\r\n }\r\n };\r\n })\r\n .directive(\"toolTips\", function ($compile)\r\n {\r\n var clone = $compile('
    {{text}}
    ');\r\n\r\n function link(scope, el, attr)\r\n {\r\n if (scope.text && scope.text.length > 0)\r\n {\r\n el.qtip({\r\n position: {\r\n at: \"right middle\"\r\n },\r\n style: {\r\n tip: {\r\n corner: \"left top\"\r\n },\r\n classes: \"toolTipStyle\"\r\n },\r\n content: {\r\n text: function ()\r\n {\r\n return scope.$apply(function ()\r\n {\r\n return clone(scope);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n link: link,\r\n scope: {\r\n text: \"=toolTips\"\r\n }\r\n };\r\n })\r\n .directive('strength', ['$parse', function ($parse)\r\n {\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n scope: {\r\n passwordComplexity: \"=\",\r\n passwordMeterScore: \"=\"\r\n },\r\n link: function (scope, elem, attrs, ctrl)\r\n {\r\n ctrl.$parsers.unshift(function (viewValue)\r\n {\r\n var pwdValidLength, pwdHasLetter, pwdHasNumber, pwdHasSpecial;\r\n\r\n if (scope.passwordComplexity.EnforcePasswordComplexity)\r\n {\r\n pwdValidLength = (viewValue && viewValue.length >= scope.passwordComplexity.PasswordMinLength ? true : false);\r\n pwdHasLetter = (viewValue && (viewValue.match(/[A-Z]/g) && viewValue.match(/[A-Z]/g).length >= scope.passwordComplexity.PasswordMinUpperCase)) ? true : false;\r\n pwdHasNumber = (viewValue && (viewValue.match(/\\d/g) && viewValue.match(/\\d/g).length >= scope.passwordComplexity.PasswordMinNumbers)) ? true : false;\r\n pwdHasSpecial = (viewValue && (viewValue.match(/[^a-zA-Z0-9]/g) && viewValue.match(/[^a-zA-Z0-9]/g).length >= scope.passwordComplexity.PasswordMinUpperCase)) ? true : false;\r\n\r\n } else\r\n {\r\n pwdValidLength = (viewValue && viewValue.length >= 7 ? true : false);\r\n pwdHasLetter = (viewValue && /[A-Z]/.test(viewValue)) ? true : false;\r\n pwdHasNumber = (viewValue && /\\d/.test(viewValue)) ? true : false;\r\n pwdHasSpecial = (viewValue && /[^a-zA-Z0-9]/.test(viewValue)) ? true : false;\r\n }\r\n\r\n var score = +(viewValue.length) +\r\n (/[A-Z]/.test(viewValue) ? 1 : 0 ) +\r\n (/[a-z]/.test(viewValue) ? 1 : 0 ) +\r\n (/\\d/.test(viewValue) ? 1 : 0) +\r\n (/[^a-zA-Z0-9]/.test(viewValue) ? 1 : 0);\r\n\r\n var total = viewValue.length > 7 ? viewValue.length + 4 : 11;\r\n scope.passwordMeterScore = score / total;\r\n\r\n if (pwdValidLength && pwdHasLetter && pwdHasNumber && pwdHasSpecial)\r\n {\r\n ctrl.$setValidity('pwd', true);\r\n } else\r\n {\r\n ctrl.$setValidity('pwd', false);\r\n }\r\n return viewValue;\r\n });\r\n }\r\n };\r\n }])\r\n .directive('match', ['$parse', function ($parse)\r\n {\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n link: function (scope, elem, attrs, ctrl)\r\n {\r\n scope.$watch(function ()\r\n {\r\n return (ctrl.$pristine && angular.isUndefined(ctrl.$modelValue)) || $parse(attrs.match)(scope) === ctrl.$modelValue;\r\n }, function (currentValue)\r\n {\r\n ctrl.$setValidity('match', currentValue);\r\n });\r\n }\r\n };\r\n }])\r\n .directive('imageSlider', ['$interval', '$timeout', function ($interval, $timeout)\r\n {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n imageArray: '='\r\n },\r\n template: \"
    \",\r\n link: function (scope, elem, attrs, ctrl)\r\n {\r\n var start,\r\n stop,\r\n advance;\r\n\r\n // reverse thru the array and remove non-active images\r\n for (var i = scope.imageArray.length - 1; i >= 0; i--)\r\n {\r\n if (!scope.imageArray[i].Active)\r\n scope.imageArray.splice(i, 1);\r\n }\r\n\r\n scope.slider = {\"index\": 0};\r\n\r\n start = function ()\r\n {\r\n if (advance)\r\n return;\r\n\r\n advance = $interval(function ()\r\n {\r\n if (scope.slider.index === scope.imageArray.length - 1)\r\n scope.slider.index = 0;\r\n else\r\n ++scope.slider.index;\r\n }, 7000);\r\n };\r\n\r\n start();\r\n\r\n stop = function ()\r\n {\r\n if (advance)\r\n {\r\n $interval.cancel(advance);\r\n advance = undefined;\r\n }\r\n };\r\n\r\n scope.getPrevImage = function (index)\r\n {\r\n scope.pauseAutoAdvance();\r\n if (index === 0)\r\n scope.slider.index = scope.imageArray.length - 1;\r\n else\r\n scope.slider.index = index - 1;\r\n };\r\n\r\n scope.getNextImage = function (index)\r\n {\r\n scope.pauseAutoAdvance();\r\n if (index === scope.imageArray.length - 1)\r\n scope.slider.index = 0;\r\n else\r\n scope.slider.index = index + 1;\r\n };\r\n\r\n scope.pauseAutoAdvance = function ()\r\n {\r\n if (advance)\r\n {\r\n stop();\r\n $timeout(start, 20000);\r\n }\r\n };\r\n\r\n scope.$on('$destroy', function ()\r\n {\r\n stop();\r\n }\r\n );\r\n\r\n }\r\n };\r\n }])\r\n .directive('alphaNumeric', function ()\r\n {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, modelCtrl)\r\n {\r\n modelCtrl.$parsers.push(function (inputValue)\r\n {\r\n // this next if is necessary for when using ng-required on your input.\r\n // In such cases, when a letter is typed first, this parser will be called\r\n // again, and the 2nd time, the value will be undefined\r\n if (inputValue === undefined) return '';\r\n var transformedInput = attrs.alphaNumeric === '0' ? inputValue.replace(/[^0-9]/g, '') : inputValue.replace(/[^a-zA-Z0-9]/g, '');\r\n if (transformedInput !== inputValue)\r\n {\r\n modelCtrl.$setViewValue(transformedInput);\r\n modelCtrl.$render();\r\n }\r\n\r\n return transformedInput;\r\n });\r\n }\r\n };\r\n })\r\n .directive('autoresize', function ($window)\r\n {\r\n return function ($scope)\r\n {\r\n $scope.initializeWindowSize = function ()\r\n {\r\n $scope.maxHeight = Math.max(\r\n document.body.scrollHeight, document.documentElement.scrollHeight,\r\n document.body.offsetHeight, document.documentElement.offsetHeight,\r\n document.body.clientHeight, document.documentElement.clientHeight,\r\n window.innerHeight\r\n );\r\n $scope.windowHeight = $window.innerHeight;\r\n return $scope.windowWidth = $window.innerWidth;\r\n };\r\n $scope.initializeWindowSize();\r\n $scope.$watch('__height', function (newHeight, oldHeight)\r\n {\r\n $scope.initializeWindowSize();\r\n });\r\n return angular.element($window).bind('resize', function ()\r\n {\r\n $scope.initializeWindowSize();\r\n return $scope.$apply();\r\n });\r\n };\r\n })\r\n .directive('customContent', function ($compile)\r\n {\r\n return function (scope, el, attrs)\r\n {\r\n el.replaceWith($compile(attrs.html)(scope));\r\n };\r\n })\r\n .directive('onCloseFn', function ()\r\n {\r\n /*\r\n on-close-fn=\"myClosingActions()\"\r\n on-close-message='Thanks for visiting out site.'\r\n\r\n $scope.myClosingActions returns: true to display the stock browser 'Leaving Page' with your message,\r\n false displays nothing\r\n */\r\n return {\r\n scope: {\r\n onCloseFn: '&',\r\n onCloseMessage: '@'\r\n },\r\n link: function ($scope, elem, attrs)\r\n {\r\n window.onbeforeunload = function ()\r\n {\r\n if ($scope.onCloseFn())\r\n {\r\n return $scope.onCloseMessage || ' ';\r\n }\r\n };\r\n\r\n $scope.$on('$destroy', function ()\r\n {\r\n window.onbeforeunload = null;\r\n });\r\n }\r\n };\r\n })\r\n .directive('onLeaveFn', function ()\r\n {\r\n /*\r\n on-leave-fn=\"myClosingActions()\"\r\n on-leave-message='You have unsaved changes. Leaving the page will result in data lose.'\r\n\r\n $scope.myClosingActions returns: true to display the stock browser 'Leaving Page' with your message,\r\n false displays nothing\r\n */\r\n return {\r\n scope: {\r\n onLeaveIfFn: '&',\r\n onLeaveMessage: '@'\r\n },\r\n link: function ($scope, elem, attrs)\r\n {\r\n\r\n var $locationChangeStartUnbind = $scope.$on('$locationChangeStart', function (event, next, current)\r\n {\r\n if ($scope.onLeaveIfFn())\r\n {\r\n if (!confirm($scope.onLeaveMessage || 'Leave this page?'))\r\n {\r\n event.preventDefault();\r\n }\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', function ()\r\n {\r\n $locationChangeStartUnbind();\r\n });\r\n }\r\n };\r\n })\r\n .directive('promptToSave', ['$timeout', function ($timeout)\r\n {\r\n return {\r\n link: function ($scope, elem, attrs, ctrl)\r\n {\r\n var menu = $scope.locationInfo.menuLocation,\r\n subMenu = $scope.locationInfo.subMenuLocation,\r\n sideMenu = $scope.locationInfo.sideMenuData.subMenu;\r\n\r\n $scope.$cancelPromptToSave = $scope.$on('$locationChangeStart', function (event, next, current)\r\n {\r\n var result = elem.find(\".ng-dirty:not(form)\").length + elem.find(\".k-dirty-cell\").length + elem.find(\".k-dirty\").length;\r\n\r\n if (result > 0)\r\n {\r\n var confirmPopUpText = \"This page may have unsaved changes.\\n\\nContinue without saving?\";\r\n if ($scope.localizationFilesInitialized)\r\n {\r\n var localizedString = $scope.pnLocalizationCtrl.localizations.getCachedLocalizationsContainer(\"AppLocalization\");\r\n confirmPopUpText = localizedString.stringFromCharacterEntity(localizedString.getLocalizedString(\"UnsavedChanges\") + \"\\n\\n\" + localizedString.getLocalizedString(\"ContinueWithoutSaving\"));\r\n }\r\n\r\n var response = confirm(confirmPopUpText);\r\n\r\n if (!response)\r\n {\r\n event.preventDefault();\r\n $scope.locationInfo.menuLocation = menu;\r\n $scope.locationInfo.subMenuLocation = subMenu;\r\n if ($scope.locationInfo.sideMenuData.pendingNav)\r\n $timeout.cancel($scope.locationInfo.sideMenuData.pendingNav);\r\n $scope.locationInfo.sideMenuData.subMenu = sideMenu;\r\n }\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', function ()\r\n {\r\n $scope.$cancelPromptToSave();\r\n });\r\n }\r\n };\r\n }])\r\n .directive('processingOverlay', function ($rootScope, $window, $timeout)\r\n {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n link: function (scope, element, attrs)\r\n {\r\n var overlayContainer = document.getElementById('processingOverlay');\r\n overlayContainer.style.width = '994px';\r\n\r\n var mainContent = document.getElementsByClassName(\"main-content\")[0];\r\n\r\n $rootScope.$watch('mainContent.clientHeight', function ()\r\n {\r\n setHeight();\r\n });\r\n\r\n $rootScope.$watch('showLoader', function (show)\r\n {\r\n if (show)\r\n {\r\n overlayContainer.style.display = 'block';\r\n $timeout(function ()\r\n {\r\n setHeight();\r\n });\r\n }\r\n else\r\n {\r\n overlayContainer.style.display = 'none';\r\n }\r\n });\r\n\r\n function setHeight()\r\n {\r\n $(\"#processingOverlay\").height(mainContent.clientHeight);\r\n }\r\n },\r\n template: '
    '\r\n\r\n\r\n };\r\n })\r\n .directive('postRender', ['$timeout', function ($timeout) {\r\n // Use this directive when you need to reliably call a function after the element renders\r\n return {\r\n scope: {\r\n postRender: '&'\r\n },\r\n restrict: 'A',\r\n terminal: true,\r\n transclude: true,\r\n link: function (scope, element, attrs) {\r\n $timeout(scope.postRender, 0);\r\n }\r\n };\r\n }])\r\n .directive('pdiPaperworkPrompt', ['$rootScope', '$timeout', 'validatorSvc',\r\n function($rootScope, $timeout, validatorSvc) {\r\n return {\r\n require: 'form',\r\n restrict: 'A',\r\n link: function($scope, element, attrs) {\r\n\r\n var localizedString = $scope.pnLocalizationCtrl.localizations.getCachedLocalizationsContainer(\"AppLocalization\");\r\n var paperworkLocalizedString = $scope.pnLocalizationCtrl.localizations.getCachedLocalizationsContainer(\"PaperworkLocalization\");\r\n\r\n var confirmPopUpText = localizedString.getLocalizedString(\"SaveCurrentRecord\");\r\n var submitPopUpText = paperworkLocalizedString.getLocalizedString(\"CloseSubmitPaperwork\");\r\n\r\n var currentMenu = $scope.locationInfo.menuLocation;\r\n var currentSubMenu = $scope.locationInfo.subMenuLocation;\r\n var currentSideMenu = $scope.locationInfo.sideMenuData.subMenu;\r\n\r\n var counter = 0;\r\n\r\n var $locationChangeStartUnbind = $scope.$on('$locationChangeStart', function (event, next, current)\r\n {\r\n if (angular.isUndefinedOrNullOrEmpty($scope.appInfo.paperwork)) { return; }\r\n if ($rootScope.loggingOut) { return; }\r\n if ($scope.submitClicked) { return; }\r\n\r\n counter++;\r\n\r\n // If the submit fails this will continuously run without the counter and the prompt won't close.\r\n if (counter > 1) { return; }\r\n\r\n // Just leave if we are viewOnly\r\n if ($scope.appInfo.paperwork.viewOnly) { return; }\r\n\r\n var result = findDirtyElements(element);\r\n let formName = attrs.name;\r\n let nextPath = parsePath(next);\r\n let submit = false;\r\n\r\n if (!nextPath.includes('EnterPaperwork')) {\r\n submit = true;\r\n }\r\n \r\n var yesFN = () => { yes(formName, nextPath, submit); };\r\n\r\n var noFN = () => { no(formName, nextPath); }; \r\n\r\n if (result > 0 || submit)\r\n {\r\n event.preventDefault();\r\n \r\n if (!submit) {\r\n $scope.modalifier.confirm(confirmPopUpText, yesFN, noFN);\r\n } else {\r\n $scope.modalifier.confirm(submitPopUpText, yesFN, noFN);\r\n }\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', $locationChangeStartUnbind);\r\n\r\n function navigate(path, isValid) {\r\n parseMenuLocation(path, isValid);\r\n if (!isValid) return;\r\n $scope.goTo(path);\r\n }\r\n\r\n function localResetDirtyFlags(form) {\r\n form.$setPristine();\r\n $('.k-dirty').removeClass('k-dirty');\r\n $('.k-dirty-cell').removeClass('k-dirty-cell');\r\n }\r\n\r\n function parsePath(path) {\r\n let nextPathIndex = path.indexOf('#');\r\n if (nextPathIndex !== -1) {\r\n let nextPath = path.substring(nextPathIndex + 1); // +1 to exclude the index itself \r\n return nextPath;\r\n } else {\r\n return '/Home';\r\n }\r\n }\r\n\r\n // If we are navigating to a different page, we need to update the menu location\r\n // If we are staying in paperwork and going to the reports submenu then set the subMenuLocation\r\n function parseMenuLocation(path, isValid) {\r\n if (!isValid) {\r\n $scope.locationInfo.menuLocation = currentMenu;\r\n $scope.locationInfo.subMenuLocation = currentSubMenu;\r\n if ($scope.locationInfo.sideMenuData.pendingNav)\r\n $timeout.cancel($scope.locationInfo.sideMenuData.pendingNav);\r\n $scope.locationInfo.sideMenuData.subMenu = currentSideMenu;\r\n return;\r\n }\r\n if (path.includes('Home')) {\r\n $scope.locationInfo.menuLocation = 0;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n } \r\n if (path.includes('Account')) {\r\n $scope.locationInfo.menuLocation = 1;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n } \r\n if (path.includes('Orders')) {\r\n $scope.locationInfo.menuLocation = 2;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n } \r\n if (path.includes('Paperwork')) {\r\n $scope.locationInfo.menuLocation = 3;\r\n if (path.includes('Reports')) {\r\n $scope.locationInfo.subMenuLocation = 31; // Paperwork Reports\r\n }\r\n }\r\n if (path.includes('FuelCards')) {\r\n $scope.locationInfo.menuLocation = 4;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n }\r\n if (path.includes('Documents')) {\r\n $scope.locationInfo.menuLocation = 6;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n }\r\n if (path.includes('Pages')) {\r\n $scope.locationInfo.menuLocation = 7;\r\n $scope.locationInfo.subMenuLocation = -1;\r\n }\r\n }\r\n\r\n function yes (formName, nextPath, submit) {\r\n let isValid = true;\r\n \r\n switch(formName) {\r\n case 'metersForm':\r\n if (!validatorSvc.executeValidations() || !$scope.validateMeters())\r\n {\r\n isValid = false;\r\n }\r\n $scope.saveMeters(\"\", submit, false, false, submit);\r\n break;\r\n case 'appInfo.paperwork.deliveries.appForm':\r\n if ($scope.currentView === 0 || $(\"#appForm\").hasClass(\"ng-pristine\"))\r\n { // if in record selector just submit\r\n $scope.submitPaperwork(true, true);\r\n } else {\r\n if (!validatorSvc.executeValidations() || !$scope.validateDeliveries())\r\n {\r\n isValid = false;\r\n }\r\n $scope.savePaperworkDelivery(\"\", submit, false, false, submit);\r\n }\r\n break;\r\n case 'tanksForm':\r\n if (!$scope.validateTanks()) {\r\n isValid = false;\r\n } else {\r\n if ($scope.tankCommentIsRequired) {\r\n isValid = $scope.tankCommentValidation.validatorError();\r\n }\r\n }\r\n $scope.savePaperworkTanks(\"\", submit, false, false, submit);\r\n break;\r\n case 'dealerFormsForm':\r\n $scope.saveDealerForms(\"\", submit, false, false, submit);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (nextPath)\r\n {\r\n $timeout(function () {\r\n navigate(nextPath, isValid);\r\n }, 250);\r\n }\r\n }\r\n\r\n function no (formName, nextPath) {\r\n switch(formName) {\r\n case 'metersForm':\r\n localResetDirtyFlags($scope.metersForm);\r\n break;\r\n case 'appInfo.paperwork.deliveries.appForm':\r\n localResetDirtyFlags($scope.appInfo.paperwork.deliveries.appForm);\r\n break;\r\n case 'tanksForm':\r\n localResetDirtyFlags($scope.tanksForm);\r\n break;\r\n case 'dealerFormsForm':\r\n localResetDirtyFlags($scope.dealerFormsForm);\r\n break;\r\n default:\r\n return;\r\n }\r\n if (nextPath) {\r\n $timeout(function () {\r\n navigate(nextPath, true);\r\n }, 0);\r\n }\r\n }\r\n\r\n function findDirtyElements(element) {\r\n return element.find(\".ng-dirty:not(form)\").length + element.find(\".k-dirty-cell\").length + element.find(\".k-dirty\").length;\r\n }\r\n }\r\n };\r\n }]);","\r\nangular.module('pdi.extensions', [])\r\n .factory('dateTimeFormatPatterns', function() {\r\n 'use strict';\r\n\r\n function formatForCulture(type, formatType) {\r\n\r\n var formatStr = '';\r\n\r\n if (formatType === 1) //kendo\r\n {\r\n if (type === 0) { //date\r\n\r\n formatStr = \"mm/dd/yyyy\";\r\n\r\n } else if (type === 1) { //time\r\n\r\n formatStr = \"hh:mm t\";\r\n\r\n } else { //date and time\r\n\r\n formatStr = \"mm/dd/yyyy hh:mm t\";\r\n }\r\n } else if (formatType === 2) { //input mask\r\n if (type === 0) { //date\r\n\r\n formatStr = \"m/d/yyyy\";\r\n\r\n } else if (type === 1) { //time\r\n\r\n formatStr = \"hh:mm t\";\r\n\r\n } else { //date and time\r\n\r\n formatStr = \"datetime12us\";\r\n }\r\n } else {\r\n if (type === 0) { //date\r\n\r\n formatStr = \"MM/dd/yyyy\";\r\n\r\n } else if (type === 1) { //time\r\n\r\n formatStr = \"HH:mm a\";\r\n\r\n } else { //date and time\r\n\r\n formatStr = \"MM/dd/yyyy hh:mm a\";\r\n }\r\n\r\n }\r\n\r\n return formatStr;\r\n }\r\n\r\n return {\r\n kendoDateFormat: formatForCulture(0, 1),\r\n kendoTimeFormat: formatForCulture(1, 1),\r\n kendoDateTimeFormat: formatForCulture(2, 1),\r\n inputMaskDateFormat: formatForCulture(0, 2),\r\n inputMaskTimeFormat: formatForCulture(1, 2),\r\n inputMaskDateTimeFormat: formatForCulture(2, 2),\r\n dateFormat: formatForCulture(0, 0),\r\n timeFormat: formatForCulture(1, 0),\r\n dateTimeFormat: formatForCulture(2,0)\r\n };\r\n })\r\n\r\n .directive('kendoDatePicker', [\r\n '$timeout', 'dateTimeFormatPatterns', function($timeout, dateTimeFormatPatterns) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n require: '?ngModel',\r\n link: function(scope, element, attrs, ctrl) {\r\n\r\n var ntbCtrl;\r\n\r\n $timeout(function() {\r\n ntbCtrl = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n if (ntbCtrl !== undefined) {\r\n ntbCtrl.format = dateTimeFormatPatterns.kendoDateFormat;\r\n $(element).inputmask(dateTimeFormatPatterns.inputMaskDateFormat, { clearMaskOnLostFocus: false });\r\n }\r\n\r\n },300);\r\n\r\n }\r\n };\r\n\r\n }\r\n ])\r\n\r\n .directive('kendoDateTimePicker', [\r\n '$timeout', 'dateTimeFormatPatterns', function($timeout, dateTimeFormatPatterns) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n require: '?ngModel',\r\n link: function(scope, element, attrs, ctrl) {\r\n\r\n var ntbCtrl;\r\n\r\n $timeout(function() {\r\n ntbCtrl = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n if (ntbCtrl !== undefined) {\r\n ntbCtrl.format = dateTimeFormatPatterns.kendoDateTimeFormat;\r\n $(element).inputmask(dateTimeFormatPatterns.inputMaskDateTimeFormat, { clearMaskOnLostFocus: false });\r\n }\r\n },300);\r\n\r\n }\r\n };\r\n\r\n }\r\n ])\r\n\r\n .directive('kendoTimePicker', [\r\n '$timeout', 'dateTimeFormatPatterns', function($timeout, dateTimeFormatPatterns) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n require: '?ngModel',\r\n link: function(scope, element, attrs, ctrl) {\r\n\r\n var ntbCtrl;\r\n\r\n $timeout(function() {\r\n ntbCtrl = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n if (ntbCtrl !== undefined) {\r\n ntbCtrl.format = dateTimeFormatPatterns.kendoTimeFormat;\r\n $(element).inputmask(dateTimeFormatPatterns.inputMaskTimeFormat, { clearMaskOnLostFocus: false });\r\n }\r\n },300);\r\n }\r\n };\r\n\r\n }\r\n ]);\r\n\r\n\r\n ","// pdi.ng namespace setup\r\nvar pdi = pdi || {};\r\npdi.ng = pdi.ng || {};\r\npdi.ng.validate = pdi.ng.validate || {};\r\n\r\n//***************************************************************************************\r\n// helper functions\r\n//***************************************************************************************\r\n\r\nangular.isUndefinedOrNullOrEmpty = function(val) {\r\n 'use strict';\r\n return (angular.isUndefined(val) || val === null || val === '' || val.length === 0);\r\n};\r\n\r\nString.format = function () {\r\n 'use strict';\r\n\r\n // The string containing the format items (e.g. \"{0}\")\r\n // will and always has to be the first argument.\r\n // analogous to the C# String.format function\r\n var theString = arguments[0];\r\n\r\n if (angular.isUndefined(theString)) return;\r\n\r\n // start with the second argument (i = 1)\r\n for (var i = 1; i < arguments.length; i++) {\r\n // \"gm\" = RegEx options for Global search (more than one instance)\r\n // and for Multiline search\r\n var regEx = new RegExp(\"\\\\{\" + (i - 1) + \"\\\\}\", \"gm\");\r\n theString = theString.replace(regEx, arguments[i]);\r\n }\r\n\r\n return theString;\r\n};\r\n\r\nfunction toBoolean(value) {\r\n 'use strict';\r\n if (typeof value === 'function' || angular.isUndefined(value)) {\r\n value = true;\r\n } else if (value && value.length !== 0) {\r\n var v = angular.$$lowercase(\"\" + value);\r\n value = !(v === 'f' || v === '0' || v === 'false' || v === 'no' || v === 'n' || v === '[]');\r\n } else {\r\n value = false;\r\n }\r\n return value;\r\n}\r\n\r\npdi.ng.validate.PdiValidation =\r\n function (validation, parms) {\r\n 'use strict';\r\n return function() {\r\n return {\r\n name: validation.name,\r\n validatorParms: parms || {},\r\n validationMessage: validation.validationMessage || 'Error: Validation message is not defined for ' + validation.name,\r\n validatorError: validation.validatorError,\r\n validationMessageWrn: validation.validationMessageWrn || 'Error: Validation message is not defined for ' + validation.name,\r\n validatorWarning: validation.validatorWarning,\r\n executionExplicit: validation.executionExplicit || true // if true then the validation is not executed on model value changed and must be explicitly executed through 'executeValidations' broadcast\r\n };\r\n };\r\n };\r\n\r\n//validation UI default functions\r\npdi.ng.validate.processElementErrorNotification = function(validationAttr, hasError, element, attrs) {\r\n 'use strict';\r\n\r\n if (attrs.ngModel === undefined) { return; }\r\n\r\n var propertyName = attrs.ngModel.split('.').join('-');\r\n\r\n var validationValidationMsg = $('#' + validationAttr + '-' + propertyName);\r\n\r\n function errFocusHdlr() {\r\n $(\"#error-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: inline-block !important;');\r\n }\r\n\r\n function errBlurHdlr() {\r\n $(\"#error-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: none !important;');\r\n }\r\n\r\n function errClickHdlr() {\r\n $(\"#error-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: inline-block !important;');\r\n\r\n function hideError() {\r\n $(\"#error-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: none !important;');\r\n }\r\n\r\n setTimeout(hideError, 3000);\r\n }\r\n\r\n validationValidationMsg.toggle(hasError);\r\n\r\n var kendoDropDwnElm;\r\n var currentElement = $(element);\r\n\r\n if (hasError) {\r\n element.addClass(\"validation-error\");\r\n validationValidationMsg.attr('style', 'display: inline-block !important;');\r\n\r\n if (currentElement.data(\"kendoComboBox\")) {\r\n //var kendoDropDwnElm = angular.element(element[0].previousSibling.firstChild); // input element of kendo combobox with class k-input\r\n kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.input.bind(\"focus\", errFocusHdlr);\r\n kendoDropDwnElm.input.bind(\"blur\", errBlurHdlr);\r\n\r\n } else if (currentElement.data(\"kendoDropDownList\")) {\r\n kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.span.bind(\"click\", errClickHdlr);\r\n\r\n } else {\r\n element.bind(\"focus\", errFocusHdlr);\r\n element.bind(\"blur\", errBlurHdlr);\r\n }\r\n\r\n } else {\r\n\r\n element.removeClass(\"validation-error\");\r\n validationValidationMsg.attr('style', 'display: none !important;');\r\n\r\n if (currentElement.data(\"kendoComboBox\")) {\r\n\r\n kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.input.unbind(\"focus\", errFocusHdlr);\r\n kendoDropDwnElm.input.unbind(\"blur\", errBlurHdlr);\r\n\r\n } else if (currentElement.data(\"kendoDropDownList\")) {\r\n kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.span.unbind(\"click\", errClickHdlr);\r\n\r\n } else {\r\n element.unbind(\"focus\", errFocusHdlr);\r\n element.unbind(\"blur\", errBlurHdlr);\r\n }\r\n }\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.processElementWarningNotification = function(validationAttr, hasWarning, element, attrs) {\r\n 'use strict';\r\n\r\n if (attrs.ngModel === undefined) { return; }\r\n\r\n var propertyName = attrs.ngModel.split('.').join('-');\r\n\r\n var validationValidationMsg = $('#' + validationAttr + '-' + propertyName + '-wrn');\r\n\r\n function wrnFocusHdlr() {\r\n $(\"#warning-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: inline-block !important;');\r\n }\r\n\r\n function wrnBlurHdlr() {\r\n $(\"#warning-\" + validationAttr + \"-\" + propertyName).attr('style', 'display: none !important;');\r\n }\r\n\r\n var currentElement = $(element);\r\n\r\n if (hasWarning) {\r\n element.addClass(\"validation-warning\");\r\n validationValidationMsg.attr('style', 'display: inline-block !important;');\r\n\r\n if ((currentElement.data(\"kendoComboBox\")) || (currentElement.data(\"kendoDropDownList\"))) {\r\n var kendoDropDwnElm = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm.input.bind(\"focus\", wrnFocusHdlr);\r\n kendoDropDwnElm.input.bind(\"blur\", wrnBlurHdlr);\r\n } else {\r\n element.bind(\"focus\", wrnFocusHdlr);\r\n element.bind(\"blur\", wrnBlurHdlr);\r\n }\r\n\r\n\r\n } else {\r\n\r\n element.removeClass(\"validation-warning\");\r\n validationValidationMsg.attr('style', 'display: none !important;');\r\n\r\n if ((currentElement.data(\"kendoComboBox\")) || (currentElement.data(\"kendoDropDownList\"))) {\r\n var kendoDropDwnElm1 = kendo.widgetInstance($(element[0]), kendo.ui);\r\n\r\n kendoDropDwnElm1.input.unbind(\"focus\", wrnFocusHdlr);\r\n kendoDropDwnElm1.input.unbind(\"blur\", wrnBlurHdlr);\r\n } else {\r\n element.unbind(\"focus\", wrnFocusHdlr);\r\n element.unbind(\"blur\", wrnBlurHdlr);\r\n }\r\n }\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.processValidationNotification = function(element, attrs, compile, scope) {\r\n 'use strict';\r\n\r\n element.removeClass(\"summaryerror\");\r\n element.removeClass(\"summarywarning\");\r\n element.removeClass(\"gridvalidationsummary\");\r\n\r\n var output = \"\";\r\n function returnOutput(){\r\n return output;\r\n }\r\n\r\n if (scope.scopeValidationErrors.length > 0) {\r\n\r\n for (var i = 0; i <= scope.scopeValidationErrors.length - 1; i++) {\r\n\r\n if (attrs.name === scope.scopeValidationErrors[i].name) {\r\n element.addClass(\"gridvalidationsummary\");\r\n element.addClass(\"summaryerror\");\r\n\r\n var validationErr = scope.scopeValidationErrors[i];\r\n output += \"
    \" + validationErr.msg + \"
    \";\r\n\r\n element.qtip({\r\n content: returnOutput(),\r\n position: {\r\n viewport: $(window),\r\n my: 'left center',\r\n at: 'top right',\r\n collision: 'fit flip',\r\n adjust: { y: 7, screen: true }\r\n },\r\n show: { delay: 0 },\r\n hide: { fixed: true },\r\n style: { classes: 'ui-tooltip-pdiError' }\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n }\r\n else if (scope.scopeValidationWarnings.length > 0) {\r\n\r\n for (var x = 0; x <= scope.scopeValidationWarnings.length - 1; x++) {\r\n\r\n if (attrs.name === scope.scopeValidationWarnings[x].name) {\r\n\r\n element.addClass(\"gridvalidationsummary\");\r\n element.addClass(\"summarywarning\");\r\n\r\n var validationWrn = scope.scopeValidationWarnings[x];\r\n output += \"
    \" + validationWrn.msg + \"
    \";\r\n\r\n element.qtip({\r\n content: returnOutput(),\r\n position: {\r\n viewport: $(window),\r\n my: 'left center',\r\n at: 'top right',\r\n collision: 'fit flip',\r\n adjust: { y: 7, screen: true }\r\n },\r\n show: { delay: 0 },\r\n hide: { fixed: true },\r\n style: { classes: 'ui-tooltip-pdiWarning' }\r\n });\r\n }\r\n }\r\n }\r\n\r\n compile(element)(scope);\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.processValidationsSummaryNotification = function(element, attrs, compile, scope) {\r\n 'use strict';\r\n\r\n element.removeClass(\"summaryerror\");\r\n element.removeClass(\"summarywarning\");\r\n element.removeClass(\"gridvalidationsummary\");\r\n\r\n if (scope.scopeValidationErrors.length > 0) {\r\n element.addClass(\"gridvalidationsummary\");\r\n element.addClass(\"summaryerror\");\r\n\r\n element.qtip({\r\n content: function() {\r\n var output = \"\";\r\n\r\n for (var i = 0; i <= scope.scopeValidationErrors.length - 1; i++) {\r\n\r\n var validationErr = scope.scopeValidationErrors[i];\r\n\r\n output += \"
    \" + validationErr.msg + \"
    \";\r\n\r\n }\r\n\r\n return output;\r\n },\r\n position: {\r\n viewport: $(window),\r\n my: 'left center',\r\n at: 'top right',\r\n collision: 'fit flip',\r\n adjust: { y: 7, screen: true }\r\n },\r\n show: { delay: 0 },\r\n hide: { fixed: true },\r\n style: { classes: 'ui-tooltip-pdiError' }\r\n });\r\n\r\n }\r\n else if (scope.scopeValidationWarnings.length > 0) {\r\n element.addClass(\"gridvalidationsummary\");\r\n element.addClass(\"summarywarning\");\r\n\r\n element.qtip({\r\n content: function() {\r\n var output = \"\";\r\n\r\n for (var i = 0; i <= scope.scopeValidationWarnings.length - 1; i++) {\r\n\r\n var validationWrn = scope.scopeValidationWarnings[i];\r\n\r\n output += \"
    \" + validationWrn.msg + \"
    \";\r\n\r\n }\r\n\r\n return output;\r\n },\r\n position: {\r\n viewport: $(window),\r\n my: 'left center',\r\n at: 'top right',\r\n collision: 'fit flip',\r\n adjust: { y: 7, screen: true }\r\n },\r\n show: { delay: 0 },\r\n hide: { fixed: true },\r\n style: { classes: 'ui-tooltip-pdiWarning' }\r\n });\r\n }\r\n\r\n compile(element)(scope);\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.createElementValidationMessageError = function(validationAttr, validationMsg, element, attrs, scope, compile) {\r\n 'use strict';\r\n\r\n var propertyName = attrs.ngModel.split('.').join('-');\r\n var currentElement = $(element);\r\n\r\n var validationMessageElement = angular.element(\r\n '
    ' +\r\n '
      ' +\r\n '
    • ' + validationMsg + '
    • ' +\r\n '
    ');\r\n if (currentElement.data(\"kendoComboBox\")) {\r\n element.after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDropDownList\")) {\r\n $(element[0]).parent().after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDatePicker\")) {\r\n $(element[0]).closest(\".k-datepicker\").after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDateTimePicker\")) {\r\n $(element[0]).closest(\".k-datetimepicker\").after(validationMessageElement);\r\n } else {\r\n //check to see if element has a clear button to clear contents\r\n // if so add error after clear button instead of element\r\n var clearBtnElm = element.siblings(\".clear-input-button\");\r\n if (clearBtnElm.length > 0) {\r\n clearBtnElm.after(validationMessageElement);\r\n } else {\r\n element.after(validationMessageElement);\r\n }\r\n }\r\n compile(validationMessageElement)(scope);\r\n validationMessageElement.hide();\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.createElementValidationMessageWarning = function (validationAttr, validationMsg, element, attrs, scope, compile) {\r\n 'use strict';\r\n\r\n var propertyName = attrs.ngModel.split('.').join('-');\r\n var currentElement = $(element);\r\n\r\n var validationMessageElement = angular.element(\r\n '
    ' +\r\n '
      ' +\r\n '
    • ' + validationMsg + '
    • ' +\r\n '
    ');\r\n\r\n if (currentElement.data(\"kendoComboBox\")) {\r\n element.after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDropDownList\")) {\r\n $(element[0]).parent().after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDatePicker\")) {\r\n $(element[0]).closest(\".k-datepicker\").after(validationMessageElement);\r\n } else if (currentElement.data(\"kendoDateTimePicker\")) {\r\n $(element[0]).closest(\".k-datetimepicker\").after(validationMessageElement);\r\n } else {\r\n //check to see if element has a clear button to clear contents\r\n // if so add error after clear button instead of element\r\n var clearBtnElm = element.siblings(\".clear-input-button\");\r\n if (clearBtnElm.length > 0) {\r\n clearBtnElm.after(validationMessageElement);\r\n } else {\r\n element.after(validationMessageElement);\r\n }\r\n }\r\n compile(validationMessageElement)(scope);\r\n validationMessageElement.hide();\r\n\r\n return;\r\n};\r\n\r\npdi.ng.validate.removeElementValidationMessage = function(element, attrs, scope, compile) {\r\n 'use strict';\r\n\r\n var currentElement = $(element);\r\n\r\n if (element.hasClass('summaryerror')) {\r\n element.removeClass(\"summaryerror\");\r\n element.removeClass(\"summarywarning\");\r\n element.removeClass(\"gridvalidationsummary\");\r\n }\r\n\r\n if (currentElement.data(\"kendoDropDownList\")) {\r\n element.parent().siblings().each(function() {\r\n var $this = $(this);\r\n\r\n if ($this.hasClass('validationBar')) {\r\n $this.remove();\r\n }\r\n\r\n compile()(scope);\r\n });\r\n } else {\r\n element.parent().children().each(function() {\r\n var $this = $(this);\r\n\r\n if ($this.hasClass('validationBar')) {\r\n $this.remove();\r\n }\r\n\r\n compile()(scope);\r\n });\r\n }\r\n\r\n return;\r\n};\r\n\r\n//pdi validation defaults\r\n\r\npdi.ng.validate.requiredMsgDefault = '';\r\npdi.ng.validate.minLengthMsgDefault = '';\r\npdi.ng.validate.maxLengthMsgDefault = '';\r\npdi.ng.validate.valueRuleRngMsgDefault = '';\r\npdi.ng.validate.valueRuleGtMsgDefault = '';\r\npdi.ng.validate.valueRuleLtMsgDefault = '';\r\npdi.ng.validate.ptrnEmailMsgDefault = '';\r\n\r\nvar pdiRequiredExecutionExplicitDefault = true;\r\nvar pdiMinLengthExecutionExplicitDefault = true;\r\nvar pdiMaxLengthExecutionExplicitDefault = true;\r\nvar pdiMaxLengthEnforceMaxConstraintDefault = false;\r\nvar pdiValueRuleRangeExecutionExplicitDefault = true;\r\nvar pdiValueRuleGreaterThanExecutionExplicitDefault = true;\r\nvar pdiValueRuleLessThanExecutionExplicitDefault = true;\r\nvar pdiEmailValidataionExecutionExplicitDefault = true;\r\n\r\n\r\nfunction evaluateIfConditions(ifExpr, scope) {\r\n 'use strict';\r\n return toBoolean(scope.$eval(ifExpr));\r\n}\r\n\r\nangular.module('pdi.validate', [])\r\n .service('validatorSvc', [\r\n '$rootScope', function($rootScope) {\r\n\r\n $rootScope.scopesToValidate = [];\r\n $rootScope.formModelWatchers = [];\r\n\r\n function executeValidationsForScope(scope) {\r\n 'use strict';\r\n\r\n for (var cs = scope.$$childHead; cs; cs=cs.$$nextSibling) {\r\n executeValidationsForScope(cs);\r\n }\r\n\r\n if (angular.isUndefinedOrNullOrEmpty(scope.scopeValidations)) {\r\n return true;\r\n }\r\n\r\n // broadcast event for elements to clear their errors/warnings and notification UI\r\n scope.$broadcast('clearElementValidationNotifications', {});\r\n scope.$broadcast('clearSummaryValidationNotifications', {});\r\n\r\n var validation;\r\n\r\n //clear arrays\r\n scope.scopeValidationErrors = [];\r\n scope.scopeValidationWarnings.length = [];\r\n\r\n var hadError = false;\r\n var validatorResult = {};\r\n\r\n for (var i = 0; i <= scope.scopeValidations.length - 1; i++) {\r\n validation = scope.scopeValidations[i];\r\n\r\n hadError = false;\r\n\r\n // check to see if element already has an error if so don't eval addition element validations\r\n if (validation.attrs.errors.length === 0) {\r\n //validate errors\r\n validatorResult = validation.validator().validateErrors();\r\n\r\n if (validatorResult !== undefined) {\r\n if (validatorResult.hasError) {\r\n scope.scopeValidationErrors.push(validatorResult);\r\n validation.attrs.errors.push(validatorResult);\r\n\r\n if (validation.attrs.ngModelCtrl.$setValidity !== undefined) {\r\n validation.attrs.ngModelCtrl.$setValidity(validatorResult.name, false);\r\n }\r\n\r\n hadError = true;\r\n }\r\n }\r\n\r\n if (!hadError) {\r\n validatorResult = validation.validator().validateWarnings();\r\n\r\n if (validatorResult !== undefined) {\r\n if (validatorResult.hasWarning) {\r\n scope.scopeValidationWarnings.push(validatorResult);\r\n validation.attrs.warnings.push(validatorResult);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n scope.$broadcast('processElementValidationNotifications', {});\r\n scope.$broadcast('processSummaryValidationNotifications', {});\r\n\r\n return (scope.scopeValidationErrors.length === 0);\r\n }\r\n\r\n return {\r\n executeValidations: function() {\r\n 'use strict';\r\n\r\n var isValid = true;\r\n\r\n for (var i = 0; i <= $rootScope.scopesToValidate.length - 1; i++) {\r\n var validatorResult = executeValidationsForScope($rootScope.scopesToValidate[i].scope);\r\n isValid = isValid && validatorResult;\r\n }\r\n\r\n return isValid;\r\n },\r\n executeValidationsForScope: executeValidationsForScope,\r\n addScopeToValidate: function(scope, view) {\r\n 'use strict';\r\n\r\n var addScope = true;\r\n\r\n //check to see if scope already added to validate\r\n for (var i = 0; i <= $rootScope.scopesToValidate.length - 1; i++) {\r\n if ($rootScope.scopesToValidate[i].scopeID === scope.$id) {\r\n addScope = false;\r\n break;\r\n }\r\n }\r\n\r\n if (addScope) {\r\n $rootScope.scopesToValidate.push({ scopeID: scope.$id, scope: scope, view: view });\r\n\r\n for (var cs = scope.$$childHead; cs; cs=cs.$$nextSibling) {\r\n $rootScope.scopesToValidate.push({ scopeID: cs.$id, scope: cs, view: view });\r\n }\r\n }\r\n },\r\n clearValidationScopes: function() {\r\n 'use strict';\r\n $rootScope.scopesToValidate = [];\r\n// $rootScope.formModelWatchers = [];\r\n },\r\n clearAllValidations: function() {\r\n $rootScope.$broadcast('clearElementValidationNotifications', {});\r\n }\r\n };\r\n }\r\n ])\r\n\r\n .directive('pdiValidations', ['validatorSvc', '$compile', '$timeout', function (validatorSvc, $compile, $timeout) {\r\n\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function(scope, element, attrs, ctrl) {\r\n 'use strict';\r\n if ((!ctrl) || ( attrs.pdiValidations==='')) { return; }\r\n\r\n attrs.ngModelCtrl = ctrl;\r\n\r\n var model = attrs.ngModel;\r\n\r\n var pdivalidation = scope.$eval(attrs.pdiValidations);\r\n\r\n var validatorFn = function() {\r\n\r\n return {\r\n validateErrors: function() {\r\n\r\n if (pdivalidation.validatorError === undefined) { return; }\r\n\r\n var validatorParms = pdivalidation.validatorParms;\r\n\r\n var elementValue = scope.$eval(model); //element.val().trimRight();\r\n var expression = pdivalidation.validatorError(elementValue, validatorParms);\r\n\r\n if (angular.isObject(expression) && angular.isFunction(expression.then)) {\r\n // expression is a promise\r\n var deferred = $q.defer();\r\n expression.then(function() {\r\n deferred.resolve(\"\");\r\n }, function() {\r\n var error = { name: pdivalidation.name, model: model, msg: pdivalidation.validationMessage, hasError: true };\r\n deferred.reject(error);\r\n });\r\n return deferred.promise;\r\n } else if (!expression) {\r\n // expression false\r\n return { name: pdivalidation.name, model: model, msg: pdivalidation.validationMessage, hasError: true };\r\n }\r\n },\r\n validateWarnings: function() {\r\n\r\n if (pdivalidation.validatorWarning === undefined) { return; }\r\n\r\n var validatorParms = pdivalidation.validatorParms;\r\n\r\n var elementValue = scope.$eval(model); //element.val().trimRight();\r\n var expression = pdivalidation.validatorWarning(elementValue, validatorParms);\r\n\r\n\r\n if (!expression) {\r\n return { name: pdivalidation.name, model: model, msg: pdivalidation.validationMessageWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: pdivalidation.name, model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n /*angular.forEach(attrs.pdiValidations, function(index) {\r\n\r\n var validateErrors = (attrs.pdiValidations[index].validatorError) ? true : false;\r\n var validateWarnings = (attrs.pdiValidations[index].validatorWarning) ? true : false;\r\n\r\n var validatorFn = function() {\r\n\r\n return {\r\n validateErrors: function() {\r\n\r\n if (!validateErrors) return;\r\n\r\n var elementValue = element.val().trimRight();\r\n var expression = pdivalidation.validatorError(elementValue);\r\n\r\n if (!expression) {\r\n return { name: pdivalidation.name + key, model: model, msg: pdivalidation.validationMessage, hasError: true };\r\n }\r\n },\r\n validateWarnings: function() {\r\n\r\n if (!validateWarnings) return;\r\n\r\n var elementValue = element.val().trimRight();\r\n var expression = pdivalidation.validatorWarning(elementValue);\r\n\r\n if (angular.isObject(expression) && angular.isFunction(expression.then)) {\r\n // expression is a promise\r\n expression.then(function() {\r\n }, function() {\r\n attrs.warnings.push({ name: pdivalidation.name + key, model: model, msg: pdivalidation.validationMessageWrn });\r\n });\r\n return;\r\n } else if (!expression) {\r\n // expression false\r\n attrs.warnings.push({ name: pdivalidation.name + key, model: model, msg: pdivalidation.validationMessageWrn });\r\n return;\r\n }\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: pdivalidation.name + key, model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n //attrs.validations.push(({ name: pdivalidation.name + key, model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 }));\r\n\r\n });*/\r\n },\r\n controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {\r\n 'use strict';\r\n\r\n $scope.scopeValidations = $scope.scopeValidations || [];\r\n $scope.scopeValidationErrors = $scope.scopeValidationErrors || [];\r\n $scope.scopeValidationWarnings = $scope.scopeValidationWarnings || [];\r\n\r\n validatorSvc.addScopeToValidate($scope);\r\n\r\n $attrs.validations = [];\r\n $attrs.errors = [];\r\n $attrs.warnings = [];\r\n\r\n $attrs.ngModelCtrl = {};\r\n\r\n $attrs.hasWarnings = false;\r\n\r\n this.addValidation = function(validation) {\r\n $attrs.validations.push(validation);\r\n };\r\n\r\n $scope.$on('executeValidationsForScope', function () {\r\n validatorSvc.executeValidationsForScope($scope);\r\n });\r\n\r\n //used to forced process the error/waring and display the notification UI for the element'\r\n $scope.$on('processElementValidationNotifications', function () {\r\n if (!angular.isUndefined($attrs.showValidationNotification) && !$scope.$eval($attrs.showValidationNotification)) { return; }\r\n\r\n if ($attrs.errors.length > 0) {\r\n pdi.ng.validate.createElementValidationMessageError($attrs.errors[0].name, $attrs.errors[0].msg, $element, $attrs, $scope, $compile);\r\n pdi.ng.validate.processElementErrorNotification($attrs.errors[0].name, true, $element, $attrs);\r\n } else if ($attrs.warnings.length > 0) {\r\n pdi.ng.validate.createElementValidationMessageWarning($attrs.warnings[0].name, $attrs.warnings[0].msg, $element, $attrs, $scope, $compile);\r\n pdi.ng.validate.processElementWarningNotification($attrs.warnings[0].name, true, $element, $attrs);\r\n }\r\n });\r\n\r\n //used to forced clear element error/warning and clear the notification UI'\r\n $scope.$on('clearElementValidationNotifications', function () {\r\n\r\n pdi.ng.validate.removeElementValidationMessage($element, $attrs, $scope, $compile);\r\n\r\n if ($attrs.errors.length > 0) {\r\n pdi.ng.validate.processElementErrorNotification($attrs.errors[0].name, false, $element, $attrs);\r\n }\r\n\r\n if ($attrs.warnings.length > 0) {\r\n pdi.ng.validate.processElementWarningNotification($attrs.warnings[0].name, false, $element, $attrs);\r\n }\r\n\r\n //clear element arrays\r\n $attrs.errors.length = 0;\r\n $attrs.warnings.length = 0;\r\n });\r\n }]\r\n };\r\n }\r\n ])\r\n\r\n .directive('pdiValidation', ['$rootScope', 'validatorSvc', '$compile', '$timeout', function ($rootScope, validatorSvc, $compile, $timeout) {\r\n\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n terminal: true,\r\n template: '
    ',\r\n link: function (scope, element, attrs) {\r\n 'use strict';\r\n\r\n if (attrs.errorValidatorFn !== undefined || attrs.warningValidatorFn !== undefined) {\r\n\r\n var ctrlIndex = scope.scopeValidations.length + 1;\r\n\r\n attrs.name = 'pdiValidation' + ctrlIndex.toString();\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (attrs.errorValidatorFn === undefined) return;\r\n\r\n var validatorResult = scope.$eval(attrs.errorValidatorFn);\r\n\r\n if (validatorResult) { //has errors\r\n return { name: 'pdiValidation' + ctrlIndex.toString(), msg: attrs.validationErrorMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (attrs.warningValidatorFn === undefined) return;\r\n\r\n var validatorResult = attrs.warningValidatorFn();\r\n\r\n if (validatorResult) { //has warnings\r\n return { name: 'pdiValidation' + ctrlIndex.toString(), msg: attrs.validationWarningMsg, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValidation' + ctrlIndex.toString(), element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n },\r\n controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {\r\n 'use strict';\r\n\r\n $scope.scopeValidations = $scope.scopeValidations || [];\r\n $scope.scopeValidationErrors = $scope.scopeValidationErrors || [];\r\n $scope.scopeValidationWarnings = $scope.scopeValidationWarnings || [];\r\n\r\n validatorSvc.addScopeToValidate($scope);\r\n\r\n $attrs.validations = [];\r\n $attrs.errors = [];\r\n $attrs.warnings = [];\r\n\r\n $attrs.ngModelCtrl = {};\r\n\r\n $attrs.hasWarnings = false;\r\n\r\n //used to forced process the error/waring and display the notification UI for the element'\r\n $scope.$on('processElementValidationNotifications', function () {\r\n pdi.ng.validate.processValidationNotification($element, $attrs, $compile, $scope);\r\n });\r\n\r\n //used to forced clear element error/warning and clear the notification UI'\r\n $scope.$on('clearElementValidationNotifications', function () {\r\n\r\n pdi.ng.validate.processValidationNotification($element, $attrs, $compile, $scope);\r\n pdi.ng.validate.removeElementValidationMessage($element, $attrs, $scope, $compile);\r\n\r\n //clear element arrays\r\n $attrs.errors.length = 0;\r\n $attrs.warnings.length = 0;\r\n });\r\n }]\r\n };\r\n }])\r\n\r\n .directive('pdiValidationsSummary', ['$rootScope', 'validatorSvc', '$compile', '$timeout', function ($rootScope, validatorSvc, $compile, $timeout) {\r\n\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n terminal: true,\r\n template: '
    ',\r\n link: function (scope, element, attrs) {\r\n 'use strict';\r\n\r\n if (attrs.data !== undefined && attrs.formModel !== undefined) {\r\n var newScope = $rootScope.$new();\r\n\r\n var appHtml = $('[ng-controller]').html();\r\n var ele = angular.element(appHtml);\r\n\r\n newScope[attrs.formModel] = scope.$eval(attrs.data);\r\n\r\n var view = $compile(ele)(newScope);\r\n\r\n validatorSvc.addScopeToValidate(newScope, view);\r\n\r\n //used to forced process the error/waring and display the notification UI for the element'\r\n newScope.$on('processSummaryValidationNotifications', function () {\r\n pdi.ng.validate.processValidationsSummaryNotification(element, attrs, $compile, newScope);\r\n });\r\n\r\n //used to forced clear element error/warning and clear the notification UI'\r\n newScope.$on('clearSummaryValidationNotifications', function () {\r\n pdi.ng.validate.processValidationsSummaryNotification(element, attrs, $compile, newScope);\r\n });\r\n\r\n var addFormModelWatcher = true;\r\n\r\n //check to see if form model already added to array\r\n for (var i = 0; i <= $rootScope.formModelWatchers.length - 1; i++) {\r\n if ($rootScope.formModelWatchers[i].formModel === attrs.formModel) {\r\n addFormModelWatcher = false;\r\n break;\r\n }\r\n }\r\n\r\n if (addFormModelWatcher) {\r\n\r\n var watchUnBinder =$rootScope.$watch(function () {\r\n return scope.$eval(attrs.formModel);\r\n }, function (newValue, oldValue) {\r\n if (oldValue === undefined) {\r\n return;\r\n }\r\n\r\n $timeout(function() {\r\n scope.$parent.$broadcast('clearElementValidationNotifications', {});\r\n validatorSvc.executeValidations();\r\n scope.$parent.$broadcast('processElementValidationNotifications', {});\r\n });\r\n });\r\n\r\n $rootScope.formModelWatchers.push({ formModel: attrs.formModel, unBinderFn: watchUnBinder });\r\n }\r\n }\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiRequired', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // required-validation-msg\r\n // required-execution-explicit\r\n // required-if-expr\r\n // required-validation-msg-wrn\r\n // required-if-expr-wrn\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.requiredValidationMsg) || ((!attrs.requiredValidationMsg) && (!attrs.requiredValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.requiredValidationMsgWrn) ? true : false;\r\n\r\n var requiredValidationMsg = attrs.requiredValidationMsg || pdi.ng.validate.requiredMsgDefault || 'required validation undefined';\r\n var requiredValidationMsgWrn = attrs.requiredValidationMsgWrn;\r\n var requiredExecutionExplicit = attrs.requiredExecutionExplicit || pdiRequiredExecutionExplicitDefault;\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (attrs.disabled) { return; } // if element is disabled then don't enforce validations on the element\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.requiredIfExpr, scope) &&\r\n (ctrl.$isEmpty(ctrl.$viewValue))) {\r\n\r\n return { name: 'pdiRequired', model:model, msg: requiredValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.requiredIfExprWrn, scope) &&\r\n (ctrl.$isEmpty(ctrl.$viewValue))) {\r\n\r\n return { name: 'pdiRequired', model: model, msg: requiredValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiRequired', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiMinlength', ['validatorSvc', function (validatorSvc) {\r\n\r\n //usage\r\n //minlengthValidationMsg: '=',\r\n // minlengthExecutionExplicit: '=',\r\n // minlengthIfExpr: '@',\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.minlengthValidationMsg) || ((!attrs.minlengthValidationMsg) && (!attrs.minlengthValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.minlengthValidationMsgWrn) ? true : false;\r\n\r\n var minlengthValidationMsg = attrs.minlengthValidationMsg || 'minLength validation undefined';\r\n var minlengthValidationMsgWrn = attrs.minlengthValidationMsgWrn;\r\n var minlengthExecutionExplicit = attrs.minlengthExecutionExplicit || pdiMinLengthExecutionExplicitDefault;\r\n\r\n minlengthValidationMsg = String.format(minlengthValidationMsg, attrs.pdiMinlength);\r\n minlengthValidationMsgWrn = String.format(minlengthValidationMsgWrn, attrs.pdiMinlength);\r\n\r\n var validatorFn = function() {\r\n return {\r\n validateErrors: function() {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.minlengthIfExpr, scope) &&\r\n (ctrl.$isEmpty(ctrl.$viewValue) || ctrl.$viewValue.length < attrs.pdiMinlength)) {\r\n\r\n return { name: 'pdiMinlength', model: model, msg: minlengthValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function() {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.minlengthIfExprWrn, scope) &&\r\n (ctrl.$isEmpty(ctrl.$viewValue) || ctrl.$viewValue.length < attrs.pdiMinlength)) {\r\n\r\n return { name: 'pdiMinlength', model: model, msg: minlengthValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiMinlength', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiMaxlength', ['validatorSvc', function (validatorSvc) {\r\n\r\n //usage\r\n //maxlengthValidationMsg: '=',\r\n // maxlengthExecutionExplicit: '=',\r\n // maxlengthIfExpr: '@',\r\n // enforceMaxConstraint: '='\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function(scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.maxlengthValidationMsg) || ((!attrs.maxlengthValidationMsg) && (!attrs.maxlengthValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.maxlengthValidationMsgWrn) ? true : false;\r\n\r\n var enforceMaxConstraint = attrs.enforcemaxconstraint || pdiMaxLengthEnforceMaxConstraintDefault;\r\n\r\n var ifConditions = evaluateIfConditions(attrs.maxlengthIfExpr, scope);\r\n\r\n // if enforceMaxConstraint is true then the max length will be enforce through the UI by preventing\r\n // input of more that specified length and not through validation.\r\n if (enforceMaxConstraint && ifConditions) {\r\n element.bind('keypress', function(event) {\r\n // Once the limit has been met or exceeded, prevent all keypresses from working\r\n if (element.val().length >= attrs.pdiMaxlength) {\r\n // Except backspace\r\n if (event.keyCode !== 8) {\r\n event.preventDefault();\r\n }\r\n }\r\n });\r\n } else {\r\n\r\n var maxlengthValidationMsg = attrs.maxlengthValidationMsg || 'maxLength validation undefined';\r\n var maxlengthValidationMsgWrn = attrs.maxlengthValidationMsgWrn;\r\n var maxlengthExecutionExplicit = attrs.maxlengthExecutionExplicit || pdiMaxLengthExecutionExplicitDefault;\r\n\r\n maxlengthValidationMsg = String.format(maxlengthValidationMsg, attrs.pdiMaxlength);\r\n maxlengthValidationMsgWrn = String.format(maxlengthValidationMsgWrn, attrs.pdiMaxlength);\r\n\r\n var validatorFn = function() {\r\n return {\r\n validateErrors: function() {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (ifConditions && (ctrl.$viewValue.length > attrs.pdiMaxlength)) {\r\n\r\n return { name: 'pdiMaxlength', model: model, msg: maxlengthValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function() {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (ifConditions && (ctrl.$viewValue.length > attrs.pdiMaxlength)) {\r\n\r\n return { name: 'pdiMaxlength', model: model, msg: maxlengthValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiMaxlength', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiValueruleRange', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // valuerule-rng-validation-msg\r\n // valuerule-rng-execution-explicit\r\n // valuerule-rng-if-expr\r\n // valuerule-rng-validation-msg-wrn\r\n // valuerule-rng-if-expr-wrn\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.valueruleRngValidationMsg) || ((!attrs.valueruleRngValidationMsg) && (!attrs.valueruleRngValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.valueruleRngValidationMsgWrn) ? true : false;\r\n\r\n var rangeParms = attrs.pdiValueruleRange.split(',');\r\n\r\n if (rangeParms.length !== 2) return;\r\n\r\n var lowerLimit = rangeParms[0].toNumber();\r\n var upperLimit = rangeParms[1].toNumber();\r\n\r\n var valueRuleRngValidationMsg = attrs.valueruleRngValidationMsg || 'valueRuleRng validation undefined';\r\n var valueRuleRngValidationMsgWrn = attrs.valueruleRngValidationMsgWrn;\r\n var valueRuleRngExecutionExplicit = attrs.valueruleRngExecutionExplicit || pdiValueRuleRangeExecutionExplicitDefault;\r\n\r\n valueRuleRngValidationMsg = String.format(valueRuleRngValidationMsg, lowerLimit, upperLimit);\r\n valueRuleRngValidationMsgWrn = String.format(valueRuleRngValidationMsgWrn, lowerLimit, upperLimit);\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleRngIfExpr, scope) &&\r\n (ctrl.$viewValue.toNumber() < lowerLimit || ctrl.$viewValue.toNumber() > upperLimit)) {\r\n\r\n return { name: 'pdiValueruleRange', model: model, msg: valueRuleRngValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleRngIfExprWrn, scope) &&\r\n (parseInt(ctrl.$viewValue, 10) < lowerLimit || parseInt(ctrl.$viewValue, 10) > upperLimit)) {\r\n\r\n return { name: 'pdiValueruleRange', model: model, msg: valueRuleRngValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValueruleRange', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiValueruleGreaterthan', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // valuerule-gt-validation-msg\r\n // valuerule-gt-execution-explicit\r\n // valuerule-gt-if-expr\r\n // valuerule-gt-validation-msg-wrn\r\n // valuerule-gt-if-value-expr\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.valueruleGtValidationMsg) || ((!attrs.valueruleGtValidationMsg) && (!attrs.valueruleGtValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.valueruleGtValidationMsgWrn) ? true : false;\r\n\r\n var valueruleGtValidationMsg = attrs.valueruleGtValidationMsg || 'valueRuleGT validation undefined';\r\n var valueruleGtValidationMsgWrn = attrs.valueruleGtValidationMsgWrn;\r\n var valueRuleGtExecutionExplicit = attrs.valueruleGtExecutionExplicit || pdiValueRuleGreaterThanExecutionExplicitDefault;\r\n\r\n valueruleGtValidationMsg = String.format(valueruleGtValidationMsg, attrs.pdiValueruleGreaterthan);\r\n valueruleGtValidationMsgWrn = String.format(valueruleGtValidationMsgWrn, attrs.pdiValueruleGreaterthan);\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleGtIfExpr, scope) &&\r\n (parseFloat(ctrl.$viewValue) <= attrs.pdiValueruleGreaterthan)) {\r\n\r\n return { name: 'pdiValueruleGreaterthan', model: model, msg: valueruleGtValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleGtIfExprWrn, scope) &&\r\n (parseFloat(ctrl.$viewValue) <= attrs.pdiValueruleGreaterthan)) {\r\n\r\n return { name: 'pdiValueruleGreaterthan', model: model, msg: valueruleGtValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValueruleGreaterthan', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiValueruleLessthan', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // valuerule-lt-validation-msg\r\n // valuerule-lt-execution-explicit\r\n // valuerule-lt-if-expr\r\n // valuerule-lt-validation-msg-wrn\r\n // valuerule-lt-if-expr-wrn\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.valueruleLtValidationMsg) || ((!attrs.valueruleLtValidationMsg) && (!attrs.valueruleLtValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.valueruleLtValidationMsgWrn) ? true : false;\r\n\r\n var valueruleLtValidationMsg = attrs.valueruleLtValidationMsg || 'valueRuleLT validation undefined';\r\n var valueruleLtValidationMsgWrn = attrs.valueruleLtValidationMsgWrn;\r\n var valueRuleLtExecutionExplicit = attrs.valueruleLtExecutionExplicit || pdiValueRuleLessThanExecutionExplicitDefault;\r\n\r\n valueruleLtValidationMsg = String.format(valueruleLtValidationMsg, attrs.pdiValueruleLessthan);\r\n valueruleLtValidationMsgWrn = String.format(valueruleLtValidationMsgWrn, attrs.pdiValueruleLessthan);\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleLtIfExpr, scope) &&\r\n (parseInt(ctrl.$viewValue, 10) >= attrs.pdiValueruleLessthan)) {\r\n\r\n return { name: 'pdiValueruleLessthan', model: model, msg: valueruleLtValidationMsg, hasError: true };\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleLtIfExprWrn, scope) &&\r\n (parseInt(ctrl.$viewValue, 10) >= attrs.pdiValueruleLessthan)) {\r\n\r\n return { name: 'pdiValueruleLessthan', model: model, msg: valueruleLtValidationMsgWrn, hasWarning: true };\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValueruleLessthan', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiValueIsNumeric', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // pdi-value-is-numeric\r\n // pdi-value-is-numeric-msg\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.pdiValueIsNumeric || (!attrs.pdiValueIsNumeric && !attrs.pdiValueIsNumeric)) ? true : false;\r\n var validateWarnings = true;\r\n var ptrnValidationMsg = attrs.pdiValueIsNumericMsg || 'pdiValueIsNumeric validation undefined';\r\n\r\n var validatorFn = function () {\r\n return {\r\n validateErrors: function () {\r\n if (!validateWarnings) return;\r\n\r\n if (!isNaN(ctrl.$viewValue)) {\r\n return;\r\n }\r\n\r\n return { name: 'pdiValueIsNumeric', model: model, msg: ptrnValidationMsg, hasError: true };\r\n },\r\n validateWarnings: function () {\r\n if (!validateWarnings || angular.isUndefinedOrNullOrEmpty(ctrl.$viewValue)) return;\r\n }\r\n };\r\n };\r\n scope.scopeValidations.push({ name: 'pdiValueIsNumeric', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiDateIsGreaterEqualTo', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // pdi-date-is-greater-equal-to\r\n // pdi-date-is-greater-equal-to-from-date\r\n // pdi-date-is-greater-equal-to-msg\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.pdiDateIsGreaterEqualToMsg || (!attrs.pdiDateIsGreaterEqualToMsg && !attrs.pdiDateIsGreaterEqualToMsgWrn)) ? true : false;\r\n var validateWarnings = true;\r\n var ptrnValidationMsg = attrs.pdiDateIsGreaterEqualToMsg || 'pdiDateIsGreaterEqualTo validation undefined';\r\n\r\n var validatorFn = function () {\r\n var fromDate = attrs.pdiDateIsGreaterEqualToFromDate;\r\n var thruDate = ctrl.$viewValue;\r\n\r\n return {\r\n validateErrors: function () {\r\n if (!validateWarnings) return;\r\n if (Date.parse(thruDate) >= Date.parse(fromDate)) {\r\n return;\r\n }\r\n return { name: 'pdiDateIsGreaterEqualTo', model: model, msg: ptrnValidationMsg, hasError: true };\r\n },\r\n validateWarnings: function () {\r\n if (!validateWarnings || angular.isUndefinedOrNullOrEmpty(ctrl.$viewValue)) return;\r\n }\r\n };\r\n };\r\n scope.scopeValidations.push({ name: 'pdiDateIsGreaterEqualTo', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n };\r\n }])\r\n\r\n .directive('pdiPatternEmail', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // ptrn-email-validation-msg\r\n // ptrn-email-execution-explicit\r\n // ptrn-email-validation-msg-wrn\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls) {\r\n 'use strict';\r\n\r\n if (ctrls.length !== 2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n\r\n var validateErrors = (attrs.ptrnEmailValidationMsg) || ((!attrs.ptrnEmailValidationMsg) && (!attrs.ptrnEmailValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.ptrnEmailValidationMsgWrn) ? true : false;\r\n\r\n var ptrnValidationMsg = attrs.ptrnEmailValidationMsg || 'ptrnEmail validation undefined';\r\n var ptrnValidationMsgWrn = attrs.ptrnEmailValidationMsgWrn;\r\n var ptrnExecutionExplicit = attrs.prtnEmailExecutionExplicit || pdiEmailValidataionExecutionExplicitDefault;\r\n\r\n var regExPattern = new RegExp(/^[A-Za-z0-9_\\+-]+(\\.[A-Za-z0-9_\\+-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*\\.([A-Za-z]+)$/);\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n\r\n if (!validateErrors || angular.isUndefinedOrNullOrEmpty(ctrl.$viewValue)) return;\r\n\r\n var emails = ctrl.$viewValue.split(';');\r\n\r\n // process errors on element\r\n for (var i = 0 ; i <= emails.length - 1; i++) {\r\n if (!regExPattern.test(emails[i].trim())){\r\n ptrnValidationMsg = String.format(ptrnValidationMsg, emails[i]);\r\n return { name: 'pdiPatternEmail', model: model, msg: ptrnValidationMsg, hasError: true };\r\n }\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n\r\n if (!validateWarnings || angular.isUndefinedOrNullOrEmpty(ctrl.$viewValue)) return;\r\n\r\n var emails = ctrl.$viewValue.split(';');\r\n\r\n // process errors on element\r\n for (var i = 0 ; i <= emails.length - 1; i++) {\r\n if (!regExPattern.test(emails[i])){\r\n ptrnValidationMsgWrn = String.format(ptrnValidationMsgWrn, emails[i]);\r\n\r\n return { name: 'pdiPatternEmail', model: model, msg: ptrnValidationMsgWrn, hasWarning: true };\r\n }\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiPatternEmail', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n }\r\n };\r\n }])\r\n .directive('pdiValueruleMatchElement', ['validatorSvc', function (validatorSvc) {\r\n\r\n //*********************************************\r\n // usage\r\n //*********************************************\r\n // valuerule-match-element-validation-msg\r\n // valuerule-match-element-execution-explicit\r\n // valuerule-match-element-if-expr\r\n // valuerule-match-element-validation-msg-wrn\r\n // valuerule-match-element-if-expr-wrn\r\n // valuerule-ng-model-match (this is the model value to compare against)\r\n\r\n return {\r\n restrict: 'A',\r\n require: ['pdiValidations', 'ngModel'],\r\n link: function (scope, element, attrs, ctrls, $parse) {\r\n 'use strict';\r\n\r\n if (ctrls.length !==2) return;\r\n\r\n var validationsctrl = ctrls[0]; // pdiValidations Controller\r\n var ctrl = ctrls[1]; // ngModel Controller\r\n\r\n var model = attrs.ngModel;\r\n var match = attrs.valueruleNgModelMatch;\r\n\r\n var validateErrors = (attrs.valueruleMatchElementValidationMsg) || ((!attrs.valueruleMatchElementValidationMsg) && (!attrs.valueruleMatchElementValidationMsgWrn)) ? true : false;\r\n var validateWarnings = (attrs.valueRuleMatchElementValidationMsgWrn) ? true : false;\r\n\r\n var matchElementValidationMsg = attrs.valueruleMatchElementValidationMsg || 'validation undefined';\r\n var matchElementValidationMsgWrn = attrs.valueruleMatchElementValidationMsgWrn;\r\n\r\n var validatorFn = function () {\r\n\r\n return {\r\n validateErrors: function () {\r\n if (!validateErrors) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleMatchElementIfExpr, scope)) {\r\n var matchValue = scope.$eval(match);\r\n var modelValue = scope.$eval(model);\r\n if (matchValue !== modelValue) {\r\n return { name: 'pdiValueruleMatchElement', model: model, msg: matchElementValidationMsg, hasError: true };\r\n }\r\n }\r\n\r\n return;\r\n },\r\n validateWarnings: function () {\r\n if (!validateWarnings) return;\r\n\r\n if (evaluateIfConditions(attrs.valueruleMatchElementIfExprWrn, scope)) {\r\n var matchValue = scope.$eval(match);\r\n var modelValue = scope.$eval(model);\r\n if (matchValue !== modelValue) {\r\n return { name: 'pdiValueruleMatchElement', model: model, msg: matchElementValidationMsgWrn, hasWarning: true };\r\n }\r\n }\r\n\r\n return;\r\n }\r\n };\r\n };\r\n\r\n scope.scopeValidations.push({ name: 'pdiValueruleMatchElement', model: model, element: element, attrs: attrs, validator: validatorFn, priority: 1 });\r\n\r\n }\r\n };\r\n }]);\r\n","/**\r\n * Created by jvitoria on 4/1/2015.\r\n */\r\n/* ==============================================================================\r\n\r\n CORE.FILTERS MODULE\r\n\r\n Defines the module namespace for the core.filters\r\n\r\n ============================================================================= */\r\nangular.module('core.filters', []);\r\n\r\n\r\nangular.module('core.filters')\r\n .filter('htmlToPlaintext', function() {\r\n return function(text) {\r\n return String(text).replace(/<[^>]+>/gm, '');\r\n };\r\n })\r\n .filter('tel', function () {\r\n return function (tel) {\r\n if (!tel) { return ''; }\r\n\r\n var value = tel.toString().trim().replace(/^\\+/, '');\r\n\r\n if (value.match(/[^0-9]/)) {\r\n return tel;\r\n }\r\n\r\n var country, city, number;\r\n\r\n switch (value.length) {\r\n case 10: // +1PPP####### -> C (PPP) ###-####\r\n country = 1;\r\n city = value.slice(0, 3);\r\n number = value.slice(3);\r\n break;\r\n\r\n case 11: // +CPPP####### -> CCC (PP) ###-####\r\n country = value[0];\r\n city = value.slice(1, 4);\r\n number = value.slice(4);\r\n break;\r\n\r\n case 12: // +CCCPP####### -> CCC (PP) ###-####\r\n country = value.slice(0, 3);\r\n city = value.slice(3, 5);\r\n number = value.slice(5);\r\n break;\r\n\r\n default:\r\n return tel;\r\n }\r\n\r\n if (country === 1) {\r\n country = \"\";\r\n }\r\n\r\n number = number.slice(0, 3) + '-' + number.slice(3);\r\n\r\n return (country + \" (\" + city + \") \" + number).trim();\r\n };\r\n });","/* ==============================================================================\r\n\r\n CORE.AJAX MODULE\r\n\r\n Defines the core.ajax module and it all it's module dependencies\r\n\r\n ============================================================================= */\r\nclass ApiServiceSettings {\r\n constructor(settings) {\r\n this.url = settings.url;\r\n this.data = settings.data;\r\n this.method = settings.method;\r\n this.params = settings.params;\r\n this.responseType = settings.responseType;\r\n this.scope = settings.scope; // if set then this is the scope that validations will execute for\r\n this.skipValidations = settings.skipValidations || false; // if true then POST or PUT validations eval is skipped\r\n }\r\n}\r\nclass ApiServiceOperationResult {\r\n constructor(data) {\r\n this.Success = data.Success;\r\n this.SuccessMsg = data.SucessMessage;\r\n this.ErrorTitle = data.ErrorTitle;\r\n this.Errors = data.ErrorMessages || [];\r\n this.Warnings = data.WarningMessages || [];\r\n this.HasErrors = (this.Errors.length > 0);\r\n this.HasWarnings = (this.Warnings.length > 0);\r\n this.IsRedirect = data.IsRedirect;\r\n this.RedirectUrl = data.RedirectUrl;\r\n this.Data = data.Data;\r\n }\r\n}\r\n\r\nangular.module('core.ajax', [])\r\n\r\n /* ==============================================================================\r\n\r\n CORE.AJAX\r\n\r\n Contains helpful methods that are common to most ajax/xhr commands.\r\n\r\n ============================================================================= */\r\n .factory('ajax', ['$http', function ($http)\r\n {\r\n 'use strict';\r\n\r\n return {\r\n\r\n /*\r\n GET\r\n\r\n Simplified abstraction on top of Angular's $http provider.\r\n Performs a \"GET\" Request for a given url and data\r\n */\r\n get: function (url, data)\r\n {\r\n if (data === undefined)\r\n {\r\n return $http({\r\n method: 'GET',\r\n url: url\r\n });\r\n } else\r\n {\r\n return $http({\r\n method: 'GET',\r\n url: url + '/' + data\r\n });\r\n }\r\n },\r\n\r\n /*\r\n POST\r\n\r\n Simplified abstraction on top of Angular's $http provider.\r\n Performs a \"POST\" Request for a given url and data\r\n */\r\n post: function (url, data)\r\n {\r\n return $http({\r\n method: 'POST',\r\n url: url,\r\n data: data,\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n }\r\n });\r\n }\r\n };\r\n\r\n }])\r\n .service('apiService',\r\n ['$http', '$q', '$window', 'NotificationService',\r\n function ($http, $q, $window, NotificationService)\r\n {\r\n function webAPICall(settings, notifyOnSuccess, suppressErrors)\r\n {\r\n var opResults = {};\r\n var deferred = $q.defer();\r\n\r\n //// for POST and PUT execute validation on data\r\n //if ((settings.method === 'POST' || settings.method === 'PUT') && !settings.skipValidations) {\r\n // if (!validatorSvc.executeValidations()) {\r\n // return deferred.promise;\r\n // }\r\n //}\r\n\r\n $http({\r\n method: settings.method || 'GET',\r\n url: settings.url,\r\n data: settings.data,\r\n params: settings.params\r\n })\r\n .then(function (data, status, headers, config)\r\n {\r\n opResults = new ApiServiceOperationResult(data.data);\r\n\r\n if (opResults.IsRedirect)\r\n {\r\n $window.location.assign(opResults.RedirectUrl);\r\n\r\n }\r\n else {\r\n if (opResults.Success)\r\n {\r\n if (notifyOnSuccess)\r\n NotificationService.handleSuccess(settings, opResults, status, headers, config);\r\n deferred.resolve(opResults, status, headers, config);\r\n } else\r\n {\r\n if (!suppressErrors) {\r\n NotificationService.handleFailure(settings, opResults, status, headers, config);\r\n }\r\n }\r\n }\r\n\r\n })\r\n .catch(function (data, status, headers, config)\r\n {\r\n if (!suppressErrors) {\r\n NotificationService.handleError(settings, data.data, status, headers, config);\r\n }\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n return {\r\n executeAndNotifyOnSuccess: function (settings)\r\n {\r\n return webAPICall(settings, true, false);\r\n },\r\n executeAndNotifyOnSuccessAndSuppressErrors: function (settings)\r\n {\r\n return webAPICall(settings, true, true);\r\n },\r\n execute: function (settings)\r\n {\r\n return webAPICall(settings, false, false);\r\n },\r\n executeAndSuppressErrors: function (settings)\r\n {\r\n return webAPICall(settings, false, true);\r\n }\r\n };\r\n }\r\n ]);\r\n","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nfunction CustomerPaymentAccount(account){\r\n this.AccountNo = account.AccountNo;\r\n this.AccountNoVerify = account.AccountNoVerify;\r\n this.AccountNoMasked = account.AccountNoMasked;\r\n this.AccountStatus = account.AccountStatus;\r\n this.AccountStatusDesc = account.AccountStatusDesc;\r\n this.AccountType = account.AccountType;\r\n this.BankRoutingNo = account.BankRoutingNo;\r\n this.CreatedDateTime = account.CreatedDateTime;\r\n this.CreatedByCustContKey = account.CreatedByCustContKey;\r\n this.CustKey = account.CustKey;\r\n this.Description = account.Description;\r\n this.Key = account.Key;\r\n this.LastModifiedDateTime = account.LastModifiedDateTime;\r\n this.LastModifiedByCustContKey = account.LastModifiedByCustContKey;\r\n this.PrenoteDate = account.PrenoteDate;\r\n this.RejectedEmailSent = account.RejectedEmailSent;\r\n this.VerificationAmount1 = account.VerificationAmount1;\r\n this.VerificationAmount2 = account.VerificationAmount2;\r\n this.VerificationDate = account.VerificationDate;\r\n this.TimeStamp = account.TimeStamp;\r\n this.IsDefault = account.IsDefault;\r\n this.AccountLastActivity = account.AccountLastActivity;\r\n this.AccountNextPaymentKey = account.AccountNextPaymentKey;\r\n this.AccountNextPayment = account.AccountNextPayment;\r\n this.AccountNextPaymentAmmount = account.AccountNextPaymentAmmount;\r\n this.ScheduledPaymentCount = account.ScheduledPaymentCount;\r\n}\r\n\r\n\r\n\r\nangular.module('services.paymentAccounts', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paymentAccounts',[]).factory('PaymentAccountService', function($q, ajax, apiService) {\r\n 'use strict';\r\n var WebPaymentAccount = {};\r\n return{\r\n WebPaymentAccount:WebPaymentAccount,\r\n getPaymentAccountList : function(customerKey){\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/WebPaymentAccounts/' + customerKey,\r\n params: {}\r\n });\r\n var deferred = $q.defer();\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getPaymentAccount : function(customerPaymentAccountKey, customerKey){\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/WebPaymentAccount/' + customerPaymentAccountKey + '/' + customerKey,\r\n params: {}\r\n });\r\n var deferred = $q.defer();\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n savePaymentAccount : function(webPaymentAccount){\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/WebPaymentAccount',\r\n data: webPaymentAccount\r\n }\r\n );\r\n var deferred = $q.defer();\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n validateRoutingNumber : function(routingNumber){\r\n var deferred = $q.defer();\r\n ajax.get('../api/WebPaymentAccountValidateRoutingNumber', routingNumber)\r\n .then(function(data, status, config, headers){\r\n var routingNubmerisValid = true;\r\n deferred.resolve(routingNubmerisValid);\r\n })\r\n .catch(function(data, status, config, headers){\r\n var routingNubmerisValid = data;\r\n deferred.reject(routingNubmerisValid);\r\n });\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 2/17/2015.\r\n */\r\nangular.module('core.constants', []).factory('constantLists', function(localizationSvc){\r\n var secretQuestions = [];\r\n var phoneTypes = [];\r\n\r\n var getSecretQuestions = function (localStrings) {\r\n if (angular.isUndefinedOrNullOrEmpty(localStrings)) {\r\n localStrings = localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n\r\n if (secretQuestions.length === 0) {\r\n secretQuestions[0] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion1\"));\r\n secretQuestions[1] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion2\"));\r\n secretQuestions[2] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion3\"));\r\n secretQuestions[3] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion4\"));\r\n secretQuestions[4] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion5\"));\r\n secretQuestions[5] = localStrings.stringFromCharacterEntity(localStrings.getLocalizedString(\"SecretQuestion6\"));\r\n }\r\n\r\n return secretQuestions;\r\n };\r\n\r\n var getPhoneTypes = function (localStrings) {\r\n if (angular.isUndefinedOrNullOrEmpty(localStrings)) {\r\n localStrings = localizationSvc.getCachedLocalizationsContainer(\"AccountProfileLocalization\");\r\n }\r\n\r\n if (phoneTypes.length === 0) {\r\n phoneTypes[0] = { key: 4, value: localStrings.getLocalizedString(\"Unknown\") };\r\n phoneTypes[1] = { key: 1, value: localStrings.getLocalizedString(\"Home\") };\r\n phoneTypes[2] = { key: 2, value: localStrings.getLocalizedString(\"Mobile\") };\r\n phoneTypes[3] = { key: 3, value: localStrings.getLocalizedString(\"Other\") };\r\n phoneTypes[4] = { key: 0, value: localStrings.getLocalizedString(\"Work\") };\r\n }\r\n\r\n return phoneTypes;\r\n };\r\n return {\r\n secretQuestions: getSecretQuestions,\r\n phoneTypes: getPhoneTypes\r\n };\r\n});\r\n","/* ==============================================================================\r\n\r\nCore Enums\r\n\r\n Contains the core enum related code\r\n\r\n ============================================================================= */\r\nangular.module('core.enums', []).service('Modules', function ()\r\n{\r\n\r\n var All = 'All';\r\n var BulkFuel = 'BulkFuel';\r\n var CardLock = 'CardLock';\r\n var Retail = 'Retail';\r\n var Wholesale = 'Wholesale';\r\n\r\n return {\r\n All: All,\r\n BulkFuel: BulkFuel,\r\n CardLock: CardLock,\r\n Retail: Retail,\r\n Wholesale: Wholesale\r\n };\r\n}).service('WebFunctions', function ()\r\n{\r\n var AccountActivity = 1;\r\n var PaperworkEntry = 2;\r\n var CardTransactions = 3;\r\n var ViewCards = 4;\r\n var EditCards = 5;\r\n var CardAlerts = 6;\r\n var AddNewCards = 7;\r\n var AddandEditWebPaymentAccounts = 8;\r\n var AddandEditWebPayments = 9;\r\n //var ViewCreditBalanceInformation = 10;\r\n var CPPriceNotices = 11;\r\n var ViewCardNumbers = 12;\r\n var ViewNotificationsSenttoOtherContacts = 13;\r\n var ManageContactsAndSecurity = 14;\r\n var ViewCreditInformation = 15;\r\n var ViewOrderHistoryandPriceNotices = 16;\r\n var AddAndEditBulkFuelOrders = 17;\r\n var ViewCustomPages = 18;\r\n return {\r\n AccountActivity: AccountActivity,\r\n PaperworkEntry: PaperworkEntry,\r\n CardTransactions: CardTransactions,\r\n ViewCards: ViewCards,\r\n EditCards: EditCards,\r\n CardAlerts: CardAlerts,\r\n AddNewCards: AddNewCards,\r\n AddandEditWebPaymentAccounts: AddandEditWebPaymentAccounts,\r\n AddandEditWebPayments: AddandEditWebPayments,\r\n //ViewCreditBalanceInformation : ViewCreditBalanceInformation,\r\n CPPriceNotices: CPPriceNotices,\r\n ViewCardNumbers: ViewCardNumbers,\r\n ViewNotificationsSenttoOtherContacts: ViewNotificationsSenttoOtherContacts,\r\n ManageContactsAndSecurity: ManageContactsAndSecurity,\r\n ViewCreditInformation: ViewCreditInformation,\r\n ViewOrderHistoryandPriceNotices: ViewOrderHistoryandPriceNotices,//BulkFuel\r\n AddAndEditBulkFuelOrders: AddAndEditBulkFuelOrders,//BulkFuel\r\n ViewCustomPages: ViewCustomPages\r\n\r\n };\r\n}).service('WebFunctionGroups', function (WebFunctions)\r\n{\r\n var x = WebFunctions;\r\n var All = [x.AccountActivity, x.PaperworkEntry, x.CardTransactions, x.ViewCards, x.EditCards, x.CardAlerts,\r\n x.AddNewCards, x.AddandEditWebPaymentAccounts, x.AddandEditWebPayments, x.ViewCreditInformation,\r\n x.CPPriceNotices, x.ViewCardNumbers, x.ViewNotificationsSenttoOtherContacts, x.ManageContactsAndSecurity,\r\n x.ViewOrderHistoryandPriceNotices, x.AddAndEditBulkFuelOrders];\r\n var Account = [x.AccountActivity, x.CardTransactions, x.AddandEditWebPaymentAccounts, x.AddandEditWebPayments];\r\n var Payments = [x.AddandEditWebPaymentAccounts, x.AddandEditWebPayments];\r\n var Orders = [/*x.AccountActivity,*/ x.ViewOrderHistoryandPriceNotices, x.AddAndEditBulkFuelOrders];//BulkFuel && Warehouse\r\n var Paperwork = [x.PaperworkEntry];\r\n var FuelCards = [x.CardTransactions, x.ViewCards, x.EditCards, x.CardAlerts, x.AddNewCards, x.CPPriceNotices];\r\n var Comments = All;\r\n var Documents = All;\r\n var AccountReports = [x.AccountActivity];\r\n var AccountPayments = [x.AddandEditWebPaymentAccounts, x.AddandEditWebPayments];\r\n var AccountAlerts = [x.AddandEditWebPayments];\r\n var FuelCardsCards = [x.ViewCards, x.EditCards, x.AddNewCards];\r\n var FuelCardsTrans = [x.CardTransactions];\r\n var FuelCardsPrices = [x.CPPriceNotices];\r\n var CustomPages = [x.ViewCustomPages];\r\n return {\r\n All: All,\r\n Account: Account,\r\n Orders: Orders,\r\n Paperwork: Paperwork,\r\n Payments: Payments,\r\n FuelCards: FuelCards,\r\n Comments: Comments,\r\n Documents: Documents,\r\n AccountReports: AccountReports,\r\n AccountPayments: AccountPayments,\r\n AccountAlerts: AccountAlerts,\r\n FuelCardsCards: FuelCardsCards,\r\n FuelCardsTrans: FuelCardsTrans,\r\n FuelCardsPrices: FuelCardsPrices,\r\n CustomPages: CustomPages\r\n };\r\n}).service('WebFunctionModules', function (WebFunctions)\r\n{\r\n return {\r\n checkWebFunctionModules: function (webFunction, isBulkFuel, isCardLock, isRetail, isWholesale, isWebEft, customer)\r\n {\r\n if (webFunction === WebFunctions.CardTransactions) return isCardLock;\r\n if (webFunction === WebFunctions.ViewCards) return isCardLock;\r\n if (webFunction === WebFunctions.EditCards) return isCardLock;\r\n if (webFunction === WebFunctions.CardAlerts) return isCardLock;\r\n if (webFunction === WebFunctions.AddNewCards) return isCardLock;\r\n if (webFunction === WebFunctions.AddandEditWebPaymentAccounts) return isWebEft;\r\n if (webFunction === WebFunctions.AddandEditWebPayments) return isWebEft;\r\n if (webFunction === WebFunctions.CPPriceNotices) return isCardLock && (customer.CPPrcNtcRuleKey !== null && customer.CPPrcNtcRuleKey > 0);\r\n if (webFunction === WebFunctions.ViewCardNumbers) return isCardLock;\r\n if (webFunction === WebFunctions.ViewOrderHistoryandPriceNotices) return (isBulkFuel || isWholesale);\r\n if (webFunction === WebFunctions.AddAndEditBulkFuelOrders) return (isBulkFuel || isWholesale);\r\n //for all other web functions assume that any module access is fine.\r\n return true;\r\n }\r\n };\r\n});","\r\n\r\n/* ==============================================================================\r\n\r\n CORE.ERROR MODULE\r\n\r\n Defines the error module and it all it's module dependencies\r\n\r\n ============================================================================= */\r\nangular.module('core.error', []);\r\n\r\n\r\n\r\n/* ==============================================================================\r\n\r\n CORE.ERROR SERVICE\r\n\r\n Contains helpful error handling and publishing methods\r\n\r\n ============================================================================= */\r\nangular.module('core.error').factory('NotificationService', function ($rootScope) {\r\n 'use strict';\r\n function handle(event, settings, opResults, status, headers, config) {\r\n var data = {\r\n settings: settings,\r\n opResults: opResults,\r\n status: status,\r\n headers: headers,\r\n config: config\r\n };\r\n $rootScope.$broadcast('event:' + event, data);\r\n }\r\n return {\r\n handleError: function (settings, opResults, status, headers, config) {\r\n handle('Error', settings, opResults, status, headers, config);\r\n },\r\n handleFailure: function (settings, opResults, status, headers, config) {\r\n handle('Failed', settings, opResults, status, headers, config);\r\n },\r\n handleSuccess: function (settings, opResults, status, headers, config) {\r\n handle('Success', settings, opResults, status, headers, config);\r\n }\r\n };\r\n});","angular.module('core.objects', [])\r\n .factory(\"Payment\",function(HttpUtil){\r\n 'use strict';\r\n var paymentInfo = {};\r\n return {\r\n paymentInfo : paymentInfo\r\n };\r\n })\r\n .factory(\"HttpUtil\",function($http, $q){\r\n 'use strict';\r\n return {};\r\n });","/* ==============================================================================\r\n\r\n CORE.SECURITY MODULE\r\n\r\n Contains all security related code\r\n\r\n ============================================================================= */\r\nangular.module('core.security', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n AUTH INTERCEPTOR\r\n\r\n Adds the Auth Token to the Http headers collection\r\n if the token is present.\r\n\r\n ============================================================================= */\r\nangular.module('core.security').factory('AuthInterceptor', function ($q, $rootScope, $location, $interval)\r\n{\r\n function logout()\r\n {\r\n $rootScope.sessionExpired = true;\r\n }\r\n\r\n return {\r\n\r\n request: function (config)\r\n {\r\n $interval.cancel($rootScope.sessionTimeout);\r\n config.headers = config.headers || {};\r\n\r\n // If the auth token is present\r\n if (amplify.store('pnuser-token') !== undefined)\r\n {\r\n // Add it to the http headers collection to be read by our\r\n // server-side authentication code\r\n var token = amplify.store('pnuser-token');\r\n config.headers.Authentication = token;\r\n //Update expiration time for the user token\r\n amplify.store('pnuser-token', token, {expires: $rootScope.timeout});\r\n if ($rootScope.timeout > 0)\r\n {\r\n $rootScope.sessionTimeout = $interval(function ()\r\n {\r\n logout();\r\n }, $rootScope.timeout);\r\n }\r\n } else\r\n {\r\n if ($location.$$path !== \"/\" &&\r\n $location.$$path.search(/(SignUp|ResetPassword|SetPassword|ContactUs|SiteDisabled|unsubscribe)/i) === -1)\r\n logout();\r\n }\r\n\r\n return config || $q.when(config);\r\n }\r\n\r\n };\r\n\r\n});\r\n\r\n/* ==============================================================================\r\n\r\n AUTHENTICATION SERVICE\r\n\r\n Contains the core authentication related code\r\n\r\n ============================================================================= */\r\nangular.module('core.security').factory('Authentication', function ($q, $rootScope, apiService, $location, $analytics)\r\n{\r\n\r\n return {\r\n isAuthenticated: function ()\r\n {\r\n var deferred = $q.defer(),\r\n token = amplify.store('pnuser-token');\r\n\r\n if (token === undefined)\r\n {\r\n $rootScope.isAuthenticated = false;\r\n deferred.reject('authentication:auth-token not valid');\r\n }\r\n else\r\n {\r\n $rootScope.isAuthenticated = true;\r\n deferred.resolve('authentication:auth-token is valid');\r\n }\r\n return deferred.promise;\r\n },\r\n login: function (userId, password, impersonationGuid)\r\n {\r\n var deferred = $q.defer();\r\n var data = {\r\n \"WebUserId\": userId || '',\r\n \"WebUserPassword\": password || '',\r\n 'ImpersonationGuid': impersonationGuid || ''\r\n };\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/Login',\r\n data: data\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n $rootScope.loginInfo.userId = data.Data.ImpersonatedUserId;\r\n $rootScope.loginInfo.userKey = data.Data.ImpersonatedKey;\r\n $rootScope.loginInfo.userType = data.Data.ImpersonatedType;\r\n $rootScope.loginInfo.impersonatorUserId = data.Data.ImpersonatorUserId;\r\n $rootScope.loginInfo.impersonatorUserKey = data.Data.ImpersonatorKey;\r\n $rootScope.loginInfo.impersonatorUserType = data.Data.ImpersonatorType;\r\n\r\n // Create Google Analytics Login event with Web User Key\r\n $analytics.eventTrack('Successful Login', { category: 'User Access', label: data.Data.Key });\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n // Create Google Analytics Login event with Web User Key\r\n $analytics.eventTrack('Failed Login', { category: 'User Access', label: data.Errors[0] || 'Valid login credentials required' });\r\n deferred.reject(data.ErrorMessages);\r\n }\r\n );\r\n \r\n return deferred.promise;\r\n },\r\n userToken: function ()\r\n {\r\n if (amplify.store('pnuser-token') !== undefined)\r\n {\r\n return amplify.store('pnuser-token');\r\n } else\r\n {\r\n $location.path('/');\r\n }\r\n }\r\n };\r\n});\r\n\r\n/* ==============================================================================\r\n\r\n USER SERVICE\r\n\r\n Contains the core USER related code\r\n\r\n ============================================================================= */\r\nangular.module('core.security')\r\n .factory('WebUserSvc', function ($q, $rootScope, Authentication, apiService)\r\n {\r\n var webUser;\r\n\r\n function removeEmptySiteMenuEntries(data)\r\n {\r\n if (!data.Data.WebUser || !data.Data.WebUser.CurrentAuthorization || !data.Data.WebUser.CurrentAuthorization.SiteLayout)\r\n {\r\n return;\r\n }\r\n\r\n data.Data.WebUser.CurrentAuthorization.SiteLayout.SubMenu.remove(function (menu)\r\n {\r\n return !data.Data.WebUser.CurrentAuthorization.SiteLayout.SideMenu.any({ParentKey:menu.Key});\r\n });\r\n }\r\n\r\n function retrieveWebUserFromAPI(user)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetWebUser/' + user,\r\n params: {}\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n removeEmptySiteMenuEntries(data);\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(webUser);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n\r\n function retrieveWebUserFromAPIWithToken(token, profile) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetWebUserByToken/',\r\n data: {\r\n ProfileKey: profile,\r\n Token: token\r\n }\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n removeEmptySiteMenuEntries(data);\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(webUser);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n\r\n function retrieveSelectedProfileFromAPI(user, profile)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetWebUserAndProfile/' + user + '/' + profile,\r\n params: {}\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n removeEmptySiteMenuEntries(data);\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(webUser);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n\r\n function getWebUser()\r\n {\r\n return webUser;\r\n }\r\n\r\n return {\r\n getLoggedInWebUserToken: function ()\r\n {\r\n var token = amplify.store('pnuser-token');\r\n\r\n if (token === undefined)\r\n {\r\n $rootScope.isAuthenticated = false;\r\n return;\r\n }\r\n $rootScope.isAuthenticated = true;\r\n \r\n return token;\r\n },\r\n getWebUserProfile: function () {\r\n return amplify.store('pnWebProfile');\r\n },\r\n getCurrentAuthorization: function () {\r\n return amplify.store('pnAuthIndex');\r\n },\r\n retrieveWebUser: function (user)\r\n {\r\n var deferred = $q.defer();\r\n retrieveWebUserFromAPI(user).then(function (data) {\r\n deferred.resolve(data);\r\n });\r\n return deferred.promise;\r\n },\r\n retrieveWebUserData: function (token, profile) {\r\n var deferred = $q.defer();\r\n retrieveWebUserFromAPIWithToken(token, profile).then(function (data) {\r\n deferred.resolve(data);\r\n });\r\n return deferred.promise;\r\n },\r\n retrieveWebUserFromAPI: retrieveWebUserFromAPI,\r\n retrieveWebUserFromAPIWithToken: retrieveWebUserFromAPIWithToken,\r\n retrieveSelectedProfile: function (user, profile)\r\n {\r\n var deferred = $q.defer();\r\n retrieveSelectedProfileFromAPI(user, profile).then(function (data) {\r\n deferred.resolve(data);\r\n });\r\n return deferred.promise;\r\n },\r\n getWebUserForSignup: function (webUser)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetWebUserForSignup/' + webUser.GUID,\r\n params: {}\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n signupWebUser: function (webUser)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SignupWebUser/',\r\n data: webUser\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getWebUserForPasswordReset: function (webUser)\r\n {\r\n var deferred = $q.defer(webUser);\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetWebUserForPasswordReset/' + webUser.GUID,\r\n params: {}\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n verifyWebUserSecretQuestionAnswer: function (webUser)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/VerifyWebUserSecretQuestionAnswer/' + webUser.GUID + '/' + webUser.AnswerClear,\r\n params: {}\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n resetWebUserPassword: function (webUser)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/ResetWebUserPassword/',\r\n data: webUser\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n webUser = data.Data;\r\n deferred.resolve(webUser);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n processForgotMyPassword: function (email)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/ProcessWebUserResetPassword/',\r\n params: {\r\n webUserId: email\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.ErrorMessages);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n saveWebUser: function (webUser, quiet)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveWebUser/',\r\n data: webUser\r\n }\r\n );\r\n if (quiet)\r\n {\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n } else\r\n {\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n webUser = data.Data.WebUser;\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.reject(data.Errors);\r\n }\r\n );\r\n }\r\n return deferred.promise;\r\n },\r\n validatePasswordComplexity: function (webUserKey, password, isLogin)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/ValidatePasswordComplexity/',\r\n data: {\r\n WebUserKey: webUserKey,\r\n Password: password,\r\n IsLogin: isLogin,\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n },\r\n function (data)\r\n {\r\n deferred.resolve(data.Errors);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getNextPasswordResetDate: function (webUser)\r\n {\r\n var one_day = 1000 * 60 * 60 * 24;\r\n // Convert both dates to milliseconds\r\n var date1_ms = new Date(Date.parse(webUser.PWCreatedDate));\r\n var date2_ms = new Date().getTime();\r\n var difference_ms = date1_ms - date2_ms;\r\n return Math.round(difference_ms / one_day);\r\n },\r\n getWebUser: getWebUser,\r\n resolveWebUser: function () {\r\n var deferred = $q.defer();\r\n var _user = this.getWebUser();\r\n var _token = this.getLoggedInWebUserToken();\r\n var _profile = this.getWebUserProfile();\r\n\r\n // We have the user already\r\n if (!angular.isUndefinedOrNullOrEmpty(_user)) deferred.resolve();\r\n\r\n // Get the user if we can\r\n else if (!angular.isUndefinedOrNullOrEmpty(_token) && !angular.isUndefinedOrNullOrEmpty(_profile))\r\n this.retrieveWebUserData(_token, _profile).then(function () { deferred.resolve(); });\r\n\r\n // User is not able to be retrieved\r\n else deferred.resolve();\r\n\r\n return deferred.promise;\r\n }\r\n };\r\n }\r\n);","angular.module('core.providers', [])\r\n .provider('template', [function() {\r\n\r\n this.$get = function() {\r\n return {};\r\n };\r\n\r\n this.getTemplate = function(templateName) {\r\n var absurl = window.location.protocol + \"//\" + window.location.hostname + window.location.pathname;\r\n var indexOfAppRel = absurl.toLowerCase().indexOf(\"app_release\");\r\n var templateUrl = absurl.substring(0,indexOfAppRel) + \"templates/\" + templateName;\r\n return templateUrl;\r\n };\r\n\r\n }])\r\n .constant('templates', function(templateProvider) { return templateProvider; });","angular.module('services.browser', [])\r\n .factory('BrowserService', function ($window)\r\n {\r\n return {\r\n getBrowserType: function ()\r\n {\r\n var userAgent = $window.navigator.userAgent;\r\n var browsers = {chrome: /chrome/i, safari: /safari/i, firefox: /firefox/i, ie: /mozilla/i};\r\n for (var key in browsers) {\r\n if (browsers[key].test(userAgent)) {\r\n return key;\r\n }\r\n }\r\n return 'ie';\r\n }\r\n };\r\n });","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.bulkFuelPriceNotices', ['core.ajax']);\r\n\r\nangular.module('services.bulkFuelPriceNotices',[]).service('bulkFuelPriceNoticesService', function($q, apiService) {\r\n 'use strict';\r\n return {\r\n loadBulkFuelPrices: function(custKey, custLocKey, startDate, endDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetBulkFuelPriceNotices/',\r\n data: {\r\n CustKey:custKey,\r\n CustLocKey:custLocKey,\r\n StartDate:startDate,\r\n EndDate:endDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.contactUs', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.contactUs',[]).service('ContactUs', function($q, apiService, $filter) {\r\n 'use strict';\r\n return {\r\n loadContactUsContext: function() {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetContactUsContext/',\r\n data: {}\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n saveMessage: function(message) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/PostContactUsMessage/',\r\n data: message\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.customers', ['core.ajax']);\r\n\r\nangular.module('services.customers',[]).service('customerService', function($q, apiService) {\r\n 'use strict';\r\n function execute(apiSvcSettings, deferred){\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n }\r\n\r\n function executeAndNotify(apiSvcSettings, deferred){\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n }\r\n return {\r\n saveCustomerAccountSettings: function (custKey, contactKey, alertAmount, sendAlerts)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCustomerARWebAccountSettings/',\r\n data: {\r\n CustomerKey: custKey,\r\n PrimaryContactKey: contactKey,\r\n AlertAmount: alertAmount,\r\n SendBalanceAlerts: sendAlerts\r\n }\r\n }\r\n );\r\n executeAndNotify(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n },\r\n getCustomerLocations: function (custKey, locType) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCustomerLocations/',\r\n data: {\r\n CustKey:custKey,\r\n LocationType:locType\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n saveCustomerLocations: function (recStatus, location, custContKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCustomerLocations/',\r\n data: {\r\n CustContKey: custContKey,\r\n RecStatus:recStatus,\r\n Location:location\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n services.documents MODULE\r\n ============================================================================= */\r\nangular.module('services.documents', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n DocumentService\r\n ============================================================================= */\r\nangular.module('services.documents', []).factory('documentService', function ($q, ajax, apiService)\r\n{\r\n\r\n 'use strict';\r\n return {\r\n getNotifications: function (custkey, custContKey, type, beginDate, endDate)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetNotificationsList/',\r\n data: {\r\n CustKey: custkey,\r\n CustContKey: custContKey === \"null\" ? null : custContKey,\r\n Type: type === \"null\" ? null : type,\r\n BeginDate: beginDate,\r\n EndDate: endDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getStatements: function (custkey, beginDate, endDate)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetStatementsList/',\r\n data: {\r\n CustKey: custkey,\r\n BeginDate: beginDate,\r\n EndDate: endDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n listDocuments: function (referenceNumber, description, startDate, endDate, customerKey, documentType, contactKey)\r\n {\r\n var deferred = $q.defer();\r\n var listAttachmentsCmdParms = {\r\n ReferenceNumber: referenceNumber,\r\n Description: description,\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n CustomerKey: customerKey,\r\n DocumentType: documentType,\r\n ContactKey: contactKey\r\n };\r\n\r\n var apiSvcSettings = new ApiServiceSettings({\r\n method: 'POST',\r\n url: '../api/ListAttachments',\r\n data: listAttachmentsCmdParms\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n var documetnList = data.Data;\r\n deferred.resolve(documetnList);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n Get1099AdviceList: function (cust, yb)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/Get1099AdviceList/',\r\n data: {\r\n CustKey: cust,\r\n YearsBack: yb\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","angular.module('services.edoc', ['core.ajax'])\n .service('EdocService', function ($q, apiService) {\n 'use strict';\n \n /**\n * the blob object is only valid for the window it is on,\n * once the window closes the url if captured is no longer valid\n * @param {any} edoc\n * @returns {blob}\n **/\n function createBlob(edoc) {\n var bytes = edoc.EdocStream;\n var type = edoc.MimeType;\n\n var raw = atob(bytes);\n var uint8Array = new Uint8Array(raw.length);\n for (var i = 0; i < raw.length; i++) {\n uint8Array[i] = raw.charCodeAt(i);\n }\n var blob = new Blob([uint8Array], { type: type });\n\n return blob;\n }\n\n /**\n * Takes the specified parameters and generates a edoc blob url\n * @param {number} edocKey\n * @returns {Promise}\n **/\n var renderEdoc = function (edocKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/EdocDetailsSecure',\n data: {\n EdocKey: edocKey\n }\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n };\n\n /**\n * Takes the specified parameters and generates a edoc blob url\n * @param {string} parameters\n * @returns {Promise}\n */\n var renderEdocByRefNo = function (parameters) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/EdocDetailsSecure/GetByRefNo',\n data: {\n Parameters: parameters\n }\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n };\n\n /**\n * Take the edoc stream and turn it into a blob url and then display it in our pdf viewer\n * If mime type is text/html then that means the document doesnt exist and we need to redirect \n * to the DocumentNotAvailable endpoint\n * @param {any} edoc\n * @returns {string}\n **/\n var createUrl = function (edoc){\n if (edoc) {\n var url;\n \n if (edoc.MimeType === 'text/html'){\n url = '../api/DocumentNotAvailable';\n return url;\n }\n \n var blob = createBlob(edoc);\n var file = URL.createObjectURL(blob);\n url = \"static/pdfjs/web/viewer.html?file=\" + encodeURIComponent(file);\n\n return url;\n }\n };\n\n return {\n renderEdoc: renderEdoc,\n renderEdocByRefNo: renderEdocByRefNo,\n createUrl: createUrl\n };\n });","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.encrypt', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.encrypt',[]).service('encryptData', function($q, apiService) {\r\n 'use strict';\r\n var encrypt = function(value) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/EncryptString/',\r\n data: {\r\n Value: value\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n };\r\n\r\n return {\r\n encrypt: encrypt\r\n };\r\n});","/* ==============================================================================\r\n\r\n SERVICES.FuelCards MODULE\r\n\r\n Defines the module namespace for the Fuel Cards services\r\n\r\n ============================================================================= */\r\nangular.module('services.FuelCards', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n FuelCards SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving data to the database.\r\n\r\n ============================================================================= */\r\nangular.module('services.FuelCards', [])\r\n .factory('FuelCardsService', function ($q, apiService)\r\n {\r\n 'use strict';\r\n function setDatesToNull(obj)\r\n {\r\n for (var prop in obj)\r\n {\r\n var value = obj[prop];\r\n if (typeof value === 'object')\r\n {\r\n setDatesToNull(value);\r\n }\r\n else\r\n {\r\n if (['1900-01-01T00:00:00', '0001-01-01T00:00:00', '2079-06-06T00:00:00'].indexOf(obj[prop]) > -1)\r\n obj[prop] = null;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n getCards: function (customerContactKey, customerKey, cardFormat, cardNumDesc, isActive, isExpired, isPending, isLocked, isCancelled, department, template)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCards/',\r\n data: {\r\n CustomerContactKey: customerContactKey,\r\n CustomerKey: customerKey,\r\n CardFormatKey: cardFormat,\r\n CardNumDesc: cardNumDesc,\r\n IsActive: isActive,\r\n IsExpired: isExpired,\r\n IsPending: isPending,\r\n IsLocked: isLocked,\r\n IsCancelled: isCancelled,\r\n Department: department,\r\n Template: template\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n setDatesToNull(data.Data);\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getCardDetails: function (cardKey, canViewCardNumbers)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCardDetails/',\r\n data: {\r\n CardKey: cardKey,\r\n CanViewCardNumbers:canViewCardNumbers\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n setDatesToNull(data.Data);\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getCardsContext: function (customerKey, compKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCardsContext/',\r\n data: {\r\n CustomerKey: customerKey,\r\n CompanyKey: compKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getTaxAuthorities: function (custKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetTaxAuthorities/',\r\n data: {\r\n CustomerKey: custKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n addCard: function (recStatus, card, cardCF, custContKey)\r\n {\r\n setDatesToNull(card);\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCards/',\r\n data: {\r\n Card: card,\r\n CardCF: cardCF,\r\n recStatus: recStatus,\r\n CustContKey: custContKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n saveCards: function (recStatus, card, cardCF, custContKey)\r\n {\r\n setDatesToNull(card);\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCards/',\r\n data: {\r\n Card: card,\r\n CardCF: cardCF,\r\n recStatus: recStatus,\r\n CustContKey: custContKey\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getLookupPrices: function (custContKey, daysBack)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCardPriceNotices/',\r\n data: {\r\n CustContKey: custContKey,\r\n DaysBack: daysBack\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getPriceNoticesSettings: function (custContKey, cpPriceNoticeRuleKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPriceNoticesSettings/',\r\n data: {\r\n CustContKey: custContKey,\r\n CPPriceRuleKey: cpPriceNoticeRuleKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getSearchSites: function (custContKey, city, state, postal, limit)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetSearchSites/',\r\n data: {\r\n CustContKey: custContKey,\r\n City: city,\r\n State: state,\r\n Zip: postal,\r\n Limit: limit\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n savePriceNoticeSettings: function (custContKey, sites, groups, methods)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePriceNoticesSettings/',\r\n data: {\r\n CustContKey: custContKey,\r\n PriceNoticesSettingsSites: sites,\r\n PriceNoticesSettingsGroups: groups,\r\n PriceNoticesSettingsMethods: methods\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n blankLocation: {\r\n Key: 0,\r\n ID: '',\r\n Description: '',\r\n Address1: '',\r\n Address2: '',\r\n City: '',\r\n County: '',\r\n StateKey: 0,\r\n PostalCode: '',\r\n Active: -1,\r\n Name: '',\r\n Phone: '',\r\n PhoneFormatted: '',\r\n Email: ''\r\n },\r\n\r\n getCardsDepartments: function (custKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetCardsDepartments/',\r\n data: {\r\n CustKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n saveCardsDepartments: function (recStatus, custKey, depts, fields, vals, custContKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveCardsDepartments/',\r\n data: {\r\n RecStatus: recStatus,\r\n CustKey: custKey,\r\n CustContKey: custContKey,\r\n Departments: depts,\r\n Fields: fields,\r\n Values: vals\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n });\r\n","/* ==============================================================================\nservices.globalizations.js MODULE\n============================================================================= */\nangular.module('services.globalizations', ['core.ajax']);\n\n/* ==============================================================================\nglobalizationSvc\n============================================================================= */\nangular.module('services.globalizations',[]).factory('globalizationSvc', function() {\n\n 'use strict';\n \n // Set the locale to the browser language, if it is null then set it to en-US\n var locale = (window.navigator.language === 'en-US' || window.navigator.language === 'fr-CA') ? window.navigator.language : 'en-US';\n\n return {\n getLocale: function () {\n return locale;\n },\n\n formatCurrency : function(num) {\n // Set the currency id based on the locale, default to USD\n var curID = (locale === 'fr-CA') ? 'CAD' : 'USD';\n\n return num.toLocaleString(locale, {style: 'currency', currency: curID});\n },\n\n formatNumeric: function (num, format) {\n return kendo.toString(num, format, locale);\n },\n\n // See https://docs.telerik.com/kendo-ui/globalization/intl/dateformatting for formats\n formatDateTime: function (dateString, format) {\n if (!dateString || dateString === \"\")\n {\n return \"\";\n }\n \n\n var date = new Date(dateString);\n return kendo.toString(date, format, locale);\n },\n\n convertStringToNumber: function (num) {\n if (typeof (num) === 'number')\n return num;\n\n if (locale === 'en-US') {\n num = num.replace(/[,$]/g, \"\");\n }\n else if (locale === 'fr-CA') {\n num = num.replace(/[$\\s]/g, \"\").replace(\",\", \".\");\n }\n\n return num;\n }\n };\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n services.home MODULE\r\n ============================================================================= */\r\nangular.module('services.home', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n homeService\r\n ============================================================================= */\r\nangular.module('services.home',[]).factory('homeService', function($q, ajax, apiService) {\r\n\r\n 'use strict';\r\n return{\r\n loadHomePageInformation : function(custContKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/Home/',\r\n data: {\r\n CustomerContactKey: custContKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","angular.module('services.localizations', [])\r\n .factory('localizationSvcFactory', function ($rootScope) {\r\n var _cachedLocalizations = [];\r\n\r\n var service = {\r\n setLocalizations: function (localizations) {\r\n _cachedLocalizations[localizations] = $rootScope.$eval(localizations);\r\n },\r\n setCachedLocalizations: function () {\r\n var localizationFilesContainer = $(\"#localizationFiles\");\r\n\r\n if (!angular.isUndefinedOrNullOrEmpty(localizationFilesContainer)) {\r\n angular.forEach(localizationFilesContainer.children(), function (item) {\r\n _cachedLocalizations[item.id] = $rootScope.$eval(item.innerText);\r\n });\r\n }\r\n },\r\n getCachedLocalizationsContainer: function (page) {\r\n return {\r\n getLocalizedString: function (string, replacementParms) {\r\n var doesNotExist = angular.isUndefinedOrNullOrEmpty;\r\n\r\n var replaceString = function (result, replacementParms) {\r\n for (var i = 0; i < replacementParms.length; i++) {\r\n result = result.replace(\"{\" + i.toString() + \"}\", replacementParms[i]);\r\n }\r\n return result;\r\n };\r\n\r\n var decodeToUTF8 = function (text) {\r\n return text.replace(/&#(\\d+);/g, function (match, number) {\r\n return String.fromCharCode(number);\r\n });\r\n };\r\n\r\n var getCachedLocalizationsFor = function (page) {\r\n\r\n // load all the localizations defined in the index page\r\n if (doesNotExist(_cachedLocalizations)) {\r\n service.setCachedLocalizations();\r\n }\r\n\r\n var result = _cachedLocalizations[page];\r\n\r\n // if page not found in cache try to recreate it \r\n return result ? result : service.setLocalizations(page);\r\n };\r\n\r\n var fmtResult = function (r, rp) {\r\n return (rp && rp.constructor === Array) ? replaceString(r, rp) : r;\r\n };\r\n\r\n var getStringFrom = function (page) {\r\n return fmtResult(getCachedLocalizationsFor(page)[string], replacementParms);\r\n };\r\n\r\n var result = getStringFrom(page);\r\n\r\n // if we can't find the string check the shared AppLocalization\r\n result = result ? result : getStringFrom(['AppLocalization']);\r\n\r\n // if we found a string return its decoded version to UTF 8 otherwise return the id\r\n return result ? decodeToUTF8(result) : string;\r\n\r\n },\r\n stringFromCharacterEntity: function (str) {\r\n // If we need translated string for an input field (e.g. secret questions editable combo-box) \r\n // we can not use ng-bind-html or k-value-template that fixing encoding issues.\r\n // We need to fix encoding issues via this function. \r\n // If someone finds a better solution for fixing the encoding issue, where it will be possible to get directly corrected text, \r\n // do not hesitate and change this.\r\n return $('').html(str).text();\r\n }\r\n };\r\n }\r\n };\r\n\r\n return service;\r\n })\r\n .factory('localizationSvc', function (localizationSvcFactory)\r\n {\r\n return localizationSvcFactory;\r\n })\r\n .directive('pnLocalizationsSvc', function (templates, localizationSvc)\r\n {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n link: function (scope, element, attrs)\r\n {\r\n localizationSvc.setLocalizations(element.text().trim());\r\n },\r\n templateUrl: function(element, attrs) {\r\n return templates.getTemplate(attrs.moduleName);\r\n }\r\n };\r\n })\r\n .directive('pnLocalizations', function (templates, localizationSvcFactory)\r\n {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n controllerAs: 'pnLocalizationCtrl',\r\n link: function (scope, element, attrs)\r\n {\r\n scope.pnLocalizationCtrl.localizations.setLocalizations(element.text().trim());\r\n },\r\n templateUrl: function(element, attrs) {\r\n return templates.getTemplate(attrs.moduleName);\r\n },\r\n controller: function () {\r\n var self = this;\r\n self.$onInit = function () {\r\n self.localizations = localizationSvcFactory;\r\n };\r\n }\r\n };\r\n })\r\n .directive('pnTemplate', function (templates)\r\n {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n templateUrl: function(element, attrs) {\r\n return templates.getTemplate(attrs.templateName);\r\n }\r\n };\r\n })\r\n;","/* ==============================================================================\n services.logging MODULE\n ============================================================================= */\nangular.module('services.logging', ['core.ajax']);\n\n/* ==============================================================================\n LoggingService\n ============================================================================= */\nangular.module('services.logging', []).factory('LoggingService', function ($q, apiService) {\n 'use strict';\n\n return {\n logErrors: function(error) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/Logging/',\n data: {\n ExceptionMessage: error.ExceptionMessage,\n Stacktrace: error.Stacktrace\n }\n }\n );\n apiService.execute(apiSvcSettings).then(\n function(data) {\n deferred.resolve(data);\n }\n );\n return deferred.promise;\n }\n };\n});","/**\r\n * Created by jvitoria on 6/18/2015.\r\n */\r\n/* ==============================================================================\r\n services.orders MODULE\r\n ============================================================================= */\r\nangular.module('services.orders', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n ordersService\r\n ============================================================================= */\r\nangular.module('services.orders', [])\r\n .factory('ordersService', function ($q, ajax, apiService)\r\n {\r\n 'use strict';\r\n return {\r\n getOpenOrders: function getOpenOrders(custKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOpenOrders/',\r\n data: {\r\n CustKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getOrderCustomerLocations: function getOrderCustomerLocations(custKey, requestedDeliveryDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOrderCustomerLocations/',\r\n data: {\r\n CustKey: custKey,\r\n RequestedDeliveryDate: requestedDeliveryDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getOrdersContext: function getOrdersContext(custKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOrdersContext/',\r\n data: {\r\n CustKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getOrderLocationInfo: function getOrderLocationInfo(custLocKey, requestedDeliveryDate)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOrderLocationInfo/',\r\n data: {\r\n CustLocKey: custLocKey,\r\n RequestedDeliveryDate: requestedDeliveryDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n getOrderDetails: function getOrderDetails(ordKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/GetOrderDetails/',\r\n data: {\r\n OrdKey: ordKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n saveOrderDetails: function saveOrderDetails(orderDetails)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/SaveOrderDetails/',\r\n data: {\r\n OrderDetails: orderDetails\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n\r\n blankOrderHeaderObj: function blankOrderHeaderObj()\r\n {\r\n return {\r\n Command: null,\r\n Comment: null,\r\n CustContKey: null,\r\n CustContName: null,\r\n CustContPhone: null,\r\n CustLocAddress: null,\r\n CustLocCity: null,\r\n CustLocDesc: null,\r\n CustLocKey: null,\r\n CustLocState: null,\r\n CustLocZip: null,\r\n Errors: [],\r\n LangID: 'EN',\r\n OrdCreatedByContKey: null,\r\n OrdDelivDirections: null,\r\n OrdDelivNotes: null,\r\n OrderDetails: [],\r\n OrdKey: null,\r\n OrdNumber: null,\r\n OrdStatus: null,\r\n OrdStatusKey: null,\r\n OrdType: 0,\r\n PONumber: null,\r\n ReqDelivDateTime: null,\r\n Timestamp: null\r\n };\r\n },\r\n\r\n blankOrderDetailsObj: function blankOrderDetailsObj()\r\n {\r\n return {\r\n CustFuelTankKey: null,\r\n ID: null,\r\n MaxVolume: null,\r\n OrderQty: 0,\r\n OrdFuelKey: null,\r\n OrdKey: null,\r\n Product: null,\r\n ProductKey: null,\r\n TankNumber: null,\r\n TimeStamp: null\r\n };\r\n }\r\n\r\n };\r\n });\r\n\r\n","angular.module('services.pages', ['core.ajax']);\nangular.module('services.pages', [])\n .factory('PagesService', function ($q, apiService) {\n 'use strict';\n var localCache = {};\n var Cache = {\n add: function (name, object, expiration) {\n var exp = expiration || 0;\n var now = new Date().getTime();\n localCache[name] = {\n data: object,\n inserted: now,\n expiration: (exp === 0) ? 0 : (now + exp * 1000)\n };\n },\n get: function (name) {\n var now = new Date().getTime();\n if (\n (Object.keys(localCache).indexOf(name) !== -1 && localCache[name].expiration === 0) || (Object.keys(localCache).indexOf(name) !== -1 && localCache[name].expiration > now)\n ) {\n return localCache[name].data;\n }\n else {\n //remove expired object from cache\n if (Object.keys(localCache).indexOf(name) !== -1) {\n delete localCache[name];\n }\n return null;\n }\n },\n exists: function (name) {\n var now = new Date().getTime();\n // if object exists and expiration is 0 (never expires) return true\n // if object exists and expiration is above NOW, return true\n // if object exists and expiration is bellow NOW return false and force services to retrieve new data\n return (\n (Object.keys(localCache).indexOf(name) !== -1 && localCache[name].expiration === 0) || (Object.keys(localCache).indexOf(name) !== -1 && localCache[name].expiration > now)\n ) ? true : false;\n }\n };\n return {\n getWebProfileSiteLayout: function (profileKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'GET',\n url: '../api/GetWebProfileSiteLayout/' + profileKey + '/',\n skipValidations: true\n }\n );\n if (Cache.exists(\"getWebProfileSiteLayout\")) {\n deferred.resolve(Cache.get(\"getWebProfileSiteLayout\"));\n }\n else {\n apiService.execute(apiSvcSettings).then(\n function (data) {\n Cache.add(\"getWebProfileSiteLayout\", data.Data);\n deferred.resolve(data.Data);\n },\n function (data) {\n deferred.reject(data.ErrorMessages);\n }\n );\n }\n return deferred.promise;\n },\n getAccessToken: function (profileKey, nodeKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'GET',\n url: '../api/GetAccessToken/' + profileKey + '/' + nodeKey + '/',\n skipValidations: true\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n },\n function (data) {\n deferred.reject(data.ErrorMessages);\n }\n );\n return deferred.promise;\n }\n };\n });\n","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.paperwork', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paperwork',[]).factory('PaperworkService', function($q, apiService, $rootScope) {\r\n 'use strict';\r\n return{\r\n getPaperworkContext : function(customerContactKey, ignoreStatus){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkContext/',\r\n data: {\r\n CustomerContactKey:customerContactKey,\r\n IgnoreStatus: ignoreStatus\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getNextPaperworkDate : function(siteKey, ignoreStatus){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetNextPaperworkDate/',\r\n data: {\r\n SiteKey: siteKey,\r\n IgnoreStatus: ignoreStatus\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data.NextPaperworkDate);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getPaperworkBatchesByDate : function(siteKey, startDate, endDate, unposted){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkBatchesByDate/',\r\n data: {\r\n SiteKey:siteKey,\r\n StartDate:startDate,\r\n EndDate:endDate,\r\n Unposted:unposted\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data.PaperworkBatches);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n OpenPaperworkBatch : function(siteKey, paperworkDate, customerContactKey, emailAddress, readOnly){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkBatchForEdit/',\r\n data: {\r\n BatchKey : 0,//Batch key is 0 to ensure the paperwork opens by site and date.(New Paperwork)\r\n SiteKey : typeof(siteKey) === \"object\" ?\r\n typeof(siteKey.SiteKey) === \"number\" ? siteKey.SiteKey : 0 :\r\n typeof(siteKey) === \"number\" ? siteKey : 0,\r\n PaperworkDate : paperworkDate,\r\n ContactKey: customerContactKey,\r\n EmailAddress : emailAddress,\r\n ReadOnly : readOnly\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n OpenPaperworkBatchByKey : function(batchKey, customerContactKey, emailAddress, readonly){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkBatchForEditByKey/',\r\n data: {\r\n BatchKey : batchKey,\r\n ContactKey: customerContactKey,\r\n EmailAddress : emailAddress,\r\n ReadOnly : readonly\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n SubmitPaperwork : function(submitPaperworkCmdParms){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SubmitPaperworkBatch/',\r\n data: submitPaperworkCmdParms\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n $rootScope.$broadcast('event:PaperworkSubmitted', {});\r\n deferred.resolve(data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n GetPaperworkBatchErrorWarning: function (submitPaperworkCmdParms) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkBatchErrorWarning/',\r\n data: submitPaperworkCmdParms\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n ValidatePaperworkSiteDateForContact : function(siteKey, paperworkDate, customerContactKey, forEntry){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/ValidatePaperworkSiteDateForContact/',\r\n data: {\r\n SiteKey : siteKey,\r\n PaperworkDate : paperworkDate,\r\n ContactKey: customerContactKey,\r\n ForEntry: forEntry\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n RefreshPaperworkLock: function (paperworkBatchKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/RefreshPaperworkLock/',\r\n data: {\r\n PaperworkBatchKey: paperworkBatchKey,\r\n RefreshLock: true\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n RemovePaperworkLock: function (paperworkBatchKey, customerId) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/RemovePaperworkLock/',\r\n data: {\r\n LockType: 1,\r\n LockKey: paperworkBatchKey,\r\n CustomerId: customerId\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkDealerForms', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkDealerForms',[]).service('PaperworkDealerFormsService', function($q, apiService, $filter) {\r\n 'use strict';\r\n var netReadings = 0;\r\n var beginningAndEndingReadings = 1;\r\n var calculatedBasedOnUnitsAndPerUnitAmount = 2;\r\n\r\n return {\r\n loadDealerForms: function (paperworkBatchKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkDealerForms/',\r\n data: {\r\n PaperworkBatchKey:paperworkBatchKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n saveDealerForms:function(header, forms){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePaperworkDealerForms/',\r\n data: {\r\n DealerFormsHeader:header,\r\n DealerForms:forms\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkTanks', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkDeliveries',[]).service('PaperworkDeliveriesService', function($q, apiService, $filter) {\r\n 'use strict';\r\n\r\n return {\r\n getDeliveriesWithContext: function (paperworkBatchKey ,forViewOnly) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetPaperworkDeliveriesWithContext/',\r\n params: { paperworkBatchKey: paperworkBatchKey, forViewOnly: forViewOnly }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getDelivery: function (deliveryKey, paperworkBatchKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetPaperworkDelivery/',\r\n params: { deliveryKey: deliveryKey, paperworkBatchKey: paperworkBatchKey }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getSiteFuelAuthorizedOrigins: function (paperworkBatchKey, vendorKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetSiteFuelAuthorizedOrigins/',\r\n params: { paperworkBatchKey: paperworkBatchKey, vendorKey: vendorKey }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n savePaperworkDelivery: function(deliveryHeader, delivery) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePaperworkDelivery/',\r\n data: {\r\n DeliveryHeader: deliveryHeader,\r\n FuelDelivery: delivery\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n deletePaperworkDelivery: function(delivery, paperworkBatchKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/DeletePaperworkDelivery/',\r\n params: { paperworkBatchKey: paperworkBatchKey },\r\n data: delivery\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.paperworkMeters', ['core.ajax'])\r\n\r\n.service('PaperworkMetersService', function($q, apiService, globalizationSvc) {\r\n 'use strict';\r\n\r\n var beginningAndEndingReadings = 1;\r\n var calculatedBasedOnUnitsAndPerUnitAmount = 2;\r\n\r\n function calculateNet(begin, end)\r\n {\r\n begin = globalizationSvc.convertStringToNumber(begin);\r\n end = globalizationSvc.convertStringToNumber(end);\r\n var diff = end - begin;\r\n\r\n if(parseFloat(end) < parseFloat(begin))\r\n {\r\n var max = begin.toString();\r\n var nMax = \"\";\r\n for(var i = 0;i< max.length; i++)\r\n {\r\n if(max[i] === \".\")\r\n break;\r\n nMax += \"9\";\r\n }\r\n var dMax = parseFloat(nMax) + 1;//Will wound to the next whole \"10\" id 99 to 100.\r\n diff = dMax - begin + end;\r\n }\r\n return parseFloat(diff);\r\n }\r\n\r\n return {\r\n loadMetersForEntry: function (paperworkBatchKey, profitcenterKey, paperworkDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkMeters/',\r\n data: {\r\n ProfitCenterKey:profitcenterKey,\r\n PaperworkDate:paperworkDate,\r\n PaperworkBatchKey:paperworkBatchKey\r\n\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n netAmountCalc: function (meter) {\r\n if (meter.FuelPositionDollarReading !== calculatedBasedOnUnitsAndPerUnitAmount) return;\r\n var netUnits = globalizationSvc.convertStringToNumber(meter.NetUnits);\r\n var rtlPrice = globalizationSvc.convertStringToNumber(meter.RtlPrice);\r\n if (netUnits > 0 && rtlPrice > 0) {\r\n meter.NetAmount = rtlPrice * netUnits;\r\n }\r\n },\r\n calcPerUnit: function (meter, priceToleranceAmount, checkRetailPrice, checkAveragePrice, showRtlPrice) {\r\n //Check average price * compare to previous value\r\n var netUnits = globalizationSvc.convertStringToNumber(meter.NetUnits);\r\n var netAmounts = globalizationSvc.convertStringToNumber(meter.NetAmount);\r\n var rtlPrice = globalizationSvc.convertStringToNumber(meter.RtlPrice);\r\n if (netUnits > 0 && netAmounts > 0) {\r\n meter.CalcPrice = netAmounts / netUnits;\r\n } else {\r\n // If retail price is available then fall back to that like FIME \r\n // Otherwise set the average to zero so we dont give them a bad calculation\r\n if (rtlPrice > 0 && showRtlPrice) {\r\n meter.CalcPrice = rtlPrice;\r\n } else {\r\n meter.CalcPrice = 0;\r\n }\r\n }\r\n },\r\n calculateNetAmountFromEnd: function (meter, index) {\r\n if (meter.FuelPositionDollarReading !== beginningAndEndingReadings) { return; }\r\n\r\n meter.NetAmount = calculateNet(meter.BeginAmount, meter.EndAmount);\r\n },\r\n calculateNetUnitsFromEnd: function (meter, index) {\r\n if (meter.FuelPositionUnitReading !== beginningAndEndingReadings) { return; }\r\n\r\n meter.NetUnits = calculateNet(meter.BeginUnits, meter.EndUnits);\r\n },\r\n calculatePageAmountTotals: function (meters) {\r\n var totalDollar = 0.0;\r\n meters.forEach((meter) => {\r\n var theVal = globalizationSvc.convertStringToNumber(meter.NetAmount);\r\n var pumpTestVal = globalizationSvc.convertStringToNumber(meter.TestAmount);\r\n totalDollar = totalDollar + parseFloat(theVal) - parseFloat(pumpTestVal);\r\n });\r\n return totalDollar;\r\n },\r\n calculatePageUnitTotals: function (meters) {\r\n var totalUnits = 0.0;\r\n meters.forEach((meter) => {\r\n var theVal = globalizationSvc.convertStringToNumber(meter.NetUnits);\r\n var pumpTestVal = globalizationSvc.convertStringToNumber(meter.TestUnits);\r\n totalUnits = totalUnits + parseFloat(theVal) - parseFloat(pumpTestVal);\r\n });\r\n return totalUnits;\r\n },\r\n updateMeters: function (meters) {\r\n meters.forEach((meter) => {\r\n meter.BeginUnits = typeof(meter.BeginUnits) === 'string' ? globalizationSvc.convertStringToNumber(meter.BeginUnits) : meter.BeginUnits;\r\n meter.BeginAmount = typeof(meter.BeginAmount) === 'string'? globalizationSvc.convertStringToNumber(meter.BeginAmount) : meter.BeginAmount;\r\n meter.TestUnits = typeof(meter.TestUnits) === 'string' ? globalizationSvc.convertStringToNumber(meter.TestUnits) : meter.TestUnits;\r\n meter.TestAmount = typeof(meter.TestAmount) === 'string' ? globalizationSvc.convertStringToNumber(meter.TestAmount) : meter.TestAmount;\r\n });\r\n },\r\n savePaperworkMeters: function(meterHeaders, meters)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePaperworkMeters/',\r\n data: {\r\n PaperworkMeterHeader: meterHeaders,\r\n PaperworkMeters: meters\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\n * Created by mmagic on 06/02/2022.\n */\n/* ==============================================================================\n\n SERVICES.PaperworkReports MODULE\n\n Defines the module namespace for the paperwork reports services\n\n ============================================================================= */\nangular.module('services.paperworkReports', ['core.ajax'])\n\n/* ==============================================================================\n\n Paperwork Reports SERVICE\n\n Contains services that retrieving paperwork reports.\n\n ============================================================================= */\n.service('PaperworkReportsService', function($q, apiService) {\n 'use strict';\n\n return {\n getPaperworkReports: function (customerContactKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/GetPaperworkReports/',\n data: {\n CustomerContactKey: customerContactKey\n },\n skipValidations: true\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n },\n\n getPaperworkReportSites: function (reportName, customerContactKey) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/GetPaperworkReportSites/',\n data: {\n ReportName: reportName,\n CustomerContactKey: customerContactKey\n },\n skipValidations: true\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n }\n };\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkTanks', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.paperworkTanks',[]).service('PaperworkTanksService', function($q, apiService, $filter) {\r\n 'use strict';\r\n var netReadings = 0;\r\n var beginningAndEndingReadings = 1;\r\n var calculatedBasedOnUnitsAndPerUnitAmount = 2;\r\n\r\n function unFormatNumber(number)\r\n {\r\n if(number.toString().indexOf(',') > -1) {\r\n number = number.replace( /,/g , \"\");\r\n }\r\n if(number.toString().indexOf('$') > -1) {\r\n number = number.replace( /\\$/g , \"\");\r\n }\r\n if(number.length === 0)// || isNaN(number))\r\n return \"0\";\r\n return number;\r\n }\r\n function convertTemp(temp, siteUOM, tankUOM){\r\n if(siteUOM === tankUOM) return temp;//no conversion necessary.\r\n if(tankUOM === 0) return (temp * 1.8) + 32; //Convert c to fl\r\n return (temp - 32) * 0.5555555556;//Convert f to c\r\n }\r\n function convertLinearUnits(units, siteUOM, tankUOM) {\r\n // If site doesnt measure by volume and the tank and site measurements are different then we need to convert the depth\r\n if (siteUOM !== 2 && siteUOM !== tankUOM) {\r\n switch (tankUOM) {\r\n case 0: // Convert to inches\r\n return units * 0.3937;\r\n case 1: // Convert to centimeters\r\n return units * 2.54;\r\n default:\r\n break;\r\n }\r\n }\r\n return units;\r\n }\r\n function convertVolumeToSiteUnits(units, siteUOM, tankUOM) {\r\n // If site doesnt measure by volume and the tank and site measurements are different then we need to convert the depth\r\n if (siteUOM !== 2 && siteUOM !== tankUOM) {\r\n switch (tankUOM) {\r\n case 0: // Convert to inches\r\n return units * 3.785412; \r\n case 1: // Convert to centimeters\r\n return units * 0.264172;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return units;\r\n }\r\n function getVolume(tankCharts, tank, depth){\r\n var tankUOM = tank.UnitOfMeasure;\r\n var siteUOM = tank.MeasurementType;\r\n var tankChartKey = tank.TankTypeKey;\r\n var tankChart = tankCharts[tankChartKey + \"\"];\r\n\r\n var tankTypeUnits = convertLinearUnits(depth, siteUOM, tankUOM);\r\n var nStr = tankTypeUnits + '';\r\n var x = nStr.split('.');\r\n var wholeNumber = parseInt(x[0], 10) - 1;//subtract 1 from actual number to get index.\r\n var decimalNumber = parseFloat(x.length > 1 ? '0.' + x[1] : '0.0');//Partial units.\r\n var baseAmount = 0;\r\n var partialAmount = 0.00;\r\n if(wholeNumber > 0 && wholeNumber < tankChart.length) {\r\n baseAmount = tankChart[wholeNumber].Volume;\r\n }\r\n if(decimalNumber > 0 && (wholeNumber + 1) < tankChart.length){\r\n var nextAmount = tankChart[wholeNumber + 1].Volume;\r\n var avg = nextAmount - baseAmount;\r\n partialAmount = avg * decimalNumber;\r\n }\r\n if(wholeNumber >= tankChart.length)\r\n baseAmount = tankChart[tankChart.length-1].Volume;\r\n var units = baseAmount + partialAmount;\r\n return convertVolumeToSiteUnits(units, siteUOM, tankUOM);\r\n }\r\n return {\r\n loadTanks: function (paperworkBatchKey, siteKey, paperworkDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetPaperworkTanks/',\r\n data: {\r\n PaperworkBatchKey:paperworkBatchKey,\r\n SiteKey:siteKey,\r\n PaperworkDate:paperworkDate\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n calculateTankDepth: function(tank, isMetric){\r\n var base = isMetric?100:12;\r\n var units = (tank.LargeUnits * base) +\r\n tank.SmallUnits +\r\n tank.PartialUnits;\r\n return units;\r\n },\r\n calculateWaterDepth: function(tank){\r\n var units = tank.WaterSmallUnits +\r\n tank.WaterPartialUnits;\r\n return units;\r\n },\r\n getVolumeFromTankChart: function(tank, tankCharts){\r\n return getVolume(tankCharts, tank, tank.Depth);\r\n },\r\n getMaxVolumeFromTankChart: function (tank, tankCharts) {\r\n var tankUOM = tank.UnitOfMeasure;\r\n var siteUOM = tank.MeasurementType;\r\n var tankChartKey = tank.TankTypeKey;\r\n var tankChart = tankCharts[tankChartKey + \"\"];\r\n var maxVolume = tankChart[tankChart.length - 1].Volume;\r\n return convertVolumeToSiteUnits(maxVolume, siteUOM, tankUOM);\r\n },\r\n getWaterVolumeFromTankChart: function(tank, tankCharts){\r\n return getVolume(tankCharts, tank, tank.WaterDepth);\r\n },\r\n adjustVolumeForTemperature: function(useTempCorrections, tank, tempCharts){\r\n if(!useTempCorrections || tank.TmpChartKey <= 0)\r\n return tank.Quantity;\r\n //var tankUOM = tank.UnitOfMeasure;\r\n //var siteUOM = tank.MeasurementType;\r\n var temperature = tank.Temperature;//$scope.convertTemp(tank.Temperature,siteUOM,tankUOM);\r\n var tmpChartKey = tank.TmpChartKey;\r\n var tempChart = tempCharts[tmpChartKey + \"\"];\r\n var conversionFactor = 1;\r\n for(var x=0; x= temperature){//look for the temperature or the next greatest temperature.\r\n conversionFactor = tempChart[x].ConvFactor;\r\n break;\r\n }\r\n conversionFactor = tempChart[x].ConvFactor;//This will set it to the max conversion factor if none is found.\r\n }\r\n var qty = tank.Quantity;\r\n var wQty = tank.WaterQuantity;\r\n if(tank.TmpChartUseNetQty)\r\n return ((qty - wQty) / conversionFactor) + wQty;\r\n return qty / conversionFactor;\r\n\r\n },\r\n savePaperworkTanks: function(tankHeaders, tanks) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SavePaperworkTanks/',\r\n data: {\r\n PaperworkTankHeader: tankHeaders,\r\n PaperworkTanks: tanks\r\n }\r\n }\r\n );\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n SERVICES.Payments MODULE\r\n\r\n Defines the module namespace for the movie services\r\n\r\n ============================================================================= */\r\nangular.module('services.payments', ['core.ajax']);\r\n\r\n/* ==============================================================================\r\n\r\n Payments SERVICE\r\n\r\n Contains the factories and services that pertain to retrieving\r\n and saving movies.\r\n\r\n ============================================================================= */\r\nangular.module('services.payments',[]).factory('PaymentService', function($q, apiService, $rootScope) {\r\n\r\n 'use strict';\r\n return{\r\n getPayment : function(customerKey, webPaymentKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method:'POST',\r\n url:'../api/RetrieveWebPayment/',\r\n data: {\r\n CustomerKey:customerKey,\r\n WebPaymentKey:webPaymentKey\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n // Let's return our promise back to the caller\r\n return deferred.promise;\r\n },\r\n getBudgetPaymentContext: function (customerKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method: 'POST',\r\n url: '../api/BudgetWebPaymentContext/',\r\n data: {\r\n CustomerKey: customerKey\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n savePayment : function(payment){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method:'POST',\r\n url:'../api/WebPayment/',\r\n data: {\r\n CustomerScheduledPayment : payment.CustomerScheduledPayment,\r\n Invoices : payment.Invoices,\r\n Credits : payment.Credits\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getScheduledPaymentHistoryContext: function(customerKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method:'POST',\r\n url:'../api/WebPaymentHistoryContext/',\r\n data: {\r\n CustomerKey:customerKey\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getScheduledPayments: function(customerKey, accountKey, startDate, endDate, scheduled, processed, cancelled){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {\r\n method:'POST',\r\n url:'../api/WebPaymentHistory/',\r\n data: {\r\n CustomerKey: customerKey,\r\n AccountKey: accountKey,\r\n StartDate: startDate,\r\n EndDate: endDate,\r\n Scheduled: scheduled,\r\n Canceled: cancelled,\r\n Processed: processed\r\n }\r\n };\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n lockPayments: function (custContKey, emailAddress, custKey, skipBroadcast) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/LockCustomerPayments/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n if(data.Data.CmdSuccess)\r\n {\r\n if (!skipBroadcast) { $rootScope.$broadcast('event:PaymentLocked', { CustContKey: custContKey, EmailAddress: emailAddress, CustomerKey: custKey }); }\r\n deferred.resolve(data.Data);\r\n }else{\r\n deferred.reject(data.Data);\r\n }\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n unLockPayments: function(custContKey, emailAddress, custKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/UnLockCustomerPayments/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n $rootScope.$broadcast('event:PaymentUnlocked', {});\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n lockInvoices: function (custContKey, emailAddress, custKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/LockCustomerInvoices/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n if(data.Data.CmdSuccess)\r\n {\r\n $rootScope.$broadcast('event:InvoiceLocked', { CustContKey: custContKey, EmailAddress: emailAddress, CustomerKey: custKey });\r\n deferred.resolve(data.Data);\r\n }else{\r\n deferred.reject(data.Data);\r\n }\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n unlockInvoices: function(custContKey, emailAddress, custKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/UnLockCustomerInvoices/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n $rootScope.$broadcast('event:InvoiceUnlocked', {});\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n lockPaymentsAndInvoices: function (custContKey, emailAddress, custKey) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/LockBothPaymentsAndInvoices/',\r\n data: {\r\n CustContKey: custContKey,\r\n EmailAddress: emailAddress,\r\n CustomerKey: custKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n if (data.Data.CmdSuccess) {\r\n deferred.resolve(data.Data);\r\n } else {\r\n deferred.reject(data.Data);\r\n }\r\n }\r\n );\r\n return deferred.promise;\r\n },\r\n getTermsAndConditions: function(termsKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/GetLegalTerms/',\r\n data: {\r\n LegalTermKey: termsKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n ); return deferred.promise;\r\n },\r\n acceptTermsAndConditions: function(termsKey, custKey, contactKey){\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method:'POST',\r\n url:'../api/AcceptLegalTerms/',\r\n data: {\r\n LegalTermKey: termsKey,\r\n CustomerKey: custKey,\r\n CustomerContactKey: contactKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function(data){\r\n deferred.resolve(data.Data);\r\n }\r\n ); return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n Profile SERVICE\r\n\r\n Contains the core profile related code\r\n\r\n ============================================================================= */\r\nangular.module('services.WebProfile', ['core.ajax']);\r\n\r\nangular.module('services.WebProfile', []).factory('WebProfileService', function ($q, $rootScope, ajax, apiService)\r\n{\r\n 'use strict';\r\n function retrieveWebProfileFromAPI(profile)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/WebProfile/',\r\n data: {\r\n WebProfileKey: profile\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n\r\n function retrieveWebProfileMessageFromAPI(webProfileKey, messageType)\r\n {\r\n var deferred = $q.defer();\r\n\r\n if (webProfileKey.toNumber() < 1)\r\n {\r\n deferred.resolve({\r\n Key: 0,\r\n Text: '',\r\n Timestamp: null,\r\n Type: null,\r\n WebProfileKey: 0\r\n });\r\n }\r\n else\r\n {\r\n var ca = ($rootScope.$$childHead.appInfo && $rootScope.$$childHead.appInfo.webUser && $rootScope.$$childHead.appInfo.webUser.CurrentAuthorization) ?\r\n $rootScope.$$childHead.appInfo.webUser.CurrentAuthorization : null;\r\n var custKey = ca ? ca.CustKey : null;\r\n var contactKey = ca ? ca.CustContKey : null;\r\n\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'post',\r\n url: '../api/WebProfileMessage/',\r\n data: {\r\n WebProfileKey: webProfileKey,\r\n MessageType: messageType,\r\n CustomerKey: custKey,\r\n ContactKey: contactKey\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data.WebProfileMessage);\r\n }\r\n );\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function iniializeFromApi()\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = {};\r\n\r\n apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/Init/',\r\n params: {}\r\n });\r\n\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getWebAudits(beginDate, endDate, menuCode, includeAdds, includeChanges, includeDeletes, includeEvents, custKey, nameEmail)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetWebAuditEntries/',\r\n data: {\r\n BeginDate : beginDate,\r\n EndDate: endDate,\r\n MenuCode: menuCode,\r\n IncludeAdds: includeAdds,\r\n IncludeChanges: includeChanges,\r\n IncludeDeletes: includeDeletes,\r\n IncludeEvents: includeEvents,\r\n CustKey: custKey,\r\n NameEmail: nameEmail,\r\n MaxRows: 500\r\n }\r\n });\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getARCustWebSheet()\r\n {\r\n return [].slice.call(document.styleSheets).find({title: \"ARCustWebCSS\"});\r\n }\r\n\r\n function setProfileColor(pcolor)\r\n {\r\n if (!$rootScope.profileClasses) {\r\n $rootScope.profileClasses = [];\r\n }\r\n else {\r\n resetStyle('backgroundColor', \"rgb(254, 254, 254)\", $rootScope.profileClasses);\r\n resetStyle('color', \"rgb(254, 254, 254)\", $rootScope.profileClasses);\r\n }\r\n cssOverrideStyle('backgroundColor', \"rgb(254, 254, 254)\", '#' + pcolor, $rootScope.profileClasses);\r\n cssOverrideStyle('color', \"rgb(254, 254, 254)\", '#' + pcolor, $rootScope.profileClasses);\r\n }\r\n\r\n function setLandingColor(pcolor)\r\n {\r\n if (!$rootScope.landingClasses) {\r\n $rootScope.landingClasses = [];\r\n }\r\n else {\r\n if ($rootScope.profileClasses) {\r\n resetStyle('backgroundColor', \"rgb(254, 254, 254)\", $rootScope.profileClasses);\r\n resetStyle('color', \"rgb(254, 254, 254)\", $rootScope.profileClasses);\r\n }\r\n resetStyle('backgroundColor', \"rgb(253, 253, 253)\", $rootScope.landingClasses);\r\n resetStyle('color', \"rgb(253, 253, 253)\", $rootScope.landingClasses);\r\n }\r\n\r\n cssOverrideStyle('backgroundColor', \"rgb(253, 253, 253)\", '#' + pcolor, $rootScope.landingClasses);\r\n cssOverrideStyle('color', \"rgb(253, 253, 253)\", '#' + pcolor, $rootScope.landingClasses);\r\n }\r\n\r\n function cssOverrideStyle(attribute, match, value, classNames)\r\n {\r\n var pdiSheet = getARCustWebSheet();\r\n if (!angular.isUndefinedOrNullOrEmpty(pdiSheet)) {\r\n var rules = pdiSheet.cssRules || pdiSheet.rules;\r\n for (var i = 0; i < rules.length; ++i) {\r\n if (!angular.isUndefinedOrNullOrEmpty(rules[i].style) && rules[i].style[attribute] === match) {\r\n rules[i].style[attribute] = value;\r\n classNames.push([rules[i].selectorText, rules[i].style[attribute]]);\r\n }\r\n }\r\n }\r\n else\r\n $scope.notifier.show('Stylesheet could not be loaded.', 'error');\r\n\r\n }\r\n\r\n function resetStyle(attribute, match, classNames)\r\n {\r\n var pdiSheet = getARCustWebSheet();\r\n if (!angular.isUndefinedOrNullOrEmpty(pdiSheet)) {\r\n var rules = pdiSheet.cssRules || pdiSheet.rules;\r\n for (var x = 0; x < classNames.length; x++) {\r\n for (var i = 0; i < rules.length; ++i) {\r\n if (!angular.isUndefinedOrNullOrEmpty(rules[i].style) && rules[i].selectorText === classNames[x][0] && rules[i].style[attribute] === classNames[x][1]) {\r\n rules[i].style[attribute] = match;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function cssOverrideAllStyle(attribute, value)\r\n {\r\n var pdiSheet = getARCustWebSheet();\r\n if (!angular.isUndefinedOrNullOrEmpty(pdiSheet)) {\r\n var rules = pdiSheet.cssRules || pdiSheet.rules;\r\n\r\n for (var i = 0; i < rules.length; ++i) {\r\n if (attribute in rules[i].style)\r\n rules[i].style[attribute] = value;\r\n }\r\n }\r\n }\r\n\r\n function cssAddStyle(selector, attribute, value)\r\n {\r\n var pdiSheet = getARCustWebSheet();\r\n if (!angular.isUndefinedOrNullOrEmpty(pdiSheet)) {\r\n var rules = pdiSheet.cssRules || pdiSheet.rules;\r\n var index = rules.length;\r\n\r\n if (\"insertRule\" in pdiSheet) {\r\n pdiSheet.insertRule(selector + \"{ \" + attribute + \": \" + value + \" }\", index);\r\n }\r\n else {\r\n pdiSheet.addRule(selector, attribute + \": \" + value, index);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n setProfileColor: setProfileColor,\r\n setLandingColor: setLandingColor,\r\n setWebProfile: function (profile)\r\n {\r\n var deferred = $q.defer();\r\n if (amplify.store(\"pnprofile\")) {\r\n setLandingColor(amplify.store(\"pnprofile\").ArWebProfile.PrimaryColor);\r\n deferred.resolve(amplify.store(\"pnprofile\"));\r\n } else {\r\n retrieveWebProfileFromAPI(profile).then(function (data)\r\n {\r\n var webProfileWithContext = angular.fromJson(JSON.parse(data)).WebProfileWithContext;\r\n setLandingColor(webProfileWithContext.ArWebProfile.PrimaryColor);\r\n amplify.store(\"pnprofile\", webProfileWithContext);\r\n deferred.resolve(webProfileWithContext);\r\n });\r\n }\r\n return deferred.promise;\r\n },\r\n initialize: function ()\r\n {\r\n var deferred = $q.defer();\r\n var sCfg;\r\n var timeout = parseInt(20, 10) * 60 * 1000;\r\n\r\n iniializeFromApi().then(function (data)\r\n {\r\n sCfg = data.Configuration;\r\n setLandingColor(sCfg.LandingPrimaryColor);\r\n timeout = parseInt(sCfg.Timeout, 10) * 60 * 1000;\r\n $rootScope.timeout = timeout;\r\n deferred.resolve(data);\r\n });\r\n \r\n return deferred.promise;\r\n },\r\n initializeSiteDisabled: function ()\r\n {\r\n var deferred = $q.defer();\r\n\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'GET',\r\n url: '../api/GetSiteDisabledSystemSettings/',\r\n params: {}\r\n });\r\n\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n setLandingColor(data.Data.Configuration.LandingPrimaryColor);\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n\r\n return deferred.promise;\r\n },\r\n getWebProfileMessage: function (webProfileKey, messageType)\r\n {\r\n var deferred = $q.defer();\r\n {\r\n retrieveWebProfileMessageFromAPI(webProfileKey, messageType).then(function (data)\r\n {\r\n deferred.resolve(data.Text);\r\n });\r\n }\r\n return deferred.promise;\r\n },\r\n getWebAudits: getWebAudits\r\n };\r\n});\r\n","angular.module('services.reporting', ['core.ajax'])\n.service('reportingService', function ($q, apiService) {\n 'use strict';\n\n function renderReportApi (parameters) {\n var deferred = $q.defer();\n var apiSvcSettings = new ApiServiceSettings(\n {\n method: 'POST',\n url: '../api/RenderSSRS',\n data: {\n Parameters: parameters\n }\n }\n );\n apiService.execute(apiSvcSettings).then(\n function (data) {\n deferred.resolve(data.Data);\n }\n );\n return deferred.promise;\n }\n\n /**\n * the blob object is only valid for the window it is on,\n * once the window closes the url if captured is no longer valid\n * @param {any} report\n **/\n function createBlob(report) {\n var bytes = report.ReportBytes;\n var type = report.MimeType;\n\n var raw = atob(bytes);\n var uint8Array = new Uint8Array(raw.length);\n for (var i = 0; i < raw.length; i++) {\n uint8Array[i] = raw.charCodeAt(i);\n }\n var blob = new Blob([uint8Array], { type: type });\n\n return blob;\n }\n\n function download(blobUrl, filename) {\n var a = document.createElement(\"a\");\n if (a.click) {\n // Use a.click() if available. Otherwise, Chrome might show\n // \"Unsafe JavaScript attempt to initiate a navigation change\n // for frame with URL\" and not open the PDF at all.\n // Supported by (not mentioned = untested):\n // - Firefox 6 - 19 (4- does not support a.click, 5 ignores a.click)\n // - Chrome 19 - 26 (18- does not support a.click)\n // - Opera 9 - 12.15\n // - Internet Explorer 6 - 10\n // - Safari 6 (5.1- does not support a.click)\n a.href = blobUrl;\n a.target = \"_parent\";\n // Use a.download if available. This increases the likelihood that\n // the file is downloaded instead of opened by another PDF plugin.\n if (\"download\" in a) {\n a.download = filename;\n }\n // must be in the document for IE and recent Firefox versions.\n // (otherwise .click() is ignored)\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n } else {\n if (window.top === window &&\n blobUrl.split(\"#\")[0] === window.location.href.split(\"#\")[0]) {\n // If _parent == self, then opening an identical URL with different\n // location hash will only cause a navigation, not a download.\n var padCharacter = blobUrl.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n blobUrl = blobUrl.replace(/#|$/, padCharacter + \"$&\");\n }\n window.open(blobUrl, \"_parent\");\n }\n }\n\n /**\n * Takes the specified parameters and renders a report in the pdfjs viewer\n * @param {string} parms\n **/\n var renderReport = function (parms) {\n var dataParams = parms + \"&export=False\";\n\n renderReportApi(dataParams).then(function (report) {\n if (report) {\n var url = \"static/pdfjs/web/viewer.html?file=\";\n\n var blob = createBlob(report);\n var file = URL.createObjectURL(blob);\n url = url + encodeURIComponent(file);\n\n $(\"#Main\").attr(\"src\", url);\n }\n });\n };\n\n /**\n * Takes the specified parameters and report format and\n * generates a report that is downloaded\n * @param {string} parms\n * @param {string} format\n **/\n var exportReport = function (parms, format) {\n var dataParams = parms + \"&export=True&exportFormat=\" + format;\n\n renderReportApi(dataParams).then(function (report) {\n if (report) {\n var blob = createBlob(report);\n var isIE = false || !!document.documentMode;\n if (isIE) { // support for ie11\n window.navigator.msSaveBlob(blob, report.Filename);\n } else {\n var file = URL.createObjectURL(blob);\n var filename = report.Filename;\n download(file, filename);\n\n // Releases the resource after the file is downloaded\n URL.revokeObjectURL(file);\n }\n }\n });\n };\n\n return {\n renderReport: renderReport,\n exportReport: exportReport\n };\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\n/* ==============================================================================\r\n\r\n Profile SERVICE\r\n\r\n Contains the core profile related code\r\n\r\n ============================================================================= */\r\nangular.module('services.reports', ['core.ajax']);\r\n\r\nangular.module('services.reports', []).factory('ReportServiceService', function ($q, $rootScope, ajax, apiService)\r\n{\r\n 'use strict';\r\n return {\r\n encrypt: function(data) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/EncryptString/',\r\n data: data\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.userAccounts', ['core.ajax']);\r\n\r\nangular.module('services.userAccounts', []).service('userAccountService', function ($q, apiService)\r\n{\r\n 'use strict';\r\n function execute(apiSvcSettings, deferred)\r\n {\r\n apiService.execute(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n }\r\n\r\n function executeAndNotify(apiSvcSettings, deferred)\r\n {\r\n apiService.executeAndNotifyOnSuccess(apiSvcSettings).then(\r\n function (data)\r\n {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n }\r\n\r\n return {\r\n loadContactContext: function (customerContactKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetContactContext/',\r\n data: {\r\n CustomerContactKey: customerContactKey\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n execute(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n },\r\n listContacts: function (customer)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/ListCustomerContacts/',\r\n data: {\r\n CustomerKey: customer\r\n },\r\n skipValidations: true\r\n }\r\n );\r\n execute(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n },\r\n getBlankContact: function ()\r\n {\r\n var contact = {\r\n Active: -1,\r\n AltEmailAddress: \"\",\r\n AltExt: \"\",\r\n AltExt2: \"\",\r\n AltPhone: \"\",\r\n AltPhone2: \"\",\r\n AltPhone2Formatted: \"\",\r\n AltPhone2Type: -1,\r\n AltPhoneFormatted: \"\",\r\n AltPhoneType: -1,\r\n AltSpdDial: \"\",\r\n AltSpdDial2: \"\",\r\n CnSalKey: null,\r\n CPPrcNtcAllProducts: 0,\r\n CPPrcNtcChgByDateTime: null,\r\n CPPrcNtcChgByUser: null,\r\n CPPrcNtcSignupDateTime: null,\r\n CPPrcNtcSignupUser: null,\r\n CreatedBy: \"\",\r\n CustKey: 0,\r\n EmailAddress: \"\",\r\n EmailAddressOrig: \"\",\r\n Ext: \"\",\r\n FAX: \"\",\r\n FAXExt: \"\",\r\n FAXFormatted: \"\",\r\n FAXSpdDial: \"\",\r\n FaxPrefix: \"\",\r\n FirstName: \"\",\r\n Greeting: \"\",\r\n Key: -1,\r\n LastChgBy: \"\",\r\n LastName: \"\",\r\n Notes: \"\",\r\n Phone: \"\",\r\n PhoneFormatted: \"\",\r\n PhoneType: -1,\r\n ReceiveMarketingLetters: false,\r\n SpdDial: \"\",\r\n TextAddressPhone: -1,\r\n TextAddressTextMsgDomKey: -1,\r\n Title: \"\",\r\n WebActive: false,\r\n AllWebFunctions: false,\r\n WebMustChgPwd: -1,\r\n WebPWAccessSingleSite: 0,\r\n WebPWAccessSiteKey: null,\r\n WebPwd: \"\",\r\n WebQuestionAnswer: \"\",\r\n WebQuestionType: -1,\r\n Timestamp: \"\",\r\n EditorName: null,\r\n EditorEmailAddress: null,\r\n ApplyToAll: false,\r\n CustomerContactWebFunctions: [],\r\n CustomerContactWebAlerts: [],\r\n ConfirmEmail: \"\"\r\n };\r\n return contact;\r\n },\r\n saveContact: function (customerContact)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/SaveContact/',\r\n data: {\r\n CustomerContact: customerContact\r\n }\r\n }\r\n );\r\n executeAndNotify(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n },\r\n unsubscribeContact: function (contKey)\r\n {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/UnsubscribeContact/',\r\n data: {\r\n ContactKey: contKey\r\n }\r\n }\r\n );\r\n execute(apiSvcSettings, deferred);\r\n return deferred.promise;\r\n }\r\n };\r\n});","/**\r\n * Created by rhampton on 7/11/2014.\r\n */\r\nangular.module('services.warehousePriceNotices', ['core.ajax']);\r\n\r\nangular.module('services.warehousePriceNotices',[]).service('warehousePriceNoticesService', function($q, apiService) {\r\n 'use strict';\r\n return {\r\n loadWarehousePrices: function(custKey, startDate, endDate) {\r\n var deferred = $q.defer();\r\n var apiSvcSettings = new ApiServiceSettings(\r\n {\r\n method: 'POST',\r\n url: '../api/GetWarehousePriceNotices/',\r\n data: {\r\n CustKey:custKey,\r\n StartDate:startDate,\r\n EndDate:endDate\r\n }\r\n }\r\n );\r\n apiService.execute(apiSvcSettings).then(\r\n function (data) {\r\n deferred.resolve(data.Data);\r\n }\r\n );\r\n return deferred.promise;\r\n }\r\n };\r\n});"]}