{"version":3,"sources":["components/CheckoutButton/constants.js","lib/landingPage.js","lib/contingencies.js","lib/apolloLinks/spinnerLink.js","lib/apolloLinks/instrumentationLink.js","lib/apolloLinks/authLink.js","lib/checkoutError.js","lib/fraudNet.js","shared/components/SpinnerOverlay/styles.css","shared/components/EmptyLoader/index.js","components/Feature/index.js","lib/credit.js","lib/cookie.js","shared/components/Spinner/styles.css","lib/cplUtils.js","components/CreditOffer/index.js","components/CreditOffer/Mutation/index.js","components/CreditOffer/utils.js","authStates.js","shared/components/LoadingContainer/index.js","components/CreditOffer/Loading/index.js","shared/components/Spinner/index.js","shared/components/SpinnerOverlay/index.js","components/Disclaimer/CPADisclaimer/query.gql.js","components/Sca/query.gql.js","components/SharedCard/constants.js","lib/apolloCache.js","components/SharedCard/SharedCardWait/Mutation/index.js","lib/utils.js","lib/redirects.js","lib/invalidateCheckoutSessionPlan.js","lib/preRenderSteps.js","lib/linkCardByPthree/index.js","lib/linkCardByPthree/performReplanAfterPthreeFlow.js","AppBootstrap.js","C3Bootstrap.js","AppIndex.js","lib/fiBalance/checkFIBalance.js","lib/fiBalance/index.js","lib/configureApolloClient.js","features.js","components/Spinner/ReturnToMerchantSpinner/index.js","components/Feature/FeatureContainer.js","components/Feature/AnimatedContainer.js","lib/windowEligibility.js","App.js","components/CreditOffer/Loading/styles.css","components/ErrorBoundary/ErrorBoundary.js","components/ErrorBoundary/index.js","polyfills.js","index.js","preInit.js","App.global.css","components/Spinner/DefaultSpinner/index.js","components/Spinner/index.js","lib/content.js","lib/lazyLoad.js","components/ReturnFromCredit/utils.js","components/Feature/hooks.js"],"names":["SHOW_POLICIES_COUNTRIES_LIST","LANDING_PAGE","REVIEW","CHOICE","HANDLED_CONTINGENCIES","SHARED_CARD_CONTINGENCIES","GLOBAL_CONTINGENCIES_HANDLERS","VERIFY_USER_IDENTITY","errorData","step_up_context","redirectToAuthChallenge","redirectGenericError","PAYER_ACTION_REQUIRED","message","cause","resolution","resolutionName","name","isIframe","fallback","reason","redirectToNegativeBalanceRecovery","PAYER_AUTHENTICATION_REQUIRED","logger","cal","info","isObject","redirectToRiskyLogin","extraParams","lite","fromLite","invalidateCheckoutSessionPlan","ulClientKey","ulClientRedirect","LINK_AND_PAY_TOKENS_MISMATCH","redirectToLogout","hermes","PAYER_INVALID_FOR_PAYMENT","TRANSACTION_REFUSED","code","replace","UNRECOVERABLE_ERROR","spinnerLink","ApolloLink","operation","forward","operationName","variables","operationType","getOperationType","spinnerType","SPINNER_TYPES","DEFAULT","PROCESS_CARD","PROCESS_INCENTIVE","cryptocurrencyQuoteId","CRYPTO_SELLING","triggerToggleSpinner","visible","updateFeature","data","type","Observable","observer","subscription","subscribe","next","result","error","statusCode","complete","bind","unsubscribe","instrumentationLink","logFlushed","payload","payloadResolvers","is_gambling","get","Object","keys","forEach","key","undefined","addToPayload","value","isUndefined","this","logPayload","fpti","TRANSITION_PAYLOAD","from","to","logPayloadIfReady","some","k","resolveAndLog","window","logCPLPhase","resolvedValue","err","stack","toString","request","authLink","headers","accessToken","getAccessToken","setContext","prevContext","oldAccessToken","newAccessToken","params","euat","location","hash","substr","LOG_PREFIX","attemptRedirect","fallbackSettings","getFallback","Error","e","fallbackTriggered","redirectOnError","CheckoutError","networkError","checkoutError","parsedError","graphQLErrors","length","details","map","parseError","includes","ecToken","getGlobals","user","timestamp","Date","now","token","soldOutUrl","soldoutUrl","APP_NAME","getClientMetadataID","defaultID","urlParams","xprops","clientMetadataID","initFraudNet","getToken","fraudNetEndpoint","deployEnv","fraudNetConfig","userToken","sourceId","endpoint","addCrossOrigin","production","typingSpeed","delegate","fields","id","min","fraudNet","module","exports","EmptyLoader","resolveWrappedComponentByExperiment","wrappedComponent","experimentResult","prop","mapContingencies","contingencies","reduce","obj","mapFeature","feature","mapFeatures","features","mapQueriesData","queries","nullToUndefined","push","getQueriesByFetchPolicy","fetchPolicy","negation","filter","q","resolveLazyFeatureComponent","WrappedComponent","finalData","LoadingComponent","ErrorComponent","country","Feature","FeatureComponents","ResolvedWrappedComponent","experiment","getResolvedTreatment","wrappersByExperiment","experiments","wrappersByCountry","countrySpecific","countrySpecificWrapper","resolveWrappedComponent","lazyComponent","loading","config","interstitialOptions","interstitial","shouldAutoDisplayComponent","shouldLoadFeatureComponent","shouldLoadFeatureInstance","withoutLoadingState","subscribeTo","animateOptions","shouldKeepLoadingStateOnError","subscribeToContingencies","Composed","props","cacheOnlyGqlQueries","cacheOnlyGqlQueryResult","useGqlNetworkQuery","featuresQueryResult","mapFeaturesQueryResult","useFeatureQuery","find","f","getFeatureById","contingenciesQueryResult","contingency","indexOf","mapContingenciesQueryResult","useContingencyQuery","networkGqlQueries","networkGqlQueryResult","skip","enabled","queriesResult","isGqlLoading","getIsGqlQueriesLoading","isGqlDataResolved","getIsGqlDataResolved","hasError","getIsGqlHasError","getShouldLoadLoadingComponent","allQueryData","customProps","shouldLoadFeature","isFunction","Boolean","getShouldLoadFeatureComponent","autoDisplay","isControl","getShouldAutoDisplayComponent","shouldTriggerInitialCPLEvent","updateHasContingencies","disableInitialCPLEvent","shouldLoadInstance","getShouldLoadFeatureInstance","onBeforeCloseFn","showCloseBtnFunc","showCloseBtn","headerTitleFunc","headerTitle","typeFunc","resolveInterstitialOptions","FeatureComponent","getCountry","FeatureContainer","render","React","PureComponent","CLEAR_CHECKOUT_SESSION_CREDIT_FINANCING_OPTION_MUTATION","creditPpcOffersGqlParams","areCookiesDisabled","filterOutCreditInstruments","fundingOption","isPayLaterFundingInstrument","fundingInstrument","clearCreditFinancingOption","getClient","mutate","mutation","context","skipFallback","then","catch","finally","returnFromCreditPayInFull","status","CHECKOUT_BUTTON_STATES","RESOLVED","flow","setCookieEnabled","navigator","cookieEnabled","PAGE","ECONSENT","ADD_FI","ADD_SHIPPING_ADDRESS","_store","triggerInitialCPLEvent","hasContingencies","triggerCPLLatencyMetricsFPTI","page","timeToInteract","cplPhases","comp","rest","query","chunk","serverSideCplMetrics","toLowerCase","start","tt","populateServerSideCplMetrics","visibilityEvents","hidden","timeTaken","populateVisibilityMetrics","cplLatencyMetrics","state_name","transition_name","page_name","cpl_comp_metrics","JSON","stringify","cpl_query_metrics","cpl_chunk_metrics","total_page_load_time","updateTriggerInitialCPLEvent","state","getTimeToInteract","cpl","logPerformance","action","uicomp","uitype","CreditOfferFragment","definitions","names","definition","kind","FundingOptionFragment","CreditFinancingOptionFragment","CreditOffer","planningBatch","getCreditOffer","content","every","placement","choiceLandingPage","SELECT_FI","landingPage","Loading","US","GB","CREATE_CREDIT_KEY_MUTATION","createReturnUri","returnUriBase","protocol","host","newParams","buildURL","mapCreditPPCOffer","presentmentType","creditPPCOffers","offer","Product","PresentmentType","prevOffer","currentOffer","rank","checkoutSession","fundingOptions","flags","showPPCreditOffer","Array","isArray","OfferCategory","REVIEW_PAYLOAD","isCreditSecondButton","getCredit","creditFundingInstrument","getCreditFundingInstrument","allPlans","plan","isSelected","isPreferred","showPPCReuseBanner","filteredCreditPPCOffers","redirectToHermesCape","creditOffer","offerType","OfferType","isInstallmentCreditType","redirectToCapeWithCreditKey","creditFundingInstrumentId","userSelectedAddressId","userSelectedPreferredShippingAddressId","pageContext","getPageContext","isCrossCurrencyTransaction","creditIncentiveDetails","getCreditIncentiveDetails","cartAmount","CartAmount","cartCurrency","CartAmountCurrencyCode","warn","triggerCreateCreditKeyMutation","response","createCapeMayflyPayload","redirectToCape","creditSecondButtonRedirect","creditRedirectExperiment","newUser","isEligibleForCreditSecondButton","ppc_ineligible","fallbackToHermes","getIsRememberedAuthState","getAuthState","getIsUserOneTouchLogin","getClaims","getIsUserSkipFacebookLogin","getIsUserDeviceTokenImplicitLogin","className","data-testid","children","clipPathId","uniqueStr","gradientId","styles","viewBox","preserveAspectRatio","clipPath","x","y","width","height","fill","rx","ry","offset","stopColor","stopOpacity","attributeName","values","dur","repeatCount","Spinner","SpinnerImage","SpinnerLoader","SpinnerOverlay","extraMessage","tabIndex","role","cx","SpinnerMessage","SpinnerContent","CPA_DISCLAIMER_QUERY","SCA_CONTINGENCY_QUERY","PaymentContingenciesFragment","apolloInMemoryCache","options","InMemoryCache","dataIdFromObject","object","__typename","addressId","defaultDataIdFromObject","CHECKOUT_SESSION_REPLAN_MUTATION","DeclinedInstrumentFragment","_isViewportSmall","_getDeviceAndNetworkInfo","_isIframe","isPopup","_isPopup","_resetParams","_params","isIncontext","isLegacyIncontext","isNewIncontext","postToMerchantForOldIncontext","msg","flush","opener","userAgent","match","postMessage","bridge","frames","PayPalBridge","returnToParent","isVzeroIntegration","incontext","nolegacy","setDestination","featureId","BrowserStorage","set","clearDestination","remove","isDestination","destination","memoized","storageDestination","split","destFeatureId","reset","getProtocolType","url","urlType","deepLinkRegex","RegExp","nonStandardRegex","standardRegex","relativePathRegex","isDeepLink","test","isNonStandard","isStandard","isRelativePath","creditOfferType","isPaypalCreditFundingInstrument","selectedFundingOption","item","isIncentivesPlan","fundingSources","incentives","source","getGplOffer","creditAsFIOffers","product","gplAmountDueTodayDetails","installmentsSchedules","gplAmountDueToday","downPayment","installmentsSchedule","paymentType","totalPayment","dueDate","getContent","getEligibilityForAPQ","treatment_name","arrayBufferToBase64","buf","btoa","String","fromCharCode","apply","Uint8Array","getIntegrationPayload","sdkMeta","xComponent","xcomponent","BLACKLISTED_REDIRECT_QUERY_PARAMS","flushLogsAndRedirect","redirect","Promise","resolve","logName","doRedirect","redirected","setTimeout","mapCheckoutJsContext","returnUrl","cancelUrl","billingToken","intent","orderID","payerID","userId","paymentToken","paymentID","paymentId","returnCancel","currencyCode","merchantName","errorCode","native_xo","reconstructReturnUrl","RETURN_PAYLOAD","currency_code","onCancel","updateParent","ERROR_PAYLOAD","returnToMerchantAfterApprove","approveMemberPaymentResultPayload","buyer","cart","RETURN_TO_MERCHANT","updatedReturnUrl","onAuthorize","vzero","getConnectURL","connectURL","assign","rejectOnTimeout","getIsResolveThreeDS","payment_id","return_url","updated_return_url","merchant_name","returnAuthorize","href","queryParams","cancelLink","genericErrorUrl","paramKeys","blacklistedKey","redirectToOpenBanking","encryptedId","openBankingUrl","redirectToP3Flow","partnerName","currentQueryParam","partner_name","returnUri","p3StartUrl","negativeBalanceRecoveryUrl","uri","negativeBalanceRecoveryEndpoint","redirectToLogin","ctx","ulAsLandingUrl","pathname","logoutUrl","redirectedToAuthChallenge","stepupContext","atoSuccess","authEndPoint","authNodeWebEndpoint","authchallengeEndpoint","authChallengeUrl","threeDsExperienceVars","scaContingency","baseUrl","getStagingHostName","secureCustomerAuthenticationContext","hashUrl","defaultRemoved","hermesUrl","blacklistRegex","join","windowOpen","reject","isUnsafeRedirect","inputUrl","open","previousParams","previousQueryString","fallbackUrl","isVzero","redirectUri","redirect_uri","fromNative","invalidIntegrationType","native","payer_id","opType","return_uri","finalReturnUrl","reconstruct_return_url","redirectOnThreeDSFailed","originApp","threeDSFailed","THREE_DS_PAYLOAD","redirectUrl","redirectToSameLocationWithNewParam","newUrl","redirectToMNWAddBank","INVALIDATE_CHECKOUT_SESSION_PLAN_MUTATION","invalidateCheckoutSessionPlanIfNeeded","client","executePreRenderSteps","checkP3ReturnStep","success_card_num","failed_card_num","errorStatus","successCardNum","parseInt","failedCardNum","logHelper","logFPTI","checkRealTimeCardAddHelper","eventType","checkRealTimeCardAdd","isSuccessCardExists","isFailedCardExists","isNaN","intErrorCode","intErrorDesc","GENERIC_PAYLOAD","int_error_code","int_error_desc","STATE_NAME","addCard","fi_count","flowStatus","pthreeFailureReason","checkCardAdd","numberOfCards","contentKey","updateFeatures","display","initAppQuery","AppBootstrap","ready","componentDidMount","formFactor","logPerformanceNow","integrationType","windowName","networkAndDeviceData","getDeviceAndNetworkInfo","appPerformanceEvents","paypal","allowIframe","top","globals","updateGlobals","access_token","onAuth","checkFIBalanceStep","transition","LOG_TRANSITIONS","BOOTSTRAP","setState","cartTotal","merchantId","onInit","landingUrl","initIncontextFromData","currencyValue","mrid","curr","amt","attachPaJsFpti","TRANSACTION_DETAILS","Component","C3Bootstrap","entry","lang","getLocale","AddCard","ThreeDS","nonce","AppIndex","createCache","stylisPlugins","getDirectionality","stylisRTL","App","CLEAR_REAL_TIME_BALANCE_CONTINGENCY","checkRealTimeBalance","bankId","checkFIBalance","clearRealTimeBalanceContingency","hasFI","fi","INITIAL","blackListedFI","createClient","queryEndpoint","auth","enableBatching","enableRetry","cache","mockLink","schemaLink","setFeatures","continueButtonAction","creditFIOption","forceRadioButton","preferredFundingOptionId","selectedFundingOptionId","usePayAfterDelivery","useSplitBalance","isEnabledForCountry","ElmoExperiment","initWithDefaultTreatment","rewardAmount","rewardCurrency","rewardSelected","TREATMENTS","TREATMENT_1","updateCardNotification","address","card","checkoutButtonLabelOverride","validShippingMethod","inContingencyFlow","showDescriptor","creditOfferLabel","continueButtonText","isChangeShippingLinkClicked","toggle","shareAddressWithDonatee","IS_STICKY_ENABLED","selected","normalizedAddress","originalAddress","giveAtCheckoutOpted","giveAtCheckoutNonProfitId","treatments","isCapOpen","selectedCRCOfferID","selectedFinancingCode","isGPLFi","bankData","hideDeclineNotification","addBankAsDebit","p3Enabled","isSplitReady","userCanSplit","showSplitContinue","showSplitExperience","isNewCard","fundingInstrumentId","phone","number","countryCode","eConsentTriggerRefresh","acknowledged","fundingInstrumentIdToSelect","paycode","encoded","publicKey","isAPQEligible","httpLink","createHttpLink","credentials","batchLink","BatchHttpLink","planningBatchLink","splitLink","getContext","errorLink","onError","desc","errorCodes","Set","getIsLinkAndPay","isContingency","contingencyCode","updateContingency","process","retryLink","RetryLink","delay","initial","max","jitter","attempts","count","skipRetry","batching","retry","apolloCache","apolloClient","ApolloClient","link","apolloLinks","apqSplitLink","createPersistedQueryLink","concat","apqHttpLink","getLinks","resolvers","writeData","defaultApolloCacheState","setClient","ReturnToMerchantSpinner","TREATMENT_2","TREATMENT_3","LazyInterstitialContainer","callOnPropChange","prevProps","propValue","onAutoDisplayChange","onShouldLoadFeatureChange","eligible","logExperiment","eligibility","setEnablement","shouldLoadFeaturePayload","autoDisplayPayload","setEnablementPayload","componentDidUpdate","prevState","snapshot","renderWrappedComponent","isLoading","renderInterstitial","renderWithAnimateHeight","animateOpacity","animateContainerClass","animateHeight","Fragment","AnimatedContainer","attributes","useState","shouldRender","setRender","useEffect","duration","isTesting","style","overflow","onAnimationEnd","windowEligible","eligibleForHermione","incontextUnsupportedMessenger","experience","messenger","isPartnerIntegration","isCreditApplyReturnFlow","success","isSkipFacebookLoginFlow","isNewContext","isLegacyContext","ppFrameRedirect","btQueryParams","bt_int_type","webview","isWebView","eligibility_reason","windowEligibility","Hermione","ThreeDSFullPageApp","LinkPayApp","hot","ErrorBoundary","__webpack_public_path__","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","document","documentElement","contains","parentElement","parentNode","nodeType","setPrototypeOf","__proto__","tslib","require","hoistNonReactStatics","__extends","target","Number","__webpack_nonce__","MockedMode","lazy","INIT","initialData","initGlobals","initContent","init","loggerEndpoint","externalName","internalName","experienceName","context_type","common","integration_type","configureApolloClient","MockedModeLoader","Application","ReactDOM","getIsMockedMode","Suspense","getElementById","startApp","settings","debug","DefaultSpinner","SpinnerPortal","createPortal","body","SpinnerComponent","selectedFI","THREE_DS_PROCESSING","useFeature","IGNORE_MISSING_CONTENT_KEYS","shouldIgnoreLoggingMissingContentKeys","ignoreKey","args","i18n","lazyLoadChunkWithRetry","fn","retriesLeft","interval","console","reload","dynamicImport","LoaderComponent","LazyComponent","forwardRef","ref","strToBool","CrossCurrencyTransaction","offerProgramId","offerValue","offerCurrencyCode","offerProgramCode","touchpoint","headlineText","HeadlineText","offerText1","OfferText1","offerText2","OfferText2","termsLink","TermsLink","termsLinkText","TermsLinkText","termsText","TermsText","buyItemId","referenceId","isParamEnabled","mayflyKey","capeUrl","capeEndpoint","getCapeReturnMutationVariables","financial_instrument_id","financial_instrument_details","financing_code","apr","term","credit_type","paypal_subsidy","monthly_percentage_rate","total_cost","total_interest","monthly_payment","currency","financialInstrumentId","financialInstrumentDetails","financingCode","creditType","paypalSubsidy","monthlyPercentageRate","totalCost","totalInterest","monthlyPayment","handleShipTo","mayflyData","shouldUpdateShipTo","user_selected_address_id","user_selected_preferred_shipping_address_id","idx","getOperationName","useQuery","errorPolicy","getSingleFeatureQuery","getContingenciesQuery","useContingency"],"mappings":"4FAAA,qHAEO,IAAMA,EAA+B,CAAC,KAAM,O,iCCFnD,kCAAO,IAAMC,EAAe,CAC1BC,OAAQ,SACRC,OAAQ,W,iCCFV,+GAeaC,EAAqB,CAChC,mBACA,sBACA,mCACA,0BACA,4BACA,4CACA,wBACA,uBACA,iCACA,8BACA,2BACA,mBACA,oBACA,2BACA,8BACA,wBACA,4BACA,uBAlBgC,OAmB7BC,KAGQC,EAAgC,CAI3CC,qBAJ2C,YAID,IAAD,IAAlBC,iBAAkB,MAAN,GAAM,EAEvC,OAAIA,EAAUC,gBACLC,YAAwBF,EAAUC,iBAElCE,eAQXC,sBAjB2C,YAiBS,IAA5BC,EAA2B,EAA3BA,QAA2B,IAAlBL,iBAAkB,MAAN,GAAM,EACzCM,EAAqDN,EAArDM,MAAR,EAA6DN,EAA9CO,WAAoBC,GAAnC,aAAsD,GAAtD,GAA6BC,KAQ7B,MACY,mCAAVH,GACmB,oCAAnBE,GACCE,qBAKMC,YAAS,CACdC,OAAWP,EAAL,IAAgBC,EAAhB,IAAyBE,IAJ1BK,eAWXC,8BA1C2C,YA0CsB,IAAD,aAAJ,GAAI,EAAhCT,EAAgC,EAAhCA,QAAgC,IAAvBL,iBAAuB,MAAX,GAAW,EAC9De,SAAOC,IAAIC,KAAX,UAA0BZ,EAA1B,eACEA,UACAC,MAAON,EAAUM,OACbY,YAASlB,EAAUO,aAAe,CACpCA,WAAYP,EAAUO,WAAWE,QAIrCU,YAAqB,CACnBP,OAAQP,EACRe,YAAa,CACXC,KAAM,EACNC,SAAU,EACVC,+BAA+B,EAC/BC,YAAa,2BACbC,iBAAkB,6BAQxBC,6BAlE2C,YAkEM,EAAlB1B,UAC7B,OAAO2B,YAAiB,+BAAgC,CACtDC,OAAQ,EACRN,SAAU,KAYdO,0BAjF2C,YAiFG,EAAlB7B,UAC1B,OAAO2B,YAAiB,4BAA6B,CACnDC,OAAQ,EACRN,SAAU,KAIdQ,oBAxF2C,WAyFzC,OAAO3B,YAAqB,CAAE4B,KAAM,iBAAkBC,SAAS,KAGjEC,oBA5F2C,WA6FzC,OAAO9B,YAAqB,CAAE4B,KAAM,sBAAuBC,SAAS,O,yLCtH3DE,EAAc,WACzB,OAAO,IAAIC,cAAW,SAACC,EAAWC,GAChC,IAAQC,EAA6BF,EAA7BE,cAAeC,EAAcH,EAAdG,UACjBC,EAAgBC,YAAiBL,GACnCM,EAAcC,IAAcC,QAEV,kBAAlBN,IACFI,EAAcC,IAAcE,cAGR,4BAAlBP,IACFI,EAAcC,IAAcG,mBAGR,yBAAlBR,GAAA,OAA4CC,QAA5C,IAA4CA,KAAWQ,wBACzDL,EAAcC,IAAcK,gBAG9B,IAAMC,EAAuB,SAACC,GAC5BC,YAAc,UAAW,CAAED,UAASE,KAAM,CAAEC,KAAMX,MAapD,MAToB,aAAlBF,GACkB,0BAAlBF,GACkB,gCAAlBA,GACkB,8BAAlBA,IAEAW,GAAqB,GACrBlC,SAAOC,IAAIC,KAAX,gBAAgCqB,IAG3B,IAAIgB,KAAW,SAACC,GACrB,IAAMC,EAAenB,EAAQD,GAC7B,OAAIoB,EAEKA,EAAaC,UAAU,CAC5BC,KAAM,SAACC,IAKiB,aAAlBnB,GAFgB,UAAlBA,GAA+C,sBAAlBF,KAG7BW,GAAqB,GACrBlC,SAAOC,IAAIC,KAAX,gBAAgCqB,IAGlCiB,EAASG,KAAKC,IAEhBC,MAAO,SAACA,GACN,IAAMC,EAAaD,GAASA,EAAMC,WAEf,MAAfA,GACFZ,GAAqB,GACrBlC,SAAOC,IAAIC,KAAX,oBAAoCqB,KAEpCW,GAAqB,GACrBlC,SAAOC,IAAIC,KAAX,8BAA8C4C,EAA9C,IAA4DvB,IAE9DiB,EAASK,MAAMA,IAEjBE,SAAUP,EAASO,SAASC,KAAKR,KAG9B,WAEDC,GAAcA,EAAaQ,sB,gICkC1BC,EAAsB,I,oBA7FjC,aAAe,IAAD,SACZ,sBACKC,YAAa,EAClB,EAAKC,QAAU,GAEf,EAAKC,iBAAmB,CACtBC,YAAa,SAACV,GAAD,OAAYW,IAAIX,EAAQ,8CAGvCY,OAAOC,KAAK,EAAKJ,kBAAkBK,SAAQ,SAACC,GAC1C,EAAKP,QAAQO,QAAOC,KAVV,E,2GAcdC,aAAA,SAAaF,EAAKG,GACXC,YAAYD,KACfE,KAAKZ,QAAQO,GAAOG,I,EAIxBG,WAAA,WAAc,IAAD,OAEND,KAAKb,aACRK,OAAOC,KAAKO,KAAKZ,SAASM,SAAQ,SAACC,GACjC,IAAMG,EAAQ,EAAKV,QAAQO,GAEN,mBAAVG,IACT,EAAKV,QAAQO,GAAOG,EAAQ,EAAI,MAIpC9D,SAAOkE,KACL,cACAC,6BAAmB,OAAD,QAChBC,KAAM,cACNC,GAAI,uBACDL,KAAKZ,WAIZY,KAAKb,YAAa,I,EAItBmB,kBAAA,WAAqB,IAAD,QACMd,OAAOC,KAAKO,KAAKZ,SAASmB,MAAK,SAACC,GAAD,OAAOT,YAAY,EAAKX,QAAQoB,QAMvFR,KAAKC,c,EAGPQ,cAAA,SAAc7B,EAAQrB,GAAgB,IAAD,OACnCmD,OAAOC,YAAYpD,EAAe,SAClC,IACEiC,OAAOC,KAAKO,KAAKX,kBAAkBK,SAAQ,SAACC,GAC1C,IAAMiB,EAAgB,EAAKvB,iBAAiBM,GAAKf,GACjD,EAAKiB,aAAaF,EAAKiB,MAGzBZ,KAAKM,oBACL,MAAOO,GACP7E,SAAOC,IAAIC,KAAK,6BAA8B,CAAE2C,MAAOgC,EAAIC,OAASD,EAAIE,e,EAI5EC,QAAA,SAAQ3D,EAAWC,GAAU,IAAD,OAE1B,OADAoD,OAAOC,YAAYtD,EAAUE,cAAe,SAAS,GAC9C,IAAIgB,KAAW,SAACC,GACrB,IAAMC,EAAenB,EAAQD,GAE7B,OAAIoB,EACKA,EAAaC,UAAU,CAC5BC,KAAM,SAACC,GACL,EAAK6B,cAAc7B,EAAQvB,EAAUE,eACrCiB,EAASG,KAAKC,IAEhBC,MAAO,SAACA,GACNL,EAASK,MAAMA,IAEjBE,SAAUP,EAASO,SAASC,KAAKR,KAG9B,WAEDC,GAAcA,EAAaQ,mB,GAxFL7B,e,OCGrB6D,EAAW,SAACC,GACvB,OAAO,IAAI9D,cAAW,SAACC,EAAWC,GAChC,IAAM6D,EAAcC,cAUpB,OATA/D,EAAUgE,YAAW,SAACC,GACpB,IAAMC,EAAiBL,EAAQ,0BACzBM,EAAmC,MAAlBC,mBAASC,KAAehB,OAAOiB,SAASC,KAAKC,OAAO,GAAKV,EAGhF,OAFAnF,SAAOC,IAAIC,KAAQ4F,cAAcP,IAAmBC,IACpDN,EAAQ,0BAA4BM,EAC7B,CACLN,cAGG5D,EAAQD,Q,iCCjCnB,4EAMa0E,EAAkB,SAAClG,QAAqB,IAArBA,MAAS,SAIvC,IAAMmG,EAAmBC,cAEzB,IACE,MAAMC,QACN,MAAOC,IAKHzB,OAAO0B,mBAAqBJ,EAAiBK,kBAE/C3B,OAAO0B,mBAAoB,EAC3BxG,YAAS,CAAEC,cA0FFyG,IA5CO,SAAC,GAAwB,IAAtBhH,EAAqB,EAArBA,QAASuD,EAAY,EAAZA,MAGhC,IAAIA,IAASA,EAAM0D,cAAkD,MAAlC1D,EAAM0D,aAAazD,WAAtD,CAIA,IAAM0D,EAAgB,IAAIN,MAAMrD,GAASvD,GAAW,aAEpD,GADAkH,EAAclE,KAAO,WACjBO,EAAO,CACT,IAAM4D,EA9CS,SAAC5D,GAClB,MAAwCA,GAAS,GAAzC6D,EAAR,EAAQA,cAAeH,EAAvB,EAAuBA,aACvB,OAAIG,GAAiBA,EAAcC,OAC1B,CACLrH,QAAyC,MAAhCoH,EAAc,GAAG5D,WAAjB,4BACTA,WAAY4D,EAAc,GAAG5D,WAC7B8D,QAASF,EAAcG,KAAI,qBAAGvH,WAAuByF,YAGrDwB,EACK,CACLjH,QAAQ,kBACRwD,WAAYyD,EAAazD,WACzB8D,QAASL,EAAajH,SAGtBuD,aAAiBqD,MACZ,CACL5G,QAASuD,EAAMvD,QACfsH,QAAS/D,EAAMiC,OAIZ,CAAExF,QAAQ,gBAuBKwH,CAAWjE,GAC/B2D,EAAclH,QAAUmH,EAAYnH,QACpCkH,EAAcI,QAAUH,EAAYG,QAGtC,GAA8B,wBAA1BJ,EAAcI,SAWlB,IAAI/H,IAAsBkI,SAASP,EAAcI,SAAjD,CAIA,IAAM/G,EAAS2G,EAAclH,QAEnB0H,EACNC,cADFC,KAAQF,QAGVhH,SAAOC,IAAI4C,MAAX,kBAAmChD,EAAnC,iBACK2G,EADL,CAEEW,UAAWC,KAAKC,MAChBC,MAAON,KAGTjB,EAAgBlG,QA1BhB,CAAsD,IAAD,MAC7C0H,GAAkB,OAAL1E,QAAK,IAALA,GAAA,UAAAA,EAAO6D,cAAc,UAArB,mBAAyBrE,YAAzB,mBAA+BpD,iBAA/B,eAA0CuI,aAAc,GAC3EpF,YAAc,qBAAsB,CAClCD,SAAS,EACTE,KAAM,CACJkF,oB,iCCxFR,sGAKME,EAAW,gCAEJC,EAAsB,SAACC,GAClC,IAAMC,EAAYnC,mBAElB,OAAIf,OAAOmD,QAAUnD,OAAOmD,OAAOC,iBAC1BpD,OAAOmD,OAAOC,iBACZF,EAAU,sBACZA,EAAU,sBAEVD,GAIEI,EAAe,SAAC,GAAmE,IAAD,aAAP,GAAO,MAAhET,aAAgE,MAAxDU,cAAwD,EAA5CC,EAA4C,EAA5CA,iBAA4C,IAA1BC,UAC7DC,EAAiB,CACrBC,UAAWd,EACXe,SAAUZ,EACVa,SAAUL,EACVM,qBAL2F,MAAd,GAAc,GAKjEC,WAC1BC,YAAa,CAKXC,UAAU,EASVC,OAAQ,CAEN,CAAEC,GAAI,UAAWC,IAAK,GACtB,CAAED,GAAI,cAAeC,IAAK,GAC1B,CAAED,GAAI,aAAcC,IAAK,GACzB,CAAED,GAAI,aAAcC,IAAK,GACzB,CAAED,GAAI,kBAAmBC,IAAK,KAGhCvG,KAAMmF,IAMV,IAEEqB,YAASX,GACTnI,SAAOC,IAAIC,KAAK,gBAAiBiI,GACjC,MAAOhC,GACPnG,SAAOC,IAAIC,KAAK,wBAAyB,CAAEZ,QAAS6G,GAAKA,EAAE7G,a,oBC1D/DyJ,EAAOC,QAAU,CAAC,eAAiB,sCAAsC,eAAiB,sCAAsC,eAAiB,sCAAsC,eAAiB,sCAAsC,eAAiB,sCAAsC,eAAiB,wC,oECGvS,SAASC,IACtB,OAAO,+B,kICMT,IAAMC,EAAsC,SAACC,EAAkBC,GAC7D,GAAID,EAAiBC,GACnB,OAAOD,EAAiBC,GAExB,IAAK,IAAIC,KAAQF,EACf,OAAOA,EAAiBE,IA4FxBC,EAAmB,SAACC,GACxB,YAD+C,IAAvBA,MAAgB,IACjCA,EAAcC,QAAO,SAAC3C,EAAK4C,GAGhC,OAFA5C,EAAI4C,EAAIb,IAAMa,EACd5C,EAAI4C,EAAIb,IAAIvG,KAAOoH,EAAIpH,MAAQ,GACxBwE,IACN,KAGC6C,EAAa,SAACC,GAClB,YADmC,IAAjBA,MAAU,IACrB,OAAP,UACKA,EADL,CAEEtH,KAAMsH,EAAQtH,MAAQ,MAIpBuH,EAAc,SAACC,GACnB,YADqC,IAAlBA,MAAW,IACvBA,EAASL,QAAO,SAAC3C,EAAK4C,GAG3B,OAFA5C,EAAI4C,EAAIb,IAAMa,EACd5C,EAAI4C,EAAIb,IAAIvG,KAAOoH,EAAIpH,MAAQ,GACxBwE,IACN,KAGCiD,EAAiB,SAACC,GACtB,IAAMnH,EAAS,GAUf,OARAY,OAAOC,KAAKsG,GAASrG,SAAQ,SAACC,GACvBoG,EAAQpG,GAAKtB,OAChB0H,EAAQpG,GAAKtB,KAAO,IAEtB0H,EAAQpG,GAAKtB,KAAO2H,YAAgBD,EAAQpG,GAAKtB,MACjDO,EAAOqH,KAAKF,EAAQpG,OAGff,GAmDHsH,EAA0B,SAAC,GAAgD,IAA9CH,EAA6C,EAA7CA,QAASI,EAAoC,EAApCA,YAAoC,IAAvBC,gBAAuB,SAC9E,OAAOL,EAAQM,QAAO,SAACC,GAAD,OACpBF,EAAWE,EAAEH,cAAgBA,EAAcG,EAAEH,cAAgBA,MA4D3DI,EAA8B,SAAC,GAO9B,IANL3B,EAMI,EANJA,GACA4B,EAKI,EALJA,iBACAC,EAII,EAJJA,UACAC,EAGI,EAHJA,iBACAC,EAEI,EAFJA,eACAC,EACI,EADJA,QAEA,IAAKC,EAAQC,kBAAkBlC,GAAK,CAClC,IAAMmC,EA1MsB,SAAC5B,EAAkBsB,EAAWG,GAC5D,GAAIzK,YAASgJ,GAAmB,CAC9B,MAAyCsB,EAAjCd,QAAWqB,GAAnB,aAAkC,GAAlC,GAAmBA,WACb5B,EAAmB4B,GAAcA,EAAWC,uBAE5CC,EAAuB/B,EAAiBgC,YACxCC,EAAoBjC,EAAiBkC,gBAE3C,GAAIH,EACF,OAAOhC,EAAoCgC,EAAsB9B,GAC5D,GAAIgC,EAAmB,CAC5B,IAAME,EAAyBF,EAAkBR,IAAYQ,EAAiB,GAE9E,IAAIjL,YAASmL,GAQX,OAAOA,EAPP,GAAIA,EAAuBH,YACzB,OAAOjC,EACLoC,EAAuBH,YACvB/B,IAQV,OAAOD,EAiL4BoC,CAAwBf,EAAkBC,EAAWG,GAEtFC,EAAQC,kBAAkBlC,GAAM4C,YAAcT,EAA0B,CACtEnC,KACA6C,QAASf,EACT7H,MAAO8H,GAAkBD,IAG7B,OAAOG,EAAQC,kBAAkBlC,IAiDtBiC,EAAU,SAAVA,EAAWa,GACtB,IACE9C,EAcE8C,EAdF9C,GADF,EAeI8C,EAbFC,2BAFF,MAEwB,GAFxB,EAGEC,EAYEF,EAZFE,aACAC,EAWEH,EAXFG,2BACAC,EAUEJ,EAVFI,2BACAC,EASEL,EATFK,0BANF,EAeIL,EARF3B,eAPF,MAOY,GAPZ,IAeI2B,EAPFhB,wBARF,MAQqBzB,EARrB,EASE0B,EAMEe,EANFf,eACAqB,EAKEN,EALFM,oBAVF,EAeIN,EAJFO,mBAXF,MAWgB,GAXhB,IAeIP,EAHFQ,sBAZF,MAYmB,GAZnB,EAaEC,EAEET,EAFFS,8BACeC,EACbV,EADFnC,cAGF,OAAO,SAACiB,GACNK,EAAQC,kBAAkBlC,GAAM,KAEhC,IAAMyD,EAAW,SAACC,GAMhB,IAAMC,EAAsBrC,EAAwB,CAAEH,UAASI,YAAa,eACtEqC,EAA0BC,YAAmB,CAAE1C,QAASwC,IAIxD1C,EA1JmB,SAAC6C,GAC9B,IAAM7C,EAAW,GAYjB,OAVArG,OAAOC,KAAKiJ,GAAqBhJ,SAAQ,SAACC,GACpC+I,EAAoB/I,GAAKtB,KAC3BwH,EAASI,KAAKyC,EAAoB/I,GAAKtB,KAAKsH,SAE5CE,EAASI,KAAK,CACZrB,GAAIjF,OAKHkG,EA6Ic8C,CADWC,YAAgB,CAAChE,GAAF,OAASqD,KAE9CtC,EA/HW,SAAC,GAAsB,IAApBf,EAAmB,EAAnBA,GACxB,OAD2C,EAAfiB,SACZgD,MAAK,SAACC,GAAD,OAAOA,EAAElE,KAAOA,MAAO,GA8HxBmE,CAAe,CAAEnE,KAAIiB,aAI/BN,EA/IwB,SAAC,GAA4D,IAA1DyD,EAAyD,EAAzDA,yBAA0BZ,EAA+B,EAA/BA,yBAC/D,EAA+BY,EAAvBzD,qBAAR,MAAwB,GAAxB,EAEA,OAAI6C,EACK7C,EAAcc,QACnB,SAAC4C,GAAD,OAAiBb,EAAyBc,QAAQD,EAAYrE,KAAO,KAIlEW,EAsImB4D,CAA4B,CAChDH,yBAF+BI,YAAoBxE,GAGnDwD,6BAIIiB,EAAoBnD,EAAwB,CAChDH,UACAI,YAAa,aACbC,UAAU,IAGNkD,EAAwBb,YAAmB,CAC/C1C,QAASsD,EACTE,MAAO5D,EAAQ6D,UAIjB,IAAK7D,EAAQ6D,QACX,OAAO,KAGT,IAAMC,EAAa,iBAAQH,EAA0Bd,GAC/CkB,EAnSmB,SAAC3D,GAC9B,OAAOvG,OAAOC,KAAKsG,GAASxF,MAAK,SAACZ,GAChC,OAAOoG,EAAQpG,GAAK8H,WAiSGkC,CAAuBF,GACtCG,EA9RiB,SAAC7D,GAC5B,OAAQvG,OAAOC,KAAKsG,GAASxF,MAAK,SAACZ,GACjC,OAAuD,IAAhDH,OAAOC,KAAKsG,EAAQpG,GAAKtB,MAAQ,IAAIsE,QAAgB5C,YAAYgG,EAAQpG,GAAKd,UA4RzDgL,CAAqBJ,GACzCK,EAzRa,SAAC/D,GACxB,OAAOvG,OAAOC,KAAKsG,GAASxF,MAAK,SAACZ,GAChC,OAAOoG,EAAQpG,GAAKd,SAuRDkL,CAAiBN,GAQlC,GA3NgC,SAAC,GAKhC,IAJLzB,EAII,EAJJA,oBACA0B,EAGI,EAHJA,aACA5B,EAEI,EAFJA,2BACApB,EACI,EADJA,iBAEA,OAAQsB,GAAuB0B,GAAgB5B,GAA8BpB,EA8MtCsD,CAA8B,CAC/DhC,sBACA0B,eACA5B,6BACApB,qBAIA,OAAO,kBAACA,EAAD,MAGT,IAAMD,EAAY,CAChBwD,aAAcnE,EAAe2D,GAC7B9D,QAASD,EAAWC,GACpBE,SAAUD,EAAYC,GACtB4B,QAASiC,EACTnE,cAAeD,EAAiBC,GAChC2E,YAAa5B,EAAM4B,aAErB,EAAgCzD,EAAUd,QAAlCqB,EAAR,EAAQA,WAAY7I,EAApB,EAAoBA,QAEdgM,EApQ0B,SAAC,GAA+C,IAA7CrC,EAA4C,EAA5CA,2BAA4BrB,EAAgB,EAAhBA,UACnE,OAAK2D,YAAWtC,IAITuC,QAAQvC,EAA2BrB,IA+PZ6D,CAA8B,CACtDxC,6BACArB,cAGI8D,EAjQ0B,SAAC,GAIhC,IAHL1C,EAGI,EAHJA,2BACApB,EAEI,EAFJA,UACA0D,EACI,EADJA,kBAEQnD,EAAeP,EAAUd,QAAzBqB,WAGR,SACGoD,YAAWvC,KACXsC,GACAnD,GAAcA,EAAWwD,cAKrB3C,EAA2BpB,GAiPVgE,CAA8B,CAChD5C,6BACApB,YACA0D,uBA1IuB,SAAC,GAIzB,IAAD,IAHJvC,oBAGI,aAFJ2C,mBAEI,aADJhF,cAIIqC,GAAgB2C,SAHhB,MADY,GACZ,GAG6C5H,OAAS,GAAK+H,eAC7DC,aAAuB,GAsIrBC,CAAuB,CAAEhD,eAAc2C,cAAahF,kBAEpD,IAAMsF,EA9OyB,SAAC,GAI/B,IAHL9C,EAGI,EAHJA,0BACAtB,EAEI,EAFJA,UAGA,OADI,EADJ0D,oBAE2BC,YAAWrC,IAI/BsC,QAAQtC,EAA0BtB,IAqOVqE,CAA6B,CACtD/C,4BACAtB,YACA0D,uBAICT,GACD9B,GACAuC,GACAhM,KACE6I,GAAcA,EAAWwD,eAG3B7C,EA1M2B,SAAC,GAAwC,IAAtCA,EAAqC,EAArCA,oBAAqBlB,EAAgB,EAAhBA,UAEzD,GAAI2D,YAAWzC,EAAoBoD,iBAAkB,CACnD,IAAQA,EAAoBpD,EAApBoD,gBACRpD,EAAoBoD,gBAAkB,kBAAMA,EAAgBtE,IAiB9D,OAdI2D,YAAWzC,EAAoBqD,oBACjCrD,EAAoBsD,aAAetD,EAAoBqD,iBAAiBvE,IAItE2D,YAAWzC,EAAoBuD,mBACjCvD,EAAoBwD,YAAcxD,EAAoBuD,gBAAgBzE,IAIpE2D,YAAWzC,EAAoByD,YACjCzD,EAAoBrJ,KAAOqJ,EAAoByD,SAAS3E,IAGnDkB,EAqLqB0D,CAA2B,CAAE1D,sBAAqBlB,eAG1E,IAAM6E,EAAmB/E,EAA4B,CACnD3B,KACA4B,mBACAC,YACAC,mBACAC,iBACAC,QAAS2E,gBAGX,OACE,kBAACC,EAAA,EAAD,CACE5G,GAAIA,EACJgD,aAAcA,EACd2C,YAAaA,EACbJ,kBAAmBA,EACnBmB,iBAAkBA,EAClB3D,oBAAqBA,EACrBtJ,KAAMoI,EACNgB,SAAUO,GAAuB0B,EACjCxB,eAAgBA,EAChB4B,SAAUA,EACV3B,8BAA+BA,EAC/ByB,kBAAmBA,EACnBiB,mBAAoBA,KAW1B,OAnI2B,Y,QAAA,yD,EAAA,G,EAAA,G,sEAAA,YA+HzBY,OAAA,WACE,OAAO,kBAACpD,EAAD,CAAU6B,YAAalK,KAAKsI,SAhIZ,GA8HGoD,IAAMC,iBASxC9E,EAAQC,kBAAoB,GAEbD,O,iCC3df,gKAQM+E,EAAuD,ksCAUhDC,EAA2B,WACtC,MAAO,CACLC,mBAAoBA,cACpBnQ,SAAUA,uBAIDoQ,EAA6B,SAACC,GAAD,OACvCC,YAA2B,OAACD,QAAD,IAACA,OAAD,EAACA,EAAeE,oBAEjCC,EAA6B,WAGxC,OAFA/N,YAAc,UAAW,CAAED,SAAS,IAE7BiO,cACJC,OAAO,CACNC,SAAUV,EACVpO,UAAW,CAAE8F,MAAOU,eACpBuI,QAAS,CAAEC,cAAc,KAE1BC,MAAK,kBAAMzQ,SAAOC,IAAIC,KAAK,kCAC3BwQ,OAAM,SAAC7N,GAAD,OAAW7C,SAAOC,IAAI4C,MAAM,4BAA6BA,MAC/D8N,SAAQ,WACPvO,YAAc,UAAW,CAAED,SAAS,IAEhCyO,eAKJxO,YAAc,kBAAmB,CAC/BC,KAAM,CACJwO,OAAQC,IAAuBC,SAC/BC,KAAM,8B,iCCnDhB,wEAEaC,EAAmB,SAACnN,GACfA,GAGLgM,EAAqB,WAKhC,MAA4B,qBAAdoB,YAA8BA,UAAUC,gB,oBCVxDpI,EAAOC,QAAU,CAAC,QAAU,wBAAwB,QAAU,wBAAwB,aAAe,6BAA6B,aAAe,6BAA6B,cAAgB,8BAA8B,cAAgB,8BAA8B,eAAe,6BAA6B,YAAc,6BAA6B,eAAe,6BAA6B,YAAc,+B,oOCEpZ,IAAMoI,EAAO,CAClBzS,OAAQ,SACR0S,SAAU,WACVC,OAAQ,QACRC,qBAAsB,eAGlBC,EAAS,CACbC,wBAAwB,EACxBC,kBAAkB,GAyCdC,EAA+B,SAACC,EAAMC,GAAoB,IAAD,cAC7DnN,OAAOC,YAAY,uBACnB,OAA8C,QAAN,EAAAD,cAAA,eAAQoN,YAAa,GAArDC,EAAR,EAAQA,KAAuBC,GAA/B,EAAcC,MAAd,EAAqBC,M,oIAArB,+BAnCmC,SAACH,GACpC,IACQI,EAAyBlL,cAAzBkL,qBACJA,GAFS,CAAC,gBAGPzO,SAAQ,SAAAC,GACXoO,GAAK,UAAUpO,GAAMyO,eAAiB,CACpCC,MAAOF,EAAwBxO,EAAJ,SAC3B2O,GAAIH,EAAwBxO,EAAJ,mBA8B9B4O,CAA6BR,GAlBG,SAACA,GACjC,GAAIrN,OAAO8N,iBAAkB,CAC3B,IAAMC,EAAS/N,OAAO8N,iBAAiBC,OACjCtQ,EAAUuC,OAAO8N,iBAAiBrQ,SAAWiF,KAAKC,MACxD,GAAIoL,EAAQ,CACV,IAAMC,EAAYvQ,EAAUsQ,EAC5BV,EAAI,iBAAuB,CACzBM,MAAOI,EACPH,GAAII,KAWVC,CAA0BZ,GAC1B,IAAMa,EAAiB,eACrBC,WAAY,sBACZC,gBAAgB,WAAYlB,EAC5BmB,UAAU,gCAAiCnB,EAC3CoB,iBAAkBC,KAAKC,WAAgB,QAAN,EAAAxO,cAAA,mBAAQoN,iBAAR,eAAmBC,OAAQ,IAC5DoB,kBAAmBF,KAAKC,WAAgB,QAAN,EAAAxO,cAAA,mBAAQoN,iBAAR,eAAmBG,QAAS,IAC9DmB,kBAAmBH,KAAKC,WAAgB,QAAN,EAAAxO,cAAA,mBAAQoN,iBAAR,eAAmBI,QAAS,KAC3DF,EAPkB,CAQrBqB,qBAAsBxB,IAGxB7R,SAAOkE,KAAK,sBAAuB0O,IAGxBU,EAA+B,SAACC,GAC3CvT,SAAOC,IAAIC,KAAX,2CAA2DqT,GAC3D/B,EAAOC,uBAAyB8B,GAGrB7E,EAA+B,WAC1C,OAAO8C,EAAOC,wBAGH9C,EAAyB,SAAC4E,GACrCvT,SAAOC,IAAIC,KAAX,mCAAmDqT,GACnD/B,EAAOE,iBAAmB6B,GAOf9B,EAAyB,SAACG,GACrC,QADmD,IAAdA,MAAO,IACxClD,IAKF,GAAIkD,IAASR,EAAKzS,QATb6S,EAAOE,iBAUV1R,SAAOC,IAAIC,KAAX,kDAAkE0R,EAAlE,aACK,CACL,IAAMC,EAAiB2B,8BACvBxT,SAAOyT,IAAIC,eAAe,CACxBC,OAAW/B,EAAL,eACNgC,OAAO,UAAWhC,EAClBiC,OAAQ,OACRjC,KAAK,uCAAwCA,EAC7CC,mBAEF7R,SAAOC,IAAIC,KAAX,2BAA2C0R,EAA3C,SAEA0B,GAA6B,GAE7B3B,EAA6BC,EAAMC,M,kLCpG5BiC,EAAmB,47CAmBnB7B,EAAK,6BA9BhB,SAAC8B,GACC,IAAMC,EAAQ,GACd,OAAOD,EAAY1J,QAAO,SAAA4J,GACxB,GAAwB,uBAApBA,EAAWC,KACb,OAAO,EAET,IAAMxU,EAAOuU,EAAWvU,KAAKoE,MAC7B,OAAIkQ,EAAMtU,KAGRsU,EAAMtU,IAAQ,GACP,MAmBG,q4FACdyU,wBADc,YAEdL,EAFc,YAGdM,gCAHc,qzBAwDZC,EAAcxJ,YAAQ,CAC1BjC,GAAI,eACJmB,QAAS,CACP,CACEkI,MAAOA,EACPzQ,UAAU,OAAD,QAAI8F,MAAOU,eAAe6H,eACnCU,QAAS,CAAE+D,eAAe,KAG9BxI,2BAlCiC,SAACQ,GAClC,OAAyBiI,YAAe,SAAUjI,IAAU,IAApDkI,eAAR,MAAkB,GAAlB,EAGA,MAAO,CAAC,aAAc,WAAWC,OAAM,SAAC9Q,GAAD,OAAS6Q,EAAQ7Q,OA+BxDoI,0BA5BgC,SAACO,GACjC,IAAQzC,EAAoEyC,EAApEzC,SAAR,EAA4EyC,EAA1D4B,YAAlB,gBAAqE,GAArE,GAAiCwG,iBAAjC,MAA6ChW,IAAaC,OAA1D,EAEMgW,EAAoB9K,EAAS+K,UAAUvS,KAAKwS,aAAenW,IAAaC,OAG9E,OAAI+V,IAAchW,IAAaC,QAAUgW,IAAsBjW,IAAaE,UAKxE8V,IAAchW,IAAaE,QAAU+V,IAAsBjW,IAAaC,SAkB5E+L,iBAAkBoK,IAClB7I,YAAa,CAAC,cAZIpB,CAajB,CACDQ,gBAAiB,CAAE0J,GAAI,gFAAM,qEAAN,oEAAa,oBAAb,8EAAiCC,GAAI,gFAAM,8DAAN,oEAAa,oBAAb,iFAG/CX,Q,4QC7FFY,EAA0B,s5JA8BjCC,EAAkB,WAAO,IAAD,QACtBC,GAAa,UAAMzQ,cAAN,iBAAM,EAAQiB,gBAAd,aAAM,EAAkByP,UAAxB,gBAAqC1Q,cAArC,iBAAqC,EAAQiB,gBAA7C,aAAqC,EAAkB0P,MAAvD,eAEbC,EAAY7P,mBAIlB,cAHO6P,EAAS,cACTA,EAAS,KAETC,YAASJ,EAAeG,ICzCpBE,EAAoB,SAAC,GAAD,UAAGC,uBAAH,MAAqB,SAArB,MAA+BC,uBAA/B,MAAiD,GAAjD,gBAC/BA,QAD+B,IAC/BA,GAD+B,UAC/BA,EACIrL,QACA,SAACsL,GAAD,OACEA,EAAMnB,SACoB,QAA1BmB,EAAMnB,QAAQoB,SACdD,EAAMnB,QAAQqB,kBAAoBJ,YANT,aAC/B,EAOIjM,QACA,SAACsM,EAAWC,GAAZ,OAA8BD,EAAUE,KAAOD,EAAaC,KAAOF,EAAYC,IAC/E,KA2BOxB,EAAiB,SAACkB,EAAiBnJ,GAC9C,MAYIA,EAXF2B,aADF,GAGM5L,KACE4T,gBAJR,gBAQY,GARZ,GAKUP,uBALV,MAK4B,GAL5B,MAMUQ,sBANV,MAM2B,GAN3B,MAOUC,MAASC,GAPnB,aAOyC,GAPzC,GAOmBA,kBAOnB,IAvCgC,SAACV,EAAiBQ,GAClD,GAAIG,MAAMC,QAAQZ,IAAoBW,MAAMC,QAAQJ,IAAmBA,EAAevP,QAC3D+O,EAAgBnR,MAAK,SAACoR,GAC7C,OAAOA,EAAMnB,SAA2C,UAAhCmB,EAAMnB,QAAQ+B,iBAGlB,CAAC,IAAD,MACd5C,EAAS,wBACf3T,SAAOkE,KACLyP,EACA6C,yBAAe,CAAE7C,SAAQ8C,qBAAoB,UAAEC,qBAAF,aAAE,EAAaD,wBAG9D,IAAME,EAA0BC,YAA2BV,GAC3D,QACE,OAACS,QAAD,IAACA,GAAD,UAACA,EAAyBE,gBAA1B,OAAC,EAAmCtS,MAAK,SAACuS,GAAD,OAAUA,EAAKC,kBACxD,OAACJ,QAAD,IAACA,GAAD,UAACA,EAAyBzG,yBAA1B,OAAC,EAA4C8G,aAKnD,OAAO,EAmBHC,CAAmBvB,EAAiBQ,KAAoBE,IACzDC,MAAMC,QAAQZ,KACdA,EAAgB/O,OAEjB,OAAO,KAIT,IAAMuQ,EAA0B1B,EAAkB,CAAEC,kBAAiBC,oBACrE,GAAIlS,OAAOC,KAAKyT,GAAyBvQ,OAAS,EAAG,CAAC,IAAD,EAC7CgN,EAAS,kBAKf,OAJA3T,SAAOkE,KACLyP,EACA6C,yBAAe,CAAE7C,SAAQ8C,qBAAoB,UAAEC,qBAAF,aAAE,EAAaD,wBAEvDS,EAET,OAAO,MAGIC,EAAuB,SAAC,GAA6B,IAAD,EAA1BxD,EAA0B,EAA1BA,OAAQyD,EAAkB,EAAlBA,YACvCC,EAAS,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAa5C,eAAhB,aAAG,EAAsB8C,UACpCzX,EAAS8T,EAOb,OALI0D,IACFxX,EAAS0X,YAAwBF,GAAa,WAAa,qBAG7DrX,SAAOC,IAAIC,KAAK,0BAA2B,CAAEmX,YAAWxX,WACjDD,YAAS,CAAEC,YAGP2X,EAA8B,SAAC,GAKrC,IAJLJ,EAII,EAJJA,YACAK,EAGI,EAHJA,0BACAC,EAEI,EAFJA,sBACAC,EACI,EADJA,uCAQA,OALA3X,SAAOC,IAAIC,KAAK,iCAAkC,CAChDuX,4BACAC,wBACAC,2CDnD0C,SAC5CP,EACAK,EACAC,EACAC,GACI,IAAD,IACGlB,EAAuBC,cAAYD,qBACzC,OAAOrG,cACJC,OAAO,CACNC,SAAU2E,EACVzT,UAAW,CACT8F,MAAOU,cACP4P,YAAaC,cACbJ,0BAA2BA,GAA6B,GACxDC,sBAAuBA,GAAyB,GAChDC,uCAAwCA,GAA0C,GAClFxC,cAAeD,IACfuB,uBACAqB,2BAA4BA,YAA2BV,GACvDW,uBAAwBC,YAA0BZ,GAClDa,WAAU,OAAEb,QAAF,IAAEA,GAAF,UAAEA,EAAa5C,eAAf,aAAE,EAAsB0D,WAClCC,aAAY,OAAEf,QAAF,IAAEA,GAAF,UAAEA,EAAa5C,eAAf,aAAE,EAAsB4D,0BAGvC1H,OAAM,SAAC7N,GACN7C,SAAOC,IAAIoY,KAAX,sDACKxV,OC2BFyV,CACLlB,EACAK,EACAC,EACAC,GAEClH,MAAK,SAAC8H,GAAc,IAAD,EACZC,EAAuB,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAUlW,YAAb,aAAG,EAAgBmW,wBAChD,KAAIA,GAA2BA,EAAwB7R,OAAS,GAI9D,MAAM,IAAIT,MAAM,8CAHhBlG,SAAOC,IAAIC,KAAK,mBAAoB,CAAEsY,4BACtCC,YAAeD,MAKlB9H,OAAM,SAAC7L,GAGN,OADA7E,SAAOC,IAAI4C,MAAM,yBAA0BgC,GACpCjF,YAAS,CAAEC,OAxBP,0BA4BJ6Y,EAA6B,SAAC,GASpC,IAAD,EARJtB,EAQI,EARJA,YACAK,EAOI,EAPJA,0BACAkB,EAMI,EANJA,yBACAjB,EAKI,EALJA,sBACAC,EAII,EAJJA,uCACAiB,EAGI,EAHJA,QACAxC,EAEI,EAFJA,kBACAyC,EACI,EADJA,gCAEMlF,EAAS,6BAaf,GAZA3T,SAAOkE,KACLyP,EACA6C,yBAAe,OAAD,QACZ7C,SACA8C,qBAAoB,UAAEC,qBAAF,aAAE,EAAaD,sBAFvB,OAGTW,QAHS,IAGTA,OAHS,EAGTA,EAAa5C,QACbmE,EAJS,CAKZG,iBAAkB1C,GAAqBwC,OAG3C5Y,SAAOC,IAAIC,KAAK,6CAA8CkX,GAE1DyB,GAAmCD,EAAS,CAK9C,GAJIA,GACF5Y,SAAOC,IAAIC,KAAK,0CAGdyY,EAAyBI,iBAE3B,OAAO5B,EAAqB,CAAEC,gBACzB,GAAIuB,EAAyBF,eAElC,OAAOjB,EAA4B,CACjCJ,cACAK,4BACAC,wBACAC,2CAKN3X,SAAOC,IAAIC,KAAK,gE,iCCxKlB,0JAOa8Y,EAA2B,iBAAyB,eAAnBC,eAWjCC,EAAyB,WACpC,OAAOF,KAA8BG,cAAYpS,SAAS,iBAU/CqS,EAA6B,WACxC,OACEJ,KACAG,cAAYpS,SAAS,sBACrBsH,QAAQ5I,mBAASzE,OAURqY,EAAoC,WAC/C,OAAOL,KAA8BG,cAAYpS,SAAS,gC,iCC5C5D,oBAEe,aAACuF,GAAD,OACb,yBAAKgN,UAAWhN,EAAMgN,UAAWC,cAAY,eAC1CjN,EAAMkN,Y,iCCJX,0FAKa1E,EAAU,WACrB,IAAM2E,EAAaC,cACbC,EAAaD,cAEnB,OACE,kBAAC,IAAD,CAAkBJ,UAAWM,IAAOnO,SAClC,yBAAKoO,QAAQ,cAAcC,oBAAoB,iBAC7C,0BACEC,SAAQ,QAAUN,EAAV,IACRO,EAAE,IACFC,EAAE,IACFC,MAAM,MACNC,OAAO,MACPC,KAAI,QAAUT,EAAV,MAEN,8BACE,8BAAU/Q,GAAI6Q,GACZ,0BAAMO,EAAE,IAAIC,EAAE,QAAQI,GAAG,IAAIC,GAAG,IAAIJ,MAAM,MAAMC,OAAO,SACvD,0BAAMH,EAAE,IAAIC,EAAE,QAAQI,GAAG,IAAIC,GAAG,IAAIJ,MAAM,KAAKC,OAAO,SACtD,0BAAMH,EAAE,IAAIC,EAAE,QAAQI,GAAG,IAAIC,GAAG,IAAIJ,MAAM,MAAMC,OAAO,MACvD,0BAAMH,EAAE,MAAMC,EAAE,QAAQI,GAAG,IAAIC,GAAG,IAAIJ,MAAM,QAAQC,OAAO,WAE7D,oCAAgBvR,GAAI+Q,GAClB,0BAAMY,OAAO,WAAWC,UAAU,UAAUC,YAAY,KACtD,6BAASC,cAAc,SAASC,OAAO,QAAQC,IAAI,KAAKC,YAAY,gBAEtE,0BAAMN,OAAO,UAAUC,UAAU,UAAUC,YAAY,KACrD,6BAASC,cAAc,SAASC,OAAO,QAAQC,IAAI,KAAKC,YAAY,gBAEtE,0BAAMN,OAAO,UAAUC,UAAU,UAAUC,YAAY,KACrD,6BAASC,cAAc,SAASC,OAAO,QAAQC,IAAI,KAAKC,YAAY,sB,uECzBnEC,EAPC,kBACd,yBAAKxB,UAAWM,IAAOkB,SACrB,yBAAKxB,UAAWM,IAAOmB,eACvB,yBAAKzB,UAAWM,IAAOoB,kB,mCC4BZC,IA3BQ,SAAC,GAAD,QAAGzB,EAAH,EAAGA,SAAU0B,EAAb,EAAaA,aAAb,OACrB,yBAAK5B,UAAWM,IAAOqB,eAAgB1B,cAAY,kBACjD,kBAAC,EAAD,MACCC,GACC,uBACE2B,SAAS,IACTC,KAAK,QACL9B,UAAW+B,KAAE,OACRzB,IAAO0B,iBAAkBJ,EADjB,WAERtB,IAAO2B,gBAAiBL,EAFhB,KAKZ1B,GAGJ0B,GACC,uBAAGC,SAAS,IAAIC,KAAK,QAAQ9B,UAAWM,IAAO2B,gBAC5CL,M,+ECrBIM,EAAoB,6BAF/B,SAACzH,GACC,IAAMC,EAAQ,GACd,OAAOD,EAAY1J,QAAO,SAAA4J,GACxB,GAAwB,uBAApBA,EAAWC,KACb,OAAO,EAET,IAAMxU,EAAOuU,EAAWvU,KAAKoE,MAC7B,OAAIkQ,EAAMtU,KAGRsU,EAAMtU,IAAQ,GACP,MATkB,43CAC7ByU,wBAD6B,oa,+ECApBsH,EAAqB,6BAFhC,SAAC1H,GACC,IAAMC,EAAQ,GACd,OAAOD,EAAY1J,QAAO,SAAA4J,GACxB,GAAwB,uBAApBA,EAAWC,KACb,OAAO,EAET,IAAMxU,EAAOuU,EAAWvU,KAAKoE,MAC7B,OAAIkQ,EAAMtU,KAGRsU,EAAMtU,IAAQ,GACP,MATmB,+sEAC9Bgc,+BAD8B,4nB,iCCHlC,kCAEO,IAAM5c,EAA4B,CAEvC,qCAEA,gC,iCCNF,+CAEa6c,EAAsB,SAACC,GAAD,gBAACA,MAAU,IAC5C,IAAIC,IAAJ,eACEC,iBAAkB,SAACC,GACjB,GAAIA,EAAOC,WACT,OAAQD,EAAOC,YACb,IAAK,kBACL,IAAK,uBACH,MAAM,GAAID,EAAOC,WACnB,IAAK,yBACL,IAAK,0BACH,OAAUD,EAAOC,WAAjB,IAA+BD,EAAOE,UAG5C,OAAOC,YAAwBH,KAE9BH,M,wFCNMO,EAAgC,6BAV3C,SAACpI,GACC,IAAMC,EAAQ,GACd,OAAOD,EAAY1J,QAAO,SAAA4J,GACxB,GAAwB,uBAApBA,EAAWC,KACb,OAAO,EAET,IAAMxU,EAAOuU,EAAWvU,KAAKoE,MAC7B,OAAIkQ,EAAMtU,KAGRsU,EAAMtU,IAAQ,GACP,MAD8B,+7GACzCyU,wBADyC,YAEzCuH,+BAFyC,YAGzCU,6BAHyC,YAIzCtI,IAJyC,8/B,gCCX7C,spBAmBanU,GAFkB0c,kBACQC,0BACfC,YACXC,EAAUC,UAEVhX,GADciX,cACLC,UAEf,SAASC,IACd,OAAOC,KAAuBC,IAIzB,IAAMC,EAAgC,SAACC,GAC5C,IAAKH,IACH,OAAO,EAGT,IAKE,GAJA7c,SAAOC,IAAIC,KAAK,wCAChBF,SAAOC,IAAIgd,QACXD,EAAM/J,KAAKC,UAAU8J,GAGnBtY,OAAOwY,SACNxY,OAAOwM,UAAUiM,UAAUC,MAAM,UAC/B1Y,OAAOwY,OAAOG,cAAgB3Y,OAAOwM,UAAUiM,UAAUC,MAAM,kBAKlE,OAHApd,SAAOC,IAAIgd,QACXvY,OAAOwY,OAAOG,YAAYL,EAAK,KAC/Bhd,SAAOC,IAAIC,KAAK,qDACT,EAGT,IAAMod,EACJ5Y,OAAOwY,QACPxY,OAAOwY,OAAOK,QACd7Y,OAAOwY,OAAOK,OAAO5W,QACrBjC,OAAOwY,OAAOK,OAAOC,aAEvB,GAAIF,GAAUA,EAAOG,eAInB,OAHAzd,SAAOC,IAAIgd,QACXK,EAAOG,eAAeT,GACtBhd,SAAOC,IAAIC,KAAK,+CACT,EAGTF,SAAOC,IAAIC,KAAK,oDAAqD,CACnEid,UAAWzY,OAAOwM,WAAaxM,OAAOwM,UAAUiM,YAElD,MAAOtY,GACP7E,SAAOC,IAAI4C,MAAM,kCAAmC,CAClDA,MAAOgC,EAAIC,OAASD,EAAIE,aAK5B,OADA/E,SAAOC,IAAIoY,KAAK,sCACT,GAIIyE,EAAiB,WAC5B,OAAOpY,OAAOmD,SAAW2U,KAAa7c,MAQ3Bkd,EAAoB,WAC/B,OAAInY,OAAOmD,SAAU6V,MAKlBhZ,OAAOhF,OAC8B,IAAnCgF,OAAOhF,KAAKwN,QAAQ,YAC+B,IAAlDxI,OAAOhF,KAAKwN,QAAQ,4BACtBsP,KACqB,MAAvB/W,IAASkY,WACThe,MASS+d,EAAqB,WAChC,MACkB,oBAAhBhZ,OAAOhF,MACe,MAAtB+F,IAASmY,UAGyC,IAAlDlZ,OAAOhF,KAAKwN,QAAQ,2BAcX2Q,EAAiB,SAACC,GAE7BC,eAAeC,IAAI,2BAA+BhW,cAAlD,IAAgE8V,IAMrDG,EAAmB,WAC9BF,eAAeG,OAAO,6BAUXC,EAAiB,WAC5B,IAAIC,EAAc,KAElB,SAASC,EAASP,GACE,IAAD,IAAjB,GAAIM,EACF,OAAe,QAAX,EAAAA,SAAA,eAAa9W,SAAUU,eAEzBhI,SAAOC,IAAIC,KAAK,sCAChBke,EAAc,MACP,IAIS,QAAX,EAAAA,SAAA,eAAaN,aAAcA,EAGpC,IAAMQ,EAAqBP,eAAexa,IAAI,4BAE9C,IAAK+a,EAEH,OAAO,EAGT,MAA+BA,EAAmBC,MAAM,KAAjDjX,EAAP,KAAckX,EAAd,KAEA,OAAIlX,IAAUU,eAEZhI,SAAOC,IAAIC,KAAK,qCAChB+d,KACO,GAGLO,IAAkBV,IACpBG,IACAG,EAAc,CAAE9W,QAAOwW,UAAWU,IAC3B,GAUX,OAJAH,EAASI,MAAQ,WACfL,EAAc,MAGTC,EA7CqB,GAsDjBK,EAAkB,SAACC,EAAUC,QAAwB,IAAlCD,MAAM,SAA4B,IAAxBC,MAAU,WAClD,IACE,IAAMC,EAAgB,IAAIC,OAAO,qDAAsD,KACjFC,EAAmB,IAAID,OAAO,4BAA6B,KAC3DE,EAAgB,IAAIF,OAAO,kBAAmB,KAC9CG,EAAoB,IAAIH,OAAO,SAAU,KAEzClc,EAAS,CACbsc,WAAYL,EAAcM,KAAKR,GAC/BS,cAAeL,EAAiBI,KAAKR,GACrCU,WAAYL,EAAcG,KAAKR,GAC/BW,eAAgBL,EAAkBE,KAAKR,IAKzC,OAFA3e,SAAOC,IAAIC,KAAX,mBAAmC0e,EAAWhc,GAEvCA,EACP,MAAOiC,GAGP,OAFA7E,SAAOC,IAAIC,KAAX,mBAAmC0e,EAAnC,SAAoD/Z,GAE7C,KAIE0S,EAA0B,SAACgI,GACtC,MAAO,CAAC,OAAQ,OAAQ,OAAOxY,SAASwY,IAG7BC,EAAkC,SAACC,GAA2B,IAAD,IACxE,MACqD,mBAA9B,OAArBA,QAAqB,IAArBA,GAAA,UAAAA,EAAuBvP,yBAAvB,eAA0CxQ,OACS,mBAA9B,OAArB+f,QAAqB,IAArBA,GAAA,UAAAA,EAAuBvP,yBAAvB,eAA0C5N,OAIvC,SAASsU,EAA2BV,GACzC,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAgBrJ,MAAK,SAAC6S,GAC3B,MACkC,kBAAhCA,EAAKxP,kBAAkBxQ,MACS,kBAAhCggB,EAAKxP,kBAAkB5N,QAKtB,IAAMqd,EAAmB,SAACC,GAC/B,IAAMC,EAAU,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAgBvV,QAAO,SAACyV,GAAD,YAAgD,eAA9B,OAANA,QAAM,IAANA,GAAA,UAAAA,EAAQ5P,yBAAR,eAA2B5N,SACjF,OAAiB,OAAVud,QAAU,IAAVA,OAAA,EAAAA,EAAYlZ,QAAS,GAGvB,SAASoZ,EAAYC,GAC1B,OAAOA,EAAiB3V,QACtB,SAACsL,GAAD,MAA6B,QAAlBA,EAAMsK,SAA+C,UAA1BtK,EAAMF,mBAIzC,SAASyK,EAAyBhQ,GACvC,IAAMiQ,EAAwB5c,IAC5B2M,EACA,gEAGF,GAAKiQ,EAAL,CAIA,IAAIC,EAEEC,EAAcF,EAAsBtT,MACxC,SAACyT,GAAD,MAA+D,iBAArCA,EAAqBC,eAajD,OALEH,EANGC,EAMiBA,EAAYG,aALZjd,IAClB2M,EACA,6DAMcuQ,QAAUC,YAAW,yBAEhCN,GAGF,SAASO,EAAqBxV,GAAc,IAAD,EAChD,OAAOkD,QA7Q2B,uBA6QR,OAAXlD,QAAW,IAAXA,GAAA,UAAAA,EAAW,oBAAX,eAA6CyV,iBAGvD,SAASC,EAAoBC,GAClC,OAAOC,KAAKC,OAAOC,aAAaC,MAAM,KAAM,IAAIC,WAAWL,O,gCChS7D,ooBAkBMM,EAAwB,iBAAO,CACnCC,QAAS5b,mBAAS4b,QAClBC,WAAY7b,mBAAS8b,aAIjBC,EAAoC,CACxC,MAEA,WACA,UACA,QAeIC,EAAuB,SAAC,GAKlB,IAAD,aAAP,GAAO,MAJTC,gBAIS,MAJE,kBAAMC,QAAQC,WAIhB,MAHTxe,eAGS,MAHC,GAGD,MAFTwY,eAES,MAFC,GAED,MADTiG,eACS,MADC,aACD,EACT3e,IAAoBe,aAEpB,IAAM6d,EAAa,WACjB,OAAKlG,EAAQmG,WAINJ,QAAQC,WAHbhG,EAAQmG,YAAa,EACdL,EAASte,KASpB,OAHA4e,YAAW,kBAAMF,MA5BM,KA+BhB9hB,SAAOC,IACXgd,QACAxM,MAAK,kBAAMqR,OACXpR,OAAM,SAAC7L,GAEN,OADA7E,SAAOC,IAAIC,KAAQ2hB,EAAnB,SAAoC,CAAEhf,MAAOgC,EAAIC,OAASD,EAAIE,aACvD+c,QAgBPG,EAAuB,SAAC,GAAD,iBAQzB,GARyB,EAC3BC,EAD2B,EAC3BA,UACAC,EAF2B,EAE3BA,UAF2B,IAG3B7a,aAH2B,MAGnBU,cAHmB,EAI3Boa,EAJ2B,EAI3BA,aACAC,EAL2B,EAK3BA,OAL2B,MAQjB,CAEVH,YACAC,YACAC,eACAE,QAAShb,EACTib,QAd2B,EAM3BC,OASAC,aAAcnb,EACdob,UAhB2B,EAO3BC,UAUAN,OAAQA,GAAUA,EAAOjQ,gBAOdwQ,EAAe,SAACrS,GAC3B,IAAmBoO,EAAoCpO,EAA/C4R,UAAgBU,EAA+BtS,EAA/BsS,aAAcC,EAAiBvS,EAAjBuS,aAChCC,EAAY,+BAGdZ,EAAY1c,mBAASud,UAAYC,EAAqB,CAAEtE,QAASA,EAOrE,GALA3e,SAAOkE,KACL,4BACAgf,yBAAe,CAAEvP,OAAQ,SAAUwP,cAAeN,EAAcV,eAG9Dzd,OAAOmD,QAAUuG,YAAW1J,OAAOmD,OAAOub,UAAW,CAClDhV,YAAW1J,OAAOmD,OAAOub,WAC5BpjB,SAAOC,IAAIoY,KAAK,uCAAhB,eACEwK,eACAC,eACAX,YACA7a,MAAOU,eACJoZ,MAIP,IAAMhe,EAAU6e,EAAqB1R,GAKrC,OAHAvQ,SAAOC,IAAIC,KAAK,0BAA2BkD,GAGpCqe,EAAqB,CAC1BC,SAAUhd,OAAOmD,OAAOub,SACxBhgB,UACAye,QAAS,8BACTjG,QAAS,CAAEmG,YAAY,KAK3B,IACEI,IACApF,YAA8B,CAC5B1b,UAAW,qBACX6gB,UAAWC,EACXkB,cAAc,IAQlB,OAAO3B,EAASS,GACb1R,MAAK,WAGJ,GAAIiO,YAAgByD,EAAW,aAAajD,WAAY,CACtD,IAAMrf,EAAS,qCAKf,OAHAG,SAAOC,IAAIC,KAAKL,EAAQ,CAAE8e,IAAKwD,IAC/BniB,SAAOkE,KAAKrE,EAAQqjB,yBAAe,CAAEvP,OAAQ,SAAUwO,eAEhD/iB,EAAqB,CAAE4B,KAAMnB,EAAQqiB,UAAWC,EAAWW,qBAGrEpS,OAAM,WAEL,OADA1Q,SAAOkE,KAAK6e,EAAWO,wBAAc,CAAEtiB,KAAM+hB,EAAWZ,YAAWW,kBAC5D1jB,EAAqB,CAAE4B,KAAM+hB,EAAWb,UAAWC,EAAWW,qBAuI9DS,EAA+B,SAAC,GAIjC,IAAD,aAAP,GAAO,EAHTC,EAGS,EAHTA,kCACAX,EAES,EAFTA,aACAC,EACS,EADTA,aAEA,EACEU,GAAqC,GADvC,IAAQC,MAASjB,GAAjB,aAA4B,GAA5B,GAAiBA,OAAjB,IAAgCkB,KAAhC,gBAA4F,GAA5F,GAAwCxB,iBAAxC,MAAoD,GAApD,EAAwDG,EAAxD,EAAwDA,OAAQM,EAAhE,EAAgEA,UAAWP,EAA3E,EAA2EA,aAE3E,OACEhgB,YAAc,UAAW,CACvBD,SAAS,EACTE,KAAM,CAAEC,KAAMV,IAAc+hB,uBAzIH,SAACpT,GAC9B,IAAMwS,EAAY,6BAClB,EAA6DxS,GAAW,GAAhE2R,EAAR,EAAQA,UAAWW,EAAnB,EAAmBA,aAAcC,EAAjC,EAAiCA,aAAcH,EAA/C,EAA+CA,UAE/C3iB,SAAOkE,KACL,6BACAgf,yBAAe,CAAEvP,OAAQ,iBAAkBwP,cAAeN,EAAcX,YAAWS,eAGrF,IAAMiB,EAAmBX,EAAqB,OAAD,UACxC1S,EADwC,CAE3CoO,IAAKuD,KAIP,GAAIxd,OAAOmD,OAAQ,CACZuG,YAAW1J,OAAOmD,OAAOgc,cAC5B7jB,SAAOC,IAAIoY,KAAK,0CAAhB,eACE6J,YACAW,eACAC,eACAgB,MAAOpG,cACPpW,MAAOU,eACJoZ,MAIP,IAAMhe,EAAU6e,EAAqB,OAAD,UAC/B1R,EAD+B,CAElC2R,UAAW0B,KAGb,OAAIlf,OAAOmD,OAAOkc,eAChB/jB,SAAOC,IAAIC,KAAK,qCAETwE,OAAOmD,OACXkc,cAAc,CAAExB,QAASnf,EAAQmf,UACjC9R,MAAK,SAACuT,GACL,OAAOvC,EAAqB,CAC1BI,QAAS,gCACTH,SAAU,WACRhd,OAAOiB,SAASse,OAAOD,SAI5BtT,OAAM,SAAC7L,GAKN,OAJA7E,SAAOC,IAAI4C,MAAM,iCAAkC,CACjDgC,IAAKA,EAAIC,OAASD,EAAIE,aAGjB0c,EAAqB,CAC1BC,SAAUhd,OAAOmD,OAAOgc,YACxBzgB,UACAye,QAAS,iCACTjG,QAAS,CAAEmG,YAAY,UAK/B/hB,SAAOC,IAAIC,KAAK,6BAA8BkD,GAEvCqe,EAAqB,CAC1BC,SAAUhd,OAAOmD,OAAOgc,YACxBzgB,UACAye,QAAS,iCACTjG,QAAS,CAAEmG,YAAY,MAK3B,IACE6B,IACA7G,YAA8B,CAC5B1b,UAAW,qBACX6gB,UAAW0B,EACXP,cAAc,IAMlB,OAAO3B,EAASkC,EAAkB,CAChCjiB,YAAaC,IAAc+hB,mBAC3BO,gBAAiB,KACjBjjB,QAASkjB,gBAER1T,MAAK,WAGJ,GAAIiO,YAAgBkF,EAAkB,aAAa1E,WAAY,CAC7D,IAAMrf,EAAS,sCAaf,OAXAG,SAAOC,IAAIC,KAAKL,EAAQ,CAAE8e,IAAKuD,IAC/BliB,SAAOkE,KACLrE,EACAqjB,yBAAe,CACbvP,OAAQ,iBACRyQ,WAAYzB,EACZ0B,WAAYnC,EACZoC,mBAAoBV,KAIjBxkB,EAAqB,CAAE4B,KAAMnB,EAAQqiB,UAAW0B,EAAkBd,qBAG5EpS,OAAM,WAUL,OATA1Q,SAAOkE,KACL6e,EACAO,wBAAc,CACZtiB,KAAM+hB,EACNwB,cAAezB,EACfuB,WAAYnC,EACZoC,mBAAoBV,KAGjBxkB,EAAqB,CAAE4B,KAAM+hB,EAAWb,UAAW0B,EAAkBd,oBAuB9E0B,CAAgB,CACdld,MAAOU,cACPwa,SACAH,SACAH,UAAYA,GAAaA,EAAUuC,MAAS,GAC5C9B,YACAP,eACAS,eACAC,kBAYO1jB,EAAuB,SAAC,GAKzB,IAAD,aAAP,GAAO,MAJT4B,YAIS,MAJF,UAIE,MAHTkhB,iBAGS,MAHG,GAGH,MAFTY,oBAES,MAFM,GAEN,MADT7hB,eACS,SAEHyjB,EAAc,CAClB1jB,KAAM+f,KAAK/f,GACX2jB,WAAYzC,EACZY,aAAcA,GAGV8B,EAAkBrP,EAPR,4BAO0BmP,GAI1C,OAFA1kB,SAAOC,IAAIC,KAAX,6BAA6Cc,GAEtC0gB,EAASkD,EAAiB,CAAE3jB,aASxBsU,EAAW,SAACoJ,EAAKlZ,GAC5B,IAAMof,EAAYrhB,OAAOC,KAAKgC,GAAU,IAExC,MAA+B,OAA3BwN,KAAKC,UAAUzN,GACVkZ,EAGJkG,EAAUle,QAIf6a,EAAkC9d,SAAQ,SAACohB,GAAD,cAA2Brf,EAAOqf,OAElD,IAAtBnG,EAAIzR,QAAQ,KACdyR,GAAO,IAEPA,GAAO,IAGTA,GAAOzL,IAAUzN,IAXRkZ,GAgBJ,SAASoG,EAAsBC,GACpChlB,SAAOC,IAAIC,KAAK,qCAChB,IAAMwkB,EAAclhB,OAAOygB,OAAO,GAAIxe,mBAAU,CAAEmD,GAAIoc,IACtD,CAAC,OAAOthB,SAAQ,SAACC,UACR+gB,EAAY/gB,MAErB,IAAMshB,EAAiB1P,EAAS,4BAA6BmP,GAC7D,OAAOhD,EAASuD,GAGX,SAASC,EAAiBC,GAC/BnlB,SAAOC,IAAIC,KAAK,gCAChB,IAAMklB,EAAoB5hB,OAAOygB,OAAO,GAAIxe,oBAG5C,CAAC,MAAM,mBAAmB,kBAAkB,YAAY,eAAe/B,SAAQ,SAACC,UACvEyhB,EAAkBzhB,MAE3B,IAAMue,EAAY3M,EAAS,gBAAiB6P,GACtCV,EAAclhB,OAAOygB,OAAO,GAAIxe,mBAAU,CAAE4f,aAAcF,EAAaG,UAAYpD,IACzF,CAAC,OAAOxe,SAAQ,SAACC,UACR+gB,EAAY/gB,MAErB,IAAM4hB,EAAahQ,EAAS,wBAAyBmP,GACrD,OAAOhD,EAAS6D,GAMX,SAASzlB,IACd,IAAM0lB,EAA6BjQ,EAAStO,cAAawe,IAAIC,iCAM7D,OAJA1lB,SAAOC,IAAIC,KAAK,wCAAyC,CACvDye,IAAK6G,IAGA9D,EAAS8D,GAQX,SAASG,EAAgB9lB,EAA0B+lB,QAAK,IAA/B/lB,MAAS,iBACvC,IAAM6kB,EAAclhB,OAAOygB,OAAO,GAAIxe,mBAAU,CAAE/E,iBAAkBb,GAAU+lB,GAE9E,CAAC,KAAM,WAAY,mBAAmBliB,SAAQ,SAAUC,UAC/C+gB,EAAY/gB,MAGrB,IAAMkiB,EAAiBtQ,EAAS7Q,OAAOiB,SAASmgB,SAAUpB,GAI1D,OAFA1kB,SAAOC,IAAIC,KAAX,kBAAkCL,EAAU,CAAE8e,IAAKkH,IAE5CnE,EAASmE,GAGX,SAASjlB,EAAiBf,EAAQQ,QAAkB,IAAlBA,MAAc,IACrD,IACMqkB,EAAW,iBACZjf,mBACApF,EAFY,CAGfR,WAGIkmB,EAAYxQ,EAPF,sBAOoBmP,GAEpC,OAAOhD,EAASqE,GAGlB,IAAIC,GAA4B,EAWzB,SAAS7mB,EAAwB8mB,GACtC,IAAID,EAAJ,CAIAA,GAA4B,EAE5B,IAAMtB,EAAW,iBACZjf,mBADY,CAEfnF,KAAM,EACNE,+BAA+B,EAC/B0lB,WAAY,gBAGPxB,EAAW,gBAElB,IACMY,EAAY/P,EADL,iBACoBmP,GAE3ByB,EACJlf,cAAawe,IAAIW,qBAAuBnf,cAAawe,IAAIY,sBACrDC,EAAmB/Q,EAAS4Q,EAAc,CAC9CF,gBACAX,cAGFtlB,SAAOC,IAAIC,KAAK,4BAA6B,CAAEye,IAAK2H,IAEpD5E,EAAS4E,IAaJ,SAASlmB,EAAT,GAAyF,IAAD,aAAJ,GAAI,MAAxDP,cAAwD,MAA/C,GAA+C,MAA3Cue,mBAA2C,MAA7B,GAA6B,MAAzB/d,mBAAyB,MAAX,GAAW,EAC7F,OAAOshB,QAAQC,UACZnR,MAAK,kBAAM2N,GAAeP,YAAeO,MACzC3N,MAAK,kBAAML,cAAY6B,MAAM,CAAEA,MAAOwJ,IAAuBja,UAAW+kB,YAAsB,CAAEjf,MAAOU,gBAAemC,YAAa,kBACnIsG,MAAK,SAAC+V,GAAoB,IAAD,MAElBC,EADc/hB,OAAOiB,SAAS0P,KAAKtO,SAAS,aACvB,eACR2f,cADQ,6BAEvB,6BACEhC,EAAW,iBACZjf,mBACApF,EAFY,CAGfR,WAGyF,iBAAzE,OAAd2mB,QAAc,IAAdA,GAAA,UAAAA,EAAgBnkB,YAAhB,mBAAsB4T,uBAAtB,mBAAuC0Q,2CAAvC,eAA4E9V,UAC9E6T,EAAYlkB,+BAAgC,GAI9C,IAAMomB,EAAUvmB,EAAYumB,QACtBC,EAAiB,CAAC,KAAM,WAAY,SAAU,mBAEhDD,EACFC,EAAe5c,KAAf,MAAA4c,EAAuB,CAAC,OAAQ,YAEhCA,EAAe5c,KAAf,MAAA4c,EAAuB,CAAC,WAG1BA,EAAenjB,SAAQ,SAACC,UACf+gB,EAAY/gB,MAGrB,IAAImjB,EAAYvR,EAASkR,EAAS/B,GAC9BkC,IACFE,GAAaF,GAGf5mB,SAAOC,IAAIC,KAAX,kCAAkDL,EAAU,CAAE8e,IAAKmI,IACnEpF,EAASoF,MAEVpW,OAAM,SAACvK,GAAD,OAAOnG,SAAOC,IAAIC,KAAK,gCAAiC,CAAEZ,QAAS6G,GAAKA,EAAE7G,aAGrF,IAIMynB,EAAiB,IAAIjI,OAAJ,IADL,CAAC,WAAY,eACiBkI,KAAK,KAA9B,YAA+C,KAYzDtF,EAAW,SACtB/C,EADsB,QAGnB,IAFHA,MAAM,IAEH,iBAD6E,GAC7E,EADD1d,EACC,EADDA,QAASgmB,EACR,EADQA,WACR,IADoBtlB,mBACpB,MADkCC,IAAcC,QAChD,EADyDqiB,EACzD,EADyDA,gBAE5D,OAAO,IAAIvC,SAAQ,SAACC,EAASsF,GAC3B,GArBqB,SAACvI,GAAD,OAC2C,KAA/D,OAAHA,QAAG,IAAHA,OAAA,EAAAA,EAAKvM,cAAcnR,QAAQ,MAAO,IAAIiM,QAAQ,gBAoBxCia,CAAiBxI,GAEnB,MADA3e,SAAOC,IAAIC,KAAK,2BAA4B,CAAEye,QACxC,IAAIzY,MAAJ,4BAAsCyY,GAjBpB,IAACyI,EAoB3BpnB,SAAOC,IAAIC,KAAK,WAAY,CAAEye,KApBHyI,EAoB8BzI,EAnB3DyI,EAASnmB,QAAQ8lB,GAAgB,SAAC3J,EAAOzZ,EAAKG,GAAb,OAA0BH,EAA1B,YAqB/B,IASMiY,EAAU,CAAEmG,YAAY,GAEzBkF,GACH7kB,YAAc,UAAW,CAAED,SAAS,EAAME,KAAM,CAAEC,KAAMX,KAI1D8f,EAAqB,CACnBC,SAjBmB,WAEjBE,EADE3gB,EACMyD,OAAOiB,SAAS1E,QAAQ0d,GACvBsI,EACDviB,OAAO2iB,KAAK1I,GAEZja,OAAOiB,SAASse,OAAOtF,KAYjCvb,aAASQ,EACTie,QAAS,4BACTjG,YAGEsI,GACFlC,YAAW,WACTpG,EAAQmG,YAAa,EACrBmF,MACChD,OAQF,SAAStkB,EAAT,GAA+B,IAAXC,EAAU,EAAVA,OAEnBynB,EAAiB9jB,OAAOygB,OAAO,GAAIxe,oBAEzC+b,EAAkC9d,SAChC,SAACohB,GAAD,cAA2BwC,EAAexC,MAE5C,IAAMyC,EAAsBrU,IAAUoU,GAEhChS,EAAY,CAChBhO,MAAOU,cACPnI,OAAQA,EACRoS,MAAOsV,GAGHC,EAAcjS,EAdJ,wBAcsBD,GAEtC,OAAOoM,EAAS8F,EAAa,CAAEvmB,SAAS,IAgBnC,IAAMgiB,EAAuB,SAAC,GAUzB,IAAD,aAAP,GAAO,MATTtE,WASS,MATH,GASG,MART0D,cAQS,MARA,GAQA,MAPTG,cAOS,MAPA,GAOA,MANTG,iBAMS,MANG,GAMH,MALTT,iBAKS,MALG,GAKH,MAJTuF,eAIS,MAJC/J,cAID,MAHTgK,mBAGS,MAHKjiB,mBAASkiB,cAAgB,GAG9B,MAFTC,kBAES,MAFIvZ,QAAQ5I,mBAASud,WAErB,MADT6E,8BACS,MADgBxZ,QAAQqZ,KAAiBD,GAAWG,GACpD,EACHhgB,EAAY,GACZxE,EAAO,eACXub,MACAmF,MAAO2D,EACPK,OAAQF,EACRvD,WAAYnC,EACZyF,aAAcD,GACV/E,GAAa,CAAEyB,WAAYzB,IAKjC,IAAKhE,IAAQ+I,GAAexF,EAC1B,OAAOA,EAUT,IANKvD,EAAI5X,SAAS,cAAgB4b,GAChC3iB,SAAOC,IAAIoY,KAAK,8BAA+BjV,IAK5CykB,EAEH,OADA7nB,SAAOC,IAAIC,KAAK,+CAAgDkD,GACzD8e,EAImCxD,YAAgBgJ,EAAa,gBAAjExI,YAENlf,SAAOC,IAAIoY,KAAK,uBAAwBjV,GAIrCskB,EAAY3gB,SAAS,WACxB2gB,GAAW,UAAc1f,cACzBhI,SAAOC,IAAIoY,KAAK,kCAAmCjV,KAIhDskB,EAAY3gB,SAAS,YAAcyb,IACtCkF,GAAW,YAAgBlF,EAC3BxiB,SAAOC,IAAIoY,KAAK,qCAAhB,iBACKjV,EADL,CAEE2kB,SAAUvF,OAKTkF,EAAY3gB,SAAS,cAAgB4b,IAExC/a,EAAU+a,UAAYA,EACtB3iB,SAAOC,IAAIoY,KAAK,8BAA+B,CAAE+L,WAAYzB,KAG/D/a,EAAUya,OAASA,GAAUA,EAAOjQ,cACpCxK,EAAUogB,OAAS,UACnBpgB,EAAUqgB,WAAgBtJ,GAAMgE,EAAS,cAAiBA,EAAc,IACxE,IAAMuF,EAAiB3S,EAASmS,EAAa9f,GAM7C,OAJA5H,SAAOC,IAAIC,KAAK,yBAAhB,iBACKkD,EADL,CAEE+kB,uBAAwBD,KAEnBA,GAMF,SAASE,EAAT,GAAoD,IAAD,IAAhB9oB,eAAgB,MAAN,GAAM,EACxD,EAAmCmG,mBAA3B4iB,iBAAR,MAAoB,WAApB,EAGM/S,EAAY9R,OAAOygB,OAAO,GAAIxe,mBAAU,CAC5C6iB,eAAe,IAejB,GAZAtoB,SAAOkE,KACL,0BACAqkB,2BAAiB,CACf5U,OAAQ,0BACRrU,UACA+oB,eAOc,iBAAdA,EACF,OAAOzoB,EAAS,CAAEC,OAAQ,cAG5B,IAAM2oB,EAAcjT,EArBJ,eAqBsBD,GAEtCoM,EAAS8G,EAAa,CAAEvnB,SAAS,IAS5B,IAAMwnB,EAAqC,SAACnT,QAAmB,IAAnBA,MAAY,IAC7D,IAAMmR,EAAU/hB,OAAOiB,SAASmgB,SAC1BpB,EAAW,iBACZjf,mBACA6P,GAGCoT,EAASnT,EAASkR,EAAS/B,GAEjC,OAAOhD,EAASgH,IAWX,SAASC,IACd,OAAOjH,EAASnM,EAAS,qCAAsC9P,uB,0MChxBpDmjB,EAAyC,4zBCDtD,IAAMC,EAAwC,WAG5C,QAF8CpjB,mBAASjF,8BDM1C,WACb,IAAMsoB,EAAS1Y,cACT9I,EAAQU,cACd,OAAO8gB,EACJzY,OAAO,CACNC,SAAUsY,EACVpnB,UAAW,CACT8F,WAGHoJ,OAAM,SAAC7N,GACN7C,SAAOC,IAAIC,KAAX,qEAA0E2C,OCdrErC,GAEFmhB,QAAQC,WAWXmH,EAAwB,WAC5B,OAAI5E,cACKxC,QAAQC,UAEViH,K,2DCfHG,EAAoB,WACtB,MAAgFvjB,mBAAxEwjB,EAAR,EAAQA,iBAAkBC,EAA1B,EAA0BA,gBAA1B,IAA2CnG,iBAA3C,MAAuD,GAAvD,MAA2DoG,mBAA3D,MAAyE,GAAzE,EACMC,EAAiBC,SAASJ,EAAiB,IAC3CK,EAAgBD,SAASH,EAAgB,IAEzCK,EAAY,SAAC1Y,GACjB2Y,EAAQzG,EAAWoG,EAAaF,EAAiBC,EAAiBrY,IAE9D4Y,EAA6B,SAACC,GAClC,OAAOC,EAAqBD,EAAWN,EAAgBE,EAAevG,IAGxE,GAAiB,2BAAdA,EAGD,OAFA/iB,SAAOC,IAAIC,KAAK,wCAChBqpB,EAAU,YACHE,EAA2B,SAGpC,IAAMG,EAAsBR,EAAiB,EACvCS,EAAqBP,EAAgB,EAE3C,OAAIM,IAAwBC,GAC1B7pB,SAAOC,IAAIC,KAAK,4BAChBqpB,EAAU,cACHE,EAA2B,YACzBG,GAAuBC,GAChC7pB,SAAOC,IAAIC,KAAK,2BAChBqpB,EAAU,sBACHE,EAA2B,YACxBK,MAAMV,IAAoBQ,OAA/B,GACL5pB,SAAOC,IAAIC,KAAK,iBAChBqpB,EAAU,YACHE,EAA2B,WAI3BD,EAAU,SAACzG,EAAWoG,EAAYF,EAAiBC,EAAgBrY,GAE9E,IAAIkZ,EAAcC,EAAe,GACnB,aAAXnZ,IACDkZ,EAAeZ,EACfa,EAAejH,GAGjB/iB,SAAOkE,KAAK,sBAAuB+lB,0BAAgB,CAC/CC,eAAgBH,EAChBI,eAAgBH,EAChBnX,WAAYuX,aAAWC,QACvBvX,gBAAiB,uBACjBwX,SAAU,sBAAuBrB,EAAmB,sBAAwBC,EAC5ErY,OAAQA,MAKD8Y,EAAuB,SAACY,EAAYnB,EAAgBE,EAAevG,GAC9E,MAAmB,UAAfwH,EACKnoB,YAAc,sBAAuB,CAAEC,KAAM,CAAEmoB,oBAAqBzH,KCjEnD,WAExB,IAAM+F,EAAS1Y,cACT9I,EAAQU,cACd,OAAO8gB,EAAOzY,OAAO,CACnBC,SAAU6L,IACV3a,UAAW+kB,YAAsB,CAC7BzW,mBAAoBA,cACpBnQ,SAAUA,qBACV2H,YD0DDmjB,GAAeha,MAAK,YAAc,EAAXpO,KAAY,IACpC/C,EAAU,GACd,GAAmB,YAAfirB,EAEFjrB,EAAU8pB,EAAiB,EAAI1I,YAAW,wCAAyC,CAAEgK,cAAetB,IAChG1I,YAAW,uCAAwC,CAAEgK,cAAetB,SAEnE,GAAmB,YAAfmB,EAA0B,CACnC,IAAII,EAAa,GACdvB,EAAiB,GAAuB,IAAlBE,EACvBqB,EAAa,uDACLvB,EAAiB,GAAKE,EAAgB,EAC9CqB,EAAa,wDACc,IAAnBvB,GAA0C,IAAlBE,EAChCqB,EAAa,sDACc,IAAnBvB,GAAwBE,EAAgB,IAChDqB,EAAa,wDAGfrrB,EAAUohB,YAAWiK,EAAY,CAAEvB,iBAAeE,kBAEpDsB,YAAe,CACb,CACEhiB,GAAI,UACJzG,SAAS,GAEX,CACEyG,GAAI,kBACJvG,KAAM,CACJwO,OAAQC,IAAuBC,WAGnC,CACEnI,GAAI,oBACJzG,SAAS,EACTE,KAAM,CACJwoB,SAAS,EACTvrB,QAASA,EACTgD,KAAM,kB,4FEvFT,IAAMwoB,EAAY,w8E,IAoNVC,E,oBAjDb,WAAYze,GAAQ,IAAD,SACjB,cAAMA,IAAN,MAEKiH,MAAQ,CACXyX,OAAO,GAJQ,E,2GAQnBC,kBAAA,WAAqB,IAAD,OA/IbtJ,QAAQC,UACZnR,MAAK,WACJ,IAAIya,EACJxmB,OAAOymB,kBAAkB,sBAEvBD,EADE1O,oBACW,QACJ7c,qBACI,SAEA,WAGf,IAAMyrB,EAAkBxO,cAAgB,YAAc,WAEtD5c,SAAOC,IAAIC,KAAX,oBAAoCkrB,EAAmB,CACrDF,aACArjB,OAAQwG,QAAQ3J,OAAOmD,QACvBwjB,WAAY3mB,OAAOhF,OAGjBod,cACF9c,SAAOC,IAAIC,KAAX,iBACS2c,eACT7c,SAAOC,IAAIC,KAAX,oBAGHuQ,MAAK,WAOJ,IAAM6a,EAAuBC,oCAC7BvrB,SAAOC,IAAIC,KAAK,sBAAuBorB,GACvCtrB,SAAOC,IAAIC,KAAK,yBAA0BwE,OAAO8mB,yBAElD/a,MAAK,WACJ,GACE9Q,uBACC+d,iBACChZ,OAAO+mB,QAAUrd,YAAW1J,OAAO+mB,OAAOC,cAAgBhnB,OAAO+mB,OAAOC,eAC1E,CACA1rB,SAAOC,IAAIC,KAAK,gCAEhB,IACEwE,OAAOinB,IAAIhmB,SAAWjB,OAAOiB,SAAS8e,KACtC,MAAO5f,GACP7E,SAAOC,IAAI4C,MAAM,oBAAqBgC,GACtCzF,YAAqB,CAAE4B,KAAM,sBAG/BghB,YAAW,WACThiB,SAAOC,IAAI4C,MAAM,wCACjBzD,YAAqB,CAAE4B,KAAM,iCAC5B,SAGNyP,MAAK,WACJ,OAAI/L,OAAOmD,QAAUuG,YAAW1J,OAAOmD,OAAO1C,aACrCT,OAAOmD,OAAO1C,cAAcsL,MAAK,SAACjL,GACvC,IAAMomB,EAAU3kB,cACRC,EAAS0kB,EAAT1kB,KAER2kB,YAAc,OAAD,UACRD,EADQ,CAEX1kB,KAAK,OAAD,UACCA,EADD,CAEF4kB,aAActmB,OAGlBxF,SAAOC,IAAIC,KAAK,8CAA+C,CAAEsF,sBAI9Dmc,QAAQC,aAEhBnR,MAAK,WACJ,IAAMtL,EAAcC,cAEpB,OAAIV,OAAOmD,QAAUuG,YAAW1J,OAAOmD,OAAOkkB,QACrC5mB,EACHT,OAAOmD,OAAOkkB,OAAO,CAAE5mB,gBACvBnF,SAAOC,IAAIC,KAAK,gDAGfyhB,QAAQC,aAEhBnR,KAAKsY,GACLtY,KAAKub,KACLvb,KAAKuY,GACLtY,OAAM,SAAC7L,GACN7E,SAAOC,IAAI4C,MAAM,uBAAwBgC,MAoDjC4L,MAAK,WACbzQ,SAAOC,IAAIgsB,WAAWC,kBAAgBC,WACtC,EAAKC,SAAS,CAAEpB,OAAO,Q,EAI3Bvb,OAAA,WAAU,IAAD,OACDnI,EAAQU,cACd,OAAKhE,KAAKuP,MAAMyX,MAKd,kBAAC,IAAD,CAAO/Y,MAAO6Y,EAActpB,UAAW,CAAE8F,WACtC,YAA+B,IAA5BmE,EAA2B,EAA3BA,QAASpJ,EAAkB,EAAlBA,KAAMQ,EAAY,EAAZA,MACjB,IAAK4I,GAAWpJ,IAASQ,EAAO,CAC9B,IAAMoT,EAAkB5T,EAAK4T,gBAEvBkM,EAAY5e,IAAI0S,EAAiB,uBACjCoW,EAAY9oB,IAAI0S,EAAiB,qBAAsB,IACvDqW,EAAa/oB,IAAI0S,EAAiB,wBAlEpD,YAAuE,IAAD,aAAJ,GAAI,EAArCkM,EAAqC,EAArCA,UAAWmK,EAA0B,EAA1BA,WAAYhlB,EAAc,EAAdA,MACtD,GAAI5C,OAAOmD,QAAUuG,YAAW1J,OAAOmD,OAAO0kB,QAM5C,OALAvsB,SAAOC,IAAIC,KAAK,wBAAyB,CACvCoH,QACA6a,YACAmK,eAEK5nB,OAAOmD,OAAO0kB,OAAO,CAAEjlB,QAAO6a,YAAWmK,eAKlD,IAAMtP,EAAM,CACV3b,UAAW,OACX8gB,UAAWA,EACXqK,WAAY9nB,OAAOiB,UAAYjB,OAAOiB,SAAS8e,MAGjD1H,YAA8BC,GAEvB2E,QAAQC,UAgDL6K,CAAsB,CACpBnlB,QACA6a,YACAmK,eA/Cd,YAAyD,IAAD,aAAJ,GAAI,EAA9BA,EAA8B,EAA9BA,WAAYD,EAAkB,EAAlBA,UAC5BxJ,EAAgCwJ,EAAhCxJ,aAAc6J,EAAkBL,EAAlBK,cAClBhoB,OAAOR,OACTQ,OAAOR,KAAKyoB,KAAOL,EACnB5nB,OAAOR,KAAK0oB,KAAO/J,EACnBne,OAAOR,KAAK2oB,IAAMH,GA6CVI,CAAe,CAAER,aAAYD,cAE7BrsB,SAAOkE,KAAK,sBAAuB6oB,8BAAoB9W,IAGzD,OAAO,EAAK3J,MAAMkN,YAxBf,+B,GAnBc9J,IAAMsd,W,2CCpLpBC,EAAc,SAAC,GAAkB,IAAhBzT,EAAe,EAAfA,SAC5B,OACE,kBAAC,IAAD,CACE0T,MAAO,CACLpE,OAAQ1Y,cACR9I,MAAOU,cACP4C,QAAS2E,cACT4d,KAAMC,eAERtpB,MAAO,CACLupB,kBACAC,cAGD9T,ICTC+T,EAAUtmB,cAAVsmB,MAEKC,EAAW,WACtB,OACE,yBAAKjU,cAAY,aACf,kBAAC,EAAD,KACE,kBAAC,EAAD,KACE,kBAAC,IAAD,CACEzV,MAAO2pB,YAAY,CACjBF,QACAG,cAAe,CAAyB,QAAxBC,eAAiCC,QAGnD,kBAAC,sBAAD,KACE,kBAAC,IAAD,KACE,kBAACC,EAAA,EAAD,c,gIClBHC,EAAmC,6BAP9C,SAAC/Z,GACC,IAAMC,EAAQ,GACd,OAAOD,EAAY1J,QAAO,SAAA4J,GACxB,GAAwB,uBAApBA,EAAWC,KACb,OAAO,EAET,IAAMxU,EAAOuU,EAAWvU,KAAKoE,MAC7B,OAAIkQ,EAAMtU,KAGRsU,EAAMtU,IAAQ,GACP,MAJiC,82EAC5CyU,wBAD4C,YAE5CuH,+BAF4C,4qB,8BCA1CsQ,EAAqB,WACzB,MAA6CvmB,mBAA7C,IAAQkO,cAAR,MAAiB,GAAjB,MAAqB/K,UAArB,MAA0B,GAA1B,MAA8B/F,aAA9B,MAAsC,GAAtC,EACA,MAAe,WAAX8Q,GACF3T,SAAOC,IAAIC,KAAK,2BACZ2C,GACF7C,SAAOC,IAAIC,KAAK,mCAEX6tB,EAAqBnlB,EAAI/F,IACZ,WAAX8Q,EACL9Q,GACF7C,SAAOC,IAAIC,KAAK,2CACT6tB,EAAqBnlB,EAAI/F,KAElC7C,SAAOC,IAAIC,KAAK,2BACTyhB,QAAQC,gBANV,GAUImM,EAAuB,SAACnlB,EAAI/F,GACvC,ODI4B,SAACmrB,EAAQnrB,GACrC,IAAMimB,EAAS1Y,cACT9I,EAAQU,cACd,OAAO8gB,EAAOzY,OAAO,CACnBC,SAAUwd,EACVtsB,UAAW+kB,YAAsB,CAC/Bjf,QACA0mB,SACAnrB,UAEF0N,QAAS,CAAEC,cAAc,KCdpByd,CAAerlB,EAAI/F,GAAO4N,MAAK,YAAe,IAAZpO,EAAW,EAAXA,KACvCD,YAAc,UAAW,CAAED,SAAS,IACpC,OAA0EE,GAAQ,IAA1E6rB,gCAAR,gBAAmE,GAAnE,GAA2ChY,eACrCiY,QADN,MAA4D,GAA5D,GAC6BthB,MAAK,SAACuhB,GACjC,OAAOA,EAAGxlB,KAAOA,KAGnB,GAAIulB,GAAS3qB,OAAOC,KAAK0qB,GAAOxnB,OAAQ,CACtC,IAAMkK,EAAShO,EAAQiO,IAAuBud,QAAUvd,IAAuBC,SAC/E3O,YAAc,kBAAmB,CAC/BC,KAAM,CACJwO,SACAG,KAAM,uBAIV5O,YAAc,UAAW,CAAED,SAAS,IAASsO,KAC3CrO,YAAc,eAAgB,CAC5BC,KAAM,CAAEisB,cAAe1lB,W,oNC2NlB2lB,IAjPM,SAAC,GASf,IARLjnB,EAQI,EARJA,MACAknB,EAOI,EAPJA,cACAC,EAMI,EANJA,KAMI,IALJC,sBAKI,aAJJC,mBAII,SAHJC,EAGI,EAHJA,MACAC,EAEI,EAFJA,SACAC,EACI,EADJA,WCrBAC,YAAY,CAMV,CACEnmB,GAAI,aACJ4E,SAAS,EACTxC,WAAY,MAEd,CACEpC,GAAI,WACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJ2sB,0BAAsBprB,EACtBqrB,oBAAgBrrB,EAChBsrB,kBAAkB,EAClBC,8BAA0BvrB,EAC1BwrB,6BAAyBxrB,EACzByrB,qBAAqB,EACrBC,iBAAiB,IAGrB,CACE1mB,GAAI,8BACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,kBACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,2BAC3BttB,SAAS,EACTE,KAAM,CACJqtB,kBAAc9rB,EACd+rB,oBAAgB/rB,EAChBgsB,oBAAgBhsB,IAGpB,CACEgF,GAAI,uBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,uBACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,2BAC3BttB,SAAS,GAEX,CACEyG,GAAI,mCACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,WACJ4E,QAAS+hB,YAAoB,CAAC,QAEhC,CACE3mB,GAAI,SACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,yBAAyBD,IAAeK,WAAWC,aAC9EztB,KAAM,CACJ0tB,wBAAwB,EACxB3B,QAAIxqB,IAGR,CACEgF,GAAI,WACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJ2tB,aAASpsB,EACTqsB,UAAMrsB,EACN0D,MAAOU,cACPd,UAAMtD,IAGV,CACEgF,GAAI,WACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,IAER,CACEuG,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,gBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,yBAAyBD,IAAeK,WAAWC,cAEhF,CACElnB,GAAI,mBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,mBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,cACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,wBACJ4E,SAAS,GAEX,CACE5E,GAAI,4BACJ4E,SAAS,GAEX,CACE5E,GAAI,oBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,eACJ4E,SAAS,GAEX,CACE5E,GAAI,kBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,OACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,yBAAyBD,IAAeK,WAAWC,cAEhF,CACElnB,GAAI,gBACJ4E,SAAS,GAEX,CACE5E,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,iBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,SACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,gBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,oCACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,aACJ4E,SAAS,EACTnL,KAAM,CACJwoB,SAAS,EACTvrB,aAASsE,EACTtB,KAAM,SAGV,CACEsG,GAAI,oBACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJwoB,SAAS,EACTvrB,aAASsE,EACTtB,KAAM,SAGV,CACEsG,GAAI,UACJ4E,SAAS,EACTrL,QAASuU,cAAYD,qBACrBpU,KAAM,CAAEC,KAAMV,IAAcC,UAE9B,CACE+G,GAAI,6BACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,yBAAyBD,IAAeK,WAAWC,cAEhF,CACElnB,GAAI,kBACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJwO,OAAQ,UACRqf,iCAA6BtsB,EAC7BusB,qBAAqB,EACrBC,mBAAmB,EACnBpf,UAAMpN,IAGV,CACEgF,GAAI,4BACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,uBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,2BACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,4BACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,aACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CAAEguB,gBAAgB,IAE1B,CACEznB,GAAI,gBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,iBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,iBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,kBACJ4E,QAAS+hB,YAAoB,CAC3B,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,OAEFptB,SAAS,GAEX,CACEyG,GAAI,gCACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,qCACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,SACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,eACJ4E,QAAS+hB,YAAoB,CAAC,KAAM,OACpCptB,SAAS,EACTE,KAAM,CAAEiuB,sBAAkB1sB,IAE5B,CACEgF,GAAI,wBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,EACTE,KAAM,CACJkuB,wBAAoB3sB,EACpB0sB,sBAAkB1sB,EAClB6R,qBAAiB7R,IAGrB,CACEgF,GAAI,qBACJ4E,QAAS+hB,YAAoB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAClEptB,SAAS,GAEX,CACEyG,GAAI,6BACJ4E,QAAS+hB,YAAoB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAC9EptB,SAAS,GAEX,CACEyG,GAAI,yBACJ4E,QAAS+hB,YAAoB,CAAC,QAEhC,CACE3mB,GAAI,8BACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,oCACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,UACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJmuB,6BAA6B,EAC7B9Y,2BAAuB9T,EACvB6sB,QAAQ,IAGZ,CACE7nB,GAAI,yBACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJquB,yBAAyB,GAE3B1lB,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,4BACJ4E,SAAUmjB,IACVxuB,SAAS,GAGX,CACEyG,GAAI,gBACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJuuB,UAAU,IAGd,CACEhoB,GAAI,2BACJ4E,SAAS,GAEX,CACE5E,GAAI,gCACJ4E,SAAS,GAEX,CACE5E,GAAI,yBACJ4E,QAAS+hB,YAAoB,CAAC,KAAM,OACpCltB,KAAM,CACJwuB,uBAAmBjtB,EACnBktB,qBAAiBltB,IAGrB,CACEgF,GAAI,sBACJ4E,SAAS,GAEX,CACE5E,GAAI,6BACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,2BACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,iCACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,iCACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,4BACJ4E,SAAS,GAEX,CACE5E,GAAI,mBACJ4E,SAAS,GAEX,CACE5E,GAAI,gBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,sBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,kBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,gCACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,mBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,aACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,mBACJ4E,QAAS+hB,YAAoB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OACxEptB,SAAS,EACTE,KAAM,CACJ0uB,qBAAqB,EACrBC,+BAA2BptB,IAG/B,CACEgF,GAAI,iBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,uBACJ4E,SAAS,GAEX,CACE5E,GAAI,YACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,2BAC3BptB,KAAM,CAAEwS,iBAAajR,IAEvB,CACEgF,GAAI,iBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,wBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,0BACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,yBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,EACTE,KAAM,CAAE4uB,WAAY,KAEtB,CACEroB,GAAI,iCACJ4E,SAAU+hB,YAAoB,CAAC,KAAM,KAAM,OAC3CptB,SAAS,GAEX,CACEyG,GAAI,oCACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,gBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,eACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CAAE+sB,6BAAyBxrB,IAEnC,CACEgF,GAAI,yBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,0BACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,wBACJ4E,SAAS,EACTnL,KAAM,CACJ6uB,WAAW,EACXC,wBAAoBvtB,EACpBwtB,2BAAuBxtB,IAG3B,CACEgF,GAAI,2BACJ4E,SAAS,EACTnL,KAAM,CAAEgvB,SAAS,IAEnB,CACEzoB,GAAI,cACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,oBACJ4E,SAAS,EACTnL,KAAM,CAAEivB,cAAU1tB,IAEpB,CACEgF,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,eACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJisB,mBAAe1qB,EACf2tB,yBAAyB,GAE3BvmB,WAAYwkB,IAAeC,yBAAyBD,IAAeK,WAAWC,cAEhF,CACElnB,GAAI,4BACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,YACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,yBAAyBD,IAAeK,WAAWC,cAEhF,CACElnB,GAAI,oBACJ4E,SAAS,EAETrL,SAAS,GAEX,CACEyG,GAAI,gBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,2BAC3BptB,KAAM,CACJmvB,gBAAgB,EAChBC,WAAW,IAGf,CACE7oB,GAAI,2BACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,mBACJ4E,QAAS+hB,YAAoB,CAAC,KAAM,KAAM,OAC1CvkB,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,mCACJ4E,QAAS+hB,YAAoB,CAAC,KAAM,KAAM,OAC1CvkB,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,oBACJ4E,QAAS+hB,YAAoB,CAAC,KAAM,OACpCvkB,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,yBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BvkB,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,mBACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,2BACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,oBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,2BAC3BptB,KAAM,CACJqvB,cAAc,EACdC,cAAc,EACdC,mBAAmB,EACnBC,qBAAqB,IAGzB,CACEjpB,GAAI,wBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,mBACJ4E,SAAS,EACTnL,KAAM,CACJyvB,WAAW,EACXC,oBAAqB,KACrBC,MAAO,CACLC,OAAQ,KACRC,YAAa,QAInB,CACEtpB,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,wBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJ8vB,wBAAwB,IAG5B,CACEvpB,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,YACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,eACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,kBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,yBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,uBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,gBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,uBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,gBACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,2BACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,gBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,wBACJ4E,SAAS,EACTrL,SAAS,GAEX,CACEyG,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,6BACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,eACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJ+vB,cAAc,EACdC,4BAA6B,KAGjC,CACEzpB,GAAI,uBACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJsT,MAAO,OAGX,CACE/M,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CACJkF,gBAAY3D,IAGhB,CACEgF,GAAI,wBACJ4E,QAAS+hB,YAAoB,CAAC,OAC9BptB,SAAS,GAEX,CACEyG,GAAI,2BACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,sBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,2BAC3BptB,KAAM,CACJmoB,yBAAqB5mB,IAGzB,CACEgF,GAAI,qCACJ4E,SAAS,EACTxC,WAAYwkB,IAAeC,yBAAyBD,IAAeK,WAAWC,cAEhF,CACElnB,GAAI,kBACJ4E,QAAS+hB,YAAoB,CAAC,QAEhC,CACE3mB,GAAI,qBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,aACJ4E,SAAS,EACTrL,SAAS,EACTE,KAAM,CAACiwB,QAAS,GAAIxkB,UAAU,EAAOykB,QAAS,GAAIC,UAAW,KAE/D,CACE5pB,GAAI,wBACJ4E,SAAS,EACTrL,SAAS,EACT6I,WAAYwkB,IAAeC,4BAE7B,CACE7mB,GAAI,WAIJ4E,SAAS,KD/1Bb,IAAMoe,EAAU3kB,cACRC,EAAsB0kB,EAAtB1kB,KAAMiE,EAAgBygB,EAAhBzgB,YAERsnB,EAAgB9R,YAAqBxV,GAC3CnL,SAAOC,IAAIC,KAAX,kCAAkDuyB,EAAiB,CAAEnrB,UACrE,IAAQ5B,EAASD,mBAATC,KACJP,EAAc+B,EAAKunB,MAAQvnB,EAAKunB,KAAK3C,aAErCpmB,GAAiB,MAATA,IACVP,EAAcT,OAAOiB,SAASC,KAAKC,OAAO,IAG5C,IAAMX,EAAU,CACd,aAAc,6BACd,yBAA0BC,EAC1B,4BAA6BuC,YAAoBJ,IAG7CorB,EAAW,IAAIC,IAAe,CAClClN,IAAK+I,EACLoE,YAAa,UACb1tB,YAGI2tB,EAAY,IAAIC,IAAc,CAClCrN,IAAK+I,EACLoE,YAAa,UACb1tB,YAKI6tB,EAAoB,IAAID,IAAc,CAC1CrN,IAAK+I,EACLoE,YAAa,UACb1tB,YAMI8tB,EAAYzU,iBAChB,mBAAoB0U,EAApB,EAAGA,cAA8B3e,gBACjCye,EACAF,GAGIK,EAAYC,aAChB,YAAyE,IAGnEC,EACApyB,EAJHK,EAAqE,EAArEA,UAAWqF,EAA0D,EAA1DA,cAAeH,EAA2C,EAA3CA,aAA2C,IAA7BgS,gBAA6B,MAAlB,GAAkB,EAC9DhX,GAD8D,EAAdD,QACPD,EAAzCE,eACR,GADiDF,EAA1BG,WACUyxB,EADgB5xB,EAAf4xB,cAC1BziB,qBAAR,SAIA,GAAI9J,GAAiBA,EAAcC,OAAQ,CACzC,IAAM0sB,EAAa,IAAIC,IAAI5sB,EAAcG,KAAI,qBAAGvH,YAChD8zB,EAAuC,MAAhC1sB,EAAc,GAAG5D,WAAjB,mCACP9B,EAAOqV,MAAMjS,KAAKivB,GAAYrM,KAAK,IACnChnB,SAAOC,IAAI4C,MAAX,UAA2BtB,EAA3B,aAAqDP,EAAQ,CAC3DsG,UAIEzI,IAAsBkI,SAAS/F,KAAUuyB,eAC3C7sB,EAAchD,SACZ,YAAoF,IAAD,aAAP,GAAO,EAAnE8vB,EAAmE,EAAhFvmB,YAAqCwmB,EAA2C,EAApDn0B,QAAoD,IAA1BL,iBAA0B,MAAd,GAAc,EAEjFu0B,GACEE,YACED,EACAx0B,EAAUO,YAAc,CAAE6C,KAAMpD,IAChCwR,MAAK,WACLzQ,SAAOC,IAAIC,KAAX,UAA0BuzB,EAA1B,2BAKL,GAAIltB,EAAc,CACvB,IAAQzD,EAAeyD,EAAfzD,WAIJ6wB,EAGJP,EAAO,kBACPpyB,EAAO8B,EACP9C,SAAOC,IAAI4C,MAAX,UAA2BtB,EAA3B,iBAAyDuB,EAAc,CAAEwE,eAEzE8rB,EAAO,kBACPpyB,EAAO,UACPhB,SAAOC,IAAI4C,MAAX,uBAAyC,CAAEyE,UAe7C,GAXAtH,SAAOkE,KACL,eACAof,wBAAc,CACZ8P,OACApyB,OACA8e,OAAQve,EACR4hB,cAAe5f,IAAIgV,EAASlW,KAAM,sDAKzB,MAATrB,GAAiB0V,cAAYkC,QAAjC,CAqBA,GAAI7Z,IAA8BiC,GAGhC,OAFAhB,SAAOC,IAAIC,KAAX,UAA0BqB,EAA1B,oCACAxC,IAA8BiC,GAAM0F,EAAcmG,MAAK,SAAChI,GAAD,OAASA,EAAIvF,UAAY0B,MAEtEnC,IAAsBkI,SAAS/F,KAAUuyB,eAAsB/iB,EACzExQ,SAAOC,IAAIC,KAAX,UAA0BqB,EAA1B,yBAKF+E,YAAc,CACZhH,QAAS8zB,EACTvwB,MAAO,CACL6D,gBACAH,sBAnCJ,CAA2C,IAAD,EACd,6BAAlB,OAAJW,QAAI,IAAJA,GAAA,UAAAA,EAAMunB,YAAN,eAAYlb,OACdnT,YAAqB,CACnBC,YAAa,CACXC,KAAM,EACNC,SAAU,EACVG,iBAAkB,4BAItBilB,kBAmCFiO,EAAY,IAAIC,IAAU,CAC9BC,MAAO,CACLC,QAAS,KACTC,IAAK,KACLC,QAAQ,GAEVC,SAAU,SAACC,EAAD,EAAuCtxB,GAAW,IAAxCtB,EAAuC,EAAvCA,cAClB,GAA8B0xB,EAD2B,EAAxBA,cACzBmB,iBAAR,SAEA,OAAIvxB,GAA8B,MAArBA,EAAMC,YACjB9C,SAAOC,IAAI4C,MAAX,mBAAqC,CACnCvD,QAASuD,EAAMvD,WAEV,GAGLuD,GAASsxB,EAAQ,IAAMC,GACzBp0B,SAAOC,IAAI4C,MAAX,gBAAiCtB,EAAiB,CAChDjC,QAASuD,EAAMvD,WAEV,IAGTU,SAAOC,IAAI4C,MAAX,wBAAyCtB,EAAiB,CACxDjC,QAASuD,EAAMvD,WAEV,MA+BXU,SAAOC,IAAIC,KAAX,cAA8BuuB,EAAKlb,MAAS,CAAEjM,QAAOmnB,SACrDzuB,SAAOC,IAAIC,KAAK,uBAAwB,CACtCoH,QACAme,IAAK+I,EACL6F,SAAU3F,EACV4F,MAAO3F,IAGT,IAAM4F,EAAc3F,GAASjT,cAEvB6Y,EAAe,IAAIC,IAAa,CACpC7F,MAAO2F,EACPG,KArCe,WACf,IAAMC,EAAc,CAACzxB,IAAqBgwB,EAAW/xB,eASrD,GAHK2tB,GAAeD,IAAYF,GAC9BgG,EAAY1qB,KAAK2pB,GAEf9E,EACF6F,EAAY1qB,KAAK6kB,QAGjB,GADA6F,EAAY1qB,KAAKhF,YAASC,IACtBwpB,EAAgB,CAClB,IAAMkG,EAAeC,cAA2BC,OAAO9B,GACvD2B,EAAY1qB,KAAKwoB,EAAgBmC,EAAe5B,OAC3C,CACL,IAAM+B,EAAcF,cAA2BC,OAAOpC,GACtDiC,EAAY1qB,KAAKwoB,EAAgBsC,EAAcrC,GAGnD,OAAOtxB,aAAWgD,KAAKuwB,GAejBK,GACNC,UAAWA,MAMb,OAHAV,EAAYW,UAAU,CAAE7yB,KAAM8yB,gBAE9BC,YAAUZ,GACHA,I,6GEjQHa,EAA0BxqB,YAAQ,CACtCjC,GAAI,6BACJmB,QAAS,CACP,CAAEkI,MAAOuJ,IAAsBha,UAAW,CAAE8F,MAAOU,eAAcmC,YAAa,gBAHlDU,CAK7B,CACDM,YAAa,CACX2kB,YAAa,iGAAM,kCAAN,oEAAa,qCAAb,+FACbwF,YAAa,qGAAM,+DAAN,oEAAa,yCAAb,mGACbC,YAAa,yGAAM,+DAAN,oEAAa,6CAAb,0GAIFF,Q,geCTf,IAAMG,EAA4BhqB,aAChC,sGAAM,2CAAN,oEAAa,0CAAb,uGACA,CACE5C,GAAI,eACJ6C,QAAS,kBAAM,kCAUN+D,EAAb,Y,QAAA,wIAEEimB,iBAAmB,SAACC,EAAWrsB,EAAMyD,GACnC,IAAM6oB,EAAY,EAAKrpB,MAAMjD,GAE7B,OAAKqsB,EAAUrsB,IAASssB,EACf7oB,GAAE,GACA4oB,EAAUrsB,KAAUssB,EACtB7oB,GAAE,GAEJ,IAVX,EAmCE8oB,oBAAsB,SAAC9xB,GACrB,IAAQ8E,EAAO,EAAK0D,MAAZ1D,GAIR,OAFA5I,SAAOC,IAAIC,KAAX,WAA2B0I,EAA3B,oBAAiD9E,GAE1C,CACL3B,QAAS2B,IAzCf,EA8CE+xB,0BAA4B,SAAC/xB,GAC3B,MAMI,EAAKwI,MANT,IACEjK,KACEsH,QAAWqB,EAFf,EAEeA,WAAY8qB,EAF3B,EAE2BA,SAEzBltB,EAJF,EAIEA,GAKF,OATA,EAKEgF,mBAQE5C,GACFA,EAAW+qB,cAAc,CACvB/1B,OAAQA,SAAOkE,KACf4Z,UAAWlV,EACXotB,YAAalyB,IAIbA,IAAUgyB,EACL,CAAEA,SAAUhyB,GAGd,IAfE,IAzDb,E,EAAA,G,EAAA,G,sEAAA,2BAcEmyB,cAAA,WACE,MAMIjyB,KAAKsI,MAJMtB,EAFf,EACE3I,KACEsH,QAAWqB,WAEbpC,EAJF,EAIEA,GAKF,OATA,EAKEgF,mBAIuB5C,GAAcA,EAAWwD,aAChDxO,SAAOC,IAAIC,KAAX,WAA2B0I,EAA3B,8BAEO,CACL4E,SAAS,IAGN,IA/BX,EA2EEyd,kBAAA,WACE,MAA+CjnB,KAAKsI,MAA5C6B,EAAR,EAAQA,kBAAmBI,EAA3B,EAA2BA,YAAa3F,EAAxC,EAAwCA,GAClCstB,EAA2BlyB,KAAK6xB,0BAA0B1nB,GAE5DgoB,EAAqB,GAErB5nB,IACF4nB,EAAqBnyB,KAAK4xB,oBAAoBrnB,IAEhD,IAAM6nB,EAAuBpyB,KAAKiyB,gBAE5B7yB,EAAO,iBACR+yB,EACAD,EACAE,GAG+B,IAAhC5yB,OAAOC,KAAKL,GAASuD,QAAcvE,YAAcwG,EAAIxF,IA5F7D,EA+FEizB,mBAAA,SAAmBX,EAAWY,EAAWC,GACvC,MAAqDvyB,KAAKsI,MAAlD6B,EAAR,EAAQA,kBAAmBP,EAA3B,EAA2BA,kBAAmBhF,EAA9C,EAA8CA,GAE1CstB,EAA2B,GAEzBC,EAAqBnyB,KAAKyxB,iBAC9BC,EACA,cACA1xB,KAAK4xB,qBAILM,GADGR,EAAU9nB,mBAAqBA,EACP5J,KAAK6xB,0BAA0B1nB,GAE/BnK,KAAKyxB,iBAC9BC,EACA,oBACA1xB,KAAK6xB,2BAGT,IAAMO,EAAuBpyB,KAAKiyB,gBAE5B7yB,EAAO,iBACR+yB,EACAD,EACAE,GAG+B,IAAhC5yB,OAAOC,KAAKL,GAASuD,QACvBvE,YAAcwG,EAAIxF,IA5HxB,EAgIEozB,uBAAA,WACE,MAAqFxyB,KAAKsI,MAAlFjK,EAAR,EAAQA,KAAMoJ,EAAd,EAAcA,QAAS6D,EAAvB,EAAuBA,iBAAkBnD,EAAzC,EAAyCA,8BAA+B2B,EAAxE,EAAwEA,SAExE,OACE,kBAACwB,EAAD,GACEmnB,UAAWhrB,EACX5I,MAAOsJ,GAAiC2B,GACpCzL,KAvIZ,EA4IEq0B,mBAAA,WACE,MAAuC1yB,KAAKsI,MAAtC1D,EAAN,EAAMA,GAAN,IAAU+C,2BAAV,MAAgC,GAAhC,EAEA,OACE,kBAAC6pB,EAAD,GAA2B5sB,GAAIA,GAAQ+C,GACpC3H,KAAKwyB,wBAAuB,KAjJrC,EAsJEG,wBAAA,WACE,MAKI3yB,KAAKsI,MAJP1D,EADF,EACEA,GACQe,EAFV,EAEEtH,KAAQsH,QAFV,IAGEwE,yBAHF,aAIEjC,eAAkB0qB,EAJpB,EAIoBA,eAAgBC,EAJpC,EAIoCA,sBAGpC,OACE,kBAAC,IAAD,CACE10B,QAASgM,GAAqBxE,EAAQxH,QACtCyG,GAAIA,EACJguB,eAAgBA,EAChBtd,UAAWud,GAEV7yB,KAAKwyB,2BArKd,EA0KE/mB,OAAA,WACE,MAQIzL,KAAKsI,MART,IACEjK,KACEsH,QAAWqB,EAFf,EAEeA,WAAY7I,EAF3B,EAE2BA,QAEzByJ,EAJF,EAIEA,aACkBkrB,EALpB,EAKE5qB,eAAkB4qB,cALpB,IAME3oB,yBANF,SAWA,OAXA,EAOEU,oBAI0B7D,GAAcA,EAAWwD,YAC5C,kBAAC,IAAMuoB,SAAP,MAGLnrB,EACKuC,GAAqBhM,GAAW6B,KAAK0yB,qBAG1CI,EACK9yB,KAAK2yB,0BAGPxoB,GAAqBhM,GAAW6B,KAAKwyB,0BAlMhD,GAAsC9mB,IAAMsd,a,6SCU7BgK,IA5BW,SAAC,GAA0C,IAAxC70B,EAAuC,EAAvCA,QAASqX,EAA8B,EAA9BA,SAAayd,E,oIAAiB,2BAClE,EAAgCC,mBAAS/0B,GAApCg1B,EAAL,KAAmBC,EAAnB,KAQA,OANAC,qBAAU,WACJl1B,GACFi1B,EAAUj1B,KAEX,CAACA,EAASi1B,IAGX,kBAAC,IAAD,KACMH,EADN,CAEEK,SAAUC,IAAY,EAAI,IAC1Bpd,OAAQhY,EAAU,OAAS,EAC3Bq1B,MAAO,CACLC,SAAUt1B,EAAU,UAAY,UAElCu1B,eAAgB,WACTv1B,GACHi1B,GAAU,MAIbj1B,GAAWg1B,EAAe3d,EAAW,kBAAC,IAAMud,SAAP,S,iCC3B5C,qEAce,SAASY,IACtB,IACI93B,EADA+3B,GAAsB,EAGpBC,EACJnzB,OAAOmD,QAAUnD,OAAOmD,OAAOiwB,YAAcpzB,OAAOmD,OAAOiwB,WAAWC,UAGlEC,EAAuBta,cAEvBua,EAA0BxyB,mBAASyyB,SAAWzyB,mBAAS9B,IACvDw0B,EAA0B/e,cAE5Bye,GACFh4B,EAAS,qCACT+3B,GAAsB,GACbI,GAETh4B,SAAOC,IAAIC,KAAK,4BAA6B,CAC3CP,SAAUA,qBACV6c,QAASA,oBACT4b,aAActb,cACdub,gBAAiBxb,cACjBe,SAAgC,MAAtBnY,mBAASmY,SACnB0a,gBAAiC,oBAAhB5zB,OAAOhF,KACxB2rB,WAAY3mB,OAAOhF,KACnB64B,cAAe9yB,mBAAS+yB,cAG1BZ,GAAsB,EACtB/3B,EAAM,+BACJF,qBAAa,UAAY6c,oBAAY,SAAW,cAEzC2b,GACTn4B,SAAOC,IAAIC,KAAK,sBAAuB,CACrCk4B,aAActb,cACdub,gBAAiBxb,cACjB4b,QAASC,oBAAUxnB,WAAaA,UAAUiM,WAC1CA,UAAWjM,WAAaA,UAAUiM,YAEpCya,GAAsB,EACtB/3B,EAAS,iCACAo4B,GACTp4B,EAAS,iBACT+3B,GAAsB,IAEtBA,GAAsB,EACtB/3B,EAAS,sBAGX,IAAM84B,EAAkB,kBACtBf,EAAsB,WAAa,cADb,IAEpB/3B,EAGJ,OAFAG,SAAOC,IAAIC,KAAX,GAAmBy4B,GAEZ,CACLC,kBAAmBhB,EACnB/3B,Y,4HChEEg5B,G,OAAWrtB,aAAc,uFAAM,kGAAN,oEAAa,2BAAb,sFAAwC,CACrE5C,GAAI,WACJ6C,QAAS,kBAAM,yCAGXqtB,EAAqBttB,aAAc,8FAAM,kCAAN,oEAAa,kCAAb,6FAA+C,CACtF5C,GAAI,oBACJ6C,QAAS,kBAAM,wCAGXstB,EAAavtB,aAAc,sFAAM,gEAAN,oEAAa,0BAAb,qFAAuC,CACtE5C,GAAI,eACJ6C,QAAS,kBAAM,wCAYFutB,mBATI,WACjB,OAAI7U,cACK,kBAAC2U,EAAD,MACEvF,cACF,kBAACwF,EAAD,MAEF,kBAACF,EAAD,W,oCC3BT9vB,EAAOC,QAAU,CAAC,QAAU,0B,0CC2BbiwB,EAZK,SAAC3sB,GACnB,OAAOA,EAAMkN,UChBAyf,O,4jBCsDf,GArDAC,IAA0Bx0B,OAAOw0B,yBAA2BvF,wDAiCvDwF,QAAQC,UAAUC,UACrBF,QAAQC,UAAUC,QAChBF,QAAQC,UAAUE,mBAAqBH,QAAQC,UAAUG,uBAGxDJ,QAAQC,UAAUI,UACrBL,QAAQC,UAAUI,QAAU,SAAUC,GACpC,IAAIC,EAAK11B,KACT,IAAK21B,SAASC,gBAAgBC,SAASH,GAAK,OAAO,KACnD,EAAG,CACD,GAAIA,EAAGL,QAAQI,GAAI,OAAOC,EAC1BA,EAAKA,EAAGI,eAAiBJ,EAAGK,iBACd,OAAPL,GAA+B,IAAhBA,EAAGM,UAC3B,OAAO,QAOLx2B,OAAOy2B,iBAAkB,GAAGC,UAAY,CAC5C,IAAIC,EAAQC,EAAQ,GAChBC,EAAuBD,EAAQ,KAC/BE,EAAYH,EAAMG,UACtBH,EAAMG,UAAY,SAAUC,EAAQza,GAElCwa,EAAUpZ,MAAMld,KAAM,CAACu2B,EAAQza,IAC/Bua,EAAqBE,EAAQza,IAKjC0a,OAAO1Q,MACL0Q,OAAO1Q,OACP,SAAUhmB,GACR,OAAOA,IAAUA,I,uOCtDrB22B,KAAoBxzB,cAAasmB,MAEjC,IAAMmN,EAAahrB,IAAMirB,MAAK,6EAAM,oWAAN,oEAAa,iBAAb,6EAE9B36B,SAAOC,IAAIgsB,WAAWC,kBAAgB0O,MAEtC,IAAMC,EAAcC,cACpB,EAAoDD,EAA5C3zB,YAAR,MAAe,GAAf,EAAmBue,EAAiCoV,EAAjCpV,IAAKjR,EAA4BqmB,EAA5BrmB,QAAxB,EAAoDqmB,EAAnB3yB,iBAAjC,MAA6C,GAA7C,EAEMkjB,EAAkBlkB,EAAKF,SAAW,YAAYmY,KAAKjY,EAAKF,SAAW,KAAO,MAE1D,MAAlBvB,mBAASC,OACXwB,EAAKunB,KAAK3C,aAAepnB,OAAOiB,SAASC,KAAKC,OAAO,IAGvDk1B,eAAY,CAAEvmB,YAETtN,EAAKF,SACRV,YAAc,CAAEhH,QAAS,wBAO3BU,SAAOg7B,KACL,CACE1zB,MAAOJ,EAAKF,QACZi0B,eAAgBxV,EAAIwV,eACpBtd,UAAWf,cACXse,aAAc,oBACdC,aAAc,WACdC,eAAgB,eAChBC,aAAiBjQ,EAAL,SACZkQ,OAZe,IAcjB,GACA,CACEA,OAAQ,CACNC,iBAAkBnQ,EAClBiQ,aAAiBjQ,EAAL,SACZ,gBAAiB,CACfiQ,aAAiBjQ,EAAL,aAOpB,IAAMtC,EAAS0S,YAAsB,CACnChN,cAAe/I,EAAI+I,cACnBlnB,MAAOJ,EAAKF,QACZynB,KAAMvnB,EAAKunB,MAAQ,GACnBE,aAAa,IAGf5mB,YAAa,CACXT,MAAOI,YAAoBR,EAAKF,SAChCiB,iBAAkBwd,EAAIxd,iBACtBC,cAEF,IAAMuzB,EAAmB,kBAAM,8DAmB/B,WACE,IAlBcC,EAkBd,EAAkD/D,cAA1CiB,EAAR,EAAQA,kBAAR,IAA2B/4B,cAA3B,MAAoC,UAApC,EACK+4B,GAnBS8C,EAmCPlO,IAlCPmO,IAASlsB,OACP,kBAAC,IAAD,CAAgBqZ,OAAQA,GACtB,kBAAC,IAAD,KACI8S,cAGA,kBAAC,IAAMC,SAAP,CAAgBj8B,SAAU,kBAAC67B,EAAD,OACxB,kBAACf,EAAD,OAHF,kBAACgB,EAAD,QAQN/B,SAASmC,eAAe,UAOxBx1B,YAAc,CAAEhH,QAAQ,qBAAsBO,IAkBlDk8B,I,iDCrHA,aACAC,WAASC,OAAQ,EACjBD,WAAS3jB,KAAO,c,oBCDhBtP,EAAOC,QAAU,CAAC,cAAc,uFAAuF,WAAa,uFAAuF,iCAAiC,UAAU,4BAA8B,UAAU,2BAA2B,OAAO,sBAAwB,OAAO,sBAAsB,UAAU,iBAAmB,UAAU,uBAAuB,yBAAyB,kBAAoB,yBAAyB,sBAAsB,UAAU,iBAAmB,UAAU,sBAAsB,UAAU,iBAAmB,UAAU,oBAAoB,YAAY,eAAiB,YAAY,sBAAsB,SAAS,gBAAkB,SAAS,yBAAyB,MAAM,oBAAsB,MAAM,0BAA0B,MAAM,qBAAuB,MAAM,sBAAsB,WAAW,iBAAmB,WAAW,kBAAkB,UAAU,cAAgB,UAAU,wBAAwB,MAAM,mBAAqB,Q,gICI3gC,SAASkzB,EAAT,GAA8C,IAApBvR,QAAmB,MAAJ,GAAI,GAAnBA,WACvC,OAAO,kBAAC1P,EAAA,EAAD,KAAiByF,YAAWiK,I,aCC/BwR,EAAgB,SAAC7vB,GACrB,OAAO,6BAAM8vB,uBAAa9vB,EAAMkN,SAAUmgB,SAAS0C,QAG/CC,EAAmB,SAAC,GAAyD,IAAD,IAAtD36B,mBAAsD,MAAxCC,IAAcC,QAA0B,EAAjB06B,EAAiB,EAAjBA,WAC/D,OAAQ56B,GACN,KAAKC,IAAc46B,oBACjB,OAAO,kBAACN,EAAD,CAAgBvR,WAAY,uBAErC,KAAK/oB,IAAc+hB,mBACjB,OAAO,kBAAC0R,EAAA,EAAD,CAAyBkH,WAAYA,IAE9C,KAAK36B,IAAcE,aACjB,OAAO,kBAACo6B,EAAD,CAAgBvR,WAAY,2BAErC,KAAK/oB,IAAcG,kBACjB,OAAO,kBAACm6B,EAAD,CAAgBvR,WAAY,gCAErC,KAAK/oB,IAAcK,eACjB,OAAO,kBAACi6B,EAAD,CAAgBvR,WAAY,2BAErC,QACE,OAAO,kBAACuR,EAAD,CAAgBvR,WAAY,yBAI1B,gBAAqB,IAAlB4R,EAAiB,EAAjBA,WAChB,EAAmCE,YAAW,WAAtCjvB,EAAR,EAAQA,QAASrL,EAAjB,EAAiBA,QAASE,EAA1B,EAA0BA,KAE1B,OAAKmL,GAAYrL,EAKf,kBAAC,EAAD,KACE,kBAAC,EAAD,CAAkBR,YAAW,OAAEU,QAAF,IAAEA,OAAF,EAAEA,EAAMC,KAAMi6B,WAAYA,KALlD,O,mEChCLG,EAA8B,CAAC,kBAE/BC,EAAwC,SAACh5B,GAAD,OAC5C+4B,EAA4B7vB,MAAK,SAAC+vB,GAAD,OAAeA,EAAUzd,KAAKxb,OAKlD,eAAc,IAAD,uBAATk5B,EAAS,yBAATA,EAAS,gBAC1B,IAAMl5B,EAAMk5B,EAAK,GACXj6B,EAASk6B,UAAK5b,MAAM,EAAM2b,GAEhC,OAAI7b,OAAOpe,KAAP,IAAuBe,EAAvB,KACGg5B,EAAsCh5B,IACzC3D,SAAOC,IAAIC,KAAX,mBAAmCyD,EAAI1C,QAAQ,KAAM,KAArD,IAA6DsO,cAA7D,IAA6E6d,eAGxE,MAGFxqB,I,4SCnBF,IAAMm6B,EAAyB,SAAzBA,EAA0B,GAAkD,IAAhDC,EAA+C,EAA/CA,GAA+C,IAA3CC,mBAA2C,MAA7B,EAA6B,MAA1BC,gBAA0B,MAAf,KAAe,EAATt0B,EAAS,EAATA,GAC7E,OAAO,IAAI+Y,SAAQ,SAACC,EAASsF,GAC3BxiB,OAAOC,YAAYiE,EAAI,SAAS,GAChCo0B,IACGvsB,MAAK,SAAC7N,GACL5C,SAAOC,IAAIC,KAAX,SAAyB0I,EAAzB,WACAlE,OAAOC,YAAYiE,EAAI,SACT,MAAVhG,GACFu6B,QAAQ9kB,KAAR,oBAAkCzP,GAEpCgZ,EAAQhf,MAET8N,OAAM,SAAC7N,GACNmf,YAAW,WACW,IAAhBib,GAKJj9B,SAAOC,IAAIC,KAAX,SAAyB0I,EAAzB,UAEAm0B,EAAuB,CAAEC,KAAIC,YAAaA,EAAc,EAAGC,WAAUt0B,OAAM6H,KACzEmR,EACAsF,IAPAA,EAAOrkB,KASRq6B,SAENxsB,OAAM,WACP1Q,SAAOC,IAAI4C,MAAX,SAA0B+F,EAA1B,WACAlE,OAAOiB,SAASy3B,aAaP5xB,EAAgB,SAC3B6xB,EAD2B,GAGvB,IADFz0B,EACC,EADDA,GAAa00B,EACZ,EADG7xB,QAAiCd,EACpC,EAD6B9H,MAE1B06B,EAAgB5C,gBAAK,kBAAMoC,EAAuB,CAAEC,GAAIK,EAAez0B,UAoB7E,OAnB8B8G,IAAM8tB,YAAW,SAAClxB,EAAOmxB,GAKrD,OAJApG,qBAAU,WACRgG,IAAgB5sB,OAAOC,UACtB,IAECpE,EAAMmqB,UACD6G,EAAkB,kBAACA,EAAD,MAAsB,KAG7ChxB,EAAMzJ,MACD8H,EAAiB,kBAACA,EAAD,MAAqB,KAI7C,kBAAC,WAAD,CAAU/K,SAAU09B,EAAkB,kBAACA,EAAD,MAAsB,MAC1D,kBAACC,EAAD,KAAmBjxB,EAAnB,CAA0BmxB,IAAKA,W,gCCpEvC,+SASO,SAAS3lB,EAA2BV,GAAc,IAAD,IACtD,QAC0C,SAA7B,OAAXA,QAAW,IAAXA,GAAA,UAAAA,EAAa5C,eAAb,eAAsB+B,iBACtBmnB,YAAS,OAACtmB,QAAD,IAACA,GAAD,UAACA,EAAa5C,eAAd,aAAC,EAAsBmpB,2BAI7B,SAAS3lB,EAA0BZ,GACxC,OAAkB,OAAXA,QAAW,IAAXA,KAAa5C,QAChB,CACEopB,eAAgBxmB,EAAY5C,QAAQ,4BACpCqpB,WAAYzmB,EAAY5C,QAAQ,wBAChCspB,kBAAmB1mB,EAAY5C,QAAQ,+BACvCupB,iBAAkB3mB,EAAY5C,QAAQ,8BACtCwpB,WAAY5mB,EAAY4mB,WACxBC,aAAc7mB,EAAY5C,QAAQ0pB,aAClCC,WAAY/mB,EAAY5C,QAAQ4pB,WAChCC,WAAYjnB,EAAY5C,QAAQ8pB,WAChCC,UAAWnnB,EAAY5C,QAAQgqB,UAC/BC,cAAernB,EAAY5C,QAAQkqB,cACnCC,UAAWvnB,EAAY5C,QAAQoqB,UAC/BC,UAAWznB,EAAY0nB,aAEzB,GAOC,SAASjnB,IACd,IAAMD,EAAcgF,cAAgB,aAAe,eACnD,OAAOJ,oBAAY,aAAe5E,EAG7B,IAAMhH,EAA4B,WACvC,OAAOmuB,YAAe,UAAW,CAAC,YAAcA,YAAe,2BAM1D,SAAStmB,EAAeumB,GAC7B,IAAMC,EAAU1pB,YAAS,GAAGtO,cAAawe,IAAIyZ,aAAe3vB,cAAa6C,cAAiB,CACxFzO,IAAKq7B,IAGPh/B,SAAOC,IAAIC,KAAK,mBAAoB,CAClCye,IAAKsgB,IAGPphB,YAAe,sBACf6D,YAASud,GAGJ,IAAME,EAAiC,SAAC,GAGxC,IAFLC,EAEI,EAFJA,wBACAC,EACI,EADJA,6BAEA,EAWIA,GAAgC,GAVlCC,EADF,EACEA,eACAC,EAFF,EAEEA,IACAC,EAHF,EAGEA,KACAC,EAJF,EAIEA,YACAC,EALF,EAKEA,eACAC,EANF,EAMEA,wBACAC,EAPF,EAOEA,WACAC,EARF,EAQEA,eACAC,EATF,EASEA,gBACAC,EAVF,EAUEA,SAGF,OAAO,OAAP,QACEz4B,MAAOU,cACPg4B,sBAAuBZ,GACnBC,GAAgC,CAClCY,2BAA4B,CAC1BC,cAAeZ,EACfC,MACAC,OACAW,WAAYV,EACZW,cAAeV,EACfW,sBAAuBV,EACvBW,UAAWV,EACXW,cAAeV,EACfW,eAAgBV,EAChBC,aAGDlwB,gBAIM4wB,EAAe,SAACC,GAC3B,IAAIC,GAAqB,EACnBt+B,EAAO,GACPqV,EAAqB,OAAGgpB,QAAH,IAAGA,OAAH,EAAGA,EAAYE,yBACpCjpB,EAAsC,OAC1C+oB,QAD0C,IAC1CA,OAD0C,EAC1CA,EAAYG,4CAad,MAZqC,kBAA1BnpB,GAAsCA,EAAsB/Q,OAAS,IAC9EtE,EAAKqV,sBAAwBA,EAC7BipB,GAAqB,GAG6B,kBAA3ChpB,GACPA,EAAuChR,OAAS,IAEhDtE,EAAKsV,uCAAyCA,EAC9CtV,EAAKouB,QAAS,EACdkQ,GAAqB,GAEnBA,EAEKv+B,YAAc,UAAW,CAC9BD,SAAS,EACTE,SAIGsf,QAAQC,Y,gCChIjB,4MAYO,SAASnV,EAAT,GAAwD,IAA1B1C,EAAyB,EAAzBA,QAAyB,IAAhBwD,YAAgB,SAC5D,OAAOxD,EAAQP,QAAO,SAAC3C,EAAD,EAAuDi6B,GAAS,IAAD,aAAZ,GAAY,EAAvD7uB,EAAuD,EAAvDA,MAAOzQ,EAAgD,EAAhDA,UAAW2I,EAAqC,EAArCA,YAAaoG,EAAwB,EAAxBA,QAU3D,OARA1J,EAAOk6B,YAAiB9uB,GAArB,IAA+B6uB,GAASE,mBAAS/uB,EAAO,CACzDzQ,YACA2I,cACAoG,UACA0wB,YAAa,SACb1zB,SAGK1G,IACN,IASE,SAAS+F,EAAgB/C,GAC9B,OAAOA,EAASL,QAAO,SAAC3C,EAAKiX,GAI3B,OAFAjX,EAAI,GAAGiX,GAAekjB,mBAASE,IAAuB,CAAE1/B,UAAW,CAAEoH,GAAIkV,KAElEjX,IACN,IAGE,SAASuG,EAAoBxE,GAClC,MAA6Bo4B,mBAASG,IAAuB,CAAE3/B,UAAW,CAAEoH,QAA5E,IAAQvG,YAAR,MAAe,GAAf,EAAmBQ,EAAnB,EAAmBA,MAMnB,OAJIA,GACF7C,SAAOC,IAAI4C,MAAM,oCAAqC,CAAEA,QAAOoP,MAAOkvB,MAGjE9+B,EAOF,SAAS++B,EAAex4B,GAAK,IAAD,EACjC,GAA+BwE,EAAoBxE,IAAO,IAAlDW,cACR,uBADA,MAAwB,GAAxB,GACqBsD,MAAK,SAACI,GAAD,OAAiBA,EAAYrE,KAAOA,YAA9D,QAAqE,KAahE,SAAS6zB,EAAW7zB,GACzB,MAAwCo4B,mBAASE,IAAuB,CACtE1/B,UAAW,CAAEoH,QADPvG,KAAR,gBAAiC,GAAjC,GAAgBsH,QAIhB,YAJA,MAA0B,GAA1B,IAKa,CACT6D,SAAS,EACTrL,SAAS,EACTE,KAAM,O","file":"js/main~06837ae4.97e02333.js","sourcesContent":["export { IS_STICKY_ENABLED, CHECKOUT_BUTTON_STATES } from '@paypalcorp/c3-util-store';\n\nexport const SHOW_POLICIES_COUNTRIES_LIST = ['US', 'AU'];\n","export const LANDING_PAGE = {\n REVIEW: 'REVIEW',\n CHOICE: 'CHOICE',\n};\n","import {\n fallback,\n redirectToLogout,\n redirectGenericError,\n redirectToRiskyLogin,\n redirectToAuthChallenge,\n redirectToNegativeBalanceRecovery,\n} from '@/lib/redirects';\nimport { isIframe } from '@paypalcorp/c3-util-browser';\nimport { isObject } from '@paypalcorp/c3-util-lang';\nimport { SHARED_CARD_CONTINGENCIES } from '@/components/SharedCard/constants';\nimport { logger } from '@paypalcorp/c3-util-logger';\n\n// This is a list of current contingency Hermione is currently aware of and will be\n// handling corresponding contingency accordingly with its own set of handlers\nexport const HANDLED_CONTINGENCIES = [\n 'NEED_CREDIT_CARD',\n 'EXPIRED_CREDIT_CARD',\n 'NEED_CREDIT_CARD_OR_BANK_ACCOUNT',\n 'SEPA_ACCEPT_CONTINGENCY',\n 'CC_AUTHORIZATION_DECLINED',\n 'ALLOWED_CARD_TYPES_COULD_NOT_BE_RETRIEVED', // handle `GET_SUPPORTED_CARDS_QUERY` contingency\n 'NEED_SHIPPING_ADDRESS', // handle `NEED_DOMESTIC_SHIPPING_ADDRESS_TO_PAY` contingency\n 'NEED_PRIMARY_ADDRESS', // handle `NEED_PRIMARY_ADDRESS` contingency for addressless user during CBT flow\n 'BANK_LOGIN_CREDENTIALS_INVALID', // handles when users provides invalid credentials in OpenBanking\n 'FETCH_BANK_BALANCE_TIME_OUT',\n 'INITIATE_OTP_CONTINGENCY',\n 'PAYER_CANNOT_PAY',\n 'PAY_CODE_REQUIRED',\n 'PAYER_ACCOUNT_RESTRICTED',\n 'FI_CONFIRMATION_CONTINGENCY', // handle 3DS (2.0) contingency for addCard use case so no fallback\n 'CC_PROCESSOR_DECLINED',\n 'SELL_CRYPTOCURRENCY_ERROR',\n 'UNRECOVERABLE_ERROR',\n ...SHARED_CARD_CONTINGENCIES, // shared card related contingenciesptest\n];\n\nexport const GLOBAL_CONTINGENCIES_HANDLERS = {\n // Step up auth contingency during the planning step - user is logged in, but risk determines that user may have\n // suspicious activity around payments. To resolve, user must provide secondary authentication, such as completing\n // SMS verification.\n VERIFY_USER_IDENTITY({ errorData = {} }) {\n // step_up_context is a mandatory param from planning response , check before redirecting\n if (errorData.step_up_context) {\n return redirectToAuthChallenge(errorData.step_up_context);\n } else {\n return redirectGenericError();\n }\n },\n // Payer Action Required is a contingency in which Buyer's action is required.\n // It contains {String} cause which tells why the contingency is thrown\n // It contains {Object} resolution, which contains details on how to resolve the contingency\n // Currently its only being thrown for Negative Balance Recovery Contingency & contingencies not mapped in xo-janus\n // Refer: https://github.paypal.com/Checkout/xo-janus/blob/master/lib/payService/transportMapper.js#L29 - {function checkContingency}\n PAYER_ACTION_REQUIRED({ message, errorData = {} }) {\n const { cause, resolution: { name: resolutionName } = {} } = errorData;\n\n /*\n * Added isIframe check because MoneyNodeWeb which handles Negative Balance Recovery\n * return html with `x-frame-opts: sameorigin` which prevents loading the page in Iframe flows.\n * Currently, we fallback to hermes if we receive NBR contingency in Iframe flow.\n * TODO: Remove the isIframe check here & find a solution for consumer apps to work in Checkout's Iframe flow.\n */\n if (\n cause === 'NEED_NEGATIVE_BALANCE_RECOVERY' &&\n resolutionName === 'PAYER_TO_CLEAR_NEGATIVE_BALANCE' &&\n !isIframe()\n ) {\n return redirectToNegativeBalanceRecovery();\n } else {\n // reason: \"PAYER_ACTION_REQUIRED|NEED_NEGATIVE_BALANCE_RECOVERY|PAYER_TO_CLEAR_NEGATIVE_BALANCE\"\n return fallback({\n reason: `${message}|${cause}|${resolutionName}`,\n });\n }\n },\n // Payer Authentication Required throws when an action needs more permissions than the user currently has.\n // This can happen when a One Touch user tries to change something, such as adding an address (merchant override).\n // Solution is to make the user log in\n PAYER_AUTHENTICATION_REQUIRED({ message, errorData = {} } = {}) {\n logger.cal.info(`HANDLE_${message}`, {\n message,\n cause: errorData.cause,\n ...(isObject(errorData.resolution) && {\n resolution: errorData.resolution.name,\n }),\n });\n\n redirectToRiskyLogin({\n reason: message,\n extraParams: {\n lite: 1,\n fromLite: 1,\n invalidateCheckoutSessionPlan: true,\n ulClientKey: 'riskyLoginShippingPassed',\n ulClientRedirect: 'insufficientPermission',\n },\n });\n },\n\n // For Link and Pay transaction, if a user is 'skip logged in',\n // the user cannot perform transactions for any other EC-Token\n // other than which the user was skip logged in for.\n LINK_AND_PAY_TOKENS_MISMATCH({ errorData = {} }) {\n return redirectToLogout('LINK_AND_PAY_TOKENS_MISMATCH', {\n hermes: 1,\n fromLite: 1,\n });\n },\n\n // Payer Invalid for Payment is thrown for Link and Pay experience in\n // under the following scenario:\n // If a User A (logged in/ one touched) requests for Link and Pay\n // transaction for a billingAgreement setup for User B, PAPS throws\n // error PAYER_INVALID_FOR_PAYMENT. So we logout User A.\n // ***\n // If this contingency is thrown for other cases, we might have to handle\n // it using cause/resolution if passed\n PAYER_INVALID_FOR_PAYMENT({ errorData = {} }) {\n return redirectToLogout('PAYER_INVALID_FOR_PAYMENT', {\n hermes: 1,\n fromLite: 1,\n });\n },\n\n TRANSACTION_REFUSED() {\n return redirectGenericError({ code: 'PAYMENT_DENIED', replace: true });\n },\n\n UNRECOVERABLE_ERROR() {\n return redirectGenericError({ code: 'UNRECOVERABLE_ERROR', replace: true });\n },\n};\n","import { ApolloLink, Observable } from 'apollo-link';\n\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { getOperationType } from '@paypalcorp/c3-util-graphql';\nimport { updateFeature } from '@paypalcorp/c3-util-store';\nimport { SPINNER_TYPES } from '@/components/Spinner';\n\n/**\n * @description `apolloSpinner` is a non-terminating link to show / hide spinners for Mutation graphql calls\n *\n * @returns {Observable} | Returns an Observable of an execution result\n */\nexport const spinnerLink = () => {\n return new ApolloLink((operation, forward) => {\n const { operationName, variables } = operation;\n const operationType = getOperationType(operation);\n let spinnerType = SPINNER_TYPES.DEFAULT;\n\n if (operationName === 'AddCreditCard') {\n spinnerType = SPINNER_TYPES.PROCESS_CARD;\n }\n\n if (operationName === 'approveIncentivePayment') {\n spinnerType = SPINNER_TYPES.PROCESS_INCENTIVE;\n }\n\n if (operationName === 'approveMemberPayment' && variables?.cryptocurrencyQuoteId) {\n spinnerType = SPINNER_TYPES.CRYPTO_SELLING;\n }\n\n const triggerToggleSpinner = (visible) => {\n updateFeature('SPINNER', { visible, data: { type: spinnerType } });\n };\n\n if (\n operationType === 'mutation' &&\n operationName !== 'ThreeDsLookUpMutation' &&\n operationName !== 'ThreeDsAuthenticateMutation' &&\n operationName !== 'ResolveThreeDsContingency'\n ) {\n triggerToggleSpinner(true);\n logger.cal.info(`SHOW_SPINNER_${operationName}`);\n }\n\n return new Observable((observer) => {\n const subscription = forward(operation);\n if (subscription) {\n // check if forward returns null or not\n return subscription.subscribe({\n next: (result) => {\n // CryptoQuotesQuery is a polling query with errorPolicy ignore - it should not hide the spinner\n const shouldHideSpinnerForQuery =\n operationType === 'query' && operationName !== 'CryptoQuotesQuery';\n\n if (operationType === 'mutation' || shouldHideSpinnerForQuery) {\n triggerToggleSpinner(false);\n logger.cal.info(`HIDE_SPINNER_${operationName}`);\n }\n\n observer.next(result);\n },\n error: (error) => {\n const statusCode = error && error.statusCode;\n\n if (statusCode === 401) {\n triggerToggleSpinner(true);\n logger.cal.info(`SHOW_SPINNER_401_${operationName}`);\n } else {\n triggerToggleSpinner(false);\n logger.cal.info(`HIDE_SPINNER_NETWORK_ERROR_${statusCode}_${operationName}`);\n }\n observer.error(error);\n },\n complete: observer.complete.bind(observer),\n });\n }\n return () => {\n // clean up\n if (subscription) subscription.unsubscribe();\n };\n });\n });\n};\n","import { ApolloLink, Observable } from 'apollo-link';\nimport { isUndefined } from '@paypalcorp/c3-util-lang';\nimport get from 'dlv';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { TRANSITION_PAYLOAD } from '@paypalcorp/c3-util-logger';\n\n/**\n * It's a stateful link and centralized place to log gql data into cal / fpti\n *\n * It auto logs payload to cal / fpti once all resolvers return non undefined values\n * If some of the fields were not resolved by end of the user session - manually flush them before user redirect via\n *\n * ```\n * import { instrumentationLink } from '@/lib/apolloLinks';\n *\n * instrumentationLink.logPayload();\n * ```\n */\nclass InstrumentationLink extends ApolloLink {\n constructor() {\n super();\n this.logFlushed = false;\n this.payload = {};\n\n this.payloadResolvers = {\n is_gambling: (result) => get(result, 'data.checkoutSession.merchant.isGambling'),\n };\n\n Object.keys(this.payloadResolvers).forEach((key) => {\n this.payload[key] = undefined;\n });\n }\n\n addToPayload(key, value) {\n if (!isUndefined(value)) {\n this.payload[key] = value;\n }\n }\n\n logPayload() {\n // make sure log is fired once to prevent duplicate logs\n if (!this.logFlushed) {\n Object.keys(this.payload).forEach((key) => {\n const value = this.payload[key];\n\n if (typeof value === 'boolean') {\n this.payload[key] = value ? 1 : 0;\n }\n });\n\n logger.fpti(\n 'flow_params',\n TRANSITION_PAYLOAD({\n from: 'flow_params',\n to: 'process_flow_params',\n ...this.payload,\n })\n );\n\n this.logFlushed = true;\n }\n }\n\n logPayloadIfReady() {\n const isReadyToFlush = !Object.keys(this.payload).some((k) => isUndefined(this.payload[k]));\n\n if (!isReadyToFlush) {\n return;\n }\n\n this.logPayload();\n }\n\n resolveAndLog(result, operationName) {\n window.logCPLPhase(operationName, 'query');\n try {\n Object.keys(this.payloadResolvers).forEach((key) => {\n const resolvedValue = this.payloadResolvers[key](result);\n this.addToPayload(key, resolvedValue);\n });\n\n this.logPayloadIfReady();\n } catch (err) {\n logger.cal.info('instrumentation_link_error', { error: err.stack || err.toString() });\n }\n }\n\n request(operation, forward) {\n window.logCPLPhase(operation.operationName, 'query', true);\n return new Observable((observer) => {\n const subscription = forward(operation);\n\n if (subscription) {\n return subscription.subscribe({\n next: (result) => {\n this.resolveAndLog(result, operation.operationName);\n observer.next(result);\n },\n error: (error) => {\n observer.error(error);\n },\n complete: observer.complete.bind(observer),\n });\n }\n return () => {\n // clean up\n if (subscription) subscription.unsubscribe();\n };\n });\n }\n}\n\nexport const instrumentationLink = new InstrumentationLink();\n","import { ApolloLink } from 'apollo-link';\nimport { getAccessToken } from '@paypalcorp/c3-shared-globals';\nimport { params } from '@paypalcorp/c3-util-browser';\nimport { logger } from '@paypalcorp/c3-util-logger';\n\n/**\n * Avoid using auth related identifers\n * for client side logging\n * example:\n * - 'AUTH'\n * - 'ACCESS_TOKEN'\n */\nconst LOG_PREFIX = 'AT_CHANGE';\n\n/**\n * Refresh access token being sent for each\n * request with latest value from globals.\n *\n * @param {*} headers\n * @returns\n */\nexport const authLink = (headers) => {\n return new ApolloLink((operation, forward) => {\n const accessToken = getAccessToken();\n operation.setContext((prevContext) => {\n const oldAccessToken = headers['x-paypal-internal-euat'];\n const newAccessToken = params().euat === '1' ? window.location.hash.substr(1) : accessToken;\n logger.cal.info(`${LOG_PREFIX}_${oldAccessToken !== newAccessToken}`);\n headers['x-paypal-internal-euat'] = newAccessToken;\n return {\n headers,\n };\n });\n return forward(operation);\n });\n};\n","import { logger } from '@paypalcorp/c3-util-logger';\nimport { getGlobals, getFallback } from '@paypalcorp/c3-shared-globals';\nimport { HANDLED_CONTINGENCIES } from '@/lib/contingencies';\nimport { fallback } from '@/lib/redirects';\nimport { updateFeature } from '@paypalcorp/c3-util-store';\n\nexport const attemptRedirect = (reason = 'error') => {\n // This is temporary until we can get CORS enabled on Akamai, and ErrorBoundaries\n // are released in Preact: https://github.com/developit/preact/pull/819\n\n const fallbackSettings = getFallback();\n\n try {\n throw Error();\n } catch (e) {\n // if we're running tests, we should always call `fallback()` because\n // sometimes `window.fallbackTriggered` is already `true` when running a test\n if (\n process.env.NODE_ENV === 'test' ||\n (!window.fallbackTriggered && fallbackSettings.redirectOnError)\n ) {\n window.fallbackTriggered = true;\n fallback({ reason });\n }\n }\n};\n\n/**\n * Takes a GraphQL error and formats it for logging\n * @param {object} error | A GraphQL error object\n * @returns {object} A formatted object to use for error logging\n */\nconst parseError = (error) => {\n const { graphQLErrors, networkError } = error || {};\n if (graphQLErrors && graphQLErrors.length) {\n return {\n message: graphQLErrors[0].statusCode === 200 ? `gqlContingency` : `gqlError`,\n statusCode: graphQLErrors[0].statusCode,\n details: graphQLErrors.map(({ message }) => message).toString(),\n };\n }\n if (networkError) {\n return {\n message: `gqlNetworkError`,\n statusCode: networkError.statusCode,\n details: networkError.message,\n };\n }\n if (error instanceof Error) {\n return {\n message: error.message,\n details: error.stack,\n };\n }\n\n return { message: `unknownError` };\n};\n/**\n * Ideally we could use Error Boundaries, but Preact does not currently support them\n * (coming soon -- the PR is merged, waiting for new release). This will log checkout\n * errors and ineligible traffic to separate them from generic JS errors.\n *\n * @param {object} obj | Args object\n * @param {string} obj.message | A formatted message to use for error logging\n * @param {object} obj.error | An error object to use for a new `Error` instance\n * @returns {void} Nothing is returned, but does cause a redirect if enabled\n */\n\nconst CheckoutError = ({ message, error }) => {\n // do not fallback for 401 errors.\n // Currently for approvePaymentMutation we are still falling back because `CheckoutError` is getting executed on each GQL error.\n if (error && error.networkError && error.networkError.statusCode === 401) {\n return;\n }\n\n const checkoutError = new Error(error || message || 'undefined');\n checkoutError.type = 'checkout';\n if (error) {\n const parsedError = parseError(error);\n checkoutError.message = parsedError.message;\n checkoutError.details = parsedError.details;\n }\n\n if (checkoutError.details === 'WPS_INVENTORY_ERROR') {\n const soldOutUrl = error?.graphQLErrors[0]?.data?.errorData?.soldoutUrl || '';\n updateFeature('INVENTORY_SOLD_OUT', {\n visible: true,\n data: {\n soldOutUrl,\n },\n });\n return;\n }\n\n if (HANDLED_CONTINGENCIES.includes(checkoutError.details)) {\n return;\n }\n\n const reason = checkoutError.message;\n const {\n user: { ecToken },\n } = getGlobals();\n\n logger.cal.error(`CHECKOUT_ERROR_${reason}`, {\n ...checkoutError,\n timestamp: Date.now(),\n token: ecToken,\n });\n\n attemptRedirect(reason);\n};\n\nexport default CheckoutError;\n","import { fraudNet } from '@paypalcorp/c3-init-fraudnet';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { params } from '@paypalcorp/c3-util-browser';\n\nconst APP_NAME = 'CHECKOUTUINODEWEB_MEMBER_LITE';\n\nexport const getClientMetadataID = (defaultID) => {\n const urlParams = params();\n\n if (window.xprops && window.xprops.clientMetadataID) {\n return window.xprops.clientMetadataID;\n } else if (urlParams['client-metadata-id']) {\n return urlParams['client-metadata-id'];\n } else {\n return defaultID;\n }\n};\n\nexport const initFraudNet = ({ token = getToken(), fraudNetEndpoint, deployEnv = {} } = {}) => {\n const fraudNetConfig = {\n userToken: token,\n sourceId: APP_NAME,\n endpoint: fraudNetEndpoint,\n addCrossOrigin: deployEnv.production,\n typingSpeed: {\n /**\n * Allows for FraudNet to track dynamically rendered fields by delegating the event listener\n * to the body instead of attaching it to individual field.\n */\n delegate: true,\n\n /**\n * List of required fields that can be rendered. This list should include\n * all fields that are required for only certain flows, e.g. fields that\n * are only rendered in certain situations. We filter out pre-filled\n * fields so that FraudNet doesn't mistakenly tag them as suspicious due\n * to being programmatically filled.\n */\n fields: [\n // From addCard/updateCard and addShipping interstitials\n { id: 'country', min: 2 },\n { id: 'ccFirstName', min: 5 },\n { id: 'ccLastName', min: 5 },\n { id: 'cardNumber', min: 8 },\n { id: 'billingDropdown', min: 10 },\n ],\n // Should be the same as `sourceId`\n type: APP_NAME,\n },\n };\n\n // Wrapping this in a try/catch because in the past we have seen occasional\n // errors with fraudnet being initialized which was blowing up the app\n try {\n // `fraudNet()` is located in checkoutuinodeweb/shared directory\n fraudNet(fraudNetConfig);\n logger.cal.info('FRAUDNET_INIT', fraudNetConfig);\n } catch (e) {\n logger.cal.info('FRAUDNET_INIT_FAILURE', { message: e && e.message });\n }\n};\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"SpinnerOverlay\":\"SpinnerOverlay_SpinnerOverlay_3KudG\",\"spinnerOverlay\":\"SpinnerOverlay_SpinnerOverlay_3KudG\",\"SpinnerMessage\":\"SpinnerOverlay_SpinnerMessage_1BLVf\",\"spinnerMessage\":\"SpinnerOverlay_SpinnerMessage_1BLVf\",\"SpinnerContent\":\"SpinnerOverlay_SpinnerContent_15n8d\",\"spinnerContent\":\"SpinnerOverlay_SpinnerContent_15n8d\"};","import React from 'react';\n\n// react-universal-component shows a default 'Loading ...' message with query components.\n// use this empty tag to prevent the default behavior\nexport default function EmptyLoader() {\n return ;\n}\n","import React from 'react';\n\nimport { getCountry } from '@paypalcorp/c3-shared-globals';\nimport { isObject, isFunction, nullToUndefined, isUndefined } from '@paypalcorp/c3-util-lang';\nimport EmptyLoader from '@/shared/components/EmptyLoader';\nimport { useGqlNetworkQuery, useFeatureQuery, useContingencyQuery } from './hooks';\nimport { FeatureContainer } from './FeatureContainer';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { shouldTriggerInitialCPLEvent, updateHasContingencies } from '@/lib/cplUtils';\n\n// resolve feature's lazy component based on experiment result\nconst resolveWrappedComponentByExperiment = (wrappedComponent, experimentResult) => {\n if (wrappedComponent[experimentResult]) {\n return wrappedComponent[experimentResult];\n } else {\n for (let prop in wrappedComponent) {\n return wrappedComponent[prop];\n }\n }\n};\n\n/**\n * resolve feature's lazy component based on\n *\n * - experiment\n * - countrySpecific\n *\n * Examples:\n *\n * 1. When experiments object is provided\n * ({\n * experiments: {\n * TREATMENT_1: () => import('./Footer'),\n * TREATMENT_2: () => import('./FooterB'),\n * TREATMENT_3: () => import('./FooterC'),\n * }\n * })\n *\n * 2. When countrySpecific object is provided\n * ({\n * countrySpecific: {\n * US: () => import('./Footer'),\n * GB: () => import('./FooterB'),\n * AU: () => import('./FooterC'),\n * }\n * })\n *\n * 3. When countrySpecific object has nested experiments\n * ({\n * countrySpecific: {\n * US: {\n * experiments: {\n * TREATMENT_1: () => import('./Footer'),\n * TREATMENT_2: () => import('./FooterB'),\n * TREATMENT_3: () => import('./FooterC'),\n * },\n * },\n * GB: () => import('./FooterB'),\n * AU: () => import('./FooterC'),\n * }\n * })\n/*/\nconst resolveWrappedComponent = (wrappedComponent, finalData, country) => {\n if (isObject(wrappedComponent)) {\n const { feature: { experiment } = {} } = finalData;\n const experimentResult = experiment && experiment.getResolvedTreatment();\n\n const wrappersByExperiment = wrappedComponent.experiments;\n const wrappersByCountry = wrappedComponent.countrySpecific;\n\n if (wrappersByExperiment) {\n return resolveWrappedComponentByExperiment(wrappersByExperiment, experimentResult);\n } else if (wrappersByCountry) {\n const countrySpecificWrapper = wrappersByCountry[country] || wrappersByCountry['US'];\n\n if (isObject(countrySpecificWrapper)) {\n if (countrySpecificWrapper.experiments) {\n return resolveWrappedComponentByExperiment(\n countrySpecificWrapper.experiments,\n experimentResult\n );\n }\n } else {\n return countrySpecificWrapper;\n }\n }\n }\n return wrappedComponent;\n};\n\nconst getIsGqlQueriesLoading = (queries) => {\n return Object.keys(queries).some((key) => {\n return queries[key].loading;\n });\n};\n\nconst getIsGqlDataResolved = (queries) => {\n return !Object.keys(queries).some((key) => {\n return Object.keys(queries[key].data || {}).length === 0 && isUndefined(queries[key].error);\n });\n};\n\nconst getIsGqlHasError = (queries) => {\n return Object.keys(queries).some((key) => {\n return queries[key].error;\n });\n};\n\nconst mapContingencies = (contingencies = []) => {\n return contingencies.reduce((map, obj) => {\n map[obj.id] = obj;\n map[obj.id].data = obj.data || {};\n return map;\n }, {});\n};\n\nconst mapFeature = (feature = {}) => {\n return {\n ...feature,\n data: feature.data || {},\n };\n};\n\nconst mapFeatures = (features = []) => {\n return features.reduce((map, obj) => {\n map[obj.id] = obj;\n map[obj.id].data = obj.data || {};\n return map;\n }, {});\n};\n\nconst mapQueriesData = (queries) => {\n const result = [];\n\n Object.keys(queries).forEach((key) => {\n if (!queries[key].data) {\n queries[key].data = {};\n }\n queries[key].data = nullToUndefined(queries[key].data);\n result.push(queries[key]);\n });\n\n return result;\n};\n\nconst getShouldLoadFeatureComponent = ({ shouldLoadFeatureComponent, finalData }) => {\n if (!isFunction(shouldLoadFeatureComponent)) {\n return true;\n }\n\n return Boolean(shouldLoadFeatureComponent(finalData));\n};\n\nconst getShouldAutoDisplayComponent = ({\n shouldAutoDisplayComponent,\n finalData,\n shouldLoadFeature,\n}) => {\n const { experiment } = finalData.feature;\n\n // no point of executing shouldAutoDisplayComponent if feature is not eligible or experiment is in control\n if (\n !isFunction(shouldAutoDisplayComponent) ||\n !shouldLoadFeature ||\n (experiment && experiment.isControl())\n ) {\n return false;\n }\n\n return shouldAutoDisplayComponent(finalData);\n};\n\nconst getShouldLoadLoadingComponent = ({\n withoutLoadingState,\n isGqlLoading,\n shouldLoadFeatureComponent,\n LoadingComponent,\n}) => {\n return !withoutLoadingState && isGqlLoading && shouldLoadFeatureComponent && LoadingComponent;\n};\n\nconst getShouldLoadFeatureInstance = ({\n shouldLoadFeatureInstance,\n finalData,\n shouldLoadFeature,\n}) => {\n if (!shouldLoadFeature || !isFunction(shouldLoadFeatureInstance)) {\n return true;\n }\n\n return Boolean(shouldLoadFeatureInstance(finalData));\n};\n\nconst getQueriesByFetchPolicy = ({ queries, fetchPolicy, negation = false }) => {\n return queries.filter((q) =>\n negation ? q.fetchPolicy !== fetchPolicy : q.fetchPolicy === fetchPolicy\n );\n};\n\nconst mapFeaturesQueryResult = (featuresQueryResult) => {\n const features = [];\n\n Object.keys(featuresQueryResult).forEach((key) => {\n if (featuresQueryResult[key].data) {\n features.push(featuresQueryResult[key].data.feature);\n } else {\n features.push({\n id: key,\n });\n }\n });\n\n return features;\n};\n\nconst mapContingenciesQueryResult = ({ contingenciesQueryResult, subscribeToContingencies }) => {\n const { contingencies = [] } = contingenciesQueryResult;\n\n if (subscribeToContingencies) {\n return contingencies.filter(\n (contingency) => subscribeToContingencies.indexOf(contingency.id) >= 0\n );\n }\n\n return contingencies;\n};\n\nconst getFeatureById = ({ id, features }) => {\n return features.find((f) => f.id === id) || {};\n};\n\nconst resolveInterstitialOptions = ({ interstitialOptions, finalData }) => {\n // Use `onBeforeCloseFn` and pass finalData down to it\n if (isFunction(interstitialOptions.onBeforeCloseFn)) {\n const { onBeforeCloseFn } = interstitialOptions;\n interstitialOptions.onBeforeCloseFn = () => onBeforeCloseFn(finalData);\n }\n // Use `showCloseBtnFunc` to determine to show `showCloseBtn`\n if (isFunction(interstitialOptions.showCloseBtnFunc)) {\n interstitialOptions.showCloseBtn = interstitialOptions.showCloseBtnFunc(finalData);\n }\n // Some titles depend on the finalData in order to select which title to use. So we need to pass in finalData\n // to headerTitleFunc in order to be able to get the correct title.\n if (isFunction(interstitialOptions.headerTitleFunc)) {\n interstitialOptions.headerTitle = interstitialOptions.headerTitleFunc(finalData);\n }\n\n // Use `typeFunc` to determine `type` conditionally.\n if (isFunction(interstitialOptions.typeFunc)) {\n interstitialOptions.type = interstitialOptions.typeFunc(finalData);\n }\n\n return interstitialOptions;\n};\n\nconst resolveLazyFeatureComponent = ({\n id,\n WrappedComponent,\n finalData,\n LoadingComponent,\n ErrorComponent,\n country,\n}) => {\n if (!Feature.FeatureComponents[id]) {\n const ResolvedWrappedComponent = resolveWrappedComponent(WrappedComponent, finalData, country);\n\n Feature.FeatureComponents[id] = lazyComponent(ResolvedWrappedComponent, {\n id,\n loading: LoadingComponent,\n error: ErrorComponent || LoadingComponent,\n });\n }\n return Feature.FeatureComponents[id];\n};\n\nconst disableInitialCPLEvent = ({\n interstitial = false,\n autoDisplay = false,\n contingencies = [],\n}) => {\n // Auto displaying interstitial feature when contingencies are available would not allow\n // review page to be rendered first. So in these cases hasContingencies flag should be set.\n if (interstitial && autoDisplay && contingencies.length > 0 && shouldTriggerInitialCPLEvent()) {\n updateHasContingencies(true);\n }\n};\n\n/**\n * Feature component to standardize component writing\n * See: https://github.paypal.com/Checkout-R/checkoutuinodeweb/pull/719\n *\n * @param {Object} config | Feature configuration object that must be passed.\n * @param {String} config.id | feature id\n * @param {Boolean} config.interstitial | if feature has to be rendered as interstitial\n * @param {Object} config.interstitialOptions | interstitial options such as\n * @param {Function} config.interstitialOptions.payload | The payload function for FPTI\n * @param {Boolean} config.interstitialOptions.showCloseBtn | true / false (to show or hide close button)\n * @param {Boolean} config.interstitialOptions.hideHeaderBorder | Boolean to exclude InterstitialHeader (defaults to true)\n * @param {Function} config.interstitialOptions.showCloseBtnFunc | Function to dynamically determine `showCloseBtn` flag or not\n * @param {Function} config.interstitialOptions.onBeforeCloseFn | `onBeforeCloseFn` to be passed to `InterstitialContainerComponent` to trigger any actions before Interstitial is closed\n * @param {String} config.interstitialOptions.type | The type of interstitial (one of `full`, `tall`, `compact`, `modal`)\n * @param {Function} config.interstitialOptions.headerTitleFunc | Function used to get the header title.\n * @param {String} config.interstitialOptions.interstitialStyleOverrides | Classnames with which to override base interstitial styles\n * @param {String} config.interstitialOptions.interstitialWrapperStyleOverrides | Classnames with which to override interstitial wrapper styles\n * @param {String} config.interstitialOptions.interstitialInnerContainerStyleOverrides | Classnames with which to override a interstitials inner container styles\n * @param {String} config.interstitialOptions.overlayClassNames | Classnames with which to override overlay styles\n * @param {Array} config.queries | Array of all graphql queries\n * @param {Array} config.contingencies | Array of contingencies which are going to be injected into the feature component\n * @param {Function} config.LoadingComponent | Loading component\n * @param {Function} config.ErrorComponent | Error component\n * @param {Array} config.subscribeTo | Array of all features (ids) your component needs to subscribe to\n * @param {Object} config.animateOptions | options for showing feature with animations, includes such params:\n * - animateHeight: enable / disable animation\n * - animateContainerClass: class to pass for animation container\n * - animateOpacity: animate opacity or not\n * @param {Boolean} config.shouldKeepLoadingStateOnError | if we need to show loading state forever in case of error\n * @param {Function} config.shouldAutoDisplayComponent | function which needs to return true or false if you want to show feature automatically after hiding it by default\n * @param {Function} config.shouldLoadFeatureComponent | function which needs to return true or false if feature component should be loaded at all\n * @param {Function} config.shouldLoadFeatureInstance | function which needs to return true or false if feature component instance should be loaded or not (e.g when you render feature in 2 places and you want to hide one and show another)\n * @param {Boolean} config.withoutLoadingState | if feature component needs to render immediately and not wait for GQL queries calls to be completed\n */\nexport const Feature = (config) => {\n let {\n id,\n interstitialOptions = {},\n interstitial,\n shouldAutoDisplayComponent,\n shouldLoadFeatureComponent,\n shouldLoadFeatureInstance,\n queries = [],\n LoadingComponent = EmptyLoader,\n ErrorComponent,\n withoutLoadingState,\n subscribeTo = [],\n animateOptions = {},\n shouldKeepLoadingStateOnError,\n contingencies: subscribeToContingencies,\n } = config;\n\n return (WrappedComponent) => {\n Feature.FeatureComponents[id] = null;\n\n const Composed = (props) => {\n // order of hooks below is important (don't modify it without a good reason)\n // basically there are use cases when features are not getting re rendered with latest data\n // or cache-only queries results are resolving with empty data\n\n // first - fire cache-only gql queries\n const cacheOnlyGqlQueries = getQueriesByFetchPolicy({ queries, fetchPolicy: 'cache-only' });\n const cacheOnlyGqlQueryResult = useGqlNetworkQuery({ queries: cacheOnlyGqlQueries });\n\n // second - fire local gql query (queries) to fetch features\n const featuresQueryResult = useFeatureQuery([id, ...subscribeTo]);\n const features = mapFeaturesQueryResult(featuresQueryResult);\n const feature = getFeatureById({ id, features });\n\n // third - fire local gql query to fetch contingencies\n const contingenciesQueryResult = useContingencyQuery(id);\n const contingencies = mapContingenciesQueryResult({\n contingenciesQueryResult,\n subscribeToContingencies,\n });\n\n // fourth - fire network gql queries\n const networkGqlQueries = getQueriesByFetchPolicy({\n queries,\n fetchPolicy: 'cache-only',\n negation: true,\n });\n\n const networkGqlQueryResult = useGqlNetworkQuery({\n queries: networkGqlQueries,\n skip: !feature.enabled,\n });\n\n // no need to do any calculations below if feature is not enabled\n if (!feature.enabled) {\n return null;\n }\n\n const queriesResult = { ...networkGqlQueryResult, ...cacheOnlyGqlQueryResult };\n const isGqlLoading = getIsGqlQueriesLoading(queriesResult);\n const isGqlDataResolved = getIsGqlDataResolved(queriesResult);\n const hasError = getIsGqlHasError(queriesResult);\n const ShouldLoadLoadingComponent = getShouldLoadLoadingComponent({\n withoutLoadingState,\n isGqlLoading,\n shouldLoadFeatureComponent,\n LoadingComponent,\n });\n\n if (ShouldLoadLoadingComponent) {\n return ;\n }\n\n const finalData = {\n allQueryData: mapQueriesData(queriesResult),\n feature: mapFeature(feature),\n features: mapFeatures(features),\n loading: isGqlLoading,\n contingencies: mapContingencies(contingencies),\n customProps: props.customProps,\n };\n const { experiment, visible } = finalData.feature;\n\n const shouldLoadFeature = getShouldLoadFeatureComponent({\n shouldLoadFeatureComponent,\n finalData,\n });\n\n const autoDisplay = getShouldAutoDisplayComponent({\n shouldAutoDisplayComponent,\n finalData,\n shouldLoadFeature,\n });\n\n // disable initial cpl event if conditions satify\n disableInitialCPLEvent({ interstitial, autoDisplay, contingencies });\n\n const shouldLoadInstance = getShouldLoadFeatureInstance({\n shouldLoadFeatureInstance,\n finalData,\n shouldLoadFeature,\n });\n\n const shouldResolveInterstitialOptions =\n !isGqlLoading &&\n interstitial &&\n shouldLoadFeature &&\n visible &&\n !(experiment && experiment.isControl());\n\n if (shouldResolveInterstitialOptions) {\n interstitialOptions = resolveInterstitialOptions({ interstitialOptions, finalData });\n }\n\n const FeatureComponent = resolveLazyFeatureComponent({\n id,\n WrappedComponent,\n finalData,\n LoadingComponent,\n ErrorComponent,\n country: getCountry(),\n });\n\n return (\n \n );\n };\n\n // Wrapper class to pass props which are passed directly to the feature component during render time\n class ComposedFeature extends React.PureComponent {\n render() {\n return ;\n }\n }\n return ComposedFeature;\n };\n};\n\nFeature.FeatureComponents = {};\n\nexport default Feature;\n","import gql from 'graphql-tag';\nimport { isIframe } from '@paypalcorp/c3-util-browser';\nimport { areCookiesDisabled } from '@/lib/cookie';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { isPayLaterFundingInstrument, updateFeature } from '@paypalcorp/c3-util-store';\nimport { getClient, getToken } from '@paypalcorp/c3-shared-globals';\nimport { CHECKOUT_BUTTON_STATES } from '@/components/CheckoutButton/constants';\nimport { returnFromCreditPayInFull } from '@/components/ReturnFromCredit/utils';\n\nconst CLEAR_CHECKOUT_SESSION_CREDIT_FINANCING_OPTION_MUTATION = gql`\n mutation clearCheckoutSessionCreditFinancingOption($token: String!) {\n clearCheckoutSessionCreditFinancingOption(token: $token) {\n creditFinancingOption {\n financingCode\n }\n }\n }\n`;\n\nexport const creditPpcOffersGqlParams = () => {\n return {\n areCookiesDisabled: areCookiesDisabled(),\n isIframe: isIframe(),\n };\n};\n\nexport const filterOutCreditInstruments = (fundingOption) =>\n !isPayLaterFundingInstrument(fundingOption?.fundingInstrument);\n\nexport const clearCreditFinancingOption = () => {\n updateFeature('SPINNER', { visible: true });\n\n return getClient()\n .mutate({\n mutation: CLEAR_CHECKOUT_SESSION_CREDIT_FINANCING_OPTION_MUTATION,\n variables: { token: getToken() },\n context: { skipFallback: true },\n })\n .then(() => logger.cal.info('CLEAR_CREDIT_OPTION_SUCCESS'))\n .catch((error) => logger.cal.error('CLEAR_CREDIT_OPTION_ERROR', error))\n .finally(() => {\n updateFeature('SPINNER', { visible: false });\n\n if (returnFromCreditPayInFull()) {\n return;\n }\n\n // Treat as best-effort - continue to approve even if this fails\n updateFeature('CHECKOUT_BUTTON', {\n data: {\n status: CHECKOUT_BUTTON_STATES.RESOLVED,\n flow: 'CLEAR_CREDIT_OPTION',\n },\n });\n });\n};\n","let cookieEnabled = true;\n\nexport const setCookieEnabled = (value) => {\n cookieEnabled = value;\n};\n\nexport const areCookiesDisabled = () => {\n if (process.env.NODE_ENV === 'test') {\n return !cookieEnabled;\n }\n\n return typeof navigator !== 'undefined' && !navigator.cookieEnabled;\n};\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"Spinner\":\"Spinner_Spinner_1fJo0\",\"spinner\":\"Spinner_Spinner_1fJo0\",\"SpinnerImage\":\"Spinner_SpinnerImage_3lAAj\",\"spinnerImage\":\"Spinner_SpinnerImage_3lAAj\",\"SpinnerLoader\":\"Spinner_SpinnerLoader_1FmJE\",\"spinnerLoader\":\"Spinner_SpinnerLoader_1FmJE\",\"rotation-ltr\":\"Spinner_rotation-ltr_1zwLK\",\"rotationLtr\":\"Spinner_rotation-ltr_1zwLK\",\"rotation-rtl\":\"Spinner_rotation-rtl_-DHPE\",\"rotationRtl\":\"Spinner_rotation-rtl_-DHPE\"};","import { logger } from '@paypalcorp/c3-util-logger';\nimport { getTimeToInteract } from '@paypalcorp/c3-util-browser';\nimport { getGlobals } from '@paypalcorp/c3-shared-globals'\nexport const PAGE = {\n REVIEW: 'review',\n ECONSENT: 'econsent',\n ADD_FI: 'addFi',\n ADD_SHIPPING_ADDRESS: 'addShipping',\n};\n\nconst _store = {\n triggerInitialCPLEvent: true,\n hasContingencies: false,\n};\n\n/**\n * Populate the server side cpl metics as part of client side fpti payload.\n *\n * @param {Object} comp\n */\nconst populateServerSideCplMetrics = (comp) => {\n const keys = ['INITIAL_DATA']; // Can be moved to config/constants if we need to expand list\n const { serverSideCplMetrics } = getGlobals();\n if (serverSideCplMetrics) {\n keys.forEach(key => {\n comp[`SERVER_${key}`.toLowerCase()] = {\n start: serverSideCplMetrics[`${key}_TIME`],\n tt: serverSideCplMetrics[`${key}_TIME_TAKEN`]\n }\n });\n }\n}\n\n/**\n * Populate time spent out of focus as part of cpl.\n * The longer the tab is out-of-focus the slower it becomes.\n *\n * @param {*} comp\n */\nconst populateVisibilityMetrics = (comp) => {\n if (window.visibilityEvents) {\n const hidden = window.visibilityEvents.hidden;\n const visible = window.visibilityEvents.visible || Date.now();\n if (hidden) {\n const timeTaken = visible - hidden;\n comp['visibilitychange'] = {\n start: hidden,\n tt: timeTaken\n }\n }\n }\n}\n\nconst triggerCPLLatencyMetricsFPTI = (page, timeToInteract) => {\n window.logCPLPhase('component_load_time');\n const { comp, query, chunk, ...rest } = window?.cplPhases || {};\n\n populateServerSideCplMetrics(comp);\n populateVisibilityMetrics(comp);\n const cplLatencyMetrics = {\n state_name: 'CPL_LATENCY_METRICS',\n transition_name: `prepare_${page}`,\n page_name: `main:xo:lite:hermione:member:${page}`,\n cpl_comp_metrics: JSON.stringify(window?.cplPhases?.comp || {}),\n cpl_query_metrics: JSON.stringify(window?.cplPhases?.query || {}),\n cpl_chunk_metrics: JSON.stringify(window?.cplPhases?.chunk || {}),\n ...rest,\n total_page_load_time: timeToInteract,\n };\n\n logger.fpti('CPL_LATENCY_METRICS', cplLatencyMetrics);\n};\n\nexport const updateTriggerInitialCPLEvent = (state) => {\n logger.cal.info(`CPL_UPDATE_TRIGGER_INITIAL_CPL_EVENT_TO_${state}`);\n _store.triggerInitialCPLEvent = state;\n};\n\nexport const shouldTriggerInitialCPLEvent = () => {\n return _store.triggerInitialCPLEvent;\n};\n\nexport const updateHasContingencies = (state) => {\n logger.cal.info(`CPL_UPDATE_HAS_CONTINGENCIES_TO_${state}`);\n _store.hasContingencies = state;\n};\n\nexport const hasContingencies = () => {\n return _store.hasContingencies;\n};\n\nexport const triggerInitialCPLEvent = (page = '') => {\n if (shouldTriggerInitialCPLEvent()) {\n /* \n Dont trigger review page event incase of contingencies, since event\n for those scenarios will be triggered from corresponding components\n */\n if (page === PAGE.REVIEW && hasContingencies()) {\n logger.cal.info(`CPL_DISABLE_CALL_BECAUSE_OF_CONTINGENCIES_FROM_${page}_PAGE`);\n } else {\n const timeToInteract = getTimeToInteract();\n logger.cpl.logPerformance({\n action: `${page}_page_loaded`,\n uicomp: `custom-${page}`,\n uitype: 'page',\n page: `main:xo:lite:hermione:member:custom-${page}`,\n timeToInteract,\n });\n logger.cal.info(`CPL_CALL_TRIGGERED_FROM_${page}_PAGE`);\n // Set the flag to false so that CPL call is not triggered again\n updateTriggerInitialCPLEvent(false);\n // Trigger FPTI event to capture the time spent on different phases.\n triggerCPLLatencyMetricsFPTI(page, timeToInteract);\n }\n }\n};\n","import { Loading } from './Loading';\nimport gql from 'graphql-tag';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport Feature from '@/components/Feature';\nimport {\n FundingOptionFragment,\n CreditFinancingOptionFragment,\n} from '@paypalcorp/c3-graphql-fragments';\nimport { getCreditOffer } from './utils';\nimport { LANDING_PAGE } from '@/lib/landingPage';\nimport { creditPpcOffersGqlParams } from '@/lib/credit';\n\nexport const CreditOfferFragment = gql`\n fragment CreditOfferFragment on CreditPPCOffer {\n content\n isSelected\n isApproved\n rank\n referenceId\n touchpoint\n trackingDetails {\n impressionUrl {\n href\n }\n }\n __typename\n }\n`;\n\n// NOTE: any updates on creditPPCOffers or flags make sure you also\n// update addCardMutation & updateCardMutation in `@/components/AddFI/AddCard`\nexport const query = gql`\n ${FundingOptionFragment}\n ${CreditOfferFragment}\n ${CreditFinancingOptionFragment}\n query CreditOfferQuery($areCookiesDisabled: Boolean, $isIframe: Boolean, $token: String!) {\n checkoutSession(token: $token) {\n cart {\n intent\n }\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n buyer {\n userId\n }\n creditPPCOffers(areCookiesDisabled: $areCookiesDisabled, isIframe: $isIframe) {\n ...CreditOfferFragment\n }\n creditFinancingOption {\n ...CreditFinancingOptionFragment\n }\n flags {\n showPPCreditOffer\n isEligibleForCreditSecondButton\n hasPPCreditInstallments\n hideCart\n }\n }\n }\n`;\n\nconst shouldLoadFeatureComponent = (props) => {\n const { content = {} } = getCreditOffer('Banner', props) || {};\n\n // ensure required fields are present\n return ['OfferText1', 'CTAText'].every((key) => content[key]);\n};\n\nconst shouldLoadFeatureInstance = (props) => {\n const { features, customProps: { placement = LANDING_PAGE.REVIEW } = {} } = props;\n\n const choiceLandingPage = features.SELECT_FI.data.landingPage || LANDING_PAGE.REVIEW;\n\n // hide CreditOffer on review page if Choice is eligible and is landing page\n if (placement === LANDING_PAGE.REVIEW && choiceLandingPage === LANDING_PAGE.CHOICE) {\n return false;\n }\n\n // hide CreditOffer on choice page if Choice is eligible and review page is a landing page\n if (placement === LANDING_PAGE.CHOICE && choiceLandingPage === LANDING_PAGE.REVIEW) {\n return false;\n }\n\n return true;\n};\n\nconst CreditOffer = Feature({\n id: 'CREDIT_OFFER',\n queries: [\n {\n query: query,\n variables: { token: getToken(), ...creditPpcOffersGqlParams() },\n context: { planningBatch: true },\n },\n ],\n shouldLoadFeatureComponent,\n shouldLoadFeatureInstance,\n LoadingComponent: Loading,\n subscribeTo: ['SELECT_FI'],\n})({\n countrySpecific: { US: () => import('./CreditOfferUS'), GB: () => import('./CreditOfferGB') },\n});\n\nexport default CreditOffer;\n","import gql from 'graphql-tag';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { params } from '@paypalcorp/c3-util-browser';\nimport { buildURL } from '@/lib/redirects';\nimport { getClient, getCredit, getToken } from '@paypalcorp/c3-shared-globals';\nimport {\n isCrossCurrencyTransaction,\n getPageContext,\n getCreditIncentiveDetails,\n} from '@/components/ReturnFromCredit/utils';\n\nexport const CREATE_CREDIT_KEY_MUTATION = gql`\n mutation CreateCapeMayflyPayload(\n $token: String!\n $pageContext: String!\n $creditFundingInstrumentId: String!\n $userSelectedAddressId: String!\n $userSelectedPreferredShippingAddressId: String!\n $returnUriBase: String!\n $isCreditSecondButton: Boolean!\n $isCrossCurrencyTransaction: Boolean\n $creditIncentiveDetails: CreditIncentiveDetailsInput\n $cartAmount: String\n $cartCurrency: String\n ) {\n createCapeMayflyPayload(\n token: $token\n pageContext: $pageContext\n creditFundingInstrumentId: $creditFundingInstrumentId\n userSelectedAddressId: $userSelectedAddressId\n userSelectedPreferredShippingAddressId: $userSelectedPreferredShippingAddressId\n returnUriBase: $returnUriBase\n isCreditSecondButton: $isCreditSecondButton\n isCrossCurrencyTransaction: $isCrossCurrencyTransaction\n creditIncentiveDetails: $creditIncentiveDetails\n cartAmount: $cartAmount\n cartCurrency: $cartCurrency\n )\n }\n`;\n\nconst createReturnUri = () => {\n const returnUriBase = `${window?.location?.protocol}//${window?.location?.host}/checkoutweb`;\n\n const newParams = params();\n delete newParams['credit'];\n delete newParams['euat'];\n\n return buildURL(returnUriBase, newParams);\n};\n\nexport const triggerCreateCreditKeyMutation = (\n creditOffer,\n creditFundingInstrumentId,\n userSelectedAddressId,\n userSelectedPreferredShippingAddressId\n) => {\n const isCreditSecondButton = getCredit().isCreditSecondButton;\n return getClient()\n .mutate({\n mutation: CREATE_CREDIT_KEY_MUTATION,\n variables: {\n token: getToken(),\n pageContext: getPageContext(),\n creditFundingInstrumentId: creditFundingInstrumentId || '',\n userSelectedAddressId: userSelectedAddressId || '',\n userSelectedPreferredShippingAddressId: userSelectedPreferredShippingAddressId || '',\n returnUriBase: createReturnUri(),\n isCreditSecondButton,\n isCrossCurrencyTransaction: isCrossCurrencyTransaction(creditOffer),\n creditIncentiveDetails: getCreditIncentiveDetails(creditOffer),\n cartAmount: creditOffer?.content?.CartAmount,\n cartCurrency: creditOffer?.content?.CartAmountCurrencyCode,\n },\n })\n .catch((error) => {\n logger.cal.warn(`CREATE_CREDIT_KEY_MUTATION_FAILURE`, {\n ...error,\n });\n });\n};\n","import { logger, REVIEW_PAYLOAD } from '@paypalcorp/c3-util-logger';\nimport { fallback } from '@/lib/redirects';\nimport { getCreditFundingInstrument, isInstallmentCreditType } from '@/lib/utils';\nimport { redirectToCape } from '@/components/ReturnFromCredit/utils';\nimport { getCredit } from '@paypalcorp/c3-shared-globals';\nimport { triggerCreateCreditKeyMutation } from './Mutation';\n\nexport const mapCreditPPCOffer = ({ presentmentType = 'Banner', creditPPCOffers = [] }) =>\n creditPPCOffers\n ?.filter(\n (offer) =>\n offer.content &&\n offer.content.Product === 'PPC' &&\n offer.content.PresentmentType === presentmentType\n )\n ?.reduce(\n (prevOffer, currentOffer) => (prevOffer.rank < currentOffer.rank ? prevOffer : currentOffer),\n {}\n );\n\nexport const showPPCReuseBanner = (creditPPCOffers, fundingOptions) => {\n if (Array.isArray(creditPPCOffers) && Array.isArray(fundingOptions) && fundingOptions.length) {\n const hasPPCReuseOffer = creditPPCOffers.some((offer) => {\n return offer.content && offer.content.OfferCategory === 'REUSE';\n });\n\n if (hasPPCReuseOffer) {\n const action = 'showCreditReuseBanner';\n logger.fpti(\n action,\n REVIEW_PAYLOAD({ action, isCreditSecondButton: getCredit()?.isCreditSecondButton })\n );\n\n const creditFundingInstrument = getCreditFundingInstrument(fundingOptions);\n return (\n !creditFundingInstrument?.allPlans?.some((plan) => plan.isSelected) &&\n !creditFundingInstrument?.fundingInstrument?.isPreferred\n );\n }\n }\n\n return false;\n};\n\nexport const getCreditOffer = (presentmentType, props) => {\n const {\n allQueryData: [\n {\n data: {\n checkoutSession: {\n creditPPCOffers = [],\n fundingOptions = [],\n flags: { showPPCreditOffer } = {},\n } = {},\n },\n },\n ],\n } = props;\n\n if (\n (!showPPCReuseBanner(creditPPCOffers, fundingOptions) && !showPPCreditOffer) ||\n !Array.isArray(creditPPCOffers) ||\n !creditPPCOffers.length\n ) {\n return null;\n }\n\n // filter the array for our offers, then sort and find the item with the lowest/first rank\n const filteredCreditPPCOffers = mapCreditPPCOffer({ presentmentType, creditPPCOffers });\n if (Object.keys(filteredCreditPPCOffers).length > 0) {\n const action = 'showCreditOffer';\n logger.fpti(\n action,\n REVIEW_PAYLOAD({ action, isCreditSecondButton: getCredit()?.isCreditSecondButton })\n );\n return filteredCreditPPCOffers;\n }\n return null;\n};\n\nexport const redirectToHermesCape = ({ action, creditOffer }) => {\n const offerType = creditOffer?.content?.OfferType;\n let reason = action;\n\n if (offerType) {\n reason = isInstallmentCreditType(offerType) ? 'capeCYCO' : 'selectCreditOffer';\n }\n\n logger.cal.info('REDIRECT_TO_HERMES_CAPE', { offerType, reason });\n return fallback({ reason });\n};\n\nexport const redirectToCapeWithCreditKey = ({\n creditOffer,\n creditFundingInstrumentId,\n userSelectedAddressId,\n userSelectedPreferredShippingAddressId,\n}) => {\n const action = 'selectCreditOffer';\n logger.cal.info('createCreditKeyMutationPayload', {\n creditFundingInstrumentId,\n userSelectedAddressId,\n userSelectedPreferredShippingAddressId,\n });\n return triggerCreateCreditKeyMutation(\n creditOffer,\n creditFundingInstrumentId,\n userSelectedAddressId,\n userSelectedPreferredShippingAddressId\n )\n .then((response) => {\n const createCapeMayflyPayload = response?.data?.createCapeMayflyPayload;\n if (createCapeMayflyPayload && createCapeMayflyPayload.length > 0) {\n logger.cal.info('REDIRECT_TO_CAPE', { createCapeMayflyPayload });\n redirectToCape(createCapeMayflyPayload);\n } else {\n throw new Error('Invalid credit key. Falling back to hermes');\n }\n })\n .catch((err) => {\n // Fallback to Hermes for Credit application\n logger.cal.error('REDIRECT_TO_CAPE_ERROR', err);\n return fallback({ reason: action });\n });\n};\n\nexport const creditSecondButtonRedirect = ({\n creditOffer,\n creditFundingInstrumentId,\n creditRedirectExperiment,\n userSelectedAddressId,\n userSelectedPreferredShippingAddressId,\n newUser,\n showPPCreditOffer,\n isEligibleForCreditSecondButton,\n}) => {\n const action = 'creditSecondButtonRedirect';\n logger.fpti(\n action,\n REVIEW_PAYLOAD({\n action,\n isCreditSecondButton: getCredit()?.isCreditSecondButton,\n ...creditOffer?.content,\n ...creditRedirectExperiment,\n ppc_ineligible: !(showPPCreditOffer && newUser),\n })\n );\n logger.cal.info('CREDIT_SECOND_BUTTON_REDIRECT_CREDIT_OFFER', creditOffer);\n\n if (isEligibleForCreditSecondButton || newUser) {\n if (newUser) {\n logger.cal.info('CREDIT_SECOND_BUTTON_NEW_USER_REDIRECT');\n }\n\n if (creditRedirectExperiment.fallbackToHermes) {\n // credit second button fallback\n return redirectToHermesCape({ creditOffer });\n } else if (creditRedirectExperiment.redirectToCape) {\n // credit second button redirect to CAPE for ACQ and reuse w/o installments\n return redirectToCapeWithCreditKey({\n creditOffer,\n creditFundingInstrumentId,\n userSelectedAddressId,\n userSelectedPreferredShippingAddressId,\n });\n }\n }\n\n logger.cal.info('CREDIT_SECOND_BUTTON_REDIRECT_FAILED_INELIGIBLE_FOR_CREDIT');\n};\n","import { getAuthState, getClaims } from '@paypalcorp/c3-shared-globals';\nimport { params } from '@paypalcorp/c3-util-browser';\n\n/**\n * Check if current logged in user has a `REMEMBERED` auth state\n * @returns {Boolean}\n */\nexport const getIsRememberedAuthState = () => getAuthState() === 'REMEMBERED';\n\n/**\n * Checking current user is logged in via one touched by ensuring current user:\n * auth_state: `REMEMBERED`\n * auth_claims: `DEVICE_TOKEN`\n *\n * Checking `DEVICE_TOKEN` is needed because partner integration (`PARTNER_ASSERTION`) can also\n * have `REMEMBERED` as the user's authState but this will not be considered as a oneTouch\n * @returns {Boolean}\n */\nexport const getIsUserOneTouchLogin = () => {\n return getIsRememberedAuthState() && getClaims().includes('DEVICE_TOKEN');\n};\n\n/**\n * Checking current user is `SkipFacebookLogin` by ensuring current user:\n * auth_state: `REMEMBERED`\n * auth_claims: `PARTNER_ASSERTION`\n * query param `code` must be present in order to be considered from Facebook\n * @returns {Boolean}\n */\nexport const getIsUserSkipFacebookLogin = () => {\n return (\n getIsRememberedAuthState() &&\n getClaims().includes('PARTNER_ASSERTION') &&\n Boolean(params().code)\n );\n};\n\n/**\n * Checking if current logged user is via user device token remembered login or not by ensuring:\n * auth_state: `REMEMBERED`\n * auth_claims: `USER_DEVICE_TOKEN_IMPLICIT`\n * @returns {Boolean}\n */\nexport const getIsUserDeviceTokenImplicitLogin = () => {\n return getIsRememberedAuthState() && getClaims().includes('USER_DEVICE_TOKEN_IMPLICIT');\n};\n","import React from 'react';\n\nexport default (props) => (\n
\n {props.children}\n
\n);\n","import React from 'react';\nimport { uniqueStr } from '@checkout/react-components';\nimport LoadingContainer from '@/shared/components/LoadingContainer';\nimport styles from './styles.css';\n\nexport const Loading = () => {\n const clipPathId = uniqueStr();\n const gradientId = uniqueStr();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import React from 'react';\nimport styles from './styles.css';\n\nconst Spinner = () => (\n
\n
\n
\n
\n);\n\nexport default Spinner;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Spinner from '../Spinner';\nimport cx from 'classnames';\n\nimport styles from './styles.css';\n\nconst SpinnerOverlay = ({ children, extraMessage }) => (\n
\n \n {children && (\n \n {children}\n

\n )}\n {extraMessage && (\n

\n {extraMessage}\n

\n )}\n
\n);\n\nSpinnerOverlay.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n};\n\nexport default SpinnerOverlay;\n","import gql from 'graphql-tag';\nimport { FundingOptionFragment } from '@paypalcorp/c3-graphql-fragments';\n\nexport const CPA_DISCLAIMER_QUERY = gql`\n ${FundingOptionFragment}\n query CPADisclaimerQuery($token: String!) {\n checkoutSession(token: $token) {\n merchant {\n name\n }\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n userAction\n checkoutSessionType\n }\n }\n`;\n","import gql from 'graphql-tag';\nimport { PaymentContingenciesFragment } from '@paypalcorp/c3-graphql-fragments';\n\nexport const SCA_CONTINGENCY_QUERY = gql`\n ${PaymentContingenciesFragment}\n query SCA_CONTINGENCY_QUERY($token: String!, $experiences: [ThreeDSPaymentExperience]) {\n checkoutSession(token: $token) {\n cart {\n cancelUrl {\n href\n }\n }\n merchant {\n isTrustedBeneficiary\n logo {\n href\n }\n merchantId\n name\n }\n paymentContingencies {\n ...PaymentContingenciesFragment\n }\n secureCustomerAuthenticationContext {\n status\n exemptReason\n }\n }\n }\n`;\n","// SharedCard component contingencies\n\nexport const SHARED_CARD_CONTINGENCIES = [\n // following contingency is thrown from FI when user tries to add a card that belongs to other user\n 'SHARED_INSTRUMENT_CONSENT_REQUIRED',\n // following contingency is thrown from FI when consent is given by user to send his details to card owner\n 'ORIGINAL_USER_CHECK_PENDING',\n];\n","import { InMemoryCache, defaultDataIdFromObject } from 'apollo-cache-inmemory';\n\nexport const apolloInMemoryCache = (options = {}) =>\n new InMemoryCache({\n dataIdFromObject: (object) => {\n if (object.__typename) {\n switch (object.__typename) {\n case 'CheckoutSession':\n case 'PaymentContingencies':\n return `${object.__typename}`;\n case 'CheckoutBillingAddress':\n case 'CheckoutShippingAddress':\n return `${object.__typename}.${object.addressId}`;\n }\n }\n return defaultDataIdFromObject(object);\n },\n ...options,\n });\n","import gql from 'graphql-tag';\nimport {\n DeclinedInstrumentFragment,\n FundingOptionFragment,\n PaymentContingenciesFragment,\n} from '@paypalcorp/c3-graphql-fragments';\nimport { CreditOfferFragment } from '@/components/CreditOffer';\n\n// Below replan mutation is needed to reflect the newly added shared card incase it gets successfully added in the background\n// this is the best effort if the card gets added asynchronously\n\nexport const CHECKOUT_SESSION_REPLAN_MUTATION = gql`\n ${FundingOptionFragment}\n ${PaymentContingenciesFragment}\n ${DeclinedInstrumentFragment}\n ${CreditOfferFragment}\n mutation sendReplan(\n $areCookiesDisabled: Boolean\n $experiences: [ThreeDSPaymentExperience]\n $isIframe: Boolean\n $token: String!\n ) {\n triggerReplan(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n declinedInstruments {\n ...DeclinedInstrumentFragment\n }\n creditPPCOffers(areCookiesDisabled: $areCookiesDisabled, isIframe: $isIframe) {\n ...CreditOfferFragment\n }\n flags {\n showPPCreditOffer\n hasPPCreditInstallments\n }\n billingAddresses {\n addressId\n fullAddress\n isSelected\n }\n paymentContingencies {\n ...PaymentContingenciesFragment\n threeDomainSecure(experiences: $experiences) {\n ...ThreeDomainSecureFields\n }\n }\n }\n }\n`;\n","import {\n getDeviceAndNetworkInfo as _getDeviceAndNetworkInfo,\n isIframe as _isIframe,\n isPopup as _isPopup,\n isViewportSmall as _isViewportSmall,\n LocalStorage as BrowserStorage,\n params as _params,\n resetParams as _resetParams,\n} from '@paypalcorp/c3-util-browser';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport get from 'dlv';\nimport getContent from '@/lib/content';\nimport { logger } from '@paypalcorp/c3-util-logger';\n\nconst HERMIONE_APQ_EXPERIMENT_NAME = 'Hermione_APQ';\nconst HERMIONE_APQ_TREATMENT_NAME = 'Trmt_Hermione_APQ';\n\nexport const isViewportSmall = _isViewportSmall;\nexport const getDeviceAndNetworkInfo = _getDeviceAndNetworkInfo;\nexport const isIframe = _isIframe;\nexport const isPopup = _isPopup;\nexport const resetParams = _resetParams;\nexport const params = _params;\n\nexport function isIncontext() {\n return isLegacyIncontext() || isNewIncontext();\n}\n\n// for old incontext integrations - send post message\nexport const postToMerchantForOldIncontext = (msg) => {\n if (!isLegacyIncontext()) {\n return false;\n }\n\n try {\n logger.cal.info('attempting_old_incontext_postmessage');\n logger.cal.flush();\n msg = JSON.stringify(msg);\n // If we are not in IE, attempt to send a postMessage\n if (\n window.opener &&\n (window.navigator.userAgent.match(/edge/i) ||\n (window.opener.postMessage && !window.navigator.userAgent.match(/msie|trident/i)))\n ) {\n logger.cal.flush();\n window.opener.postMessage(msg, '*');\n logger.cal.info('old_incontext_postmessage_success_non_ie_success');\n return true;\n }\n // Otherwise, attempt to send a message through the iframe bridge\n const bridge =\n window.opener &&\n window.opener.frames &&\n window.opener.frames.length &&\n window.opener.frames.PayPalBridge;\n\n if (bridge && bridge.returnToParent) {\n logger.cal.flush();\n bridge.returnToParent(msg);\n logger.cal.info('old_incontext_bridgemessage_iframe_success');\n return true;\n }\n\n logger.cal.info('old_incontext_postmessage_incompatible_user_agent', {\n userAgent: window.navigator && window.navigator.userAgent,\n });\n } catch (err) {\n logger.cal.error('old_incontext_postmessage_error', {\n error: err.stack || err.toString(),\n });\n }\n\n logger.cal.warn('old_incontext_postmessage_failure');\n return false;\n};\n\n// check if it's new incontext integration\nexport const isNewIncontext = () => {\n return window.xprops && (isPopup() || isIframe());\n};\n\n/**\n * Check if it's old incontext integration which includes checking old checkout.js\n * integrations and vzero (Braintree) integration\n * @returns {Boolean}\n */\nexport const isLegacyIncontext = () => {\n if (window.xprops || isVzeroIntegration()) {\n return false;\n }\n\n return (\n (window.name &&\n (window.name.indexOf('PPFrame') === 0 ||\n window.name.indexOf('xcomponent__ppcheckout') === 0) &&\n isPopup()) ||\n params().incontext === '1' ||\n isIframe()\n );\n};\n\n/**\n * Check if it's a vzero (Braintree) integration based off window.name and\n * query params\n * @returns {Boolean}\n */\nexport const isVzeroIntegration = () => {\n return (\n window.name === 'PPFrameRedirect' ||\n params().nolegacy === '1' ||\n // TODO: Switch this to using CheckoutSessionFlags.isVZeroIntegration instead, as it's unclear what this\n // name represents and whether it's used for other reasons\n window.name.indexOf('braintreepaypallanding') === 0\n );\n};\n\n/**\n * Set the destination to the current feature (scoped to the current token)\n * before redirecting the user away from the app.\n *\n * Call isDestination() in your shouldAutoDisplayComponent feature hook\n * (along with any necessary eligibility logic) to automatically make your\n * feature visible when the user returns to the app.\n *\n * @param {String} featureId Feature ID\n */\nexport const setDestination = (featureId) => {\n // Scope to the token so stale values are ignored\n BrowserStorage.set('lastAttemptedDestination', `${getToken()}:${featureId}`);\n};\n\n/**\n * Clear the destination after it's no longer necessary to make the feature visible after returning.\n */\nexport const clearDestination = () => {\n BrowserStorage.remove('lastAttemptedDestination');\n};\n\n/**\n * Determine if the current feature was previously set as the destination.\n * Automatically cleans up stale values. See: setDestination\n *\n * @param {String} featureId Feature ID\n * @returns {Boolean}\n */\nexport const isDestination = (() => {\n let destination = null;\n\n function memoized(featureId) {\n if (destination) {\n if (destination?.token !== getToken()) {\n // Clean up stale values\n logger.cal.info('CLEANUP_STALE_MEMOIZED_DESTINATION');\n destination = null;\n return false;\n }\n\n // Use the memozied value\n return destination?.featureId === featureId;\n }\n\n const storageDestination = BrowserStorage.get('lastAttemptedDestination');\n\n if (!storageDestination) {\n // Short-circuit if key is not present\n return false;\n }\n\n const [token, destFeatureId] = storageDestination.split(':');\n\n if (token !== getToken()) {\n // Clean up stale values\n logger.cal.info('CLEANUP_STALE_STORAGE_DESTINATION');\n clearDestination();\n return false;\n }\n\n if (destFeatureId === featureId) {\n clearDestination();\n destination = { token, featureId: destFeatureId };\n return true;\n }\n\n return false;\n }\n\n memoized.reset = () => {\n destination = null;\n };\n\n return memoized;\n})();\n\n/**\n * Check url protocols against known patterns.\n * Generally, urls can only fall under one of the defined protocols.\n * @param {String} url a url\n * @param {String} urlType the type of url like `returnUrl` or `cancelUrl`\n */\nexport const getProtocolType = (url = '', urlType = 'default') => {\n try {\n const deepLinkRegex = new RegExp('^(?!(undefined|http|https|ftp|mailto|tel|file)).*:', 'g');\n const nonStandardRegex = new RegExp('^s*(ftp|mailto|tel|file):', 'g');\n const standardRegex = new RegExp('^s*(https?|s?):', 'g');\n const relativePathRegex = new RegExp('^(/).*', 'g');\n\n const result = {\n isDeepLink: deepLinkRegex.test(url),\n isNonStandard: nonStandardRegex.test(url),\n isStandard: standardRegex.test(url),\n isRelativePath: relativePathRegex.test(url),\n };\n\n logger.cal.info(`UrlProtocolType-${urlType}`, result);\n\n return result;\n } catch (err) {\n logger.cal.info(`UrlProtocolType-${urlType}-error`, err);\n\n return {};\n }\n};\n\nexport const isInstallmentCreditType = (creditOfferType) => {\n return ['PALA', 'INST', 'EZP'].includes(creditOfferType);\n};\n\nexport const isPaypalCreditFundingInstrument = (selectedFundingOption) => {\n return (\n selectedFundingOption?.fundingInstrument?.name === 'BILL_ME_LATER' &&\n selectedFundingOption?.fundingInstrument?.type === 'PAYPAL_CREDIT'\n );\n};\n\nexport function getCreditFundingInstrument(fundingOptions) {\n return fundingOptions?.find((item) => {\n return (\n item.fundingInstrument.name === 'BILL_ME_LATER' &&\n item.fundingInstrument.type === 'PAYPAL_CREDIT'\n );\n });\n}\n\nexport const isIncentivesPlan = (fundingSources) => {\n const incentives = fundingSources?.filter((source) => source?.fundingInstrument?.type === 'INCENTIVE');\n return incentives?.length > 0;\n}\n\nexport function getGplOffer(creditAsFIOffers) {\n return creditAsFIOffers.filter(\n (offer) => offer.product === 'GPL' && offer.presentmentType === 'Radio'\n );\n}\n\nexport function gplAmountDueTodayDetails(fundingInstrument) {\n const installmentsSchedules = get(\n fundingInstrument,\n 'creditFields.creditOffer.creditPayLater.installmentsSchedule'\n );\n\n if (!installmentsSchedules) {\n return;\n }\n\n let gplAmountDueToday;\n\n const downPayment = installmentsSchedules.find(\n (installmentsSchedule) => installmentsSchedule.paymentType === 'DOWN_PAYMENT'\n );\n if (!downPayment) {\n gplAmountDueToday = get(\n fundingInstrument,\n 'creditFields.creditOffer.creditPayLater.noDownPaymentAmt'\n );\n } else {\n gplAmountDueToday = downPayment.totalPayment;\n }\n\n gplAmountDueToday.dueDate = getContent('gplFIDisplay.dueToday');\n\n return gplAmountDueToday;\n}\n\nexport function getEligibilityForAPQ(experiments) {\n return Boolean(experiments?.[HERMIONE_APQ_EXPERIMENT_NAME]?.treatment_name === HERMIONE_APQ_TREATMENT_NAME);\n}\n\nexport function arrayBufferToBase64(buf) {\n return btoa(String.fromCharCode.apply(null, new Uint8Array(buf)));\n}\n","import { logger } from '@paypalcorp/c3-util-logger';\nimport { updateFeature } from '@paypalcorp/c3-util-store';\nimport stringify from 'qs/lib/stringify';\nimport { isFunction } from '@paypalcorp/c3-util-lang';\nimport { SPINNER_TYPES } from '@/components/Spinner';\nimport { SCA_CONTINGENCY_QUERY } from '@/components/Sca/query.gql';\nimport { threeDsExperienceVars } from '@paypalcorp/c3-util-threed-ds';\nimport { RETURN_PAYLOAD, ERROR_PAYLOAD, THREE_DS_PAYLOAD } from '@paypalcorp/c3-util-logger';\nimport {\n setDestination,\n getProtocolType,\n isVzeroIntegration,\n postToMerchantForOldIncontext,\n} from '@/lib/utils';\nimport { params } from '@paypalcorp/c3-util-browser';\nimport { instrumentationLink } from '@/lib/apolloLinks';\nimport { getClient, getToken, getGlobals, getIsResolveThreeDS, getStagingHostName } from '@paypalcorp/c3-shared-globals';\n\nconst getIntegrationPayload = () => ({\n sdkMeta: params().sdkMeta,\n xComponent: params().xcomponent,\n});\n\n// If we do an internal redirect from hermesnodeweb to checkoutuinodeweb, we'll keep some URL params that can cause trouble with routing.\nconst BLACKLISTED_REDIRECT_QUERY_PARAMS = [\n 'cmd', // cmd=_express-checkout causes request to be routed to xorouternodeweb instead of hermesnodeweb\n // remove Link and Pay related params (on any fallback / redirect we don't want the experience to load again)\n 'exp_flow',\n 'linkPay',\n 'euat',\n];\n\n// Force to proceed redirect without logs being flush\nconst REDIRECT_TIMEOUT = 1000;\n\n/**\n * Force our logs to be flushed before triggering our cb function\n * By default we'll wait 1000 ms otherwise trigger cb without logs being flushed\n * @param {Object} context\n * @param {Function} context.redirect | Redirect cb fn to be invoked after logs being flushed\n * @param {Object} context.payload | The payload for callback\n * @param {Object} context.options | Options object to determine whehter current cb has been invoked or not\n * @param {String} context.logName | The name of the integration type\n */\nconst flushLogsAndRedirect = ({\n redirect = () => Promise.resolve(),\n payload = {},\n options = {},\n logName = 'FLUSH_LOGS',\n} = {}) => {\n instrumentationLink.logPayload();\n\n const doRedirect = () => {\n if (!options.redirected) {\n options.redirected = true;\n return redirect(payload);\n }\n return Promise.resolve();\n };\n\n // if flush takes too long, proceed with redirect anyways\n setTimeout(() => doRedirect(), REDIRECT_TIMEOUT);\n\n // flush logs before calling our redirect fn\n return logger.cal\n .flush()\n .then(() => doRedirect())\n .catch((err) => {\n logger.cal.info(`${logName}_ERROR`, { error: err.stack || err.toString() });\n return doRedirect();\n });\n};\n\n/**\n * Context containing all the necessary information needed to redirect back to the merchant site. Handles incontext and full page redirects.\n * @typedef {Object} ReturnContext\n * @property {Object} context - Context needed to properly redirect back to merchant site.\n * @property {string} context.returnUrl - URL for return to merchant after success. Query: checkoutSession.cart.returnUrl.href\n * @property {string} context.cancelUrl - URL for return to merchant after cancel. Query: checkoutSession.cart.cancelUrl.href\n * @property {string} context.token - EC token for transaction. Query: checkoutSession.cart.cartId\n * @property {string} context.intent - Intent of transaction. Query: checkoutSession.cart.intent\n * @property {string} [context.userId] - Payer ID of the buyer. Required for onAuthorize - is otherwise optional. Query: checkoutSession.buyer.userId\n * @property {string} [context.billingToken] - BA token, if applicable. Query: checkoutSession.cart.billingToken\n * @property {string} [context.paymentId] - Payment ID of the transaction. Probably only present if created via the payments API? Query: checkoutSession.cart.paymentId\n */\nconst mapCheckoutJsContext = ({\n returnUrl,\n cancelUrl,\n token = getToken(),\n billingToken,\n intent,\n userId,\n paymentId,\n} = {}) => ({\n // See https://github.com/paypal/paypal-checkout/blob/v5/docs/implement-checkout.md for what these values map to\n returnUrl,\n cancelUrl,\n billingToken,\n orderID: token, // From our perspective, orderID and token are the same\n payerID: userId,\n paymentToken: token,\n paymentID: paymentId,\n intent: intent && intent.toLowerCase(), // to match Hermes format\n});\n\n/**\n * Return to the merchant when the user wants to cancel out of the checkout flow\n * @param {ReturnContext} context\n */\nexport const returnCancel = (context) => {\n const { cancelUrl: url, currencyCode, merchantName } = context;\n const errorCode = 'CANCEL_RETURN_MERCHANT_ERROR';\n\n // reconstruct url when user comes from native experience\n let cancelUrl = params().native_xo ? reconstructReturnUrl({ url }) : url;\n\n logger.fpti(\n 'CANCEL_RETURN_TO_MERCHANT',\n RETURN_PAYLOAD({ action: 'cancel', currency_code: currencyCode, cancelUrl })\n );\n\n if (window.xprops && isFunction(window.xprops.onCancel)) {\n if (!isFunction(window.xprops.onCancel)) {\n logger.cal.warn('MERCHANT_ON_CANCEL_INTEGRATION_ERROR', {\n currencyCode,\n merchantName,\n cancelUrl,\n token: getToken(),\n ...getIntegrationPayload(),\n });\n }\n\n const payload = mapCheckoutJsContext(context);\n\n logger.cal.info('INCONTEXT_XPROPS_CANCEL', payload);\n\n // Redirect after logs flush\n return flushLogsAndRedirect({\n redirect: window.xprops.onCancel,\n payload,\n logName: 'INCONTEXT_XPROPS_ON_CANCEL_',\n options: { redirected: false },\n });\n }\n\n // for old checkout.js integration send post message\n if (\n cancelUrl &&\n postToMerchantForOldIncontext({\n operation: 'cancel_to_merchant',\n returnUrl: cancelUrl,\n updateParent: true,\n })\n ) {\n return;\n }\n\n // This value comes directly from the Checkout Session via GraphQL.\n // Shouldn't require any encoding.\n return redirect(cancelUrl)\n .then(() => {\n // if the return URL is a deeplink URL, then we should show\n // the page with a `Return to merchant` button so that the user can click on it to redirect\n if (getProtocolType(cancelUrl, 'cancelUrl').isDeepLink) {\n const reason = 'CANCEL_RETURN_TO_MERCHANT_DEEPLINK';\n\n logger.cal.info(reason, { url: cancelUrl });\n logger.fpti(reason, RETURN_PAYLOAD({ action: 'cancel', cancelUrl }));\n\n return redirectGenericError({ code: reason, returnUrl: cancelUrl, merchantName });\n }\n })\n .catch(() => {\n logger.fpti(errorCode, ERROR_PAYLOAD({ code: errorCode, cancelUrl, merchantName }));\n return redirectGenericError({ code: errorCode, returnUrl: cancelUrl, merchantName });\n });\n};\n\n/**\n * Return to the merchant when the user has approved the payment for checkout\n * @param {ReturnContext} context\n */\nexport const returnAuthorize = (context) => {\n const errorCode = 'RETURN_TO_MERCHANT_TIMEOUT';\n const { returnUrl, currencyCode, merchantName, paymentId } = context || {};\n\n logger.fpti(\n 'SUCCESS_RETURN_TO_MERCHANT',\n RETURN_PAYLOAD({ action: 'backToMerchant', currency_code: currencyCode, returnUrl, paymentId })\n );\n\n const updatedReturnUrl = reconstructReturnUrl({\n ...context,\n url: returnUrl,\n });\n\n // for new checkout.js integration call `onAuthorize` callback\n if (window.xprops) {\n if (!isFunction(window.xprops.onAuthorize)) {\n logger.cal.warn('MERCHANT_ON_AUTHORIZE_INTEGRATION_ERROR', {\n returnUrl,\n currencyCode,\n merchantName,\n vzero: isVzeroIntegration(),\n token: getToken(),\n ...getIntegrationPayload(),\n });\n }\n\n const payload = mapCheckoutJsContext({\n ...context,\n returnUrl: updatedReturnUrl,\n });\n\n if (window.xprops.getConnectURL) {\n logger.cal.info('INCONTEXT_XPROPS_CONNECT_REDIRECT');\n\n return window.xprops\n .getConnectURL({ payerID: payload.payerID })\n .then((connectURL) => {\n return flushLogsAndRedirect({\n logName: 'INCONTEXT_XPROPS_EBAY_CONNECT',\n redirect: () => {\n window.location.assign(connectURL);\n },\n });\n })\n .catch((err) => {\n logger.cal.error('INCONTEXT_XPROPS_CONNECT_ERROR', {\n err: err.stack || err.toString(),\n });\n\n return flushLogsAndRedirect({\n redirect: window.xprops.onAuthorize,\n payload,\n logName: 'INCONTEXT_XPROPS_ON_AUTHORIZE_',\n options: { redirected: false },\n });\n });\n }\n\n logger.cal.info('INCONTEXT_XPROPS_AUTHORIZE', payload);\n\n return flushLogsAndRedirect({\n redirect: window.xprops.onAuthorize,\n payload,\n logName: 'INCONTEXT_XPROPS_ON_AUTHORIZE_',\n options: { redirected: false },\n });\n }\n\n // for old checkout.js integration send post message\n if (\n updatedReturnUrl &&\n postToMerchantForOldIncontext({\n operation: 'return_to_merchant',\n returnUrl: updatedReturnUrl, // proper redirectUrl for vzero & native integrations\n updateParent: true,\n })\n ) {\n return;\n }\n\n return redirect(updatedReturnUrl, {\n spinnerType: SPINNER_TYPES.RETURN_TO_MERCHANT,\n rejectOnTimeout: 15000,\n replace: getIsResolveThreeDS(), // replace only for full-page 3DS case\n })\n .then(() => {\n // if the return URL is a deeplink URL, then we should show\n // the page with a `Return to merchant` button so that the user can click on it to redirect\n if (getProtocolType(updatedReturnUrl, 'returnUrl').isDeepLink) {\n const reason = 'SUCCESS_RETURN_TO_MERCHANT_DEEPLINK';\n\n logger.cal.info(reason, { url: returnUrl });\n logger.fpti(\n reason,\n RETURN_PAYLOAD({\n action: 'backToMerchant',\n payment_id: paymentId,\n return_url: returnUrl,\n updated_return_url: updatedReturnUrl,\n })\n );\n\n return redirectGenericError({ code: reason, returnUrl: updatedReturnUrl, merchantName });\n }\n })\n .catch(() => {\n logger.fpti(\n errorCode,\n ERROR_PAYLOAD({\n code: errorCode,\n merchant_name: merchantName,\n return_url: returnUrl,\n updated_return_url: updatedReturnUrl,\n })\n );\n return redirectGenericError({ code: errorCode, returnUrl: updatedReturnUrl, merchantName });\n });\n};\n\n/**\n * Return to Merchant on ApprovePayment Success\n *\n * @param approveMemberPaymentResultPayload - ApproveMemberPayment Mutation result\n * @param currencyCode - CurrencyCode for FPTI logging\n * @param merchantName - Merchant's brand name\n */\nexport const returnToMerchantAfterApprove = ({\n approveMemberPaymentResultPayload,\n currencyCode,\n merchantName,\n} = {}) => {\n const { buyer: { userId } = {}, cart: { returnUrl = {}, intent, paymentId, billingToken } = {} } =\n approveMemberPaymentResultPayload || {};\n return (\n updateFeature('SPINNER', {\n visible: true,\n data: { type: SPINNER_TYPES.RETURN_TO_MERCHANT },\n }) &&\n returnAuthorize({\n token: getToken(),\n userId,\n intent,\n returnUrl: (returnUrl && returnUrl.href) || '',\n paymentId,\n billingToken,\n currencyCode,\n merchantName,\n })\n );\n};\n\n/**\n * Redirect to the generic error page on checkoutuinodeweb, using the error code and cancelUrl provided\n *\n * @param code - Reason of redirect\n * @param returnUrl - Merchant's return url\n * @param merchantName - Merchant's brand name\n */\nexport const redirectGenericError = ({\n code = 'DEFAULT',\n returnUrl = '',\n merchantName = '',\n replace = false,\n} = {}) => {\n const baseUrl = '/checkoutweb/genericError';\n const queryParams = {\n code: btoa(code),\n cancelLink: returnUrl,\n merchantName: merchantName,\n };\n\n const genericErrorUrl = buildURL(baseUrl, queryParams);\n\n logger.cal.info(`REDIRECT_TO_GENERIC_ERROR_${code}`);\n\n return redirect(genericErrorUrl, { replace });\n};\n\n/**\n * Construct url with params\n *\n * @param {String} url\n * @param {Object} params\n */\nexport const buildURL = (url, params) => {\n const paramKeys = Object.keys(params || {});\n\n if (JSON.stringify(params) === '{}') {\n return url;\n }\n\n if (!paramKeys.length) {\n return url;\n }\n\n BLACKLISTED_REDIRECT_QUERY_PARAMS.forEach((blacklistedKey) => delete params[blacklistedKey]);\n\n if (url.indexOf('?') === -1) {\n url += '?';\n } else {\n url += '&';\n }\n\n url += stringify(params);\n\n return url;\n};\n\nexport function redirectToOpenBanking(encryptedId) {\n logger.cal.info('HERMIONE_REDIRECT_TO_OPEN_BANKING');\n const queryParams = Object.assign({}, params(), { id: encryptedId });\n ['cmd'].forEach((key) => {\n delete queryParams[key];\n });\n const openBankingUrl = buildURL(`/checkoutweb/openBanking/`, queryParams);\n return redirect(openBankingUrl);\n}\n\nexport function redirectToP3Flow(partnerName) {\n logger.cal.info('HERMIONE_REDIRECT_TO_P3_FLOW');\n const currentQueryParam = Object.assign({}, params());\n //'success_card_num','failed_card_num','errorCode','errorStatus' are param from MNW\n // indicating the p3 flow result dont want to set it returnUrl as it might mislead.\n ['cmd','success_card_num','failed_card_num','errorCode','errorStatus'].forEach((key) => {\n delete currentQueryParam[key];\n });\n const returnUrl = buildURL(`/checkoutweb/`, currentQueryParam);\n const queryParams = Object.assign({}, params(), { partner_name: partnerName, returnUri : returnUrl });\n ['cmd'].forEach((key) => {\n delete queryParams[key];\n });\n const p3StartUrl = buildURL(`/checkoutweb/p3start/`, queryParams);\n return redirect(p3StartUrl);\n}\n\n/*\n * Redirect the user to Negative Balance App in Moneynodeweb\n */\nexport function redirectToNegativeBalanceRecovery() {\n const negativeBalanceRecoveryUrl = buildURL(getGlobals().uri.negativeBalanceRecoveryEndpoint);\n\n logger.cal.info('REDIRECT_TO_NEGATIVE_BALANCE_RECOVERY', {\n url: negativeBalanceRecoveryUrl,\n });\n\n return redirect(negativeBalanceRecoveryUrl);\n}\n\n/**\n *\n * @param {String} reason\n * @param {Object} ctx\n */\nexport function redirectToLogin(reason = 'GENERIC_ERROR', ctx) {\n const queryParams = Object.assign({}, params(), { ulClientRedirect: reason }, ctx);\n\n ['ul', 'ulReturn', 'returnToLiteUri'].forEach(function (key) {\n delete queryParams[key];\n });\n\n const ulAsLandingUrl = buildURL(window.location.pathname, queryParams);\n\n logger.cal.info(`REDIRECT_TO_UL_${reason}`, { url: ulAsLandingUrl });\n\n return redirect(ulAsLandingUrl);\n}\n\nexport function redirectToLogout(reason, extraParams = {}) {\n const baseUrl = '/checkoutweb/logout';\n const queryParams = {\n ...params(),\n ...extraParams,\n reason,\n };\n\n const logoutUrl = buildURL(baseUrl, queryParams);\n\n return redirect(logoutUrl);\n}\n\nlet redirectedToAuthChallenge = false;\n\nexport const resetAuthChallengeRedirect = () => {\n redirectedToAuthChallenge = false;\n};\n\n/**\n * Given a stepUpContext, builds the URL to redirect to the auth challenge app.\n * This is if the user needs additional confirmation before being allowed to complete the transaction.\n * @param {string} stepupContext - Code from a step up contingency like `VERIFY_USER_IDENTITY`, to be passed to authchallengenodeweb\n * */\nexport function redirectToAuthChallenge(stepupContext) {\n if (redirectedToAuthChallenge) {\n return;\n }\n\n redirectedToAuthChallenge = true;\n\n const queryParams = {\n ...params(),\n lite: 1,\n invalidateCheckoutSessionPlan: true, // We need to force replan on return to lite\n atoSuccess: 'true',\n };\n\n delete queryParams['returnToLiteUri'];\n\n const path = 'webapps/hermes'; // Relative pathname for redirect. Do not add a leading slash, as it causes some URLs to fail validation.\n const returnUri = buildURL(path, queryParams);\n // having it as backward compatible until all changes rollout, will clean authchallenge part post rollout\n const authEndPoint =\n getGlobals().uri.authNodeWebEndpoint || getGlobals().uri.authchallengeEndpoint;\n const authChallengeUrl = buildURL(authEndPoint, {\n stepupContext,\n returnUri,\n });\n\n logger.cal.info('REDIRECT_TO_AUTHCHALLENGE', { url: authChallengeUrl });\n\n redirect(authChallengeUrl);\n}\n\n/**\n * For all risky login related use case (one touch), we'll need to go via Hermes due to context\n * sharing between `xo-landing-router` and Unified login\n *\n * @param {Object} config | redirectToRiskyLogin config object\n * @param {String} config.reason | Reason for redirecting to risky login\n * @param {String} config.destination | Destination page after coming back from risky login\n * @param {Object} config.extraParams | Additional risky login params\n * @returns {Promise} Redirect to Hermesnodeweb for risky login\n */\nexport function redirectToRiskyLogin({ reason = '', destination = '', extraParams = {} } = {}) {\n return Promise.resolve()\n .then(() => destination && setDestination(destination))\n .then(() => getClient().query({ query: SCA_CONTINGENCY_QUERY, variables: threeDsExperienceVars({ token: getToken() }), fetchPolicy: 'cache-only' }))\n .then((scaContingency) => {\n const isLocalhost = window.location.host.includes('localhost');\n const baseUrl = isLocalhost\n ? `https://www.${getStagingHostName()}/webapps/hermes?ul=landing`\n : '/webapps/hermes?ul=landing';\n const queryParams = {\n ...params(),\n ...extraParams,\n reason,\n };\n\n if (scaContingency?.data?.checkoutSession?.secureCustomerAuthenticationContext?.status === 'IN_PROGRESS') {\n queryParams.invalidateCheckoutSessionPlan = true;\n }\n\n // hashUrl handler can be removed after ADD_BANK_LINK is removed\n const hashUrl = extraParams.hashUrl;\n const defaultRemoved = ['ul', 'ulReturn', 'reason', 'returnToLiteUri'];\n // `hashUrl` means we will be fallback to Hermes, hence `lite` can't present\n if (hashUrl) {\n defaultRemoved.push(...['lite', 'hashUrl']);\n } else {\n defaultRemoved.push(...['hermes']);\n }\n\n defaultRemoved.forEach((key) => {\n delete queryParams[key];\n });\n\n let hermesUrl = buildURL(baseUrl, queryParams);\n if (hashUrl) {\n hermesUrl += hashUrl;\n }\n\n logger.cal.info(`REDIRECT_TO_HERMES_RISKY_LOGIN_${reason}`, { url: hermesUrl });\n redirect(hermesUrl);\n })\n .catch((e) => logger.cal.info('REDIRECT_TO_RISKY_LOGIN_ERROR', { message: e && e.message }));\n}\n\nconst isUnsafeRedirect = (url) =>\n url?.toLowerCase().replace(/\\s/g, '').indexOf('javascript:') !== -1; // eslint-disable-line no-script-url\n\nconst blacklist = ['password', 'pr_password'];\nconst blacklistRegex = new RegExp(`(${blacklist.join('|')})=([^&]*)`, 'g');\n\nconst sanitizeUrlForLogging = (inputUrl) =>\n inputUrl.replace(blacklistRegex, (match, key, value) => `${key}=**`);\n\n/**\n * Redirect to the provided url.\n * Also triggers spinner and flushes logs\n * If rejectOnTimeout is specified, reject promise after given timeout\n * @param {String} url\n * @param {Object} param1\n */\nexport const redirect = (\n url = '',\n { replace, windowOpen, spinnerType = SPINNER_TYPES.DEFAULT, rejectOnTimeout } = {}\n) => {\n return new Promise((resolve, reject) => {\n if (isUnsafeRedirect(url)) {\n logger.cal.info('HERMIONE_UNSAFE_REDIRECT', { url });\n throw new Error(`HERMIONE_UNSAFE_REDIRECT ${url}`);\n }\n\n logger.cal.info('REDIRECT', { url: sanitizeUrlForLogging(url) });\n\n const redirectBack = () => {\n if (replace) {\n resolve(window.location.replace(url));\n } else if (windowOpen) {\n resolve(window.open(url));\n } else {\n resolve(window.location.assign(url));\n }\n };\n const options = { redirected: false };\n\n if (!windowOpen) {\n updateFeature('SPINNER', { visible: true, data: { type: spinnerType } });\n }\n\n // Redirect after logs flush\n flushLogsAndRedirect({\n redirect: redirectBack,\n payload: undefined,\n logName: 'BACK_TO_MERCHANT_REDIRECT',\n options,\n });\n\n if (rejectOnTimeout) {\n setTimeout(() => {\n options.redirected = true;\n reject();\n }, rejectOnTimeout);\n }\n });\n};\n\n/**\n * trigger fallback with some reason\n */\nexport function fallback({ reason }) {\n const baseUrl = '/checkoutweb/fallback';\n const previousParams = Object.assign({}, params());\n\n BLACKLISTED_REDIRECT_QUERY_PARAMS.forEach(\n (blacklistedKey) => delete previousParams[blacklistedKey]\n );\n const previousQueryString = stringify(previousParams);\n\n const newParams = {\n token: getToken(),\n reason: reason,\n query: previousQueryString,\n };\n\n const fallbackUrl = buildURL(baseUrl, newParams);\n\n return redirect(fallbackUrl, { replace: true });\n}\n\n/**\n * Reconstruct returnUrl for native & partner integrations for incontext integations\n *\n * @param {Object} options | The options object\n * @param {string} options.url - can be either return/cancel url\n * @param {string} options.intent\n * @param {string} options.paymentId\n * @param {Object} options.xparms - xparams object\n * @param {Object} options.urlParams - EC token for transaction. Query: checkoutSession.cart.cartId\n * @param {boolean} options.isVzero - Boolean flag to indicate current integration is vzero\n * @param {string} options.fromNative - Boolean flag to indicate current integration is native\n * @returns {string} Construct the correct url for native & partner integrations for incontext integration\n */\nexport const reconstructReturnUrl = ({\n url = '',\n intent = '',\n userId = '',\n paymentId = '',\n returnUrl = '',\n isVzero = isVzeroIntegration(),\n redirectUri = params().redirect_uri || '',\n fromNative = Boolean(params().native_xo),\n invalidIntegrationType = Boolean(redirectUri) && (isVzero || fromNative),\n} = {}) => {\n const urlParams = {};\n const payload = {\n url,\n vzero: isVzero,\n native: fromNative,\n return_url: returnUrl,\n redirect_uri: redirectUri,\n ...(paymentId && { payment_id: paymentId }),\n };\n\n // NOTE: for v2 order transacitons (incontext), `returnUrl` will be `null` from approveMemberPayment\n // mutation since both `returnUrl` and `cancelUrl` are being handled by window.xprops\n if (!url && !redirectUri && returnUrl) {\n return returnUrl;\n }\n\n // TODO: can be removed after investigation\n if (!url.includes('paymentId') && paymentId) {\n logger.cal.warn('MISSING_PAYMENT_ID_FROM_URL', payload);\n }\n\n // By default `redirect_uri` should ONLY be honored by either\n // native or partner (ex, vzero) integrations\n if (!invalidIntegrationType) {\n logger.cal.info('INVALID_INTEGRATION_TYPE_FOR_RECONSTRUCT_URL', payload);\n return returnUrl;\n }\n\n // TODO: can be removed after investigation\n const { isDeepLink: isNativeRedirectUri } = getProtocolType(redirectUri, 'redirect_uri');\n if (!isNativeRedirectUri) {\n logger.cal.warn('INVALID_REDIRECT_URI', payload);\n }\n\n // TODO: can be removed after investigation\n if (!redirectUri.includes('token')) {\n redirectUri += `?token=${getToken()}`;\n logger.cal.warn('MISSING_TOKEN_FROM_REDIRECT_URI', payload);\n }\n\n // TODO: can be removed after investigation\n if (!redirectUri.includes('PayerID') && userId) {\n redirectUri += `&PayerID=${userId}`;\n logger.cal.warn('MISSING_PAYER_ID_FROM_REDIRECT_URI', {\n ...payload,\n payer_id: userId,\n });\n }\n\n // TODO: can be removed after investigation\n if (!redirectUri.includes('paymentId') && paymentId) {\n // NOTE: double check to ensure `paymentId` is present & not duplicagted\n urlParams.paymentId = paymentId;\n logger.cal.warn('MISSING_PAYMENT_ID_FROM_URL', { payment_id: paymentId });\n }\n\n urlParams.intent = intent && intent.toLowerCase();\n urlParams.opType = 'payment';\n urlParams.return_uri = `${url}${paymentId ? `&paymentId=${paymentId}` : ''}`;\n const finalReturnUrl = buildURL(redirectUri, urlParams);\n\n logger.cal.info('RECONSTRUCT_RETURN_URL', {\n ...payload,\n reconstruct_return_url: finalReturnUrl,\n });\n return finalReturnUrl;\n};\n\n/**\n * Redirect back to checkoutlite on 3DS approve failure\n */\nexport function redirectOnThreeDSFailed({ message = '' }) {\n const { originApp = 'hermione' } = params();\n\n const baseUrl = '/checkoutweb';\n const newParams = Object.assign({}, params(), {\n threeDSFailed: true,\n });\n\n logger.fpti(\n 'errorThreeDSContingency',\n THREE_DS_PAYLOAD({\n action: 'errorThreeDSContingency',\n message,\n originApp,\n })\n );\n\n // For Link and Pay, we'd only get the sticky FI associated with the BA.\n // On 3ds error, we need to list the other FIs and this requires re-planning\n // and hence falling back to hermes\n if (originApp === 'link_and_pay') {\n return fallback({ reason: 'failed3DS' });\n }\n\n const redirectUrl = buildURL(baseUrl, newParams);\n\n redirect(redirectUrl, { replace: true });\n}\n\n/**\n * Redirect to the same page and pass in new/updated params\n *\n * @param {Object} _params - New/Updated parameters object\n * @param {String} returnUrl - New refresh return url with new/updated parameter\n */\nexport const redirectToSameLocationWithNewParam = (newParams = {}) => {\n const baseUrl = window.location.pathname;\n const queryParams = {\n ...params(),\n ...newParams,\n };\n\n const newUrl = buildURL(baseUrl, queryParams);\n\n return redirect(newUrl);\n};\n\n/**\n * Redirect users to Moneynodeweb to add a bank account\n *\n * @NOTE The redirection to moneynodeweb will happen in two steps:\n * 1. redirect users to the `moneynodeweb/addBank/` route. This is a route configured in severus which is responsible of\n * preparing the moneynodeweb url alongside with the cancel and return urls.\n * 2. Once configuring the url is done, users will be redirected to MNW.\n */\nexport function redirectToMNWAddBank() {\n return redirect(buildURL('/checkoutweb/moneynodeweb/addBank/', params()));\n}","import { logger } from '@paypalcorp/c3-util-logger';\nimport { getClient, getToken } from '@paypalcorp/c3-shared-globals';\nimport gql from 'graphql-tag';\n\n/*\n * This mutation is used to invalidate the current Planning of the Checkout Session.\n * So that the next time when we query for any planning data, the replanning is triggered.\n * In hermione, the planning is queried with `PAY_WITH` Query.\n */\nexport const INVALIDATE_CHECKOUT_SESSION_PLAN_MUTATION = gql`\n mutation InvalidateCheckoutSessionPlan($token: String!) {\n invalidateCheckoutSessionPlan(token: $token)\n }\n`;\n\nexport default function invalidateCheckoutSessionPlan() {\n const client = getClient();\n const token = getToken();\n return client\n .mutate({\n mutation: INVALIDATE_CHECKOUT_SESSION_PLAN_MUTATION,\n variables: {\n token,\n },\n })\n .catch((error) => {\n logger.cal.info(`INVALIDATE_CHECKOUT_SESSION_PLAN_MUTATION_FAILURE`, { ...error });\n });\n}\n","import { params } from '@paypalcorp/c3-util-browser';\nimport invalidateCheckoutSessionPlan from '@/lib/invalidateCheckoutSessionPlan';\nimport { getIsResolveThreeDS } from '@paypalcorp/c3-shared-globals';\n\n/*\n * Checks if the checkoutSession Plan needs to be invalidated\n * & if needed, it calls the invalidateCheckoutSessionPlan mutation\n */\nconst invalidateCheckoutSessionPlanIfNeeded = () => {\n const shouldInvalidateCheckoutSessionPlan = !!params().invalidateCheckoutSessionPlan;\n\n if (shouldInvalidateCheckoutSessionPlan) {\n return invalidateCheckoutSessionPlan();\n }\n return Promise.resolve();\n};\n\n/*\n * The Idea is to chain multiple promises like\n * const executePreRenderSteps = () => (\n * invalidateCheckoutSessionIfNeeded()\n * .then(doSomethingElse)\n * .then(otherNeededSteps)\n * )\n */\nconst executePreRenderSteps = () => {\n if (getIsResolveThreeDS()) {\n return Promise.resolve();\n }\n return invalidateCheckoutSessionPlanIfNeeded();\n};\n\nexport { executePreRenderSteps };\n","import { params } from '@paypalcorp/c3-util-browser';\nimport { updateFeature, updateFeatures } from '@paypalcorp/c3-util-store';\nimport { CHECKOUT_BUTTON_STATES } from '@/components/CheckoutButton/constants';\nimport { logger, GENERIC_PAYLOAD, STATE_NAME} from '@paypalcorp/c3-util-logger';\nimport { checkCardAdd } from './performReplanAfterPthreeFlow';\nimport getContent from '@/lib/content';\nimport Notification from '@/shared/components/Notification';\nimport React, { useEffect } from 'react';\n\n/**\n * This return step handling is for P3 flow, post completing flow in partner redirect from MNW \n * to checkout with success_card_num, failed_card_num , errorCode so based on the data\n * we handle the flow.\n */\nconst checkP3ReturnStep = () => {\n const { success_card_num, failed_card_num, errorCode = '', errorStatus = '' } = params();\n const successCardNum = parseInt(success_card_num,10);\n const failedCardNum = parseInt(failed_card_num,10);\n\n const logHelper = (status) => {\n logFPTI(errorCode, errorStatus, success_card_num,failed_card_num, status);\n }\n const checkRealTimeCardAddHelper = (eventType) => {\n return checkRealTimeCardAdd(eventType, successCardNum, failedCardNum, errorCode);\n }\n\n if(errorCode === 'PULL_SERVER_REQHANDLER'){\n logger.cal.info('P3_PULL_SERVER_REQHANDLER_ERROR_FLOW');\n logHelper('P3_ERROR');\n return checkRealTimeCardAddHelper('ERROR');\n }\n\n const isSuccessCardExists = successCardNum > 0;\n const isFailedCardExists = failedCardNum > 0;\n\n if (isSuccessCardExists && !isFailedCardExists) {\n logger.cal.info('P3_COMPLETE_SUCCESS_FLOW');\n logHelper('P3_SUCCESS');\n return checkRealTimeCardAddHelper('SUCCESS');\n } else if (isSuccessCardExists && isFailedCardExists) {\n logger.cal.info('P3_PARTIAL_SUCCESS_FLOW');\n logHelper('P3_PARTIAL_SUCCESS');\n return checkRealTimeCardAddHelper('PARTIAL');\n } else if (!isNaN(successCardNum) && !isSuccessCardExists) {\n logger.cal.info('P3_ERROR_FLOW');\n logHelper('P3_ERROR');\n return checkRealTimeCardAddHelper('ERROR');\n }\n};\n\nexport const logFPTI = (errorCode, errorStatus,success_card_num,failed_card_num,status) => {\n \n let intErrorCode, intErrorDesc = '';\n if(status === 'P3_ERROR'){\n intErrorCode = errorStatus;\n intErrorDesc = errorCode\n }\n\n logger.fpti('xo_add_fi_messaging', GENERIC_PAYLOAD({\n int_error_code: intErrorCode,\n int_error_desc: intErrorDesc,\n state_name: STATE_NAME.addCard,\n transition_name: 'prepare_fi_messaging',\n fi_count: 'success_card_count:'+ success_card_num + ',failed_card_count:' + failed_card_num,\n status: status\n })\n );\n};\n\nexport const checkRealTimeCardAdd = (flowStatus, successCardNum, failedCardNum, errorCode) => {\n if (flowStatus === 'ERROR') {\n return updateFeature('LINK_CARD_BY_PTHREE', { data: { pthreeFailureReason: errorCode } });\n }\n return checkCardAdd().then(({ data }) => {\n let message = '';\n if (flowStatus === 'SUCCESS') {\n\n message = successCardNum > 1 ? getContent('addCard.linkCardByPthree.success.ways', { numberOfCards: successCardNum }) \n : getContent('addCard.linkCardByPthree.success.way', { numberOfCards: successCardNum });\n\n } else if (flowStatus === 'PARTIAL') {\n let contentKey = '';\n if(successCardNum > 1 && failedCardNum === 1){\n contentKey = 'addCard.linkCardByPthree.partialSuccess.ways.account';\n } else if(successCardNum > 1 && failedCardNum > 1){\n contentKey = 'addCard.linkCardByPthree.partialSuccess.ways.accounts';\n } else if(successCardNum === 1 && failedCardNum === 1){\n contentKey = 'addCard.linkCardByPthree.partialSuccess.way.account';\n } else if(successCardNum === 1 && failedCardNum > 1){\n contentKey = 'addCard.linkCardByPthree.partialSuccess.way.accounts';\n }\n\n message = getContent(contentKey, { successCardNum,failedCardNum });\n }\n updateFeatures([\n {\n id: 'SPINNER',\n visible: true\n },\n {\n id: 'CHECKOUT_BUTTON',\n data: {\n status: CHECKOUT_BUTTON_STATES.RESOLVED\n },\n },\n {\n id: 'REVIEW_PAGE_ALERT',\n visible: true,\n data: {\n display: true,\n message: message,\n type: 'success',\n },\n }\n ]);\n });\n};\n\nexport { checkP3ReturnStep };","import { getClient, getToken } from '@paypalcorp/c3-shared-globals';\nimport { threeDsExperienceVars } from '@paypalcorp/c3-util-threed-ds';\nimport { isIframe } from '@paypalcorp/c3-util-browser';\nimport { areCookiesDisabled } from '@/lib/cookie';\nimport { CHECKOUT_SESSION_REPLAN_MUTATION } from '@/components/SharedCard/SharedCardWait/Mutation';\n\nexport const checkCardAdd = () => {\n\n const client = getClient();\n const token = getToken();\n return client.mutate({\n mutation: CHECKOUT_SESSION_REPLAN_MUTATION,\n variables: threeDsExperienceVars({\n areCookiesDisabled: areCookiesDisabled(),\n isIframe: isIframe(),\n token,\n })\n });\n\n};\n","import React from 'react';\nimport gql from 'graphql-tag';\nimport { Query } from '@apollo/react-components';\n\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { TRANSACTION_DETAILS } from '@paypalcorp/c3-util-logger';\nimport { getDeviceAndNetworkInfo, isIframe, isPopup } from '@paypalcorp/c3-util-browser';\n\nimport {\n isIncontext,\n isLegacyIncontext,\n isNewIncontext,\n isVzeroIntegration,\n postToMerchantForOldIncontext,\n} from '@/lib/utils';\nimport { isFunction } from '@paypalcorp/c3-util-lang';\nimport { redirectGenericError } from '@/lib/redirects';\nimport { LOG_TRANSITIONS } from '@paypalcorp/c3-util-logger';\nimport get from 'dlv';\nimport { executePreRenderSteps } from '@/lib/preRenderSteps';\nimport { getAccessToken, getGlobals, getToken, updateGlobals } from '@paypalcorp/c3-shared-globals';\nimport { checkFIBalanceStep } from '@/lib/fiBalance';\nimport { checkP3ReturnStep } from '@/lib/linkCardByPthree';\n\nexport const initAppQuery = gql`\n query InitAppQuery($token: String!) {\n checkoutSession(token: $token) {\n cart {\n soldoutUrl\n showSoldoutPage\n cancelUrl {\n href\n }\n amounts {\n total {\n currencyValue\n currencyCode\n currencySymbol\n }\n }\n description\n }\n merchant {\n merchantId\n name\n }\n }\n }\n`;\n\n// To be called before any app logic\nfunction initApp() {\n return Promise.resolve()\n .then(function logIntegration() {\n let formFactor;\n window.logPerformanceNow('TimeToFrameworkEnd'); // The time taken to finish bootstrapping the framework.\n if (isPopup()) {\n formFactor = 'POPUP';\n } else if (isIframe()) {\n formFactor = 'IFRAME';\n } else {\n formFactor = 'FULLPAGE';\n }\n\n const integrationType = isIncontext() ? 'INCONTEXT' : 'FULLPAGE';\n\n logger.cal.info(`integration_type_${integrationType}`, {\n formFactor,\n xprops: Boolean(window.xprops),\n windowName: window.name,\n });\n\n if (isNewIncontext()) {\n logger.cal.info(`new_incontext`);\n } else if (isLegacyIncontext()) {\n logger.cal.info(`old_incontext`);\n }\n })\n .then(function logStart() {\n // This event was originally meant to mark the beginning of\n // client side logs on checkout. We might want updated\n // names for checkoutlite. Keeping logs as CAL for now.\n // Equivalent for :-\n // state_name: 'client_middleware'\n // transition_name: 'process_app_start_design'\n const networkAndDeviceData = getDeviceAndNetworkInfo();\n logger.cal.info('NETWORK_DEVICE_DATA', networkAndDeviceData);\n logger.cal.info('APP_PERFORMANCE_EVENTS', window.appPerformanceEvents);\n })\n .then(function checkFramebust() {\n if (\n isIframe() &&\n !isVzeroIntegration() &&\n !(window.paypal && isFunction(window.paypal.allowIframe) && window.paypal.allowIframe())\n ) {\n logger.cal.info('frame_bust_disallowed_iframe');\n\n try {\n window.top.location = window.location.href;\n } catch (err) {\n logger.cal.error('frame_bust_failed', err);\n redirectGenericError({ code: 'FRAME_BUST_FAILED' });\n }\n\n setTimeout(() => {\n logger.cal.error('frame_bust_did_not_redirect_after_2s');\n redirectGenericError({ code: 'FRAME_BUST_FAILED_REDIRECT' });\n }, 2000);\n }\n })\n .then(function setupAccessToken() {\n if (window.xprops && isFunction(window.xprops.accessToken)) {\n return window.xprops.accessToken().then((newAccessToken) => {\n const globals = getGlobals();\n const { user } = globals;\n\n updateGlobals({\n ...globals,\n user: {\n ...user,\n access_token: newAccessToken,\n },\n });\n logger.cal.info('hermione_using_provided_xprops_access_token', { newAccessToken });\n });\n }\n\n return Promise.resolve();\n })\n .then(function callAccessToken() {\n const accessToken = getAccessToken();\n\n if (window.xprops && isFunction(window.xprops.onAuth)) {\n return accessToken\n ? window.xprops.onAuth({ accessToken })\n : logger.cal.info('hermione_xprops_on_auth_invalid_access_token');\n }\n\n return Promise.resolve();\n })\n .then(executePreRenderSteps)\n .then(checkFIBalanceStep)\n .then(checkP3ReturnStep)\n .catch((err) => {\n logger.cal.error('INCONTEXT_INIT_ERROR', err);\n return;\n });\n}\n\n// Incontext init logic that requires some API data\nfunction initIncontextFromData({ cancelUrl, merchantId, token } = {}) {\n if (window.xprops && isFunction(window.xprops.onInit)) {\n logger.cal.info('INCONTEXT_XPROPS_INIT', {\n token,\n cancelUrl,\n merchantId,\n });\n return window.xprops.onInit({ token, cancelUrl, merchantId });\n }\n\n // TODO: needs to check `secureWindowmsg` from hermesnodeweb\n // https://github.paypal.com/Checkout-R/hermesnodeweb/blob/develop/public/js/lib/miniBrowser.js#L294\n const msg = {\n operation: 'init',\n cancelUrl: cancelUrl,\n landingUrl: window.location && window.location.href,\n };\n\n postToMerchantForOldIncontext(msg);\n\n return Promise.resolve();\n}\n\n// add extra things to pa.js analytics\nfunction attachPaJsFpti({ merchantId, cartTotal } = {}) {\n const { currencyCode, currencyValue } = cartTotal;\n if (window.fpti) {\n window.fpti.mrid = merchantId;\n window.fpti.curr = currencyCode;\n window.fpti.amt = currencyValue;\n }\n}\n\n/**\n * Bootstrap the app. Runs things that only need to be run once, at startup time.\n */\nclass AppBootstrap extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n ready: false,\n };\n }\n\n componentDidMount() {\n initApp().then(() => {\n logger.cal.transition(LOG_TRANSITIONS.BOOTSTRAP);\n this.setState({ ready: true });\n });\n }\n\n render() {\n const token = getToken();\n if (!this.state.ready) {\n return
;\n }\n\n return (\n \n {({ loading, data, error }) => {\n if (!loading && data && !error) {\n const checkoutSession = data.checkoutSession;\n\n const cancelUrl = get(checkoutSession, 'cart.cancelUrl.href');\n const cartTotal = get(checkoutSession, 'cart.amounts.total', {});\n const merchantId = get(checkoutSession, 'merchant.merchantId');\n\n initIncontextFromData({\n token,\n cancelUrl,\n merchantId,\n });\n\n attachPaJsFpti({ merchantId, cartTotal });\n\n logger.fpti('TRANSACTION_DETAILS', TRANSACTION_DETAILS(checkoutSession));\n }\n\n return this.props.children;\n }}\n \n );\n }\n}\n\nexport default AppBootstrap;\n","import React from 'react';\nimport { getClient, getCountry, getToken, getLocale } from '@paypalcorp/c3-shared-globals';\nimport ThreeDS from '@paypalcorp/c3-component-three-ds-two-confirmation';\nimport { AddCard } from '@paypalcorp/c3-add-card';\nimport { RegistryProvider, renderFor } from '@paypalcorp/c3-render-data';\n\nexport const C3Bootstrap = ({ children }) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\nimport { CacheProvider } from '@emotion/core';\nimport createCache from '@emotion/cache';\nimport stylisRTL from 'stylis-plugin-rtl';\nimport { getGlobals, getDirectionality } from '@paypalcorp/c3-shared-globals';\nimport App from './App';\nimport AppBootstrap from './AppBootstrap';\nimport { InterstitialManager } from '@paypalcorp/c3-component-interstitial';\nimport { FormProvider } from '@paypalcorp/c3-form';\nimport { C3Bootstrap } from './C3Bootstrap';\n\nconst { nonce } = getGlobals();\n\nexport const AppIndex = () => {\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\n","import { getClient, getToken } from '@paypalcorp/c3-shared-globals';\nimport gql from 'graphql-tag';\nimport {\n FundingOptionFragment,\n PaymentContingenciesFragment,\n} from '@paypalcorp/c3-graphql-fragments';\nimport { threeDsExperienceVars } from '@paypalcorp/c3-util-threed-ds';\n\nexport const CLEAR_REAL_TIME_BALANCE_CONTINGENCY = gql`\n ${FundingOptionFragment}\n ${PaymentContingenciesFragment}\n mutation clearRealTimeBalanceContingency(\n $bankId: String!\n $experiences: [ThreeDSPaymentExperience]\n $token: String!\n $error: String\n ) {\n clearRealTimeBalanceContingency(token: $token, bankId: $bankId, error: $error) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n paymentContingencies {\n ...PaymentContingenciesFragment\n threeDomainSecure(experiences: $experiences) {\n ...ThreeDomainSecureFields\n }\n }\n }\n }\n`;\n\nexport const checkFIBalance = (bankId, error) => {\n const client = getClient();\n const token = getToken();\n return client.mutate({\n mutation: CLEAR_REAL_TIME_BALANCE_CONTINGENCY,\n variables: threeDsExperienceVars({\n token,\n bankId,\n error,\n }),\n context: { skipFallback: true },\n });\n};\n","import { checkFIBalance } from './checkFIBalance';\nimport { params } from '@paypalcorp/c3-util-browser';\nimport { updateFeature } from '@paypalcorp/c3-util-store';\nimport { CHECKOUT_BUTTON_STATES } from '@/components/CheckoutButton/constants';\nimport { logger } from '@paypalcorp/c3-util-logger';\n\n//Checks the current balance of the Bank account when MoneyNodeweb action is return, id holds the Bank id selected by the user.\n//Once the RealTimeBalance contingency is cleared the CHECKOUT_BUTTON_STATES is set to resolved for completing the transaction\nconst checkFIBalanceStep = () => {\n const { action = '', id = '', error = '' } = params();\n if (action === 'return') {\n logger.cal.info('OPEN_BANKING_MNW_RETURN');\n if (error) {\n logger.cal.info('OPEN_BANKING_MNW_RETURNED_ERROR');\n }\n return checkRealTimeBalance(id, error);\n } else if (action === 'cancel') {\n if (error) {\n logger.cal.info('OPEN_BANKING_MNW_USER_CLOSE_MODAL_ERROR');\n return checkRealTimeBalance(id, error);\n }\n logger.cal.info('OPEN_BANKING_MNW_CANCEL');\n return Promise.resolve();\n }\n};\n\nexport const checkRealTimeBalance = (id, error) => {\n return checkFIBalance(id, error).then(({ data }) => {\n updateFeature('SPINNER', { visible: true });\n const { clearRealTimeBalanceContingency: { fundingOptions = [] } = {} } = data || {};\n const hasFI = fundingOptions.find((fi) => {\n return fi.id === id;\n });\n\n if (hasFI && Object.keys(hasFI).length) {\n const status = error ? CHECKOUT_BUTTON_STATES.INITIAL : CHECKOUT_BUTTON_STATES.RESOLVED;\n updateFeature('CHECKOUT_BUTTON', {\n data: {\n status,\n flow: 'OPEN_BANKING',\n },\n });\n } else {\n updateFeature('SPINNER', { visible: false }).then(\n updateFeature('OPEN_BANKING', {\n data: { blackListedFI: id },\n })\n );\n }\n });\n};\n\nexport { checkFIBalanceStep };\n","import { onError } from 'apollo-link-error';\nimport { ApolloClient } from 'apollo-client';\nimport { RetryLink } from 'apollo-link-retry';\nimport { ApolloLink, split } from 'apollo-link';\nimport { createHttpLink } from 'apollo-link-http';\nimport { BatchHttpLink } from 'apollo-link-batch-http';\nimport { createPersistedQueryLink } from 'apollo-link-persisted-queries';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport get from 'dlv';\nimport { params } from '@paypalcorp/c3-util-browser';\nimport { ERROR_PAYLOAD } from '@paypalcorp/c3-util-logger';\nimport { redirectToLogin, redirectToRiskyLogin } from '@/lib/redirects';\nimport { getGlobals, getCredit, getIsLinkAndPay, setClient } from '@paypalcorp/c3-shared-globals';\nimport { instrumentationLink, loggerLink, spinnerLink, authLink } from '@/lib/apolloLinks';\nimport { defaultApolloCacheState, resolvers, updateContingency } from '@paypalcorp/c3-util-store';\nimport { GLOBAL_CONTINGENCIES_HANDLERS, HANDLED_CONTINGENCIES } from '@/lib/contingencies';\nimport { getEligibilityForAPQ } from '@/lib/utils';\n\nimport { getClientMetadataID } from './fraudNet';\nimport CheckoutError from './checkoutError';\nimport { apolloInMemoryCache } from './apolloCache';\nimport { initFeatures } from '@/features';\n\nconst createClient = ({\n token,\n queryEndpoint,\n auth,\n enableBatching = true,\n enableRetry = false,\n cache,\n mockLink,\n schemaLink,\n}) => {\n initFeatures();\n const globals = getGlobals();\n const { user, experiments } = globals;\n //Flag to determine if the flow is eligible to use APQ for GQL queries\n const isAPQEligible = getEligibilityForAPQ(experiments);\n logger.cal.info(`HERMIONE_GQL_APQ_ELIGIBILITY : ${isAPQEligible}`, { token });\n const { euat } = params();\n let accessToken = user.auth && user.auth.access_token;\n\n if (euat && euat === '1') {\n accessToken = window.location.hash.substr(1);\n }\n\n const headers = {\n 'x-app-name': 'checkoutuinodeweb_hermione',\n 'x-paypal-internal-euat': accessToken,\n 'paypal-client-metadata-id': getClientMetadataID(token),\n };\n\n const httpLink = new createHttpLink({\n uri: queryEndpoint,\n credentials: 'include',\n headers,\n });\n\n const batchLink = new BatchHttpLink({\n uri: queryEndpoint,\n credentials: 'include',\n headers,\n // batchMax: 10, // number of items to batch (default is 10)\n // batchInterval: 10 // ms interval at which to batch (default is 10)\n });\n\n const planningBatchLink = new BatchHttpLink({\n uri: queryEndpoint,\n credentials: 'include',\n headers,\n });\n\n // splitLink allows forking of which link to use based on some parameter. Here\n // we tell Apollo to use batch queries if `planningBatch: true` is present on\n // context. Other queries get passed to the normal batchLink\n const splitLink = split(\n ({ getContext }) => getContext().planningBatch,\n planningBatchLink,\n batchLink\n );\n\n const errorLink = onError(\n ({ operation, graphQLErrors, networkError, response = {}, forward }) => {\n const { operationName, variables, getContext } = operation;\n const { skipFallback = false } = getContext();\n let desc;\n let code;\n\n if (graphQLErrors && graphQLErrors.length) {\n const errorCodes = new Set(graphQLErrors.map(({ message }) => message));\n desc = graphQLErrors[0].statusCode === 200 ? `gqlContingency` : `gqlServiceError`;\n code = Array.from(errorCodes).join('');\n logger.cal.error(`APOLLO_${operationName}_GQLError_${code}`, {\n token,\n });\n\n // Link and pay does not require to handle any contingencies\n if (HANDLED_CONTINGENCIES.includes(code) && !getIsLinkAndPay()) {\n graphQLErrors.forEach(\n ({ contingency: isContingency, message: contingencyCode, errorData = {} } = {}) => {\n // TODO (Jay): ensure only save data once and execute contingency once\n isContingency &&\n updateContingency(\n contingencyCode,\n errorData.resolution || { data: errorData } // 3DS (2.0) contingency data structure is a little bit different than our current standard contingency\n ).then(() => {\n logger.cal.info(`HANDLE_${contingencyCode}_CONTINGENCY`);\n });\n }\n );\n }\n } else if (networkError) {\n const { statusCode } = networkError;\n // Helps to debug unhelpful mocking / mutation errors by showing how a\n // mutation was called. This should be moved somewhere else, like creating\n // a new \"test link\", or by adding more logging options for testing.\n if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {\n console.error(`Error calling ${operationName} with:`, JSON.stringify(variables, null, 2));\n }\n desc = 'gqlNetworkError';\n code = statusCode;\n logger.cal.error(`APOLLO_${operationName}_NetworkError_${statusCode}`, { token });\n } else {\n desc = 'gqlUnknownError';\n code = 'UNKNOWN';\n logger.cal.error(`APOLLO_UNKNOWN_ERROR`, { token });\n }\n\n // Log apollo related error to FPTI\n logger.fpti(\n 'APOLLO_ERROR',\n ERROR_PAYLOAD({\n desc,\n code,\n source: operationName,\n currency_code: get(response.data, 'checkoutSession.cart.amounts.total.currencyCode'),\n })\n );\n\n // 401 is expected for new user\n if (code === 401 && !getCredit().newUser) {\n if (user?.auth?.state === 'PARTIALLY_AUTHENTICATED') {\n redirectToRiskyLogin({\n extraParams: {\n lite: 1,\n fromLite: 1,\n ulClientRedirect: 'insufficientPermission',\n },\n });\n } else {\n redirectToLogin();\n }\n\n return;\n }\n\n // Ensure mutation operations to fallback to Hermes in case of encountering\n // any GraphQL and Network errors\n // On top of the above mutation operations, we also need to ensure global contingency\n // handlings do not trigger any fallbacks (See above `CONTINGENCIES` for the list of global\n // contingency currently Hermione is trying to handle)\n if (GLOBAL_CONTINGENCIES_HANDLERS[code]) {\n logger.cal.info(`APOLLO_${operationName}_CONTINGENCY_GLOBAL_HANDLER`);\n GLOBAL_CONTINGENCIES_HANDLERS[code](graphQLErrors.find((err) => err.message === code));\n return;\n } else if ((HANDLED_CONTINGENCIES.includes(code) && !getIsLinkAndPay()) || skipFallback) {\n logger.cal.info(`APOLLO_${operationName}_SKIP_HERMES_FALLBACK`);\n return;\n }\n\n // Remove when appropriate. See comment for function above\n CheckoutError({\n message: desc,\n error: {\n graphQLErrors,\n networkError,\n },\n });\n }\n );\n\n // RetryLink is only triggered for network errors. Make 4 attempts,\n // otherwise throw an error to trigger the global error handler and\n // fallback to Hermes. If no error is thrown, then the timeout is not\n // handled and UI is broken.\n const retryLink = new RetryLink({\n delay: {\n initial: 1500,\n max: 1500,\n jitter: false, // jitter needs to be set to false in order to retry as a `BATCH`\n },\n attempts: (count, { operationName, getContext }, error) => {\n const { skipRetry = false } = getContext();\n\n if (error && error.statusCode === 401) {\n logger.cal.error(`APOLLO_RETRY_401`, {\n message: error.message,\n });\n return false;\n }\n\n if (error && count < 5 && !skipRetry) {\n logger.cal.error(`APOLLO_RETRY_${operationName}`, {\n message: error.message,\n });\n return true;\n }\n\n logger.cal.error(`APOLLO_RETRY_FAILURE_${operationName}`, {\n message: error.message,\n });\n return false;\n },\n });\n\n // Order is important. Must end with a \"terminating link\", such as httpLink\n // https://www.apollographql.com/docs/link/overview.html#terminating\n const getLinks = () => {\n const apolloLinks = [instrumentationLink, errorLink, spinnerLink()];\n\n if (process.env.NODE_ENV === 'development') {\n apolloLinks.unshift(loggerLink());\n }\n\n if (!schemaLink && !mockLink && enableRetry) {\n apolloLinks.push(retryLink);\n }\n if (schemaLink) {\n apolloLinks.push(schemaLink);\n } else {\n apolloLinks.push(authLink(headers)); // Refresh access token based in global variables\n if (enableBatching) {\n const apqSplitLink = createPersistedQueryLink().concat(splitLink);\n apolloLinks.push(isAPQEligible ? apqSplitLink : splitLink);\n } else {\n const apqHttpLink = createPersistedQueryLink().concat(httpLink);\n apolloLinks.push(isAPQEligible ? apqHttpLink : httpLink);\n }\n }\n return ApolloLink.from(apolloLinks);\n };\n\n logger.cal.info(`AUTH_STATE_${auth.state}`, { token, auth });\n logger.cal.info('APOLLO_CREATE_CLIENT', {\n token,\n uri: queryEndpoint,\n batching: enableBatching,\n retry: enableRetry,\n });\n\n const apolloCache = cache || apolloInMemoryCache();\n\n const apolloClient = new ApolloClient({\n cache: apolloCache,\n link: getLinks(),\n resolvers: resolvers,\n });\n\n apolloCache.writeData({ data: defaultApolloCacheState() });\n\n setClient(apolloClient);\n return apolloClient;\n};\n\nexport default createClient;\n","import { getToken, getCredit } from '@paypalcorp/c3-shared-globals';\nimport { ElmoExperiment } from '@paypalcorp/c3-util-elmo-experiment';\nimport {\n IS_STICKY_ENABLED,\n isEnabledForCountry,\n setFeatures,\n SPINNER_TYPES,\n} from '@paypalcorp/c3-util-store';\n\nexport const initFeatures = () =>\n setFeatures([\n /**\n * NOTE:\n * `NOT_IN_USE` must ALWAYS be first.\n * All new features must be after `NOT_IN_USE`\n */\n {\n id: 'NOT_IN_USE',\n enabled: false,\n experiment: null,\n },\n {\n id: 'PAY_WITH',\n enabled: true,\n visible: true,\n data: {\n continueButtonAction: undefined,\n creditFIOption: undefined,\n forceRadioButton: false,\n preferredFundingOptionId: undefined,\n selectedFundingOptionId: undefined,\n usePayAfterDelivery: false,\n useSplitBalance: false,\n },\n },\n {\n id: 'THREE_DS_FULL_PAGE_RESOLVER', // Currently feature is only for IN due to RuPay fullPage redirect instead of iframe\n enabled: isEnabledForCountry(['IN']),\n visible: true,\n },\n {\n id: 'REWARDS_DISPLAY',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n visible: true,\n data: {\n rewardAmount: undefined,\n rewardCurrency: undefined,\n rewardSelected: undefined,\n },\n },\n {\n id: 'REWARDS_INTERSTITIAL',\n enabled: true,\n visible: false,\n },\n {\n id: 'INSTALLMENTS_DISPLAY',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n visible: true,\n },\n {\n id: 'SELECT_INSTALLMENTS_INTERSTITIAL',\n enabled: true,\n visible: false,\n },\n {\n id: 'ECONSENT',\n enabled: isEnabledForCountry(['US']),\n },\n {\n id: 'ADD_FI',\n enabled: true,\n visible: false,\n experiment: ElmoExperiment.initWithDefaultTreatment(ElmoExperiment.TREATMENTS.TREATMENT_1),\n data: {\n updateCardNotification: false,\n fi: undefined,\n },\n },\n {\n id: 'ADD_CARD',\n enabled: true,\n visible: true,\n data: {\n address: undefined,\n card: undefined,\n token: getToken(),\n user: undefined,\n },\n },\n {\n id: 'ADD_BANK',\n enabled: true,\n visible: true,\n data: {},\n },\n {\n id: 'ADD_BANK_DISCLAIMER',\n enabled: true,\n visible: true,\n },\n {\n id: 'ADD_CARD_ONLY',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(ElmoExperiment.TREATMENTS.TREATMENT_1),\n },\n {\n id: 'ADD_BANK_OR_CARD',\n enabled: isEnabledForCountry(['DE']),\n visible: true,\n },\n {\n id: 'CREDIT_CARD_FORM',\n enabled: true,\n visible: true,\n },\n {\n id: 'ADD_FI_LINK',\n enabled: true,\n visible: true,\n },\n {\n id: 'THREE_DS_CONFIRMATION', // 3DS (1.0) flow\n enabled: true,\n },\n {\n id: 'THREE_DS_TWO_CONFIRMATION', // 3DS (2.0) flow\n enabled: true,\n },\n {\n id: 'ADD_SHIPPING_LINK',\n enabled: true,\n visible: true,\n },\n {\n id: 'ADD_SHIPPING',\n enabled: true,\n },\n {\n id: 'SELECT_SHIPPING',\n enabled: true,\n visible: false,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'CART',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(ElmoExperiment.TREATMENTS.TREATMENT_1),\n },\n {\n id: 'CART_DROPDOWN',\n enabled: true,\n },\n {\n id: 'PERSONALIZED_BANNER',\n enabled: true,\n visible: true,\n },\n {\n id: 'FI_ATTRIBUTION',\n enabled: true,\n visible: true,\n },\n {\n id: 'HEADER',\n enabled: true,\n visible: true,\n },\n {\n id: 'MERCHANT_LOGO',\n enabled: true,\n visible: true,\n },\n {\n id: 'DONATION_PAYPAL_CONFIRMED_CHARITY',\n enabled: isEnabledForCountry(['US']),\n visible: true,\n },\n {\n id: 'PAGE_ALERT',\n enabled: true,\n data: {\n display: false, // ? not sure why we have this when it already has `visible`\n message: undefined,\n type: 'info',\n },\n },\n {\n id: 'REVIEW_PAGE_ALERT',\n enabled: true,\n visible: true,\n data: {\n display: false, // ? not sure why we have this when it already has `visible`\n message: undefined,\n type: 'info',\n },\n },\n {\n id: 'SPINNER',\n enabled: true,\n visible: getCredit().isCreditSecondButton,\n data: { type: SPINNER_TYPES.DEFAULT },\n },\n {\n id: 'RETURN_TO_MERCHANT_SPINNER',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(ElmoExperiment.TREATMENTS.TREATMENT_1),\n },\n {\n id: 'CHECKOUT_BUTTON',\n enabled: true,\n visible: true,\n data: {\n status: 'INITIAL',\n checkoutButtonLabelOverride: undefined,\n validShippingMethod: true,\n inContingencyFlow: false,\n flow: undefined,\n },\n },\n {\n id: 'CHECKOUT_BUTTON_CONTAINER',\n enabled: true,\n visible: true,\n },\n {\n id: 'DECLINE_NOTIFICATION',\n enabled: true,\n visible: true,\n },\n {\n id: 'DECLINE_NOTIFICATION_NEW',\n enabled: true,\n visible: true,\n },\n {\n id: 'OPEN_BANKING_NOTIFICATION',\n enabled: true,\n visible: true,\n },\n {\n id: 'PTHREE_NOTIFICATION',\n enabled: true,\n visible: true,\n },\n {\n id: 'DISCLAIMER',\n enabled: true,\n visible: true,\n data: { showDescriptor: false },\n },\n {\n id: 'DISCLAIMER_AU',\n enabled: isEnabledForCountry(['AU']),\n visible: true,\n },\n {\n id: 'DISCLAIMER_CPA',\n enabled: true,\n visible: true,\n },\n {\n id: 'CIP_DISCLAIMER', // CIP: Customer Identification Program for AU\n enabled: isEnabledForCountry(['AU']),\n visible: true,\n },\n {\n id: 'APAC_DISCLAIMER', // Legal disclaimer for APAC countries\n enabled: isEnabledForCountry([\n 'BN',\n 'BT',\n 'FJ',\n 'FM',\n 'ID',\n 'JP',\n 'KH',\n 'KI',\n 'KR',\n 'LA',\n 'LK',\n 'HK',\n 'MH',\n 'MN',\n 'MV',\n 'MY',\n 'NF',\n 'NP',\n 'NR',\n 'NU',\n 'NZ',\n 'PG',\n 'PH',\n 'PN',\n 'PW',\n 'SB',\n 'SG',\n 'TO',\n 'TV',\n 'TH',\n 'VN',\n 'VU',\n 'WS',\n ]),\n visible: true,\n },\n {\n id: 'DISCLAIMER_CPA_ABOVE_CONTINUE',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'BILLING_ADDRESS_CONSENT_DISCLAIMER',\n enabled: true,\n visible: true,\n },\n {\n id: 'FOOTER',\n enabled: true,\n visible: true,\n },\n {\n id: 'CREDIT_OFFER',\n enabled: isEnabledForCountry(['US', 'GB']),\n visible: true,\n data: { creditOfferLabel: undefined },\n },\n {\n id: 'CREDIT_OFFER_AS_FI_DE',\n enabled: isEnabledForCountry(['DE']),\n visible: true,\n data: {\n continueButtonText: undefined,\n creditOfferLabel: undefined,\n presentmentType: undefined,\n },\n },\n {\n id: 'CREDIT_OFFER_AS_FI',\n enabled: isEnabledForCountry(['FR', 'MQ', 'GP', 'GF', 'RE', 'GB', 'US']), // MQ, GP, GF, and RE are the territories in FR\n visible: true,\n },\n {\n id: 'CREDIT_CROSS_CURRENCY_INFO',\n enabled: isEnabledForCountry(['FR', 'MQ', 'GP', 'GF', 'RE', 'GB', 'US', 'AU', 'DE']), // MQ, GP, GF, and RE are the territories in FR\n visible: true,\n },\n {\n id: 'REPRESENTATIVE_EXAMPLE',\n enabled: isEnabledForCountry(['DE']),\n },\n {\n id: 'REPRESENTATIVE_EXAMPLE_ICON',\n enabled: isEnabledForCountry(['DE']),\n visible: true,\n },\n {\n id: 'CREDIT_CROSS_CURRENCY_INFO_BANNER',\n enabled: isEnabledForCountry(['GB']),\n visible: true,\n },\n {\n id: 'SHIP_TO',\n enabled: true,\n visible: true,\n data: {\n isChangeShippingLinkClicked: false,\n userSelectedAddressId: undefined,\n toggle: false,\n },\n },\n {\n id: 'DONATION_SHARE_ADDRESS',\n enabled: true,\n visible: true,\n data: {\n shareAddressWithDonatee: false,\n },\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'SHOW_MORE_FUNDING_OPTIONS',\n enabled: !IS_STICKY_ENABLED,\n visible: true,\n },\n\n {\n id: 'SPLIT_BALANCE',\n enabled: true,\n visible: true,\n data: {\n selected: true,\n },\n },\n {\n id: 'SHARED_CARD_CONSENT_PAGE',\n enabled: true,\n },\n {\n id: 'SHARED_CARD_CONSENT_WAIT_PAGE',\n enabled: true,\n },\n {\n id: 'ADD_NORMALIZED_ADDRESS',\n enabled: isEnabledForCountry(['AU', 'BR']),\n data: {\n normalizedAddress: undefined,\n originalAddress: undefined,\n },\n },\n {\n id: 'CURRENCY_CONVERSION',\n enabled: true,\n },\n {\n id: 'CURRENCY_CONVERSION_OPTION',\n enabled: true,\n visible: true,\n },\n {\n id: 'CURRENCY_CONVERSION_LINK',\n enabled: true,\n visible: true,\n },\n {\n id: 'AUTH_SETTLE_COMPLIANCE_CONTENT',\n enabled: true,\n visible: true, // TODO: turn to `false` to save some bundle size :)\n },\n {\n id: 'CURRENCY_CONVERSION_CONTENT_BR',\n enabled: isEnabledForCountry(['BR']),\n visible: true,\n },\n {\n id: 'CURRENCY_CONVERSION_SHEET',\n enabled: true,\n },\n {\n id: 'CVV_CONFIRMATION',\n enabled: true,\n },\n {\n id: 'DISCLAIMER_IN',\n enabled: isEnabledForCountry(['IN']),\n visible: true, // TODO: turn it `false` to save some bundle size :)\n },\n {\n id: 'CREDIT_EXAMPLE_TEXT',\n enabled: isEnabledForCountry(['GB']),\n visible: true,\n },\n {\n id: 'CREDIT_FI_LABEL',\n enabled: true,\n visible: true,\n },\n {\n id: 'PAY_AFTER_DELIVERY',\n enabled: true,\n visible: true,\n },\n {\n id: 'PAY_AFTER_DELIVERY_FI_SUBTEXT',\n enabled: true,\n visible: true,\n },\n {\n id: 'POLICY_AGREEMENT',\n enabled: isEnabledForCountry(['JP']),\n visible: true,\n },\n {\n id: 'INCENTIVES',\n enabled: true,\n visible: true,\n },\n {\n id: 'GIVE_AT_CHECKOUT',\n enabled: isEnabledForCountry(['US', 'GB', 'CA', 'AU', 'IE', 'DE', 'IT', 'FR']),\n visible: true,\n data: {\n giveAtCheckoutOpted: false,\n giveAtCheckoutNonProfitId: undefined,\n },\n },\n {\n id: 'DOLPHIN_BANNER',\n enabled: true,\n visible: true,\n },\n {\n id: 'DOLPHIN_INTERSTITIAL',\n enabled: true,\n },\n {\n id: 'SELECT_FI',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n data: { landingPage: undefined },\n },\n {\n id: 'SELECT_FI_LINK',\n enabled: true,\n visible: true,\n },\n {\n id: 'SELECT_FI_ADD_FI_LINK',\n enabled: true,\n visible: true,\n },\n {\n id: 'SELECT_CREDIT_CARD_TYPE',\n enabled: true,\n visible: true,\n },\n {\n id: 'SELECT_COMBO_CARD_TYPE',\n enabled: isEnabledForCountry(['BR']),\n visible: true,\n data: { treatments: [] },\n },\n {\n id: 'SUPPORTED_FUNDING_SOURCE_ICONS',\n enabled: !isEnabledForCountry(['FR', 'IT', 'ES']),\n visible: true,\n },\n {\n id: 'SUPPORTED_FUNDING_SOURCE_ICONS_BR',\n enabled: isEnabledForCountry(['BR']),\n visible: true,\n },\n {\n id: 'DATE_OF_BIRTH',\n enabled: true,\n visible: true,\n },\n {\n id: 'LINK_AND_PAY',\n enabled: true,\n visible: true,\n data: { selectedFundingOptionId: undefined },\n },\n {\n id: 'LINK_AND_PAY_INCENTIVE',\n enabled: true,\n visible: true,\n },\n {\n id: 'LINK_AND_PAY_DISCLAIMER',\n enabled: true,\n visible: true,\n },\n {\n id: 'CREDIT_APPLY_PORTABLE',\n enabled: true,\n data: {\n isCapOpen: false,\n selectedCRCOfferID: undefined,\n selectedFinancingCode: undefined,\n },\n },\n {\n id: 'CREDIT_SINGLE_FI_DISPLAY',\n enabled: true,\n data: { isGPLFi: false },\n },\n {\n id: 'CANCEL_LINK',\n enabled: true,\n visible: true,\n },\n {\n id: 'SEPA_CONFIRMATION',\n enabled: true,\n data: { bankData: undefined },\n },\n {\n id: 'FI_PAYER_DISCLAIMER',\n enabled: true,\n visible: true,\n },\n {\n id: 'OPEN_BANKING',\n enabled: true,\n visible: false,\n data: {\n blackListedFI: undefined,\n hideDeclineNotification: false,\n },\n experiment: ElmoExperiment.initWithDefaultTreatment(ElmoExperiment.TREATMENTS.TREATMENT_1),\n },\n {\n id: 'BACKUP_FUNDING_DISCLAIMER',\n enabled: true,\n visible: true,\n },\n {\n id: 'BACKUP_FI',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(ElmoExperiment.TREATMENTS.TREATMENT_1),\n },\n {\n id: 'BILLING_AGREEMENT',\n enabled: true,\n // experiment: ElmoExperiment.initWithDefaultTreatment(ElmoExperiment.TREATMENTS.CONTROL),\n visible: true,\n },\n {\n id: 'BANK_AS_DEBIT',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n data: {\n addBankAsDebit: false,\n p3Enabled: false,\n },\n },\n {\n id: 'BANK_AS_DEBIT_DISALLOWED',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'REMOVE_RETRY_BUTTON',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PPC_INSTALLMENTS',\n enabled: isEnabledForCountry(['US', 'GB', 'DE']),\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PPC_INSTALLMENTS_HIDE_INCENTIVES',\n enabled: isEnabledForCountry(['US', 'GB', 'DE']),\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PPC_SECOND_BUTTON',\n enabled: isEnabledForCountry(['US', 'GB']),\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PPC_MULTIPRODUCT_ORDER',\n enabled: isEnabledForCountry(['US']),\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PPC_EZP_BNPL_RYI',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'BANK_AS_DEBIT_DISALLOWED',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'ADD_FI_CHOICE_LIST',\n enabled: true,\n visible: true,\n },\n {\n id: 'SPLIT_TENDER_GATE',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n data: {\n isSplitReady: false,\n userCanSplit: false,\n showSplitContinue: false,\n showSplitExperience: false,\n },\n },\n {\n id: 'PAY_WITH_SPLIT_TENDER',\n enabled: true,\n visible: true,\n },\n {\n id: 'ADD_POTENTIAL_CARD',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'OTP_CONFIRMATION',\n enabled: true,\n data: {\n isNewCard: false,\n fundingInstrumentId: null,\n phone: {\n number: null,\n countryCode: null,\n },\n },\n },\n {\n id: 'SPLIT_TENDER_BACKUP',\n enabled: true,\n visible: false,\n },\n {\n id: 'SPLIT_TENDER_PAY_WITH',\n enabled: true,\n visible: false,\n },\n {\n id: 'REDIRECT_TO_CREDIT',\n enabled: true,\n visible: true,\n data: {\n eConsentTriggerRefresh: false,\n },\n },\n {\n id: 'RETURN_FROM_CREDIT',\n enabled: true,\n visible: true,\n },\n {\n id: 'PAY_LATER',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PPC_REDIRECT',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PAYMENT_OPTIONS',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'TABBED_PAYMENT_OPTIONS',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'UPSTREAM_PRESENTMENT',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'UPSTREAM_TABS',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PAYLATER_BUTTON_TABS',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'BNPL_STACKED_BUBBLE',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'BNPL_TABBED_BUBBLE',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'CAP_AUTO_OPEN',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'RESTRICTED_ACCOUNT',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'CBT_DECLINE_NOTIFICATION',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'WPS_DONE_PAGE',\n enabled: true,\n visible: false,\n },\n {\n id: 'SHIP_TAX_INTERSTITIAL',\n enabled: true,\n visible: false,\n },\n {\n id: 'REVIEW_BEFORE_LOGIN',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'TRUSTED_BENEFICIARY_OPT_IN',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'CRYPTO_TERMS',\n enabled: true,\n visible: false,\n data: {\n acknowledged: false,\n fundingInstrumentIdToSelect: '',\n },\n },\n {\n id: 'PAY_LATER_LEARN_MORE',\n enabled: true,\n visible: false,\n data: {\n offer: null,\n },\n },\n {\n id: 'INVENTORY_SOLD_OUT',\n enabled: true,\n visible: false,\n data: {\n soldOutUrl: undefined,\n },\n },\n {\n id: 'REMITTANCE_DISCLOSURE',\n enabled: isEnabledForCountry(['US']),\n visible: true,\n },\n {\n id: 'GPL_CAP_SERVER_MIGRATION',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'LINK_CARD_BY_PTHREE',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n data: {\n pthreeFailureReason: undefined,\n },\n },\n {\n id: 'CURRENCY_CONVERSION_FEE_DISCLOSURE',\n enabled: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(ElmoExperiment.TREATMENTS.TREATMENT_1),\n },\n {\n id: 'LANGUAGE_TOGGLE',\n enabled: isEnabledForCountry(['US']),\n },\n {\n id: 'GOLD_PSB_MSB_TITLE',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'CN_PAYCODE',\n enabled: true,\n visible: true,\n data: {paycode: {}, hasError: false, encoded: '', publicKey: ''}\n },\n {\n id: 'BA_SIMPLIFIED_CONTENT',\n enabled: true,\n visible: true,\n experiment: ElmoExperiment.initWithDefaultTreatment(),\n },\n {\n id: 'PAY_IN_1',\n // This should never be committed as `true`. For the Pi30 track, we expect\n // an ELMO to be available sometime in sprint 216 that will update or\n // replace this flag.\n enabled: false,\n },\n ]);\n","import Feature from '@/components/Feature';\nimport { CPA_DISCLAIMER_QUERY } from '@/components/Disclaimer/CPADisclaimer/query.gql';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\n\nconst ReturnToMerchantSpinner = Feature({\n id: 'RETURN_TO_MERCHANT_SPINNER',\n queries: [\n { query: CPA_DISCLAIMER_QUERY, variables: { token: getToken() }, fetchPolicy: 'cache-only' },\n ],\n})({\n experiments: {\n TREATMENT_1: () => import('./ReturnToMerchantSpinnerControl'),\n TREATMENT_2: () => import('./ReturnToMerchantSpinnerPreAuthCard'),\n TREATMENT_3: () => import('./ReturnToMerchantSpinnerCompletePayment'),\n },\n});\n\nexport default ReturnToMerchantSpinner;\n","import React from 'react';\n// something with the exports from @/store/index causes Feature to be undefined. Guessing\n// there are multiple methods exporting the same name and jest gives really bad errors.\nimport { updateFeature } from '@paypalcorp/c3-util-store';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport AnimatedContainer from './AnimatedContainer';\nimport { lazyComponent } from '@/lib/lazyLoad';\n\nconst LazyInterstitialContainer = lazyComponent(\n () => import('@paypalcorp/c3-component-interstitial'),\n {\n id: 'INTERSTITIAL',\n loading: () => ,\n }\n);\n\n/**\n * Container which wraps every feature and decides:\n * - how feature will be rendered (animated / interstitial / inline / hidden )\n * - manages auto showing / hiding feature\n * - logs experiment data\n */\nexport class FeatureContainer extends React.Component {\n // helper to call a function when prop's boolean value is changed\n callOnPropChange = (prevProps, prop, f) => {\n const propValue = this.props[prop];\n\n if (!prevProps[prop] && propValue) {\n return f(true);\n } else if (prevProps[prop] && !propValue) {\n return f(false);\n }\n return {};\n };\n\n // check if feature needs to be disabled or enabled dynamically\n setEnablement() {\n const {\n data: {\n feature: { experiment },\n },\n id,\n isGqlDataResolved,\n } = this.props;\n\n // wait until gql data is resolved before turning off the feature to get eligibility being logged\n if (isGqlDataResolved && experiment && experiment.isControl()) {\n logger.cal.info(`FEATURE_${id}_DISABLED_DUE_ELMO_CONTROL`);\n\n return {\n enabled: false,\n };\n }\n return {};\n }\n\n // toggle \"visible\" prop of the feature\n onAutoDisplayChange = (value) => {\n const { id } = this.props;\n\n logger.cal.info(`FEATURE_${id}_AUTO_VISIBILITY_${value}`);\n\n return {\n visible: value,\n };\n };\n\n // do things based on \"shouldLoadFeature\" prop\n onShouldLoadFeatureChange = (value) => {\n const {\n data: {\n feature: { experiment, eligible },\n },\n id,\n isGqlDataResolved,\n } = this.props;\n\n // until gql data is resolved we should not touch things\n if (!isGqlDataResolved) {\n return {};\n }\n\n if (experiment) {\n experiment.logExperiment({\n logger: logger.fpti,\n featureId: id,\n eligibility: value,\n });\n }\n\n if (value !== eligible) {\n return { eligible: value };\n }\n\n return {};\n };\n\n componentDidMount() {\n const { shouldLoadFeature, autoDisplay, id } = this.props;\n const shouldLoadFeaturePayload = this.onShouldLoadFeatureChange(shouldLoadFeature);\n\n let autoDisplayPayload = {};\n\n if (autoDisplay) {\n autoDisplayPayload = this.onAutoDisplayChange(autoDisplay);\n }\n const setEnablementPayload = this.setEnablement();\n\n const payload = {\n ...autoDisplayPayload,\n ...shouldLoadFeaturePayload,\n ...setEnablementPayload,\n };\n\n if (Object.keys(payload).length !== 0) updateFeature(id, payload);\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n const { shouldLoadFeature, isGqlDataResolved, id } = this.props;\n\n let shouldLoadFeaturePayload = {};\n\n const autoDisplayPayload = this.callOnPropChange(\n prevProps,\n 'autoDisplay',\n this.onAutoDisplayChange\n );\n\n if (!prevProps.isGqlDataResolved && isGqlDataResolved) {\n shouldLoadFeaturePayload = this.onShouldLoadFeatureChange(shouldLoadFeature);\n } else {\n shouldLoadFeaturePayload = this.callOnPropChange(\n prevProps,\n 'shouldLoadFeature',\n this.onShouldLoadFeatureChange\n );\n }\n const setEnablementPayload = this.setEnablement();\n\n const payload = {\n ...autoDisplayPayload,\n ...shouldLoadFeaturePayload,\n ...setEnablementPayload,\n };\n\n if (Object.keys(payload).length !== 0) {\n updateFeature(id, payload);\n }\n }\n\n renderWrappedComponent() {\n const { data, loading, FeatureComponent, shouldKeepLoadingStateOnError, hasError } = this.props;\n\n return (\n \n );\n }\n\n renderInterstitial() {\n let { id, interstitialOptions = {} } = this.props;\n\n return (\n \n {this.renderWrappedComponent(true)}\n \n );\n }\n\n renderWithAnimateHeight() {\n let {\n id,\n data: { feature },\n shouldLoadFeature = true,\n animateOptions: { animateOpacity, animateContainerClass },\n } = this.props;\n\n return (\n \n {this.renderWrappedComponent()}\n \n );\n }\n\n render() {\n let {\n data: {\n feature: { experiment, visible },\n },\n interstitial,\n animateOptions: { animateHeight },\n shouldLoadFeature = true,\n shouldLoadInstance,\n } = this.props;\n\n // render empty fragment if feature in the control experiment\n if (!shouldLoadInstance || (experiment && experiment.isControl())) {\n return ;\n }\n\n if (interstitial) {\n return shouldLoadFeature && visible && this.renderInterstitial();\n }\n\n if (animateHeight) {\n return this.renderWithAnimateHeight();\n }\n\n return shouldLoadFeature && visible && this.renderWrappedComponent();\n }\n}\n","import React, { useState, useEffect } from 'react';\nimport AnimateHeight from 'react-animate-height';\nimport { isTesting } from '@paypalcorp/c3-shared-globals';\n\nconst AnimatedContainer = ({ visible, children, ...attributes }) => {\n let [shouldRender, setRender] = useState(visible);\n\n useEffect(() => {\n if (visible) {\n setRender(visible);\n }\n }, [visible, setRender]);\n\n return (\n {\n if (!visible) {\n setRender(false);\n }\n }}\n >\n {visible || shouldRender ? children : }\n \n );\n};\n\nexport default AnimatedContainer;\n","import { logger } from '@paypalcorp/c3-util-logger';\nimport { isNewIncontext, isLegacyIncontext, isVzeroIntegration } from '@/lib/utils';\nimport { isIframe, isPopup, isWebView, params } from '@paypalcorp/c3-util-browser';\nimport { getIsUserSkipFacebookLogin } from '@/authStates';\n\n/**\n * Eligibility check for things that cannot be checked on the server-side (ie. window properties)\n * This should not be dependent on any GQL queries, so we can fallback immediately and not worry about\n * having simultaneous requests touching the checkout session.\n *\n * Checks for:\n * 1. legacy in-context integrations\n * 2. iframes\n */\nexport default function windowEligible() {\n let eligibleForHermione = false;\n let reason;\n\n const incontextUnsupportedMessenger =\n window.xprops && window.xprops.experience && window.xprops.experience.messenger;\n\n // Note that this is only part of the check for partner integration - there's some API data in xo-landing-router not being checked here that determines if this is a partner integration or not\n const isPartnerIntegration = isVzeroIntegration();\n // Handling for PPC application return flow is not handled - see https://github.paypal.com/Checkout-R/checkoutuinodeweb/issues/620\n const isCreditApplyReturnFlow = params().success && params().key;\n const isSkipFacebookLoginFlow = getIsUserSkipFacebookLogin();\n\n if (incontextUnsupportedMessenger) {\n reason = 'incontext_unsupported_fb_messenger';\n eligibleForHermione = false;\n } else if (isPartnerIntegration) {\n // Partner integration needs some extra handling - https://github.paypal.com/Checkout-R/checkoutuinodeweb/issues/525\n logger.cal.info('PARTNER_VZERO_INTEGRATION', {\n isIframe: isIframe(),\n isPopup: isPopup(),\n isNewContext: isNewIncontext(),\n isLegacyContext: isLegacyIncontext(),\n nolegacy: params().nolegacy === '1',\n ppFrameRedirect: window.name === 'PPFrameRedirect',\n windowName: window.name,\n btQueryParams: params().bt_int_type,\n });\n\n eligibleForHermione = true;\n reason = `supported_vzero_integration${\n isIframe() ? '_iframe' : isPopup() ? '_popup' : '_fullpage'\n }`;\n } else if (isSkipFacebookLoginFlow) {\n logger.cal.info('SKIP_FACEBOOK_LOGIN', {\n isNewContext: isNewIncontext(),\n isLegacyContext: isLegacyIncontext(),\n webview: isWebView(navigator && navigator.userAgent),\n userAgent: navigator && navigator.userAgent,\n });\n eligibleForHermione = true;\n reason = 'supported_skip_facebook_login';\n } else if (isCreditApplyReturnFlow) {\n reason = 'ppc_apply_flow';\n eligibleForHermione = true;\n } else {\n eligibleForHermione = true;\n reason = 'supported_features';\n }\n\n const eligibility_reason = `xolite_window_${\n eligibleForHermione ? 'eligible' : 'ineligible'\n }_${reason}`;\n logger.cal.info(`${eligibility_reason}`);\n\n return {\n windowEligibility: eligibleForHermione,\n reason,\n };\n}\n","import { hot } from 'react-hot-loader/root';\nimport React from 'react';\nimport { getIsResolveThreeDS, getIsLinkAndPay } from '@paypalcorp/c3-shared-globals';\nimport { lazyComponent } from '@/lib/lazyLoad';\n\nimport './App.global.css';\n\nconst Hermione = lazyComponent(() => import('./experiences/Hermione'), {\n id: 'HERMIONE',\n loading: () => <>,\n});\n\nconst ThreeDSFullPageApp = lazyComponent(() => import('./experiences/ThreeDSFullPage'), {\n id: 'THREE_DS_FLL_PAGE',\n loading: () => <>,\n});\n\nconst LinkPayApp = lazyComponent(() => import('./experiences/LinkPay'), {\n id: 'LINK_PAY_APP',\n loading: () => <>,\n});\n\nconst ResolveApp = () => {\n if (getIsResolveThreeDS()) {\n return ;\n } else if (getIsLinkAndPay()) {\n return ;\n }\n return ;\n};\n\nexport default hot(ResolveApp);\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"loading\":\"Loading_loading_1bzOW\"};","import React from 'react';\n\n/**\n * in prod don't use React's ErrorBoundary, here is why:\n *\n * 1. Stack traces are not optimal, there is no file provided where the error occured\n * which means we can't use source maps to parse stack traces in CAL\n * 2. Error boundaries do not catch all errors (e.g errors in event handlers, in asynchronous code)\n * 3. Since we have already window.onerror functionality (in index.html) to catch any unhandled errors - Errorboundary becomes a second\n * place where some errors can be caught, but not all errors. Basically it becomes confusing when we have 2 places to catch unhandled errors and\n * 2 places where we do fallbacks for such errors.\n * 4. Error boundaries are good to catch errors anywhere in child component tree, log those errors, and display a fallback UI, which we don't so\n * simply because we need to fallback.\n * 5. ErrorBoundaries in prod works differently vs in dev. In prod window.onerror will be skipped, in dev it won't be skipped.\n *\n */\nlet ErrorBoundary = (props) => {\n return props.children;\n};\n\nif (process.env.NODE_ENV === 'development') {\n const { DevErrorBoundary } = require('./DevErrorBoundary');\n\n ErrorBoundary = (props) => {\n return ;\n };\n}\n\nexport default ErrorBoundary;\n","import ErrorBoundary from './ErrorBoundary';\nexport default ErrorBoundary;\n","// PUBLIC_URL is defined in Webpack scope, uses `getPublicUrl` for build contexts\n// eslint-disable-next-line no-undef\n__webpack_public_path__ = window.__webpack_public_path__ || process.env.PUBLIC_URL;\n/* eslint-disable import/first */\nimport 'regenerator-runtime';\n// Using inidividual polyfills as required results in a much smaller bundle\nimport 'whatwg-fetch';\nimport 'core-js/features/promise';\n\n// needed for Apollo Client\nimport 'core-js/features/map';\nimport 'core-js/features/set';\nimport 'core-js/features/weak-map';\n\n// Array polyfills\nimport 'core-js/features/array/find';\nimport 'core-js/features/array/some';\nimport 'core-js/features/array/includes';\n\n// symbol is needed for addCard FR\nimport 'core-js/es/symbol';\n\n// needed for IE 10 and older browsers\nimport 'core-js/features/array/from';\n\n// Object polyfills\nimport 'core-js/features/object/assign';\nimport 'core-js/features/object/values';\nimport 'core-js/features/object/entries';\n\n// String polyfills\nimport 'core-js/features/string/includes';\n/* eslint-enable */\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\nif (!Element.prototype.matches) {\n Element.prototype.matches =\n Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\n\nif (!Element.prototype.closest) {\n Element.prototype.closest = function (s) {\n var el = this;\n if (!document.documentElement.contains(el)) return null;\n do {\n if (el.matches(s)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n}\n\n// Since IE10 doesn't support neither \"Object.setPrototypeOf\" nor \"__proto__\"\n// we need to monkey patch tslib which is used in Apollo client for extending zen-observable\n// by copying static class methods which are getting missed\nif (!(Object.setPrototypeOf || {}.__proto__)) {\n var tslib = require('tslib');\n var hoistNonReactStatics = require('hoist-non-react-statics');\n var __extends = tslib.__extends;\n tslib.__extends = function (target, source) {\n // Invoke the original method\n __extends.apply(this, [target, source]);\n hoistNonReactStatics(target, source);\n };\n}\n\n// Number.isNaN polyfill (not supported in all IE)\nNumber.isNaN =\n Number.isNaN ||\n function (value) {\n return value !== value;\n };\n","import './preInit';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { ApolloProvider } from '@apollo/react-components';\nimport { init as initContent } from 'pp-react-l10n';\nimport ErrorBoundary from '@/components/ErrorBoundary';\nimport { LOG_TRANSITIONS, logger } from '@paypalcorp/c3-util-logger';\nimport { params } from '@paypalcorp/c3-util-browser';\nimport { getGlobals, getIsMockedMode, initGlobals } from '@paypalcorp/c3-shared-globals';\nimport { isIncontext } from '@/lib/utils';\nimport CheckoutError from '@/lib/checkoutError';\nimport windowEligible from '@/lib/windowEligibility';\nimport configureApolloClient from '@/lib/configureApolloClient';\nimport { getClientMetadataID, initFraudNet } from '@/lib/fraudNet';\nimport { AppIndex } from './AppIndex';\n\n__webpack_nonce__ = getGlobals().nonce; // eslint-disable-line\n\nconst MockedMode = React.lazy(() => import('./MockedMode'));\n\nlogger.cal.transition(LOG_TRANSITIONS.INIT);\n\nconst initialData = initGlobals();\nconst { user = {}, uri, content, deployEnv = {} } = initialData;\n// eslint-disable-next-line i18n-scan/no-country-dependency\nconst integrationType = user.ecToken && /^EC-[\\w]+/.test(user.ecToken) ? 'EC' : 'WPS';\n\nif (params().euat === '1') {\n user.auth.access_token = window.location.hash.substr(1);\n}\n\ninitContent({ content });\n\nif (!user.ecToken) {\n CheckoutError({ message: 'ec_token_is_missing' });\n}\n\n// get common FPTI keys\nconst commonKeys = {};\n\n// Initialize CAL and FPTI Logger\nlogger.init(\n {\n token: user.ecToken,\n loggerEndpoint: uri.loggerEndpoint,\n incontext: isIncontext(),\n externalName: 'checkoutuinodeweb',\n internalName: 'HERMIONE',\n experienceName: 'checkoutlite',\n context_type: `${integrationType}-token`,\n common: commonKeys,\n },\n {},\n {\n common: {\n integration_type: integrationType,\n context_type: `${integrationType}-token`,\n 'x-paypal-fpti': {\n context_type: `${integrationType}-token`,\n },\n },\n }\n);\n\n// initialize apollo client\nconst client = configureApolloClient({\n queryEndpoint: uri.queryEndpoint,\n token: user.ecToken,\n auth: user.auth || {},\n enableRetry: true,\n});\n\ninitFraudNet({\n token: getClientMetadataID(user.ecToken),\n fraudNetEndpoint: uri.fraudNetEndpoint,\n deployEnv,\n});\nconst MockedModeLoader = () =>
Loading Use cases viewer...
;\n\nconst render = (Application) => {\n ReactDOM.render(\n \n \n {!getIsMockedMode() ? (\n \n ) : (\n }>\n \n \n )}\n \n ,\n document.getElementById('root')\n );\n};\n\nfunction startApp() {\n const { windowEligibility, reason = 'unknown' } = windowEligible();\n if (!windowEligibility) {\n CheckoutError({ message: `window_ineligible_${reason}` });\n // Don't render the app, as it can potentially cause problems if we start setting up the checkout session here and on Hermes\n return;\n }\n\n if (process.env.NODE_ENV === 'development') {\n // initialize react-axe a11y auditing\n // https://github.com/dequelabs/react-axe\n // it slows UI drastically\n if (params().enableAllyChecks) {\n const axe = require('react-axe');\n setTimeout(() => axe(React, ReactDOM, 1000), 10000);\n }\n }\n\n render(AppIndex);\n}\n\nstartApp();\n","import { settings } from 'emeth';\nsettings.debug = false;\nsettings.warn = () => {};\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"font-family\":\"'PayPalSansBig-Regular', Helvetica Neue, HelveticaNeue, helvetica, arial, sans-serif\",\"fontFamily\":\"'PayPalSansBig-Regular', Helvetica Neue, HelveticaNeue, helvetica, arial, sans-serif\",\"ppui-coachtip-background-color\":\"#2c2e2f\",\"ppuiCoachtipBackgroundColor\":\"#2c2e2f\",\"ppui-coachtip-text-color\":\"#fff\",\"ppuiCoachtipTextColor\":\"#fff\",\"ppui-color-blue-300\":\"#bfdbee\",\"ppuiColorBlue300\":\"#bfdbee\",\"ppui-font-family-500\":\"'PayPalSansBig-Medium'\",\"ppuiFontFamily500\":\"'PayPalSansBig-Medium'\",\"ppui-color-blue-600\":\"#0070ba\",\"ppuiColorBlue600\":\"#0070ba\",\"ppui-color-blue-800\":\"#003087\",\"ppuiColorBlue800\":\"#003087\",\"ppui-font-size-md\":\"0.9375rem\",\"ppuiFontSizeMd\":\"0.9375rem\",\"ppui-font-size-xl-2\":\"1.5rem\",\"ppuiFontSizeXl2\":\"1.5rem\",\"ppui-font-weight-light\":\"300\",\"ppuiFontWeightLight\":\"300\",\"ppui-font-weight-normal\":\"500\",\"ppuiFontWeightNormal\":\"500\",\"ppui-line-height-sm\":\"1.125rem\",\"ppuiLineHeightSm\":\"1.125rem\",\"ppui-spacing-lg\":\"0.75rem\",\"ppuiSpacingLg\":\"0.75rem\",\"ppui-font-weight-bold\":\"700\",\"ppuiFontWeightBold\":\"700\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SpinnerOverlay from '@/shared/components/SpinnerOverlay';\nimport getContent from '@/lib/content';\n\nexport default function DefaultSpinner({ contentKey } = {}) {\n return {getContent(contentKey)};\n}\n\nDefaultSpinner.propTypes = {\n contentKey: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport { createPortal } from 'react-dom';\nimport { useFeature } from '@/components/Feature/hooks';\nimport { SPINNER_TYPES } from './constants';\nimport DefaultSpinner from './DefaultSpinner';\nimport ReturnToMerchantSpinner from './ReturnToMerchantSpinner';\n\nconst SpinnerPortal = (props) => {\n return
{createPortal(props.children, document.body)}
;\n};\n\nconst SpinnerComponent = ({ spinnerType = SPINNER_TYPES.DEFAULT, selectedFI }) => {\n switch (spinnerType) {\n case SPINNER_TYPES.THREE_DS_PROCESSING: {\n return ;\n }\n case SPINNER_TYPES.RETURN_TO_MERCHANT: {\n return ;\n }\n case SPINNER_TYPES.PROCESS_CARD: {\n return ;\n }\n case SPINNER_TYPES.PROCESS_INCENTIVE: {\n return ;\n }\n case SPINNER_TYPES.CRYPTO_SELLING: {\n return ;\n }\n default:\n return ;\n }\n};\n\nexport default ({ selectedFI }) => {\n const { enabled, visible, data } = useFeature('SPINNER');\n\n if (!enabled || !visible) {\n return null;\n }\n\n return (\n \n \n \n );\n};\n\nexport { SPINNER_TYPES };\n","import i18n from 'pp-react-l10n';\n\nimport { getCountry, getLocale } from '@paypalcorp/c3-shared-globals';\nimport { logger } from '@paypalcorp/c3-util-logger';\n\nconst IGNORE_MISSING_CONTENT_KEYS = [/^fsMappings.+$/];\n\nconst shouldIgnoreLoggingMissingContentKeys = (key) =>\n IGNORE_MISSING_CONTENT_KEYS.find((ignoreKey) => ignoreKey.test(key));\n\n/**\n * Wrapper with ability to check for undefined content\n */\nexport default (...args) => {\n const key = args[0];\n const result = i18n.apply(this, args);\n\n if (String(result) === `{${key}}`) {\n if (!shouldIgnoreLoggingMissingContentKeys(key)) {\n logger.cal.info(`CONTENT_MISSING_${key.replace(/ /g, '_')}_${getCountry()}_${getLocale()}`);\n }\n\n return null;\n }\n\n return result;\n};\n","import React, { lazy, Suspense, useEffect } from 'react';\nimport { logger } from '@paypalcorp/c3-util-logger';\n\n/**\n * resolve dynamic chunk with an ability to retry if failed\n */\nexport const lazyLoadChunkWithRetry = ({ fn, retriesLeft = 5, interval = 1500, id }) => {\n return new Promise((resolve, reject) => {\n window.logCPLPhase(id, 'chunk', true);\n fn()\n .then((result) => {\n logger.cal.info(`CHUNK_${id}_LOADED`);\n window.logCPLPhase(id, 'chunk');\n if (result == null) {\n console.warn(`could not load %s`, id);\n }\n resolve(result);\n })\n .catch((error) => {\n setTimeout(() => {\n if (retriesLeft === 1) {\n // reject('maximum retries exceeded');\n reject(error);\n return;\n }\n logger.cal.info(`CHUNK_${id}_RETRY`);\n // Passing on \"reject\" is the important part\n lazyLoadChunkWithRetry({ fn, retriesLeft: retriesLeft - 1, interval, id }).then(\n resolve,\n reject\n );\n }, interval);\n });\n }).catch(() => {\n logger.cal.error(`CHUNK_${id}_FAILED`);\n window.location.reload();\n\n // TODO: discuss this approach to show an alert and reload the page\n // if (window.confirm(getContent('offline.message') || 'You are offline. Press OK to reload')) {\n // window.location.reload();\n // }\n });\n};\n\n/**\n * dynamically lazy load component using React.lazy && React.Suspense\n * with an ability to preload the chunk\n */\nexport const lazyComponent = (\n dynamicImport,\n { id, loading: LoaderComponent, error: ErrorComponent }\n) => {\n const LazyComponent = lazy(() => lazyLoadChunkWithRetry({ fn: dynamicImport, id }));\n const ComponentWithSuspense = React.forwardRef((props, ref) => {\n useEffect(() => {\n dynamicImport().then().catch();\n }, []);\n\n if (props.isLoading) {\n return LoaderComponent ? : null;\n }\n\n if (props.error) {\n return ErrorComponent ? : null;\n }\n\n return (\n : null}>\n \n \n );\n });\n return ComponentWithSuspense;\n};\n","import { logger } from '@paypalcorp/c3-util-logger';\nimport { getCountry, getGlobals, getToken } from '@paypalcorp/c3-shared-globals';\nimport { updateFeature, isParamEnabled } from '@paypalcorp/c3-util-store';\nimport { buildURL, redirect } from '@/lib/redirects';\nimport { isIncontext, params, setDestination } from '@/lib/utils';\nimport { isPopup } from '@paypalcorp/c3-util-browser';\nimport { strToBool } from '@paypalcorp/c3-util-lang';\nimport { creditPpcOffersGqlParams } from '@/lib/credit';\n\nexport function isCrossCurrencyTransaction(creditOffer) {\n return !!(\n creditOffer?.content?.OfferCategory === 'ACQ' &&\n strToBool(creditOffer?.content?.CrossCurrencyTransaction)\n );\n}\n\nexport function getCreditIncentiveDetails(creditOffer) {\n return creditOffer?.content\n ? {\n offerProgramId: creditOffer.content['Incentive-OfferProgramId'],\n offerValue: creditOffer.content['Incentive-OfferValue'],\n offerCurrencyCode: creditOffer.content['Incentive-OfferCurrencyCode'],\n offerProgramCode: creditOffer.content['Incentive-OfferProgramCode'],\n touchpoint: creditOffer.touchpoint,\n headlineText: creditOffer.content.HeadlineText,\n offerText1: creditOffer.content.OfferText1,\n offerText2: creditOffer.content.OfferText2,\n termsLink: creditOffer.content.TermsLink,\n termsLinkText: creditOffer.content.TermsLinkText,\n termsText: creditOffer.content.TermsText,\n buyItemId: creditOffer.referenceId,\n }\n : {};\n}\n\n/**\n * Page context value\n * @returns {String} url\n */\nexport function getPageContext() {\n const pageContext = isIncontext() ? 'In-context' : 'Full-context';\n return isPopup() ? 'Mb-context' : pageContext;\n}\n\nexport const returnFromCreditPayInFull = () => {\n return isParamEnabled('success', ['false']) && !isParamEnabled('isInternalServiceError');\n};\n\n/*\n * Redirect the user to Cape (creditapplyweb)\n */\nexport function redirectToCape(mayflyKey) {\n const capeUrl = buildURL(`${getGlobals().uri.capeEndpoint}${getCountry().toLowerCase()}`, {\n key: mayflyKey,\n });\n\n logger.cal.info('REDIRECT_TO_CAPE', {\n url: capeUrl,\n });\n\n setDestination('RETURN_FROM_CREDIT');\n redirect(capeUrl);\n}\n\nexport const getCapeReturnMutationVariables = ({\n financial_instrument_id,\n financial_instrument_details,\n}) => {\n const {\n financing_code,\n apr,\n term,\n credit_type,\n paypal_subsidy,\n monthly_percentage_rate,\n total_cost,\n total_interest,\n monthly_payment,\n currency,\n } = financial_instrument_details || {};\n\n return {\n token: getToken(),\n financialInstrumentId: financial_instrument_id,\n ...(financial_instrument_details && {\n financialInstrumentDetails: {\n financingCode: financing_code,\n apr,\n term,\n creditType: credit_type,\n paypalSubsidy: paypal_subsidy,\n monthlyPercentageRate: monthly_percentage_rate,\n totalCost: total_cost,\n totalInterest: total_interest,\n monthlyPayment: monthly_payment,\n currency,\n },\n }),\n ...creditPpcOffersGqlParams(),\n };\n};\n\nexport const handleShipTo = (mayflyData) => {\n let shouldUpdateShipTo = false;\n const data = {};\n const userSelectedAddressId = mayflyData?.user_selected_address_id;\n const userSelectedPreferredShippingAddressId =\n mayflyData?.user_selected_preferred_shipping_address_id;\n if (typeof userSelectedAddressId === 'string' && userSelectedAddressId.length > 0) {\n data.userSelectedAddressId = userSelectedAddressId;\n shouldUpdateShipTo = true;\n }\n if (\n typeof userSelectedPreferredShippingAddressId === 'string' &&\n userSelectedPreferredShippingAddressId.length > 0\n ) {\n data.userSelectedPreferredShippingAddressId = userSelectedPreferredShippingAddressId;\n data.toggle = true;\n shouldUpdateShipTo = true;\n }\n if (shouldUpdateShipTo) {\n // see also: onChangeShipping in ShippingOptions\n return updateFeature('SHIP_TO', {\n visible: true,\n data,\n });\n }\n\n return Promise.resolve();\n};\n","import { useQuery } from '@apollo/react-hooks';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { getSingleFeatureQuery, getContingenciesQuery } from '@paypalcorp/c3-util-store';\nimport { getOperationName } from '@paypalcorp/c3-util-graphql';\n\n/**\n * Execute feature queries\n * TODO: don't ignore rules of hooks\n * @param {Array} queries queries to execute\n * @param {Boolean} skip if the query should be skipped entirely\n * @returns array of feature data\n */\nexport function useGqlNetworkQuery({ queries, skip = false }) {\n return queries.reduce((map, { query, variables, fetchPolicy, context } = {}, idx) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n map[`${getOperationName(query)}_${idx}`] = useQuery(query, {\n variables,\n fetchPolicy,\n context,\n errorPolicy: 'ignore',\n skip,\n });\n\n return map;\n }, {});\n}\n\n/**\n * Query features from local state\n * TODO: don't ignore rules of hooks\n * @param {Array} features feature IDs\n * @returns array of local feature state\n */\nexport function useFeatureQuery(features) {\n return features.reduce((map, featureId) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n map[`${featureId}`] = useQuery(getSingleFeatureQuery, { variables: { id: featureId } });\n\n return map;\n }, {});\n}\n\nexport function useContingencyQuery(id) {\n const { data = {}, error } = useQuery(getContingenciesQuery, { variables: { id } });\n\n if (error) {\n logger.cal.error('ERROR_EXECUTING_CONTINGENCY_QUERY', { error, query: getContingenciesQuery });\n }\n\n return data;\n}\n\n/**\n * Query for a contingency\n * @param {String} id Contingency ID\n */\nexport function useContingency(id) {\n const { contingencies = [] } = useContingencyQuery(id) || {};\n return contingencies.find((contingency) => contingency.id === id) ?? null;\n}\n\n/**\n * Hook to query for a Feature, which includes\n * - it's ID\n * - if it's enabled\n * - if it's visible\n * - its data\n * - and more!! 😮\n * Initial feature config is defined in `/src/store/features.js`\n * @param {String} id Feature ID\n */\nexport function useFeature(id) {\n const { data: { feature = {} } = {} } = useQuery(getSingleFeatureQuery, {\n variables: { id },\n });\n\n return (\n feature || {\n enabled: false,\n visible: false,\n data: {},\n }\n );\n}\n"],"sourceRoot":""}