@labdigital/commercetools-mock 0.5.18 → 0.5.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"commercetools-mock.esm.js","sources":["../src/lib/expandParser.ts","../src/lib/haversine.ts","../src/lib/predicateParser.ts","../src/exceptions.ts","../src/storage.ts","../src/oauth/store.ts","../src/oauth/helpers.ts","../src/oauth/server.ts","../src/helpers.ts","../src/projectAPI.ts","../src/lib/proxy.ts","../src/constants.ts","../src/services/abstract.ts","../src/repositories/errors.ts","../src/repositories/abstract.ts","../src/repositories/helpers.ts","../src/repositories/cart-discount.ts","../src/services/cart-discount.ts","../src/repositories/cart.ts","../src/services/cart.ts","../src/repositories/category.ts","../src/services/category.ts","../src/repositories/channel.ts","../src/services/channel.ts","../src/repositories/customer-group.ts","../src/services/customer-group.ts","../src/repositories/customer.ts","../src/services/customer.ts","../src/repositories/custom-object.ts","../src/services/custom-object.ts","../src/repositories/discount-code.ts","../src/services/discount-code.ts","../src/repositories/extension.ts","../src/services/extension.ts","../src/repositories/inventory-entry.ts","../src/services/inventory-entry.ts","../src/services/my-cart.ts","../src/repositories/payment.ts","../src/services/my-payment.ts","../src/repositories/order.ts","../src/services/order.ts","../src/services/payment.ts","../src/lib/filterParser.ts","../src/repositories/product-projection.ts","../src/services/product-projection.ts","../src/repositories/product.ts","../src/services/product.ts","../src/repositories/product-type.ts","../src/services/product-type.ts","../src/lib/masking.ts","../src/repositories/project.ts","../src/services/project.ts","../src/repositories/shipping-method.ts","../src/services/shipping-method.ts","../src/repositories/shopping-list.ts","../src/services/shopping-list.ts","../src/repositories/state.ts","../src/services/state.ts","../src/repositories/store.ts","../src/services/store.ts","../src/repositories/subscription.ts","../src/services/subscription.ts","../src/repositories/tax-category.ts","../src/services/tax-category.ts","../src/repositories/type.ts","../src/services/type.ts","../src/repositories/zone.ts","../src/services/zone.ts","../src/ctMock.ts"],"sourcesContent":["/**\n * This module implements the reference expansion as imeplemented by\n * commercetools.\n *\n * See https://docs.commercetools.com/api/general-concepts#reference-expansion\n *\n * TODO: implement support for multi-dimensional array\n */\ntype ExpandResult = {\n element: string\n index?: string | number\n rest?: string\n}\n\nexport const parseExpandClause = (clause: string): ExpandResult => {\n const result: ExpandResult = {\n element: clause,\n index: undefined,\n rest: undefined,\n }\n\n const pos = clause.indexOf('.')\n if (pos > 0) {\n result.element = clause.substring(0, pos)\n result.rest = clause.substring(pos + 1)\n }\n\n const match = result.element.match(/\\[([^\\]+])]/)\n if (match) {\n result.index = match[1] === '*' ? '*' : parseInt(match[1], 10)\n result.element = result.element.substring(0, match.index)\n }\n return result\n}\n","export type Location = {\n latitude: number\n longitude: number\n}\n\n/**\n * Returns the distance between src and dst as meters\n */\nexport const haversineDistance = (src: Location, dst: Location) => {\n const RADIUS_OF_EARTH_IN_KM = 6371\n const toRadian = (deg: number) => deg * (Math.PI / 180)\n\n const dLat = toRadian(dst.latitude - src.latitude)\n const dLon = toRadian(dst.longitude - src.longitude)\n\n var a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRadian(src.latitude)) *\n Math.cos(toRadian(dst.latitude)) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return RADIUS_OF_EARTH_IN_KM * c * 1000\n}\n","/**\n * This module implements the commercetools query predicate filter expression.\n * Support should be 100% complete.\n *\n * See https://docs.commercetools.com/api/predicates/query\n */\nimport perplex from 'perplex'\nimport { ITokenPosition, Parser } from 'pratt'\nimport { haversineDistance } from './haversine'\n\nexport class PredicateError {\n message: string\n\n constructor(message: string) {\n this.message = message\n }\n}\n\ntype MatchFunc = (target: any, variables: VariableMap) => boolean\ntype VariableMap = {\n [key: string]: any\n}\n\nexport const matchesPredicate = (\n predicate: string | string[] | undefined,\n target: any,\n variables?: VariableMap\n): boolean => {\n if (!predicate) {\n return true\n }\n\n if (Array.isArray(predicate)) {\n return predicate.every(item => {\n const func = generateMatchFunc(item)\n return func(target, variables || {})\n })\n } else {\n const func = generateMatchFunc(predicate)\n return func(target, variables || {})\n }\n}\n\nexport const parseQueryExpression = (\n predicate: string | string[]\n): MatchFunc => {\n if (Array.isArray(predicate)) {\n const callbacks = predicate.map(item => generateMatchFunc(item))\n return (target: any, variables: VariableMap) => {\n return callbacks.every(callback => callback(target, variables))\n }\n } else {\n return generateMatchFunc(predicate)\n }\n}\n\ntype Symbol = {\n type: 'var' | 'boolean' | 'string' | 'float' | 'int' | 'identifier'\n value: any\n pos?: ITokenPosition\n}\n\nconst validateSymbol = (val: Symbol) => {\n if (!val.type) {\n throw new PredicateError('Internal error')\n }\n\n if (val.type === 'identifier') {\n const char = val.value.charAt(0)\n const line = val.pos?.start.line\n const column = val.pos?.start.column\n\n throw new PredicateError(\n `Invalid input '${char}', expected input parameter or primitive value (line ${line}, column ${column})`\n )\n }\n}\n\nconst resolveSymbol = (val: Symbol, vars: VariableMap): any => {\n if (val.type === 'var') {\n if (!(val.value in vars)) {\n throw new PredicateError(`Missing parameter value for ${val.value}`)\n }\n return vars[val.value]\n }\n\n return val.value\n}\n\nconst resolveValue = (obj: any, val: Symbol): any => {\n if (val.type !== 'identifier') {\n throw new PredicateError('Internal error')\n }\n\n if (!(val.value in obj)) {\n if (Array.isArray(obj)) {\n return Object.values(obj)\n .filter(v => val.value in v)\n .map(v => v[val.value])\n }\n throw new PredicateError(`The field '${val.value}' does not exist.`)\n }\n\n return obj[val.value]\n}\n\nconst getLexer = (value: string) => {\n return new perplex(value)\n\n .token('AND', /and(?![-_a-z0-9]+)/i)\n .token('OR', /or(?![-_a-z0-9]+)/i)\n .token('NOT', /not(?![-_a-z0-9]+)/i)\n\n .token('WITHIN', /within(?![-_a-z0-9]+)/i)\n .token('IN', /in(?![-_a-z0-9]+)/i)\n .token('MATCHES_IGNORE_CASE', /matches\\s+ignore\\s+case(?![-_a-z0-9]+)/i)\n .token('CONTAINS', /contains(?![-_a-z0-9]+)/i)\n .token('ALL', /all(?![-_a-z0-9]+)/i)\n .token('ANY', /any(?![-_a-z0-9]+)/i)\n .token('EMPTY', /empty(?![-_a-z0-9]+)/i)\n .token('IS', /is(?![-_a-z0-9]+)/i)\n .token('DEFINED', /defined(?![-_a-z0-9]+)/i)\n\n .token('FLOAT', /\\d+\\.\\d+/)\n .token('INT', /\\d+/)\n .token('VARIABLE', /:([-_A-Za-z0-9]+)/)\n .token('IDENTIFIER', /[-_A-Za-z0-9]+/)\n .token('STRING', /\"((?:\\\\.|[^\"\\\\])*)\"/)\n .token('STRING', /'((?:\\\\.|[^'\\\\])*)'/)\n\n .token('COMMA', ',')\n .token('(', '(')\n .token(')', ')')\n .token('>=', '>=')\n .token('<=', '<=')\n .token('>', '>')\n .token('<', '<')\n .token('!=', '!=')\n .token('=', '=')\n .token('\"', '\"')\n .token('WS', /\\s+/, true) // skip\n}\n\n/**\n * This function converts a query expression in to a callable which returns a\n * boolean to indicate if the given object matches or not.\n *\n * This currently parses the predicate each time it is called, but it should be\n * straight-forward to add a query cache (lru-cache)\n */\nconst generateMatchFunc = (predicate: string): MatchFunc => {\n const lexer = getLexer(predicate)\n const parser = new Parser(lexer)\n .builder()\n .nud('IDENTIFIER', 100, t => {\n return {\n type: 'identifier',\n value: t.token.match,\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('VARIABLE', 100, t => {\n return {\n type: 'var',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('STRING', 100, t => {\n return {\n type: 'string',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('INT', 1, t => {\n return {\n type: 'int',\n value: parseInt(t.token.match, 10),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('FLOAT', 1, t => {\n return {\n type: 'float',\n value: parseFloat(t.token.match),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('NOT', 100, ({ bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return !expr(obj)\n }\n })\n .nud('EMPTY', 10, ({ bp }) => {\n return 'empty'\n })\n .nud('DEFINED', 10, ({ bp }) => {\n return 'defined'\n })\n\n .led('AND', 5, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return left(obj) && expr(obj)\n }\n })\n .led('OR', 5, ({ left, token, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n return left(obj, vars) || expr(obj, vars)\n }\n })\n .led('COMMA', 1, ({ left, token, bp }) => {\n const expr: any = parser.parse({ terminals: [bp - 1] })\n if (Array.isArray(expr)) {\n return [left, ...expr]\n } else {\n return [left, expr]\n }\n })\n .nud('(', 100, t => {\n const expr: any = parser.parse({ terminals: [')'] })\n return expr\n })\n .led('(', 100, ({ left, bp }) => {\n const expr = parser.parse()\n lexer.expect(')')\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (value) {\n return expr(value)\n }\n return false\n }\n })\n .bp(')', 0)\n .led('=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const resolvedValue = resolveValue(obj, left)\n const resolvedSymbol = resolveSymbol(expr, vars)\n if (Array.isArray(resolvedValue)) {\n return !!resolvedValue.some(elem => elem === resolvedSymbol)\n }\n return resolvedValue === resolvedSymbol\n }\n })\n .led('!=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n return resolveValue(obj, left) !== resolveSymbol(expr, vars)\n }\n })\n .led('>', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) > resolveSymbol(expr, vars)\n }\n })\n .led('>=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) >= resolveSymbol(expr, vars)\n }\n })\n .led('<', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) < resolveSymbol(expr, vars)\n }\n })\n .led('<=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) <= resolveSymbol(expr, vars)\n }\n })\n .led('IS', 20, ({ left, bp }) => {\n let invert = false\n\n // Peek if this is a `is not` statement\n const next = lexer.peek()\n if (next.type === 'NOT') {\n invert = true\n lexer.next()\n }\n\n const expr: any = parser.parse({ terminals: [bp - 1] })\n\n switch (expr) {\n case 'empty': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length === 0\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length !== 0\n }\n }\n }\n case 'defined': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val !== undefined\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val === undefined\n }\n }\n }\n default: {\n throw new Error('Unexpected')\n }\n }\n })\n .led('IN', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n let symbols = expr\n if (!Array.isArray(symbols)) {\n symbols = [expr]\n }\n\n const inValues = symbols.map((item: Symbol) =>\n resolveSymbol(item, vars)\n )\n return inValues.includes(resolveValue(obj, left))\n }\n })\n .led('MATCHES_IGNORE_CASE', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const value = resolveValue(obj, left)\n const other = resolveSymbol(expr, vars)\n\n if (typeof value != 'string') {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n return value.toLowerCase() === other.toLowerCase()\n }\n })\n .led('WITHIN', 20, ({ left, bp }) => {\n const type = lexer.next()\n\n if (type.match !== 'circle') {\n throw new PredicateError(\n `Invalid input '${type.match}', expected circle`\n )\n }\n\n lexer.expect('(')\n const expr = parser.parse({ terminals: [')'] })\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (!value) return false\n\n const maxDistance = resolveSymbol(expr[2], vars)\n const distance = haversineDistance(\n {\n longitude: value[0],\n latitude: value[1],\n },\n {\n longitude: resolveSymbol(expr[0], vars),\n latitude: resolveSymbol(expr[1], vars),\n }\n )\n return distance <= maxDistance\n }\n })\n .led('CONTAINS', 20, ({ left, bp }) => {\n const keyword = lexer.next()\n\n let expr = parser.parse()\n if (!Array.isArray(expr)) {\n expr = [expr]\n }\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n\n if (!Array.isArray(value)) {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n\n const array = expr.map((item: Symbol) => resolveSymbol(item, vars))\n if (keyword.type === 'ALL') {\n return array.every((item: any) => value.includes(item))\n } else {\n return array.some((item: any) => value.includes(item))\n }\n }\n })\n\n .build()\n\n const result = parser.parse()\n\n if (typeof result !== 'function') {\n const lines = predicate.split('\\n')\n const column = lines[lines.length - 1].length\n\n throw new PredicateError(\n `Unexpected end of input, expected SphereIdentifierChar, comparison ` +\n `operator, not, in, contains, is, within or matches` +\n ` (line ${lines.length}, column ${column})`\n )\n }\n return result\n}\n","export abstract class BaseError {\n abstract message: string\n}\n\nexport class CommercetoolsError<T extends BaseError> extends Error {\n info: T\n statusCode: number\n\n constructor(info: T, statusCode = 400) {\n super(info.message)\n this.info = info\n this.statusCode = statusCode || 500\n }\n}\n\nexport interface InvalidRequestError {\n readonly code: 'invalid_request'\n readonly message: string\n}\n","import assert from 'assert'\nimport {\n BaseResource,\n Cart,\n Category,\n Customer,\n CustomObject,\n InventoryEntry,\n Order,\n PagedQueryResponse,\n QueryParam,\n Reference,\n ResourceIdentifier,\n Product,\n Store,\n Type,\n Payment,\n Project,\n State,\n TaxCategory,\n ShippingMethod,\n ProductType,\n InvalidInputError,\n ProductProjection,\n ShoppingList,\n Extension,\n CartDiscount,\n CustomerGroup,\n DiscountCode,\n Zone,\n Channel,\n Subscription,\n} from '@commercetools/platform-sdk'\nimport { parseExpandClause } from './lib/expandParser'\nimport { RepositoryTypes, ResourceMap, Writable } from './types'\nimport { parseQueryExpression } from './lib/predicateParser'\nimport { CommercetoolsError } from './exceptions'\n\ntype GetParams = {\n expand?: string[]\n}\n\ntype QueryParams = {\n expand?: string | string[]\n sort?: string | string[]\n limit?: number\n offset?: number\n withTotal?: boolean\n where?: string | string[]\n [key: string]: QueryParam\n}\n\nexport abstract class AbstractStorage {\n abstract clear(): void\n\n abstract assertStorage(typeId: RepositoryTypes): void\n\n abstract all(projectKey: string, typeId: RepositoryTypes): Array<BaseResource>\n\n abstract add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes]\n ): void\n\n abstract get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract addProject(projectKey: string): Project\n abstract getProject(projectKey: string): Project\n abstract saveProject(project: Project): Project\n\n abstract delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): BaseResource | null\n\n abstract query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse\n\n abstract getByResourceIdentifier(\n projectKey: string,\n identifier: ResourceIdentifier\n ): BaseResource | undefined\n}\n\ntype ProjectStorage = Partial<\n {\n [index in RepositoryTypes]: Map<string, BaseResource>\n }\n>\n\nexport class InMemoryStorage extends AbstractStorage {\n protected resources: {\n [projectKey: string]: ProjectStorage\n } = {}\n\n protected projects: {\n [projectKey: string]: Project\n } = {}\n\n private forProjectKey(projectKey: string) {\n this.addProject(projectKey)\n\n let projectStorage = this.resources[projectKey]\n if (!projectStorage) {\n projectStorage = this.resources[projectKey] = {\n cart: new Map<string, Cart>(),\n 'cart-discount': new Map<string, CartDiscount>(),\n category: new Map<string, Category>(),\n channel: new Map<string, Channel>(),\n customer: new Map<string, Customer>(),\n 'customer-group': new Map<string, CustomerGroup>(),\n 'discount-code': new Map<string, DiscountCode>(),\n extension: new Map<string, Extension>(),\n 'inventory-entry': new Map<string, InventoryEntry>(),\n 'key-value-document': new Map<string, CustomObject>(),\n order: new Map<string, Order>(),\n payment: new Map<string, Payment>(),\n 'product-type': new Map<string, ProductType>(),\n product: new Map<string, Product>(),\n 'product-selection': new Map<string, any>(),\n 'product-projection': new Map<string, ProductProjection>(),\n 'shipping-method': new Map<string, ShippingMethod>(),\n state: new Map<string, State>(),\n store: new Map<string, Store>(),\n 'shopping-list': new Map<string, ShoppingList>(),\n subscription: new Map<string, Subscription>(),\n 'tax-category': new Map<string, TaxCategory>(),\n type: new Map<string, Type>(),\n zone: new Map<string, Zone>(),\n }\n }\n return projectStorage\n }\n\n clear() {\n for (const [, projectStorage] of Object.entries(this.resources)) {\n for (const [, value] of Object.entries(projectStorage)) {\n value?.clear()\n }\n }\n }\n\n assertStorage(typeId: RepositoryTypes) {}\n\n all(projectKey: string, typeId: RepositoryTypes) {\n const store = this.forProjectKey(projectKey)[typeId]\n if (store) {\n return Array.from(store.values())\n }\n return []\n }\n\n add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes],\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] {\n this.forProjectKey(projectKey)[typeId]?.set(obj.id, obj)\n\n const resource = this.get(projectKey, typeId, obj.id, params)\n assert(resource, `resource of type ${typeId} with id ${obj.id} not created`)\n return resource\n }\n\n get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const resource = this.forProjectKey(projectKey)[typeId]?.get(id)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n const resources: any[] = Array.from(store.values())\n const resource = resources.find(e => e.key === key)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n const resource = this.get(projectKey, typeId, id)\n\n if (resource) {\n this.forProjectKey(projectKey)[typeId]?.delete(id)\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return resource\n }\n\n query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n let resources = Array.from(store.values())\n\n // Apply predicates\n if (params.where) {\n try {\n const filterFunc = parseQueryExpression(params.where)\n resources = resources.filter(resource => filterFunc(resource, {}))\n } catch (err) {\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message: (err as any).message,\n },\n 400\n )\n }\n }\n\n // Get the total before slicing the array\n const totalResources = resources.length\n\n // Apply offset, limit\n const offset = params.offset || 0\n const limit = params.limit || 20\n resources = resources.slice(offset, offset + limit)\n\n // Expand the resources\n if (params.expand !== undefined) {\n resources = resources.map(resource => {\n return this.expand(projectKey, resource, params.expand)\n })\n }\n\n return {\n count: totalResources,\n total: resources.length,\n offset: offset,\n limit: limit,\n results: resources,\n }\n }\n\n getByResourceIdentifier<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n identifier: ResourceIdentifier\n ): ResourceMap[RepositoryTypes] | undefined {\n if (identifier.id) {\n const resource = this.get(projectKey, identifier.typeId, identifier.id)\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n console.error(\n `No resource found with typeId=${identifier.typeId}, id=${identifier.id}`\n )\n return undefined\n }\n\n if (identifier.key) {\n const store = this.forProjectKey(projectKey)[identifier.typeId]\n\n if (store) {\n // TODO: BaseResource has no key attribute, but the subclasses should\n // have them all.\n const resource = Array.from(store.values()).find(\n // @ts-ignore\n r => r.key === identifier.key\n )\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n } else {\n throw new Error(\n `No storage found for resource type: ${identifier.typeId}`\n )\n }\n }\n return undefined\n }\n\n addProject = (projectKey: string): Project => {\n if (!this.projects[projectKey]) {\n this.projects[projectKey] = {\n key: projectKey,\n name: '',\n countries: [],\n currencies: [],\n languages: [],\n createdAt: '2018-10-04T11:32:12.603Z',\n trialUntil: '2018-12',\n carts: {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n },\n messages: { enabled: false, deleteDaysAfterCreation: 15 },\n shippingRateInputType: undefined,\n externalOAuth: undefined,\n searchIndexing: {\n products: {\n status: 'Deactivated',\n },\n orders: {\n status: 'Deactivated',\n },\n },\n version: 1,\n }\n }\n return this.projects[projectKey]\n }\n\n saveProject = (project: Project): Project => {\n this.projects[project.key] = project\n return project\n }\n\n getProject = (projectKey: string): Project => {\n return this.addProject(projectKey)\n }\n\n private expand = <T>(\n projectKey: string,\n obj: T,\n clause: undefined | string | string[]\n ): T => {\n if (!clause) return obj\n const newObj = JSON.parse(JSON.stringify(obj))\n if (Array.isArray(clause)) {\n clause.forEach(c => {\n this._resolveResource(projectKey, newObj, c)\n })\n } else {\n this._resolveResource(projectKey, newObj, clause)\n }\n return newObj\n }\n\n private _resolveResource = (projectKey: string, obj: any, expand: string) => {\n const params = parseExpandClause(expand)\n\n if (!params.index) {\n const reference = obj[params.element]\n if (reference === undefined) {\n return\n }\n this._resolveReference(projectKey, reference, params.rest)\n } else if (params.index === '*') {\n const reference = obj[params.element]\n if (reference === undefined || !Array.isArray(reference)) return\n reference.forEach((itemRef: Writable<Reference>) => {\n this._resolveReference(projectKey, itemRef, params.rest)\n })\n } else {\n const reference = obj[params.element][params.index]\n if (reference === undefined) return\n this._resolveReference(projectKey, reference, params.rest)\n }\n }\n\n private _resolveReference(\n projectKey: string,\n reference: any,\n expand: string | undefined\n ) {\n if (reference === undefined) return\n\n if (\n reference.typeId !== undefined &&\n (reference.id !== undefined || reference.key !== undefined)\n ) {\n // @ts-ignore\n reference.obj = this.getByResourceIdentifier(projectKey, {\n typeId: reference.typeId,\n id: reference.id,\n key: reference.key,\n } as ResourceIdentifier)\n if (expand) {\n this._resolveResource(projectKey, reference.obj, expand)\n }\n } else {\n if (expand) {\n this._resolveResource(projectKey, reference, expand)\n }\n }\n }\n}\n","import { randomBytes } from 'crypto'\n\ntype Token = {\n access_token: string\n token_type: 'Bearer'\n expires_in: number\n scope: string\n}\n\nexport class OAuth2Store {\n tokens: Token[] = []\n validate: Boolean = true\n\n constructor(validate: Boolean = true) {\n this.validate = validate\n }\n\n getClientToken(clientId: string, clientSecret: string, scope?: string) {\n const token: Token = {\n access_token: randomBytes(16).toString('base64'),\n token_type: 'Bearer',\n expires_in: 172800,\n scope: scope || 'todo',\n }\n this.tokens.push(token)\n return token\n }\n\n validateToken(token: string) {\n if (!this.validate) return true\n\n const foundToken = this.tokens.find(t => t.access_token === token)\n if (foundToken) {\n return true\n }\n return false\n }\n}\n","import { Request } from 'express'\n\nexport const getBearerToken = (request: Request): string | undefined => {\n const authHeader = request.header('Authorization')\n const match = authHeader?.match(/^Bearer\\s(?<token>[^\\s]+)$/)\n if (match) {\n return match.groups?.token\n }\n return undefined\n}\n","import auth from 'basic-auth'\nimport bodyParser from 'body-parser'\nimport express, { NextFunction, Request, Response } from 'express'\nimport {\n AccessDeniedError,\n InvalidTokenError,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError, InvalidRequestError } from '../exceptions'\nimport { InvalidClientError, UnsupportedGrantType } from './errors'\nimport { OAuth2Store } from './store'\nimport { getBearerToken } from './helpers'\n\nexport class OAuth2Server {\n store: OAuth2Store\n\n constructor(options: { enabled: boolean; validate: boolean }) {\n this.store = new OAuth2Store(options.validate)\n }\n\n createRouter() {\n const router = express.Router()\n router.use(bodyParser.urlencoded({ extended: true }))\n router.post('/token', this.tokenHandler.bind(this))\n return router\n }\n\n createMiddleware() {\n return async (request: Request, response: Response, next: NextFunction) => {\n const token = getBearerToken(request)\n if (!token) {\n next(\n new CommercetoolsError<AccessDeniedError>(\n {\n code: 'access_denied',\n message:\n 'This endpoint requires an access token. You can get one from the authorization server.',\n },\n 401\n )\n )\n }\n\n if (!token || !this.store.validateToken(token)) {\n next(\n new CommercetoolsError<InvalidTokenError>(\n {\n code: 'invalid_token',\n message: 'invalid_token',\n },\n 401\n )\n )\n }\n\n next()\n }\n }\n async tokenHandler(request: Request, response: Response, next: NextFunction) {\n const authHeader = request.header('Authorization')\n if (!authHeader) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 401\n )\n )\n }\n const credentials = auth.parse(authHeader)\n if (!credentials) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 400\n )\n )\n }\n\n const grantType = request.query.grant_type || request.body.grant_type\n if (!grantType) {\n return next(\n new CommercetoolsError<InvalidRequestError>(\n {\n code: 'invalid_request',\n message: 'Missing required parameter: grant_type.',\n },\n 400\n )\n )\n }\n\n if (grantType === 'client_credentials') {\n const token = this.store.getClientToken(\n credentials.name,\n credentials.pass,\n request.query.scope?.toString()\n )\n return response.status(200).send(token)\n } else {\n return next(\n new CommercetoolsError<UnsupportedGrantType>(\n {\n code: 'unsupported_grant_type',\n message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`,\n },\n 400\n )\n )\n }\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\n\nexport const getBaseResourceProperties = () => {\n return {\n id: uuidv4(),\n createdAt: new Date().toISOString(),\n lastModifiedAt: new Date().toISOString(),\n version: 0,\n }\n}\n","import { getBaseResourceProperties } from './helpers'\nimport { AbstractStorage } from './storage'\nimport { RepositoryMap, ResourceMap, Services } from './types'\n\nexport class ProjectAPI {\n private projectKey: string\n private _storage: AbstractStorage\n private _services: Services\n\n constructor(\n projectKey: string,\n services: Services,\n storage: AbstractStorage\n ) {\n this.projectKey = projectKey\n this._storage = storage\n this._services = services\n }\n\n add<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId | 'custom-object',\n resource: ResourceMap[ReferenceTypeId]\n ) {\n //@ts-ignore\n if (typeId === 'custom-object') typeId = 'key-value-document'\n\n const parsedTypeId = typeId as ReferenceTypeId\n\n const service = this._services[parsedTypeId]\n if (service) {\n this._storage.add(this.projectKey, parsedTypeId, {\n ...getBaseResourceProperties(),\n ...resource,\n })\n } else {\n throw new Error(`Service for ${typeId} not implemented yet`)\n }\n }\n\n get<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId,\n id: string\n ): ResourceMap[ReferenceTypeId] {\n return this._storage.get(\n this.projectKey,\n typeId,\n id,\n {}\n ) as ResourceMap[ReferenceTypeId]\n }\n\n // TODO: Not sure if we want to expose this...\n getRepository<ReferenceTypeId extends keyof RepositoryMap>(\n typeId: ReferenceTypeId\n ): RepositoryMap[ReferenceTypeId] {\n const service = this._services[typeId]\n if (service !== undefined) {\n return service.repository as RepositoryMap[ReferenceTypeId]\n }\n throw new Error('No such repository')\n }\n}\n","export const copyHeaders = (headers: Record<string, string>) => {\n const validHeaders = ['accept', 'host', 'authorization']\n const result: Record<string, string> = {}\n\n Object.entries(headers).forEach(([key, value]) => {\n if (validHeaders.includes(key.toLowerCase())) {\n result[key] = value\n }\n })\n\n return result\n}\n","export const DEFAULT_API_HOSTNAME = /^https:\\/\\/api\\..*?\\.commercetools.com:443$/\nexport const DEFAULT_AUTH_HOSTNAME = /^https:\\/\\/auth\\..*?\\.commercetools.com:443$/\n","import { Update } from '@commercetools/platform-sdk'\nimport { ParsedQs } from 'qs'\nimport { Request, Response, Router } from 'express'\nimport { AbstractResourceRepository } from '../repositories/abstract'\n\nexport default abstract class AbstractService {\n protected abstract getBasePath(): string\n public abstract repository: AbstractResourceRepository\n\n createStatusCode = 201\n\n constructor(parent: Router) {\n this.registerRoutes(parent)\n }\n\n extraRoutes(router: Router) {}\n\n registerRoutes(parent: Router) {\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n // Bind this first since the `/:id` routes are currently a bit to greedy\n this.extraRoutes(router)\n\n router.get('/', this.get.bind(this))\n router.get('/key=:key', this.getWithKey.bind(this)) // same thing goes for the key routes\n router.get('/:id', this.getWithId.bind(this))\n\n router.delete('/key=:key', this.deletewithKey.bind(this))\n router.delete('/:id', this.deletewithId.bind(this))\n\n router.post('/', this.post.bind(this))\n router.post('/key=:key', this.postWithKey.bind(this))\n router.post('/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n get(request: Request, response: Response) {\n const limit = this._parseParam(request.query.limit)\n const offset = this._parseParam(request.query.offset)\n\n const result = this.repository.query(request.params.projectKey, {\n expand: this._parseParam(request.query.expand),\n where: this._parseParam(request.query.where),\n limit: limit !== undefined ? Number(limit) : undefined,\n offset: offset !== undefined ? Number(offset) : undefined,\n })\n return response.status(200).send(result)\n }\n\n getWithId(request: Request, response: Response) {\n const result = this._expandWithId(request, request.params['id'])\n if (!result) {\n return response.status(404).send()\n }\n return response.status(200).send(result)\n }\n\n getWithKey(request: Request, response: Response) {\n const result = this.repository.getByKey(\n request.params.projectKey,\n request.params['key'],\n { expand: this._parseParam(request.query.expand) }\n )\n if (!result) return response.status(404).send()\n return response.status(200).send(result)\n }\n\n deletewithId(request: Request, response: Response) {\n const result = this.repository.delete(\n request.params.projectKey,\n request.params['id'],\n {\n expand: this._parseParam(request.query.expand),\n }\n )\n if (!result) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(result)\n }\n\n deletewithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n post(request: Request, response: Response) {\n const draft = request.body\n const resource = this.repository.create(request.params.projectKey, draft)\n const result = this._expandWithId(request, resource.id)\n return response.status(this.createStatusCode).send(result)\n }\n\n postWithId(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const resource = this.repository.get(\n request.params.projectKey,\n request.params['id']\n )\n if (!resource) {\n return response.status(404).send('Not found')\n }\n\n if (resource.version !== updateRequest.version) {\n return response.status(409).send('Concurrent modification')\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n resource,\n updateRequest.actions\n )\n\n const result = this._expandWithId(request, updatedResource.id)\n return response.status(200).send(result)\n }\n\n postWithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n protected _expandWithId(request: Request, resourceId: string) {\n const result = this.repository.get(request.params.projectKey, resourceId, {\n expand: this._parseParam(request.query.expand),\n })\n return result\n }\n\n // No idea what i'm doing\n private _parseParam(\n value: string | ParsedQs | string[] | ParsedQs[] | undefined\n ): string[] | undefined {\n if (Array.isArray(value)) {\n // @ts-ignore\n return value\n } else if (value !== undefined) {\n return [`${value}`]\n }\n return undefined\n }\n}\n","import {\n BaseResource,\n ConcurrentModificationError,\n Project,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\n\nexport const checkConcurrentModification = (\n resource: BaseResource | Project,\n expectedVersion: number\n) => {\n if (resource.version === expectedVersion) return\n\n const identifier = (<BaseResource>resource).id\n ? (<BaseResource>resource).id\n : (<Project>resource).key\n\n throw new CommercetoolsError<ConcurrentModificationError>(\n {\n message: `Object ${identifier} has a different version than expected. Expected: ${expectedVersion} - Actual: ${resource.version}.`,\n currentVersion: resource.version,\n code: 'ConcurrentModification',\n },\n 409\n )\n}\n","import { RepositoryTypes } from './../types'\nimport deepEqual from 'deep-equal'\n\nimport {\n BaseResource,\n InvalidOperationError,\n Project,\n UpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\n\nexport type QueryParams = {\n expand?: string[]\n where?: string[]\n offset?: number\n limit?: number\n}\n\nexport type GetParams = {\n expand?: string[]\n}\n\nexport abstract class AbstractRepository {\n protected _storage: AbstractStorage\n protected actions: Partial<\n Record<any, (projectKey: string, resource: any, action: any) => void>\n > = {}\n\n constructor(storage: AbstractStorage) {\n this._storage = storage\n }\n\n abstract save(projectKey: string, resource: BaseResource | Project): void\n\n processUpdateActions(\n projectKey: string,\n resource: BaseResource | Project,\n actions: UpdateAction[]\n ): BaseResource {\n // Deep-copy\n const modifiedResource = JSON.parse(JSON.stringify(resource))\n\n actions.forEach(action => {\n const updateFunc = this.actions[action.action]\n if (!updateFunc) {\n console.error(`No mock implemented for update action ${action.action}`)\n return\n }\n updateFunc(projectKey, modifiedResource, action)\n })\n\n if (!deepEqual(modifiedResource, resource)) {\n this.save(projectKey, modifiedResource)\n }\n return modifiedResource\n }\n}\n\nexport abstract class AbstractResourceRepository extends AbstractRepository {\n abstract create(projectKey: string, draft: any): BaseResource\n abstract getTypeId(): RepositoryTypes\n\n constructor(storage: AbstractStorage) {\n super(storage)\n this._storage.assertStorage(this.getTypeId())\n }\n\n query(projectKey: string, params: QueryParams = {}) {\n return this._storage.query(projectKey, this.getTypeId(), {\n expand: params.expand,\n where: params.where,\n offset: params.offset,\n limit: params.limit,\n })\n }\n\n get(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.get(projectKey, this.getTypeId(), id, params)\n }\n\n getByKey(\n projectKey: string,\n key: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.getByKey(projectKey, this.getTypeId(), key, params)\n }\n\n delete(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.delete(projectKey, this.getTypeId(), id, params)\n }\n\n save(projectKey: string, resource: BaseResource) {\n const current = this.get(projectKey, resource.id)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.add(projectKey, this.getTypeId(), resource as any)\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n CustomFields,\n CustomFieldsDraft,\n Money,\n Price,\n PriceDraft,\n Reference,\n ResourceIdentifier,\n Store,\n StoreKeyReference,\n StoreResourceIdentifier,\n Type,\n TypedMoney,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\n\nexport const createCustomFields = (\n draft: CustomFieldsDraft | undefined,\n projectKey: string,\n storage: AbstractStorage\n): CustomFields | undefined => {\n if (!draft) return undefined\n if (!draft.type) return undefined\n if (!draft.type.typeId) return undefined\n if (!draft.fields) return undefined\n\n const typeResource = storage.getByResourceIdentifier(\n projectKey,\n draft.type\n ) as Type\n\n if (!typeResource) {\n throw new Error(\n `No type '${draft.type.typeId}' with id=${draft.type.id} or key=${draft.type.key}`\n )\n }\n\n return {\n type: {\n typeId: draft.type.typeId,\n id: typeResource.id,\n },\n fields: draft.fields,\n }\n}\n\nexport const createPrice = (draft: PriceDraft): Price => {\n return {\n id: uuidv4(),\n value: createTypedMoney(draft.value),\n }\n}\n\nexport const createTypedMoney = (value: Money): TypedMoney => {\n return {\n type: 'centPrecision',\n fractionDigits: 2,\n ...value,\n }\n}\n\nexport const resolveStoreReference = (\n ref: StoreResourceIdentifier | undefined,\n projectKey: string,\n storage: AbstractStorage\n): StoreKeyReference | undefined => {\n if (!ref) return undefined\n const resource = storage.getByResourceIdentifier(projectKey, ref)\n if (!resource) {\n throw new Error('No such store')\n }\n\n const store = resource as Store\n return {\n typeId: 'store',\n key: store.key,\n }\n}\n\nexport const getReferenceFromResourceIdentifier = <T extends Reference>(\n resourceIdentifier: ResourceIdentifier,\n projectKey: string,\n storage: AbstractStorage\n): T => {\n const resource = storage.getByResourceIdentifier(\n projectKey,\n resourceIdentifier\n )\n if (!resource)\n throw new Error(\n `resource type ${resourceIdentifier.typeId} with id ${resourceIdentifier.id} and key ${resourceIdentifier.key} not found`\n )\n\n return ({\n typeId: resourceIdentifier.typeId,\n id: resource?.id,\n } as unknown) as T\n}\n","import {\n CartDiscount,\n CartDiscountChangeIsActiveAction,\n CartDiscountChangeSortOrderAction,\n CartDiscountDraft,\n CartDiscountSetDescriptionAction,\n CartDiscountSetKeyAction,\n CartDiscountSetValidFromAction,\n CartDiscountSetValidFromAndUntilAction,\n CartDiscountSetValidUntilAction,\n CartDiscountUpdateAction,\n CartDiscountValueAbsolute,\n CartDiscountValueDraft,\n CartDiscountValueFixed,\n CartDiscountValueGiftLineItem,\n CartDiscountValueRelative,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createTypedMoney } from './helpers'\n\nexport class CartDiscountRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: CartDiscountDraft): CartDiscount {\n const resource: CartDiscount = {\n ...getBaseResourceProperties(),\n key: draft.key,\n description: draft.description,\n cartPredicate: draft.cartPredicate,\n isActive: draft.isActive || false,\n name: draft.name,\n references: [],\n target: draft.target,\n requiresDiscountCode: draft.requiresDiscountCode || false,\n sortOrder: draft.sortOrder,\n stackingMode: draft.stackingMode || 'Stacking',\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n value: this.transformValueDraft(draft.value),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformValueDraft(value: CartDiscountValueDraft) {\n switch (value.type) {\n case 'absolute': {\n return {\n type: 'absolute',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueAbsolute\n }\n case 'fixed': {\n return {\n type: 'fixed',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueFixed\n }\n case 'giftLineItem': {\n return {\n ...value,\n } as CartDiscountValueGiftLineItem\n }\n case 'relative': {\n return {\n ...value,\n } as CartDiscountValueRelative\n }\n }\n\n return value\n }\n\n actions: Partial<\n Record<\n CartDiscountUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<CartDiscount>,\n action: any\n ) => void\n >\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { key }: CartDiscountSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { description }: CartDiscountSetDescriptionAction\n ) => {\n resource.description = description\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom }: CartDiscountSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validUntil }: CartDiscountSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom, validUntil }: CartDiscountSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n changeSortOrder: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { sortOrder }: CartDiscountChangeSortOrderAction\n ) => {\n resource.sortOrder = sortOrder\n },\n changeIsActive: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { isActive }: CartDiscountChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { CartDiscountRepository } from '../repositories/cart-discount'\n\nexport class CartDiscountService extends AbstractService {\n public repository: CartDiscountRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartDiscountRepository(storage)\n }\n\n getBasePath() {\n return 'cart-discounts'\n }\n}\n","import {\n Cart,\n CartAddLineItemAction,\n CartDraft,\n CartRemoveLineItemAction,\n CartSetBillingAddressAction,\n CartSetCountryAction,\n CartSetCustomerEmailAction,\n CartSetCustomFieldAction,\n CartSetCustomTypeAction,\n CartSetLocaleAction,\n CartSetShippingAddressAction,\n GeneralError,\n LineItem,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { v4 as uuidv4 } from 'uuid'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class CartRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart'\n }\n\n create(projectKey: string, draft: CartDraft): Cart {\n const resource: Cart = {\n ...getBaseResourceProperties(),\n cartState: 'Active',\n lineItems: [],\n customLineItems: [],\n totalPrice: {\n type: 'centPrecision',\n centAmount: 0,\n currencyCode: draft.currency,\n fractionDigits: 0,\n },\n taxMode: 'Platform',\n taxRoundingMode: 'HalfEven',\n taxCalculationMode: 'LineItemLevel',\n refusedGifts: [],\n origin: 'Customer',\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n getActiveCart(projectKey: string): Cart | undefined {\n // Get first active cart\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: [`cartState=\"Active\"`],\n })\n if (results.count > 0) {\n return results.results[0] as Cart\n }\n\n return\n }\n\n actions = {\n addLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { productId, variantId, sku, quantity = 1 }: CartAddLineItemAction\n ) => {\n let product: Product | null = null\n let variant: ProductVariant | undefined\n\n if (productId && variantId) {\n // Fetch product and variant by ID\n product = this._storage.get(projectKey, 'product', productId, {})\n } else if (sku) {\n // Fetch product and variant by SKU\n const items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${sku}\"))) or masterData(current(variants(sku=\"${sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count === 1) {\n product = items.results[0]\n }\n }\n\n if (!product) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A product containing a variant with SKU '${sku}' not found.`\n : `A product with ID '${productId}' not found.`,\n })\n }\n\n // Find matching variant\n variant = [\n product.masterData.current.masterVariant,\n ...product.masterData.current.variants,\n ].find(x => {\n if (sku) return x.sku === sku\n if (variantId) return x.id === variantId\n return false\n })\n\n if (!variant) {\n // Check if variant is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A variant with SKU '${sku}' for product '${product.id}' not found.`\n : `A variant with ID '${variantId}' for product '${product.id}' not found.`,\n })\n }\n\n const alreadyAdded = resource.lineItems.some(\n x => x.productId === product?.id && x.variant.id === variant?.id\n )\n if (alreadyAdded) {\n // increase quantity and update total price\n resource.lineItems.map(x => {\n if (x.productId === product?.id && x.variant.id === variant?.id) {\n x.quantity += quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n } else {\n // add line item\n if (!variant.prices?.length) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product with ID '${productId}' doesn't have any prices.`,\n })\n }\n\n const price = variant.prices[0]\n resource.lineItems.push({\n id: uuidv4(),\n productId: product.id,\n productKey: product.key,\n name: product.masterData.current.name,\n productSlug: product.masterData.current.slug,\n productType: product.productType,\n variant,\n price: price,\n totalPrice: {\n ...price.value,\n centAmount: price.value.centAmount * quantity,\n },\n quantity,\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n priceMode: 'Platform',\n state: [],\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n removeLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { lineItemId, quantity }: CartRemoveLineItemAction\n ) => {\n const lineItem = resource.lineItems.find(x => x.id === lineItemId)\n if (!lineItem) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A line item with ID '${lineItemId}' not found.`,\n })\n }\n\n const shouldDelete = !quantity || quantity >= lineItem.quantity\n if (shouldDelete) {\n // delete line item\n resource.lineItems = resource.lineItems.filter(x => x.id !== lineItemId)\n } else {\n // decrease quantity and update total price\n resource.lineItems.map(x => {\n if (x.id === lineItemId && quantity) {\n x.quantity -= quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCountry: (\n projectKey: string,\n resource: Writable<Cart>,\n { country }: CartSetCountryAction\n ) => {\n resource.country = country\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Cart>,\n { email }: CartSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Cart,\n { name, value }: CartSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Cart>,\n { type, fields }: CartSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Cart>,\n { locale }: CartSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n }\n}\n\nconst calculateLineItemTotalPrice = (lineItem: LineItem): number =>\n lineItem.price!.value.centAmount * lineItem.quantity\n\nconst calculateCartTotalPrice = (cart: Cart): number =>\n cart.lineItems.reduce((cur, item) => cur + item.totalPrice.centAmount, 0)\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CartRepository } from '../repositories/cart'\nimport { AbstractStorage } from '../storage'\n\nexport class CartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'carts'\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n Category,\n CategoryChangeAssetNameAction,\n CategoryChangeSlugAction,\n CategoryDraft,\n CategorySetAssetDescriptionAction,\n CategorySetAssetSourcesAction,\n CategorySetDescriptionAction,\n CategorySetKeyAction,\n CategorySetMetaDescriptionAction,\n CategorySetMetaKeywordsAction,\n CategorySetMetaTitleAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { createCustomFields } from './helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'category'\n }\n\n create(projectKey: string, draft: CategoryDraft): Category {\n const resource: Category = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n slug: draft.slug,\n orderHint: draft.orderHint || '',\n parent: draft.parent\n ? { typeId: 'category', id: draft.parent.id! }\n : undefined,\n ancestors: [], // TODO\n assets:\n draft.assets?.map(d => {\n return {\n id: uuidv4(),\n name: d.name,\n description: d.description,\n sources: d.sources,\n tags: d.tags,\n key: d.key,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n }) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeAssetName: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, name }: CategoryChangeAssetNameAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.name = name\n }\n if (assetKey && assetKey == asset.key) {\n asset.name = name\n }\n })\n },\n changeSlug: (\n projectKey: string,\n resource: Writable<Category>,\n { slug }: CategoryChangeSlugAction\n ) => {\n resource.slug = slug\n },\n setKey: (\n projectKey: string,\n resource: Writable<Category>,\n { key }: CategorySetKeyAction\n ) => {\n resource.key = key\n },\n setAssetDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, description }: CategorySetAssetDescriptionAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.description = description\n }\n if (assetKey && assetKey == asset.key) {\n asset.description = description\n }\n })\n },\n setAssetSources: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, sources }: CategorySetAssetSourcesAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.sources = sources\n }\n if (assetKey && assetKey == asset.key) {\n asset.sources = sources\n }\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { description }: CategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setMetaDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { metaDescription }: CategorySetMetaDescriptionAction\n ) => {\n resource.metaDescription = metaDescription\n },\n setMetaKeywords: (\n projectKey: string,\n resource: Writable<Category>,\n { metaKeywords }: CategorySetMetaKeywordsAction\n ) => {\n resource.metaKeywords = metaKeywords\n },\n setMetaTitle: (\n projectKey: string,\n resource: Writable<Category>,\n { metaTitle }: CategorySetMetaTitleAction\n ) => {\n resource.metaTitle = metaTitle\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CategoryRepository } from '../repositories/category'\n\nexport class CategoryServices extends AbstractService {\n public repository: CategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CategoryRepository(storage)\n }\n\n getBasePath() {\n return 'categories'\n }\n}\n","import {\n Channel,\n ChannelDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ChannelRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'channel'\n }\n\n create(projectKey: string, draft: ChannelDraft): Channel {\n const resource: Channel = {\n ...getBaseResourceProperties(),\n key: draft.key,\n roles: draft.roles || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { ChannelRepository } from '../repositories/channel'\nimport { AbstractStorage } from '../storage'\n\nexport class ChannelService extends AbstractService {\n public repository: ChannelRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ChannelRepository(storage)\n }\n\n getBasePath() {\n return 'channels'\n }\n}\n","import {\n CustomerGroup,\n CustomerGroupChangeNameAction,\n CustomerGroupDraft,\n CustomerGroupSetKeyAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerGroupRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerGroupDraft): CustomerGroup {\n const resource: CustomerGroup = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.groupName,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n setKey: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { key }: CustomerGroupSetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { name }: CustomerGroupChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerGroupRepository } from '../repositories/customer-group'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerGroupService extends AbstractService {\n public repository: CustomerGroupRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerGroupRepository(storage)\n }\n\n getBasePath() {\n return 'customer-groups'\n }\n}\n","import {\n Customer,\n CustomerDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerDraft): Customer {\n const resource: Customer = {\n ...getBaseResourceProperties(),\n email: draft.email,\n password: Buffer.from(draft.password).toString('base64'),\n isEmailVerified: draft.isEmailVerified || false,\n addresses: [],\n }\n this.save(projectKey, resource)\n return resource\n }\n getMe(projectKey: string): Customer | undefined {\n const results = this._storage.query(projectKey, this.getTypeId(), {}) // grab the first customer you can find\n if (results.count > 0) {\n return results.results[0] as Customer\n }\n\n return\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerRepository } from '../repositories/customer'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerService extends AbstractService {\n public repository: CustomerRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerRepository(storage)\n }\n\n getBasePath() {\n return 'customers'\n }\n}\n","import {\n CustomObject,\n CustomObjectDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { checkConcurrentModification } from './errors'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\n\nexport class CustomObjectRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'key-value-document'\n }\n\n create(projectKey: string, draft: Writable<CustomObjectDraft>): CustomObject {\n const current = this.getWithContainerAndKey(\n projectKey,\n draft.container,\n draft.key\n )\n\n const baseProperties = getBaseResourceProperties()\n if (current) {\n baseProperties.id = current.id\n\n if (!draft.version) {\n draft.version = current.version\n }\n\n checkConcurrentModification(current, draft.version)\n if (draft.value === current.value) {\n return current\n }\n\n baseProperties.version = current.version\n } else {\n if (draft.version) {\n baseProperties.version = draft.version\n }\n }\n\n const resource: CustomObject = {\n ...baseProperties,\n container: draft.container,\n key: draft.key,\n value: draft.value,\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n getWithContainerAndKey(projectKey: string, container: string, key: string) {\n const items = this._storage.all(projectKey, this.getTypeId()) as Array<\n CustomObject\n >\n return items.find(item => item.container === container && item.key === key)\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { CustomObjectRepository } from '../repositories/custom-object'\nimport { AbstractStorage } from '../storage'\nimport { CustomObjectDraft } from '@commercetools/platform-sdk'\n\nexport class CustomObjectService extends AbstractService {\n public repository: CustomObjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomObjectRepository(storage)\n }\n\n getBasePath() {\n return 'custom-objects'\n }\n\n extraRoutes(router: Router) {\n router.get('/:container/:key', this.getWithContainerAndKey.bind(this))\n router.post('/:container/:key', this.createWithContainerAndKey.bind(this))\n router.delete('/:container/:key', this.deleteWithContainerAndKey.bind(this))\n }\n\n getWithContainerAndKey(request: Request, response: Response) {\n const result = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!result) {\n return response.status(404).send('Not Found')\n }\n return response.status(200).send(result)\n }\n\n createWithContainerAndKey(request: Request, response: Response) {\n const draft: CustomObjectDraft = {\n ...request.body,\n key: request.params.key,\n container: request.params.container,\n }\n\n const result = this.repository.create(request.params.projectKey, draft)\n return response.status(200).send(result)\n }\n\n deleteWithContainerAndKey(request: Request, response: Response) {\n const current = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!current) {\n return response.status(404).send('Not Found')\n }\n\n const result = this.repository.delete(request.params.projectKey, current.id)\n\n return response.status(200).send(result)\n }\n}\n","import {\n CartDiscountReference,\n DiscountCode,\n DiscountCodeChangeCartDiscountsAction,\n DiscountCodeChangeIsActiveAction,\n DiscountCodeDraft,\n DiscountCodeSetCartPredicateAction,\n DiscountCodeSetDescriptionAction,\n DiscountCodeSetMaxApplicationsAction,\n DiscountCodeSetMaxApplicationsPerCustomerAction,\n DiscountCodeSetNameAction,\n DiscountCodeSetValidFromAction,\n DiscountCodeSetValidFromAndUntilAction,\n DiscountCodeSetValidUntilAction,\n DiscountCodeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class DiscountCodeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: DiscountCodeDraft): DiscountCode {\n const resource: DiscountCode = {\n ...getBaseResourceProperties(),\n applicationVersion: 1,\n cartDiscounts: draft.cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n ),\n cartPredicate: draft.cartPredicate,\n code: draft.code,\n description: draft.description,\n groups: draft.groups || [],\n isActive: draft.isActive || true,\n name: draft.name,\n references: [],\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n maxApplications: draft.maxApplications,\n maxApplicationsPerCustomer: draft.maxApplicationsPerCustomer,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n DiscountCodeUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<DiscountCode>,\n action: any\n ) => void\n >\n > = {\n changeIsActive: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { isActive }: DiscountCodeChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n changeCartDiscounts: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartDiscounts }: DiscountCodeChangeCartDiscountsAction\n ) => {\n resource.cartDiscounts = cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n )\n },\n setDescription: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { description }: DiscountCodeSetDescriptionAction\n ) => {\n resource.description = description\n },\n setCartPredicate: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartPredicate }: DiscountCodeSetCartPredicateAction\n ) => {\n resource.cartPredicate = cartPredicate\n },\n setName: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { name }: DiscountCodeSetNameAction\n ) => {\n resource.name = name\n },\n setMaxApplications: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { maxApplications }: DiscountCodeSetMaxApplicationsAction\n ) => {\n resource.maxApplications = maxApplications\n },\n setMaxApplicationsPerCustomer: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n {\n maxApplicationsPerCustomer,\n }: DiscountCodeSetMaxApplicationsPerCustomerAction\n ) => {\n resource.maxApplicationsPerCustomer = maxApplicationsPerCustomer\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom }: DiscountCodeSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validUntil }: DiscountCodeSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom, validUntil }: DiscountCodeSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { DiscountCodeRepository } from '../repositories/discount-code'\n\nexport class DiscountCodeService extends AbstractService {\n public repository: DiscountCodeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new DiscountCodeRepository(storage)\n }\n\n getBasePath() {\n return 'discount-codes'\n }\n}\n","import {\n Extension,\n ExtensionChangeDestinationAction,\n ExtensionChangeTriggersAction,\n ExtensionDraft,\n ExtensionSetKeyAction,\n ExtensionSetTimeoutInMsAction,\n ExtensionUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ExtensionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'extension'\n }\n\n create(projectKey: string, draft: ExtensionDraft): Extension {\n const resource: Extension = {\n ...getBaseResourceProperties(),\n key: draft.key,\n timeoutInMs: draft.timeoutInMs,\n destination: draft.destination,\n triggers: draft.triggers,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Record<\n ExtensionUpdateAction['action'],\n (projectKey: string, resource: Writable<Extension>, action: any) => void\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<Extension>,\n { key }: ExtensionSetKeyAction\n ) => {\n resource.key = key\n },\n setTimeoutInMs: (\n projectKey: string,\n resource: Writable<Extension>,\n { timeoutInMs }: ExtensionSetTimeoutInMsAction\n ) => {\n resource.timeoutInMs = timeoutInMs\n },\n changeTriggers: (\n projectKey: string,\n resource: Writable<Extension>,\n { triggers }: ExtensionChangeTriggersAction\n ) => {\n resource.triggers = triggers\n },\n changeDestination: (\n projectKey: string,\n resource: Writable<Extension>,\n { destination }: ExtensionChangeDestinationAction\n ) => {\n resource.destination = destination\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ExtensionRepository } from '../repositories/extension'\n\nexport class ExtensionServices extends AbstractService {\n public repository: ExtensionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ExtensionRepository(storage)\n }\n\n getBasePath() {\n return 'extensions'\n }\n}\n","import {\n InventoryEntry,\n InventoryEntryChangeQuantityAction,\n InventoryEntryDraft,\n InventoryEntrySetCustomFieldAction,\n InventoryEntrySetCustomTypeAction,\n InventoryEntrySetExpectedDeliveryAction,\n InventoryEntrySetRestockableInDaysAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\n\nexport class InventoryEntryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'inventory-entry'\n }\n\n create(projectKey: string, draft: InventoryEntryDraft): InventoryEntry {\n const resource: InventoryEntry = {\n ...getBaseResourceProperties(),\n sku: draft.sku,\n quantityOnStock: draft.quantityOnStock,\n availableQuantity: draft.quantityOnStock,\n expectedDelivery: draft.expectedDelivery,\n restockableInDays: draft.restockableInDays,\n supplyChannel: {\n ...draft.supplyChannel,\n typeId: 'channel',\n id: draft.supplyChannel?.id ?? '',\n },\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeQuantity: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { quantity }: InventoryEntryChangeQuantityAction\n ) => {\n resource.quantityOnStock = quantity\n // don't know active reservations so just set to same value\n resource.availableQuantity = quantity\n },\n setExpectedDelivery: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { expectedDelivery }: InventoryEntrySetExpectedDeliveryAction\n ) => {\n resource.expectedDelivery = new Date(expectedDelivery!).toISOString()\n },\n setCustomField: (\n projectKey: string,\n resource: InventoryEntry,\n { name, value }: InventoryEntrySetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { type, fields }: InventoryEntrySetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setRestockableInDays: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { restockableInDays }: InventoryEntrySetRestockableInDaysAction\n ) => {\n resource.restockableInDays = restockableInDays\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { InventoryEntryRepository } from '../repositories/inventory-entry'\n\nexport class InventoryEntryService extends AbstractService {\n public repository: InventoryEntryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new InventoryEntryRepository(storage)\n }\n\n getBasePath() {\n return 'inventory'\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CartRepository } from '../repositories/cart'\n\nexport class MyCartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'me'\n }\n\n registerRoutes(parent: Router) {\n // Overwrite this function to be able to handle /me/active-cart path.\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n this.extraRoutes(router)\n\n router.get('/active-cart', this.activeCart.bind(this))\n router.get('/carts/', this.get.bind(this))\n router.get('/carts/:id', this.getWithId.bind(this))\n\n router.delete('/carts/:id', this.deletewithId.bind(this))\n\n router.post('/carts/', this.post.bind(this))\n router.post('/carts/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n activeCart(request: Request, response: Response) {\n const resource = this.repository.getActiveCart(request.params.projectKey)\n if (!resource) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(resource)\n }\n}\n","import {\n Payment,\n PaymentAddTransactionAction,\n PaymentDraft,\n PaymentSetCustomFieldAction,\n PaymentSetCustomTypeAction,\n ReferenceTypeId,\n StateReference,\n TransactionDraft,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport { getBaseResourceProperties } from '../helpers'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from '../types'\n\nexport class PaymentRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'payment'\n }\n\n create(projectKey: string, draft: PaymentDraft): Payment {\n const resource: Payment = {\n ...getBaseResourceProperties(),\n amountPlanned: createTypedMoney(draft.amountPlanned),\n paymentMethodInfo: draft.paymentMethodInfo!,\n paymentStatus: draft.paymentStatus\n ? {\n ...draft.paymentStatus,\n state: draft.paymentStatus.state\n ? getReferenceFromResourceIdentifier<StateReference>(\n draft.paymentStatus.state,\n projectKey,\n this._storage\n )\n : undefined,\n }\n : {},\n transactions: (draft.transactions || []).map(t =>\n this.transactionFromTransactionDraft(t, projectKey)\n ),\n interfaceInteractions: (draft.interfaceInteractions || []).map(\n interaction =>\n createCustomFields(interaction, projectKey, this._storage)!\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n transactionFromTransactionDraft = (\n draft: TransactionDraft,\n projectKey: string\n ) => ({\n ...draft,\n id: uuidv4(),\n amount: createTypedMoney(draft.amount),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n })\n\n actions = {\n setCustomField: (\n projectKey: string,\n resource: Payment,\n { name, value }: PaymentSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Payment>,\n { type, fields }: PaymentSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n addTransaction: (\n projectKey: string,\n resource: Writable<Payment>,\n { transaction }: PaymentAddTransactionAction\n ) => {\n resource.transactions = [\n ...resource.transactions,\n this.transactionFromTransactionDraft(transaction, projectKey),\n ]\n },\n // addInterfaceInteraction: () => {},\n // changeAmountPlanned: () => {},\n // changeTransactionInteractionId: () => {},\n // changeTransactionState: () => {},\n // changeTransactionTimestamp: () => {},\n // setAmountPaid: () => {},\n // setAmountRefunded: () => {},\n // setAnonymousId: () => {},\n // setAuthorization: () => {},\n // setCustomer: () => {},\n // setExternalId: () => {},\n // setInterfaceId: () => {},\n // setKey: () => {},\n // setMethodInfoInterface: () => {},\n // setMethodInfoMethod: () => {},\n // setMethodInfoName: () => {},\n // setStatusInterfaceCode: () => {},\n // setStatusInterfaceText: () => {},\n // transitionState: () => {},\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class MyPaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'me/payments'\n }\n}\n","import assert from 'assert'\nimport {\n Cart,\n CustomLineItem,\n CustomLineItemDraft,\n GeneralError,\n LineItem,\n LineItemImportDraft,\n Order,\n OrderAddPaymentAction,\n OrderChangeOrderStateAction,\n OrderChangePaymentStateAction,\n OrderFromCartDraft,\n OrderImportDraft,\n OrderSetBillingAddressAction,\n OrderSetCustomerEmailAction,\n OrderSetCustomFieldAction,\n OrderSetCustomTypeAction,\n OrderSetLocaleAction,\n OrderSetOrderNumberAction,\n OrderSetShippingAddressAction,\n OrderSetStoreAction,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n Store,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository, QueryParams } from './abstract'\nimport {\n createCustomFields,\n createPrice,\n createTypedMoney,\n resolveStoreReference,\n} from './helpers'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class OrderRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'order'\n }\n\n create(projectKey: string, draft: OrderFromCartDraft): Order {\n assert(draft.cart, 'draft.cart is missing')\n\n const cart = this._storage.getByResourceIdentifier(\n projectKey,\n draft.cart\n ) as Cart | null\n if (!cart) {\n throw new Error('Cannot find cart')\n }\n\n const resource: Order = {\n ...getBaseResourceProperties(),\n orderNumber: draft.orderNumber,\n orderState: 'Open',\n lineItems: [],\n customLineItems: [],\n totalPrice: cart.totalPrice,\n refusedGifts: [],\n origin: 'Customer',\n syncInfo: [],\n lastMessageSequenceNumber: 0,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n import(projectKey: string, draft: OrderImportDraft): Order {\n // TODO: Check if order with given orderNumber already exists\n assert(this, 'OrderRepository not valid')\n const resource: Order = {\n ...getBaseResourceProperties(),\n\n billingAddress: draft.billingAddress,\n shippingAddress: draft.shippingAddress,\n\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n customerEmail: draft.customerEmail,\n lastMessageSequenceNumber: 0,\n orderNumber: draft.orderNumber,\n orderState: draft.orderState || 'Open',\n origin: draft.origin || 'Customer',\n paymentState: draft.paymentState,\n refusedGifts: [],\n store: resolveStoreReference(draft.store, projectKey, this._storage),\n syncInfo: [],\n\n lineItems:\n draft.lineItems?.map(item =>\n this.lineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n customLineItems:\n draft.customLineItems?.map(item =>\n this.customLineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n\n totalPrice: {\n type: 'centPrecision',\n ...draft.totalPrice,\n fractionDigits: 2,\n },\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private lineItemFromImportDraft(\n projectKey: string,\n draft: LineItemImportDraft\n ): LineItem {\n let product: Product\n let variant: ProductVariant | undefined\n\n if (draft.variant.sku) {\n variant = {\n id: 0,\n sku: draft.variant.sku,\n }\n\n var items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${draft.variant.sku}\"))) or masterData(current(variants(sku=\"${draft.variant.sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count !== 1) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,\n })\n }\n\n product = items.results[0]\n if (product.masterData.current.masterVariant.sku === draft.variant.sku) {\n variant = product.masterData.current.masterVariant\n } else {\n variant = product.masterData.current.variants.find(\n v => v.sku === draft.variant.sku\n )\n }\n if (!variant) {\n throw new Error('Internal state error')\n }\n } else {\n throw new Error('No product found')\n }\n\n const lineItem: LineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n name: draft.name,\n price: createPrice(draft.price),\n priceMode: 'Platform',\n productId: product.id,\n productType: product.productType,\n quantity: draft.quantity,\n state: draft.state || [],\n taxRate: draft.taxRate,\n totalPrice: createTypedMoney(draft.price.value),\n variant: {\n id: variant.id,\n sku: variant.sku,\n price: createPrice(draft.price),\n },\n }\n\n return lineItem\n }\n\n private customLineItemFromImportDraft(\n projectKey: string,\n draft: CustomLineItemDraft\n ): CustomLineItem {\n const lineItem: CustomLineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n money: createTypedMoney(draft.money),\n name: draft.name,\n quantity: draft.quantity,\n slug: draft.slug,\n state: [],\n totalPrice: createTypedMoney(draft.money),\n }\n\n return lineItem\n }\n\n getWithOrderNumber(\n projectKey: string,\n orderNumber: string,\n params: QueryParams = {}\n ): Order | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n ...params,\n where: [`orderNumber=\"${orderNumber}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as Order\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate order numbers')\n }\n\n return\n }\n\n actions = {\n addPayment: (\n projectKey: string,\n resource: Writable<Order>,\n { payment }: OrderAddPaymentAction\n ) => {\n const resolvedPayment = this._storage.getByResourceIdentifier(\n projectKey,\n payment\n )\n if (!resolvedPayment) {\n throw new Error(`Payment ${payment.id} not found`)\n }\n\n if (!resource.paymentInfo) {\n resource.paymentInfo = {\n payments: [],\n }\n }\n\n resource.paymentInfo.payments.push({\n typeId: 'payment',\n id: payment.id!,\n })\n },\n changeOrderState: (\n projectKey: string,\n resource: Writable<Order>,\n { orderState }: OrderChangeOrderStateAction\n ) => {\n resource.orderState = orderState\n },\n changePaymentState: (\n projectKey: string,\n resource: Writable<Order>,\n { paymentState }: OrderChangePaymentStateAction\n ) => {\n resource.paymentState = paymentState\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Order>,\n { email }: OrderSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Order,\n { name, value }: OrderSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Order>,\n { type, fields }: OrderSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Order>,\n { locale }: OrderSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setOrderNumber: (\n projectKey: string,\n resource: Writable<Order>,\n { orderNumber }: OrderSetOrderNumberAction\n ) => {\n resource.orderNumber = orderNumber\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n setStore: (\n projectKey: string,\n resource: Writable<Order>,\n { store }: OrderSetStoreAction\n ) => {\n if (!store) return\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n store\n )\n if (!resolvedType) {\n throw new Error(`No store found with key=${store.key}`)\n }\n\n const storeReference = resolvedType as Store\n resource.store = {\n typeId: 'store',\n key: storeReference.key,\n }\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { OrderRepository } from '../repositories/order'\nimport { AbstractStorage } from '../storage'\n\nexport class OrderService extends AbstractService {\n public repository: OrderRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new OrderRepository(storage)\n }\n\n getBasePath() {\n return 'orders'\n }\n\n extraRoutes(router: Router) {\n router.post('/import', this.import.bind(this))\n router.get('/order-number=:orderNumber', this.getWithOrderNumber.bind(this))\n }\n\n import(request: Request, response: Response) {\n const importDraft = request.body\n const resource = this.repository.import(\n request.params.projectKey,\n importDraft\n )\n return response.status(200).send(resource)\n }\n\n getWithOrderNumber(request: Request, response: Response) {\n const resource = this.repository.getWithOrderNumber(\n request.params.projectKey,\n request.params.orderNumber,\n request.query\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class PaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'payments'\n }\n}\n","export const parseFilterExpression = (filter: string | string[]) => {\n if (typeof filter === 'object') {\n const filters = filter.map(parse)\n return filters.join(' and ')\n }\n return parse(filter)\n}\n\nconst parse = (filter: string) => {\n let parsed = filter.replace(/:/g, '=')\n\n do {\n parsed = parsed.replace(/(.*)\\.(.*)=(.*)$/g, '$1($2=$3)')\n } while (parsed.includes('.'))\n\n return parsed\n}\n","import { ParsedQs } from 'qs'\nimport {\n ProductDraft,\n ProductProjection,\n ProductVariant,\n ProductVariantDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { RepositoryTypes } from '../types'\nimport { parseFilterExpression } from '../lib/filterParser'\n\nexport class ProductProjectionRepository extends AbstractResourceRepository {\n getTypeId(): RepositoryTypes {\n return 'product-projection'\n }\n\n create(projectKey: string, draft: ProductDraft): ProductProjection {\n if (!draft.masterVariant) {\n throw new Error(\n `must provider mastervariant for product projection with key ${draft.key}`\n )\n }\n\n if (!draft.productType.id) {\n throw new Error(\n `must provider product type id for product projection with key ${draft.key}`\n )\n }\n\n const resource: ProductProjection = {\n ...getBaseResourceProperties(),\n name: draft.name,\n slug: draft.slug,\n categories: [],\n productType: { ...draft.productType, id: draft.productType.id! },\n masterVariant: variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants?.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }) ?? [],\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n search(projectKey: string, query: ParsedQs) {\n const filter = (query['filter.query'] ?? query.filter) as any\n const wherePredicate = filter ? parseFilterExpression(filter) : undefined\n\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: wherePredicate,\n offset: query.offset ? Number(query.offset) : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\n }) //TODO: this is a partial implementation, but I don't really have the time to implement an actual search API right now\n\n return results\n }\n\n actions = {}\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n }\n}\n","import { ProductProjectionRepository } from './../repositories/product-projection'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ProductProjectionService extends AbstractService {\n public repository: ProductProjectionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductProjectionRepository(storage)\n }\n\n getBasePath() {\n return 'product-projections'\n }\n\n extraRoutes(router: Router) {\n router.get('/search', this.search.bind(this))\n }\n\n search(request: Request, response: Response) {\n const resource = this.repository.search(\n request.params.projectKey,\n request.query\n )\n return response.status(200).send(resource)\n }\n}\n","import {\n Price,\n Product,\n ProductData,\n ProductDraft,\n ProductPublishAction,\n ProductSetAttributeAction,\n ProductVariant,\n ProductVariantDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\n\nexport class ProductRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product'\n }\n\n create(projectKey: string, draft: ProductDraft): Product {\n const productData = {\n name: draft.name,\n slug: draft.slug,\n categories: [],\n masterVariant:\n draft.masterVariant && variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants &&\n draft.variants.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }),\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n const resource: Product = {\n ...getBaseResourceProperties(),\n masterData: {\n // @ts-ignore\n current: draft.publish ? productData : undefined,\n // @ts-ignore\n staged: draft.publish ? undefined : productData,\n hasStagedChanges: draft.publish ?? true,\n published: draft.publish ?? false,\n },\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n actions = {\n publish: (\n projectKey: string,\n resource: Writable<Product>,\n { scope }: ProductPublishAction\n ) => {\n if (resource.masterData.staged) {\n resource.masterData.current = resource.masterData.staged\n // @ts-ignore\n resource.masterData.staged = undefined\n }\n resource.masterData.hasStagedChanges = false\n resource.masterData.published = true\n },\n setAttribute: (\n projectKey: string,\n resource: Writable<Product>,\n { variantId, sku, name, value, staged }: ProductSetAttributeAction\n ) => {\n const isStaged = staged !== undefined ? staged : false\n const productData = getProductData(resource, isStaged)\n const { variant, isMasterVariant, variantIndex } = getVariant(\n productData,\n variantId,\n sku\n )\n if (!variant) {\n throw new Error(\n `Variant with id ${variantId} or sku ${sku} not found on product ${resource.id}`\n )\n }\n\n if (!variant.attributes) {\n variant.attributes = []\n }\n\n const existingAttr = variant.attributes.find(attr => attr.name === name)\n if (existingAttr) {\n existingAttr.value = value\n } else {\n variant.attributes.push({\n name,\n value,\n })\n }\n if (isStaged) {\n resource.masterData.staged = productData\n if (isMasterVariant) {\n resource.masterData.staged.masterVariant = variant\n } else {\n resource.masterData.staged.variants[variantIndex] = variant\n }\n resource.masterData.hasStagedChanges = true\n } else {\n resource.masterData.current = productData\n if (isMasterVariant) {\n resource.masterData.current.masterVariant = variant\n } else {\n resource.masterData.current.variants[variantIndex] = variant\n }\n }\n },\n // 'setKey': () => {},\n // 'changeName': () => {},\n // 'setDescription': () => {},\n // 'changeSlug': () => {},\n // 'addVariant': () => {},\n // 'removeVariant': () => {},\n // 'changeMasterVariant': () => {},\n // 'addPrice': () => {},\n // 'setPrices': () => {},\n // 'changePrice': () => {},\n // 'removePrice': () => {},\n // 'setProductPriceCustomType': () => {},\n // 'setProductPriceCustomField': () => {},\n // 'setDiscountedPrice': () => {},\n // 'setAttributeInAllVariants': () => {},\n // 'addToCategory': () => {},\n // 'setCategoryOrderHint': () => {},\n // 'removeFromCategory': () => {},\n // 'setTaxCategory': () => {},\n // 'setSku': () => {},\n // 'setProductVariantKey': () => {},\n // 'addExternalImage': () => {},\n // 'moveImageToPosition': () => {},\n // 'removeImage': () => {},\n // 'setImageLabel': () => {},\n // 'addAsset': () => {},\n // 'removeAsset': () => {},\n // 'setAssetKey': () => {},\n // 'changeAssetOrder': () => {},\n // 'changeAssetName': () => {},\n // 'setAssetDescription': () => {},\n // 'setAssetTags': () => {},\n // 'setAssetSources': () => {},\n // 'setAssetCustomType': () => {},\n // 'setAssetCustomField': () => {},\n // 'setSearchKeywords': () => {},\n // 'setMetaTitle': () => {},\n // 'setMetaDescription': () => {},\n // 'setMetaKeywords': () => {},\n // 'revertStagedChanges': () => {},\n // 'revertStagedVariantChanges': () => {},\n // 'unpublish': () => {},\n // 'transitionState': () => {},\n }\n}\n\nconst getProductData = (product: Product, staged: boolean) => {\n if (!staged && product.masterData.current) {\n return product.masterData.current\n }\n return product.masterData.staged\n}\n\ninterface VariantResult {\n variant: Writable<ProductVariant> | undefined\n isMasterVariant: boolean\n variantIndex: number\n}\n\nconst getVariant = (\n productData: ProductData,\n variantId?: number,\n sku?: string\n): VariantResult => {\n const variants = [productData.masterVariant, ...productData.variants]\n const foundVariant = variants.find((variant: ProductVariant) => {\n if (variantId) {\n return variant.id === variantId\n }\n if (sku) {\n return variant.sku === sku\n }\n return false\n })\n\n const isMasterVariant = foundVariant === productData.masterVariant\n return {\n variant: foundVariant,\n isMasterVariant,\n variantIndex:\n !isMasterVariant && foundVariant\n ? productData.variants.indexOf(foundVariant)\n : -1,\n }\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n prices: variant?.prices as Price[],\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProductRepository } from '../repositories/product'\n\nexport class ProductService extends AbstractService {\n public repository: ProductRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductRepository(storage)\n }\n\n getBasePath() {\n return 'products'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport {\n AttributeDefinition,\n AttributeDefinitionDraft,\n AttributeType,\n ProductType,\n ProductTypeChangeLabelAction,\n ProductTypeChangeLocalizedEnumValueLabelAction,\n ProductTypeDraft,\n ProductTypeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class ProductTypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product-type'\n }\n\n create(projectKey: string, draft: ProductTypeDraft): ProductType {\n const resource: ProductType = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n description: draft.description,\n attributes: (draft.attributes ?? []).map(a =>\n this.attributeDefinitionFromAttributeDefinitionDraft(projectKey, a)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n attributeDefinitionFromAttributeDefinitionDraft = (\n _projectKey: string,\n draft: AttributeDefinitionDraft\n ): AttributeDefinition => ({\n ...draft,\n attributeConstraint: draft.attributeConstraint ?? 'None',\n inputHint: draft.inputHint ?? 'SingleLine',\n isSearchable: draft.isSearchable ?? true,\n })\n\n getWithKey(projectKey: string, key: string): ProductType | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as ProductType\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate product type key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n ProductTypeUpdateAction['action'],\n (projectKey: string, resource: Writable<ProductType>, action: any) => void\n >\n > = {\n changeLocalizedEnumValueLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n {\n attributeName,\n newValue,\n }: ProductTypeChangeLocalizedEnumValueLabelAction\n ) => {\n const updateAttributeType = (type: Writable<AttributeType>) => {\n switch (type.name) {\n case 'lenum':\n type.values.forEach(v => {\n if (v.key == newValue.key) {\n v.label = newValue.label\n }\n })\n return\n case 'set':\n updateAttributeType(type.elementType)\n return\n }\n }\n\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n updateAttributeType(value.type)\n }\n })\n },\n changeLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n { attributeName, label }: ProductTypeChangeLabelAction\n ) => {\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n value.label = label\n }\n })\n },\n }\n}\n","import { ProductTypeRepository } from '../repositories/product-type'\nimport AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ProductTypeService extends AbstractService {\n public repository: ProductTypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductTypeRepository(storage)\n }\n\n getBasePath() {\n return 'product-types'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import { json } from 'express'\n\nexport const maskSecretValue = <T>(resource: T, path: string): T => {\n const parts = path.split('.')\n const clone = JSON.parse(JSON.stringify(resource))\n let val = clone\n\n const target = parts.pop()\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n val = val[part]\n\n if (val == undefined) {\n return resource\n }\n }\n\n if (val && target && val[target]) {\n val[target] = '****'\n }\n return clone\n}\n","import {\n Project,\n ProjectChangeCartsConfigurationAction,\n ProjectChangeCountriesAction,\n ProjectChangeCountryTaxRateFallbackEnabledAction,\n ProjectChangeCurrenciesAction,\n ProjectChangeLanguagesAction,\n ProjectChangeMessagesEnabledAction,\n ProjectChangeNameAction,\n ProjectChangeOrderSearchStatusAction,\n ProjectChangeProductSearchIndexingEnabledAction,\n ProjectSetExternalOAuthAction,\n ProjectSetShippingRateInputTypeAction,\n ProjectUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { InvalidOperationError } from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\nimport { AbstractRepository } from './abstract'\nimport { maskSecretValue } from '../lib/masking'\n\nexport class ProjectRepository extends AbstractRepository {\n get(projectKey: string): Project | null {\n const data = this._storage.getProject(projectKey)\n const resource = this._storage.getProject(projectKey)\n const masked = maskSecretValue<Project>(\n resource,\n 'externalOAuth.authorizationHeader'\n )\n return masked\n }\n\n save(projectKey: string, resource: Project) {\n const current = this.get(projectKey)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.saveProject(resource)\n }\n\n actions: Partial<\n Record<\n ProjectUpdateAction['action'],\n (projectKey: string, resource: Writable<Project>, action: any) => void\n >\n > = {\n changeName: (\n projectKey: string,\n resource: Writable<Project>,\n { name }: ProjectChangeNameAction\n ) => {\n resource.name = name\n },\n changeCurrencies: (\n projectKey: string,\n resource: Writable<Project>,\n { currencies }: ProjectChangeCurrenciesAction\n ) => {\n resource.currencies = currencies\n },\n changeCountries: (\n projectKey: string,\n resource: Writable<Project>,\n { countries }: ProjectChangeCountriesAction\n ) => {\n resource.countries = countries\n },\n changeLanguages: (\n projectKey: string,\n resource: Writable<Project>,\n { languages }: ProjectChangeLanguagesAction\n ) => {\n resource.languages = languages\n },\n changeMessagesEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { messagesEnabled }: ProjectChangeMessagesEnabledAction\n ) => {\n resource.messages.enabled = messagesEnabled\n },\n changeProductSearchIndexingEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { enabled }: ProjectChangeProductSearchIndexingEnabledAction\n ) => {\n if (!resource.searchIndexing?.products) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.products.status = enabled\n ? 'Activated'\n : 'Deactivated'\n resource.searchIndexing.products.lastModifiedAt = new Date().toISOString()\n },\n changeOrderSearchStatus: (\n projectKey: string,\n resource: Writable<Project>,\n { status }: ProjectChangeOrderSearchStatusAction\n ) => {\n if (!resource.searchIndexing?.orders) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.orders.status = status\n resource.searchIndexing.orders.lastModifiedAt = new Date().toISOString()\n },\n setShippingRateInputType: (\n projectKey: string,\n resource: Writable<Project>,\n { shippingRateInputType }: ProjectSetShippingRateInputTypeAction\n ) => {\n resource.shippingRateInputType = shippingRateInputType\n },\n setExternalOAuth: (\n projectKey: string,\n resource: Writable<Project>,\n { externalOAuth }: ProjectSetExternalOAuthAction\n ) => {\n resource.externalOAuth = externalOAuth\n },\n changeCountryTaxRateFallbackEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n {\n countryTaxRateFallbackEnabled,\n }: ProjectChangeCountryTaxRateFallbackEnabledAction\n ) => {\n resource.carts.countryTaxRateFallbackEnabled = countryTaxRateFallbackEnabled\n },\n changeCartsConfiguration: (\n projectKey: string,\n resource: Writable<Project>,\n { cartsConfiguration }: ProjectChangeCartsConfigurationAction\n ) => {\n resource.carts = cartsConfiguration || {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n }\n },\n }\n}\n","import { Router } from 'express'\nimport { Request, Response } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProjectRepository } from '../repositories/project'\nimport { Update } from '@commercetools/platform-sdk'\n\nexport class ProjectService {\n public repository: ProjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n this.repository = new ProjectRepository(storage)\n this.registerRoutes(parent)\n }\n\n registerRoutes(parent: Router) {\n parent.get('', this.get.bind(this))\n parent.post('', this.post.bind(this))\n }\n\n get(request: Request, response: Response) {\n const projectKey = request.params.projectKey\n const project = this.repository.get(projectKey)\n return response.status(200).send(project)\n }\n\n post(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const project = this.repository.get(request.params.projectKey)\n\n if (!project) {\n return response.status(404).send({})\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n project,\n updateRequest.actions\n )\n\n return response.status(200).send({})\n }\n}\n","import {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport {\n ReferenceTypeId,\n ShippingMethod,\n ShippingMethodAddShippingRateAction,\n ShippingMethodAddZoneAction,\n ShippingMethodChangeIsDefaultAction,\n ShippingMethodChangeNameAction,\n ShippingMethodDraft,\n ShippingMethodRemoveZoneAction,\n ShippingMethodSetDescriptionAction,\n ShippingMethodSetKeyAction,\n ShippingMethodSetLocalizedDescriptionAction,\n ShippingMethodSetPredicateAction,\n ShippingMethodUpdateAction,\n ShippingRate,\n ShippingRateDraft,\n ZoneRate,\n ZoneRateDraft,\n ZoneReference,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\nimport { _ } from 'ajv'\nimport deepEqual from 'deep-equal'\n\nexport class ShippingMethodRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shipping-method'\n }\n\n create(projectKey: string, draft: ShippingMethodDraft): ShippingMethod {\n const resource: ShippingMethod = {\n ...getBaseResourceProperties(),\n ...draft,\n taxCategory: getReferenceFromResourceIdentifier(\n draft.taxCategory,\n projectKey,\n this._storage\n ),\n zoneRates: draft.zoneRates?.map(z =>\n this._transformZoneRateDraft(projectKey, z)\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private _transformZoneRateDraft = (\n projectKey: string,\n draft: ZoneRateDraft\n ): ZoneRate => ({\n ...draft,\n zone: getReferenceFromResourceIdentifier<ZoneReference>(\n draft.zone,\n projectKey,\n this._storage\n ),\n shippingRates: draft.shippingRates?.map(this._transformShippingRate),\n })\n\n private _transformShippingRate = (rate: ShippingRateDraft): ShippingRate => {\n return {\n price: createTypedMoney(rate.price),\n freeAbove: rate.freeAbove && createTypedMoney(rate.freeAbove),\n tiers: rate.tiers || [],\n }\n }\n\n actions: Partial<\n Record<\n ShippingMethodUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n action: any\n ) => void\n >\n > = {\n addShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates.push(rate)\n return\n }\n })\n resource.zoneRates.push({\n zone: {\n typeId: 'zone',\n id: zone.id!,\n },\n shippingRates: [rate],\n })\n },\n removeShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates = zoneRate.shippingRates.filter(otherRate => {\n return !deepEqual(rate, otherRate)\n })\n }\n })\n },\n addZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodAddZoneAction\n ) => {\n const zoneReference = getReferenceFromResourceIdentifier<ZoneReference>(\n zone,\n projectKey,\n this._storage\n )\n\n if (resource.zoneRates === undefined) {\n resource.zoneRates = []\n }\n\n resource.zoneRates.push({\n zone: zoneReference,\n shippingRates: [],\n })\n },\n removeZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodRemoveZoneAction\n ) => {\n resource.zoneRates = resource.zoneRates.filter(zoneRate => {\n return zoneRate.zone.id !== zone.id\n })\n },\n setKey: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { key }: ShippingMethodSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { description }: ShippingMethodSetDescriptionAction\n ) => {\n resource.description = description\n },\n setLocalizedDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { localizedDescription }: ShippingMethodSetLocalizedDescriptionAction\n ) => {\n resource.localizedDescription = localizedDescription\n },\n setPredicate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { predicate }: ShippingMethodSetPredicateAction\n ) => {\n resource.predicate = predicate\n },\n changeIsDefault: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { isDefault }: ShippingMethodChangeIsDefaultAction\n ) => {\n resource.isDefault = isDefault\n },\n changeName: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { name }: ShippingMethodChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { ShippingMethodRepository } from '../repositories/shipping-method'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ShippingMethodService extends AbstractService {\n public repository: ShippingMethodRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShippingMethodRepository(storage)\n this.registerRoutes(parent)\n }\n\n getBasePath() {\n return 'shipping-methods'\n }\n\n extraRoutes(parent: Router) {\n parent.get('/matching-cart', this.get.bind(this))\n }\n}\n","import {\n CustomerReference,\n ReferenceTypeId,\n ShoppingList,\n ShoppingListDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n getReferenceFromResourceIdentifier,\n} from './helpers'\n\nexport class ShoppingListRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shopping-list'\n }\n create(projectKey: string, draft: ShoppingListDraft): ShoppingList {\n // const product =\n\n const resource: ShoppingList = {\n ...getBaseResourceProperties(),\n ...draft,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n textLineItems: [],\n lineItems: draft.lineItems?.map(e => ({\n ...getBaseResourceProperties(),\n ...e,\n addedAt: e.addedAt ?? '',\n productId: e.productId ?? '',\n name: {},\n quantity: e.quantity ?? 1,\n productType: { typeId: 'product-type', id: '' },\n custom: createCustomFields(e.custom, projectKey, this._storage),\n })),\n customer: draft.customer\n ? getReferenceFromResourceIdentifier<CustomerReference>(\n draft.customer,\n projectKey,\n this._storage\n )\n : undefined,\n store: draft.store?.key\n ? { typeId: 'store', key: draft.store.key! }\n : undefined,\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import { ShoppingListRepository } from './../repositories/shopping-list'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShoppingListService extends AbstractService {\n public repository: ShoppingListRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShoppingListRepository(storage)\n }\n\n getBasePath() {\n return 'shopping-lists'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport { getReferenceFromResourceIdentifier } from './helpers'\nimport {\n ReferenceTypeId,\n State,\n StateChangeKeyAction,\n StateDraft,\n StateSetDescriptionAction,\n StateSetNameAction,\n StateSetRolesAction,\n StateUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class StateRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'state'\n }\n\n create(projectKey: string, draft: StateDraft): State {\n const resource: State = {\n ...getBaseResourceProperties(),\n ...draft,\n builtIn: false,\n initial: draft.initial || false,\n transitions: (draft.transitions || []).map(t =>\n getReferenceFromResourceIdentifier(t, projectKey, this._storage)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n StateUpdateAction['action'],\n (projectKey: string, resource: Writable<State>, action: any) => void\n >\n > = {\n changeKey: (\n projectKey: string,\n resource: Writable<State>,\n { key }: StateChangeKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<State>,\n { description }: StateSetDescriptionAction\n ) => {\n resource.description = description\n },\n setName: (\n projectKey: string,\n resource: Writable<State>,\n { name }: StateSetNameAction\n ) => {\n resource.name = name\n },\n setRoles: (\n projectKey: string,\n resource: Writable<State>,\n { roles }: StateSetRolesAction\n ) => {\n resource.roles = roles\n },\n }\n}\n","import { StateRepository } from '../repositories/state'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class StateService extends AbstractService {\n public repository: StateRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StateRepository(storage)\n }\n\n getBasePath() {\n return 'states'\n }\n}\n","import {\n Store,\n StoreDraft,\n ReferenceTypeId,\n StoreUpdateAction,\n StoreSetNameAction,\n ChannelReference,\n StoreSetDistributionChannelsAction,\n ChannelResourceIdentifier,\n StoreSetLanguagesAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { getReferenceFromResourceIdentifier } from './helpers'\n\nexport class StoreRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'store'\n }\n\n create(projectKey: string, draft: StoreDraft): Store {\n const resource: Store = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n languages: draft.languages,\n distributionChannels: this.transformChannels(\n projectKey,\n draft.distributionChannels\n ),\n supplyChannels: this.transformChannels(projectKey, draft.supplyChannels),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformChannels(\n projectKey: string,\n channels?: ChannelResourceIdentifier[]\n ) {\n if (!channels) return []\n\n return channels.map(ref =>\n getReferenceFromResourceIdentifier<ChannelReference>(\n ref,\n projectKey,\n this._storage\n )\n )\n }\n\n actions: Partial<\n Record<\n StoreUpdateAction['action'],\n (projectKey: string, resource: Writable<Store>, action: any) => void\n >\n > = {\n setName: (\n projectKey: string,\n resource: Writable<Store>,\n { name }: StoreSetNameAction\n ) => {\n resource.name = name\n },\n setDistributionChannels: (\n projectKey: string,\n resource: Writable<Store>,\n { distributionChannels }: StoreSetDistributionChannelsAction\n ) => {\n resource.distributionChannels = this.transformChannels(\n projectKey,\n distributionChannels\n )\n },\n setLanguages: (\n projectKey: string,\n resource: Writable<Store>,\n { languages }: StoreSetLanguagesAction\n ) => {\n resource.languages = languages\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { StoreRepository } from '../repositories/store'\nimport { AbstractStorage } from '../storage'\n\nexport class StoreService extends AbstractService {\n public repository: StoreRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StoreRepository(storage)\n }\n\n getBasePath() {\n return 'stores'\n }\n}\n","import {\n InvalidInputError,\n ReferenceTypeId,\n Subscription,\n SubscriptionDraft,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class SubscriptionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'subscription'\n }\n create(projectKey: string, draft: SubscriptionDraft): Subscription {\n // TODO: We could actually test this here by using the aws sdk. For now\n // hardcode a failed check when account id is 0000000000\n if (draft.destination.type == 'SQS') {\n const queueURL = new URL(draft.destination.queueUrl)\n const accountId = queueURL.pathname.split('/')[1]\n if (accountId == '0000000000') {\n const dest = draft.destination\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message:\n 'A test message could not be delivered to this destination: ' +\n `SQS ${dest.queueUrl} in ${dest.region} for ${dest.accessKey}. ` +\n 'Please make sure your destination is correctly configured.',\n },\n 400\n )\n }\n }\n\n const resource: Subscription = {\n ...getBaseResourceProperties(),\n changes: draft.changes || [],\n destination: draft.destination,\n format: draft.format || {\n type: 'Platform',\n },\n key: draft.key,\n messages: draft.messages || [],\n status: 'Healthy',\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { SubscriptionRepository } from '../repositories/subscription'\n\nexport class SubscriptionService extends AbstractService {\n public repository: SubscriptionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new SubscriptionRepository(storage)\n }\n\n getBasePath() {\n return 'subscriptions'\n }\n}\n","import {\n ReferenceTypeId,\n TaxCategory,\n TaxCategoryAddTaxRateAction,\n TaxCategoryChangeNameAction,\n TaxCategoryDraft,\n TaxCategoryRemoveTaxRateAction,\n TaxCategoryReplaceTaxRateAction,\n TaxCategorySetDescriptionAction,\n TaxCategorySetKeyAction,\n TaxCategoryUpdateAction,\n TaxRate,\n TaxRateDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from 'types'\n\nexport class TaxCategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'tax-category'\n }\n\n create(projectKey: string, draft: TaxCategoryDraft): TaxCategory {\n const resource: TaxCategory = {\n ...getBaseResourceProperties(),\n ...draft,\n rates: draft.rates?.map(this.taxRateFromTaxRateDraft) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private taxRateFromTaxRateDraft = (draft: TaxRateDraft): TaxRate => ({\n ...draft,\n id: uuidv4(),\n amount: draft.amount || 0,\n })\n\n getWithKey(projectKey: string, key: string): TaxCategory | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as TaxCategory\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate tax category key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n TaxCategoryUpdateAction['action'],\n (projectKey: string, resource: Writable<TaxCategory>, action: any) => void\n >\n > = {\n addTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRate }: TaxCategoryAddTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates.push(this.taxRateFromTaxRateDraft(taxRate))\n },\n removeTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId }: TaxCategoryRemoveTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates = resource.rates.filter(taxRate => {\n return taxRate.id !== taxRateId\n })\n },\n replaceTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId, taxRate }: TaxCategoryReplaceTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n\n const taxRateObj = this.taxRateFromTaxRateDraft(taxRate)\n for (let i = 0; i < resource.rates.length; i++) {\n const rate = resource.rates[i]\n if (rate.id == taxRateId) {\n resource.rates[i] = taxRateObj\n }\n }\n },\n setDescription: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { description }: TaxCategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { key }: TaxCategorySetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { name }: TaxCategoryChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { TaxCategoryRepository } from '../repositories/tax-category'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class TaxCategoryService extends AbstractService {\n public repository: TaxCategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TaxCategoryRepository(storage)\n }\n\n getBasePath() {\n return 'tax-categories'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import {\n Type,\n TypeDraft,\n ReferenceTypeId,\n TypeUpdateAction,\n FieldDefinition,\n TypeSetDescriptionAction,\n TypeChangeNameAction,\n TypeAddFieldDefinitionAction,\n TypeChangeEnumValueLabelAction,\n TypeAddEnumValueAction,\n TypeChangeFieldDefinitionOrderAction,\n TypeRemoveFieldDefinitionAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class TypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'type'\n }\n\n create(projectKey: string, draft: TypeDraft): Type {\n const resource: Type = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n resourceTypeIds: draft.resourceTypeIds,\n fieldDefinitions: draft.fieldDefinitions || [],\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n actions: Partial<\n Record<\n TypeUpdateAction['action'],\n (projectKey: string, resource: Writable<Type>, action: any) => void\n >\n > = {\n addFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldDefinition }: TypeAddFieldDefinitionAction\n ) => {\n resource.fieldDefinitions.push(fieldDefinition)\n },\n removeFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName }: TypeRemoveFieldDefinitionAction\n ) => {\n resource.fieldDefinitions = resource.fieldDefinitions.filter(f => {\n return f.name !== fieldName\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Type>,\n { description }: TypeSetDescriptionAction\n ) => {\n resource.description = description\n },\n changeName: (\n projectKey: string,\n resource: Writable<Type>,\n { name }: TypeChangeNameAction\n ) => {\n resource.name = name\n },\n changeFieldDefinitionOrder: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldNames }: TypeChangeFieldDefinitionOrderAction\n ) => {\n const fields = new Map(\n resource.fieldDefinitions.map(item => [item.name, item])\n )\n const result: FieldDefinition[] = []\n let current = resource.fieldDefinitions\n\n fieldNames.forEach(fieldName => {\n const field = fields.get(fieldName)\n if (field === undefined) {\n throw new Error('New field')\n }\n result.push(field)\n\n // Remove from current items\n current = current.filter(f => {\n return f.name !== fieldName\n })\n })\n\n resource.fieldDefinitions = result\n // Add fields which were not specified in the order as last items. Not\n // sure if this follows commercetools\n resource.fieldDefinitions.push(...current)\n },\n addEnumValue: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeAddEnumValueAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.push(value)\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.push(value)\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n changeEnumValueLabel: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeChangeEnumValueLabelAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { TypeRepository } from '../repositories/type'\nimport { AbstractStorage } from '../storage'\n\nexport class TypeService extends AbstractService {\n public repository: TypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TypeRepository(storage)\n }\n\n getBasePath() {\n return 'types'\n }\n}\n","import {\n ReferenceTypeId,\n Zone,\n ZoneAddLocationAction,\n ZoneChangeNameAction,\n ZoneDraft,\n ZoneRemoveLocationAction,\n ZoneSetDescriptionAction,\n ZoneSetKeyAction,\n ZoneUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ZoneRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'zone'\n }\n\n create(projectKey: string, draft: ZoneDraft): Zone {\n const resource: Zone = {\n ...getBaseResourceProperties(),\n key: draft.key,\n locations: draft.locations || [],\n name: draft.name,\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n ZoneUpdateAction['action'],\n (projectKey: string, resource: Writable<Zone>, action: any) => void\n >\n > = {\n addLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneAddLocationAction\n ) => {\n resource.locations.push(location)\n },\n removeLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneRemoveLocationAction\n ) => {\n resource.locations = resource.locations.filter(loc => {\n return !(loc.country == location.country && loc.state == location.state)\n })\n },\n changeName: (\n projectKey: string,\n resource: Writable<Zone>,\n { name }: ZoneChangeNameAction\n ) => {\n resource.name = name\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Zone>,\n { description }: ZoneSetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<Zone>,\n { key }: ZoneSetKeyAction\n ) => {\n resource.key = key\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { ZoneRepository } from '../repositories/zone'\n\nexport class ZoneService extends AbstractService {\n public repository: ZoneRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ZoneRepository(storage)\n }\n\n getBasePath() {\n return 'zones'\n }\n}\n","import nock from 'nock'\nimport express, { NextFunction, Request, Response } from 'express'\nimport supertest from 'supertest'\nimport morgan from 'morgan'\nimport { AbstractStorage, InMemoryStorage } from './storage'\nimport { Services } from './types'\nimport { CommercetoolsError } from './exceptions'\nimport { OAuth2Server } from './oauth/server'\nimport { ProjectAPI } from './projectAPI'\nimport { copyHeaders } from './lib/proxy'\nimport { DEFAULT_API_HOSTNAME, DEFAULT_AUTH_HOSTNAME } from './constants'\n\n// Services\nimport { CartDiscountService } from './services/cart-discount'\nimport { CartService } from './services/cart'\nimport { CategoryServices } from './services/category'\nimport { ChannelService } from './services/channel'\nimport { CustomerGroupService } from './services/customer-group'\nimport { CustomerService } from './services/customer'\nimport { CustomObjectService } from './services/custom-object'\nimport { DiscountCodeService } from './services/discount-code'\nimport { ExtensionServices } from './services/extension'\nimport { InventoryEntryService } from './services/inventory-entry'\nimport { MyCartService } from './services/my-cart'\nimport { MyPaymentService } from './services/my-payment'\nimport { OrderService } from './services/order'\nimport { PaymentService } from './services/payment'\nimport { ProductProjectionService } from './services/product-projection'\nimport { ProductService } from './services/product'\nimport { ProductTypeService } from './services/product-type'\nimport { ProjectService } from './services/project'\nimport { ShippingMethodService } from './services/shipping-method'\nimport { ShoppingListService } from './services/shopping-list'\nimport { StateService } from './services/state'\nimport { StoreService } from './services/store'\nimport { SubscriptionService } from './services/subscription'\nimport { TaxCategoryService } from './services/tax-category'\nimport { TypeService } from './services/type'\nimport { ZoneService } from './services/zone'\nimport { MyCustomerService } from 'services/my-customer'\n\nexport type CommercetoolsMockOptions = {\n validateCredentials: boolean\n enableAuthentication: boolean\n defaultProjectKey: string | undefined\n apiHost: RegExp | string\n authHost: RegExp | string\n silent: boolean\n}\n\ntype AppOptions = { silent?: boolean }\n\nconst DEFAULT_OPTIONS: CommercetoolsMockOptions = {\n enableAuthentication: false,\n validateCredentials: false,\n defaultProjectKey: undefined,\n apiHost: DEFAULT_API_HOSTNAME,\n authHost: DEFAULT_AUTH_HOSTNAME,\n silent: false,\n}\n\nexport class CommercetoolsMock {\n public app: express.Express\n public options: CommercetoolsMockOptions\n\n private _storage: AbstractStorage\n private _oauth2: OAuth2Server\n private _nockScopes: {\n auth: nock.Scope | undefined\n api: nock.Scope | undefined\n } = { auth: undefined, api: undefined }\n private _services: Services\n private _projectService?: ProjectService\n\n constructor(options: Partial<CommercetoolsMockOptions> = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options }\n this._services = {}\n this._projectService = undefined\n\n this._storage = new InMemoryStorage()\n this._oauth2 = new OAuth2Server({\n enabled: this.options.enableAuthentication,\n validate: this.options.validateCredentials,\n })\n\n this.app = this.createApp({ silent: this.options.silent })\n }\n\n start() {\n // Order is important here when the hostnames match\n this.mockAuthHost()\n this.mockApiHost()\n }\n\n stop() {\n this._nockScopes.auth?.persist(false)\n this._nockScopes.auth = undefined\n\n this._nockScopes.api?.persist(false)\n this._nockScopes.api = undefined\n }\n\n clear() {\n this._storage.clear()\n }\n\n project(projectKey?: string) {\n if (!projectKey && !this.options.defaultProjectKey) {\n throw new Error('No projectKey passed and no default set')\n }\n\n return new ProjectAPI(\n projectKey || this.options.defaultProjectKey!,\n this._services,\n this._storage\n )\n }\n\n runServer(port: number = 3000, options?: AppOptions) {\n const app = this.createApp(options)\n const server = app.listen(port, () => {\n console.log(`Mock server listening at http://localhost:${port}`)\n })\n server.keepAliveTimeout = 60 * 1000\n }\n\n private createApp(options?: AppOptions): express.Express {\n const app = express()\n\n const projectRouter = express.Router({ mergeParams: true })\n projectRouter.use(express.json())\n\n if (!options?.silent) {\n app.use(morgan('tiny'))\n }\n app.use('/oauth', this._oauth2.createRouter())\n\n // Only enable auth middleware if we have enabled this\n if (this.options.enableAuthentication) {\n app.use('/:projectKey', this._oauth2.createMiddleware(), projectRouter)\n } else {\n app.use('/:projectKey', projectRouter)\n }\n\n this._projectService = new ProjectService(projectRouter, this._storage)\n\n this._services = {\n category: new CategoryServices(projectRouter, this._storage),\n cart: new CartService(projectRouter, this._storage),\n 'cart-discount': new CartDiscountService(projectRouter, this._storage),\n customer: new CustomerService(projectRouter, this._storage),\n channel: new ChannelService(projectRouter, this._storage),\n 'customer-group': new CustomerGroupService(projectRouter, this._storage),\n 'discount-code': new DiscountCodeService(projectRouter, this._storage),\n extension: new ExtensionServices(projectRouter, this._storage),\n 'inventory-entry': new InventoryEntryService(\n projectRouter,\n this._storage\n ),\n 'key-value-document': new CustomObjectService(\n projectRouter,\n this._storage\n ),\n order: new OrderService(projectRouter, this._storage),\n payment: new PaymentService(projectRouter, this._storage),\n 'my-cart': new MyCartService(projectRouter, this._storage),\n 'my-customer': new MyCustomerService(projectRouter, this._storage),\n 'my-payment': new MyPaymentService(projectRouter, this._storage),\n 'shipping-method': new ShippingMethodService(\n projectRouter,\n this._storage\n ),\n 'product-type': new ProductTypeService(projectRouter, this._storage),\n product: new ProductService(projectRouter, this._storage),\n 'product-projection': new ProductProjectionService(\n projectRouter,\n this._storage\n ),\n 'shopping-list': new ShoppingListService(projectRouter, this._storage),\n state: new StateService(projectRouter, this._storage),\n store: new StoreService(projectRouter, this._storage),\n subscription: new SubscriptionService(projectRouter, this._storage),\n 'tax-category': new TaxCategoryService(projectRouter, this._storage),\n type: new TypeService(projectRouter, this._storage),\n zone: new ZoneService(projectRouter, this._storage),\n }\n\n app.use((err: Error, req: Request, resp: Response, next: NextFunction) => {\n if (err instanceof CommercetoolsError) {\n return resp.status(err.statusCode).send({\n statusCode: err.statusCode,\n message: err.message,\n errors: [err.info],\n })\n } else {\n console.error(err)\n return resp.status(500).send({\n error: err.message,\n })\n }\n })\n\n return app\n }\n\n private mockApiHost() {\n const app = this.app\n\n this._nockScopes.api = nock(this.options.apiHost)\n .persist()\n .get(/.*/)\n .reply(async function(uri) {\n const response = await supertest(app)\n .get(uri)\n .set(copyHeaders(this.req.headers))\n return [response.status, response.body]\n })\n .post(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n .delete(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .delete(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n }\n\n private mockAuthHost() {\n const app = this.app\n\n this._nockScopes.auth = nock(this.options.authHost)\n .persist()\n .post(/^\\/oauth\\/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri + '?' + body)\n .set(copyHeaders(this.req.headers))\n .send()\n return [response.status, response.body]\n })\n }\n}\n"],"names":["parseExpandClause","clause","result","element","index","undefined","rest","pos","indexOf","substring","match","parseInt","haversineDistance","src","dst","RADIUS_OF_EARTH_IN_KM","toRadian","deg","Math","PI","dLat","latitude","dLon","longitude","a","sin","cos","c","atan2","sqrt","PredicateError","constructor","message","parseQueryExpression","predicate","Array","isArray","callbacks","map","item","generateMatchFunc","target","variables","every","callback","validateSymbol","val","type","char","value","charAt","line","start","column","resolveSymbol","vars","resolveValue","obj","Object","values","filter","v","getLexer","perplex","token","lexer","parser","Parser","builder","nud","t","strpos","groups","parseFloat","bp","expr","parse","terminals","led","left","expect","resolvedValue","resolvedSymbol","some","elem","invert","next","peek","length","Error","symbols","inValues","includes","other","toLowerCase","maxDistance","distance","keyword","array","build","lines","split","CommercetoolsError","info","statusCode","AbstractStorage","InMemoryStorage","projectKey","projects","key","name","countries","currencies","languages","createdAt","trialUntil","carts","countryTaxRateFallbackEnabled","deleteDaysAfterLastModification","messages","enabled","deleteDaysAfterCreation","shippingRateInputType","externalOAuth","searchIndexing","products","status","orders","version","project","addProject","newObj","JSON","stringify","forEach","_resolveResource","expand","params","reference","_resolveReference","itemRef","forProjectKey","projectStorage","resources","cart","Map","category","channel","customer","extension","order","payment","product","state","store","subscription","zone","clear","entries","assertStorage","typeId","all","from","add","set","id","resource","get","assert","getByKey","find","e","delete","query","where","filterFunc","err","code","totalResources","offset","limit","slice","count","total","results","getByResourceIdentifier","identifier","console","error","r","OAuth2Store","validate","getClientToken","clientId","clientSecret","scope","access_token","randomBytes","toString","token_type","expires_in","tokens","push","validateToken","foundToken","getBearerToken","request","authHeader","header","OAuth2Server","options","createRouter","router","express","Router","use","bodyParser","urlencoded","extended","post","tokenHandler","bind","createMiddleware","response","credentials","auth","grantType","grant_type","body","pass","send","getBaseResourceProperties","uuidv4","Date","toISOString","lastModifiedAt","ProjectAPI","services","storage","_storage","_services","parsedTypeId","service","getRepository","repository","copyHeaders","headers","validHeaders","DEFAULT_API_HOSTNAME","DEFAULT_AUTH_HOSTNAME","AbstractService","parent","registerRoutes","extraRoutes","basePath","getBasePath","mergeParams","getWithKey","getWithId","deletewithKey","deletewithId","postWithKey","postWithId","_parseParam","Number","_expandWithId","draft","create","createStatusCode","updateRequest","updatedResource","processUpdateActions","actions","resourceId","checkConcurrentModification","expectedVersion","currentVersion","AbstractRepository","modifiedResource","action","updateFunc","deepEqual","save","AbstractResourceRepository","getTypeId","current","createCustomFields","fields","typeResource","createPrice","createTypedMoney","fractionDigits","resolveStoreReference","ref","getReferenceFromResourceIdentifier","resourceIdentifier","CartDiscountRepository","setKey","setDescription","description","setValidFrom","validFrom","setValidUntil","validUntil","setValidFromAndUntil","changeSortOrder","sortOrder","changeIsActive","isActive","cartPredicate","references","requiresDiscountCode","stackingMode","transformValueDraft","money","CartDiscountService","CartRepository","addLineItem","productId","variantId","sku","quantity","variant","items","masterData","masterVariant","variants","x","alreadyAdded","lineItems","totalPrice","centAmount","calculateLineItemTotalPrice","prices","price","productKey","productSlug","slug","productType","discountedPricePerQuantity","lineItemMode","priceMode","calculateCartTotalPrice","removeLineItem","lineItemId","lineItem","shouldDelete","setBillingAddress","address","billingAddress","setCountry","country","setCustomerEmail","email","customerEmail","setCustomField","custom","setCustomType","resolvedType","setLocale","locale","setShippingAddress","shippingAddress","cartState","customLineItems","currencyCode","currency","taxMode","taxRoundingMode","taxCalculationMode","refusedGifts","origin","getActiveCart","reduce","cur","CartService","CategoryRepository","changeAssetName","assetId","assetKey","assets","asset","changeSlug","setAssetDescription","setAssetSources","sources","setMetaDescription","metaDescription","setMetaKeywords","metaKeywords","setMetaTitle","metaTitle","orderHint","ancestors","d","tags","CategoryServices","ChannelRepository","roles","ChannelService","CustomerGroupRepository","changeName","groupName","CustomerGroupService","CustomerRepository","password","Buffer","isEmailVerified","addresses","getMe","CustomerService","CustomObjectRepository","getWithContainerAndKey","container","baseProperties","CustomObjectService","createWithContainerAndKey","deleteWithContainerAndKey","DiscountCodeRepository","changeCartDiscounts","cartDiscounts","setCartPredicate","setName","setMaxApplications","maxApplications","setMaxApplicationsPerCustomer","maxApplicationsPerCustomer","applicationVersion","DiscountCodeService","ExtensionRepository","setTimeoutInMs","timeoutInMs","changeTriggers","triggers","changeDestination","destination","ExtensionServices","InventoryEntryRepository","changeQuantity","quantityOnStock","availableQuantity","setExpectedDelivery","expectedDelivery","setRestockableInDays","restockableInDays","supplyChannel","InventoryEntryService","MyCartService","activeCart","PaymentRepository","amount","addTransaction","transaction","transactions","transactionFromTransactionDraft","amountPlanned","paymentMethodInfo","paymentStatus","interfaceInteractions","interaction","MyPaymentService","OrderRepository","addPayment","resolvedPayment","paymentInfo","payments","changeOrderState","orderState","changePaymentState","paymentState","setOrderNumber","orderNumber","setStore","storeReference","syncInfo","lastMessageSequenceNumber","import","lineItemFromImportDraft","customLineItemFromImportDraft","taxRate","getWithOrderNumber","OrderService","importDraft","PaymentService","parseFilterExpression","filters","join","parsed","replace","ProductProjectionRepository","categories","variantFromDraft","searchKeywords","search","wherePredicate","attributes","ProductProjectionService","ProductRepository","publish","staged","hasStagedChanges","published","setAttribute","isStaged","productData","getProductData","isMasterVariant","variantIndex","getVariant","existingAttr","attr","foundVariant","ProductService","ProductTypeRepository","_projectKey","attributeConstraint","inputHint","isSearchable","changeLocalizedEnumValueLabel","attributeName","newValue","updateAttributeType","label","elementType","changeLabel","attributeDefinitionFromAttributeDefinitionDraft","ProductTypeService","maskSecretValue","path","parts","clone","pop","i","part","ProjectRepository","changeCurrencies","changeCountries","changeLanguages","changeMessagesEnabled","messagesEnabled","changeProductSearchIndexingEnabled","changeOrderSearchStatus","setShippingRateInputType","setExternalOAuth","changeCountryTaxRateFallbackEnabled","changeCartsConfiguration","cartsConfiguration","data","getProject","masked","saveProject","ProjectService","ShippingMethodRepository","shippingRates","_transformShippingRate","rate","freeAbove","tiers","addShippingRate","shippingRate","zoneRates","zoneRate","removeShippingRate","otherRate","addZone","zoneReference","removeZone","setLocalizedDescription","localizedDescription","setPredicate","changeIsDefault","isDefault","taxCategory","z","_transformZoneRateDraft","ShippingMethodService","ShoppingListRepository","textLineItems","addedAt","ShoppingListService","StateRepository","changeKey","setRoles","builtIn","initial","transitions","StateService","StoreRepository","setDistributionChannels","distributionChannels","transformChannels","setLanguages","supplyChannels","channels","StoreService","SubscriptionRepository","queueURL","URL","queueUrl","accountId","pathname","dest","region","accessKey","changes","format","SubscriptionService","TaxCategoryRepository","addTaxRate","rates","taxRateFromTaxRateDraft","removeTaxRate","taxRateId","replaceTaxRate","taxRateObj","TaxCategoryService","TypeRepository","addFieldDefinition","fieldDefinition","fieldDefinitions","removeFieldDefinition","fieldName","f","changeFieldDefinitionOrder","fieldNames","field","addEnumValue","changeEnumValueLabel","resourceTypeIds","TypeService","ZoneRepository","addLocation","location","locations","removeLocation","loc","ZoneService","DEFAULT_OPTIONS","enableAuthentication","validateCredentials","defaultProjectKey","apiHost","authHost","silent","CommercetoolsMock","api","_projectService","_oauth2","app","createApp","mockAuthHost","mockApiHost","stop","_nockScopes","persist","runServer","port","server","listen","log","keepAliveTimeout","projectRouter","json","morgan","MyCustomerService","req","resp","errors","nock","reply","uri","supertest"],"mappings":";;;;;;;;;;;;;;AAcO,MAAMA,iBAAiB,GAAIC,MAAD;EAC/B,MAAMC,MAAM,GAAiB;IAC3BC,OAAO,EAAEF,MADkB;IAE3BG,KAAK,EAAEC,SAFoB;IAG3BC,IAAI,EAAED;GAHR;EAMA,MAAME,GAAG,GAAGN,MAAM,CAACO,OAAP,CAAe,GAAf,CAAZ;;EACA,IAAID,GAAG,GAAG,CAAV,EAAa;IACXL,MAAM,CAACC,OAAP,GAAiBF,MAAM,CAACQ,SAAP,CAAiB,CAAjB,EAAoBF,GAApB,CAAjB;IACAL,MAAM,CAACI,IAAP,GAAcL,MAAM,CAACQ,SAAP,CAAiBF,GAAG,GAAG,CAAvB,CAAd;;;EAGF,MAAMG,KAAK,GAAGR,MAAM,CAACC,OAAP,CAAeO,KAAf,CAAqB,aAArB,CAAd;;EACA,IAAIA,KAAJ,EAAW;IACTR,MAAM,CAACE,KAAP,GAAeM,KAAK,CAAC,CAAD,CAAL,KAAa,GAAb,GAAmB,GAAnB,GAAyBC,QAAQ,CAACD,KAAK,CAAC,CAAD,CAAN,EAAW,EAAX,CAAhD;IACAR,MAAM,CAACC,OAAP,GAAiBD,MAAM,CAACC,OAAP,CAAeM,SAAf,CAAyB,CAAzB,EAA4BC,KAAK,CAACN,KAAlC,CAAjB;;;EAEF,OAAOF,MAAP;AACD,CAnBM;;ACTP;;;AAGA,AAAO,MAAMU,iBAAiB,GAAG,CAACC,GAAD,EAAgBC,GAAhB;EAC/B,MAAMC,qBAAqB,GAAG,IAA9B;;EACA,MAAMC,QAAQ,GAAIC,GAAD,IAAiBA,GAAG,IAAIC,IAAI,CAACC,EAAL,GAAU,GAAd,CAArC;;EAEA,MAAMC,IAAI,GAAGJ,QAAQ,CAACF,GAAG,CAACO,QAAJ,GAAeR,GAAG,CAACQ,QAApB,CAArB;EACA,MAAMC,IAAI,GAAGN,QAAQ,CAACF,GAAG,CAACS,SAAJ,GAAgBV,GAAG,CAACU,SAArB,CAArB;EAEA,IAAIC,CAAC,GACHN,IAAI,CAACO,GAAL,CAASL,IAAI,GAAG,CAAhB,IAAqBF,IAAI,CAACO,GAAL,CAASL,IAAI,GAAG,CAAhB,CAArB,GACAF,IAAI,CAACQ,GAAL,CAASV,QAAQ,CAACH,GAAG,CAACQ,QAAL,CAAjB,IACEH,IAAI,CAACQ,GAAL,CAASV,QAAQ,CAACF,GAAG,CAACO,QAAL,CAAjB,CADF,GAEEH,IAAI,CAACO,GAAL,CAASH,IAAI,GAAG,CAAhB,CAFF,GAGEJ,IAAI,CAACO,GAAL,CAASH,IAAI,GAAG,CAAhB,CALJ;EAMA,IAAIK,CAAC,GAAG,IAAIT,IAAI,CAACU,KAAL,CAAWV,IAAI,CAACW,IAAL,CAAUL,CAAV,CAAX,EAAyBN,IAAI,CAACW,IAAL,CAAU,IAAIL,CAAd,CAAzB,CAAZ;EACA,OAAOT,qBAAqB,GAAGY,CAAxB,GAA4B,IAAnC;AACD,CAfM;;ACRP;;;;;;AAMA,MAIaG;EAGXC,YAAYC;IACV,KAAKA,OAAL,GAAeA,OAAf;;;;AASJ,AAoBO,MAAMC,oBAAoB,GAC/BC,SADkC;EAGlC,IAAIC,KAAK,CAACC,OAAN,CAAcF,SAAd,CAAJ,EAA8B;IAC5B,MAAMG,SAAS,GAAGH,SAAS,CAACI,GAAV,CAAcC,IAAI,IAAIC,iBAAiB,CAACD,IAAD,CAAvC,CAAlB;IACA,OAAO,CAACE,MAAD,EAAcC,SAAd;MACL,OAAOL,SAAS,CAACM,KAAV,CAAgBC,QAAQ,IAAIA,QAAQ,CAACH,MAAD,EAASC,SAAT,CAApC,CAAP;KADF;GAFF,MAKO;IACL,OAAOF,iBAAiB,CAACN,SAAD,CAAxB;;AAEH,CAXM;;AAmBP,MAAMW,cAAc,GAAIC,GAAD;EACrB,IAAI,CAACA,GAAG,CAACC,IAAT,EAAe;IACb,MAAM,IAAIjB,cAAJ,CAAmB,gBAAnB,CAAN;;;EAGF,IAAIgB,GAAG,CAACC,IAAJ,KAAa,YAAjB,EAA+B;IAAA;;IAC7B,MAAMC,IAAI,GAAGF,GAAG,CAACG,KAAJ,CAAUC,MAAV,CAAiB,CAAjB,CAAb;IACA,MAAMC,IAAI,eAAGL,GAAG,CAACvC,GAAP,qBAAG,SAAS6C,KAAT,CAAeD,IAA5B;IACA,MAAME,MAAM,gBAAGP,GAAG,CAACvC,GAAP,qBAAG,UAAS6C,KAAT,CAAeC,MAA9B;IAEA,MAAM,IAAIvB,cAAJ,mBACckB,4DAA4DG,gBAAgBE,SAD1F,CAAN;;AAIH,CAdD;;AAgBA,MAAMC,aAAa,GAAG,CAACR,GAAD,EAAcS,IAAd;EACpB,IAAIT,GAAG,CAACC,IAAJ,KAAa,KAAjB,EAAwB;IACtB,IAAI,EAAED,GAAG,CAACG,KAAJ,IAAaM,IAAf,CAAJ,EAA0B;MACxB,MAAM,IAAIzB,cAAJ,gCAAkDgB,GAAG,CAACG,OAAtD,CAAN;;;IAEF,OAAOM,IAAI,CAACT,GAAG,CAACG,KAAL,CAAX;;;EAGF,OAAOH,GAAG,CAACG,KAAX;AACD,CATD;;AAWA,MAAMO,YAAY,GAAG,CAACC,GAAD,EAAWX,GAAX;EACnB,IAAIA,GAAG,CAACC,IAAJ,KAAa,YAAjB,EAA+B;IAC7B,MAAM,IAAIjB,cAAJ,CAAmB,gBAAnB,CAAN;;;EAGF,IAAI,EAAEgB,GAAG,CAACG,KAAJ,IAAaQ,GAAf,CAAJ,EAAyB;IACvB,IAAItB,KAAK,CAACC,OAAN,CAAcqB,GAAd,CAAJ,EAAwB;MACtB,OAAOC,MAAM,CAACC,MAAP,CAAcF,GAAd,EACJG,MADI,CACGC,CAAC,IAAIf,GAAG,CAACG,KAAJ,IAAaY,CADrB,EAEJvB,GAFI,CAEAuB,CAAC,IAAIA,CAAC,CAACf,GAAG,CAACG,KAAL,CAFN,CAAP;;;IAIF,MAAM,IAAInB,cAAJ,eAAiCgB,GAAG,CAACG,wBAArC,CAAN;;;EAGF,OAAOQ,GAAG,CAACX,GAAG,CAACG,KAAL,CAAV;AACD,CAfD;;AAiBA,MAAMa,QAAQ,GAAIb,KAAD;EACf,OAAO,IAAIc,OAAJ,CAAYd,KAAZ,EAEJe,KAFI,CAEE,KAFF,EAES,qBAFT,EAGJA,KAHI,CAGE,IAHF,EAGQ,oBAHR,EAIJA,KAJI,CAIE,KAJF,EAIS,qBAJT,EAMJA,KANI,CAME,QANF,EAMY,wBANZ,EAOJA,KAPI,CAOE,IAPF,EAOQ,oBAPR,EAQJA,KARI,CAQE,qBARF,EAQyB,yCARzB,EASJA,KATI,CASE,UATF,EASc,0BATd,EAUJA,KAVI,CAUE,KAVF,EAUS,qBAVT,EAWJA,KAXI,CAWE,KAXF,EAWS,qBAXT,EAYJA,KAZI,CAYE,OAZF,EAYW,uBAZX,EAaJA,KAbI,CAaE,IAbF,EAaQ,oBAbR,EAcJA,KAdI,CAcE,SAdF,EAca,yBAdb,EAgBJA,KAhBI,CAgBE,OAhBF,EAgBW,UAhBX,EAiBJA,KAjBI,CAiBE,KAjBF,EAiBS,KAjBT,EAkBJA,KAlBI,CAkBE,UAlBF,EAkBc,mBAlBd,EAmBJA,KAnBI,CAmBE,YAnBF,EAmBgB,gBAnBhB,EAoBJA,KApBI,CAoBE,QApBF,EAoBY,qBApBZ,EAqBJA,KArBI,CAqBE,QArBF,EAqBY,qBArBZ,EAuBJA,KAvBI,CAuBE,OAvBF,EAuBW,GAvBX,EAwBJA,KAxBI,CAwBE,GAxBF,EAwBO,GAxBP,EAyBJA,KAzBI,CAyBE,GAzBF,EAyBO,GAzBP,EA0BJA,KA1BI,CA0BE,IA1BF,EA0BQ,IA1BR,EA2BJA,KA3BI,CA2BE,IA3BF,EA2BQ,IA3BR,EA4BJA,KA5BI,CA4BE,GA5BF,EA4BO,GA5BP,EA6BJA,KA7BI,CA6BE,GA7BF,EA6BO,GA7BP,EA8BJA,KA9BI,CA8BE,IA9BF,EA8BQ,IA9BR,EA+BJA,KA/BI,CA+BE,GA/BF,EA+BO,GA/BP,EAgCJA,KAhCI,CAgCE,GAhCF,EAgCO,GAhCP,EAiCJA,KAjCI,CAiCE,IAjCF,EAiCQ,KAjCR,EAiCe,IAjCf,CAAP;AAkCD,CAnCD;AAqCA;;;;;;;;;AAOA,MAAMxB,iBAAiB,GAAIN,SAAD;EACxB,MAAM+B,KAAK,GAAGH,QAAQ,CAAC5B,SAAD,CAAtB;EACA,MAAMgC,MAAM,GAAG,IAAIC,MAAJ,CAAWF,KAAX,EACZG,OADY,GAEZC,GAFY,CAER,YAFQ,EAEM,GAFN,EAEWC,CAAC;IACvB,OAAO;MACLvB,IAAI,EAAE,YADD;MAELE,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQtD,KAFV;MAGLH,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAHP;GAHW,EASZF,GATY,CASR,UATQ,EASI,GATJ,EASSC,CAAC;IACrB,OAAO;MACLvB,IAAI,EAAE,KADD;;MAGLE,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQQ,MAAR,CAAe,CAAf,CAHF;MAILjE,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAJP;GAVW,EAiBZF,GAjBY,CAiBR,QAjBQ,EAiBE,GAjBF,EAiBOC,CAAC;IACnB,OAAO;MACLvB,IAAI,EAAE,QADD;;MAGLE,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQQ,MAAR,CAAe,CAAf,CAHF;MAILjE,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAJP;GAlBW,EAyBZF,GAzBY,CAyBR,KAzBQ,EAyBD,CAzBC,EAyBEC,CAAC;IACd,OAAO;MACLvB,IAAI,EAAE,KADD;MAELE,KAAK,EAAEtC,QAAQ,CAAC2D,CAAC,CAACN,KAAF,CAAQtD,KAAT,EAAgB,EAAhB,CAFV;MAGLH,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAHP;GA1BW,EAgCZF,GAhCY,CAgCR,OAhCQ,EAgCC,CAhCD,EAgCIC,CAAC;IAChB,OAAO;MACLvB,IAAI,EAAE,OADD;MAELE,KAAK,EAAEwB,UAAU,CAACH,CAAC,CAACN,KAAF,CAAQtD,KAAT,CAFZ;MAGLH,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAHP;GAjCW,EAuCZF,GAvCY,CAuCR,KAvCQ,EAuCD,GAvCC,EAuCI,CAAC;IAAEK;GAAH;IACf,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA,OAAQjB,GAAD;MACL,OAAO,CAACkB,IAAI,CAAClB,GAAD,CAAZ;KADF;GAzCW,EA6CZY,GA7CY,CA6CR,OA7CQ,EA6CC,EA7CD,EA6CK,CAAC;IAAEK;GAAH;IAChB,OAAO,OAAP;GA9CW,EAgDZL,GAhDY,CAgDR,SAhDQ,EAgDG,EAhDH,EAgDO,CAAC;IAAEK;GAAH;IAClB,OAAO,SAAP;GAjDW,EAoDZI,GApDY,CAoDR,KApDQ,EAoDD,CApDC,EAoDE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA,OAAQjB,GAAD;MACL,OAAOsB,IAAI,CAACtB,GAAD,CAAJ,IAAakB,IAAI,CAAClB,GAAD,CAAxB;KADF;GAtDW,EA0DZqB,GA1DY,CA0DR,IA1DQ,EA0DF,CA1DE,EA0DC,CAAC;IAAEC,IAAF;IAAQf,KAAR;IAAeU;GAAhB;IACZ,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA,OAAO,CAACjB,GAAD,EAAWF,IAAX;MACL,OAAOwB,IAAI,CAACtB,GAAD,EAAMF,IAAN,CAAJ,IAAmBoB,IAAI,CAAClB,GAAD,EAAMF,IAAN,CAA9B;KADF;GA5DW,EAgEZuB,GAhEY,CAgER,OAhEQ,EAgEC,CAhED,EAgEI,CAAC;IAAEC,IAAF;IAAQf,KAAR;IAAeU;GAAhB;IACf,MAAMC,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAlB;;IACA,IAAIvC,KAAK,CAACC,OAAN,CAAcuC,IAAd,CAAJ,EAAyB;MACvB,OAAO,CAACI,IAAD,EAAO,GAAGJ,IAAV,CAAP;KADF,MAEO;MACL,OAAO,CAACI,IAAD,EAAOJ,IAAP,CAAP;;GArES,EAwEZN,GAxEY,CAwER,GAxEQ,EAwEH,GAxEG,EAwEEC,CAAC;IACd,MAAMK,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAAC,GAAD;KAA1B,CAAlB;IACA,OAAOF,IAAP;GA1EW,EA4EZG,GA5EY,CA4ER,GA5EQ,EA4EH,GA5EG,EA4EE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,EAAb;IACAX,KAAK,CAACe,MAAN,CAAa,GAAb;IACA,OAAO,CAACvB,GAAD,EAAWF,IAAX;MACL,MAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;;MACA,IAAI9B,KAAJ,EAAW;QACT,OAAO0B,IAAI,CAAC1B,KAAD,CAAX;;;MAEF,OAAO,KAAP;KALF;GA/EW,EAuFZyB,EAvFY,CAuFT,GAvFS,EAuFJ,CAvFI,EAwFZI,GAxFY,CAwFR,GAxFQ,EAwFH,EAxFG,EAwFC,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACZ,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,MAAM0B,aAAa,GAAGzB,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAlC;MACA,MAAMG,cAAc,GAAG5B,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAApC;;MACA,IAAIpB,KAAK,CAACC,OAAN,CAAc6C,aAAd,CAAJ,EAAkC;QAChC,OAAO,CAAC,CAACA,aAAa,CAACE,IAAd,CAAmBC,IAAI,IAAIA,IAAI,KAAKF,cAApC,CAAT;;;MAEF,OAAOD,aAAa,KAAKC,cAAzB;KANF;GA5FW,EAqGZJ,GArGY,CAqGR,IArGQ,EAqGF,EArGE,EAqGE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,KAA4BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAAhD;KADF;GAzGW,EA6GZuB,GA7GY,CA6GR,GA7GQ,EA6GH,EA7GG,EA6GC,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACZ,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,GAA0BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA9C;KADF;GAjHW,EAqHZuB,GArHY,CAqHR,IArHQ,EAqHF,EArHE,EAqHE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,IAA2BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA/C;KADF;GAzHW,EA6HZuB,GA7HY,CA6HR,GA7HQ,EA6HH,EA7HG,EA6HC,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACZ,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,GAA0BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA9C;KADF;GAjIW,EAqIZuB,GArIY,CAqIR,IArIQ,EAqIF,EArIE,EAqIE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,IAA2BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA/C;KADF;GAzIW,EA6IZuB,GA7IY,CA6IR,IA7IQ,EA6IF,EA7IE,EA6IE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,IAAIW,MAAM,GAAG,KAAb;;IAGA,MAAMC,IAAI,GAAGrB,KAAK,CAACsB,IAAN,EAAb;;IACA,IAAID,IAAI,CAACvC,IAAL,KAAc,KAAlB,EAAyB;MACvBsC,MAAM,GAAG,IAAT;MACApB,KAAK,CAACqB,IAAN;;;IAGF,MAAMX,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAlB;;IAEA,QAAQC,IAAR;MACE,KAAK,OAAL;QAAc;UACZ,IAAI,CAACU,MAAL,EAAa;YACX,OAAO,CAAC5B,GAAD,EAAWF,IAAX;cACL,MAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;cACA,OAAOjC,GAAG,CAAC0C,MAAJ,KAAe,CAAtB;aAFF;WADF,MAKO;YACL,OAAO,CAAC/B,GAAD,EAAWF,IAAX;cACL,MAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;cACA,OAAOjC,GAAG,CAAC0C,MAAJ,KAAe,CAAtB;aAFF;;;;MAMJ,KAAK,SAAL;QAAgB;UACd,IAAI,CAACH,MAAL,EAAa;YACX,OAAO,CAAC5B,GAAD,EAAWF,IAAX;cACL,MAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;cACA,OAAOjC,GAAG,KAAKzC,SAAf;aAFF;WADF,MAKO;YACL,OAAO,CAACoD,GAAD,EAAWF,IAAX;cACL,MAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;cACA,OAAOjC,GAAG,KAAKzC,SAAf;aAFF;;;;MAMJ;QAAS;UACP,MAAM,IAAIoF,KAAJ,CAAU,YAAV,CAAN;;;GArLO,EAyLZX,GAzLY,CAyLR,IAzLQ,EAyLF,EAzLE,EAyLE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA,OAAO,CAACjB,GAAD,EAAWF,IAAX;MACL,IAAImC,OAAO,GAAGf,IAAd;;MACA,IAAI,CAACxC,KAAK,CAACC,OAAN,CAAcsD,OAAd,CAAL,EAA6B;QAC3BA,OAAO,GAAG,CAACf,IAAD,CAAV;;;MAGF,MAAMgB,QAAQ,GAAGD,OAAO,CAACpD,GAAR,CAAaC,IAAD,IAC3Be,aAAa,CAACf,IAAD,EAAOgB,IAAP,CADE,CAAjB;MAGA,OAAOoC,QAAQ,CAACC,QAAT,CAAkBpC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA9B,CAAP;KATF;GA3LW,EAuMZD,GAvMY,CAuMR,qBAvMQ,EAuMe,EAvMf,EAuMmB,CAAC;IAAEC,IAAF;IAAQL;GAAT;IAC9B,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,MAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;MACA,MAAMc,KAAK,GAAGvC,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA3B;;MAEA,IAAI,OAAON,KAAP,IAAgB,QAApB,EAA8B;QAC5B,MAAM,IAAInB,cAAJ,eACUiD,IAAI,CAAC9B,0CADf,CAAN;;;MAIF,OAAOA,KAAK,CAAC6C,WAAN,OAAwBD,KAAK,CAACC,WAAN,EAA/B;KATF;GA3MW,EAuNZhB,GAvNY,CAuNR,QAvNQ,EAuNE,EAvNF,EAuNM,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACjB,MAAM3B,IAAI,GAAGkB,KAAK,CAACqB,IAAN,EAAb;;IAEA,IAAIvC,IAAI,CAACrC,KAAL,KAAe,QAAnB,EAA6B;MAC3B,MAAM,IAAIoB,cAAJ,mBACciB,IAAI,CAACrC,yBADnB,CAAN;;;IAKFuD,KAAK,CAACe,MAAN,CAAa,GAAb;IACA,MAAML,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAAC,GAAD;KAA1B,CAAb;IAEA,OAAO,CAACpB,GAAD,EAAWF,IAAX;MACL,MAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;MACA,IAAI,CAAC9B,KAAL,EAAY,OAAO,KAAP;MAEZ,MAAM8C,WAAW,GAAGzC,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV,CAAjC;MACA,MAAMyC,QAAQ,GAAGpF,iBAAiB,CAChC;QACEW,SAAS,EAAE0B,KAAK,CAAC,CAAD,CADlB;QAEE5B,QAAQ,EAAE4B,KAAK,CAAC,CAAD;OAHe,EAKhC;QACE1B,SAAS,EAAE+B,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV,CAD1B;QAEElC,QAAQ,EAAEiC,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV;OAPO,CAAlC;MAUA,OAAOyC,QAAQ,IAAID,WAAnB;KAfF;GAnOW,EAqPZjB,GArPY,CAqPR,UArPQ,EAqPI,EArPJ,EAqPQ,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACnB,MAAMuB,OAAO,GAAGhC,KAAK,CAACqB,IAAN,EAAhB;IAEA,IAAIX,IAAI,GAAGT,MAAM,CAACU,KAAP,EAAX;;IACA,IAAI,CAACzC,KAAK,CAACC,OAAN,CAAcuC,IAAd,CAAL,EAA0B;MACxBA,IAAI,GAAG,CAACA,IAAD,CAAP;;;IAGF,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,MAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;;MAEA,IAAI,CAAC5C,KAAK,CAACC,OAAN,CAAca,KAAd,CAAL,EAA2B;QACzB,MAAM,IAAInB,cAAJ,eACUiD,IAAI,CAAC9B,0CADf,CAAN;;;MAKF,MAAMiD,KAAK,GAAGvB,IAAI,CAACrC,GAAL,CAAUC,IAAD,IAAkBe,aAAa,CAACf,IAAD,EAAOgB,IAAP,CAAxC,CAAd;;MACA,IAAI0C,OAAO,CAAClD,IAAR,KAAiB,KAArB,EAA4B;QAC1B,OAAOmD,KAAK,CAACvD,KAAN,CAAaJ,IAAD,IAAeU,KAAK,CAAC2C,QAAN,CAAerD,IAAf,CAA3B,CAAP;OADF,MAEO;QACL,OAAO2D,KAAK,CAACf,IAAN,CAAY5C,IAAD,IAAeU,KAAK,CAAC2C,QAAN,CAAerD,IAAf,CAA1B,CAAP;;KAbJ;GA7PW,EA+QZ4D,KA/QY,EAAf;EAiRA,MAAMjG,MAAM,GAAGgE,MAAM,CAACU,KAAP,EAAf;;EAEA,IAAI,OAAO1E,MAAP,KAAkB,UAAtB,EAAkC;IAChC,MAAMkG,KAAK,GAAGlE,SAAS,CAACmE,KAAV,CAAgB,IAAhB,CAAd;IACA,MAAMhD,MAAM,GAAG+C,KAAK,CAACA,KAAK,CAACZ,MAAN,GAAe,CAAhB,CAAL,CAAwBA,MAAvC;IAEA,MAAM,IAAI1D,cAAJ,sEACJ,uDAAA,aAEYsE,KAAK,CAACZ,kBAAkBnC,SAHhC,CAAN;;;EAMF,OAAOnD,MAAP;AACD,CAhSD;;MClJaoG,2BAAgDb;EAI3D1D,YAAYwE,MAASC,UAAU,GAAG;IAChC,MAAMD,IAAI,CAACvE,OAAX;IACA,KAAKuE,IAAL,GAAYA,IAAZ;IACA,KAAKC,UAAL,GAAkBA,UAAU,IAAI,GAAhC;;;;;MCyCkBC;AAwDtB,MAAaC,wBAAwBD;EAArC1E;;IACY,cAAA,GAEN,EAFM;IAIA,aAAA,GAEN,EAFM;;IA0NV,eAAA,GAAc4E,UAAD;MACX,IAAI,CAAC,KAAKC,QAAL,CAAcD,UAAd,CAAL,EAAgC;QAC9B,KAAKC,QAAL,CAAcD,UAAd,IAA4B;UAC1BE,GAAG,EAAEF,UADqB;UAE1BG,IAAI,EAAE,EAFoB;UAG1BC,SAAS,EAAE,EAHe;UAI1BC,UAAU,EAAE,EAJc;UAK1BC,SAAS,EAAE,EALe;UAM1BC,SAAS,EAAE,0BANe;UAO1BC,UAAU,EAAE,SAPc;UAQ1BC,KAAK,EAAE;YACLC,6BAA6B,EAAE,KAD1B;YAELC,+BAA+B,EAAE;WAVT;UAY1BC,QAAQ,EAAE;YAAEC,OAAO,EAAE,KAAX;YAAkBC,uBAAuB,EAAE;WAZ3B;UAa1BC,qBAAqB,EAAErH,SAbG;UAc1BsH,aAAa,EAAEtH,SAdW;UAe1BuH,cAAc,EAAE;YACdC,QAAQ,EAAE;cACRC,MAAM,EAAE;aAFI;YAIdC,MAAM,EAAE;cACND,MAAM,EAAE;;WApBc;UAuB1BE,OAAO,EAAE;SAvBX;;;MA0BF,OAAO,KAAKpB,QAAL,CAAcD,UAAd,CAAP;KA5BF;;IA+BA,gBAAA,GAAesB,OAAD;MACZ,KAAKrB,QAAL,CAAcqB,OAAO,CAACpB,GAAtB,IAA6BoB,OAA7B;MACA,OAAOA,OAAP;KAFF;;IAKA,eAAA,GAActB,UAAD;MACX,OAAO,KAAKuB,UAAL,CAAgBvB,UAAhB,CAAP;KADF;;IAIQ,WAAA,GAAS,CACfA,UADe,EAEflD,GAFe,EAGfxD,MAHe;MAKf,IAAI,CAACA,MAAL,EAAa,OAAOwD,GAAP;MACb,MAAM0E,MAAM,GAAGC,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAe5E,GAAf,CAAX,CAAf;;MACA,IAAItB,KAAK,CAACC,OAAN,CAAcnC,MAAd,CAAJ,EAA2B;QACzBA,MAAM,CAACqI,OAAP,CAAe3G,CAAC;UACd,KAAK4G,gBAAL,CAAsB5B,UAAtB,EAAkCwB,MAAlC,EAA0CxG,CAA1C;SADF;OADF,MAIO;QACL,KAAK4G,gBAAL,CAAsB5B,UAAtB,EAAkCwB,MAAlC,EAA0ClI,MAA1C;;;MAEF,OAAOkI,MAAP;KAdM;;IAiBA,qBAAA,GAAmB,CAACxB,UAAD,EAAqBlD,GAArB,EAA+B+E,MAA/B;MACzB,MAAMC,MAAM,GAAGzI,iBAAiB,CAACwI,MAAD,CAAhC;;MAEA,IAAI,CAACC,MAAM,CAACrI,KAAZ,EAAmB;QACjB,MAAMsI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAArB;;QACA,IAAIuI,SAAS,KAAKrI,SAAlB,EAA6B;UAC3B;;;QAEF,KAAKsI,iBAAL,CAAuBhC,UAAvB,EAAmC+B,SAAnC,EAA8CD,MAAM,CAACnI,IAArD;OALF,MAMO,IAAImI,MAAM,CAACrI,KAAP,KAAiB,GAArB,EAA0B;QAC/B,MAAMsI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAArB;QACA,IAAIuI,SAAS,KAAKrI,SAAd,IAA2B,CAAC8B,KAAK,CAACC,OAAN,CAAcsG,SAAd,CAAhC,EAA0D;QAC1DA,SAAS,CAACJ,OAAV,CAAmBM,OAAD;UAChB,KAAKD,iBAAL,CAAuBhC,UAAvB,EAAmCiC,OAAnC,EAA4CH,MAAM,CAACnI,IAAnD;SADF;OAHK,MAMA;QACL,MAAMoI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAAH,CAAoBsI,MAAM,CAACrI,KAA3B,CAAlB;QACA,IAAIsI,SAAS,KAAKrI,SAAlB,EAA6B;;QAC7B,KAAKsI,iBAAL,CAAuBhC,UAAvB,EAAmC+B,SAAnC,EAA8CD,MAAM,CAACnI,IAArD;;KAlBI;;;EA/QAuI,aAAa,CAAClC,UAAD;IACnB,KAAKuB,UAAL,CAAgBvB,UAAhB;IAEA,IAAImC,cAAc,GAAG,KAAKC,SAAL,CAAepC,UAAf,CAArB;;IACA,IAAI,CAACmC,cAAL,EAAqB;MACnBA,cAAc,GAAG,KAAKC,SAAL,CAAepC,UAAf,IAA6B;QAC5CqC,IAAI,EAAE,IAAIC,GAAJ,EADsC;QAE5C,iBAAiB,IAAIA,GAAJ,EAF2B;QAG5CC,QAAQ,EAAE,IAAID,GAAJ,EAHkC;QAI5CE,OAAO,EAAE,IAAIF,GAAJ,EAJmC;QAK5CG,QAAQ,EAAE,IAAIH,GAAJ,EALkC;QAM5C,kBAAkB,IAAIA,GAAJ,EAN0B;QAO5C,iBAAiB,IAAIA,GAAJ,EAP2B;QAQ5CI,SAAS,EAAE,IAAIJ,GAAJ,EARiC;QAS5C,mBAAmB,IAAIA,GAAJ,EATyB;QAU5C,sBAAsB,IAAIA,GAAJ,EAVsB;QAW5CK,KAAK,EAAE,IAAIL,GAAJ,EAXqC;QAY5CM,OAAO,EAAE,IAAIN,GAAJ,EAZmC;QAa5C,gBAAgB,IAAIA,GAAJ,EAb4B;QAc5CO,OAAO,EAAE,IAAIP,GAAJ,EAdmC;QAe5C,qBAAqB,IAAIA,GAAJ,EAfuB;QAgB5C,sBAAsB,IAAIA,GAAJ,EAhBsB;QAiB5C,mBAAmB,IAAIA,GAAJ,EAjByB;QAkB5CQ,KAAK,EAAE,IAAIR,GAAJ,EAlBqC;QAmB5CS,KAAK,EAAE,IAAIT,GAAJ,EAnBqC;QAoB5C,iBAAiB,IAAIA,GAAJ,EApB2B;QAqB5CU,YAAY,EAAE,IAAIV,GAAJ,EArB8B;QAsB5C,gBAAgB,IAAIA,GAAJ,EAtB4B;QAuB5ClG,IAAI,EAAE,IAAIkG,GAAJ,EAvBsC;QAwB5CW,IAAI,EAAE,IAAIX,GAAJ;OAxBR;;;IA2BF,OAAOH,cAAP;;;EAGFe,KAAK;IACH,KAAK,MAAM,GAAGf,cAAH,CAAX,IAAiCpF,MAAM,CAACoG,OAAP,CAAe,KAAKf,SAApB,CAAjC,EAAiE;MAC/D,KAAK,MAAM,GAAG9F,KAAH,CAAX,IAAwBS,MAAM,CAACoG,OAAP,CAAehB,cAAf,CAAxB,EAAwD;QACtD7F,KAAK,QAAL,YAAAA,KAAK,CAAE4G,KAAP;;;;;EAKNE,aAAa,CAACC,MAAD;;EAEbC,GAAG,CAACtD,UAAD,EAAqBqD,MAArB;IACD,MAAMN,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;IACA,IAAIN,KAAJ,EAAW;MACT,OAAOvH,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAP;;;IAEF,OAAO,EAAP;;;EAGFwG,GAAG,CACDxD,UADC,EAEDqD,MAFC,EAGDvG,GAHC,EAIDgF,SAAoB,EAJnB;;;IAMD,8BAAKI,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,4CAAwCI,GAAxC,CAA4C3G,GAAG,CAAC4G,EAAhD,EAAoD5G,GAApD;IAEA,MAAM6G,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqBqD,MAArB,EAA6BvG,GAAG,CAAC4G,EAAjC,EAAqC5B,MAArC,CAAjB;IACA+B,MAAM,CAACF,QAAD,sBAA+BN,kBAAkBvG,GAAG,CAAC4G,gBAArD,CAAN;IACA,OAAOC,QAAP;;;EAGFC,GAAG,CACD5D,UADC,EAEDqD,MAFC,EAGDK,EAHC,EAID5B,SAAoB,EAJnB;;;IAMD,MAAM6B,QAAQ,6BAAG,KAAKzB,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAH,qBAAG,uBAAwCO,GAAxC,CAA4CF,EAA5C,CAAjB;;IACA,IAAIC,QAAJ,EAAc;MACZ,OAAO,KAAK9B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;;;IAMF,OAAO,IAAP;;;EAGFiC,QAAQ,CACN9D,UADM,EAENqD,MAFM,EAGNnD,GAHM,EAIN4B,SAAoB,EAJd;IAMN,MAAMiB,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;IACA,IAAI,CAACN,KAAL,EAAY;MACV,MAAM,IAAIjE,KAAJ,CAAU,SAAV,CAAN;;;IAGF,MAAMsD,SAAS,GAAU5G,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAzB;IACA,MAAM2G,QAAQ,GAAGvB,SAAS,CAAC2B,IAAV,CAAeC,CAAC,IAAIA,CAAC,CAAC9D,GAAF,KAAUA,GAA9B,CAAjB;;IACA,IAAIyD,QAAJ,EAAc;MACZ,OAAO,KAAK9B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;;;IAMF,OAAO,IAAP;;;EAGFoC,MAAM,CACJjE,UADI,EAEJqD,MAFI,EAGJK,EAHI,EAIJ5B,SAAoB,EAJhB;IAMJ,MAAM6B,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqBqD,MAArB,EAA6BK,EAA7B,CAAjB;;IAEA,IAAIC,QAAJ,EAAc;MAAA;;MACZ,+BAAKzB,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,6CAAwCY,MAAxC,CAA+CP,EAA/C;MACA,OAAO,KAAK7B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;;;IAMF,OAAO8B,QAAP;;;EAGFO,KAAK,CACHlE,UADG,EAEHqD,MAFG,EAGHvB,MAHG;IAKH,MAAMiB,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;IACA,IAAI,CAACN,KAAL,EAAY;MACV,MAAM,IAAIjE,KAAJ,CAAU,SAAV,CAAN;;;IAGF,IAAIsD,SAAS,GAAG5G,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAhB;;IAGA,IAAI8E,MAAM,CAACqC,KAAX,EAAkB;MAChB,IAAI;QACF,MAAMC,UAAU,GAAG9I,oBAAoB,CAACwG,MAAM,CAACqC,KAAR,CAAvC;QACA/B,SAAS,GAAGA,SAAS,CAACnF,MAAV,CAAiB0G,QAAQ,IAAIS,UAAU,CAACT,QAAD,EAAW,EAAX,CAAvC,CAAZ;OAFF,CAGE,OAAOU,GAAP,EAAY;QACZ,MAAM,IAAI1E,kBAAJ,CACJ;UACE2E,IAAI,EAAE,cADR;UAEEjJ,OAAO,EAAGgJ,GAAW,CAAChJ;SAHpB,EAKJ,GALI,CAAN;;;;;IAWJ,MAAMkJ,cAAc,GAAGnC,SAAS,CAACvD,MAAjC;;IAGA,MAAM2F,MAAM,GAAG1C,MAAM,CAAC0C,MAAP,IAAiB,CAAhC;IACA,MAAMC,KAAK,GAAG3C,MAAM,CAAC2C,KAAP,IAAgB,EAA9B;IACArC,SAAS,GAAGA,SAAS,CAACsC,KAAV,CAAgBF,MAAhB,EAAwBA,MAAM,GAAGC,KAAjC,CAAZ;;IAGA,IAAI3C,MAAM,CAACD,MAAP,KAAkBnI,SAAtB,EAAiC;MAC/B0I,SAAS,GAAGA,SAAS,CAACzG,GAAV,CAAcgI,QAAQ;QAChC,OAAO,KAAK9B,MAAL,CAAY7B,UAAZ,EAAwB2D,QAAxB,EAAkC7B,MAAM,CAACD,MAAzC,CAAP;OADU,CAAZ;;;IAKF,OAAO;MACL8C,KAAK,EAAEJ,cADF;MAELK,KAAK,EAAExC,SAAS,CAACvD,MAFZ;MAGL2F,MAAM,EAAEA,MAHH;MAILC,KAAK,EAAEA,KAJF;MAKLI,OAAO,EAAEzC;KALX;;;EASF0C,uBAAuB,CACrB9E,UADqB,EAErB+E,UAFqB;IAIrB,IAAIA,UAAU,CAACrB,EAAf,EAAmB;MACjB,MAAMC,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqB+E,UAAU,CAAC1B,MAAhC,EAAwC0B,UAAU,CAACrB,EAAnD,CAAjB;;MACA,IAAIC,QAAJ,EAAc;QACZ,OAAOA,QAAP;;;MAEFqB,OAAO,CAACC,KAAR,kCACmCF,UAAU,CAAC1B,cAAc0B,UAAU,CAACrB,IADvE;MAGA,OAAOhK,SAAP;;;IAGF,IAAIqL,UAAU,CAAC7E,GAAf,EAAoB;MAClB,MAAM6C,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+B+E,UAAU,CAAC1B,MAA1C,CAAd;;MAEA,IAAIN,KAAJ,EAAW;;;QAGT,MAAMY,QAAQ,GAAGnI,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,EAA2B+G,IAA3B;QAEfmB,CAAC,IAAIA,CAAC,CAAChF,GAAF,KAAU6E,UAAU,CAAC7E,GAFX,CAAjB;;QAIA,IAAIyD,QAAJ,EAAc;UACZ,OAAOA,QAAP;;OARJ,MAUO;QACL,MAAM,IAAI7E,KAAJ,wCACmCiG,UAAU,CAAC1B,QAD9C,CAAN;;;;IAKJ,OAAO3J,SAAP;;;EAkFMsI,iBAAiB,CACvBhC,UADuB,EAEvB+B,SAFuB,EAGvBF,MAHuB;IAKvB,IAAIE,SAAS,KAAKrI,SAAlB,EAA6B;;IAE7B,IACEqI,SAAS,CAACsB,MAAV,KAAqB3J,SAArB,KACCqI,SAAS,CAAC2B,EAAV,KAAiBhK,SAAjB,IAA8BqI,SAAS,CAAC7B,GAAV,KAAkBxG,SADjD,CADF,EAGE;;MAEAqI,SAAS,CAACjF,GAAV,GAAgB,KAAKgI,uBAAL,CAA6B9E,UAA7B,EAAyC;QACvDqD,MAAM,EAAEtB,SAAS,CAACsB,MADqC;QAEvDK,EAAE,EAAE3B,SAAS,CAAC2B,EAFyC;QAGvDxD,GAAG,EAAE6B,SAAS,CAAC7B;OAHD,CAAhB;;MAKA,IAAI2B,MAAJ,EAAY;QACV,KAAKD,gBAAL,CAAsB5B,UAAtB,EAAkC+B,SAAS,CAACjF,GAA5C,EAAiD+E,MAAjD;;KAXJ,MAaO;MACL,IAAIA,MAAJ,EAAY;QACV,KAAKD,gBAAL,CAAsB5B,UAAtB,EAAkC+B,SAAlC,EAA6CF,MAA7C;;;;;;;MCvaKsD;EAIX/J,YAAYgK,WAAoB;IAHhC,WAAA,GAAkB,EAAlB;IACA,aAAA,GAAoB,IAApB;IAGE,KAAKA,QAAL,GAAgBA,QAAhB;;;EAGFC,cAAc,CAACC,QAAD,EAAmBC,YAAnB,EAAyCC,KAAzC;IACZ,MAAMnI,KAAK,GAAU;MACnBoI,YAAY,EAAEC,WAAW,CAAC,EAAD,CAAX,CAAgBC,QAAhB,CAAyB,QAAzB,CADK;MAEnBC,UAAU,EAAE,QAFO;MAGnBC,UAAU,EAAE,MAHO;MAInBL,KAAK,EAAEA,KAAK,IAAI;KAJlB;IAMA,KAAKM,MAAL,CAAYC,IAAZ,CAAiB1I,KAAjB;IACA,OAAOA,KAAP;;;EAGF2I,aAAa,CAAC3I,KAAD;IACX,IAAI,CAAC,KAAK+H,QAAV,EAAoB,OAAO,IAAP;IAEpB,MAAMa,UAAU,GAAG,KAAKH,MAAL,CAAY/B,IAAZ,CAAiBpG,CAAC,IAAIA,CAAC,CAAC8H,YAAF,KAAmBpI,KAAzC,CAAnB;;IACA,IAAI4I,UAAJ,EAAgB;MACd,OAAO,IAAP;;;IAEF,OAAO,KAAP;;;;;ACjCG,MAAMC,cAAc,GAAIC,OAAD;EAC5B,MAAMC,UAAU,GAAGD,OAAO,CAACE,MAAR,CAAe,eAAf,CAAnB;EACA,MAAMtM,KAAK,GAAGqM,UAAH,oBAAGA,UAAU,CAAErM,KAAZ,CAAkB,4BAAlB,CAAd;;EACA,IAAIA,KAAJ,EAAW;IAAA;;IACT,wBAAOA,KAAK,CAAC8D,MAAb,qBAAO,cAAcR,KAArB;;;EAEF,OAAO3D,SAAP;AACD,CAPM;;MCUM4M;EAGXlL,YAAYmL;IACV,KAAKxD,KAAL,GAAa,IAAIoC,WAAJ,CAAgBoB,OAAO,CAACnB,QAAxB,CAAb;;;EAGFoB,YAAY;IACV,MAAMC,MAAM,GAAGC,OAAO,CAACC,MAAR,EAAf;IACAF,MAAM,CAACG,GAAP,CAAWC,UAAU,CAACC,UAAX,CAAsB;MAAEC,QAAQ,EAAE;KAAlC,CAAX;IACAN,MAAM,CAACO,IAAP,CAAY,QAAZ,EAAsB,KAAKC,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAAtB;IACA,OAAOT,MAAP;;;EAGFU,gBAAgB;IACd,OAAO,OAAOhB,OAAP,EAAyBiB,QAAzB,EAA6CzI,IAA7C;MACL,MAAMtB,KAAK,GAAG6I,cAAc,CAACC,OAAD,CAA5B;;MACA,IAAI,CAAC9I,KAAL,EAAY;QACVsB,IAAI,CACF,IAAIgB,kBAAJ,CACE;UACE2E,IAAI,EAAE,eADR;UAEEjJ,OAAO,EACL;SAJN,EAME,GANF,CADE,CAAJ;;;MAYF,IAAI,CAACgC,KAAD,IAAU,CAAC,KAAK0F,KAAL,CAAWiD,aAAX,CAAyB3I,KAAzB,CAAf,EAAgD;QAC9CsB,IAAI,CACF,IAAIgB,kBAAJ,CACE;UACE2E,IAAI,EAAE,eADR;UAEEjJ,OAAO,EAAE;SAHb,EAKE,GALF,CADE,CAAJ;;;MAWFsD,IAAI;KA3BN;;;EA8BgB,MAAZsI,YAAY,CAACd,OAAD,EAAmBiB,QAAnB,EAAuCzI,IAAvC;IAChB,MAAMyH,UAAU,GAAGD,OAAO,CAACE,MAAR,CAAe,eAAf,CAAnB;;IACA,IAAI,CAACD,UAAL,EAAiB;MACf,OAAOzH,IAAI,CACT,IAAIgB,kBAAJ,CACE;QACE2E,IAAI,EAAE,gBADR;QAEEjJ,OAAO,EACL;OAJN,EAME,GANF,CADS,CAAX;;;IAWF,MAAMgM,WAAW,GAAGC,IAAI,CAACrJ,KAAL,CAAWmI,UAAX,CAApB;;IACA,IAAI,CAACiB,WAAL,EAAkB;MAChB,OAAO1I,IAAI,CACT,IAAIgB,kBAAJ,CACE;QACE2E,IAAI,EAAE,gBADR;QAEEjJ,OAAO,EACL;OAJN,EAME,GANF,CADS,CAAX;;;IAYF,MAAMkM,SAAS,GAAGpB,OAAO,CAACjC,KAAR,CAAcsD,UAAd,IAA4BrB,OAAO,CAACsB,IAAR,CAAaD,UAA3D;;IACA,IAAI,CAACD,SAAL,EAAgB;MACd,OAAO5I,IAAI,CACT,IAAIgB,kBAAJ,CACE;QACE2E,IAAI,EAAE,iBADR;QAEEjJ,OAAO,EAAE;OAHb,EAKE,GALF,CADS,CAAX;;;IAWF,IAAIkM,SAAS,KAAK,oBAAlB,EAAwC;MAAA;;MACtC,MAAMlK,KAAK,GAAG,KAAK0F,KAAL,CAAWsC,cAAX,CACZgC,WAAW,CAAClH,IADA,EAEZkH,WAAW,CAACK,IAFA,0BAGZvB,OAAO,CAACjC,KAAR,CAAcsB,KAHF,qBAGZ,qBAAqBG,QAArB,EAHY,CAAd;MAKA,OAAOyB,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BtK,KAA1B,CAAP;KANF,MAOO;MACL,OAAOsB,IAAI,CACT,IAAIgB,kBAAJ,CACE;QACE2E,IAAI,EAAE,wBADR;QAEEjJ,OAAO,wDAAwDkM;OAHnE,EAKE,GALF,CADS,CAAX;;;;;;MCxGOK,yBAAyB,GAAG;EACvC,OAAO;IACLlE,EAAE,EAAEmE,EAAM,EADL;IAELtH,SAAS,EAAE,IAAIuH,IAAJ,GAAWC,WAAX,EAFN;IAGLC,cAAc,EAAE,IAAIF,IAAJ,GAAWC,WAAX,EAHX;IAIL1G,OAAO,EAAE;GAJX;AAMD,CAPM;;MCEM4G;EAKX7M,YACE4E,YACAkI,UACAC;IAEA,KAAKnI,UAAL,GAAkBA,UAAlB;IACA,KAAKoI,QAAL,GAAgBD,OAAhB;IACA,KAAKE,SAAL,GAAiBH,QAAjB;;;EAGF1E,GAAG,CACDH,MADC,EAEDM,QAFC;;IAKD,IAAIN,MAAM,KAAK,eAAf,EAAgCA,MAAM,GAAG,oBAAT;IAEhC,MAAMiF,YAAY,GAAGjF,MAArB;IAEA,MAAMkF,OAAO,GAAG,KAAKF,SAAL,CAAeC,YAAf,CAAhB;;IACA,IAAIC,OAAJ,EAAa;MACX,KAAKH,QAAL,CAAc5E,GAAd,CAAkB,KAAKxD,UAAvB,EAAmCsI,YAAnC,EAAiD,EAC/C,GAAGV,yBAAyB,EADmB;QAE/C,GAAGjE;OAFL;KADF,MAKO;MACL,MAAM,IAAI7E,KAAJ,gBAAyBuE,4BAAzB,CAAN;;;;EAIJO,GAAG,CACDP,MADC,EAEDK,EAFC;IAID,OAAO,KAAK0E,QAAL,CAAcxE,GAAd,CACL,KAAK5D,UADA,EAELqD,MAFK,EAGLK,EAHK,EAIL,EAJK,CAAP;;;;EASF8E,aAAa,CACXnF,MADW;IAGX,MAAMkF,OAAO,GAAG,KAAKF,SAAL,CAAehF,MAAf,CAAhB;;IACA,IAAIkF,OAAO,KAAK7O,SAAhB,EAA2B;MACzB,OAAO6O,OAAO,CAACE,UAAf;;;IAEF,MAAM,IAAI3J,KAAJ,CAAU,oBAAV,CAAN;;;;;AC3DG,MAAM4J,WAAW,GAAIC,OAAD;EACzB,MAAMC,YAAY,GAAG,CAAC,QAAD,EAAW,MAAX,EAAmB,eAAnB,CAArB;EACA,MAAMrP,MAAM,GAA2B,EAAvC;EAEAwD,MAAM,CAACoG,OAAP,CAAewF,OAAf,EAAwBhH,OAAxB,CAAgC,CAAC,CAACzB,GAAD,EAAM5D,KAAN,CAAD;IAC9B,IAAIsM,YAAY,CAAC3J,QAAb,CAAsBiB,GAAG,CAACf,WAAJ,EAAtB,CAAJ,EAA8C;MAC5C5F,MAAM,CAAC2G,GAAD,CAAN,GAAc5D,KAAd;;GAFJ;EAMA,OAAO/C,MAAP;AACD,CAXM;;ACAA,MAAMsP,oBAAoB,GAAG,6CAA7B;AACP,AAAO,MAAMC,qBAAqB,GAAG,8CAA9B;;MCIuBC;EAM5B3N,YAAY4N;IAFZ,qBAAA,GAAmB,GAAnB;IAGE,KAAKC,cAAL,CAAoBD,MAApB;;;EAGFE,WAAW,CAACzC,MAAD;;EAEXwC,cAAc,CAACD,MAAD;IACZ,MAAMG,QAAQ,GAAG,KAAKC,WAAL,EAAjB;IACA,MAAM3C,MAAM,GAAGE,MAAM,CAAC;MAAE0C,WAAW,EAAE;KAAhB,CAArB;;IAGA,KAAKH,WAAL,CAAiBzC,MAAjB;IAEAA,MAAM,CAAC7C,GAAP,CAAW,GAAX,EAAgB,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAhB;IACAT,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;;IACAT,MAAM,CAAC7C,GAAP,CAAW,MAAX,EAAmB,KAAK2F,SAAL,CAAerC,IAAf,CAAoB,IAApB,CAAnB;IAEAT,MAAM,CAACxC,MAAP,CAAc,WAAd,EAA2B,KAAKuF,aAAL,CAAmBtC,IAAnB,CAAwB,IAAxB,CAA3B;IACAT,MAAM,CAACxC,MAAP,CAAc,MAAd,EAAsB,KAAKwF,YAAL,CAAkBvC,IAAlB,CAAuB,IAAvB,CAAtB;IAEAT,MAAM,CAACO,IAAP,CAAY,GAAZ,EAAiB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAjB;IACAT,MAAM,CAACO,IAAP,CAAY,WAAZ,EAAyB,KAAK0C,WAAL,CAAiBxC,IAAjB,CAAsB,IAAtB,CAAzB;IACAT,MAAM,CAACO,IAAP,CAAY,MAAZ,EAAoB,KAAK2C,UAAL,CAAgBzC,IAAhB,CAAqB,IAArB,CAApB;IAEA8B,MAAM,CAACpC,GAAP,KAAeuC,UAAf,EAA2B1C,MAA3B;;;EAGF7C,GAAG,CAACuC,OAAD,EAAmBiB,QAAnB;IACD,MAAM3C,KAAK,GAAG,KAAKmF,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcO,KAA/B,CAAd;;IACA,MAAMD,MAAM,GAAG,KAAKoF,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcM,MAA/B,CAAf;;IAEA,MAAMjL,MAAM,GAAG,KAAKkP,UAAL,CAAgBvE,KAAhB,CAAsBiC,OAAO,CAACrE,MAAR,CAAe9B,UAArC,EAAiD;MAC9D6B,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B,CADsD;MAE9DsC,KAAK,EAAE,KAAKyF,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcC,KAA/B,CAFuD;MAG9DM,KAAK,EAAEA,KAAK,KAAK/K,SAAV,GAAsBmQ,MAAM,CAACpF,KAAD,CAA5B,GAAsC/K,SAHiB;MAI9D8K,MAAM,EAAEA,MAAM,KAAK9K,SAAX,GAAuBmQ,MAAM,CAACrF,MAAD,CAA7B,GAAwC9K;KAJnC,CAAf;IAMA,OAAO0N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFgQ,SAAS,CAACpD,OAAD,EAAmBiB,QAAnB;IACP,MAAM7N,MAAM,GAAG,KAAKuQ,aAAL,CAAmB3D,OAAnB,EAA4BA,OAAO,CAACrE,MAAR,CAAe,IAAf,CAA5B,CAAf;;IACA,IAAI,CAACvI,MAAL,EAAa;MACX,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,EAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGF+P,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;IACR,MAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgB3E,QAAhB,CACbqC,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAe,KAAf,CAFa,EAGb;MAAED,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;KAHG,CAAf;IAKA,IAAI,CAACtI,MAAL,EAAa,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,EAAP;IACb,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFkQ,YAAY,CAACtD,OAAD,EAAmBiB,QAAnB;IACV,MAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgBxE,MAAhB,CACbkC,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAe,IAAf,CAFa,EAGb;MACED,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;KAJG,CAAf;;IAOA,IAAI,CAACtI,MAAL,EAAa;MACX,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFiQ,aAAa,CAACrD,OAAD,EAAmBiB,QAAnB;IACX,OAAOA,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,iBAA1B,CAAP;;;EAGFX,IAAI,CAACb,OAAD,EAAmBiB,QAAnB;IACF,MAAM2C,KAAK,GAAG5D,OAAO,CAACsB,IAAtB;IACA,MAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgBuB,MAAhB,CAAuB7D,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkD+J,KAAlD,CAAjB;;IACA,MAAMxQ,MAAM,GAAG,KAAKuQ,aAAL,CAAmB3D,OAAnB,EAA4BxC,QAAQ,CAACD,EAArC,CAAf;;IACA,OAAO0D,QAAQ,CAACjG,MAAT,CAAgB,KAAK8I,gBAArB,EAAuCtC,IAAvC,CAA4CpO,MAA5C,CAAP;;;EAGFoQ,UAAU,CAACxD,OAAD,EAAmBiB,QAAnB;IACR,MAAM8C,aAAa,GAAW/D,OAAO,CAACsB,IAAtC;IACA,MAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgB7E,GAAhB,CACfuC,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe,IAAf,CAFe,CAAjB;;IAIA,IAAI,CAAC6B,QAAL,EAAe;MACb,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAGF,IAAIhE,QAAQ,CAACtC,OAAT,KAAqB6I,aAAa,CAAC7I,OAAvC,EAAgD;MAC9C,OAAO+F,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,yBAA1B,CAAP;;;IAGF,MAAMwC,eAAe,GAAG,KAAK1B,UAAL,CAAgB2B,oBAAhB,CACtBjE,OAAO,CAACrE,MAAR,CAAe9B,UADO,EAEtB2D,QAFsB,EAGtBuG,aAAa,CAACG,OAHQ,CAAxB;;IAMA,MAAM9Q,MAAM,GAAG,KAAKuQ,aAAL,CAAmB3D,OAAnB,EAA4BgE,eAAe,CAACzG,EAA5C,CAAf;;IACA,OAAO0D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFmQ,WAAW,CAACvD,OAAD,EAAmBiB,QAAnB;IACT,OAAOA,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,iBAA1B,CAAP;;;EAGQmC,aAAa,CAAC3D,OAAD,EAAmBmE,UAAnB;IACrB,MAAM/Q,MAAM,GAAG,KAAKkP,UAAL,CAAgB7E,GAAhB,CAAoBuC,OAAO,CAACrE,MAAR,CAAe9B,UAAnC,EAA+CsK,UAA/C,EAA2D;MACxEzI,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;KADK,CAAf;IAGA,OAAOtI,MAAP;;;;EAIMqQ,WAAW,CACjBtN,KADiB;IAGjB,IAAId,KAAK,CAACC,OAAN,CAAca,KAAd,CAAJ,EAA0B;;MAExB,OAAOA,KAAP;KAFF,MAGO,IAAIA,KAAK,KAAK5C,SAAd,EAAyB;MAC9B,OAAO,IAAI4C,OAAJ,CAAP;;;IAEF,OAAO5C,SAAP;;;;;ACpIG,MAAM6Q,2BAA2B,GAAG,CACzC5G,QADyC,EAEzC6G,eAFyC;EAIzC,IAAI7G,QAAQ,CAACtC,OAAT,KAAqBmJ,eAAzB,EAA0C;EAE1C,MAAMzF,UAAU,GAAkBpB,QAAS,CAACD,EAAV,GACfC,QAAS,CAACD,EADK,GAEpBC,QAAS,CAACzD,GAFxB;EAIA,MAAM,IAAIP,kBAAJ,CACJ;IACEtE,OAAO,YAAY0J,+DAA+DyF,6BAA6B7G,QAAQ,CAACtC,UAD1H;IAEEoJ,cAAc,EAAE9G,QAAQ,CAACtC,OAF3B;IAGEiD,IAAI,EAAE;GAJJ,EAMJ,GANI,CAAN;AAQD,CAlBM;;MCiBeoG;EAMpBtP,YAAY+M;IAJF,YAAA,GAEN,EAFM;IAKR,KAAKC,QAAL,GAAgBD,OAAhB;;;EAKFiC,oBAAoB,CAClBpK,UADkB,EAElB2D,QAFkB,EAGlB0G,OAHkB;;IAMlB,MAAMM,gBAAgB,GAAGlJ,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAeiC,QAAf,CAAX,CAAzB;IAEA0G,OAAO,CAAC1I,OAAR,CAAgBiJ,MAAM;MACpB,MAAMC,UAAU,GAAG,KAAKR,OAAL,CAAaO,MAAM,CAACA,MAApB,CAAnB;;MACA,IAAI,CAACC,UAAL,EAAiB;QACf7F,OAAO,CAACC,KAAR,0CAAuD2F,MAAM,CAACA,QAA9D;QACA;;;MAEFC,UAAU,CAAC7K,UAAD,EAAa2K,gBAAb,EAA+BC,MAA/B,CAAV;KANF;;IASA,IAAI,CAACE,SAAS,CAACH,gBAAD,EAAmBhH,QAAnB,CAAd,EAA4C;MAC1C,KAAKoH,IAAL,CAAU/K,UAAV,EAAsB2K,gBAAtB;;;IAEF,OAAOA,gBAAP;;;;AAIJ,MAAsBK,mCAAmCN;EAIvDtP,YAAY+M;IACV,MAAMA,OAAN;;IACA,KAAKC,QAAL,CAAchF,aAAd,CAA4B,KAAK6H,SAAL,EAA5B;;;EAGF/G,KAAK,CAAClE,UAAD,EAAqB8B,SAAsB,EAA3C;IACH,OAAO,KAAKsG,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MACvDpJ,MAAM,EAAEC,MAAM,CAACD,MADwC;MAEvDsC,KAAK,EAAErC,MAAM,CAACqC,KAFyC;MAGvDK,MAAM,EAAE1C,MAAM,CAAC0C,MAHwC;MAIvDC,KAAK,EAAE3C,MAAM,CAAC2C;KAJT,CAAP;;;EAQFb,GAAG,CACD5D,UADC,EAED0D,EAFC,EAGD5B,SAAoB,EAHnB;IAKD,OAAO,KAAKsG,QAAL,CAAcxE,GAAd,CAAkB5D,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,EAAgDvH,EAAhD,EAAoD5B,MAApD,CAAP;;;EAGFgC,QAAQ,CACN9D,UADM,EAENE,GAFM,EAGN4B,SAAoB,EAHd;IAKN,OAAO,KAAKsG,QAAL,CAActE,QAAd,CAAuB9D,UAAvB,EAAmC,KAAKiL,SAAL,EAAnC,EAAqD/K,GAArD,EAA0D4B,MAA1D,CAAP;;;EAGFmC,MAAM,CACJjE,UADI,EAEJ0D,EAFI,EAGJ5B,SAAoB,EAHhB;IAKJ,OAAO,KAAKsG,QAAL,CAAcnE,MAAd,CAAqBjE,UAArB,EAAiC,KAAKiL,SAAL,EAAjC,EAAmDvH,EAAnD,EAAuD5B,MAAvD,CAAP;;;EAGFiJ,IAAI,CAAC/K,UAAD,EAAqB2D,QAArB;IACF,MAAMuH,OAAO,GAAG,KAAKtH,GAAL,CAAS5D,UAAT,EAAqB2D,QAAQ,CAACD,EAA9B,CAAhB;;IAEA,IAAIwH,OAAJ,EAAa;MACXX,2BAA2B,CAACW,OAAD,EAAUvH,QAAQ,CAACtC,OAAnB,CAA3B;KADF,MAEO;MACL,IAAIsC,QAAQ,CAACtC,OAAT,KAAqB,CAAzB,EAA4B;QAC1B,MAAM,IAAI1B,kBAAJ,CACJ;UACE2E,IAAI,EAAE,kBADR;UAEEjJ,OAAO,EAAE;SAHP,EAKJ,GALI,CAAN;;;;;IAWJsI,QAAQ,CAACtC,OAAT,IAAoB,CAApB;;IACA,KAAK+G,QAAL,CAAc5E,GAAd,CAAkBxD,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,EAAgDtH,QAAhD;;;;;ACxGG,MAAMwH,kBAAkB,GAAG,CAChCpB,KADgC,EAEhC/J,UAFgC,EAGhCmI,OAHgC;EAKhC,IAAI,CAAC4B,KAAL,EAAY,OAAOrQ,SAAP;EACZ,IAAI,CAACqQ,KAAK,CAAC3N,IAAX,EAAiB,OAAO1C,SAAP;EACjB,IAAI,CAACqQ,KAAK,CAAC3N,IAAN,CAAWiH,MAAhB,EAAwB,OAAO3J,SAAP;EACxB,IAAI,CAACqQ,KAAK,CAACqB,MAAX,EAAmB,OAAO1R,SAAP;EAEnB,MAAM2R,YAAY,GAAGlD,OAAO,CAACrD,uBAAR,CACnB9E,UADmB,EAEnB+J,KAAK,CAAC3N,IAFa,CAArB;;EAKA,IAAI,CAACiP,YAAL,EAAmB;IACjB,MAAM,IAAIvM,KAAJ,aACQiL,KAAK,CAAC3N,IAAN,CAAWiH,mBAAmB0G,KAAK,CAAC3N,IAAN,CAAWsH,aAAaqG,KAAK,CAAC3N,IAAN,CAAW8D,KADzE,CAAN;;;EAKF,OAAO;IACL9D,IAAI,EAAE;MACJiH,MAAM,EAAE0G,KAAK,CAAC3N,IAAN,CAAWiH,MADf;MAEJK,EAAE,EAAE2H,YAAY,CAAC3H;KAHd;IAKL0H,MAAM,EAAErB,KAAK,CAACqB;GALhB;AAOD,CA5BM;AA8BP,AAAO,MAAME,WAAW,GAAIvB,KAAD;EACzB,OAAO;IACLrG,EAAE,EAAEmE,EAAM,EADL;IAELvL,KAAK,EAAEiP,gBAAgB,CAACxB,KAAK,CAACzN,KAAP;GAFzB;AAID,CALM;AAOP,AAAO,MAAMiP,gBAAgB,GAAIjP,KAAD;EAC9B,OAAO;IACLF,IAAI,EAAE,eADD;IAELoP,cAAc,EAAE,CAFX;IAGL,GAAGlP;GAHL;AAKD,CANM;AAQP,AAAO,MAAMmP,qBAAqB,GAAG,CACnCC,GADmC,EAEnC1L,UAFmC,EAGnCmI,OAHmC;EAKnC,IAAI,CAACuD,GAAL,EAAU,OAAOhS,SAAP;EACV,MAAMiK,QAAQ,GAAGwE,OAAO,CAACrD,uBAAR,CAAgC9E,UAAhC,EAA4C0L,GAA5C,CAAjB;;EACA,IAAI,CAAC/H,QAAL,EAAe;IACb,MAAM,IAAI7E,KAAJ,CAAU,eAAV,CAAN;;;EAGF,MAAMiE,KAAK,GAAGY,QAAd;EACA,OAAO;IACLN,MAAM,EAAE,OADH;IAELnD,GAAG,EAAE6C,KAAK,CAAC7C;GAFb;AAID,CAhBM;AAkBP,AAAO,MAAMyL,kCAAkC,GAAG,CAChDC,kBADgD,EAEhD5L,UAFgD,EAGhDmI,OAHgD;EAKhD,MAAMxE,QAAQ,GAAGwE,OAAO,CAACrD,uBAAR,CACf9E,UADe,EAEf4L,kBAFe,CAAjB;EAIA,IAAI,CAACjI,QAAL,EACE,MAAM,IAAI7E,KAAJ,kBACa8M,kBAAkB,CAACvI,kBAAkBuI,kBAAkB,CAAClI,cAAckI,kBAAkB,CAAC1L,eADtG,CAAN;EAIF,OAAQ;IACNmD,MAAM,EAAEuI,kBAAkB,CAACvI,MADrB;IAENK,EAAE,EAAEC,QAAF,oBAAEA,QAAQ,CAAED;GAFhB;AAID,CAlBM;;MCzDMmI,+BAA+Bb;EAA5C5P;;IAuDE,YAAA,GASI;MACF0Q,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OANA;MAQF6L,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OAbA;MAeFC,YAAY,EAAE,CACZjM,UADY,EAEZ2D,QAFY,EAGZ;QAAEuI;OAHU;QAKZvI,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;OApBA;MAsBFC,aAAa,EAAE,CACbnM,UADa,EAEb2D,QAFa,EAGb;QAAEyI;OAHW;QAKbzI,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;OA3BA;MA6BFC,oBAAoB,EAAE,CACpBrM,UADoB,EAEpB2D,QAFoB,EAGpB;QAAEuI,SAAF;QAAaE;OAHO;QAKpBzI,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;QACAvI,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;OAnCA;MAqCFE,eAAe,EAAE,CACftM,UADe,EAEf2D,QAFe,EAGf;QAAE4I;OAHa;QAKf5I,QAAQ,CAAC4I,SAAT,GAAqBA,SAArB;OA1CA;MA4CFC,cAAc,EAAE,CACdxM,UADc,EAEd2D,QAFc,EAGd;QAAE8I;OAHY;QAKd9I,QAAQ,CAAC8I,QAAT,GAAoBA,QAApB;;KA1DJ;;;EAtDAxB,SAAS;IACP,OAAO,eAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;MAE7B1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFkB;MAG7B8L,WAAW,EAAEjC,KAAK,CAACiC,WAHU;MAI7BU,aAAa,EAAE3C,KAAK,CAAC2C,aAJQ;MAK7BD,QAAQ,EAAE1C,KAAK,CAAC0C,QAAN,IAAkB,KALC;MAM7BtM,IAAI,EAAE4J,KAAK,CAAC5J,IANiB;MAO7BwM,UAAU,EAAE,EAPiB;MAQ7B7Q,MAAM,EAAEiO,KAAK,CAACjO,MARe;MAS7B8Q,oBAAoB,EAAE7C,KAAK,CAAC6C,oBAAN,IAA8B,KATvB;MAU7BL,SAAS,EAAExC,KAAK,CAACwC,SAVY;MAW7BM,YAAY,EAAE9C,KAAK,CAAC8C,YAAN,IAAsB,UAXP;MAY7BX,SAAS,EAAEnC,KAAK,CAACmC,SAZY;MAa7BE,UAAU,EAAErC,KAAK,CAACqC,UAbW;MAc7B9P,KAAK,EAAE,KAAKwQ,mBAAL,CAAyB/C,KAAK,CAACzN,KAA/B;KAdT;IAgBA,KAAKyO,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGMmJ,mBAAmB,CAACxQ,KAAD;IACzB,QAAQA,KAAK,CAACF,IAAd;MACE,KAAK,UAAL;QAAiB;UACf,OAAO;YACLA,IAAI,EAAE,UADD;YAEL2Q,KAAK,EAAEzQ,KAAK,CAACyQ,KAAN,CAAYpR,GAAZ,CAAgB4P,gBAAhB;WAFT;;;MAKF,KAAK,OAAL;QAAc;UACZ,OAAO;YACLnP,IAAI,EAAE,OADD;YAEL2Q,KAAK,EAAEzQ,KAAK,CAACyQ,KAAN,CAAYpR,GAAZ,CAAgB4P,gBAAhB;WAFT;;;MAKF,KAAK,cAAL;QAAqB;UACnB,OAAO,EACL,GAAGjP;WADL;;;MAIF,KAAK,UAAL;QAAiB;UACf,OAAO,EACL,GAAGA;WADL;;;;IAMJ,OAAOA,KAAP;;;;;MCtES0Q,4BAA4BjE;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIoD,sBAAJ,CAA2B1D,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;;;MCYS6D,uBAAuBjC;EAApC5P;;IAwCE,YAAA,GAAU;MACR8R,WAAW,EAAE,CACXlN,UADW,EAEX2D,QAFW,EAGX;QAAEwJ,SAAF;QAAaC,SAAb;QAAwBC,GAAxB;QAA6BC,QAAQ,GAAG;OAH7B;QAKX,IAAIzK,OAAO,GAAmB,IAA9B;QACA,IAAI0K,OAAJ;;QAEA,IAAIJ,SAAS,IAAIC,SAAjB,EAA4B;;UAE1BvK,OAAO,GAAG,KAAKuF,QAAL,CAAcxE,GAAd,CAAkB5D,UAAlB,EAA8B,SAA9B,EAAyCmN,SAAzC,EAAoD,EAApD,CAAV;SAFF,MAGO,IAAIE,GAAJ,EAAS;;UAEd,MAAMG,KAAK,GAAG,KAAKpF,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,SAAhC,EAA2C;YACvDmE,KAAK,EAAE,0CACoCkJ,+CAA+CA,SADnF;WADK,CAAd;;UAMA,IAAIG,KAAK,CAAC7I,KAAN,KAAgB,CAApB,EAAuB;YACrB9B,OAAO,GAAG2K,KAAK,CAAC3I,OAAN,CAAc,CAAd,CAAV;;;;QAIJ,IAAI,CAAChC,OAAL,EAAc;;UAEZ,MAAM,IAAIlD,kBAAJ,CAAqC;YACzC2E,IAAI,EAAE,SADmC;YAEzCjJ,OAAO,EAAEgS,GAAG,+CACoCA,iBADpC,yBAEcF;WAJtB,CAAN;;;;QASFI,OAAO,GAAG,CACR1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aADnB,EAER,GAAG7K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2ByC,QAFtB,EAGR5J,IAHQ,CAGH6J,CAAC;UACN,IAAIP,GAAJ,EAAS,OAAOO,CAAC,CAACP,GAAF,KAAUA,GAAjB;UACT,IAAID,SAAJ,EAAe,OAAOQ,CAAC,CAAClK,EAAF,KAAS0J,SAAhB;UACf,OAAO,KAAP;SANQ,CAAV;;QASA,IAAI,CAACG,OAAL,EAAc;;UAEZ,MAAM,IAAI5N,kBAAJ,CAAqC;YACzC2E,IAAI,EAAE,SADmC;YAEzCjJ,OAAO,EAAEgS,GAAG,0BACeA,qBAAqBxK,OAAO,CAACa,gBAD5C,yBAEc0J,2BAA2BvK,OAAO,CAACa;WAJzD,CAAN;;;QAQF,MAAMmK,YAAY,GAAGlK,QAAQ,CAACmK,SAAT,CAAmBtP,IAAnB,CACnBoP,CAAC;UAAA;;UAAA,OAAIA,CAAC,CAACT,SAAF,kBAAgBtK,OAAhB,qBAAgB,SAASa,EAAzB,KAA+BkK,CAAC,CAACL,OAAF,CAAU7J,EAAV,kBAAiB6J,OAAjB,qBAAiB,SAAS7J,EAA1B,CAAnC;SADkB,CAArB;;QAGA,IAAImK,YAAJ,EAAkB;;UAEhBlK,QAAQ,CAACmK,SAAT,CAAmBnS,GAAnB,CAAuBiS,CAAC;;;YACtB,IAAIA,CAAC,CAACT,SAAF,mBAAgBtK,OAAhB,qBAAgB,UAASa,EAAzB,KAA+BkK,CAAC,CAACL,OAAF,CAAU7J,EAAV,mBAAiB6J,OAAjB,qBAAiB,UAAS7J,EAA1B,CAAnC,EAAiE;cAC/DkK,CAAC,CAACN,QAAF,IAAcA,QAAd;cACAM,CAAC,CAACG,UAAF,CAAaC,UAAb,GAA0BC,2BAA2B,CAACL,CAAD,CAArD;;;YAEF,OAAOA,CAAP;WALF;SAFF,MASO;UAAA;;;UAEL,IAAI,qBAACL,OAAO,CAACW,MAAT,aAAC,gBAAgBrP,MAAjB,CAAJ,EAA6B;YAC3B,MAAM,IAAIc,kBAAJ,CAAqC;cACzC2E,IAAI,EAAE,SADmC;cAEzCjJ,OAAO,wBAAwB8R;aAF3B,CAAN;;;UAMF,MAAMgB,KAAK,GAAGZ,OAAO,CAACW,MAAR,CAAe,CAAf,CAAd;UACAvK,QAAQ,CAACmK,SAAT,CAAmB/H,IAAnB,CAAwB;YACtBrC,EAAE,EAAEmE,EAAM,EADY;YAEtBsF,SAAS,EAAEtK,OAAO,CAACa,EAFG;YAGtB0K,UAAU,EAAEvL,OAAO,CAAC3C,GAHE;YAItBC,IAAI,EAAE0C,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2B/K,IAJX;YAKtBkO,WAAW,EAAExL,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BoD,IALlB;YAMtBC,WAAW,EAAE1L,OAAO,CAAC0L,WANC;YAOtBhB,OAPsB;YAQtBY,KAAK,EAAEA,KARe;YAStBJ,UAAU,EAAE,EACV,GAAGI,KAAK,CAAC7R,KADC;cAEV0R,UAAU,EAAEG,KAAK,CAAC7R,KAAN,CAAY0R,UAAZ,GAAyBV;aAXjB;YAatBA,QAbsB;YActBkB,0BAA0B,EAAE,EAdN;YAetBC,YAAY,EAAE,UAfQ;YAgBtBC,SAAS,EAAE,UAhBW;YAiBtB5L,KAAK,EAAE;WAjBT;;;;QAsBFa,QAAQ,CAACoK,UAAT,CAAoBC,UAApB,GAAiCW,uBAAuB,CAAChL,QAAD,CAAxD;OAnGM;MAqGRiL,cAAc,EAAE,CACd5O,UADc,EAEd2D,QAFc,EAGd;QAAEkL,UAAF;QAAcvB;OAHA;QAKd,MAAMwB,QAAQ,GAAGnL,QAAQ,CAACmK,SAAT,CAAmB/J,IAAnB,CAAwB6J,CAAC,IAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAtC,CAAjB;;QACA,IAAI,CAACC,QAAL,EAAe;;UAEb,MAAM,IAAInP,kBAAJ,CAAqC;YACzC2E,IAAI,EAAE,SADmC;YAEzCjJ,OAAO,0BAA0BwT;WAF7B,CAAN;;;QAMF,MAAME,YAAY,GAAG,CAACzB,QAAD,IAAaA,QAAQ,IAAIwB,QAAQ,CAACxB,QAAvD;;QACA,IAAIyB,YAAJ,EAAkB;;UAEhBpL,QAAQ,CAACmK,SAAT,GAAqBnK,QAAQ,CAACmK,SAAT,CAAmB7Q,MAAnB,CAA0B2Q,CAAC,IAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAxC,CAArB;SAFF,MAGO;;UAELlL,QAAQ,CAACmK,SAAT,CAAmBnS,GAAnB,CAAuBiS,CAAC;YACtB,IAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAT,IAAuBvB,QAA3B,EAAqC;cACnCM,CAAC,CAACN,QAAF,IAAcA,QAAd;cACAM,CAAC,CAACG,UAAF,CAAaC,UAAb,GAA0BC,2BAA2B,CAACL,CAAD,CAArD;;;YAEF,OAAOA,CAAP;WALF;;;;QAUFjK,QAAQ,CAACoK,UAAT,CAAoBC,UAApB,GAAiCW,uBAAuB,CAAChL,QAAD,CAAxD;OAnIM;MAqIRqL,iBAAiB,EAAE,CACjBhP,UADiB,EAEjB2D,QAFiB,EAGjB;QAAEsL;OAHe;QAKjBtL,QAAQ,CAACuL,cAAT,GAA0BD,OAA1B;OA1IM;MA4IRE,UAAU,EAAE,CACVnP,UADU,EAEV2D,QAFU,EAGV;QAAEyL;OAHQ;QAKVzL,QAAQ,CAACyL,OAAT,GAAmBA,OAAnB;OAjJM;MAmJRC,gBAAgB,EAAE,CAChBrP,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE2L;OAHc;QAKhB3L,QAAQ,CAAC4L,aAAT,GAAyBD,KAAzB;OAxJM;MA0JRE,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;QAAExD,IAAF;QAAQ7D;OAHM;QAKd,IAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;UACpB,MAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;;;QAEF6E,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;OAlKM;MAoKRoT,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;QAAEvH,IAAF;QAAQgP;OAHK;QAKb,IAAI,CAAChP,IAAL,EAAW;UACTuH,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;SADF,MAEO;UACL,MAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;UAIA,IAAI,CAACuT,YAAL,EAAmB;YACjB,MAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;;;UAGFuH,QAAQ,CAAC8L,MAAT,GAAkB;YAChBrT,IAAI,EAAE;cACJiH,MAAM,EAAE,MADJ;cAEJK,EAAE,EAAEiM,YAAY,CAACjM;aAHH;YAKhB0H,MAAM,EAAEA,MAAM,IAAI;WALpB;;OApLI;MA6LRwE,SAAS,EAAE,CACT5P,UADS,EAET2D,QAFS,EAGT;QAAEkM;OAHO;QAKTlM,QAAQ,CAACkM,MAAT,GAAkBA,MAAlB;OAlMM;MAoMRC,kBAAkB,EAAE,CAClB9P,UADkB,EAElB2D,QAFkB,EAGlB;QAAEsL;OAHgB;QAKlBtL,QAAQ,CAACoM,eAAT,GAA2Bd,OAA3B;;KAzMJ;;;EAvCAhE,SAAS;IACP,OAAO,MAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;MAErBoI,SAAS,EAAE,QAFU;MAGrBlC,SAAS,EAAE,EAHU;MAIrBmC,eAAe,EAAE,EAJI;MAKrBlC,UAAU,EAAE;QACV3R,IAAI,EAAE,eADI;QAEV4R,UAAU,EAAE,CAFF;QAGVkC,YAAY,EAAEnG,KAAK,CAACoG,QAHV;QAIV3E,cAAc,EAAE;OATG;MAWrB4E,OAAO,EAAE,UAXY;MAYrBC,eAAe,EAAE,UAZI;MAarBC,kBAAkB,EAAE,eAbC;MAcrBC,YAAY,EAAE,EAdO;MAerBC,MAAM,EAAE,UAfa;MAgBrBf,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAhB5B;IAkBA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGF8M,aAAa,CAACzQ,UAAD;;IAEX,MAAM6E,OAAO,GAAG,KAAKuD,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MAChE9G,KAAK,EAAE,qBAAA;KADO,CAAhB;;IAGA,IAAIU,OAAO,CAACF,KAAR,GAAgB,CAApB,EAAuB;MACrB,OAAOE,OAAO,CAACA,OAAR,CAAgB,CAAhB,CAAP;;;IAGF;;;;;AAiNJ,MAAMoJ,2BAA2B,GAAIa,QAAD,IAClCA,QAAQ,CAACX,KAAT,CAAgB7R,KAAhB,CAAsB0R,UAAtB,GAAmCc,QAAQ,CAACxB,QAD9C;;AAGA,MAAMqB,uBAAuB,GAAItM,IAAD,IAC9BA,IAAI,CAACyL,SAAL,CAAe4C,MAAf,CAAsB,CAACC,GAAD,EAAM/U,IAAN,KAAe+U,GAAG,GAAG/U,IAAI,CAACmS,UAAL,CAAgBC,UAA3D,EAAuE,CAAvE,CADF;;MC9Qa4C,oBAAoB7H;EAG/B3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIwE,cAAJ,CAAmB9E,OAAnB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,OAAP;;;;;MCMSyH,2BAA2B7F;EAAxC5P;;IAiCE,YAAA,GAAU;MACR0V,eAAe,EAAE,CACf9Q,UADe,EAEf2D,QAFe,EAGf;QAAEoN,OAAF;QAAWC,QAAX;QAAqB7Q;OAHN;;;QAKf,oBAAAwD,QAAQ,CAACsN,MAAT,sCAAiBtP,OAAjB,CAAyBuP,KAAK;UAC5B,IAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;YAClCwN,KAAK,CAAC/Q,IAAN,GAAaA,IAAb;;;UAEF,IAAI6Q,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;YACrCgR,KAAK,CAAC/Q,IAAN,GAAaA,IAAb;;SALJ;OANM;MAeRgR,UAAU,EAAE,CACVnR,UADU,EAEV2D,QAFU,EAGV;QAAE2K;OAHQ;QAKV3K,QAAQ,CAAC2K,IAAT,GAAgBA,IAAhB;OApBM;MAsBRxC,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OA3BM;MA6BRkR,mBAAmB,EAAE,CACnBpR,UADmB,EAEnB2D,QAFmB,EAGnB;QAAEoN,OAAF;QAAWC,QAAX;QAAqBhF;OAHF;;;QAKnB,qBAAArI,QAAQ,CAACsN,MAAT,uCAAiBtP,OAAjB,CAAyBuP,KAAK;UAC5B,IAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;YAClCwN,KAAK,CAAClF,WAAN,GAAoBA,WAApB;;;UAEF,IAAIgF,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;YACrCgR,KAAK,CAAClF,WAAN,GAAoBA,WAApB;;SALJ;OAlCM;MA2CRqF,eAAe,EAAE,CACfrR,UADe,EAEf2D,QAFe,EAGf;QAAEoN,OAAF;QAAWC,QAAX;QAAqBM;OAHN;;;QAKf,qBAAA3N,QAAQ,CAACsN,MAAT,uCAAiBtP,OAAjB,CAAyBuP,KAAK;UAC5B,IAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;YAClCwN,KAAK,CAACI,OAAN,GAAgBA,OAAhB;;;UAEF,IAAIN,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;YACrCgR,KAAK,CAACI,OAAN,GAAgBA,OAAhB;;SALJ;OAhDM;MAyDRvF,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OA9DM;MAgERuF,kBAAkB,EAAE,CAClBvR,UADkB,EAElB2D,QAFkB,EAGlB;QAAE6N;OAHgB;QAKlB7N,QAAQ,CAAC6N,eAAT,GAA2BA,eAA3B;OArEM;MAuERC,eAAe,EAAE,CACfzR,UADe,EAEf2D,QAFe,EAGf;QAAE+N;OAHa;QAKf/N,QAAQ,CAAC+N,YAAT,GAAwBA,YAAxB;OA5EM;MA8ERC,YAAY,EAAE,CACZ3R,UADY,EAEZ2D,QAFY,EAGZ;QAAEiO;OAHU;QAKZjO,QAAQ,CAACiO,SAAT,GAAqBA,SAArB;;KAnFJ;;;EAhCA3G,SAAS;IACP,OAAO,UAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAa,EACzB,GAAGiE,yBAAyB,EADH;MAEzB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFc;MAGzBC,IAAI,EAAE4J,KAAK,CAAC5J,IAHa;MAIzBmO,IAAI,EAAEvE,KAAK,CAACuE,IAJa;MAKzBuD,SAAS,EAAE9H,KAAK,CAAC8H,SAAN,IAAmB,EALL;MAMzB7I,MAAM,EAAEe,KAAK,CAACf,MAAN,GACJ;QAAE3F,MAAM,EAAE,UAAV;QAAsBK,EAAE,EAAEqG,KAAK,CAACf,MAAN,CAAatF;OADnC,GAEJhK,SARqB;MASzBoY,SAAS,EAAE,EATc;MAUzBb,MAAM,EACJ,kBAAAlH,KAAK,CAACkH,MAAN,mCAActV,GAAd,CAAkBoW,CAAC;QACjB,OAAO;UACLrO,EAAE,EAAEmE,EAAM,EADL;UAEL1H,IAAI,EAAE4R,CAAC,CAAC5R,IAFH;UAGL6L,WAAW,EAAE+F,CAAC,CAAC/F,WAHV;UAILsF,OAAO,EAAES,CAAC,CAACT,OAJN;UAKLU,IAAI,EAAED,CAAC,CAACC,IALH;UAML9R,GAAG,EAAE6R,CAAC,CAAC7R,GANF;UAOLuP,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;SAP5B;OADF,MAUM;KArBV;IAuBA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC7CSsO,yBAAyBlJ;EAGpC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIoI,kBAAJ,CAAuB1I,OAAvB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,YAAP;;;;;MCNS8I,0BAA0BlH;EACrCC,SAAS;IACP,OAAO,SAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;MAExB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFa;MAGxBiS,KAAK,EAAEpI,KAAK,CAACoI,KAAN,IAAe;KAHxB;IAKA,KAAKpH,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCfSyO,uBAAuBrJ;EAGlC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIyJ,iBAAJ,CAAsB/J,OAAtB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,UAAP;;;;;MCHSiJ,gCAAgCrH;EAA7C5P;;IAcE,YAAA,GAAU;MACR0Q,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OANM;MAQRoS,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;;KAbJ;;;EAbA8K,SAAS;IACP,OAAO,UAAP;;;EAEFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAkB,EAC9B,GAAGiE,yBAAyB,EADE;MAE9B1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFmB;MAG9BC,IAAI,EAAE4J,KAAK,CAACwI;KAHd;IAKA,KAAKxH,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCjBS6O,6BAA6BzJ;EAGxC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI4J,uBAAJ,CAA4BlK,OAA5B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,iBAAP;;;;;MCNSqJ,2BAA2BzH;EACtCC,SAAS;IACP,OAAO,UAAP;;;EAEFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAa,EACzB,GAAGiE,yBAAyB,EADH;MAEzB0H,KAAK,EAAEvF,KAAK,CAACuF,KAFY;MAGzBoD,QAAQ,EAAEC,MAAM,CAACpP,IAAP,CAAYwG,KAAK,CAAC2I,QAAlB,EAA4B/M,QAA5B,CAAqC,QAArC,CAHe;MAIzBiN,eAAe,EAAE7I,KAAK,CAAC6I,eAAN,IAAyB,KAJjB;MAKzBC,SAAS,EAAE;KALb;IAOA,KAAK9H,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAEFmP,KAAK,CAAC9S,UAAD;IACH,MAAM6E,OAAO,GAAG,KAAKuD,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD,EAAlD,CAAhB;;;IACA,IAAIpG,OAAO,CAACF,KAAR,GAAgB,CAApB,EAAuB;MACrB,OAAOE,OAAO,CAACA,OAAR,CAAgB,CAAhB,CAAP;;;IAGF;;;;;MCxBSkO,wBAAwBhK;EAGnC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIgK,kBAAJ,CAAuBtK,OAAvB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,WAAP;;;;;MCJS4J,+BAA+BhI;EAC1CC,SAAS;IACP,OAAO,oBAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMmB,OAAO,GAAG,KAAK+H,sBAAL,CACdjT,UADc,EAEd+J,KAAK,CAACmJ,SAFQ,EAGdnJ,KAAK,CAAC7J,GAHQ,CAAhB;IAMA,MAAMiT,cAAc,GAAGvL,yBAAyB,EAAhD;;IACA,IAAIsD,OAAJ,EAAa;MACXiI,cAAc,CAACzP,EAAf,GAAoBwH,OAAO,CAACxH,EAA5B;;MAEA,IAAI,CAACqG,KAAK,CAAC1I,OAAX,EAAoB;QAClB0I,KAAK,CAAC1I,OAAN,GAAgB6J,OAAO,CAAC7J,OAAxB;;;MAGFkJ,2BAA2B,CAACW,OAAD,EAAUnB,KAAK,CAAC1I,OAAhB,CAA3B;;MACA,IAAI0I,KAAK,CAACzN,KAAN,KAAgB4O,OAAO,CAAC5O,KAA5B,EAAmC;QACjC,OAAO4O,OAAP;;;MAGFiI,cAAc,CAAC9R,OAAf,GAAyB6J,OAAO,CAAC7J,OAAjC;KAZF,MAaO;MACL,IAAI0I,KAAK,CAAC1I,OAAV,EAAmB;QACjB8R,cAAc,CAAC9R,OAAf,GAAyB0I,KAAK,CAAC1I,OAA/B;;;;IAIJ,MAAMsC,QAAQ,GAAiB,EAC7B,GAAGwP,cAD0B;MAE7BD,SAAS,EAAEnJ,KAAK,CAACmJ,SAFY;MAG7BhT,GAAG,EAAE6J,KAAK,CAAC7J,GAHkB;MAI7B5D,KAAK,EAAEyN,KAAK,CAACzN;KAJf;IAOA,KAAKyO,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGFsP,sBAAsB,CAACjT,UAAD,EAAqBkT,SAArB,EAAwChT,GAAxC;IACpB,MAAMsN,KAAK,GAAG,KAAKpF,QAAL,CAAc9E,GAAd,CAAkBtD,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,CAAd;;IAGA,OAAOuC,KAAK,CAACzJ,IAAN,CAAWnI,IAAI,IAAIA,IAAI,CAACsX,SAAL,KAAmBA,SAAnB,IAAgCtX,IAAI,CAACsE,GAAL,KAAaA,GAAhE,CAAP;;;;;MCnDSkT,4BAA4BrK;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIuK,sBAAJ,CAA2B7K,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAAC7C,GAAP,CAAW,kBAAX,EAA+B,KAAKqP,sBAAL,CAA4B/L,IAA5B,CAAiC,IAAjC,CAA/B;IACAT,MAAM,CAACO,IAAP,CAAY,kBAAZ,EAAgC,KAAKqM,yBAAL,CAA+BnM,IAA/B,CAAoC,IAApC,CAAhC;IACAT,MAAM,CAACxC,MAAP,CAAc,kBAAd,EAAkC,KAAKqP,yBAAL,CAA+BpM,IAA/B,CAAoC,IAApC,CAAlC;;;EAGF+L,sBAAsB,CAAC9M,OAAD,EAAmBiB,QAAnB;IACpB,MAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgBwK,sBAAhB,CACb9M,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAeoR,SAFF,EAGb/M,OAAO,CAACrE,MAAR,CAAe5B,GAHF,CAAf;;IAMA,IAAI,CAAC3G,MAAL,EAAa;MACX,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGF8Z,yBAAyB,CAAClN,OAAD,EAAmBiB,QAAnB;IACvB,MAAM2C,KAAK,GAAsB,EAC/B,GAAG5D,OAAO,CAACsB,IADoB;MAE/BvH,GAAG,EAAEiG,OAAO,CAACrE,MAAR,CAAe5B,GAFW;MAG/BgT,SAAS,EAAE/M,OAAO,CAACrE,MAAR,CAAeoR;KAH5B;IAMA,MAAM3Z,MAAM,GAAG,KAAKkP,UAAL,CAAgBuB,MAAhB,CAAuB7D,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkD+J,KAAlD,CAAf;IACA,OAAO3C,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGF+Z,yBAAyB,CAACnN,OAAD,EAAmBiB,QAAnB;IACvB,MAAM8D,OAAO,GAAG,KAAKzC,UAAL,CAAgBwK,sBAAhB,CACd9M,OAAO,CAACrE,MAAR,CAAe9B,UADD,EAEdmG,OAAO,CAACrE,MAAR,CAAeoR,SAFD,EAGd/M,OAAO,CAACrE,MAAR,CAAe5B,GAHD,CAAhB;;IAMA,IAAI,CAACgL,OAAL,EAAc;MACZ,OAAO9D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAGF,MAAMpO,MAAM,GAAG,KAAKkP,UAAL,CAAgBxE,MAAhB,CAAuBkC,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkDkL,OAAO,CAACxH,EAA1D,CAAf;IAEA,OAAO0D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;;;MCxCSga,+BAA+BvI;EAA5C5P;;IA+BE,YAAA,GASI;MACFoR,cAAc,EAAE,CACdxM,UADc,EAEd2D,QAFc,EAGd;QAAE8I;OAHY;QAKd9I,QAAQ,CAAC8I,QAAT,GAAoBA,QAApB;OANA;MAQF+G,mBAAmB,EAAE,CACnBxT,UADmB,EAEnB2D,QAFmB,EAGnB;QAAE8P;OAHiB;QAKnB9P,QAAQ,CAAC8P,aAAT,GAAyBA,aAAa,CAAC9X,GAAd,CACtBmB,GAAD,KAAiC;UAC/BuG,MAAM,EAAE,eADuB;UAE/BK,EAAE,EAAE5G,GAAG,CAAC4G;SAFV,CADuB,CAAzB;OAbA;MAoBFqI,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OAzBA;MA2BF0H,gBAAgB,EAAE,CAChB1T,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE+I;OAHc;QAKhB/I,QAAQ,CAAC+I,aAAT,GAAyBA,aAAzB;OAhCA;MAkCFiH,OAAO,EAAE,CACP3T,UADO,EAEP2D,QAFO,EAGP;QAAExD;OAHK;QAKPwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OAvCA;MAyCFyT,kBAAkB,EAAE,CAClB5T,UADkB,EAElB2D,QAFkB,EAGlB;QAAEkQ;OAHgB;QAKlBlQ,QAAQ,CAACkQ,eAAT,GAA2BA,eAA3B;OA9CA;MAgDFC,6BAA6B,EAAE,CAC7B9T,UAD6B,EAE7B2D,QAF6B,EAG7B;QACEoQ;OAJ2B;QAO7BpQ,QAAQ,CAACoQ,0BAAT,GAAsCA,0BAAtC;OAvDA;MAyDF9H,YAAY,EAAE,CACZjM,UADY,EAEZ2D,QAFY,EAGZ;QAAEuI;OAHU;QAKZvI,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;OA9DA;MAgEFC,aAAa,EAAE,CACbnM,UADa,EAEb2D,QAFa,EAGb;QAAEyI;OAHW;QAKbzI,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;OArEA;MAuEFC,oBAAoB,EAAE,CACpBrM,UADoB,EAEpB2D,QAFoB,EAGpB;QAAEuI,SAAF;QAAaE;OAHO;QAKpBzI,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;QACAvI,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;;KAtFJ;;;EA9BAnB,SAAS;IACP,OAAO,eAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;MAE7BoM,kBAAkB,EAAE,CAFS;MAG7BP,aAAa,EAAE1J,KAAK,CAAC0J,aAAN,CAAoB9X,GAApB,CACZmB,GAAD,KAAiC;QAC/BuG,MAAM,EAAE,eADuB;QAE/BK,EAAE,EAAE5G,GAAG,CAAC4G;OAFV,CADa,CAHc;MAS7BgJ,aAAa,EAAE3C,KAAK,CAAC2C,aATQ;MAU7BpI,IAAI,EAAEyF,KAAK,CAACzF,IAViB;MAW7B0H,WAAW,EAAEjC,KAAK,CAACiC,WAXU;MAY7BnO,MAAM,EAAEkM,KAAK,CAAClM,MAAN,IAAgB,EAZK;MAa7B4O,QAAQ,EAAE1C,KAAK,CAAC0C,QAAN,IAAkB,IAbC;MAc7BtM,IAAI,EAAE4J,KAAK,CAAC5J,IAdiB;MAe7BwM,UAAU,EAAE,EAfiB;MAgB7BT,SAAS,EAAEnC,KAAK,CAACmC,SAhBY;MAiB7BE,UAAU,EAAErC,KAAK,CAACqC,UAjBW;MAkB7ByH,eAAe,EAAE9J,KAAK,CAAC8J,eAlBM;MAmB7BE,0BAA0B,EAAEhK,KAAK,CAACgK;KAnBpC;IAqBA,KAAKhJ,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC5CSsQ,4BAA4BlL;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI8K,sBAAJ,CAA2BpL,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;;;MCAS8K,4BAA4BlJ;EAAzC5P;;IAiBE,YAAA,GAGI;MACF0Q,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OANA;MAQFiU,cAAc,EAAE,CACdnU,UADc,EAEd2D,QAFc,EAGd;QAAEyQ;OAHY;QAKdzQ,QAAQ,CAACyQ,WAAT,GAAuBA,WAAvB;OAbA;MAeFC,cAAc,EAAE,CACdrU,UADc,EAEd2D,QAFc,EAGd;QAAE2Q;OAHY;QAKd3Q,QAAQ,CAAC2Q,QAAT,GAAoBA,QAApB;OApBA;MAsBFC,iBAAiB,EAAE,CACjBvU,UADiB,EAEjB2D,QAFiB,EAGjB;QAAE6Q;OAHe;QAKjB7Q,QAAQ,CAAC6Q,WAAT,GAAuBA,WAAvB;;KA9BJ;;;EAhBAvJ,SAAS;IACP,OAAO,WAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAc,EAC1B,GAAGiE,yBAAyB,EADF;MAE1B1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFe;MAG1BkU,WAAW,EAAErK,KAAK,CAACqK,WAHO;MAI1BI,WAAW,EAAEzK,KAAK,CAACyK,WAJO;MAK1BF,QAAQ,EAAEvK,KAAK,CAACuK;KALlB;IAOA,KAAKvJ,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCvBS8Q,0BAA0B1L;EAGrC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIyL,mBAAJ,CAAwB/L,OAAxB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,YAAP;;;;;MCCSsL,iCAAiC1J;EAA9C5P;;IAwBE,YAAA,GAAU;MACRuZ,cAAc,EAAE,CACd3U,UADc,EAEd2D,QAFc,EAGd;QAAE2J;OAHY;QAKd3J,QAAQ,CAACiR,eAAT,GAA2BtH,QAA3B;;QAEA3J,QAAQ,CAACkR,iBAAT,GAA6BvH,QAA7B;OARM;MAURwH,mBAAmB,EAAE,CACnB9U,UADmB,EAEnB2D,QAFmB,EAGnB;QAAEoR;OAHiB;QAKnBpR,QAAQ,CAACoR,gBAAT,GAA4B,IAAIjN,IAAJ,CAASiN,gBAAT,EAA4BhN,WAA5B,EAA5B;OAfM;MAiBRyH,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;QAAExD,IAAF;QAAQ7D;OAHM;QAKd,IAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;UACpB,MAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;;;QAEF6E,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;OAzBM;MA2BRoT,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;QAAEvH,IAAF;QAAQgP;OAHK;QAKb,IAAI,CAAChP,IAAL,EAAW;UACTuH,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;SADF,MAEO;UACL,MAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;UAIA,IAAI,CAACuT,YAAL,EAAmB;YACjB,MAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;;;UAGFuH,QAAQ,CAAC8L,MAAT,GAAkB;YAChBrT,IAAI,EAAE;cACJiH,MAAM,EAAE,MADJ;cAEJK,EAAE,EAAEiM,YAAY,CAACjM;aAHH;YAKhB0H,MAAM,EAAEA,MAAM,IAAI;WALpB;;OA3CI;MAoDR4J,oBAAoB,EAAE,CACpBhV,UADoB,EAEpB2D,QAFoB,EAGpB;QAAEsR;OAHkB;QAKpBtR,QAAQ,CAACsR,iBAAT,GAA6BA,iBAA7B;;KAzDJ;;;EAvBAhK,SAAS;IACP,OAAO,iBAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAmB,EAC/B,GAAGiE,yBAAyB,EADG;MAE/ByF,GAAG,EAAEtD,KAAK,CAACsD,GAFoB;MAG/BuH,eAAe,EAAE7K,KAAK,CAAC6K,eAHQ;MAI/BC,iBAAiB,EAAE9K,KAAK,CAAC6K,eAJM;MAK/BG,gBAAgB,EAAEhL,KAAK,CAACgL,gBALO;MAM/BE,iBAAiB,EAAElL,KAAK,CAACkL,iBANM;MAO/BC,aAAa,EAAE,EACb,GAAGnL,KAAK,CAACmL,aADI;QAEb7R,MAAM,EAAE,SAFK;QAGbK,EAAE,mDAAEqG,KAAK,CAACmL,aAAR,qBAAE,qBAAqBxR,EAAvB,oCAA6B;OAVF;MAY/B+L,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAZ5B;IAcA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC/BSwR,8BAA8BpM;EAGzC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIiM,wBAAJ,CAA6BvM,OAA7B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,WAAP;;;;;MCTSgM,sBAAsBrM;EAGjC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIwE,cAAJ,CAAmB9E,OAAnB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,IAAP;;;EAGFH,cAAc,CAACD,MAAD;;IAEZ,MAAMG,QAAQ,GAAG,KAAKC,WAAL,EAAjB;IACA,MAAM3C,MAAM,GAAGE,MAAM,CAAC;MAAE0C,WAAW,EAAE;KAAhB,CAArB;IAEA,KAAKH,WAAL,CAAiBzC,MAAjB;IAEAA,MAAM,CAAC7C,GAAP,CAAW,cAAX,EAA2B,KAAKyR,UAAL,CAAgBnO,IAAhB,CAAqB,IAArB,CAA3B;IACAT,MAAM,CAAC7C,GAAP,CAAW,SAAX,EAAsB,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAtB;IACAT,MAAM,CAAC7C,GAAP,CAAW,YAAX,EAAyB,KAAK2F,SAAL,CAAerC,IAAf,CAAoB,IAApB,CAAzB;IAEAT,MAAM,CAACxC,MAAP,CAAc,YAAd,EAA4B,KAAKwF,YAAL,CAAkBvC,IAAlB,CAAuB,IAAvB,CAA5B;IAEAT,MAAM,CAACO,IAAP,CAAY,SAAZ,EAAuB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAvB;IACAT,MAAM,CAACO,IAAP,CAAY,YAAZ,EAA0B,KAAK2C,UAAL,CAAgBzC,IAAhB,CAAqB,IAArB,CAA1B;IAEA8B,MAAM,CAACpC,GAAP,KAAeuC,UAAf,EAA2B1C,MAA3B;;;EAGF4O,UAAU,CAAClP,OAAD,EAAmBiB,QAAnB;IACR,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBgI,aAAhB,CAA8BtK,OAAO,CAACrE,MAAR,CAAe9B,UAA7C,CAAjB;;IACA,IAAI,CAAC2D,QAAL,EAAe;MACb,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;;;MCrBS2R,0BAA0BtK;EAAvC5P;;;IAoCE,oCAAA,GAAkC,CAChC2O,KADgC,EAEhC/J,UAFgC,MAG5B,EACJ,GAAG+J,KADC;MAEJrG,EAAE,EAAEmE,EAAM,EAFN;MAGJ0N,MAAM,EAAEhK,gBAAgB,CAACxB,KAAK,CAACwL,MAAP,CAHpB;MAIJ9F,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAPM,CAAlC;;IAUA,YAAA,GAAU;MACRoH,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;QAAExD,IAAF;QAAQ7D;OAHM;QAKd,IAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;UACpB,MAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;;;QAGF6E,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;OAVM;MAYRoT,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;QAAEvH,IAAF;QAAQgP;OAHK;QAKb,IAAI,CAAChP,IAAL,EAAW;UACTuH,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;SADF,MAEO;UACL,MAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;UAIA,IAAI,CAACuT,YAAL,EAAmB;YACjB,MAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;;;UAGFuH,QAAQ,CAAC8L,MAAT,GAAkB;YAChBrT,IAAI,EAAE;cACJiH,MAAM,EAAE,MADJ;cAEJK,EAAE,EAAEiM,YAAY,CAACjM;aAHH;YAKhB0H,MAAM,EAAEA,MAAM,IAAI;WALpB;;OA5BI;MAqCRoK,cAAc,EAAE,CACdxV,UADc,EAEd2D,QAFc,EAGd;QAAE8R;OAHY;QAKd9R,QAAQ,CAAC+R,YAAT,GAAwB,CACtB,GAAG/R,QAAQ,CAAC+R,YADU,EAEtB,KAAKC,+BAAL,CAAqCF,WAArC,EAAkDzV,UAAlD,CAFsB,CAAxB;;KA1CJ;;;EA7CAiL,SAAS;IACP,OAAO,SAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;MAExBgO,aAAa,EAAErK,gBAAgB,CAACxB,KAAK,CAAC6L,aAAP,CAFP;MAGxBC,iBAAiB,EAAE9L,KAAK,CAAC8L,iBAHD;MAIxBC,aAAa,EAAE/L,KAAK,CAAC+L,aAAN,GACX,EACE,GAAG/L,KAAK,CAAC+L,aADX;QAEEhT,KAAK,EAAEiH,KAAK,CAAC+L,aAAN,CAAoBhT,KAApB,GACH6I,kCAAkC,CAChC5B,KAAK,CAAC+L,aAAN,CAAoBhT,KADY,EAEhC9C,UAFgC,EAGhC,KAAKoI,QAH2B,CAD/B,GAMH1O;OATK,GAWX,EAfoB;MAgBxBgc,YAAY,EAAE,CAAC3L,KAAK,CAAC2L,YAAN,IAAsB,EAAvB,EAA2B/Z,GAA3B,CAA+BgC,CAAC,IAC5C,KAAKgY,+BAAL,CAAqChY,CAArC,EAAwCqC,UAAxC,CADY,CAhBU;MAmBxB+V,qBAAqB,EAAE,CAAChM,KAAK,CAACgM,qBAAN,IAA+B,EAAhC,EAAoCpa,GAApC,CACrBqa,WAAW,IACT7K,kBAAkB,CAAC6K,WAAD,EAAchW,UAAd,EAA0B,KAAKoI,QAA/B,CAFC,CAnBC;MAuBxBqH,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAvB5B;IA0BA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MChDSsS,yBAAyBlN;EAGpC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI6M,iBAAJ,CAAsBnN,OAAtB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,aAAP;;;;;MCyBS8M,wBAAwBlL;EAArC5P;;IAgLE,YAAA,GAAU;MACR+a,UAAU,EAAE,CACVnW,UADU,EAEV2D,QAFU,EAGV;QAAEf;OAHQ;QAKV,MAAMwT,eAAe,GAAG,KAAKhO,QAAL,CAActD,uBAAd,CACtB9E,UADsB,EAEtB4C,OAFsB,CAAxB;;QAIA,IAAI,CAACwT,eAAL,EAAsB;UACpB,MAAM,IAAItX,KAAJ,YAAqB8D,OAAO,CAACc,cAA7B,CAAN;;;QAGF,IAAI,CAACC,QAAQ,CAAC0S,WAAd,EAA2B;UACzB1S,QAAQ,CAAC0S,WAAT,GAAuB;YACrBC,QAAQ,EAAE;WADZ;;;QAKF3S,QAAQ,CAAC0S,WAAT,CAAqBC,QAArB,CAA8BvQ,IAA9B,CAAmC;UACjC1C,MAAM,EAAE,SADyB;UAEjCK,EAAE,EAAEd,OAAO,CAACc;SAFd;OApBM;MAyBR6S,gBAAgB,EAAE,CAChBvW,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE6S;OAHc;QAKhB7S,QAAQ,CAAC6S,UAAT,GAAsBA,UAAtB;OA9BM;MAgCRC,kBAAkB,EAAE,CAClBzW,UADkB,EAElB2D,QAFkB,EAGlB;QAAE+S;OAHgB;QAKlB/S,QAAQ,CAAC+S,YAAT,GAAwBA,YAAxB;OArCM;MAuCR1H,iBAAiB,EAAE,CACjBhP,UADiB,EAEjB2D,QAFiB,EAGjB;QAAEsL;OAHe;QAKjBtL,QAAQ,CAACuL,cAAT,GAA0BD,OAA1B;OA5CM;MA8CRI,gBAAgB,EAAE,CAChBrP,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE2L;OAHc;QAKhB3L,QAAQ,CAAC4L,aAAT,GAAyBD,KAAzB;OAnDM;MAqDRE,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;QAAExD,IAAF;QAAQ7D;OAHM;QAKd,IAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;UACpB,MAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;;;QAEF6E,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;OA7DM;MA+DRoT,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;QAAEvH,IAAF;QAAQgP;OAHK;QAKb,IAAI,CAAChP,IAAL,EAAW;UACTuH,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;SADF,MAEO;UACL,MAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;UAIA,IAAI,CAACuT,YAAL,EAAmB;YACjB,MAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;;;UAGFuH,QAAQ,CAAC8L,MAAT,GAAkB;YAChBrT,IAAI,EAAE;cACJiH,MAAM,EAAE,MADJ;cAEJK,EAAE,EAAEiM,YAAY,CAACjM;aAHH;YAKhB0H,MAAM,EAAEA,MAAM,IAAI;WALpB;;OA/EI;MAwFRwE,SAAS,EAAE,CACT5P,UADS,EAET2D,QAFS,EAGT;QAAEkM;OAHO;QAKTlM,QAAQ,CAACkM,MAAT,GAAkBA,MAAlB;OA7FM;MA+FR8G,cAAc,EAAE,CACd3W,UADc,EAEd2D,QAFc,EAGd;QAAEiT;OAHY;QAKdjT,QAAQ,CAACiT,WAAT,GAAuBA,WAAvB;OApGM;MAsGR9G,kBAAkB,EAAE,CAClB9P,UADkB,EAElB2D,QAFkB,EAGlB;QAAEsL;OAHgB;QAKlBtL,QAAQ,CAACoM,eAAT,GAA2Bd,OAA3B;OA3GM;MA6GR4H,QAAQ,EAAE,CACR7W,UADQ,EAER2D,QAFQ,EAGR;QAAEZ;OAHM;QAKR,IAAI,CAACA,KAAL,EAAY;;QACZ,MAAM4M,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB+C,KAFmB,CAArB;;QAIA,IAAI,CAAC4M,YAAL,EAAmB;UACjB,MAAM,IAAI7Q,KAAJ,4BAAqCiE,KAAK,CAAC7C,KAA3C,CAAN;;;QAGF,MAAM4W,cAAc,GAAGnH,YAAvB;QACAhM,QAAQ,CAACZ,KAAT,GAAiB;UACfM,MAAM,EAAE,OADO;UAEfnD,GAAG,EAAE4W,cAAc,CAAC5W;SAFtB;;KA5HJ;;;EA/KA+K,SAAS;IACP,OAAO,OAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJlG,MAAM,CAACkG,KAAK,CAAC1H,IAAP,EAAa,uBAAb,CAAN;;IAEA,MAAMA,IAAI,GAAG,KAAK+F,QAAL,CAActD,uBAAd,CACX9E,UADW,EAEX+J,KAAK,CAAC1H,IAFK,CAAb;;IAIA,IAAI,CAACA,IAAL,EAAW;MACT,MAAM,IAAIvD,KAAJ,CAAU,kBAAV,CAAN;;;IAGF,MAAM6E,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;MAEtBgP,WAAW,EAAE7M,KAAK,CAAC6M,WAFG;MAGtBJ,UAAU,EAAE,MAHU;MAItB1I,SAAS,EAAE,EAJW;MAKtBmC,eAAe,EAAE,EALK;MAMtBlC,UAAU,EAAE1L,IAAI,CAAC0L,UANK;MAOtBwC,YAAY,EAAE,EAPQ;MAQtBC,MAAM,EAAE,UARc;MAStBuG,QAAQ,EAAE,EATY;MAUtBC,yBAAyB,EAAE;KAV7B;IAYA,KAAKjM,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGFsT,MAAM,CAACjX,UAAD,EAAqB+J,KAArB;;;;IAEJlG,MAAM,CAAC,IAAD,EAAO,2BAAP,CAAN;IACA,MAAMF,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;MAGtBsH,cAAc,EAAEnF,KAAK,CAACmF,cAHA;MAItBa,eAAe,EAAEhG,KAAK,CAACgG,eAJD;MAMtBN,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CANJ;MAOtBmH,aAAa,EAAExF,KAAK,CAACwF,aAPC;MAQtByH,yBAAyB,EAAE,CARL;MAStBJ,WAAW,EAAE7M,KAAK,CAAC6M,WATG;MAUtBJ,UAAU,EAAEzM,KAAK,CAACyM,UAAN,IAAoB,MAVV;MAWtBhG,MAAM,EAAEzG,KAAK,CAACyG,MAAN,IAAgB,UAXF;MAYtBkG,YAAY,EAAE3M,KAAK,CAAC2M,YAZE;MAatBnG,YAAY,EAAE,EAbQ;MActBxN,KAAK,EAAE0I,qBAAqB,CAAC1B,KAAK,CAAChH,KAAP,EAAc/C,UAAd,EAA0B,KAAKoI,QAA/B,CAdN;MAetB2O,QAAQ,EAAE,EAfY;MAiBtBjJ,SAAS,EACP,qBAAA/D,KAAK,CAAC+D,SAAN,sCAAiBnS,GAAjB,CAAqBC,IAAI,IACvB,KAAKsb,uBAAL,CAA6BhQ,IAA7B,CAAkC,IAAlC,EAAwClH,UAAxC,EAAoDpE,IAApD,CADF,MAEK,EApBe;MAqBtBqU,eAAe,EACb,0BAAAlG,KAAK,CAACkG,eAAN,2CAAuBtU,GAAvB,CAA2BC,IAAI,IAC7B,KAAKub,6BAAL,CAAmCjQ,IAAnC,CAAwC,IAAxC,EAA8ClH,UAA9C,EAA0DpE,IAA1D,CADF,MAEK,EAxBe;MA0BtBmS,UAAU,EAAE;QACV3R,IAAI,EAAE,eADI;QAEV,GAAG2N,KAAK,CAACgE,UAFC;QAGVvC,cAAc,EAAE;;KA7BpB;IAgCA,KAAKT,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGMuT,uBAAuB,CAC7BlX,UAD6B,EAE7B+J,KAF6B;IAI7B,IAAIlH,OAAJ;IACA,IAAI0K,OAAJ;;IAEA,IAAIxD,KAAK,CAACwD,OAAN,CAAcF,GAAlB,EAAuB;MACrBE,OAAO,GAAG;QACR7J,EAAE,EAAE,CADI;QAER2J,GAAG,EAAEtD,KAAK,CAACwD,OAAN,CAAcF;OAFrB;;MAKA,IAAIG,KAAK,GAAG,KAAKpF,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,SAAhC,EAA2C;QACrDmE,KAAK,EAAE,0CACoC4F,KAAK,CAACwD,OAAN,CAAcF,+CAA+CtD,KAAK,CAACwD,OAAN,CAAcF,SAD/G;OADG,CAAZ;;MAMA,IAAIG,KAAK,CAAC7I,KAAN,KAAgB,CAApB,EAAuB;QACrB,MAAM,IAAIhF,kBAAJ,CAAqC;UACzC2E,IAAI,EAAE,SADmC;UAEzCjJ,OAAO,8CAA8C0O,KAAK,CAACwD,OAAN,CAAcF;SAF/D,CAAN;;;MAMFxK,OAAO,GAAG2K,KAAK,CAAC3I,OAAN,CAAc,CAAd,CAAV;;MACA,IAAIhC,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aAA3B,CAAyCL,GAAzC,KAAiDtD,KAAK,CAACwD,OAAN,CAAcF,GAAnE,EAAwE;QACtEE,OAAO,GAAG1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aAArC;OADF,MAEO;QACLH,OAAO,GAAG1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2ByC,QAA3B,CAAoC5J,IAApC,CACR7G,CAAC,IAAIA,CAAC,CAACmQ,GAAF,KAAUtD,KAAK,CAACwD,OAAN,CAAcF,GADrB,CAAV;;;MAIF,IAAI,CAACE,OAAL,EAAc;QACZ,MAAM,IAAIzO,KAAJ,CAAU,sBAAV,CAAN;;KA5BJ,MA8BO;MACL,MAAM,IAAIA,KAAJ,CAAU,kBAAV,CAAN;;;IAGF,MAAMgQ,QAAQ,GAAa,EACzB,GAAGlH,yBAAyB,EADH;MAEzB6H,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAFD;MAGzBoG,0BAA0B,EAAE,EAHH;MAIzBC,YAAY,EAAE,UAJW;MAKzBtO,IAAI,EAAE4J,KAAK,CAAC5J,IALa;MAMzBgO,KAAK,EAAE7C,WAAW,CAACvB,KAAK,CAACoE,KAAP,CANO;MAOzBO,SAAS,EAAE,UAPc;MAQzBvB,SAAS,EAAEtK,OAAO,CAACa,EARM;MASzB6K,WAAW,EAAE1L,OAAO,CAAC0L,WATI;MAUzBjB,QAAQ,EAAEvD,KAAK,CAACuD,QAVS;MAWzBxK,KAAK,EAAEiH,KAAK,CAACjH,KAAN,IAAe,EAXG;MAYzBsU,OAAO,EAAErN,KAAK,CAACqN,OAZU;MAazBrJ,UAAU,EAAExC,gBAAgB,CAACxB,KAAK,CAACoE,KAAN,CAAY7R,KAAb,CAbH;MAczBiR,OAAO,EAAE;QACP7J,EAAE,EAAE6J,OAAO,CAAC7J,EADL;QAEP2J,GAAG,EAAEE,OAAO,CAACF,GAFN;QAGPc,KAAK,EAAE7C,WAAW,CAACvB,KAAK,CAACoE,KAAP;;KAjBtB;IAqBA,OAAOW,QAAP;;;EAGMqI,6BAA6B,CACnCnX,UADmC,EAEnC+J,KAFmC;IAInC,MAAM+E,QAAQ,GAAmB,EAC/B,GAAGlH,yBAAyB,EADG;MAE/B6H,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAFK;MAG/BoG,0BAA0B,EAAE,EAHG;MAI/BzB,KAAK,EAAExB,gBAAgB,CAACxB,KAAK,CAACgD,KAAP,CAJQ;MAK/B5M,IAAI,EAAE4J,KAAK,CAAC5J,IALmB;MAM/BmN,QAAQ,EAAEvD,KAAK,CAACuD,QANe;MAO/BgB,IAAI,EAAEvE,KAAK,CAACuE,IAPmB;MAQ/BxL,KAAK,EAAE,EARwB;MAS/BiL,UAAU,EAAExC,gBAAgB,CAACxB,KAAK,CAACgD,KAAP;KAT9B;IAYA,OAAO+B,QAAP;;;EAGFuI,kBAAkB,CAChBrX,UADgB,EAEhB4W,WAFgB,EAGhB9U,SAAsB,EAHN;IAKhB,MAAMvI,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD,EAC/D,GAAGnJ,MAD4D;MAE/DqC,KAAK,EAAE,iBAAiByS,cAAjB;KAFM,CAAf;;IAIA,IAAIrd,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;MACtB,OAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;;;;IAIF,IAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;MACpB,MAAM,IAAI7F,KAAJ,CAAU,yBAAV,CAAN;;;IAGF;;;;;MC/MSwY,qBAAqBvO;EAGhC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIyN,eAAJ,CAAoB/N,OAApB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,QAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAACO,IAAP,CAAY,SAAZ,EAAuB,KAAKiQ,MAAL,CAAY/P,IAAZ,CAAiB,IAAjB,CAAvB;IACAT,MAAM,CAAC7C,GAAP,CAAW,4BAAX,EAAyC,KAAKyT,kBAAL,CAAwBnQ,IAAxB,CAA6B,IAA7B,CAAzC;;;EAGF+P,MAAM,CAAC9Q,OAAD,EAAmBiB,QAAnB;IACJ,MAAMmQ,WAAW,GAAGpR,OAAO,CAACsB,IAA5B;IACA,MAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgBwO,MAAhB,CACf9Q,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfuX,WAFe,CAAjB;IAIA,OAAOnQ,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;EAGF0T,kBAAkB,CAAClR,OAAD,EAAmBiB,QAAnB;IAChB,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgB4O,kBAAhB,CACflR,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe8U,WAFA,EAGfzQ,OAAO,CAACjC,KAHO,CAAjB;;IAKA,IAAIP,QAAJ,EAAc;MACZ,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;IAEF,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;;;MCnCS6P,uBAAuBzO;EAGlC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI6M,iBAAJ,CAAsBnN,OAAtB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,UAAP;;;;;ACdG,MAAMqO,qBAAqB,GAAIxa,MAAD;EACnC,IAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;IAC9B,MAAMya,OAAO,GAAGza,MAAM,CAACtB,GAAP,CAAWsC,KAAX,CAAhB;IACA,OAAOyZ,OAAO,CAACC,IAAR,CAAa,OAAb,CAAP;;;EAEF,OAAO1Z,KAAK,CAAChB,MAAD,CAAZ;AACD,CANM;;AAQP,MAAMgB,KAAK,GAAIhB,MAAD;EACZ,IAAI2a,MAAM,GAAG3a,MAAM,CAAC4a,OAAP,CAAe,IAAf,EAAqB,GAArB,CAAb;;EAEA,GAAG;IACDD,MAAM,GAAGA,MAAM,CAACC,OAAP,CAAe,mBAAf,EAAoC,WAApC,CAAT;GADF,QAESD,MAAM,CAAC3Y,QAAP,CAAgB,GAAhB,CAFT;;EAIA,OAAO2Y,MAAP;AACD,CARD;;MCIaE,oCAAoC9M;EAAjD5P;;IAoDE,YAAA,GAAU,EAAV;;;EAnDA6P,SAAS;IACP,OAAO,oBAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,IAAI,CAACA,KAAK,CAAC2D,aAAX,EAA0B;MACxB,MAAM,IAAI5O,KAAJ,gEAC2DiL,KAAK,CAAC7J,KADjE,CAAN;;;IAKF,IAAI,CAAC6J,KAAK,CAACwE,WAAN,CAAkB7K,EAAvB,EAA2B;MACzB,MAAM,IAAI5E,KAAJ,kEAC6DiL,KAAK,CAAC7J,KADnE,CAAN;;;IAKF,MAAMyD,QAAQ,GAAsB,EAClC,GAAGiE,yBAAyB,EADM;MAElCzH,IAAI,EAAE4J,KAAK,CAAC5J,IAFsB;MAGlCmO,IAAI,EAAEvE,KAAK,CAACuE,IAHsB;MAIlCyJ,UAAU,EAAE,EAJsB;MAKlCxJ,WAAW,EAAE,EAAE,GAAGxE,KAAK,CAACwE,WAAX;QAAwB7K,EAAE,EAAEqG,KAAK,CAACwE,WAAN,CAAkB7K;OALzB;MAMlCgK,aAAa,EAAEsK,gBAAgB,CAAC,CAAD,EAAIjO,KAAK,CAAC2D,aAAV,CANG;MAOlCC,QAAQ,4CACN5D,KAAK,CAAC4D,QADA,qBACN,gBAAgBhS,GAAhB,CAAoB,CAAC4R,OAAD,EAAU9T,KAAV;QAClB,OAAOue,gBAAgB,CAACve,KAAK,GAAG,CAAT,EAAY8T,OAAZ,CAAvB;OADF,CADM,kCAGA,EAV0B;;MAalC0K,cAAc,EAAElO,KAAK,CAACkO;KAbxB;IAgBA,KAAKlN,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IAEA,OAAOA,QAAP;;;EAGFuU,MAAM,CAAClY,UAAD,EAAqBkE,KAArB;;;IACJ,MAAMjH,MAAM,yBAAIiH,KAAK,CAAC,cAAD,CAAT,iCAA6BA,KAAK,CAACjH,MAA/C;IACA,MAAMkb,cAAc,GAAGlb,MAAM,GAAGwa,qBAAqB,CAACxa,MAAD,CAAxB,GAAmCvD,SAAhE;;IAEA,MAAMmL,OAAO,GAAG,KAAKuD,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MAChE9G,KAAK,EAAEgU,cADyD;MAEhE3T,MAAM,EAAEN,KAAK,CAACM,MAAN,GAAeqF,MAAM,CAAC3F,KAAK,CAACM,MAAP,CAArB,GAAsC9K,SAFkB;MAGhE+K,KAAK,EAAEP,KAAK,CAACO,KAAN,GAAcoF,MAAM,CAAC3F,KAAK,CAACO,KAAP,CAApB,GAAoC/K;KAH7B,CAAhB;;;IAMA,OAAOmL,OAAP;;;;;AAMJ,MAAMmT,gBAAgB,GAAG,CACvB5K,SADuB,EAEvBG,OAFuB;EAIvB,OAAO;IACL7J,EAAE,EAAE0J,SADC;IAELC,GAAG,EAAEE,OAAF,oBAAEA,OAAO,CAAEF,GAFT;IAGL+K,UAAU,EAAE7K,OAAF,oBAAEA,OAAO,CAAE6K;GAHvB;AAKD,CATD;;MC9DaC,iCAAiCtP;EAG5C3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIqP,2BAAJ,CAAgC3P,OAAhC,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,qBAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAAC7C,GAAP,CAAW,SAAX,EAAsB,KAAKsU,MAAL,CAAYhR,IAAZ,CAAiB,IAAjB,CAAtB;;;EAGFgR,MAAM,CAAC/R,OAAD,EAAmBiB,QAAnB;IACJ,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgByP,MAAhB,CACf/R,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACjC,KAFO,CAAjB;IAIA,OAAOkD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;;;MCXS2U,0BAA0BtN;EAAvC5P;;IAuCE,YAAA,GAAU;MACRmd,OAAO,EAAE,CACPvY,UADO,EAEP2D,QAFO,EAGP;QAAE6B;OAHK;QAKP,IAAI7B,QAAQ,CAAC8J,UAAT,CAAoB+K,MAAxB,EAAgC;UAC9B7U,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,GAA8BvH,QAAQ,CAAC8J,UAAT,CAAoB+K,MAAlD,CAD8B;;UAG9B7U,QAAQ,CAAC8J,UAAT,CAAoB+K,MAApB,GAA6B9e,SAA7B;;;QAEFiK,QAAQ,CAAC8J,UAAT,CAAoBgL,gBAApB,GAAuC,KAAvC;QACA9U,QAAQ,CAAC8J,UAAT,CAAoBiL,SAApB,GAAgC,IAAhC;OAZM;MAcRC,YAAY,EAAE,CACZ3Y,UADY,EAEZ2D,QAFY,EAGZ;QAAEyJ,SAAF;QAAaC,GAAb;QAAkBlN,IAAlB;QAAwB7D,KAAxB;QAA+Bkc;OAHnB;QAKZ,MAAMI,QAAQ,GAAGJ,MAAM,KAAK9e,SAAX,GAAuB8e,MAAvB,GAAgC,KAAjD;QACA,MAAMK,WAAW,GAAGC,cAAc,CAACnV,QAAD,EAAWiV,QAAX,CAAlC;QACA,MAAM;UAAErL,OAAF;UAAWwL,eAAX;UAA4BC;YAAiBC,UAAU,CAC3DJ,WAD2D,EAE3DzL,SAF2D,EAG3DC,GAH2D,CAA7D;;QAKA,IAAI,CAACE,OAAL,EAAc;UACZ,MAAM,IAAIzO,KAAJ,oBACesO,oBAAoBC,4BAA4B1J,QAAQ,CAACD,IADxE,CAAN;;;QAKF,IAAI,CAAC6J,OAAO,CAAC6K,UAAb,EAAyB;UACvB7K,OAAO,CAAC6K,UAAR,GAAqB,EAArB;;;QAGF,MAAMc,YAAY,GAAG3L,OAAO,CAAC6K,UAAR,CAAmBrU,IAAnB,CAAwBoV,IAAI,IAAIA,IAAI,CAAChZ,IAAL,KAAcA,IAA9C,CAArB;;QACA,IAAI+Y,YAAJ,EAAkB;UAChBA,YAAY,CAAC5c,KAAb,GAAqBA,KAArB;SADF,MAEO;UACLiR,OAAO,CAAC6K,UAAR,CAAmBrS,IAAnB,CAAwB;YACtB5F,IADsB;YAEtB7D;WAFF;;;QAKF,IAAIsc,QAAJ,EAAc;UACZjV,QAAQ,CAAC8J,UAAT,CAAoB+K,MAApB,GAA6BK,WAA7B;;UACA,IAAIE,eAAJ,EAAqB;YACnBpV,QAAQ,CAAC8J,UAAT,CAAoB+K,MAApB,CAA2B9K,aAA3B,GAA2CH,OAA3C;WADF,MAEO;YACL5J,QAAQ,CAAC8J,UAAT,CAAoB+K,MAApB,CAA2B7K,QAA3B,CAAoCqL,YAApC,IAAoDzL,OAApD;;;UAEF5J,QAAQ,CAAC8J,UAAT,CAAoBgL,gBAApB,GAAuC,IAAvC;SAPF,MAQO;UACL9U,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,GAA8B2N,WAA9B;;UACA,IAAIE,eAAJ,EAAqB;YACnBpV,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,CAA4BwC,aAA5B,GAA4CH,OAA5C;WADF,MAEO;YACL5J,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,CAA4ByC,QAA5B,CAAqCqL,YAArC,IAAqDzL,OAArD;;;;KA1DR;;;EAtCAtC,SAAS;IACP,OAAO,SAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAM8O,WAAW,GAAG;MAClB1Y,IAAI,EAAE4J,KAAK,CAAC5J,IADM;MAElBmO,IAAI,EAAEvE,KAAK,CAACuE,IAFM;MAGlByJ,UAAU,EAAE,EAHM;MAIlBrK,aAAa,EACX3D,KAAK,CAAC2D,aAAN,IAAuBsK,kBAAgB,CAAC,CAAD,EAAIjO,KAAK,CAAC2D,aAAV,CALvB;MAMlBC,QAAQ,EACN5D,KAAK,CAAC4D,QAAN,IACA5D,KAAK,CAAC4D,QAAN,CAAehS,GAAf,CAAmB,CAAC4R,OAAD,EAAU9T,KAAV;QACjB,OAAOue,kBAAgB,CAACve,KAAK,GAAG,CAAT,EAAY8T,OAAZ,CAAvB;OADF,CARgB;;MAalB0K,cAAc,EAAElO,KAAK,CAACkO;KAbxB;IAgBA,MAAMtU,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;MAExB6F,UAAU,EAAE;;QAEVvC,OAAO,EAAEnB,KAAK,CAACwO,OAAN,GAAgBM,WAAhB,GAA8Bnf,SAF7B;;QAIV8e,MAAM,EAAEzO,KAAK,CAACwO,OAAN,GAAgB7e,SAAhB,GAA4Bmf,WAJ1B;QAKVJ,gBAAgB,oBAAE1O,KAAK,CAACwO,OAAR,6BAAmB,IALzB;QAMVG,SAAS,qBAAE3O,KAAK,CAACwO,OAAR,8BAAmB;;KARhC;IAYA,KAAKxN,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IAEA,OAAOA,QAAP;;;;;AA+GJ,MAAMmV,cAAc,GAAG,CAACjW,OAAD,EAAmB2V,MAAnB;EACrB,IAAI,CAACA,MAAD,IAAW3V,OAAO,CAAC4K,UAAR,CAAmBvC,OAAlC,EAA2C;IACzC,OAAOrI,OAAO,CAAC4K,UAAR,CAAmBvC,OAA1B;;;EAEF,OAAOrI,OAAO,CAAC4K,UAAR,CAAmB+K,MAA1B;AACD,CALD;;AAaA,MAAMS,UAAU,GAAG,CACjBJ,WADiB,EAEjBzL,SAFiB,EAGjBC,GAHiB;EAKjB,MAAMM,QAAQ,GAAG,CAACkL,WAAW,CAACnL,aAAb,EAA4B,GAAGmL,WAAW,CAAClL,QAA3C,CAAjB;EACA,MAAMyL,YAAY,GAAGzL,QAAQ,CAAC5J,IAAT,CAAewJ,OAAD;IACjC,IAAIH,SAAJ,EAAe;MACb,OAAOG,OAAO,CAAC7J,EAAR,KAAe0J,SAAtB;;;IAEF,IAAIC,GAAJ,EAAS;MACP,OAAOE,OAAO,CAACF,GAAR,KAAgBA,GAAvB;;;IAEF,OAAO,KAAP;GAPmB,CAArB;EAUA,MAAM0L,eAAe,GAAGK,YAAY,KAAKP,WAAW,CAACnL,aAArD;EACA,OAAO;IACLH,OAAO,EAAE6L,YADJ;IAELL,eAFK;IAGLC,YAAY,EACV,CAACD,eAAD,IAAoBK,YAApB,GACIP,WAAW,CAAClL,QAAZ,CAAqB9T,OAArB,CAA6Buf,YAA7B,CADJ,GAEI,CAAC;GANT;AAQD,CAzBD;;AA2BA,MAAMpB,kBAAgB,GAAG,CACvB5K,SADuB,EAEvBG,OAFuB;EAIvB,OAAO;IACL7J,EAAE,EAAE0J,SADC;IAELC,GAAG,EAAEE,OAAF,oBAAEA,OAAO,CAAEF,GAFT;IAGL+K,UAAU,EAAE7K,OAAF,oBAAEA,OAAO,CAAE6K,UAHhB;IAILlK,MAAM,EAAEX,OAAF,oBAAEA,OAAO,CAAEW;GAJnB;AAMD,CAVD;;MCrMamL,uBAAuBtQ;EAGlC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI6P,iBAAJ,CAAsBnQ,OAAtB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,UAAP;;;;;MCCSkQ,8BAA8BtO;EAA3C5P;;;IAoBE,oDAAA,GAAkD,CAChDme,WADgD,EAEhDxP,KAFgD;MAAA;;MAAA,OAGvB,EACzB,GAAGA,KADsB;QAEzByP,mBAAmB,2BAAEzP,KAAK,CAACyP,mBAAR,oCAA+B,MAFzB;QAGzBC,SAAS,sBAAE1P,KAAK,CAAC0P,SAAR,+BAAqB,YAHL;QAIzBC,YAAY,yBAAE3P,KAAK,CAAC2P,YAAR,kCAAwB;OAPY;KAAlD;;IA0BA,YAAA,GAKI;MACFC,6BAA6B,EAAE,CAC7B3Z,UAD6B,EAE7B2D,QAF6B,EAG7B;QACEiW,aADF;QAEEC;OAL2B;;;QAQ7B,MAAMC,mBAAmB,GAAI1d,IAAD;UAC1B,QAAQA,IAAI,CAAC+D,IAAb;YACE,KAAK,OAAL;cACE/D,IAAI,CAACY,MAAL,CAAY2E,OAAZ,CAAoBzE,CAAC;gBACnB,IAAIA,CAAC,CAACgD,GAAF,IAAS2Z,QAAQ,CAAC3Z,GAAtB,EAA2B;kBACzBhD,CAAC,CAAC6c,KAAF,GAAUF,QAAQ,CAACE,KAAnB;;eAFJ;cAKA;;YACF,KAAK,KAAL;cACED,mBAAmB,CAAC1d,IAAI,CAAC4d,WAAN,CAAnB;cACA;;SAXN;;QAeA,wBAAArW,QAAQ,CAACyU,UAAT,0CAAqBzW,OAArB,CAA6BrF,KAAK;UAChC,IAAIA,KAAK,CAAC6D,IAAN,IAAcyZ,aAAlB,EAAiC;YAC/BE,mBAAmB,CAACxd,KAAK,CAACF,IAAP,CAAnB;;SAFJ;OAxBA;MA8BF6d,WAAW,EAAE,CACXja,UADW,EAEX2D,QAFW,EAGX;QAAEiW,aAAF;QAAiBG;OAHN;;;QAKX,yBAAApW,QAAQ,CAACyU,UAAT,2CAAqBzW,OAArB,CAA6BrF,KAAK;UAChC,IAAIA,KAAK,CAAC6D,IAAN,IAAcyZ,aAAlB,EAAiC;YAC/Btd,KAAK,CAACyd,KAAN,GAAcA,KAAd;;SAFJ;;KAxCJ;;;EA7CA9O,SAAS;IACP,OAAO,cAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAgB,EAC5B,GAAGiE,yBAAyB,EADA;MAE5B1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFiB;MAG5BC,IAAI,EAAE4J,KAAK,CAAC5J,IAHgB;MAI5B6L,WAAW,EAAEjC,KAAK,CAACiC,WAJS;MAK5BoM,UAAU,EAAE,sBAACrO,KAAK,CAACqO,UAAP,gCAAqB,EAArB,EAAyBzc,GAAzB,CAA6Bd,CAAC,IACxC,KAAKqf,+CAAL,CAAqDla,UAArD,EAAiEnF,CAAjE,CADU;KALd;IAUA,KAAKkQ,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAaF2F,UAAU,CAACtJ,UAAD,EAAqBE,GAArB;IACR,MAAM3G,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MAC/D9G,KAAK,EAAE,SAASjE,MAAT;KADM,CAAf;;IAGA,IAAI3G,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;MACtB,OAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;;;;IAIF,IAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;MACpB,MAAM,IAAI7F,KAAJ,CAAU,4BAAV,CAAN;;;IAGF;;;;;MCrDSqb,2BAA2BpR;EAGtC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI6Q,qBAAJ,CAA0BnR,OAA1B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,eAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;;;EAGFoC,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;IACR,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBa,UAAhB,CACfnD,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe5B,GAFA,CAAjB;;IAIA,IAAIyD,QAAJ,EAAc;MACZ,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;IAEF,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;;;AC3BG,MAAMyS,eAAe,GAAG,CAAIzW,QAAJ,EAAiB0W,IAAjB;EAC7B,MAAMC,KAAK,GAAGD,IAAI,CAAC3a,KAAL,CAAW,GAAX,CAAd;EACA,MAAM6a,KAAK,GAAG9Y,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAeiC,QAAf,CAAX,CAAd;EACA,IAAIxH,GAAG,GAAGoe,KAAV;EAEA,MAAMze,MAAM,GAAGwe,KAAK,CAACE,GAAN,EAAf;;EACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,KAAK,CAACzb,MAA1B,EAAkC4b,CAAC,EAAnC,EAAuC;IACrC,MAAMC,IAAI,GAAGJ,KAAK,CAACG,CAAD,CAAlB;IACAte,GAAG,GAAGA,GAAG,CAACue,IAAD,CAAT;;IAEA,IAAIve,GAAG,IAAIzC,SAAX,EAAsB;MACpB,OAAOiK,QAAP;;;;EAIJ,IAAIxH,GAAG,IAAIL,MAAP,IAAiBK,GAAG,CAACL,MAAD,CAAxB,EAAkC;IAChCK,GAAG,CAACL,MAAD,CAAH,GAAc,MAAd;;;EAEF,OAAOye,KAAP;AACD,CAnBM;;MCoBMI,0BAA0BjQ;EAAvCtP;;IAiCE,YAAA,GAKI;MACFkX,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OANA;MAQFya,gBAAgB,EAAE,CAChB5a,UADgB,EAEhB2D,QAFgB,EAGhB;QAAEtD;OAHc;QAKhBsD,QAAQ,CAACtD,UAAT,GAAsBA,UAAtB;OAbA;MAeFwa,eAAe,EAAE,CACf7a,UADe,EAEf2D,QAFe,EAGf;QAAEvD;OAHa;QAKfuD,QAAQ,CAACvD,SAAT,GAAqBA,SAArB;OApBA;MAsBF0a,eAAe,EAAE,CACf9a,UADe,EAEf2D,QAFe,EAGf;QAAErD;OAHa;QAKfqD,QAAQ,CAACrD,SAAT,GAAqBA,SAArB;OA3BA;MA6BFya,qBAAqB,EAAE,CACrB/a,UADqB,EAErB2D,QAFqB,EAGrB;QAAEqX;OAHmB;QAKrBrX,QAAQ,CAAC/C,QAAT,CAAkBC,OAAlB,GAA4Bma,eAA5B;OAlCA;MAoCFC,kCAAkC,EAAE,CAClCjb,UADkC,EAElC2D,QAFkC,EAGlC;QAAE9C;OAHgC;;;QAKlC,IAAI,2BAAC8C,QAAQ,CAAC1C,cAAV,aAAC,sBAAyBC,QAA1B,CAAJ,EAAwC;UACtC,MAAM,IAAIpC,KAAJ,CAAU,uBAAV,CAAN;;;QAEF6E,QAAQ,CAAC1C,cAAT,CAAwBC,QAAxB,CAAiCC,MAAjC,GAA0CN,OAAO,GAC7C,WAD6C,GAE7C,aAFJ;QAGA8C,QAAQ,CAAC1C,cAAT,CAAwBC,QAAxB,CAAiC8G,cAAjC,GAAkD,IAAIF,IAAJ,GAAWC,WAAX,EAAlD;OA/CA;MAiDFmT,uBAAuB,EAAE,CACvBlb,UADuB,EAEvB2D,QAFuB,EAGvB;QAAExC;OAHqB;;;QAKvB,IAAI,4BAACwC,QAAQ,CAAC1C,cAAV,aAAC,uBAAyBG,MAA1B,CAAJ,EAAsC;UACpC,MAAM,IAAItC,KAAJ,CAAU,uBAAV,CAAN;;;QAEF6E,QAAQ,CAAC1C,cAAT,CAAwBG,MAAxB,CAA+BD,MAA/B,GAAwCA,MAAxC;QACAwC,QAAQ,CAAC1C,cAAT,CAAwBG,MAAxB,CAA+B4G,cAA/B,GAAgD,IAAIF,IAAJ,GAAWC,WAAX,EAAhD;OA1DA;MA4DFoT,wBAAwB,EAAE,CACxBnb,UADwB,EAExB2D,QAFwB,EAGxB;QAAE5C;OAHsB;QAKxB4C,QAAQ,CAAC5C,qBAAT,GAAiCA,qBAAjC;OAjEA;MAmEFqa,gBAAgB,EAAE,CAChBpb,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE3C;OAHc;QAKhB2C,QAAQ,CAAC3C,aAAT,GAAyBA,aAAzB;OAxEA;MA0EFqa,mCAAmC,EAAE,CACnCrb,UADmC,EAEnC2D,QAFmC,EAGnC;QACEjD;OAJiC;QAOnCiD,QAAQ,CAAClD,KAAT,CAAeC,6BAAf,GAA+CA,6BAA/C;OAjFA;MAmFF4a,wBAAwB,EAAE,CACxBtb,UADwB,EAExB2D,QAFwB,EAGxB;QAAE4X;OAHsB;QAKxB5X,QAAQ,CAAClD,KAAT,GAAiB8a,kBAAkB,IAAI;UACrC7a,6BAA6B,EAAE,KADM;UAErCC,+BAA+B,EAAE;SAFnC;;KA7FJ;;;EAhCAiD,GAAG,CAAC5D,UAAD;IACD,MAAMwb,IAAI,GAAG,KAAKpT,QAAL,CAAcqT,UAAd,CAAyBzb,UAAzB,CAAb;;IACA,MAAM2D,QAAQ,GAAG,KAAKyE,QAAL,CAAcqT,UAAd,CAAyBzb,UAAzB,CAAjB;;IACA,MAAM0b,MAAM,GAAGtB,eAAe,CAC5BzW,QAD4B,EAE5B,mCAF4B,CAA9B;IAIA,OAAO+X,MAAP;;;EAGF3Q,IAAI,CAAC/K,UAAD,EAAqB2D,QAArB;IACF,MAAMuH,OAAO,GAAG,KAAKtH,GAAL,CAAS5D,UAAT,CAAhB;;IAEA,IAAIkL,OAAJ,EAAa;MACXX,2BAA2B,CAACW,OAAD,EAAUvH,QAAQ,CAACtC,OAAnB,CAA3B;KADF,MAEO;MACL,IAAIsC,QAAQ,CAACtC,OAAT,KAAqB,CAAzB,EAA4B;QAC1B,MAAM,IAAI1B,kBAAJ,CACJ;UACE2E,IAAI,EAAE,kBADR;UAEEjJ,OAAO,EAAE;SAHP,EAKJ,GALI,CAAN;;;;;IAWJsI,QAAQ,CAACtC,OAAT,IAAoB,CAApB;;IACA,KAAK+G,QAAL,CAAcuT,WAAd,CAA0BhY,QAA1B;;;;;MC9CSiY;EAGXxgB,YAAY4N,QAAgBb;IAC1B,KAAKM,UAAL,GAAkB,IAAIkS,iBAAJ,CAAsBxS,OAAtB,CAAlB;IACA,KAAKc,cAAL,CAAoBD,MAApB;;;EAGFC,cAAc,CAACD,MAAD;IACZA,MAAM,CAACpF,GAAP,CAAW,EAAX,EAAe,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAf;IACA8B,MAAM,CAAChC,IAAP,CAAY,EAAZ,EAAgB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAhB;;;EAGFtD,GAAG,CAACuC,OAAD,EAAmBiB,QAAnB;IACD,MAAMpH,UAAU,GAAGmG,OAAO,CAACrE,MAAR,CAAe9B,UAAlC;IACA,MAAMsB,OAAO,GAAG,KAAKmH,UAAL,CAAgB7E,GAAhB,CAAoB5D,UAApB,CAAhB;IACA,OAAOoH,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BrG,OAA1B,CAAP;;;EAGF0F,IAAI,CAACb,OAAD,EAAmBiB,QAAnB;IACF,MAAM8C,aAAa,GAAW/D,OAAO,CAACsB,IAAtC;IACA,MAAMnG,OAAO,GAAG,KAAKmH,UAAL,CAAgB7E,GAAhB,CAAoBuC,OAAO,CAACrE,MAAR,CAAe9B,UAAnC,CAAhB;;IAEA,IAAI,CAACsB,OAAL,EAAc;MACZ,OAAO8F,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,EAA1B,CAAP;;;IAGF,MAAMwC,eAAe,GAAG,KAAK1B,UAAL,CAAgB2B,oBAAhB,CACtBjE,OAAO,CAACrE,MAAR,CAAe9B,UADO,EAEtBsB,OAFsB,EAGtB4I,aAAa,CAACG,OAHQ,CAAxB;IAMA,OAAOjD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,EAA1B,CAAP;;;;;MCRSkU,iCAAiC7Q;EAA9C5P;;;IAuBU,4BAAA,GAA0B,CAChC4E,UADgC,EAEhC+J,KAFgC;MAAA;;MAAA,OAGlB,EACd,GAAGA,KADW;QAEd9G,IAAI,EAAE0I,kCAAkC,CACtC5B,KAAK,CAAC9G,IADgC,EAEtCjD,UAFsC,EAGtC,KAAKoI,QAHiC,CAF1B;QAOd0T,aAAa,0BAAE/R,KAAK,CAAC+R,aAAR,qBAAE,qBAAqBngB,GAArB,CAAyB,KAAKogB,sBAA9B;OAViB;KAA1B;;IAaA,2BAAA,GAA0BC,IAAD;MAC/B,OAAO;QACL7N,KAAK,EAAE5C,gBAAgB,CAACyQ,IAAI,CAAC7N,KAAN,CADlB;QAEL8N,SAAS,EAAED,IAAI,CAACC,SAAL,IAAkB1Q,gBAAgB,CAACyQ,IAAI,CAACC,SAAN,CAFxC;QAGLC,KAAK,EAAEF,IAAI,CAACE,KAAL,IAAc;OAHvB;KADM;;IAQR,YAAA,GASI;MACFC,eAAe,EAAE,CACfnc,UADe,EAEf2D,QAFe,EAGf;QAAEyY,YAAF;QAAgBnZ;OAHD;QAKf,MAAM+Y,IAAI,GAAG,KAAKD,sBAAL,CAA4BK,YAA5B,CAAb;;QAEAzY,QAAQ,CAAC0Y,SAAT,CAAmB1a,OAAnB,CAA2B2a,QAAQ;UACjC,IAAIA,QAAQ,CAACrZ,IAAT,CAAcS,EAAd,IAAoBT,IAAI,CAACS,EAA7B,EAAiC;YAC/B4Y,QAAQ,CAACR,aAAT,CAAuB/V,IAAvB,CAA4BiW,IAA5B;YACA;;SAHJ;QAMArY,QAAQ,CAAC0Y,SAAT,CAAmBtW,IAAnB,CAAwB;UACtB9C,IAAI,EAAE;YACJI,MAAM,EAAE,MADJ;YAEJK,EAAE,EAAET,IAAI,CAACS;WAHW;UAKtBoY,aAAa,EAAE,CAACE,IAAD;SALjB;OAdA;MAsBFO,kBAAkB,EAAE,CAClBvc,UADkB,EAElB2D,QAFkB,EAGlB;QAAEyY,YAAF;QAAgBnZ;OAHE;QAKlB,MAAM+Y,IAAI,GAAG,KAAKD,sBAAL,CAA4BK,YAA5B,CAAb;;QAEAzY,QAAQ,CAAC0Y,SAAT,CAAmB1a,OAAnB,CAA2B2a,QAAQ;UACjC,IAAIA,QAAQ,CAACrZ,IAAT,CAAcS,EAAd,IAAoBT,IAAI,CAACS,EAA7B,EAAiC;YAC/B4Y,QAAQ,CAACR,aAAT,GAAyBQ,QAAQ,CAACR,aAAT,CAAuB7e,MAAvB,CAA8Buf,SAAS;cAC9D,OAAO,CAAC1R,SAAS,CAACkR,IAAD,EAAOQ,SAAP,CAAjB;aADuB,CAAzB;;SAFJ;OA7BA;MAqCFC,OAAO,EAAE,CACPzc,UADO,EAEP2D,QAFO,EAGP;QAAEV;OAHK;QAKP,MAAMyZ,aAAa,GAAG/Q,kCAAkC,CACtD1I,IADsD,EAEtDjD,UAFsD,EAGtD,KAAKoI,QAHiD,CAAxD;;QAMA,IAAIzE,QAAQ,CAAC0Y,SAAT,KAAuB3iB,SAA3B,EAAsC;UACpCiK,QAAQ,CAAC0Y,SAAT,GAAqB,EAArB;;;QAGF1Y,QAAQ,CAAC0Y,SAAT,CAAmBtW,IAAnB,CAAwB;UACtB9C,IAAI,EAAEyZ,aADgB;UAEtBZ,aAAa,EAAE;SAFjB;OApDA;MAyDFa,UAAU,EAAE,CACV3c,UADU,EAEV2D,QAFU,EAGV;QAAEV;OAHQ;QAKVU,QAAQ,CAAC0Y,SAAT,GAAqB1Y,QAAQ,CAAC0Y,SAAT,CAAmBpf,MAAnB,CAA0Bqf,QAAQ;UACrD,OAAOA,QAAQ,CAACrZ,IAAT,CAAcS,EAAd,KAAqBT,IAAI,CAACS,EAAjC;SADmB,CAArB;OA9DA;MAkEFoI,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OAvEA;MAyEF6L,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OA9EA;MAgFF4Q,uBAAuB,EAAE,CACvB5c,UADuB,EAEvB2D,QAFuB,EAGvB;QAAEkZ;OAHqB;QAKvBlZ,QAAQ,CAACkZ,oBAAT,GAAgCA,oBAAhC;OArFA;MAuFFC,YAAY,EAAE,CACZ9c,UADY,EAEZ2D,QAFY,EAGZ;QAAEpI;OAHU;QAKZoI,QAAQ,CAACpI,SAAT,GAAqBA,SAArB;OA5FA;MA8FFwhB,eAAe,EAAE,CACf/c,UADe,EAEf2D,QAFe,EAGf;QAAEqZ;OAHa;QAKfrZ,QAAQ,CAACqZ,SAAT,GAAqBA,SAArB;OAnGA;MAqGF1K,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;;KAnHJ;;;EA3CA8K,SAAS;IACP,OAAO,iBAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAmB,EAC/B,GAAGiE,yBAAyB,EADG;MAE/B,GAAGmC,KAF4B;MAG/BkT,WAAW,EAAEtR,kCAAkC,CAC7C5B,KAAK,CAACkT,WADuC,EAE7Cjd,UAF6C,EAG7C,KAAKoI,QAHwC,CAHhB;MAQ/BiU,SAAS,sBAAEtS,KAAK,CAACsS,SAAR,qBAAE,iBAAiB1gB,GAAjB,CAAqBuhB,CAAC,IAC/B,KAAKC,uBAAL,CAA6Bnd,UAA7B,EAAyCkd,CAAzC,CADS,CARoB;MAW/BzN,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAX5B;IAaA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC9CSyZ,8BAA8BrU;EAGzC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIoT,wBAAJ,CAA6B1T,OAA7B,CAAlB;IACA,KAAKc,cAAL,CAAoBD,MAApB;;;EAGFI,WAAW;IACT,OAAO,kBAAP;;;EAGFF,WAAW,CAACF,MAAD;IACTA,MAAM,CAACpF,GAAP,CAAW,gBAAX,EAA6B,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAA7B;;;;;MCNSmW,+BAA+BrS;EAC1CC,SAAS;IACP,OAAO,eAAP;;;EAEFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;;IAGJ,MAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;MAE7B,GAAGmC,KAF0B;MAG7B0F,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAHG;MAI7BkV,aAAa,EAAE,EAJc;MAK7BxP,SAAS,sBAAE/D,KAAK,CAAC+D,SAAR,qBAAE,iBAAiBnS,GAAjB,CAAqBqI,CAAC;QAAA;;QAAA,OAAK,EACpC,GAAG4D,yBAAyB,EADQ;UAEpC,GAAG5D,CAFiC;UAGpCuZ,OAAO,gBAAEvZ,CAAC,CAACuZ,OAAJ,yBAAe,EAHc;UAIpCpQ,SAAS,kBAAEnJ,CAAC,CAACmJ,SAAJ,2BAAiB,EAJU;UAKpChN,IAAI,EAAE,EAL8B;UAMpCmN,QAAQ,iBAAEtJ,CAAC,CAACsJ,QAAJ,0BAAgB,CANY;UAOpCiB,WAAW,EAAE;YAAElL,MAAM,EAAE,cAAV;YAA0BK,EAAE,EAAE;WAPP;UAQpC+L,MAAM,EAAEtE,kBAAkB,CAACnH,CAAC,CAACyL,MAAH,EAAWzP,UAAX,EAAuB,KAAKoI,QAA5B;SARK;OAAtB,CALkB;MAe7B3F,QAAQ,EAAEsH,KAAK,CAACtH,QAAN,GACNkJ,kCAAkC,CAChC5B,KAAK,CAACtH,QAD0B,EAEhCzC,UAFgC,EAGhC,KAAKoI,QAH2B,CAD5B,GAMN1O,SArByB;MAsB7BqJ,KAAK,EAAE,gBAAAgH,KAAK,CAAChH,KAAN,0BAAa7C,GAAb,GACH;QAAEmD,MAAM,EAAE,OAAV;QAAmBnD,GAAG,EAAE6J,KAAK,CAAChH,KAAN,CAAY7C;OADjC,GAEHxG;KAxBN;IA0BA,KAAKqR,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC1CS6Z,4BAA4BzU;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI4U,sBAAJ,CAA2BlV,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;;;MCCSqU,wBAAwBzS;EAArC5P;;IAoBE,YAAA,GAKI;MACFsiB,SAAS,EAAE,CACT1d,UADS,EAET2D,QAFS,EAGT;QAAEzD;OAHO;QAKTyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OANA;MAQF6L,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OAbA;MAeF2H,OAAO,EAAE,CACP3T,UADO,EAEP2D,QAFO,EAGP;QAAExD;OAHK;QAKPwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OApBA;MAsBFwd,QAAQ,EAAE,CACR3d,UADQ,EAER2D,QAFQ,EAGR;QAAEwO;OAHM;QAKRxO,QAAQ,CAACwO,KAAT,GAAiBA,KAAjB;;KAhCJ;;;EAnBAlH,SAAS;IACP,OAAO,OAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;MAEtB,GAAGmC,KAFmB;MAGtB6T,OAAO,EAAE,KAHa;MAItBC,OAAO,EAAE9T,KAAK,CAAC8T,OAAN,IAAiB,KAJJ;MAKtBC,WAAW,EAAE,CAAC/T,KAAK,CAAC+T,WAAN,IAAqB,EAAtB,EAA0BniB,GAA1B,CAA8BgC,CAAC,IAC1CgO,kCAAkC,CAAChO,CAAD,EAAIqC,UAAJ,EAAgB,KAAKoI,QAArB,CADvB;KALf;IAUA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC3BSoa,qBAAqBhV;EAGhC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIgV,eAAJ,CAAoBtV,OAApB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,QAAP;;;;;MCES4U,wBAAwBhT;EAArC5P;;IAoCE,YAAA,GAKI;MACFuY,OAAO,EAAE,CACP3T,UADO,EAEP2D,QAFO,EAGP;QAAExD;OAHK;QAKPwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OANA;MAQF8d,uBAAuB,EAAE,CACvBje,UADuB,EAEvB2D,QAFuB,EAGvB;QAAEua;OAHqB;QAKvBva,QAAQ,CAACua,oBAAT,GAAgC,KAAKC,iBAAL,CAC9Bne,UAD8B,EAE9Bke,oBAF8B,CAAhC;OAbA;MAkBFE,YAAY,EAAE,CACZpe,UADY,EAEZ2D,QAFY,EAGZ;QAAErD;OAHU;QAKZqD,QAAQ,CAACrD,SAAT,GAAqBA,SAArB;;KA5BJ;;;EAnCA2K,SAAS;IACP,OAAO,OAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;MAEtB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFW;MAGtBC,IAAI,EAAE4J,KAAK,CAAC5J,IAHU;MAItBG,SAAS,EAAEyJ,KAAK,CAACzJ,SAJK;MAKtB4d,oBAAoB,EAAE,KAAKC,iBAAL,CACpBne,UADoB,EAEpB+J,KAAK,CAACmU,oBAFc,CALA;MAStBG,cAAc,EAAE,KAAKF,iBAAL,CAAuBne,UAAvB,EAAmC+J,KAAK,CAACsU,cAAzC;KATlB;IAWA,KAAKtT,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGMwa,iBAAiB,CACvBne,UADuB,EAEvBse,QAFuB;IAIvB,IAAI,CAACA,QAAL,EAAe,OAAO,EAAP;IAEf,OAAOA,QAAQ,CAAC3iB,GAAT,CAAa+P,GAAG,IACrBC,kCAAkC,CAChCD,GADgC,EAEhC1L,UAFgC,EAGhC,KAAKoI,QAH2B,CAD7B,CAAP;;;;;MCtCSmW,qBAAqBxV;EAGhC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIuV,eAAJ,CAAoB7V,OAApB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,QAAP;;;;;MCJSoV,+BAA+BxT;EAC1CC,SAAS;IACP,OAAO,cAAP;;;EAEFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IAGJ,IAAIA,KAAK,CAACyK,WAAN,CAAkBpY,IAAlB,IAA0B,KAA9B,EAAqC;MACnC,MAAMqiB,QAAQ,GAAG,IAAIC,GAAJ,CAAQ3U,KAAK,CAACyK,WAAN,CAAkBmK,QAA1B,CAAjB;MACA,MAAMC,SAAS,GAAGH,QAAQ,CAACI,QAAT,CAAkBnf,KAAlB,CAAwB,GAAxB,EAA6B,CAA7B,CAAlB;;MACA,IAAIkf,SAAS,IAAI,YAAjB,EAA+B;QAC7B,MAAME,IAAI,GAAG/U,KAAK,CAACyK,WAAnB;QACA,MAAM,IAAI7U,kBAAJ,CACJ;UACE2E,IAAI,EAAE,cADR;UAEEjJ,OAAO,EACL,uEACOyjB,IAAI,CAACH,eAAeG,IAAI,CAACC,cAAcD,IAAI,CAACE,aADnD,GAEA;SANA,EAQJ,GARI,CAAN;;;;IAaJ,MAAMrb,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;MAE7BqX,OAAO,EAAElV,KAAK,CAACkV,OAAN,IAAiB,EAFG;MAG7BzK,WAAW,EAAEzK,KAAK,CAACyK,WAHU;MAI7B0K,MAAM,EAAEnV,KAAK,CAACmV,MAAN,IAAgB;QACtB9iB,IAAI,EAAE;OALqB;MAO7B8D,GAAG,EAAE6J,KAAK,CAAC7J,GAPkB;MAQ7BU,QAAQ,EAAEmJ,KAAK,CAACnJ,QAAN,IAAkB,EARC;MAS7BO,MAAM,EAAE;KATV;IAWA,KAAK4J,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC1CSwb,4BAA4BpW;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI+V,sBAAJ,CAA2BrW,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,eAAP;;;;;MCKSgW,8BAA8BpU;EAA3C5P;;;IAeU,4BAAA,GAA2B2O,KAAD,KAAmC,EACnE,GAAGA,KADgE;MAEnErG,EAAE,EAAEmE,EAAM,EAFyD;MAGnE0N,MAAM,EAAExL,KAAK,CAACwL,MAAN,IAAgB;KAHQ,CAA1B;;IAsBR,YAAA,GAKI;MACF8J,UAAU,EAAE,CACVrf,UADU,EAEV2D,QAFU,EAGV;QAAEyT;OAHQ;QAKV,IAAIzT,QAAQ,CAAC2b,KAAT,KAAmB5lB,SAAvB,EAAkC;UAChCiK,QAAQ,CAAC2b,KAAT,GAAiB,EAAjB;;;QAEF3b,QAAQ,CAAC2b,KAAT,CAAevZ,IAAf,CAAoB,KAAKwZ,uBAAL,CAA6BnI,OAA7B,CAApB;OATA;MAWFoI,aAAa,EAAE,CACbxf,UADa,EAEb2D,QAFa,EAGb;QAAE8b;OAHW;QAKb,IAAI9b,QAAQ,CAAC2b,KAAT,KAAmB5lB,SAAvB,EAAkC;UAChCiK,QAAQ,CAAC2b,KAAT,GAAiB,EAAjB;;;QAEF3b,QAAQ,CAAC2b,KAAT,GAAiB3b,QAAQ,CAAC2b,KAAT,CAAeriB,MAAf,CAAsBma,OAAO;UAC5C,OAAOA,OAAO,CAAC1T,EAAR,KAAe+b,SAAtB;SADe,CAAjB;OAnBA;MAuBFC,cAAc,EAAE,CACd1f,UADc,EAEd2D,QAFc,EAGd;QAAE8b,SAAF;QAAarI;OAHC;QAKd,IAAIzT,QAAQ,CAAC2b,KAAT,KAAmB5lB,SAAvB,EAAkC;UAChCiK,QAAQ,CAAC2b,KAAT,GAAiB,EAAjB;;;QAGF,MAAMK,UAAU,GAAG,KAAKJ,uBAAL,CAA6BnI,OAA7B,CAAnB;;QACA,KAAK,IAAIqD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG9W,QAAQ,CAAC2b,KAAT,CAAezgB,MAAnC,EAA2C4b,CAAC,EAA5C,EAAgD;UAC9C,MAAMuB,IAAI,GAAGrY,QAAQ,CAAC2b,KAAT,CAAe7E,CAAf,CAAb;;UACA,IAAIuB,IAAI,CAACtY,EAAL,IAAW+b,SAAf,EAA0B;YACxB9b,QAAQ,CAAC2b,KAAT,CAAe7E,CAAf,IAAoBkF,UAApB;;;OApCJ;MAwCF5T,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OA7CA;MA+CFF,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OApDA;MAsDFoS,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;;KAhEJ;;;EApCA8K,SAAS;IACP,OAAO,cAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAgB,EAC5B,GAAGiE,yBAAyB,EADA;MAE5B,GAAGmC,KAFyB;MAG5BuV,KAAK,EAAE,iBAAAvV,KAAK,CAACuV,KAAN,kCAAa3jB,GAAb,CAAiB,KAAK4jB,uBAAtB,MAAkD;KAH3D;IAKA,KAAKxU,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EASF2F,UAAU,CAACtJ,UAAD,EAAqBE,GAArB;IACR,MAAM3G,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MAC/D9G,KAAK,EAAE,SAASjE,MAAT;KADM,CAAf;;IAGA,IAAI3G,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;MACtB,OAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;;;;IAIF,IAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;MACpB,MAAM,IAAI7F,KAAJ,CAAU,4BAAV,CAAN;;;IAGF;;;;;MChDS8gB,2BAA2B7W;EAGtC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI2W,qBAAJ,CAA0BjX,OAA1B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;;;EAGFoC,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;IACR,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBa,UAAhB,CACfnD,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe5B,GAFA,CAAjB;;IAIA,IAAIyD,QAAJ,EAAc;MACZ,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;IAEF,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;;;MCXSkY,uBAAuB7U;EAApC5P;;IAiBE,YAAA,GAKI;MACF0kB,kBAAkB,EAAE,CAClB9f,UADkB,EAElB2D,QAFkB,EAGlB;QAAEoc;OAHgB;QAKlBpc,QAAQ,CAACqc,gBAAT,CAA0Bja,IAA1B,CAA+Bga,eAA/B;OANA;MAQFE,qBAAqB,EAAE,CACrBjgB,UADqB,EAErB2D,QAFqB,EAGrB;QAAEuc;OAHmB;QAKrBvc,QAAQ,CAACqc,gBAAT,GAA4Brc,QAAQ,CAACqc,gBAAT,CAA0B/iB,MAA1B,CAAiCkjB,CAAC;UAC5D,OAAOA,CAAC,CAAChgB,IAAF,KAAW+f,SAAlB;SAD0B,CAA5B;OAbA;MAiBFnU,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OAtBA;MAwBFsG,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OA7BA;MA+BFigB,0BAA0B,EAAE,CAC1BpgB,UAD0B,EAE1B2D,QAF0B,EAG1B;QAAE0c;OAHwB;QAK1B,MAAMjV,MAAM,GAAG,IAAI9I,GAAJ,CACbqB,QAAQ,CAACqc,gBAAT,CAA0BrkB,GAA1B,CAA8BC,IAAI,IAAI,CAACA,IAAI,CAACuE,IAAN,EAAYvE,IAAZ,CAAtC,CADa,CAAf;QAGA,MAAMrC,MAAM,GAAsB,EAAlC;QACA,IAAI2R,OAAO,GAAGvH,QAAQ,CAACqc,gBAAvB;QAEAK,UAAU,CAAC1e,OAAX,CAAmBue,SAAS;UAC1B,MAAMI,KAAK,GAAGlV,MAAM,CAACxH,GAAP,CAAWsc,SAAX,CAAd;;UACA,IAAII,KAAK,KAAK5mB,SAAd,EAAyB;YACvB,MAAM,IAAIoF,KAAJ,CAAU,WAAV,CAAN;;;UAEFvF,MAAM,CAACwM,IAAP,CAAYua,KAAZ;;UAGApV,OAAO,GAAGA,OAAO,CAACjO,MAAR,CAAekjB,CAAC;YACxB,OAAOA,CAAC,CAAChgB,IAAF,KAAW+f,SAAlB;WADQ,CAAV;SARF;QAaAvc,QAAQ,CAACqc,gBAAT,GAA4BzmB,MAA5B;;;QAGAoK,QAAQ,CAACqc,gBAAT,CAA0Bja,IAA1B,CAA+B,GAAGmF,OAAlC;OA1DA;MA4DFqV,YAAY,EAAE,CACZvgB,UADY,EAEZ2D,QAFY,EAGZ;QAAEuc,SAAF;QAAa5jB;OAHD;QAKZqH,QAAQ,CAACqc,gBAAT,CAA0Bre,OAA1B,CAAkC2e,KAAK;UACrC,IAAIA,KAAK,CAACngB,IAAN,IAAc+f,SAAlB,EAA6B;;YAE3B,IAAII,KAAK,CAAClkB,IAAN,CAAW+D,IAAX,IAAmB,MAAvB,EAA+B;cAC7BmgB,KAAK,CAAClkB,IAAN,CAAWY,MAAX,CAAkB+I,IAAlB,CAAuBzJ,KAAvB;aADF,MAEO,IACLgkB,KAAK,CAAClkB,IAAN,CAAW+D,IAAX,IAAmB,KAAnB,IACAmgB,KAAK,CAAClkB,IAAN,CAAW4d,WAAX,CAAuB7Z,IAAvB,IAA+B,MAF1B,EAGL;cACAmgB,KAAK,CAAClkB,IAAN,CAAW4d,WAAX,CAAuBhd,MAAvB,CAA8B+I,IAA9B,CAAmCzJ,KAAnC;aAJK,MAKA;cACL,MAAM,IAAIwC,KAAJ,CAAU,qCAAV,CAAN;;;SAXN;OAjEA;MAiFF0hB,oBAAoB,EAAE,CACpBxgB,UADoB,EAEpB2D,QAFoB,EAGpB;QAAEuc,SAAF;QAAa5jB;OAHO;QAKpBqH,QAAQ,CAACqc,gBAAT,CAA0Bre,OAA1B,CAAkC2e,KAAK;UACrC,IAAIA,KAAK,CAACngB,IAAN,IAAc+f,SAAlB,EAA6B;;YAE3B,IAAII,KAAK,CAAClkB,IAAN,CAAW+D,IAAX,IAAmB,MAAvB,EAA+B;cAC7BmgB,KAAK,CAAClkB,IAAN,CAAWY,MAAX,CAAkB2E,OAAlB,CAA0BzE,CAAC;gBACzB,IAAIA,CAAC,CAACgD,GAAF,IAAS5D,KAAK,CAAC4D,GAAnB,EAAwB;kBACtBhD,CAAC,CAAC6c,KAAF,GAAUzd,KAAK,CAACyd,KAAhB;;eAFJ;aADF,MAMO,IACLuG,KAAK,CAAClkB,IAAN,CAAW+D,IAAX,IAAmB,KAAnB,IACAmgB,KAAK,CAAClkB,IAAN,CAAW4d,WAAX,CAAuB7Z,IAAvB,IAA+B,MAF1B,EAGL;cACAmgB,KAAK,CAAClkB,IAAN,CAAW4d,WAAX,CAAuBhd,MAAvB,CAA8B2E,OAA9B,CAAsCzE,CAAC;gBACrC,IAAIA,CAAC,CAACgD,GAAF,IAAS5D,KAAK,CAAC4D,GAAnB,EAAwB;kBACtBhD,CAAC,CAAC6c,KAAF,GAAUzd,KAAK,CAACyd,KAAhB;;eAFJ;aAJK,MASA;cACL,MAAM,IAAIjb,KAAJ,CAAU,qCAAV,CAAN;;;SAnBN;;KA3FJ;;;EAhBAmM,SAAS;IACP,OAAO,MAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;MAErB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFU;MAGrBC,IAAI,EAAE4J,KAAK,CAAC5J,IAHS;MAIrBsgB,eAAe,EAAE1W,KAAK,CAAC0W,eAJF;MAKrBT,gBAAgB,EAAEjW,KAAK,CAACiW,gBAAN,IAA0B,EALvB;MAMrBhU,WAAW,EAAEjC,KAAK,CAACiC;KANrB;IAQA,KAAKjB,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC5BS+c,oBAAoB3X;EAG/B3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIoX,cAAJ,CAAmB1X,OAAnB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,OAAP;;;;;MCCSuX,uBAAuB3V;EAApC5P;;IAiBE,YAAA,GAKI;MACFwlB,WAAW,EAAE,CACX5gB,UADW,EAEX2D,QAFW,EAGX;QAAEkd;OAHS;QAKXld,QAAQ,CAACmd,SAAT,CAAmB/a,IAAnB,CAAwB8a,QAAxB;OANA;MAQFE,cAAc,EAAE,CACd/gB,UADc,EAEd2D,QAFc,EAGd;QAAEkd;OAHY;QAKdld,QAAQ,CAACmd,SAAT,GAAqBnd,QAAQ,CAACmd,SAAT,CAAmB7jB,MAAnB,CAA0B+jB,GAAG;UAChD,OAAO,EAAEA,GAAG,CAAC5R,OAAJ,IAAeyR,QAAQ,CAACzR,OAAxB,IAAmC4R,GAAG,CAACle,KAAJ,IAAa+d,QAAQ,CAAC/d,KAA3D,CAAP;SADmB,CAArB;OAbA;MAiBFwP,UAAU,EAAE,CACVtS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OAtBA;MAwBF4L,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OA7BA;MA+BFF,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;;KAzCJ;;;EAhBA+K,SAAS;IACP,OAAO,MAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;MAErB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFU;MAGrB4gB,SAAS,EAAE/W,KAAK,CAAC+W,SAAN,IAAmB,EAHT;MAIrB3gB,IAAI,EAAE4J,KAAK,CAAC5J,IAJS;MAKrB6L,WAAW,EAAEjC,KAAK,CAACiC;KALrB;IAOA,KAAKjB,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCxBSsd,oBAAoBlY;EAG/B3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIkY,cAAJ,CAAmBxY,OAAnB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,OAAP;;;;;ACsCJ,MAAM8X,eAAe,GAA6B;EAChDC,oBAAoB,EAAE,KAD0B;EAEhDC,mBAAmB,EAAE,KAF2B;EAGhDC,iBAAiB,EAAE3nB,SAH6B;EAIhD4nB,OAAO,EAAEzY,oBAJuC;EAKhD0Y,QAAQ,EAAEzY,qBALsC;EAMhD0Y,MAAM,EAAE;AANwC,CAAlD;AASA,MAAaC;EAaXrmB,YAAYmL,UAA6C;IAPjD,gBAAA,GAGJ;MAAEe,IAAI,EAAE5N,SAAR;MAAmBgoB,GAAG,EAAEhoB;KAHpB;IAQN,KAAK6M,OAAL,GAAe,EAAE,GAAG2a,eAAL;MAAsB,GAAG3a;KAAxC;IACA,KAAK8B,SAAL,GAAiB,EAAjB;IACA,KAAKsZ,eAAL,GAAuBjoB,SAAvB;IAEA,KAAK0O,QAAL,GAAgB,IAAIrI,eAAJ,EAAhB;IACA,KAAK6hB,OAAL,GAAe,IAAItb,YAAJ,CAAiB;MAC9BzF,OAAO,EAAE,KAAK0F,OAAL,CAAa4a,oBADQ;MAE9B/b,QAAQ,EAAE,KAAKmB,OAAL,CAAa6a;KAFV,CAAf;IAKA,KAAKS,GAAL,GAAW,KAAKC,SAAL,CAAe;MAAEN,MAAM,EAAE,KAAKjb,OAAL,CAAaib;KAAtC,CAAX;;;EAGF/kB,KAAK;;IAEH,KAAKslB,YAAL;IACA,KAAKC,WAAL;;;EAGFC,IAAI;;;IACF,8BAAKC,WAAL,CAAiB5a,IAAjB,2CAAuB6a,OAAvB,CAA+B,KAA/B;IACA,KAAKD,WAAL,CAAiB5a,IAAjB,GAAwB5N,SAAxB;IAEA,8BAAKwoB,WAAL,CAAiBR,GAAjB,2CAAsBS,OAAtB,CAA8B,KAA9B;IACA,KAAKD,WAAL,CAAiBR,GAAjB,GAAuBhoB,SAAvB;;;EAGFwJ,KAAK;IACH,KAAKkF,QAAL,CAAclF,KAAd;;;EAGF5B,OAAO,CAACtB,UAAD;IACL,IAAI,CAACA,UAAD,IAAe,CAAC,KAAKuG,OAAL,CAAa8a,iBAAjC,EAAoD;MAClD,MAAM,IAAIviB,KAAJ,CAAU,yCAAV,CAAN;;;IAGF,OAAO,IAAImJ,UAAJ,CACLjI,UAAU,IAAI,KAAKuG,OAAL,CAAa8a,iBADtB,EAEL,KAAKhZ,SAFA,EAGL,KAAKD,QAHA,CAAP;;;EAOFga,SAAS,CAACC,OAAe,IAAhB,EAAsB9b,OAAtB;IACP,MAAMsb,GAAG,GAAG,KAAKC,SAAL,CAAevb,OAAf,CAAZ;IACA,MAAM+b,MAAM,GAAGT,GAAG,CAACU,MAAJ,CAAWF,IAAX,EAAiB;MAC9Brd,OAAO,CAACwd,GAAR,8CAAyDH,MAAzD;KADa,CAAf;IAGAC,MAAM,CAACG,gBAAP,GAA0B,KAAK,IAA/B;;;EAGMX,SAAS,CAACvb,OAAD;IACf,MAAMsb,GAAG,GAAGnb,OAAO,EAAnB;IAEA,MAAMgc,aAAa,GAAGhc,OAAO,CAACC,MAAR,CAAe;MAAE0C,WAAW,EAAE;KAA9B,CAAtB;IACAqZ,aAAa,CAAC9b,GAAd,CAAkBF,OAAO,CAACic,IAAR,EAAlB;;IAEA,IAAI,EAACpc,OAAD,YAACA,OAAO,CAAEib,MAAV,CAAJ,EAAsB;MACpBK,GAAG,CAACjb,GAAJ,CAAQgc,MAAM,CAAC,MAAD,CAAd;;;IAEFf,GAAG,CAACjb,GAAJ,CAAQ,QAAR,EAAkB,KAAKgb,OAAL,CAAapb,YAAb,EAAlB;;IAGA,IAAI,KAAKD,OAAL,CAAa4a,oBAAjB,EAAuC;MACrCU,GAAG,CAACjb,GAAJ,CAAQ,cAAR,EAAwB,KAAKgb,OAAL,CAAaza,gBAAb,EAAxB,EAAyDub,aAAzD;KADF,MAEO;MACLb,GAAG,CAACjb,GAAJ,CAAQ,cAAR,EAAwB8b,aAAxB;;;IAGF,KAAKf,eAAL,GAAuB,IAAI/F,cAAJ,CAAmB8G,aAAnB,EAAkC,KAAKta,QAAvC,CAAvB;IAEA,KAAKC,SAAL,GAAiB;MACf9F,QAAQ,EAAE,IAAI0P,gBAAJ,CAAqByQ,aAArB,EAAoC,KAAKta,QAAzC,CADK;MAEf/F,IAAI,EAAE,IAAIuO,WAAJ,CAAgB8R,aAAhB,EAA+B,KAAKta,QAApC,CAFS;MAGf,iBAAiB,IAAI4E,mBAAJ,CAAwB0V,aAAxB,EAAuC,KAAKta,QAA5C,CAHF;MAIf3F,QAAQ,EAAE,IAAIsQ,eAAJ,CAAoB2P,aAApB,EAAmC,KAAKta,QAAxC,CAJK;MAKf5F,OAAO,EAAE,IAAI4P,cAAJ,CAAmBsQ,aAAnB,EAAkC,KAAKta,QAAvC,CALM;MAMf,kBAAkB,IAAIoK,oBAAJ,CAAyBkQ,aAAzB,EAAwC,KAAKta,QAA7C,CANH;MAOf,iBAAiB,IAAI6L,mBAAJ,CAAwByO,aAAxB,EAAuC,KAAKta,QAA5C,CAPF;MAQf1F,SAAS,EAAE,IAAI+R,iBAAJ,CAAsBiO,aAAtB,EAAqC,KAAKta,QAA1C,CARI;MASf,mBAAmB,IAAI+M,qBAAJ,CACjBuN,aADiB,EAEjB,KAAKta,QAFY,CATJ;MAaf,sBAAsB,IAAIgL,mBAAJ,CACpBsP,aADoB,EAEpB,KAAKta,QAFe,CAbP;MAiBfzF,KAAK,EAAE,IAAI2U,YAAJ,CAAiBoL,aAAjB,EAAgC,KAAKta,QAArC,CAjBQ;MAkBfxF,OAAO,EAAE,IAAI4U,cAAJ,CAAmBkL,aAAnB,EAAkC,KAAKta,QAAvC,CAlBM;MAmBf,WAAW,IAAIgN,aAAJ,CAAkBsN,aAAlB,EAAiC,KAAKta,QAAtC,CAnBI;MAoBf,eAAe,IAAIya,iBAAJ,CAAsBH,aAAtB,EAAqC,KAAKta,QAA1C,CApBA;MAqBf,cAAc,IAAI6N,gBAAJ,CAAqByM,aAArB,EAAoC,KAAKta,QAAzC,CArBC;MAsBf,mBAAmB,IAAIgV,qBAAJ,CACjBsF,aADiB,EAEjB,KAAKta,QAFY,CAtBJ;MA0Bf,gBAAgB,IAAI+R,kBAAJ,CAAuBuI,aAAvB,EAAsC,KAAKta,QAA3C,CA1BD;MA2BfvF,OAAO,EAAE,IAAIwW,cAAJ,CAAmBqJ,aAAnB,EAAkC,KAAKta,QAAvC,CA3BM;MA4Bf,sBAAsB,IAAIiQ,wBAAJ,CACpBqK,aADoB,EAEpB,KAAKta,QAFe,CA5BP;MAgCf,iBAAiB,IAAIoV,mBAAJ,CAAwBkF,aAAxB,EAAuC,KAAKta,QAA5C,CAhCF;MAiCftF,KAAK,EAAE,IAAIib,YAAJ,CAAiB2E,aAAjB,EAAgC,KAAKta,QAArC,CAjCQ;MAkCfrF,KAAK,EAAE,IAAIwb,YAAJ,CAAiBmE,aAAjB,EAAgC,KAAKta,QAArC,CAlCQ;MAmCfpF,YAAY,EAAE,IAAImc,mBAAJ,CAAwBuD,aAAxB,EAAuC,KAAKta,QAA5C,CAnCC;MAoCf,gBAAgB,IAAIwX,kBAAJ,CAAuB8C,aAAvB,EAAsC,KAAKta,QAA3C,CApCD;MAqCfhM,IAAI,EAAE,IAAIskB,WAAJ,CAAgBgC,aAAhB,EAA+B,KAAKta,QAApC,CArCS;MAsCfnF,IAAI,EAAE,IAAIge,WAAJ,CAAgByB,aAAhB,EAA+B,KAAKta,QAApC;KAtCR;IAyCAyZ,GAAG,CAACjb,GAAJ,CAAQ,CAACvC,GAAD,EAAaye,GAAb,EAA2BC,IAA3B,EAA2CpkB,IAA3C;MACN,IAAI0F,GAAG,YAAY1E,kBAAnB,EAAuC;QACrC,OAAOojB,IAAI,CAAC5hB,MAAL,CAAYkD,GAAG,CAACxE,UAAhB,EAA4B8H,IAA5B,CAAiC;UACtC9H,UAAU,EAAEwE,GAAG,CAACxE,UADsB;UAEtCxE,OAAO,EAAEgJ,GAAG,CAAChJ,OAFyB;UAGtC2nB,MAAM,EAAE,CAAC3e,GAAG,CAACzE,IAAL;SAHH,CAAP;OADF,MAMO;QACLoF,OAAO,CAACC,KAAR,CAAcZ,GAAd;QACA,OAAO0e,IAAI,CAAC5hB,MAAL,CAAY,GAAZ,EAAiBwG,IAAjB,CAAsB;UAC3B1C,KAAK,EAAEZ,GAAG,CAAChJ;SADN,CAAP;;KATJ;IAeA,OAAOwmB,GAAP;;;EAGMG,WAAW;IACjB,MAAMH,GAAG,GAAG,KAAKA,GAAjB;IAEA,KAAKK,WAAL,CAAiBR,GAAjB,GAAuBuB,IAAI,CAAC,KAAK1c,OAAL,CAAa+a,OAAd,CAAJ,CACpBa,OADoB,GAEpBve,GAFoB,CAEhB,IAFgB,EAGpBsf,KAHoB,CAGd,gBAAeC,GAAf;MACL,MAAM/b,QAAQ,GAAG,MAAMgc,SAAS,CAACvB,GAAD,CAAT,CACpBje,GADoB,CAChBuf,GADgB,EAEpB1f,GAFoB,CAEhBiF,WAAW,CAAC,KAAKoa,GAAL,CAASna,OAAV,CAFK,CAAvB;MAGA,OAAO,CAACvB,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;KAPmB,EASpBT,IAToB,CASf,IATe,EAUpBkc,KAVoB,CAUd,gBAAeC,GAAf,EAAoB1b,IAApB;MACL,MAAML,QAAQ,GAAG,MAAMgc,SAAS,CAACvB,GAAD,CAAT,CACpB7a,IADoB,CACfmc,GADe,EAEpB1f,GAFoB,CAEhBiF,WAAW,CAAC,KAAKoa,GAAL,CAASna,OAAV,CAFK,EAGpBhB,IAHoB,CAGfF,IAHe,CAAvB;MAIA,OAAO,CAACL,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;KAfmB,EAiBpBxD,MAjBoB,CAiBb,IAjBa,EAkBpBif,KAlBoB,CAkBd,gBAAeC,GAAf,EAAoB1b,IAApB;MACL,MAAML,QAAQ,GAAG,MAAMgc,SAAS,CAACvB,GAAD,CAAT,CACpB5d,MADoB,CACbkf,GADa,EAEpB1f,GAFoB,CAEhBiF,WAAW,CAAC,KAAKoa,GAAL,CAASna,OAAV,CAFK,EAGpBhB,IAHoB,CAGfF,IAHe,CAAvB;MAIA,OAAO,CAACL,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;KAvBmB,CAAvB;;;EA2BMsa,YAAY;IAClB,MAAMF,GAAG,GAAG,KAAKA,GAAjB;IAEA,KAAKK,WAAL,CAAiB5a,IAAjB,GAAwB2b,IAAI,CAAC,KAAK1c,OAAL,CAAagb,QAAd,CAAJ,CACrBY,OADqB,GAErBnb,IAFqB,CAEhB,cAFgB,EAGrBkc,KAHqB,CAGf,gBAAeC,GAAf,EAAoB1b,IAApB;MACL,MAAML,QAAQ,GAAG,MAAMgc,SAAS,CAACvB,GAAD,CAAT,CACpB7a,IADoB,CACfmc,GAAG,GAAG,GAAN,GAAY1b,IADG,EAEpBhE,GAFoB,CAEhBiF,WAAW,CAAC,KAAKoa,GAAL,CAASna,OAAV,CAFK,EAGpBhB,IAHoB,EAAvB;MAIA,OAAO,CAACP,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;KARoB,CAAxB;;;;;;;"}
1
+ {"version":3,"file":"commercetools-mock.esm.js","sources":["../src/lib/expandParser.ts","../src/lib/haversine.ts","../src/lib/predicateParser.ts","../src/exceptions.ts","../src/storage.ts","../src/oauth/store.ts","../src/oauth/helpers.ts","../src/oauth/server.ts","../src/helpers.ts","../src/projectAPI.ts","../src/lib/proxy.ts","../src/constants.ts","../src/services/abstract.ts","../src/repositories/errors.ts","../src/repositories/abstract.ts","../src/repositories/helpers.ts","../src/repositories/cart-discount.ts","../src/services/cart-discount.ts","../src/repositories/cart.ts","../src/services/cart.ts","../src/repositories/category.ts","../src/services/category.ts","../src/repositories/channel.ts","../src/services/channel.ts","../src/repositories/customer-group.ts","../src/services/customer-group.ts","../src/repositories/customer.ts","../src/services/customer.ts","../src/repositories/custom-object.ts","../src/services/custom-object.ts","../src/repositories/discount-code.ts","../src/services/discount-code.ts","../src/repositories/extension.ts","../src/services/extension.ts","../src/repositories/inventory-entry.ts","../src/services/inventory-entry.ts","../src/services/my-cart.ts","../src/repositories/payment.ts","../src/services/my-payment.ts","../src/repositories/order.ts","../src/services/order.ts","../src/services/payment.ts","../src/lib/filterParser.ts","../src/repositories/product-projection.ts","../src/services/product-projection.ts","../src/repositories/product.ts","../src/services/product.ts","../src/repositories/product-type.ts","../src/services/product-type.ts","../src/lib/masking.ts","../src/repositories/project.ts","../src/services/project.ts","../src/repositories/shipping-method.ts","../src/services/shipping-method.ts","../src/repositories/shopping-list.ts","../src/services/shopping-list.ts","../src/repositories/state.ts","../src/services/state.ts","../src/repositories/store.ts","../src/services/store.ts","../src/repositories/subscription.ts","../src/services/subscription.ts","../src/repositories/tax-category.ts","../src/services/tax-category.ts","../src/repositories/type.ts","../src/services/type.ts","../src/repositories/zone.ts","../src/services/zone.ts","../src/services/my-customer.ts","../src/ctMock.ts"],"sourcesContent":["/**\n * This module implements the reference expansion as imeplemented by\n * commercetools.\n *\n * See https://docs.commercetools.com/api/general-concepts#reference-expansion\n *\n * TODO: implement support for multi-dimensional array\n */\ntype ExpandResult = {\n element: string\n index?: string | number\n rest?: string\n}\n\nexport const parseExpandClause = (clause: string): ExpandResult => {\n const result: ExpandResult = {\n element: clause,\n index: undefined,\n rest: undefined,\n }\n\n const pos = clause.indexOf('.')\n if (pos > 0) {\n result.element = clause.substring(0, pos)\n result.rest = clause.substring(pos + 1)\n }\n\n const match = result.element.match(/\\[([^\\]+])]/)\n if (match) {\n result.index = match[1] === '*' ? '*' : parseInt(match[1], 10)\n result.element = result.element.substring(0, match.index)\n }\n return result\n}\n","export type Location = {\n latitude: number\n longitude: number\n}\n\n/**\n * Returns the distance between src and dst as meters\n */\nexport const haversineDistance = (src: Location, dst: Location) => {\n const RADIUS_OF_EARTH_IN_KM = 6371\n const toRadian = (deg: number) => deg * (Math.PI / 180)\n\n const dLat = toRadian(dst.latitude - src.latitude)\n const dLon = toRadian(dst.longitude - src.longitude)\n\n var a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRadian(src.latitude)) *\n Math.cos(toRadian(dst.latitude)) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return RADIUS_OF_EARTH_IN_KM * c * 1000\n}\n","/**\n * This module implements the commercetools query predicate filter expression.\n * Support should be 100% complete.\n *\n * See https://docs.commercetools.com/api/predicates/query\n */\nimport perplex from 'perplex'\nimport { ITokenPosition, Parser } from 'pratt'\nimport { haversineDistance } from './haversine'\n\nexport class PredicateError {\n message: string\n\n constructor(message: string) {\n this.message = message\n }\n}\n\ntype MatchFunc = (target: any, variables: VariableMap) => boolean\ntype VariableMap = {\n [key: string]: any\n}\n\nexport const matchesPredicate = (\n predicate: string | string[] | undefined,\n target: any,\n variables?: VariableMap\n): boolean => {\n if (!predicate) {\n return true\n }\n\n if (Array.isArray(predicate)) {\n return predicate.every(item => {\n const func = generateMatchFunc(item)\n return func(target, variables || {})\n })\n } else {\n const func = generateMatchFunc(predicate)\n return func(target, variables || {})\n }\n}\n\nexport const parseQueryExpression = (\n predicate: string | string[]\n): MatchFunc => {\n if (Array.isArray(predicate)) {\n const callbacks = predicate.map(item => generateMatchFunc(item))\n return (target: any, variables: VariableMap) => {\n return callbacks.every(callback => callback(target, variables))\n }\n } else {\n return generateMatchFunc(predicate)\n }\n}\n\ntype Symbol = {\n type: 'var' | 'boolean' | 'string' | 'float' | 'int' | 'identifier'\n value: any\n pos?: ITokenPosition\n}\n\nconst validateSymbol = (val: Symbol) => {\n if (!val.type) {\n throw new PredicateError('Internal error')\n }\n\n if (val.type === 'identifier') {\n const char = val.value.charAt(0)\n const line = val.pos?.start.line\n const column = val.pos?.start.column\n\n throw new PredicateError(\n `Invalid input '${char}', expected input parameter or primitive value (line ${line}, column ${column})`\n )\n }\n}\n\nconst resolveSymbol = (val: Symbol, vars: VariableMap): any => {\n if (val.type === 'var') {\n if (!(val.value in vars)) {\n throw new PredicateError(`Missing parameter value for ${val.value}`)\n }\n return vars[val.value]\n }\n\n return val.value\n}\n\nconst resolveValue = (obj: any, val: Symbol): any => {\n if (val.type !== 'identifier') {\n throw new PredicateError('Internal error')\n }\n\n if (!(val.value in obj)) {\n if (Array.isArray(obj)) {\n return Object.values(obj)\n .filter(v => val.value in v)\n .map(v => v[val.value])\n }\n throw new PredicateError(`The field '${val.value}' does not exist.`)\n }\n\n return obj[val.value]\n}\n\nconst getLexer = (value: string) => {\n return new perplex(value)\n\n .token('AND', /and(?![-_a-z0-9]+)/i)\n .token('OR', /or(?![-_a-z0-9]+)/i)\n .token('NOT', /not(?![-_a-z0-9]+)/i)\n\n .token('WITHIN', /within(?![-_a-z0-9]+)/i)\n .token('IN', /in(?![-_a-z0-9]+)/i)\n .token('MATCHES_IGNORE_CASE', /matches\\s+ignore\\s+case(?![-_a-z0-9]+)/i)\n .token('CONTAINS', /contains(?![-_a-z0-9]+)/i)\n .token('ALL', /all(?![-_a-z0-9]+)/i)\n .token('ANY', /any(?![-_a-z0-9]+)/i)\n .token('EMPTY', /empty(?![-_a-z0-9]+)/i)\n .token('IS', /is(?![-_a-z0-9]+)/i)\n .token('DEFINED', /defined(?![-_a-z0-9]+)/i)\n\n .token('FLOAT', /\\d+\\.\\d+/)\n .token('INT', /\\d+/)\n .token('VARIABLE', /:([-_A-Za-z0-9]+)/)\n .token('IDENTIFIER', /[-_A-Za-z0-9]+/)\n .token('STRING', /\"((?:\\\\.|[^\"\\\\])*)\"/)\n .token('STRING', /'((?:\\\\.|[^'\\\\])*)'/)\n\n .token('COMMA', ',')\n .token('(', '(')\n .token(')', ')')\n .token('>=', '>=')\n .token('<=', '<=')\n .token('>', '>')\n .token('<', '<')\n .token('!=', '!=')\n .token('=', '=')\n .token('\"', '\"')\n .token('WS', /\\s+/, true) // skip\n}\n\n/**\n * This function converts a query expression in to a callable which returns a\n * boolean to indicate if the given object matches or not.\n *\n * This currently parses the predicate each time it is called, but it should be\n * straight-forward to add a query cache (lru-cache)\n */\nconst generateMatchFunc = (predicate: string): MatchFunc => {\n const lexer = getLexer(predicate)\n const parser = new Parser(lexer)\n .builder()\n .nud('IDENTIFIER', 100, t => {\n return {\n type: 'identifier',\n value: t.token.match,\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('VARIABLE', 100, t => {\n return {\n type: 'var',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('STRING', 100, t => {\n return {\n type: 'string',\n // @ts-ignore\n value: t.token.groups[1],\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('INT', 1, t => {\n return {\n type: 'int',\n value: parseInt(t.token.match, 10),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('FLOAT', 1, t => {\n return {\n type: 'float',\n value: parseFloat(t.token.match),\n pos: t.token.strpos(),\n } as Symbol\n })\n .nud('NOT', 100, ({ bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return !expr(obj)\n }\n })\n .nud('EMPTY', 10, ({ bp }) => {\n return 'empty'\n })\n .nud('DEFINED', 10, ({ bp }) => {\n return 'defined'\n })\n\n .led('AND', 5, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any) => {\n return left(obj) && expr(obj)\n }\n })\n .led('OR', 5, ({ left, token, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n return left(obj, vars) || expr(obj, vars)\n }\n })\n .led('COMMA', 1, ({ left, token, bp }) => {\n const expr: any = parser.parse({ terminals: [bp - 1] })\n if (Array.isArray(expr)) {\n return [left, ...expr]\n } else {\n return [left, expr]\n }\n })\n .nud('(', 100, t => {\n const expr: any = parser.parse({ terminals: [')'] })\n return expr\n })\n .led('(', 100, ({ left, bp }) => {\n const expr = parser.parse()\n lexer.expect(')')\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (value) {\n return expr(value)\n }\n return false\n }\n })\n .bp(')', 0)\n .led('=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const resolvedValue = resolveValue(obj, left)\n const resolvedSymbol = resolveSymbol(expr, vars)\n if (Array.isArray(resolvedValue)) {\n return !!resolvedValue.some(elem => elem === resolvedSymbol)\n }\n return resolvedValue === resolvedSymbol\n }\n })\n .led('!=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n return resolveValue(obj, left) !== resolveSymbol(expr, vars)\n }\n })\n .led('>', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) > resolveSymbol(expr, vars)\n }\n })\n .led('>=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) >= resolveSymbol(expr, vars)\n }\n })\n .led('<', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) < resolveSymbol(expr, vars)\n }\n })\n .led('<=', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: object) => {\n return resolveValue(obj, left) <= resolveSymbol(expr, vars)\n }\n })\n .led('IS', 20, ({ left, bp }) => {\n let invert = false\n\n // Peek if this is a `is not` statement\n const next = lexer.peek()\n if (next.type === 'NOT') {\n invert = true\n lexer.next()\n }\n\n const expr: any = parser.parse({ terminals: [bp - 1] })\n\n switch (expr) {\n case 'empty': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length === 0\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val.length !== 0\n }\n }\n }\n case 'defined': {\n if (!invert) {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val !== undefined\n }\n } else {\n return (obj: any, vars: VariableMap) => {\n const val = resolveValue(obj, left)\n return val === undefined\n }\n }\n }\n default: {\n throw new Error('Unexpected')\n }\n }\n })\n .led('IN', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n return (obj: any, vars: object) => {\n let symbols = expr\n if (!Array.isArray(symbols)) {\n symbols = [expr]\n }\n\n const inValues = symbols.map((item: Symbol) =>\n resolveSymbol(item, vars)\n )\n return inValues.includes(resolveValue(obj, left))\n }\n })\n .led('MATCHES_IGNORE_CASE', 20, ({ left, bp }) => {\n const expr = parser.parse({ terminals: [bp - 1] })\n validateSymbol(expr)\n\n return (obj: any, vars: VariableMap) => {\n const value = resolveValue(obj, left)\n const other = resolveSymbol(expr, vars)\n\n if (typeof value != 'string') {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n return value.toLowerCase() === other.toLowerCase()\n }\n })\n .led('WITHIN', 20, ({ left, bp }) => {\n const type = lexer.next()\n\n if (type.match !== 'circle') {\n throw new PredicateError(\n `Invalid input '${type.match}', expected circle`\n )\n }\n\n lexer.expect('(')\n const expr = parser.parse({ terminals: [')'] })\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n if (!value) return false\n\n const maxDistance = resolveSymbol(expr[2], vars)\n const distance = haversineDistance(\n {\n longitude: value[0],\n latitude: value[1],\n },\n {\n longitude: resolveSymbol(expr[0], vars),\n latitude: resolveSymbol(expr[1], vars),\n }\n )\n return distance <= maxDistance\n }\n })\n .led('CONTAINS', 20, ({ left, bp }) => {\n const keyword = lexer.next()\n\n let expr = parser.parse()\n if (!Array.isArray(expr)) {\n expr = [expr]\n }\n\n return (obj: any, vars: object) => {\n const value = resolveValue(obj, left)\n\n if (!Array.isArray(value)) {\n throw new PredicateError(\n `The field '${left.value}' does not support this expression.`\n )\n }\n\n const array = expr.map((item: Symbol) => resolveSymbol(item, vars))\n if (keyword.type === 'ALL') {\n return array.every((item: any) => value.includes(item))\n } else {\n return array.some((item: any) => value.includes(item))\n }\n }\n })\n\n .build()\n\n const result = parser.parse()\n\n if (typeof result !== 'function') {\n const lines = predicate.split('\\n')\n const column = lines[lines.length - 1].length\n\n throw new PredicateError(\n `Unexpected end of input, expected SphereIdentifierChar, comparison ` +\n `operator, not, in, contains, is, within or matches` +\n ` (line ${lines.length}, column ${column})`\n )\n }\n return result\n}\n","export abstract class BaseError {\n abstract message: string\n}\n\nexport class CommercetoolsError<T extends BaseError> extends Error {\n info: T\n statusCode: number\n\n constructor(info: T, statusCode = 400) {\n super(info.message)\n this.info = info\n this.statusCode = statusCode || 500\n }\n}\n\nexport interface InvalidRequestError {\n readonly code: 'invalid_request'\n readonly message: string\n}\n","import assert from 'assert'\nimport {\n BaseResource,\n Cart,\n Category,\n Customer,\n CustomObject,\n InventoryEntry,\n Order,\n PagedQueryResponse,\n QueryParam,\n Reference,\n ResourceIdentifier,\n Product,\n Store,\n Type,\n Payment,\n Project,\n State,\n TaxCategory,\n ShippingMethod,\n ProductType,\n InvalidInputError,\n ProductProjection,\n ShoppingList,\n Extension,\n CartDiscount,\n CustomerGroup,\n DiscountCode,\n Zone,\n Channel,\n Subscription,\n} from '@commercetools/platform-sdk'\nimport { parseExpandClause } from './lib/expandParser'\nimport { RepositoryTypes, ResourceMap, Writable } from './types'\nimport { parseQueryExpression } from './lib/predicateParser'\nimport { CommercetoolsError } from './exceptions'\n\ntype GetParams = {\n expand?: string[]\n}\n\ntype QueryParams = {\n expand?: string | string[]\n sort?: string | string[]\n limit?: number\n offset?: number\n withTotal?: boolean\n where?: string | string[]\n [key: string]: QueryParam\n}\n\nexport abstract class AbstractStorage {\n abstract clear(): void\n\n abstract assertStorage(typeId: RepositoryTypes): void\n\n abstract all(projectKey: string, typeId: RepositoryTypes): Array<BaseResource>\n\n abstract add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes]\n ): void\n\n abstract get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams\n ): ResourceMap[RepositoryTypes] | null\n\n abstract addProject(projectKey: string): Project\n abstract getProject(projectKey: string): Project\n abstract saveProject(project: Project): Project\n\n abstract delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams\n ): BaseResource | null\n\n abstract query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse\n\n abstract getByResourceIdentifier(\n projectKey: string,\n identifier: ResourceIdentifier\n ): BaseResource | undefined\n}\n\ntype ProjectStorage = Partial<\n {\n [index in RepositoryTypes]: Map<string, BaseResource>\n }\n>\n\nexport class InMemoryStorage extends AbstractStorage {\n protected resources: {\n [projectKey: string]: ProjectStorage\n } = {}\n\n protected projects: {\n [projectKey: string]: Project\n } = {}\n\n private forProjectKey(projectKey: string) {\n this.addProject(projectKey)\n\n let projectStorage = this.resources[projectKey]\n if (!projectStorage) {\n projectStorage = this.resources[projectKey] = {\n cart: new Map<string, Cart>(),\n 'cart-discount': new Map<string, CartDiscount>(),\n category: new Map<string, Category>(),\n channel: new Map<string, Channel>(),\n customer: new Map<string, Customer>(),\n 'customer-group': new Map<string, CustomerGroup>(),\n 'discount-code': new Map<string, DiscountCode>(),\n extension: new Map<string, Extension>(),\n 'inventory-entry': new Map<string, InventoryEntry>(),\n 'key-value-document': new Map<string, CustomObject>(),\n order: new Map<string, Order>(),\n payment: new Map<string, Payment>(),\n 'product-type': new Map<string, ProductType>(),\n product: new Map<string, Product>(),\n 'product-selection': new Map<string, any>(),\n 'product-projection': new Map<string, ProductProjection>(),\n 'shipping-method': new Map<string, ShippingMethod>(),\n state: new Map<string, State>(),\n store: new Map<string, Store>(),\n 'shopping-list': new Map<string, ShoppingList>(),\n subscription: new Map<string, Subscription>(),\n 'tax-category': new Map<string, TaxCategory>(),\n type: new Map<string, Type>(),\n zone: new Map<string, Zone>(),\n }\n }\n return projectStorage\n }\n\n clear() {\n for (const [, projectStorage] of Object.entries(this.resources)) {\n for (const [, value] of Object.entries(projectStorage)) {\n value?.clear()\n }\n }\n }\n\n assertStorage(typeId: RepositoryTypes) {}\n\n all(projectKey: string, typeId: RepositoryTypes) {\n const store = this.forProjectKey(projectKey)[typeId]\n if (store) {\n return Array.from(store.values())\n }\n return []\n }\n\n add<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n obj: ResourceMap[RepositoryTypes],\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] {\n this.forProjectKey(projectKey)[typeId]?.set(obj.id, obj)\n\n const resource = this.get(projectKey, typeId, obj.id, params)\n assert(resource, `resource of type ${typeId} with id ${obj.id} not created`)\n return resource\n }\n\n get<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const resource = this.forProjectKey(projectKey)[typeId]?.get(id)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n getByKey<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n typeId: RepositoryTypes,\n key: string,\n params: GetParams = {}\n ): ResourceMap[RepositoryTypes] | null {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n const resources: any[] = Array.from(store.values())\n const resource = resources.find(e => e.key === key)\n if (resource) {\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return null\n }\n\n delete(\n projectKey: string,\n typeId: RepositoryTypes,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n const resource = this.get(projectKey, typeId, id)\n\n if (resource) {\n this.forProjectKey(projectKey)[typeId]?.delete(id)\n return this.expand(\n projectKey,\n resource,\n params.expand\n ) as ResourceMap[RepositoryTypes]\n }\n return resource\n }\n\n query(\n projectKey: string,\n typeId: RepositoryTypes,\n params: QueryParams\n ): PagedQueryResponse {\n const store = this.forProjectKey(projectKey)[typeId]\n if (!store) {\n throw new Error('No type')\n }\n\n let resources = Array.from(store.values())\n\n // Apply predicates\n if (params.where) {\n try {\n const filterFunc = parseQueryExpression(params.where)\n resources = resources.filter(resource => filterFunc(resource, {}))\n } catch (err) {\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message: (err as any).message,\n },\n 400\n )\n }\n }\n\n // Get the total before slicing the array\n const totalResources = resources.length\n\n // Apply offset, limit\n const offset = params.offset || 0\n const limit = params.limit || 20\n resources = resources.slice(offset, offset + limit)\n\n // Expand the resources\n if (params.expand !== undefined) {\n resources = resources.map(resource => {\n return this.expand(projectKey, resource, params.expand)\n })\n }\n\n return {\n count: totalResources,\n total: resources.length,\n offset: offset,\n limit: limit,\n results: resources,\n }\n }\n\n getByResourceIdentifier<RepositoryTypes extends keyof ResourceMap>(\n projectKey: string,\n identifier: ResourceIdentifier\n ): ResourceMap[RepositoryTypes] | undefined {\n if (identifier.id) {\n const resource = this.get(projectKey, identifier.typeId, identifier.id)\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n console.error(\n `No resource found with typeId=${identifier.typeId}, id=${identifier.id}`\n )\n return undefined\n }\n\n if (identifier.key) {\n const store = this.forProjectKey(projectKey)[identifier.typeId]\n\n if (store) {\n // TODO: BaseResource has no key attribute, but the subclasses should\n // have them all.\n const resource = Array.from(store.values()).find(\n // @ts-ignore\n r => r.key === identifier.key\n )\n if (resource) {\n return resource as ResourceMap[RepositoryTypes]\n }\n } else {\n throw new Error(\n `No storage found for resource type: ${identifier.typeId}`\n )\n }\n }\n return undefined\n }\n\n addProject = (projectKey: string): Project => {\n if (!this.projects[projectKey]) {\n this.projects[projectKey] = {\n key: projectKey,\n name: '',\n countries: [],\n currencies: [],\n languages: [],\n createdAt: '2018-10-04T11:32:12.603Z',\n trialUntil: '2018-12',\n carts: {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n },\n messages: { enabled: false, deleteDaysAfterCreation: 15 },\n shippingRateInputType: undefined,\n externalOAuth: undefined,\n searchIndexing: {\n products: {\n status: 'Deactivated',\n },\n orders: {\n status: 'Deactivated',\n },\n },\n version: 1,\n }\n }\n return this.projects[projectKey]\n }\n\n saveProject = (project: Project): Project => {\n this.projects[project.key] = project\n return project\n }\n\n getProject = (projectKey: string): Project => {\n return this.addProject(projectKey)\n }\n\n private expand = <T>(\n projectKey: string,\n obj: T,\n clause: undefined | string | string[]\n ): T => {\n if (!clause) return obj\n const newObj = JSON.parse(JSON.stringify(obj))\n if (Array.isArray(clause)) {\n clause.forEach(c => {\n this._resolveResource(projectKey, newObj, c)\n })\n } else {\n this._resolveResource(projectKey, newObj, clause)\n }\n return newObj\n }\n\n private _resolveResource = (projectKey: string, obj: any, expand: string) => {\n const params = parseExpandClause(expand)\n\n if (!params.index) {\n const reference = obj[params.element]\n if (reference === undefined) {\n return\n }\n this._resolveReference(projectKey, reference, params.rest)\n } else if (params.index === '*') {\n const reference = obj[params.element]\n if (reference === undefined || !Array.isArray(reference)) return\n reference.forEach((itemRef: Writable<Reference>) => {\n this._resolveReference(projectKey, itemRef, params.rest)\n })\n } else {\n const reference = obj[params.element][params.index]\n if (reference === undefined) return\n this._resolveReference(projectKey, reference, params.rest)\n }\n }\n\n private _resolveReference(\n projectKey: string,\n reference: any,\n expand: string | undefined\n ) {\n if (reference === undefined) return\n\n if (\n reference.typeId !== undefined &&\n (reference.id !== undefined || reference.key !== undefined)\n ) {\n // @ts-ignore\n reference.obj = this.getByResourceIdentifier(projectKey, {\n typeId: reference.typeId,\n id: reference.id,\n key: reference.key,\n } as ResourceIdentifier)\n if (expand) {\n this._resolveResource(projectKey, reference.obj, expand)\n }\n } else {\n if (expand) {\n this._resolveResource(projectKey, reference, expand)\n }\n }\n }\n}\n","import { randomBytes } from 'crypto'\n\ntype Token = {\n access_token: string\n token_type: 'Bearer'\n expires_in: number\n scope: string\n}\n\nexport class OAuth2Store {\n tokens: Token[] = []\n validate: Boolean = true\n\n constructor(validate: Boolean = true) {\n this.validate = validate\n }\n\n getClientToken(clientId: string, clientSecret: string, scope?: string) {\n const token: Token = {\n access_token: randomBytes(16).toString('base64'),\n token_type: 'Bearer',\n expires_in: 172800,\n scope: scope || 'todo',\n }\n this.tokens.push(token)\n return token\n }\n\n validateToken(token: string) {\n if (!this.validate) return true\n\n const foundToken = this.tokens.find(t => t.access_token === token)\n if (foundToken) {\n return true\n }\n return false\n }\n}\n","import { Request } from 'express'\n\nexport const getBearerToken = (request: Request): string | undefined => {\n const authHeader = request.header('Authorization')\n const match = authHeader?.match(/^Bearer\\s(?<token>[^\\s]+)$/)\n if (match) {\n return match.groups?.token\n }\n return undefined\n}\n","import auth from 'basic-auth'\nimport bodyParser from 'body-parser'\nimport express, { NextFunction, Request, Response } from 'express'\nimport {\n AccessDeniedError,\n InvalidTokenError,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError, InvalidRequestError } from '../exceptions'\nimport { InvalidClientError, UnsupportedGrantType } from './errors'\nimport { OAuth2Store } from './store'\nimport { getBearerToken } from './helpers'\n\nexport class OAuth2Server {\n store: OAuth2Store\n\n constructor(options: { enabled: boolean; validate: boolean }) {\n this.store = new OAuth2Store(options.validate)\n }\n\n createRouter() {\n const router = express.Router()\n router.use(bodyParser.urlencoded({ extended: true }))\n router.post('/token', this.tokenHandler.bind(this))\n return router\n }\n\n createMiddleware() {\n return async (request: Request, response: Response, next: NextFunction) => {\n const token = getBearerToken(request)\n if (!token) {\n next(\n new CommercetoolsError<AccessDeniedError>(\n {\n code: 'access_denied',\n message:\n 'This endpoint requires an access token. You can get one from the authorization server.',\n },\n 401\n )\n )\n }\n\n if (!token || !this.store.validateToken(token)) {\n next(\n new CommercetoolsError<InvalidTokenError>(\n {\n code: 'invalid_token',\n message: 'invalid_token',\n },\n 401\n )\n )\n }\n\n next()\n }\n }\n async tokenHandler(request: Request, response: Response, next: NextFunction) {\n const authHeader = request.header('Authorization')\n if (!authHeader) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 401\n )\n )\n }\n const credentials = auth.parse(authHeader)\n if (!credentials) {\n return next(\n new CommercetoolsError<InvalidClientError>(\n {\n code: 'invalid_client',\n message:\n 'Please provide valid client credentials using HTTP Basic Authentication.',\n },\n 400\n )\n )\n }\n\n const grantType = request.query.grant_type || request.body.grant_type\n if (!grantType) {\n return next(\n new CommercetoolsError<InvalidRequestError>(\n {\n code: 'invalid_request',\n message: 'Missing required parameter: grant_type.',\n },\n 400\n )\n )\n }\n\n if (grantType === 'client_credentials') {\n const token = this.store.getClientToken(\n credentials.name,\n credentials.pass,\n request.query.scope?.toString()\n )\n return response.status(200).send(token)\n } else {\n return next(\n new CommercetoolsError<UnsupportedGrantType>(\n {\n code: 'unsupported_grant_type',\n message: `Invalid parameter: grant_type: Invalid grant type: ${grantType}`,\n },\n 400\n )\n )\n }\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\n\nexport const getBaseResourceProperties = () => {\n return {\n id: uuidv4(),\n createdAt: new Date().toISOString(),\n lastModifiedAt: new Date().toISOString(),\n version: 0,\n }\n}\n","import { getBaseResourceProperties } from './helpers'\nimport { AbstractStorage } from './storage'\nimport { RepositoryMap, ResourceMap, Services } from './types'\n\nexport class ProjectAPI {\n private projectKey: string\n private _storage: AbstractStorage\n private _services: Services\n\n constructor(\n projectKey: string,\n services: Services,\n storage: AbstractStorage\n ) {\n this.projectKey = projectKey\n this._storage = storage\n this._services = services\n }\n\n add<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId | 'custom-object',\n resource: ResourceMap[ReferenceTypeId]\n ) {\n //@ts-ignore\n if (typeId === 'custom-object') typeId = 'key-value-document'\n\n const parsedTypeId = typeId as ReferenceTypeId\n\n const service = this._services[parsedTypeId]\n if (service) {\n this._storage.add(this.projectKey, parsedTypeId, {\n ...getBaseResourceProperties(),\n ...resource,\n })\n } else {\n throw new Error(`Service for ${typeId} not implemented yet`)\n }\n }\n\n get<ReferenceTypeId extends keyof ResourceMap>(\n typeId: ReferenceTypeId,\n id: string\n ): ResourceMap[ReferenceTypeId] {\n return this._storage.get(\n this.projectKey,\n typeId,\n id,\n {}\n ) as ResourceMap[ReferenceTypeId]\n }\n\n // TODO: Not sure if we want to expose this...\n getRepository<ReferenceTypeId extends keyof RepositoryMap>(\n typeId: ReferenceTypeId\n ): RepositoryMap[ReferenceTypeId] {\n const service = this._services[typeId]\n if (service !== undefined) {\n return service.repository as RepositoryMap[ReferenceTypeId]\n }\n throw new Error('No such repository')\n }\n}\n","export const copyHeaders = (headers: Record<string, string>) => {\n const validHeaders = ['accept', 'host', 'authorization']\n const result: Record<string, string> = {}\n\n Object.entries(headers).forEach(([key, value]) => {\n if (validHeaders.includes(key.toLowerCase())) {\n result[key] = value\n }\n })\n\n return result\n}\n","export const DEFAULT_API_HOSTNAME = /^https:\\/\\/api\\..*?\\.commercetools.com:443$/\nexport const DEFAULT_AUTH_HOSTNAME = /^https:\\/\\/auth\\..*?\\.commercetools.com:443$/\n","import { Update } from '@commercetools/platform-sdk'\nimport { ParsedQs } from 'qs'\nimport { Request, Response, Router } from 'express'\nimport { AbstractResourceRepository } from '../repositories/abstract'\n\nexport default abstract class AbstractService {\n protected abstract getBasePath(): string\n public abstract repository: AbstractResourceRepository\n\n createStatusCode = 201\n\n constructor(parent: Router) {\n this.registerRoutes(parent)\n }\n\n extraRoutes(router: Router) {}\n\n registerRoutes(parent: Router) {\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n // Bind this first since the `/:id` routes are currently a bit to greedy\n this.extraRoutes(router)\n\n router.get('/', this.get.bind(this))\n router.get('/key=:key', this.getWithKey.bind(this)) // same thing goes for the key routes\n router.get('/:id', this.getWithId.bind(this))\n\n router.delete('/key=:key', this.deletewithKey.bind(this))\n router.delete('/:id', this.deletewithId.bind(this))\n\n router.post('/', this.post.bind(this))\n router.post('/key=:key', this.postWithKey.bind(this))\n router.post('/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n get(request: Request, response: Response) {\n const limit = this._parseParam(request.query.limit)\n const offset = this._parseParam(request.query.offset)\n\n const result = this.repository.query(request.params.projectKey, {\n expand: this._parseParam(request.query.expand),\n where: this._parseParam(request.query.where),\n limit: limit !== undefined ? Number(limit) : undefined,\n offset: offset !== undefined ? Number(offset) : undefined,\n })\n return response.status(200).send(result)\n }\n\n getWithId(request: Request, response: Response) {\n const result = this._expandWithId(request, request.params['id'])\n if (!result) {\n return response.status(404).send()\n }\n return response.status(200).send(result)\n }\n\n getWithKey(request: Request, response: Response) {\n const result = this.repository.getByKey(\n request.params.projectKey,\n request.params['key'],\n { expand: this._parseParam(request.query.expand) }\n )\n if (!result) return response.status(404).send()\n return response.status(200).send(result)\n }\n\n deletewithId(request: Request, response: Response) {\n const result = this.repository.delete(\n request.params.projectKey,\n request.params['id'],\n {\n expand: this._parseParam(request.query.expand),\n }\n )\n if (!result) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(result)\n }\n\n deletewithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n post(request: Request, response: Response) {\n const draft = request.body\n const resource = this.repository.create(request.params.projectKey, draft)\n const result = this._expandWithId(request, resource.id)\n return response.status(this.createStatusCode).send(result)\n }\n\n postWithId(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const resource = this.repository.get(\n request.params.projectKey,\n request.params['id']\n )\n if (!resource) {\n return response.status(404).send('Not found')\n }\n\n if (resource.version !== updateRequest.version) {\n return response.status(409).send('Concurrent modification')\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n resource,\n updateRequest.actions\n )\n\n const result = this._expandWithId(request, updatedResource.id)\n return response.status(200).send(result)\n }\n\n postWithKey(request: Request, response: Response) {\n return response.status(500).send('Not implemented')\n }\n\n protected _expandWithId(request: Request, resourceId: string) {\n const result = this.repository.get(request.params.projectKey, resourceId, {\n expand: this._parseParam(request.query.expand),\n })\n return result\n }\n\n // No idea what i'm doing\n private _parseParam(\n value: string | ParsedQs | string[] | ParsedQs[] | undefined\n ): string[] | undefined {\n if (Array.isArray(value)) {\n // @ts-ignore\n return value\n } else if (value !== undefined) {\n return [`${value}`]\n }\n return undefined\n }\n}\n","import {\n BaseResource,\n ConcurrentModificationError,\n Project,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\n\nexport const checkConcurrentModification = (\n resource: BaseResource | Project,\n expectedVersion: number\n) => {\n if (resource.version === expectedVersion) return\n\n const identifier = (<BaseResource>resource).id\n ? (<BaseResource>resource).id\n : (<Project>resource).key\n\n throw new CommercetoolsError<ConcurrentModificationError>(\n {\n message: `Object ${identifier} has a different version than expected. Expected: ${expectedVersion} - Actual: ${resource.version}.`,\n currentVersion: resource.version,\n code: 'ConcurrentModification',\n },\n 409\n )\n}\n","import { RepositoryTypes } from './../types'\nimport deepEqual from 'deep-equal'\n\nimport {\n BaseResource,\n InvalidOperationError,\n Project,\n UpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\n\nexport type QueryParams = {\n expand?: string[]\n where?: string[]\n offset?: number\n limit?: number\n}\n\nexport type GetParams = {\n expand?: string[]\n}\n\nexport abstract class AbstractRepository {\n protected _storage: AbstractStorage\n protected actions: Partial<\n Record<any, (projectKey: string, resource: any, action: any) => void>\n > = {}\n\n constructor(storage: AbstractStorage) {\n this._storage = storage\n }\n\n abstract save(projectKey: string, resource: BaseResource | Project): void\n\n processUpdateActions(\n projectKey: string,\n resource: BaseResource | Project,\n actions: UpdateAction[]\n ): BaseResource {\n // Deep-copy\n const modifiedResource = JSON.parse(JSON.stringify(resource))\n\n actions.forEach(action => {\n const updateFunc = this.actions[action.action]\n if (!updateFunc) {\n console.error(`No mock implemented for update action ${action.action}`)\n return\n }\n updateFunc(projectKey, modifiedResource, action)\n })\n\n if (!deepEqual(modifiedResource, resource)) {\n this.save(projectKey, modifiedResource)\n }\n return modifiedResource\n }\n}\n\nexport abstract class AbstractResourceRepository extends AbstractRepository {\n abstract create(projectKey: string, draft: any): BaseResource\n abstract getTypeId(): RepositoryTypes\n\n constructor(storage: AbstractStorage) {\n super(storage)\n this._storage.assertStorage(this.getTypeId())\n }\n\n query(projectKey: string, params: QueryParams = {}) {\n return this._storage.query(projectKey, this.getTypeId(), {\n expand: params.expand,\n where: params.where,\n offset: params.offset,\n limit: params.limit,\n })\n }\n\n get(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.get(projectKey, this.getTypeId(), id, params)\n }\n\n getByKey(\n projectKey: string,\n key: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.getByKey(projectKey, this.getTypeId(), key, params)\n }\n\n delete(\n projectKey: string,\n id: string,\n params: GetParams = {}\n ): BaseResource | null {\n return this._storage.delete(projectKey, this.getTypeId(), id, params)\n }\n\n save(projectKey: string, resource: BaseResource) {\n const current = this.get(projectKey, resource.id)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.add(projectKey, this.getTypeId(), resource as any)\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n CustomFields,\n CustomFieldsDraft,\n Money,\n Price,\n PriceDraft,\n Reference,\n ResourceIdentifier,\n Store,\n StoreKeyReference,\n StoreResourceIdentifier,\n Type,\n TypedMoney,\n} from '@commercetools/platform-sdk'\nimport { AbstractStorage } from '../storage'\n\nexport const createCustomFields = (\n draft: CustomFieldsDraft | undefined,\n projectKey: string,\n storage: AbstractStorage\n): CustomFields | undefined => {\n if (!draft) return undefined\n if (!draft.type) return undefined\n if (!draft.type.typeId) return undefined\n if (!draft.fields) return undefined\n\n const typeResource = storage.getByResourceIdentifier(\n projectKey,\n draft.type\n ) as Type\n\n if (!typeResource) {\n throw new Error(\n `No type '${draft.type.typeId}' with id=${draft.type.id} or key=${draft.type.key}`\n )\n }\n\n return {\n type: {\n typeId: draft.type.typeId,\n id: typeResource.id,\n },\n fields: draft.fields,\n }\n}\n\nexport const createPrice = (draft: PriceDraft): Price => {\n return {\n id: uuidv4(),\n value: createTypedMoney(draft.value),\n }\n}\n\nexport const createTypedMoney = (value: Money): TypedMoney => {\n return {\n type: 'centPrecision',\n fractionDigits: 2,\n ...value,\n }\n}\n\nexport const resolveStoreReference = (\n ref: StoreResourceIdentifier | undefined,\n projectKey: string,\n storage: AbstractStorage\n): StoreKeyReference | undefined => {\n if (!ref) return undefined\n const resource = storage.getByResourceIdentifier(projectKey, ref)\n if (!resource) {\n throw new Error('No such store')\n }\n\n const store = resource as Store\n return {\n typeId: 'store',\n key: store.key,\n }\n}\n\nexport const getReferenceFromResourceIdentifier = <T extends Reference>(\n resourceIdentifier: ResourceIdentifier,\n projectKey: string,\n storage: AbstractStorage\n): T => {\n const resource = storage.getByResourceIdentifier(\n projectKey,\n resourceIdentifier\n )\n if (!resource)\n throw new Error(\n `resource type ${resourceIdentifier.typeId} with id ${resourceIdentifier.id} and key ${resourceIdentifier.key} not found`\n )\n\n return ({\n typeId: resourceIdentifier.typeId,\n id: resource?.id,\n } as unknown) as T\n}\n","import {\n CartDiscount,\n CartDiscountChangeIsActiveAction,\n CartDiscountChangeSortOrderAction,\n CartDiscountDraft,\n CartDiscountSetDescriptionAction,\n CartDiscountSetKeyAction,\n CartDiscountSetValidFromAction,\n CartDiscountSetValidFromAndUntilAction,\n CartDiscountSetValidUntilAction,\n CartDiscountUpdateAction,\n CartDiscountValueAbsolute,\n CartDiscountValueDraft,\n CartDiscountValueFixed,\n CartDiscountValueGiftLineItem,\n CartDiscountValueRelative,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createTypedMoney } from './helpers'\n\nexport class CartDiscountRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: CartDiscountDraft): CartDiscount {\n const resource: CartDiscount = {\n ...getBaseResourceProperties(),\n key: draft.key,\n description: draft.description,\n cartPredicate: draft.cartPredicate,\n isActive: draft.isActive || false,\n name: draft.name,\n references: [],\n target: draft.target,\n requiresDiscountCode: draft.requiresDiscountCode || false,\n sortOrder: draft.sortOrder,\n stackingMode: draft.stackingMode || 'Stacking',\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n value: this.transformValueDraft(draft.value),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformValueDraft(value: CartDiscountValueDraft) {\n switch (value.type) {\n case 'absolute': {\n return {\n type: 'absolute',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueAbsolute\n }\n case 'fixed': {\n return {\n type: 'fixed',\n money: value.money.map(createTypedMoney),\n } as CartDiscountValueFixed\n }\n case 'giftLineItem': {\n return {\n ...value,\n } as CartDiscountValueGiftLineItem\n }\n case 'relative': {\n return {\n ...value,\n } as CartDiscountValueRelative\n }\n }\n\n return value\n }\n\n actions: Partial<\n Record<\n CartDiscountUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<CartDiscount>,\n action: any\n ) => void\n >\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { key }: CartDiscountSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { description }: CartDiscountSetDescriptionAction\n ) => {\n resource.description = description\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom }: CartDiscountSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validUntil }: CartDiscountSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { validFrom, validUntil }: CartDiscountSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n changeSortOrder: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { sortOrder }: CartDiscountChangeSortOrderAction\n ) => {\n resource.sortOrder = sortOrder\n },\n changeIsActive: (\n projectKey: string,\n resource: Writable<CartDiscount>,\n { isActive }: CartDiscountChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { CartDiscountRepository } from '../repositories/cart-discount'\n\nexport class CartDiscountService extends AbstractService {\n public repository: CartDiscountRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartDiscountRepository(storage)\n }\n\n getBasePath() {\n return 'cart-discounts'\n }\n}\n","import {\n Cart,\n CartAddLineItemAction,\n CartDraft,\n CartRemoveLineItemAction,\n CartSetBillingAddressAction,\n CartSetCountryAction,\n CartSetCustomerEmailAction,\n CartSetCustomFieldAction,\n CartSetCustomTypeAction,\n CartSetLocaleAction,\n CartSetShippingAddressAction,\n GeneralError,\n LineItem,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { v4 as uuidv4 } from 'uuid'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class CartRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart'\n }\n\n create(projectKey: string, draft: CartDraft): Cart {\n const resource: Cart = {\n ...getBaseResourceProperties(),\n cartState: 'Active',\n lineItems: [],\n customLineItems: [],\n totalPrice: {\n type: 'centPrecision',\n centAmount: 0,\n currencyCode: draft.currency,\n fractionDigits: 0,\n },\n taxMode: 'Platform',\n taxRoundingMode: 'HalfEven',\n taxCalculationMode: 'LineItemLevel',\n refusedGifts: [],\n origin: 'Customer',\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n getActiveCart(projectKey: string): Cart | undefined {\n // Get first active cart\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: [`cartState=\"Active\"`],\n })\n if (results.count > 0) {\n return results.results[0] as Cart\n }\n\n return\n }\n\n actions = {\n addLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { productId, variantId, sku, quantity = 1 }: CartAddLineItemAction\n ) => {\n let product: Product | null = null\n let variant: ProductVariant | undefined\n\n if (productId && variantId) {\n // Fetch product and variant by ID\n product = this._storage.get(projectKey, 'product', productId, {})\n } else if (sku) {\n // Fetch product and variant by SKU\n const items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${sku}\"))) or masterData(current(variants(sku=\"${sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count === 1) {\n product = items.results[0]\n }\n }\n\n if (!product) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A product containing a variant with SKU '${sku}' not found.`\n : `A product with ID '${productId}' not found.`,\n })\n }\n\n // Find matching variant\n variant = [\n product.masterData.current.masterVariant,\n ...product.masterData.current.variants,\n ].find(x => {\n if (sku) return x.sku === sku\n if (variantId) return x.id === variantId\n return false\n })\n\n if (!variant) {\n // Check if variant is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: sku\n ? `A variant with SKU '${sku}' for product '${product.id}' not found.`\n : `A variant with ID '${variantId}' for product '${product.id}' not found.`,\n })\n }\n\n const alreadyAdded = resource.lineItems.some(\n x => x.productId === product?.id && x.variant.id === variant?.id\n )\n if (alreadyAdded) {\n // increase quantity and update total price\n resource.lineItems.map(x => {\n if (x.productId === product?.id && x.variant.id === variant?.id) {\n x.quantity += quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n } else {\n // add line item\n if (!variant.prices?.length) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product with ID '${productId}' doesn't have any prices.`,\n })\n }\n\n const price = variant.prices[0]\n resource.lineItems.push({\n id: uuidv4(),\n productId: product.id,\n productKey: product.key,\n name: product.masterData.current.name,\n productSlug: product.masterData.current.slug,\n productType: product.productType,\n variant,\n price: price,\n totalPrice: {\n ...price.value,\n centAmount: price.value.centAmount * quantity,\n },\n quantity,\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n priceMode: 'Platform',\n state: [],\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n removeLineItem: (\n projectKey: string,\n resource: Writable<Cart>,\n { lineItemId, quantity }: CartRemoveLineItemAction\n ) => {\n const lineItem = resource.lineItems.find(x => x.id === lineItemId)\n if (!lineItem) {\n // Check if product is found\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A line item with ID '${lineItemId}' not found.`,\n })\n }\n\n const shouldDelete = !quantity || quantity >= lineItem.quantity\n if (shouldDelete) {\n // delete line item\n resource.lineItems = resource.lineItems.filter(x => x.id !== lineItemId)\n } else {\n // decrease quantity and update total price\n resource.lineItems.map(x => {\n if (x.id === lineItemId && quantity) {\n x.quantity -= quantity\n x.totalPrice.centAmount = calculateLineItemTotalPrice(x)\n }\n return x\n })\n }\n\n // Update cart total price\n resource.totalPrice.centAmount = calculateCartTotalPrice(resource)\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCountry: (\n projectKey: string,\n resource: Writable<Cart>,\n { country }: CartSetCountryAction\n ) => {\n resource.country = country\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Cart>,\n { email }: CartSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Cart,\n { name, value }: CartSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Cart>,\n { type, fields }: CartSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Cart>,\n { locale }: CartSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Cart>,\n { address }: CartSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n }\n}\n\nconst calculateLineItemTotalPrice = (lineItem: LineItem): number =>\n lineItem.price!.value.centAmount * lineItem.quantity\n\nconst calculateCartTotalPrice = (cart: Cart): number =>\n cart.lineItems.reduce((cur, item) => cur + item.totalPrice.centAmount, 0)\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CartRepository } from '../repositories/cart'\nimport { AbstractStorage } from '../storage'\n\nexport class CartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'carts'\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport {\n Category,\n CategoryChangeAssetNameAction,\n CategoryChangeSlugAction,\n CategoryDraft,\n CategorySetAssetDescriptionAction,\n CategorySetAssetSourcesAction,\n CategorySetDescriptionAction,\n CategorySetKeyAction,\n CategorySetMetaDescriptionAction,\n CategorySetMetaKeywordsAction,\n CategorySetMetaTitleAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { createCustomFields } from './helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'category'\n }\n\n create(projectKey: string, draft: CategoryDraft): Category {\n const resource: Category = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n slug: draft.slug,\n orderHint: draft.orderHint || '',\n externalId: draft.externalId || '',\n parent: draft.parent\n ? { typeId: 'category', id: draft.parent.id! }\n : undefined,\n ancestors: [], // TODO\n assets:\n draft.assets?.map(d => {\n return {\n id: uuidv4(),\n name: d.name,\n description: d.description,\n sources: d.sources,\n tags: d.tags,\n key: d.key,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n }) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeAssetName: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, name }: CategoryChangeAssetNameAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.name = name\n }\n if (assetKey && assetKey == asset.key) {\n asset.name = name\n }\n })\n },\n changeSlug: (\n projectKey: string,\n resource: Writable<Category>,\n { slug }: CategoryChangeSlugAction\n ) => {\n resource.slug = slug\n },\n setKey: (\n projectKey: string,\n resource: Writable<Category>,\n { key }: CategorySetKeyAction\n ) => {\n resource.key = key\n },\n setAssetDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, description }: CategorySetAssetDescriptionAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.description = description\n }\n if (assetKey && assetKey == asset.key) {\n asset.description = description\n }\n })\n },\n setAssetSources: (\n projectKey: string,\n resource: Writable<Category>,\n { assetId, assetKey, sources }: CategorySetAssetSourcesAction\n ) => {\n resource.assets?.forEach(asset => {\n if (assetId && assetId == asset.id) {\n asset.sources = sources\n }\n if (assetKey && assetKey == asset.key) {\n asset.sources = sources\n }\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { description }: CategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setMetaDescription: (\n projectKey: string,\n resource: Writable<Category>,\n { metaDescription }: CategorySetMetaDescriptionAction\n ) => {\n resource.metaDescription = metaDescription\n },\n setMetaKeywords: (\n projectKey: string,\n resource: Writable<Category>,\n { metaKeywords }: CategorySetMetaKeywordsAction\n ) => {\n resource.metaKeywords = metaKeywords\n },\n setMetaTitle: (\n projectKey: string,\n resource: Writable<Category>,\n { metaTitle }: CategorySetMetaTitleAction\n ) => {\n resource.metaTitle = metaTitle\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CategoryRepository } from '../repositories/category'\n\nexport class CategoryServices extends AbstractService {\n public repository: CategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CategoryRepository(storage)\n }\n\n getBasePath() {\n return 'categories'\n }\n}\n","import {\n Channel,\n ChannelDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ChannelRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'channel'\n }\n\n create(projectKey: string, draft: ChannelDraft): Channel {\n const resource: Channel = {\n ...getBaseResourceProperties(),\n key: draft.key,\n roles: draft.roles || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { ChannelRepository } from '../repositories/channel'\nimport { AbstractStorage } from '../storage'\n\nexport class ChannelService extends AbstractService {\n public repository: ChannelRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ChannelRepository(storage)\n }\n\n getBasePath() {\n return 'channels'\n }\n}\n","import {\n CustomerGroup,\n CustomerGroupChangeNameAction,\n CustomerGroupDraft,\n CustomerGroupSetKeyAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerGroupRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerGroupDraft): CustomerGroup {\n const resource: CustomerGroup = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.groupName,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n setKey: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { key }: CustomerGroupSetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<CustomerGroup>,\n { name }: CustomerGroupChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerGroupRepository } from '../repositories/customer-group'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerGroupService extends AbstractService {\n public repository: CustomerGroupRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerGroupRepository(storage)\n }\n\n getBasePath() {\n return 'customer-groups'\n }\n}\n","import {\n Customer,\n CustomerDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class CustomerRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'customer'\n }\n create(projectKey: string, draft: CustomerDraft): Customer {\n const resource: Customer = {\n ...getBaseResourceProperties(),\n email: draft.email,\n password: Buffer.from(draft.password).toString('base64'),\n isEmailVerified: draft.isEmailVerified || false,\n addresses: [],\n }\n this.save(projectKey, resource)\n return resource\n }\n getMe(projectKey: string): Customer | undefined {\n const results = this._storage.query(projectKey, this.getTypeId(), {}) // grab the first customer you can find\n if (results.count > 0) {\n return results.results[0] as Customer\n }\n\n return\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { CustomerRepository } from '../repositories/customer'\nimport { AbstractStorage } from '../storage'\n\nexport class CustomerService extends AbstractService {\n public repository: CustomerRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerRepository(storage)\n }\n\n getBasePath() {\n return 'customers'\n }\n}\n","import {\n CustomObject,\n CustomObjectDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { checkConcurrentModification } from './errors'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\n\nexport class CustomObjectRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'key-value-document'\n }\n\n create(projectKey: string, draft: Writable<CustomObjectDraft>): CustomObject {\n const current = this.getWithContainerAndKey(\n projectKey,\n draft.container,\n draft.key\n )\n\n const baseProperties = getBaseResourceProperties()\n if (current) {\n baseProperties.id = current.id\n\n if (!draft.version) {\n draft.version = current.version\n }\n\n checkConcurrentModification(current, draft.version)\n if (draft.value === current.value) {\n return current\n }\n\n baseProperties.version = current.version\n } else {\n if (draft.version) {\n baseProperties.version = draft.version\n }\n }\n\n const resource: CustomObject = {\n ...baseProperties,\n container: draft.container,\n key: draft.key,\n value: draft.value,\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n getWithContainerAndKey(projectKey: string, container: string, key: string) {\n const items = this._storage.all(projectKey, this.getTypeId()) as Array<\n CustomObject\n >\n return items.find(item => item.container === container && item.key === key)\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { CustomObjectRepository } from '../repositories/custom-object'\nimport { AbstractStorage } from '../storage'\nimport { CustomObjectDraft } from '@commercetools/platform-sdk'\n\nexport class CustomObjectService extends AbstractService {\n public repository: CustomObjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomObjectRepository(storage)\n }\n\n getBasePath() {\n return 'custom-objects'\n }\n\n extraRoutes(router: Router) {\n router.get('/:container/:key', this.getWithContainerAndKey.bind(this))\n router.post('/:container/:key', this.createWithContainerAndKey.bind(this))\n router.delete('/:container/:key', this.deleteWithContainerAndKey.bind(this))\n }\n\n getWithContainerAndKey(request: Request, response: Response) {\n const result = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!result) {\n return response.status(404).send('Not Found')\n }\n return response.status(200).send(result)\n }\n\n createWithContainerAndKey(request: Request, response: Response) {\n const draft: CustomObjectDraft = {\n ...request.body,\n key: request.params.key,\n container: request.params.container,\n }\n\n const result = this.repository.create(request.params.projectKey, draft)\n return response.status(200).send(result)\n }\n\n deleteWithContainerAndKey(request: Request, response: Response) {\n const current = this.repository.getWithContainerAndKey(\n request.params.projectKey,\n request.params.container,\n request.params.key\n )\n\n if (!current) {\n return response.status(404).send('Not Found')\n }\n\n const result = this.repository.delete(request.params.projectKey, current.id)\n\n return response.status(200).send(result)\n }\n}\n","import {\n CartDiscountReference,\n DiscountCode,\n DiscountCodeChangeCartDiscountsAction,\n DiscountCodeChangeIsActiveAction,\n DiscountCodeDraft,\n DiscountCodeSetCartPredicateAction,\n DiscountCodeSetDescriptionAction,\n DiscountCodeSetMaxApplicationsAction,\n DiscountCodeSetMaxApplicationsPerCustomerAction,\n DiscountCodeSetNameAction,\n DiscountCodeSetValidFromAction,\n DiscountCodeSetValidFromAndUntilAction,\n DiscountCodeSetValidUntilAction,\n DiscountCodeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class DiscountCodeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'cart-discount'\n }\n\n create(projectKey: string, draft: DiscountCodeDraft): DiscountCode {\n const resource: DiscountCode = {\n ...getBaseResourceProperties(),\n applicationVersion: 1,\n cartDiscounts: draft.cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n ),\n cartPredicate: draft.cartPredicate,\n code: draft.code,\n description: draft.description,\n groups: draft.groups || [],\n isActive: draft.isActive || true,\n name: draft.name,\n references: [],\n validFrom: draft.validFrom,\n validUntil: draft.validUntil,\n maxApplications: draft.maxApplications,\n maxApplicationsPerCustomer: draft.maxApplicationsPerCustomer,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n DiscountCodeUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<DiscountCode>,\n action: any\n ) => void\n >\n > = {\n changeIsActive: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { isActive }: DiscountCodeChangeIsActiveAction\n ) => {\n resource.isActive = isActive\n },\n changeCartDiscounts: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartDiscounts }: DiscountCodeChangeCartDiscountsAction\n ) => {\n resource.cartDiscounts = cartDiscounts.map(\n (obj): CartDiscountReference => ({\n typeId: 'cart-discount',\n id: obj.id!,\n })\n )\n },\n setDescription: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { description }: DiscountCodeSetDescriptionAction\n ) => {\n resource.description = description\n },\n setCartPredicate: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { cartPredicate }: DiscountCodeSetCartPredicateAction\n ) => {\n resource.cartPredicate = cartPredicate\n },\n setName: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { name }: DiscountCodeSetNameAction\n ) => {\n resource.name = name\n },\n setMaxApplications: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { maxApplications }: DiscountCodeSetMaxApplicationsAction\n ) => {\n resource.maxApplications = maxApplications\n },\n setMaxApplicationsPerCustomer: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n {\n maxApplicationsPerCustomer,\n }: DiscountCodeSetMaxApplicationsPerCustomerAction\n ) => {\n resource.maxApplicationsPerCustomer = maxApplicationsPerCustomer\n },\n setValidFrom: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom }: DiscountCodeSetValidFromAction\n ) => {\n resource.validFrom = validFrom\n },\n setValidUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validUntil }: DiscountCodeSetValidUntilAction\n ) => {\n resource.validUntil = validUntil\n },\n setValidFromAndUntil: (\n projectKey: string,\n resource: Writable<DiscountCode>,\n { validFrom, validUntil }: DiscountCodeSetValidFromAndUntilAction\n ) => {\n resource.validFrom = validFrom\n resource.validUntil = validUntil\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { DiscountCodeRepository } from '../repositories/discount-code'\n\nexport class DiscountCodeService extends AbstractService {\n public repository: DiscountCodeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new DiscountCodeRepository(storage)\n }\n\n getBasePath() {\n return 'discount-codes'\n }\n}\n","import {\n Extension,\n ExtensionChangeDestinationAction,\n ExtensionChangeTriggersAction,\n ExtensionDraft,\n ExtensionSetKeyAction,\n ExtensionSetTimeoutInMsAction,\n ExtensionUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ExtensionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'extension'\n }\n\n create(projectKey: string, draft: ExtensionDraft): Extension {\n const resource: Extension = {\n ...getBaseResourceProperties(),\n key: draft.key,\n timeoutInMs: draft.timeoutInMs,\n destination: draft.destination,\n triggers: draft.triggers,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Record<\n ExtensionUpdateAction['action'],\n (projectKey: string, resource: Writable<Extension>, action: any) => void\n > = {\n setKey: (\n projectKey: string,\n resource: Writable<Extension>,\n { key }: ExtensionSetKeyAction\n ) => {\n resource.key = key\n },\n setTimeoutInMs: (\n projectKey: string,\n resource: Writable<Extension>,\n { timeoutInMs }: ExtensionSetTimeoutInMsAction\n ) => {\n resource.timeoutInMs = timeoutInMs\n },\n changeTriggers: (\n projectKey: string,\n resource: Writable<Extension>,\n { triggers }: ExtensionChangeTriggersAction\n ) => {\n resource.triggers = triggers\n },\n changeDestination: (\n projectKey: string,\n resource: Writable<Extension>,\n { destination }: ExtensionChangeDestinationAction\n ) => {\n resource.destination = destination\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ExtensionRepository } from '../repositories/extension'\n\nexport class ExtensionServices extends AbstractService {\n public repository: ExtensionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ExtensionRepository(storage)\n }\n\n getBasePath() {\n return 'extensions'\n }\n}\n","import {\n InventoryEntry,\n InventoryEntryChangeQuantityAction,\n InventoryEntryDraft,\n InventoryEntrySetCustomFieldAction,\n InventoryEntrySetCustomTypeAction,\n InventoryEntrySetExpectedDeliveryAction,\n InventoryEntrySetRestockableInDaysAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { createCustomFields } from './helpers'\nimport { Writable } from '../types'\n\nexport class InventoryEntryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'inventory-entry'\n }\n\n create(projectKey: string, draft: InventoryEntryDraft): InventoryEntry {\n const resource: InventoryEntry = {\n ...getBaseResourceProperties(),\n sku: draft.sku,\n quantityOnStock: draft.quantityOnStock,\n availableQuantity: draft.quantityOnStock,\n expectedDelivery: draft.expectedDelivery,\n restockableInDays: draft.restockableInDays,\n supplyChannel: {\n ...draft.supplyChannel,\n typeId: 'channel',\n id: draft.supplyChannel?.id ?? '',\n },\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions = {\n changeQuantity: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { quantity }: InventoryEntryChangeQuantityAction\n ) => {\n resource.quantityOnStock = quantity\n // don't know active reservations so just set to same value\n resource.availableQuantity = quantity\n },\n setExpectedDelivery: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { expectedDelivery }: InventoryEntrySetExpectedDeliveryAction\n ) => {\n resource.expectedDelivery = new Date(expectedDelivery!).toISOString()\n },\n setCustomField: (\n projectKey: string,\n resource: InventoryEntry,\n { name, value }: InventoryEntrySetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { type, fields }: InventoryEntrySetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setRestockableInDays: (\n projectKey: string,\n resource: Writable<InventoryEntry>,\n { restockableInDays }: InventoryEntrySetRestockableInDaysAction\n ) => {\n resource.restockableInDays = restockableInDays\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { InventoryEntryRepository } from '../repositories/inventory-entry'\n\nexport class InventoryEntryService extends AbstractService {\n public repository: InventoryEntryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new InventoryEntryRepository(storage)\n }\n\n getBasePath() {\n return 'inventory'\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CartRepository } from '../repositories/cart'\n\nexport class MyCartService extends AbstractService {\n public repository: CartRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CartRepository(storage)\n }\n\n getBasePath() {\n return 'me'\n }\n\n registerRoutes(parent: Router) {\n // Overwrite this function to be able to handle /me/active-cart path.\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n this.extraRoutes(router)\n\n router.get('/active-cart', this.activeCart.bind(this))\n router.get('/carts/', this.get.bind(this))\n router.get('/carts/:id', this.getWithId.bind(this))\n\n router.delete('/carts/:id', this.deletewithId.bind(this))\n\n router.post('/carts/', this.post.bind(this))\n router.post('/carts/:id', this.postWithId.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n activeCart(request: Request, response: Response) {\n const resource = this.repository.getActiveCart(request.params.projectKey)\n if (!resource) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(resource)\n }\n}\n","import {\n Payment,\n PaymentAddTransactionAction,\n PaymentChangeTransactionStateAction,\n PaymentDraft,\n PaymentSetCustomFieldAction,\n PaymentSetCustomTypeAction,\n PaymentTransitionStateAction,\n ReferenceTypeId,\n State,\n StateReference,\n Transaction,\n TransactionDraft,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport { getBaseResourceProperties } from '../helpers'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from '../types'\n\nexport class PaymentRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'payment'\n }\n\n create(projectKey: string, draft: PaymentDraft): Payment {\n const resource: Payment = {\n ...getBaseResourceProperties(),\n amountPlanned: createTypedMoney(draft.amountPlanned),\n paymentMethodInfo: draft.paymentMethodInfo!,\n paymentStatus: draft.paymentStatus\n ? {\n ...draft.paymentStatus,\n state: draft.paymentStatus.state\n ? getReferenceFromResourceIdentifier<StateReference>(\n draft.paymentStatus.state,\n projectKey,\n this._storage\n )\n : undefined,\n }\n : {},\n transactions: (draft.transactions || []).map(t =>\n this.transactionFromTransactionDraft(t, projectKey)\n ),\n interfaceInteractions: (draft.interfaceInteractions || []).map(\n interaction =>\n createCustomFields(interaction, projectKey, this._storage)!\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n transactionFromTransactionDraft = (\n draft: TransactionDraft,\n projectKey: string\n ) => ({\n ...draft,\n id: uuidv4(),\n amount: createTypedMoney(draft.amount),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n })\n\n actions = {\n setCustomField: (\n projectKey: string,\n resource: Payment,\n { name, value }: PaymentSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Payment>,\n { type, fields }: PaymentSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n addTransaction: (\n projectKey: string,\n resource: Writable<Payment>,\n { transaction }: PaymentAddTransactionAction\n ) => {\n resource.transactions = [\n ...resource.transactions,\n this.transactionFromTransactionDraft(transaction, projectKey),\n ]\n },\n changeTransactionState: (\n _projectKey: string,\n resource: Writable<Payment>,\n { transactionId, state }: PaymentChangeTransactionStateAction\n ) => {\n const index = resource.transactions.findIndex(\n (e: Transaction) => e.id === transactionId\n )\n const updatedTransaction: Transaction = {\n ...resource.transactions[index],\n state,\n }\n resource.transactions[index] = updatedTransaction\n },\n transitionState: (\n projectKey: string,\n resource: Writable<Payment>,\n { state }: PaymentTransitionStateAction\n ) => {\n const stateObj = this._storage.getByResourceIdentifier(\n projectKey,\n state\n ) as State | null\n\n if (!stateObj) {\n throw new Error(`State ${state} not found`)\n }\n\n resource.paymentStatus.state = {\n typeId: 'state',\n id: stateObj.id,\n obj: stateObj,\n }\n },\n // addInterfaceInteraction: () => {},\n // changeAmountPlanned: () => {},\n // changeTransactionInteractionId: () => {},\n // changeTransactionTimestamp: () => {},\n // setAmountPaid: () => {},\n // setAmountRefunded: () => {},\n // setAnonymousId: () => {},\n // setAuthorization: () => {},\n // setCustomer: () => {},\n // setExternalId: () => {},\n // setInterfaceId: () => {},\n // setKey: () => {},\n // setMethodInfoInterface: () => {},\n // setMethodInfoMethod: () => {},\n // setMethodInfoName: () => {},\n // setStatusInterfaceCode: () => {},\n // setStatusInterfaceText: () => {},\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class MyPaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'me/payments'\n }\n}\n","import assert from 'assert'\nimport {\n Cart,\n CustomLineItem,\n CustomLineItemDraft,\n GeneralError,\n LineItem,\n LineItemImportDraft,\n Order,\n OrderAddPaymentAction,\n OrderChangeOrderStateAction,\n OrderChangePaymentStateAction,\n OrderFromCartDraft,\n OrderImportDraft,\n OrderSetBillingAddressAction,\n OrderSetCustomerEmailAction,\n OrderSetCustomFieldAction,\n OrderSetCustomTypeAction,\n OrderSetLocaleAction,\n OrderSetOrderNumberAction,\n OrderSetShippingAddressAction,\n OrderSetStoreAction,\n Product,\n ProductPagedQueryResponse,\n ProductVariant,\n ReferenceTypeId,\n Store,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository, QueryParams } from './abstract'\nimport {\n createCustomFields,\n createPrice,\n createTypedMoney,\n resolveStoreReference,\n} from './helpers'\nimport { Writable } from '../types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { CommercetoolsError } from '../exceptions'\n\nexport class OrderRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'order'\n }\n\n create(projectKey: string, draft: OrderFromCartDraft): Order {\n assert(draft.cart, 'draft.cart is missing')\n\n const cart = this._storage.getByResourceIdentifier(\n projectKey,\n draft.cart\n ) as Cart | null\n if (!cart) {\n throw new Error('Cannot find cart')\n }\n\n const resource: Order = {\n ...getBaseResourceProperties(),\n orderNumber: draft.orderNumber,\n orderState: 'Open',\n lineItems: [],\n customLineItems: [],\n totalPrice: cart.totalPrice,\n refusedGifts: [],\n origin: 'Customer',\n syncInfo: [],\n lastMessageSequenceNumber: 0,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n import(projectKey: string, draft: OrderImportDraft): Order {\n // TODO: Check if order with given orderNumber already exists\n assert(this, 'OrderRepository not valid')\n const resource: Order = {\n ...getBaseResourceProperties(),\n\n billingAddress: draft.billingAddress,\n shippingAddress: draft.shippingAddress,\n\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n customerEmail: draft.customerEmail,\n lastMessageSequenceNumber: 0,\n orderNumber: draft.orderNumber,\n orderState: draft.orderState || 'Open',\n origin: draft.origin || 'Customer',\n paymentState: draft.paymentState,\n refusedGifts: [],\n store: resolveStoreReference(draft.store, projectKey, this._storage),\n syncInfo: [],\n\n lineItems:\n draft.lineItems?.map(item =>\n this.lineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n customLineItems:\n draft.customLineItems?.map(item =>\n this.customLineItemFromImportDraft.bind(this)(projectKey, item)\n ) || [],\n\n totalPrice: {\n type: 'centPrecision',\n ...draft.totalPrice,\n fractionDigits: 2,\n },\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private lineItemFromImportDraft(\n projectKey: string,\n draft: LineItemImportDraft\n ): LineItem {\n let product: Product\n let variant: ProductVariant | undefined\n\n if (draft.variant.sku) {\n variant = {\n id: 0,\n sku: draft.variant.sku,\n }\n\n var items = this._storage.query(projectKey, 'product', {\n where: [\n `masterData(current(masterVariant(sku=\"${draft.variant.sku}\"))) or masterData(current(variants(sku=\"${draft.variant.sku}\")))`,\n ],\n }) as ProductPagedQueryResponse\n\n if (items.count !== 1) {\n throw new CommercetoolsError<GeneralError>({\n code: 'General',\n message: `A product containing a variant with SKU '${draft.variant.sku}' not found.`,\n })\n }\n\n product = items.results[0]\n if (product.masterData.current.masterVariant.sku === draft.variant.sku) {\n variant = product.masterData.current.masterVariant\n } else {\n variant = product.masterData.current.variants.find(\n v => v.sku === draft.variant.sku\n )\n }\n if (!variant) {\n throw new Error('Internal state error')\n }\n } else {\n throw new Error('No product found')\n }\n\n const lineItem: LineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n lineItemMode: 'Standard',\n name: draft.name,\n price: createPrice(draft.price),\n priceMode: 'Platform',\n productId: product.id,\n productType: product.productType,\n quantity: draft.quantity,\n state: draft.state || [],\n taxRate: draft.taxRate,\n totalPrice: createTypedMoney(draft.price.value),\n variant: {\n id: variant.id,\n sku: variant.sku,\n price: createPrice(draft.price),\n },\n }\n\n return lineItem\n }\n\n private customLineItemFromImportDraft(\n projectKey: string,\n draft: CustomLineItemDraft\n ): CustomLineItem {\n const lineItem: CustomLineItem = {\n ...getBaseResourceProperties(),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n discountedPricePerQuantity: [],\n money: createTypedMoney(draft.money),\n name: draft.name,\n quantity: draft.quantity,\n slug: draft.slug,\n state: [],\n totalPrice: createTypedMoney(draft.money),\n }\n\n return lineItem\n }\n\n getWithOrderNumber(\n projectKey: string,\n orderNumber: string,\n params: QueryParams = {}\n ): Order | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n ...params,\n where: [`orderNumber=\"${orderNumber}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as Order\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate order numbers')\n }\n\n return\n }\n\n actions = {\n addPayment: (\n projectKey: string,\n resource: Writable<Order>,\n { payment }: OrderAddPaymentAction\n ) => {\n const resolvedPayment = this._storage.getByResourceIdentifier(\n projectKey,\n payment\n )\n if (!resolvedPayment) {\n throw new Error(`Payment ${payment.id} not found`)\n }\n\n if (!resource.paymentInfo) {\n resource.paymentInfo = {\n payments: [],\n }\n }\n\n resource.paymentInfo.payments.push({\n typeId: 'payment',\n id: payment.id!,\n })\n },\n changeOrderState: (\n projectKey: string,\n resource: Writable<Order>,\n { orderState }: OrderChangeOrderStateAction\n ) => {\n resource.orderState = orderState\n },\n changePaymentState: (\n projectKey: string,\n resource: Writable<Order>,\n { paymentState }: OrderChangePaymentStateAction\n ) => {\n resource.paymentState = paymentState\n },\n setBillingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetBillingAddressAction\n ) => {\n resource.billingAddress = address\n },\n setCustomerEmail: (\n projectKey: string,\n resource: Writable<Order>,\n { email }: OrderSetCustomerEmailAction\n ) => {\n resource.customerEmail = email\n },\n setCustomField: (\n projectKey: string,\n resource: Order,\n { name, value }: OrderSetCustomFieldAction\n ) => {\n if (!resource.custom) {\n throw new Error('Resource has no custom field')\n }\n resource.custom.fields[name] = value\n },\n setCustomType: (\n projectKey: string,\n resource: Writable<Order>,\n { type, fields }: OrderSetCustomTypeAction\n ) => {\n if (!type) {\n resource.custom = undefined\n } else {\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n type\n )\n if (!resolvedType) {\n throw new Error(`Type ${type} not found`)\n }\n\n resource.custom = {\n type: {\n typeId: 'type',\n id: resolvedType.id,\n },\n fields: fields || [],\n }\n }\n },\n setLocale: (\n projectKey: string,\n resource: Writable<Order>,\n { locale }: OrderSetLocaleAction\n ) => {\n resource.locale = locale\n },\n setOrderNumber: (\n projectKey: string,\n resource: Writable<Order>,\n { orderNumber }: OrderSetOrderNumberAction\n ) => {\n resource.orderNumber = orderNumber\n },\n setShippingAddress: (\n projectKey: string,\n resource: Writable<Order>,\n { address }: OrderSetShippingAddressAction\n ) => {\n resource.shippingAddress = address\n },\n setStore: (\n projectKey: string,\n resource: Writable<Order>,\n { store }: OrderSetStoreAction\n ) => {\n if (!store) return\n const resolvedType = this._storage.getByResourceIdentifier(\n projectKey,\n store\n )\n if (!resolvedType) {\n throw new Error(`No store found with key=${store.key}`)\n }\n\n const storeReference = resolvedType as Store\n resource.store = {\n typeId: 'store',\n key: storeReference.key,\n }\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { OrderRepository } from '../repositories/order'\nimport { AbstractStorage } from '../storage'\n\nexport class OrderService extends AbstractService {\n public repository: OrderRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new OrderRepository(storage)\n }\n\n getBasePath() {\n return 'orders'\n }\n\n extraRoutes(router: Router) {\n router.post('/import', this.import.bind(this))\n router.get('/order-number=:orderNumber', this.getWithOrderNumber.bind(this))\n }\n\n import(request: Request, response: Response) {\n const importDraft = request.body\n const resource = this.repository.import(\n request.params.projectKey,\n importDraft\n )\n return response.status(200).send(resource)\n }\n\n getWithOrderNumber(request: Request, response: Response) {\n const resource = this.repository.getWithOrderNumber(\n request.params.projectKey,\n request.params.orderNumber,\n request.query\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { PaymentRepository } from '../repositories/payment'\n\nexport class PaymentService extends AbstractService {\n public repository: PaymentRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new PaymentRepository(storage)\n }\n\n getBasePath() {\n return 'payments'\n }\n}\n","export const parseFilterExpression = (filter: string | string[]) => {\n if (typeof filter === 'object') {\n const filters = filter.map(parse)\n return filters.join(' and ')\n }\n return parse(filter)\n}\n\nconst parse = (filter: string) => {\n let parsed = filter.replace(/:/g, '=')\n\n do {\n parsed = parsed.replace(/(.*)\\.(.*)=(.*)$/g, '$1($2=$3)')\n } while (parsed.includes('.'))\n\n return parsed\n}\n","import { ParsedQs } from 'qs'\nimport {\n ProductDraft,\n ProductProjection,\n ProductVariant,\n ProductVariantDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { RepositoryTypes } from '../types'\nimport { parseFilterExpression } from '../lib/filterParser'\n\nexport class ProductProjectionRepository extends AbstractResourceRepository {\n getTypeId(): RepositoryTypes {\n return 'product-projection'\n }\n\n create(projectKey: string, draft: ProductDraft): ProductProjection {\n if (!draft.masterVariant) {\n throw new Error(\n `must provider mastervariant for product projection with key ${draft.key}`\n )\n }\n\n if (!draft.productType.id) {\n throw new Error(\n `must provider product type id for product projection with key ${draft.key}`\n )\n }\n\n const resource: ProductProjection = {\n ...getBaseResourceProperties(),\n name: draft.name,\n slug: draft.slug,\n categories: [],\n productType: { ...draft.productType, id: draft.productType.id! },\n masterVariant: variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants?.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }) ?? [],\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n search(projectKey: string, query: ParsedQs) {\n const filter = (query['filter.query'] ?? query.filter) as any\n const wherePredicate = filter ? parseFilterExpression(filter) : undefined\n\n const results = this._storage.query(projectKey, this.getTypeId(), {\n where: wherePredicate,\n offset: query.offset ? Number(query.offset) : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\n }) //TODO: this is a partial implementation, but I don't really have the time to implement an actual search API right now\n\n return results\n }\n\n actions = {}\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n }\n}\n","import { ProductProjectionRepository } from './../repositories/product-projection'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ProductProjectionService extends AbstractService {\n public repository: ProductProjectionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductProjectionRepository(storage)\n }\n\n getBasePath() {\n return 'product-projections'\n }\n\n extraRoutes(router: Router) {\n router.get('/search', this.search.bind(this))\n }\n\n search(request: Request, response: Response) {\n const resource = this.repository.search(\n request.params.projectKey,\n request.query\n )\n return response.status(200).send(resource)\n }\n}\n","import {\n Price,\n Product,\n ProductData,\n ProductDraft,\n ProductPublishAction,\n ProductSetAttributeAction,\n ProductVariant,\n ProductVariantDraft,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from '../types'\n\nexport class ProductRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product'\n }\n\n create(projectKey: string, draft: ProductDraft): Product {\n const productData = {\n name: draft.name,\n slug: draft.slug,\n categories: [],\n masterVariant:\n draft.masterVariant && variantFromDraft(0, draft.masterVariant!),\n variants:\n draft.variants &&\n draft.variants.map((variant, index) => {\n return variantFromDraft(index + 1, variant)\n }),\n\n // @ts-ignore\n searchKeywords: draft.searchKeywords,\n }\n\n const resource: Product = {\n ...getBaseResourceProperties(),\n masterData: {\n // @ts-ignore\n current: draft.publish ? productData : undefined,\n // @ts-ignore\n staged: draft.publish ? undefined : productData,\n hasStagedChanges: draft.publish ?? true,\n published: draft.publish ?? false,\n },\n }\n\n this.save(projectKey, resource)\n\n return resource\n }\n\n actions = {\n publish: (\n projectKey: string,\n resource: Writable<Product>,\n { scope }: ProductPublishAction\n ) => {\n if (resource.masterData.staged) {\n resource.masterData.current = resource.masterData.staged\n // @ts-ignore\n resource.masterData.staged = undefined\n }\n resource.masterData.hasStagedChanges = false\n resource.masterData.published = true\n },\n setAttribute: (\n projectKey: string,\n resource: Writable<Product>,\n { variantId, sku, name, value, staged }: ProductSetAttributeAction\n ) => {\n const isStaged = staged !== undefined ? staged : false\n const productData = getProductData(resource, isStaged)\n const { variant, isMasterVariant, variantIndex } = getVariant(\n productData,\n variantId,\n sku\n )\n if (!variant) {\n throw new Error(\n `Variant with id ${variantId} or sku ${sku} not found on product ${resource.id}`\n )\n }\n\n if (!variant.attributes) {\n variant.attributes = []\n }\n\n const existingAttr = variant.attributes.find(attr => attr.name === name)\n if (existingAttr) {\n existingAttr.value = value\n } else {\n variant.attributes.push({\n name,\n value,\n })\n }\n if (isStaged) {\n resource.masterData.staged = productData\n if (isMasterVariant) {\n resource.masterData.staged.masterVariant = variant\n } else {\n resource.masterData.staged.variants[variantIndex] = variant\n }\n resource.masterData.hasStagedChanges = true\n } else {\n resource.masterData.current = productData\n if (isMasterVariant) {\n resource.masterData.current.masterVariant = variant\n } else {\n resource.masterData.current.variants[variantIndex] = variant\n }\n }\n },\n // 'setKey': () => {},\n // 'changeName': () => {},\n // 'setDescription': () => {},\n // 'changeSlug': () => {},\n // 'addVariant': () => {},\n // 'removeVariant': () => {},\n // 'changeMasterVariant': () => {},\n // 'addPrice': () => {},\n // 'setPrices': () => {},\n // 'changePrice': () => {},\n // 'removePrice': () => {},\n // 'setProductPriceCustomType': () => {},\n // 'setProductPriceCustomField': () => {},\n // 'setDiscountedPrice': () => {},\n // 'setAttributeInAllVariants': () => {},\n // 'addToCategory': () => {},\n // 'setCategoryOrderHint': () => {},\n // 'removeFromCategory': () => {},\n // 'setTaxCategory': () => {},\n // 'setSku': () => {},\n // 'setProductVariantKey': () => {},\n // 'addExternalImage': () => {},\n // 'moveImageToPosition': () => {},\n // 'removeImage': () => {},\n // 'setImageLabel': () => {},\n // 'addAsset': () => {},\n // 'removeAsset': () => {},\n // 'setAssetKey': () => {},\n // 'changeAssetOrder': () => {},\n // 'changeAssetName': () => {},\n // 'setAssetDescription': () => {},\n // 'setAssetTags': () => {},\n // 'setAssetSources': () => {},\n // 'setAssetCustomType': () => {},\n // 'setAssetCustomField': () => {},\n // 'setSearchKeywords': () => {},\n // 'setMetaTitle': () => {},\n // 'setMetaDescription': () => {},\n // 'setMetaKeywords': () => {},\n // 'revertStagedChanges': () => {},\n // 'revertStagedVariantChanges': () => {},\n // 'unpublish': () => {},\n // 'transitionState': () => {},\n }\n}\n\nconst getProductData = (product: Product, staged: boolean) => {\n if (!staged && product.masterData.current) {\n return product.masterData.current\n }\n return product.masterData.staged\n}\n\ninterface VariantResult {\n variant: Writable<ProductVariant> | undefined\n isMasterVariant: boolean\n variantIndex: number\n}\n\nconst getVariant = (\n productData: ProductData,\n variantId?: number,\n sku?: string\n): VariantResult => {\n const variants = [productData.masterVariant, ...productData.variants]\n const foundVariant = variants.find((variant: ProductVariant) => {\n if (variantId) {\n return variant.id === variantId\n }\n if (sku) {\n return variant.sku === sku\n }\n return false\n })\n\n const isMasterVariant = foundVariant === productData.masterVariant\n return {\n variant: foundVariant,\n isMasterVariant,\n variantIndex:\n !isMasterVariant && foundVariant\n ? productData.variants.indexOf(foundVariant)\n : -1,\n }\n}\n\nconst variantFromDraft = (\n variantId: number,\n variant: ProductVariantDraft\n): ProductVariant => {\n return {\n id: variantId,\n sku: variant?.sku,\n attributes: variant?.attributes,\n prices: variant?.prices as Price[],\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProductRepository } from '../repositories/product'\n\nexport class ProductService extends AbstractService {\n public repository: ProductRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductRepository(storage)\n }\n\n getBasePath() {\n return 'products'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport {\n AttributeDefinition,\n AttributeDefinitionDraft,\n AttributeType,\n ProductType,\n ProductTypeChangeLabelAction,\n ProductTypeChangeLocalizedEnumValueLabelAction,\n ProductTypeDraft,\n ProductTypeUpdateAction,\n ReferenceTypeId,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class ProductTypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'product-type'\n }\n\n create(projectKey: string, draft: ProductTypeDraft): ProductType {\n const resource: ProductType = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n description: draft.description,\n attributes: (draft.attributes ?? []).map(a =>\n this.attributeDefinitionFromAttributeDefinitionDraft(projectKey, a)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n attributeDefinitionFromAttributeDefinitionDraft = (\n _projectKey: string,\n draft: AttributeDefinitionDraft\n ): AttributeDefinition => ({\n ...draft,\n attributeConstraint: draft.attributeConstraint ?? 'None',\n inputHint: draft.inputHint ?? 'SingleLine',\n isSearchable: draft.isSearchable ?? true,\n })\n\n getWithKey(projectKey: string, key: string): ProductType | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as ProductType\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate product type key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n ProductTypeUpdateAction['action'],\n (projectKey: string, resource: Writable<ProductType>, action: any) => void\n >\n > = {\n changeLocalizedEnumValueLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n {\n attributeName,\n newValue,\n }: ProductTypeChangeLocalizedEnumValueLabelAction\n ) => {\n const updateAttributeType = (type: Writable<AttributeType>) => {\n switch (type.name) {\n case 'lenum':\n type.values.forEach(v => {\n if (v.key == newValue.key) {\n v.label = newValue.label\n }\n })\n return\n case 'set':\n updateAttributeType(type.elementType)\n return\n }\n }\n\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n updateAttributeType(value.type)\n }\n })\n },\n changeLabel: (\n projectKey: string,\n resource: Writable<ProductType>,\n { attributeName, label }: ProductTypeChangeLabelAction\n ) => {\n resource.attributes?.forEach(value => {\n if (value.name == attributeName) {\n value.label = label\n }\n })\n },\n }\n}\n","import { ProductTypeRepository } from '../repositories/product-type'\nimport AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ProductTypeService extends AbstractService {\n public repository: ProductTypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ProductTypeRepository(storage)\n }\n\n getBasePath() {\n return 'product-types'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import { json } from 'express'\n\nexport const maskSecretValue = <T>(resource: T, path: string): T => {\n const parts = path.split('.')\n const clone = JSON.parse(JSON.stringify(resource))\n let val = clone\n\n const target = parts.pop()\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n val = val[part]\n\n if (val == undefined) {\n return resource\n }\n }\n\n if (val && target && val[target]) {\n val[target] = '****'\n }\n return clone\n}\n","import {\n Project,\n ProjectChangeCartsConfigurationAction,\n ProjectChangeCountriesAction,\n ProjectChangeCountryTaxRateFallbackEnabledAction,\n ProjectChangeCurrenciesAction,\n ProjectChangeLanguagesAction,\n ProjectChangeMessagesEnabledAction,\n ProjectChangeNameAction,\n ProjectChangeOrderSearchStatusAction,\n ProjectChangeProductSearchIndexingEnabledAction,\n ProjectSetExternalOAuthAction,\n ProjectSetShippingRateInputTypeAction,\n ProjectUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { InvalidOperationError } from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { checkConcurrentModification } from './errors'\nimport { CommercetoolsError } from '../exceptions'\nimport { AbstractRepository } from './abstract'\nimport { maskSecretValue } from '../lib/masking'\n\nexport class ProjectRepository extends AbstractRepository {\n get(projectKey: string): Project | null {\n const data = this._storage.getProject(projectKey)\n const resource = this._storage.getProject(projectKey)\n const masked = maskSecretValue<Project>(\n resource,\n 'externalOAuth.authorizationHeader'\n )\n return masked\n }\n\n save(projectKey: string, resource: Project) {\n const current = this.get(projectKey)\n\n if (current) {\n checkConcurrentModification(current, resource.version)\n } else {\n if (resource.version !== 0) {\n throw new CommercetoolsError<InvalidOperationError>(\n {\n code: 'InvalidOperation',\n message: 'version on create must be 0',\n },\n 400\n )\n }\n }\n\n // @ts-ignore\n resource.version += 1\n this._storage.saveProject(resource)\n }\n\n actions: Partial<\n Record<\n ProjectUpdateAction['action'],\n (projectKey: string, resource: Writable<Project>, action: any) => void\n >\n > = {\n changeName: (\n projectKey: string,\n resource: Writable<Project>,\n { name }: ProjectChangeNameAction\n ) => {\n resource.name = name\n },\n changeCurrencies: (\n projectKey: string,\n resource: Writable<Project>,\n { currencies }: ProjectChangeCurrenciesAction\n ) => {\n resource.currencies = currencies\n },\n changeCountries: (\n projectKey: string,\n resource: Writable<Project>,\n { countries }: ProjectChangeCountriesAction\n ) => {\n resource.countries = countries\n },\n changeLanguages: (\n projectKey: string,\n resource: Writable<Project>,\n { languages }: ProjectChangeLanguagesAction\n ) => {\n resource.languages = languages\n },\n changeMessagesEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { messagesEnabled }: ProjectChangeMessagesEnabledAction\n ) => {\n resource.messages.enabled = messagesEnabled\n },\n changeProductSearchIndexingEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n { enabled }: ProjectChangeProductSearchIndexingEnabledAction\n ) => {\n if (!resource.searchIndexing?.products) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.products.status = enabled\n ? 'Activated'\n : 'Deactivated'\n resource.searchIndexing.products.lastModifiedAt = new Date().toISOString()\n },\n changeOrderSearchStatus: (\n projectKey: string,\n resource: Writable<Project>,\n { status }: ProjectChangeOrderSearchStatusAction\n ) => {\n if (!resource.searchIndexing?.orders) {\n throw new Error('Invalid project state')\n }\n resource.searchIndexing.orders.status = status\n resource.searchIndexing.orders.lastModifiedAt = new Date().toISOString()\n },\n setShippingRateInputType: (\n projectKey: string,\n resource: Writable<Project>,\n { shippingRateInputType }: ProjectSetShippingRateInputTypeAction\n ) => {\n resource.shippingRateInputType = shippingRateInputType\n },\n setExternalOAuth: (\n projectKey: string,\n resource: Writable<Project>,\n { externalOAuth }: ProjectSetExternalOAuthAction\n ) => {\n resource.externalOAuth = externalOAuth\n },\n changeCountryTaxRateFallbackEnabled: (\n projectKey: string,\n resource: Writable<Project>,\n {\n countryTaxRateFallbackEnabled,\n }: ProjectChangeCountryTaxRateFallbackEnabledAction\n ) => {\n resource.carts.countryTaxRateFallbackEnabled = countryTaxRateFallbackEnabled\n },\n changeCartsConfiguration: (\n projectKey: string,\n resource: Writable<Project>,\n { cartsConfiguration }: ProjectChangeCartsConfigurationAction\n ) => {\n resource.carts = cartsConfiguration || {\n countryTaxRateFallbackEnabled: false,\n deleteDaysAfterLastModification: 90,\n }\n },\n }\n}\n","import { Router } from 'express'\nimport { Request, Response } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { ProjectRepository } from '../repositories/project'\nimport { Update } from '@commercetools/platform-sdk'\n\nexport class ProjectService {\n public repository: ProjectRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n this.repository = new ProjectRepository(storage)\n this.registerRoutes(parent)\n }\n\n registerRoutes(parent: Router) {\n parent.get('', this.get.bind(this))\n parent.post('', this.post.bind(this))\n }\n\n get(request: Request, response: Response) {\n const projectKey = request.params.projectKey\n const project = this.repository.get(projectKey)\n return response.status(200).send(project)\n }\n\n post(request: Request, response: Response) {\n const updateRequest: Update = request.body\n const project = this.repository.get(request.params.projectKey)\n\n if (!project) {\n return response.status(404).send({})\n }\n\n const updatedResource = this.repository.processUpdateActions(\n request.params.projectKey,\n project,\n updateRequest.actions\n )\n\n return response.status(200).send({})\n }\n}\n","import {\n createCustomFields,\n createTypedMoney,\n getReferenceFromResourceIdentifier,\n} from './helpers'\nimport {\n ReferenceTypeId,\n ShippingMethod,\n ShippingMethodAddShippingRateAction,\n ShippingMethodAddZoneAction,\n ShippingMethodChangeIsDefaultAction,\n ShippingMethodChangeNameAction,\n ShippingMethodDraft,\n ShippingMethodRemoveZoneAction,\n ShippingMethodSetDescriptionAction,\n ShippingMethodSetKeyAction,\n ShippingMethodSetLocalizedDescriptionAction,\n ShippingMethodSetPredicateAction,\n ShippingMethodUpdateAction,\n ShippingRate,\n ShippingRateDraft,\n ZoneRate,\n ZoneRateDraft,\n ZoneReference,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\nimport { _ } from 'ajv'\nimport deepEqual from 'deep-equal'\n\nexport class ShippingMethodRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shipping-method'\n }\n\n create(projectKey: string, draft: ShippingMethodDraft): ShippingMethod {\n const resource: ShippingMethod = {\n ...getBaseResourceProperties(),\n ...draft,\n taxCategory: getReferenceFromResourceIdentifier(\n draft.taxCategory,\n projectKey,\n this._storage\n ),\n zoneRates: draft.zoneRates?.map(z =>\n this._transformZoneRateDraft(projectKey, z)\n ),\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private _transformZoneRateDraft = (\n projectKey: string,\n draft: ZoneRateDraft\n ): ZoneRate => ({\n ...draft,\n zone: getReferenceFromResourceIdentifier<ZoneReference>(\n draft.zone,\n projectKey,\n this._storage\n ),\n shippingRates: draft.shippingRates?.map(this._transformShippingRate),\n })\n\n private _transformShippingRate = (rate: ShippingRateDraft): ShippingRate => {\n return {\n price: createTypedMoney(rate.price),\n freeAbove: rate.freeAbove && createTypedMoney(rate.freeAbove),\n tiers: rate.tiers || [],\n }\n }\n\n actions: Partial<\n Record<\n ShippingMethodUpdateAction['action'],\n (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n action: any\n ) => void\n >\n > = {\n addShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates.push(rate)\n return\n }\n })\n resource.zoneRates.push({\n zone: {\n typeId: 'zone',\n id: zone.id!,\n },\n shippingRates: [rate],\n })\n },\n removeShippingRate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { shippingRate, zone }: ShippingMethodAddShippingRateAction\n ) => {\n const rate = this._transformShippingRate(shippingRate)\n\n resource.zoneRates.forEach(zoneRate => {\n if (zoneRate.zone.id == zone.id) {\n zoneRate.shippingRates = zoneRate.shippingRates.filter(otherRate => {\n return !deepEqual(rate, otherRate)\n })\n }\n })\n },\n addZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodAddZoneAction\n ) => {\n const zoneReference = getReferenceFromResourceIdentifier<ZoneReference>(\n zone,\n projectKey,\n this._storage\n )\n\n if (resource.zoneRates === undefined) {\n resource.zoneRates = []\n }\n\n resource.zoneRates.push({\n zone: zoneReference,\n shippingRates: [],\n })\n },\n removeZone: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { zone }: ShippingMethodRemoveZoneAction\n ) => {\n resource.zoneRates = resource.zoneRates.filter(zoneRate => {\n return zoneRate.zone.id !== zone.id\n })\n },\n setKey: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { key }: ShippingMethodSetKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { description }: ShippingMethodSetDescriptionAction\n ) => {\n resource.description = description\n },\n setLocalizedDescription: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { localizedDescription }: ShippingMethodSetLocalizedDescriptionAction\n ) => {\n resource.localizedDescription = localizedDescription\n },\n setPredicate: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { predicate }: ShippingMethodSetPredicateAction\n ) => {\n resource.predicate = predicate\n },\n changeIsDefault: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { isDefault }: ShippingMethodChangeIsDefaultAction\n ) => {\n resource.isDefault = isDefault\n },\n changeName: (\n projectKey: string,\n resource: Writable<ShippingMethod>,\n { name }: ShippingMethodChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { ShippingMethodRepository } from '../repositories/shipping-method'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class ShippingMethodService extends AbstractService {\n public repository: ShippingMethodRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShippingMethodRepository(storage)\n this.registerRoutes(parent)\n }\n\n getBasePath() {\n return 'shipping-methods'\n }\n\n extraRoutes(parent: Router) {\n parent.get('/matching-cart', this.get.bind(this))\n }\n}\n","import {\n CustomerReference,\n ReferenceTypeId,\n ShoppingList,\n ShoppingListDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport {\n createCustomFields,\n getReferenceFromResourceIdentifier,\n} from './helpers'\n\nexport class ShoppingListRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'shopping-list'\n }\n create(projectKey: string, draft: ShoppingListDraft): ShoppingList {\n // const product =\n\n const resource: ShoppingList = {\n ...getBaseResourceProperties(),\n ...draft,\n custom: createCustomFields(draft.custom, projectKey, this._storage),\n textLineItems: [],\n lineItems: draft.lineItems?.map(e => ({\n ...getBaseResourceProperties(),\n ...e,\n addedAt: e.addedAt ?? '',\n productId: e.productId ?? '',\n name: {},\n quantity: e.quantity ?? 1,\n productType: { typeId: 'product-type', id: '' },\n custom: createCustomFields(e.custom, projectKey, this._storage),\n })),\n customer: draft.customer\n ? getReferenceFromResourceIdentifier<CustomerReference>(\n draft.customer,\n projectKey,\n this._storage\n )\n : undefined,\n store: draft.store?.key\n ? { typeId: 'store', key: draft.store.key! }\n : undefined,\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import { ShoppingListRepository } from './../repositories/shopping-list'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class ShoppingListService extends AbstractService {\n public repository: ShoppingListRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ShoppingListRepository(storage)\n }\n\n getBasePath() {\n return 'shopping-lists'\n }\n}\n","import { getBaseResourceProperties } from '../helpers'\nimport { getReferenceFromResourceIdentifier } from './helpers'\nimport {\n ReferenceTypeId,\n State,\n StateChangeKeyAction,\n StateDraft,\n StateSetDescriptionAction,\n StateSetNameAction,\n StateSetRolesAction,\n StateUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { AbstractResourceRepository } from './abstract'\nimport { Writable } from 'types'\n\nexport class StateRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'state'\n }\n\n create(projectKey: string, draft: StateDraft): State {\n const resource: State = {\n ...getBaseResourceProperties(),\n ...draft,\n builtIn: false,\n initial: draft.initial || false,\n transitions: (draft.transitions || []).map(t =>\n getReferenceFromResourceIdentifier(t, projectKey, this._storage)\n ),\n }\n\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n StateUpdateAction['action'],\n (projectKey: string, resource: Writable<State>, action: any) => void\n >\n > = {\n changeKey: (\n projectKey: string,\n resource: Writable<State>,\n { key }: StateChangeKeyAction\n ) => {\n resource.key = key\n },\n setDescription: (\n projectKey: string,\n resource: Writable<State>,\n { description }: StateSetDescriptionAction\n ) => {\n resource.description = description\n },\n setName: (\n projectKey: string,\n resource: Writable<State>,\n { name }: StateSetNameAction\n ) => {\n resource.name = name\n },\n setRoles: (\n projectKey: string,\n resource: Writable<State>,\n { roles }: StateSetRolesAction\n ) => {\n resource.roles = roles\n },\n }\n}\n","import { StateRepository } from '../repositories/state'\nimport AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\n\nexport class StateService extends AbstractService {\n public repository: StateRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StateRepository(storage)\n }\n\n getBasePath() {\n return 'states'\n }\n}\n","import {\n Store,\n StoreDraft,\n ReferenceTypeId,\n StoreUpdateAction,\n StoreSetNameAction,\n ChannelReference,\n StoreSetDistributionChannelsAction,\n ChannelResourceIdentifier,\n StoreSetLanguagesAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { getReferenceFromResourceIdentifier } from './helpers'\n\nexport class StoreRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'store'\n }\n\n create(projectKey: string, draft: StoreDraft): Store {\n const resource: Store = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n languages: draft.languages,\n distributionChannels: this.transformChannels(\n projectKey,\n draft.distributionChannels\n ),\n supplyChannels: this.transformChannels(projectKey, draft.supplyChannels),\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private transformChannels(\n projectKey: string,\n channels?: ChannelResourceIdentifier[]\n ) {\n if (!channels) return []\n\n return channels.map(ref =>\n getReferenceFromResourceIdentifier<ChannelReference>(\n ref,\n projectKey,\n this._storage\n )\n )\n }\n\n actions: Partial<\n Record<\n StoreUpdateAction['action'],\n (projectKey: string, resource: Writable<Store>, action: any) => void\n >\n > = {\n setName: (\n projectKey: string,\n resource: Writable<Store>,\n { name }: StoreSetNameAction\n ) => {\n resource.name = name\n },\n setDistributionChannels: (\n projectKey: string,\n resource: Writable<Store>,\n { distributionChannels }: StoreSetDistributionChannelsAction\n ) => {\n resource.distributionChannels = this.transformChannels(\n projectKey,\n distributionChannels\n )\n },\n setLanguages: (\n projectKey: string,\n resource: Writable<Store>,\n { languages }: StoreSetLanguagesAction\n ) => {\n resource.languages = languages\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { StoreRepository } from '../repositories/store'\nimport { AbstractStorage } from '../storage'\n\nexport class StoreService extends AbstractService {\n public repository: StoreRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new StoreRepository(storage)\n }\n\n getBasePath() {\n return 'stores'\n }\n}\n","import {\n InvalidInputError,\n ReferenceTypeId,\n Subscription,\n SubscriptionDraft,\n} from '@commercetools/platform-sdk'\nimport { CommercetoolsError } from '../exceptions'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class SubscriptionRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'subscription'\n }\n create(projectKey: string, draft: SubscriptionDraft): Subscription {\n // TODO: We could actually test this here by using the aws sdk. For now\n // hardcode a failed check when account id is 0000000000\n if (draft.destination.type == 'SQS') {\n const queueURL = new URL(draft.destination.queueUrl)\n const accountId = queueURL.pathname.split('/')[1]\n if (accountId == '0000000000') {\n const dest = draft.destination\n throw new CommercetoolsError<InvalidInputError>(\n {\n code: 'InvalidInput',\n message:\n 'A test message could not be delivered to this destination: ' +\n `SQS ${dest.queueUrl} in ${dest.region} for ${dest.accessKey}. ` +\n 'Please make sure your destination is correctly configured.',\n },\n 400\n )\n }\n }\n\n const resource: Subscription = {\n ...getBaseResourceProperties(),\n changes: draft.changes || [],\n destination: draft.destination,\n format: draft.format || {\n type: 'Platform',\n },\n key: draft.key,\n messages: draft.messages || [],\n status: 'Healthy',\n }\n this.save(projectKey, resource)\n return resource\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { SubscriptionRepository } from '../repositories/subscription'\n\nexport class SubscriptionService extends AbstractService {\n public repository: SubscriptionRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new SubscriptionRepository(storage)\n }\n\n getBasePath() {\n return 'subscriptions'\n }\n}\n","import {\n ReferenceTypeId,\n TaxCategory,\n TaxCategoryAddTaxRateAction,\n TaxCategoryChangeNameAction,\n TaxCategoryDraft,\n TaxCategoryRemoveTaxRateAction,\n TaxCategoryReplaceTaxRateAction,\n TaxCategorySetDescriptionAction,\n TaxCategorySetKeyAction,\n TaxCategoryUpdateAction,\n TaxRate,\n TaxRateDraft,\n} from '@commercetools/platform-sdk'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Writable } from 'types'\n\nexport class TaxCategoryRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'tax-category'\n }\n\n create(projectKey: string, draft: TaxCategoryDraft): TaxCategory {\n const resource: TaxCategory = {\n ...getBaseResourceProperties(),\n ...draft,\n rates: draft.rates?.map(this.taxRateFromTaxRateDraft) || [],\n }\n this.save(projectKey, resource)\n return resource\n }\n\n private taxRateFromTaxRateDraft = (draft: TaxRateDraft): TaxRate => ({\n ...draft,\n id: uuidv4(),\n amount: draft.amount || 0,\n })\n\n getWithKey(projectKey: string, key: string): TaxCategory | undefined {\n const result = this._storage.query(projectKey, this.getTypeId(), {\n where: [`key=\"${key}\"`],\n })\n if (result.count === 1) {\n return result.results[0] as TaxCategory\n }\n\n // Catch this for now, should be checked when creating/updating\n if (result.count > 1) {\n throw new Error('Duplicate tax category key')\n }\n\n return\n }\n\n actions: Partial<\n Record<\n TaxCategoryUpdateAction['action'],\n (projectKey: string, resource: Writable<TaxCategory>, action: any) => void\n >\n > = {\n addTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRate }: TaxCategoryAddTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates.push(this.taxRateFromTaxRateDraft(taxRate))\n },\n removeTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId }: TaxCategoryRemoveTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n resource.rates = resource.rates.filter(taxRate => {\n return taxRate.id !== taxRateId\n })\n },\n replaceTaxRate: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { taxRateId, taxRate }: TaxCategoryReplaceTaxRateAction\n ) => {\n if (resource.rates === undefined) {\n resource.rates = []\n }\n\n const taxRateObj = this.taxRateFromTaxRateDraft(taxRate)\n for (let i = 0; i < resource.rates.length; i++) {\n const rate = resource.rates[i]\n if (rate.id == taxRateId) {\n resource.rates[i] = taxRateObj\n }\n }\n },\n setDescription: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { description }: TaxCategorySetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { key }: TaxCategorySetKeyAction\n ) => {\n resource.key = key\n },\n changeName: (\n projectKey: string,\n resource: Writable<TaxCategory>,\n { name }: TaxCategoryChangeNameAction\n ) => {\n resource.name = name\n },\n }\n}\n","import { TaxCategoryRepository } from '../repositories/tax-category'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { Request, Response, Router } from 'express'\n\nexport class TaxCategoryService extends AbstractService {\n public repository: TaxCategoryRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TaxCategoryRepository(storage)\n }\n\n getBasePath() {\n return 'tax-categories'\n }\n\n extraRoutes(router: Router) {\n router.get('/key=:key', this.getWithKey.bind(this))\n }\n\n getWithKey(request: Request, response: Response) {\n const resource = this.repository.getWithKey(\n request.params.projectKey,\n request.params.key\n )\n if (resource) {\n return response.status(200).send(resource)\n }\n return response.status(404).send('Not found')\n }\n}\n","import {\n Type,\n TypeDraft,\n ReferenceTypeId,\n TypeUpdateAction,\n FieldDefinition,\n TypeSetDescriptionAction,\n TypeChangeNameAction,\n TypeAddFieldDefinitionAction,\n TypeChangeEnumValueLabelAction,\n TypeAddEnumValueAction,\n TypeChangeFieldDefinitionOrderAction,\n TypeRemoveFieldDefinitionAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class TypeRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'type'\n }\n\n create(projectKey: string, draft: TypeDraft): Type {\n const resource: Type = {\n ...getBaseResourceProperties(),\n key: draft.key,\n name: draft.name,\n resourceTypeIds: draft.resourceTypeIds,\n fieldDefinitions: draft.fieldDefinitions || [],\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n actions: Partial<\n Record<\n TypeUpdateAction['action'],\n (projectKey: string, resource: Writable<Type>, action: any) => void\n >\n > = {\n addFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldDefinition }: TypeAddFieldDefinitionAction\n ) => {\n resource.fieldDefinitions.push(fieldDefinition)\n },\n removeFieldDefinition: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName }: TypeRemoveFieldDefinitionAction\n ) => {\n resource.fieldDefinitions = resource.fieldDefinitions.filter(f => {\n return f.name !== fieldName\n })\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Type>,\n { description }: TypeSetDescriptionAction\n ) => {\n resource.description = description\n },\n changeName: (\n projectKey: string,\n resource: Writable<Type>,\n { name }: TypeChangeNameAction\n ) => {\n resource.name = name\n },\n changeFieldDefinitionOrder: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldNames }: TypeChangeFieldDefinitionOrderAction\n ) => {\n const fields = new Map(\n resource.fieldDefinitions.map(item => [item.name, item])\n )\n const result: FieldDefinition[] = []\n let current = resource.fieldDefinitions\n\n fieldNames.forEach(fieldName => {\n const field = fields.get(fieldName)\n if (field === undefined) {\n throw new Error('New field')\n }\n result.push(field)\n\n // Remove from current items\n current = current.filter(f => {\n return f.name !== fieldName\n })\n })\n\n resource.fieldDefinitions = result\n // Add fields which were not specified in the order as last items. Not\n // sure if this follows commercetools\n resource.fieldDefinitions.push(...current)\n },\n addEnumValue: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeAddEnumValueAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.push(value)\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.push(value)\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n changeEnumValueLabel: (\n projectKey: string,\n resource: Writable<Type>,\n { fieldName, value }: TypeChangeEnumValueLabelAction\n ) => {\n resource.fieldDefinitions.forEach(field => {\n if (field.name == fieldName) {\n // TODO, should be done better i suppose\n if (field.type.name == 'Enum') {\n field.type.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else if (\n field.type.name == 'Set' &&\n field.type.elementType.name == 'Enum'\n ) {\n field.type.elementType.values.forEach(v => {\n if (v.key == value.key) {\n v.label = value.label\n }\n })\n } else {\n throw new Error('Type is not a Enum (or Set of Enum)')\n }\n }\n })\n },\n }\n}\n","import AbstractService from './abstract'\nimport { Router } from 'express'\nimport { TypeRepository } from '../repositories/type'\nimport { AbstractStorage } from '../storage'\n\nexport class TypeService extends AbstractService {\n public repository: TypeRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new TypeRepository(storage)\n }\n\n getBasePath() {\n return 'types'\n }\n}\n","import {\n ReferenceTypeId,\n Zone,\n ZoneAddLocationAction,\n ZoneChangeNameAction,\n ZoneDraft,\n ZoneRemoveLocationAction,\n ZoneSetDescriptionAction,\n ZoneSetKeyAction,\n ZoneUpdateAction,\n} from '@commercetools/platform-sdk'\nimport { Writable } from 'types'\nimport { getBaseResourceProperties } from '../helpers'\nimport { AbstractResourceRepository } from './abstract'\n\nexport class ZoneRepository extends AbstractResourceRepository {\n getTypeId(): ReferenceTypeId {\n return 'zone'\n }\n\n create(projectKey: string, draft: ZoneDraft): Zone {\n const resource: Zone = {\n ...getBaseResourceProperties(),\n key: draft.key,\n locations: draft.locations || [],\n name: draft.name,\n description: draft.description,\n }\n this.save(projectKey, resource)\n return resource\n }\n\n actions: Partial<\n Record<\n ZoneUpdateAction['action'],\n (projectKey: string, resource: Writable<Zone>, action: any) => void\n >\n > = {\n addLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneAddLocationAction\n ) => {\n resource.locations.push(location)\n },\n removeLocation: (\n projectKey: string,\n resource: Writable<Zone>,\n { location }: ZoneRemoveLocationAction\n ) => {\n resource.locations = resource.locations.filter(loc => {\n return !(loc.country == location.country && loc.state == location.state)\n })\n },\n changeName: (\n projectKey: string,\n resource: Writable<Zone>,\n { name }: ZoneChangeNameAction\n ) => {\n resource.name = name\n },\n setDescription: (\n projectKey: string,\n resource: Writable<Zone>,\n { description }: ZoneSetDescriptionAction\n ) => {\n resource.description = description\n },\n setKey: (\n projectKey: string,\n resource: Writable<Zone>,\n { key }: ZoneSetKeyAction\n ) => {\n resource.key = key\n },\n }\n}\n","import { Router } from 'express'\nimport AbstractService from './abstract'\nimport { AbstractStorage } from '../storage'\nimport { ZoneRepository } from '../repositories/zone'\n\nexport class ZoneService extends AbstractService {\n public repository: ZoneRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new ZoneRepository(storage)\n }\n\n getBasePath() {\n return 'zones'\n }\n}\n","import AbstractService from './abstract'\nimport { Request, Response, Router } from 'express'\nimport { AbstractStorage } from '../storage'\nimport { CustomerRepository } from '../repositories/customer'\n\nexport class MyCustomerService extends AbstractService {\n public repository: CustomerRepository\n\n constructor(parent: Router, storage: AbstractStorage) {\n super(parent)\n this.repository = new CustomerRepository(storage)\n }\n\n getBasePath() {\n return 'me'\n }\n\n registerRoutes(parent: Router) {\n // Overwrite this function to be able to handle /me path.\n const basePath = this.getBasePath()\n const router = Router({ mergeParams: true })\n\n this.extraRoutes(router)\n\n router.get('', this.getMe.bind(this))\n\n router.post('/signup', this.signUp.bind(this))\n\n parent.use(`/${basePath}`, router)\n }\n\n getMe(request: Request, response: Response) {\n const resource = this.repository.getMe(request.params.projectKey)\n if (!resource) {\n return response.status(404).send('Not found')\n }\n return response.status(200).send(resource)\n }\n\n signUp(request: Request, response: Response) {\n const draft = request.body\n const resource = this.repository.create(request.params.projectKey, draft)\n const result = this._expandWithId(request, resource.id)\n return response.status(this.createStatusCode).send({ customer: result })\n }\n}\n","import nock from 'nock'\nimport express, { NextFunction, Request, Response } from 'express'\nimport supertest from 'supertest'\nimport morgan from 'morgan'\nimport { AbstractStorage, InMemoryStorage } from './storage'\nimport { Services } from './types'\nimport { CommercetoolsError } from './exceptions'\nimport { OAuth2Server } from './oauth/server'\nimport { ProjectAPI } from './projectAPI'\nimport { copyHeaders } from './lib/proxy'\nimport { DEFAULT_API_HOSTNAME, DEFAULT_AUTH_HOSTNAME } from './constants'\n\n// Services\nimport { CartDiscountService } from './services/cart-discount'\nimport { CartService } from './services/cart'\nimport { CategoryServices } from './services/category'\nimport { ChannelService } from './services/channel'\nimport { CustomerGroupService } from './services/customer-group'\nimport { CustomerService } from './services/customer'\nimport { CustomObjectService } from './services/custom-object'\nimport { DiscountCodeService } from './services/discount-code'\nimport { ExtensionServices } from './services/extension'\nimport { InventoryEntryService } from './services/inventory-entry'\nimport { MyCartService } from './services/my-cart'\nimport { MyPaymentService } from './services/my-payment'\nimport { OrderService } from './services/order'\nimport { PaymentService } from './services/payment'\nimport { ProductProjectionService } from './services/product-projection'\nimport { ProductService } from './services/product'\nimport { ProductTypeService } from './services/product-type'\nimport { ProjectService } from './services/project'\nimport { ShippingMethodService } from './services/shipping-method'\nimport { ShoppingListService } from './services/shopping-list'\nimport { StateService } from './services/state'\nimport { StoreService } from './services/store'\nimport { SubscriptionService } from './services/subscription'\nimport { TaxCategoryService } from './services/tax-category'\nimport { TypeService } from './services/type'\nimport { ZoneService } from './services/zone'\nimport { MyCustomerService } from './services/my-customer'\n\nexport type CommercetoolsMockOptions = {\n validateCredentials: boolean\n enableAuthentication: boolean\n defaultProjectKey: string | undefined\n apiHost: RegExp | string\n authHost: RegExp | string\n silent: boolean\n}\n\ntype AppOptions = { silent?: boolean }\n\nconst DEFAULT_OPTIONS: CommercetoolsMockOptions = {\n enableAuthentication: false,\n validateCredentials: false,\n defaultProjectKey: undefined,\n apiHost: DEFAULT_API_HOSTNAME,\n authHost: DEFAULT_AUTH_HOSTNAME,\n silent: false,\n}\n\nexport class CommercetoolsMock {\n public app: express.Express\n public options: CommercetoolsMockOptions\n\n private _storage: AbstractStorage\n private _oauth2: OAuth2Server\n private _nockScopes: {\n auth: nock.Scope | undefined\n api: nock.Scope | undefined\n } = { auth: undefined, api: undefined }\n private _services: Services\n private _projectService?: ProjectService\n\n constructor(options: Partial<CommercetoolsMockOptions> = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options }\n this._services = {}\n this._projectService = undefined\n\n this._storage = new InMemoryStorage()\n this._oauth2 = new OAuth2Server({\n enabled: this.options.enableAuthentication,\n validate: this.options.validateCredentials,\n })\n\n this.app = this.createApp({ silent: this.options.silent })\n }\n\n start() {\n // Order is important here when the hostnames match\n this.mockAuthHost()\n this.mockApiHost()\n }\n\n stop() {\n this._nockScopes.auth?.persist(false)\n this._nockScopes.auth = undefined\n\n this._nockScopes.api?.persist(false)\n this._nockScopes.api = undefined\n }\n\n clear() {\n this._storage.clear()\n }\n\n project(projectKey?: string) {\n if (!projectKey && !this.options.defaultProjectKey) {\n throw new Error('No projectKey passed and no default set')\n }\n\n return new ProjectAPI(\n projectKey || this.options.defaultProjectKey!,\n this._services,\n this._storage\n )\n }\n\n runServer(port: number = 3000, options?: AppOptions) {\n const app = this.createApp(options)\n const server = app.listen(port, () => {\n console.log(`Mock server listening at http://localhost:${port}`)\n })\n server.keepAliveTimeout = 60 * 1000\n }\n\n private createApp(options?: AppOptions): express.Express {\n const app = express()\n\n const projectRouter = express.Router({ mergeParams: true })\n projectRouter.use(express.json())\n\n if (!options?.silent) {\n app.use(morgan('tiny'))\n }\n app.use('/oauth', this._oauth2.createRouter())\n\n // Only enable auth middleware if we have enabled this\n if (this.options.enableAuthentication) {\n app.use('/:projectKey', this._oauth2.createMiddleware(), projectRouter)\n } else {\n app.use('/:projectKey', projectRouter)\n }\n\n this._projectService = new ProjectService(projectRouter, this._storage)\n\n this._services = {\n category: new CategoryServices(projectRouter, this._storage),\n cart: new CartService(projectRouter, this._storage),\n 'cart-discount': new CartDiscountService(projectRouter, this._storage),\n customer: new CustomerService(projectRouter, this._storage),\n channel: new ChannelService(projectRouter, this._storage),\n 'customer-group': new CustomerGroupService(projectRouter, this._storage),\n 'discount-code': new DiscountCodeService(projectRouter, this._storage),\n extension: new ExtensionServices(projectRouter, this._storage),\n 'inventory-entry': new InventoryEntryService(\n projectRouter,\n this._storage\n ),\n 'key-value-document': new CustomObjectService(\n projectRouter,\n this._storage\n ),\n order: new OrderService(projectRouter, this._storage),\n payment: new PaymentService(projectRouter, this._storage),\n 'my-cart': new MyCartService(projectRouter, this._storage),\n 'my-customer': new MyCustomerService(projectRouter, this._storage),\n 'my-payment': new MyPaymentService(projectRouter, this._storage),\n 'shipping-method': new ShippingMethodService(\n projectRouter,\n this._storage\n ),\n 'product-type': new ProductTypeService(projectRouter, this._storage),\n product: new ProductService(projectRouter, this._storage),\n 'product-projection': new ProductProjectionService(\n projectRouter,\n this._storage\n ),\n 'shopping-list': new ShoppingListService(projectRouter, this._storage),\n state: new StateService(projectRouter, this._storage),\n store: new StoreService(projectRouter, this._storage),\n subscription: new SubscriptionService(projectRouter, this._storage),\n 'tax-category': new TaxCategoryService(projectRouter, this._storage),\n type: new TypeService(projectRouter, this._storage),\n zone: new ZoneService(projectRouter, this._storage),\n }\n\n app.use((err: Error, req: Request, resp: Response, next: NextFunction) => {\n if (err instanceof CommercetoolsError) {\n return resp.status(err.statusCode).send({\n statusCode: err.statusCode,\n message: err.message,\n errors: [err.info],\n })\n } else {\n console.error(err)\n return resp.status(500).send({\n error: err.message,\n })\n }\n })\n\n return app\n }\n\n private mockApiHost() {\n const app = this.app\n\n this._nockScopes.api = nock(this.options.apiHost)\n .persist()\n .get(/.*/)\n .reply(async function(uri) {\n const response = await supertest(app)\n .get(uri)\n .set(copyHeaders(this.req.headers))\n return [response.status, response.body]\n })\n .post(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n .delete(/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .delete(uri)\n .set(copyHeaders(this.req.headers))\n .send(body)\n return [response.status, response.body]\n })\n }\n\n private mockAuthHost() {\n const app = this.app\n\n this._nockScopes.auth = nock(this.options.authHost)\n .persist()\n .post(/^\\/oauth\\/.*/)\n .reply(async function(uri, body) {\n const response = await supertest(app)\n .post(uri + '?' + body)\n .set(copyHeaders(this.req.headers))\n .send()\n return [response.status, response.body]\n })\n }\n}\n"],"names":["parseExpandClause","clause","result","element","index","undefined","rest","pos","indexOf","substring","match","parseInt","haversineDistance","src","dst","RADIUS_OF_EARTH_IN_KM","toRadian","deg","Math","PI","dLat","latitude","dLon","longitude","a","sin","cos","c","atan2","sqrt","PredicateError","constructor","message","parseQueryExpression","predicate","Array","isArray","callbacks","map","item","generateMatchFunc","target","variables","every","callback","validateSymbol","val","type","char","value","charAt","line","start","column","resolveSymbol","vars","resolveValue","obj","Object","values","filter","v","getLexer","perplex","token","lexer","parser","Parser","builder","nud","t","strpos","groups","parseFloat","bp","expr","parse","terminals","led","left","expect","resolvedValue","resolvedSymbol","some","elem","invert","next","peek","length","Error","symbols","inValues","includes","other","toLowerCase","maxDistance","distance","keyword","array","build","lines","split","CommercetoolsError","info","statusCode","AbstractStorage","InMemoryStorage","projectKey","projects","key","name","countries","currencies","languages","createdAt","trialUntil","carts","countryTaxRateFallbackEnabled","deleteDaysAfterLastModification","messages","enabled","deleteDaysAfterCreation","shippingRateInputType","externalOAuth","searchIndexing","products","status","orders","version","project","addProject","newObj","JSON","stringify","forEach","_resolveResource","expand","params","reference","_resolveReference","itemRef","forProjectKey","projectStorage","resources","cart","Map","category","channel","customer","extension","order","payment","product","state","store","subscription","zone","clear","entries","assertStorage","typeId","all","from","add","set","id","resource","get","assert","getByKey","find","e","delete","query","where","filterFunc","err","code","totalResources","offset","limit","slice","count","total","results","getByResourceIdentifier","identifier","console","error","r","OAuth2Store","validate","getClientToken","clientId","clientSecret","scope","access_token","randomBytes","toString","token_type","expires_in","tokens","push","validateToken","foundToken","getBearerToken","request","authHeader","header","OAuth2Server","options","createRouter","router","express","Router","use","bodyParser","urlencoded","extended","post","tokenHandler","bind","createMiddleware","response","credentials","auth","grantType","grant_type","body","pass","send","getBaseResourceProperties","uuidv4","Date","toISOString","lastModifiedAt","ProjectAPI","services","storage","_storage","_services","parsedTypeId","service","getRepository","repository","copyHeaders","headers","validHeaders","DEFAULT_API_HOSTNAME","DEFAULT_AUTH_HOSTNAME","AbstractService","parent","registerRoutes","extraRoutes","basePath","getBasePath","mergeParams","getWithKey","getWithId","deletewithKey","deletewithId","postWithKey","postWithId","_parseParam","Number","_expandWithId","draft","create","createStatusCode","updateRequest","updatedResource","processUpdateActions","actions","resourceId","checkConcurrentModification","expectedVersion","currentVersion","AbstractRepository","modifiedResource","action","updateFunc","deepEqual","save","AbstractResourceRepository","getTypeId","current","createCustomFields","fields","typeResource","createPrice","createTypedMoney","fractionDigits","resolveStoreReference","ref","getReferenceFromResourceIdentifier","resourceIdentifier","CartDiscountRepository","setKey","setDescription","description","setValidFrom","validFrom","setValidUntil","validUntil","setValidFromAndUntil","changeSortOrder","sortOrder","changeIsActive","isActive","cartPredicate","references","requiresDiscountCode","stackingMode","transformValueDraft","money","CartDiscountService","CartRepository","addLineItem","productId","variantId","sku","quantity","variant","items","masterData","masterVariant","variants","x","alreadyAdded","lineItems","totalPrice","centAmount","calculateLineItemTotalPrice","prices","price","productKey","productSlug","slug","productType","discountedPricePerQuantity","lineItemMode","priceMode","calculateCartTotalPrice","removeLineItem","lineItemId","lineItem","shouldDelete","setBillingAddress","address","billingAddress","setCountry","country","setCustomerEmail","email","customerEmail","setCustomField","custom","setCustomType","resolvedType","setLocale","locale","setShippingAddress","shippingAddress","cartState","customLineItems","currencyCode","currency","taxMode","taxRoundingMode","taxCalculationMode","refusedGifts","origin","getActiveCart","reduce","cur","CartService","CategoryRepository","changeAssetName","assetId","assetKey","assets","asset","changeSlug","setAssetDescription","setAssetSources","sources","setMetaDescription","metaDescription","setMetaKeywords","metaKeywords","setMetaTitle","metaTitle","orderHint","externalId","ancestors","d","tags","CategoryServices","ChannelRepository","roles","ChannelService","CustomerGroupRepository","changeName","groupName","CustomerGroupService","CustomerRepository","password","Buffer","isEmailVerified","addresses","getMe","CustomerService","CustomObjectRepository","getWithContainerAndKey","container","baseProperties","CustomObjectService","createWithContainerAndKey","deleteWithContainerAndKey","DiscountCodeRepository","changeCartDiscounts","cartDiscounts","setCartPredicate","setName","setMaxApplications","maxApplications","setMaxApplicationsPerCustomer","maxApplicationsPerCustomer","applicationVersion","DiscountCodeService","ExtensionRepository","setTimeoutInMs","timeoutInMs","changeTriggers","triggers","changeDestination","destination","ExtensionServices","InventoryEntryRepository","changeQuantity","quantityOnStock","availableQuantity","setExpectedDelivery","expectedDelivery","setRestockableInDays","restockableInDays","supplyChannel","InventoryEntryService","MyCartService","activeCart","PaymentRepository","amount","addTransaction","transaction","transactions","transactionFromTransactionDraft","changeTransactionState","_projectKey","transactionId","findIndex","updatedTransaction","transitionState","stateObj","paymentStatus","amountPlanned","paymentMethodInfo","interfaceInteractions","interaction","MyPaymentService","OrderRepository","addPayment","resolvedPayment","paymentInfo","payments","changeOrderState","orderState","changePaymentState","paymentState","setOrderNumber","orderNumber","setStore","storeReference","syncInfo","lastMessageSequenceNumber","import","lineItemFromImportDraft","customLineItemFromImportDraft","taxRate","getWithOrderNumber","OrderService","importDraft","PaymentService","parseFilterExpression","filters","join","parsed","replace","ProductProjectionRepository","categories","variantFromDraft","searchKeywords","search","wherePredicate","attributes","ProductProjectionService","ProductRepository","publish","staged","hasStagedChanges","published","setAttribute","isStaged","productData","getProductData","isMasterVariant","variantIndex","getVariant","existingAttr","attr","foundVariant","ProductService","ProductTypeRepository","attributeConstraint","inputHint","isSearchable","changeLocalizedEnumValueLabel","attributeName","newValue","updateAttributeType","label","elementType","changeLabel","attributeDefinitionFromAttributeDefinitionDraft","ProductTypeService","maskSecretValue","path","parts","clone","pop","i","part","ProjectRepository","changeCurrencies","changeCountries","changeLanguages","changeMessagesEnabled","messagesEnabled","changeProductSearchIndexingEnabled","changeOrderSearchStatus","setShippingRateInputType","setExternalOAuth","changeCountryTaxRateFallbackEnabled","changeCartsConfiguration","cartsConfiguration","data","getProject","masked","saveProject","ProjectService","ShippingMethodRepository","shippingRates","_transformShippingRate","rate","freeAbove","tiers","addShippingRate","shippingRate","zoneRates","zoneRate","removeShippingRate","otherRate","addZone","zoneReference","removeZone","setLocalizedDescription","localizedDescription","setPredicate","changeIsDefault","isDefault","taxCategory","z","_transformZoneRateDraft","ShippingMethodService","ShoppingListRepository","textLineItems","addedAt","ShoppingListService","StateRepository","changeKey","setRoles","builtIn","initial","transitions","StateService","StoreRepository","setDistributionChannels","distributionChannels","transformChannels","setLanguages","supplyChannels","channels","StoreService","SubscriptionRepository","queueURL","URL","queueUrl","accountId","pathname","dest","region","accessKey","changes","format","SubscriptionService","TaxCategoryRepository","addTaxRate","rates","taxRateFromTaxRateDraft","removeTaxRate","taxRateId","replaceTaxRate","taxRateObj","TaxCategoryService","TypeRepository","addFieldDefinition","fieldDefinition","fieldDefinitions","removeFieldDefinition","fieldName","f","changeFieldDefinitionOrder","fieldNames","field","addEnumValue","changeEnumValueLabel","resourceTypeIds","TypeService","ZoneRepository","addLocation","location","locations","removeLocation","loc","ZoneService","MyCustomerService","signUp","DEFAULT_OPTIONS","enableAuthentication","validateCredentials","defaultProjectKey","apiHost","authHost","silent","CommercetoolsMock","api","_projectService","_oauth2","app","createApp","mockAuthHost","mockApiHost","stop","_nockScopes","persist","runServer","port","server","listen","log","keepAliveTimeout","projectRouter","json","morgan","req","resp","errors","nock","reply","uri","supertest"],"mappings":";;;;;;;;;;;;;AAcO,MAAMA,iBAAiB,GAAIC,MAAD;EAC/B,MAAMC,MAAM,GAAiB;IAC3BC,OAAO,EAAEF,MADkB;IAE3BG,KAAK,EAAEC,SAFoB;IAG3BC,IAAI,EAAED;GAHR;EAMA,MAAME,GAAG,GAAGN,MAAM,CAACO,OAAP,CAAe,GAAf,CAAZ;;EACA,IAAID,GAAG,GAAG,CAAV,EAAa;IACXL,MAAM,CAACC,OAAP,GAAiBF,MAAM,CAACQ,SAAP,CAAiB,CAAjB,EAAoBF,GAApB,CAAjB;IACAL,MAAM,CAACI,IAAP,GAAcL,MAAM,CAACQ,SAAP,CAAiBF,GAAG,GAAG,CAAvB,CAAd;;;EAGF,MAAMG,KAAK,GAAGR,MAAM,CAACC,OAAP,CAAeO,KAAf,CAAqB,aAArB,CAAd;;EACA,IAAIA,KAAJ,EAAW;IACTR,MAAM,CAACE,KAAP,GAAeM,KAAK,CAAC,CAAD,CAAL,KAAa,GAAb,GAAmB,GAAnB,GAAyBC,QAAQ,CAACD,KAAK,CAAC,CAAD,CAAN,EAAW,EAAX,CAAhD;IACAR,MAAM,CAACC,OAAP,GAAiBD,MAAM,CAACC,OAAP,CAAeM,SAAf,CAAyB,CAAzB,EAA4BC,KAAK,CAACN,KAAlC,CAAjB;;;EAEF,OAAOF,MAAP;AACD,CAnBM;;ACTP;;;AAGA,AAAO,MAAMU,iBAAiB,GAAG,CAACC,GAAD,EAAgBC,GAAhB;EAC/B,MAAMC,qBAAqB,GAAG,IAA9B;;EACA,MAAMC,QAAQ,GAAIC,GAAD,IAAiBA,GAAG,IAAIC,IAAI,CAACC,EAAL,GAAU,GAAd,CAArC;;EAEA,MAAMC,IAAI,GAAGJ,QAAQ,CAACF,GAAG,CAACO,QAAJ,GAAeR,GAAG,CAACQ,QAApB,CAArB;EACA,MAAMC,IAAI,GAAGN,QAAQ,CAACF,GAAG,CAACS,SAAJ,GAAgBV,GAAG,CAACU,SAArB,CAArB;EAEA,IAAIC,CAAC,GACHN,IAAI,CAACO,GAAL,CAASL,IAAI,GAAG,CAAhB,IAAqBF,IAAI,CAACO,GAAL,CAASL,IAAI,GAAG,CAAhB,CAArB,GACAF,IAAI,CAACQ,GAAL,CAASV,QAAQ,CAACH,GAAG,CAACQ,QAAL,CAAjB,IACEH,IAAI,CAACQ,GAAL,CAASV,QAAQ,CAACF,GAAG,CAACO,QAAL,CAAjB,CADF,GAEEH,IAAI,CAACO,GAAL,CAASH,IAAI,GAAG,CAAhB,CAFF,GAGEJ,IAAI,CAACO,GAAL,CAASH,IAAI,GAAG,CAAhB,CALJ;EAMA,IAAIK,CAAC,GAAG,IAAIT,IAAI,CAACU,KAAL,CAAWV,IAAI,CAACW,IAAL,CAAUL,CAAV,CAAX,EAAyBN,IAAI,CAACW,IAAL,CAAU,IAAIL,CAAd,CAAzB,CAAZ;EACA,OAAOT,qBAAqB,GAAGY,CAAxB,GAA4B,IAAnC;AACD,CAfM;;ACRP;;;;;;AAMA,MAIaG;EAGXC,YAAYC;IACV,KAAKA,OAAL,GAAeA,OAAf;;;;AASJ,AAoBO,MAAMC,oBAAoB,GAC/BC,SADkC;EAGlC,IAAIC,KAAK,CAACC,OAAN,CAAcF,SAAd,CAAJ,EAA8B;IAC5B,MAAMG,SAAS,GAAGH,SAAS,CAACI,GAAV,CAAcC,IAAI,IAAIC,iBAAiB,CAACD,IAAD,CAAvC,CAAlB;IACA,OAAO,CAACE,MAAD,EAAcC,SAAd;MACL,OAAOL,SAAS,CAACM,KAAV,CAAgBC,QAAQ,IAAIA,QAAQ,CAACH,MAAD,EAASC,SAAT,CAApC,CAAP;KADF;GAFF,MAKO;IACL,OAAOF,iBAAiB,CAACN,SAAD,CAAxB;;AAEH,CAXM;;AAmBP,MAAMW,cAAc,GAAIC,GAAD;EACrB,IAAI,CAACA,GAAG,CAACC,IAAT,EAAe;IACb,MAAM,IAAIjB,cAAJ,CAAmB,gBAAnB,CAAN;;;EAGF,IAAIgB,GAAG,CAACC,IAAJ,KAAa,YAAjB,EAA+B;IAAA;;IAC7B,MAAMC,IAAI,GAAGF,GAAG,CAACG,KAAJ,CAAUC,MAAV,CAAiB,CAAjB,CAAb;IACA,MAAMC,IAAI,eAAGL,GAAG,CAACvC,GAAP,qBAAG,SAAS6C,KAAT,CAAeD,IAA5B;IACA,MAAME,MAAM,gBAAGP,GAAG,CAACvC,GAAP,qBAAG,UAAS6C,KAAT,CAAeC,MAA9B;IAEA,MAAM,IAAIvB,cAAJ,mBACckB,4DAA4DG,gBAAgBE,SAD1F,CAAN;;AAIH,CAdD;;AAgBA,MAAMC,aAAa,GAAG,CAACR,GAAD,EAAcS,IAAd;EACpB,IAAIT,GAAG,CAACC,IAAJ,KAAa,KAAjB,EAAwB;IACtB,IAAI,EAAED,GAAG,CAACG,KAAJ,IAAaM,IAAf,CAAJ,EAA0B;MACxB,MAAM,IAAIzB,cAAJ,gCAAkDgB,GAAG,CAACG,OAAtD,CAAN;;;IAEF,OAAOM,IAAI,CAACT,GAAG,CAACG,KAAL,CAAX;;;EAGF,OAAOH,GAAG,CAACG,KAAX;AACD,CATD;;AAWA,MAAMO,YAAY,GAAG,CAACC,GAAD,EAAWX,GAAX;EACnB,IAAIA,GAAG,CAACC,IAAJ,KAAa,YAAjB,EAA+B;IAC7B,MAAM,IAAIjB,cAAJ,CAAmB,gBAAnB,CAAN;;;EAGF,IAAI,EAAEgB,GAAG,CAACG,KAAJ,IAAaQ,GAAf,CAAJ,EAAyB;IACvB,IAAItB,KAAK,CAACC,OAAN,CAAcqB,GAAd,CAAJ,EAAwB;MACtB,OAAOC,MAAM,CAACC,MAAP,CAAcF,GAAd,EACJG,MADI,CACGC,CAAC,IAAIf,GAAG,CAACG,KAAJ,IAAaY,CADrB,EAEJvB,GAFI,CAEAuB,CAAC,IAAIA,CAAC,CAACf,GAAG,CAACG,KAAL,CAFN,CAAP;;;IAIF,MAAM,IAAInB,cAAJ,eAAiCgB,GAAG,CAACG,wBAArC,CAAN;;;EAGF,OAAOQ,GAAG,CAACX,GAAG,CAACG,KAAL,CAAV;AACD,CAfD;;AAiBA,MAAMa,QAAQ,GAAIb,KAAD;EACf,OAAO,IAAIc,OAAJ,CAAYd,KAAZ,EAEJe,KAFI,CAEE,KAFF,EAES,qBAFT,EAGJA,KAHI,CAGE,IAHF,EAGQ,oBAHR,EAIJA,KAJI,CAIE,KAJF,EAIS,qBAJT,EAMJA,KANI,CAME,QANF,EAMY,wBANZ,EAOJA,KAPI,CAOE,IAPF,EAOQ,oBAPR,EAQJA,KARI,CAQE,qBARF,EAQyB,yCARzB,EASJA,KATI,CASE,UATF,EASc,0BATd,EAUJA,KAVI,CAUE,KAVF,EAUS,qBAVT,EAWJA,KAXI,CAWE,KAXF,EAWS,qBAXT,EAYJA,KAZI,CAYE,OAZF,EAYW,uBAZX,EAaJA,KAbI,CAaE,IAbF,EAaQ,oBAbR,EAcJA,KAdI,CAcE,SAdF,EAca,yBAdb,EAgBJA,KAhBI,CAgBE,OAhBF,EAgBW,UAhBX,EAiBJA,KAjBI,CAiBE,KAjBF,EAiBS,KAjBT,EAkBJA,KAlBI,CAkBE,UAlBF,EAkBc,mBAlBd,EAmBJA,KAnBI,CAmBE,YAnBF,EAmBgB,gBAnBhB,EAoBJA,KApBI,CAoBE,QApBF,EAoBY,qBApBZ,EAqBJA,KArBI,CAqBE,QArBF,EAqBY,qBArBZ,EAuBJA,KAvBI,CAuBE,OAvBF,EAuBW,GAvBX,EAwBJA,KAxBI,CAwBE,GAxBF,EAwBO,GAxBP,EAyBJA,KAzBI,CAyBE,GAzBF,EAyBO,GAzBP,EA0BJA,KA1BI,CA0BE,IA1BF,EA0BQ,IA1BR,EA2BJA,KA3BI,CA2BE,IA3BF,EA2BQ,IA3BR,EA4BJA,KA5BI,CA4BE,GA5BF,EA4BO,GA5BP,EA6BJA,KA7BI,CA6BE,GA7BF,EA6BO,GA7BP,EA8BJA,KA9BI,CA8BE,IA9BF,EA8BQ,IA9BR,EA+BJA,KA/BI,CA+BE,GA/BF,EA+BO,GA/BP,EAgCJA,KAhCI,CAgCE,GAhCF,EAgCO,GAhCP,EAiCJA,KAjCI,CAiCE,IAjCF,EAiCQ,KAjCR,EAiCe,IAjCf,CAAP;AAkCD,CAnCD;AAqCA;;;;;;;;;AAOA,MAAMxB,iBAAiB,GAAIN,SAAD;EACxB,MAAM+B,KAAK,GAAGH,QAAQ,CAAC5B,SAAD,CAAtB;EACA,MAAMgC,MAAM,GAAG,IAAIC,MAAJ,CAAWF,KAAX,EACZG,OADY,GAEZC,GAFY,CAER,YAFQ,EAEM,GAFN,EAEWC,CAAC;IACvB,OAAO;MACLvB,IAAI,EAAE,YADD;MAELE,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQtD,KAFV;MAGLH,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAHP;GAHW,EASZF,GATY,CASR,UATQ,EASI,GATJ,EASSC,CAAC;IACrB,OAAO;MACLvB,IAAI,EAAE,KADD;;MAGLE,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQQ,MAAR,CAAe,CAAf,CAHF;MAILjE,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAJP;GAVW,EAiBZF,GAjBY,CAiBR,QAjBQ,EAiBE,GAjBF,EAiBOC,CAAC;IACnB,OAAO;MACLvB,IAAI,EAAE,QADD;;MAGLE,KAAK,EAAEqB,CAAC,CAACN,KAAF,CAAQQ,MAAR,CAAe,CAAf,CAHF;MAILjE,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAJP;GAlBW,EAyBZF,GAzBY,CAyBR,KAzBQ,EAyBD,CAzBC,EAyBEC,CAAC;IACd,OAAO;MACLvB,IAAI,EAAE,KADD;MAELE,KAAK,EAAEtC,QAAQ,CAAC2D,CAAC,CAACN,KAAF,CAAQtD,KAAT,EAAgB,EAAhB,CAFV;MAGLH,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAHP;GA1BW,EAgCZF,GAhCY,CAgCR,OAhCQ,EAgCC,CAhCD,EAgCIC,CAAC;IAChB,OAAO;MACLvB,IAAI,EAAE,OADD;MAELE,KAAK,EAAEwB,UAAU,CAACH,CAAC,CAACN,KAAF,CAAQtD,KAAT,CAFZ;MAGLH,GAAG,EAAE+D,CAAC,CAACN,KAAF,CAAQO,MAAR;KAHP;GAjCW,EAuCZF,GAvCY,CAuCR,KAvCQ,EAuCD,GAvCC,EAuCI,CAAC;IAAEK;GAAH;IACf,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA,OAAQjB,GAAD;MACL,OAAO,CAACkB,IAAI,CAAClB,GAAD,CAAZ;KADF;GAzCW,EA6CZY,GA7CY,CA6CR,OA7CQ,EA6CC,EA7CD,EA6CK,CAAC;IAAEK;GAAH;IAChB,OAAO,OAAP;GA9CW,EAgDZL,GAhDY,CAgDR,SAhDQ,EAgDG,EAhDH,EAgDO,CAAC;IAAEK;GAAH;IAClB,OAAO,SAAP;GAjDW,EAoDZI,GApDY,CAoDR,KApDQ,EAoDD,CApDC,EAoDE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA,OAAQjB,GAAD;MACL,OAAOsB,IAAI,CAACtB,GAAD,CAAJ,IAAakB,IAAI,CAAClB,GAAD,CAAxB;KADF;GAtDW,EA0DZqB,GA1DY,CA0DR,IA1DQ,EA0DF,CA1DE,EA0DC,CAAC;IAAEC,IAAF;IAAQf,KAAR;IAAeU;GAAhB;IACZ,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA,OAAO,CAACjB,GAAD,EAAWF,IAAX;MACL,OAAOwB,IAAI,CAACtB,GAAD,EAAMF,IAAN,CAAJ,IAAmBoB,IAAI,CAAClB,GAAD,EAAMF,IAAN,CAA9B;KADF;GA5DW,EAgEZuB,GAhEY,CAgER,OAhEQ,EAgEC,CAhED,EAgEI,CAAC;IAAEC,IAAF;IAAQf,KAAR;IAAeU;GAAhB;IACf,MAAMC,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAlB;;IACA,IAAIvC,KAAK,CAACC,OAAN,CAAcuC,IAAd,CAAJ,EAAyB;MACvB,OAAO,CAACI,IAAD,EAAO,GAAGJ,IAAV,CAAP;KADF,MAEO;MACL,OAAO,CAACI,IAAD,EAAOJ,IAAP,CAAP;;GArES,EAwEZN,GAxEY,CAwER,GAxEQ,EAwEH,GAxEG,EAwEEC,CAAC;IACd,MAAMK,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAAC,GAAD;KAA1B,CAAlB;IACA,OAAOF,IAAP;GA1EW,EA4EZG,GA5EY,CA4ER,GA5EQ,EA4EH,GA5EG,EA4EE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,EAAb;IACAX,KAAK,CAACe,MAAN,CAAa,GAAb;IACA,OAAO,CAACvB,GAAD,EAAWF,IAAX;MACL,MAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;;MACA,IAAI9B,KAAJ,EAAW;QACT,OAAO0B,IAAI,CAAC1B,KAAD,CAAX;;;MAEF,OAAO,KAAP;KALF;GA/EW,EAuFZyB,EAvFY,CAuFT,GAvFS,EAuFJ,CAvFI,EAwFZI,GAxFY,CAwFR,GAxFQ,EAwFH,EAxFG,EAwFC,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACZ,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,MAAM0B,aAAa,GAAGzB,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAlC;MACA,MAAMG,cAAc,GAAG5B,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAApC;;MACA,IAAIpB,KAAK,CAACC,OAAN,CAAc6C,aAAd,CAAJ,EAAkC;QAChC,OAAO,CAAC,CAACA,aAAa,CAACE,IAAd,CAAmBC,IAAI,IAAIA,IAAI,KAAKF,cAApC,CAAT;;;MAEF,OAAOD,aAAa,KAAKC,cAAzB;KANF;GA5FW,EAqGZJ,GArGY,CAqGR,IArGQ,EAqGF,EArGE,EAqGE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,KAA4BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAAhD;KADF;GAzGW,EA6GZuB,GA7GY,CA6GR,GA7GQ,EA6GH,EA7GG,EA6GC,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACZ,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,GAA0BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA9C;KADF;GAjHW,EAqHZuB,GArHY,CAqHR,IArHQ,EAqHF,EArHE,EAqHE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,IAA2BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA/C;KADF;GAzHW,EA6HZuB,GA7HY,CA6HR,GA7HQ,EA6HH,EA7HG,EA6HC,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACZ,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,GAA0BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA9C;KADF;GAjIW,EAqIZuB,GArIY,CAqIR,IArIQ,EAqIF,EArIE,EAqIE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,OAAOC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAZ,IAA2BzB,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA/C;KADF;GAzIW,EA6IZuB,GA7IY,CA6IR,IA7IQ,EA6IF,EA7IE,EA6IE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,IAAIW,MAAM,GAAG,KAAb;;IAGA,MAAMC,IAAI,GAAGrB,KAAK,CAACsB,IAAN,EAAb;;IACA,IAAID,IAAI,CAACvC,IAAL,KAAc,KAAlB,EAAyB;MACvBsC,MAAM,GAAG,IAAT;MACApB,KAAK,CAACqB,IAAN;;;IAGF,MAAMX,IAAI,GAAQT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAlB;;IAEA,QAAQC,IAAR;MACE,KAAK,OAAL;QAAc;UACZ,IAAI,CAACU,MAAL,EAAa;YACX,OAAO,CAAC5B,GAAD,EAAWF,IAAX;cACL,MAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;cACA,OAAOjC,GAAG,CAAC0C,MAAJ,KAAe,CAAtB;aAFF;WADF,MAKO;YACL,OAAO,CAAC/B,GAAD,EAAWF,IAAX;cACL,MAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;cACA,OAAOjC,GAAG,CAAC0C,MAAJ,KAAe,CAAtB;aAFF;;;;MAMJ,KAAK,SAAL;QAAgB;UACd,IAAI,CAACH,MAAL,EAAa;YACX,OAAO,CAAC5B,GAAD,EAAWF,IAAX;cACL,MAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;cACA,OAAOjC,GAAG,KAAKzC,SAAf;aAFF;WADF,MAKO;YACL,OAAO,CAACoD,GAAD,EAAWF,IAAX;cACL,MAAMT,GAAG,GAAGU,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAAxB;cACA,OAAOjC,GAAG,KAAKzC,SAAf;aAFF;;;;MAMJ;QAAS;UACP,MAAM,IAAIoF,KAAJ,CAAU,YAAV,CAAN;;;GArLO,EAyLZX,GAzLY,CAyLR,IAzLQ,EAyLF,EAzLE,EAyLE,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACb,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA,OAAO,CAACjB,GAAD,EAAWF,IAAX;MACL,IAAImC,OAAO,GAAGf,IAAd;;MACA,IAAI,CAACxC,KAAK,CAACC,OAAN,CAAcsD,OAAd,CAAL,EAA6B;QAC3BA,OAAO,GAAG,CAACf,IAAD,CAAV;;;MAGF,MAAMgB,QAAQ,GAAGD,OAAO,CAACpD,GAAR,CAAaC,IAAD,IAC3Be,aAAa,CAACf,IAAD,EAAOgB,IAAP,CADE,CAAjB;MAGA,OAAOoC,QAAQ,CAACC,QAAT,CAAkBpC,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA9B,CAAP;KATF;GA3LW,EAuMZD,GAvMY,CAuMR,qBAvMQ,EAuMe,EAvMf,EAuMmB,CAAC;IAAEC,IAAF;IAAQL;GAAT;IAC9B,MAAMC,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAACH,EAAE,GAAG,CAAN;KAA1B,CAAb;IACA7B,cAAc,CAAC8B,IAAD,CAAd;IAEA,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,MAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;MACA,MAAMc,KAAK,GAAGvC,aAAa,CAACqB,IAAD,EAAOpB,IAAP,CAA3B;;MAEA,IAAI,OAAON,KAAP,IAAgB,QAApB,EAA8B;QAC5B,MAAM,IAAInB,cAAJ,eACUiD,IAAI,CAAC9B,0CADf,CAAN;;;MAIF,OAAOA,KAAK,CAAC6C,WAAN,OAAwBD,KAAK,CAACC,WAAN,EAA/B;KATF;GA3MW,EAuNZhB,GAvNY,CAuNR,QAvNQ,EAuNE,EAvNF,EAuNM,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACjB,MAAM3B,IAAI,GAAGkB,KAAK,CAACqB,IAAN,EAAb;;IAEA,IAAIvC,IAAI,CAACrC,KAAL,KAAe,QAAnB,EAA6B;MAC3B,MAAM,IAAIoB,cAAJ,mBACciB,IAAI,CAACrC,yBADnB,CAAN;;;IAKFuD,KAAK,CAACe,MAAN,CAAa,GAAb;IACA,MAAML,IAAI,GAAGT,MAAM,CAACU,KAAP,CAAa;MAAEC,SAAS,EAAE,CAAC,GAAD;KAA1B,CAAb;IAEA,OAAO,CAACpB,GAAD,EAAWF,IAAX;MACL,MAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;MACA,IAAI,CAAC9B,KAAL,EAAY,OAAO,KAAP;MAEZ,MAAM8C,WAAW,GAAGzC,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV,CAAjC;MACA,MAAMyC,QAAQ,GAAGpF,iBAAiB,CAChC;QACEW,SAAS,EAAE0B,KAAK,CAAC,CAAD,CADlB;QAEE5B,QAAQ,EAAE4B,KAAK,CAAC,CAAD;OAHe,EAKhC;QACE1B,SAAS,EAAE+B,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV,CAD1B;QAEElC,QAAQ,EAAEiC,aAAa,CAACqB,IAAI,CAAC,CAAD,CAAL,EAAUpB,IAAV;OAPO,CAAlC;MAUA,OAAOyC,QAAQ,IAAID,WAAnB;KAfF;GAnOW,EAqPZjB,GArPY,CAqPR,UArPQ,EAqPI,EArPJ,EAqPQ,CAAC;IAAEC,IAAF;IAAQL;GAAT;IACnB,MAAMuB,OAAO,GAAGhC,KAAK,CAACqB,IAAN,EAAhB;IAEA,IAAIX,IAAI,GAAGT,MAAM,CAACU,KAAP,EAAX;;IACA,IAAI,CAACzC,KAAK,CAACC,OAAN,CAAcuC,IAAd,CAAL,EAA0B;MACxBA,IAAI,GAAG,CAACA,IAAD,CAAP;;;IAGF,OAAO,CAAClB,GAAD,EAAWF,IAAX;MACL,MAAMN,KAAK,GAAGO,YAAY,CAACC,GAAD,EAAMsB,IAAN,CAA1B;;MAEA,IAAI,CAAC5C,KAAK,CAACC,OAAN,CAAca,KAAd,CAAL,EAA2B;QACzB,MAAM,IAAInB,cAAJ,eACUiD,IAAI,CAAC9B,0CADf,CAAN;;;MAKF,MAAMiD,KAAK,GAAGvB,IAAI,CAACrC,GAAL,CAAUC,IAAD,IAAkBe,aAAa,CAACf,IAAD,EAAOgB,IAAP,CAAxC,CAAd;;MACA,IAAI0C,OAAO,CAAClD,IAAR,KAAiB,KAArB,EAA4B;QAC1B,OAAOmD,KAAK,CAACvD,KAAN,CAAaJ,IAAD,IAAeU,KAAK,CAAC2C,QAAN,CAAerD,IAAf,CAA3B,CAAP;OADF,MAEO;QACL,OAAO2D,KAAK,CAACf,IAAN,CAAY5C,IAAD,IAAeU,KAAK,CAAC2C,QAAN,CAAerD,IAAf,CAA1B,CAAP;;KAbJ;GA7PW,EA+QZ4D,KA/QY,EAAf;EAiRA,MAAMjG,MAAM,GAAGgE,MAAM,CAACU,KAAP,EAAf;;EAEA,IAAI,OAAO1E,MAAP,KAAkB,UAAtB,EAAkC;IAChC,MAAMkG,KAAK,GAAGlE,SAAS,CAACmE,KAAV,CAAgB,IAAhB,CAAd;IACA,MAAMhD,MAAM,GAAG+C,KAAK,CAACA,KAAK,CAACZ,MAAN,GAAe,CAAhB,CAAL,CAAwBA,MAAvC;IAEA,MAAM,IAAI1D,cAAJ,sEACJ,uDAAA,aAEYsE,KAAK,CAACZ,kBAAkBnC,SAHhC,CAAN;;;EAMF,OAAOnD,MAAP;AACD,CAhSD;;MClJaoG,2BAAgDb;EAI3D1D,YAAYwE,MAASC,UAAU,GAAG;IAChC,MAAMD,IAAI,CAACvE,OAAX;IACA,KAAKuE,IAAL,GAAYA,IAAZ;IACA,KAAKC,UAAL,GAAkBA,UAAU,IAAI,GAAhC;;;;;MCyCkBC;AAwDtB,MAAaC,wBAAwBD;EAArC1E;;IACY,cAAA,GAEN,EAFM;IAIA,aAAA,GAEN,EAFM;;IA0NV,eAAA,GAAc4E,UAAD;MACX,IAAI,CAAC,KAAKC,QAAL,CAAcD,UAAd,CAAL,EAAgC;QAC9B,KAAKC,QAAL,CAAcD,UAAd,IAA4B;UAC1BE,GAAG,EAAEF,UADqB;UAE1BG,IAAI,EAAE,EAFoB;UAG1BC,SAAS,EAAE,EAHe;UAI1BC,UAAU,EAAE,EAJc;UAK1BC,SAAS,EAAE,EALe;UAM1BC,SAAS,EAAE,0BANe;UAO1BC,UAAU,EAAE,SAPc;UAQ1BC,KAAK,EAAE;YACLC,6BAA6B,EAAE,KAD1B;YAELC,+BAA+B,EAAE;WAVT;UAY1BC,QAAQ,EAAE;YAAEC,OAAO,EAAE,KAAX;YAAkBC,uBAAuB,EAAE;WAZ3B;UAa1BC,qBAAqB,EAAErH,SAbG;UAc1BsH,aAAa,EAAEtH,SAdW;UAe1BuH,cAAc,EAAE;YACdC,QAAQ,EAAE;cACRC,MAAM,EAAE;aAFI;YAIdC,MAAM,EAAE;cACND,MAAM,EAAE;;WApBc;UAuB1BE,OAAO,EAAE;SAvBX;;;MA0BF,OAAO,KAAKpB,QAAL,CAAcD,UAAd,CAAP;KA5BF;;IA+BA,gBAAA,GAAesB,OAAD;MACZ,KAAKrB,QAAL,CAAcqB,OAAO,CAACpB,GAAtB,IAA6BoB,OAA7B;MACA,OAAOA,OAAP;KAFF;;IAKA,eAAA,GAActB,UAAD;MACX,OAAO,KAAKuB,UAAL,CAAgBvB,UAAhB,CAAP;KADF;;IAIQ,WAAA,GAAS,CACfA,UADe,EAEflD,GAFe,EAGfxD,MAHe;MAKf,IAAI,CAACA,MAAL,EAAa,OAAOwD,GAAP;MACb,MAAM0E,MAAM,GAAGC,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAe5E,GAAf,CAAX,CAAf;;MACA,IAAItB,KAAK,CAACC,OAAN,CAAcnC,MAAd,CAAJ,EAA2B;QACzBA,MAAM,CAACqI,OAAP,CAAe3G,CAAC;UACd,KAAK4G,gBAAL,CAAsB5B,UAAtB,EAAkCwB,MAAlC,EAA0CxG,CAA1C;SADF;OADF,MAIO;QACL,KAAK4G,gBAAL,CAAsB5B,UAAtB,EAAkCwB,MAAlC,EAA0ClI,MAA1C;;;MAEF,OAAOkI,MAAP;KAdM;;IAiBA,qBAAA,GAAmB,CAACxB,UAAD,EAAqBlD,GAArB,EAA+B+E,MAA/B;MACzB,MAAMC,MAAM,GAAGzI,iBAAiB,CAACwI,MAAD,CAAhC;;MAEA,IAAI,CAACC,MAAM,CAACrI,KAAZ,EAAmB;QACjB,MAAMsI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAArB;;QACA,IAAIuI,SAAS,KAAKrI,SAAlB,EAA6B;UAC3B;;;QAEF,KAAKsI,iBAAL,CAAuBhC,UAAvB,EAAmC+B,SAAnC,EAA8CD,MAAM,CAACnI,IAArD;OALF,MAMO,IAAImI,MAAM,CAACrI,KAAP,KAAiB,GAArB,EAA0B;QAC/B,MAAMsI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAArB;QACA,IAAIuI,SAAS,KAAKrI,SAAd,IAA2B,CAAC8B,KAAK,CAACC,OAAN,CAAcsG,SAAd,CAAhC,EAA0D;QAC1DA,SAAS,CAACJ,OAAV,CAAmBM,OAAD;UAChB,KAAKD,iBAAL,CAAuBhC,UAAvB,EAAmCiC,OAAnC,EAA4CH,MAAM,CAACnI,IAAnD;SADF;OAHK,MAMA;QACL,MAAMoI,SAAS,GAAGjF,GAAG,CAACgF,MAAM,CAACtI,OAAR,CAAH,CAAoBsI,MAAM,CAACrI,KAA3B,CAAlB;QACA,IAAIsI,SAAS,KAAKrI,SAAlB,EAA6B;;QAC7B,KAAKsI,iBAAL,CAAuBhC,UAAvB,EAAmC+B,SAAnC,EAA8CD,MAAM,CAACnI,IAArD;;KAlBI;;;EA/QAuI,aAAa,CAAClC,UAAD;IACnB,KAAKuB,UAAL,CAAgBvB,UAAhB;IAEA,IAAImC,cAAc,GAAG,KAAKC,SAAL,CAAepC,UAAf,CAArB;;IACA,IAAI,CAACmC,cAAL,EAAqB;MACnBA,cAAc,GAAG,KAAKC,SAAL,CAAepC,UAAf,IAA6B;QAC5CqC,IAAI,EAAE,IAAIC,GAAJ,EADsC;QAE5C,iBAAiB,IAAIA,GAAJ,EAF2B;QAG5CC,QAAQ,EAAE,IAAID,GAAJ,EAHkC;QAI5CE,OAAO,EAAE,IAAIF,GAAJ,EAJmC;QAK5CG,QAAQ,EAAE,IAAIH,GAAJ,EALkC;QAM5C,kBAAkB,IAAIA,GAAJ,EAN0B;QAO5C,iBAAiB,IAAIA,GAAJ,EAP2B;QAQ5CI,SAAS,EAAE,IAAIJ,GAAJ,EARiC;QAS5C,mBAAmB,IAAIA,GAAJ,EATyB;QAU5C,sBAAsB,IAAIA,GAAJ,EAVsB;QAW5CK,KAAK,EAAE,IAAIL,GAAJ,EAXqC;QAY5CM,OAAO,EAAE,IAAIN,GAAJ,EAZmC;QAa5C,gBAAgB,IAAIA,GAAJ,EAb4B;QAc5CO,OAAO,EAAE,IAAIP,GAAJ,EAdmC;QAe5C,qBAAqB,IAAIA,GAAJ,EAfuB;QAgB5C,sBAAsB,IAAIA,GAAJ,EAhBsB;QAiB5C,mBAAmB,IAAIA,GAAJ,EAjByB;QAkB5CQ,KAAK,EAAE,IAAIR,GAAJ,EAlBqC;QAmB5CS,KAAK,EAAE,IAAIT,GAAJ,EAnBqC;QAoB5C,iBAAiB,IAAIA,GAAJ,EApB2B;QAqB5CU,YAAY,EAAE,IAAIV,GAAJ,EArB8B;QAsB5C,gBAAgB,IAAIA,GAAJ,EAtB4B;QAuB5ClG,IAAI,EAAE,IAAIkG,GAAJ,EAvBsC;QAwB5CW,IAAI,EAAE,IAAIX,GAAJ;OAxBR;;;IA2BF,OAAOH,cAAP;;;EAGFe,KAAK;IACH,KAAK,MAAM,GAAGf,cAAH,CAAX,IAAiCpF,MAAM,CAACoG,OAAP,CAAe,KAAKf,SAApB,CAAjC,EAAiE;MAC/D,KAAK,MAAM,GAAG9F,KAAH,CAAX,IAAwBS,MAAM,CAACoG,OAAP,CAAehB,cAAf,CAAxB,EAAwD;QACtD7F,KAAK,QAAL,YAAAA,KAAK,CAAE4G,KAAP;;;;;EAKNE,aAAa,CAACC,MAAD;;EAEbC,GAAG,CAACtD,UAAD,EAAqBqD,MAArB;IACD,MAAMN,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;IACA,IAAIN,KAAJ,EAAW;MACT,OAAOvH,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAP;;;IAEF,OAAO,EAAP;;;EAGFwG,GAAG,CACDxD,UADC,EAEDqD,MAFC,EAGDvG,GAHC,EAIDgF,SAAoB,EAJnB;;;IAMD,8BAAKI,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,4CAAwCI,GAAxC,CAA4C3G,GAAG,CAAC4G,EAAhD,EAAoD5G,GAApD;IAEA,MAAM6G,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqBqD,MAArB,EAA6BvG,GAAG,CAAC4G,EAAjC,EAAqC5B,MAArC,CAAjB;IACA+B,MAAM,CAACF,QAAD,sBAA+BN,kBAAkBvG,GAAG,CAAC4G,gBAArD,CAAN;IACA,OAAOC,QAAP;;;EAGFC,GAAG,CACD5D,UADC,EAEDqD,MAFC,EAGDK,EAHC,EAID5B,SAAoB,EAJnB;;;IAMD,MAAM6B,QAAQ,6BAAG,KAAKzB,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAH,qBAAG,uBAAwCO,GAAxC,CAA4CF,EAA5C,CAAjB;;IACA,IAAIC,QAAJ,EAAc;MACZ,OAAO,KAAK9B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;;;IAMF,OAAO,IAAP;;;EAGFiC,QAAQ,CACN9D,UADM,EAENqD,MAFM,EAGNnD,GAHM,EAIN4B,SAAoB,EAJd;IAMN,MAAMiB,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;IACA,IAAI,CAACN,KAAL,EAAY;MACV,MAAM,IAAIjE,KAAJ,CAAU,SAAV,CAAN;;;IAGF,MAAMsD,SAAS,GAAU5G,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAzB;IACA,MAAM2G,QAAQ,GAAGvB,SAAS,CAAC2B,IAAV,CAAeC,CAAC,IAAIA,CAAC,CAAC9D,GAAF,KAAUA,GAA9B,CAAjB;;IACA,IAAIyD,QAAJ,EAAc;MACZ,OAAO,KAAK9B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;;;IAMF,OAAO,IAAP;;;EAGFoC,MAAM,CACJjE,UADI,EAEJqD,MAFI,EAGJK,EAHI,EAIJ5B,SAAoB,EAJhB;IAMJ,MAAM6B,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqBqD,MAArB,EAA6BK,EAA7B,CAAjB;;IAEA,IAAIC,QAAJ,EAAc;MAAA;;MACZ,+BAAKzB,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,6CAAwCY,MAAxC,CAA+CP,EAA/C;MACA,OAAO,KAAK7B,MAAL,CACL7B,UADK,EAEL2D,QAFK,EAGL7B,MAAM,CAACD,MAHF,CAAP;;;IAMF,OAAO8B,QAAP;;;EAGFO,KAAK,CACHlE,UADG,EAEHqD,MAFG,EAGHvB,MAHG;IAKH,MAAMiB,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+BqD,MAA/B,CAAd;;IACA,IAAI,CAACN,KAAL,EAAY;MACV,MAAM,IAAIjE,KAAJ,CAAU,SAAV,CAAN;;;IAGF,IAAIsD,SAAS,GAAG5G,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,CAAhB;;IAGA,IAAI8E,MAAM,CAACqC,KAAX,EAAkB;MAChB,IAAI;QACF,MAAMC,UAAU,GAAG9I,oBAAoB,CAACwG,MAAM,CAACqC,KAAR,CAAvC;QACA/B,SAAS,GAAGA,SAAS,CAACnF,MAAV,CAAiB0G,QAAQ,IAAIS,UAAU,CAACT,QAAD,EAAW,EAAX,CAAvC,CAAZ;OAFF,CAGE,OAAOU,GAAP,EAAY;QACZ,MAAM,IAAI1E,kBAAJ,CACJ;UACE2E,IAAI,EAAE,cADR;UAEEjJ,OAAO,EAAGgJ,GAAW,CAAChJ;SAHpB,EAKJ,GALI,CAAN;;;;;IAWJ,MAAMkJ,cAAc,GAAGnC,SAAS,CAACvD,MAAjC;;IAGA,MAAM2F,MAAM,GAAG1C,MAAM,CAAC0C,MAAP,IAAiB,CAAhC;IACA,MAAMC,KAAK,GAAG3C,MAAM,CAAC2C,KAAP,IAAgB,EAA9B;IACArC,SAAS,GAAGA,SAAS,CAACsC,KAAV,CAAgBF,MAAhB,EAAwBA,MAAM,GAAGC,KAAjC,CAAZ;;IAGA,IAAI3C,MAAM,CAACD,MAAP,KAAkBnI,SAAtB,EAAiC;MAC/B0I,SAAS,GAAGA,SAAS,CAACzG,GAAV,CAAcgI,QAAQ;QAChC,OAAO,KAAK9B,MAAL,CAAY7B,UAAZ,EAAwB2D,QAAxB,EAAkC7B,MAAM,CAACD,MAAzC,CAAP;OADU,CAAZ;;;IAKF,OAAO;MACL8C,KAAK,EAAEJ,cADF;MAELK,KAAK,EAAExC,SAAS,CAACvD,MAFZ;MAGL2F,MAAM,EAAEA,MAHH;MAILC,KAAK,EAAEA,KAJF;MAKLI,OAAO,EAAEzC;KALX;;;EASF0C,uBAAuB,CACrB9E,UADqB,EAErB+E,UAFqB;IAIrB,IAAIA,UAAU,CAACrB,EAAf,EAAmB;MACjB,MAAMC,QAAQ,GAAG,KAAKC,GAAL,CAAS5D,UAAT,EAAqB+E,UAAU,CAAC1B,MAAhC,EAAwC0B,UAAU,CAACrB,EAAnD,CAAjB;;MACA,IAAIC,QAAJ,EAAc;QACZ,OAAOA,QAAP;;;MAEFqB,OAAO,CAACC,KAAR,kCACmCF,UAAU,CAAC1B,cAAc0B,UAAU,CAACrB,IADvE;MAGA,OAAOhK,SAAP;;;IAGF,IAAIqL,UAAU,CAAC7E,GAAf,EAAoB;MAClB,MAAM6C,KAAK,GAAG,KAAKb,aAAL,CAAmBlC,UAAnB,EAA+B+E,UAAU,CAAC1B,MAA1C,CAAd;;MAEA,IAAIN,KAAJ,EAAW;;;QAGT,MAAMY,QAAQ,GAAGnI,KAAK,CAAC+H,IAAN,CAAWR,KAAK,CAAC/F,MAAN,EAAX,EAA2B+G,IAA3B;QAEfmB,CAAC,IAAIA,CAAC,CAAChF,GAAF,KAAU6E,UAAU,CAAC7E,GAFX,CAAjB;;QAIA,IAAIyD,QAAJ,EAAc;UACZ,OAAOA,QAAP;;OARJ,MAUO;QACL,MAAM,IAAI7E,KAAJ,wCACmCiG,UAAU,CAAC1B,QAD9C,CAAN;;;;IAKJ,OAAO3J,SAAP;;;EAkFMsI,iBAAiB,CACvBhC,UADuB,EAEvB+B,SAFuB,EAGvBF,MAHuB;IAKvB,IAAIE,SAAS,KAAKrI,SAAlB,EAA6B;;IAE7B,IACEqI,SAAS,CAACsB,MAAV,KAAqB3J,SAArB,KACCqI,SAAS,CAAC2B,EAAV,KAAiBhK,SAAjB,IAA8BqI,SAAS,CAAC7B,GAAV,KAAkBxG,SADjD,CADF,EAGE;;MAEAqI,SAAS,CAACjF,GAAV,GAAgB,KAAKgI,uBAAL,CAA6B9E,UAA7B,EAAyC;QACvDqD,MAAM,EAAEtB,SAAS,CAACsB,MADqC;QAEvDK,EAAE,EAAE3B,SAAS,CAAC2B,EAFyC;QAGvDxD,GAAG,EAAE6B,SAAS,CAAC7B;OAHD,CAAhB;;MAKA,IAAI2B,MAAJ,EAAY;QACV,KAAKD,gBAAL,CAAsB5B,UAAtB,EAAkC+B,SAAS,CAACjF,GAA5C,EAAiD+E,MAAjD;;KAXJ,MAaO;MACL,IAAIA,MAAJ,EAAY;QACV,KAAKD,gBAAL,CAAsB5B,UAAtB,EAAkC+B,SAAlC,EAA6CF,MAA7C;;;;;;;MCvaKsD;EAIX/J,YAAYgK,WAAoB;IAHhC,WAAA,GAAkB,EAAlB;IACA,aAAA,GAAoB,IAApB;IAGE,KAAKA,QAAL,GAAgBA,QAAhB;;;EAGFC,cAAc,CAACC,QAAD,EAAmBC,YAAnB,EAAyCC,KAAzC;IACZ,MAAMnI,KAAK,GAAU;MACnBoI,YAAY,EAAEC,WAAW,CAAC,EAAD,CAAX,CAAgBC,QAAhB,CAAyB,QAAzB,CADK;MAEnBC,UAAU,EAAE,QAFO;MAGnBC,UAAU,EAAE,MAHO;MAInBL,KAAK,EAAEA,KAAK,IAAI;KAJlB;IAMA,KAAKM,MAAL,CAAYC,IAAZ,CAAiB1I,KAAjB;IACA,OAAOA,KAAP;;;EAGF2I,aAAa,CAAC3I,KAAD;IACX,IAAI,CAAC,KAAK+H,QAAV,EAAoB,OAAO,IAAP;IAEpB,MAAMa,UAAU,GAAG,KAAKH,MAAL,CAAY/B,IAAZ,CAAiBpG,CAAC,IAAIA,CAAC,CAAC8H,YAAF,KAAmBpI,KAAzC,CAAnB;;IACA,IAAI4I,UAAJ,EAAgB;MACd,OAAO,IAAP;;;IAEF,OAAO,KAAP;;;;;ACjCG,MAAMC,cAAc,GAAIC,OAAD;EAC5B,MAAMC,UAAU,GAAGD,OAAO,CAACE,MAAR,CAAe,eAAf,CAAnB;EACA,MAAMtM,KAAK,GAAGqM,UAAH,oBAAGA,UAAU,CAAErM,KAAZ,CAAkB,4BAAlB,CAAd;;EACA,IAAIA,KAAJ,EAAW;IAAA;;IACT,wBAAOA,KAAK,CAAC8D,MAAb,qBAAO,cAAcR,KAArB;;;EAEF,OAAO3D,SAAP;AACD,CAPM;;MCUM4M;EAGXlL,YAAYmL;IACV,KAAKxD,KAAL,GAAa,IAAIoC,WAAJ,CAAgBoB,OAAO,CAACnB,QAAxB,CAAb;;;EAGFoB,YAAY;IACV,MAAMC,MAAM,GAAGC,OAAO,CAACC,MAAR,EAAf;IACAF,MAAM,CAACG,GAAP,CAAWC,UAAU,CAACC,UAAX,CAAsB;MAAEC,QAAQ,EAAE;KAAlC,CAAX;IACAN,MAAM,CAACO,IAAP,CAAY,QAAZ,EAAsB,KAAKC,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAAtB;IACA,OAAOT,MAAP;;;EAGFU,gBAAgB;IACd,OAAO,OAAOhB,OAAP,EAAyBiB,QAAzB,EAA6CzI,IAA7C;MACL,MAAMtB,KAAK,GAAG6I,cAAc,CAACC,OAAD,CAA5B;;MACA,IAAI,CAAC9I,KAAL,EAAY;QACVsB,IAAI,CACF,IAAIgB,kBAAJ,CACE;UACE2E,IAAI,EAAE,eADR;UAEEjJ,OAAO,EACL;SAJN,EAME,GANF,CADE,CAAJ;;;MAYF,IAAI,CAACgC,KAAD,IAAU,CAAC,KAAK0F,KAAL,CAAWiD,aAAX,CAAyB3I,KAAzB,CAAf,EAAgD;QAC9CsB,IAAI,CACF,IAAIgB,kBAAJ,CACE;UACE2E,IAAI,EAAE,eADR;UAEEjJ,OAAO,EAAE;SAHb,EAKE,GALF,CADE,CAAJ;;;MAWFsD,IAAI;KA3BN;;;EA8BgB,MAAZsI,YAAY,CAACd,OAAD,EAAmBiB,QAAnB,EAAuCzI,IAAvC;IAChB,MAAMyH,UAAU,GAAGD,OAAO,CAACE,MAAR,CAAe,eAAf,CAAnB;;IACA,IAAI,CAACD,UAAL,EAAiB;MACf,OAAOzH,IAAI,CACT,IAAIgB,kBAAJ,CACE;QACE2E,IAAI,EAAE,gBADR;QAEEjJ,OAAO,EACL;OAJN,EAME,GANF,CADS,CAAX;;;IAWF,MAAMgM,WAAW,GAAGC,IAAI,CAACrJ,KAAL,CAAWmI,UAAX,CAApB;;IACA,IAAI,CAACiB,WAAL,EAAkB;MAChB,OAAO1I,IAAI,CACT,IAAIgB,kBAAJ,CACE;QACE2E,IAAI,EAAE,gBADR;QAEEjJ,OAAO,EACL;OAJN,EAME,GANF,CADS,CAAX;;;IAYF,MAAMkM,SAAS,GAAGpB,OAAO,CAACjC,KAAR,CAAcsD,UAAd,IAA4BrB,OAAO,CAACsB,IAAR,CAAaD,UAA3D;;IACA,IAAI,CAACD,SAAL,EAAgB;MACd,OAAO5I,IAAI,CACT,IAAIgB,kBAAJ,CACE;QACE2E,IAAI,EAAE,iBADR;QAEEjJ,OAAO,EAAE;OAHb,EAKE,GALF,CADS,CAAX;;;IAWF,IAAIkM,SAAS,KAAK,oBAAlB,EAAwC;MAAA;;MACtC,MAAMlK,KAAK,GAAG,KAAK0F,KAAL,CAAWsC,cAAX,CACZgC,WAAW,CAAClH,IADA,EAEZkH,WAAW,CAACK,IAFA,0BAGZvB,OAAO,CAACjC,KAAR,CAAcsB,KAHF,qBAGZ,qBAAqBG,QAArB,EAHY,CAAd;MAKA,OAAOyB,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BtK,KAA1B,CAAP;KANF,MAOO;MACL,OAAOsB,IAAI,CACT,IAAIgB,kBAAJ,CACE;QACE2E,IAAI,EAAE,wBADR;QAEEjJ,OAAO,wDAAwDkM;OAHnE,EAKE,GALF,CADS,CAAX;;;;;;MCxGOK,yBAAyB,GAAG;EACvC,OAAO;IACLlE,EAAE,EAAEmE,EAAM,EADL;IAELtH,SAAS,EAAE,IAAIuH,IAAJ,GAAWC,WAAX,EAFN;IAGLC,cAAc,EAAE,IAAIF,IAAJ,GAAWC,WAAX,EAHX;IAIL1G,OAAO,EAAE;GAJX;AAMD,CAPM;;MCEM4G;EAKX7M,YACE4E,YACAkI,UACAC;IAEA,KAAKnI,UAAL,GAAkBA,UAAlB;IACA,KAAKoI,QAAL,GAAgBD,OAAhB;IACA,KAAKE,SAAL,GAAiBH,QAAjB;;;EAGF1E,GAAG,CACDH,MADC,EAEDM,QAFC;;IAKD,IAAIN,MAAM,KAAK,eAAf,EAAgCA,MAAM,GAAG,oBAAT;IAEhC,MAAMiF,YAAY,GAAGjF,MAArB;IAEA,MAAMkF,OAAO,GAAG,KAAKF,SAAL,CAAeC,YAAf,CAAhB;;IACA,IAAIC,OAAJ,EAAa;MACX,KAAKH,QAAL,CAAc5E,GAAd,CAAkB,KAAKxD,UAAvB,EAAmCsI,YAAnC,EAAiD,EAC/C,GAAGV,yBAAyB,EADmB;QAE/C,GAAGjE;OAFL;KADF,MAKO;MACL,MAAM,IAAI7E,KAAJ,gBAAyBuE,4BAAzB,CAAN;;;;EAIJO,GAAG,CACDP,MADC,EAEDK,EAFC;IAID,OAAO,KAAK0E,QAAL,CAAcxE,GAAd,CACL,KAAK5D,UADA,EAELqD,MAFK,EAGLK,EAHK,EAIL,EAJK,CAAP;;;;EASF8E,aAAa,CACXnF,MADW;IAGX,MAAMkF,OAAO,GAAG,KAAKF,SAAL,CAAehF,MAAf,CAAhB;;IACA,IAAIkF,OAAO,KAAK7O,SAAhB,EAA2B;MACzB,OAAO6O,OAAO,CAACE,UAAf;;;IAEF,MAAM,IAAI3J,KAAJ,CAAU,oBAAV,CAAN;;;;;AC3DG,MAAM4J,WAAW,GAAIC,OAAD;EACzB,MAAMC,YAAY,GAAG,CAAC,QAAD,EAAW,MAAX,EAAmB,eAAnB,CAArB;EACA,MAAMrP,MAAM,GAA2B,EAAvC;EAEAwD,MAAM,CAACoG,OAAP,CAAewF,OAAf,EAAwBhH,OAAxB,CAAgC,CAAC,CAACzB,GAAD,EAAM5D,KAAN,CAAD;IAC9B,IAAIsM,YAAY,CAAC3J,QAAb,CAAsBiB,GAAG,CAACf,WAAJ,EAAtB,CAAJ,EAA8C;MAC5C5F,MAAM,CAAC2G,GAAD,CAAN,GAAc5D,KAAd;;GAFJ;EAMA,OAAO/C,MAAP;AACD,CAXM;;ACAA,MAAMsP,oBAAoB,GAAG,6CAA7B;AACP,AAAO,MAAMC,qBAAqB,GAAG,8CAA9B;;MCIuBC;EAM5B3N,YAAY4N;IAFZ,qBAAA,GAAmB,GAAnB;IAGE,KAAKC,cAAL,CAAoBD,MAApB;;;EAGFE,WAAW,CAACzC,MAAD;;EAEXwC,cAAc,CAACD,MAAD;IACZ,MAAMG,QAAQ,GAAG,KAAKC,WAAL,EAAjB;IACA,MAAM3C,MAAM,GAAGE,MAAM,CAAC;MAAE0C,WAAW,EAAE;KAAhB,CAArB;;IAGA,KAAKH,WAAL,CAAiBzC,MAAjB;IAEAA,MAAM,CAAC7C,GAAP,CAAW,GAAX,EAAgB,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAhB;IACAT,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;;IACAT,MAAM,CAAC7C,GAAP,CAAW,MAAX,EAAmB,KAAK2F,SAAL,CAAerC,IAAf,CAAoB,IAApB,CAAnB;IAEAT,MAAM,CAACxC,MAAP,CAAc,WAAd,EAA2B,KAAKuF,aAAL,CAAmBtC,IAAnB,CAAwB,IAAxB,CAA3B;IACAT,MAAM,CAACxC,MAAP,CAAc,MAAd,EAAsB,KAAKwF,YAAL,CAAkBvC,IAAlB,CAAuB,IAAvB,CAAtB;IAEAT,MAAM,CAACO,IAAP,CAAY,GAAZ,EAAiB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAjB;IACAT,MAAM,CAACO,IAAP,CAAY,WAAZ,EAAyB,KAAK0C,WAAL,CAAiBxC,IAAjB,CAAsB,IAAtB,CAAzB;IACAT,MAAM,CAACO,IAAP,CAAY,MAAZ,EAAoB,KAAK2C,UAAL,CAAgBzC,IAAhB,CAAqB,IAArB,CAApB;IAEA8B,MAAM,CAACpC,GAAP,KAAeuC,UAAf,EAA2B1C,MAA3B;;;EAGF7C,GAAG,CAACuC,OAAD,EAAmBiB,QAAnB;IACD,MAAM3C,KAAK,GAAG,KAAKmF,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcO,KAA/B,CAAd;;IACA,MAAMD,MAAM,GAAG,KAAKoF,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcM,MAA/B,CAAf;;IAEA,MAAMjL,MAAM,GAAG,KAAKkP,UAAL,CAAgBvE,KAAhB,CAAsBiC,OAAO,CAACrE,MAAR,CAAe9B,UAArC,EAAiD;MAC9D6B,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B,CADsD;MAE9DsC,KAAK,EAAE,KAAKyF,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcC,KAA/B,CAFuD;MAG9DM,KAAK,EAAEA,KAAK,KAAK/K,SAAV,GAAsBmQ,MAAM,CAACpF,KAAD,CAA5B,GAAsC/K,SAHiB;MAI9D8K,MAAM,EAAEA,MAAM,KAAK9K,SAAX,GAAuBmQ,MAAM,CAACrF,MAAD,CAA7B,GAAwC9K;KAJnC,CAAf;IAMA,OAAO0N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFgQ,SAAS,CAACpD,OAAD,EAAmBiB,QAAnB;IACP,MAAM7N,MAAM,GAAG,KAAKuQ,aAAL,CAAmB3D,OAAnB,EAA4BA,OAAO,CAACrE,MAAR,CAAe,IAAf,CAA5B,CAAf;;IACA,IAAI,CAACvI,MAAL,EAAa;MACX,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,EAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGF+P,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;IACR,MAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgB3E,QAAhB,CACbqC,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAe,KAAf,CAFa,EAGb;MAAED,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;KAHG,CAAf;IAKA,IAAI,CAACtI,MAAL,EAAa,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,EAAP;IACb,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFkQ,YAAY,CAACtD,OAAD,EAAmBiB,QAAnB;IACV,MAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgBxE,MAAhB,CACbkC,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAe,IAAf,CAFa,EAGb;MACED,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;KAJG,CAAf;;IAOA,IAAI,CAACtI,MAAL,EAAa;MACX,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFiQ,aAAa,CAACrD,OAAD,EAAmBiB,QAAnB;IACX,OAAOA,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,iBAA1B,CAAP;;;EAGFX,IAAI,CAACb,OAAD,EAAmBiB,QAAnB;IACF,MAAM2C,KAAK,GAAG5D,OAAO,CAACsB,IAAtB;IACA,MAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgBuB,MAAhB,CAAuB7D,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkD+J,KAAlD,CAAjB;;IACA,MAAMxQ,MAAM,GAAG,KAAKuQ,aAAL,CAAmB3D,OAAnB,EAA4BxC,QAAQ,CAACD,EAArC,CAAf;;IACA,OAAO0D,QAAQ,CAACjG,MAAT,CAAgB,KAAK8I,gBAArB,EAAuCtC,IAAvC,CAA4CpO,MAA5C,CAAP;;;EAGFoQ,UAAU,CAACxD,OAAD,EAAmBiB,QAAnB;IACR,MAAM8C,aAAa,GAAW/D,OAAO,CAACsB,IAAtC;IACA,MAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgB7E,GAAhB,CACfuC,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe,IAAf,CAFe,CAAjB;;IAIA,IAAI,CAAC6B,QAAL,EAAe;MACb,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAGF,IAAIhE,QAAQ,CAACtC,OAAT,KAAqB6I,aAAa,CAAC7I,OAAvC,EAAgD;MAC9C,OAAO+F,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,yBAA1B,CAAP;;;IAGF,MAAMwC,eAAe,GAAG,KAAK1B,UAAL,CAAgB2B,oBAAhB,CACtBjE,OAAO,CAACrE,MAAR,CAAe9B,UADO,EAEtB2D,QAFsB,EAGtBuG,aAAa,CAACG,OAHQ,CAAxB;;IAMA,MAAM9Q,MAAM,GAAG,KAAKuQ,aAAL,CAAmB3D,OAAnB,EAA4BgE,eAAe,CAACzG,EAA5C,CAAf;;IACA,OAAO0D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFmQ,WAAW,CAACvD,OAAD,EAAmBiB,QAAnB;IACT,OAAOA,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,iBAA1B,CAAP;;;EAGQmC,aAAa,CAAC3D,OAAD,EAAmBmE,UAAnB;IACrB,MAAM/Q,MAAM,GAAG,KAAKkP,UAAL,CAAgB7E,GAAhB,CAAoBuC,OAAO,CAACrE,MAAR,CAAe9B,UAAnC,EAA+CsK,UAA/C,EAA2D;MACxEzI,MAAM,EAAE,KAAK+H,WAAL,CAAiBzD,OAAO,CAACjC,KAAR,CAAcrC,MAA/B;KADK,CAAf;IAGA,OAAOtI,MAAP;;;;EAIMqQ,WAAW,CACjBtN,KADiB;IAGjB,IAAId,KAAK,CAACC,OAAN,CAAca,KAAd,CAAJ,EAA0B;;MAExB,OAAOA,KAAP;KAFF,MAGO,IAAIA,KAAK,KAAK5C,SAAd,EAAyB;MAC9B,OAAO,IAAI4C,OAAJ,CAAP;;;IAEF,OAAO5C,SAAP;;;;;ACpIG,MAAM6Q,2BAA2B,GAAG,CACzC5G,QADyC,EAEzC6G,eAFyC;EAIzC,IAAI7G,QAAQ,CAACtC,OAAT,KAAqBmJ,eAAzB,EAA0C;EAE1C,MAAMzF,UAAU,GAAkBpB,QAAS,CAACD,EAAV,GACfC,QAAS,CAACD,EADK,GAEpBC,QAAS,CAACzD,GAFxB;EAIA,MAAM,IAAIP,kBAAJ,CACJ;IACEtE,OAAO,YAAY0J,+DAA+DyF,6BAA6B7G,QAAQ,CAACtC,UAD1H;IAEEoJ,cAAc,EAAE9G,QAAQ,CAACtC,OAF3B;IAGEiD,IAAI,EAAE;GAJJ,EAMJ,GANI,CAAN;AAQD,CAlBM;;MCiBeoG;EAMpBtP,YAAY+M;IAJF,YAAA,GAEN,EAFM;IAKR,KAAKC,QAAL,GAAgBD,OAAhB;;;EAKFiC,oBAAoB,CAClBpK,UADkB,EAElB2D,QAFkB,EAGlB0G,OAHkB;;IAMlB,MAAMM,gBAAgB,GAAGlJ,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAeiC,QAAf,CAAX,CAAzB;IAEA0G,OAAO,CAAC1I,OAAR,CAAgBiJ,MAAM;MACpB,MAAMC,UAAU,GAAG,KAAKR,OAAL,CAAaO,MAAM,CAACA,MAApB,CAAnB;;MACA,IAAI,CAACC,UAAL,EAAiB;QACf7F,OAAO,CAACC,KAAR,0CAAuD2F,MAAM,CAACA,QAA9D;QACA;;;MAEFC,UAAU,CAAC7K,UAAD,EAAa2K,gBAAb,EAA+BC,MAA/B,CAAV;KANF;;IASA,IAAI,CAACE,SAAS,CAACH,gBAAD,EAAmBhH,QAAnB,CAAd,EAA4C;MAC1C,KAAKoH,IAAL,CAAU/K,UAAV,EAAsB2K,gBAAtB;;;IAEF,OAAOA,gBAAP;;;;AAIJ,MAAsBK,mCAAmCN;EAIvDtP,YAAY+M;IACV,MAAMA,OAAN;;IACA,KAAKC,QAAL,CAAchF,aAAd,CAA4B,KAAK6H,SAAL,EAA5B;;;EAGF/G,KAAK,CAAClE,UAAD,EAAqB8B,SAAsB,EAA3C;IACH,OAAO,KAAKsG,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MACvDpJ,MAAM,EAAEC,MAAM,CAACD,MADwC;MAEvDsC,KAAK,EAAErC,MAAM,CAACqC,KAFyC;MAGvDK,MAAM,EAAE1C,MAAM,CAAC0C,MAHwC;MAIvDC,KAAK,EAAE3C,MAAM,CAAC2C;KAJT,CAAP;;;EAQFb,GAAG,CACD5D,UADC,EAED0D,EAFC,EAGD5B,SAAoB,EAHnB;IAKD,OAAO,KAAKsG,QAAL,CAAcxE,GAAd,CAAkB5D,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,EAAgDvH,EAAhD,EAAoD5B,MAApD,CAAP;;;EAGFgC,QAAQ,CACN9D,UADM,EAENE,GAFM,EAGN4B,SAAoB,EAHd;IAKN,OAAO,KAAKsG,QAAL,CAActE,QAAd,CAAuB9D,UAAvB,EAAmC,KAAKiL,SAAL,EAAnC,EAAqD/K,GAArD,EAA0D4B,MAA1D,CAAP;;;EAGFmC,MAAM,CACJjE,UADI,EAEJ0D,EAFI,EAGJ5B,SAAoB,EAHhB;IAKJ,OAAO,KAAKsG,QAAL,CAAcnE,MAAd,CAAqBjE,UAArB,EAAiC,KAAKiL,SAAL,EAAjC,EAAmDvH,EAAnD,EAAuD5B,MAAvD,CAAP;;;EAGFiJ,IAAI,CAAC/K,UAAD,EAAqB2D,QAArB;IACF,MAAMuH,OAAO,GAAG,KAAKtH,GAAL,CAAS5D,UAAT,EAAqB2D,QAAQ,CAACD,EAA9B,CAAhB;;IAEA,IAAIwH,OAAJ,EAAa;MACXX,2BAA2B,CAACW,OAAD,EAAUvH,QAAQ,CAACtC,OAAnB,CAA3B;KADF,MAEO;MACL,IAAIsC,QAAQ,CAACtC,OAAT,KAAqB,CAAzB,EAA4B;QAC1B,MAAM,IAAI1B,kBAAJ,CACJ;UACE2E,IAAI,EAAE,kBADR;UAEEjJ,OAAO,EAAE;SAHP,EAKJ,GALI,CAAN;;;;;IAWJsI,QAAQ,CAACtC,OAAT,IAAoB,CAApB;;IACA,KAAK+G,QAAL,CAAc5E,GAAd,CAAkBxD,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,EAAgDtH,QAAhD;;;;;ACxGG,MAAMwH,kBAAkB,GAAG,CAChCpB,KADgC,EAEhC/J,UAFgC,EAGhCmI,OAHgC;EAKhC,IAAI,CAAC4B,KAAL,EAAY,OAAOrQ,SAAP;EACZ,IAAI,CAACqQ,KAAK,CAAC3N,IAAX,EAAiB,OAAO1C,SAAP;EACjB,IAAI,CAACqQ,KAAK,CAAC3N,IAAN,CAAWiH,MAAhB,EAAwB,OAAO3J,SAAP;EACxB,IAAI,CAACqQ,KAAK,CAACqB,MAAX,EAAmB,OAAO1R,SAAP;EAEnB,MAAM2R,YAAY,GAAGlD,OAAO,CAACrD,uBAAR,CACnB9E,UADmB,EAEnB+J,KAAK,CAAC3N,IAFa,CAArB;;EAKA,IAAI,CAACiP,YAAL,EAAmB;IACjB,MAAM,IAAIvM,KAAJ,aACQiL,KAAK,CAAC3N,IAAN,CAAWiH,mBAAmB0G,KAAK,CAAC3N,IAAN,CAAWsH,aAAaqG,KAAK,CAAC3N,IAAN,CAAW8D,KADzE,CAAN;;;EAKF,OAAO;IACL9D,IAAI,EAAE;MACJiH,MAAM,EAAE0G,KAAK,CAAC3N,IAAN,CAAWiH,MADf;MAEJK,EAAE,EAAE2H,YAAY,CAAC3H;KAHd;IAKL0H,MAAM,EAAErB,KAAK,CAACqB;GALhB;AAOD,CA5BM;AA8BP,AAAO,MAAME,WAAW,GAAIvB,KAAD;EACzB,OAAO;IACLrG,EAAE,EAAEmE,EAAM,EADL;IAELvL,KAAK,EAAEiP,gBAAgB,CAACxB,KAAK,CAACzN,KAAP;GAFzB;AAID,CALM;AAOP,AAAO,MAAMiP,gBAAgB,GAAIjP,KAAD;EAC9B,OAAO;IACLF,IAAI,EAAE,eADD;IAELoP,cAAc,EAAE,CAFX;IAGL,GAAGlP;GAHL;AAKD,CANM;AAQP,AAAO,MAAMmP,qBAAqB,GAAG,CACnCC,GADmC,EAEnC1L,UAFmC,EAGnCmI,OAHmC;EAKnC,IAAI,CAACuD,GAAL,EAAU,OAAOhS,SAAP;EACV,MAAMiK,QAAQ,GAAGwE,OAAO,CAACrD,uBAAR,CAAgC9E,UAAhC,EAA4C0L,GAA5C,CAAjB;;EACA,IAAI,CAAC/H,QAAL,EAAe;IACb,MAAM,IAAI7E,KAAJ,CAAU,eAAV,CAAN;;;EAGF,MAAMiE,KAAK,GAAGY,QAAd;EACA,OAAO;IACLN,MAAM,EAAE,OADH;IAELnD,GAAG,EAAE6C,KAAK,CAAC7C;GAFb;AAID,CAhBM;AAkBP,AAAO,MAAMyL,kCAAkC,GAAG,CAChDC,kBADgD,EAEhD5L,UAFgD,EAGhDmI,OAHgD;EAKhD,MAAMxE,QAAQ,GAAGwE,OAAO,CAACrD,uBAAR,CACf9E,UADe,EAEf4L,kBAFe,CAAjB;EAIA,IAAI,CAACjI,QAAL,EACE,MAAM,IAAI7E,KAAJ,kBACa8M,kBAAkB,CAACvI,kBAAkBuI,kBAAkB,CAAClI,cAAckI,kBAAkB,CAAC1L,eADtG,CAAN;EAIF,OAAQ;IACNmD,MAAM,EAAEuI,kBAAkB,CAACvI,MADrB;IAENK,EAAE,EAAEC,QAAF,oBAAEA,QAAQ,CAAED;GAFhB;AAID,CAlBM;;MCzDMmI,+BAA+Bb;EAA5C5P;;IAuDE,YAAA,GASI;MACF0Q,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OANA;MAQF6L,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OAbA;MAeFC,YAAY,EAAE,CACZjM,UADY,EAEZ2D,QAFY,EAGZ;QAAEuI;OAHU;QAKZvI,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;OApBA;MAsBFC,aAAa,EAAE,CACbnM,UADa,EAEb2D,QAFa,EAGb;QAAEyI;OAHW;QAKbzI,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;OA3BA;MA6BFC,oBAAoB,EAAE,CACpBrM,UADoB,EAEpB2D,QAFoB,EAGpB;QAAEuI,SAAF;QAAaE;OAHO;QAKpBzI,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;QACAvI,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;OAnCA;MAqCFE,eAAe,EAAE,CACftM,UADe,EAEf2D,QAFe,EAGf;QAAE4I;OAHa;QAKf5I,QAAQ,CAAC4I,SAAT,GAAqBA,SAArB;OA1CA;MA4CFC,cAAc,EAAE,CACdxM,UADc,EAEd2D,QAFc,EAGd;QAAE8I;OAHY;QAKd9I,QAAQ,CAAC8I,QAAT,GAAoBA,QAApB;;KA1DJ;;;EAtDAxB,SAAS;IACP,OAAO,eAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;MAE7B1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFkB;MAG7B8L,WAAW,EAAEjC,KAAK,CAACiC,WAHU;MAI7BU,aAAa,EAAE3C,KAAK,CAAC2C,aAJQ;MAK7BD,QAAQ,EAAE1C,KAAK,CAAC0C,QAAN,IAAkB,KALC;MAM7BtM,IAAI,EAAE4J,KAAK,CAAC5J,IANiB;MAO7BwM,UAAU,EAAE,EAPiB;MAQ7B7Q,MAAM,EAAEiO,KAAK,CAACjO,MARe;MAS7B8Q,oBAAoB,EAAE7C,KAAK,CAAC6C,oBAAN,IAA8B,KATvB;MAU7BL,SAAS,EAAExC,KAAK,CAACwC,SAVY;MAW7BM,YAAY,EAAE9C,KAAK,CAAC8C,YAAN,IAAsB,UAXP;MAY7BX,SAAS,EAAEnC,KAAK,CAACmC,SAZY;MAa7BE,UAAU,EAAErC,KAAK,CAACqC,UAbW;MAc7B9P,KAAK,EAAE,KAAKwQ,mBAAL,CAAyB/C,KAAK,CAACzN,KAA/B;KAdT;IAgBA,KAAKyO,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGMmJ,mBAAmB,CAACxQ,KAAD;IACzB,QAAQA,KAAK,CAACF,IAAd;MACE,KAAK,UAAL;QAAiB;UACf,OAAO;YACLA,IAAI,EAAE,UADD;YAEL2Q,KAAK,EAAEzQ,KAAK,CAACyQ,KAAN,CAAYpR,GAAZ,CAAgB4P,gBAAhB;WAFT;;;MAKF,KAAK,OAAL;QAAc;UACZ,OAAO;YACLnP,IAAI,EAAE,OADD;YAEL2Q,KAAK,EAAEzQ,KAAK,CAACyQ,KAAN,CAAYpR,GAAZ,CAAgB4P,gBAAhB;WAFT;;;MAKF,KAAK,cAAL;QAAqB;UACnB,OAAO,EACL,GAAGjP;WADL;;;MAIF,KAAK,UAAL;QAAiB;UACf,OAAO,EACL,GAAGA;WADL;;;;IAMJ,OAAOA,KAAP;;;;;MCtES0Q,4BAA4BjE;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIoD,sBAAJ,CAA2B1D,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;;;MCYS6D,uBAAuBjC;EAApC5P;;IAwCE,YAAA,GAAU;MACR8R,WAAW,EAAE,CACXlN,UADW,EAEX2D,QAFW,EAGX;QAAEwJ,SAAF;QAAaC,SAAb;QAAwBC,GAAxB;QAA6BC,QAAQ,GAAG;OAH7B;QAKX,IAAIzK,OAAO,GAAmB,IAA9B;QACA,IAAI0K,OAAJ;;QAEA,IAAIJ,SAAS,IAAIC,SAAjB,EAA4B;;UAE1BvK,OAAO,GAAG,KAAKuF,QAAL,CAAcxE,GAAd,CAAkB5D,UAAlB,EAA8B,SAA9B,EAAyCmN,SAAzC,EAAoD,EAApD,CAAV;SAFF,MAGO,IAAIE,GAAJ,EAAS;;UAEd,MAAMG,KAAK,GAAG,KAAKpF,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,SAAhC,EAA2C;YACvDmE,KAAK,EAAE,0CACoCkJ,+CAA+CA,SADnF;WADK,CAAd;;UAMA,IAAIG,KAAK,CAAC7I,KAAN,KAAgB,CAApB,EAAuB;YACrB9B,OAAO,GAAG2K,KAAK,CAAC3I,OAAN,CAAc,CAAd,CAAV;;;;QAIJ,IAAI,CAAChC,OAAL,EAAc;;UAEZ,MAAM,IAAIlD,kBAAJ,CAAqC;YACzC2E,IAAI,EAAE,SADmC;YAEzCjJ,OAAO,EAAEgS,GAAG,+CACoCA,iBADpC,yBAEcF;WAJtB,CAAN;;;;QASFI,OAAO,GAAG,CACR1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aADnB,EAER,GAAG7K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2ByC,QAFtB,EAGR5J,IAHQ,CAGH6J,CAAC;UACN,IAAIP,GAAJ,EAAS,OAAOO,CAAC,CAACP,GAAF,KAAUA,GAAjB;UACT,IAAID,SAAJ,EAAe,OAAOQ,CAAC,CAAClK,EAAF,KAAS0J,SAAhB;UACf,OAAO,KAAP;SANQ,CAAV;;QASA,IAAI,CAACG,OAAL,EAAc;;UAEZ,MAAM,IAAI5N,kBAAJ,CAAqC;YACzC2E,IAAI,EAAE,SADmC;YAEzCjJ,OAAO,EAAEgS,GAAG,0BACeA,qBAAqBxK,OAAO,CAACa,gBAD5C,yBAEc0J,2BAA2BvK,OAAO,CAACa;WAJzD,CAAN;;;QAQF,MAAMmK,YAAY,GAAGlK,QAAQ,CAACmK,SAAT,CAAmBtP,IAAnB,CACnBoP,CAAC;UAAA;;UAAA,OAAIA,CAAC,CAACT,SAAF,kBAAgBtK,OAAhB,qBAAgB,SAASa,EAAzB,KAA+BkK,CAAC,CAACL,OAAF,CAAU7J,EAAV,kBAAiB6J,OAAjB,qBAAiB,SAAS7J,EAA1B,CAAnC;SADkB,CAArB;;QAGA,IAAImK,YAAJ,EAAkB;;UAEhBlK,QAAQ,CAACmK,SAAT,CAAmBnS,GAAnB,CAAuBiS,CAAC;;;YACtB,IAAIA,CAAC,CAACT,SAAF,mBAAgBtK,OAAhB,qBAAgB,UAASa,EAAzB,KAA+BkK,CAAC,CAACL,OAAF,CAAU7J,EAAV,mBAAiB6J,OAAjB,qBAAiB,UAAS7J,EAA1B,CAAnC,EAAiE;cAC/DkK,CAAC,CAACN,QAAF,IAAcA,QAAd;cACAM,CAAC,CAACG,UAAF,CAAaC,UAAb,GAA0BC,2BAA2B,CAACL,CAAD,CAArD;;;YAEF,OAAOA,CAAP;WALF;SAFF,MASO;UAAA;;;UAEL,IAAI,qBAACL,OAAO,CAACW,MAAT,aAAC,gBAAgBrP,MAAjB,CAAJ,EAA6B;YAC3B,MAAM,IAAIc,kBAAJ,CAAqC;cACzC2E,IAAI,EAAE,SADmC;cAEzCjJ,OAAO,wBAAwB8R;aAF3B,CAAN;;;UAMF,MAAMgB,KAAK,GAAGZ,OAAO,CAACW,MAAR,CAAe,CAAf,CAAd;UACAvK,QAAQ,CAACmK,SAAT,CAAmB/H,IAAnB,CAAwB;YACtBrC,EAAE,EAAEmE,EAAM,EADY;YAEtBsF,SAAS,EAAEtK,OAAO,CAACa,EAFG;YAGtB0K,UAAU,EAAEvL,OAAO,CAAC3C,GAHE;YAItBC,IAAI,EAAE0C,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2B/K,IAJX;YAKtBkO,WAAW,EAAExL,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BoD,IALlB;YAMtBC,WAAW,EAAE1L,OAAO,CAAC0L,WANC;YAOtBhB,OAPsB;YAQtBY,KAAK,EAAEA,KARe;YAStBJ,UAAU,EAAE,EACV,GAAGI,KAAK,CAAC7R,KADC;cAEV0R,UAAU,EAAEG,KAAK,CAAC7R,KAAN,CAAY0R,UAAZ,GAAyBV;aAXjB;YAatBA,QAbsB;YActBkB,0BAA0B,EAAE,EAdN;YAetBC,YAAY,EAAE,UAfQ;YAgBtBC,SAAS,EAAE,UAhBW;YAiBtB5L,KAAK,EAAE;WAjBT;;;;QAsBFa,QAAQ,CAACoK,UAAT,CAAoBC,UAApB,GAAiCW,uBAAuB,CAAChL,QAAD,CAAxD;OAnGM;MAqGRiL,cAAc,EAAE,CACd5O,UADc,EAEd2D,QAFc,EAGd;QAAEkL,UAAF;QAAcvB;OAHA;QAKd,MAAMwB,QAAQ,GAAGnL,QAAQ,CAACmK,SAAT,CAAmB/J,IAAnB,CAAwB6J,CAAC,IAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAtC,CAAjB;;QACA,IAAI,CAACC,QAAL,EAAe;;UAEb,MAAM,IAAInP,kBAAJ,CAAqC;YACzC2E,IAAI,EAAE,SADmC;YAEzCjJ,OAAO,0BAA0BwT;WAF7B,CAAN;;;QAMF,MAAME,YAAY,GAAG,CAACzB,QAAD,IAAaA,QAAQ,IAAIwB,QAAQ,CAACxB,QAAvD;;QACA,IAAIyB,YAAJ,EAAkB;;UAEhBpL,QAAQ,CAACmK,SAAT,GAAqBnK,QAAQ,CAACmK,SAAT,CAAmB7Q,MAAnB,CAA0B2Q,CAAC,IAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAxC,CAArB;SAFF,MAGO;;UAELlL,QAAQ,CAACmK,SAAT,CAAmBnS,GAAnB,CAAuBiS,CAAC;YACtB,IAAIA,CAAC,CAAClK,EAAF,KAASmL,UAAT,IAAuBvB,QAA3B,EAAqC;cACnCM,CAAC,CAACN,QAAF,IAAcA,QAAd;cACAM,CAAC,CAACG,UAAF,CAAaC,UAAb,GAA0BC,2BAA2B,CAACL,CAAD,CAArD;;;YAEF,OAAOA,CAAP;WALF;;;;QAUFjK,QAAQ,CAACoK,UAAT,CAAoBC,UAApB,GAAiCW,uBAAuB,CAAChL,QAAD,CAAxD;OAnIM;MAqIRqL,iBAAiB,EAAE,CACjBhP,UADiB,EAEjB2D,QAFiB,EAGjB;QAAEsL;OAHe;QAKjBtL,QAAQ,CAACuL,cAAT,GAA0BD,OAA1B;OA1IM;MA4IRE,UAAU,EAAE,CACVnP,UADU,EAEV2D,QAFU,EAGV;QAAEyL;OAHQ;QAKVzL,QAAQ,CAACyL,OAAT,GAAmBA,OAAnB;OAjJM;MAmJRC,gBAAgB,EAAE,CAChBrP,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE2L;OAHc;QAKhB3L,QAAQ,CAAC4L,aAAT,GAAyBD,KAAzB;OAxJM;MA0JRE,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;QAAExD,IAAF;QAAQ7D;OAHM;QAKd,IAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;UACpB,MAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;;;QAEF6E,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;OAlKM;MAoKRoT,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;QAAEvH,IAAF;QAAQgP;OAHK;QAKb,IAAI,CAAChP,IAAL,EAAW;UACTuH,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;SADF,MAEO;UACL,MAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;UAIA,IAAI,CAACuT,YAAL,EAAmB;YACjB,MAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;;;UAGFuH,QAAQ,CAAC8L,MAAT,GAAkB;YAChBrT,IAAI,EAAE;cACJiH,MAAM,EAAE,MADJ;cAEJK,EAAE,EAAEiM,YAAY,CAACjM;aAHH;YAKhB0H,MAAM,EAAEA,MAAM,IAAI;WALpB;;OApLI;MA6LRwE,SAAS,EAAE,CACT5P,UADS,EAET2D,QAFS,EAGT;QAAEkM;OAHO;QAKTlM,QAAQ,CAACkM,MAAT,GAAkBA,MAAlB;OAlMM;MAoMRC,kBAAkB,EAAE,CAClB9P,UADkB,EAElB2D,QAFkB,EAGlB;QAAEsL;OAHgB;QAKlBtL,QAAQ,CAACoM,eAAT,GAA2Bd,OAA3B;;KAzMJ;;;EAvCAhE,SAAS;IACP,OAAO,MAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;MAErBoI,SAAS,EAAE,QAFU;MAGrBlC,SAAS,EAAE,EAHU;MAIrBmC,eAAe,EAAE,EAJI;MAKrBlC,UAAU,EAAE;QACV3R,IAAI,EAAE,eADI;QAEV4R,UAAU,EAAE,CAFF;QAGVkC,YAAY,EAAEnG,KAAK,CAACoG,QAHV;QAIV3E,cAAc,EAAE;OATG;MAWrB4E,OAAO,EAAE,UAXY;MAYrBC,eAAe,EAAE,UAZI;MAarBC,kBAAkB,EAAE,eAbC;MAcrBC,YAAY,EAAE,EAdO;MAerBC,MAAM,EAAE,UAfa;MAgBrBf,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAhB5B;IAkBA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGF8M,aAAa,CAACzQ,UAAD;;IAEX,MAAM6E,OAAO,GAAG,KAAKuD,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MAChE9G,KAAK,EAAE,qBAAA;KADO,CAAhB;;IAGA,IAAIU,OAAO,CAACF,KAAR,GAAgB,CAApB,EAAuB;MACrB,OAAOE,OAAO,CAACA,OAAR,CAAgB,CAAhB,CAAP;;;IAGF;;;;;AAiNJ,MAAMoJ,2BAA2B,GAAIa,QAAD,IAClCA,QAAQ,CAACX,KAAT,CAAgB7R,KAAhB,CAAsB0R,UAAtB,GAAmCc,QAAQ,CAACxB,QAD9C;;AAGA,MAAMqB,uBAAuB,GAAItM,IAAD,IAC9BA,IAAI,CAACyL,SAAL,CAAe4C,MAAf,CAAsB,CAACC,GAAD,EAAM/U,IAAN,KAAe+U,GAAG,GAAG/U,IAAI,CAACmS,UAAL,CAAgBC,UAA3D,EAAuE,CAAvE,CADF;;MC9Qa4C,oBAAoB7H;EAG/B3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIwE,cAAJ,CAAmB9E,OAAnB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,OAAP;;;;;MCMSyH,2BAA2B7F;EAAxC5P;;IAkCE,YAAA,GAAU;MACR0V,eAAe,EAAE,CACf9Q,UADe,EAEf2D,QAFe,EAGf;QAAEoN,OAAF;QAAWC,QAAX;QAAqB7Q;OAHN;;;QAKf,oBAAAwD,QAAQ,CAACsN,MAAT,sCAAiBtP,OAAjB,CAAyBuP,KAAK;UAC5B,IAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;YAClCwN,KAAK,CAAC/Q,IAAN,GAAaA,IAAb;;;UAEF,IAAI6Q,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;YACrCgR,KAAK,CAAC/Q,IAAN,GAAaA,IAAb;;SALJ;OANM;MAeRgR,UAAU,EAAE,CACVnR,UADU,EAEV2D,QAFU,EAGV;QAAE2K;OAHQ;QAKV3K,QAAQ,CAAC2K,IAAT,GAAgBA,IAAhB;OApBM;MAsBRxC,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OA3BM;MA6BRkR,mBAAmB,EAAE,CACnBpR,UADmB,EAEnB2D,QAFmB,EAGnB;QAAEoN,OAAF;QAAWC,QAAX;QAAqBhF;OAHF;;;QAKnB,qBAAArI,QAAQ,CAACsN,MAAT,uCAAiBtP,OAAjB,CAAyBuP,KAAK;UAC5B,IAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;YAClCwN,KAAK,CAAClF,WAAN,GAAoBA,WAApB;;;UAEF,IAAIgF,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;YACrCgR,KAAK,CAAClF,WAAN,GAAoBA,WAApB;;SALJ;OAlCM;MA2CRqF,eAAe,EAAE,CACfrR,UADe,EAEf2D,QAFe,EAGf;QAAEoN,OAAF;QAAWC,QAAX;QAAqBM;OAHN;;;QAKf,qBAAA3N,QAAQ,CAACsN,MAAT,uCAAiBtP,OAAjB,CAAyBuP,KAAK;UAC5B,IAAIH,OAAO,IAAIA,OAAO,IAAIG,KAAK,CAACxN,EAAhC,EAAoC;YAClCwN,KAAK,CAACI,OAAN,GAAgBA,OAAhB;;;UAEF,IAAIN,QAAQ,IAAIA,QAAQ,IAAIE,KAAK,CAAChR,GAAlC,EAAuC;YACrCgR,KAAK,CAACI,OAAN,GAAgBA,OAAhB;;SALJ;OAhDM;MAyDRvF,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OA9DM;MAgERuF,kBAAkB,EAAE,CAClBvR,UADkB,EAElB2D,QAFkB,EAGlB;QAAE6N;OAHgB;QAKlB7N,QAAQ,CAAC6N,eAAT,GAA2BA,eAA3B;OArEM;MAuERC,eAAe,EAAE,CACfzR,UADe,EAEf2D,QAFe,EAGf;QAAE+N;OAHa;QAKf/N,QAAQ,CAAC+N,YAAT,GAAwBA,YAAxB;OA5EM;MA8ERC,YAAY,EAAE,CACZ3R,UADY,EAEZ2D,QAFY,EAGZ;QAAEiO;OAHU;QAKZjO,QAAQ,CAACiO,SAAT,GAAqBA,SAArB;;KAnFJ;;;EAjCA3G,SAAS;IACP,OAAO,UAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAa,EACzB,GAAGiE,yBAAyB,EADH;MAEzB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFc;MAGzBC,IAAI,EAAE4J,KAAK,CAAC5J,IAHa;MAIzBmO,IAAI,EAAEvE,KAAK,CAACuE,IAJa;MAKzBuD,SAAS,EAAE9H,KAAK,CAAC8H,SAAN,IAAmB,EALL;MAMzBC,UAAU,EAAE/H,KAAK,CAAC+H,UAAN,IAAoB,EANP;MAOzB9I,MAAM,EAAEe,KAAK,CAACf,MAAN,GACJ;QAAE3F,MAAM,EAAE,UAAV;QAAsBK,EAAE,EAAEqG,KAAK,CAACf,MAAN,CAAatF;OADnC,GAEJhK,SATqB;MAUzBqY,SAAS,EAAE,EAVc;MAWzBd,MAAM,EACJ,kBAAAlH,KAAK,CAACkH,MAAN,mCAActV,GAAd,CAAkBqW,CAAC;QACjB,OAAO;UACLtO,EAAE,EAAEmE,EAAM,EADL;UAEL1H,IAAI,EAAE6R,CAAC,CAAC7R,IAFH;UAGL6L,WAAW,EAAEgG,CAAC,CAAChG,WAHV;UAILsF,OAAO,EAAEU,CAAC,CAACV,OAJN;UAKLW,IAAI,EAAED,CAAC,CAACC,IALH;UAML/R,GAAG,EAAE8R,CAAC,CAAC9R,GANF;UAOLuP,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;SAP5B;OADF,MAUM;KAtBV;IAwBA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC9CSuO,yBAAyBnJ;EAGpC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIoI,kBAAJ,CAAuB1I,OAAvB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,YAAP;;;;;MCNS+I,0BAA0BnH;EACrCC,SAAS;IACP,OAAO,SAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;MAExB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFa;MAGxBkS,KAAK,EAAErI,KAAK,CAACqI,KAAN,IAAe;KAHxB;IAKA,KAAKrH,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCfS0O,uBAAuBtJ;EAGlC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI0J,iBAAJ,CAAsBhK,OAAtB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,UAAP;;;;;MCHSkJ,gCAAgCtH;EAA7C5P;;IAcE,YAAA,GAAU;MACR0Q,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OANM;MAQRqS,UAAU,EAAE,CACVvS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;;KAbJ;;;EAbA8K,SAAS;IACP,OAAO,UAAP;;;EAEFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAkB,EAC9B,GAAGiE,yBAAyB,EADE;MAE9B1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFmB;MAG9BC,IAAI,EAAE4J,KAAK,CAACyI;KAHd;IAKA,KAAKzH,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCjBS8O,6BAA6B1J;EAGxC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI6J,uBAAJ,CAA4BnK,OAA5B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,iBAAP;;;;;MCNSsJ,2BAA2B1H;EACtCC,SAAS;IACP,OAAO,UAAP;;;EAEFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAa,EACzB,GAAGiE,yBAAyB,EADH;MAEzB0H,KAAK,EAAEvF,KAAK,CAACuF,KAFY;MAGzBqD,QAAQ,EAAEC,MAAM,CAACrP,IAAP,CAAYwG,KAAK,CAAC4I,QAAlB,EAA4BhN,QAA5B,CAAqC,QAArC,CAHe;MAIzBkN,eAAe,EAAE9I,KAAK,CAAC8I,eAAN,IAAyB,KAJjB;MAKzBC,SAAS,EAAE;KALb;IAOA,KAAK/H,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAEFoP,KAAK,CAAC/S,UAAD;IACH,MAAM6E,OAAO,GAAG,KAAKuD,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD,EAAlD,CAAhB;;;IACA,IAAIpG,OAAO,CAACF,KAAR,GAAgB,CAApB,EAAuB;MACrB,OAAOE,OAAO,CAACA,OAAR,CAAgB,CAAhB,CAAP;;;IAGF;;;;;MCxBSmO,wBAAwBjK;EAGnC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIiK,kBAAJ,CAAuBvK,OAAvB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,WAAP;;;;;MCJS6J,+BAA+BjI;EAC1CC,SAAS;IACP,OAAO,oBAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMmB,OAAO,GAAG,KAAKgI,sBAAL,CACdlT,UADc,EAEd+J,KAAK,CAACoJ,SAFQ,EAGdpJ,KAAK,CAAC7J,GAHQ,CAAhB;IAMA,MAAMkT,cAAc,GAAGxL,yBAAyB,EAAhD;;IACA,IAAIsD,OAAJ,EAAa;MACXkI,cAAc,CAAC1P,EAAf,GAAoBwH,OAAO,CAACxH,EAA5B;;MAEA,IAAI,CAACqG,KAAK,CAAC1I,OAAX,EAAoB;QAClB0I,KAAK,CAAC1I,OAAN,GAAgB6J,OAAO,CAAC7J,OAAxB;;;MAGFkJ,2BAA2B,CAACW,OAAD,EAAUnB,KAAK,CAAC1I,OAAhB,CAA3B;;MACA,IAAI0I,KAAK,CAACzN,KAAN,KAAgB4O,OAAO,CAAC5O,KAA5B,EAAmC;QACjC,OAAO4O,OAAP;;;MAGFkI,cAAc,CAAC/R,OAAf,GAAyB6J,OAAO,CAAC7J,OAAjC;KAZF,MAaO;MACL,IAAI0I,KAAK,CAAC1I,OAAV,EAAmB;QACjB+R,cAAc,CAAC/R,OAAf,GAAyB0I,KAAK,CAAC1I,OAA/B;;;;IAIJ,MAAMsC,QAAQ,GAAiB,EAC7B,GAAGyP,cAD0B;MAE7BD,SAAS,EAAEpJ,KAAK,CAACoJ,SAFY;MAG7BjT,GAAG,EAAE6J,KAAK,CAAC7J,GAHkB;MAI7B5D,KAAK,EAAEyN,KAAK,CAACzN;KAJf;IAOA,KAAKyO,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGFuP,sBAAsB,CAAClT,UAAD,EAAqBmT,SAArB,EAAwCjT,GAAxC;IACpB,MAAMsN,KAAK,GAAG,KAAKpF,QAAL,CAAc9E,GAAd,CAAkBtD,UAAlB,EAA8B,KAAKiL,SAAL,EAA9B,CAAd;;IAGA,OAAOuC,KAAK,CAACzJ,IAAN,CAAWnI,IAAI,IAAIA,IAAI,CAACuX,SAAL,KAAmBA,SAAnB,IAAgCvX,IAAI,CAACsE,GAAL,KAAaA,GAAhE,CAAP;;;;;MCnDSmT,4BAA4BtK;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIwK,sBAAJ,CAA2B9K,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAAC7C,GAAP,CAAW,kBAAX,EAA+B,KAAKsP,sBAAL,CAA4BhM,IAA5B,CAAiC,IAAjC,CAA/B;IACAT,MAAM,CAACO,IAAP,CAAY,kBAAZ,EAAgC,KAAKsM,yBAAL,CAA+BpM,IAA/B,CAAoC,IAApC,CAAhC;IACAT,MAAM,CAACxC,MAAP,CAAc,kBAAd,EAAkC,KAAKsP,yBAAL,CAA+BrM,IAA/B,CAAoC,IAApC,CAAlC;;;EAGFgM,sBAAsB,CAAC/M,OAAD,EAAmBiB,QAAnB;IACpB,MAAM7N,MAAM,GAAG,KAAKkP,UAAL,CAAgByK,sBAAhB,CACb/M,OAAO,CAACrE,MAAR,CAAe9B,UADF,EAEbmG,OAAO,CAACrE,MAAR,CAAeqR,SAFF,EAGbhN,OAAO,CAACrE,MAAR,CAAe5B,GAHF,CAAf;;IAMA,IAAI,CAAC3G,MAAL,EAAa;MACX,OAAO6N,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGF+Z,yBAAyB,CAACnN,OAAD,EAAmBiB,QAAnB;IACvB,MAAM2C,KAAK,GAAsB,EAC/B,GAAG5D,OAAO,CAACsB,IADoB;MAE/BvH,GAAG,EAAEiG,OAAO,CAACrE,MAAR,CAAe5B,GAFW;MAG/BiT,SAAS,EAAEhN,OAAO,CAACrE,MAAR,CAAeqR;KAH5B;IAMA,MAAM5Z,MAAM,GAAG,KAAKkP,UAAL,CAAgBuB,MAAhB,CAAuB7D,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkD+J,KAAlD,CAAf;IACA,OAAO3C,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;EAGFga,yBAAyB,CAACpN,OAAD,EAAmBiB,QAAnB;IACvB,MAAM8D,OAAO,GAAG,KAAKzC,UAAL,CAAgByK,sBAAhB,CACd/M,OAAO,CAACrE,MAAR,CAAe9B,UADD,EAEdmG,OAAO,CAACrE,MAAR,CAAeqR,SAFD,EAGdhN,OAAO,CAACrE,MAAR,CAAe5B,GAHD,CAAhB;;IAMA,IAAI,CAACgL,OAAL,EAAc;MACZ,OAAO9D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAGF,MAAMpO,MAAM,GAAG,KAAKkP,UAAL,CAAgBxE,MAAhB,CAAuBkC,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkDkL,OAAO,CAACxH,EAA1D,CAAf;IAEA,OAAO0D,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BpO,MAA1B,CAAP;;;;;MCxCSia,+BAA+BxI;EAA5C5P;;IA+BE,YAAA,GASI;MACFoR,cAAc,EAAE,CACdxM,UADc,EAEd2D,QAFc,EAGd;QAAE8I;OAHY;QAKd9I,QAAQ,CAAC8I,QAAT,GAAoBA,QAApB;OANA;MAQFgH,mBAAmB,EAAE,CACnBzT,UADmB,EAEnB2D,QAFmB,EAGnB;QAAE+P;OAHiB;QAKnB/P,QAAQ,CAAC+P,aAAT,GAAyBA,aAAa,CAAC/X,GAAd,CACtBmB,GAAD,KAAiC;UAC/BuG,MAAM,EAAE,eADuB;UAE/BK,EAAE,EAAE5G,GAAG,CAAC4G;SAFV,CADuB,CAAzB;OAbA;MAoBFqI,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OAzBA;MA2BF2H,gBAAgB,EAAE,CAChB3T,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE+I;OAHc;QAKhB/I,QAAQ,CAAC+I,aAAT,GAAyBA,aAAzB;OAhCA;MAkCFkH,OAAO,EAAE,CACP5T,UADO,EAEP2D,QAFO,EAGP;QAAExD;OAHK;QAKPwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OAvCA;MAyCF0T,kBAAkB,EAAE,CAClB7T,UADkB,EAElB2D,QAFkB,EAGlB;QAAEmQ;OAHgB;QAKlBnQ,QAAQ,CAACmQ,eAAT,GAA2BA,eAA3B;OA9CA;MAgDFC,6BAA6B,EAAE,CAC7B/T,UAD6B,EAE7B2D,QAF6B,EAG7B;QACEqQ;OAJ2B;QAO7BrQ,QAAQ,CAACqQ,0BAAT,GAAsCA,0BAAtC;OAvDA;MAyDF/H,YAAY,EAAE,CACZjM,UADY,EAEZ2D,QAFY,EAGZ;QAAEuI;OAHU;QAKZvI,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;OA9DA;MAgEFC,aAAa,EAAE,CACbnM,UADa,EAEb2D,QAFa,EAGb;QAAEyI;OAHW;QAKbzI,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;OArEA;MAuEFC,oBAAoB,EAAE,CACpBrM,UADoB,EAEpB2D,QAFoB,EAGpB;QAAEuI,SAAF;QAAaE;OAHO;QAKpBzI,QAAQ,CAACuI,SAAT,GAAqBA,SAArB;QACAvI,QAAQ,CAACyI,UAAT,GAAsBA,UAAtB;;KAtFJ;;;EA9BAnB,SAAS;IACP,OAAO,eAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;MAE7BqM,kBAAkB,EAAE,CAFS;MAG7BP,aAAa,EAAE3J,KAAK,CAAC2J,aAAN,CAAoB/X,GAApB,CACZmB,GAAD,KAAiC;QAC/BuG,MAAM,EAAE,eADuB;QAE/BK,EAAE,EAAE5G,GAAG,CAAC4G;OAFV,CADa,CAHc;MAS7BgJ,aAAa,EAAE3C,KAAK,CAAC2C,aATQ;MAU7BpI,IAAI,EAAEyF,KAAK,CAACzF,IAViB;MAW7B0H,WAAW,EAAEjC,KAAK,CAACiC,WAXU;MAY7BnO,MAAM,EAAEkM,KAAK,CAAClM,MAAN,IAAgB,EAZK;MAa7B4O,QAAQ,EAAE1C,KAAK,CAAC0C,QAAN,IAAkB,IAbC;MAc7BtM,IAAI,EAAE4J,KAAK,CAAC5J,IAdiB;MAe7BwM,UAAU,EAAE,EAfiB;MAgB7BT,SAAS,EAAEnC,KAAK,CAACmC,SAhBY;MAiB7BE,UAAU,EAAErC,KAAK,CAACqC,UAjBW;MAkB7B0H,eAAe,EAAE/J,KAAK,CAAC+J,eAlBM;MAmB7BE,0BAA0B,EAAEjK,KAAK,CAACiK;KAnBpC;IAqBA,KAAKjJ,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC5CSuQ,4BAA4BnL;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI+K,sBAAJ,CAA2BrL,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;;;MCAS+K,4BAA4BnJ;EAAzC5P;;IAiBE,YAAA,GAGI;MACF0Q,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OANA;MAQFkU,cAAc,EAAE,CACdpU,UADc,EAEd2D,QAFc,EAGd;QAAE0Q;OAHY;QAKd1Q,QAAQ,CAAC0Q,WAAT,GAAuBA,WAAvB;OAbA;MAeFC,cAAc,EAAE,CACdtU,UADc,EAEd2D,QAFc,EAGd;QAAE4Q;OAHY;QAKd5Q,QAAQ,CAAC4Q,QAAT,GAAoBA,QAApB;OApBA;MAsBFC,iBAAiB,EAAE,CACjBxU,UADiB,EAEjB2D,QAFiB,EAGjB;QAAE8Q;OAHe;QAKjB9Q,QAAQ,CAAC8Q,WAAT,GAAuBA,WAAvB;;KA9BJ;;;EAhBAxJ,SAAS;IACP,OAAO,WAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAc,EAC1B,GAAGiE,yBAAyB,EADF;MAE1B1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFe;MAG1BmU,WAAW,EAAEtK,KAAK,CAACsK,WAHO;MAI1BI,WAAW,EAAE1K,KAAK,CAAC0K,WAJO;MAK1BF,QAAQ,EAAExK,KAAK,CAACwK;KALlB;IAOA,KAAKxJ,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCvBS+Q,0BAA0B3L;EAGrC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI0L,mBAAJ,CAAwBhM,OAAxB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,YAAP;;;;;MCCSuL,iCAAiC3J;EAA9C5P;;IAwBE,YAAA,GAAU;MACRwZ,cAAc,EAAE,CACd5U,UADc,EAEd2D,QAFc,EAGd;QAAE2J;OAHY;QAKd3J,QAAQ,CAACkR,eAAT,GAA2BvH,QAA3B;;QAEA3J,QAAQ,CAACmR,iBAAT,GAA6BxH,QAA7B;OARM;MAURyH,mBAAmB,EAAE,CACnB/U,UADmB,EAEnB2D,QAFmB,EAGnB;QAAEqR;OAHiB;QAKnBrR,QAAQ,CAACqR,gBAAT,GAA4B,IAAIlN,IAAJ,CAASkN,gBAAT,EAA4BjN,WAA5B,EAA5B;OAfM;MAiBRyH,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;QAAExD,IAAF;QAAQ7D;OAHM;QAKd,IAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;UACpB,MAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;;;QAEF6E,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;OAzBM;MA2BRoT,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;QAAEvH,IAAF;QAAQgP;OAHK;QAKb,IAAI,CAAChP,IAAL,EAAW;UACTuH,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;SADF,MAEO;UACL,MAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;UAIA,IAAI,CAACuT,YAAL,EAAmB;YACjB,MAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;;;UAGFuH,QAAQ,CAAC8L,MAAT,GAAkB;YAChBrT,IAAI,EAAE;cACJiH,MAAM,EAAE,MADJ;cAEJK,EAAE,EAAEiM,YAAY,CAACjM;aAHH;YAKhB0H,MAAM,EAAEA,MAAM,IAAI;WALpB;;OA3CI;MAoDR6J,oBAAoB,EAAE,CACpBjV,UADoB,EAEpB2D,QAFoB,EAGpB;QAAEuR;OAHkB;QAKpBvR,QAAQ,CAACuR,iBAAT,GAA6BA,iBAA7B;;KAzDJ;;;EAvBAjK,SAAS;IACP,OAAO,iBAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAmB,EAC/B,GAAGiE,yBAAyB,EADG;MAE/ByF,GAAG,EAAEtD,KAAK,CAACsD,GAFoB;MAG/BwH,eAAe,EAAE9K,KAAK,CAAC8K,eAHQ;MAI/BC,iBAAiB,EAAE/K,KAAK,CAAC8K,eAJM;MAK/BG,gBAAgB,EAAEjL,KAAK,CAACiL,gBALO;MAM/BE,iBAAiB,EAAEnL,KAAK,CAACmL,iBANM;MAO/BC,aAAa,EAAE,EACb,GAAGpL,KAAK,CAACoL,aADI;QAEb9R,MAAM,EAAE,SAFK;QAGbK,EAAE,mDAAEqG,KAAK,CAACoL,aAAR,qBAAE,qBAAqBzR,EAAvB,oCAA6B;OAVF;MAY/B+L,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAZ5B;IAcA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC/BSyR,8BAA8BrM;EAGzC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIkM,wBAAJ,CAA6BxM,OAA7B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,WAAP;;;;;MCTSiM,sBAAsBtM;EAGjC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIwE,cAAJ,CAAmB9E,OAAnB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,IAAP;;;EAGFH,cAAc,CAACD,MAAD;;IAEZ,MAAMG,QAAQ,GAAG,KAAKC,WAAL,EAAjB;IACA,MAAM3C,MAAM,GAAGE,MAAM,CAAC;MAAE0C,WAAW,EAAE;KAAhB,CAArB;IAEA,KAAKH,WAAL,CAAiBzC,MAAjB;IAEAA,MAAM,CAAC7C,GAAP,CAAW,cAAX,EAA2B,KAAK0R,UAAL,CAAgBpO,IAAhB,CAAqB,IAArB,CAA3B;IACAT,MAAM,CAAC7C,GAAP,CAAW,SAAX,EAAsB,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAtB;IACAT,MAAM,CAAC7C,GAAP,CAAW,YAAX,EAAyB,KAAK2F,SAAL,CAAerC,IAAf,CAAoB,IAApB,CAAzB;IAEAT,MAAM,CAACxC,MAAP,CAAc,YAAd,EAA4B,KAAKwF,YAAL,CAAkBvC,IAAlB,CAAuB,IAAvB,CAA5B;IAEAT,MAAM,CAACO,IAAP,CAAY,SAAZ,EAAuB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAvB;IACAT,MAAM,CAACO,IAAP,CAAY,YAAZ,EAA0B,KAAK2C,UAAL,CAAgBzC,IAAhB,CAAqB,IAArB,CAA1B;IAEA8B,MAAM,CAACpC,GAAP,KAAeuC,UAAf,EAA2B1C,MAA3B;;;EAGF6O,UAAU,CAACnP,OAAD,EAAmBiB,QAAnB;IACR,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBgI,aAAhB,CAA8BtK,OAAO,CAACrE,MAAR,CAAe9B,UAA7C,CAAjB;;IACA,IAAI,CAAC2D,QAAL,EAAe;MACb,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;;;MCjBS4R,0BAA0BvK;EAAvC5P;;;IAoCE,oCAAA,GAAkC,CAChC2O,KADgC,EAEhC/J,UAFgC,MAG5B,EACJ,GAAG+J,KADC;MAEJrG,EAAE,EAAEmE,EAAM,EAFN;MAGJ2N,MAAM,EAAEjK,gBAAgB,CAACxB,KAAK,CAACyL,MAAP,CAHpB;MAIJ/F,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAPM,CAAlC;;IAUA,YAAA,GAAU;MACRoH,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;QAAExD,IAAF;QAAQ7D;OAHM;QAKd,IAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;UACpB,MAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;;;QAGF6E,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;OAVM;MAYRoT,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;QAAEvH,IAAF;QAAQgP;OAHK;QAKb,IAAI,CAAChP,IAAL,EAAW;UACTuH,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;SADF,MAEO;UACL,MAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;UAIA,IAAI,CAACuT,YAAL,EAAmB;YACjB,MAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;;;UAGFuH,QAAQ,CAAC8L,MAAT,GAAkB;YAChBrT,IAAI,EAAE;cACJiH,MAAM,EAAE,MADJ;cAEJK,EAAE,EAAEiM,YAAY,CAACjM;aAHH;YAKhB0H,MAAM,EAAEA,MAAM,IAAI;WALpB;;OA5BI;MAqCRqK,cAAc,EAAE,CACdzV,UADc,EAEd2D,QAFc,EAGd;QAAE+R;OAHY;QAKd/R,QAAQ,CAACgS,YAAT,GAAwB,CACtB,GAAGhS,QAAQ,CAACgS,YADU,EAEtB,KAAKC,+BAAL,CAAqCF,WAArC,EAAkD1V,UAAlD,CAFsB,CAAxB;OA1CM;MA+CR6V,sBAAsB,EAAE,CACtBC,WADsB,EAEtBnS,QAFsB,EAGtB;QAAEoS,aAAF;QAAiBjT;OAHK;QAKtB,MAAMrJ,KAAK,GAAGkK,QAAQ,CAACgS,YAAT,CAAsBK,SAAtB,CACXhS,CAAD,IAAoBA,CAAC,CAACN,EAAF,KAASqS,aADjB,CAAd;QAGA,MAAME,kBAAkB,GAAgB,EACtC,GAAGtS,QAAQ,CAACgS,YAAT,CAAsBlc,KAAtB,CADmC;UAEtCqJ;SAFF;QAIAa,QAAQ,CAACgS,YAAT,CAAsBlc,KAAtB,IAA+Bwc,kBAA/B;OA3DM;MA6DRC,eAAe,EAAE,CACflW,UADe,EAEf2D,QAFe,EAGf;QAAEb;OAHa;QAKf,MAAMqT,QAAQ,GAAG,KAAK/N,QAAL,CAActD,uBAAd,CACf9E,UADe,EAEf8C,KAFe,CAAjB;;QAKA,IAAI,CAACqT,QAAL,EAAe;UACb,MAAM,IAAIrX,KAAJ,UAAmBgE,iBAAnB,CAAN;;;QAGFa,QAAQ,CAACyS,aAAT,CAAuBtT,KAAvB,GAA+B;UAC7BO,MAAM,EAAE,OADqB;UAE7BK,EAAE,EAAEyS,QAAQ,CAACzS,EAFgB;UAG7B5G,GAAG,EAAEqZ;SAHP;;KA3EJ;;;EA7CAlL,SAAS;IACP,OAAO,SAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;MAExByO,aAAa,EAAE9K,gBAAgB,CAACxB,KAAK,CAACsM,aAAP,CAFP;MAGxBC,iBAAiB,EAAEvM,KAAK,CAACuM,iBAHD;MAIxBF,aAAa,EAAErM,KAAK,CAACqM,aAAN,GACX,EACE,GAAGrM,KAAK,CAACqM,aADX;QAEEtT,KAAK,EAAEiH,KAAK,CAACqM,aAAN,CAAoBtT,KAApB,GACH6I,kCAAkC,CAChC5B,KAAK,CAACqM,aAAN,CAAoBtT,KADY,EAEhC9C,UAFgC,EAGhC,KAAKoI,QAH2B,CAD/B,GAMH1O;OATK,GAWX,EAfoB;MAgBxBic,YAAY,EAAE,CAAC5L,KAAK,CAAC4L,YAAN,IAAsB,EAAvB,EAA2Bha,GAA3B,CAA+BgC,CAAC,IAC5C,KAAKiY,+BAAL,CAAqCjY,CAArC,EAAwCqC,UAAxC,CADY,CAhBU;MAmBxBuW,qBAAqB,EAAE,CAACxM,KAAK,CAACwM,qBAAN,IAA+B,EAAhC,EAAoC5a,GAApC,CACrB6a,WAAW,IACTrL,kBAAkB,CAACqL,WAAD,EAAcxW,UAAd,EAA0B,KAAKoI,QAA/B,CAFC,CAnBC;MAuBxBqH,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAvB5B;IA0BA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCpDS8S,yBAAyB1N;EAGpC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI8M,iBAAJ,CAAsBpN,OAAtB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,aAAP;;;;;MCyBSsN,wBAAwB1L;EAArC5P;;IAgLE,YAAA,GAAU;MACRub,UAAU,EAAE,CACV3W,UADU,EAEV2D,QAFU,EAGV;QAAEf;OAHQ;QAKV,MAAMgU,eAAe,GAAG,KAAKxO,QAAL,CAActD,uBAAd,CACtB9E,UADsB,EAEtB4C,OAFsB,CAAxB;;QAIA,IAAI,CAACgU,eAAL,EAAsB;UACpB,MAAM,IAAI9X,KAAJ,YAAqB8D,OAAO,CAACc,cAA7B,CAAN;;;QAGF,IAAI,CAACC,QAAQ,CAACkT,WAAd,EAA2B;UACzBlT,QAAQ,CAACkT,WAAT,GAAuB;YACrBC,QAAQ,EAAE;WADZ;;;QAKFnT,QAAQ,CAACkT,WAAT,CAAqBC,QAArB,CAA8B/Q,IAA9B,CAAmC;UACjC1C,MAAM,EAAE,SADyB;UAEjCK,EAAE,EAAEd,OAAO,CAACc;SAFd;OApBM;MAyBRqT,gBAAgB,EAAE,CAChB/W,UADgB,EAEhB2D,QAFgB,EAGhB;QAAEqT;OAHc;QAKhBrT,QAAQ,CAACqT,UAAT,GAAsBA,UAAtB;OA9BM;MAgCRC,kBAAkB,EAAE,CAClBjX,UADkB,EAElB2D,QAFkB,EAGlB;QAAEuT;OAHgB;QAKlBvT,QAAQ,CAACuT,YAAT,GAAwBA,YAAxB;OArCM;MAuCRlI,iBAAiB,EAAE,CACjBhP,UADiB,EAEjB2D,QAFiB,EAGjB;QAAEsL;OAHe;QAKjBtL,QAAQ,CAACuL,cAAT,GAA0BD,OAA1B;OA5CM;MA8CRI,gBAAgB,EAAE,CAChBrP,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE2L;OAHc;QAKhB3L,QAAQ,CAAC4L,aAAT,GAAyBD,KAAzB;OAnDM;MAqDRE,cAAc,EAAE,CACdxP,UADc,EAEd2D,QAFc,EAGd;QAAExD,IAAF;QAAQ7D;OAHM;QAKd,IAAI,CAACqH,QAAQ,CAAC8L,MAAd,EAAsB;UACpB,MAAM,IAAI3Q,KAAJ,CAAU,8BAAV,CAAN;;;QAEF6E,QAAQ,CAAC8L,MAAT,CAAgBrE,MAAhB,CAAuBjL,IAAvB,IAA+B7D,KAA/B;OA7DM;MA+DRoT,aAAa,EAAE,CACb1P,UADa,EAEb2D,QAFa,EAGb;QAAEvH,IAAF;QAAQgP;OAHK;QAKb,IAAI,CAAChP,IAAL,EAAW;UACTuH,QAAQ,CAAC8L,MAAT,GAAkB/V,SAAlB;SADF,MAEO;UACL,MAAMiW,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB5D,IAFmB,CAArB;;UAIA,IAAI,CAACuT,YAAL,EAAmB;YACjB,MAAM,IAAI7Q,KAAJ,SAAkB1C,gBAAlB,CAAN;;;UAGFuH,QAAQ,CAAC8L,MAAT,GAAkB;YAChBrT,IAAI,EAAE;cACJiH,MAAM,EAAE,MADJ;cAEJK,EAAE,EAAEiM,YAAY,CAACjM;aAHH;YAKhB0H,MAAM,EAAEA,MAAM,IAAI;WALpB;;OA/EI;MAwFRwE,SAAS,EAAE,CACT5P,UADS,EAET2D,QAFS,EAGT;QAAEkM;OAHO;QAKTlM,QAAQ,CAACkM,MAAT,GAAkBA,MAAlB;OA7FM;MA+FRsH,cAAc,EAAE,CACdnX,UADc,EAEd2D,QAFc,EAGd;QAAEyT;OAHY;QAKdzT,QAAQ,CAACyT,WAAT,GAAuBA,WAAvB;OApGM;MAsGRtH,kBAAkB,EAAE,CAClB9P,UADkB,EAElB2D,QAFkB,EAGlB;QAAEsL;OAHgB;QAKlBtL,QAAQ,CAACoM,eAAT,GAA2Bd,OAA3B;OA3GM;MA6GRoI,QAAQ,EAAE,CACRrX,UADQ,EAER2D,QAFQ,EAGR;QAAEZ;OAHM;QAKR,IAAI,CAACA,KAAL,EAAY;;QACZ,MAAM4M,YAAY,GAAG,KAAKvH,QAAL,CAActD,uBAAd,CACnB9E,UADmB,EAEnB+C,KAFmB,CAArB;;QAIA,IAAI,CAAC4M,YAAL,EAAmB;UACjB,MAAM,IAAI7Q,KAAJ,4BAAqCiE,KAAK,CAAC7C,KAA3C,CAAN;;;QAGF,MAAMoX,cAAc,GAAG3H,YAAvB;QACAhM,QAAQ,CAACZ,KAAT,GAAiB;UACfM,MAAM,EAAE,OADO;UAEfnD,GAAG,EAAEoX,cAAc,CAACpX;SAFtB;;KA5HJ;;;EA/KA+K,SAAS;IACP,OAAO,OAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJlG,MAAM,CAACkG,KAAK,CAAC1H,IAAP,EAAa,uBAAb,CAAN;;IAEA,MAAMA,IAAI,GAAG,KAAK+F,QAAL,CAActD,uBAAd,CACX9E,UADW,EAEX+J,KAAK,CAAC1H,IAFK,CAAb;;IAIA,IAAI,CAACA,IAAL,EAAW;MACT,MAAM,IAAIvD,KAAJ,CAAU,kBAAV,CAAN;;;IAGF,MAAM6E,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;MAEtBwP,WAAW,EAAErN,KAAK,CAACqN,WAFG;MAGtBJ,UAAU,EAAE,MAHU;MAItBlJ,SAAS,EAAE,EAJW;MAKtBmC,eAAe,EAAE,EALK;MAMtBlC,UAAU,EAAE1L,IAAI,CAAC0L,UANK;MAOtBwC,YAAY,EAAE,EAPQ;MAQtBC,MAAM,EAAE,UARc;MAStB+G,QAAQ,EAAE,EATY;MAUtBC,yBAAyB,EAAE;KAV7B;IAYA,KAAKzM,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGF8T,MAAM,CAACzX,UAAD,EAAqB+J,KAArB;;;;IAEJlG,MAAM,CAAC,IAAD,EAAO,2BAAP,CAAN;IACA,MAAMF,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;MAGtBsH,cAAc,EAAEnF,KAAK,CAACmF,cAHA;MAItBa,eAAe,EAAEhG,KAAK,CAACgG,eAJD;MAMtBN,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CANJ;MAOtBmH,aAAa,EAAExF,KAAK,CAACwF,aAPC;MAQtBiI,yBAAyB,EAAE,CARL;MAStBJ,WAAW,EAAErN,KAAK,CAACqN,WATG;MAUtBJ,UAAU,EAAEjN,KAAK,CAACiN,UAAN,IAAoB,MAVV;MAWtBxG,MAAM,EAAEzG,KAAK,CAACyG,MAAN,IAAgB,UAXF;MAYtB0G,YAAY,EAAEnN,KAAK,CAACmN,YAZE;MAatB3G,YAAY,EAAE,EAbQ;MActBxN,KAAK,EAAE0I,qBAAqB,CAAC1B,KAAK,CAAChH,KAAP,EAAc/C,UAAd,EAA0B,KAAKoI,QAA/B,CAdN;MAetBmP,QAAQ,EAAE,EAfY;MAiBtBzJ,SAAS,EACP,qBAAA/D,KAAK,CAAC+D,SAAN,sCAAiBnS,GAAjB,CAAqBC,IAAI,IACvB,KAAK8b,uBAAL,CAA6BxQ,IAA7B,CAAkC,IAAlC,EAAwClH,UAAxC,EAAoDpE,IAApD,CADF,MAEK,EApBe;MAqBtBqU,eAAe,EACb,0BAAAlG,KAAK,CAACkG,eAAN,2CAAuBtU,GAAvB,CAA2BC,IAAI,IAC7B,KAAK+b,6BAAL,CAAmCzQ,IAAnC,CAAwC,IAAxC,EAA8ClH,UAA9C,EAA0DpE,IAA1D,CADF,MAEK,EAxBe;MA0BtBmS,UAAU,EAAE;QACV3R,IAAI,EAAE,eADI;QAEV,GAAG2N,KAAK,CAACgE,UAFC;QAGVvC,cAAc,EAAE;;KA7BpB;IAgCA,KAAKT,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGM+T,uBAAuB,CAC7B1X,UAD6B,EAE7B+J,KAF6B;IAI7B,IAAIlH,OAAJ;IACA,IAAI0K,OAAJ;;IAEA,IAAIxD,KAAK,CAACwD,OAAN,CAAcF,GAAlB,EAAuB;MACrBE,OAAO,GAAG;QACR7J,EAAE,EAAE,CADI;QAER2J,GAAG,EAAEtD,KAAK,CAACwD,OAAN,CAAcF;OAFrB;;MAKA,IAAIG,KAAK,GAAG,KAAKpF,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,SAAhC,EAA2C;QACrDmE,KAAK,EAAE,0CACoC4F,KAAK,CAACwD,OAAN,CAAcF,+CAA+CtD,KAAK,CAACwD,OAAN,CAAcF,SAD/G;OADG,CAAZ;;MAMA,IAAIG,KAAK,CAAC7I,KAAN,KAAgB,CAApB,EAAuB;QACrB,MAAM,IAAIhF,kBAAJ,CAAqC;UACzC2E,IAAI,EAAE,SADmC;UAEzCjJ,OAAO,8CAA8C0O,KAAK,CAACwD,OAAN,CAAcF;SAF/D,CAAN;;;MAMFxK,OAAO,GAAG2K,KAAK,CAAC3I,OAAN,CAAc,CAAd,CAAV;;MACA,IAAIhC,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aAA3B,CAAyCL,GAAzC,KAAiDtD,KAAK,CAACwD,OAAN,CAAcF,GAAnE,EAAwE;QACtEE,OAAO,GAAG1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2BwC,aAArC;OADF,MAEO;QACLH,OAAO,GAAG1K,OAAO,CAAC4K,UAAR,CAAmBvC,OAAnB,CAA2ByC,QAA3B,CAAoC5J,IAApC,CACR7G,CAAC,IAAIA,CAAC,CAACmQ,GAAF,KAAUtD,KAAK,CAACwD,OAAN,CAAcF,GADrB,CAAV;;;MAIF,IAAI,CAACE,OAAL,EAAc;QACZ,MAAM,IAAIzO,KAAJ,CAAU,sBAAV,CAAN;;KA5BJ,MA8BO;MACL,MAAM,IAAIA,KAAJ,CAAU,kBAAV,CAAN;;;IAGF,MAAMgQ,QAAQ,GAAa,EACzB,GAAGlH,yBAAyB,EADH;MAEzB6H,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAFD;MAGzBoG,0BAA0B,EAAE,EAHH;MAIzBC,YAAY,EAAE,UAJW;MAKzBtO,IAAI,EAAE4J,KAAK,CAAC5J,IALa;MAMzBgO,KAAK,EAAE7C,WAAW,CAACvB,KAAK,CAACoE,KAAP,CANO;MAOzBO,SAAS,EAAE,UAPc;MAQzBvB,SAAS,EAAEtK,OAAO,CAACa,EARM;MASzB6K,WAAW,EAAE1L,OAAO,CAAC0L,WATI;MAUzBjB,QAAQ,EAAEvD,KAAK,CAACuD,QAVS;MAWzBxK,KAAK,EAAEiH,KAAK,CAACjH,KAAN,IAAe,EAXG;MAYzB8U,OAAO,EAAE7N,KAAK,CAAC6N,OAZU;MAazB7J,UAAU,EAAExC,gBAAgB,CAACxB,KAAK,CAACoE,KAAN,CAAY7R,KAAb,CAbH;MAczBiR,OAAO,EAAE;QACP7J,EAAE,EAAE6J,OAAO,CAAC7J,EADL;QAEP2J,GAAG,EAAEE,OAAO,CAACF,GAFN;QAGPc,KAAK,EAAE7C,WAAW,CAACvB,KAAK,CAACoE,KAAP;;KAjBtB;IAqBA,OAAOW,QAAP;;;EAGM6I,6BAA6B,CACnC3X,UADmC,EAEnC+J,KAFmC;IAInC,MAAM+E,QAAQ,GAAmB,EAC/B,GAAGlH,yBAAyB,EADG;MAE/B6H,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAFK;MAG/BoG,0BAA0B,EAAE,EAHG;MAI/BzB,KAAK,EAAExB,gBAAgB,CAACxB,KAAK,CAACgD,KAAP,CAJQ;MAK/B5M,IAAI,EAAE4J,KAAK,CAAC5J,IALmB;MAM/BmN,QAAQ,EAAEvD,KAAK,CAACuD,QANe;MAO/BgB,IAAI,EAAEvE,KAAK,CAACuE,IAPmB;MAQ/BxL,KAAK,EAAE,EARwB;MAS/BiL,UAAU,EAAExC,gBAAgB,CAACxB,KAAK,CAACgD,KAAP;KAT9B;IAYA,OAAO+B,QAAP;;;EAGF+I,kBAAkB,CAChB7X,UADgB,EAEhBoX,WAFgB,EAGhBtV,SAAsB,EAHN;IAKhB,MAAMvI,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD,EAC/D,GAAGnJ,MAD4D;MAE/DqC,KAAK,EAAE,iBAAiBiT,cAAjB;KAFM,CAAf;;IAIA,IAAI7d,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;MACtB,OAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;;;;IAIF,IAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;MACpB,MAAM,IAAI7F,KAAJ,CAAU,yBAAV,CAAN;;;IAGF;;;;;MC/MSgZ,qBAAqB/O;EAGhC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIiO,eAAJ,CAAoBvO,OAApB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,QAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAACO,IAAP,CAAY,SAAZ,EAAuB,KAAKyQ,MAAL,CAAYvQ,IAAZ,CAAiB,IAAjB,CAAvB;IACAT,MAAM,CAAC7C,GAAP,CAAW,4BAAX,EAAyC,KAAKiU,kBAAL,CAAwB3Q,IAAxB,CAA6B,IAA7B,CAAzC;;;EAGFuQ,MAAM,CAACtR,OAAD,EAAmBiB,QAAnB;IACJ,MAAM2Q,WAAW,GAAG5R,OAAO,CAACsB,IAA5B;IACA,MAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgBgP,MAAhB,CACftR,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEf+X,WAFe,CAAjB;IAIA,OAAO3Q,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;EAGFkU,kBAAkB,CAAC1R,OAAD,EAAmBiB,QAAnB;IAChB,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBoP,kBAAhB,CACf1R,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAesV,WAFA,EAGfjR,OAAO,CAACjC,KAHO,CAAjB;;IAKA,IAAIP,QAAJ,EAAc;MACZ,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;IAEF,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;;;MCnCSqQ,uBAAuBjP;EAGlC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI8M,iBAAJ,CAAsBpN,OAAtB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,UAAP;;;;;ACdG,MAAM6O,qBAAqB,GAAIhb,MAAD;EACnC,IAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;IAC9B,MAAMib,OAAO,GAAGjb,MAAM,CAACtB,GAAP,CAAWsC,KAAX,CAAhB;IACA,OAAOia,OAAO,CAACC,IAAR,CAAa,OAAb,CAAP;;;EAEF,OAAOla,KAAK,CAAChB,MAAD,CAAZ;AACD,CANM;;AAQP,MAAMgB,KAAK,GAAIhB,MAAD;EACZ,IAAImb,MAAM,GAAGnb,MAAM,CAACob,OAAP,CAAe,IAAf,EAAqB,GAArB,CAAb;;EAEA,GAAG;IACDD,MAAM,GAAGA,MAAM,CAACC,OAAP,CAAe,mBAAf,EAAoC,WAApC,CAAT;GADF,QAESD,MAAM,CAACnZ,QAAP,CAAgB,GAAhB,CAFT;;EAIA,OAAOmZ,MAAP;AACD,CARD;;MCIaE,oCAAoCtN;EAAjD5P;;IAoDE,YAAA,GAAU,EAAV;;;EAnDA6P,SAAS;IACP,OAAO,oBAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,IAAI,CAACA,KAAK,CAAC2D,aAAX,EAA0B;MACxB,MAAM,IAAI5O,KAAJ,gEAC2DiL,KAAK,CAAC7J,KADjE,CAAN;;;IAKF,IAAI,CAAC6J,KAAK,CAACwE,WAAN,CAAkB7K,EAAvB,EAA2B;MACzB,MAAM,IAAI5E,KAAJ,kEAC6DiL,KAAK,CAAC7J,KADnE,CAAN;;;IAKF,MAAMyD,QAAQ,GAAsB,EAClC,GAAGiE,yBAAyB,EADM;MAElCzH,IAAI,EAAE4J,KAAK,CAAC5J,IAFsB;MAGlCmO,IAAI,EAAEvE,KAAK,CAACuE,IAHsB;MAIlCiK,UAAU,EAAE,EAJsB;MAKlChK,WAAW,EAAE,EAAE,GAAGxE,KAAK,CAACwE,WAAX;QAAwB7K,EAAE,EAAEqG,KAAK,CAACwE,WAAN,CAAkB7K;OALzB;MAMlCgK,aAAa,EAAE8K,gBAAgB,CAAC,CAAD,EAAIzO,KAAK,CAAC2D,aAAV,CANG;MAOlCC,QAAQ,4CACN5D,KAAK,CAAC4D,QADA,qBACN,gBAAgBhS,GAAhB,CAAoB,CAAC4R,OAAD,EAAU9T,KAAV;QAClB,OAAO+e,gBAAgB,CAAC/e,KAAK,GAAG,CAAT,EAAY8T,OAAZ,CAAvB;OADF,CADM,kCAGA,EAV0B;;MAalCkL,cAAc,EAAE1O,KAAK,CAAC0O;KAbxB;IAgBA,KAAK1N,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IAEA,OAAOA,QAAP;;;EAGF+U,MAAM,CAAC1Y,UAAD,EAAqBkE,KAArB;;;IACJ,MAAMjH,MAAM,yBAAIiH,KAAK,CAAC,cAAD,CAAT,iCAA6BA,KAAK,CAACjH,MAA/C;IACA,MAAM0b,cAAc,GAAG1b,MAAM,GAAGgb,qBAAqB,CAAChb,MAAD,CAAxB,GAAmCvD,SAAhE;;IAEA,MAAMmL,OAAO,GAAG,KAAKuD,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MAChE9G,KAAK,EAAEwU,cADyD;MAEhEnU,MAAM,EAAEN,KAAK,CAACM,MAAN,GAAeqF,MAAM,CAAC3F,KAAK,CAACM,MAAP,CAArB,GAAsC9K,SAFkB;MAGhE+K,KAAK,EAAEP,KAAK,CAACO,KAAN,GAAcoF,MAAM,CAAC3F,KAAK,CAACO,KAAP,CAApB,GAAoC/K;KAH7B,CAAhB;;;IAMA,OAAOmL,OAAP;;;;;AAMJ,MAAM2T,gBAAgB,GAAG,CACvBpL,SADuB,EAEvBG,OAFuB;EAIvB,OAAO;IACL7J,EAAE,EAAE0J,SADC;IAELC,GAAG,EAAEE,OAAF,oBAAEA,OAAO,CAAEF,GAFT;IAGLuL,UAAU,EAAErL,OAAF,oBAAEA,OAAO,CAAEqL;GAHvB;AAKD,CATD;;MC9DaC,iCAAiC9P;EAG5C3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI6P,2BAAJ,CAAgCnQ,OAAhC,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,qBAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAAC7C,GAAP,CAAW,SAAX,EAAsB,KAAK8U,MAAL,CAAYxR,IAAZ,CAAiB,IAAjB,CAAtB;;;EAGFwR,MAAM,CAACvS,OAAD,EAAmBiB,QAAnB;IACJ,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBiQ,MAAhB,CACfvS,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACjC,KAFO,CAAjB;IAIA,OAAOkD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;;;MCXSmV,0BAA0B9N;EAAvC5P;;IAuCE,YAAA,GAAU;MACR2d,OAAO,EAAE,CACP/Y,UADO,EAEP2D,QAFO,EAGP;QAAE6B;OAHK;QAKP,IAAI7B,QAAQ,CAAC8J,UAAT,CAAoBuL,MAAxB,EAAgC;UAC9BrV,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,GAA8BvH,QAAQ,CAAC8J,UAAT,CAAoBuL,MAAlD,CAD8B;;UAG9BrV,QAAQ,CAAC8J,UAAT,CAAoBuL,MAApB,GAA6Btf,SAA7B;;;QAEFiK,QAAQ,CAAC8J,UAAT,CAAoBwL,gBAApB,GAAuC,KAAvC;QACAtV,QAAQ,CAAC8J,UAAT,CAAoByL,SAApB,GAAgC,IAAhC;OAZM;MAcRC,YAAY,EAAE,CACZnZ,UADY,EAEZ2D,QAFY,EAGZ;QAAEyJ,SAAF;QAAaC,GAAb;QAAkBlN,IAAlB;QAAwB7D,KAAxB;QAA+B0c;OAHnB;QAKZ,MAAMI,QAAQ,GAAGJ,MAAM,KAAKtf,SAAX,GAAuBsf,MAAvB,GAAgC,KAAjD;QACA,MAAMK,WAAW,GAAGC,cAAc,CAAC3V,QAAD,EAAWyV,QAAX,CAAlC;QACA,MAAM;UAAE7L,OAAF;UAAWgM,eAAX;UAA4BC;YAAiBC,UAAU,CAC3DJ,WAD2D,EAE3DjM,SAF2D,EAG3DC,GAH2D,CAA7D;;QAKA,IAAI,CAACE,OAAL,EAAc;UACZ,MAAM,IAAIzO,KAAJ,oBACesO,oBAAoBC,4BAA4B1J,QAAQ,CAACD,IADxE,CAAN;;;QAKF,IAAI,CAAC6J,OAAO,CAACqL,UAAb,EAAyB;UACvBrL,OAAO,CAACqL,UAAR,GAAqB,EAArB;;;QAGF,MAAMc,YAAY,GAAGnM,OAAO,CAACqL,UAAR,CAAmB7U,IAAnB,CAAwB4V,IAAI,IAAIA,IAAI,CAACxZ,IAAL,KAAcA,IAA9C,CAArB;;QACA,IAAIuZ,YAAJ,EAAkB;UAChBA,YAAY,CAACpd,KAAb,GAAqBA,KAArB;SADF,MAEO;UACLiR,OAAO,CAACqL,UAAR,CAAmB7S,IAAnB,CAAwB;YACtB5F,IADsB;YAEtB7D;WAFF;;;QAKF,IAAI8c,QAAJ,EAAc;UACZzV,QAAQ,CAAC8J,UAAT,CAAoBuL,MAApB,GAA6BK,WAA7B;;UACA,IAAIE,eAAJ,EAAqB;YACnB5V,QAAQ,CAAC8J,UAAT,CAAoBuL,MAApB,CAA2BtL,aAA3B,GAA2CH,OAA3C;WADF,MAEO;YACL5J,QAAQ,CAAC8J,UAAT,CAAoBuL,MAApB,CAA2BrL,QAA3B,CAAoC6L,YAApC,IAAoDjM,OAApD;;;UAEF5J,QAAQ,CAAC8J,UAAT,CAAoBwL,gBAApB,GAAuC,IAAvC;SAPF,MAQO;UACLtV,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,GAA8BmO,WAA9B;;UACA,IAAIE,eAAJ,EAAqB;YACnB5V,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,CAA4BwC,aAA5B,GAA4CH,OAA5C;WADF,MAEO;YACL5J,QAAQ,CAAC8J,UAAT,CAAoBvC,OAApB,CAA4ByC,QAA5B,CAAqC6L,YAArC,IAAqDjM,OAArD;;;;KA1DR;;;EAtCAtC,SAAS;IACP,OAAO,SAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMsP,WAAW,GAAG;MAClBlZ,IAAI,EAAE4J,KAAK,CAAC5J,IADM;MAElBmO,IAAI,EAAEvE,KAAK,CAACuE,IAFM;MAGlBiK,UAAU,EAAE,EAHM;MAIlB7K,aAAa,EACX3D,KAAK,CAAC2D,aAAN,IAAuB8K,kBAAgB,CAAC,CAAD,EAAIzO,KAAK,CAAC2D,aAAV,CALvB;MAMlBC,QAAQ,EACN5D,KAAK,CAAC4D,QAAN,IACA5D,KAAK,CAAC4D,QAAN,CAAehS,GAAf,CAAmB,CAAC4R,OAAD,EAAU9T,KAAV;QACjB,OAAO+e,kBAAgB,CAAC/e,KAAK,GAAG,CAAT,EAAY8T,OAAZ,CAAvB;OADF,CARgB;;MAalBkL,cAAc,EAAE1O,KAAK,CAAC0O;KAbxB;IAgBA,MAAM9U,QAAQ,GAAY,EACxB,GAAGiE,yBAAyB,EADJ;MAExB6F,UAAU,EAAE;;QAEVvC,OAAO,EAAEnB,KAAK,CAACgP,OAAN,GAAgBM,WAAhB,GAA8B3f,SAF7B;;QAIVsf,MAAM,EAAEjP,KAAK,CAACgP,OAAN,GAAgBrf,SAAhB,GAA4B2f,WAJ1B;QAKVJ,gBAAgB,oBAAElP,KAAK,CAACgP,OAAR,6BAAmB,IALzB;QAMVG,SAAS,qBAAEnP,KAAK,CAACgP,OAAR,8BAAmB;;KARhC;IAYA,KAAKhO,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IAEA,OAAOA,QAAP;;;;;AA+GJ,MAAM2V,cAAc,GAAG,CAACzW,OAAD,EAAmBmW,MAAnB;EACrB,IAAI,CAACA,MAAD,IAAWnW,OAAO,CAAC4K,UAAR,CAAmBvC,OAAlC,EAA2C;IACzC,OAAOrI,OAAO,CAAC4K,UAAR,CAAmBvC,OAA1B;;;EAEF,OAAOrI,OAAO,CAAC4K,UAAR,CAAmBuL,MAA1B;AACD,CALD;;AAaA,MAAMS,UAAU,GAAG,CACjBJ,WADiB,EAEjBjM,SAFiB,EAGjBC,GAHiB;EAKjB,MAAMM,QAAQ,GAAG,CAAC0L,WAAW,CAAC3L,aAAb,EAA4B,GAAG2L,WAAW,CAAC1L,QAA3C,CAAjB;EACA,MAAMiM,YAAY,GAAGjM,QAAQ,CAAC5J,IAAT,CAAewJ,OAAD;IACjC,IAAIH,SAAJ,EAAe;MACb,OAAOG,OAAO,CAAC7J,EAAR,KAAe0J,SAAtB;;;IAEF,IAAIC,GAAJ,EAAS;MACP,OAAOE,OAAO,CAACF,GAAR,KAAgBA,GAAvB;;;IAEF,OAAO,KAAP;GAPmB,CAArB;EAUA,MAAMkM,eAAe,GAAGK,YAAY,KAAKP,WAAW,CAAC3L,aAArD;EACA,OAAO;IACLH,OAAO,EAAEqM,YADJ;IAELL,eAFK;IAGLC,YAAY,EACV,CAACD,eAAD,IAAoBK,YAApB,GACIP,WAAW,CAAC1L,QAAZ,CAAqB9T,OAArB,CAA6B+f,YAA7B,CADJ,GAEI,CAAC;GANT;AAQD,CAzBD;;AA2BA,MAAMpB,kBAAgB,GAAG,CACvBpL,SADuB,EAEvBG,OAFuB;EAIvB,OAAO;IACL7J,EAAE,EAAE0J,SADC;IAELC,GAAG,EAAEE,OAAF,oBAAEA,OAAO,CAAEF,GAFT;IAGLuL,UAAU,EAAErL,OAAF,oBAAEA,OAAO,CAAEqL,UAHhB;IAIL1K,MAAM,EAAEX,OAAF,oBAAEA,OAAO,CAAEW;GAJnB;AAMD,CAVD;;MCrMa2L,uBAAuB9Q;EAGlC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIqQ,iBAAJ,CAAsB3Q,OAAtB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,UAAP;;;;;MCCS0Q,8BAA8B9O;EAA3C5P;;;IAoBE,oDAAA,GAAkD,CAChD0a,WADgD,EAEhD/L,KAFgD;MAAA;;MAAA,OAGvB,EACzB,GAAGA,KADsB;QAEzBgQ,mBAAmB,2BAAEhQ,KAAK,CAACgQ,mBAAR,oCAA+B,MAFzB;QAGzBC,SAAS,sBAAEjQ,KAAK,CAACiQ,SAAR,+BAAqB,YAHL;QAIzBC,YAAY,yBAAElQ,KAAK,CAACkQ,YAAR,kCAAwB;OAPY;KAAlD;;IA0BA,YAAA,GAKI;MACFC,6BAA6B,EAAE,CAC7Bla,UAD6B,EAE7B2D,QAF6B,EAG7B;QACEwW,aADF;QAEEC;OAL2B;;;QAQ7B,MAAMC,mBAAmB,GAAIje,IAAD;UAC1B,QAAQA,IAAI,CAAC+D,IAAb;YACE,KAAK,OAAL;cACE/D,IAAI,CAACY,MAAL,CAAY2E,OAAZ,CAAoBzE,CAAC;gBACnB,IAAIA,CAAC,CAACgD,GAAF,IAASka,QAAQ,CAACla,GAAtB,EAA2B;kBACzBhD,CAAC,CAACod,KAAF,GAAUF,QAAQ,CAACE,KAAnB;;eAFJ;cAKA;;YACF,KAAK,KAAL;cACED,mBAAmB,CAACje,IAAI,CAACme,WAAN,CAAnB;cACA;;SAXN;;QAeA,wBAAA5W,QAAQ,CAACiV,UAAT,0CAAqBjX,OAArB,CAA6BrF,KAAK;UAChC,IAAIA,KAAK,CAAC6D,IAAN,IAAcga,aAAlB,EAAiC;YAC/BE,mBAAmB,CAAC/d,KAAK,CAACF,IAAP,CAAnB;;SAFJ;OAxBA;MA8BFoe,WAAW,EAAE,CACXxa,UADW,EAEX2D,QAFW,EAGX;QAAEwW,aAAF;QAAiBG;OAHN;;;QAKX,yBAAA3W,QAAQ,CAACiV,UAAT,2CAAqBjX,OAArB,CAA6BrF,KAAK;UAChC,IAAIA,KAAK,CAAC6D,IAAN,IAAcga,aAAlB,EAAiC;YAC/B7d,KAAK,CAACge,KAAN,GAAcA,KAAd;;SAFJ;;KAxCJ;;;EA7CArP,SAAS;IACP,OAAO,cAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAgB,EAC5B,GAAGiE,yBAAyB,EADA;MAE5B1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFiB;MAG5BC,IAAI,EAAE4J,KAAK,CAAC5J,IAHgB;MAI5B6L,WAAW,EAAEjC,KAAK,CAACiC,WAJS;MAK5B4M,UAAU,EAAE,sBAAC7O,KAAK,CAAC6O,UAAP,gCAAqB,EAArB,EAAyBjd,GAAzB,CAA6Bd,CAAC,IACxC,KAAK4f,+CAAL,CAAqDza,UAArD,EAAiEnF,CAAjE,CADU;KALd;IAUA,KAAKkQ,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAaF2F,UAAU,CAACtJ,UAAD,EAAqBE,GAArB;IACR,MAAM3G,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MAC/D9G,KAAK,EAAE,SAASjE,MAAT;KADM,CAAf;;IAGA,IAAI3G,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;MACtB,OAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;;;;IAIF,IAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;MACpB,MAAM,IAAI7F,KAAJ,CAAU,4BAAV,CAAN;;;IAGF;;;;;MCrDS4b,2BAA2B3R;EAGtC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIqR,qBAAJ,CAA0B3R,OAA1B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,eAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;;;EAGFoC,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;IACR,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBa,UAAhB,CACfnD,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe5B,GAFA,CAAjB;;IAIA,IAAIyD,QAAJ,EAAc;MACZ,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;IAEF,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;;;AC3BG,MAAMgT,eAAe,GAAG,CAAIhX,QAAJ,EAAiBiX,IAAjB;EAC7B,MAAMC,KAAK,GAAGD,IAAI,CAAClb,KAAL,CAAW,GAAX,CAAd;EACA,MAAMob,KAAK,GAAGrZ,IAAI,CAACxD,KAAL,CAAWwD,IAAI,CAACC,SAAL,CAAeiC,QAAf,CAAX,CAAd;EACA,IAAIxH,GAAG,GAAG2e,KAAV;EAEA,MAAMhf,MAAM,GAAG+e,KAAK,CAACE,GAAN,EAAf;;EACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,KAAK,CAAChc,MAA1B,EAAkCmc,CAAC,EAAnC,EAAuC;IACrC,MAAMC,IAAI,GAAGJ,KAAK,CAACG,CAAD,CAAlB;IACA7e,GAAG,GAAGA,GAAG,CAAC8e,IAAD,CAAT;;IAEA,IAAI9e,GAAG,IAAIzC,SAAX,EAAsB;MACpB,OAAOiK,QAAP;;;;EAIJ,IAAIxH,GAAG,IAAIL,MAAP,IAAiBK,GAAG,CAACL,MAAD,CAAxB,EAAkC;IAChCK,GAAG,CAACL,MAAD,CAAH,GAAc,MAAd;;;EAEF,OAAOgf,KAAP;AACD,CAnBM;;MCoBMI,0BAA0BxQ;EAAvCtP;;IAiCE,YAAA,GAKI;MACFmX,UAAU,EAAE,CACVvS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OANA;MAQFgb,gBAAgB,EAAE,CAChBnb,UADgB,EAEhB2D,QAFgB,EAGhB;QAAEtD;OAHc;QAKhBsD,QAAQ,CAACtD,UAAT,GAAsBA,UAAtB;OAbA;MAeF+a,eAAe,EAAE,CACfpb,UADe,EAEf2D,QAFe,EAGf;QAAEvD;OAHa;QAKfuD,QAAQ,CAACvD,SAAT,GAAqBA,SAArB;OApBA;MAsBFib,eAAe,EAAE,CACfrb,UADe,EAEf2D,QAFe,EAGf;QAAErD;OAHa;QAKfqD,QAAQ,CAACrD,SAAT,GAAqBA,SAArB;OA3BA;MA6BFgb,qBAAqB,EAAE,CACrBtb,UADqB,EAErB2D,QAFqB,EAGrB;QAAE4X;OAHmB;QAKrB5X,QAAQ,CAAC/C,QAAT,CAAkBC,OAAlB,GAA4B0a,eAA5B;OAlCA;MAoCFC,kCAAkC,EAAE,CAClCxb,UADkC,EAElC2D,QAFkC,EAGlC;QAAE9C;OAHgC;;;QAKlC,IAAI,2BAAC8C,QAAQ,CAAC1C,cAAV,aAAC,sBAAyBC,QAA1B,CAAJ,EAAwC;UACtC,MAAM,IAAIpC,KAAJ,CAAU,uBAAV,CAAN;;;QAEF6E,QAAQ,CAAC1C,cAAT,CAAwBC,QAAxB,CAAiCC,MAAjC,GAA0CN,OAAO,GAC7C,WAD6C,GAE7C,aAFJ;QAGA8C,QAAQ,CAAC1C,cAAT,CAAwBC,QAAxB,CAAiC8G,cAAjC,GAAkD,IAAIF,IAAJ,GAAWC,WAAX,EAAlD;OA/CA;MAiDF0T,uBAAuB,EAAE,CACvBzb,UADuB,EAEvB2D,QAFuB,EAGvB;QAAExC;OAHqB;;;QAKvB,IAAI,4BAACwC,QAAQ,CAAC1C,cAAV,aAAC,uBAAyBG,MAA1B,CAAJ,EAAsC;UACpC,MAAM,IAAItC,KAAJ,CAAU,uBAAV,CAAN;;;QAEF6E,QAAQ,CAAC1C,cAAT,CAAwBG,MAAxB,CAA+BD,MAA/B,GAAwCA,MAAxC;QACAwC,QAAQ,CAAC1C,cAAT,CAAwBG,MAAxB,CAA+B4G,cAA/B,GAAgD,IAAIF,IAAJ,GAAWC,WAAX,EAAhD;OA1DA;MA4DF2T,wBAAwB,EAAE,CACxB1b,UADwB,EAExB2D,QAFwB,EAGxB;QAAE5C;OAHsB;QAKxB4C,QAAQ,CAAC5C,qBAAT,GAAiCA,qBAAjC;OAjEA;MAmEF4a,gBAAgB,EAAE,CAChB3b,UADgB,EAEhB2D,QAFgB,EAGhB;QAAE3C;OAHc;QAKhB2C,QAAQ,CAAC3C,aAAT,GAAyBA,aAAzB;OAxEA;MA0EF4a,mCAAmC,EAAE,CACnC5b,UADmC,EAEnC2D,QAFmC,EAGnC;QACEjD;OAJiC;QAOnCiD,QAAQ,CAAClD,KAAT,CAAeC,6BAAf,GAA+CA,6BAA/C;OAjFA;MAmFFmb,wBAAwB,EAAE,CACxB7b,UADwB,EAExB2D,QAFwB,EAGxB;QAAEmY;OAHsB;QAKxBnY,QAAQ,CAAClD,KAAT,GAAiBqb,kBAAkB,IAAI;UACrCpb,6BAA6B,EAAE,KADM;UAErCC,+BAA+B,EAAE;SAFnC;;KA7FJ;;;EAhCAiD,GAAG,CAAC5D,UAAD;IACD,MAAM+b,IAAI,GAAG,KAAK3T,QAAL,CAAc4T,UAAd,CAAyBhc,UAAzB,CAAb;;IACA,MAAM2D,QAAQ,GAAG,KAAKyE,QAAL,CAAc4T,UAAd,CAAyBhc,UAAzB,CAAjB;;IACA,MAAMic,MAAM,GAAGtB,eAAe,CAC5BhX,QAD4B,EAE5B,mCAF4B,CAA9B;IAIA,OAAOsY,MAAP;;;EAGFlR,IAAI,CAAC/K,UAAD,EAAqB2D,QAArB;IACF,MAAMuH,OAAO,GAAG,KAAKtH,GAAL,CAAS5D,UAAT,CAAhB;;IAEA,IAAIkL,OAAJ,EAAa;MACXX,2BAA2B,CAACW,OAAD,EAAUvH,QAAQ,CAACtC,OAAnB,CAA3B;KADF,MAEO;MACL,IAAIsC,QAAQ,CAACtC,OAAT,KAAqB,CAAzB,EAA4B;QAC1B,MAAM,IAAI1B,kBAAJ,CACJ;UACE2E,IAAI,EAAE,kBADR;UAEEjJ,OAAO,EAAE;SAHP,EAKJ,GALI,CAAN;;;;;IAWJsI,QAAQ,CAACtC,OAAT,IAAoB,CAApB;;IACA,KAAK+G,QAAL,CAAc8T,WAAd,CAA0BvY,QAA1B;;;;;MC9CSwY;EAGX/gB,YAAY4N,QAAgBb;IAC1B,KAAKM,UAAL,GAAkB,IAAIyS,iBAAJ,CAAsB/S,OAAtB,CAAlB;IACA,KAAKc,cAAL,CAAoBD,MAApB;;;EAGFC,cAAc,CAACD,MAAD;IACZA,MAAM,CAACpF,GAAP,CAAW,EAAX,EAAe,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAAf;IACA8B,MAAM,CAAChC,IAAP,CAAY,EAAZ,EAAgB,KAAKA,IAAL,CAAUE,IAAV,CAAe,IAAf,CAAhB;;;EAGFtD,GAAG,CAACuC,OAAD,EAAmBiB,QAAnB;IACD,MAAMpH,UAAU,GAAGmG,OAAO,CAACrE,MAAR,CAAe9B,UAAlC;IACA,MAAMsB,OAAO,GAAG,KAAKmH,UAAL,CAAgB7E,GAAhB,CAAoB5D,UAApB,CAAhB;IACA,OAAOoH,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BrG,OAA1B,CAAP;;;EAGF0F,IAAI,CAACb,OAAD,EAAmBiB,QAAnB;IACF,MAAM8C,aAAa,GAAW/D,OAAO,CAACsB,IAAtC;IACA,MAAMnG,OAAO,GAAG,KAAKmH,UAAL,CAAgB7E,GAAhB,CAAoBuC,OAAO,CAACrE,MAAR,CAAe9B,UAAnC,CAAhB;;IAEA,IAAI,CAACsB,OAAL,EAAc;MACZ,OAAO8F,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,EAA1B,CAAP;;;IAGF,MAAMwC,eAAe,GAAG,KAAK1B,UAAL,CAAgB2B,oBAAhB,CACtBjE,OAAO,CAACrE,MAAR,CAAe9B,UADO,EAEtBsB,OAFsB,EAGtB4I,aAAa,CAACG,OAHQ,CAAxB;IAMA,OAAOjD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,EAA1B,CAAP;;;;;MCRSyU,iCAAiCpR;EAA9C5P;;;IAuBU,4BAAA,GAA0B,CAChC4E,UADgC,EAEhC+J,KAFgC;MAAA;;MAAA,OAGlB,EACd,GAAGA,KADW;QAEd9G,IAAI,EAAE0I,kCAAkC,CACtC5B,KAAK,CAAC9G,IADgC,EAEtCjD,UAFsC,EAGtC,KAAKoI,QAHiC,CAF1B;QAOdiU,aAAa,0BAAEtS,KAAK,CAACsS,aAAR,qBAAE,qBAAqB1gB,GAArB,CAAyB,KAAK2gB,sBAA9B;OAViB;KAA1B;;IAaA,2BAAA,GAA0BC,IAAD;MAC/B,OAAO;QACLpO,KAAK,EAAE5C,gBAAgB,CAACgR,IAAI,CAACpO,KAAN,CADlB;QAELqO,SAAS,EAAED,IAAI,CAACC,SAAL,IAAkBjR,gBAAgB,CAACgR,IAAI,CAACC,SAAN,CAFxC;QAGLC,KAAK,EAAEF,IAAI,CAACE,KAAL,IAAc;OAHvB;KADM;;IAQR,YAAA,GASI;MACFC,eAAe,EAAE,CACf1c,UADe,EAEf2D,QAFe,EAGf;QAAEgZ,YAAF;QAAgB1Z;OAHD;QAKf,MAAMsZ,IAAI,GAAG,KAAKD,sBAAL,CAA4BK,YAA5B,CAAb;;QAEAhZ,QAAQ,CAACiZ,SAAT,CAAmBjb,OAAnB,CAA2Bkb,QAAQ;UACjC,IAAIA,QAAQ,CAAC5Z,IAAT,CAAcS,EAAd,IAAoBT,IAAI,CAACS,EAA7B,EAAiC;YAC/BmZ,QAAQ,CAACR,aAAT,CAAuBtW,IAAvB,CAA4BwW,IAA5B;YACA;;SAHJ;QAMA5Y,QAAQ,CAACiZ,SAAT,CAAmB7W,IAAnB,CAAwB;UACtB9C,IAAI,EAAE;YACJI,MAAM,EAAE,MADJ;YAEJK,EAAE,EAAET,IAAI,CAACS;WAHW;UAKtB2Y,aAAa,EAAE,CAACE,IAAD;SALjB;OAdA;MAsBFO,kBAAkB,EAAE,CAClB9c,UADkB,EAElB2D,QAFkB,EAGlB;QAAEgZ,YAAF;QAAgB1Z;OAHE;QAKlB,MAAMsZ,IAAI,GAAG,KAAKD,sBAAL,CAA4BK,YAA5B,CAAb;;QAEAhZ,QAAQ,CAACiZ,SAAT,CAAmBjb,OAAnB,CAA2Bkb,QAAQ;UACjC,IAAIA,QAAQ,CAAC5Z,IAAT,CAAcS,EAAd,IAAoBT,IAAI,CAACS,EAA7B,EAAiC;YAC/BmZ,QAAQ,CAACR,aAAT,GAAyBQ,QAAQ,CAACR,aAAT,CAAuBpf,MAAvB,CAA8B8f,SAAS;cAC9D,OAAO,CAACjS,SAAS,CAACyR,IAAD,EAAOQ,SAAP,CAAjB;aADuB,CAAzB;;SAFJ;OA7BA;MAqCFC,OAAO,EAAE,CACPhd,UADO,EAEP2D,QAFO,EAGP;QAAEV;OAHK;QAKP,MAAMga,aAAa,GAAGtR,kCAAkC,CACtD1I,IADsD,EAEtDjD,UAFsD,EAGtD,KAAKoI,QAHiD,CAAxD;;QAMA,IAAIzE,QAAQ,CAACiZ,SAAT,KAAuBljB,SAA3B,EAAsC;UACpCiK,QAAQ,CAACiZ,SAAT,GAAqB,EAArB;;;QAGFjZ,QAAQ,CAACiZ,SAAT,CAAmB7W,IAAnB,CAAwB;UACtB9C,IAAI,EAAEga,aADgB;UAEtBZ,aAAa,EAAE;SAFjB;OApDA;MAyDFa,UAAU,EAAE,CACVld,UADU,EAEV2D,QAFU,EAGV;QAAEV;OAHQ;QAKVU,QAAQ,CAACiZ,SAAT,GAAqBjZ,QAAQ,CAACiZ,SAAT,CAAmB3f,MAAnB,CAA0B4f,QAAQ;UACrD,OAAOA,QAAQ,CAAC5Z,IAAT,CAAcS,EAAd,KAAqBT,IAAI,CAACS,EAAjC;SADmB,CAArB;OA9DA;MAkEFoI,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OAvEA;MAyEF6L,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OA9EA;MAgFFmR,uBAAuB,EAAE,CACvBnd,UADuB,EAEvB2D,QAFuB,EAGvB;QAAEyZ;OAHqB;QAKvBzZ,QAAQ,CAACyZ,oBAAT,GAAgCA,oBAAhC;OArFA;MAuFFC,YAAY,EAAE,CACZrd,UADY,EAEZ2D,QAFY,EAGZ;QAAEpI;OAHU;QAKZoI,QAAQ,CAACpI,SAAT,GAAqBA,SAArB;OA5FA;MA8FF+hB,eAAe,EAAE,CACftd,UADe,EAEf2D,QAFe,EAGf;QAAE4Z;OAHa;QAKf5Z,QAAQ,CAAC4Z,SAAT,GAAqBA,SAArB;OAnGA;MAqGFhL,UAAU,EAAE,CACVvS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;;KAnHJ;;;EA3CA8K,SAAS;IACP,OAAO,iBAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAmB,EAC/B,GAAGiE,yBAAyB,EADG;MAE/B,GAAGmC,KAF4B;MAG/ByT,WAAW,EAAE7R,kCAAkC,CAC7C5B,KAAK,CAACyT,WADuC,EAE7Cxd,UAF6C,EAG7C,KAAKoI,QAHwC,CAHhB;MAQ/BwU,SAAS,sBAAE7S,KAAK,CAAC6S,SAAR,qBAAE,iBAAiBjhB,GAAjB,CAAqB8hB,CAAC,IAC/B,KAAKC,uBAAL,CAA6B1d,UAA7B,EAAyCyd,CAAzC,CADS,CARoB;MAW/BhO,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC;KAX5B;IAaA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC9CSga,8BAA8B5U;EAGzC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI2T,wBAAJ,CAA6BjU,OAA7B,CAAlB;IACA,KAAKc,cAAL,CAAoBD,MAApB;;;EAGFI,WAAW;IACT,OAAO,kBAAP;;;EAGFF,WAAW,CAACF,MAAD;IACTA,MAAM,CAACpF,GAAP,CAAW,gBAAX,EAA6B,KAAKA,GAAL,CAASsD,IAAT,CAAc,IAAd,CAA7B;;;;;MCNS0W,+BAA+B5S;EAC1CC,SAAS;IACP,OAAO,eAAP;;;EAEFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;;IAGJ,MAAMpG,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;MAE7B,GAAGmC,KAF0B;MAG7B0F,MAAM,EAAEtE,kBAAkB,CAACpB,KAAK,CAAC0F,MAAP,EAAezP,UAAf,EAA2B,KAAKoI,QAAhC,CAHG;MAI7ByV,aAAa,EAAE,EAJc;MAK7B/P,SAAS,sBAAE/D,KAAK,CAAC+D,SAAR,qBAAE,iBAAiBnS,GAAjB,CAAqBqI,CAAC;QAAA;;QAAA,OAAK,EACpC,GAAG4D,yBAAyB,EADQ;UAEpC,GAAG5D,CAFiC;UAGpC8Z,OAAO,gBAAE9Z,CAAC,CAAC8Z,OAAJ,yBAAe,EAHc;UAIpC3Q,SAAS,kBAAEnJ,CAAC,CAACmJ,SAAJ,2BAAiB,EAJU;UAKpChN,IAAI,EAAE,EAL8B;UAMpCmN,QAAQ,iBAAEtJ,CAAC,CAACsJ,QAAJ,0BAAgB,CANY;UAOpCiB,WAAW,EAAE;YAAElL,MAAM,EAAE,cAAV;YAA0BK,EAAE,EAAE;WAPP;UAQpC+L,MAAM,EAAEtE,kBAAkB,CAACnH,CAAC,CAACyL,MAAH,EAAWzP,UAAX,EAAuB,KAAKoI,QAA5B;SARK;OAAtB,CALkB;MAe7B3F,QAAQ,EAAEsH,KAAK,CAACtH,QAAN,GACNkJ,kCAAkC,CAChC5B,KAAK,CAACtH,QAD0B,EAEhCzC,UAFgC,EAGhC,KAAKoI,QAH2B,CAD5B,GAMN1O,SArByB;MAsB7BqJ,KAAK,EAAE,gBAAAgH,KAAK,CAAChH,KAAN,0BAAa7C,GAAb,GACH;QAAEmD,MAAM,EAAE,OAAV;QAAmBnD,GAAG,EAAE6J,KAAK,CAAChH,KAAN,CAAY7C;OADjC,GAEHxG;KAxBN;IA0BA,KAAKqR,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC1CSoa,4BAA4BhV;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAImV,sBAAJ,CAA2BzV,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;;;MCCS4U,wBAAwBhT;EAArC5P;;IAoBE,YAAA,GAKI;MACF6iB,SAAS,EAAE,CACTje,UADS,EAET2D,QAFS,EAGT;QAAEzD;OAHO;QAKTyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OANA;MAQF6L,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OAbA;MAeF4H,OAAO,EAAE,CACP5T,UADO,EAEP2D,QAFO,EAGP;QAAExD;OAHK;QAKPwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OApBA;MAsBF+d,QAAQ,EAAE,CACRle,UADQ,EAER2D,QAFQ,EAGR;QAAEyO;OAHM;QAKRzO,QAAQ,CAACyO,KAAT,GAAiBA,KAAjB;;KAhCJ;;;EAnBAnH,SAAS;IACP,OAAO,OAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;MAEtB,GAAGmC,KAFmB;MAGtBoU,OAAO,EAAE,KAHa;MAItBC,OAAO,EAAErU,KAAK,CAACqU,OAAN,IAAiB,KAJJ;MAKtBC,WAAW,EAAE,CAACtU,KAAK,CAACsU,WAAN,IAAqB,EAAtB,EAA0B1iB,GAA1B,CAA8BgC,CAAC,IAC1CgO,kCAAkC,CAAChO,CAAD,EAAIqC,UAAJ,EAAgB,KAAKoI,QAArB,CADvB;KALf;IAUA,KAAK2C,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC3BS2a,qBAAqBvV;EAGhC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIuV,eAAJ,CAAoB7V,OAApB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,QAAP;;;;;MCESmV,wBAAwBvT;EAArC5P;;IAoCE,YAAA,GAKI;MACFwY,OAAO,EAAE,CACP5T,UADO,EAEP2D,QAFO,EAGP;QAAExD;OAHK;QAKPwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OANA;MAQFqe,uBAAuB,EAAE,CACvBxe,UADuB,EAEvB2D,QAFuB,EAGvB;QAAE8a;OAHqB;QAKvB9a,QAAQ,CAAC8a,oBAAT,GAAgC,KAAKC,iBAAL,CAC9B1e,UAD8B,EAE9Bye,oBAF8B,CAAhC;OAbA;MAkBFE,YAAY,EAAE,CACZ3e,UADY,EAEZ2D,QAFY,EAGZ;QAAErD;OAHU;QAKZqD,QAAQ,CAACrD,SAAT,GAAqBA,SAArB;;KA5BJ;;;EAnCA2K,SAAS;IACP,OAAO,OAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAU,EACtB,GAAGiE,yBAAyB,EADN;MAEtB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFW;MAGtBC,IAAI,EAAE4J,KAAK,CAAC5J,IAHU;MAItBG,SAAS,EAAEyJ,KAAK,CAACzJ,SAJK;MAKtBme,oBAAoB,EAAE,KAAKC,iBAAL,CACpB1e,UADoB,EAEpB+J,KAAK,CAAC0U,oBAFc,CALA;MAStBG,cAAc,EAAE,KAAKF,iBAAL,CAAuB1e,UAAvB,EAAmC+J,KAAK,CAAC6U,cAAzC;KATlB;IAWA,KAAK7T,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EAGM+a,iBAAiB,CACvB1e,UADuB,EAEvB6e,QAFuB;IAIvB,IAAI,CAACA,QAAL,EAAe,OAAO,EAAP;IAEf,OAAOA,QAAQ,CAACljB,GAAT,CAAa+P,GAAG,IACrBC,kCAAkC,CAChCD,GADgC,EAEhC1L,UAFgC,EAGhC,KAAKoI,QAH2B,CAD7B,CAAP;;;;;MCtCS0W,qBAAqB/V;EAGhC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI8V,eAAJ,CAAoBpW,OAApB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,QAAP;;;;;MCJS2V,+BAA+B/T;EAC1CC,SAAS;IACP,OAAO,cAAP;;;EAEFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IAGJ,IAAIA,KAAK,CAAC0K,WAAN,CAAkBrY,IAAlB,IAA0B,KAA9B,EAAqC;MACnC,MAAM4iB,QAAQ,GAAG,IAAIC,GAAJ,CAAQlV,KAAK,CAAC0K,WAAN,CAAkByK,QAA1B,CAAjB;MACA,MAAMC,SAAS,GAAGH,QAAQ,CAACI,QAAT,CAAkB1f,KAAlB,CAAwB,GAAxB,EAA6B,CAA7B,CAAlB;;MACA,IAAIyf,SAAS,IAAI,YAAjB,EAA+B;QAC7B,MAAME,IAAI,GAAGtV,KAAK,CAAC0K,WAAnB;QACA,MAAM,IAAI9U,kBAAJ,CACJ;UACE2E,IAAI,EAAE,cADR;UAEEjJ,OAAO,EACL,uEACOgkB,IAAI,CAACH,eAAeG,IAAI,CAACC,cAAcD,IAAI,CAACE,aADnD,GAEA;SANA,EAQJ,GARI,CAAN;;;;IAaJ,MAAM5b,QAAQ,GAAiB,EAC7B,GAAGiE,yBAAyB,EADC;MAE7B4X,OAAO,EAAEzV,KAAK,CAACyV,OAAN,IAAiB,EAFG;MAG7B/K,WAAW,EAAE1K,KAAK,CAAC0K,WAHU;MAI7BgL,MAAM,EAAE1V,KAAK,CAAC0V,MAAN,IAAgB;QACtBrjB,IAAI,EAAE;OALqB;MAO7B8D,GAAG,EAAE6J,KAAK,CAAC7J,GAPkB;MAQ7BU,QAAQ,EAAEmJ,KAAK,CAACnJ,QAAN,IAAkB,EARC;MAS7BO,MAAM,EAAE;KATV;IAWA,KAAK4J,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC1CS+b,4BAA4B3W;EAGvC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIsW,sBAAJ,CAA2B5W,OAA3B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,eAAP;;;;;MCKSuW,8BAA8B3U;EAA3C5P;;;IAeU,4BAAA,GAA2B2O,KAAD,KAAmC,EACnE,GAAGA,KADgE;MAEnErG,EAAE,EAAEmE,EAAM,EAFyD;MAGnE2N,MAAM,EAAEzL,KAAK,CAACyL,MAAN,IAAgB;KAHQ,CAA1B;;IAsBR,YAAA,GAKI;MACFoK,UAAU,EAAE,CACV5f,UADU,EAEV2D,QAFU,EAGV;QAAEiU;OAHQ;QAKV,IAAIjU,QAAQ,CAACkc,KAAT,KAAmBnmB,SAAvB,EAAkC;UAChCiK,QAAQ,CAACkc,KAAT,GAAiB,EAAjB;;;QAEFlc,QAAQ,CAACkc,KAAT,CAAe9Z,IAAf,CAAoB,KAAK+Z,uBAAL,CAA6BlI,OAA7B,CAApB;OATA;MAWFmI,aAAa,EAAE,CACb/f,UADa,EAEb2D,QAFa,EAGb;QAAEqc;OAHW;QAKb,IAAIrc,QAAQ,CAACkc,KAAT,KAAmBnmB,SAAvB,EAAkC;UAChCiK,QAAQ,CAACkc,KAAT,GAAiB,EAAjB;;;QAEFlc,QAAQ,CAACkc,KAAT,GAAiBlc,QAAQ,CAACkc,KAAT,CAAe5iB,MAAf,CAAsB2a,OAAO;UAC5C,OAAOA,OAAO,CAAClU,EAAR,KAAesc,SAAtB;SADe,CAAjB;OAnBA;MAuBFC,cAAc,EAAE,CACdjgB,UADc,EAEd2D,QAFc,EAGd;QAAEqc,SAAF;QAAapI;OAHC;QAKd,IAAIjU,QAAQ,CAACkc,KAAT,KAAmBnmB,SAAvB,EAAkC;UAChCiK,QAAQ,CAACkc,KAAT,GAAiB,EAAjB;;;QAGF,MAAMK,UAAU,GAAG,KAAKJ,uBAAL,CAA6BlI,OAA7B,CAAnB;;QACA,KAAK,IAAIoD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGrX,QAAQ,CAACkc,KAAT,CAAehhB,MAAnC,EAA2Cmc,CAAC,EAA5C,EAAgD;UAC9C,MAAMuB,IAAI,GAAG5Y,QAAQ,CAACkc,KAAT,CAAe7E,CAAf,CAAb;;UACA,IAAIuB,IAAI,CAAC7Y,EAAL,IAAWsc,SAAf,EAA0B;YACxBrc,QAAQ,CAACkc,KAAT,CAAe7E,CAAf,IAAoBkF,UAApB;;;OApCJ;MAwCFnU,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OA7CA;MA+CFF,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;OApDA;MAsDFqS,UAAU,EAAE,CACVvS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;;KAhEJ;;;EApCA8K,SAAS;IACP,OAAO,cAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;;;IACJ,MAAMpG,QAAQ,GAAgB,EAC5B,GAAGiE,yBAAyB,EADA;MAE5B,GAAGmC,KAFyB;MAG5B8V,KAAK,EAAE,iBAAA9V,KAAK,CAAC8V,KAAN,kCAAalkB,GAAb,CAAiB,KAAKmkB,uBAAtB,MAAkD;KAH3D;IAKA,KAAK/U,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;EASF2F,UAAU,CAACtJ,UAAD,EAAqBE,GAArB;IACR,MAAM3G,MAAM,GAAG,KAAK6O,QAAL,CAAclE,KAAd,CAAoBlE,UAApB,EAAgC,KAAKiL,SAAL,EAAhC,EAAkD;MAC/D9G,KAAK,EAAE,SAASjE,MAAT;KADM,CAAf;;IAGA,IAAI3G,MAAM,CAACoL,KAAP,KAAiB,CAArB,EAAwB;MACtB,OAAOpL,MAAM,CAACsL,OAAP,CAAe,CAAf,CAAP;;;;IAIF,IAAItL,MAAM,CAACoL,KAAP,GAAe,CAAnB,EAAsB;MACpB,MAAM,IAAI7F,KAAJ,CAAU,4BAAV,CAAN;;;IAGF;;;;;MChDSqhB,2BAA2BpX;EAGtC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIkX,qBAAJ,CAA0BxX,OAA1B,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,gBAAP;;;EAGFF,WAAW,CAACzC,MAAD;IACTA,MAAM,CAAC7C,GAAP,CAAW,WAAX,EAAwB,KAAK0F,UAAL,CAAgBpC,IAAhB,CAAqB,IAArB,CAAxB;;;EAGFoC,UAAU,CAACnD,OAAD,EAAmBiB,QAAnB;IACR,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBa,UAAhB,CACfnD,OAAO,CAACrE,MAAR,CAAe9B,UADA,EAEfmG,OAAO,CAACrE,MAAR,CAAe5B,GAFA,CAAjB;;IAIA,IAAIyD,QAAJ,EAAc;MACZ,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;IAEF,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;;;MCXSyY,uBAAuBpV;EAApC5P;;IAiBE,YAAA,GAKI;MACFilB,kBAAkB,EAAE,CAClBrgB,UADkB,EAElB2D,QAFkB,EAGlB;QAAE2c;OAHgB;QAKlB3c,QAAQ,CAAC4c,gBAAT,CAA0Bxa,IAA1B,CAA+Bua,eAA/B;OANA;MAQFE,qBAAqB,EAAE,CACrBxgB,UADqB,EAErB2D,QAFqB,EAGrB;QAAE8c;OAHmB;QAKrB9c,QAAQ,CAAC4c,gBAAT,GAA4B5c,QAAQ,CAAC4c,gBAAT,CAA0BtjB,MAA1B,CAAiCyjB,CAAC;UAC5D,OAAOA,CAAC,CAACvgB,IAAF,KAAWsgB,SAAlB;SAD0B,CAA5B;OAbA;MAiBF1U,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OAtBA;MAwBFuG,UAAU,EAAE,CACVvS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OA7BA;MA+BFwgB,0BAA0B,EAAE,CAC1B3gB,UAD0B,EAE1B2D,QAF0B,EAG1B;QAAEid;OAHwB;QAK1B,MAAMxV,MAAM,GAAG,IAAI9I,GAAJ,CACbqB,QAAQ,CAAC4c,gBAAT,CAA0B5kB,GAA1B,CAA8BC,IAAI,IAAI,CAACA,IAAI,CAACuE,IAAN,EAAYvE,IAAZ,CAAtC,CADa,CAAf;QAGA,MAAMrC,MAAM,GAAsB,EAAlC;QACA,IAAI2R,OAAO,GAAGvH,QAAQ,CAAC4c,gBAAvB;QAEAK,UAAU,CAACjf,OAAX,CAAmB8e,SAAS;UAC1B,MAAMI,KAAK,GAAGzV,MAAM,CAACxH,GAAP,CAAW6c,SAAX,CAAd;;UACA,IAAII,KAAK,KAAKnnB,SAAd,EAAyB;YACvB,MAAM,IAAIoF,KAAJ,CAAU,WAAV,CAAN;;;UAEFvF,MAAM,CAACwM,IAAP,CAAY8a,KAAZ;;UAGA3V,OAAO,GAAGA,OAAO,CAACjO,MAAR,CAAeyjB,CAAC;YACxB,OAAOA,CAAC,CAACvgB,IAAF,KAAWsgB,SAAlB;WADQ,CAAV;SARF;QAaA9c,QAAQ,CAAC4c,gBAAT,GAA4BhnB,MAA5B;;;QAGAoK,QAAQ,CAAC4c,gBAAT,CAA0Bxa,IAA1B,CAA+B,GAAGmF,OAAlC;OA1DA;MA4DF4V,YAAY,EAAE,CACZ9gB,UADY,EAEZ2D,QAFY,EAGZ;QAAE8c,SAAF;QAAankB;OAHD;QAKZqH,QAAQ,CAAC4c,gBAAT,CAA0B5e,OAA1B,CAAkCkf,KAAK;UACrC,IAAIA,KAAK,CAAC1gB,IAAN,IAAcsgB,SAAlB,EAA6B;;YAE3B,IAAII,KAAK,CAACzkB,IAAN,CAAW+D,IAAX,IAAmB,MAAvB,EAA+B;cAC7B0gB,KAAK,CAACzkB,IAAN,CAAWY,MAAX,CAAkB+I,IAAlB,CAAuBzJ,KAAvB;aADF,MAEO,IACLukB,KAAK,CAACzkB,IAAN,CAAW+D,IAAX,IAAmB,KAAnB,IACA0gB,KAAK,CAACzkB,IAAN,CAAWme,WAAX,CAAuBpa,IAAvB,IAA+B,MAF1B,EAGL;cACA0gB,KAAK,CAACzkB,IAAN,CAAWme,WAAX,CAAuBvd,MAAvB,CAA8B+I,IAA9B,CAAmCzJ,KAAnC;aAJK,MAKA;cACL,MAAM,IAAIwC,KAAJ,CAAU,qCAAV,CAAN;;;SAXN;OAjEA;MAiFFiiB,oBAAoB,EAAE,CACpB/gB,UADoB,EAEpB2D,QAFoB,EAGpB;QAAE8c,SAAF;QAAankB;OAHO;QAKpBqH,QAAQ,CAAC4c,gBAAT,CAA0B5e,OAA1B,CAAkCkf,KAAK;UACrC,IAAIA,KAAK,CAAC1gB,IAAN,IAAcsgB,SAAlB,EAA6B;;YAE3B,IAAII,KAAK,CAACzkB,IAAN,CAAW+D,IAAX,IAAmB,MAAvB,EAA+B;cAC7B0gB,KAAK,CAACzkB,IAAN,CAAWY,MAAX,CAAkB2E,OAAlB,CAA0BzE,CAAC;gBACzB,IAAIA,CAAC,CAACgD,GAAF,IAAS5D,KAAK,CAAC4D,GAAnB,EAAwB;kBACtBhD,CAAC,CAACod,KAAF,GAAUhe,KAAK,CAACge,KAAhB;;eAFJ;aADF,MAMO,IACLuG,KAAK,CAACzkB,IAAN,CAAW+D,IAAX,IAAmB,KAAnB,IACA0gB,KAAK,CAACzkB,IAAN,CAAWme,WAAX,CAAuBpa,IAAvB,IAA+B,MAF1B,EAGL;cACA0gB,KAAK,CAACzkB,IAAN,CAAWme,WAAX,CAAuBvd,MAAvB,CAA8B2E,OAA9B,CAAsCzE,CAAC;gBACrC,IAAIA,CAAC,CAACgD,GAAF,IAAS5D,KAAK,CAAC4D,GAAnB,EAAwB;kBACtBhD,CAAC,CAACod,KAAF,GAAUhe,KAAK,CAACge,KAAhB;;eAFJ;aAJK,MASA;cACL,MAAM,IAAIxb,KAAJ,CAAU,qCAAV,CAAN;;;SAnBN;;KA3FJ;;;EAhBAmM,SAAS;IACP,OAAO,MAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;MAErB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFU;MAGrBC,IAAI,EAAE4J,KAAK,CAAC5J,IAHS;MAIrB6gB,eAAe,EAAEjX,KAAK,CAACiX,eAJF;MAKrBT,gBAAgB,EAAExW,KAAK,CAACwW,gBAAN,IAA0B,EALvB;MAMrBvU,WAAW,EAAEjC,KAAK,CAACiC;KANrB;IAQA,KAAKjB,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MC5BSsd,oBAAoBlY;EAG/B3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAI2X,cAAJ,CAAmBjY,OAAnB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,OAAP;;;;;MCCS8X,uBAAuBlW;EAApC5P;;IAiBE,YAAA,GAKI;MACF+lB,WAAW,EAAE,CACXnhB,UADW,EAEX2D,QAFW,EAGX;QAAEyd;OAHS;QAKXzd,QAAQ,CAAC0d,SAAT,CAAmBtb,IAAnB,CAAwBqb,QAAxB;OANA;MAQFE,cAAc,EAAE,CACdthB,UADc,EAEd2D,QAFc,EAGd;QAAEyd;OAHY;QAKdzd,QAAQ,CAAC0d,SAAT,GAAqB1d,QAAQ,CAAC0d,SAAT,CAAmBpkB,MAAnB,CAA0BskB,GAAG;UAChD,OAAO,EAAEA,GAAG,CAACnS,OAAJ,IAAegS,QAAQ,CAAChS,OAAxB,IAAmCmS,GAAG,CAACze,KAAJ,IAAase,QAAQ,CAACte,KAA3D,CAAP;SADmB,CAArB;OAbA;MAiBFyP,UAAU,EAAE,CACVvS,UADU,EAEV2D,QAFU,EAGV;QAAExD;OAHQ;QAKVwD,QAAQ,CAACxD,IAAT,GAAgBA,IAAhB;OAtBA;MAwBF4L,cAAc,EAAE,CACd/L,UADc,EAEd2D,QAFc,EAGd;QAAEqI;OAHY;QAKdrI,QAAQ,CAACqI,WAAT,GAAuBA,WAAvB;OA7BA;MA+BFF,MAAM,EAAE,CACN9L,UADM,EAEN2D,QAFM,EAGN;QAAEzD;OAHI;QAKNyD,QAAQ,CAACzD,GAAT,GAAeA,GAAf;;KAzCJ;;;EAhBA+K,SAAS;IACP,OAAO,MAAP;;;EAGFjB,MAAM,CAAChK,UAAD,EAAqB+J,KAArB;IACJ,MAAMpG,QAAQ,GAAS,EACrB,GAAGiE,yBAAyB,EADP;MAErB1H,GAAG,EAAE6J,KAAK,CAAC7J,GAFU;MAGrBmhB,SAAS,EAAEtX,KAAK,CAACsX,SAAN,IAAmB,EAHT;MAIrBlhB,IAAI,EAAE4J,KAAK,CAAC5J,IAJS;MAKrB6L,WAAW,EAAEjC,KAAK,CAACiC;KALrB;IAOA,KAAKjB,IAAL,CAAU/K,UAAV,EAAsB2D,QAAtB;IACA,OAAOA,QAAP;;;;;MCxBS6d,oBAAoBzY;EAG/B3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIyY,cAAJ,CAAmB/Y,OAAnB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,OAAP;;;;;MCTSqY,0BAA0B1Y;EAGrC3N,YAAY4N,QAAgBb;IAC1B,MAAMa,MAAN;IACA,KAAKP,UAAL,GAAkB,IAAIiK,kBAAJ,CAAuBvK,OAAvB,CAAlB;;;EAGFiB,WAAW;IACT,OAAO,IAAP;;;EAGFH,cAAc,CAACD,MAAD;;IAEZ,MAAMG,QAAQ,GAAG,KAAKC,WAAL,EAAjB;IACA,MAAM3C,MAAM,GAAGE,MAAM,CAAC;MAAE0C,WAAW,EAAE;KAAhB,CAArB;IAEA,KAAKH,WAAL,CAAiBzC,MAAjB;IAEAA,MAAM,CAAC7C,GAAP,CAAW,EAAX,EAAe,KAAKmP,KAAL,CAAW7L,IAAX,CAAgB,IAAhB,CAAf;IAEAT,MAAM,CAACO,IAAP,CAAY,SAAZ,EAAuB,KAAK0a,MAAL,CAAYxa,IAAZ,CAAiB,IAAjB,CAAvB;IAEA8B,MAAM,CAACpC,GAAP,KAAeuC,UAAf,EAA2B1C,MAA3B;;;EAGFsM,KAAK,CAAC5M,OAAD,EAAmBiB,QAAnB;IACH,MAAMzD,QAAQ,GAAG,KAAK8E,UAAL,CAAgBsK,KAAhB,CAAsB5M,OAAO,CAACrE,MAAR,CAAe9B,UAArC,CAAjB;;IACA,IAAI,CAAC2D,QAAL,EAAe;MACb,OAAOyD,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0B,WAA1B,CAAP;;;IAEF,OAAOP,QAAQ,CAACjG,MAAT,CAAgB,GAAhB,EAAqBwG,IAArB,CAA0BhE,QAA1B,CAAP;;;EAGF+d,MAAM,CAACvb,OAAD,EAAmBiB,QAAnB;IACJ,MAAM2C,KAAK,GAAG5D,OAAO,CAACsB,IAAtB;IACA,MAAM9D,QAAQ,GAAG,KAAK8E,UAAL,CAAgBuB,MAAhB,CAAuB7D,OAAO,CAACrE,MAAR,CAAe9B,UAAtC,EAAkD+J,KAAlD,CAAjB;;IACA,MAAMxQ,MAAM,GAAG,KAAKuQ,aAAL,CAAmB3D,OAAnB,EAA4BxC,QAAQ,CAACD,EAArC,CAAf;;IACA,OAAO0D,QAAQ,CAACjG,MAAT,CAAgB,KAAK8I,gBAArB,EAAuCtC,IAAvC,CAA4C;MAAElF,QAAQ,EAAElJ;KAAxD,CAAP;;;;;ACSJ,MAAMooB,eAAe,GAA6B;EAChDC,oBAAoB,EAAE,KAD0B;EAEhDC,mBAAmB,EAAE,KAF2B;EAGhDC,iBAAiB,EAAEpoB,SAH6B;EAIhDqoB,OAAO,EAAElZ,oBAJuC;EAKhDmZ,QAAQ,EAAElZ,qBALsC;EAMhDmZ,MAAM,EAAE;AANwC,CAAlD;AASA,MAAaC;EAaX9mB,YAAYmL,UAA6C;IAPjD,gBAAA,GAGJ;MAAEe,IAAI,EAAE5N,SAAR;MAAmByoB,GAAG,EAAEzoB;KAHpB;IAQN,KAAK6M,OAAL,GAAe,EAAE,GAAGob,eAAL;MAAsB,GAAGpb;KAAxC;IACA,KAAK8B,SAAL,GAAiB,EAAjB;IACA,KAAK+Z,eAAL,GAAuB1oB,SAAvB;IAEA,KAAK0O,QAAL,GAAgB,IAAIrI,eAAJ,EAAhB;IACA,KAAKsiB,OAAL,GAAe,IAAI/b,YAAJ,CAAiB;MAC9BzF,OAAO,EAAE,KAAK0F,OAAL,CAAaqb,oBADQ;MAE9Bxc,QAAQ,EAAE,KAAKmB,OAAL,CAAasb;KAFV,CAAf;IAKA,KAAKS,GAAL,GAAW,KAAKC,SAAL,CAAe;MAAEN,MAAM,EAAE,KAAK1b,OAAL,CAAa0b;KAAtC,CAAX;;;EAGFxlB,KAAK;;IAEH,KAAK+lB,YAAL;IACA,KAAKC,WAAL;;;EAGFC,IAAI;;;IACF,8BAAKC,WAAL,CAAiBrb,IAAjB,2CAAuBsb,OAAvB,CAA+B,KAA/B;IACA,KAAKD,WAAL,CAAiBrb,IAAjB,GAAwB5N,SAAxB;IAEA,8BAAKipB,WAAL,CAAiBR,GAAjB,2CAAsBS,OAAtB,CAA8B,KAA9B;IACA,KAAKD,WAAL,CAAiBR,GAAjB,GAAuBzoB,SAAvB;;;EAGFwJ,KAAK;IACH,KAAKkF,QAAL,CAAclF,KAAd;;;EAGF5B,OAAO,CAACtB,UAAD;IACL,IAAI,CAACA,UAAD,IAAe,CAAC,KAAKuG,OAAL,CAAaub,iBAAjC,EAAoD;MAClD,MAAM,IAAIhjB,KAAJ,CAAU,yCAAV,CAAN;;;IAGF,OAAO,IAAImJ,UAAJ,CACLjI,UAAU,IAAI,KAAKuG,OAAL,CAAaub,iBADtB,EAEL,KAAKzZ,SAFA,EAGL,KAAKD,QAHA,CAAP;;;EAOFya,SAAS,CAACC,OAAe,IAAhB,EAAsBvc,OAAtB;IACP,MAAM+b,GAAG,GAAG,KAAKC,SAAL,CAAehc,OAAf,CAAZ;IACA,MAAMwc,MAAM,GAAGT,GAAG,CAACU,MAAJ,CAAWF,IAAX,EAAiB;MAC9B9d,OAAO,CAACie,GAAR,8CAAyDH,MAAzD;KADa,CAAf;IAGAC,MAAM,CAACG,gBAAP,GAA0B,KAAK,IAA/B;;;EAGMX,SAAS,CAAChc,OAAD;IACf,MAAM+b,GAAG,GAAG5b,OAAO,EAAnB;IAEA,MAAMyc,aAAa,GAAGzc,OAAO,CAACC,MAAR,CAAe;MAAE0C,WAAW,EAAE;KAA9B,CAAtB;IACA8Z,aAAa,CAACvc,GAAd,CAAkBF,OAAO,CAAC0c,IAAR,EAAlB;;IAEA,IAAI,EAAC7c,OAAD,YAACA,OAAO,CAAE0b,MAAV,CAAJ,EAAsB;MACpBK,GAAG,CAAC1b,GAAJ,CAAQyc,MAAM,CAAC,MAAD,CAAd;;;IAEFf,GAAG,CAAC1b,GAAJ,CAAQ,QAAR,EAAkB,KAAKyb,OAAL,CAAa7b,YAAb,EAAlB;;IAGA,IAAI,KAAKD,OAAL,CAAaqb,oBAAjB,EAAuC;MACrCU,GAAG,CAAC1b,GAAJ,CAAQ,cAAR,EAAwB,KAAKyb,OAAL,CAAalb,gBAAb,EAAxB,EAAyDgc,aAAzD;KADF,MAEO;MACLb,GAAG,CAAC1b,GAAJ,CAAQ,cAAR,EAAwBuc,aAAxB;;;IAGF,KAAKf,eAAL,GAAuB,IAAIjG,cAAJ,CAAmBgH,aAAnB,EAAkC,KAAK/a,QAAvC,CAAvB;IAEA,KAAKC,SAAL,GAAiB;MACf9F,QAAQ,EAAE,IAAI2P,gBAAJ,CAAqBiR,aAArB,EAAoC,KAAK/a,QAAzC,CADK;MAEf/F,IAAI,EAAE,IAAIuO,WAAJ,CAAgBuS,aAAhB,EAA+B,KAAK/a,QAApC,CAFS;MAGf,iBAAiB,IAAI4E,mBAAJ,CAAwBmW,aAAxB,EAAuC,KAAK/a,QAA5C,CAHF;MAIf3F,QAAQ,EAAE,IAAIuQ,eAAJ,CAAoBmQ,aAApB,EAAmC,KAAK/a,QAAxC,CAJK;MAKf5F,OAAO,EAAE,IAAI6P,cAAJ,CAAmB8Q,aAAnB,EAAkC,KAAK/a,QAAvC,CALM;MAMf,kBAAkB,IAAIqK,oBAAJ,CAAyB0Q,aAAzB,EAAwC,KAAK/a,QAA7C,CANH;MAOf,iBAAiB,IAAI8L,mBAAJ,CAAwBiP,aAAxB,EAAuC,KAAK/a,QAA5C,CAPF;MAQf1F,SAAS,EAAE,IAAIgS,iBAAJ,CAAsByO,aAAtB,EAAqC,KAAK/a,QAA1C,CARI;MASf,mBAAmB,IAAIgN,qBAAJ,CACjB+N,aADiB,EAEjB,KAAK/a,QAFY,CATJ;MAaf,sBAAsB,IAAIiL,mBAAJ,CACpB8P,aADoB,EAEpB,KAAK/a,QAFe,CAbP;MAiBfzF,KAAK,EAAE,IAAImV,YAAJ,CAAiBqL,aAAjB,EAAgC,KAAK/a,QAArC,CAjBQ;MAkBfxF,OAAO,EAAE,IAAIoV,cAAJ,CAAmBmL,aAAnB,EAAkC,KAAK/a,QAAvC,CAlBM;MAmBf,WAAW,IAAIiN,aAAJ,CAAkB8N,aAAlB,EAAiC,KAAK/a,QAAtC,CAnBI;MAoBf,eAAe,IAAIqZ,iBAAJ,CAAsB0B,aAAtB,EAAqC,KAAK/a,QAA1C,CApBA;MAqBf,cAAc,IAAIqO,gBAAJ,CAAqB0M,aAArB,EAAoC,KAAK/a,QAAzC,CArBC;MAsBf,mBAAmB,IAAIuV,qBAAJ,CACjBwF,aADiB,EAEjB,KAAK/a,QAFY,CAtBJ;MA0Bf,gBAAgB,IAAIsS,kBAAJ,CAAuByI,aAAvB,EAAsC,KAAK/a,QAA3C,CA1BD;MA2BfvF,OAAO,EAAE,IAAIgX,cAAJ,CAAmBsJ,aAAnB,EAAkC,KAAK/a,QAAvC,CA3BM;MA4Bf,sBAAsB,IAAIyQ,wBAAJ,CACpBsK,aADoB,EAEpB,KAAK/a,QAFe,CA5BP;MAgCf,iBAAiB,IAAI2V,mBAAJ,CAAwBoF,aAAxB,EAAuC,KAAK/a,QAA5C,CAhCF;MAiCftF,KAAK,EAAE,IAAIwb,YAAJ,CAAiB6E,aAAjB,EAAgC,KAAK/a,QAArC,CAjCQ;MAkCfrF,KAAK,EAAE,IAAI+b,YAAJ,CAAiBqE,aAAjB,EAAgC,KAAK/a,QAArC,CAlCQ;MAmCfpF,YAAY,EAAE,IAAI0c,mBAAJ,CAAwByD,aAAxB,EAAuC,KAAK/a,QAA5C,CAnCC;MAoCf,gBAAgB,IAAI+X,kBAAJ,CAAuBgD,aAAvB,EAAsC,KAAK/a,QAA3C,CApCD;MAqCfhM,IAAI,EAAE,IAAI6kB,WAAJ,CAAgBkC,aAAhB,EAA+B,KAAK/a,QAApC,CArCS;MAsCfnF,IAAI,EAAE,IAAIue,WAAJ,CAAgB2B,aAAhB,EAA+B,KAAK/a,QAApC;KAtCR;IAyCAka,GAAG,CAAC1b,GAAJ,CAAQ,CAACvC,GAAD,EAAaif,GAAb,EAA2BC,IAA3B,EAA2C5kB,IAA3C;MACN,IAAI0F,GAAG,YAAY1E,kBAAnB,EAAuC;QACrC,OAAO4jB,IAAI,CAACpiB,MAAL,CAAYkD,GAAG,CAACxE,UAAhB,EAA4B8H,IAA5B,CAAiC;UACtC9H,UAAU,EAAEwE,GAAG,CAACxE,UADsB;UAEtCxE,OAAO,EAAEgJ,GAAG,CAAChJ,OAFyB;UAGtCmoB,MAAM,EAAE,CAACnf,GAAG,CAACzE,IAAL;SAHH,CAAP;OADF,MAMO;QACLoF,OAAO,CAACC,KAAR,CAAcZ,GAAd;QACA,OAAOkf,IAAI,CAACpiB,MAAL,CAAY,GAAZ,EAAiBwG,IAAjB,CAAsB;UAC3B1C,KAAK,EAAEZ,GAAG,CAAChJ;SADN,CAAP;;KATJ;IAeA,OAAOinB,GAAP;;;EAGMG,WAAW;IACjB,MAAMH,GAAG,GAAG,KAAKA,GAAjB;IAEA,KAAKK,WAAL,CAAiBR,GAAjB,GAAuBsB,IAAI,CAAC,KAAKld,OAAL,CAAawb,OAAd,CAAJ,CACpBa,OADoB,GAEpBhf,GAFoB,CAEhB,IAFgB,EAGpB8f,KAHoB,CAGd,gBAAeC,GAAf;MACL,MAAMvc,QAAQ,GAAG,MAAMwc,SAAS,CAACtB,GAAD,CAAT,CACpB1e,GADoB,CAChB+f,GADgB,EAEpBlgB,GAFoB,CAEhBiF,WAAW,CAAC,KAAK4a,GAAL,CAAS3a,OAAV,CAFK,CAAvB;MAGA,OAAO,CAACvB,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;KAPmB,EASpBT,IAToB,CASf,IATe,EAUpB0c,KAVoB,CAUd,gBAAeC,GAAf,EAAoBlc,IAApB;MACL,MAAML,QAAQ,GAAG,MAAMwc,SAAS,CAACtB,GAAD,CAAT,CACpBtb,IADoB,CACf2c,GADe,EAEpBlgB,GAFoB,CAEhBiF,WAAW,CAAC,KAAK4a,GAAL,CAAS3a,OAAV,CAFK,EAGpBhB,IAHoB,CAGfF,IAHe,CAAvB;MAIA,OAAO,CAACL,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;KAfmB,EAiBpBxD,MAjBoB,CAiBb,IAjBa,EAkBpByf,KAlBoB,CAkBd,gBAAeC,GAAf,EAAoBlc,IAApB;MACL,MAAML,QAAQ,GAAG,MAAMwc,SAAS,CAACtB,GAAD,CAAT,CACpBre,MADoB,CACb0f,GADa,EAEpBlgB,GAFoB,CAEhBiF,WAAW,CAAC,KAAK4a,GAAL,CAAS3a,OAAV,CAFK,EAGpBhB,IAHoB,CAGfF,IAHe,CAAvB;MAIA,OAAO,CAACL,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;KAvBmB,CAAvB;;;EA2BM+a,YAAY;IAClB,MAAMF,GAAG,GAAG,KAAKA,GAAjB;IAEA,KAAKK,WAAL,CAAiBrb,IAAjB,GAAwBmc,IAAI,CAAC,KAAKld,OAAL,CAAayb,QAAd,CAAJ,CACrBY,OADqB,GAErB5b,IAFqB,CAEhB,cAFgB,EAGrB0c,KAHqB,CAGf,gBAAeC,GAAf,EAAoBlc,IAApB;MACL,MAAML,QAAQ,GAAG,MAAMwc,SAAS,CAACtB,GAAD,CAAT,CACpBtb,IADoB,CACf2c,GAAG,GAAG,GAAN,GAAYlc,IADG,EAEpBhE,GAFoB,CAEhBiF,WAAW,CAAC,KAAK4a,GAAL,CAAS3a,OAAV,CAFK,EAGpBhB,IAHoB,EAAvB;MAIA,OAAO,CAACP,QAAQ,CAACjG,MAAV,EAAkBiG,QAAQ,CAACK,IAA3B,CAAP;KARoB,CAAxB;;;;;;;"}