{ "version": 3, "sources": ["apps/partner-center-client/src/app/core/reseller/utils.ts", "apps/partner-center-client/src/app/core/reseller/conversion.ts", "apps/partner-center-client/src/app/core/reseller/reseller-item.service.ts"], "sourcesContent": ["import { ActivatableApp } from '@vendasta/marketplace-packages';\nimport { ResellerItem } from '@vendasta/store';\nimport { SortDescriptor, SortOrder } from '../sort';\nimport { sortedWithState } from '../utils/pipe-utils';\n\nexport function arrayDefined(arr: any[]): boolean {\n return arr && arr.length > 0;\n}\n\n// return true if the given app list contains the app is in the given activatableAppList.\n// note that an AddOns parents need to be activatable in order for the AddOn to be considered activatable\nexport function inActivatableList(activatableAppIds: string[], appId: string, addonId?: string): boolean {\n if (addonId != null) {\n if (activatableAppIds.indexOf(appId) > -1 && activatableAppIds.indexOf(addonId) > -1) {\n return true;\n }\n } else if (activatableAppIds.indexOf(appId) > -1) {\n return true;\n }\n return false;\n}\n\nexport function getApprovedResellerItems(parents: ResellerItem[], addons: ResellerItem[]): ResellerItem[] {\n if (!parents) {\n return [];\n }\n const productIds = parents.map((product) => product.appId);\n const enabledAddons = (addons || []).filter((addon) => productIds.indexOf(addon.appId) >= 0);\n return parents.concat(enabledAddons);\n}\n\nexport function getActivatableAppIdsFromActivatableApps(apps: ActivatableApp[]): string[] {\n if (!apps) {\n return [];\n }\n const arr: string[] = [];\n apps.forEach((app) => {\n arr.push(app.appId);\n if (app.childActivatableApps && app.childActivatableApps.length > 0) {\n app.childActivatableApps.forEach((child) => {\n arr.push(child.appId);\n });\n }\n });\n return arr.filter((item, pos) => arr.indexOf(item) === pos);\n}\n\nexport function sortResellerItems(\n items: ResellerItem[],\n fieldname: string,\n sortDescriptor: SortDescriptor,\n): ResellerItem[] {\n if (sortDescriptor.fieldname !== fieldname) {\n sortDescriptor.fieldname = fieldname;\n }\n return sortByField(fieldname, sortDescriptor, items);\n}\n\nexport function sortByField(fieldName: string, sortDescriptor: SortDescriptor, items: ResellerItem[]): ResellerItem[] {\n let groupsByAppId = [];\n if (items) {\n groupsByAppId = items.reduce(function (total: any, current: ResellerItem): any {\n total[current.appId] = total[current.appId] || [];\n if (!current.addonId) {\n // if it's a product, add it to the head of the array\n total[current.appId].unshift(current);\n } else {\n // if it's an addon, add it to the end of array\n total[current.appId].push(current);\n }\n const sortedAddonsWithinProduct = sortedWithState(total[current.appId].slice(1), sortDescriptor);\n Array.prototype.splice.apply(\n total[current.appId],\n [1, sortedAddonsWithinProduct.length].concat(sortedAddonsWithinProduct),\n );\n return total;\n }, Object.create(null));\n }\n let groupedArrays = [];\n for (const appIdKey in groupsByAppId) {\n if (Object.hasOwnProperty.call(groupsByAppId, appIdKey)) {\n const itemArray = groupsByAppId[appIdKey];\n groupedArrays.push(itemArray);\n }\n }\n groupedArrays = sortProductsByFieldName({\n sortDescriptor: sortDescriptor,\n fieldName: fieldName,\n arrayToBeSorted: groupedArrays,\n });\n const returnVals: ResellerItem[] = [];\n return returnVals.concat(...groupedArrays);\n}\n\nfunction sortProductsByFieldName(parameters: {\n sortDescriptor: SortDescriptor;\n fieldName: string;\n arrayToBeSorted: ResellerItem[];\n}): ResellerItem[] {\n const { sortDescriptor, fieldName, arrayToBeSorted } = parameters;\n if (sortDescriptor.order === SortOrder.Ascending) {\n try {\n arrayToBeSorted.sort((a, b) => a[0][fieldName].localeCompare(b[0][fieldName]));\n } catch (error) {\n arrayToBeSorted.sort(function (a: any, b: any): number {\n return a[0][fieldName] > b[0][fieldName] ? 1 : b[0][fieldName] > a[0][fieldName] ? -1 : 0;\n });\n }\n } else {\n try {\n arrayToBeSorted.sort((a, b) => b[0][fieldName].localeCompare(a[0][fieldName]));\n } catch (error) {\n arrayToBeSorted.sort(function (a: any, b: any): number {\n return a[0][fieldName] < b[0][fieldName] ? 1 : b[0][fieldName] < a[0][fieldName] ? -1 : 0;\n });\n }\n }\n return arrayToBeSorted;\n}\n\nexport function chunk(arr: any[], len: number): any[] {\n const chunks = [];\n let i = 0;\n const n = arr.length;\n\n while (i < n) {\n chunks.push(arr.slice(i, (i += len)));\n }\n\n return chunks;\n}\n\ninterface RiKey {\n addon_id?: string;\n addonId?: string;\n appId?: string;\n app_id?: string;\n editionId?: string;\n}\n\nexport function getResellerItemUniqueId(resellerItem: RiKey): string {\n if (!resellerItem) {\n return undefined;\n }\n return resellerItem.addonId || resellerItem.addon_id || resellerItem.appId || resellerItem.app_id;\n}\n\nexport function resellerArrayToMap(resellerItems: ResellerItem[]): Map {\n if (!resellerItems || resellerItems.length === 0) {\n return new Map();\n }\n\n return resellerItems.reduce((curr, ri) => {\n curr.set(getResellerItemUniqueId(ri), ri);\n return curr;\n }, new Map());\n}\n\nexport function mergeAppData(resellerItems: ResellerItem[], marketplaceApps: ResellerItem[]): ResellerItem[] {\n const marketplaceAppsMap: Map = marketplaceApps.reduce((map, obj) => {\n const id = getResellerItemUniqueId(obj);\n if (id) {\n map[id] = obj;\n }\n return map;\n }, new Map());\n\n return resellerItems.map((resellerItem) => {\n const mpApp: ResellerItem = marketplaceAppsMap[resellerItem.addonId || resellerItem.appId];\n if (mpApp) {\n const mpAppCopy = { ...mpApp };\n mpAppCopy.name = resellerItem.name;\n mpAppCopy.icon = resellerItem.icon || mpApp.icon;\n mpAppCopy.setupFee = resellerItem.setupFee;\n return mpAppCopy;\n }\n return resellerItem;\n });\n}\n\ninterface RiType extends RiKey {\n isCustom?: boolean;\n}\nexport function isAddon(resellerItem: RiType): boolean {\n return resellerItem.appId && resellerItem.addonId && !resellerItem.isCustom;\n}\n\n// Needed because usesOrderForm could be true, but no fields are actually set\nexport function resellerItemUsesOrderForm(resellerItem: ResellerItem): boolean {\n if (!resellerItem) {\n return false;\n }\n\n if (resellerItem.usesCustomizationForm) {\n return true;\n }\n\n if (\n !resellerItem.usesActivationSpecificEntryUrl &&\n ((!resellerItem.orderForm && !resellerItem.isCustom) || !resellerItem.usesCustomizationForm)\n ) {\n return false;\n }\n\n const isCustomProductThatProbablyNeedsEntryUrl = resellerItem.usesCustomizationForm && resellerItem.isCustom;\n const hasCustomOrderForm =\n resellerItem.orderForm && resellerItem.orderForm.orderForm && resellerItem.orderForm.orderForm.length > 0;\n const hasACommonFormFieldRequirement =\n resellerItem.orderForm &&\n resellerItem.orderForm.commonForm &&\n Boolean(\n Object.keys(resellerItem.orderForm.commonForm).find((key) => resellerItem.orderForm.commonForm[key] === true),\n );\n const usesActivationSpecificEntryUrl = !!resellerItem.usesActivationSpecificEntryUrl;\n\n return (\n isCustomProductThatProbablyNeedsEntryUrl ||\n hasCustomOrderForm ||\n hasACommonFormFieldRequirement ||\n usesActivationSpecificEntryUrl\n );\n}\n", "import { Addon } from '@galaxy/marketplace-apps/v1';\nimport { ResellerItem } from '@vendasta/store';\nimport { MarketplaceApp } from '../marketplace-app/marketplace-app';\nimport { Product } from '../product/product';\nimport { ResellerItemMap } from './reseller-item-map';\n\nexport function convertAppToResellerItem(app: MarketplaceApp): ResellerItem {\n if (!app) {\n return undefined;\n }\n return new ResellerItem({\n appId: app.appId,\n addonId: undefined,\n type: app.type,\n name: app.name,\n icon: app.icon,\n tagline: app.tagline,\n headerImage: app.headerImage,\n currency: app.currency,\n price: app.price ? Number(app.price) : 0,\n setupFee: app.setupFee ? Number(app.setupFee) : 0,\n billingFrequency: (app.billingFrequency || '').toLowerCase(),\n lmiCategories: (app.lmiCategories || []).map((lmi) => (lmi || '').toLowerCase()),\n enabled: false, // the existence of a product model means this is enabled.\n isCustom: false,\n quantity: 1, // :(\n orderForm: {\n orderForm: app.orderForm,\n commonForm: app.commonForm,\n activationMessage: app.activationMessage,\n separateOrderForms: false,\n },\n allowMultipleActivations: app.allowMultipleActivations || false,\n usesCustomizationForm: app.usesOrderForm,\n usesActivationSpecificEntryUrl: app.usesActivationSpecificEntryUrl,\n entryUrl: undefined, // not on the internal app model\n restrictions: app.restrictions,\n activationRequiresApproval: app.activationRequiresApproval,\n billingId: app.billingId,\n usesEditions: app.usesEditions,\n editionIds: app.editionIds,\n suggestedRetailPrice: app.suggestedRetailPrice,\n trialConfiguration: app.trialConfiguration,\n integration: app.integration,\n suspended: app.suspended,\n usesCustomPricing: app.usesCustomPricing,\n });\n}\n\nexport function convertAddonToResellerItem(addon: Addon, parentApp: ResellerItem | MarketplaceApp): ResellerItem {\n if (!addon) {\n return undefined;\n }\n const ri = new ResellerItem({\n appId: addon.appId,\n addonId: addon.addonId,\n name: addon.title,\n icon: addon.icon,\n tagline: addon.tagline,\n headerImage: addon.bannerImage,\n price: Number(addon.price),\n setupFee: addon.setupFee || 0,\n usesCustomPricing: addon.usesCustomPricing,\n billingFrequency: (addon.billingFrequency || '').toLowerCase(),\n enabled: undefined, // enablement determine by whether its parent is enabled or not\n isCustom: false,\n quantity: 1,\n usesCustomizationForm: addon.usesOrderForm,\n orderForm: addon.orderForm,\n allowMultipleActivations: addon.multipleActivations,\n restrictions: addon.restrictions,\n activationRequiresApproval: addon.activationRequiresApproval,\n billingId: addon.billingId,\n currency: addon.currency,\n });\n\n if (parentApp != null) {\n ri.lmiCategories = parentApp.lmiCategories;\n }\n\n return ri;\n}\n\nfunction isCustomProduct(product: Product): boolean {\n if (!product) {\n return false;\n }\n return product.product_id?.startsWith('CP-') || product.origin === 'partner_created';\n}\n\nexport function convertProductToResellerItem(product: Product): ResellerItem {\n if (!product) {\n return undefined;\n }\n return new ResellerItem({\n appId: product.product_id,\n addonId: undefined, // only apps can be products\n name: product.name,\n icon: product.icon_url,\n tagline: product.tagline,\n headerImage: product.header_image_url,\n price: Number(product.wholesale_price),\n setupFee: product.setup_fee || 0,\n currency: product.currency,\n suggestedRetailPrice: product.recommended_sell_price,\n billingFrequency: (product.billing_frequency || '').toLowerCase(),\n enabled: true, // products are the enabled versions of apps\n isCustom: isCustomProduct(product),\n quantity: 1,\n usesCustomizationForm: product.uses_customization_form,\n usesActivationSpecificEntryUrl: product.uses_activation_specific_entry_url,\n orderForm: {\n orderForm: product.order_form,\n commonForm: undefined,\n activationMessage: undefined,\n separateOrderForms: false,\n },\n allowMultipleActivations: false,\n restrictions: product.restrictions,\n activationRequiresApproval: undefined,\n billingId: product.billing_id || product.product_id,\n });\n}\n\nexport function convertCustomProductToResellerItem(cp: Product): ResellerItem {\n if (!cp) {\n return undefined;\n }\n return new ResellerItem({\n appId: cp.product_id,\n addonId: undefined, // only apps can be products\n name: cp.name,\n icon: cp.icon_url,\n tagline: cp.tagline,\n headerImage: cp.header_image_url,\n price: Number(cp.wholesale_price) || 0,\n setupFee: cp.setup_fee || 0,\n currency: cp.currency,\n billingFrequency: (cp.billing_frequency || '').toLowerCase(),\n enabled: true, // products are the enabled versions of apps\n isCustom: true,\n quantity: 1,\n usesCustomizationForm: cp.uses_customization_form,\n // Order forms depends on the usesActivationSpecificEntry URL field to show the 'custom entry url'`. For current custom products the field uses_customization_form meant that.\n // for migrated products, for migrated custom product into marketplace apps, the resulting product will have the uses_activation_specific field set\n usesActivationSpecificEntryUrl: cp.uses_customization_form || cp.uses_activation_specific_entry_url,\n orderForm: {\n orderForm: cp.order_form,\n commonForm: undefined,\n activationMessage: undefined,\n separateOrderForms: false,\n },\n allowMultipleActivations: false,\n restrictions: cp.restrictions,\n activationRequiresApproval: undefined,\n billingId: cp.billing_id || cp.product_id,\n });\n}\n\nexport function makeResellerMap(\n products: ResellerItem[],\n customProducts: ResellerItem[],\n addons: ResellerItem[],\n apps: ResellerItem[],\n): ResellerItemMap {\n const array = customProducts.concat(addons, products, apps);\n return array.reduce((resellerItemMap, current) => {\n if (current.addonId) {\n resellerItemMap[current.addonId] = current.name;\n } else {\n // Prioritize products and custom products before apps\n if (!resellerItemMap[current.appId]) {\n resellerItemMap[current.appId] = current.name;\n }\n }\n return resellerItemMap;\n }, {} as ResellerItemMap) as ResellerItemMap;\n}\n", "import { Injectable } from '@angular/core';\nimport { AppEnablementStatus, PartnerAppEnablementStatus } from '@vendasta/marketplace-packages';\nimport { ResellerItem } from '@vendasta/store';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { MarketplaceApiService } from '../marketplace.api.service';\nimport { SortDescriptor } from '../sort';\nimport {\n convertAddonToResellerItem,\n convertAppToResellerItem,\n convertCustomProductToResellerItem,\n convertProductToResellerItem,\n makeResellerMap,\n} from './conversion';\nimport { ResellerItemMap } from './reseller-item-map';\nimport {\n arrayDefined,\n getActivatableAppIdsFromActivatableApps,\n getApprovedResellerItems,\n inActivatableList,\n mergeAppData,\n sortResellerItems,\n} from './utils';\n\ninterface NestedResellerItem extends ResellerItem {\n addons: ResellerItem[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ResellerItemService {\n private readonly apps$: Observable;\n private readonly appsForSelectedMarket$: Observable;\n private readonly addons$: Observable;\n private readonly products$: Observable;\n private readonly productsForMarket$: Observable;\n private readonly customProducts$: Observable;\n private readonly resellerItemMap$: Observable;\n private readonly activatableAppIds$: Observable;\n private readonly activatablePartnerData$: Observable;\n private readonly activatableMarketData$: Observable;\n private readonly activatableNestedPartnerData$: Observable;\n public isProductLoading$$: BehaviorSubject = new BehaviorSubject(true);\n\n constructor(private marketplaceApiService: MarketplaceApiService) {\n this.apps$ = this.marketplaceApiService.apps().pipe(\n map((apps) => {\n if (!arrayDefined(apps)) {\n return [];\n }\n return apps.map((app) => convertAppToResellerItem(app));\n }),\n shareReplay(1),\n );\n\n this.appsForSelectedMarket$ = this.marketplaceApiService.appsForSelectedMarket$.pipe(\n map((apps) => {\n if (!arrayDefined(apps)) {\n return [];\n }\n return apps.map((app) => convertAppToResellerItem(app));\n }),\n shareReplay(1),\n );\n\n this.addons$ = combineLatest([this.marketplaceApiService.addons$, this.apps$]).pipe(\n map(([addons, apps]) => {\n if (!arrayDefined(addons)) {\n return [];\n }\n\n const appMap: Map = new Map();\n if (arrayDefined(apps)) {\n apps.forEach((app) => appMap.set(app.appId, app));\n }\n\n return addons.map((addon) => {\n const parentApp = appMap.get(addon.appId);\n return convertAddonToResellerItem(addon, parentApp);\n });\n }),\n shareReplay(1),\n );\n\n this.products$ = this.marketplaceApiService.products().pipe(\n map((products) => {\n this.isProductLoading$$.next(true);\n if (!arrayDefined(products)) {\n return [];\n }\n return products.map((product) => convertProductToResellerItem(product));\n }),\n shareReplay(1),\n );\n\n this.productsForMarket$ = this.marketplaceApiService.productsForMarket().pipe(\n map((products) => (products || []).map((product) => convertProductToResellerItem(product))),\n shareReplay(1),\n );\n\n this.customProducts$ = this.marketplaceApiService.customProducts().pipe(\n map((cps) => {\n if (!arrayDefined(cps)) {\n return [];\n }\n return cps.map((cp) => convertCustomProductToResellerItem(cp));\n }),\n shareReplay(1),\n );\n\n this.resellerItemMap$ = combineLatest([this.apps$, this.addons$, this.products$, this.customProducts$]).pipe(\n map(([apps, addons, products, cps]) => makeResellerMap(products, cps, addons, apps)),\n shareReplay(1),\n );\n\n this.activatableAppIds$ = this.marketplaceApiService.activatableApps().pipe(\n map((apps) => {\n if (!arrayDefined(apps)) {\n return [];\n }\n return getActivatableAppIdsFromActivatableApps(apps);\n }),\n );\n\n this.activatablePartnerData$ = combineLatest([this.getPartnerData(), this.activatableAppIds$, this.apps$]).pipe(\n map(([resellerItems, activatableApps, marketplaceApps]) => {\n const mergedData = mergeAppData(resellerItems, marketplaceApps);\n return this.sortViewableResellerItems(mergedData, activatableApps);\n }),\n shareReplay(1),\n );\n\n this.activatableMarketData$ = combineLatest([this.getMarketData(), this.activatableAppIds$, this.apps$]).pipe(\n map(([resellerItems, activatableApps, marketplaceApps]) => {\n const mergedData = mergeAppData(resellerItems, marketplaceApps);\n return this.sortViewableResellerItems(mergedData, activatableApps);\n }),\n shareReplay(1),\n );\n\n this.activatableNestedPartnerData$ = combineLatest([\n this.getPartnerData(),\n this.activatableAppIds$,\n this.apps$,\n ]).pipe(\n map(([resellerItems, activatableApps, marketplaceApps]) => {\n const mergedData = mergeAppData(resellerItems, marketplaceApps);\n return this.nestActivatableResellerItemsWithoutSuspended(mergedData, activatableApps);\n }),\n shareReplay(1),\n );\n }\n\n // Use this method to combine custom products and apps going forwards. It prioritizes the app reseller item over the custom product,\n // just incase there is one of each with the same id.\n static combineCustomProductsAndApps(cps: ResellerItem[], apps: ResellerItem[]): ResellerItem[] {\n const combinedList = (cps || []).concat(apps || []);\n\n const deduplicatedMap = (combinedList || []).reduce((m, app) => {\n m.set(app.appId, app);\n return m;\n }, new Map());\n\n const deduplicatedList = [];\n deduplicatedMap.forEach((app) => deduplicatedList.push(app));\n return deduplicatedList;\n }\n\n partnerAppEnablementStatusesMap(): Observable<{\n [appId: string]: AppEnablementStatus;\n }> {\n return this.marketplaceApiService.paesMap$;\n }\n\n partnerAppEnablementStatuses(): Observable {\n return this.marketplaceApiService.paes$;\n }\n\n getResellerMap(): Observable {\n return this.resellerItemMap$;\n }\n\n getAppData(): Observable {\n return this.apps$;\n }\n\n getAppsForSelectedMarket(): Observable {\n return this.appsForSelectedMarket$;\n }\n\n getCustomProductData(): Observable {\n return this.customProducts$;\n }\n\n getProductData(): Observable {\n return this.products$;\n }\n\n getAddonData(): Observable {\n return this.addons$;\n }\n\n getActivatablePartnerData(): Observable {\n return this.activatablePartnerData$;\n }\n\n getActivatablePartnerDataWithoutSuspended(): Observable {\n return this.activatablePartnerData$.pipe(map((resellerItems) => resellerItems.filter((item) => !item.suspended)));\n }\n\n getActivatableMarketDataWithoutSuspended(): Observable {\n return this.activatableMarketData$.pipe(map((resellerItems) => resellerItems.filter((item) => !item.suspended)));\n }\n\n getActivatableNestedPartnerDataWithoutSuspended(): Observable {\n return this.activatableNestedPartnerData$;\n }\n\n getPartnerData(): Observable {\n return combineLatest([this.getProductData(), this.getAddonData(), this.apps$]).pipe(\n map(([ri1, ri2, apps]) => {\n return mergeAppData(getApprovedResellerItems(ri1, ri2), apps);\n }),\n );\n }\n\n getMarketData(): Observable {\n return combineLatest([this.productsForMarket$, this.getAddonData(), this.apps$]).pipe(\n map(([ri1, ri2, apps]) => {\n return mergeAppData(getApprovedResellerItems(ri1, ri2), apps);\n }),\n );\n }\n\n sort(items: ResellerItem[], fieldname: string, sortDescriptor: SortDescriptor): ResellerItem[] {\n return sortResellerItems(items, fieldname, sortDescriptor);\n }\n\n nestActivatableResellerItemsWithoutSuspended(\n resellerItems: ResellerItem[],\n activatableApps: string[],\n ): NestedResellerItem[] {\n const activatableItems: NestedResellerItem[] = [];\n for (const currItem of resellerItems) {\n if (currItem.addonId) {\n const index = activatableItems.findIndex((item) => item.appId && item.appId === currItem.appId);\n if (!currItem.suspended && inActivatableList(activatableApps, currItem.appId, currItem.addonId)) {\n if (!activatableItems[index].addons) activatableItems[index].addons = [];\n activatableItems[index].addons.push(currItem);\n }\n } else {\n if (!currItem.suspended && inActivatableList(activatableApps, currItem.appId, currItem.addonId))\n activatableItems.push(currItem as NestedResellerItem);\n }\n }\n return activatableItems;\n }\n\n sortViewableResellerItems(resellerItems: ResellerItem[], activatableAppIDs: string[]): ResellerItem[] {\n const viewableItems: ResellerItem[] = [];\n\n const activatableResellerItems = resellerItems.filter((resellerItem) => {\n return inActivatableList(activatableAppIDs, resellerItem.appId, resellerItem.addonId);\n });\n\n for (const currItem of activatableResellerItems) {\n if (currItem.addonId) {\n viewableItems.splice(\n viewableItems.findIndex((item) => item.appId && item.appId === currItem.appId) + 1,\n 0,\n currItem,\n );\n } else {\n viewableItems.push(currItem);\n }\n }\n return viewableItems;\n }\n\n refreshMarketplaceData(): void {\n this.marketplaceApiService.refreshMarketplaceData();\n }\n}\n"], "mappings": "sPAKM,SAAUA,EAAaC,EAAU,CACrC,OAAOA,GAAOA,EAAIC,OAAS,CAC7B,CAIM,SAAUC,EAAkBC,EAA6BC,EAAeC,EAAgB,CAC5F,GAAIA,GAAW,MACb,GAAIF,EAAkBG,QAAQF,CAAK,EAAI,IAAMD,EAAkBG,QAAQD,CAAO,EAAI,GAChF,MAAO,WAEAF,EAAkBG,QAAQF,CAAK,EAAI,GAC5C,MAAO,GAET,MAAO,EACT,CAEM,SAAUG,EAAyBC,EAAyBC,EAAsB,CACtF,GAAI,CAACD,EACH,MAAO,CAAA,EAET,IAAME,EAAaF,EAAQG,IAAKC,GAAYA,EAAQR,KAAK,EACnDS,GAAiBJ,GAAU,CAAA,GAAIK,OAAQC,GAAUL,EAAWJ,QAAQS,EAAMX,KAAK,GAAK,CAAC,EAC3F,OAAOI,EAAQQ,OAAOH,CAAa,CACrC,CAEM,SAAUI,EAAwCC,EAAsB,CAC5E,GAAI,CAACA,EACH,MAAO,CAAA,EAET,IAAMlB,EAAgB,CAAA,EACtBkB,OAAAA,EAAKC,QAASC,GAAO,CACnBpB,EAAIqB,KAAKD,EAAIhB,KAAK,EACdgB,EAAIE,sBAAwBF,EAAIE,qBAAqBrB,OAAS,GAChEmB,EAAIE,qBAAqBH,QAASI,GAAS,CACzCvB,EAAIqB,KAAKE,EAAMnB,KAAK,CACtB,CAAC,CAEL,CAAC,EACMJ,EAAIc,OAAO,CAACU,EAAMC,IAAQzB,EAAIM,QAAQkB,CAAI,IAAMC,CAAG,CAC5D,CAEM,SAAUC,EACdC,EACAC,EACAC,EAA8B,CAE9B,OAAIA,EAAeD,YAAcA,IAC/BC,EAAeD,UAAYA,GAEtBE,EAAYF,EAAWC,EAAgBF,CAAK,CACrD,CAEM,SAAUG,EAAYC,EAAmBF,EAAgCF,EAAqB,CAClG,IAAIK,EAAgB,CAAA,EAChBL,IACFK,EAAgBL,EAAMM,OAAO,SAAUC,EAAYC,EAAqB,CACtED,EAAMC,EAAQ/B,KAAK,EAAI8B,EAAMC,EAAQ/B,KAAK,GAAK,CAAA,EAC1C+B,EAAQ9B,QAKX6B,EAAMC,EAAQ/B,KAAK,EAAEiB,KAAKc,CAAO,EAHjCD,EAAMC,EAAQ/B,KAAK,EAAEgC,QAAQD,CAAO,EAKtC,IAAME,EAA4BC,EAAgBJ,EAAMC,EAAQ/B,KAAK,EAAEmC,MAAM,CAAC,EAAGV,CAAc,EAC/FW,aAAMC,UAAUC,OAAOC,MACrBT,EAAMC,EAAQ/B,KAAK,EACnB,CAAC,EAAGiC,EAA0BpC,MAAM,EAAEe,OAAOqB,CAAyB,CAAC,EAElEH,CACT,EAAGU,OAAOC,OAAO,IAAI,CAAC,GAExB,IAAIC,EAAgB,CAAA,EACpB,QAAWC,KAAYf,EACrB,GAAIY,OAAOI,eAAeC,KAAKjB,EAAee,CAAQ,EAAG,CACvD,IAAMG,EAAYlB,EAAce,CAAQ,EACxCD,EAAczB,KAAK6B,CAAS,CAC9B,CAEFJ,OAAAA,EAAgBK,EAAwB,CACtCtB,eAAgBA,EAChBE,UAAWA,EACXqB,gBAAiBN,EAClB,EACkC,CAAA,EACjB9B,OAAO,GAAG8B,CAAa,CAC3C,CAEA,SAASK,EAAwBE,EAIhC,CACC,GAAM,CAAExB,eAAAA,EAAgBE,UAAAA,EAAWqB,gBAAAA,CAAe,EAAKC,EACvD,GAAIxB,EAAeyB,QAAUC,EAAUC,UACrC,GAAI,CACFJ,EAAgBK,KAAK,CAACC,EAAGC,IAAMD,EAAE,CAAC,EAAE3B,CAAS,EAAE6B,cAAcD,EAAE,CAAC,EAAE5B,CAAS,CAAC,CAAC,CAC/E,MAAgB,CACdqB,EAAgBK,KAAK,SAAUC,EAAQC,EAAM,CAC3C,OAAOD,EAAE,CAAC,EAAE3B,CAAS,EAAI4B,EAAE,CAAC,EAAE5B,CAAS,EAAI,EAAI4B,EAAE,CAAC,EAAE5B,CAAS,EAAI2B,EAAE,CAAC,EAAE3B,CAAS,EAAI,GAAK,CAC1F,CAAC,CACH,KAEA,IAAI,CACFqB,EAAgBK,KAAK,CAACC,EAAGC,IAAMA,EAAE,CAAC,EAAE5B,CAAS,EAAE6B,cAAcF,EAAE,CAAC,EAAE3B,CAAS,CAAC,CAAC,CAC/E,MAAgB,CACdqB,EAAgBK,KAAK,SAAUC,EAAQC,EAAM,CAC3C,OAAOD,EAAE,CAAC,EAAE3B,CAAS,EAAI4B,EAAE,CAAC,EAAE5B,CAAS,EAAI,EAAI4B,EAAE,CAAC,EAAE5B,CAAS,EAAI2B,EAAE,CAAC,EAAE3B,CAAS,EAAI,GAAK,CAC1F,CAAC,CACH,CAEF,OAAOqB,CACT,CAEM,SAAUS,EAAM7D,EAAY8D,EAAW,CAC3C,IAAMC,EAAS,CAAA,EACXC,EAAI,EACFC,EAAIjE,EAAIC,OAEd,KAAO+D,EAAIC,GACTF,EAAO1C,KAAKrB,EAAIuC,MAAMyB,EAAIA,GAAKF,CAAI,CAAC,EAGtC,OAAOC,CACT,CAUM,SAAUG,EAAwBC,EAAmB,CACzD,GAAKA,EAGL,OAAOA,EAAa9D,SAAW8D,EAAaC,UAAYD,EAAa/D,OAAS+D,EAAaE,MAC7F,CAEM,SAAUC,EAAmBC,EAA6B,CAC9D,MAAI,CAACA,GAAiBA,EAActE,SAAW,EACtC,IAAIuE,IAGND,EAActC,OAAO,CAACwC,EAAMC,KACjCD,EAAKE,IAAIT,EAAwBQ,CAAE,EAAGA,CAAE,EACjCD,GACN,IAAID,GAA2B,CACpC,CAEM,SAAUI,EAAaL,EAA+BM,EAA+B,CACzF,IAAMC,EAAkDD,EAAgB5C,OAAO,CAACtB,EAAKoE,IAAO,CAC1F,IAAMC,EAAKd,EAAwBa,CAAG,EACtC,OAAIC,IACFrE,EAAIqE,CAAE,EAAID,GAELpE,CACT,EAAG,IAAI6D,GAA6B,EAEpC,OAAOD,EAAc5D,IAAKwD,GAAgB,CACxC,IAAMc,EAAsBH,EAAmBX,EAAa9D,SAAW8D,EAAa/D,KAAK,EACzF,GAAI6E,EAAO,CACT,IAAMC,EAAYC,EAAA,GAAKF,GACvBC,OAAAA,EAAUE,KAAOjB,EAAaiB,KAC9BF,EAAUG,KAAOlB,EAAakB,MAAQJ,EAAMI,KAC5CH,EAAUI,SAAWnB,EAAamB,SAC3BJ,CACT,CACA,OAAOf,CACT,CAAC,CACH,CAUM,SAAUoB,EAA0BC,EAA0B,CAClE,GAAI,CAACA,EACH,MAAO,GAGT,GAAIA,EAAaC,sBACf,MAAO,GAGT,GACE,CAACD,EAAaE,iCACZ,CAACF,EAAaG,WAAa,CAACH,EAAaI,UAAa,CAACJ,EAAaC,uBAEtE,MAAO,GAGT,IAAMI,EAA2CL,EAAaC,uBAAyBD,EAAaI,SAC9FE,EACJN,EAAaG,WAAaH,EAAaG,UAAUA,WAAaH,EAAaG,UAAUA,UAAUI,OAAS,EACpGC,EACJR,EAAaG,WACbH,EAAaG,UAAUM,YACvBC,EACEC,OAAOC,KAAKZ,EAAaG,UAAUM,UAAU,EAAEI,KAAMC,GAAQd,EAAaG,UAAUM,WAAWK,CAAG,IAAM,EAAI,EAE1GZ,EAAiC,CAAC,CAACF,EAAaE,+BAEtD,OACEG,GACAC,GACAE,GACAN,CAEJ,CCvNM,SAAUa,EAAyBC,EAAmB,CAC1D,GAAKA,EAGL,OAAO,IAAIC,EAAa,CACtBC,MAAOF,EAAIE,MACXC,QAASC,OACTC,KAAML,EAAIK,KACVC,KAAMN,EAAIM,KACVC,KAAMP,EAAIO,KACVC,QAASR,EAAIQ,QACbC,YAAaT,EAAIS,YACjBC,SAAUV,EAAIU,SACdC,MAAOX,EAAIW,MAAQC,OAAOZ,EAAIW,KAAK,EAAI,EACvCE,SAAUb,EAAIa,SAAWD,OAAOZ,EAAIa,QAAQ,EAAI,EAChDC,kBAAmBd,EAAIc,kBAAoB,IAAIC,YAAW,EAC1DC,eAAgBhB,EAAIgB,eAAiB,CAAA,GAAIC,IAAKC,IAASA,GAAO,IAAIH,YAAW,CAAE,EAC/EI,QAAS,GACTC,SAAU,GACVC,SAAU,EACVC,UAAW,CACTA,UAAWtB,EAAIsB,UACfC,WAAYvB,EAAIuB,WAChBC,kBAAmBxB,EAAIwB,kBACvBC,mBAAoB,IAEtBC,yBAA0B1B,EAAI0B,0BAA4B,GAC1DC,sBAAuB3B,EAAI4B,cAC3BC,+BAAgC7B,EAAI6B,+BACpCC,SAAU1B,OACV2B,aAAc/B,EAAI+B,aAClBC,2BAA4BhC,EAAIgC,2BAChCC,UAAWjC,EAAIiC,UACfC,aAAclC,EAAIkC,aAClBC,WAAYnC,EAAImC,WAChBC,qBAAsBpC,EAAIoC,qBAC1BC,mBAAoBrC,EAAIqC,mBACxBC,YAAatC,EAAIsC,YACjBC,UAAWvC,EAAIuC,UACfC,kBAAmBxC,EAAIwC,kBACxB,CACH,CAEM,SAAUC,EAA2BC,EAAcC,EAAwC,CAC/F,GAAI,CAACD,EACH,OAEF,IAAME,EAAK,IAAI3C,EAAa,CAC1BC,MAAOwC,EAAMxC,MACbC,QAASuC,EAAMvC,QACfG,KAAMoC,EAAMG,MACZtC,KAAMmC,EAAMnC,KACZC,QAASkC,EAAMlC,QACfC,YAAaiC,EAAMI,YACnBnC,MAAOC,OAAO8B,EAAM/B,KAAK,EACzBE,SAAU6B,EAAM7B,UAAY,EAC5B2B,kBAAmBE,EAAMF,kBACzB1B,kBAAmB4B,EAAM5B,kBAAoB,IAAIC,YAAW,EAC5DI,QAASf,OACTgB,SAAU,GACVC,SAAU,EACVM,sBAAuBe,EAAMd,cAC7BN,UAAWoB,EAAMpB,UACjBI,yBAA0BgB,EAAMK,oBAChChB,aAAcW,EAAMX,aACpBC,2BAA4BU,EAAMV,2BAClCC,UAAWS,EAAMT,UACjBvB,SAAUgC,EAAMhC,SACjB,EAED,OAAIiC,GAAa,OACfC,EAAG5B,cAAgB2B,EAAU3B,eAGxB4B,CACT,CAEA,SAASI,EAAgBC,EAAgB,CACvC,OAAKA,EAGEA,EAAQC,YAAYC,WAAW,KAAK,GAAKF,EAAQG,SAAW,kBAF1D,EAGX,CAEM,SAAUC,EAA6BJ,EAAgB,CAC3D,GAAKA,EAGL,OAAO,IAAIhD,EAAa,CACtBC,MAAO+C,EAAQC,WACf/C,QAASC,OACTE,KAAM2C,EAAQ3C,KACdC,KAAM0C,EAAQK,SACd9C,QAASyC,EAAQzC,QACjBC,YAAawC,EAAQM,iBACrB5C,MAAOC,OAAOqC,EAAQO,eAAe,EACrC3C,SAAUoC,EAAQQ,WAAa,EAC/B/C,SAAUuC,EAAQvC,SAClB0B,qBAAsBa,EAAQS,uBAC9B5C,kBAAmBmC,EAAQU,mBAAqB,IAAI5C,YAAW,EAC/DI,QAAS,GACTC,SAAU4B,EAAgBC,CAAO,EACjC5B,SAAU,EACVM,sBAAuBsB,EAAQW,wBAC/B/B,+BAAgCoB,EAAQY,mCACxCvC,UAAW,CACTA,UAAW2B,EAAQa,WACnBvC,WAAYnB,OACZoB,kBAAmBpB,OACnBqB,mBAAoB,IAEtBC,yBAA0B,GAC1BK,aAAckB,EAAQlB,aACtBC,2BAA4B5B,OAC5B6B,UAAWgB,EAAQc,YAAcd,EAAQC,WAC1C,CACH,CAEM,SAAUc,EAAmCC,EAAW,CAC5D,GAAKA,EAGL,OAAO,IAAIhE,EAAa,CACtBC,MAAO+D,EAAGf,WACV/C,QAASC,OACTE,KAAM2D,EAAG3D,KACTC,KAAM0D,EAAGX,SACT9C,QAASyD,EAAGzD,QACZC,YAAawD,EAAGV,iBAChB5C,MAAOC,OAAOqD,EAAGT,eAAe,GAAK,EACrC3C,SAAUoD,EAAGR,WAAa,EAC1B/C,SAAUuD,EAAGvD,SACbI,kBAAmBmD,EAAGN,mBAAqB,IAAI5C,YAAW,EAC1DI,QAAS,GACTC,SAAU,GACVC,SAAU,EACVM,sBAAuBsC,EAAGL,wBAG1B/B,+BAAgCoC,EAAGL,yBAA2BK,EAAGJ,mCACjEvC,UAAW,CACTA,UAAW2C,EAAGH,WACdvC,WAAYnB,OACZoB,kBAAmBpB,OACnBqB,mBAAoB,IAEtBC,yBAA0B,GAC1BK,aAAckC,EAAGlC,aACjBC,2BAA4B5B,OAC5B6B,UAAWgC,EAAGF,YAAcE,EAAGf,WAChC,CACH,CAEM,SAAUgB,EACdC,EACAC,EACAC,EACAC,EAAoB,CAGpB,OADcF,EAAeG,OAAOF,EAAQF,EAAUG,CAAI,EAC7CE,OAAO,CAACC,EAAiBC,KAChCA,EAAQvE,QACVsE,EAAgBC,EAAQvE,OAAO,EAAIuE,EAAQpE,KAGtCmE,EAAgBC,EAAQxE,KAAK,IAChCuE,EAAgBC,EAAQxE,KAAK,EAAIwE,EAAQpE,MAGtCmE,GACN,CAAA,CAAqB,CAC1B,CCpJA,IAAaE,GAAmB,IAAA,CAA1B,IAAOA,EAAP,MAAOA,CAAmB,CAc9BC,YAAoBC,EAA4C,CAA5C,KAAAA,sBAAAA,EAFb,KAAAC,mBAA+C,IAAIC,EAAgB,EAAI,EAG5E,KAAKC,MAAQ,KAAKH,sBAAsBI,KAAI,EAAGC,KAC7CC,EAAKF,GACEG,EAAaH,CAAI,EAGfA,EAAKE,IAAKE,GAAQC,EAAyBD,CAAG,CAAC,EAF7C,CAAA,CAGV,EACDE,EAAY,CAAC,CAAC,EAGhB,KAAKC,uBAAyB,KAAKX,sBAAsBW,uBAAuBN,KAC9EC,EAAKF,GACEG,EAAaH,CAAI,EAGfA,EAAKE,IAAKE,GAAQC,EAAyBD,CAAG,CAAC,EAF7C,CAAA,CAGV,EACDE,EAAY,CAAC,CAAC,EAGhB,KAAKE,QAAUC,EAAc,CAAC,KAAKb,sBAAsBY,QAAS,KAAKT,KAAK,CAAC,EAAEE,KAC7EC,EAAI,CAAC,CAACQ,EAAQV,CAAI,IAAK,CACrB,GAAI,CAACG,EAAaO,CAAM,EACtB,MAAO,CAAA,EAGT,IAAMC,EAAoC,IAAIC,IAC9C,OAAIT,EAAaH,CAAI,GACnBA,EAAKa,QAAST,GAAQO,EAAOG,IAAIV,EAAIW,MAAOX,CAAG,CAAC,EAG3CM,EAAOR,IAAKc,GAAS,CAC1B,IAAMC,EAAYN,EAAOO,IAAIF,EAAMD,KAAK,EACxC,OAAOI,EAA2BH,EAAOC,CAAS,CACpD,CAAC,CACH,CAAC,EACDX,EAAY,CAAC,CAAC,EAGhB,KAAKc,UAAY,KAAKxB,sBAAsByB,SAAQ,EAAGpB,KACrDC,EAAKmB,IACH,KAAKxB,mBAAmByB,KAAK,EAAI,EAC5BnB,EAAakB,CAAQ,EAGnBA,EAASnB,IAAKqB,GAAYC,EAA6BD,CAAO,CAAC,EAF7D,CAAA,EAGV,EACDjB,EAAY,CAAC,CAAC,EAGhB,KAAKmB,mBAAqB,KAAK7B,sBAAsB8B,kBAAiB,EAAGzB,KACvEC,EAAKmB,IAAcA,GAAY,CAAA,GAAInB,IAAKqB,GAAYC,EAA6BD,CAAO,CAAC,CAAC,EAC1FjB,EAAY,CAAC,CAAC,EAGhB,KAAKqB,gBAAkB,KAAK/B,sBAAsBgC,eAAc,EAAG3B,KACjEC,EAAK2B,GACE1B,EAAa0B,CAAG,EAGdA,EAAI3B,IAAK4B,GAAOC,EAAmCD,CAAE,CAAC,EAFpD,CAAA,CAGV,EACDxB,EAAY,CAAC,CAAC,EAGhB,KAAK0B,iBAAmBvB,EAAc,CAAC,KAAKV,MAAO,KAAKS,QAAS,KAAKY,UAAW,KAAKO,eAAe,CAAC,EAAE1B,KACtGC,EAAI,CAAC,CAACF,EAAMU,EAAQW,EAAUQ,CAAG,IAAMI,EAAgBZ,EAAUQ,EAAKnB,EAAQV,CAAI,CAAC,EACnFM,EAAY,CAAC,CAAC,EAGhB,KAAK4B,mBAAqB,KAAKtC,sBAAsBuC,gBAAe,EAAGlC,KACrEC,EAAKF,GACEG,EAAaH,CAAI,EAGfoC,EAAwCpC,CAAI,EAF1C,CAAA,CAGV,CAAC,EAGJ,KAAKqC,wBAA0B5B,EAAc,CAAC,KAAK6B,eAAc,EAAI,KAAKJ,mBAAoB,KAAKnC,KAAK,CAAC,EAAEE,KACzGC,EAAI,CAAC,CAACqC,EAAeJ,EAAiBK,CAAe,IAAK,CACxD,IAAMC,EAAaC,EAAaH,EAAeC,CAAe,EAC9D,OAAO,KAAKG,0BAA0BF,EAAYN,CAAe,CACnE,CAAC,EACD7B,EAAY,CAAC,CAAC,EAGhB,KAAKsC,uBAAyBnC,EAAc,CAAC,KAAKoC,cAAa,EAAI,KAAKX,mBAAoB,KAAKnC,KAAK,CAAC,EAAEE,KACvGC,EAAI,CAAC,CAACqC,EAAeJ,EAAiBK,CAAe,IAAK,CACxD,IAAMC,EAAaC,EAAaH,EAAeC,CAAe,EAC9D,OAAO,KAAKG,0BAA0BF,EAAYN,CAAe,CACnE,CAAC,EACD7B,EAAY,CAAC,CAAC,EAGhB,KAAKwC,8BAAgCrC,EAAc,CACjD,KAAK6B,eAAc,EACnB,KAAKJ,mBACL,KAAKnC,KAAK,CACX,EAAEE,KACDC,EAAI,CAAC,CAACqC,EAAeJ,EAAiBK,CAAe,IAAK,CACxD,IAAMC,EAAaC,EAAaH,EAAeC,CAAe,EAC9D,OAAO,KAAKO,6CAA6CN,EAAYN,CAAe,CACtF,CAAC,EACD7B,EAAY,CAAC,CAAC,CAElB,CAIA,OAAO0C,6BAA6BnB,EAAqB7B,EAAoB,CAG3E,IAAMiD,IAFgBpB,GAAO,CAAA,GAAIqB,OAAOlD,GAAQ,CAAA,CAAE,GAET,CAAA,GAAImD,OAAO,CAACC,EAAGhD,KACtDgD,EAAEtC,IAAIV,EAAIW,MAAOX,CAAG,EACbgD,GACN,IAAIxC,GAAK,EAENyC,EAAmB,CAAA,EACzBJ,OAAAA,EAAgBpC,QAAST,GAAQiD,EAAiBC,KAAKlD,CAAG,CAAC,EACpDiD,CACT,CAEAE,iCAA+B,CAG7B,OAAO,KAAK3D,sBAAsB4D,QACpC,CAEAC,8BAA4B,CAC1B,OAAO,KAAK7D,sBAAsB8D,KACpC,CAEAC,gBAAc,CACZ,OAAO,KAAK3B,gBACd,CAEA4B,YAAU,CACR,OAAO,KAAK7D,KACd,CAEA8D,0BAAwB,CACtB,OAAO,KAAKtD,sBACd,CAEAuD,sBAAoB,CAClB,OAAO,KAAKnC,eACd,CAEAoC,gBAAc,CACZ,OAAO,KAAK3C,SACd,CAEA4C,cAAY,CACV,OAAO,KAAKxD,OACd,CAEAyD,2BAAyB,CACvB,OAAO,KAAK5B,uBACd,CAEA6B,2CAAyC,CACvC,OAAO,KAAK7B,wBAAwBpC,KAAKC,EAAKqC,GAAkBA,EAAc4B,OAAQC,GAAS,CAACA,EAAKC,SAAS,CAAC,CAAC,CAClH,CAEAC,0CAAwC,CACtC,OAAO,KAAK1B,uBAAuB3C,KAAKC,EAAKqC,GAAkBA,EAAc4B,OAAQC,GAAS,CAACA,EAAKC,SAAS,CAAC,CAAC,CACjH,CAEAE,iDAA+C,CAC7C,OAAO,KAAKzB,6BACd,CAEAR,gBAAc,CACZ,OAAO7B,EAAc,CAAC,KAAKsD,eAAc,EAAI,KAAKC,aAAY,EAAI,KAAKjE,KAAK,CAAC,EAAEE,KAC7EC,EAAI,CAAC,CAACsE,EAAKC,EAAKzE,CAAI,IACX0C,EAAagC,EAAyBF,EAAKC,CAAG,EAAGzE,CAAI,CAC7D,CAAC,CAEN,CAEA6C,eAAa,CACX,OAAOpC,EAAc,CAAC,KAAKgB,mBAAoB,KAAKuC,aAAY,EAAI,KAAKjE,KAAK,CAAC,EAAEE,KAC/EC,EAAI,CAAC,CAACsE,EAAKC,EAAKzE,CAAI,IACX0C,EAAagC,EAAyBF,EAAKC,CAAG,EAAGzE,CAAI,CAC7D,CAAC,CAEN,CAEA2E,KAAKC,EAAuBC,EAAmBC,EAA8B,CAC3E,OAAOC,EAAkBH,EAAOC,EAAWC,CAAc,CAC3D,CAEA/B,6CACER,EACAJ,EAAyB,CAEzB,IAAM6C,EAAyC,CAAA,EAC/C,QAAWC,KAAY1C,EACrB,GAAI0C,EAASC,QAAS,CACpB,IAAMC,EAAQH,EAAiBI,UAAWhB,GAASA,EAAKrD,OAASqD,EAAKrD,QAAUkE,EAASlE,KAAK,EAC1F,CAACkE,EAASZ,WAAagB,EAAkBlD,EAAiB8C,EAASlE,MAAOkE,EAASC,OAAO,IACvFF,EAAiBG,CAAK,EAAEzE,SAAQsE,EAAiBG,CAAK,EAAEzE,OAAS,CAAA,GACtEsE,EAAiBG,CAAK,EAAEzE,OAAO4C,KAAK2B,CAAQ,EAEhD,KACM,CAACA,EAASZ,WAAagB,EAAkBlD,EAAiB8C,EAASlE,MAAOkE,EAASC,OAAO,GAC5FF,EAAiB1B,KAAK2B,CAA8B,EAG1D,OAAOD,CACT,CAEArC,0BAA0BJ,EAA+B+C,EAA2B,CAClF,IAAMC,EAAgC,CAAA,EAEhCC,EAA2BjD,EAAc4B,OAAQsB,GAC9CJ,EAAkBC,EAAmBG,EAAa1E,MAAO0E,EAAaP,OAAO,CACrF,EAED,QAAWD,KAAYO,EACjBP,EAASC,QACXK,EAAcG,OACZH,EAAcH,UAAWhB,GAASA,EAAKrD,OAASqD,EAAKrD,QAAUkE,EAASlE,KAAK,EAAI,EACjF,EACAkE,CAAQ,EAGVM,EAAcjC,KAAK2B,CAAQ,EAG/B,OAAOM,CACT,CAEAI,wBAAsB,CACpB,KAAK/F,sBAAsB+F,uBAAsB,CACnD,yCA3PWjG,GAAmBkG,EAAAC,CAAA,CAAA,CAAA,wBAAnBnG,EAAmBoG,QAAnBpG,EAAmBqG,UAAAC,WADN,MAAM,CAAA,EAC1B,IAAOtG,EAAPuG,SAAOvG,CAAmB,GAAA", "names": ["arrayDefined", "arr", "length", "inActivatableList", "activatableAppIds", "appId", "addonId", "indexOf", "getApprovedResellerItems", "parents", "addons", "productIds", "map", "product", "enabledAddons", "filter", "addon", "concat", "getActivatableAppIdsFromActivatableApps", "apps", "forEach", "app", "push", "childActivatableApps", "child", "item", "pos", "sortResellerItems", "items", "fieldname", "sortDescriptor", "sortByField", "fieldName", "groupsByAppId", "reduce", "total", "current", "unshift", "sortedAddonsWithinProduct", "sortedWithState", "slice", "Array", "prototype", "splice", "apply", "Object", "create", "groupedArrays", "appIdKey", "hasOwnProperty", "call", "itemArray", "sortProductsByFieldName", "arrayToBeSorted", "parameters", "order", "SortOrder", "Ascending", "sort", "a", "b", "localeCompare", "chunk", "len", "chunks", "i", "n", "getResellerItemUniqueId", "resellerItem", "addon_id", "app_id", "resellerArrayToMap", "resellerItems", "Map", "curr", "ri", "set", "mergeAppData", "marketplaceApps", "marketplaceAppsMap", "obj", "id", "mpApp", "mpAppCopy", "__spreadValues", "name", "icon", "setupFee", "resellerItemUsesOrderForm", "resellerItem", "usesCustomizationForm", "usesActivationSpecificEntryUrl", "orderForm", "isCustom", "isCustomProductThatProbablyNeedsEntryUrl", "hasCustomOrderForm", "length", "hasACommonFormFieldRequirement", "commonForm", "Boolean", "Object", "keys", "find", "key", "convertAppToResellerItem", "app", "ResellerItem", "appId", "addonId", "undefined", "type", "name", "icon", "tagline", "headerImage", "currency", "price", "Number", "setupFee", "billingFrequency", "toLowerCase", "lmiCategories", "map", "lmi", "enabled", "isCustom", "quantity", "orderForm", "commonForm", "activationMessage", "separateOrderForms", "allowMultipleActivations", "usesCustomizationForm", "usesOrderForm", "usesActivationSpecificEntryUrl", "entryUrl", "restrictions", "activationRequiresApproval", "billingId", "usesEditions", "editionIds", "suggestedRetailPrice", "trialConfiguration", "integration", "suspended", "usesCustomPricing", "convertAddonToResellerItem", "addon", "parentApp", "ri", "title", "bannerImage", "multipleActivations", "isCustomProduct", "product", "product_id", "startsWith", "origin", "convertProductToResellerItem", "icon_url", "header_image_url", "wholesale_price", "setup_fee", "recommended_sell_price", "billing_frequency", "uses_customization_form", "uses_activation_specific_entry_url", "order_form", "billing_id", "convertCustomProductToResellerItem", "cp", "makeResellerMap", "products", "customProducts", "addons", "apps", "concat", "reduce", "resellerItemMap", "current", "ResellerItemService", "constructor", "marketplaceApiService", "isProductLoading$$", "BehaviorSubject", "apps$", "apps", "pipe", "map", "arrayDefined", "app", "convertAppToResellerItem", "shareReplay", "appsForSelectedMarket$", "addons$", "combineLatest", "addons", "appMap", "Map", "forEach", "set", "appId", "addon", "parentApp", "get", "convertAddonToResellerItem", "products$", "products", "next", "product", "convertProductToResellerItem", "productsForMarket$", "productsForMarket", "customProducts$", "customProducts", "cps", "cp", "convertCustomProductToResellerItem", "resellerItemMap$", "makeResellerMap", "activatableAppIds$", "activatableApps", "getActivatableAppIdsFromActivatableApps", "activatablePartnerData$", "getPartnerData", "resellerItems", "marketplaceApps", "mergedData", "mergeAppData", "sortViewableResellerItems", "activatableMarketData$", "getMarketData", "activatableNestedPartnerData$", "nestActivatableResellerItemsWithoutSuspended", "combineCustomProductsAndApps", "deduplicatedMap", "concat", "reduce", "m", "deduplicatedList", "push", "partnerAppEnablementStatusesMap", "paesMap$", "partnerAppEnablementStatuses", "paes$", "getResellerMap", "getAppData", "getAppsForSelectedMarket", "getCustomProductData", "getProductData", "getAddonData", "getActivatablePartnerData", "getActivatablePartnerDataWithoutSuspended", "filter", "item", "suspended", "getActivatableMarketDataWithoutSuspended", "getActivatableNestedPartnerDataWithoutSuspended", "ri1", "ri2", "getApprovedResellerItems", "sort", "items", "fieldname", "sortDescriptor", "sortResellerItems", "activatableItems", "currItem", "addonId", "index", "findIndex", "inActivatableList", "activatableAppIDs", "viewableItems", "activatableResellerItems", "resellerItem", "splice", "refreshMarketplaceData", "\u0275\u0275inject", "MarketplaceApiService", "factory", "\u0275fac", "providedIn", "_ResellerItemService"] }