@infrab4a/connect 4.0.0-beta.6 → 4.0.0-beta.7

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":"infrab4a-connect.mjs","sources":["../../../projects/connect/src/domain/generic/model/base.model.ts","../../../projects/connect/src/domain/generic/repository/enums/where.enum.ts","../../../projects/connect/src/domain/generic/repository/enums/update-option-actions.enum.ts","../../../projects/connect/src/domain/users/models/enums/accessory-importances.enum.ts","../../../projects/connect/src/domain/users/models/enums/area.enum.ts","../../../projects/connect/src/domain/users/models/enums/beard-problems.enum.ts","../../../projects/connect/src/domain/users/models/enums/beard-sizes.enum.ts","../../../projects/connect/src/domain/users/models/enums/beauty-product-importances.enum.ts","../../../projects/connect/src/domain/users/models/enums/body-problems.enum.ts","../../../projects/connect/src/domain/users/models/enums/body-shapes.enum.ts","../../../projects/connect/src/domain/users/models/enums/body-tattoos.enum.ts","../../../projects/connect/src/domain/users/models/enums/face-skin-oilinesses.enum.ts","../../../projects/connect/src/domain/users/models/enums/face-skin-problems.enum.ts","../../../projects/connect/src/domain/users/models/enums/face-skin-tones.enum.ts","../../../projects/connect/src/domain/users/models/enums/family-incomes.enum.ts","../../../projects/connect/src/domain/users/models/enums/fragrance-importances.enum.ts","../../../projects/connect/src/domain/users/models/enums/hair-colors.enum.ts","../../../projects/connect/src/domain/users/models/enums/hair-problems.enum.ts","../../../projects/connect/src/domain/users/models/enums/hair-strands.enum.ts","../../../projects/connect/src/domain/users/models/enums/hair-types.enum.ts","../../../projects/connect/src/domain/users/models/enums/office-position.enum.ts","../../../projects/connect/src/domain/users/models/enums/product-spents.enum.ts","../../../projects/connect/src/domain/users/models/enums/user-type.enum.ts","../../../projects/connect/src/domain/users/models/subscription/enums/billing-status.enum.ts","../../../projects/connect/src/domain/users/models/subscription/enums/edition-status.enum.ts","../../../projects/connect/src/domain/users/models/subscription/enums/payment-type.enum.ts","../../../projects/connect/src/domain/users/models/subscription/enums/status.enum.ts","../../../projects/connect/src/domain/users/models/subscription/edition.ts","../../../projects/connect/src/domain/shopping/models/payment.ts","../../../projects/connect/src/domain/users/models/subscription/payment.ts","../../../projects/connect/src/domain/location/models/address.ts","../../../projects/connect/src/utils/get.ts","../../../projects/connect/src/utils/is.ts","../../../projects/connect/src/utils/is-uuid.ts","../../../projects/connect/src/utils/mixins/base.mixin.ts","../../../projects/connect/src/utils/parse-datetime.ts","../../../projects/connect/src/utils/index.ts","../../../projects/connect/src/domain/shopping/models/enums/checkout-types.enum.ts","../../../projects/connect/src/domain/shopping/models/coupons/enums/coupon-types.enum.ts","../../../projects/connect/src/domain/shopping/models/coupons/enums/coupon-subtypes.enum.ts","../../../projects/connect/src/domain/shopping/models/coupons/enums/exclusivities.enum.ts","../../../projects/connect/src/domain/shopping/models/coupons/coupon.ts","../../../projects/connect/src/domain/shopping/models/subscription/plan.ts","../../../projects/connect/src/domain/users/models/beauty-profile.ts","../../../projects/connect/src/domain/users/models/user.ts","../../../projects/connect/src/domain/users/models/subscription/subscription.ts","../../../projects/connect/src/domain/users/models/user-address.ts","../../../projects/connect/src/domain/users/models/user-payment-method.ts","../../../projects/connect/src/domain/users/models/lead.ts","../../../projects/connect/src/domain/users/errors/unauthorized.error.ts","../../../projects/connect/src/domain/users/use-cases/authentication.ts","../../../projects/connect/src/domain/users/errors/user-already-registered.error.ts","../../../projects/connect/src/domain/users/errors/weak-password.error.ts","../../../projects/connect/src/domain/users/use-cases/register.ts","../../../projects/connect/src/domain/users/use-cases/signout.ts","../../../projects/connect/src/domain/users/use-cases/recovery-password.ts","../../../projects/connect/src/domain/catalog/models/category.ts","../../../projects/connect/src/domain/catalog/models/enums/product-genders.enum.ts","../../../projects/connect/src/domain/catalog/models/enums/shops.enum.ts","../../../projects/connect/src/domain/catalog/models/product.ts","../../../projects/connect/src/domain/catalog/models/kit-product.ts","../../../projects/connect/src/domain/catalog/models/variant.ts","../../../projects/connect/src/domain/shopping/models/enums/order-status.enum.ts","../../../projects/connect/src/domain/shopping/models/line-item.ts","../../../projects/connect/src/domain/shopping/models/shipping-method.ts","../../../projects/connect/src/domain/shopping/models/checkout.ts","../../../projects/connect/src/domain/shopping/models/order.ts","../../../projects/connect/src/domain/shopping/models/subscription/checkout.ts","../../../projects/connect/src/domain/shopping/models/buy-2-win.ts","../../../projects/connect/src/domain/shop-settings/enums/filter-type.enum.ts","../../../projects/connect/src/domain/shop-settings/enums/questions-filters.enum.ts","../../../projects/connect/src/domain/shop-settings/helpers/beauty-questions.helper.ts","../../../projects/connect/src/domain/shop-settings/models/home.ts","../../../projects/connect/src/domain/shop-settings/models/shop-menu.ts","../../../projects/connect/src/errors/invalid-argument.error.ts","../../../projects/connect/src/errors/required-argument.error.ts","../../../projects/connect/src/errors/not-found.error.ts","../../../projects/connect/src/errors/duplicated-results.error.ts","../../../projects/connect/src/infra/elasticsearch/adapters/axios.adapter.ts","../../../projects/connect/src/infra/elasticsearch/indexes/products-index.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-helpers.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-get-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/enums/firestore-field-type.enum.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-find-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-create-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-update-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-delete-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-sub-collection.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-crud-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/lead-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/subscription-edition-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/subscription-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/subscription-payment-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/user-address-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/user-beauty-profile-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/user-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/user-payment-method-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/catalog/category-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/catalog/product-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/catalog/product-variant-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/catalog/subscription-product-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/checkout-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/coupon-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/order-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/payment-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/checkout-subscription-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/subscription-plan-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/buy-2-win-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/legacy-order-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shop-settings/home-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shop-settings/shop-menu-firestore.repository.ts","../../../projects/connect/src/infra/firebase/auth/authentication-firebase-auth.service.ts","../../../projects/connect/src/infra/firebase/auth/register-firebase-auth.service.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/helpers/attribute-option.helper.ts","../../../projects/connect/src/infra/hasura-graphql/enums/hasura-graphql-where.enum.ts","../../../projects/connect/src/infra/hasura-graphql/enums/hasura-graphql-column-type.enum.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/helpers/filter-option.helper.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/helpers/bind-filter-query.helper.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/helpers/graphql-field.helper.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-create-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-delete-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-update-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-get-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-find-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-crud-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/models/category-hasura-graphql.ts","../../../projects/connect/src/infra/hasura-graphql/models/product-hasura-graphql.ts","../../../projects/connect/src/infra/hasura-graphql/models/kit-product-hasura-graphql.ts","../../../projects/connect/src/infra/hasura-graphql/models/variant-hasura-graphql.ts","../../../projects/connect/src/infra/hasura-graphql/repositories/catalog/category-hasura-graphql.repository.ts","../../../projects/connect/src/infra/hasura-graphql/repositories/catalog/product-hasura-graphql.repository.ts","../../../projects/connect/src/infra/hasura-graphql/repositories/catalog/variant-hasura-graphql.repository.ts","../../../projects/connect/src/infrab4a-connect.ts"],"sourcesContent":["import { instanceToPlain, plainToInstance } from 'class-transformer'\n\nimport {\n BaseModelBuilder,\n ModelBaseStructure,\n NonFunctionAndIdentifierProperties,\n NonFunctionProperties,\n} from './types'\n\nexport type GenericIdentifier<T = 'id'> = T\n\nexport class BaseModel<Model, Identifiers = GenericIdentifier> implements ModelBaseStructure<Model, Identifiers> {\n get identifier(): NonFunctionAndIdentifierProperties<Model> {\n const fields = (this.constructor as BaseModelBuilder<Model>).identifiersFields.filter(\n (field) => field !== 'identifier',\n )\n\n return fields.reduce(\n (object, field) => ({ ...object, [field]: this[field as keyof BaseModel<Model>] }),\n {} as NonFunctionAndIdentifierProperties<Model>,\n )\n }\n\n get identifiersFields(): Identifiers[] {\n return (this.constructor as BaseModelBuilder<Model, Identifiers>).identifiersFields\n }\n\n constructor(args?: Partial<Model>) {\n Object.assign(this, args)\n }\n\n static toInstance<T extends ModelBaseStructure>(this: new () => T, data?: Partial<NonFunctionProperties<T>>): T {\n return plainToInstance(this, data || {})\n }\n\n static isModel<T extends ModelBaseStructure>(this: new () => T, value: any): value is T {\n return value instanceof this\n }\n\n toPlain(): any {\n return instanceToPlain(this)\n }\n}\n","export enum Where {\n EQUALS = '==',\n NOTEQUALS = '!=',\n GT = '>',\n GTE = '>=',\n IN = 'in',\n NOTIN = 'not in',\n LT = '<',\n LTE = '<=',\n LIKE = 'like',\n NOTLIKE = 'not like',\n ISNULL = 'is null',\n ISNOTNULL = 'is not null',\n}\n","export enum UpdateOptionActions {\n UPDATE = 'update',\n MERGE = 'merge',\n REMOVE = 'remove',\n REMOVE_FIELD = 'removeField',\n NULL = 'null',\n}\n","export enum AccessoryImportances {\n NOT_INTERESTED = 'Não tenho interesse',\n LIKE_RARELY_USE = 'Gosto, mas uso poucos',\n LIKE_ALWAYS_FOLLOW_FASHION = 'Gosto muito de acessórios e sempre procuro acompanhar a moda',\n}\n","export enum Area {\n GP = 'Geral',\n CRM = 'CRM',\n MediaProd = 'Media Production',\n Tech = 'Tecnologia',\n Transactional = 'Transacional',\n Operations = 'Opera\\u00E7\\u00F5es',\n Sales = 'Comercial',\n Finantial = 'Financeiro',\n HR = 'RH',\n}\n","export enum BeardProblems {\n NO_PROBLEMS = 'Sem problemas',\n DRY = 'Barba Seca',\n OILY = 'Barba Oleaosa',\n DANCRUFF = 'Barba com Caspa',\n INGROWN_HAIRS = 'Pêlos Encravados',\n DOESNT_GROW = 'Não Cresce',\n SPARSE_BEARD = 'Barba Rala',\n}\n","export enum BeardSizes {\n BIG = 'Grande',\n MEDIUM = 'Média',\n SHORT = 'Curta',\n MUSTACHE = 'Bigode',\n NOTHING = 'Sem Barba',\n}\n","export enum BeautyProductImportances {\n KNOW_LITTLE_ABOUT = 'Conheço bem pouco de produtos de beleza e rotinas de cuidados',\n ALREADY_BOUGHT_NOTHING_SPECIALIZED = 'Já comprei alguns produtos básicos para cuidar de mim, mas nada muito especializado',\n GOOD_CARE_MYSELF = 'Me considero um homem que se cuida bem. Conheço sobre produtos especializados e me preocupo em ter uma rotina de cuidados',\n PERSONAL_CARE_EXPERT = 'Sou um expert em cuidados pessoais',\n}\n","export enum BodyProblems {\n NO_WORRIES = 'Sem preocupações',\n FLACCIDITY = 'Flacidez',\n LOCALIZED_FAT = 'Gordura Localizada',\n STRETCH_MARKS = 'Estrias',\n SENSITIVE_SKIN = 'Pele Sensível',\n DRY_SKIN = 'Pele Seca',\n OILY_ACNE = 'Oleosa/Acne',\n SKIN_FRECKLES = 'Pele com Sardas',\n PHOTOSENSITIVE_SKIN = 'Pele Fotossensível',\n}\n","export enum BodyShapes {\n LEAN = 'Magro',\n REGULAR = 'Regular',\n OVERWEIGHT = 'Acima do Peso',\n ATHLETIC = 'Atlético',\n MUSCULAR = 'Musculoso',\n}\n","export enum BodyTattoos {\n NONE = 'Nenhuma',\n HAS_DOESNT_CARE = 'Tenho mas não cuido',\n HAS_CARE_LOT = 'Tenho e cuido bastante',\n}\n","export enum FaceSkinOilinesses {\n DRY = 'Seca',\n OILY = 'Oleaosa',\n MIXED = 'Mista',\n NORMAL = 'Normal',\n DONT_KNOW = 'Eu não sei como dizer',\n}\n","export enum FaceSkinProblems {\n NO_PROBLEMS = 'Sem problemas',\n DARK_CIRCLES = 'Olheiras',\n WRINKLES = 'Rugas',\n BLACKHEADS_PIMPLES = 'Cravos e Espinhas',\n STAINS = 'Manchas',\n FRECKLES = 'Sardas',\n SENSITIVE = 'Sensível',\n PHOTOSENSITIVE = 'Fotossensível',\n}\n","export enum FaceSkinTones {\n VERY_CLEAR = 'Muito Clara',\n CLEAR = 'Clara',\n MEDIUM_LIGHT = 'Clara Média',\n MEDIUM_DARK = 'Escura Média',\n DARK = 'Escura',\n VERY_DARK = 'Muito Escura',\n}\n","export enum FamilyIncomes {\n UNTIL_3000 = 'Até R$3.000',\n SINCE_3001_TO_7000 = 'De R$3.001 a R$7.000',\n SINCE_7001_TO_10000 = 'De R$7.001 a R$10.000',\n SINCE_10001_TO_15000 = 'De R$10.001 a R$15.000',\n GRAN_THAN_15000 = 'Mais de R$15.000',\n NOW_ANSWER = 'Prefiro nao responder',\n}\n","export enum FragranceImportances {\n NOT_INTERESTED = 'Não tenho interesse',\n LIKE_ALWAYS_USE_SAME = 'Gosto de perfumes, mas uso sempre os mesmos',\n LIKE_INNOVATE = 'Gosto de inovar e conhecer novas fragrâncias',\n}\n","export enum HairColors {\n BLACK = 'Preto',\n DARK_BROWN = 'Castanho Escuro',\n LIGHT_BROWN = 'Castanho Claro',\n DARK_BLONDE = 'Loiro Escuro',\n LIGHT_BLONDE = 'Loiro Claro',\n WHITE_GRAY = 'Branco/Grisalho',\n REDHEAD = 'Ruivo',\n OTHER = 'RuiOutroo',\n}\n","export enum HairProblems {\n NO_PROBLEMS = 'Sem problemas',\n DANCRUFF = 'Caspa',\n LOSS = 'Queda',\n OILY = 'Oleosidade',\n DRYNESS = 'Ressecamento',\n CHEMICAL = 'Quimica',\n WHITE_HAIR = 'Cabelos Brancos',\n REBEL_WIRES = 'Fios Rebeldes',\n}\n","export enum HairStrands {\n NORMAL = 'Fio Normal',\n DRY = 'Fio Seco',\n OILY = 'Fio Oleoso',\n MIXED = 'Fio Misto',\n FINE = 'Fio Fino',\n THICK = 'Fio Grosso',\n}\n","export enum HairTypes {\n Smooth = 'Liso',\n WAVY = 'Ondulado',\n CURLY = 'Cacheado',\n FRIZZY = 'Crespo',\n BALD = 'Sou careca',\n}\n","export enum OfficePosition {\n Intern = 'Estagi\\u00E1rio',\n Analyst = 'Analista',\n Manager = 'Gerente',\n Director = 'Diretor',\n}\n","export enum ProductSpents {\n UNTIL_50 = 'Até R$50',\n SINCE_51_TO_100 = 'De R$51 a R$100',\n SINCE_101_TO_200 = 'De R$101 a R$200',\n SINCE_201_TO_300 = 'De R$201 a R$300',\n GRAN_THAN_300 = 'Mais de R$300',\n NOW_ANSWER = 'Prefiro nao responder',\n}\n","export enum UserType {\n B2C = 'Cliente Transacional',\n GlamGirl = 'Glamgirl',\n MensBoy = 'Mensboy',\n B2B = 'Company',\n Collaborator = 'Funcionário',\n Influencer = 'Influencer',\n}\n","export enum BillingStatus {\n PAYED = 'PAGO',\n}\n","export enum EditionStatus {\n ALLOCATION_WAITING = 'Aguardando alocação',\n SHIPPED = 'Enviado',\n}\n","export enum PaymentType {\n AQUISITION = 'Aquisição',\n RENEWAL = 'Renovação',\n FREIGHT = 'mudança de endereço, Frete',\n}\n","export enum Status {\n ACTIVE = 'active',\n CANCELLED = 'Cancelado',\n}\n","import { BaseModel } from '../../../generic/model/base.model'\n\nimport { EditionStatus, BillingStatus } from './enums'\n\nexport type EditionIdentifiers = 'id' | 'subscriptionId'\n\nexport class Edition extends BaseModel<Edition, EditionIdentifiers> {\n id: string\n subscriptionId: string\n billingStatus: BillingStatus\n editionId: number\n editionStatus: EditionStatus\n installment: number\n paymentId: string\n draftId?: string\n createdAt: Date\n updatedAt: Date\n\n static get identifiersFields(): EditionIdentifiers[] {\n return ['id', 'subscriptionId']\n }\n}\n","import { Expose } from 'class-transformer'\n\nimport { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\n\nimport { PaymentBilling, PaymentCard, PaymentCustomer, PaymentItem, PaymentShipping } from './types'\n\nexport class Payment extends BaseModel<Payment> {\n id: number\n object: string\n status: string\n tid: number\n nsu: number\n amount: number\n cost: number\n installments: number\n referer: string\n ip: string\n phone: string\n address: string\n metadata: any\n device: string\n payment: string\n addition: string\n discount: string\n customer: PaymentCustomer\n billing: PaymentBilling\n shipping: PaymentShipping\n items: PaymentItem[]\n card: PaymentCard\n\n @Expose({ name: 'refuse_reason' })\n refuseReason: string\n @Expose({ name: 'status_reason' })\n statusReason: string\n @Expose({ name: 'acquirer_response_code' })\n acquirerResponseCode: string\n @Expose({ name: 'acquirer_name' })\n acquirerName: string\n @Expose({ name: 'acquirer_id' })\n acquirerId: string\n @Expose({ name: 'authorization_code' })\n authorizationCode: string\n @Expose({ name: 'soft_descriptor' })\n softDescriptor: string\n @Expose({ name: 'date_created' })\n dateCreated: string\n @Expose({ name: 'date_updated' })\n dateUpdated: string\n @Expose({ name: 'authorized_amount' })\n authorizedAmount: number\n @Expose({ name: 'paid_amount' })\n paidAmount: number\n @Expose({ name: 'refunded_amount' })\n refundedAmount: number\n @Expose({ name: 'card_holder_name' })\n cardHolderName: string\n @Expose({ name: 'card_last_digits' })\n cardLastDigits: string\n @Expose({ name: 'card_first_digits' })\n cardFirstDigits: string\n @Expose({ name: 'card_brand' })\n cardBrand: string\n @Expose({ name: 'card_pin_mode' })\n cardPinMode: string\n @Expose({ name: 'card_magstripe_fallback' })\n cardMagstripeFallback: boolean\n @Expose({ name: 'cvm_pin' })\n cvmPin: boolean\n @Expose({ name: 'postback_url' })\n postbackUrl: string\n @Expose({ name: 'payment_method' })\n paymentMethod: string\n @Expose({ name: 'capture_method' })\n captureMethod: string\n @Expose({ name: 'antifraud_score' })\n antifraudScore: string\n @Expose({ name: 'boleto_url' })\n boletoUrl: string\n @Expose({ name: 'boleto_barcode' })\n boletoBarcode: string\n @Expose({ name: 'boleto_expiration_date' })\n boletoExpirationDate: string\n @Expose({ name: 'subscription_id' })\n subscriptionId: string\n @Expose({ name: 'split_rules' })\n splitRules: string\n @Expose({ name: 'antifraud_metadata' })\n antifraudMetadata: any\n @Expose({ name: 'reference_key' })\n referenceKey: string\n @Expose({ name: 'local_transaction_id' })\n localTransactionId: string\n @Expose({ name: 'local_time' })\n localTime: string\n @Expose({ name: 'fraud_covered' })\n fraudCovered: boolean\n @Expose({ name: 'fraud_reimbursed' })\n fraudReimbursed: string\n @Expose({ name: 'order_id' })\n orderId: string\n @Expose({ name: 'risk_level' })\n riskLevel: string\n @Expose({ name: 'receipt_url' })\n receiptUrl: string\n @Expose({ name: 'private_label' })\n privateLabel: string\n @Expose({ name: 'pix_qr_code' })\n pixQrCode: string\n @Expose({ name: 'pix_expiration_date' })\n pixExpirationDate: string\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { BaseModel } from '../../../generic/model/base.model'\nimport { Payment } from '../../../shopping/models/payment'\n\nimport { PaymentType } from './enums/payment-type.enum'\n\nexport type SubscriptionPaymentIdentifiers = 'id' | 'subscriptionId'\n\nexport class SubscriptionPayment extends BaseModel<SubscriptionPayment, SubscriptionPaymentIdentifiers> {\n id: string\n subscriptionId: string\n paymentType: PaymentType\n createdAt: Date\n attempts?: number\n\n @Type(() => Payment)\n payment: Payment\n\n static get identifiersFields(): SubscriptionPaymentIdentifiers[] {\n return ['id', 'subscriptionId']\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\n\nimport { LocationGeometry } from './types/location-geometry.type'\n\nexport abstract class Address<Identifiers = GenericIdentifier> extends BaseModel<Address, Identifiers> {\n default?: boolean\n recipient?: string\n zip?: string\n street?: string\n number?: string\n extension?: string\n district?: string\n city?: string\n regionalPole?: string\n region?: string\n state?: string\n country?: string\n mailbox?: boolean\n mailboxNumber?: string\n formattedAddress?: string\n placeId?: string\n geometry?: LocationGeometry\n\n static get identifiersFields(): string[] {\n return ['id']\n }\n}\n","import { get as getLodash } from 'lodash'\n\nexport const get = (object: any, path: string, defaultValue?: any) => getLodash(object, path, defaultValue)\n","export function is<T>(value: any): T {\n return value\n}\n","import { isString } from 'lodash'\n\nexport const isUUID = (value: string): boolean =>\n isString(value) && /[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}/.test(value)\n","export class Base {\n constructor(...args: Array<any>) {\n Object.assign(this, ...args)\n }\n}\n","import { isString } from 'lodash'\nimport { parseISO } from 'date-fns'\n\nexport const parseDateTime = (value: string): string | Date => {\n if (!isString(value)) return value\n if (\n !/^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/.test(value) &&\n !/^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T\\d{2}:\\d{2}:\\d{2}/.test(value)\n )\n return value\n\n const date = parseISO(value)\n\n if (isNaN(date.getTime())) return value\n\n return date\n}\n","import {\n add,\n addBusinessDays,\n addDays,\n addMonths,\n addYears,\n Duration,\n endOfDay,\n format,\n formatISO9075,\n parseISO,\n startOfDay,\n sub,\n} from 'date-fns'\nimport lodash from 'lodash'\n\nexport type DateDuration = Duration\n\nconst {\n chunk,\n isBoolean,\n isDate,\n isEmpty,\n isInteger,\n isNaN,\n isNil,\n isNumber,\n isObject,\n isString,\n now,\n omit,\n pick,\n set,\n} = lodash\n\nexport * from './get'\nexport * from './is'\nexport * from './is-uuid'\nexport * from './mixins'\nexport * from './parse-datetime'\nexport * from './types'\nexport {\n add,\n addDays,\n addBusinessDays,\n addMonths,\n addYears,\n chunk,\n endOfDay,\n format,\n formatISO9075,\n isBoolean,\n isDate,\n isEmpty,\n isInteger,\n isNil,\n isNaN,\n isNumber,\n isObject,\n isString,\n parseISO,\n now,\n omit,\n pick,\n set,\n startOfDay,\n sub,\n}\n","export enum CheckoutTypes {\n ECOMMERCE = 1,\n SUBSCRIPTION = 2,\n ALL = 3,\n}\n","export enum CouponTypes {\n ABSOLUTE = 1,\n PERCENTAGE = 2,\n // FINANCIAL = 1,\n // PRODUCT,\n // GIFTCARD,\n // VOUCHER,\n}\n","export enum CouponSubtypes {\n ABSOLUTE = 1,\n PERCENTAGE = 2,\n}\n","export enum Exclusivities {\n ALL_USERS = 1,\n SPECIFIC_USER = 2,\n COLLABORATORS = 3,\n ACTIVE_SUBSCRIBER = 4,\n INACTIVE_SUBSCRIBER = 5,\n NON_SUBSCRIBER = 6,\n}\n","import { Expose } from 'class-transformer'\n\nimport { isNil } from '../../../../utils'\nimport { Shops } from '../../../catalog/models/enums/shops.enum'\nimport { BaseModel, GenericIdentifier } from '../../../generic/model/base.model'\nimport { CheckoutTypes } from '../enums/checkout-types.enum'\n\nimport { CouponTypes, Exclusivities } from './enums'\nimport { ClubeDaMensPlan } from './enums/coupon-club-mens.enum'\n\nconst COUPON_EXPIRATION = +1000 * 60 * 60 * 24 * 30\n\nexport class Coupon extends BaseModel<Coupon> {\n id: string\n type: CouponTypes\n discount?: number\n user?: string\n userExclusiveEmail?: string\n campaign?: string\n nickname: string\n beginAt: Date\n expiresIn?: Date\n useLimit?: number\n useLimitPerUser?: boolean\n shopAvailability: Shops\n personId?: number\n influencerEmail?: string\n plan?: ClubeDaMensPlan\n productsCategories: string[]\n minSubTotalValue?: number\n active?: Boolean\n createdAt: Date\n updatedAt?: Date\n\n @Expose({ name: 'checkout_type' })\n checkoutType: CheckoutTypes\n\n @Expose({ name: 'exclusivity_type' })\n exclusivityType?: Exclusivities\n\n get isInfluencer(): boolean {\n return !isNil(this.influencerEmail)\n }\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n\n static createCoupon(userId: string): Coupon {\n return this.toInstance({\n nickname: `${Date.now()}`,\n type: CouponTypes.ABSOLUTE,\n checkoutType: CheckoutTypes.ECOMMERCE,\n discount: 30,\n user: userId,\n useLimit: 1,\n useLimitPerUser: true,\n createdAt: new Date(Date.now()),\n beginAt: new Date(Date.now()),\n expiresIn: new Date(Date.now() + COUPON_EXPIRATION),\n })\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../../generic/model/base.model'\n\nexport class SubscriptionPlan extends BaseModel<SubscriptionPlan> {\n id: string\n name: string\n billingPrice: number\n recurrencePrice: number\n recurrenceCycle: number\n maxAttempts: number\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { BaseModel } from '../../generic/model/base.model'\n\nimport { BeardSizes, HairTypes } from './enums'\n\nexport type BeautyProfileIdentifiers = 'id' | 'userId'\n\nexport class BeautyProfile extends BaseModel<BeautyProfile, BeautyProfileIdentifiers> {\n id: string\n userId: string\n beardSize?: BeardSizes\n hairType?: HairTypes\n\n override toPlain(): any {\n const plain = super.toPlain()\n\n delete plain.id\n\n return plain\n }\n\n static get identifiersFields(): BeautyProfileIdentifiers[] {\n return ['id', 'userId']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { isNil } from '../../../utils'\nimport { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\nimport { ModelBaseStructure, NonFunctionProperties } from '../../generic/model/types'\n\nimport { BeautyProfile } from './beauty-profile'\nimport { Area, OfficePosition, UserType } from './enums'\n\nexport class User extends BaseModel<User> {\n id: string\n cpf?: string\n email: string\n firstName?: string\n lastName?: string\n displayName?: string\n phone?: string\n birthday?: Date\n acceptsNewsletter?: boolean\n type?: UserType\n area?: Area\n officePosition?: OfficePosition\n isSubscriber?: boolean\n subscriptionPlan?: string\n badgeId?: number\n badgeMultiplier?: number\n dateCreated?: Date\n dateModified?: Date\n\n @Type(() => BeautyProfile)\n beautyProfile?: BeautyProfile\n\n static override toInstance<T extends ModelBaseStructure<User>>(\n this: new () => T,\n data?: Partial<NonFunctionProperties<User>>,\n ): T {\n const instance = super.toInstance(data) as User\n\n if (!isNil(data.firstName))\n instance.displayName = `${data.firstName}${!isNil(data.lastName) ? ` ${data.lastName}` : ''}`\n\n return instance as any\n }\n\n override toPlain(): Record<string, any> {\n const plain = super.toPlain()\n\n delete plain.beautyProfile\n\n return plain\n }\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { Address } from '../../../location/models/address'\nimport { BaseModel, GenericIdentifier } from '../../../generic/model/base.model'\nimport { Coupon } from '../../../shopping/models/coupons/coupon'\nimport { SubscriptionPlan } from '../../../shopping/models/subscription/plan'\nimport { User } from '../user'\n\nimport { Edition } from './edition'\nimport { Status } from './enums/status.enum'\nimport { SubscriptionPayment } from './payment'\n\nexport class Subscription extends BaseModel<Subscription> {\n id: string\n nextPayment: Date\n recurrence: boolean\n status: Status\n cardToken: string\n subtotalPrice?: number\n discount?: number\n totalPrice?: number\n createdAt: Date\n updatedAt: Date\n\n @Type(() => User)\n user: User\n @Type(() => SubscriptionPlan)\n subscriptionPlan: SubscriptionPlan\n @Type(() => Address)\n shippingAddress: Address\n @Type(() => Address)\n billingAddress?: Address\n @Type(() => Coupon)\n coupon?: Coupon\n @Type(() => Edition)\n editions: Edition[]\n @Type(() => SubscriptionPayment)\n payment?: SubscriptionPayment[]\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Address } from '../../location/models/address'\n\nexport type UserAddressIdentifiers = 'id' | 'userId'\n\nexport class UserAddress extends Address<UserAddressIdentifiers> {\n id: string\n userId: string\n\n static override get identifiersFields(): UserAddressIdentifiers[] {\n return ['id', 'userId']\n }\n}\n","import { BaseModel } from '../../generic/model/base.model'\n\nexport type UserPaymentIdentifiers = 'id' | 'userId'\n\nexport class UserPaymentMethod extends BaseModel<UserPaymentMethod, UserPaymentIdentifiers> {\n brand: string\n cpf: string\n holderName: string\n last4: string\n pagarmeToken: string\n validUntil: string\n userId: string\n id: string\n fingerprint: string\n\n static get identifiersFields(): UserPaymentIdentifiers[] {\n return ['id', 'userId']\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\n\nexport class Lead extends BaseModel<Lead> {\n id: string\n acceptsNewsletter: boolean\n email: string\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class UnauthorizedError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import { isNil } from '../../../utils'\nimport { UnauthorizedError } from '../errors/unauthorized.error'\nimport { Area, OfficePosition, User, UserType } from '../models'\nimport { UserRepository } from '../repositories/user.repository'\nimport { AuthenticationService } from '../services/authentication.service'\n\nexport enum SignInMethods {\n EMAIL_PASSWORD = 'email_password',\n GOOGLE = 'google',\n}\n\ntype SignInMethod = Lowercase<keyof typeof SignInMethods>\n\ntype SignInParams = {\n email?: string\n password?: string\n}\n\nexport class Authentication {\n constructor(private readonly authService: AuthenticationService, private readonly userRepository: UserRepository) {}\n\n async signIn({ email, password }: SignInParams, signInMethod: SignInMethod): Promise<User> {\n const method = this.getServiceByMethod(signInMethod)\n const userAuth = await this.authService[method]({ email, password } as any)\n const user = this.userRepository.get(userAuth)\n\n if (!isNil(user)) return user\n if (/^.+@b4a.com.br$/.test(userAuth.email)) return this.createsUserByCredential(userAuth)\n\n throw new UnauthorizedError('Invalid credentials')\n }\n\n private getServiceByMethod(\n signInMethod: SignInMethod,\n ): keyof Pick<AuthenticationService, 'signInWithEmailAndPassword' | 'signInWithGoogle'> {\n return signInMethod === SignInMethods.EMAIL_PASSWORD ? 'signInWithEmailAndPassword' : 'signInWithGoogle'\n }\n\n private async createsUserByCredential(user: Partial<User>): Promise<User> {\n const [firstName, lastName] = user.displayName?.split(/\\s/)\n const person = User.toInstance({\n ...user,\n cpf: '',\n birthday: new Date(),\n firstName,\n lastName,\n acceptsNewsletter: false,\n area: Area.Transactional,\n officePosition: OfficePosition.Intern,\n type: UserType.Collaborator,\n })\n\n return this.userRepository.create(person)\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class UserAlreadyRegisteredError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class WeakPasswordError extends CustomError {\n constructor(message = 'Weak password') {\n super(message)\n }\n}\n","import { User, UserType } from '../models'\nimport { RegisterService } from '../services/register.service'\nimport { UserAlreadyRegisteredError } from '../errors'\nimport { UserRepository } from '../repositories/user.repository'\n\ntype RegisterParams = Partial<User> & { password: string }\n\nexport class Register {\n constructor(private readonly registerService: RegisterService, private readonly userRepository: UserRepository) {}\n\n async register(params: RegisterParams): Promise<User> {\n const email = params.email.toLocaleLowerCase()\n const displayName = `${params.firstName} ${params.lastName}`\n\n if (await this.userRepository.checkIfExistsByField('cpf', params.cpf))\n throw new UserAlreadyRegisteredError(`Usuário com CPF ${params.cpf} já registrado.`)\n if (await this.userRepository.checkIfExistsByField('email', params.email))\n throw new UserAlreadyRegisteredError(`Usuário com e-mail ${params.email} já registrado.`)\n\n const auth = await this.registerService.register({\n birthday: params.birthday,\n email,\n firstName: params.firstName,\n lastName: params.lastName,\n cpf: params.cpf,\n displayName,\n phone: params.phone,\n password: params.password,\n })\n\n delete params.password\n\n const user = await this.userRepository.create({\n ...params,\n id: auth.id,\n email,\n displayName,\n type: UserType.B2C,\n dateCreated: new Date(),\n dateModified: new Date(),\n })\n\n return user\n }\n}\n","import { AuthenticationService } from '../services/authentication.service'\n\nexport class SignOut {\n constructor(private readonly authService: AuthenticationService) {}\n\n async signOut(): Promise<void> {\n await this.authService.signOut()\n }\n}\n","import { AuthenticationService } from '../services/authentication.service'\n\nexport class RecoveryPassword {\n constructor(private readonly authService: AuthenticationService) {}\n\n async sendEmail(email: string): Promise<void> {\n await this.authService.sendPasswordResetEmail(email)\n }\n}\n","import { BaseModel, GenericIdentifier, NonFunctionPropertyNames } from '../../generic/model'\nimport { Shops } from './enums'\n\nimport { CategoryCondition, CategoryFilter, CategoryMetadata } from './types'\n\nexport class Category extends BaseModel<Category> {\n id: string\n brandCategory: boolean\n brandLogo?: string\n name: string\n slug: string\n image?: string\n brandCategoryBanner?: string\n brandCategoryBannerMobile?: string\n description: string\n conditions?: CategoryCondition\n products?: string[]\n filters?: CategoryFilter[]\n createdAt?: Date\n updatedAt?: Date\n shop: Shops\n published: boolean\n metadata: CategoryMetadata\n\n identifierFields(): NonFunctionPropertyNames<Category>[] {\n return ['id']\n }\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","export enum GenderDestination {\n FEMALE = 'female',\n MALE = 'male',\n UNISEX = 'unisex',\n}\n","export enum Shops {\n MENSMARKET = `mensmarket`,\n GLAMSHOP = 'Glamshop',\n GLAMPOINTS = 'Glampoints',\n ALL = 'ALL'\n}\n","import { Type } from 'class-transformer'\nimport { BaseModel, GenericIdentifier, NonFunctionPropertyNames } from '../../generic/model'\n\nimport { KitProduct } from './kit-product'\nimport { ProductGender, ProductMetadata, ProductReview, ShopDescription, ShopPrice, Stock } from './types'\nimport { Variant } from './variant'\n\nexport class Product extends BaseModel<Product> {\n id: string\n name: string\n slug: string\n description: ShopDescription\n sku: string\n price: ShopPrice\n hasVariants: boolean\n NCM: string\n EAN: string\n CEST: string\n weight: number\n stock: Stock\n costPrice: number\n images?: string[]\n miniatures?: string[]\n published: boolean\n createdAt?: Date\n updatedAt?: Date\n brand: string\n tags?: string[]\n type?: string\n categories?: string[]\n reviews?: ProductReview[]\n variant?: Variant\n video?: string\n isKit?: boolean\n rate?: number\n gender?: ProductGender\n shoppingCount?: number\n metadata: ProductMetadata\n\n @Type(() => KitProduct)\n kitProducts?: KitProduct[]\n\n identifierFields(): NonFunctionPropertyNames<Product>[] {\n return ['id']\n }\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { BaseModel } from '../../generic/model'\n\nimport { Product } from './product'\n\ntype KitProductIdentifiers = 'productId' | 'kitProducId'\n\nexport class KitProduct extends BaseModel<KitProduct, KitProductIdentifiers> {\n productId: string\n kitProductId: string\n quantity: number\n\n @Type(() => Product)\n kit: Product\n\n @Type(() => Product)\n product: Product\n\n static get identifiersFields(): KitProductIdentifiers[] {\n return ['productId', 'kitProducId']\n }\n}\n","import { BaseModel, NonFunctionPropertyNames } from '../../generic/model'\n\nimport { ShopPrice, Stock, VariantGrade } from './types'\n\nexport type ProductVariantIdentifiers = 'id' | 'productId'\n\nexport class Variant extends BaseModel<Variant, ProductVariantIdentifiers> {\n id: string\n productId: string\n sku: string\n price: ShopPrice\n EAN: string\n stock: Stock\n grade?: VariantGrade[]\n costPrice: number\n weight: number\n createdAt?: Date\n updatedAt?: Date\n\n identifierFields(): NonFunctionPropertyNames<Variant>[] {\n return ['id']\n }\n\n static get identifiersFields(): ProductVariantIdentifiers[] {\n return ['id', 'productId']\n }\n}\n","export enum OrderStatus {\n AGUARDANDO_PAGAMENTO = 'Aguardando pagamento',\n EM_PREPARO = 'Preparando pedido',\n NF_EMITIDA = 'Nota Fiscal Emitida',\n AGUARDANDO_ENVIO = 'Aguardando Transaportadora',\n ENVIADO = 'Enviado',\n ENTREGUE = 'Entregue',\n CANCELADO = 'Cancelado',\n CREDIT_CARD = 'credit_card',\n}\n","import { Product } from '../../catalog/models/product'\n\nexport class LineItem extends Product {\n parentId?: string\n quantity: number\n isGift?: boolean\n pricePaid?: number\n image?: string\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\n\nexport class ShippingMethod extends BaseModel<ShippingMethod> {\n id: string\n CNPJ: string\n DaysToDelivery: number\n MaxGrams: number\n MinGrams: number\n ServiceCompanyRangeId: number\n ShippingCompanyId: number\n ShippingCompanyName: string\n ShippingPrice: number\n State: string\n ZipEnd: number\n ZipStart: number\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { Address } from '../../location/models/address'\nimport { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\nimport { User } from '../../users/models/user'\n\nimport { Coupon } from './coupons/coupon'\nimport { LineItem } from './line-item'\nimport { ShippingMethod } from './shipping-method'\nimport { Shops } from '../../catalog/models/enums/shops.enum'\n\nexport class Checkout extends BaseModel<Checkout> {\n id?: string\n paymentId?: string\n status?: string\n createdAt?: Date\n updatedAt?: Date\n completedAt?: Date\n discount?: number\n subTotalPrice?: number\n totalPrice?: number\n shop: Shops\n glampoints?: number\n\n @Type(() => LineItem)\n lineItems?: LineItem[]\n @Type(() => User)\n user?: User\n @Type(() => Address)\n shippingAddress?: Address\n @Type(() => Address)\n billingAddress?: Address\n @Type(() => ShippingMethod)\n shipping?: ShippingMethod\n @Type(() => Coupon)\n coupon?: Coupon\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { Checkout } from './checkout'\nimport { OrderStatus } from './enums/order-status.enum'\nimport { Payment } from './payment'\n\nexport class Order extends Checkout {\n override status: OrderStatus\n trackingCode?: string\n trackingUrl?: string\n\n @Type(() => Payment)\n payment: Payment\n}\n","import { Type } from 'class-transformer'\n\nimport { Address } from '../../../location/models/address'\nimport { BaseModel, GenericIdentifier } from '../../../generic/model/base.model'\nimport { Coupon } from '../coupons/coupon'\nimport { User } from '../../../users/models/user'\n\nimport { SubscriptionPlan } from './plan'\n\nexport class CheckoutSubscription extends BaseModel<CheckoutSubscription> {\n id?: string\n user: User\n createdAt: Date\n updatedAt: Date\n completedAt?: Date\n userId?: string\n discount?: number\n subTotalPrice?: number\n totalPrice?: number\n\n @Type(() => Address)\n shippingAddress: Address\n @Type(() => Address)\n billingAddress?: Address\n @Type(() => SubscriptionPlan)\n subscriptionPlan: SubscriptionPlan\n @Type(() => Coupon)\n coupon?: Coupon\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\nimport { Shops, Category } from '../../catalog/models'\n\nexport class Buy2Win extends BaseModel<Buy2Win> {\n active: boolean\n cartValue: number\n createdAt: Date\n endDate: Date\n id?: string\n name: string\n products?: string[]\n shop: Shops\n startDate: Date\n updatedAt?: Date\n\n @Type(() => Category)\n categories: Category[]\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","export enum FilterType {\n ACCESSORY_IMPORTANCE = 'accessoryImportance',\n BEARD_PROBLEMS = 'beardProblems',\n BEARD_SIZE = 'beardSize',\n BEAUTY_PRODUCT_IMPORTANCE = 'beautyProductImportance',\n BODY_PROBLEMS = 'bodyProblems',\n BODY_SHAPE = 'bodyShape',\n BODY_TATTOOS = 'bodyTattoos',\n FACE_SKIN_OILINESS = 'faceSkinOiliness',\n FACE_SKIN_PROBLEMS = 'faceSkinProblems',\n FACE_SKIN_TONE = 'faceSkinTone',\n FAMILY_INCOME = 'familyIncome',\n FRAGRANCE_IMPORTANCE = 'fragranceImportance',\n HAIR_COLOR = 'hairColor',\n HAIR_PROBLEMS = 'hairProblems',\n HAIR_STRANDS = 'hairStrands',\n HAIR_TYPE = 'hairType',\n PRODUCT_SPENT = 'productSpent',\n}\n","export enum QuestionsFilters {\n ACCESSORY_IMPORTANCE = 'Você gosta de usar acessórios masculinos?',\n BEARD_PROBLEMS = 'Quais problemas de barba você tem?',\n BEARD_SIZE = 'Quais caracteristicas se aplicam à sua BARBA/BIGODE?',\n BEAUTY_PRODUCT_IMPORTANCE = 'O que descreve melhor a sua relação com produtos de beleza e cuidados pessoais?',\n BODY_PROBLEMS = 'Qual ou quais preocupações você tem com a pele do seu corpo?',\n BODY_SHAPE = 'Qual e seu tipo de CORPO?',\n BODY_TATTOOS = 'Você tem alguma tatuagem?',\n FACE_SKIN_OILINESS = 'Quais caracteristicas se aplicam à pele do seu ROSTO?',\n FACE_SKIN_PROBLEMS = 'Quais problemas a pele do seu rosto tem?',\n FACE_SKIN_TONE = 'Qual seu tom de pele?',\n FAMILY_INCOME = 'Qual a sua renda familiar mensal (considerando a renda de todas as pessoas que moram com você)?',\n FRAGRANCE_IMPORTANCE = 'O quanto você gosta de experimentar perfumes?',\n HAIR_COLOR = 'Seu cabelo é naturalmente de qual COR?',\n HAIR_PROBLEMS = 'Qual ou quais problemas/característica de cabelo te preocupam?',\n HAIR_STRANDS = 'Como são seus fios?',\n HAIR_TYPE = 'Como é o seu cabelo?',\n PRODUCT_SPENT = 'Qual é o seu nivel de gasto mensal em produtos de beleza e cuidados pessoais?',\n}\n","import * as Answers from '../../users/models/enums'\nimport { FilterType, QuestionsFilters } from '../enums'\n\ntype FilterAnswers = {\n [key: string]: string\n}\n\nexport class BeautyQuestionsHelper {\n static getAnswers(filter: FilterType): FilterAnswers {\n switch (filter) {\n case FilterType.ACCESSORY_IMPORTANCE:\n return Answers.AccessoryImportances\n case FilterType.BEARD_PROBLEMS:\n return Answers.BeardProblems\n case FilterType.BEARD_SIZE:\n return Answers.BeardSizes\n case FilterType.BEAUTY_PRODUCT_IMPORTANCE:\n return Answers.BeautyProductImportances\n case FilterType.BODY_PROBLEMS:\n return Answers.BodyProblems\n case FilterType.BODY_SHAPE:\n return Answers.BodyShapes\n case FilterType.BODY_TATTOOS:\n return Answers.BodyTattoos\n case FilterType.FACE_SKIN_OILINESS:\n return Answers.FaceSkinOilinesses\n case FilterType.FACE_SKIN_PROBLEMS:\n return Answers.FaceSkinProblems\n case FilterType.FACE_SKIN_TONE:\n return Answers.FaceSkinTones\n case FilterType.FAMILY_INCOME:\n return Answers.FamilyIncomes\n case FilterType.FRAGRANCE_IMPORTANCE:\n return Answers.FragranceImportances\n case FilterType.HAIR_COLOR:\n return Answers.HairColors\n case FilterType.HAIR_PROBLEMS:\n return Answers.HairProblems\n case FilterType.HAIR_STRANDS:\n return Answers.HairStrands\n case FilterType.HAIR_TYPE:\n return Answers.HairTypes\n case FilterType.PRODUCT_SPENT:\n return Answers.ProductSpents\n }\n }\n\n static getQuestions(filter: FilterType): string {\n const filterKey = Object.keys(FilterType)[Object.values(FilterType).indexOf(filter)] as keyof typeof FilterType\n\n return QuestionsFilters[filterKey]\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model'\nimport { Banner, Benefit, HomeDataStructure } from './types'\n\nexport class Home extends BaseModel<Home> {\n benefitsSection: Benefit[]\n blockBanners: Banner[]\n blogBanner: Banner\n brandsCarousel: Banner[]\n buyToWinBanner: Banner\n discoverCategories: string[]\n featuredCampaignBanner: Banner\n featuredCategories: string[]\n heroCarousel: Banner[]\n verticalCarousels: string[]\n id: string\n data: HomeDataStructure\n minValueForFreeShipping: number\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model'\nimport { MenuNav } from './types/menu-nav.type'\n\nexport class ShopMenu extends BaseModel<ShopMenu> {\n menuNav: MenuNav[]\n id: string\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class InvalidArgumentError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class RequiredArgumentError extends CustomError {\n arguments: string[]\n\n constructor(readonly args: string[]) {\n super(`Required arguments: ${args.join(', ')}`)\n\n this.arguments = args\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class NotFoundError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class DuplicatedResultsError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import axios from 'axios'\n\nimport { BaseModel } from '../../../domain'\nimport { NotFoundError } from '../../../errors'\nimport { ElasticSearchResult } from '../types/elastic-search-result'\n\nexport type AxiosElasticSearchConfig = {\n url: string\n credential: string\n}\n\nexport class AxiosAdapter<T extends BaseModel<T>> {\n constructor(private readonly config: AxiosElasticSearchConfig) {}\n\n async get(index: string): Promise<Partial<T>> {\n try {\n const { data } = await axios({\n url: `${this.config.url}/${index}`,\n method: 'GET',\n headers: { Authorization: `Basic ${this.config.credential}` },\n })\n\n return data._source\n } catch (error) {\n if (!(error instanceof Error)) throw error\n\n throw new NotFoundError(error.message)\n }\n }\n\n async query(index: string, query: any): Promise<ElasticSearchResult<Partial<T>>> {\n const { data } = await axios({\n url: `${this.config.url}/${index}`,\n method: 'POST',\n headers: { Authorization: `Basic ${this.config.credential}` },\n data: query,\n })\n\n return {\n total: data.hits.total.value,\n hits: data.hits.hits,\n }\n }\n\n async save(index: string, data: Partial<T>): Promise<void> {\n await axios({\n url: `${this.config.url}/${index}`,\n method: 'PUT',\n headers: { Authorization: `Basic ${this.config.credential}` },\n data,\n })\n }\n\n async delete(index: string): Promise<void> {\n await axios({\n url: `${this.config.url}/${index}`,\n method: 'DELETE',\n headers: { Authorization: `Basic ${this.config.credential}` },\n })\n }\n}\n","import { Product, Shops } from '../../../domain'\nimport { ProductHasuraGraphQL } from '../../hasura-graphql'\nimport { AxiosAdapter } from '../adapters'\n\nexport class ProductsIndex {\n constructor(private readonly adapter: AxiosAdapter<Product>) {}\n\n async get(id: string): Promise<Product> {\n const data = await this.adapter.get(`products/_doc/${id}`)\n\n return Product.toInstance(data)\n }\n\n async findById(ids: string[], options?: { hasStock: boolean; size: number; shop: Shops }): Promise<Product[]> {\n const fields = [\n 'brand',\n 'id',\n 'images',\n 'miniatures',\n 'name',\n 'price',\n 'sku',\n 'stock',\n 'slug',\n 'reviews',\n 'pricePaid',\n 'isGift',\n 'stock',\n 'weight',\n 'tags',\n 'hasVariants',\n 'type',\n ]\n const { hits } = await this.adapter.query('products/_search', {\n _source: fields,\n query: {\n bool: {\n filter: [\n {\n terms: {\n _id: ids,\n },\n },\n {\n term: {\n published: true,\n },\n },\n ...(options?.hasStock\n ? [\n {\n range: {\n 'stock.quantity': {\n gt: 0,\n },\n },\n },\n ]\n : []),\n ],\n },\n },\n ...(options?.size ? { size: options?.size } : {}),\n })\n\n return hits.map((hit) => Product.toInstance(hit._source))\n }\n\n async save(product: ProductHasuraGraphQL): Promise<void> {\n delete product.createdAt\n delete product.updatedAt\n delete product.kitProducts\n\n try {\n if (!product.firestoreId) throw new Error('Is not a product from firestore')\n\n await this.get(product.firestoreId)\n\n await this.adapter.save(`products/_doc/${product.firestoreId}`, product.toPlain())\n } catch (error) {\n if (!(error instanceof Error)) throw error\n\n console.error(error.message)\n\n await this.adapter.save(`products/_doc/${product.id}`, product.toPlain())\n }\n }\n\n async delete(product: ProductHasuraGraphQL): Promise<void> {\n if (!product.firestoreId) return\n\n try {\n await this.get(product.firestoreId)\n\n await this.adapter.delete(`products/_doc/${product.firestoreId}`)\n } catch (error) {\n await this.adapter.delete(`products/_doc/${product.id}`)\n }\n }\n}\n","import { collection, CollectionReference, DocumentData, Firestore, QueryDocumentSnapshot } from 'firebase/firestore'\n\nimport {\n BaseModelBuilder,\n ModelBaseStructure,\n NonFunctionAndIdentifierPropertiesWithNoPartial,\n NonFunctionAndIdentifierPropertyNames,\n} from '../../../../domain'\nimport { MixinCtor } from '../../../../utils'\nimport { FirestoreFieldType } from '../enums'\nimport { FirestoreRepository } from '../types'\n\nexport const withFirestore = <TBase extends ModelBaseStructure, T extends MixinCtor = MixinCtor>(\n MixinBase: T,\n): MixinCtor<FirestoreRepository<TBase>, unknown[]> => {\n const isObjectsAndNoDate = (data: any): boolean =>\n data &&\n !Array.isArray(data) &&\n typeof data === 'object' &&\n data?.constructor.name !== 'Timestamp' &&\n !('seconds' in data)\n const bindDate = (data: Record<string, any>, keyName: string): Record<string, any> => {\n if (data?.constructor.name === 'Timestamp') return data.toDate()\n if (data && typeof data === 'object' && 'seconds' in data) return new Date(data.seconds * 1000)\n if (typeof data === 'number' && ['createdAt', 'updatedAt'].includes(keyName)) return new Date(data)\n\n return data\n }\n const bindAllDateFromObject = (data: Record<string, any>): NonFunctionAndIdentifierPropertiesWithNoPartial<TBase> => {\n return Object.keys(data).reduce(\n (object, key) => ({\n ...object,\n [key]: isObjectsAndNoDate(data[key])\n ? bindAllDateFromObject(data[key])\n : Array.isArray(data[key])\n ? data[key].map((element: any) => (isObjectsAndNoDate(element) ? bindAllDateFromObject(element) : element))\n : bindDate(data[key], key),\n }),\n {} as NonFunctionAndIdentifierPropertiesWithNoPartial<TBase>,\n )\n }\n\n return class extends MixinBase implements FirestoreRepository<TBase> {\n readonly firestore?: Firestore\n collectionName: string = ''\n model: BaseModelBuilder<TBase>\n fields: Record<NonFunctionAndIdentifierPropertyNames<TBase>, FirestoreFieldType>\n\n collection(path?: string): CollectionReference<TBase> {\n return collection(this.firestore, path || this.collectionName).withConverter(this.buildModelInstance())\n }\n\n buildModelInstance(): {\n toFirestore: (data: TBase) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<TBase>) => TBase\n } {\n return {\n toFirestore: (data: TBase): DocumentData => (data?.toPlain ? data.toPlain() : data),\n fromFirestore: (snap: QueryDocumentSnapshot<TBase>): TBase => {\n const data = snap.data()\n let bindedData: NonFunctionAndIdentifierPropertiesWithNoPartial<TBase> = null\n\n try {\n const ids = { id: snap.id }\n\n bindedData = bindAllDateFromObject(data)\n\n return this.model.toInstance({ ...bindedData, ...ids })\n } catch (error) {\n console.info('id', snap.id)\n console.info('data', JSON.stringify(bindedData))\n console.error(error)\n\n throw error\n }\n },\n }\n }\n }\n}\n","import { QueryDocumentSnapshot, QuerySnapshot } from 'firebase/firestore'\n\nimport { ModelBaseStructure } from '../../../../domain'\nimport { isNil, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository, FirestoreSubRepository } from '../types'\n\nexport const withHelpers = <TMixinBase extends MixinCtor = MixinCtor>(MixinBase: MixinCtor & TMixinBase) => {\n return class extends MixinBase implements FirestoreHelpers {\n toArray<T extends ModelBaseStructure>(snapShot: QuerySnapshot<T> | QueryDocumentSnapshot<T>[]): T[] {\n if (Array.isArray(snapShot)) {\n return snapShot.map((doc: QueryDocumentSnapshot<T>) => doc.data())\n } else {\n return snapShot.docs.map((doc: QueryDocumentSnapshot<T>) => doc.data())\n }\n }\n\n isSubCollection<T extends ModelBaseStructure>(\n repository: FirestoreRepository<T>,\n ): repository is FirestoreSubRepository<T> {\n return !isNil(Object.keys(this).find((key) => key === 'parentRepository'))\n }\n }\n}\n","import { doc, getDoc } from 'firebase/firestore'\n\nimport { GetRepository, ModelBaseStructure, NonFunctionProperties } from '../../../../domain'\nimport { NotFoundError } from '../../../../errors'\nimport { isNil, MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport const withGetFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & InstanceType<TMixinBase> & GetRepository<TBase> & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n return class GetFirestore extends MixinBase implements GetRepository<TBase> {\n async get(identifiers: NonFunctionProperties<TBase>): Promise<TBase> {\n const docRef = await getDoc(\n doc(\n await this.collection(this.buildCollectionPathForGet(identifiers)),\n Object.values(identifiers).shift().toString(),\n ),\n )\n const data = docRef.data()\n\n if (isNil(data)) throw new NotFoundError(`Document ${JSON.stringify(identifiers)} not found`)\n\n return data\n }\n\n buildCollectionPathForGet(identifiers: NonFunctionProperties<TBase>): string {\n return this.isSubCollection(this)\n ? `${this.parentRepository.collectionName}/${identifiers[this.parentIdField]}/${this.collectionName}`\n : this.collectionName\n }\n } as any\n}\n","export enum FirestoreFieldType {\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Timestamp = 'timestamp',\n Array = 'array',\n Map = 'map',\n}\n","import {\n CollectionReference,\n doc,\n getDoc,\n getDocs,\n limit,\n orderBy,\n query,\n QueryConstraint,\n startAfter,\n startAt,\n where,\n WhereFilterOp,\n} from 'firebase/firestore'\n\nimport {\n FindRepository,\n ModelBaseStructure,\n NonFunctionAndIdentifierPropertyNames,\n NonFunctionPropertyNames,\n RepositoryFindField,\n RepositoryFindFielters,\n RepositoryFindFieltersOptions,\n RepositoryFindResult,\n RepositoryLimitOptions,\n RepositoryOrderBy,\n Where,\n} from '../../../../domain'\nimport {\n is,\n isDate,\n isNil,\n isNumber,\n isObject,\n isString,\n MergeConstructorParams,\n MixinCtor,\n set,\n} from '../../../../utils'\nimport { FirestoreFieldType } from '../enums'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport const withFindFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & InstanceType<TMixinBase> & FindRepository<TBase> & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n const checkIfIsFilterOption = (filter: any): filter is RepositoryFindFieltersOptions<TBase, any> =>\n !isNil(filter?.operator)\n const getValueFromFilter = (filter: RepositoryFindField<TBase, any>): any => {\n return checkIfIsFilterOption(filter) ? filter.value : filter\n }\n const getFinalValueFrom = (value: any) =>\n isNumber(value) || isString(value) || isDate(value) || Array.isArray(value)\n ? value\n : Object.values(getFinalValueFrom)\n\n return class FindFirestore extends MixinBase implements FindRepository<TBase> {\n async find({\n filters,\n limits,\n orderBy,\n }: {\n filters?: RepositoryFindFielters<TBase>\n limits?: RepositoryLimitOptions<TBase>\n orderBy?: RepositoryOrderBy<TBase>\n } = {}): Promise<RepositoryFindResult<TBase>> {\n const collection: CollectionReference<TBase> = this.collection(this.buildCollectionPathForFind(filters))\n const queries = this.makeFirestoreWhere(filters || {})\n const ordination = this.makeFirestoreOrderBy(filters, orderBy)\n const offsets = await this.defineLimits(filters, limits)\n const queryArgumments: QueryConstraint[] = [...queries, ...ordination, ...offsets]\n const docs = await getDocs(query(collection, ...queryArgumments))\n const data = docs.docs.map((doc) => doc.data())\n\n return {\n data,\n count: this.calculateCount(data, limits),\n }\n }\n\n buildCollectionPathForFind(filters: RepositoryFindFielters<TBase>): string {\n if (!this.isSubCollection<TBase>(this)) return this.collectionName\n\n const parentIdField = this.parentIdField\n const parentId = getValueFromFilter(filters?.[parentIdField])\n\n return `${this.parentRepository.collectionName}/${parentId}/${this.collectionName}`\n }\n\n makeFirestoreWhere = (filter: RepositoryFindFielters<TBase>): QueryConstraint[] =>\n Object.keys(filter).reduce(\n (queries: QueryConstraint[], fieldName: string) => [\n ...queries,\n ...this.buildWhereSentence(fieldName, is(filter[fieldName as NonFunctionPropertyNames<TBase>])),\n ],\n [],\n )\n\n buildWhereSentence = (\n fieldName: NonFunctionPropertyNames<TBase> | string,\n options: RepositoryFindFieltersOptions<TBase, NonFunctionPropertyNames<TBase>>,\n ): QueryConstraint[] => {\n if (this.isSubCollection<TBase>(this) && fieldName === this.parentIdField) []\n\n const value = options?.value || options\n const object = {}\n\n set(object, fieldName, value)\n\n const plainInstance = new this.model(object).toPlain()\n const firestoreFieldName =\n fieldName.toString().indexOf('.') > -1\n ? fieldName.toString()\n : Object.keys(plainInstance).find((key) => plainInstance[key])\n\n if (options?.operator === Where.LIKE) {\n if (\n Array.isArray(options?.value) &&\n (this.fields[firestoreFieldName as NonFunctionAndIdentifierPropertyNames<TBase>] ===\n FirestoreFieldType.Array ||\n !this.fields[firestoreFieldName as NonFunctionAndIdentifierPropertyNames<TBase>])\n )\n return [where(firestoreFieldName, 'array-contains-any', options.value)]\n\n return [where(firestoreFieldName, '>=', options.value), where(firestoreFieldName, '<=', `${options.value}~`)]\n }\n if (\n options?.operator === Where.IN &&\n Array.isArray(options?.value) &&\n (this.fields[firestoreFieldName as NonFunctionAndIdentifierPropertyNames<TBase>] === FirestoreFieldType.Array ||\n !this.fields[firestoreFieldName as NonFunctionAndIdentifierPropertyNames<TBase>])\n )\n return [where(firestoreFieldName, 'array-contains', options.value)]\n if (isObject(options) && isNil(options?.operator) && isNil(options?.value)) {\n return Object.keys(options).reduce(\n (queries, key) => [\n ...queries,\n ...this.buildWhereSentence(`${fieldName.toString()}.${key}`, is<Record<string, any>>(options)[key]),\n ],\n [],\n )\n }\n\n return [where(firestoreFieldName, (options?.operator as WhereFilterOp) || '==', options?.value || options)]\n }\n\n makeFirestoreOrderBy = (\n filters: RepositoryFindFielters<TBase>,\n fieldsToOrderBy?: RepositoryOrderBy<TBase>,\n ): QueryConstraint[] => {\n const orderByKeys = Object.keys(fieldsToOrderBy || {})\n\n if (!orderByKeys.length) return []\n\n const filtersKeysWithUnordered = Object.keys(filters || {}).filter(\n (filterKey) => !orderByKeys.includes(filterKey),\n )\n\n if (filtersKeysWithUnordered.length)\n filtersKeysWithUnordered.forEach(\n (filterKey) =>\n (fieldsToOrderBy = {\n ...(![Where.EQUALS].includes(\n is<RepositoryFindFieltersOptions<TBase, NonFunctionPropertyNames<TBase>>>(\n filters[filterKey as NonFunctionPropertyNames<TBase>],\n ).operator,\n )\n ? { [filterKey]: 'asc' }\n : {}),\n ...fieldsToOrderBy,\n }),\n )\n\n return Object.keys(fieldsToOrderBy).map((fieldName) =>\n orderBy(fieldName, fieldsToOrderBy[fieldName as NonFunctionPropertyNames<TBase>]),\n )\n }\n\n async defineLimits(\n filters: RepositoryFindFielters<TBase>,\n limits: RepositoryLimitOptions<TBase>,\n ): Promise<QueryConstraint[]> {\n const queries = []\n\n if (limits?.offset) {\n if (this.model.isModel(limits.offset))\n queries.push(\n startAfter(\n await getDoc(\n doc(this.collection(this.buildCollectionPathForFind(filters)), limits.offset.identifier.shift()),\n ),\n ),\n )\n else if (isNumber(limits.offset) || isString(limits.offset)) queries.push(startAt(limits.offset))\n }\n if (limits?.limit) queries.push(limit(limits.limit))\n\n return queries\n }\n\n calculateCount(data: TBase[], limits: RepositoryLimitOptions<TBase>): number {\n if (data.length <= 0) return 0\n if (data.length < limits?.limit) return data.length\n\n return Infinity\n }\n } as any\n}\n","import { addDoc, doc, DocumentReference, getDoc, setDoc } from 'firebase/firestore'\n\nimport { CreateRepository, CreateRepositoryParams, ModelBaseStructure } from '../../../../domain'\nimport { isEmpty, MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport const withCreateFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & InstanceType<TMixinBase> & CreateRepository<TBase> & FirestoreHelpers,\n MergeConstructorParams<[], ConstructorParameters<TMixinBase>>\n> => {\n return class CreateFirestore extends MixinBase implements CreateRepository<TBase> {\n async create(data: CreateRepositoryParams<TBase>): Promise<TBase> {\n const docRef = await this.save(this.model.toInstance(data as any))\n const doc = await getDoc(docRef)\n\n return doc.data()\n }\n\n async save(data: TBase): Promise<DocumentReference<TBase>> {\n const id = data.identifier[data.identifiersFields?.shift()]?.toString()\n const collectionPath = this.buildCollectionPathForAdd(data)\n const collection = this.collection(collectionPath)\n\n if (isEmpty(id)) return addDoc(collection, data)\n\n const docRef = doc(collection, id)\n await setDoc(docRef, data)\n\n return docRef\n }\n\n buildCollectionPathForAdd(identifiers: Partial<TBase>): string {\n return this.isSubCollection(this)\n ? `${this.parentRepository.collectionName}/${identifiers[this.parentIdField]}/${this.collectionName}`\n : this.collectionName\n }\n } as any\n}\n","import { arrayRemove, arrayUnion, deleteField, doc, FieldValue, getDoc, setDoc } from 'firebase/firestore'\n\nimport {\n ModelBaseStructure,\n NonFunctionPropertyNames,\n RepositoryUpdateParams,\n UpdateOptionActions,\n UpdateOptions,\n UpdateRepository,\n} from '../../../../domain'\nimport { is, isNil, MergeConstructorParams, MixinCtor, PropType } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport type UpdateFirestoreRepositoryType<MBase extends ModelBaseStructure> = UpdateRepository<MBase> & {\n paramsToPlain(params: RepositoryUpdateParams<MBase>): Partial<MBase>\n}\n\nexport const withUpdateFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & UpdateRepository<TBase> & InstanceType<TMixinBase> & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n const getValueFromParams = (\n params: RepositoryUpdateParams<TBase>,\n field: NonFunctionPropertyNames<TBase>,\n ): PropType<TBase, NonFunctionPropertyNames<TBase>> =>\n (isNil(is<UpdateOptions<PropType<TBase, NonFunctionPropertyNames<TBase>>>>(params[field])?.value)\n ? is<PropType<TBase, NonFunctionPropertyNames<TBase>>>(params[field])\n : is<UpdateOptions<PropType<TBase, NonFunctionPropertyNames<TBase>>>>(params[field]).value) || null\n const getValueByAction = (options: UpdateOptions<TBase>): FieldValue | unknown => {\n if (isNil(options?.action)) return options\n if (options?.action === UpdateOptionActions.REMOVE_FIELD) return deleteField()\n if (options?.action === UpdateOptionActions.NULL) return null\n if (Array.isArray(options?.value)) {\n if (options?.action === UpdateOptionActions.MERGE) return arrayUnion(...options.value)\n if (options?.action === UpdateOptionActions.REMOVE) return arrayRemove(...options.value)\n }\n\n return options?.value\n }\n\n return class UpdateFirestore extends MixinBase implements UpdateRepository<TBase> {\n async update(data: RepositoryUpdateParams<TBase>): Promise<TBase> {\n const model = new this.model()\n const keyField = model.identifiersFields.shift()\n const docRef = doc(\n this.collection(this.buildCollectionPathForUpdate(data)),\n getValueFromParams(data, keyField).toString(),\n )\n\n await setDoc(docRef, this.paramsToPlain(data), { merge: true })\n\n const docData = await getDoc(docRef)\n\n return docData.data()\n }\n\n buildCollectionPathForUpdate(identifiers: RepositoryUpdateParams<TBase>): string {\n return this.isSubCollection(this)\n ? `${this.parentRepository.collectionName}/${getValueFromParams(identifiers, this.parentIdField)}/${\n this.collectionName\n }`\n : this.collectionName\n }\n\n paramsToPlain(params: RepositoryUpdateParams<TBase>): Partial<TBase> {\n const model = this.model\n\n if (model.isModel(params)) return params.toPlain()\n\n return Object.keys(params).reduce(\n (data, currentKey) => ({\n ...data,\n ...((value): Record<string, any> => (value === undefined ? {} : { [currentKey]: value }))(\n getValueByAction(params[currentKey as never]),\n ),\n }),\n {},\n )\n }\n } as any\n}\n","import { deleteDoc, doc } from 'firebase/firestore'\n\nimport { DeleteRepository, DeleteRepositoryParams, IdentifiersModel, ModelBaseStructure } from '../../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport const withDeleteFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & InstanceType<TMixinBase> & DeleteRepository<TBase> & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n return class DeleteFirestore extends MixinBase implements DeleteRepository<TBase> {\n async delete(identifiers: DeleteRepositoryParams<TBase>): Promise<void> {\n await deleteDoc(\n doc(\n this.collection(this.buildCollectionPathForRemove(identifiers)),\n Object.values(identifiers).shift().toString(),\n ),\n )\n }\n\n buildCollectionPathForRemove(identifiers: IdentifiersModel<TBase>): string {\n return this.isSubCollection(this)\n ? `${this.parentRepository.collectionName}/${identifiers[this.parentIdField]}/${this.collectionName}`\n : this.collectionName\n }\n } as any\n}\n","import { CollectionReference } from 'firebase/firestore'\n\nimport { IdentifiersModel, ModelBaseStructure } from '../../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository, FirestoreSubRepository } from '../types'\n\nexport const withSubCollection = <\n TBase extends ModelBaseStructure,\n TBaseParent extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase>> & TMixinBase,\n ParentModel: new () => TBaseParent,\n): MixinCtor<\n FirestoreRepository<TBase> &\n InstanceType<TMixinBase> &\n FirestoreSubRepository<TBase, InstanceType<typeof ParentModel>> &\n FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>[]\n> => {\n return class SubCollectionMix\n extends MixinBase\n implements FirestoreSubRepository<TBase, InstanceType<typeof ParentModel>>\n {\n readonly parentRepository: FirestoreRepository<InstanceType<typeof ParentModel>>\n parentIdField: keyof IdentifiersModel<TBase>\n\n constructor(...args: Array<any>) {\n super(args)\n }\n\n override collection(path?: string): CollectionReference<TBase> {\n return super.collection(path)\n }\n } as any\n}\n","import { CrudRepository, ModelBaseStructure } from '../../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nimport { withCreateFirestore } from './with-create-firestore.mixin'\nimport { withDeleteFirestore } from './with-delete-firestore.mixin'\nimport { withFindFirestore } from './with-find-firestore.mixin'\nimport { withGetFirestore } from './with-get-firestore.mixin'\nimport { withUpdateFirestore } from './with-update-firestore.mixin'\n\nexport const withCrudFirestore = <\n TBase extends ModelBaseStructure,\n Repository = CrudRepository<TBase>,\n TMixinBase extends MixinCtor = MixinCtor,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & Repository & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n return class CrudFirestore\n extends withUpdateFirestore(\n withGetFirestore(\n withFindFirestore(\n withDeleteFirestore(\n withCreateFirestore(MixinBase as MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers>),\n ),\n ),\n ),\n )\n implements CrudRepository<TBase> {} as any\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Lead, LeadRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class LeadFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Lead>(Base)))\n implements LeadRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'leads'\n this.model = Lead\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Edition, EditionRepository, Subscription } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { SubscriptionFirestoreRepository } from './subscription-firestore.repository'\n\nexport class SubscriptionEditionFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<Edition>(Base))), Subscription)\n implements EditionRepository\n{\n constructor(\n override readonly firestore: Firestore,\n override readonly parentRepository: SubscriptionFirestoreRepository,\n ) {\n super()\n this.collectionName = 'editions'\n this.parentIdField = 'subscriptionId'\n this.model = Edition\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Subscription, SubscriptionRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class SubscriptionFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Subscription>(Base)))\n implements SubscriptionRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'subscription'\n this.model = Subscription\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Subscription, SubscriptionPayment, SubscriptionPaymentRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { SubscriptionFirestoreRepository } from './subscription-firestore.repository'\n\nexport class SubscriptionPaymentFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<SubscriptionPayment>(Base))), Subscription)\n implements SubscriptionPaymentRepository\n{\n constructor(\n override readonly firestore: Firestore,\n override readonly parentRepository: SubscriptionFirestoreRepository,\n ) {\n super()\n this.collectionName = 'payments'\n this.parentIdField = 'subscriptionId'\n this.model = SubscriptionPayment\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { User, UserAddress, UserAddressRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { UserFirestoreRepository } from './user-firestore.repository'\n\nexport class UserAddressFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<UserAddress>(Base))), User)\n implements UserAddressRepository\n{\n constructor(override readonly firestore: Firestore, override readonly parentRepository: UserFirestoreRepository) {\n super()\n this.collectionName = 'address'\n this.parentIdField = 'userId'\n this.model = UserAddress\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { BeautyProfile, BeautyProfileRepository, User } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { UserFirestoreRepository } from './user-firestore.repository'\n\nexport class UserBeautyProfileFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<BeautyProfile>(Base))), User)\n implements BeautyProfileRepository\n{\n constructor(override readonly firestore: Firestore, override readonly parentRepository: UserFirestoreRepository) {\n super()\n this.collectionName = 'CX'\n this.parentIdField = 'userId'\n this.model = BeautyProfile\n }\n}\n","import { doc, DocumentData, Firestore, getDoc, getDocs, query, QueryDocumentSnapshot, where } from 'firebase/firestore'\n\nimport { BeautyProfile, User, UserRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class UserFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<User>(Base)))\n implements UserRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'users'\n this.model = User\n }\n\n override async get(identifiers: Partial<User>): Promise<User> {\n const user = await super.get({ id: identifiers.id })\n\n user.beautyProfile = await this.getBeautyProfile(user.id)\n user.isSubscriber = await this.checkIfIsSubscriber(user.id)\n\n return user\n }\n\n async checkIfExistsByField(field: string, value: string): Promise<boolean> {\n const result = await this.find({ filters: { [field]: value } })\n\n return result.count > 0\n }\n\n override buildModelInstance(): {\n toFirestore: (data: User) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<User>) => User\n } {\n const { fromFirestore, toFirestore } = super.buildModelInstance()\n\n return {\n toFirestore: (data: User): DocumentData => {\n const plain = toFirestore(data)\n\n delete plain.isSubscriber\n\n return plain\n },\n fromFirestore,\n }\n }\n\n private async getBeautyProfile(userId: string): Promise<BeautyProfile> {\n const beautyProfile = await getDoc(\n doc(\n this.collection(`${this.collectionName}/${userId}/CX`).withConverter(this.buildBeautyProfileModelInstance()),\n 'beautyProfile',\n ),\n )\n\n return beautyProfile.data()\n }\n\n private async checkIfIsSubscriber(userId: string): Promise<boolean> {\n const docs = await getDocs(\n query(this.collection('subscription'), where('user.id', '==', userId), where('status', '==', 'active')),\n )\n\n return !!docs && !!docs.size\n }\n\n private buildBeautyProfileModelInstance(): {\n toFirestore: (data: BeautyProfile) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<BeautyProfile>) => BeautyProfile\n } {\n return {\n toFirestore: (data: BeautyProfile): DocumentData => data.toPlain(),\n fromFirestore: (snap: QueryDocumentSnapshot<BeautyProfile>): BeautyProfile =>\n BeautyProfile.toInstance(snap.data()),\n }\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { User, UserPaymentMethod, UserPaymentMethodRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { UserFirestoreRepository } from './user-firestore.repository'\n\nexport class UserPaymentMethodFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<UserPaymentMethod>(Base))), User)\n implements UserPaymentMethodRepository\n{\n constructor(override readonly firestore: Firestore, override readonly parentRepository: UserFirestoreRepository) {\n super()\n this.collectionName = 'payment_method'\n this.parentIdField = 'userId'\n this.model = UserPaymentMethod\n }\n}\n","import { Firestore, getDocs, limit, query, QueryConstraint, where } from 'firebase/firestore'\n\nimport { Category, CategoryRepository, Product, Shops } from '../../../../../domain'\nimport { Base, chunk, is } from '../../../../../utils'\n\nimport { DuplicatedResultsError, NotFoundError, RequiredArgumentError } from '../../../../../errors'\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class CategoryFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Category>(Base)))\n implements CategoryRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'categories'\n this.model = Category\n }\n\n async getCategoryBySlug(slug: string, shop: Shops): Promise<Category> {\n const categoryDocs = await getDocs(\n query(\n this.collection(this.collectionName),\n where('slug', '==', slug),\n where('shop', '==', shop),\n where('published', '==', true),\n ),\n )\n\n if (categoryDocs.size > 1) throw new DuplicatedResultsError('Query returned duplicated values')\n if (categoryDocs.empty) throw new NotFoundError(`Document with slug ${slug} not found`)\n\n return categoryDocs.docs[0].data()\n }\n\n async getCategoriesForHome(categoryIds: string[], limit = 4): Promise<{ category: Category; products: Product[] }[]> {\n const categorySnap = await getDocs(\n query(\n this.collection(this.collectionName),\n where('id', 'in', categoryIds.filter(Boolean)),\n where('published', '==', true),\n ),\n )\n\n if (categorySnap.empty) throw new NotFoundError('Categories not found')\n\n const categories = categorySnap.docs.map((doc) => doc.data())\n const homeSections = await Promise.all(\n categories.map(async (category) => ({\n category,\n products: await this.mountCategory(category, { limit, hasStock: true }),\n })),\n )\n\n return homeSections\n }\n\n async mountCategory(category: Category, options?: { limit?: number; hasStock?: boolean }): Promise<Product[]> {\n if (!category.products) throw new RequiredArgumentError(['Category products is empty'])\n\n const chunks = chunk(category.products, 10)\n const products = []\n const wheres: QueryConstraint[] = []\n\n for (const productIds of chunks) {\n if (options?.limit && products.length >= options?.limit) break\n\n wheres.push(where('published', '==', true), where('id', 'in', productIds))\n\n if (options?.hasStock) wheres.push(where('stock.quantity', '>', 0))\n if (options?.limit) wheres.push(limit(options?.limit))\n\n const productSnap = await getDocs(query(this.collection('productsErpVitrine'), ...wheres))\n\n if (productSnap.empty) continue\n\n products.push(...productSnap.docs)\n }\n\n return is<Product[]>(products)\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Product, ProductRepository, ReviewStatusParams, ReviewWithProductData, Where } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class ProductFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Product>(Base)))\n implements ProductRepository\n{\n private reviews: Partial<Record<ReviewStatusParams, ReviewWithProductData[]>> = {}\n\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'productsErpVitrine'\n this.model = Product\n }\n\n async getBySlug(slug: string): Promise<Product> {\n const result = await this.find({\n filters: {\n slug: { operator: Where.EQUALS, value: slug },\n },\n })\n\n return result?.data?.shift()\n }\n\n async fetchReviews(status: ReviewStatusParams): Promise<ReviewWithProductData[]> {\n const { data: products } = await this.find()\n\n products.forEach((product) => {\n if ([undefined, 0].includes(product.reviews?.length)) return\n\n const productInfo = {\n productId: product.id,\n productName: product.name,\n productSku: product.sku,\n }\n\n this.reviews.pending = []\n this.reviews.approved = []\n this.reviews.rejected = []\n\n product.reviews.forEach((review) => {\n if ([null, undefined].includes(review.status)) return this.reviews.pending.push({ ...review, ...productInfo })\n if (review.status === false) return this.reviews.rejected.push({ ...review, ...productInfo })\n if (!!review.status) return this.reviews.approved.push({ ...review, ...productInfo })\n\n return review\n })\n })\n\n return this.reviews[status]\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Product, Variant, VariantRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { ProductFirestoreRepository } from './product-firestore.repository'\n\nexport class ProductVariantFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<Variant>(Base))), Product)\n implements VariantRepository\n{\n constructor(override readonly firestore: Firestore, override readonly parentRepository: ProductFirestoreRepository) {\n super()\n this.collectionName = 'variants'\n this.parentIdField = 'productId'\n this.model = Variant\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Product, SubscriptionProductRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class SubscriptionProductFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Product>(Base)))\n implements SubscriptionProductRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'subscriptionProducts'\n this.model = Product\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Checkout, CheckoutRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class CheckoutFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Checkout>(Base)))\n implements CheckoutRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'checkouts'\n this.model = Checkout\n }\n}\n","import { DocumentData, Firestore, QueryDocumentSnapshot } from 'firebase/firestore'\n\nimport { Coupon, CouponRepository } from '../../../../../domain'\nimport { Base, isNil } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class CouponFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Coupon>(Base)))\n implements CouponRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'coupons'\n this.model = Coupon\n }\n\n override buildModelInstance(): {\n toFirestore: (data: Coupon) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<Coupon>) => Coupon\n } {\n const { fromFirestore, toFirestore } = super.buildModelInstance()\n\n return {\n toFirestore: (data: Coupon): DocumentData => {\n const plain = toFirestore(data)\n\n if (!!data.expiresIn) plain.expiresIn = data.expiresIn.getTime()\n\n return plain\n },\n fromFirestore: (snap: QueryDocumentSnapshot<Coupon>): Coupon => {\n const instance = fromFirestore(snap)\n\n if (!isNil(instance.expiresIn)) instance.expiresIn = new Date(snap.data().expiresIn)\n\n return instance\n },\n }\n }\n}\n","import { DocumentData, Firestore, QueryDocumentSnapshot } from 'firebase/firestore'\n\nimport { Order, OrderRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { FirestoreFieldType } from '../../enums'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class OrderFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Order>(Base)))\n implements OrderRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'orders'\n this.model = Order\n this.fields = {\n status: FirestoreFieldType.String,\n }\n }\n\n override buildModelInstance(): {\n toFirestore: (data: Order) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<Order>) => Order\n } {\n const { fromFirestore, toFirestore } = super.buildModelInstance()\n return {\n toFirestore: (data: Order): DocumentData => toFirestore(data?.toPlain ? data.toPlain() : data),\n fromFirestore: (snap: QueryDocumentSnapshot<Order>): Order => {\n const instance = fromFirestore(snap)\n\n return this.orderFromFirestore(instance)\n },\n }\n }\n\n private orderFromFirestore = (order: Order): Order => {\n if (!!order?.lineItems?.length) {\n order.lineItems = order.lineItems.map((lineItem) => {\n const prices = !!lineItem.price as any\n const shopPrice = prices[order.shop]\n\n if (!!shopPrice) lineItem.price = shopPrice\n\n return lineItem\n })\n }\n\n return order\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Payment, PaymentRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class PaymentFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Payment>(Base)))\n implements PaymentRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'payments'\n this.model = Payment\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { CheckoutSubscription, CheckoutSubscriptionRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class CheckoutSubscriptionFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<CheckoutSubscription>(Base)))\n implements CheckoutSubscriptionRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'checkoutsSubscription'\n this.model = CheckoutSubscription\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { SubscriptionPlan, SubscriptionPlanRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class SubscriptionPlanFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<SubscriptionPlan>(Base)))\n implements SubscriptionPlanRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'subscriptionPlans'\n this.model = SubscriptionPlan\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Buy2Win, Buy2WinRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class Buy2WinFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Buy2Win>(Base)))\n implements Buy2WinRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'buy2win'\n this.model = Buy2Win\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { LegacyOrderRepository } from '../../../../../domain'\n\nimport { OrderFirestoreRepository } from './order-firestore.repository'\n\nexport class LegacyOrderFirestoreRepository extends OrderFirestoreRepository implements LegacyOrderRepository {\n constructor(override readonly firestore: Firestore) {\n super(firestore)\n this.collectionName = 'legacyOrders'\n }\n}\n","import { DocumentData, Firestore, QueryDocumentSnapshot, Timestamp } from 'firebase/firestore'\n\nimport { Category, Home, HomeCategoryGroup, HomeRepository, Product } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class HomeFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Home>(Base)))\n implements HomeRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'dms'\n this.model = Home\n }\n\n override buildModelInstance(): {\n toFirestore: (data: Home) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<Home>) => Home\n } {\n const { fromFirestore, toFirestore } = super.buildModelInstance()\n\n return {\n toFirestore: (data: Home): DocumentData => {\n const modifiedData = this.homeToFirestore(data)\n\n return toFirestore(modifiedData)\n },\n fromFirestore: (snap: QueryDocumentSnapshot<Home>): Home => {\n const instance = fromFirestore(snap)\n\n return this.homeFromFirestore(instance)\n },\n }\n }\n\n private homeToFirestore = (home: Home): Home => {\n if (home.data?.data) {\n home.data.data.discoverProducts = home.data.data.discoverProducts.map(this.homeCategoryGroupToPlain)\n home.data.data.featuredProducts = home.data.data.featuredProducts.map(this.homeCategoryGroupToPlain)\n home.data.data.verticalProducts = home.data.data.verticalProducts.map(this.homeCategoryGroupToPlain)\n }\n\n return home\n }\n\n private homeCategoryGroupToPlain = (homeCategoryGroup: HomeCategoryGroup) => ({\n category: homeCategoryGroup.category.toPlain(),\n products: homeCategoryGroup.products.map((product) => product.toPlain()),\n })\n\n private homeFromFirestore = (home: Home): Home => {\n if (home.data?.data) {\n home.data.data.discoverProducts = home.data.data.discoverProducts.map(this.plainToHomeCategoryGroup)\n home.data.data.featuredProducts = home.data.data.featuredProducts.map(this.plainToHomeCategoryGroup)\n home.data.data.verticalProducts = home.data.data.verticalProducts.map(this.plainToHomeCategoryGroup)\n home.data.createdAt =\n home.data.createdAt instanceof Timestamp ? home.data.createdAt.toDate() : home.data.createdAt\n home.data.expiresAt =\n home.data.expiresAt instanceof Timestamp ? home.data.expiresAt.toDate() : home.data.expiresAt\n }\n\n return home\n }\n\n private plainToHomeCategoryGroup = (homeCategoryGroup: HomeCategoryGroup) => ({\n category: Category.toInstance(homeCategoryGroup.category),\n products: homeCategoryGroup.products.map((product) => Product.toInstance(product)),\n })\n}\n","import { Firestore } from 'firebase/firestore'\nimport { ShopMenu, ShopMenuRepository } from '../../../../../domain'\n\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class ShopMenuFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<ShopMenu>(Base)))\n implements ShopMenuRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'shopMenus'\n this.model = ShopMenu\n }\n}\n","import {\n Auth,\n GoogleAuthProvider,\n sendPasswordResetEmail,\n signInAnonymously,\n signInWithEmailAndPassword,\n signInWithPopup,\n} from 'firebase/auth'\n\nimport { AuthenticationService, BasicUserData, LoginAndPasswordParams } from '../../../domain'\n\nimport { FirebaseUserWithId } from './types/firebase-user-with-id.type'\n\nexport class AuthenticationFirebaseAuthService implements AuthenticationService {\n constructor(private readonly firebaseAuth: Auth) {}\n\n async signInWithEmailAndPassword(data: LoginAndPasswordParams): Promise<BasicUserData> {\n const credentials = await signInWithEmailAndPassword(this.firebaseAuth, data.email, data.password)\n const user = credentials.user\n\n return {\n id: user.uid,\n displayName: user.displayName,\n email: user.email,\n phone: user.phoneNumber,\n isAnonymous: false,\n }\n }\n\n async signInWithGoogle(): Promise<BasicUserData> {\n const credentials = await signInWithPopup(this.firebaseAuth, new GoogleAuthProvider())\n const user = credentials.user\n\n return {\n id: user.uid,\n displayName: user.displayName,\n email: user.email,\n phone: user.phoneNumber,\n isAnonymous: false,\n }\n }\n\n async signOut(): Promise<void> {\n this.firebaseAuth.signOut()\n }\n\n async signInAnonymously(): Promise<FirebaseUserWithId> {\n const auth = await signInAnonymously(this.firebaseAuth)\n const user = auth.user as FirebaseUserWithId\n\n user.id = auth.user.uid\n\n return user\n }\n\n async sendPasswordResetEmail(email: string): Promise<void> {\n return sendPasswordResetEmail(this.firebaseAuth, email)\n }\n}\n","import { FirebaseError } from 'firebase/app'\nimport { Auth, createUserWithEmailAndPassword, sendEmailVerification } from 'firebase/auth'\n\nimport { RegisterParams, RegisterService, UserAlreadyRegisteredError, WeakPasswordError } from '../../../domain'\nimport { RequiredArgumentError } from '../../../errors'\nimport { is } from '../../../utils'\n\nimport { FirebaseUserWithId } from './types/firebase-user-with-id.type'\n\nexport class RegisterFirebaseAuthService implements RegisterService {\n constructor(private readonly firebaseAuth: Auth) {}\n\n async register(params: RegisterParams): Promise<FirebaseUserWithId> {\n if (!params.email) throw new RequiredArgumentError(['email'])\n\n try {\n const auth = await createUserWithEmailAndPassword(this.firebaseAuth, params.email, params.password)\n const user = is<FirebaseUserWithId>(auth.user)\n\n if (!user) throw new Error('User not created')\n\n await sendEmailVerification(user)\n user.id = user.uid\n\n return user\n } catch (error) {\n if (!(error instanceof Error)) throw error\n\n const firebaseError = error as FirebaseError\n\n if (firebaseError.code === 'auth/email-already-in-use')\n throw new UserAlreadyRegisteredError('Email already registered')\n if (firebaseError.code === 'auth/weak-password') throw new WeakPasswordError()\n\n throw error\n }\n }\n}\n","import { ModelBaseStructure, NonFunctionAndIdentifierPropertyNames } from '../../../../domain'\nimport { is, isNil, isObject } from '../../../../utils'\nimport { ColumnOptions, HasuraGraphQLFields } from '../../types'\n\ntype FindByAttributeResult<\n MBase extends ModelBaseStructure<MBase>,\n Attribute extends NonFunctionAndIdentifierPropertyNames<MBase>,\n> = ColumnOptions<MBase[Attribute], MBase> & { attributeName: Attribute }\n\nexport class AttributeOptionHelper {\n static FindByAttribute = <\n MBase extends ModelBaseStructure,\n Attribute extends NonFunctionAndIdentifierPropertyNames<MBase> = NonFunctionAndIdentifierPropertyNames<MBase>,\n >(\n attributeName: Attribute,\n fields: HasuraGraphQLFields<MBase>,\n ): FindByAttributeResult<MBase, Attribute> => {\n if (fields.includes(attributeName as any)) return { columnName: attributeName.toString(), attributeName }\n\n const field = fields.find(\n (columnOption) => isObject(columnOption) && Object.keys(columnOption).includes(attributeName.toString()),\n )\n const fieldOption = is<Record<Attribute, ColumnOptions<MBase[Attribute], MBase>>>(field)?.[attributeName]\n\n if (isNil(fieldOption)) return { columnName: attributeName.toString(), attributeName }\n if (Array.isArray(fieldOption)) return { columnName: attributeName.toString(), attributeName, fields: fieldOption }\n\n return { attributeName, columnName: attributeName.toString(), ...fieldOption }\n }\n\n static CheckIsColumnOption = <Model extends ModelBaseStructure, ParentModel extends ModelBaseStructure>(\n fieldValue: ColumnOptions<Model, ParentModel> | any,\n ): fieldValue is ColumnOptions<Model, ParentModel> => !!fieldValue.columnName\n\n static FindColumnOptionFromList = <Model extends ModelBaseStructure, ParentModel extends ModelBaseStructure>(\n columnName: string,\n fields: HasuraGraphQLFields<ParentModel>,\n ): ColumnOptions<Model, ParentModel> & { attributeName: NonFunctionAndIdentifierPropertyNames<ParentModel> } => {\n if (fields.includes(columnName as HasuraGraphQLFields<ParentModel>[number]))\n return { columnName, attributeName: columnName as NonFunctionAndIdentifierPropertyNames<ParentModel> }\n\n const field = is<Record<NonFunctionAndIdentifierPropertyNames<ParentModel>, ColumnOptions<Model, ParentModel>>>(\n fields.find((field) => {\n if (!isObject(field)) return false\n\n const columnOption = Object.values(field).find((option) =>\n AttributeOptionHelper.CheckIsColumnOption(option) && option.columnName === columnName ? option : {},\n )\n\n return AttributeOptionHelper.CheckIsColumnOption(columnOption) && columnOption?.columnName === columnName\n }) || {},\n )\n const attributeName = Object.keys(field).find(\n (fieldOptionFromList) =>\n AttributeOptionHelper.CheckIsColumnOption(\n field[fieldOptionFromList as NonFunctionAndIdentifierPropertyNames<ParentModel>],\n ) || Array.isArray(field[fieldOptionFromList as NonFunctionAndIdentifierPropertyNames<ParentModel>]),\n ) as NonFunctionAndIdentifierPropertyNames<ParentModel>\n const fieldOption = field?.[attributeName]\n\n if (Array.isArray(fieldOption))\n return { attributeName: attributeName as NonFunctionAndIdentifierPropertyNames<ParentModel>, fields: fieldOption }\n\n return {\n attributeName: attributeName || (columnName as NonFunctionAndIdentifierPropertyNames<ParentModel>),\n columnName,\n ...fieldOption,\n }\n }\n}\n","export enum HasuraGraphQLWhere {\n EQUALS = '_eq',\n GT = '_gt',\n GTE = '_gte',\n IN = '_in',\n NOTIN = '_nin',\n LT = '_lt',\n LTE = '_lte',\n LIKE = '_like',\n NOTLIKE = '_nlike',\n ISNULL = '_is_null',\n ISNOTNULL = '_is_null',\n JSON_CONTAINS = '_contains',\n JSON_HAS_KEYS_ANY = '_has_keys_any',\n}\n","export enum HasuraGraphQLColumnType {\n Int = 'Int',\n Float = 'Float',\n Boolean = 'Boolean',\n String = 'String',\n DateTime = 'timestampz',\n Json = 'json',\n Jsonb = 'jsonb',\n Enum = 'enum',\n Uuid = 'uuid',\n}\n","import { ModelBaseStructure, RepositoryFindFieltersOptions, Where } from '../../../../domain'\nimport { isNil } from '../../../../utils'\nimport { ColumnOptions } from '../../types'\n\nexport class FilterOptionHelper {\n static CheckIfIsFilterOption = <Model extends ModelBaseStructure>(\n filter: any,\n ): filter is RepositoryFindFieltersOptions<Model, any> => !isNil(filter?.operator)\n\n static GetValueFromFilter = <Model extends ModelBaseStructure>(\n filter: RepositoryFindFieltersOptions<Model, any>,\n fieldOption: ColumnOptions<any, any>,\n ): any => {\n if (!FilterOptionHelper.CheckIfIsFilterOption(filter)) return filter\n if (filter.operator === Where.ISNULL) return true\n if (filter.operator === Where.ISNOTNULL) return false\n\n const converter = fieldOption.to\n ? fieldOption.to\n : (value: any) =>\n filter.operator === Where.LIKE && !Array.isArray(filter.value) && value.indexOf('%') < 0\n ? `%${value}%`\n : value\n\n return Array.isArray(filter.value) && !fieldOption.fields && [Where.IN, Where.NOTIN].includes(filter.operator)\n ? filter.value.map((fieldValue) => converter(fieldValue))\n : converter(filter.value as any)\n }\n}\n","import {\n ModelBaseStructure,\n NonFunctionAndIdentifierPropertyNames,\n NonFunctionPropertyNames,\n RepositoryFindFielters,\n RepositoryFindFieltersOptions,\n Where,\n} from '../../../../domain'\nimport { is, isNil, isObject } from '../../../../utils'\nimport { HasuraGraphQLColumnType, HasuraGraphQLWhere } from '../../enums'\nimport { ColumnOptions, HasuraGraphQLFields, VariableOptions } from '../../types'\nimport { AttributeOptionHelper } from './attribute-option.helper'\nimport { FilterOptionHelper } from './filter-option.helper'\n\nexport class BindFilterQueryHelper {\n static MakeGraphQLWhere = <MBase extends ModelBaseStructure>(\n filter: RepositoryFindFielters<MBase>,\n fields: HasuraGraphQLFields<MBase>,\n ): VariableOptions =>\n Object.keys(filter).reduce((variables: VariableOptions, fieldName: string) => {\n const columnOption = AttributeOptionHelper.FindByAttribute(\n fieldName as NonFunctionAndIdentifierPropertyNames<MBase>,\n fields,\n )\n\n if (!columnOption.bindFindFilter)\n return {\n ...variables,\n ...{\n [columnOption.columnName]: BindFilterQueryHelper.BuildWhereSentence(\n fieldName as NonFunctionAndIdentifierPropertyNames<MBase>,\n filter[fieldName as NonFunctionPropertyNames<MBase>] as RepositoryFindFieltersOptions<\n MBase,\n NonFunctionPropertyNames<MBase>\n >,\n fields,\n ),\n },\n }\n\n const builtFilter: RepositoryFindFielters<MBase> = columnOption.bindFindFilter(\n filter[fieldName as NonFunctionPropertyNames<MBase>] as RepositoryFindFieltersOptions<\n MBase,\n NonFunctionPropertyNames<MBase>\n >,\n )\n\n return {\n ...variables,\n ...Object.keys(builtFilter).reduce(\n (variablesList: VariableOptions, columnName: string) => ({\n ...variablesList,\n [columnName]: BindFilterQueryHelper.BuildWhereSentence(\n fieldName as NonFunctionAndIdentifierPropertyNames<MBase>,\n builtFilter[columnName as NonFunctionPropertyNames<MBase>] as RepositoryFindFieltersOptions<\n MBase,\n NonFunctionPropertyNames<MBase>\n >,\n fields,\n ),\n }),\n {},\n ),\n }\n }, {})\n\n static BuildWhereSentence = <MBase extends ModelBaseStructure>(\n field: NonFunctionAndIdentifierPropertyNames<MBase>,\n options: RepositoryFindFieltersOptions<MBase, NonFunctionPropertyNames<MBase>>,\n fields: HasuraGraphQLFields<MBase>,\n ): VariableOptions => {\n const fieldSentenceOptions = AttributeOptionHelper.FindByAttribute<MBase>(field, fields)\n\n if (\n !Array.isArray(options) &&\n isObject(options) &&\n isNil(options?.operator) &&\n isNil(options?.value) &&\n isNil(fieldSentenceOptions?.to)\n )\n return Object.keys(options).reduce((variables, key) => {\n const fieldOptions = AttributeOptionHelper.FindByAttribute<MBase>(\n key as NonFunctionAndIdentifierPropertyNames<MBase>,\n fieldSentenceOptions?.fields || (fields as any),\n )\n const columnName = fieldOptions.columnName\n const columnFields = fieldOptions.fields\n\n return {\n ...variables,\n [columnName]: BindFilterQueryHelper.BuildWhereSentence<MBase>(\n key as NonFunctionAndIdentifierPropertyNames<MBase>,\n is<RepositoryFindFieltersOptions<MBase, NonFunctionAndIdentifierPropertyNames<MBase>>>(\n is<RepositoryFindFielters<MBase>>(options)[key as NonFunctionPropertyNames<MBase>],\n ),\n columnFields || ([] as any),\n ),\n }\n }, {})\n\n if (!Array.isArray(options) && !isNil(fieldSentenceOptions.fields))\n return {\n [fieldSentenceOptions.fields[0] as NonFunctionAndIdentifierPropertyNames<MBase>]:\n BindFilterQueryHelper.BuildOperatorSentence(\n options,\n fieldSentenceOptions as ColumnOptions<MBase[NonFunctionAndIdentifierPropertyNames<MBase>], MBase>,\n ),\n }\n\n if (isObject(options) && !FilterOptionHelper.CheckIfIsFilterOption(options))\n options = Object.values(options)[0] as RepositoryFindFieltersOptions<MBase, any>\n\n return Array.isArray(options)\n ? options.reduce(\n (whereSentence, option) => ({\n ...whereSentence,\n ...BindFilterQueryHelper.BuildOperatorSentence(\n option,\n fieldSentenceOptions as ColumnOptions<MBase[NonFunctionAndIdentifierPropertyNames<MBase>], MBase>,\n ),\n }),\n {},\n )\n : BindFilterQueryHelper.BuildOperatorSentence(\n options,\n fieldSentenceOptions as ColumnOptions<MBase[NonFunctionAndIdentifierPropertyNames<MBase>], MBase>,\n )\n }\n\n static BuildOperatorSentence = <MBase extends ModelBaseStructure>(\n options: RepositoryFindFieltersOptions<MBase, any>,\n fieldOption: ColumnOptions<any, any>,\n ): VariableOptions => ({\n [BindFilterQueryHelper.GetHasuraOperator(options, fieldOption)]: FilterOptionHelper.GetValueFromFilter(\n options,\n fieldOption,\n ),\n })\n\n static GetHasuraOperator = <MBase extends ModelBaseStructure>(\n options: RepositoryFindFieltersOptions<MBase, NonFunctionPropertyNames<MBase>>,\n fieldOption: ColumnOptions<any, any>,\n ): HasuraGraphQLWhere =>\n FilterOptionHelper.CheckIfIsFilterOption(options)\n ? fieldOption.type === HasuraGraphQLColumnType.Jsonb\n ? BindFilterQueryHelper.GetHasuraJsonbOperator(options)\n : HasuraGraphQLWhere[\n Object.keys(HasuraGraphQLWhere).find(\n (graphQLOperator) =>\n graphQLOperator ===\n Object.keys(Where).find((operator) => Where[operator as keyof typeof Where] === options?.operator),\n ) as keyof typeof HasuraGraphQLWhere\n ]\n : HasuraGraphQLWhere.EQUALS\n\n static GetHasuraJsonbOperator = <MBase extends ModelBaseStructure>(\n options: RepositoryFindFieltersOptions<MBase, NonFunctionPropertyNames<MBase>>,\n ): HasuraGraphQLWhere =>\n options.operator === Where.IN\n ? HasuraGraphQLWhere.JSON_CONTAINS\n : options.operator === Where.LIKE\n ? HasuraGraphQLWhere.JSON_HAS_KEYS_ANY\n : HasuraGraphQLWhere[\n Object.keys(HasuraGraphQLWhere).find(\n (graphQLOperator) =>\n graphQLOperator ===\n Object.keys(Where).find((operator) => Where[operator as keyof typeof Where] === options?.operator),\n ) as keyof typeof HasuraGraphQLWhere\n ]\n}\n","import {\n BaseModel,\n ModelBaseStructure,\n NonFunctionAndIdentifierPropertyNames,\n NonFunctionProperties,\n} from '../../../../domain'\nimport { is, isDate, isEmpty, isNil, isObject, isString, parseDateTime } from '../../../../utils'\nimport { Fields, GraphQLParams, HasuraGraphQLFields } from '../../types'\n\nimport { AttributeOptionHelper } from './attribute-option.helper'\nimport { BindFilterQueryHelper } from './bind-filter-query.helper'\n\nexport class GraphQLFieldHelper {\n static CheckIsGraphQLParams = <Model extends ModelBaseStructure>(\n params: string | GraphQLParams<Model>[],\n ): params is GraphQLParams<Model>[] =>\n !isString(params) && Array.isArray(params) && params.length >= 0 && !!params[0].operation\n\n static ConvertModelFieldsToGraphQLFields = <Model extends ModelBaseStructure>(\n fields: HasuraGraphQLFields<Model>,\n ): Fields => {\n return fields\n ?.map((field) => {\n if (isString(field)) return field.toString()\n if (field === 'affected_rows') return field\n\n const fieldName = Object.keys(field).shift()\n const fieldValue = field[fieldName as keyof typeof field]\n\n if (Array.isArray(fieldValue))\n return { [fieldName]: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fieldValue) }\n if (!AttributeOptionHelper.CheckIsColumnOption(fieldValue)) return null\n if (fieldValue.fields)\n return !fieldValue.filters\n ? {\n [fieldValue.columnName || fieldName]: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(\n fieldValue.fields,\n ),\n }\n : {\n operation: fieldValue.columnName || fieldName,\n fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fieldValue.fields),\n variables: {\n [`${fieldValue.columnName}_where`]: {\n name: 'where',\n type: fieldValue.filters.filterType,\n value: BindFilterQueryHelper.MakeGraphQLWhere(fieldValue.filters.filters, fieldValue.fields),\n required: true,\n },\n },\n }\n\n return fieldValue.columnName\n })\n .filter((field) => !!field)\n }\n\n static ConvertFieldValueFrom = <\n Model extends ModelBaseStructure,\n RecordDataType extends string | number | DataType | Date,\n DataType extends Record<string, RecordDataType | RecordDataType[]>,\n >(\n data: DataType,\n fields: HasuraGraphQLFields<Model>,\n ): Partial<NonFunctionProperties<Model>> =>\n Object.keys(data).reduce((result, columnName) => {\n const {\n attributeName,\n fields: attributeFields,\n from,\n } = AttributeOptionHelper.FindColumnOptionFromList(columnName, fields)\n\n if (!!attributeFields && Array.isArray(attributeFields)) {\n if (Array.isArray(data[columnName]))\n return {\n ...result,\n [attributeName]: from\n ? from(data[columnName], data)\n : is<RecordDataType[]>(data[columnName]).map((value) =>\n GraphQLFieldHelper.ConvertFieldValueFrom(is<DataType>(value), attributeFields),\n ),\n }\n if (isObject(data[columnName]))\n return {\n ...result,\n [attributeName]: !!from\n ? from(data[columnName])\n : GraphQLFieldHelper.ConvertFieldValueFrom(is<DataType>(data[columnName]), attributeFields),\n }\n }\n\n if (!!from) return { ...result, [attributeName]: from(data[columnName], data) }\n\n return { ...result, [attributeName]: parseDateTime(data[columnName].toString()) }\n }, {})\n\n static ConvertFieldValueTo = <\n Model extends ModelBaseStructure,\n DataType extends Record<string, string | number | DataType | Date>,\n >(\n instance: Model,\n fields: HasuraGraphQLFields<Model>,\n update = false,\n ): DataType => {\n const data: Partial<Model> = instance.toPlain?.() || instance\n\n return Object.keys(data).reduce((result, attributeName) => {\n const {\n columnName,\n fields: attributeFields,\n foreignKeyColumn,\n to,\n bindPersistData,\n } = AttributeOptionHelper.FindByAttribute(attributeName as NonFunctionAndIdentifierPropertyNames<Model>, fields)\n\n if (bindPersistData)\n return {\n ...result,\n ...bindPersistData(data[attributeName as NonFunctionAndIdentifierPropertyNames<Model>], instance),\n }\n if (isNil(columnName)) return result\n if (\n !!foreignKeyColumn &&\n !isEmpty(foreignKeyColumn) &&\n !Object.keys(foreignKeyColumn).filter(\n (key) =>\n !is<Record<string, string>>(data[attributeName as NonFunctionAndIdentifierPropertyNames<Model>])?.[key],\n ).length\n )\n return Object.keys(foreignKeyColumn).reduce(\n (object, current) => ({\n ...object,\n [foreignKeyColumn[current as keyof HasuraGraphQLFields<Model>[number]]]:\n data[attributeName as keyof HasuraGraphQLFields<Model>[number]]?.[current],\n }),\n { ...result },\n )\n\n if (\n update &&\n isObject(data[attributeName as keyof HasuraGraphQLFields<Model>[number]]) &&\n !isNil(attributeFields) &&\n !isDate(data[attributeName as keyof HasuraGraphQLFields<Model>[number]])\n )\n return result\n\n if (\n !!columnName &&\n Array.isArray(attributeFields) &&\n isObject(data[attributeName as keyof HasuraGraphQLFields<Model>[number]])\n ) {\n const converted =\n !isNil(columnName) && to\n ? to(instance[attributeName as keyof HasuraGraphQLFields<Model>[number]], instance)\n : data[attributeName as keyof HasuraGraphQLFields<Model>[number]]\n\n return {\n ...result,\n ...(converted !== undefined\n ? {\n [columnName]: {\n data:\n instance[attributeName as NonFunctionAndIdentifierPropertyNames<Model>] instanceof BaseModel\n ? GraphQLFieldHelper.ConvertFieldValueTo(\n data[attributeName as keyof HasuraGraphQLFields<Model>[number]],\n attributeFields as HasuraGraphQLFields<Model>,\n )\n : converted,\n },\n }\n : {}),\n }\n }\n\n if (!!to)\n return {\n ...result,\n [columnName]: to(instance[attributeName as keyof HasuraGraphQLFields<Model>[number]], instance),\n }\n\n return { ...result, [columnName]: data[attributeName as keyof HasuraGraphQLFields<Model>[number]] }\n }, {} as DataType)\n }\n}\n","import { CreateRepository, CreateRepositoryParams, ModelBaseStructure } from '../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../utils'\nimport { GraphQLRepository, HasuraGraphQLFields } from '../types'\n\nimport { AttributeOptionHelper } from './helpers'\n\nexport type CreateConstructorParams = {\n insertGraphQLOperation?: string\n insertGraphQLObjectType?: string\n}\n\nexport const withCreateHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n): MixinCtor<\n GraphQLRepository<MBase> & InstanceType<TMixinBase> & CreateRepository<MBase>,\n MergeConstructorParams<[CreateConstructorParams, ...any[]], ConstructorParameters<TMixinBase>>\n> => {\n return class CreateHasuraGraphQLMixin extends MixinBase implements CreateRepository<MBase> {\n insertGraphQLOperation: string\n insertGraphQLObjectType: string\n\n constructor(...params: any[]) {\n const options: CreateConstructorParams = params?.[0]\n\n super(...params)\n\n this.insertGraphQLOperation = options?.insertGraphQLOperation || `insert_${this.tableName}_one`\n this.insertGraphQLObjectType = options?.insertGraphQLObjectType || `${this.tableName}_insert_input`\n }\n\n async create(data: CreateRepositoryParams<MBase>): Promise<MBase> {\n const newData = await this.save(this.model.toInstance(data as any))\n\n return this.model.toInstance(newData)\n }\n\n async save(data: MBase): Promise<Partial<MBase>> {\n const primaryKeyColumns = this.model.identifiersFields.map(\n (field) => AttributeOptionHelper.FindByAttribute(field, this.fields).columnName,\n ) as HasuraGraphQLFields<MBase>\n const foreignKeyColumns = this.fields\n .map((field) => {\n const columnOptions = Object.values(field).shift()\n\n return (\n AttributeOptionHelper.CheckIsColumnOption(columnOptions) &&\n columnOptions.foreignKeyColumn && [\n ...Object.values(columnOptions.foreignKeyColumn),\n {\n [columnOptions.columnName]: Object.keys(columnOptions.foreignKeyColumn).map(\n (foreignKeyField) =>\n AttributeOptionHelper.FindByAttribute(foreignKeyField as any, columnOptions?.fields)?.columnName ||\n foreignKeyField,\n ),\n },\n ]\n )\n })\n .filter(Boolean)\n .reduce((keys, current) => [...keys, ...current], [])\n\n const result = await this.mutation<Record<string, Record<string, any>>>(\n this.insertGraphQLOperation,\n [...primaryKeyColumns, ...foreignKeyColumns] as HasuraGraphQLFields<MBase>,\n {\n object: { type: this.insertGraphQLObjectType, required: true, value: this.convertDataToHasura(data) },\n },\n )\n\n return { ...data.toPlain(), ...this.convertDataFromHasura(result[this.insertGraphQLOperation]).toPlain() }\n }\n } as any\n}\n","import { DeleteRepository, DeleteRepositoryParams, ModelBaseStructure } from '../../../domain'\nimport { isNil, MergeConstructorParams, MixinCtor } from '../../../utils'\nimport { GraphQLRepository, HasuraGraphQLFields } from '../types'\n\nimport { AttributeOptionHelper } from './helpers'\n\nexport type DeleteConstructorParams = {\n deleteGraphQLOperation?: string\n}\n\nexport const withDeleteHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n): MixinCtor<\n GraphQLRepository<MBase> & DeleteRepository<MBase> & InstanceType<TMixinBase>,\n MergeConstructorParams<[DeleteConstructorParams, ...any[]], ConstructorParameters<TMixinBase>>\n> => {\n return class DeleteHasuraGraphQLMixin extends MixinBase implements DeleteRepository<MBase> {\n deleteGraphQLOperation: string\n\n constructor(...params: any[]) {\n const options: DeleteConstructorParams = params?.[0]\n\n super(...params)\n\n this.deleteGraphQLOperation = options?.deleteGraphQLOperation || `delete_${this.tableName}_by_pk`\n }\n\n async delete(identifiers: DeleteRepositoryParams<MBase>): Promise<void> {\n const instance = this.model.toInstance(identifiers as any)\n\n await this.mutation(\n this.deleteGraphQLOperation,\n this.model.identifiersFields.map(\n (field) => AttributeOptionHelper.FindByAttribute(field, this.fields).columnName,\n ) as HasuraGraphQLFields<MBase>,\n this.model.identifiersFields.reduce((ids, identifier) => {\n if (isNil(instance[identifier])) return ids\n\n const columnOption = AttributeOptionHelper.FindByAttribute(identifier, this.fields)\n const value = columnOption.to(identifiers[identifier as keyof DeleteRepositoryParams<MBase>], instance)\n\n return {\n ...ids,\n [columnOption.columnName]: {\n type: this.getAttributeGraphQLTypeOf(columnOption.type || value),\n value,\n required: true,\n },\n }\n }, {}),\n )\n }\n } as any\n}\n","import { mutation, query } from 'gql-query-builder'\nimport fetch from 'node-fetch'\n\nimport { BaseModelBuilder, ModelBaseStructure } from '../../../domain'\nimport {\n isBoolean,\n isInteger,\n isNaN,\n isNil,\n isNumber,\n isString,\n isUUID,\n MergeConstructorParams,\n MixinCtor,\n parseISO,\n} from '../../../utils'\nimport {\n GraphQLParams,\n GraphQLRepository,\n HasuraGraphQLAuthOptions,\n HasuraGraphQLFields,\n HasuraGraphQLHeaders,\n VariableOptions,\n} from '../types'\n\nimport { GraphQLFieldHelper } from './helpers'\n\nexport type ConstructorParams<Model extends ModelBaseStructure> = {\n tableName: string\n model: BaseModelBuilder<Model>\n fields: HasuraGraphQLFields<Model>\n endpoint: string\n authOptions: HasuraGraphQLAuthOptions\n}\n\nexport const withHasuraGraphQL = <MBase extends ModelBaseStructure, T extends MixinCtor = MixinCtor>(\n MixinBase: T,\n): MixinCtor<GraphQLRepository<MBase>, MergeConstructorParams<any[], ConstructorParameters<T>>> => {\n return class HasuraGraphQLMixin extends MixinBase implements GraphQLRepository<MBase> {\n tableName: string\n endpoint: string\n authOptions: HasuraGraphQLAuthOptions\n model: BaseModelBuilder<MBase>\n fields: HasuraGraphQLFields<MBase>\n\n get headers(): HasuraGraphQLHeaders {\n return {\n 'Content-Type': 'application/json',\n ...(isNil(this.authOptions.authToken) ? {} : { Authorization: this.authOptions.authToken }),\n ...(isNil(this.authOptions.adminSecret) ? {} : { 'X-Hasura-Admin-Secret': this.authOptions.adminSecret }),\n ...(isNil(this.authOptions.authRole)\n ? {}\n : { 'X-Hasura-Role': this.authOptions.authRole.role, 'X-Hasura-User-Id': this.authOptions.authRole.userId }),\n }\n }\n\n constructor(...params: any[]) {\n const options: ConstructorParams<MBase> = params[0]\n\n super(...params)\n\n this.tableName = options.tableName\n this.endpoint = options.endpoint\n this.authOptions = options.authOptions\n this.model = options.model\n this.fields = options.fields || (this.model.identifiersFields as HasuraGraphQLFields<MBase>)\n }\n\n async mutation<ReturnFields = any>(\n operation: string,\n fields?: HasuraGraphQLFields<MBase>,\n variables?: VariableOptions,\n ): Promise<ReturnFields> {\n const resultQuery = mutation({\n operation,\n variables,\n fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fields),\n })\n\n return this.fetch(resultQuery)\n }\n\n async query<ReturnFields = any>(\n operation: string | GraphQLParams<MBase>[],\n fields?: HasuraGraphQLFields<MBase>,\n variables?: VariableOptions,\n ): Promise<ReturnFields> {\n const resultQuery = GraphQLFieldHelper.CheckIsGraphQLParams(operation)\n ? query(\n operation.map((option) => ({\n operation: option.operation,\n variables: option.variables,\n fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(option.fields),\n })),\n )\n : query({\n operation,\n variables,\n fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fields),\n })\n\n return this.fetch(resultQuery)\n }\n\n async fetch<ReturnFields = any>(params: { variables: any; query: string }): Promise<ReturnFields> {\n const headers = this.headers\n const response = await fetch(`${this.endpoint}`, {\n method: 'POST',\n body: JSON.stringify(params),\n headers,\n })\n const result: any = await response.json()\n\n if (!isNil(result.errors)) throw new Error(JSON.stringify(result.errors))\n\n return result.data\n }\n\n getAttributeGraphQLTypeOf<FieldType>(value: FieldType): string {\n if (isUUID(value as any)) return 'uuid'\n if (isString(value)) return 'String'\n if (isBoolean(value)) return 'Boolean'\n if (value instanceof Date) return 'timestamptz'\n if (isInteger(value)) return 'Int'\n if (isNumber(value)) return 'numeric'\n\n throw new Error('Type not implemented yet')\n }\n\n checkIfIsDateTimeAndParse(value: string): Date | string {\n if (!/^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/.test(value)) return value\n\n const date = parseISO(value)\n\n if (isNaN(date.getTime())) return value\n\n return date\n }\n\n convertDataFromHasura(data: Record<string, string | number>): MBase {\n const plain = GraphQLFieldHelper.ConvertFieldValueFrom(data, this.fields)\n\n return this.model.toInstance(plain)\n }\n\n convertDataToHasura(instance: MBase, update = false): Record<string, string | number> {\n return GraphQLFieldHelper.ConvertFieldValueTo(instance, this.fields, update)\n }\n }\n}\n","import {\n BaseModel,\n ModelBaseStructure,\n NonFunctionAndIdentifierProperties,\n RepositoryUpdateParams,\n UpdateOptionActions,\n UpdateOptions,\n UpdateRepository,\n} from '../../../domain'\nimport { is, isNil, MergeConstructorParams, MixinCtor } from '../../../utils'\nimport { GraphQLRepository, HasuraGraphQLFields } from '../types'\n\nimport { AttributeOptionHelper } from './helpers'\n\nexport type UpdateHasuraGraphQLRepositoryType<MBase extends ModelBaseStructure> = UpdateRepository<MBase> & {\n paramsToPlain(params: RepositoryUpdateParams<MBase>): Partial<MBase>\n}\n\nexport type UpdateConstructorParams = {\n updateGraphQLOperation?: string\n updateGraphQLObjectType?: string\n updateGraphQLPKType?: string\n}\n\nexport const withUpdateHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n): MixinCtor<\n GraphQLRepository<MBase> & UpdateHasuraGraphQLRepositoryType<MBase> & InstanceType<TMixinBase>,\n MergeConstructorParams<[UpdateConstructorParams, ...any[]], ConstructorParameters<TMixinBase>>\n> => {\n const getValueByAction = (options: UpdateOptions<MBase>): unknown => {\n if (options instanceof BaseModel) return options.toPlain()\n if (isNil(options?.action)) return options\n if ([UpdateOptionActions.REMOVE_FIELD.toString(), UpdateOptionActions.NULL.toString()].includes(options.action))\n return null\n\n return options.value\n }\n\n return class UpdateHasuraGraphQLMixin extends MixinBase implements UpdateRepository<MBase> {\n updateGraphQLOperation: string\n updateGraphQLObjectType: string\n updateGraphQLPKType: string\n\n constructor(...params: any[]) {\n const options: UpdateConstructorParams = params?.[0]\n\n super(...params)\n\n this.updateGraphQLOperation = options?.updateGraphQLOperation || `update_${this.tableName}_by_pk`\n this.updateGraphQLObjectType = options?.updateGraphQLObjectType || `${this.tableName}_set_input`\n this.updateGraphQLPKType = options?.updateGraphQLPKType || `${this.tableName}_pk_columns_input`\n }\n\n async update(data: RepositoryUpdateParams<MBase>): Promise<MBase> {\n const plainData = this.paramsToPlain(data)\n\n await this.mutation(\n this.updateGraphQLOperation,\n this.model.identifiersFields.map(\n (field) => AttributeOptionHelper.FindByAttribute(field, this.fields).columnName,\n ) as HasuraGraphQLFields<MBase>,\n {\n _set: {\n type: this.updateGraphQLObjectType,\n value: this.convertDataToHasura(this.model.toInstance(plainData), true),\n required: true,\n },\n pk_columns: { type: this.updateGraphQLPKType, value: this.getUpdateModelKeys(plainData), required: true },\n },\n )\n\n return this.model.toInstance(plainData)\n }\n\n paramsToPlain(params: RepositoryUpdateParams<MBase>): Partial<MBase> {\n const model = this.model\n\n if (model.isModel(params)) return params.toPlain()\n\n return Object.keys(params).reduce(\n (data, currentKey) => ({\n ...data,\n ...(params[currentKey as keyof RepositoryUpdateParams<MBase>] !== undefined && {\n [currentKey]: getValueByAction(\n is<UpdateOptions<MBase>>(params[currentKey as keyof RepositoryUpdateParams<MBase>]),\n ),\n }),\n }),\n {},\n )\n }\n\n getUpdateModelKeys(data: Partial<MBase>): NonFunctionAndIdentifierProperties<MBase> {\n const instance = this.model.toInstance(data)\n\n return this.model.identifiersFields.reduce((ids, identifier) => {\n if (isNil(instance[identifier])) return ids\n\n const columnOption = AttributeOptionHelper.FindByAttribute(identifier, this.fields)\n const value = columnOption?.to?.(data[identifier], instance) || data[columnOption.attributeName]\n\n return {\n ...ids,\n [columnOption.columnName]: value,\n }\n }, {} as NonFunctionAndIdentifierProperties<MBase>)\n }\n } as any\n}\n","import { GetRepository, GetRepositoryParams, ModelBaseStructure } from '../../../domain'\nimport { NotFoundError } from '../../../errors'\nimport { isNil, MixinCtor } from '../../../utils'\nimport { GraphQLRepository } from '../types'\n\nimport { AttributeOptionHelper } from './helpers'\n\nexport type GetConstructorParams = {\n getGraphQLOperation?: string\n}\n\nexport const withGetHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n) => {\n return class GetHasuraGraphQLMixin extends MixinBase implements GetRepository<MBase> {\n getGraphQLOperation: string\n\n constructor(...params: any[]) {\n const options: GetConstructorParams = params?.[0]\n\n super(...params)\n\n this.getGraphQLOperation = options?.getGraphQLOperation || `${this.tableName}_by_pk`\n }\n\n async get(identifiers: GetRepositoryParams<MBase>): Promise<MBase> {\n const instance = this.model.toInstance(identifiers)\n const result = await this.query(\n this.getGraphQLOperation,\n this.fields,\n this.model.identifiersFields.reduce((ids, identifier) => {\n if (isNil(instance[identifier])) return ids\n\n const columnOption = AttributeOptionHelper.FindByAttribute(identifier, this.fields)\n const value =\n columnOption?.to?.(identifiers[identifier as keyof typeof identifiers], instance) ||\n identifiers[identifier as keyof typeof identifiers]\n\n return {\n ...ids,\n [columnOption.columnName]: {\n type: this.getAttributeGraphQLTypeOf(columnOption.type || value),\n value,\n required: true,\n },\n }\n }, {}),\n )\n const data = result[this.getGraphQLOperation]\n\n if (isNil(data)) throw new NotFoundError(`${instance.constructor.name} not found`)\n\n return this.convertDataFromHasura(result[this.getGraphQLOperation])\n }\n }\n}\n","import {\n FindRepository,\n ModelBaseStructure,\n NonFunctionPropertyNames,\n RepositoryFindFielters,\n RepositoryFindResult,\n RepositoryLimitOptions,\n RepositoryOrderBy,\n} from '../../../domain'\nimport { isNil, MixinCtor } from '../../../utils'\nimport { GraphQLRepository } from '../types'\n\nimport { BindFilterQueryHelper } from './helpers'\n\nexport const withFindHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n) => {\n return class FindHasuraGraphQLMixin extends MixinBase implements FindRepository<MBase> {\n async find(options?: {\n filters?: RepositoryFindFielters<MBase>\n fields?: NonFunctionPropertyNames<MBase>[]\n limits?: RepositoryLimitOptions<MBase>\n orderBy?: RepositoryOrderBy<MBase>\n }): Promise<RepositoryFindResult<MBase>> {\n const { filters, limits, orderBy } = options || {}\n const variablesCount = {\n ...(isNil(orderBy) ? {} : { order_by: { type: `${this.tableName}_order_by!`, list: true, value: orderBy } }),\n ...(isNil(filters)\n ? {}\n : {\n where: {\n value: BindFilterQueryHelper.MakeGraphQLWhere(filters, this.fields),\n type: `${this.tableName}_bool_exp`,\n required: true,\n },\n }),\n }\n const variables = {\n ...(isNil(limits) ? {} : limits),\n ...variablesCount,\n }\n const result = await this.query([\n {\n operation: this.tableName,\n fields: options.fields\n ? options.fields\n .map(\n (fieldName) =>\n this.fields.find((fieldOption) => fieldOption === fieldName) ??\n this.fields.find((fieldOption) => Object.keys(fieldOption).shift() === fieldName),\n )\n .filter(Boolean)\n : this.fields,\n variables,\n },\n {\n operation: `${this.tableName}_aggregate`,\n fields: [{ aggregate: ['count'] }],\n variables: variablesCount,\n },\n ])\n const data: MBase[] = result[this.tableName].map((row: Record<string, string | number>) =>\n this.convertDataFromHasura(row),\n )\n const count = result[`${this.tableName}_aggregate`].aggregate.count\n\n return { count, data }\n }\n }\n}\n","import { CrudRepository, ModelBaseStructure } from '../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../utils'\nimport { GraphQLRepository } from '../types'\n\nimport { CreateConstructorParams, withCreateHasuraGraphQL } from './with-create-hasura-graphql.mixin'\nimport { DeleteConstructorParams, withDeleteHasuraGraphQL } from './with-delete-hasura-graphql.mixin'\nimport { withFindHasuraGraphQL } from './with-find-hasura-graphql.mixin'\nimport { GetConstructorParams, withGetHasuraGraphQL } from './with-get-hasura-graphql.mixin'\nimport { ConstructorParams } from './with-hasura-graphql.mixin'\nimport {\n UpdateConstructorParams,\n UpdateHasuraGraphQLRepositoryType,\n withUpdateHasuraGraphQL,\n} from './with-update-hasura-graphql.mixin'\n\nexport const withCrudHasuraGraphQL = <\n TBase extends ModelBaseStructure,\n Repository = CrudRepository<TBase>,\n TMixinBase extends MixinCtor = MixinCtor,\n>(\n MixinBase: MixinCtor<GraphQLRepository<TBase>> & TMixinBase,\n): MixinCtor<\n GraphQLRepository<TBase> & Repository & UpdateHasuraGraphQLRepositoryType<TBase>,\n MergeConstructorParams<\n [\n ConstructorParams<TBase> &\n CreateConstructorParams &\n DeleteConstructorParams &\n GetConstructorParams &\n UpdateConstructorParams,\n ...any[],\n ],\n ConstructorParameters<TMixinBase>\n >\n> => {\n return class CrudHasuraGraphQLMixin\n extends withUpdateHasuraGraphQL(\n withGetHasuraGraphQL(\n withFindHasuraGraphQL(\n withDeleteHasuraGraphQL(withCreateHasuraGraphQL(MixinBase as MixinCtor<GraphQLRepository<TBase>>)),\n ),\n ),\n )\n implements CrudRepository<TBase> {} as any\n}\n","import { Category } from '../../../domain'\n\nexport class CategoryHasuraGraphQL extends Category {\n firestoreId?: string\n brandCondition?: string\n tagCondition?: string[]\n}\n","import { Type } from 'class-transformer'\n\nimport { Product } from '../../../domain'\n\nimport { KitProductHasuraGraphQL } from './kit-product-hasura-graphql'\n\nexport class ProductHasuraGraphQL extends Product {\n firestoreId?: string\n fullPrice?: number\n subscriberDiscountPercentage?: number\n subscriberPrice?: number\n productId?: number\n differentials?: string\n whoMustUse?: string\n howToUse?: string\n brandDescription?: string\n\n @Type(() => KitProductHasuraGraphQL)\n override kitProducts?: KitProductHasuraGraphQL[]\n}\n","import { Type } from 'class-transformer'\n\nimport { KitProduct } from '../../../domain'\n\nimport { ProductHasuraGraphQL } from './product-hasura-graphql'\n\nexport class KitProductHasuraGraphQL extends KitProduct {\n @Type(() => ProductHasuraGraphQL)\n override kit: ProductHasuraGraphQL\n\n @Type(() => ProductHasuraGraphQL)\n override product: ProductHasuraGraphQL\n}\n","import { Variant } from '../../../domain'\n\nexport class VariantHasuraGraphQL extends Variant {\n firestoreId?: string\n fullPrice?: number\n subscriberDiscountPercentage?: number\n subscriberPrice?: number\n\n name ? = ''\n hasVariants ? = false\n}\n","import {\n Category,\n CategoryMetadata,\n CategoryRepository,\n CreateRepositoryParams,\n GetRepositoryParams,\n Product,\n ProductMetadata,\n Shops,\n UpdateRepositoryParams,\n Where,\n} from '../../../../domain'\nimport { DuplicatedResultsError, NotFoundError } from '../../../../errors'\nimport { Base, omit } from '../../../../utils'\nimport { HasuraGraphQLColumnType } from '../../enums'\nimport { withCrudHasuraGraphQL, withHasuraGraphQL } from '../../mixins'\nimport { CategoryHasuraGraphQL } from '../../models'\nimport { HasuraGraphQLAuthOptions } from '../../types'\n\nimport { ProductHasuraGraphQLRepository } from './product-hasura-graphql.repository'\n\nexport class CategoryHasuraGraphQLRepository\n extends withCrudHasuraGraphQL(withHasuraGraphQL<CategoryHasuraGraphQL>(Base))\n implements CategoryRepository\n{\n constructor(\n endpoint: string,\n authOptions: HasuraGraphQLAuthOptions,\n private readonly productRepository: ProductHasuraGraphQLRepository,\n ) {\n super({\n tableName: 'category',\n model: Category,\n endpoint,\n authOptions,\n fields: [\n { id: { columnName: 'id', to: (value: string) => +value, from: (value: number) => value.toString() } },\n { firestoreId: { columnName: 'firestore_id' } },\n 'name',\n 'description',\n 'image',\n 'published',\n 'shop',\n 'slug',\n { brandCategory: { columnName: 'brand_category' } },\n { brandCategoryBanner: { columnName: 'brand_banner' } },\n { brandCategoryBannerMobile: { columnName: 'brand_banner_mobile' } },\n { brandLogo: { columnName: 'brand_logo' } },\n { brandCondition: { columnName: 'brand_condition' } },\n {\n conditions: {\n columnName: 'tag_condition',\n type: HasuraGraphQLColumnType.Jsonb,\n from: (tags: unknown, row: Record<string, any>) => ({\n brand: row.brand_condition,\n tags: Array.isArray(tags) ? tags : [],\n }),\n bindPersistData: (value: CategoryHasuraGraphQL['conditions']) => {\n return {\n brand_condition: value.brand,\n tag_condition: value?.tags || [],\n }\n },\n bindFindFilter: (sentence: any) => {\n return {\n ...(sentence.brand ? { brand_condition: sentence.brand } : {}),\n ...(sentence.tags ? { tag_condition: sentence.tags } : {}),\n }\n },\n },\n },\n 'filters',\n { createdAt: { columnName: 'created_at' } },\n { updatedAt: { columnName: 'updated_at' } },\n {\n products: {\n columnName: 'products',\n fields: ['product_id'],\n from: (value: { product_id: number }[]) => value.map((product) => product.product_id.toString()),\n to: (productIds: string[]) =>\n productIds.map((productId) => ({\n product_id: +productId,\n })),\n },\n },\n {\n metadata: {\n columnName: 'metadata',\n fields: ['title', 'description'],\n bindPersistData: (value: ProductMetadata): Record<string, any> => ({\n metadata: { data: value },\n }),\n },\n },\n ],\n })\n }\n\n override async create(params: CreateRepositoryParams<CategoryHasuraGraphQL>): Promise<CategoryHasuraGraphQL> {\n const { metadata, ...data } = params\n\n return super.create({ ...data, metadata: metadata || { description: null, title: null } })\n }\n\n override async get(identifiers: GetRepositoryParams<CategoryHasuraGraphQL>): Promise<CategoryHasuraGraphQL> {\n return Number.isNaN(+identifiers.id)\n ? (await this.find({ filters: { firestoreId: identifiers.id } })).data?.[0]\n : super.get(identifiers)\n }\n\n override async update(params: UpdateRepositoryParams<CategoryHasuraGraphQL>): Promise<CategoryHasuraGraphQL> {\n const { products, id: checkId, metadata, ...data } = params\n const plainData = this.paramsToPlain({ id: checkId })\n const id = await this.getId(plainData.id)\n const category = await super.update({ id, ...data })\n\n category.products = products && (await this.updateProducts(+id, { products }))\n category.metadata = metadata && (await this.updateMetadata(+id, { metadata }))\n\n return category\n }\n\n async getCategoryBySlug(slug: string, shop: Shops): Promise<Category> {\n if (!slug) return null\n\n const { data, count } = await this.find({ filters: { slug, shop, published: true } })\n\n if (count > 1) throw new DuplicatedResultsError('Query returned duplicated values')\n if (!count) throw new NotFoundError(`Category with slug ${slug} not found`)\n\n return data.shift()\n }\n\n async getCategoriesForHome(categoryIds: string[], limit = 4): Promise<{ category: Category; products: Product[] }[]> {\n if (!categoryIds?.length) return []\n\n const categoriesFirestore = categoryIds.filter((categoryId) => Number.isNaN(+categoryId))\n const categoriesHasura = categoryIds.filter((categoryId) => +categoryId > 0)\n const categories = []\n\n if (categoriesFirestore.length)\n categories.push(\n ...(await this.find({\n filters: { firestoreId: { operator: Where.IN, value: categoriesFirestore.filter(Boolean) }, published: true },\n }).then(({ data }) => data)),\n )\n if (categoriesHasura.length)\n categories.push(\n ...(await this.find({\n filters: { id: { operator: Where.IN, value: categoriesHasura.filter(Boolean) }, published: true },\n }).then(({ data }) => data)),\n )\n\n if (!categories.length) return []\n\n const homeSections = await Promise.all(\n categories.map(async (category) => ({\n category,\n products: await this.mountCategory(category, { limit, hasStock: true }),\n })),\n )\n\n return homeSections\n }\n\n async mountCategory(category: Category, options?: { limit?: number; hasStock?: boolean }): Promise<Product[]> {\n if (!category?.products?.length) return []\n\n const products = []\n const { data: productsData } = await this.productRepository.find({\n filters: {\n id: { operator: Where.IN, value: category.products },\n published: true,\n ...(options?.hasStock ? { stock: { quantity: { operator: Where.GT, value: 0 } } } : {}),\n },\n fields: [\n 'id',\n 'name',\n 'slug',\n 'images',\n 'miniatures',\n 'price',\n 'fullPrice',\n 'subscriberDiscountPercentage',\n 'subscriberPrice',\n 'stock',\n 'published',\n 'CEST',\n 'EAN',\n 'NCM',\n 'brand',\n 'costPrice',\n 'hasVariants',\n 'isKit',\n 'sku',\n 'rate',\n 'tags',\n 'type',\n 'shoppingCount',\n ],\n ...(options?.limit ? { limits: { limit: options?.limit } } : {}),\n })\n\n products.push(...productsData)\n\n return products\n }\n\n private async getId(id: string): Promise<string> {\n if (!Number.isNaN(+id)) return id\n\n const { data } = await this.find({ filters: { firestoreId: id } })\n\n if (data?.[0]?.id) return data?.[0]?.id\n\n throw new NotFoundError(`Category with id ${id} not found`)\n }\n\n private async updateProducts(\n categoryId: number,\n { products }: Pick<UpdateRepositoryParams<CategoryHasuraGraphQL>, 'products'>,\n ): Promise<CategoryHasuraGraphQL['products']> {\n if ('action' in products && products.action === 'remove') {\n await this.mutation('delete_category_product', ['affected_rows'], {\n where: {\n type: 'category_product_bool_exp',\n required: true,\n value: { category_id: { _eq: categoryId } },\n },\n })\n\n return []\n }\n\n const plainData = this.paramsToPlain({ products })\n\n if (!plainData.products || plainData.products.length <= 0) return []\n\n await this.mutation('delete_category_product', ['affected_rows'], {\n where: {\n type: 'category_product_bool_exp',\n required: true,\n value: { category_id: { _eq: categoryId } },\n },\n })\n\n await this.mutation('insert_category_product', ['affected_rows'], {\n objects: {\n type: '[category_product_insert_input!]',\n required: true,\n value: plainData.products.map((productId) => ({ category_id: categoryId, product_id: productId })),\n },\n })\n\n return plainData.products\n }\n\n private async updateMetadata(\n categoryId: number,\n { metadata }: Pick<UpdateRepositoryParams<CategoryHasuraGraphQL>, 'metadata'>,\n ): Promise<CategoryMetadata> {\n const plainData = this.paramsToPlain({ metadata })\n\n if (!plainData.metadata) return null\n\n await this.mutation('update_category_metadata_by_pk', ['category_id'], {\n pk_columns: {\n value: { category_id: categoryId },\n type: 'category_metadata_pk_columns_input',\n required: true,\n },\n _set: {\n value: omit(metadata, ['category_id']),\n type: 'category_metadata_set_input',\n required: true,\n },\n })\n\n return plainData.metadata\n }\n}\n","import {\n CreateRepositoryParams,\n FindRepositoryParams,\n GetRepositoryParams,\n NonFunctionPropertyNames,\n ProductMetadata,\n ProductRepository,\n ProductReview,\n RepositoryFindResult,\n ReviewStatusParams,\n ReviewWithProductData,\n ShopPrice,\n Shops,\n UpdateRepositoryParams,\n Where,\n} from '../../../../domain'\nimport { NotFoundError } from '../../../../errors'\nimport { Base, is, isNil, omit } from '../../../../utils'\nimport { HasuraGraphQLColumnType, HasuraGraphQLWhere } from '../../enums'\nimport { withCrudHasuraGraphQL, withHasuraGraphQL } from '../../mixins'\nimport { ProductHasuraGraphQL } from '../../models'\nimport { HasuraGraphQLAuthOptions, HasuraGraphQLFields } from '../../types'\n\ntype ProductReviewFields = {\n id?: string\n shop: Shops\n rate: number\n author?: string\n email?: string\n location?: string\n review?: string\n status?: boolean\n title?: string\n person_id?: number\n points?: number\n order_id?: string\n created_at?: Date\n updated_at?: Date\n}\n\nexport class ProductHasuraGraphQLRepository\n extends withCrudHasuraGraphQL(withHasuraGraphQL<ProductHasuraGraphQL>(Base))\n implements ProductRepository\n{\n private get reviewsFields(): any {\n return [\n 'id',\n 'shop',\n 'rate',\n 'author',\n 'email',\n 'location',\n 'review',\n 'status',\n 'title',\n { personId: { columnName: 'person_id' } },\n 'points',\n { orderId: { columnName: 'order_id' } },\n { createdAt: { columnName: 'created_at' } },\n { updatedAt: { columnName: 'updated_at' } },\n ]\n }\n\n constructor(endpoint: string, authOptions: HasuraGraphQLAuthOptions) {\n super({\n tableName: 'product',\n model: ProductHasuraGraphQL,\n endpoint,\n authOptions,\n fields: [],\n })\n\n const commonFields: HasuraGraphQLFields<ProductHasuraGraphQL> = [\n { id: { columnName: 'id', to: (value) => +value, from: (value) => value.toString() } },\n { firestoreId: { columnName: 'firestore_id' } },\n { productId: { columnName: 'main_product_id' } },\n { CEST: { columnName: 'cest' } },\n { EAN: { columnName: 'ean' } },\n { NCM: { columnName: 'ncm' } },\n 'brand',\n { costPrice: { columnName: 'cost_price' } },\n {\n description: {\n columnName: 'description',\n from: (description, data) => ({\n description,\n differentials: data.differentials,\n whoMustUse: data.who_must_use,\n howToUse: data.how_to_use,\n brand: data.brand_description,\n }),\n bindFindFilter: (sentence) => {\n const filters = Object.values(sentence).shift()\n\n return {\n ...(filters?.description && { description: filters.description }),\n ...(filters.differentials && { differentials: filters.differentials }),\n ...(filters.whoMustUse && {\n who_must_use: filters.whoMustUse,\n }),\n ...(filters.howToUse && {\n how_to_use: filters.howToUse,\n }),\n ...(filters.brand && {\n brand_description: filters.brand,\n }),\n }\n },\n bindPersistData: (descriptionData) => ({\n ...(descriptionData?.description && { description: descriptionData.description }),\n ...(descriptionData.differentials && { differentials: descriptionData.differentials }),\n ...(descriptionData.whoMustUse && {\n who_must_use: descriptionData.whoMustUse,\n }),\n ...(descriptionData.howToUse && { how_to_use: descriptionData.howToUse }),\n ...(descriptionData.brand && { brand_description: descriptionData.brand }),\n }),\n },\n },\n { differentials: { columnName: 'differentials' } },\n { whoMustUse: { columnName: 'who_must_use' } },\n { howToUse: { columnName: 'how_to_use' } },\n { brandDescription: { columnName: 'brand_description' } },\n { hasVariants: { columnName: 'has_variants' } },\n {\n images: {\n columnName: 'images',\n to: (value: string[]) => (value?.length > 0 ? `{\"${value?.join?.(`\",\"`) || ''}\"}` : `{}`),\n },\n },\n {\n miniatures: {\n columnName: 'miniatures',\n to: (value) => (value?.length > 0 ? `{\"${value?.join?.(`\",\"`) || ''}\"}` : `{}`),\n },\n },\n 'name',\n {\n price: {\n columnName: 'price',\n from: (price, data): ShopPrice => ({\n price,\n fullPrice: data.full_price,\n subscriberDiscountPercentage: data.subscriber_discount_percentage,\n subscriberPrice: data.subscriber_price,\n }),\n bindFindFilter: (sentence) => {\n const filters = Object.values(sentence).shift()\n\n return {\n ...((filters?.price || filters?.price === 0) && { price: filters.price }),\n ...((filters.fullPrice || filters.fullPrice === 0) && { full_price: filters.fullPrice }),\n ...((filters.subscriberDiscountPercentage || filters.subscriberDiscountPercentage === 0) && {\n subscriber_discount_percentage: filters.subscriberDiscountPercentage,\n }),\n ...((filters.subscriberPrice || filters.subscriberPrice === 0) && {\n subscriber_price: filters.subscriberPrice,\n }),\n }\n },\n bindPersistData: (priceData) => ({\n ...(priceData?.price >= 0 && { price: priceData.price }),\n ...(priceData.fullPrice >= 0 && { full_price: priceData.fullPrice }),\n ...(priceData.subscriberDiscountPercentage >= 0 && {\n subscriber_discount_percentage: priceData.subscriberDiscountPercentage,\n }),\n ...(priceData.subscriberPrice >= 0 && { subscriber_price: priceData.subscriberPrice }),\n }),\n },\n },\n { fullPrice: { columnName: 'full_price' } },\n { subscriberDiscountPercentage: { columnName: 'subscriber_discount_percentage' } },\n { subscriberPrice: { columnName: 'subscriber_price' } },\n 'published',\n 'sku',\n {\n stock: {\n columnName: 'stock',\n from: (quantity: number) => ({ quantity }),\n to: (value) => (isNil(value?.quantity) ? value : value?.quantity),\n },\n },\n 'slug',\n 'type',\n 'video',\n 'weight',\n 'gender',\n { tags: { columnName: 'tags', type: HasuraGraphQLColumnType.Jsonb } },\n { isKit: { columnName: 'is_kit' } },\n { createdAt: { columnName: 'created_at' } },\n { updatedAt: { columnName: 'updated_at' } },\n {\n rate: {\n columnName: 'reviews_aggregate',\n filters: {\n filters: { status: true },\n filterType: 'product_review_bool_exp',\n },\n fields: [{ aggregate: [{ avg: ['rate'] }] }],\n from: (value) => value.aggregate.avg.rate,\n },\n },\n { shoppingCount: { columnName: 'shopping_count' } },\n ]\n\n this.fields = [\n ...commonFields,\n {\n categories: {\n columnName: 'categories',\n fields: ['category_id'],\n bindPersistData: (value) => ({\n categories: { data: value.map((category) => ({ category_id: +category })) },\n }),\n to: (categories) => categories.map((categoryId) => +categoryId),\n from: (categories: { category_id: number }[]) =>\n categories?.map((category) => category?.category_id?.toString()) || [],\n },\n },\n {\n kitProducts: {\n columnName: 'kit_products',\n foreignKeyColumn: { productId: 'id' },\n fields: [\n { productId: { columnName: 'product_id' } },\n { kitProductId: { columnName: 'kit_product_id' } },\n 'quantity',\n { product: { columnName: 'product', foreignKeyColumn: { id: 'product_id' }, fields: commonFields } },\n ],\n },\n },\n {\n reviews: {\n columnName: 'reviews',\n foreignKeyColumn: { product_id: 'id' },\n fields: this.reviewsFields,\n },\n },\n {\n metadata: {\n columnName: 'metadata',\n fields: ['title', 'description'],\n bindPersistData: (value) => ({\n metadata: { data: value },\n }),\n },\n },\n ]\n }\n\n override async create(params: CreateRepositoryParams<ProductHasuraGraphQL>): Promise<ProductHasuraGraphQL> {\n const { metadata, ...data } = params\n const product = await super.create(\n omit({ ...data, metadata: metadata || { description: null, title: null } }, ['reviews']),\n )\n\n try {\n product.reviews = data.reviews && (await this.updateReviews(+product.id, data))\n } catch (error) {\n await this.delete({ id: product.id })\n\n throw error\n }\n\n return product\n }\n\n override async get(identifiers: GetRepositoryParams<ProductHasuraGraphQL>): Promise<ProductHasuraGraphQL> {\n const product = Number.isNaN(+identifiers.id)\n ? (await this.find({ filters: { firestoreId: identifiers.id } })).data?.[0]\n : await super.get(identifiers)\n\n if (product.productId) throw new NotFoundError('Product not found, it is a variant')\n\n product.reviews = product.reviews || (await this.findReviewsByProduct(+product.id))\n\n return product\n }\n\n override async find(\n params?: FindRepositoryParams<ProductHasuraGraphQL>,\n ): Promise<RepositoryFindResult<ProductHasuraGraphQL>> {\n const { filters, fields, ...options } = params || {}\n const bindFields =\n fields ||\n (this.fields\n .map((field) => (typeof field === 'string' ? field : Object.keys(field).shift()))\n .filter((field) => field !== 'reviews') as NonFunctionPropertyNames<\n ProductHasuraGraphQL,\n keyof ProductHasuraGraphQL\n >[])\n\n return super.find({\n ...options,\n filters: { ...filters, productId: { operator: Where.ISNULL } },\n fields: bindFields,\n })\n }\n\n async getBySlug(slug: string): Promise<ProductHasuraGraphQL> {\n const result = await this.find({\n filters: {\n slug,\n },\n })\n\n const product = result?.data?.shift()\n\n product.reviews = await this.findReviewsByProduct(+product.id)\n\n return product\n }\n\n override async update(params: UpdateRepositoryParams<ProductHasuraGraphQL>): Promise<ProductHasuraGraphQL> {\n const { categories, kitProducts, reviews, id: checkId, rate, metadata, ...data } = params\n const plainData = this.paramsToPlain({ id: checkId })\n const id = await this.getId(plainData.id)\n const product = await super.update({ id, ...data })\n\n product.categories = categories && (await this.updateCategories(+id, { categories }))\n product.kitProducts = kitProducts && (await this.updateKitProducts(+id, { kitProducts }))\n product.reviews = reviews && (await this.updateReviews(+id, { reviews }))\n product.metadata = metadata && (await this.updateMetadata(+id, { metadata }))\n\n return product\n }\n\n async fetchReviews(status: ReviewStatusParams): Promise<ReviewWithProductData[]> {\n const reviewsExpression = {\n status:\n status === 'pending'\n ? { [HasuraGraphQLWhere.ISNULL]: true }\n : { [HasuraGraphQLWhere.EQUALS]: status === 'approved' },\n }\n const { product: data } = await this.query(\n 'product',\n ['id', 'name', 'sku', { reviews: { columnName: 'reviews', fields: this.reviewsFields } }],\n {\n where: { value: { reviews: reviewsExpression }, type: 'product_bool_exp', required: true },\n },\n )\n\n return data.reduce(\n (reviews: ReviewWithProductData[], product: ProductHasuraGraphQL) => [\n ...reviews,\n ...product.reviews\n .filter(\n (review) =>\n (status === 'pending' && [undefined, null].includes(review.status)) ||\n (status === 'approved' && review.status === true) ||\n (status === 'rejected' && review.status === false),\n )\n .map((review) => ({\n ...this.bindReviewToModel(review),\n productId: product.id,\n productName: product.name,\n productSku: product.sku,\n })),\n ],\n [] as ReviewWithProductData[],\n )\n }\n\n private async updateCategories(\n productId: number,\n { categories }: Pick<UpdateRepositoryParams<ProductHasuraGraphQL>, 'categories'>,\n ): Promise<ProductHasuraGraphQL['categories']> {\n if ('action' in categories && categories.action === 'remove') {\n await this.mutation('delete_category_product', ['affected_rows'], {\n where: {\n type: 'category_product_bool_exp',\n required: true,\n value: { product_id: { _eq: productId } },\n },\n })\n\n return []\n }\n\n const plainData = this.paramsToPlain({ categories })\n\n if (!plainData.categories || plainData.categories.length <= 0) return []\n\n await this.mutation('delete_category_product', ['affected_rows'], {\n where: {\n type: 'category_product_bool_exp',\n required: true,\n value: { product_id: { _eq: productId } },\n },\n })\n\n await this.mutation('insert_category_product', ['affected_rows'], {\n objects: {\n type: '[category_product_insert_input!]',\n required: true,\n value: plainData.categories.map((categoryId) => ({ category_id: categoryId, product_id: productId })),\n },\n })\n\n return plainData.categories\n }\n\n private async updateKitProducts(\n productId: number,\n { kitProducts }: Pick<UpdateRepositoryParams<ProductHasuraGraphQL>, 'kitProducts'>,\n ): Promise<ProductHasuraGraphQL['kitProducts']> {\n const plainData = this.paramsToPlain({ kitProducts })\n\n await this.mutation('delete_product_kit', ['affected_rows'], {\n where: {\n type: 'product_kit_bool_exp',\n required: true,\n value: { kit_product_id: { _eq: productId } },\n },\n })\n\n await this.mutation('insert_product_kit', ['affected_rows'], {\n objects: {\n type: '[product_kit_insert_input!]',\n required: true,\n value: plainData.kitProducts.map((kitProduct) => ({\n kit_product_id: productId,\n product_id: kitProduct.productId || kitProduct.product.id,\n quantity: kitProduct.quantity,\n })),\n },\n })\n\n return plainData.kitProducts\n }\n\n private async updateReviews(\n productId: number,\n { reviews }: Pick<UpdateRepositoryParams<ProductHasuraGraphQL>, 'reviews'>,\n ): Promise<ProductReview[]> {\n if (!reviews) return []\n if ('action' in reviews && reviews.action === 'remove') {\n const reviewIds = await Promise.all(\n reviews.value.map(async (reviewData) => {\n const review = await this.findReview(reviewData, productId)\n\n return review?.id\n }),\n )\n\n await this.mutation('delete_product_review', ['affected_rows'], {\n where: { value: { id: { _in: reviewIds.filter(Boolean) } }, type: 'product_review_bool_exp', required: true },\n })\n\n return reviews.value.map((review, index) => !reviewIds[index] && review).filter(Boolean)\n }\n\n const plainData = this.paramsToPlain({ reviews })\n\n if (!plainData.reviews || plainData.reviews.length <= 0) return []\n\n return Promise.all(\n plainData.reviews.map(async (reviewData) => {\n const review = await this.findReview(reviewData, productId)\n\n if (review.id)\n return this.bindReviewToModel(\n (\n await this.mutation('update_product_review_by_pk', this.reviewsFields, {\n pk_columns: {\n value: { id: review.id },\n type: 'product_review_pk_columns_input',\n required: true,\n },\n _set: {\n value: omit(this.bindReviewToHasura(reviewData), ['id', 'product_id']),\n type: 'product_review_set_input',\n required: true,\n },\n })\n ).update_product_review_by_pk,\n )\n\n return this.bindReviewToModel(\n (\n await this.mutation('insert_product_review_one', this.reviewsFields, {\n object: {\n value: omit({ ...this.bindReviewToHasura(reviewData), product_id: productId }, ['id']),\n type: 'product_review_insert_input',\n required: true,\n },\n })\n ).insert_product_review_one,\n )\n }),\n )\n }\n\n private async updateMetadata(\n productId: number,\n { metadata }: Pick<UpdateRepositoryParams<ProductHasuraGraphQL>, 'metadata'>,\n ): Promise<ProductMetadata> {\n const plainData = this.paramsToPlain({ metadata })\n\n if (!plainData.metadata) return null\n\n await this.mutation('update_product_metadata_by_pk', ['product_id'], {\n pk_columns: {\n value: { product_id: productId },\n type: 'product_metadata_pk_columns_input',\n required: true,\n },\n _set: {\n value: omit(metadata, ['product_id']),\n type: 'product_metadata_set_input',\n required: true,\n },\n })\n\n return plainData.metadata\n }\n\n private async getId(id: string): Promise<string> {\n if (!Number.isNaN(+id)) return id\n\n const { data } = await this.find({ filters: { firestoreId: id } })\n\n if (data?.[0]?.id) return data?.[0]?.id\n\n throw new NotFoundError(`Product with id ${id} not found`)\n }\n\n private async findReviewsByProduct(productId: number): Promise<ProductReview[]> {\n const { product_review: data } = await this.query('product_review', this.reviewsFields, {\n where: {\n value: {\n product_id: { _eq: productId },\n },\n type: 'product_review_bool_exp',\n required: true,\n },\n })\n\n return data && data.map((review: Record<string, any>) => this.bindReviewToModel(review))\n }\n\n private async findReview(review: ProductReview, productId: number): Promise<ProductReview> {\n if (review.id) return review\n\n let loadedReview: ProductReview\n\n if (review.personId) loadedReview = await this.getReviewByPersonId(review.personId, productId, review.orderId)\n if (!loadedReview && review.author && review.email)\n loadedReview = await this.getReviewByAuthorAndEmail(review.author, review.email, productId, review.orderId)\n\n return loadedReview || review\n }\n\n private async getReviewByPersonId(personId: number, productId: number, orderId?: string): Promise<ProductReview> {\n const { product_review: data } = await this.query('product_review', this.reviewsFields, {\n where: {\n value: {\n product_id: { _eq: productId },\n person_id: { _eq: personId },\n ...(orderId && { order_id: { _eq: orderId } }),\n },\n type: `product_review_bool_exp`,\n required: true,\n },\n })\n\n return data && data[0] && this.bindReviewToModel(data[0])\n }\n\n private async getReviewByAuthorAndEmail(\n author: string,\n email: string,\n productId: number,\n orderId?: string,\n ): Promise<ProductReview> {\n const { product_review: data } = await this.query('product_review', this.reviewsFields, {\n where: {\n value: {\n product_id: { _eq: productId },\n author: { _eq: author },\n email: { _eq: email },\n ...(orderId && { order_id: { _eq: orderId } }),\n },\n type: `product_review_bool_exp`,\n required: true,\n },\n })\n\n return data && data[0] && this.bindReviewToModel(data[0])\n }\n\n private bindReviewToModel = (plain: Record<string, any>): ProductReview => ({\n ...is<ProductReview>(omit(plain, ['product_id', 'created_at', 'updated_at', 'person_id', 'order_id'])),\n createdAt: typeof plain.created_at === 'string' ? new Date(plain.created_at) : plain.created_at,\n updatedAt: typeof plain.updated_at === 'string' ? new Date(plain.updated_at) : plain.updated_at,\n personId: plain.person_id,\n orderId: plain.order_id,\n })\n\n private bindReviewToHasura = (review: ProductReview): ProductReviewFields => ({\n ...is<ProductReviewFields>(omit(review, ['productId', 'createdAt', 'updatedAt', 'personId', 'orderId'])),\n person_id: review.personId,\n order_id: review.orderId,\n })\n}\n","import {\n FindRepositoryParams,\n GetRepositoryParams,\n RepositoryFindResult,\n ShopPrice,\n UpdateRepositoryParams,\n VariantRepository,\n Where,\n} from '../../../../domain'\nimport { NotFoundError } from '../../../../errors'\nimport { Base, isNil } from '../../../../utils'\nimport { HasuraGraphQLColumnType } from '../../enums'\nimport { withCrudHasuraGraphQL, withHasuraGraphQL } from '../../mixins'\nimport { VariantHasuraGraphQL } from '../../models'\nimport { HasuraGraphQLAuthOptions } from '../../types'\n\nexport class VariantHasuraGraphQLRepository\n extends withCrudHasuraGraphQL(withHasuraGraphQL<VariantHasuraGraphQL>(Base))\n implements VariantRepository\n{\n constructor(endpoint: string, authOptions: HasuraGraphQLAuthOptions) {\n super({\n tableName: 'product',\n model: VariantHasuraGraphQL,\n endpoint,\n authOptions,\n fields: [\n { id: { columnName: 'id', to: (value: string) => +value, from: (value: number) => value.toString() } },\n { firestoreId: { columnName: 'firestore_id' } },\n {\n productId: {\n columnName: 'main_product_id',\n to: (value: string) => +value,\n from: (value: number) => value?.toString(),\n },\n },\n { EAN: { columnName: 'ean' } },\n { costPrice: { columnName: 'cost_price' } },\n {\n price: {\n columnName: 'price',\n from: (price: number, data: Record<string, any>): ShopPrice => ({\n price,\n fullPrice: data.full_price,\n subscriberDiscountPercentage: data.subscriber_discount_percentage,\n subscriberPrice: data.subscriber_price,\n }),\n bindFindFilter: (sentence) => {\n const filters = Object.values(sentence).shift()\n\n return {\n ...((filters?.price || filters?.price === 0) && { price: filters.price }),\n ...((filters.fullPrice || filters.fullPrice === 0) && { full_price: filters.fullPrice }),\n ...((filters.subscriberDiscountPercentage || filters.subscriberDiscountPercentage === 0) && {\n subscriber_discount_percentage: filters.subscriberDiscountPercentage,\n }),\n ...((filters.subscriberPrice || filters.subscriberPrice === 0) && {\n subscriber_price: filters.subscriberPrice,\n }),\n }\n },\n bindPersistData: (priceData: VariantHasuraGraphQL['price']) => ({\n ...(priceData?.price >= 0 && { price: priceData.price }),\n ...(priceData.fullPrice >= 0 && { full_price: priceData.fullPrice }),\n ...(priceData.subscriberDiscountPercentage >= 0 && {\n subscriber_discount_percentage: priceData.subscriberDiscountPercentage,\n }),\n ...(priceData.subscriberPrice >= 0 && { subscriber_price: priceData.subscriberPrice }),\n }),\n },\n },\n { fullPrice: { columnName: 'full_price' } },\n { subscriberDiscountPercentage: { columnName: 'subscriber_discount_percentage' } },\n { subscriberPrice: { columnName: 'subscriber_price' } },\n 'sku',\n {\n stock: {\n columnName: 'stock',\n from: (quantity: number) => ({ quantity }),\n to: (value: VariantHasuraGraphQL['stock']) => (isNil(value?.quantity) ? value : value?.quantity),\n },\n },\n 'weight',\n { name: { to: () => '', from: (): undefined => undefined } },\n { hasVariants: { columnName: 'has_variants', to: () => false, from: (): undefined => undefined } },\n { createdAt: { columnName: 'created_at' } },\n { updatedAt: { columnName: 'updated_at' } },\n {\n grade: {\n columnName: 'grade',\n type: HasuraGraphQLColumnType.Jsonb,\n },\n },\n ],\n })\n }\n\n override async get(identifiers: GetRepositoryParams<VariantHasuraGraphQL>): Promise<VariantHasuraGraphQL> {\n const variant = Number.isNaN(+identifiers.id)\n ? (await this.find({ filters: { firestoreId: identifiers.id } })).data?.[0]\n : await super.get(identifiers)\n\n if (!variant.productId) throw new NotFoundError(`Variant not found, it is a product`)\n\n return variant\n }\n\n override async find(\n params?: FindRepositoryParams<VariantHasuraGraphQL>,\n ): Promise<RepositoryFindResult<VariantHasuraGraphQL>> {\n const { filters, ...options } = params || {}\n\n return super.find({ ...options, filters: { productId: { operator: Where.ISNOTNULL }, ...filters } })\n }\n\n override async update(params: UpdateRepositoryParams<VariantHasuraGraphQL>): Promise<VariantHasuraGraphQL> {\n const { productId, id: checkId, ...data } = params\n const dataWithProductId = this.paramsToPlain({ id: checkId, productId })\n const id = await this.getId(dataWithProductId.id)\n const product = await super.update({ id, ...data })\n\n product.productId = dataWithProductId.productId\n\n return product\n }\n\n private async getId(id: string): Promise<string> {\n if (!Number.isNaN(+id)) return id\n\n const { data } = await this.find({ filters: { firestoreId: id } })\n\n if (data?.[0]?.id) return data?.[0]?.id\n\n throw new NotFoundError(`Product with id ${id} not found`)\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getLodash","isString","isNaN","Answers.AccessoryImportances","Answers.BeardProblems","Answers.BeardSizes","Answers.BeautyProductImportances","Answers.BodyProblems","Answers.BodyShapes","Answers.BodyTattoos","Answers.FaceSkinOilinesses","Answers.FaceSkinProblems","Answers.FaceSkinTones","Answers.FamilyIncomes","Answers.FragranceImportances","Answers.HairColors","Answers.HairProblems","Answers.HairStrands","Answers.HairTypes","Answers.ProductSpents","query"],"mappings":";;;;;;;;;;;;;MAWa,SAAS,CAAA;AACpB,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,MAAM,GAAI,IAAI,CAAC,WAAuC,CAAC,iBAAiB,CAAC,MAAM,CACnF,CAAC,KAAK,KAAK,KAAK,KAAK,YAAY,CAClC,CAAA;AAED,QAAA,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAA+B,CAAC,EAAE,CAAC,EAClF,EAA+C,CAChD,CAAA;KACF;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAQ,IAAI,CAAC,WAAoD,CAAC,iBAAiB,CAAA;KACpF;AAED,IAAA,WAAA,CAAY,IAAqB,EAAA;AAC/B,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KAC1B;IAED,OAAO,UAAU,CAAkD,IAAwC,EAAA;QACzG,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;KACzC;IAED,OAAO,OAAO,CAAkD,KAAU,EAAA;QACxE,OAAO,KAAK,YAAY,IAAI,CAAA;KAC7B;IAED,OAAO,GAAA;AACL,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAA;KAC7B;AACF;;IC1CW,MAaX;AAbD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,IAAa,CAAA;AACb,IAAA,KAAA,CAAA,WAAA,CAAA,GAAA,IAAgB,CAAA;AAChB,IAAA,KAAA,CAAA,IAAA,CAAA,GAAA,GAAQ,CAAA;AACR,IAAA,KAAA,CAAA,KAAA,CAAA,GAAA,IAAU,CAAA;AACV,IAAA,KAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,KAAA,CAAA,OAAA,CAAA,GAAA,QAAgB,CAAA;AAChB,IAAA,KAAA,CAAA,IAAA,CAAA,GAAA,GAAQ,CAAA;AACR,IAAA,KAAA,CAAA,KAAA,CAAA,GAAA,IAAU,CAAA;AACV,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,KAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACpB,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,KAAA,CAAA,WAAA,CAAA,GAAA,aAAyB,CAAA;AAC3B,CAAC,EAbW,KAAK,KAAL,KAAK,GAahB,EAAA,CAAA,CAAA;;ICbW,oBAMX;AAND,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EANW,mBAAmB,KAAnB,mBAAmB,GAM9B,EAAA,CAAA,CAAA;;ICNW,qBAIX;AAJD,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,gBAAA,CAAA,GAAA,0BAAsC,CAAA;AACtC,IAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,uBAAyC,CAAA;AACzC,IAAA,oBAAA,CAAA,4BAAA,CAAA,GAAA,mEAA2F,CAAA;AAC7F,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,GAI/B,EAAA,CAAA,CAAA;;ICJW,KAUX;AAVD,CAAA,UAAY,IAAI,EAAA;AACd,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,OAAY,CAAA;AACZ,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,kBAA8B,CAAA;AAC9B,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,YAAmB,CAAA;AACnB,IAAA,IAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,IAAA,CAAA,YAAA,CAAA,GAAA,qBAAkC,CAAA;AAClC,IAAA,IAAA,CAAA,OAAA,CAAA,GAAA,WAAmB,CAAA;AACnB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACX,CAAC,EAVW,IAAI,KAAJ,IAAI,GAUf,EAAA,CAAA,CAAA;;ICVW,cAQX;AARD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC7B,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,YAAkB,CAAA;AAClB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,eAAsB,CAAA;AACtB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,iBAA4B,CAAA;AAC5B,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,uBAAkC,CAAA;AAClC,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,iBAA0B,CAAA;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,YAA2B,CAAA;AAC7B,CAAC,EARW,aAAa,KAAb,aAAa,GAQxB,EAAA,CAAA,CAAA;;ICRW,WAMX;AAND,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,QAAc,CAAA;AACd,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,YAAgB,CAAA;AAChB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,QAAmB,CAAA;AACnB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,WAAqB,CAAA;AACvB,CAAC,EANW,UAAU,KAAV,UAAU,GAMrB,EAAA,CAAA,CAAA;;ICNW,yBAKX;AALD,CAAA,UAAY,wBAAwB,EAAA;AAClC,IAAA,wBAAA,CAAA,mBAAA,CAAA,GAAA,oEAAmF,CAAA;AACnF,IAAA,wBAAA,CAAA,oCAAA,CAAA,GAAA,+FAA0H,CAAA;AAC1H,IAAA,wBAAA,CAAA,kBAAA,CAAA,GAAA,gIAA8I,CAAA;AAC9I,IAAA,wBAAA,CAAA,sBAAA,CAAA,GAAA,oCAA2D,CAAA;AAC7D,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,GAKnC,EAAA,CAAA,CAAA;;ICLW,aAUX;AAVD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,4BAA+B,CAAA;AAC/B,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,UAAuB,CAAA;AACvB,IAAA,YAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC,CAAA;AACpC,IAAA,YAAA,CAAA,eAAA,CAAA,GAAA,SAAyB,CAAA;AACzB,IAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,oBAAgC,CAAA;AAChC,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACtB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,aAAyB,CAAA;AACzB,IAAA,YAAA,CAAA,eAAA,CAAA,GAAA,iBAAiC,CAAA;AACjC,IAAA,YAAA,CAAA,qBAAA,CAAA,GAAA,yBAA0C,CAAA;AAC5C,CAAC,EAVW,YAAY,KAAZ,YAAY,GAUvB,EAAA,CAAA,CAAA;;ICVW,WAMX;AAND,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,OAAc,CAAA;AACd,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,eAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,eAAqB,CAAA;AACrB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACxB,CAAC,EANW,UAAU,KAAV,UAAU,GAMrB,EAAA,CAAA,CAAA;;ICNW,YAIX;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,SAAgB,CAAA;AAChB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,0BAAuC,CAAA;AACvC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,wBAAuC,CAAA;AACzC,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA;;ICJW,mBAMX;AAND,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY,CAAA;AACZ,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,SAAgB,CAAA;AAChB,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,4BAAmC,CAAA;AACrC,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,GAM7B,EAAA,CAAA,CAAA;;ICNW,iBASX;AATD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC7B,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,UAAyB,CAAA;AACzB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,OAAkB,CAAA;AAClB,IAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,mBAAwC,CAAA;AACxC,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,QAAmB,CAAA;AACnB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,eAAsB,CAAA;AACtB,IAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,oBAAgC,CAAA;AAClC,CAAC,EATW,gBAAgB,KAAhB,gBAAgB,GAS3B,EAAA,CAAA,CAAA;;ICTW,cAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B,CAAA;AAC1B,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,kBAA4B,CAAA;AAC5B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,mBAA4B,CAAA;AAC5B,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,QAAe,CAAA;AACf,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,cAA0B,CAAA;AAC5B,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;ICPW,cAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,kBAA0B,CAAA;AAC1B,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,sBAA2C,CAAA;AAC3C,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,uBAA6C,CAAA;AAC7C,IAAA,aAAA,CAAA,sBAAA,CAAA,GAAA,wBAA+C,CAAA;AAC/C,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,kBAAoC,CAAA;AACpC,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,uBAAoC,CAAA;AACtC,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;ICPW,qBAIX;AAJD,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,gBAAA,CAAA,GAAA,0BAAsC,CAAA;AACtC,IAAA,oBAAA,CAAA,sBAAA,CAAA,GAAA,6CAAoE,CAAA;AACpE,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,mDAA8D,CAAA;AAChE,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,GAI/B,EAAA,CAAA,CAAA;;ICJW,WASX;AATD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,iBAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,gBAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,cAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,iBAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,OAAiB,CAAA;AACjB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,WAAmB,CAAA;AACrB,CAAC,EATW,UAAU,KAAV,UAAU,GASrB,EAAA,CAAA,CAAA;;ICTW,aASX;AATD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC7B,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,OAAkB,CAAA;AAClB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,OAAc,CAAA;AACd,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,YAAmB,CAAA;AACnB,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,cAAwB,CAAA;AACxB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,SAAoB,CAAA;AACpB,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,iBAA8B,CAAA;AAC9B,IAAA,YAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC/B,CAAC,EATW,YAAY,KAAZ,YAAY,GASvB,EAAA,CAAA,CAAA;;ICTW,YAOX;AAPD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,YAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,UAAgB,CAAA;AAChB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,YAAmB,CAAA;AACnB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,WAAmB,CAAA;AACnB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,UAAiB,CAAA;AACjB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,YAAoB,CAAA;AACtB,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA;;ICPW,UAMX;AAND,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,MAAe,CAAA;AACf,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,UAAiB,CAAA;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,UAAkB,CAAA;AAClB,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,YAAmB,CAAA;AACrB,CAAC,EANW,SAAS,KAAT,SAAS,GAMpB,EAAA,CAAA,CAAA;;ICNW,eAKX;AALD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,iBAA0B,CAAA;AAC1B,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACpB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,SAAoB,CAAA;AACtB,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA;;ICLW,cAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,eAAqB,CAAA;AACrB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACnC,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,uBAAoC,CAAA;AACtC,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;ICPW,SAOX;AAPD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,sBAA4B,CAAA;AAC5B,IAAA,QAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,QAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,SAAe,CAAA;AACf,IAAA,QAAA,CAAA,cAAA,CAAA,GAAA,kBAA4B,CAAA;AAC5B,IAAA,QAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AAC3B,CAAC,EAPW,QAAQ,KAAR,QAAQ,GAOnB,EAAA,CAAA,CAAA;;ICPW,cAEX;AAFD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,MAAc,CAAA;AAChB,CAAC,EAFW,aAAa,KAAb,aAAa,GAExB,EAAA,CAAA,CAAA;;ICFW,cAGX;AAHD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,+BAA0C,CAAA;AAC1C,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,KAAb,aAAa,GAGxB,EAAA,CAAA,CAAA;;ICHW,YAIX;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,qBAAwB,CAAA;AACxB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,qBAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,sCAAsC,CAAA;AACxC,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA;;ICJW,OAGX;AAHD,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,MAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACzB,CAAC,EAHW,MAAM,KAAN,MAAM,GAGjB,EAAA,CAAA,CAAA;;ACGK,MAAO,OAAQ,SAAQ,SAAsC,CAAA;AAYjE,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;KAChC;AACF;;ACfK,MAAO,OAAQ,SAAQ,SAAkB,CAAA;AAyG7C,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AApFC,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC5B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACzB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACvB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,uBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC9B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;AACb,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACf,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC5B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;;AACjB,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC1B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACb,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACvB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACf,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA;;ACpGrB,MAAO,mBAAoB,SAAQ,SAA8D,CAAA;AAUrG,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;KAChC;AACF,CAAA;AANC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACX,OAAO,CAAA;AAAA,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACbZ,MAAgB,OAAyC,SAAQ,SAA+B,CAAA;AAmBpG,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;MCxBY,GAAG,GAAG,CAAC,MAAW,EAAE,IAAY,EAAE,YAAkB,KAAKA,KAAS,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY;;ACFpG,SAAU,EAAE,CAAI,KAAU,EAAA;AAC9B,IAAA,OAAO,KAAK,CAAA;AACd;;MCAa,MAAM,GAAG,CAAC,KAAa,KAClCC,UAAQ,CAAC,KAAK,CAAC,IAAI,iFAAiF,CAAC,IAAI,CAAC,KAAK;;MCHpG,IAAI,CAAA;AACf,IAAA,WAAA,CAAY,GAAG,IAAgB,EAAA;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;KAC7B;AACF;;ACDY,MAAA,aAAa,GAAG,CAAC,KAAa,KAAmB;AAC5D,IAAA,IAAI,CAACA,UAAQ,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAA;AAClC,IAAA,IACE,CAAC,kDAAkD,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/D,QAAA,CAAC,mEAAmE,CAAC,IAAI,CAAC,KAAK,CAAC;AAEhF,QAAA,OAAO,KAAK,CAAA;AAEd,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;AAE5B,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAAE,QAAA,OAAO,KAAK,CAAA;AAEvC,IAAA,OAAO,IAAI,CAAA;AACb;;ACEA,MAAM,EACJ,KAAK,EACL,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,SACTC,OAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,GAAG,GACJ,GAAG;;ICjCQ,cAIX;AAJD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAChB,IAAA,aAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACT,CAAC,EAJW,aAAa,KAAb,aAAa,GAIxB,EAAA,CAAA,CAAA;;ICJW,YAOX;AAPD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,WAAA,CAAA,WAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;;;;;AAKhB,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA;;ICPW,eAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,cAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,cAAA,CAAA,cAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AAChB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;ICHW,cAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB,IAAA,aAAA,CAAA,aAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB,IAAA,aAAA,CAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAqB,CAAA;AACrB,IAAA,aAAA,CAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAuB,CAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB,CAAA;AACpB,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;ACGD,MAAM,iBAAiB,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;AAE7C,MAAO,MAAO,SAAQ,SAAiB,CAAA;AA4B3C,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;KACpC;AAED,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;IAED,OAAO,YAAY,CAAC,MAAc,EAAA;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC;AACrB,YAAA,QAAQ,EAAE,CAAG,EAAA,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA;YACzB,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,YAAY,EAAE,aAAa,CAAC,SAAS;AACrC,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,eAAe,EAAE,IAAI;YACrB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC;AACpD,SAAA,CAAC,CAAA;KACH;AACF,CAAA;AA5BC,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACP,CAAA,EAAA,MAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAE3B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AACN,CAAA,EAAA,MAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA;;ACpC3B,MAAO,gBAAiB,SAAQ,SAA2B,CAAA;AAQ/D,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;ACPK,MAAO,aAAc,SAAQ,SAAkD,CAAA;IAM1E,OAAO,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAE7B,OAAO,KAAK,CAAC,EAAE,CAAA;AAEf,QAAA,OAAO,KAAK,CAAA;KACb;AAED,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;KACxB;AACF;;ACdK,MAAO,IAAK,SAAQ,SAAe,CAAA;IAuBvC,OAAgB,UAAU,CAExB,IAA2C,EAAA;QAE3C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAS,CAAA;AAE/C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACxB,YAAA,QAAQ,CAAC,WAAW,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,EAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,CAAE,CAAA,GAAG,EAAE,CAAA,CAAE,CAAA;AAE/F,QAAA,OAAO,QAAe,CAAA;KACvB;IAEQ,OAAO,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAE7B,OAAO,KAAK,CAAC,aAAa,CAAA;AAE1B,QAAA,OAAO,KAAK,CAAA;KACb;AAED,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AA1BC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,aAAa,CAAC;8BACV,aAAa,CAAA;AAAA,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA;;AClBzB,MAAO,YAAa,SAAQ,SAAuB,CAAA;AA2BvD,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AAlBC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC;8BACX,IAAI,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACV,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,gBAAgB,CAAC;8BACX,gBAAgB,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,MAAM,CAAC;8BACV,MAAM,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACf,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;;AACD,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,mBAAmB,CAAC;;AACD,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACjC3B,MAAO,WAAY,SAAQ,OAA+B,CAAA;AAI9D,IAAA,WAAoB,iBAAiB,GAAA;AACnC,QAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;KACxB;AACF;;ACPK,MAAO,iBAAkB,SAAQ,SAAoD,CAAA;AAWzF,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;KACxB;AACF;;AChBK,MAAO,IAAK,SAAQ,SAAe,CAAA;AAKvC,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;ACRK,MAAO,iBAAkB,SAAQ,WAAW,CAAA;AAChD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;ICAW,cAGX;AAHD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAHW,aAAa,KAAb,aAAa,GAGxB,EAAA,CAAA,CAAA,CAAA;MASY,cAAc,CAAA;IACzB,WAA6B,CAAA,WAAkC,EAAmB,cAA8B,EAAA;QAAnF,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;QAAmB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KAAI;IAEpH,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAgB,EAAE,YAA0B,EAAA;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;AACpD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAS,CAAC,CAAA;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAE9C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI,CAAA;AAC7B,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;AAEzF,QAAA,MAAM,IAAI,iBAAiB,CAAC,qBAAqB,CAAC,CAAA;KACnD;AAEO,IAAA,kBAAkB,CACxB,YAA0B,EAAA;AAE1B,QAAA,OAAO,YAAY,KAAK,aAAa,CAAC,cAAc,GAAG,4BAA4B,GAAG,kBAAkB,CAAA;KACzG;IAEO,MAAM,uBAAuB,CAAC,IAAmB,EAAA;AACvD,QAAA,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AAC7B,YAAA,GAAG,IAAI;AACP,YAAA,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpB,SAAS;YACT,QAAQ;AACR,YAAA,iBAAiB,EAAE,KAAK;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,cAAc,EAAE,cAAc,CAAC,MAAM;YACrC,IAAI,EAAE,QAAQ,CAAC,YAAY;AAC5B,SAAA,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAC1C;AACF;;ACpDK,MAAO,0BAA2B,SAAQ,WAAW,CAAA;AACzD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;ACJK,MAAO,iBAAkB,SAAQ,WAAW,CAAA;IAChD,WAAY,CAAA,OAAO,GAAG,eAAe,EAAA;QACnC,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;MCCY,QAAQ,CAAA;IACnB,WAA6B,CAAA,eAAgC,EAAmB,cAA8B,EAAA;QAAjF,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAAmB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KAAI;IAElH,MAAM,QAAQ,CAAC,MAAsB,EAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAC9C,MAAM,WAAW,GAAG,CAAA,EAAG,MAAM,CAAC,SAAS,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,CAAA,CAAE,CAAA;AAE5D,QAAA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;YACnE,MAAM,IAAI,0BAA0B,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAC,GAAG,CAAiB,eAAA,CAAA,CAAC,CAAA;AACtF,QAAA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;YACvE,MAAM,IAAI,0BAA0B,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAC,KAAK,CAAiB,eAAA,CAAA,CAAC,CAAA;QAE3F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC/C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK;YACL,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,WAAW;YACX,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC1B,SAAA,CAAC,CAAA;QAEF,OAAO,MAAM,CAAC,QAAQ,CAAA;QAEtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC5C,YAAA,GAAG,MAAM;YACT,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK;YACL,WAAW;YACX,IAAI,EAAE,QAAQ,CAAC,GAAG;YAClB,WAAW,EAAE,IAAI,IAAI,EAAE;YACvB,YAAY,EAAE,IAAI,IAAI,EAAE;AACzB,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAA;KACZ;AACF;;MC1CY,OAAO,CAAA;AAClB,IAAA,WAAA,CAA6B,WAAkC,EAAA;QAAlC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;KAAI;AAEnE,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;KACjC;AACF;;MCNY,gBAAgB,CAAA;AAC3B,IAAA,WAAA,CAA6B,WAAkC,EAAA;QAAlC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;KAAI;IAEnE,MAAM,SAAS,CAAC,KAAa,EAAA;QAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAA;KACrD;AACF;;ACHK,MAAO,QAAS,SAAQ,SAAmB,CAAA;IAmB/C,gBAAgB,GAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AAED,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;IC/BW,kBAIX;AAJD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;;ICJW,MAKX;AALD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,KAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,KAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EALW,KAAK,KAAL,KAAK,GAKhB,EAAA,CAAA,CAAA;;ACEK,MAAO,OAAQ,SAAQ,SAAkB,CAAA;IAmC7C,gBAAgB,GAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AAED,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AAVC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,UAAU,CAAC;;AACG,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA;;AChCtB,MAAO,UAAW,SAAQ,SAA4C,CAAA;AAW1E,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;KACpC;AACF,CAAA;AATC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACf,OAAO,CAAA;AAAA,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEZ,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACX,OAAO,CAAA;AAAA,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACXZ,MAAO,OAAQ,SAAQ,SAA6C,CAAA;IAaxE,gBAAgB,GAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AAED,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;KAC3B;AACF;;IC1BW,YASX;AATD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C,CAAA;AAC7C,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,mBAAgC,CAAA;AAChC,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,qBAAkC,CAAA;AAClC,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,4BAA+C,CAAA;AAC/C,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC7B,CAAC,EATW,WAAW,KAAX,WAAW,GAStB,EAAA,CAAA,CAAA;;ACPK,MAAO,QAAS,SAAQ,OAAO,CAAA;AAMpC;;ACNK,MAAO,cAAe,SAAQ,SAAyB,CAAA;AAc3D,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;ACRK,MAAO,QAAS,SAAQ,SAAmB,CAAA;AA0B/C,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AAhBC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,QAAQ,CAAC;;AACC,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC;8BACV,IAAI,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACX,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACF,OAAO,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACzB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,cAAc,CAAC;8BAChB,cAAc,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACzB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,MAAM,CAAC;8BACV,MAAM,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA;;AC7BX,MAAO,KAAM,SAAQ,QAAQ,CAAA;AAOlC,CAAA;AAFC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACX,OAAO,CAAA;AAAA,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACHZ,MAAO,oBAAqB,SAAQ,SAA+B,CAAA;AAoBvE,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AAZC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,gBAAgB,CAAC;8BACX,gBAAgB,CAAA;AAAA,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,MAAM,CAAC;8BACV,MAAM,CAAA;AAAA,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA;;ACtBX,MAAO,OAAQ,SAAQ,SAAkB,CAAA;AAe7C,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AANC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,QAAQ,CAAC;;AACC,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA;;IClBZ,WAkBX;AAlBD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,qBAA4C,CAAA;AAC5C,IAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC,CAAA;AAChC,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,WAAwB,CAAA;AACxB,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,yBAAqD,CAAA;AACrD,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,WAAwB,CAAA;AACxB,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,kBAAuC,CAAA;AACvC,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,kBAAuC,CAAA;AACvC,IAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,cAA+B,CAAA;AAC/B,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,qBAA4C,CAAA;AAC5C,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,WAAwB,CAAA;AACxB,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,UAAsB,CAAA;AACtB,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAChC,CAAC,EAlBW,UAAU,KAAV,UAAU,GAkBrB,EAAA,CAAA,CAAA;;IClBW,iBAkBX;AAlBD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,sBAAA,CAAA,GAAA,qDAAkE,CAAA;AAClE,IAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,yCAAqD,CAAA;AACrD,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,2DAAmE,CAAA;AACnE,IAAA,gBAAA,CAAA,2BAAA,CAAA,GAAA,2FAA6G,CAAA;AAC7G,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,6EAA8E,CAAA;AAC9E,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,2BAAwC,CAAA;AACxC,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,gCAA0C,CAAA;AAC1C,IAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,4DAA4E,CAAA;AAC5E,IAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,0CAA+D,CAAA;AAC/D,IAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,uBAAwC,CAAA;AACxC,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,sGAAiH,CAAA;AACjH,IAAA,gBAAA,CAAA,sBAAA,CAAA,GAAA,oDAAsE,CAAA;AACtE,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,6CAAqD,CAAA;AACrD,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,qEAAgF,CAAA;AAChF,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,0BAAoC,CAAA;AACpC,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,2BAAkC,CAAA;AAClC,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,oFAA+F,CAAA;AACjG,CAAC,EAlBW,gBAAgB,KAAhB,gBAAgB,GAkB3B,EAAA,CAAA,CAAA;;MCXY,qBAAqB,CAAA;IAChC,OAAO,UAAU,CAAC,MAAkB,EAAA;AAClC,QAAA,QAAQ,MAAM;YACZ,KAAK,UAAU,CAAC,oBAAoB;gBAClC,OAAOC,oBAA4B,CAAA;YACrC,KAAK,UAAU,CAAC,cAAc;gBAC5B,OAAOC,aAAqB,CAAA;YAC9B,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAOC,UAAkB,CAAA;YAC3B,KAAK,UAAU,CAAC,yBAAyB;gBACvC,OAAOC,wBAAgC,CAAA;YACzC,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAOC,YAAoB,CAAA;YAC7B,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAOC,UAAkB,CAAA;YAC3B,KAAK,UAAU,CAAC,YAAY;gBAC1B,OAAOC,WAAmB,CAAA;YAC5B,KAAK,UAAU,CAAC,kBAAkB;gBAChC,OAAOC,kBAA0B,CAAA;YACnC,KAAK,UAAU,CAAC,kBAAkB;gBAChC,OAAOC,gBAAwB,CAAA;YACjC,KAAK,UAAU,CAAC,cAAc;gBAC5B,OAAOC,aAAqB,CAAA;YAC9B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAOC,aAAqB,CAAA;YAC9B,KAAK,UAAU,CAAC,oBAAoB;gBAClC,OAAOC,oBAA4B,CAAA;YACrC,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAOC,UAAkB,CAAA;YAC3B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAOC,YAAoB,CAAA;YAC7B,KAAK,UAAU,CAAC,YAAY;gBAC1B,OAAOC,WAAmB,CAAA;YAC5B,KAAK,UAAU,CAAC,SAAS;gBACvB,OAAOC,SAAiB,CAAA;YAC1B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAOC,aAAqB,CAAA;AAC/B,SAAA;KACF;IAED,OAAO,YAAY,CAAC,MAAkB,EAAA;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAA4B,CAAA;AAE/G,QAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAA;KACnC;AACF;;ACjDK,MAAO,IAAK,SAAQ,SAAe,CAAA;AAevC,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;AClBK,MAAO,QAAS,SAAQ,SAAmB,CAAA;AAI/C,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;ACRK,MAAO,oBAAqB,SAAQ,WAAW,CAAA;AACnD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;ACJK,MAAO,qBAAsB,SAAQ,WAAW,CAAA;AAGpD,IAAA,WAAA,CAAqB,IAAc,EAAA;QACjC,KAAK,CAAC,CAAuB,oBAAA,EAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAA,CAAC,CAAA;QAD5B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAU;AAGjC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;KACtB;AACF;;ACRK,MAAO,aAAc,SAAQ,WAAW,CAAA;AAC5C,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;ACJK,MAAO,sBAAuB,SAAQ,WAAW,CAAA;AACrD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;MCKY,YAAY,CAAA;AACvB,IAAA,WAAA,CAA6B,MAAgC,EAAA;QAAhC,IAAM,CAAA,MAAA,GAAN,MAAM,CAA0B;KAAI;IAEjE,MAAM,GAAG,CAAC,KAAa,EAAA;QACrB,IAAI;AACF,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC;gBAC3B,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA;AAClC,gBAAA,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE;AAC9D,aAAA,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,OAAO,CAAA;AACpB,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC;AAAE,gBAAA,MAAM,KAAK,CAAA;AAE1C,YAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AACvC,SAAA;KACF;AAED,IAAA,MAAM,KAAK,CAAC,KAAa,EAAE,KAAU,EAAA;AACnC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC;YAC3B,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA;AAClC,YAAA,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE;AAC7D,YAAA,IAAI,EAAE,KAAK;AACZ,SAAA,CAAC,CAAA;QAEF,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;AAC5B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;SACrB,CAAA;KACF;AAED,IAAA,MAAM,IAAI,CAAC,KAAa,EAAE,IAAgB,EAAA;AACxC,QAAA,MAAM,KAAK,CAAC;YACV,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA;AAClC,YAAA,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE;YAC7D,IAAI;AACL,SAAA,CAAC,CAAA;KACH;IAED,MAAM,MAAM,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,KAAK,CAAC;YACV,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA;AAClC,YAAA,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE;AAC9D,SAAA,CAAC,CAAA;KACH;AACF;;MCxDY,aAAa,CAAA;AACxB,IAAA,WAAA,CAA6B,OAA8B,EAAA;QAA9B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAuB;KAAI;IAE/D,MAAM,GAAG,CAAC,EAAU,EAAA;AAClB,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAE,CAAC,CAAA;AAE1D,QAAA,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;KAChC;AAED,IAAA,MAAM,QAAQ,CAAC,GAAa,EAAE,OAA0D,EAAA;AACtF,QAAA,MAAM,MAAM,GAAG;YACb,OAAO;YACP,IAAI;YACJ,QAAQ;YACR,YAAY;YACZ,MAAM;YACN,OAAO;YACP,KAAK;YACL,OAAO;YACP,MAAM;YACN,SAAS;YACT,WAAW;YACX,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,MAAM;YACN,aAAa;YACb,MAAM;SACP,CAAA;AACD,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE;AAC5D,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE;AACJ,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,KAAK,EAAE;AACL,gCAAA,GAAG,EAAE,GAAG;AACT,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE;AACJ,gCAAA,SAAS,EAAE,IAAI;AAChB,6BAAA;AACF,yBAAA;wBACD,IAAI,OAAO,EAAE,QAAQ;AACnB,8BAAE;AACE,gCAAA;AACE,oCAAA,KAAK,EAAE;AACL,wCAAA,gBAAgB,EAAE;AAChB,4CAAA,EAAE,EAAE,CAAC;AACN,yCAAA;AACF,qCAAA;AACF,iCAAA;AACF,6BAAA;8BACD,EAAE,CAAC;AACR,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAClD,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;KAC1D;IAED,MAAM,IAAI,CAAC,OAA6B,EAAA;QACtC,OAAO,OAAO,CAAC,SAAS,CAAA;QACxB,OAAO,OAAO,CAAC,SAAS,CAAA;QACxB,OAAO,OAAO,CAAC,WAAW,CAAA;QAE1B,IAAI;YACF,IAAI,CAAC,OAAO,CAAC,WAAW;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAE5E,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AAEnC,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAiB,cAAA,EAAA,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;AACnF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC;AAAE,gBAAA,MAAM,KAAK,CAAA;AAE1C,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAE5B,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAiB,cAAA,EAAA,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;AAC1E,SAAA;KACF;IAED,MAAM,MAAM,CAAC,OAA6B,EAAA;QACxC,IAAI,CAAC,OAAO,CAAC,WAAW;YAAE,OAAM;QAEhC,IAAI;YACF,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AAEnC,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAiB,cAAA,EAAA,OAAO,CAAC,WAAW,CAAE,CAAA,CAAC,CAAA;AAClE,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAiB,cAAA,EAAA,OAAO,CAAC,EAAE,CAAE,CAAA,CAAC,CAAA;AACzD,SAAA;KACF;AACF;;ACvFY,MAAA,aAAa,GAAG,CAC3B,SAAY,KACwC;AACpD,IAAA,MAAM,kBAAkB,GAAG,CAAC,IAAS,KACnC,IAAI;AACJ,QAAA,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACpB,OAAO,IAAI,KAAK,QAAQ;AACxB,QAAA,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,WAAW;AACtC,QAAA,EAAE,SAAS,IAAI,IAAI,CAAC,CAAA;AACtB,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAyB,EAAE,OAAe,KAAyB;AACnF,QAAA,IAAI,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;QAChE,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;AAC/F,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;AAEnG,QAAA,OAAO,IAAI,CAAA;AACb,KAAC,CAAA;AACD,IAAA,MAAM,qBAAqB,GAAG,CAAC,IAAyB,KAA4D;AAClH,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAC7B,CAAC,MAAM,EAAE,GAAG,MAAM;AAChB,YAAA,GAAG,MAAM;YACT,CAAC,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,kBAAE,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;kBAChC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,sBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAY,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;sBACzG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;SAC7B,CAAC,EACF,EAA4D,CAC7D,CAAA;AACH,KAAC,CAAA;IAED,OAAO,cAAc,SAAS,CAAA;AAAvB,QAAA,WAAA,GAAA;;YAEL,IAAc,CAAA,cAAA,GAAW,EAAE,CAAA;SAkC5B;AA9BC,QAAA,UAAU,CAAC,IAAa,EAAA;YACtB,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAA;SACxG;QAED,kBAAkB,GAAA;YAIhB,OAAO;gBACL,WAAW,EAAE,CAAC,IAAW,MAAoB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACnF,gBAAA,aAAa,EAAE,CAAC,IAAkC,KAAW;AAC3D,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;oBACxB,IAAI,UAAU,GAA2D,IAAI,CAAA;oBAE7E,IAAI;wBACF,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;AAE3B,wBAAA,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;AAExC,wBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;AACxD,qBAAA;AAAC,oBAAA,OAAO,KAAK,EAAE;wBACd,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;AAC3B,wBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;AAChD,wBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAEpB,wBAAA,MAAM,KAAK,CAAA;AACZ,qBAAA;iBACF;aACF,CAAA;SACF;KACF,CAAA;AACH;;ACzEa,MAAA,WAAW,GAAG,CAA2C,SAAiC,KAAI;IACzG,OAAO,cAAc,SAAS,CAAA;AAC5B,QAAA,OAAO,CAA+B,QAAuD,EAAA;AAC3F,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC3B,gBAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAA6B,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AACnE,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAA6B,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AACxE,aAAA;SACF;AAED,QAAA,eAAe,CACb,UAAkC,EAAA;YAElC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAA;SAC3E;KACF,CAAA;AACH;;ACfa,MAAA,gBAAgB,GAAG,CAI9B,SAAgF,KAI9E;IACF,OAAO,MAAM,YAAa,SAAQ,SAAS,CAAA;QACzC,MAAM,GAAG,CAAC,WAAyC,EAAA;AACjD,YAAA,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,GAAG,CACD,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,EAClE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAC9C,CACF,CAAA;AACD,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;YAE1B,IAAI,KAAK,CAAC,IAAI,CAAC;AAAE,gBAAA,MAAM,IAAI,aAAa,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAY,UAAA,CAAA,CAAC,CAAA;AAE7F,YAAA,OAAO,IAAI,CAAA;SACZ;AAED,QAAA,yBAAyB,CAAC,WAAyC,EAAA;AACjE,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,kBAAE,CAAG,EAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAI,CAAA,EAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,cAAc,CAAE,CAAA;AACrG,kBAAE,IAAI,CAAC,cAAc,CAAA;SACxB;KACK,CAAA;AACV;;ACrCA,IAAY,kBAOX,CAAA;AAPD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EAPW,kBAAkB,KAAlB,kBAAkB,GAO7B,EAAA,CAAA,CAAA;;ACmCY,MAAA,iBAAiB,GAAG,CAI/B,SAAgF,KAI9E;AACF,IAAA,MAAM,qBAAqB,GAAG,CAAC,MAAW,KACxC,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAC1B,IAAA,MAAM,kBAAkB,GAAG,CAAC,MAAuC,KAAS;AAC1E,QAAA,OAAO,qBAAqB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAA;AAC9D,KAAC,CAAA;IACD,MAAM,iBAAiB,GAAG,CAAC,KAAU,KACnC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACzE,UAAE,KAAK;AACP,UAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAEtC,OAAO,MAAM,aAAc,SAAQ,SAAS,CAAA;AAArC,QAAA,WAAA,GAAA;;YAiCL,IAAkB,CAAA,kBAAA,GAAG,CAAC,MAAqC,KACzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CACxB,CAAC,OAA0B,EAAE,SAAiB,KAAK;AACjD,gBAAA,GAAG,OAAO;AACV,gBAAA,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAA4C,CAAC,CAAC,CAAC;aAChG,EACD,EAAE,CACH,CAAA;AAEH,YAAA,IAAA,CAAA,kBAAkB,GAAG,CACnB,SAAmD,EACnD,OAA8E,KACzD;gBACrB,IAAI,IAAI,CAAC,eAAe,CAAQ,IAAI,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa;AAAE,oBAAA,EAAE,CAAA;AAE7E,gBAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAA;gBACvC,MAAM,MAAM,GAAG,EAAE,CAAA;AAEjB,gBAAA,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;AAE7B,gBAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;AACtD,gBAAA,MAAM,kBAAkB,GACtB,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,sBAAE,SAAS,CAAC,QAAQ,EAAE;sBACpB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;AAElE,gBAAA,IAAI,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC,IAAI,EAAE;AACpC,oBAAA,IACE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AAC7B,yBAAC,IAAI,CAAC,MAAM,CAAC,kBAAkE,CAAC;AAC9E,4BAAA,kBAAkB,CAAC,KAAK;AACxB,4BAAA,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkE,CAAC,CAAC;AAEnF,wBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;oBAEzE,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;AAC9G,iBAAA;AACD,gBAAA,IACE,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC,EAAE;AAC9B,oBAAA,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;qBAC5B,IAAI,CAAC,MAAM,CAAC,kBAAkE,CAAC,KAAK,kBAAkB,CAAC,KAAK;AAC3G,wBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkE,CAAC,CAAC;AAEnF,oBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AACrE,gBAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AAC1E,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAChC,CAAC,OAAO,EAAE,GAAG,KAAK;AAChB,wBAAA,GAAG,OAAO;wBACV,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAA,CAAA,EAAI,GAAG,CAAE,CAAA,EAAE,EAAE,CAAsB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;qBACpG,EACD,EAAE,CACH,CAAA;AACF,iBAAA;AAED,gBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAG,OAAO,EAAE,QAA0B,IAAI,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,CAAA;AAC7G,aAAC,CAAA;AAED,YAAA,IAAA,CAAA,oBAAoB,GAAG,CACrB,OAAsC,EACtC,eAA0C,KACrB;gBACrB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAA;gBAEtD,IAAI,CAAC,WAAW,CAAC,MAAM;AAAE,oBAAA,OAAO,EAAE,CAAA;gBAElC,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAChE,CAAC,SAAS,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAChD,CAAA;gBAED,IAAI,wBAAwB,CAAC,MAAM;oBACjC,wBAAwB,CAAC,OAAO,CAC9B,CAAC,SAAS,MACP,eAAe,GAAG;AACjB,wBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAC1B,EAAE,CACA,OAAO,CAAC,SAA4C,CAAC,CACtD,CAAC,QAAQ,CACX;AACC,8BAAE,EAAE,CAAC,SAAS,GAAG,KAAK,EAAE;8BACtB,EAAE,CAAC;AACP,wBAAA,GAAG,eAAe;AACnB,qBAAA,CAAC,CACL,CAAA;gBAEH,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,KAChD,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,SAA4C,CAAC,CAAC,CAClF,CAAA;AACH,aAAC,CAAA;SA8BF;QArJC,MAAM,IAAI,CAAC,EACT,OAAO,EACP,MAAM,EACN,OAAO,GAAA,GAKL,EAAE,EAAA;AACJ,YAAA,MAAM,UAAU,GAA+B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAA;YACxG,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACxD,YAAA,MAAM,eAAe,GAAsB,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,CAAA;AAClF,YAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,eAAe,CAAC,CAAC,CAAA;AACjE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YAE/C,OAAO;gBACL,IAAI;gBACJ,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;aACzC,CAAA;SACF;AAED,QAAA,0BAA0B,CAAC,OAAsC,EAAA;AAC/D,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAQ,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,cAAc,CAAA;AAElE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;YACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC,CAAA;AAE7D,YAAA,OAAO,CAAG,EAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAI,CAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,cAAc,EAAE,CAAA;SACpF;AA2FD,QAAA,MAAM,YAAY,CAChB,OAAsC,EACtC,MAAqC,EAAA;YAErC,MAAM,OAAO,GAAG,EAAE,CAAA;YAElB,IAAI,MAAM,EAAE,MAAM,EAAE;gBAClB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,oBAAA,OAAO,CAAC,IAAI,CACV,UAAU,CACR,MAAM,MAAM,CACV,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CACjG,CACF,CACF,CAAA;AACE,qBAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AAClG,aAAA;YACD,IAAI,MAAM,EAAE,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAEpD,YAAA,OAAO,OAAO,CAAA;SACf;QAED,cAAc,CAAC,IAAa,EAAE,MAAqC,EAAA;AACjE,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAA;AAC9B,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK;gBAAE,OAAO,IAAI,CAAC,MAAM,CAAA;AAEnD,YAAA,OAAO,QAAQ,CAAA;SAChB;KACK,CAAA;AACV;;AC9Ma,MAAA,mBAAmB,GAAG,CAIjC,SAAgF,KAI9E;IACF,OAAO,MAAM,eAAgB,SAAQ,SAAS,CAAA;QAC5C,MAAM,MAAM,CAAC,IAAmC,EAAA;AAC9C,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAW,CAAC,CAAC,CAAA;AAClE,YAAA,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;AAEhC,YAAA,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;SAClB;QAED,MAAM,IAAI,CAAC,IAAW,EAAA;AACpB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAA;YACvE,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;YAElD,IAAI,OAAO,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YAEhD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAClC,YAAA,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAE1B,YAAA,OAAO,MAAM,CAAA;SACd;AAED,QAAA,yBAAyB,CAAC,WAA2B,EAAA;AACnD,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,kBAAE,CAAG,EAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAI,CAAA,EAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,cAAc,CAAE,CAAA;AACrG,kBAAE,IAAI,CAAC,cAAc,CAAA;SACxB;KACK,CAAA;AACV;;ACzBa,MAAA,mBAAmB,GAAG,CAIjC,SAAgF,KAI9E;IACF,MAAM,kBAAkB,GAAG,CACzB,MAAqC,EACrC,KAAsC,KAEtC,CAAC,KAAK,CAAC,EAAE,CAAkE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AAC/F,UAAE,EAAE,CAAmD,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,UAAE,EAAE,CAAkE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAA;AACvG,IAAA,MAAM,gBAAgB,GAAG,CAAC,OAA6B,KAA0B;AAC/E,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AAAE,YAAA,OAAO,OAAO,CAAA;AAC1C,QAAA,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,YAAY;YAAE,OAAO,WAAW,EAAE,CAAA;AAC9E,QAAA,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAA;QAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,KAAK;AAAE,gBAAA,OAAO,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AACtF,YAAA,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,MAAM;AAAE,gBAAA,OAAO,WAAW,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AACzF,SAAA;QAED,OAAO,OAAO,EAAE,KAAK,CAAA;AACvB,KAAC,CAAA;IAED,OAAO,MAAM,eAAgB,SAAQ,SAAS,CAAA;QAC5C,MAAM,MAAM,CAAC,IAAmC,EAAA;AAC9C,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;YAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;YAChD,MAAM,MAAM,GAAG,GAAG,CAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,EACxD,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAC9C,CAAA;AAED,YAAA,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAE/D,YAAA,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;AAEpC,YAAA,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;SACtB;AAED,QAAA,4BAA4B,CAAC,WAA0C,EAAA;AACrE,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;kBAC7B,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAC5F,IAAI,CAAC,cACP,CAAE,CAAA;AACJ,kBAAE,IAAI,CAAC,cAAc,CAAA;SACxB;AAED,QAAA,aAAa,CAAC,MAAqC,EAAA;AACjD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;AAExB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;AAElD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,UAAU,MAAM;AACrB,gBAAA,GAAG,IAAI;AACP,gBAAA,GAAG,CAAC,CAAC,KAAK,MAA2B,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,GAAG,KAAK,EAAE,CAAC,EACtF,gBAAgB,CAAC,MAAM,CAAC,UAAmB,CAAC,CAAC,CAC9C;aACF,CAAC,EACF,EAAE,CACH,CAAA;SACF;KACK,CAAA;AACV;;AC/Ea,MAAA,mBAAmB,GAAG,CAIjC,SAAgF,KAI9E;IACF,OAAO,MAAM,eAAgB,SAAQ,SAAS,CAAA;QAC5C,MAAM,MAAM,CAAC,WAA0C,EAAA;AACrD,YAAA,MAAM,SAAS,CACb,GAAG,CACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,EAC/D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAC9C,CACF,CAAA;SACF;AAED,QAAA,4BAA4B,CAAC,WAAoC,EAAA;AAC/D,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,kBAAE,CAAG,EAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAI,CAAA,EAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,cAAc,CAAE,CAAA;AACrG,kBAAE,IAAI,CAAC,cAAc,CAAA;SACxB;KACK,CAAA;AACV;;MCzBa,iBAAiB,GAAG,CAK/B,SAA6D,EAC7D,WAAkC,KAOhC;IACF,OAAO,MAAM,gBACX,SAAQ,SAAS,CAAA;AAMjB,QAAA,WAAA,CAAY,GAAG,IAAgB,EAAA;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAA;SACZ;AAEQ,QAAA,UAAU,CAAC,IAAa,EAAA;AAC/B,YAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;SAC9B;KACK,CAAA;AACV;;ACzBa,MAAA,iBAAiB,GAAG,CAK/B,SAAgF,KAI9E;AACF,IAAA,OAAO,MAAM,aACX,SAAQ,mBAAmB,CACzB,gBAAgB,CACd,iBAAiB,CACf,mBAAmB,CACjB,mBAAmB,CAAC,SAAqE,CAAC,CAC3F,CACF,CACF,CACF,CAAA;KACyC,CAAA;AAC9C;;ACxBa,MAAA,uBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAO,IAAI,CAAC,CAAC,CAAC,CAAA;AAGjE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KAClB;AACF;;MCRY,sCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;IAGrG,WACoB,CAAA,SAAoB,EACpB,gBAAiD,EAAA;AAEnE,QAAA,KAAK,EAAE,CAAA;QAHW,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAiC;AAGnE,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACdY,MAAA,+BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAe,IAAI,CAAC,CAAC,CAAC,CAAA;AAGzE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;KAC1B;AACF;;MCRY,sCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAsB,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;IAGjH,WACoB,CAAA,SAAoB,EACpB,gBAAiD,EAAA;AAEnE,QAAA,KAAK,EAAE,CAAA;QAHW,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAiC;AAGnE,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAA;KACjC;AACF;;MCbY,8BACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAc,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAGjG,WAA8B,CAAA,SAAoB,EAAoB,gBAAyC,EAAA;AAC7G,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAoB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;AAE7G,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAA;KACzB;AACF;;MCVY,oCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAgB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAGnG,WAA8B,CAAA,SAAoB,EAAoB,gBAAyC,EAAA;AAC7G,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAoB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;AAE7G,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAA;KAC3B;AACF;;ACZY,MAAA,uBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAO,IAAI,CAAC,CAAC,CAAC,CAAA;AAGjE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KAClB;IAEQ,MAAM,GAAG,CAAC,WAA0B,EAAA;AAC3C,QAAA,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;AAEpD,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACzD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAE3D,QAAA,OAAO,IAAI,CAAA;KACZ;AAED,IAAA,MAAM,oBAAoB,CAAC,KAAa,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC,CAAA;AAE/D,QAAA,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA;KACxB;IAEQ,kBAAkB,GAAA;QAIzB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;QAEjE,OAAO;AACL,YAAA,WAAW,EAAE,CAAC,IAAU,KAAkB;AACxC,gBAAA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;gBAE/B,OAAO,KAAK,CAAC,YAAY,CAAA;AAEzB,gBAAA,OAAO,KAAK,CAAA;aACb;YACD,aAAa;SACd,CAAA;KACF;IAEO,MAAM,gBAAgB,CAAC,MAAc,EAAA;AAC3C,QAAA,MAAM,aAAa,GAAG,MAAM,MAAM,CAChC,GAAG,CACD,IAAI,CAAC,UAAU,CAAC,CAAA,EAAG,IAAI,CAAC,cAAc,CAAI,CAAA,EAAA,MAAM,CAAK,GAAA,CAAA,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,EAC5G,eAAe,CAChB,CACF,CAAA;AAED,QAAA,OAAO,aAAa,CAAC,IAAI,EAAE,CAAA;KAC5B;IAEO,MAAM,mBAAmB,CAAC,MAAc,EAAA;AAC9C,QAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CACxG,CAAA;QAED,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;KAC7B;IAEO,+BAA+B,GAAA;QAIrC,OAAO;YACL,WAAW,EAAE,CAAC,IAAmB,KAAmB,IAAI,CAAC,OAAO,EAAE;AAClE,YAAA,aAAa,EAAE,CAAC,IAA0C,KACxD,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACxC,CAAA;KACF;AACF;;MCtEY,oCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAoB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAGvG,WAA8B,CAAA,SAAoB,EAAoB,gBAAyC,EAAA;AAC7G,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAoB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;AAE7G,QAAA,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAA;AACtC,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAA;KAC/B;AACF;;ACVY,MAAA,2BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAW,IAAI,CAAC,CAAC,CAAC,CAAA;AAGrE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAAA;AAClC,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;KACtB;AAED,IAAA,MAAM,iBAAiB,CAAC,IAAY,EAAE,IAAW,EAAA;QAC/C,MAAM,YAAY,GAAG,MAAM,OAAO,CAChC,KAAK,CACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EACpC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EACzB,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EACzB,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAC/B,CACF,CAAA;AAED,QAAA,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,sBAAsB,CAAC,kCAAkC,CAAC,CAAA;QAC/F,IAAI,YAAY,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,sBAAsB,IAAI,CAAA,UAAA,CAAY,CAAC,CAAA;QAEvF,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;KACnC;AAED,IAAA,MAAM,oBAAoB,CAAC,WAAqB,EAAE,KAAK,GAAG,CAAC,EAAA;AACzD,QAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAChC,KAAK,CACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EACpC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAC9C,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAC/B,CACF,CAAA;QAED,IAAI,YAAY,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,sBAAsB,CAAC,CAAA;AAEvE,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AAC7D,QAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,UAAU,CAAC,GAAG,CAAC,OAAO,QAAQ,MAAM;YAClC,QAAQ;AACR,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACxE,CAAC,CAAC,CACJ,CAAA;AAED,QAAA,OAAO,YAAY,CAAA;KACpB;AAED,IAAA,MAAM,aAAa,CAAC,QAAkB,EAAE,OAAgD,EAAA;QACtF,IAAI,CAAC,QAAQ,CAAC,QAAQ;AAAE,YAAA,MAAM,IAAI,qBAAqB,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAA;QAEvF,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,MAAM,MAAM,GAAsB,EAAE,CAAA;AAEpC,QAAA,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE;YAC/B,IAAI,OAAO,EAAE,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,KAAK;gBAAE,MAAK;YAE9D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;YAE1E,IAAI,OAAO,EAAE,QAAQ;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;YACnE,IAAI,OAAO,EAAE,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;AAEtD,YAAA,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;YAE1F,IAAI,WAAW,CAAC,KAAK;gBAAE,SAAQ;YAE/B,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;AACnC,SAAA;AAED,QAAA,OAAO,EAAE,CAAY,QAAQ,CAAC,CAAA;KAC/B;AACF;;ACzEY,MAAA,0BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,CAAA;AAKpE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAF1C,IAAO,CAAA,OAAA,GAAiE,EAAE,CAAA;AAIhF,QAAA,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAA;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;IAED,MAAM,SAAS,CAAC,IAAY,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9C,aAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;KAC7B;IAED,MAAM,YAAY,CAAC,MAA0B,EAAA;QAC3C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;AAE5C,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3B,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;gBAAE,OAAM;AAE5D,YAAA,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,UAAU,EAAE,OAAO,CAAC,GAAG;aACxB,CAAA;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAA;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAA;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAA;YAE1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACjC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;AAAE,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAC9G,gBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK;AAAE,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAC7F,gBAAA,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;AAAE,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAErF,gBAAA,OAAO,MAAM,CAAA;AACf,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;KAC5B;AACF;;MChDY,iCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAGhG,WAA8B,CAAA,SAAoB,EAAoB,gBAA4C,EAAA;AAChH,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAoB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAA4B;AAEhH,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAA;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACXY,MAAA,sCACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,CAAA;AAGpE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAA;AAC5C,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACTY,MAAA,2BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAW,IAAI,CAAC,CAAC,CAAC,CAAA;AAGrE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAA;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;KACtB;AACF;;ACTY,MAAA,yBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAS,IAAI,CAAC,CAAC,CAAC,CAAA;AAGnE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAA;KACpB;IAEQ,kBAAkB,GAAA;QAIzB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;QAEjE,OAAO;AACL,YAAA,WAAW,EAAE,CAAC,IAAY,KAAkB;AAC1C,gBAAA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;AAE/B,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS;oBAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;AAEhE,gBAAA,OAAO,KAAK,CAAA;aACb;AACD,YAAA,aAAa,EAAE,CAAC,IAAmC,KAAY;AAC7D,gBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;AAEpC,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,oBAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAA;AAEpF,gBAAA,OAAO,QAAQ,CAAA;aAChB;SACF,CAAA;KACF;AACF;;AChCY,MAAA,wBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAQ,IAAI,CAAC,CAAC,CAAC,CAAA;AAGlE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAwB1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,KAAY,KAAW;AACnD,YAAA,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;AAC9B,gBAAA,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AACjD,oBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAY,CAAA;oBACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAEpC,IAAI,CAAC,CAAC,SAAS;AAAE,wBAAA,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;AAE3C,oBAAA,OAAO,QAAQ,CAAA;AACjB,iBAAC,CAAC,CAAA;AACH,aAAA;AAED,YAAA,OAAO,KAAK,CAAA;AACd,SAAC,CAAA;AAnCC,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,kBAAkB,CAAC,MAAM;SAClC,CAAA;KACF;IAEQ,kBAAkB,GAAA;QAIzB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;QACjE,OAAO;YACL,WAAW,EAAE,CAAC,IAAW,KAAmB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AAC9F,YAAA,aAAa,EAAE,CAAC,IAAkC,KAAW;AAC3D,gBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;AAEpC,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;aACzC;SACF,CAAA;KACF;AAgBF;;AC3CY,MAAA,0BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,CAAA;AAGpE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACTY,MAAA,uCACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAuB,IAAI,CAAC,CAAC,CAAC,CAAA;AAGjF,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,uBAAuB,CAAA;AAC7C,QAAA,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAA;KAClC;AACF;;ACTY,MAAA,mCACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAmB,IAAI,CAAC,CAAC,CAAC,CAAA;AAG7E,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAA;AACzC,QAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAA;KAC9B;AACF;;ACTY,MAAA,0BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,CAAA;AAGpE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACVK,MAAO,8BAA+B,SAAQ,wBAAwB,CAAA;AAC1E,IAAA,WAAA,CAA8B,SAAoB,EAAA;QAChD,KAAK,CAAC,SAAS,CAAC,CAAA;QADY,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;KACrC;AACF;;ACJY,MAAA,uBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAO,IAAI,CAAC,CAAC,CAAC,CAAA;AAGjE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AA0B1C,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,IAAU,KAAU;AAC7C,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AACrG,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AAEO,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,iBAAoC,MAAM;AAC5E,YAAA,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC9C,YAAA,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;AACzE,SAAA,CAAC,CAAA;AAEM,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,IAAU,KAAU;AAC/C,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,SAAS;oBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,YAAY,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;gBAC/F,IAAI,CAAC,IAAI,CAAC,SAAS;oBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,YAAY,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;AAChG,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AAEO,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,iBAAoC,MAAM;YAC5E,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AACzD,YAAA,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACnF,SAAA,CAAC,CAAA;AAxDA,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KAClB;IAEQ,kBAAkB,GAAA;QAIzB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;QAEjE,OAAO;AACL,YAAA,WAAW,EAAE,CAAC,IAAU,KAAkB;gBACxC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AAE/C,gBAAA,OAAO,WAAW,CAAC,YAAY,CAAC,CAAA;aACjC;AACD,YAAA,aAAa,EAAE,CAAC,IAAiC,KAAU;AACzD,gBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;AAEpC,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;aACxC;SACF,CAAA;KACF;AAmCF;;AC/DY,MAAA,2BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAW,IAAI,CAAC,CAAC,CAAC,CAAA;AAGrE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAA;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;KACtB;AACF;;MCHY,iCAAiC,CAAA;AAC5C,IAAA,WAAA,CAA6B,YAAkB,EAAA;QAAlB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAM;KAAI;IAEnD,MAAM,0BAA0B,CAAC,IAA4B,EAAA;AAC3D,QAAA,MAAM,WAAW,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClG,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAE7B,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,WAAW;AACvB,YAAA,WAAW,EAAE,KAAK;SACnB,CAAA;KACF;AAED,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAA;AACtF,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAE7B,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,WAAW;AACvB,YAAA,WAAW,EAAE,KAAK;SACnB,CAAA;KACF;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA;KAC5B;AAED,IAAA,MAAM,iBAAiB,GAAA;QACrB,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AACvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAA;QAE5C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AAEvB,QAAA,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,sBAAsB,CAAC,KAAa,EAAA;QACxC,OAAO,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;KACxD;AACF;;MCjDY,2BAA2B,CAAA;AACtC,IAAA,WAAA,CAA6B,YAAkB,EAAA;QAAlB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAM;KAAI;IAEnD,MAAM,QAAQ,CAAC,MAAsB,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAE7D,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,8BAA8B,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACnG,MAAM,IAAI,GAAG,EAAE,CAAqB,IAAI,CAAC,IAAI,CAAC,CAAA;AAE9C,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;AAE9C,YAAA,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAA;AACjC,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAA;AAElB,YAAA,OAAO,IAAI,CAAA;AACZ,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC;AAAE,gBAAA,MAAM,KAAK,CAAA;YAE1C,MAAM,aAAa,GAAG,KAAsB,CAAA;AAE5C,YAAA,IAAI,aAAa,CAAC,IAAI,KAAK,2BAA2B;AACpD,gBAAA,MAAM,IAAI,0BAA0B,CAAC,0BAA0B,CAAC,CAAA;AAClE,YAAA,IAAI,aAAa,CAAC,IAAI,KAAK,oBAAoB;gBAAE,MAAM,IAAI,iBAAiB,EAAE,CAAA;AAE9E,YAAA,MAAM,KAAK,CAAA;AACZ,SAAA;KACF;AACF;;MC5BY,qBAAqB,CAAA;;AACzB,qBAAA,CAAA,eAAe,GAAG,CAIvB,aAAwB,EACxB,MAAkC,KACS;AAC3C,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAoB,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAA;AAEzG,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CACzG,CAAA;IACD,MAAM,WAAW,GAAG,EAAE,CAA4D,KAAK,CAAC,GAAG,aAAa,CAAC,CAAA;IAEzG,IAAI,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAA;AACtF,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAAE,QAAA,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;AAEnH,IAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,WAAW,EAAE,CAAA;AAChF,CAAC,CAAA;AAEM,qBAAmB,CAAA,mBAAA,GAAG,CAC3B,UAAmD,KACC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;AAEtE,qBAAA,CAAA,wBAAwB,GAAG,CAChC,UAAkB,EAClB,MAAwC,KACqE;AAC7G,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAsD,CAAC;AACzE,QAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAgE,EAAE,CAAA;IAExG,MAAM,KAAK,GAAG,EAAE,CACd,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAA;AAElC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KACpD,qBAAqB,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,GAAG,MAAM,GAAG,EAAE,CACpG,CAAA;AAED,QAAA,OAAO,qBAAqB,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,YAAY,EAAE,UAAU,KAAK,UAAU,CAAA;AAC3G,KAAC,CAAC,IAAI,EAAE,CACT,CAAA;AACD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAC3C,CAAC,mBAAmB,KAClB,qBAAqB,CAAC,mBAAmB,CACvC,KAAK,CAAC,mBAAyE,CAAC,CACjF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAyE,CAAC,CAAC,CACjD,CAAA;AACvD,IAAA,MAAM,WAAW,GAAG,KAAK,GAAG,aAAa,CAAC,CAAA;AAE1C,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC5B,OAAO,EAAE,aAAa,EAAE,aAAmE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;IAEpH,OAAO;QACL,aAAa,EAAE,aAAa,IAAK,UAAiE;QAClG,UAAU;AACV,QAAA,GAAG,WAAW;KACf,CAAA;AACH,CAAC;;ACpEH,IAAY,kBAcX,CAAA;AAdD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,KAAc,CAAA;AACd,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY,CAAA;AACZ,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,MAAc,CAAA;AACd,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY,CAAA;AACZ,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,OAAc,CAAA;AACd,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,QAAkB,CAAA;AAClB,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,UAAmB,CAAA;AACnB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,UAAsB,CAAA;AACtB,IAAA,kBAAA,CAAA,eAAA,CAAA,GAAA,WAA2B,CAAA;AAC3B,IAAA,kBAAA,CAAA,mBAAA,CAAA,GAAA,eAAmC,CAAA;AACrC,CAAC,EAdW,kBAAkB,KAAlB,kBAAkB,GAc7B,EAAA,CAAA,CAAA;;ACdD,IAAY,uBAUX,CAAA;AAVD,CAAA,UAAY,uBAAuB,EAAA;AACjC,IAAA,uBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,uBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,uBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,uBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,YAAuB,CAAA;AACvB,IAAA,uBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,uBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,uBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,uBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EAVW,uBAAuB,KAAvB,uBAAuB,GAUlC,EAAA,CAAA,CAAA;;MCNY,kBAAkB,CAAA;;AACtB,kBAAA,CAAA,qBAAqB,GAAG,CAC7B,MAAW,KAC6C,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAE3E,kBAAA,CAAA,kBAAkB,GAAG,CAC1B,MAAiD,EACjD,WAAoC,KAC7B;AACP,IAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,MAAM,CAAA;AACpE,IAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI,CAAA;AACjD,IAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,SAAS;AAAE,QAAA,OAAO,KAAK,CAAA;AAErD,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE;UAC5B,WAAW,CAAC,EAAE;AAChB,UAAE,CAAC,KAAU,KACT,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;cACpF,CAAI,CAAA,EAAA,KAAK,CAAG,CAAA,CAAA;cACZ,KAAK,CAAA;AAEf,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC5G,UAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;AACzD,UAAE,SAAS,CAAC,MAAM,CAAC,KAAY,CAAC,CAAA;AACpC,CAAC;;MCbU,qBAAqB,CAAA;;AACzB,qBAAgB,CAAA,gBAAA,GAAG,CACxB,MAAqC,EACrC,MAAkC,KAElC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,SAA0B,EAAE,SAAiB,KAAI;IAC3E,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CACxD,SAAyD,EACzD,MAAM,CACP,CAAA;IAED,IAAI,CAAC,YAAY,CAAC,cAAc;QAC9B,OAAO;AACL,YAAA,GAAG,SAAS;YACZ,GAAG;AACD,gBAAA,CAAC,YAAY,CAAC,UAAU,GAAG,qBAAqB,CAAC,kBAAkB,CACjE,SAAyD,EACzD,MAAM,CAAC,SAA4C,CAGlD,EACD,MAAM,CACP;AACF,aAAA;SACF,CAAA;IAEH,MAAM,WAAW,GAAkC,YAAY,CAAC,cAAc,CAC5E,MAAM,CAAC,SAA4C,CAGlD,CACF,CAAA;IAED,OAAO;AACL,QAAA,GAAG,SAAS;AACZ,QAAA,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAChC,CAAC,aAA8B,EAAE,UAAkB,MAAM;AACvD,YAAA,GAAG,aAAa;AAChB,YAAA,CAAC,UAAU,GAAG,qBAAqB,CAAC,kBAAkB,CACpD,SAAyD,EACzD,WAAW,CAAC,UAA6C,CAGxD,EACD,MAAM,CACP;SACF,CAAC,EACF,EAAE,CACH;KACF,CAAA;AACH,CAAC,EAAE,EAAE,CAAC,CAAA;AAED,qBAAkB,CAAA,kBAAA,GAAG,CAC1B,KAAmD,EACnD,OAA8E,EAC9E,MAAkC,KACf;IACnB,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,eAAe,CAAQ,KAAK,EAAE,MAAM,CAAC,CAAA;AAExF,IAAA,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACvB,QAAQ,CAAC,OAAO,CAAC;AACjB,QAAA,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;AACxB,QAAA,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;AACrB,QAAA,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAE/B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,GAAG,KAAI;AACpD,YAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CACxD,GAAmD,EACnD,oBAAoB,EAAE,MAAM,IAAK,MAAc,CAChD,CAAA;AACD,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAA;AAC1C,YAAA,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAA;YAExC,OAAO;AACL,gBAAA,GAAG,SAAS;gBACZ,CAAC,UAAU,GAAG,qBAAqB,CAAC,kBAAkB,CACpD,GAAmD,EACnD,EAAE,CACA,EAAE,CAAgC,OAAO,CAAC,CAAC,GAAsC,CAAC,CACnF,EACD,YAAY,IAAK,EAAU,CAC5B;aACF,CAAA;SACF,EAAE,EAAE,CAAC,CAAA;AAER,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAChE,OAAO;AACL,YAAA,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAiD,GAC7E,qBAAqB,CAAC,qBAAqB,CACzC,OAAO,EACP,oBAAiG,CAClG;SACJ,CAAA;IAEH,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,OAAO,CAAC;QACzE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAA8C,CAAA;AAElF,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3B,UAAE,OAAO,CAAC,MAAM,CACZ,CAAC,aAAa,EAAE,MAAM,MAAM;AAC1B,YAAA,GAAG,aAAa;AAChB,YAAA,GAAG,qBAAqB,CAAC,qBAAqB,CAC5C,MAAM,EACN,oBAAiG,CAClG;SACF,CAAC,EACF,EAAE,CACH;UACD,qBAAqB,CAAC,qBAAqB,CACzC,OAAO,EACP,oBAAiG,CAClG,CAAA;AACP,CAAC,CAAA;AAEM,qBAAqB,CAAA,qBAAA,GAAG,CAC7B,OAAkD,EAClD,WAAoC,MACf;AACrB,IAAA,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,kBAAkB,CAAC,kBAAkB,CACpG,OAAO,EACP,WAAW,CACZ;AACF,CAAA,CAAC,CAAA;AAEK,qBAAA,CAAA,iBAAiB,GAAG,CACzB,OAA8E,EAC9E,WAAoC,KAEpC,kBAAkB,CAAC,qBAAqB,CAAC,OAAO,CAAC;AAC/C,MAAE,WAAW,CAAC,IAAI,KAAK,uBAAuB,CAAC,KAAK;AAClD,UAAE,qBAAqB,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACvD,UAAE,kBAAkB,CAChB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAClC,CAAC,eAAe,KACd,eAAe;YACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAA8B,CAAC,KAAK,OAAO,EAAE,QAAQ,CAAC,CAClE,CACrC;AACL,MAAE,kBAAkB,CAAC,MAAM,CAAA;AAExB,qBAAA,CAAA,sBAAsB,GAAG,CAC9B,OAA8E,KAE9E,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,EAAE;MACzB,kBAAkB,CAAC,aAAa;AAClC,MAAE,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI;UAC/B,kBAAkB,CAAC,iBAAiB;AACtC,UAAE,kBAAkB,CAChB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAClC,CAAC,eAAe,KACd,eAAe;YACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAA8B,CAAC,KAAK,OAAO,EAAE,QAAQ,CAAC,CAClE,CACrC;;MC5JI,kBAAkB,CAAA;;AACtB,kBAAA,CAAA,oBAAoB,GAAG,CAC5B,MAAuC,KAEvC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAEpF,kBAAA,CAAA,iCAAiC,GAAG,CACzC,MAAkC,KACxB;AACV,IAAA,OAAO,MAAM;AACX,UAAE,GAAG,CAAC,CAAC,KAAK,KAAI;QACd,IAAI,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC5C,IAAI,KAAK,KAAK,eAAe;AAAE,YAAA,OAAO,KAAK,CAAA;QAE3C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA;AAC5C,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,SAA+B,CAAC,CAAA;AAEzD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AAC3B,YAAA,OAAO,EAAE,CAAC,SAAS,GAAG,kBAAkB,CAAC,iCAAiC,CAAC,UAAU,CAAC,EAAE,CAAA;AAC1F,QAAA,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,IAAI,CAAA;QACvE,IAAI,UAAU,CAAC,MAAM;YACnB,OAAO,CAAC,UAAU,CAAC,OAAO;AACxB,kBAAE;AACE,oBAAA,CAAC,UAAU,CAAC,UAAU,IAAI,SAAS,GAAG,kBAAkB,CAAC,iCAAiC,CACxF,UAAU,CAAC,MAAM,CAClB;AACF,iBAAA;AACH,kBAAE;AACE,oBAAA,SAAS,EAAE,UAAU,CAAC,UAAU,IAAI,SAAS;oBAC7C,MAAM,EAAE,kBAAkB,CAAC,iCAAiC,CAAC,UAAU,CAAC,MAAM,CAAC;AAC/E,oBAAA,SAAS,EAAE;AACT,wBAAA,CAAC,GAAG,UAAU,CAAC,UAAU,CAAA,MAAA,CAAQ,GAAG;AAClC,4BAAA,IAAI,EAAE,OAAO;AACb,4BAAA,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU;AACnC,4BAAA,KAAK,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC;AAC5F,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACF,qBAAA;iBACF,CAAA;QAEP,OAAO,UAAU,CAAC,UAAU,CAAA;AAC9B,KAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC,CAAA;AAEM,kBAAqB,CAAA,qBAAA,GAAG,CAK7B,IAAc,EACd,MAAkC,KAElC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,KAAI;AAC9C,IAAA,MAAM,EACJ,aAAa,EACb,MAAM,EAAE,eAAe,EACvB,IAAI,GACL,GAAG,qBAAqB,CAAC,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAEtE,IAAI,CAAC,CAAC,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjC,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,CAAC,aAAa,GAAG,IAAI;sBACjB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;sBAC5B,EAAE,CAAmB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAC/C,kBAAkB,CAAC,qBAAqB,CAAC,EAAE,CAAW,KAAK,CAAC,EAAE,eAAe,CAAC,CAC/E;aACN,CAAA;AACH,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI;AACrB,sBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxB,sBAAE,kBAAkB,CAAC,qBAAqB,CAAC,EAAE,CAAW,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC;aAC9F,CAAA;AACJ,KAAA;IAED,IAAI,CAAC,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,CAAA;AAE/E,IAAA,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAA;AACnF,CAAC,EAAE,EAAE,CAAC,CAAA;AAED,kBAAmB,CAAA,mBAAA,GAAG,CAI3B,QAAe,EACf,MAAkC,EAClC,MAAM,GAAG,KAAK,KACF;IACZ,MAAM,IAAI,GAAmB,QAAQ,CAAC,OAAO,IAAI,IAAI,QAAQ,CAAA;AAE7D,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,aAAa,KAAI;QACxD,MAAM,EACJ,UAAU,EACV,MAAM,EAAE,eAAe,EACvB,gBAAgB,EAChB,EAAE,EACF,eAAe,GAChB,GAAG,qBAAqB,CAAC,eAAe,CAAC,aAA6D,EAAE,MAAM,CAAC,CAAA;AAEhH,QAAA,IAAI,eAAe;YACjB,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,GAAG,eAAe,CAAC,IAAI,CAAC,aAA6D,CAAC,EAAE,QAAQ,CAAC;aAClG,CAAA;QACH,IAAI,KAAK,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,MAAM,CAAA;QACpC,IACE,CAAC,CAAC,gBAAgB;YAClB,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAC1B,YAAA,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CACnC,CAAC,GAAG,KACF,CAAC,EAAE,CAAyB,IAAI,CAAC,aAA6D,CAAC,CAAC,GAAG,GAAG,CAAC,CAC1G,CAAC,MAAM;AAER,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CACzC,CAAC,MAAM,EAAE,OAAO,MAAM;AACpB,gBAAA,GAAG,MAAM;AACT,gBAAA,CAAC,gBAAgB,CAAC,OAAmD,CAAC,GACpE,IAAI,CAAC,aAAyD,CAAC,GAAG,OAAO,CAAC;AAC7E,aAAA,CAAC,EACF,EAAE,GAAG,MAAM,EAAE,CACd,CAAA;AAEH,QAAA,IACE,MAAM;AACN,YAAA,QAAQ,CAAC,IAAI,CAAC,aAAyD,CAAC,CAAC;YACzE,CAAC,KAAK,CAAC,eAAe,CAAC;AACvB,YAAA,CAAC,MAAM,CAAC,IAAI,CAAC,aAAyD,CAAC,CAAC;AAExE,YAAA,OAAO,MAAM,CAAA;QAEf,IACE,CAAC,CAAC,UAAU;AACZ,YAAA,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC9B,YAAA,QAAQ,CAAC,IAAI,CAAC,aAAyD,CAAC,CAAC,EACzE;YACA,MAAM,SAAS,GACb,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;kBACpB,EAAE,CAAC,QAAQ,CAAC,aAAyD,CAAC,EAAE,QAAQ,CAAC;AACnF,kBAAE,IAAI,CAAC,aAAyD,CAAC,CAAA;YAErE,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,IAAI,SAAS,KAAK,SAAS;AACzB,sBAAE;wBACE,CAAC,UAAU,GAAG;AACZ,4BAAA,IAAI,EACF,QAAQ,CAAC,aAA6D,CAAC,YAAY,SAAS;kCACxF,kBAAkB,CAAC,mBAAmB,CACpC,IAAI,CAAC,aAAyD,CAAC,EAC/D,eAA6C,CAC9C;AACH,kCAAE,SAAS;AAChB,yBAAA;AACF,qBAAA;sBACD,EAAE,CAAC;aACR,CAAA;AACF,SAAA;QAED,IAAI,CAAC,CAAC,EAAE;YACN,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAyD,CAAC,EAAE,QAAQ,CAAC;aAChG,CAAA;AAEH,QAAA,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,aAAyD,CAAC,EAAE,CAAA;KACpG,EAAE,EAAc,CAAC,CAAA;AACpB,CAAC;;AC3KU,MAAA,uBAAuB,GAAG,CAIrC,SAA2D,KAIzD;IACF,OAAO,MAAM,wBAAyB,SAAQ,SAAS,CAAA;AAIrD,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAA4B,MAAM,GAAG,CAAC,CAAC,CAAA;AAEpD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,sBAAsB,IAAI,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAA,IAAA,CAAM,CAAA;AAC/F,YAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO,EAAE,uBAAuB,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,aAAA,CAAe,CAAA;SACpG;QAED,MAAM,MAAM,CAAC,IAAmC,EAAA;AAC9C,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAW,CAAC,CAAC,CAAA;YAEnE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;SACtC;QAED,MAAM,IAAI,CAAC,IAAW,EAAA;AACpB,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CACxD,CAAC,KAAK,KAAK,qBAAqB,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAClD,CAAA;AAC/B,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM;AAClC,iBAAA,GAAG,CAAC,CAAC,KAAK,KAAI;gBACb,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA;AAElD,gBAAA,QACE,qBAAqB,CAAC,mBAAmB,CAAC,aAAa,CAAC;oBACxD,aAAa,CAAC,gBAAgB,IAAI;AAChC,oBAAA,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAChD,oBAAA;AACE,wBAAA,CAAC,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,GAAG,CACzE,CAAC,eAAe,KACd,qBAAqB,CAAC,eAAe,CAAC,eAAsB,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,UAAU;AAChG,4BAAA,eAAe,CAClB;AACF,qBAAA;AACF,iBAAA,EACF;AACH,aAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAC;AACf,iBAAA,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;AAEvD,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChC,IAAI,CAAC,sBAAsB,EAC3B,CAAC,GAAG,iBAAiB,EAAE,GAAG,iBAAiB,CAA+B,EAC1E;gBACE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;AACtG,aAAA,CACF,CAAA;YAED,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAA;SAC3G;KACK,CAAA;AACV;;ACjEa,MAAA,uBAAuB,GAAG,CAIrC,SAA2D,KAIzD;IACF,OAAO,MAAM,wBAAyB,SAAQ,SAAS,CAAA;AAGrD,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAA4B,MAAM,GAAG,CAAC,CAAC,CAAA;AAEpD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,sBAAsB,IAAI,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ,CAAA;SAClG;QAED,MAAM,MAAM,CAAC,WAA0C,EAAA;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAkB,CAAC,CAAA;YAE1D,MAAM,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAC9B,CAAC,KAAK,KAAK,qBAAqB,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAClD,EAC/B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,KAAI;AACtD,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAAE,oBAAA,OAAO,GAAG,CAAA;AAE3C,gBAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AACnF,gBAAA,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,UAAiD,CAAC,EAAE,QAAQ,CAAC,CAAA;gBAEvG,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,CAAC,YAAY,CAAC,UAAU,GAAG;wBACzB,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC;wBAChE,KAAK;AACL,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;iBACF,CAAA;AACH,aAAC,EAAE,EAAE,CAAC,CACP,CAAA;SACF;KACK,CAAA;AACV;;ACrBa,MAAA,iBAAiB,GAAG,CAC/B,SAAY,KACoF;IAChG,OAAO,MAAM,kBAAmB,SAAQ,SAAS,CAAA;AAkB/C,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAA6B,MAAM,CAAC,CAAC,CAAC,CAAA;AAEnD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;AACtC,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;AAC1B,YAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAK,IAAI,CAAC,KAAK,CAAC,iBAAgD,CAAA;SAC7F;AArBD,QAAA,IAAI,OAAO,GAAA;YACT,OAAO;AACL,gBAAA,cAAc,EAAE,kBAAkB;gBAClC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC3F,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,uBAAuB,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBACzG,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAClC,sBAAE,EAAE;sBACF,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aAC/G,CAAA;SACF;AAcD,QAAA,MAAM,QAAQ,CACZ,SAAiB,EACjB,MAAmC,EACnC,SAA2B,EAAA;YAE3B,MAAM,WAAW,GAAG,QAAQ,CAAC;gBAC3B,SAAS;gBACT,SAAS;AACT,gBAAA,MAAM,EAAE,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,CAAC;AACrE,aAAA,CAAC,CAAA;AAEF,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;SAC/B;AAED,QAAA,MAAM,KAAK,CACT,SAA0C,EAC1C,MAAmC,EACnC,SAA2B,EAAA;AAE3B,YAAA,MAAM,WAAW,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACpE,kBAAEC,OAAK,CACH,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;oBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,MAAM,EAAE,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5E,iBAAA,CAAC,CAAC,CACJ;kBACDA,OAAK,CAAC;oBACJ,SAAS;oBACT,SAAS;AACT,oBAAA,MAAM,EAAE,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,CAAC;AACrE,iBAAA,CAAC,CAAA;AAEN,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;SAC/B;QAED,MAAM,KAAK,CAAqB,MAAyC,EAAA;AACvE,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;YAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA,CAAE,EAAE;AAC/C,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC5B,OAAO;AACR,aAAA,CAAC,CAAA;AACF,YAAA,MAAM,MAAM,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;AAEzC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAEzE,OAAO,MAAM,CAAC,IAAI,CAAA;SACnB;AAED,QAAA,yBAAyB,CAAY,KAAgB,EAAA;YACnD,IAAI,MAAM,CAAC,KAAY,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAA;YACvC,IAAI,QAAQ,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,QAAQ,CAAA;YACpC,IAAI,SAAS,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,SAAS,CAAA;YACtC,IAAI,KAAK,YAAY,IAAI;AAAE,gBAAA,OAAO,aAAa,CAAA;YAC/C,IAAI,SAAS,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAA;YAClC,IAAI,QAAQ,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,SAAS,CAAA;AAErC,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;SAC5C;AAED,QAAA,yBAAyB,CAAC,KAAa,EAAA;AACrC,YAAA,IAAI,CAAC,kDAAkD,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAA;AAEjF,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;AAE5B,YAAA,IAAIlB,OAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAA;AAEvC,YAAA,OAAO,IAAI,CAAA;SACZ;AAED,QAAA,qBAAqB,CAAC,IAAqC,EAAA;AACzD,YAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAEzE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;SACpC;AAED,QAAA,mBAAmB,CAAC,QAAe,EAAE,MAAM,GAAG,KAAK,EAAA;AACjD,YAAA,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAC7E;KACF,CAAA;AACH;;AC7Ha,MAAA,uBAAuB,GAAG,CAIrC,SAA2D,KAIzD;AACF,IAAA,MAAM,gBAAgB,GAAG,CAAC,OAA6B,KAAa;QAClE,IAAI,OAAO,YAAY,SAAS;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;AAC1D,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AAAE,YAAA,OAAO,OAAO,CAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AAC7G,YAAA,OAAO,IAAI,CAAA;QAEb,OAAO,OAAO,CAAC,KAAK,CAAA;AACtB,KAAC,CAAA;IAED,OAAO,MAAM,wBAAyB,SAAQ,SAAS,CAAA;AAKrD,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAA4B,MAAM,GAAG,CAAC,CAAC,CAAA;AAEpD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,sBAAsB,IAAI,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ,CAAA;AACjG,YAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO,EAAE,uBAAuB,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,UAAA,CAAY,CAAA;AAChG,YAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,iBAAA,CAAmB,CAAA;SAChG;QAED,MAAM,MAAM,CAAC,IAAmC,EAAA;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AAE1C,YAAA,MAAM,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAC9B,CAAC,KAAK,KAAK,qBAAqB,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAClD,EAC/B;AACE,gBAAA,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,uBAAuB;AAClC,oBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;AACvE,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA;gBACD,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1G,aAAA,CACF,CAAA;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;SACxC;AAED,QAAA,aAAa,CAAC,MAAqC,EAAA;AACjD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;AAExB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;AAElD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,UAAU,MAAM;AACrB,gBAAA,GAAG,IAAI;AACP,gBAAA,IAAI,MAAM,CAAC,UAAiD,CAAC,KAAK,SAAS,IAAI;AAC7E,oBAAA,CAAC,UAAU,GAAG,gBAAgB,CAC5B,EAAE,CAAuB,MAAM,CAAC,UAAiD,CAAC,CAAC,CACpF;iBACF,CAAC;aACH,CAAC,EACF,EAAE,CACH,CAAA;SACF;AAED,QAAA,kBAAkB,CAAC,IAAoB,EAAA;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAE5C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,KAAI;AAC7D,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAAE,oBAAA,OAAO,GAAG,CAAA;AAE3C,gBAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBACnF,MAAM,KAAK,GAAG,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;gBAEhG,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK;iBACjC,CAAA;aACF,EAAE,EAA+C,CAAC,CAAA;SACpD;KACK,CAAA;AACV;;ACrGa,MAAA,oBAAoB,GAAG,CAIlC,SAA2D,KACzD;IACF,OAAO,MAAM,qBAAsB,SAAQ,SAAS,CAAA;AAGlD,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAAyB,MAAM,GAAG,CAAC,CAAC,CAAA;AAEjD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ,CAAA;SACrF;QAED,MAAM,GAAG,CAAC,WAAuC,EAAA;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AACnD,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,KAAI;AACtD,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAAE,oBAAA,OAAO,GAAG,CAAA;AAE3C,gBAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AACnF,gBAAA,MAAM,KAAK,GACT,YAAY,EAAE,EAAE,GAAG,WAAW,CAAC,UAAsC,CAAC,EAAE,QAAQ,CAAC;oBACjF,WAAW,CAAC,UAAsC,CAAC,CAAA;gBAErD,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,CAAC,YAAY,CAAC,UAAU,GAAG;wBACzB,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC;wBAChE,KAAK;AACL,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;iBACF,CAAA;AACH,aAAC,EAAE,EAAE,CAAC,CACP,CAAA;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;YAE7C,IAAI,KAAK,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,aAAa,CAAC,CAAG,EAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAY,UAAA,CAAA,CAAC,CAAA;YAElF,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;SACpE;KACF,CAAA;AACH;;AC5Ca,MAAA,qBAAqB,GAAG,CAInC,SAA2D,KACzD;IACF,OAAO,MAAM,sBAAuB,SAAQ,SAAS,CAAA;QACnD,MAAM,IAAI,CAAC,OAKV,EAAA;YACC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;AAClD,YAAA,MAAM,cAAc,GAAG;AACrB,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAG,EAAA,IAAI,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC5G,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC;AAChB,sBAAE,EAAE;AACJ,sBAAE;AACE,wBAAA,KAAK,EAAE;4BACL,KAAK,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AACnE,4BAAA,IAAI,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAW,SAAA,CAAA;AAClC,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;qBACF,CAAC;aACP,CAAA;AACD,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;AAChC,gBAAA,GAAG,cAAc;aAClB,CAAA;AACD,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC;AAC9B,gBAAA;oBACE,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,OAAO,CAAC,MAAM;0BAClB,OAAO,CAAC,MAAM;6BACX,GAAG,CACF,CAAC,SAAS,KACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,KAAK,SAAS,CAAC;4BAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC,CACpF;6BACA,MAAM,CAAC,OAAO,CAAC;0BAClB,IAAI,CAAC,MAAM;oBACf,SAAS;AACV,iBAAA;AACD,gBAAA;AACE,oBAAA,SAAS,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAY,UAAA,CAAA;oBACxC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AAClC,oBAAA,SAAS,EAAE,cAAc;AAC1B,iBAAA;AACF,aAAA,CAAC,CAAA;YACF,MAAM,IAAI,GAAY,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAoC,KACpF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAChC,CAAA;AACD,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAA,UAAA,CAAY,CAAC,CAAC,SAAS,CAAC,KAAK,CAAA;AAEnE,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;SACvB;KACF,CAAA;AACH;;ACzDa,MAAA,qBAAqB,GAAG,CAKnC,SAA2D,KAczD;AACF,IAAA,OAAO,MAAM,sBACX,SAAQ,uBAAuB,CAC7B,oBAAoB,CAClB,qBAAqB,CACnB,uBAAuB,CAAC,uBAAuB,CAAC,SAAgD,CAAC,CAAC,CACnG,CACF,CACF,CAAA;KACyC,CAAA;AAC9C;;AC1CM,MAAO,qBAAsB,SAAQ,QAAQ,CAAA;AAIlD;;ACAK,MAAO,oBAAqB,SAAQ,OAAO,CAAA;AAahD,CAAA;AAFC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,uBAAuB,CAAC;;AACY,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA;;ACZ5C,MAAO,uBAAwB,SAAQ,UAAU,CAAA;AAMtD,CAAA;AALC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,oBAAoB,CAAC;8BACnB,oBAAoB,CAAA;AAAA,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAElC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,oBAAoB,CAAC;8BACf,oBAAoB,CAAA;AAAA,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACTlC,MAAO,oBAAqB,SAAQ,OAAO,CAAA;AAAjD,IAAA,WAAA,GAAA;;QAME,IAAI,CAAA,IAAA,GAAK,EAAE,CAAA;QACX,IAAW,CAAA,WAAA,GAAK,KAAK,CAAA;KACtB;AAAA;;ACWK,MAAO,+BACX,SAAQ,qBAAqB,CAAC,iBAAiB,CAAwB,IAAI,CAAC,CAAC,CAAA;AAG7E,IAAA,WAAA,CACE,QAAgB,EAChB,WAAqC,EACpB,iBAAiD,EAAA;AAElE,QAAA,KAAK,CAAC;AACJ,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,KAAK,EAAE,QAAQ;YACf,QAAQ;YACR,WAAW;AACX,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAa,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE;AACtG,gBAAA,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;gBAC/C,MAAM;gBACN,aAAa;gBACb,OAAO;gBACP,WAAW;gBACX,MAAM;gBACN,MAAM;AACN,gBAAA,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE;AACnD,gBAAA,EAAE,mBAAmB,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AACvD,gBAAA,EAAE,yBAAyB,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,EAAE;AACpE,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE;AACrD,gBAAA;AACE,oBAAA,UAAU,EAAE;AACV,wBAAA,UAAU,EAAE,eAAe;wBAC3B,IAAI,EAAE,uBAAuB,CAAC,KAAK;wBACnC,IAAI,EAAE,CAAC,IAAa,EAAE,GAAwB,MAAM;4BAClD,KAAK,EAAE,GAAG,CAAC,eAAe;AAC1B,4BAAA,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;yBACtC,CAAC;AACF,wBAAA,eAAe,EAAE,CAAC,KAA0C,KAAI;4BAC9D,OAAO;gCACL,eAAe,EAAE,KAAK,CAAC,KAAK;AAC5B,gCAAA,aAAa,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;6BACjC,CAAA;yBACF;AACD,wBAAA,cAAc,EAAE,CAAC,QAAa,KAAI;4BAChC,OAAO;AACL,gCAAA,IAAI,QAAQ,CAAC,KAAK,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9D,gCAAA,IAAI,QAAQ,CAAC,IAAI,GAAG,EAAE,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;6BAC3D,CAAA;yBACF;AACF,qBAAA;AACF,iBAAA;gBACD,SAAS;AACT,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA;AACE,oBAAA,QAAQ,EAAE;AACR,wBAAA,UAAU,EAAE,UAAU;wBACtB,MAAM,EAAE,CAAC,YAAY,CAAC;wBACtB,IAAI,EAAE,CAAC,KAA+B,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAChG,wBAAA,EAAE,EAAE,CAAC,UAAoB,KACvB,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM;4BAC7B,UAAU,EAAE,CAAC,SAAS;AACvB,yBAAA,CAAC,CAAC;AACN,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,QAAQ,EAAE;AACR,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;AAChC,wBAAA,eAAe,EAAE,CAAC,KAAsB,MAA2B;AACjE,4BAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;yBAC1B,CAAC;AACH,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAA;QAnEe,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAgC;KAoEnE;IAEQ,MAAM,MAAM,CAAC,MAAqD,EAAA;QACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAEpC,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;KAC3F;IAEQ,MAAM,GAAG,CAAC,WAAuD,EAAA;QACxE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;cAChC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAC3E,cAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;KAC3B;IAEQ,MAAM,MAAM,CAAC,MAAqD,EAAA;AACzE,QAAA,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;AAC3D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACrD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;AACzC,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;AAEpD,QAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC9E,QAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AAE9E,QAAA,OAAO,QAAQ,CAAA;KAChB;AAED,IAAA,MAAM,iBAAiB,CAAC,IAAY,EAAE,IAAW,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAA;QAEtB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QAErF,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,sBAAsB,CAAC,kCAAkC,CAAC,CAAA;AACnF,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,sBAAsB,IAAI,CAAA,UAAA,CAAY,CAAC,CAAA;AAE3E,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;KACpB;AAED,IAAA,MAAM,oBAAoB,CAAC,WAAqB,EAAE,KAAK,GAAG,CAAC,EAAA;QACzD,IAAI,CAAC,WAAW,EAAE,MAAM;AAAE,YAAA,OAAO,EAAE,CAAA;AAEnC,QAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AACzF,QAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;QAC5E,MAAM,UAAU,GAAG,EAAE,CAAA;QAErB,IAAI,mBAAmB,CAAC,MAAM;YAC5B,UAAU,CAAC,IAAI,CACb,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC;gBAClB,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AAC9G,aAAA,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAC7B,CAAA;QACH,IAAI,gBAAgB,CAAC,MAAM;YACzB,UAAU,CAAC,IAAI,CACb,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC;gBAClB,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AAClG,aAAA,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAC7B,CAAA;QAEH,IAAI,CAAC,UAAU,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAA;AAEjC,QAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,UAAU,CAAC,GAAG,CAAC,OAAO,QAAQ,MAAM;YAClC,QAAQ;AACR,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACxE,CAAC,CAAC,CACJ,CAAA;AAED,QAAA,OAAO,YAAY,CAAA;KACpB;AAED,IAAA,MAAM,aAAa,CAAC,QAAkB,EAAE,OAAgD,EAAA;AACtF,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM;AAAE,YAAA,OAAO,EAAE,CAAA;QAE1C,MAAM,QAAQ,GAAG,EAAE,CAAA;AACnB,QAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC/D,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE;AACpD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,IAAI,OAAO,EAAE,QAAQ,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACxF,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,IAAI;gBACJ,MAAM;gBACN,MAAM;gBACN,QAAQ;gBACR,YAAY;gBACZ,OAAO;gBACP,WAAW;gBACX,8BAA8B;gBAC9B,iBAAiB;gBACjB,OAAO;gBACP,WAAW;gBACX,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,OAAO;gBACP,WAAW;gBACX,aAAa;gBACb,OAAO;gBACP,KAAK;gBACL,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,eAAe;AAChB,aAAA;YACD,IAAI,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC;AACjE,SAAA,CAAC,CAAA;AAEF,QAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;AAE9B,QAAA,OAAO,QAAQ,CAAA;KAChB;IAEO,MAAM,KAAK,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;AAEjC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAElE,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE;AAAE,YAAA,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;AAEvC,QAAA,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,CAAA,UAAA,CAAY,CAAC,CAAA;KAC5D;AAEO,IAAA,MAAM,cAAc,CAC1B,UAAkB,EAClB,EAAE,QAAQ,EAAmE,EAAA;QAE7E,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;YACxD,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,2BAA2B;AACjC,oBAAA,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE;AAC5C,iBAAA;AACF,aAAA,CAAC,CAAA;AAEF,YAAA,OAAO,EAAE,CAAA;AACV,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAElD,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;QAEpE,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE;AAC5C,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,kCAAkC;AACxC,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACnG,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,QAAQ,CAAA;KAC1B;AAEO,IAAA,MAAM,cAAc,CAC1B,UAAkB,EAClB,EAAE,QAAQ,EAAmE,EAAA;QAE7E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAElD,IAAI,CAAC,SAAS,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAA;QAEpC,MAAM,IAAI,CAAC,QAAQ,CAAC,gCAAgC,EAAE,CAAC,aAAa,CAAC,EAAE;AACrE,YAAA,UAAU,EAAE;AACV,gBAAA,KAAK,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;AAClC,gBAAA,IAAI,EAAE,oCAAoC;AAC1C,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;AACtC,gBAAA,IAAI,EAAE,6BAA6B;AACnC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,QAAQ,CAAA;KAC1B;AACF;;AChPK,MAAO,8BACX,SAAQ,qBAAqB,CAAC,iBAAiB,CAAuB,IAAI,CAAC,CAAC,CAAA;IAsB5E,WAAY,CAAA,QAAgB,EAAE,WAAqC,EAAA;AACjE,QAAA,KAAK,CAAC;AACJ,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,KAAK,EAAE,oBAAoB;YAC3B,QAAQ;YACR,WAAW;AACX,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC,CAAA;AAygBI,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,KAA0B,MAAqB;AAC1E,YAAA,GAAG,EAAE,CAAgB,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;YACtG,SAAS,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,UAAU;YAC/F,SAAS,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,UAAU;YAC/F,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,OAAO,EAAE,KAAK,CAAC,QAAQ;AACxB,SAAA,CAAC,CAAA;AAEM,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,MAAqB,MAA2B;AAC5E,YAAA,GAAG,EAAE,CAAsB,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;YACxG,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,QAAQ,EAAE,MAAM,CAAC,OAAO;AACzB,SAAA,CAAC,CAAA;AAnhBA,QAAA,MAAM,YAAY,GAA8C;AAC9D,YAAA,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE;AACtF,YAAA,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AAC/C,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE;AAChD,YAAA,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;AAChC,YAAA,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;AAC9B,YAAA,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;YAC9B,OAAO;AACP,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA;AACE,gBAAA,WAAW,EAAE;AACX,oBAAA,UAAU,EAAE,aAAa;oBACzB,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,MAAM;wBAC5B,WAAW;wBACX,aAAa,EAAE,IAAI,CAAC,aAAa;wBACjC,UAAU,EAAE,IAAI,CAAC,YAAY;wBAC7B,QAAQ,EAAE,IAAI,CAAC,UAAU;wBACzB,KAAK,EAAE,IAAI,CAAC,iBAAiB;qBAC9B,CAAC;AACF,oBAAA,cAAc,EAAE,CAAC,QAAQ,KAAI;wBAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAA;wBAE/C,OAAO;AACL,4BAAA,IAAI,OAAO,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;AACjE,4BAAA,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;AACtE,4BAAA,IAAI,OAAO,CAAC,UAAU,IAAI;gCACxB,YAAY,EAAE,OAAO,CAAC,UAAU;6BACjC,CAAC;AACF,4BAAA,IAAI,OAAO,CAAC,QAAQ,IAAI;gCACtB,UAAU,EAAE,OAAO,CAAC,QAAQ;6BAC7B,CAAC;AACF,4BAAA,IAAI,OAAO,CAAC,KAAK,IAAI;gCACnB,iBAAiB,EAAE,OAAO,CAAC,KAAK;6BACjC,CAAC;yBACH,CAAA;qBACF;AACD,oBAAA,eAAe,EAAE,CAAC,eAAe,MAAM;AACrC,wBAAA,IAAI,eAAe,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,CAAC;AACjF,wBAAA,IAAI,eAAe,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE,CAAC;AACtF,wBAAA,IAAI,eAAe,CAAC,UAAU,IAAI;4BAChC,YAAY,EAAE,eAAe,CAAC,UAAU;yBACzC,CAAC;AACF,wBAAA,IAAI,eAAe,CAAC,QAAQ,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC;AACzE,wBAAA,IAAI,eAAe,CAAC,KAAK,IAAI,EAAE,iBAAiB,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC;qBAC3E,CAAC;AACH,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE;AAClD,YAAA,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AAC9C,YAAA,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC1C,YAAA,EAAE,gBAAgB,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,EAAE;AACzD,YAAA,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AAC/C,YAAA;AACE,gBAAA,MAAM,EAAE;AACN,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,EAAE,EAAE,CAAC,KAAe,MAAM,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAK,EAAA,EAAA,KAAK,EAAE,IAAI,GAAG,CAAK,GAAA,CAAA,CAAC,IAAI,EAAE,CAAI,EAAA,CAAA,GAAG,IAAI,CAAC;AAC1F,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,UAAU,EAAE;AACV,oBAAA,UAAU,EAAE,YAAY;AACxB,oBAAA,EAAE,EAAE,CAAC,KAAK,MAAM,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAK,EAAA,EAAA,KAAK,EAAE,IAAI,GAAG,CAAK,GAAA,CAAA,CAAC,IAAI,EAAE,CAAI,EAAA,CAAA,GAAG,IAAI,CAAC;AAChF,iBAAA;AACF,aAAA;YACD,MAAM;AACN,YAAA;AACE,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,OAAO;oBACnB,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,MAAiB;wBACjC,KAAK;wBACL,SAAS,EAAE,IAAI,CAAC,UAAU;wBAC1B,4BAA4B,EAAE,IAAI,CAAC,8BAA8B;wBACjE,eAAe,EAAE,IAAI,CAAC,gBAAgB;qBACvC,CAAC;AACF,oBAAA,cAAc,EAAE,CAAC,QAAQ,KAAI;wBAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAA;wBAE/C,OAAO;4BACL,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;4BACzE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AACxF,4BAAA,IAAI,CAAC,OAAO,CAAC,4BAA4B,IAAI,OAAO,CAAC,4BAA4B,KAAK,CAAC,KAAK;gCAC1F,8BAA8B,EAAE,OAAO,CAAC,4BAA4B;6BACrE,CAAC;AACF,4BAAA,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,KAAK,CAAC,KAAK;gCAChE,gBAAgB,EAAE,OAAO,CAAC,eAAe;6BAC1C,CAAC;yBACH,CAAA;qBACF;AACD,oBAAA,eAAe,EAAE,CAAC,SAAS,MAAM;AAC/B,wBAAA,IAAI,SAAS,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACxD,wBAAA,IAAI,SAAS,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;AACpE,wBAAA,IAAI,SAAS,CAAC,4BAA4B,IAAI,CAAC,IAAI;4BACjD,8BAA8B,EAAE,SAAS,CAAC,4BAA4B;yBACvE,CAAC;AACF,wBAAA,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC;qBACvF,CAAC;AACH,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA,EAAE,4BAA4B,EAAE,EAAE,UAAU,EAAE,gCAAgC,EAAE,EAAE;AAClF,YAAA,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE;YACvD,WAAW;YACX,KAAK;AACL,YAAA;AACE,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,OAAO;oBACnB,IAAI,EAAE,CAAC,QAAgB,MAAM,EAAE,QAAQ,EAAE,CAAC;oBAC1C,EAAE,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,QAAQ,CAAC;AAClE,iBAAA;AACF,aAAA;YACD,MAAM;YACN,MAAM;YACN,OAAO;YACP,QAAQ;YACR,QAAQ;AACR,YAAA,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,CAAC,KAAK,EAAE,EAAE;AACrE,YAAA,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;AACnC,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA;AACE,gBAAA,IAAI,EAAE;AACJ,oBAAA,UAAU,EAAE,mBAAmB;AAC/B,oBAAA,OAAO,EAAE;AACP,wBAAA,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACzB,wBAAA,UAAU,EAAE,yBAAyB;AACtC,qBAAA;AACD,oBAAA,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5C,oBAAA,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AAC1C,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE;SACpD,CAAA;QAED,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,GAAG,YAAY;AACf,YAAA;AACE,gBAAA,UAAU,EAAE;AACV,oBAAA,UAAU,EAAE,YAAY;oBACxB,MAAM,EAAE,CAAC,aAAa,CAAC;AACvB,oBAAA,eAAe,EAAE,CAAC,KAAK,MAAM;wBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;qBAC5E,CAAC;AACF,oBAAA,EAAE,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,CAAC;oBAC/D,IAAI,EAAE,CAAC,UAAqC,KAC1C,UAAU,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;AACzE,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,WAAW,EAAE;AACX,oBAAA,UAAU,EAAE,cAAc;AAC1B,oBAAA,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AACrC,oBAAA,MAAM,EAAE;AACN,wBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,wBAAA,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE;wBAClD,UAAU;AACV,wBAAA,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;AACrG,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,SAAS;AACrB,oBAAA,gBAAgB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;oBACtC,MAAM,EAAE,IAAI,CAAC,aAAa;AAC3B,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE;AACR,oBAAA,UAAU,EAAE,UAAU;AACtB,oBAAA,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;AAChC,oBAAA,eAAe,EAAE,CAAC,KAAK,MAAM;AAC3B,wBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;qBAC1B,CAAC;AACH,iBAAA;AACF,aAAA;SACF,CAAA;KACF;AA5MD,IAAA,IAAY,aAAa,GAAA;QACvB,OAAO;YACL,IAAI;YACJ,MAAM;YACN,MAAM;YACN,QAAQ;YACR,OAAO;YACP,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,OAAO;AACP,YAAA,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE;YACzC,QAAQ;AACR,YAAA,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;AACvC,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;SAC5C,CAAA;KACF;IA6LQ,MAAM,MAAM,CAAC,MAAoD,EAAA;QACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;AACpC,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAChC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CACzF,CAAA;QAED,IAAI;YACF,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;AAChF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;AAErC,YAAA,MAAM,KAAK,CAAA;AACZ,SAAA;AAED,QAAA,OAAO,OAAO,CAAA;KACf;IAEQ,MAAM,GAAG,CAAC,WAAsD,EAAA;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;cACzC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;cACzE,MAAM,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEhC,IAAI,OAAO,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,oCAAoC,CAAC,CAAA;AAEpF,QAAA,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;AAEnF,QAAA,OAAO,OAAO,CAAA;KACf;IAEQ,MAAM,IAAI,CACjB,MAAmD,EAAA;AAEnD,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;QACpD,MAAM,UAAU,GACd,MAAM;AACL,YAAA,IAAI,CAAC,MAAM;AACT,iBAAA,GAAG,CAAC,CAAC,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;iBAChF,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS,CAGpC,CAAA;QAEN,OAAO,KAAK,CAAC,IAAI,CAAC;AAChB,YAAA,GAAG,OAAO;AACV,YAAA,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE;AAC9D,YAAA,MAAM,EAAE,UAAU;AACnB,SAAA,CAAC,CAAA;KACH;IAED,MAAM,SAAS,CAAC,IAAY,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,OAAO,EAAE;gBACP,IAAI;AACL,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAErC,QAAA,OAAO,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAE9D,QAAA,OAAO,OAAO,CAAA;KACf;IAEQ,MAAM,MAAM,CAAC,MAAoD,EAAA;QACxE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;AACzF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACrD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;AAEnD,QAAA,OAAO,CAAC,UAAU,GAAG,UAAU,KAAK,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;AACrF,QAAA,OAAO,CAAC,WAAW,GAAG,WAAW,KAAK,MAAM,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;AACzF,QAAA,OAAO,CAAC,OAAO,GAAG,OAAO,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;AACzE,QAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AAE7E,QAAA,OAAO,OAAO,CAAA;KACf;IAED,MAAM,YAAY,CAAC,MAA0B,EAAA;AAC3C,QAAA,MAAM,iBAAiB,GAAG;YACxB,MAAM,EACJ,MAAM,KAAK,SAAS;kBAChB,EAAE,CAAC,kBAAkB,CAAC,MAAM,GAAG,IAAI,EAAE;kBACrC,EAAE,CAAC,kBAAkB,CAAC,MAAM,GAAG,MAAM,KAAK,UAAU,EAAE;SAC7D,CAAA;AACD,QAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CACxC,SAAS,EACT,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,EACzF;AACE,YAAA,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC3F,SAAA,CACF,CAAA;QAED,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,OAAgC,EAAE,OAA6B,KAAK;AACnE,YAAA,GAAG,OAAO;YACV,GAAG,OAAO,CAAC,OAAO;iBACf,MAAM,CACL,CAAC,MAAM,KACL,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;iBACjE,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;iBAChD,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CACrD;AACA,iBAAA,GAAG,CAAC,CAAC,MAAM,MAAM;AAChB,gBAAA,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBACjC,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,UAAU,EAAE,OAAO,CAAC,GAAG;AACxB,aAAA,CAAC,CAAC;SACN,EACD,EAA6B,CAC9B,CAAA;KACF;AAEO,IAAA,MAAM,gBAAgB,CAC5B,SAAiB,EACjB,EAAE,UAAU,EAAoE,EAAA;QAEhF,IAAI,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC5D,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,2BAA2B;AACjC,oBAAA,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;AAC1C,iBAAA;AACF,aAAA,CAAC,CAAA;AAEF,YAAA,OAAO,EAAE,CAAA;AACV,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAEpD,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;QAExE,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;AAC1C,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,kCAAkC;AACxC,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACtG,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,UAAU,CAAA;KAC5B;AAEO,IAAA,MAAM,iBAAiB,CAC7B,SAAiB,EACjB,EAAE,WAAW,EAAqE,EAAA;QAElF,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAA;QAErD,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,eAAe,CAAC,EAAE;AAC3D,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;AAC9C,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,eAAe,CAAC,EAAE;AAC3D,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,6BAA6B;AACnC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;AAChD,oBAAA,cAAc,EAAE,SAAS;oBACzB,UAAU,EAAE,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;oBACzD,QAAQ,EAAE,UAAU,CAAC,QAAQ;AAC9B,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,WAAW,CAAA;KAC7B;AAEO,IAAA,MAAM,aAAa,CACzB,SAAiB,EACjB,EAAE,OAAO,EAAiE,EAAA;AAE1E,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE,CAAA;QACvB,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AACtD,YAAA,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,UAAU,KAAI;gBACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;gBAE3D,OAAO,MAAM,EAAE,EAAE,CAAA;aAClB,CAAC,CACH,CAAA;YAED,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,eAAe,CAAC,EAAE;gBAC9D,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9G,aAAA,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACzF,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;QAEjD,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;AAElE,QAAA,OAAO,OAAO,CAAC,GAAG,CAChB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,UAAU,KAAI;YACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;YAE3D,IAAI,MAAM,CAAC,EAAE;AACX,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAC3B,CACE,MAAM,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE,IAAI,CAAC,aAAa,EAAE;AACrE,oBAAA,UAAU,EAAE;AACV,wBAAA,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;AACxB,wBAAA,IAAI,EAAE,iCAAiC;AACvC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACtE,wBAAA,IAAI,EAAE,0BAA0B;AAChC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA,CAAC,EACF,2BAA2B,CAC9B,CAAA;AAEH,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAC3B,CACE,MAAM,IAAI,CAAC,QAAQ,CAAC,2BAA2B,EAAE,IAAI,CAAC,aAAa,EAAE;AACnE,gBAAA,MAAM,EAAE;oBACN,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AACtF,oBAAA,IAAI,EAAE,6BAA6B;AACnC,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA;AACF,aAAA,CAAC,EACF,yBAAyB,CAC5B,CAAA;SACF,CAAC,CACH,CAAA;KACF;AAEO,IAAA,MAAM,cAAc,CAC1B,SAAiB,EACjB,EAAE,QAAQ,EAAkE,EAAA;QAE5E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAElD,IAAI,CAAC,SAAS,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAA;QAEpC,MAAM,IAAI,CAAC,QAAQ,CAAC,+BAA+B,EAAE,CAAC,YAAY,CAAC,EAAE;AACnE,YAAA,UAAU,EAAE;AACV,gBAAA,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;AAChC,gBAAA,IAAI,EAAE,mCAAmC;AACzC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC;AACrC,gBAAA,IAAI,EAAE,4BAA4B;AAClC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,QAAQ,CAAA;KAC1B;IAEO,MAAM,KAAK,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;AAEjC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAElE,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE;AAAE,YAAA,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;AAEvC,QAAA,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,CAAA,UAAA,CAAY,CAAC,CAAA;KAC3D;IAEO,MAAM,oBAAoB,CAAC,SAAiB,EAAA;AAClD,QAAA,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,EAAE;AACtF,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;AAC/B,iBAAA;AACD,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAA2B,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;KACzF;AAEO,IAAA,MAAM,UAAU,CAAC,MAAqB,EAAE,SAAiB,EAAA;QAC/D,IAAI,MAAM,CAAC,EAAE;AAAE,YAAA,OAAO,MAAM,CAAA;AAE5B,QAAA,IAAI,YAA2B,CAAA;QAE/B,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC9G,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK;YAChD,YAAY,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAE7G,OAAO,YAAY,IAAI,MAAM,CAAA;KAC9B;AAEO,IAAA,MAAM,mBAAmB,CAAC,QAAgB,EAAE,SAAiB,EAAE,OAAgB,EAAA;AACrF,QAAA,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,EAAE;AACtF,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;AAC9B,oBAAA,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC5B,oBAAA,IAAI,OAAO,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;AAC/C,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAyB,uBAAA,CAAA;AAC/B,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KAC1D;IAEO,MAAM,yBAAyB,CACrC,MAAc,EACd,KAAa,EACb,SAAiB,EACjB,OAAgB,EAAA;AAEhB,QAAA,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,EAAE;AACtF,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;AAC9B,oBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AACvB,oBAAA,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;AACrB,oBAAA,IAAI,OAAO,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;AAC/C,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAyB,uBAAA,CAAA;AAC/B,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KAC1D;AAeF;;AC5kBK,MAAO,8BACX,SAAQ,qBAAqB,CAAC,iBAAiB,CAAuB,IAAI,CAAC,CAAC,CAAA;IAG5E,WAAY,CAAA,QAAgB,EAAE,WAAqC,EAAA;AACjE,QAAA,KAAK,CAAC;AACJ,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,KAAK,EAAE,oBAAoB;YAC3B,QAAQ;YACR,WAAW;AACX,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAa,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE;AACtG,gBAAA,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AAC/C,gBAAA;AACE,oBAAA,SAAS,EAAE;AACT,wBAAA,UAAU,EAAE,iBAAiB;AAC7B,wBAAA,EAAE,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK;wBAC7B,IAAI,EAAE,CAAC,KAAa,KAAK,KAAK,EAAE,QAAQ,EAAE;AAC3C,qBAAA;AACF,iBAAA;AACD,gBAAA,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;AAC9B,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA;AACE,oBAAA,KAAK,EAAE;AACL,wBAAA,UAAU,EAAE,OAAO;wBACnB,IAAI,EAAE,CAAC,KAAa,EAAE,IAAyB,MAAiB;4BAC9D,KAAK;4BACL,SAAS,EAAE,IAAI,CAAC,UAAU;4BAC1B,4BAA4B,EAAE,IAAI,CAAC,8BAA8B;4BACjE,eAAe,EAAE,IAAI,CAAC,gBAAgB;yBACvC,CAAC;AACF,wBAAA,cAAc,EAAE,CAAC,QAAQ,KAAI;4BAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAA;4BAE/C,OAAO;gCACL,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;gCACzE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AACxF,gCAAA,IAAI,CAAC,OAAO,CAAC,4BAA4B,IAAI,OAAO,CAAC,4BAA4B,KAAK,CAAC,KAAK;oCAC1F,8BAA8B,EAAE,OAAO,CAAC,4BAA4B;iCACrE,CAAC;AACF,gCAAA,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,KAAK,CAAC,KAAK;oCAChE,gBAAgB,EAAE,OAAO,CAAC,eAAe;iCAC1C,CAAC;6BACH,CAAA;yBACF;AACD,wBAAA,eAAe,EAAE,CAAC,SAAwC,MAAM;AAC9D,4BAAA,IAAI,SAAS,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACxD,4BAAA,IAAI,SAAS,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;AACpE,4BAAA,IAAI,SAAS,CAAC,4BAA4B,IAAI,CAAC,IAAI;gCACjD,8BAA8B,EAAE,SAAS,CAAC,4BAA4B;6BACvE,CAAC;AACF,4BAAA,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC;yBACvF,CAAC;AACH,qBAAA;AACF,iBAAA;AACD,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA,EAAE,4BAA4B,EAAE,EAAE,UAAU,EAAE,gCAAgC,EAAE,EAAE;AAClF,gBAAA,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE;gBACvD,KAAK;AACL,gBAAA;AACE,oBAAA,KAAK,EAAE;AACL,wBAAA,UAAU,EAAE,OAAO;wBACnB,IAAI,EAAE,CAAC,QAAgB,MAAM,EAAE,QAAQ,EAAE,CAAC;wBAC1C,EAAE,EAAE,CAAC,KAAoC,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,QAAQ,CAAC;AACjG,qBAAA;AACF,iBAAA;gBACD,QAAQ;AACR,gBAAA,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAiB,SAAS,EAAE,EAAE;gBAC5D,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,KAAK,EAAE,IAAI,EAAE,MAAiB,SAAS,EAAE,EAAE;AAClG,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA;AACE,oBAAA,KAAK,EAAE;AACL,wBAAA,UAAU,EAAE,OAAO;wBACnB,IAAI,EAAE,uBAAuB,CAAC,KAAK;AACpC,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAA;KACH;IAEQ,MAAM,GAAG,CAAC,WAAsD,EAAA;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;cACzC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;cACzE,MAAM,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEhC,IAAI,CAAC,OAAO,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,CAAA,kCAAA,CAAoC,CAAC,CAAA;AAErF,QAAA,OAAO,OAAO,CAAA;KACf;IAEQ,MAAM,IAAI,CACjB,MAAmD,EAAA;QAEnD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;QAE5C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;KACrG;IAEQ,MAAM,MAAM,CAAC,MAAoD,EAAA;AACxE,QAAA,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;AAClD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;QACxE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;AACjD,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;AAEnD,QAAA,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAA;AAE/C,QAAA,OAAO,OAAO,CAAA;KACf;IAEO,MAAM,KAAK,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;AAEjC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAElE,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE;AAAE,YAAA,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;AAEvC,QAAA,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,CAAA,UAAA,CAAY,CAAC,CAAA;KAC3D;AACF;;ACvID;;AAEG;;;;"}
1
+ {"version":3,"file":"infrab4a-connect.mjs","sources":["../../../projects/connect/src/domain/generic/model/base.model.ts","../../../projects/connect/src/domain/generic/repository/enums/where.enum.ts","../../../projects/connect/src/domain/generic/repository/enums/update-option-actions.enum.ts","../../../projects/connect/src/domain/users/models/enums/accessory-importances.enum.ts","../../../projects/connect/src/domain/users/models/enums/area.enum.ts","../../../projects/connect/src/domain/users/models/enums/beard-problems.enum.ts","../../../projects/connect/src/domain/users/models/enums/beard-sizes.enum.ts","../../../projects/connect/src/domain/users/models/enums/beauty-product-importances.enum.ts","../../../projects/connect/src/domain/users/models/enums/body-problems.enum.ts","../../../projects/connect/src/domain/users/models/enums/body-shapes.enum.ts","../../../projects/connect/src/domain/users/models/enums/body-tattoos.enum.ts","../../../projects/connect/src/domain/users/models/enums/face-skin-oilinesses.enum.ts","../../../projects/connect/src/domain/users/models/enums/face-skin-problems.enum.ts","../../../projects/connect/src/domain/users/models/enums/face-skin-tones.enum.ts","../../../projects/connect/src/domain/users/models/enums/family-incomes.enum.ts","../../../projects/connect/src/domain/users/models/enums/fragrance-importances.enum.ts","../../../projects/connect/src/domain/users/models/enums/hair-colors.enum.ts","../../../projects/connect/src/domain/users/models/enums/hair-problems.enum.ts","../../../projects/connect/src/domain/users/models/enums/hair-strands.enum.ts","../../../projects/connect/src/domain/users/models/enums/hair-types.enum.ts","../../../projects/connect/src/domain/users/models/enums/office-position.enum.ts","../../../projects/connect/src/domain/users/models/enums/product-spents.enum.ts","../../../projects/connect/src/domain/users/models/enums/user-type.enum.ts","../../../projects/connect/src/domain/users/models/subscription/enums/billing-status.enum.ts","../../../projects/connect/src/domain/users/models/subscription/enums/edition-status.enum.ts","../../../projects/connect/src/domain/users/models/subscription/enums/payment-type.enum.ts","../../../projects/connect/src/domain/users/models/subscription/enums/status.enum.ts","../../../projects/connect/src/domain/users/models/subscription/edition.ts","../../../projects/connect/src/domain/shopping/models/payment.ts","../../../projects/connect/src/domain/users/models/subscription/payment.ts","../../../projects/connect/src/domain/location/models/address.ts","../../../projects/connect/src/utils/get.ts","../../../projects/connect/src/utils/is.ts","../../../projects/connect/src/utils/is-uuid.ts","../../../projects/connect/src/utils/mixins/base.mixin.ts","../../../projects/connect/src/utils/parse-datetime.ts","../../../projects/connect/src/domain/shopping/models/enums/checkout-types.enum.ts","../../../projects/connect/src/domain/shopping/models/coupons/enums/coupon-types.enum.ts","../../../projects/connect/src/domain/shopping/models/coupons/enums/coupon-subtypes.enum.ts","../../../projects/connect/src/domain/shopping/models/coupons/enums/exclusivities.enum.ts","../../../projects/connect/src/domain/shopping/models/coupons/coupon.ts","../../../projects/connect/src/domain/shopping/models/subscription/plan.ts","../../../projects/connect/src/domain/users/models/beauty-profile.ts","../../../projects/connect/src/domain/users/models/user.ts","../../../projects/connect/src/domain/users/models/subscription/subscription.ts","../../../projects/connect/src/domain/users/models/user-address.ts","../../../projects/connect/src/domain/users/models/user-payment-method.ts","../../../projects/connect/src/domain/users/models/lead.ts","../../../projects/connect/src/domain/users/errors/unauthorized.error.ts","../../../projects/connect/src/domain/users/use-cases/authentication.ts","../../../projects/connect/src/domain/users/errors/user-already-registered.error.ts","../../../projects/connect/src/domain/users/errors/weak-password.error.ts","../../../projects/connect/src/domain/users/use-cases/register.ts","../../../projects/connect/src/domain/users/use-cases/signout.ts","../../../projects/connect/src/domain/users/use-cases/recovery-password.ts","../../../projects/connect/src/domain/catalog/models/category.ts","../../../projects/connect/src/domain/catalog/models/enums/product-genders.enum.ts","../../../projects/connect/src/domain/catalog/models/enums/shops.enum.ts","../../../projects/connect/src/domain/catalog/models/product.ts","../../../projects/connect/src/domain/catalog/models/kit-product.ts","../../../projects/connect/src/domain/catalog/models/variant.ts","../../../projects/connect/src/domain/shopping/models/enums/order-status.enum.ts","../../../projects/connect/src/domain/shopping/models/line-item.ts","../../../projects/connect/src/domain/shopping/models/shipping-method.ts","../../../projects/connect/src/domain/shopping/models/checkout.ts","../../../projects/connect/src/domain/shopping/models/order.ts","../../../projects/connect/src/domain/shopping/models/subscription/checkout.ts","../../../projects/connect/src/domain/shopping/models/buy-2-win.ts","../../../projects/connect/src/domain/shop-settings/enums/filter-type.enum.ts","../../../projects/connect/src/domain/shop-settings/enums/questions-filters.enum.ts","../../../projects/connect/src/domain/shop-settings/helpers/beauty-questions.helper.ts","../../../projects/connect/src/domain/shop-settings/models/home.ts","../../../projects/connect/src/domain/shop-settings/models/shop-menu.ts","../../../projects/connect/src/errors/invalid-argument.error.ts","../../../projects/connect/src/errors/required-argument.error.ts","../../../projects/connect/src/errors/not-found.error.ts","../../../projects/connect/src/errors/duplicated-results.error.ts","../../../projects/connect/src/infra/elasticsearch/adapters/axios.adapter.ts","../../../projects/connect/src/infra/elasticsearch/indexes/products-index.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-helpers.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-get-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/enums/firestore-field-type.enum.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-find-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-create-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-update-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-delete-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-sub-collection.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/mixins/with-crud-firestore.mixin.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/lead-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/subscription-edition-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/subscription-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/subscription-payment-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/user-address-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/user-beauty-profile-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/user-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/users/user-payment-method-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/catalog/category-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/catalog/product-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/catalog/product-variant-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/catalog/subscription-product-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/checkout-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/coupon-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/order-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/payment-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/checkout-subscription-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/subscription-plan-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/buy-2-win-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shopping/legacy-order-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shop-settings/home-firestore.repository.ts","../../../projects/connect/src/infra/firebase/firestore/repositories/shop-settings/shop-menu-firestore.repository.ts","../../../projects/connect/src/infra/firebase/auth/authentication-firebase-auth.service.ts","../../../projects/connect/src/infra/firebase/auth/register-firebase-auth.service.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/helpers/attribute-option.helper.ts","../../../projects/connect/src/infra/hasura-graphql/enums/hasura-graphql-where.enum.ts","../../../projects/connect/src/infra/hasura-graphql/enums/hasura-graphql-column-type.enum.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/helpers/filter-option.helper.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/helpers/bind-filter-query.helper.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/helpers/graphql-field.helper.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-create-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-delete-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-update-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-get-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-find-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/mixins/with-crud-hasura-graphql.mixin.ts","../../../projects/connect/src/infra/hasura-graphql/models/category-hasura-graphql.ts","../../../projects/connect/src/infra/hasura-graphql/models/product-hasura-graphql.ts","../../../projects/connect/src/infra/hasura-graphql/models/kit-product-hasura-graphql.ts","../../../projects/connect/src/infra/hasura-graphql/models/variant-hasura-graphql.ts","../../../projects/connect/src/infra/hasura-graphql/repositories/catalog/category-hasura-graphql.repository.ts","../../../projects/connect/src/infra/hasura-graphql/repositories/catalog/product-hasura-graphql.repository.ts","../../../projects/connect/src/infra/hasura-graphql/repositories/catalog/variant-hasura-graphql.repository.ts","../../../projects/connect/src/infrab4a-connect.ts"],"sourcesContent":["import { instanceToPlain, plainToInstance } from 'class-transformer'\n\nimport {\n BaseModelBuilder,\n ModelBaseStructure,\n NonFunctionAndIdentifierProperties,\n NonFunctionProperties,\n} from './types'\n\nexport type GenericIdentifier<T = 'id'> = T\n\nexport class BaseModel<Model, Identifiers = GenericIdentifier> implements ModelBaseStructure<Model, Identifiers> {\n get identifier(): NonFunctionAndIdentifierProperties<Model> {\n const fields = (this.constructor as BaseModelBuilder<Model>).identifiersFields.filter(\n (field) => field !== 'identifier',\n )\n\n return fields.reduce(\n (object, field) => ({ ...object, [field]: this[field as keyof BaseModel<Model>] }),\n {} as NonFunctionAndIdentifierProperties<Model>,\n )\n }\n\n get identifiersFields(): Identifiers[] {\n return (this.constructor as BaseModelBuilder<Model, Identifiers>).identifiersFields\n }\n\n constructor(args?: Partial<Model>) {\n Object.assign(this, args)\n }\n\n static toInstance<T extends ModelBaseStructure>(this: new () => T, data?: Partial<NonFunctionProperties<T>>): T {\n return plainToInstance(this, data || {})\n }\n\n static isModel<T extends ModelBaseStructure>(this: new () => T, value: any): value is T {\n return value instanceof this\n }\n\n toPlain(): any {\n return instanceToPlain(this)\n }\n}\n","export enum Where {\n EQUALS = '==',\n NOTEQUALS = '!=',\n GT = '>',\n GTE = '>=',\n IN = 'in',\n NOTIN = 'not in',\n LT = '<',\n LTE = '<=',\n LIKE = 'like',\n NOTLIKE = 'not like',\n ISNULL = 'is null',\n ISNOTNULL = 'is not null',\n}\n","export enum UpdateOptionActions {\n UPDATE = 'update',\n MERGE = 'merge',\n REMOVE = 'remove',\n REMOVE_FIELD = 'removeField',\n NULL = 'null',\n}\n","export enum AccessoryImportances {\n NOT_INTERESTED = 'Não tenho interesse',\n LIKE_RARELY_USE = 'Gosto, mas uso poucos',\n LIKE_ALWAYS_FOLLOW_FASHION = 'Gosto muito de acessórios e sempre procuro acompanhar a moda',\n}\n","export enum Area {\n GP = 'Geral',\n CRM = 'CRM',\n MediaProd = 'Media Production',\n Tech = 'Tecnologia',\n Transactional = 'Transacional',\n Operations = 'Opera\\u00E7\\u00F5es',\n Sales = 'Comercial',\n Finantial = 'Financeiro',\n HR = 'RH',\n}\n","export enum BeardProblems {\n NO_PROBLEMS = 'Sem problemas',\n DRY = 'Barba Seca',\n OILY = 'Barba Oleaosa',\n DANCRUFF = 'Barba com Caspa',\n INGROWN_HAIRS = 'Pêlos Encravados',\n DOESNT_GROW = 'Não Cresce',\n SPARSE_BEARD = 'Barba Rala',\n}\n","export enum BeardSizes {\n BIG = 'Grande',\n MEDIUM = 'Média',\n SHORT = 'Curta',\n MUSTACHE = 'Bigode',\n NOTHING = 'Sem Barba',\n}\n","export enum BeautyProductImportances {\n KNOW_LITTLE_ABOUT = 'Conheço bem pouco de produtos de beleza e rotinas de cuidados',\n ALREADY_BOUGHT_NOTHING_SPECIALIZED = 'Já comprei alguns produtos básicos para cuidar de mim, mas nada muito especializado',\n GOOD_CARE_MYSELF = 'Me considero um homem que se cuida bem. Conheço sobre produtos especializados e me preocupo em ter uma rotina de cuidados',\n PERSONAL_CARE_EXPERT = 'Sou um expert em cuidados pessoais',\n}\n","export enum BodyProblems {\n NO_WORRIES = 'Sem preocupações',\n FLACCIDITY = 'Flacidez',\n LOCALIZED_FAT = 'Gordura Localizada',\n STRETCH_MARKS = 'Estrias',\n SENSITIVE_SKIN = 'Pele Sensível',\n DRY_SKIN = 'Pele Seca',\n OILY_ACNE = 'Oleosa/Acne',\n SKIN_FRECKLES = 'Pele com Sardas',\n PHOTOSENSITIVE_SKIN = 'Pele Fotossensível',\n}\n","export enum BodyShapes {\n LEAN = 'Magro',\n REGULAR = 'Regular',\n OVERWEIGHT = 'Acima do Peso',\n ATHLETIC = 'Atlético',\n MUSCULAR = 'Musculoso',\n}\n","export enum BodyTattoos {\n NONE = 'Nenhuma',\n HAS_DOESNT_CARE = 'Tenho mas não cuido',\n HAS_CARE_LOT = 'Tenho e cuido bastante',\n}\n","export enum FaceSkinOilinesses {\n DRY = 'Seca',\n OILY = 'Oleaosa',\n MIXED = 'Mista',\n NORMAL = 'Normal',\n DONT_KNOW = 'Eu não sei como dizer',\n}\n","export enum FaceSkinProblems {\n NO_PROBLEMS = 'Sem problemas',\n DARK_CIRCLES = 'Olheiras',\n WRINKLES = 'Rugas',\n BLACKHEADS_PIMPLES = 'Cravos e Espinhas',\n STAINS = 'Manchas',\n FRECKLES = 'Sardas',\n SENSITIVE = 'Sensível',\n PHOTOSENSITIVE = 'Fotossensível',\n}\n","export enum FaceSkinTones {\n VERY_CLEAR = 'Muito Clara',\n CLEAR = 'Clara',\n MEDIUM_LIGHT = 'Clara Média',\n MEDIUM_DARK = 'Escura Média',\n DARK = 'Escura',\n VERY_DARK = 'Muito Escura',\n}\n","export enum FamilyIncomes {\n UNTIL_3000 = 'Até R$3.000',\n SINCE_3001_TO_7000 = 'De R$3.001 a R$7.000',\n SINCE_7001_TO_10000 = 'De R$7.001 a R$10.000',\n SINCE_10001_TO_15000 = 'De R$10.001 a R$15.000',\n GRAN_THAN_15000 = 'Mais de R$15.000',\n NOW_ANSWER = 'Prefiro nao responder',\n}\n","export enum FragranceImportances {\n NOT_INTERESTED = 'Não tenho interesse',\n LIKE_ALWAYS_USE_SAME = 'Gosto de perfumes, mas uso sempre os mesmos',\n LIKE_INNOVATE = 'Gosto de inovar e conhecer novas fragrâncias',\n}\n","export enum HairColors {\n BLACK = 'Preto',\n DARK_BROWN = 'Castanho Escuro',\n LIGHT_BROWN = 'Castanho Claro',\n DARK_BLONDE = 'Loiro Escuro',\n LIGHT_BLONDE = 'Loiro Claro',\n WHITE_GRAY = 'Branco/Grisalho',\n REDHEAD = 'Ruivo',\n OTHER = 'RuiOutroo',\n}\n","export enum HairProblems {\n NO_PROBLEMS = 'Sem problemas',\n DANCRUFF = 'Caspa',\n LOSS = 'Queda',\n OILY = 'Oleosidade',\n DRYNESS = 'Ressecamento',\n CHEMICAL = 'Quimica',\n WHITE_HAIR = 'Cabelos Brancos',\n REBEL_WIRES = 'Fios Rebeldes',\n}\n","export enum HairStrands {\n NORMAL = 'Fio Normal',\n DRY = 'Fio Seco',\n OILY = 'Fio Oleoso',\n MIXED = 'Fio Misto',\n FINE = 'Fio Fino',\n THICK = 'Fio Grosso',\n}\n","export enum HairTypes {\n Smooth = 'Liso',\n WAVY = 'Ondulado',\n CURLY = 'Cacheado',\n FRIZZY = 'Crespo',\n BALD = 'Sou careca',\n}\n","export enum OfficePosition {\n Intern = 'Estagi\\u00E1rio',\n Analyst = 'Analista',\n Manager = 'Gerente',\n Director = 'Diretor',\n}\n","export enum ProductSpents {\n UNTIL_50 = 'Até R$50',\n SINCE_51_TO_100 = 'De R$51 a R$100',\n SINCE_101_TO_200 = 'De R$101 a R$200',\n SINCE_201_TO_300 = 'De R$201 a R$300',\n GRAN_THAN_300 = 'Mais de R$300',\n NOW_ANSWER = 'Prefiro nao responder',\n}\n","export enum UserType {\n B2C = 'Cliente Transacional',\n GlamGirl = 'Glamgirl',\n MensBoy = 'Mensboy',\n B2B = 'Company',\n Collaborator = 'Funcionário',\n Influencer = 'Influencer',\n}\n","export enum BillingStatus {\n PAYED = 'PAGO',\n}\n","export enum EditionStatus {\n ALLOCATION_WAITING = 'Aguardando alocação',\n SHIPPED = 'Enviado',\n}\n","export enum PaymentType {\n AQUISITION = 'Aquisição',\n RENEWAL = 'Renovação',\n FREIGHT = 'mudança de endereço, Frete',\n}\n","export enum Status {\n ACTIVE = 'active',\n CANCELLED = 'Cancelado',\n}\n","import { BaseModel } from '../../../generic/model/base.model'\n\nimport { EditionStatus, BillingStatus } from './enums'\n\nexport type EditionIdentifiers = 'id' | 'subscriptionId'\n\nexport class Edition extends BaseModel<Edition, EditionIdentifiers> {\n id: string\n subscriptionId: string\n billingStatus: BillingStatus\n editionId: number\n editionStatus: EditionStatus\n installment: number\n paymentId: string\n draftId?: string\n createdAt: Date\n updatedAt: Date\n\n static get identifiersFields(): EditionIdentifiers[] {\n return ['id', 'subscriptionId']\n }\n}\n","import { Expose } from 'class-transformer'\n\nimport { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\n\nimport { PaymentBilling, PaymentCard, PaymentCustomer, PaymentItem, PaymentShipping } from './types'\n\nexport class Payment extends BaseModel<Payment> {\n id: number\n object: string\n status: string\n tid: number\n nsu: number\n amount: number\n cost: number\n installments: number\n referer: string\n ip: string\n phone: string\n address: string\n metadata: any\n device: string\n payment: string\n addition: string\n discount: string\n customer: PaymentCustomer\n billing: PaymentBilling\n shipping: PaymentShipping\n items: PaymentItem[]\n card: PaymentCard\n\n @Expose({ name: 'refuse_reason' })\n refuseReason: string\n @Expose({ name: 'status_reason' })\n statusReason: string\n @Expose({ name: 'acquirer_response_code' })\n acquirerResponseCode: string\n @Expose({ name: 'acquirer_name' })\n acquirerName: string\n @Expose({ name: 'acquirer_id' })\n acquirerId: string\n @Expose({ name: 'authorization_code' })\n authorizationCode: string\n @Expose({ name: 'soft_descriptor' })\n softDescriptor: string\n @Expose({ name: 'date_created' })\n dateCreated: string\n @Expose({ name: 'date_updated' })\n dateUpdated: string\n @Expose({ name: 'authorized_amount' })\n authorizedAmount: number\n @Expose({ name: 'paid_amount' })\n paidAmount: number\n @Expose({ name: 'refunded_amount' })\n refundedAmount: number\n @Expose({ name: 'card_holder_name' })\n cardHolderName: string\n @Expose({ name: 'card_last_digits' })\n cardLastDigits: string\n @Expose({ name: 'card_first_digits' })\n cardFirstDigits: string\n @Expose({ name: 'card_brand' })\n cardBrand: string\n @Expose({ name: 'card_pin_mode' })\n cardPinMode: string\n @Expose({ name: 'card_magstripe_fallback' })\n cardMagstripeFallback: boolean\n @Expose({ name: 'cvm_pin' })\n cvmPin: boolean\n @Expose({ name: 'postback_url' })\n postbackUrl: string\n @Expose({ name: 'payment_method' })\n paymentMethod: string\n @Expose({ name: 'capture_method' })\n captureMethod: string\n @Expose({ name: 'antifraud_score' })\n antifraudScore: string\n @Expose({ name: 'boleto_url' })\n boletoUrl: string\n @Expose({ name: 'boleto_barcode' })\n boletoBarcode: string\n @Expose({ name: 'boleto_expiration_date' })\n boletoExpirationDate: string\n @Expose({ name: 'subscription_id' })\n subscriptionId: string\n @Expose({ name: 'split_rules' })\n splitRules: string\n @Expose({ name: 'antifraud_metadata' })\n antifraudMetadata: any\n @Expose({ name: 'reference_key' })\n referenceKey: string\n @Expose({ name: 'local_transaction_id' })\n localTransactionId: string\n @Expose({ name: 'local_time' })\n localTime: string\n @Expose({ name: 'fraud_covered' })\n fraudCovered: boolean\n @Expose({ name: 'fraud_reimbursed' })\n fraudReimbursed: string\n @Expose({ name: 'order_id' })\n orderId: string\n @Expose({ name: 'risk_level' })\n riskLevel: string\n @Expose({ name: 'receipt_url' })\n receiptUrl: string\n @Expose({ name: 'private_label' })\n privateLabel: string\n @Expose({ name: 'pix_qr_code' })\n pixQrCode: string\n @Expose({ name: 'pix_expiration_date' })\n pixExpirationDate: string\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { BaseModel } from '../../../generic/model/base.model'\nimport { Payment } from '../../../shopping/models/payment'\n\nimport { PaymentType } from './enums/payment-type.enum'\n\nexport type SubscriptionPaymentIdentifiers = 'id' | 'subscriptionId'\n\nexport class SubscriptionPayment extends BaseModel<SubscriptionPayment, SubscriptionPaymentIdentifiers> {\n id: string\n subscriptionId: string\n paymentType: PaymentType\n createdAt: Date\n attempts?: number\n\n @Type(() => Payment)\n payment: Payment\n\n static get identifiersFields(): SubscriptionPaymentIdentifiers[] {\n return ['id', 'subscriptionId']\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\n\nimport { LocationGeometry } from './types/location-geometry.type'\n\nexport abstract class Address<Identifiers = GenericIdentifier> extends BaseModel<Address, Identifiers> {\n default?: boolean\n recipient?: string\n zip?: string\n street?: string\n number?: string\n extension?: string\n district?: string\n city?: string\n regionalPole?: string\n region?: string\n state?: string\n country?: string\n mailbox?: boolean\n mailboxNumber?: string\n formattedAddress?: string\n placeId?: string\n geometry?: LocationGeometry\n\n static get identifiersFields(): string[] {\n return ['id']\n }\n}\n","import { get as getLodash } from 'lodash'\n\nexport const get = (object: any, path: string, defaultValue?: any) => getLodash(object, path, defaultValue)\n","export function is<T>(value: any): T {\n return value\n}\n","import { isString } from 'lodash'\n\nexport const isUUID = (value: string): boolean =>\n isString(value) && /[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}/.test(value)\n","export class Base {\n constructor(...args: Array<any>) {\n Object.assign(this, ...args)\n }\n}\n","import { isString } from 'lodash'\nimport { parseISO } from 'date-fns'\n\nexport const parseDateTime = (value: string): string | Date => {\n if (!isString(value)) return value\n if (\n !/^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/.test(value) &&\n !/^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T\\d{2}:\\d{2}:\\d{2}/.test(value)\n )\n return value\n\n const date = parseISO(value)\n\n if (isNaN(date.getTime())) return value\n\n return date\n}\n","export enum CheckoutTypes {\n ECOMMERCE = 1,\n SUBSCRIPTION = 2,\n ALL = 3,\n}\n","export enum CouponTypes {\n ABSOLUTE = 1,\n PERCENTAGE = 2,\n // FINANCIAL = 1,\n // PRODUCT,\n // GIFTCARD,\n // VOUCHER,\n}\n","export enum CouponSubtypes {\n ABSOLUTE = 1,\n PERCENTAGE = 2,\n}\n","export enum Exclusivities {\n ALL_USERS = 1,\n SPECIFIC_USER = 2,\n COLLABORATORS = 3,\n ACTIVE_SUBSCRIBER = 4,\n INACTIVE_SUBSCRIBER = 5,\n NON_SUBSCRIBER = 6,\n}\n","import { Expose } from 'class-transformer'\n\nimport { isNil } from '../../../../utils'\nimport { Shops } from '../../../catalog/models/enums/shops.enum'\nimport { BaseModel, GenericIdentifier } from '../../../generic/model/base.model'\nimport { CheckoutTypes } from '../enums/checkout-types.enum'\n\nimport { CouponTypes, Exclusivities } from './enums'\nimport { ClubeDaMensPlan } from './enums/coupon-club-mens.enum'\n\nconst COUPON_EXPIRATION = +1000 * 60 * 60 * 24 * 30\n\nexport class Coupon extends BaseModel<Coupon> {\n id: string\n type: CouponTypes\n discount?: number\n user?: string\n userExclusiveEmail?: string\n campaign?: string\n nickname: string\n beginAt: Date\n expiresIn?: Date\n useLimit?: number\n useLimitPerUser?: boolean\n shopAvailability: Shops\n personId?: number\n influencerEmail?: string\n plan?: ClubeDaMensPlan\n productsCategories: string[]\n minSubTotalValue?: number\n active?: Boolean\n createdAt: Date\n updatedAt?: Date\n\n @Expose({ name: 'checkout_type' })\n checkoutType: CheckoutTypes\n\n @Expose({ name: 'exclusivity_type' })\n exclusivityType?: Exclusivities\n\n get isInfluencer(): boolean {\n return !isNil(this.influencerEmail)\n }\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n\n static createCoupon(userId: string): Coupon {\n return this.toInstance({\n nickname: `${Date.now()}`,\n type: CouponTypes.ABSOLUTE,\n checkoutType: CheckoutTypes.ECOMMERCE,\n discount: 30,\n user: userId,\n useLimit: 1,\n useLimitPerUser: true,\n createdAt: new Date(Date.now()),\n beginAt: new Date(Date.now()),\n expiresIn: new Date(Date.now() + COUPON_EXPIRATION),\n })\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../../generic/model/base.model'\n\nexport class SubscriptionPlan extends BaseModel<SubscriptionPlan> {\n id: string\n name: string\n billingPrice: number\n recurrencePrice: number\n recurrenceCycle: number\n maxAttempts: number\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { BaseModel } from '../../generic/model/base.model'\n\nimport { BeardSizes, HairTypes } from './enums'\n\nexport type BeautyProfileIdentifiers = 'id' | 'userId'\n\nexport class BeautyProfile extends BaseModel<BeautyProfile, BeautyProfileIdentifiers> {\n id: string\n userId: string\n beardSize?: BeardSizes\n hairType?: HairTypes\n\n override toPlain(): any {\n const plain = super.toPlain()\n\n delete plain.id\n\n return plain\n }\n\n static get identifiersFields(): BeautyProfileIdentifiers[] {\n return ['id', 'userId']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { isNil } from '../../../utils'\nimport { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\nimport { ModelBaseStructure, NonFunctionProperties } from '../../generic/model/types'\n\nimport { BeautyProfile } from './beauty-profile'\nimport { Area, OfficePosition, UserType } from './enums'\n\nexport class User extends BaseModel<User> {\n id: string\n cpf?: string\n email: string\n firstName?: string\n lastName?: string\n displayName?: string\n phone?: string\n birthday?: Date\n acceptsNewsletter?: boolean\n type?: UserType\n area?: Area\n officePosition?: OfficePosition\n isSubscriber?: boolean\n subscriptionPlan?: string\n badgeId?: number\n badgeMultiplier?: number\n dateCreated?: Date\n dateModified?: Date\n\n @Type(() => BeautyProfile)\n beautyProfile?: BeautyProfile\n\n static override toInstance<T extends ModelBaseStructure<User>>(\n this: new () => T,\n data?: Partial<NonFunctionProperties<User>>,\n ): T {\n const instance = super.toInstance(data) as User\n\n if (!isNil(data.firstName))\n instance.displayName = `${data.firstName}${!isNil(data.lastName) ? ` ${data.lastName}` : ''}`\n\n return instance as any\n }\n\n override toPlain(): Record<string, any> {\n const plain = super.toPlain()\n\n delete plain.beautyProfile\n\n return plain\n }\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { Address } from '../../../location/models/address'\nimport { BaseModel, GenericIdentifier } from '../../../generic/model/base.model'\nimport { Coupon } from '../../../shopping/models/coupons/coupon'\nimport { SubscriptionPlan } from '../../../shopping/models/subscription/plan'\nimport { User } from '../user'\n\nimport { Edition } from './edition'\nimport { Status } from './enums/status.enum'\nimport { SubscriptionPayment } from './payment'\n\nexport class Subscription extends BaseModel<Subscription> {\n id: string\n nextPayment: Date\n recurrence: boolean\n status: Status\n cardToken: string\n subtotalPrice?: number\n discount?: number\n totalPrice?: number\n createdAt: Date\n updatedAt: Date\n\n @Type(() => User)\n user: User\n @Type(() => SubscriptionPlan)\n subscriptionPlan: SubscriptionPlan\n @Type(() => Address)\n shippingAddress: Address\n @Type(() => Address)\n billingAddress?: Address\n @Type(() => Coupon)\n coupon?: Coupon\n @Type(() => Edition)\n editions: Edition[]\n @Type(() => SubscriptionPayment)\n payment?: SubscriptionPayment[]\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Address } from '../../location/models/address'\n\nexport type UserAddressIdentifiers = 'id' | 'userId'\n\nexport class UserAddress extends Address<UserAddressIdentifiers> {\n id: string\n userId: string\n\n static override get identifiersFields(): UserAddressIdentifiers[] {\n return ['id', 'userId']\n }\n}\n","import { BaseModel } from '../../generic/model/base.model'\n\nexport type UserPaymentIdentifiers = 'id' | 'userId'\n\nexport class UserPaymentMethod extends BaseModel<UserPaymentMethod, UserPaymentIdentifiers> {\n brand: string\n cpf: string\n holderName: string\n last4: string\n pagarmeToken: string\n validUntil: string\n userId: string\n id: string\n fingerprint: string\n\n static get identifiersFields(): UserPaymentIdentifiers[] {\n return ['id', 'userId']\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\n\nexport class Lead extends BaseModel<Lead> {\n id: string\n acceptsNewsletter: boolean\n email: string\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class UnauthorizedError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import { isNil } from '../../../utils'\nimport { UnauthorizedError } from '../errors/unauthorized.error'\nimport { Area, OfficePosition, User, UserType } from '../models'\nimport { UserRepository } from '../repositories/user.repository'\nimport { AuthenticationService } from '../services/authentication.service'\n\nexport enum SignInMethods {\n EMAIL_PASSWORD = 'email_password',\n GOOGLE = 'google',\n}\n\ntype SignInMethod = Lowercase<keyof typeof SignInMethods>\n\ntype SignInParams = {\n email?: string\n password?: string\n}\n\nexport class Authentication {\n constructor(private readonly authService: AuthenticationService, private readonly userRepository: UserRepository) {}\n\n async signIn({ email, password }: SignInParams, signInMethod: SignInMethod): Promise<User> {\n const method = this.getServiceByMethod(signInMethod)\n const userAuth = await this.authService[method]({ email, password } as any)\n const user = this.userRepository.get(userAuth)\n\n if (!isNil(user)) return user\n if (/^.+@b4a.com.br$/.test(userAuth.email)) return this.createsUserByCredential(userAuth)\n\n throw new UnauthorizedError('Invalid credentials')\n }\n\n private getServiceByMethod(\n signInMethod: SignInMethod,\n ): keyof Pick<AuthenticationService, 'signInWithEmailAndPassword' | 'signInWithGoogle'> {\n return signInMethod === SignInMethods.EMAIL_PASSWORD ? 'signInWithEmailAndPassword' : 'signInWithGoogle'\n }\n\n private async createsUserByCredential(user: Partial<User>): Promise<User> {\n const [firstName, lastName] = user.displayName?.split(/\\s/)\n const person = User.toInstance({\n ...user,\n cpf: '',\n birthday: new Date(),\n firstName,\n lastName,\n acceptsNewsletter: false,\n area: Area.Transactional,\n officePosition: OfficePosition.Intern,\n type: UserType.Collaborator,\n })\n\n return this.userRepository.create(person)\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class UserAlreadyRegisteredError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class WeakPasswordError extends CustomError {\n constructor(message = 'Weak password') {\n super(message)\n }\n}\n","import { User, UserType } from '../models'\nimport { RegisterService } from '../services/register.service'\nimport { UserAlreadyRegisteredError } from '../errors'\nimport { UserRepository } from '../repositories/user.repository'\n\ntype RegisterParams = Partial<User> & { password: string }\n\nexport class Register {\n constructor(private readonly registerService: RegisterService, private readonly userRepository: UserRepository) {}\n\n async register(params: RegisterParams): Promise<User> {\n const email = params.email.toLocaleLowerCase()\n const displayName = `${params.firstName} ${params.lastName}`\n\n if (await this.userRepository.checkIfExistsByField('cpf', params.cpf))\n throw new UserAlreadyRegisteredError(`Usuário com CPF ${params.cpf} já registrado.`)\n if (await this.userRepository.checkIfExistsByField('email', params.email))\n throw new UserAlreadyRegisteredError(`Usuário com e-mail ${params.email} já registrado.`)\n\n const auth = await this.registerService.register({\n birthday: params.birthday,\n email,\n firstName: params.firstName,\n lastName: params.lastName,\n cpf: params.cpf,\n displayName,\n phone: params.phone,\n password: params.password,\n })\n\n delete params.password\n\n const user = await this.userRepository.create({\n ...params,\n id: auth.id,\n email,\n displayName,\n type: UserType.B2C,\n dateCreated: new Date(),\n dateModified: new Date(),\n })\n\n return user\n }\n}\n","import { AuthenticationService } from '../services/authentication.service'\n\nexport class SignOut {\n constructor(private readonly authService: AuthenticationService) {}\n\n async signOut(): Promise<void> {\n await this.authService.signOut()\n }\n}\n","import { AuthenticationService } from '../services/authentication.service'\n\nexport class RecoveryPassword {\n constructor(private readonly authService: AuthenticationService) {}\n\n async sendEmail(email: string): Promise<void> {\n await this.authService.sendPasswordResetEmail(email)\n }\n}\n","import { BaseModel, GenericIdentifier, NonFunctionPropertyNames } from '../../generic/model'\nimport { Shops } from './enums'\n\nimport { CategoryCondition, CategoryFilter, CategoryMetadata } from './types'\n\nexport class Category extends BaseModel<Category> {\n id: string\n brandCategory: boolean\n brandLogo?: string\n name: string\n slug: string\n image?: string\n brandCategoryBanner?: string\n brandCategoryBannerMobile?: string\n description: string\n conditions?: CategoryCondition\n products?: string[]\n filters?: CategoryFilter[]\n createdAt?: Date\n updatedAt?: Date\n shop: Shops\n published: boolean\n metadata: CategoryMetadata\n\n identifierFields(): NonFunctionPropertyNames<Category>[] {\n return ['id']\n }\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","export enum GenderDestination {\n FEMALE = 'female',\n MALE = 'male',\n UNISEX = 'unisex',\n}\n","export enum Shops {\n MENSMARKET = `mensmarket`,\n GLAMSHOP = 'Glamshop',\n GLAMPOINTS = 'Glampoints',\n ALL = 'ALL'\n}\n","import { Type } from 'class-transformer'\nimport { BaseModel, GenericIdentifier, NonFunctionPropertyNames } from '../../generic/model'\n\nimport { KitProduct } from './kit-product'\nimport { ProductGender, ProductMetadata, ProductReview, ShopDescription, ShopPrice, Stock } from './types'\nimport { Variant } from './variant'\n\nexport class Product extends BaseModel<Product> {\n id: string\n name: string\n slug: string\n description: ShopDescription\n sku: string\n price: ShopPrice\n hasVariants: boolean\n NCM: string\n EAN: string\n CEST: string\n weight: number\n stock: Stock\n costPrice: number\n images?: string[]\n miniatures?: string[]\n published: boolean\n createdAt?: Date\n updatedAt?: Date\n brand: string\n tags?: string[]\n type?: string\n categories?: string[]\n reviews?: ProductReview[]\n variant?: Variant\n video?: string\n isKit?: boolean\n rate?: number\n gender?: ProductGender\n shoppingCount?: number\n metadata: ProductMetadata\n\n @Type(() => KitProduct)\n kitProducts?: KitProduct[]\n\n identifierFields(): NonFunctionPropertyNames<Product>[] {\n return ['id']\n }\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { BaseModel } from '../../generic/model'\n\nimport { Product } from './product'\n\ntype KitProductIdentifiers = 'productId' | 'kitProducId'\n\nexport class KitProduct extends BaseModel<KitProduct, KitProductIdentifiers> {\n productId: string\n kitProductId: string\n quantity: number\n\n @Type(() => Product)\n kit: Product\n\n @Type(() => Product)\n product: Product\n\n static get identifiersFields(): KitProductIdentifiers[] {\n return ['productId', 'kitProducId']\n }\n}\n","import { BaseModel, NonFunctionPropertyNames } from '../../generic/model'\n\nimport { ShopPrice, Stock, VariantGrade } from './types'\n\nexport type ProductVariantIdentifiers = 'id' | 'productId'\n\nexport class Variant extends BaseModel<Variant, ProductVariantIdentifiers> {\n id: string\n productId: string\n sku: string\n price: ShopPrice\n EAN: string\n stock: Stock\n grade?: VariantGrade[]\n costPrice: number\n weight: number\n createdAt?: Date\n updatedAt?: Date\n\n identifierFields(): NonFunctionPropertyNames<Variant>[] {\n return ['id']\n }\n\n static get identifiersFields(): ProductVariantIdentifiers[] {\n return ['id', 'productId']\n }\n}\n","export enum OrderStatus {\n AGUARDANDO_PAGAMENTO = 'Aguardando pagamento',\n EM_PREPARO = 'Preparando pedido',\n NF_EMITIDA = 'Nota Fiscal Emitida',\n AGUARDANDO_ENVIO = 'Aguardando Transaportadora',\n ENVIADO = 'Enviado',\n ENTREGUE = 'Entregue',\n CANCELADO = 'Cancelado',\n CREDIT_CARD = 'credit_card',\n}\n","import { Product } from '../../catalog/models/product'\n\nexport class LineItem extends Product {\n parentId?: string\n quantity: number\n isGift?: boolean\n pricePaid?: number\n image?: string\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\n\nexport class ShippingMethod extends BaseModel<ShippingMethod> {\n id: string\n CNPJ: string\n DaysToDelivery: number\n MaxGrams: number\n MinGrams: number\n ServiceCompanyRangeId: number\n ShippingCompanyId: number\n ShippingCompanyName: string\n ShippingPrice: number\n State: string\n ZipEnd: number\n ZipStart: number\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { Address } from '../../location/models/address'\nimport { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\nimport { User } from '../../users/models/user'\n\nimport { Coupon } from './coupons/coupon'\nimport { LineItem } from './line-item'\nimport { ShippingMethod } from './shipping-method'\nimport { Shops } from '../../catalog/models/enums/shops.enum'\n\nexport class Checkout extends BaseModel<Checkout> {\n id?: string\n paymentId?: string\n status?: string\n createdAt?: Date\n updatedAt?: Date\n completedAt?: Date\n discount?: number\n subTotalPrice?: number\n totalPrice?: number\n shop: Shops\n glampoints?: number\n\n @Type(() => LineItem)\n lineItems?: LineItem[]\n @Type(() => User)\n user?: User\n @Type(() => Address)\n shippingAddress?: Address\n @Type(() => Address)\n billingAddress?: Address\n @Type(() => ShippingMethod)\n shipping?: ShippingMethod\n @Type(() => Coupon)\n coupon?: Coupon\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { Checkout } from './checkout'\nimport { OrderStatus } from './enums/order-status.enum'\nimport { Payment } from './payment'\n\nexport class Order extends Checkout {\n override status: OrderStatus\n trackingCode?: string\n trackingUrl?: string\n\n @Type(() => Payment)\n payment: Payment\n}\n","import { Type } from 'class-transformer'\n\nimport { Address } from '../../../location/models/address'\nimport { BaseModel, GenericIdentifier } from '../../../generic/model/base.model'\nimport { Coupon } from '../coupons/coupon'\nimport { User } from '../../../users/models/user'\n\nimport { SubscriptionPlan } from './plan'\n\nexport class CheckoutSubscription extends BaseModel<CheckoutSubscription> {\n id?: string\n user: User\n createdAt: Date\n updatedAt: Date\n completedAt?: Date\n userId?: string\n discount?: number\n subTotalPrice?: number\n totalPrice?: number\n\n @Type(() => Address)\n shippingAddress: Address\n @Type(() => Address)\n billingAddress?: Address\n @Type(() => SubscriptionPlan)\n subscriptionPlan: SubscriptionPlan\n @Type(() => Coupon)\n coupon?: Coupon\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { Type } from 'class-transformer'\n\nimport { BaseModel, GenericIdentifier } from '../../generic/model/base.model'\nimport { Shops, Category } from '../../catalog/models'\n\nexport class Buy2Win extends BaseModel<Buy2Win> {\n active: boolean\n cartValue: number\n createdAt: Date\n endDate: Date\n id?: string\n name: string\n products?: string[]\n shop: Shops\n startDate: Date\n updatedAt?: Date\n\n @Type(() => Category)\n categories: Category[]\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","export enum FilterType {\n ACCESSORY_IMPORTANCE = 'accessoryImportance',\n BEARD_PROBLEMS = 'beardProblems',\n BEARD_SIZE = 'beardSize',\n BEAUTY_PRODUCT_IMPORTANCE = 'beautyProductImportance',\n BODY_PROBLEMS = 'bodyProblems',\n BODY_SHAPE = 'bodyShape',\n BODY_TATTOOS = 'bodyTattoos',\n FACE_SKIN_OILINESS = 'faceSkinOiliness',\n FACE_SKIN_PROBLEMS = 'faceSkinProblems',\n FACE_SKIN_TONE = 'faceSkinTone',\n FAMILY_INCOME = 'familyIncome',\n FRAGRANCE_IMPORTANCE = 'fragranceImportance',\n HAIR_COLOR = 'hairColor',\n HAIR_PROBLEMS = 'hairProblems',\n HAIR_STRANDS = 'hairStrands',\n HAIR_TYPE = 'hairType',\n PRODUCT_SPENT = 'productSpent',\n}\n","export enum QuestionsFilters {\n ACCESSORY_IMPORTANCE = 'Você gosta de usar acessórios masculinos?',\n BEARD_PROBLEMS = 'Quais problemas de barba você tem?',\n BEARD_SIZE = 'Quais caracteristicas se aplicam à sua BARBA/BIGODE?',\n BEAUTY_PRODUCT_IMPORTANCE = 'O que descreve melhor a sua relação com produtos de beleza e cuidados pessoais?',\n BODY_PROBLEMS = 'Qual ou quais preocupações você tem com a pele do seu corpo?',\n BODY_SHAPE = 'Qual e seu tipo de CORPO?',\n BODY_TATTOOS = 'Você tem alguma tatuagem?',\n FACE_SKIN_OILINESS = 'Quais caracteristicas se aplicam à pele do seu ROSTO?',\n FACE_SKIN_PROBLEMS = 'Quais problemas a pele do seu rosto tem?',\n FACE_SKIN_TONE = 'Qual seu tom de pele?',\n FAMILY_INCOME = 'Qual a sua renda familiar mensal (considerando a renda de todas as pessoas que moram com você)?',\n FRAGRANCE_IMPORTANCE = 'O quanto você gosta de experimentar perfumes?',\n HAIR_COLOR = 'Seu cabelo é naturalmente de qual COR?',\n HAIR_PROBLEMS = 'Qual ou quais problemas/característica de cabelo te preocupam?',\n HAIR_STRANDS = 'Como são seus fios?',\n HAIR_TYPE = 'Como é o seu cabelo?',\n PRODUCT_SPENT = 'Qual é o seu nivel de gasto mensal em produtos de beleza e cuidados pessoais?',\n}\n","import * as Answers from '../../users/models/enums'\nimport { FilterType, QuestionsFilters } from '../enums'\n\ntype FilterAnswers = {\n [key: string]: string\n}\n\nexport class BeautyQuestionsHelper {\n static getAnswers(filter: FilterType): FilterAnswers {\n switch (filter) {\n case FilterType.ACCESSORY_IMPORTANCE:\n return Answers.AccessoryImportances\n case FilterType.BEARD_PROBLEMS:\n return Answers.BeardProblems\n case FilterType.BEARD_SIZE:\n return Answers.BeardSizes\n case FilterType.BEAUTY_PRODUCT_IMPORTANCE:\n return Answers.BeautyProductImportances\n case FilterType.BODY_PROBLEMS:\n return Answers.BodyProblems\n case FilterType.BODY_SHAPE:\n return Answers.BodyShapes\n case FilterType.BODY_TATTOOS:\n return Answers.BodyTattoos\n case FilterType.FACE_SKIN_OILINESS:\n return Answers.FaceSkinOilinesses\n case FilterType.FACE_SKIN_PROBLEMS:\n return Answers.FaceSkinProblems\n case FilterType.FACE_SKIN_TONE:\n return Answers.FaceSkinTones\n case FilterType.FAMILY_INCOME:\n return Answers.FamilyIncomes\n case FilterType.FRAGRANCE_IMPORTANCE:\n return Answers.FragranceImportances\n case FilterType.HAIR_COLOR:\n return Answers.HairColors\n case FilterType.HAIR_PROBLEMS:\n return Answers.HairProblems\n case FilterType.HAIR_STRANDS:\n return Answers.HairStrands\n case FilterType.HAIR_TYPE:\n return Answers.HairTypes\n case FilterType.PRODUCT_SPENT:\n return Answers.ProductSpents\n }\n }\n\n static getQuestions(filter: FilterType): string {\n const filterKey = Object.keys(FilterType)[Object.values(FilterType).indexOf(filter)] as keyof typeof FilterType\n\n return QuestionsFilters[filterKey]\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model'\nimport { Banner, Benefit, HomeDataStructure } from './types'\n\nexport class Home extends BaseModel<Home> {\n benefitsSection: Benefit[]\n blockBanners: Banner[]\n blogBanner: Banner\n brandsCarousel: Banner[]\n buyToWinBanner: Banner\n discoverCategories: string[]\n featuredCampaignBanner: Banner\n featuredCategories: string[]\n heroCarousel: Banner[]\n verticalCarousels: string[]\n id: string\n data: HomeDataStructure\n minValueForFreeShipping: number\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { BaseModel, GenericIdentifier } from '../../generic/model'\nimport { MenuNav } from './types/menu-nav.type'\n\nexport class ShopMenu extends BaseModel<ShopMenu> {\n menuNav: MenuNav[]\n id: string\n\n static get identifiersFields(): GenericIdentifier[] {\n return ['id']\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class InvalidArgumentError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class RequiredArgumentError extends CustomError {\n arguments: string[]\n\n constructor(readonly args: string[]) {\n super(`Required arguments: ${args.join(', ')}`)\n\n this.arguments = args\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class NotFoundError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import { CustomError } from 'ts-custom-error'\n\nexport class DuplicatedResultsError extends CustomError {\n constructor(message: string) {\n super(message)\n }\n}\n","import axios from 'axios'\n\nimport { BaseModel } from '../../../domain'\nimport { NotFoundError } from '../../../errors'\nimport { ElasticSearchResult } from '../types/elastic-search-result'\n\nexport type AxiosElasticSearchConfig = {\n url: string\n credential: string\n}\n\nexport class AxiosAdapter<T extends BaseModel<T>> {\n constructor(private readonly config: AxiosElasticSearchConfig) {}\n\n async get(index: string): Promise<Partial<T>> {\n try {\n const { data } = await axios({\n url: `${this.config.url}/${index}`,\n method: 'GET',\n headers: { Authorization: `Basic ${this.config.credential}` },\n })\n\n return data._source\n } catch (error) {\n if (!(error instanceof Error)) throw error\n\n throw new NotFoundError(error.message)\n }\n }\n\n async query(index: string, query: any): Promise<ElasticSearchResult<Partial<T>>> {\n const { data } = await axios({\n url: `${this.config.url}/${index}`,\n method: 'POST',\n headers: { Authorization: `Basic ${this.config.credential}` },\n data: query,\n })\n\n return {\n total: data.hits.total.value,\n hits: data.hits.hits,\n }\n }\n\n async save(index: string, data: Partial<T>): Promise<void> {\n await axios({\n url: `${this.config.url}/${index}`,\n method: 'PUT',\n headers: { Authorization: `Basic ${this.config.credential}` },\n data,\n })\n }\n\n async delete(index: string): Promise<void> {\n await axios({\n url: `${this.config.url}/${index}`,\n method: 'DELETE',\n headers: { Authorization: `Basic ${this.config.credential}` },\n })\n }\n}\n","import { Product, Shops } from '../../../domain'\nimport { ProductHasuraGraphQL } from '../../hasura-graphql'\nimport { AxiosAdapter } from '../adapters'\n\nexport class ProductsIndex {\n constructor(private readonly adapter: AxiosAdapter<Product>) {}\n\n async get(id: string): Promise<Product> {\n const data = await this.adapter.get(`products/_doc/${id}`)\n\n return Product.toInstance(data)\n }\n\n async findById(ids: string[], options?: { hasStock: boolean; size: number; shop: Shops }): Promise<Product[]> {\n const fields = [\n 'brand',\n 'id',\n 'images',\n 'miniatures',\n 'name',\n 'price',\n 'sku',\n 'stock',\n 'slug',\n 'reviews',\n 'pricePaid',\n 'isGift',\n 'stock',\n 'weight',\n 'tags',\n 'hasVariants',\n 'type',\n ]\n const { hits } = await this.adapter.query('products/_search', {\n _source: fields,\n query: {\n bool: {\n filter: [\n {\n terms: {\n _id: ids,\n },\n },\n {\n term: {\n published: true,\n },\n },\n ...(options?.hasStock\n ? [\n {\n range: {\n 'stock.quantity': {\n gt: 0,\n },\n },\n },\n ]\n : []),\n ],\n },\n },\n ...(options?.size ? { size: options?.size } : {}),\n })\n\n return hits.map((hit) => Product.toInstance(hit._source))\n }\n\n async save(product: ProductHasuraGraphQL): Promise<void> {\n delete product.createdAt\n delete product.updatedAt\n delete product.kitProducts\n\n try {\n if (!product.firestoreId) throw new Error('Is not a product from firestore')\n\n await this.get(product.firestoreId)\n\n await this.adapter.save(`products/_doc/${product.firestoreId}`, product.toPlain())\n } catch (error) {\n if (!(error instanceof Error)) throw error\n\n console.error(error.message)\n\n await this.adapter.save(`products/_doc/${product.id}`, product.toPlain())\n }\n }\n\n async delete(product: ProductHasuraGraphQL): Promise<void> {\n if (!product.firestoreId) return\n\n try {\n await this.get(product.firestoreId)\n\n await this.adapter.delete(`products/_doc/${product.firestoreId}`)\n } catch (error) {\n await this.adapter.delete(`products/_doc/${product.id}`)\n }\n }\n}\n","import { collection, CollectionReference, DocumentData, Firestore, QueryDocumentSnapshot } from 'firebase/firestore'\n\nimport {\n BaseModelBuilder,\n ModelBaseStructure,\n NonFunctionAndIdentifierPropertiesWithNoPartial,\n NonFunctionAndIdentifierPropertyNames,\n} from '../../../../domain'\nimport { MixinCtor } from '../../../../utils'\nimport { FirestoreFieldType } from '../enums'\nimport { FirestoreRepository } from '../types'\n\nexport const withFirestore = <TBase extends ModelBaseStructure, T extends MixinCtor = MixinCtor>(\n MixinBase: T,\n): MixinCtor<FirestoreRepository<TBase>, unknown[]> => {\n const isObjectsAndNoDate = (data: any): boolean =>\n data &&\n !Array.isArray(data) &&\n typeof data === 'object' &&\n data?.constructor.name !== 'Timestamp' &&\n !('seconds' in data)\n const bindDate = (data: Record<string, any>, keyName: string): Record<string, any> => {\n if (data?.constructor.name === 'Timestamp') return data.toDate()\n if (data && typeof data === 'object' && 'seconds' in data) return new Date(data.seconds * 1000)\n if (typeof data === 'number' && ['createdAt', 'updatedAt'].includes(keyName)) return new Date(data)\n\n return data\n }\n const bindAllDateFromObject = (data: Record<string, any>): NonFunctionAndIdentifierPropertiesWithNoPartial<TBase> => {\n return Object.keys(data).reduce(\n (object, key) => ({\n ...object,\n [key]: isObjectsAndNoDate(data[key])\n ? bindAllDateFromObject(data[key])\n : Array.isArray(data[key])\n ? data[key].map((element: any) => (isObjectsAndNoDate(element) ? bindAllDateFromObject(element) : element))\n : bindDate(data[key], key),\n }),\n {} as NonFunctionAndIdentifierPropertiesWithNoPartial<TBase>,\n )\n }\n\n return class extends MixinBase implements FirestoreRepository<TBase> {\n readonly firestore?: Firestore\n collectionName: string = ''\n model: BaseModelBuilder<TBase>\n fields: Record<NonFunctionAndIdentifierPropertyNames<TBase>, FirestoreFieldType>\n\n collection(path?: string): CollectionReference<TBase> {\n return collection(this.firestore, path || this.collectionName).withConverter(this.buildModelInstance())\n }\n\n buildModelInstance(): {\n toFirestore: (data: TBase) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<TBase>) => TBase\n } {\n return {\n toFirestore: (data: TBase): DocumentData => (data?.toPlain ? data.toPlain() : data),\n fromFirestore: (snap: QueryDocumentSnapshot<TBase>): TBase => {\n const data = snap.data()\n let bindedData: NonFunctionAndIdentifierPropertiesWithNoPartial<TBase> = null\n\n try {\n const ids = { id: snap.id }\n\n bindedData = bindAllDateFromObject(data)\n\n return this.model.toInstance({ ...bindedData, ...ids })\n } catch (error) {\n console.info('id', snap.id)\n console.info('data', JSON.stringify(bindedData))\n console.error(error)\n\n throw error\n }\n },\n }\n }\n }\n}\n","import { QueryDocumentSnapshot, QuerySnapshot } from 'firebase/firestore'\n\nimport { ModelBaseStructure } from '../../../../domain'\nimport { isNil, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository, FirestoreSubRepository } from '../types'\n\nexport const withHelpers = <TMixinBase extends MixinCtor = MixinCtor>(MixinBase: MixinCtor & TMixinBase) => {\n return class extends MixinBase implements FirestoreHelpers {\n toArray<T extends ModelBaseStructure>(snapShot: QuerySnapshot<T> | QueryDocumentSnapshot<T>[]): T[] {\n if (Array.isArray(snapShot)) {\n return snapShot.map((doc: QueryDocumentSnapshot<T>) => doc.data())\n } else {\n return snapShot.docs.map((doc: QueryDocumentSnapshot<T>) => doc.data())\n }\n }\n\n isSubCollection<T extends ModelBaseStructure>(\n repository: FirestoreRepository<T>,\n ): repository is FirestoreSubRepository<T> {\n return !isNil(Object.keys(this).find((key) => key === 'parentRepository'))\n }\n }\n}\n","import { doc, getDoc } from 'firebase/firestore'\n\nimport { GetRepository, ModelBaseStructure, NonFunctionProperties } from '../../../../domain'\nimport { NotFoundError } from '../../../../errors'\nimport { isNil, MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport const withGetFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & InstanceType<TMixinBase> & GetRepository<TBase> & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n return class GetFirestore extends MixinBase implements GetRepository<TBase> {\n async get(identifiers: NonFunctionProperties<TBase>): Promise<TBase> {\n const docRef = await getDoc(\n doc(\n await this.collection(this.buildCollectionPathForGet(identifiers)),\n Object.values(identifiers).shift().toString(),\n ),\n )\n const data = docRef.data()\n\n if (isNil(data)) throw new NotFoundError(`Document ${JSON.stringify(identifiers)} not found`)\n\n return data\n }\n\n buildCollectionPathForGet(identifiers: NonFunctionProperties<TBase>): string {\n return this.isSubCollection(this)\n ? `${this.parentRepository.collectionName}/${identifiers[this.parentIdField]}/${this.collectionName}`\n : this.collectionName\n }\n } as any\n}\n","export enum FirestoreFieldType {\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Timestamp = 'timestamp',\n Array = 'array',\n Map = 'map',\n}\n","import {\n CollectionReference,\n doc,\n getDoc,\n getDocs,\n limit,\n orderBy,\n query,\n QueryConstraint,\n startAfter,\n startAt,\n where,\n WhereFilterOp,\n} from 'firebase/firestore'\n\nimport {\n FindRepository,\n ModelBaseStructure,\n NonFunctionAndIdentifierPropertyNames,\n NonFunctionPropertyNames,\n RepositoryFindField,\n RepositoryFindFielters,\n RepositoryFindFieltersOptions,\n RepositoryFindResult,\n RepositoryLimitOptions,\n RepositoryOrderBy,\n Where,\n} from '../../../../domain'\nimport {\n is,\n isDate,\n isNil,\n isNumber,\n isObject,\n isString,\n MergeConstructorParams,\n MixinCtor,\n set,\n} from '../../../../utils'\nimport { FirestoreFieldType } from '../enums'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport const withFindFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & InstanceType<TMixinBase> & FindRepository<TBase> & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n const checkIfIsFilterOption = (filter: any): filter is RepositoryFindFieltersOptions<TBase, any> =>\n !isNil(filter?.operator)\n const getValueFromFilter = (filter: RepositoryFindField<TBase, any>): any => {\n return checkIfIsFilterOption(filter) ? filter.value : filter\n }\n const getFinalValueFrom = (value: any) =>\n isNumber(value) || isString(value) || isDate(value) || Array.isArray(value)\n ? value\n : Object.values(getFinalValueFrom)\n\n return class FindFirestore extends MixinBase implements FindRepository<TBase> {\n async find({\n filters,\n limits,\n orderBy,\n }: {\n filters?: RepositoryFindFielters<TBase>\n limits?: RepositoryLimitOptions<TBase>\n orderBy?: RepositoryOrderBy<TBase>\n } = {}): Promise<RepositoryFindResult<TBase>> {\n const collection: CollectionReference<TBase> = this.collection(this.buildCollectionPathForFind(filters))\n const queries = this.makeFirestoreWhere(filters || {})\n const ordination = this.makeFirestoreOrderBy(filters, orderBy)\n const offsets = await this.defineLimits(filters, limits)\n const queryArgumments: QueryConstraint[] = [...queries, ...ordination, ...offsets]\n const docs = await getDocs(query(collection, ...queryArgumments))\n const data = docs.docs.map((doc) => doc.data())\n\n return {\n data,\n count: this.calculateCount(data, limits),\n }\n }\n\n buildCollectionPathForFind(filters: RepositoryFindFielters<TBase>): string {\n if (!this.isSubCollection<TBase>(this)) return this.collectionName\n\n const parentIdField = this.parentIdField\n const parentId = getValueFromFilter(filters?.[parentIdField])\n\n return `${this.parentRepository.collectionName}/${parentId}/${this.collectionName}`\n }\n\n makeFirestoreWhere = (filter: RepositoryFindFielters<TBase>): QueryConstraint[] =>\n Object.keys(filter).reduce(\n (queries: QueryConstraint[], fieldName: string) => [\n ...queries,\n ...this.buildWhereSentence(fieldName, is(filter[fieldName as NonFunctionPropertyNames<TBase>])),\n ],\n [],\n )\n\n buildWhereSentence = (\n fieldName: NonFunctionPropertyNames<TBase> | string,\n options: RepositoryFindFieltersOptions<TBase, NonFunctionPropertyNames<TBase>>,\n ): QueryConstraint[] => {\n if (this.isSubCollection<TBase>(this) && fieldName === this.parentIdField) []\n\n const value = options?.value || options\n const object = {}\n\n set(object, fieldName, value)\n\n const plainInstance = new this.model(object).toPlain()\n const firestoreFieldName =\n fieldName.toString().indexOf('.') > -1\n ? fieldName.toString()\n : Object.keys(plainInstance).find((key) => plainInstance[key])\n\n if (options?.operator === Where.LIKE) {\n if (\n Array.isArray(options?.value) &&\n (this.fields[firestoreFieldName as NonFunctionAndIdentifierPropertyNames<TBase>] ===\n FirestoreFieldType.Array ||\n !this.fields[firestoreFieldName as NonFunctionAndIdentifierPropertyNames<TBase>])\n )\n return [where(firestoreFieldName, 'array-contains-any', options.value)]\n\n return [where(firestoreFieldName, '>=', options.value), where(firestoreFieldName, '<=', `${options.value}~`)]\n }\n if (\n options?.operator === Where.IN &&\n Array.isArray(options?.value) &&\n (this.fields[firestoreFieldName as NonFunctionAndIdentifierPropertyNames<TBase>] === FirestoreFieldType.Array ||\n !this.fields[firestoreFieldName as NonFunctionAndIdentifierPropertyNames<TBase>])\n )\n return [where(firestoreFieldName, 'array-contains', options.value)]\n if (isObject(options) && isNil(options?.operator) && isNil(options?.value)) {\n return Object.keys(options).reduce(\n (queries, key) => [\n ...queries,\n ...this.buildWhereSentence(`${fieldName.toString()}.${key}`, is<Record<string, any>>(options)[key]),\n ],\n [],\n )\n }\n\n return [where(firestoreFieldName, (options?.operator as WhereFilterOp) || '==', options?.value || options)]\n }\n\n makeFirestoreOrderBy = (\n filters: RepositoryFindFielters<TBase>,\n fieldsToOrderBy?: RepositoryOrderBy<TBase>,\n ): QueryConstraint[] => {\n const orderByKeys = Object.keys(fieldsToOrderBy || {})\n\n if (!orderByKeys.length) return []\n\n const filtersKeysWithUnordered = Object.keys(filters || {}).filter(\n (filterKey) => !orderByKeys.includes(filterKey),\n )\n\n if (filtersKeysWithUnordered.length)\n filtersKeysWithUnordered.forEach(\n (filterKey) =>\n (fieldsToOrderBy = {\n ...(![Where.EQUALS].includes(\n is<RepositoryFindFieltersOptions<TBase, NonFunctionPropertyNames<TBase>>>(\n filters[filterKey as NonFunctionPropertyNames<TBase>],\n ).operator,\n )\n ? { [filterKey]: 'asc' }\n : {}),\n ...fieldsToOrderBy,\n }),\n )\n\n return Object.keys(fieldsToOrderBy).map((fieldName) =>\n orderBy(fieldName, fieldsToOrderBy[fieldName as NonFunctionPropertyNames<TBase>]),\n )\n }\n\n async defineLimits(\n filters: RepositoryFindFielters<TBase>,\n limits: RepositoryLimitOptions<TBase>,\n ): Promise<QueryConstraint[]> {\n const queries = []\n\n if (limits?.offset) {\n if (this.model.isModel(limits.offset))\n queries.push(\n startAfter(\n await getDoc(\n doc(this.collection(this.buildCollectionPathForFind(filters)), limits.offset.identifier.shift()),\n ),\n ),\n )\n else if (isNumber(limits.offset) || isString(limits.offset)) queries.push(startAt(limits.offset))\n }\n if (limits?.limit) queries.push(limit(limits.limit))\n\n return queries\n }\n\n calculateCount(data: TBase[], limits: RepositoryLimitOptions<TBase>): number {\n if (data.length <= 0) return 0\n if (data.length < limits?.limit) return data.length\n\n return Infinity\n }\n } as any\n}\n","import { addDoc, doc, DocumentReference, getDoc, setDoc } from 'firebase/firestore'\n\nimport { CreateRepository, CreateRepositoryParams, ModelBaseStructure } from '../../../../domain'\nimport { isEmpty, MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport const withCreateFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & InstanceType<TMixinBase> & CreateRepository<TBase> & FirestoreHelpers,\n MergeConstructorParams<[], ConstructorParameters<TMixinBase>>\n> => {\n return class CreateFirestore extends MixinBase implements CreateRepository<TBase> {\n async create(data: CreateRepositoryParams<TBase>): Promise<TBase> {\n const docRef = await this.save(this.model.toInstance(data as any))\n const doc = await getDoc(docRef)\n\n return doc.data()\n }\n\n async save(data: TBase): Promise<DocumentReference<TBase>> {\n const id = data.identifier[data.identifiersFields?.shift()]?.toString()\n const collectionPath = this.buildCollectionPathForAdd(data)\n const collection = this.collection(collectionPath)\n\n if (isEmpty(id)) return addDoc(collection, data)\n\n const docRef = doc(collection, id)\n await setDoc(docRef, data)\n\n return docRef\n }\n\n buildCollectionPathForAdd(identifiers: Partial<TBase>): string {\n return this.isSubCollection(this)\n ? `${this.parentRepository.collectionName}/${identifiers[this.parentIdField]}/${this.collectionName}`\n : this.collectionName\n }\n } as any\n}\n","import { arrayRemove, arrayUnion, deleteField, doc, FieldValue, getDoc, setDoc } from 'firebase/firestore'\n\nimport {\n ModelBaseStructure,\n NonFunctionPropertyNames,\n RepositoryUpdateParams,\n UpdateOptionActions,\n UpdateOptions,\n UpdateRepository,\n} from '../../../../domain'\nimport { is, isNil, MergeConstructorParams, MixinCtor, PropType } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport type UpdateFirestoreRepositoryType<MBase extends ModelBaseStructure> = UpdateRepository<MBase> & {\n paramsToPlain(params: RepositoryUpdateParams<MBase>): Partial<MBase>\n}\n\nexport const withUpdateFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & UpdateRepository<TBase> & InstanceType<TMixinBase> & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n const getValueFromParams = (\n params: RepositoryUpdateParams<TBase>,\n field: NonFunctionPropertyNames<TBase>,\n ): PropType<TBase, NonFunctionPropertyNames<TBase>> =>\n (isNil(is<UpdateOptions<PropType<TBase, NonFunctionPropertyNames<TBase>>>>(params[field])?.value)\n ? is<PropType<TBase, NonFunctionPropertyNames<TBase>>>(params[field])\n : is<UpdateOptions<PropType<TBase, NonFunctionPropertyNames<TBase>>>>(params[field]).value) || null\n const getValueByAction = (options: UpdateOptions<TBase>): FieldValue | unknown => {\n if (isNil(options?.action)) return options\n if (options?.action === UpdateOptionActions.REMOVE_FIELD) return deleteField()\n if (options?.action === UpdateOptionActions.NULL) return null\n if (Array.isArray(options?.value)) {\n if (options?.action === UpdateOptionActions.MERGE) return arrayUnion(...options.value)\n if (options?.action === UpdateOptionActions.REMOVE) return arrayRemove(...options.value)\n }\n\n return options?.value\n }\n\n return class UpdateFirestore extends MixinBase implements UpdateRepository<TBase> {\n async update(data: RepositoryUpdateParams<TBase>): Promise<TBase> {\n const model = new this.model()\n const keyField = model.identifiersFields.shift()\n const docRef = doc(\n this.collection(this.buildCollectionPathForUpdate(data)),\n getValueFromParams(data, keyField).toString(),\n )\n\n await setDoc(docRef, this.paramsToPlain(data), { merge: true })\n\n const docData = await getDoc(docRef)\n\n return docData.data()\n }\n\n buildCollectionPathForUpdate(identifiers: RepositoryUpdateParams<TBase>): string {\n return this.isSubCollection(this)\n ? `${this.parentRepository.collectionName}/${getValueFromParams(identifiers, this.parentIdField)}/${\n this.collectionName\n }`\n : this.collectionName\n }\n\n paramsToPlain(params: RepositoryUpdateParams<TBase>): Partial<TBase> {\n const model = this.model\n\n if (model.isModel(params)) return params.toPlain()\n\n return Object.keys(params).reduce(\n (data, currentKey) => ({\n ...data,\n ...((value): Record<string, any> => (value === undefined ? {} : { [currentKey]: value }))(\n getValueByAction(params[currentKey as never]),\n ),\n }),\n {},\n )\n }\n } as any\n}\n","import { deleteDoc, doc } from 'firebase/firestore'\n\nimport { DeleteRepository, DeleteRepositoryParams, IdentifiersModel, ModelBaseStructure } from '../../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nexport const withDeleteFirestore = <\n TBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & InstanceType<TMixinBase> & DeleteRepository<TBase> & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n return class DeleteFirestore extends MixinBase implements DeleteRepository<TBase> {\n async delete(identifiers: DeleteRepositoryParams<TBase>): Promise<void> {\n await deleteDoc(\n doc(\n this.collection(this.buildCollectionPathForRemove(identifiers)),\n Object.values(identifiers).shift().toString(),\n ),\n )\n }\n\n buildCollectionPathForRemove(identifiers: IdentifiersModel<TBase>): string {\n return this.isSubCollection(this)\n ? `${this.parentRepository.collectionName}/${identifiers[this.parentIdField]}/${this.collectionName}`\n : this.collectionName\n }\n } as any\n}\n","import { CollectionReference } from 'firebase/firestore'\n\nimport { IdentifiersModel, ModelBaseStructure } from '../../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository, FirestoreSubRepository } from '../types'\n\nexport const withSubCollection = <\n TBase extends ModelBaseStructure,\n TBaseParent extends ModelBaseStructure,\n TMixinBase extends MixinCtor<FirestoreRepository<TBase>>,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase>> & TMixinBase,\n ParentModel: new () => TBaseParent,\n): MixinCtor<\n FirestoreRepository<TBase> &\n InstanceType<TMixinBase> &\n FirestoreSubRepository<TBase, InstanceType<typeof ParentModel>> &\n FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>[]\n> => {\n return class SubCollectionMix\n extends MixinBase\n implements FirestoreSubRepository<TBase, InstanceType<typeof ParentModel>>\n {\n readonly parentRepository: FirestoreRepository<InstanceType<typeof ParentModel>>\n parentIdField: keyof IdentifiersModel<TBase>\n\n constructor(...args: Array<any>) {\n super(args)\n }\n\n override collection(path?: string): CollectionReference<TBase> {\n return super.collection(path)\n }\n } as any\n}\n","import { CrudRepository, ModelBaseStructure } from '../../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../../utils'\nimport { FirestoreHelpers, FirestoreRepository } from '../types'\n\nimport { withCreateFirestore } from './with-create-firestore.mixin'\nimport { withDeleteFirestore } from './with-delete-firestore.mixin'\nimport { withFindFirestore } from './with-find-firestore.mixin'\nimport { withGetFirestore } from './with-get-firestore.mixin'\nimport { withUpdateFirestore } from './with-update-firestore.mixin'\n\nexport const withCrudFirestore = <\n TBase extends ModelBaseStructure,\n Repository = CrudRepository<TBase>,\n TMixinBase extends MixinCtor = MixinCtor,\n>(\n MixinBase: MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers> & TMixinBase,\n): MixinCtor<\n FirestoreRepository<TBase> & Repository & FirestoreHelpers,\n MergeConstructorParams<{}[], ConstructorParameters<TMixinBase>>\n> => {\n return class CrudFirestore\n extends withUpdateFirestore(\n withGetFirestore(\n withFindFirestore(\n withDeleteFirestore(\n withCreateFirestore(MixinBase as MixinCtor<FirestoreRepository<TBase> & FirestoreHelpers>),\n ),\n ),\n ),\n )\n implements CrudRepository<TBase> {} as any\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Lead, LeadRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class LeadFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Lead>(Base)))\n implements LeadRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'leads'\n this.model = Lead\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Edition, EditionRepository, Subscription } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { SubscriptionFirestoreRepository } from './subscription-firestore.repository'\n\nexport class SubscriptionEditionFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<Edition>(Base))), Subscription)\n implements EditionRepository\n{\n constructor(\n override readonly firestore: Firestore,\n override readonly parentRepository: SubscriptionFirestoreRepository,\n ) {\n super()\n this.collectionName = 'editions'\n this.parentIdField = 'subscriptionId'\n this.model = Edition\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Subscription, SubscriptionRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class SubscriptionFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Subscription>(Base)))\n implements SubscriptionRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'subscription'\n this.model = Subscription\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Subscription, SubscriptionPayment, SubscriptionPaymentRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { SubscriptionFirestoreRepository } from './subscription-firestore.repository'\n\nexport class SubscriptionPaymentFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<SubscriptionPayment>(Base))), Subscription)\n implements SubscriptionPaymentRepository\n{\n constructor(\n override readonly firestore: Firestore,\n override readonly parentRepository: SubscriptionFirestoreRepository,\n ) {\n super()\n this.collectionName = 'payments'\n this.parentIdField = 'subscriptionId'\n this.model = SubscriptionPayment\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { User, UserAddress, UserAddressRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { UserFirestoreRepository } from './user-firestore.repository'\n\nexport class UserAddressFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<UserAddress>(Base))), User)\n implements UserAddressRepository\n{\n constructor(override readonly firestore: Firestore, override readonly parentRepository: UserFirestoreRepository) {\n super()\n this.collectionName = 'address'\n this.parentIdField = 'userId'\n this.model = UserAddress\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { BeautyProfile, BeautyProfileRepository, User } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { UserFirestoreRepository } from './user-firestore.repository'\n\nexport class UserBeautyProfileFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<BeautyProfile>(Base))), User)\n implements BeautyProfileRepository\n{\n constructor(override readonly firestore: Firestore, override readonly parentRepository: UserFirestoreRepository) {\n super()\n this.collectionName = 'CX'\n this.parentIdField = 'userId'\n this.model = BeautyProfile\n }\n}\n","import { doc, DocumentData, Firestore, getDoc, getDocs, query, QueryDocumentSnapshot, where } from 'firebase/firestore'\n\nimport { BeautyProfile, User, UserRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class UserFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<User>(Base)))\n implements UserRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'users'\n this.model = User\n }\n\n override async get(identifiers: Partial<User>): Promise<User> {\n const user = await super.get({ id: identifiers.id })\n\n user.beautyProfile = await this.getBeautyProfile(user.id)\n user.isSubscriber = await this.checkIfIsSubscriber(user.id)\n\n return user\n }\n\n async checkIfExistsByField(field: string, value: string): Promise<boolean> {\n const result = await this.find({ filters: { [field]: value } })\n\n return result.count > 0\n }\n\n override buildModelInstance(): {\n toFirestore: (data: User) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<User>) => User\n } {\n const { fromFirestore, toFirestore } = super.buildModelInstance()\n\n return {\n toFirestore: (data: User): DocumentData => {\n const plain = toFirestore(data)\n\n delete plain.isSubscriber\n\n return plain\n },\n fromFirestore,\n }\n }\n\n private async getBeautyProfile(userId: string): Promise<BeautyProfile> {\n const beautyProfile = await getDoc(\n doc(\n this.collection(`${this.collectionName}/${userId}/CX`).withConverter(this.buildBeautyProfileModelInstance()),\n 'beautyProfile',\n ),\n )\n\n return beautyProfile.data()\n }\n\n private async checkIfIsSubscriber(userId: string): Promise<boolean> {\n const docs = await getDocs(\n query(this.collection('subscription'), where('user.id', '==', userId), where('status', '==', 'active')),\n )\n\n return !!docs && !!docs.size\n }\n\n private buildBeautyProfileModelInstance(): {\n toFirestore: (data: BeautyProfile) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<BeautyProfile>) => BeautyProfile\n } {\n return {\n toFirestore: (data: BeautyProfile): DocumentData => data.toPlain(),\n fromFirestore: (snap: QueryDocumentSnapshot<BeautyProfile>): BeautyProfile =>\n BeautyProfile.toInstance(snap.data()),\n }\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { User, UserPaymentMethod, UserPaymentMethodRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { UserFirestoreRepository } from './user-firestore.repository'\n\nexport class UserPaymentMethodFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<UserPaymentMethod>(Base))), User)\n implements UserPaymentMethodRepository\n{\n constructor(override readonly firestore: Firestore, override readonly parentRepository: UserFirestoreRepository) {\n super()\n this.collectionName = 'payment_method'\n this.parentIdField = 'userId'\n this.model = UserPaymentMethod\n }\n}\n","import { Firestore, getDocs, limit, query, QueryConstraint, where } from 'firebase/firestore'\n\nimport { Category, CategoryRepository, Product, Shops } from '../../../../../domain'\nimport { Base, chunk, is } from '../../../../../utils'\n\nimport { DuplicatedResultsError, NotFoundError, RequiredArgumentError } from '../../../../../errors'\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class CategoryFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Category>(Base)))\n implements CategoryRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'categories'\n this.model = Category\n }\n\n async getCategoryBySlug(slug: string, shop: Shops): Promise<Category> {\n const categoryDocs = await getDocs(\n query(\n this.collection(this.collectionName),\n where('slug', '==', slug),\n where('shop', '==', shop),\n where('published', '==', true),\n ),\n )\n\n if (categoryDocs.size > 1) throw new DuplicatedResultsError('Query returned duplicated values')\n if (categoryDocs.empty) throw new NotFoundError(`Document with slug ${slug} not found`)\n\n return categoryDocs.docs[0].data()\n }\n\n async getCategoriesForHome(categoryIds: string[], limit = 4): Promise<{ category: Category; products: Product[] }[]> {\n const categorySnap = await getDocs(\n query(\n this.collection(this.collectionName),\n where('id', 'in', categoryIds.filter(Boolean)),\n where('published', '==', true),\n ),\n )\n\n if (categorySnap.empty) throw new NotFoundError('Categories not found')\n\n const categories = categorySnap.docs.map((doc) => doc.data())\n const homeSections = await Promise.all(\n categories.map(async (category) => ({\n category,\n products: await this.mountCategory(category, { limit, hasStock: true }),\n })),\n )\n\n return homeSections\n }\n\n async mountCategory(category: Category, options?: { limit?: number; hasStock?: boolean }): Promise<Product[]> {\n if (!category.products) throw new RequiredArgumentError(['Category products is empty'])\n\n const chunks = chunk(category.products, 10)\n const products = []\n const wheres: QueryConstraint[] = []\n\n for (const productIds of chunks) {\n if (options?.limit && products.length >= options?.limit) break\n\n wheres.push(where('published', '==', true), where('id', 'in', productIds))\n\n if (options?.hasStock) wheres.push(where('stock.quantity', '>', 0))\n if (options?.limit) wheres.push(limit(options?.limit))\n\n const productSnap = await getDocs(query(this.collection('productsErpVitrine'), ...wheres))\n\n if (productSnap.empty) continue\n\n products.push(...productSnap.docs)\n }\n\n return is<Product[]>(products)\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Product, ProductRepository, ReviewStatusParams, ReviewWithProductData, Where } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class ProductFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Product>(Base)))\n implements ProductRepository\n{\n private reviews: Partial<Record<ReviewStatusParams, ReviewWithProductData[]>> = {}\n\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'productsErpVitrine'\n this.model = Product\n }\n\n async getBySlug(slug: string): Promise<Product> {\n const result = await this.find({\n filters: {\n slug: { operator: Where.EQUALS, value: slug },\n },\n })\n\n return result?.data?.shift()\n }\n\n async fetchReviews(status: ReviewStatusParams): Promise<ReviewWithProductData[]> {\n const { data: products } = await this.find()\n\n products.forEach((product) => {\n if ([undefined, 0].includes(product.reviews?.length)) return\n\n const productInfo = {\n productId: product.id,\n productName: product.name,\n productSku: product.sku,\n }\n\n this.reviews.pending = []\n this.reviews.approved = []\n this.reviews.rejected = []\n\n product.reviews.forEach((review) => {\n if ([null, undefined].includes(review.status)) return this.reviews.pending.push({ ...review, ...productInfo })\n if (review.status === false) return this.reviews.rejected.push({ ...review, ...productInfo })\n if (!!review.status) return this.reviews.approved.push({ ...review, ...productInfo })\n\n return review\n })\n })\n\n return this.reviews[status]\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Product, Variant, VariantRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { withCrudFirestore, withFirestore, withHelpers, withSubCollection } from '../../mixins'\n\nimport { ProductFirestoreRepository } from './product-firestore.repository'\n\nexport class ProductVariantFirestoreRepository\n extends withSubCollection(withCrudFirestore(withHelpers(withFirestore<Variant>(Base))), Product)\n implements VariantRepository\n{\n constructor(override readonly firestore: Firestore, override readonly parentRepository: ProductFirestoreRepository) {\n super()\n this.collectionName = 'variants'\n this.parentIdField = 'productId'\n this.model = Variant\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Product, SubscriptionProductRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class SubscriptionProductFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Product>(Base)))\n implements SubscriptionProductRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'subscriptionProducts'\n this.model = Product\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Checkout, CheckoutRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class CheckoutFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Checkout>(Base)))\n implements CheckoutRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'checkouts'\n this.model = Checkout\n }\n}\n","import { DocumentData, Firestore, QueryDocumentSnapshot } from 'firebase/firestore'\n\nimport { Coupon, CouponRepository } from '../../../../../domain'\nimport { Base, isNil } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class CouponFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Coupon>(Base)))\n implements CouponRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'coupons'\n this.model = Coupon\n }\n\n override buildModelInstance(): {\n toFirestore: (data: Coupon) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<Coupon>) => Coupon\n } {\n const { fromFirestore, toFirestore } = super.buildModelInstance()\n\n return {\n toFirestore: (data: Coupon): DocumentData => {\n const plain = toFirestore(data)\n\n if (!!data.expiresIn) plain.expiresIn = data.expiresIn.getTime()\n\n return plain\n },\n fromFirestore: (snap: QueryDocumentSnapshot<Coupon>): Coupon => {\n const instance = fromFirestore(snap)\n\n if (!isNil(instance.expiresIn)) instance.expiresIn = new Date(snap.data().expiresIn)\n\n return instance\n },\n }\n }\n}\n","import { DocumentData, Firestore, QueryDocumentSnapshot } from 'firebase/firestore'\n\nimport { Order, OrderRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\nimport { FirestoreFieldType } from '../../enums'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class OrderFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Order>(Base)))\n implements OrderRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'orders'\n this.model = Order\n this.fields = {\n status: FirestoreFieldType.String,\n }\n }\n\n override buildModelInstance(): {\n toFirestore: (data: Order) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<Order>) => Order\n } {\n const { fromFirestore, toFirestore } = super.buildModelInstance()\n return {\n toFirestore: (data: Order): DocumentData => toFirestore(data?.toPlain ? data.toPlain() : data),\n fromFirestore: (snap: QueryDocumentSnapshot<Order>): Order => {\n const instance = fromFirestore(snap)\n\n return this.orderFromFirestore(instance)\n },\n }\n }\n\n private orderFromFirestore = (order: Order): Order => {\n if (!!order?.lineItems?.length) {\n order.lineItems = order.lineItems.map((lineItem) => {\n const prices = !!lineItem.price as any\n const shopPrice = prices[order.shop]\n\n if (!!shopPrice) lineItem.price = shopPrice\n\n return lineItem\n })\n }\n\n return order\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Payment, PaymentRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class PaymentFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Payment>(Base)))\n implements PaymentRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'payments'\n this.model = Payment\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { CheckoutSubscription, CheckoutSubscriptionRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class CheckoutSubscriptionFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<CheckoutSubscription>(Base)))\n implements CheckoutSubscriptionRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'checkoutsSubscription'\n this.model = CheckoutSubscription\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { SubscriptionPlan, SubscriptionPlanRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class SubscriptionPlanFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<SubscriptionPlan>(Base)))\n implements SubscriptionPlanRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'subscriptionPlans'\n this.model = SubscriptionPlan\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { Buy2Win, Buy2WinRepository } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class Buy2WinFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Buy2Win>(Base)))\n implements Buy2WinRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'buy2win'\n this.model = Buy2Win\n }\n}\n","import { Firestore } from 'firebase/firestore'\n\nimport { LegacyOrderRepository } from '../../../../../domain'\n\nimport { OrderFirestoreRepository } from './order-firestore.repository'\n\nexport class LegacyOrderFirestoreRepository extends OrderFirestoreRepository implements LegacyOrderRepository {\n constructor(override readonly firestore: Firestore) {\n super(firestore)\n this.collectionName = 'legacyOrders'\n }\n}\n","import { DocumentData, Firestore, QueryDocumentSnapshot, Timestamp } from 'firebase/firestore'\n\nimport { Category, Home, HomeCategoryGroup, HomeRepository, Product } from '../../../../../domain'\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class HomeFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<Home>(Base)))\n implements HomeRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'dms'\n this.model = Home\n }\n\n override buildModelInstance(): {\n toFirestore: (data: Home) => DocumentData\n fromFirestore: (snap: QueryDocumentSnapshot<Home>) => Home\n } {\n const { fromFirestore, toFirestore } = super.buildModelInstance()\n\n return {\n toFirestore: (data: Home): DocumentData => {\n const modifiedData = this.homeToFirestore(data)\n\n return toFirestore(modifiedData)\n },\n fromFirestore: (snap: QueryDocumentSnapshot<Home>): Home => {\n const instance = fromFirestore(snap)\n\n return this.homeFromFirestore(instance)\n },\n }\n }\n\n private homeToFirestore = (home: Home): Home => {\n if (home.data?.data) {\n home.data.data.discoverProducts = home.data.data.discoverProducts.map(this.homeCategoryGroupToPlain)\n home.data.data.featuredProducts = home.data.data.featuredProducts.map(this.homeCategoryGroupToPlain)\n home.data.data.verticalProducts = home.data.data.verticalProducts.map(this.homeCategoryGroupToPlain)\n }\n\n return home\n }\n\n private homeCategoryGroupToPlain = (homeCategoryGroup: HomeCategoryGroup) => ({\n category: homeCategoryGroup.category.toPlain(),\n products: homeCategoryGroup.products.map((product) => product.toPlain()),\n })\n\n private homeFromFirestore = (home: Home): Home => {\n if (home.data?.data) {\n home.data.data.discoverProducts = home.data.data.discoverProducts.map(this.plainToHomeCategoryGroup)\n home.data.data.featuredProducts = home.data.data.featuredProducts.map(this.plainToHomeCategoryGroup)\n home.data.data.verticalProducts = home.data.data.verticalProducts.map(this.plainToHomeCategoryGroup)\n home.data.createdAt =\n home.data.createdAt instanceof Timestamp ? home.data.createdAt.toDate() : home.data.createdAt\n home.data.expiresAt =\n home.data.expiresAt instanceof Timestamp ? home.data.expiresAt.toDate() : home.data.expiresAt\n }\n\n return home\n }\n\n private plainToHomeCategoryGroup = (homeCategoryGroup: HomeCategoryGroup) => ({\n category: Category.toInstance(homeCategoryGroup.category),\n products: homeCategoryGroup.products.map((product) => Product.toInstance(product)),\n })\n}\n","import { Firestore } from 'firebase/firestore'\nimport { ShopMenu, ShopMenuRepository } from '../../../../../domain'\n\nimport { Base } from '../../../../../utils'\n\nimport { withCrudFirestore, withFirestore, withHelpers } from '../../mixins'\n\nexport class ShopMenuFirestoreRepository\n extends withCrudFirestore(withHelpers(withFirestore<ShopMenu>(Base)))\n implements ShopMenuRepository\n{\n constructor(override readonly firestore: Firestore) {\n super()\n this.collectionName = 'shopMenus'\n this.model = ShopMenu\n }\n}\n","import {\n Auth,\n GoogleAuthProvider,\n sendPasswordResetEmail,\n signInAnonymously,\n signInWithEmailAndPassword,\n signInWithPopup,\n} from 'firebase/auth'\n\nimport { AuthenticationService, BasicUserData, LoginAndPasswordParams } from '../../../domain'\n\nimport { FirebaseUserWithId } from './types/firebase-user-with-id.type'\n\nexport class AuthenticationFirebaseAuthService implements AuthenticationService {\n constructor(private readonly firebaseAuth: Auth) {}\n\n async signInWithEmailAndPassword(data: LoginAndPasswordParams): Promise<BasicUserData> {\n const credentials = await signInWithEmailAndPassword(this.firebaseAuth, data.email, data.password)\n const user = credentials.user\n\n return {\n id: user.uid,\n displayName: user.displayName,\n email: user.email,\n phone: user.phoneNumber,\n isAnonymous: false,\n }\n }\n\n async signInWithGoogle(): Promise<BasicUserData> {\n const credentials = await signInWithPopup(this.firebaseAuth, new GoogleAuthProvider())\n const user = credentials.user\n\n return {\n id: user.uid,\n displayName: user.displayName,\n email: user.email,\n phone: user.phoneNumber,\n isAnonymous: false,\n }\n }\n\n async signOut(): Promise<void> {\n this.firebaseAuth.signOut()\n }\n\n async signInAnonymously(): Promise<FirebaseUserWithId> {\n const auth = await signInAnonymously(this.firebaseAuth)\n const user = auth.user as FirebaseUserWithId\n\n user.id = auth.user.uid\n\n return user\n }\n\n async sendPasswordResetEmail(email: string): Promise<void> {\n return sendPasswordResetEmail(this.firebaseAuth, email)\n }\n}\n","import { FirebaseError } from 'firebase/app'\nimport { Auth, createUserWithEmailAndPassword, sendEmailVerification } from 'firebase/auth'\n\nimport { RegisterParams, RegisterService, UserAlreadyRegisteredError, WeakPasswordError } from '../../../domain'\nimport { RequiredArgumentError } from '../../../errors'\nimport { is } from '../../../utils'\n\nimport { FirebaseUserWithId } from './types/firebase-user-with-id.type'\n\nexport class RegisterFirebaseAuthService implements RegisterService {\n constructor(private readonly firebaseAuth: Auth) {}\n\n async register(params: RegisterParams): Promise<FirebaseUserWithId> {\n if (!params.email) throw new RequiredArgumentError(['email'])\n\n try {\n const auth = await createUserWithEmailAndPassword(this.firebaseAuth, params.email, params.password)\n const user = is<FirebaseUserWithId>(auth.user)\n\n if (!user) throw new Error('User not created')\n\n await sendEmailVerification(user)\n user.id = user.uid\n\n return user\n } catch (error) {\n if (!(error instanceof Error)) throw error\n\n const firebaseError = error as FirebaseError\n\n if (firebaseError.code === 'auth/email-already-in-use')\n throw new UserAlreadyRegisteredError('Email already registered')\n if (firebaseError.code === 'auth/weak-password') throw new WeakPasswordError()\n\n throw error\n }\n }\n}\n","import { ModelBaseStructure, NonFunctionAndIdentifierPropertyNames } from '../../../../domain'\nimport { is, isNil, isObject } from '../../../../utils'\nimport { ColumnOptions, HasuraGraphQLFields } from '../../types'\n\ntype FindByAttributeResult<\n MBase extends ModelBaseStructure<MBase>,\n Attribute extends NonFunctionAndIdentifierPropertyNames<MBase>,\n> = ColumnOptions<MBase[Attribute], MBase> & { attributeName: Attribute }\n\nexport class AttributeOptionHelper {\n static FindByAttribute = <\n MBase extends ModelBaseStructure,\n Attribute extends NonFunctionAndIdentifierPropertyNames<MBase> = NonFunctionAndIdentifierPropertyNames<MBase>,\n >(\n attributeName: Attribute,\n fields: HasuraGraphQLFields<MBase>,\n ): FindByAttributeResult<MBase, Attribute> => {\n if (fields.includes(attributeName as any)) return { columnName: attributeName.toString(), attributeName }\n\n const field = fields.find(\n (columnOption) => isObject(columnOption) && Object.keys(columnOption).includes(attributeName.toString()),\n )\n const fieldOption = is<Record<Attribute, ColumnOptions<MBase[Attribute], MBase>>>(field)?.[attributeName]\n\n if (isNil(fieldOption)) return { columnName: attributeName.toString(), attributeName }\n if (Array.isArray(fieldOption)) return { columnName: attributeName.toString(), attributeName, fields: fieldOption }\n\n return { attributeName, columnName: attributeName.toString(), ...fieldOption }\n }\n\n static CheckIsColumnOption = <Model extends ModelBaseStructure, ParentModel extends ModelBaseStructure>(\n fieldValue: ColumnOptions<Model, ParentModel> | any,\n ): fieldValue is ColumnOptions<Model, ParentModel> => !!fieldValue.columnName\n\n static FindColumnOptionFromList = <Model extends ModelBaseStructure, ParentModel extends ModelBaseStructure>(\n columnName: string,\n fields: HasuraGraphQLFields<ParentModel>,\n ): ColumnOptions<Model, ParentModel> & { attributeName: NonFunctionAndIdentifierPropertyNames<ParentModel> } => {\n if (fields.includes(columnName as HasuraGraphQLFields<ParentModel>[number]))\n return { columnName, attributeName: columnName as NonFunctionAndIdentifierPropertyNames<ParentModel> }\n\n const field = is<Record<NonFunctionAndIdentifierPropertyNames<ParentModel>, ColumnOptions<Model, ParentModel>>>(\n fields.find((field) => {\n if (!isObject(field)) return false\n\n const columnOption = Object.values(field).find((option) =>\n AttributeOptionHelper.CheckIsColumnOption(option) && option.columnName === columnName ? option : {},\n )\n\n return AttributeOptionHelper.CheckIsColumnOption(columnOption) && columnOption?.columnName === columnName\n }) || {},\n )\n const attributeName = Object.keys(field).find(\n (fieldOptionFromList) =>\n AttributeOptionHelper.CheckIsColumnOption(\n field[fieldOptionFromList as NonFunctionAndIdentifierPropertyNames<ParentModel>],\n ) || Array.isArray(field[fieldOptionFromList as NonFunctionAndIdentifierPropertyNames<ParentModel>]),\n ) as NonFunctionAndIdentifierPropertyNames<ParentModel>\n const fieldOption = field?.[attributeName]\n\n if (Array.isArray(fieldOption))\n return { attributeName: attributeName as NonFunctionAndIdentifierPropertyNames<ParentModel>, fields: fieldOption }\n\n return {\n attributeName: attributeName || (columnName as NonFunctionAndIdentifierPropertyNames<ParentModel>),\n columnName,\n ...fieldOption,\n }\n }\n}\n","export enum HasuraGraphQLWhere {\n EQUALS = '_eq',\n GT = '_gt',\n GTE = '_gte',\n IN = '_in',\n NOTIN = '_nin',\n LT = '_lt',\n LTE = '_lte',\n LIKE = '_like',\n NOTLIKE = '_nlike',\n ISNULL = '_is_null',\n ISNOTNULL = '_is_null',\n JSON_CONTAINS = '_contains',\n JSON_HAS_KEYS_ANY = '_has_keys_any',\n}\n","export enum HasuraGraphQLColumnType {\n Int = 'Int',\n Float = 'Float',\n Boolean = 'Boolean',\n String = 'String',\n DateTime = 'timestampz',\n Json = 'json',\n Jsonb = 'jsonb',\n Enum = 'enum',\n Uuid = 'uuid',\n}\n","import { ModelBaseStructure, RepositoryFindFieltersOptions, Where } from '../../../../domain'\nimport { isNil } from '../../../../utils'\nimport { ColumnOptions } from '../../types'\n\nexport class FilterOptionHelper {\n static CheckIfIsFilterOption = <Model extends ModelBaseStructure>(\n filter: any,\n ): filter is RepositoryFindFieltersOptions<Model, any> => !isNil(filter?.operator)\n\n static GetValueFromFilter = <Model extends ModelBaseStructure>(\n filter: RepositoryFindFieltersOptions<Model, any>,\n fieldOption: ColumnOptions<any, any>,\n ): any => {\n if (!FilterOptionHelper.CheckIfIsFilterOption(filter)) return filter\n if (filter.operator === Where.ISNULL) return true\n if (filter.operator === Where.ISNOTNULL) return false\n\n const converter = fieldOption.to\n ? fieldOption.to\n : (value: any) =>\n filter.operator === Where.LIKE && !Array.isArray(filter.value) && value.indexOf('%') < 0\n ? `%${value}%`\n : value\n\n return Array.isArray(filter.value) && !fieldOption.fields && [Where.IN, Where.NOTIN].includes(filter.operator)\n ? filter.value.map((fieldValue) => converter(fieldValue))\n : converter(filter.value as any)\n }\n}\n","import {\n ModelBaseStructure,\n NonFunctionAndIdentifierPropertyNames,\n NonFunctionPropertyNames,\n RepositoryFindFielters,\n RepositoryFindFieltersOptions,\n Where,\n} from '../../../../domain'\nimport { is, isNil, isObject } from '../../../../utils'\nimport { HasuraGraphQLColumnType, HasuraGraphQLWhere } from '../../enums'\nimport { ColumnOptions, HasuraGraphQLFields, VariableOptions } from '../../types'\nimport { AttributeOptionHelper } from './attribute-option.helper'\nimport { FilterOptionHelper } from './filter-option.helper'\n\nexport class BindFilterQueryHelper {\n static MakeGraphQLWhere = <MBase extends ModelBaseStructure>(\n filter: RepositoryFindFielters<MBase>,\n fields: HasuraGraphQLFields<MBase>,\n ): VariableOptions =>\n Object.keys(filter).reduce((variables: VariableOptions, fieldName: string) => {\n const columnOption = AttributeOptionHelper.FindByAttribute(\n fieldName as NonFunctionAndIdentifierPropertyNames<MBase>,\n fields,\n )\n\n if (!columnOption.bindFindFilter)\n return {\n ...variables,\n ...{\n [columnOption.columnName]: BindFilterQueryHelper.BuildWhereSentence(\n fieldName as NonFunctionAndIdentifierPropertyNames<MBase>,\n filter[fieldName as NonFunctionPropertyNames<MBase>] as RepositoryFindFieltersOptions<\n MBase,\n NonFunctionPropertyNames<MBase>\n >,\n fields,\n ),\n },\n }\n\n const builtFilter: RepositoryFindFielters<MBase> = columnOption.bindFindFilter(\n filter[fieldName as NonFunctionPropertyNames<MBase>] as RepositoryFindFieltersOptions<\n MBase,\n NonFunctionPropertyNames<MBase>\n >,\n )\n\n return {\n ...variables,\n ...Object.keys(builtFilter).reduce(\n (variablesList: VariableOptions, columnName: string) => ({\n ...variablesList,\n [columnName]: BindFilterQueryHelper.BuildWhereSentence(\n fieldName as NonFunctionAndIdentifierPropertyNames<MBase>,\n builtFilter[columnName as NonFunctionPropertyNames<MBase>] as RepositoryFindFieltersOptions<\n MBase,\n NonFunctionPropertyNames<MBase>\n >,\n fields,\n ),\n }),\n {},\n ),\n }\n }, {})\n\n static BuildWhereSentence = <MBase extends ModelBaseStructure>(\n field: NonFunctionAndIdentifierPropertyNames<MBase>,\n options: RepositoryFindFieltersOptions<MBase, NonFunctionPropertyNames<MBase>>,\n fields: HasuraGraphQLFields<MBase>,\n ): VariableOptions => {\n const fieldSentenceOptions = AttributeOptionHelper.FindByAttribute<MBase>(field, fields)\n\n if (\n !Array.isArray(options) &&\n isObject(options) &&\n isNil(options?.operator) &&\n isNil(options?.value) &&\n isNil(fieldSentenceOptions?.to)\n )\n return Object.keys(options).reduce((variables, key) => {\n const fieldOptions = AttributeOptionHelper.FindByAttribute<MBase>(\n key as NonFunctionAndIdentifierPropertyNames<MBase>,\n fieldSentenceOptions?.fields || (fields as any),\n )\n const columnName = fieldOptions.columnName\n const columnFields = fieldOptions.fields\n\n return {\n ...variables,\n [columnName]: BindFilterQueryHelper.BuildWhereSentence<MBase>(\n key as NonFunctionAndIdentifierPropertyNames<MBase>,\n is<RepositoryFindFieltersOptions<MBase, NonFunctionAndIdentifierPropertyNames<MBase>>>(\n is<RepositoryFindFielters<MBase>>(options)[key as NonFunctionPropertyNames<MBase>],\n ),\n columnFields || ([] as any),\n ),\n }\n }, {})\n\n if (!Array.isArray(options) && !isNil(fieldSentenceOptions.fields))\n return {\n [fieldSentenceOptions.fields[0] as NonFunctionAndIdentifierPropertyNames<MBase>]:\n BindFilterQueryHelper.BuildOperatorSentence(\n options,\n fieldSentenceOptions as ColumnOptions<MBase[NonFunctionAndIdentifierPropertyNames<MBase>], MBase>,\n ),\n }\n\n if (isObject(options) && !FilterOptionHelper.CheckIfIsFilterOption(options))\n options = Object.values(options)[0] as RepositoryFindFieltersOptions<MBase, any>\n\n return Array.isArray(options)\n ? options.reduce(\n (whereSentence, option) => ({\n ...whereSentence,\n ...BindFilterQueryHelper.BuildOperatorSentence(\n option,\n fieldSentenceOptions as ColumnOptions<MBase[NonFunctionAndIdentifierPropertyNames<MBase>], MBase>,\n ),\n }),\n {},\n )\n : BindFilterQueryHelper.BuildOperatorSentence(\n options,\n fieldSentenceOptions as ColumnOptions<MBase[NonFunctionAndIdentifierPropertyNames<MBase>], MBase>,\n )\n }\n\n static BuildOperatorSentence = <MBase extends ModelBaseStructure>(\n options: RepositoryFindFieltersOptions<MBase, any>,\n fieldOption: ColumnOptions<any, any>,\n ): VariableOptions => ({\n [BindFilterQueryHelper.GetHasuraOperator(options, fieldOption)]: FilterOptionHelper.GetValueFromFilter(\n options,\n fieldOption,\n ),\n })\n\n static GetHasuraOperator = <MBase extends ModelBaseStructure>(\n options: RepositoryFindFieltersOptions<MBase, NonFunctionPropertyNames<MBase>>,\n fieldOption: ColumnOptions<any, any>,\n ): HasuraGraphQLWhere =>\n FilterOptionHelper.CheckIfIsFilterOption(options)\n ? fieldOption.type === HasuraGraphQLColumnType.Jsonb\n ? BindFilterQueryHelper.GetHasuraJsonbOperator(options)\n : HasuraGraphQLWhere[\n Object.keys(HasuraGraphQLWhere).find(\n (graphQLOperator) =>\n graphQLOperator ===\n Object.keys(Where).find((operator) => Where[operator as keyof typeof Where] === options?.operator),\n ) as keyof typeof HasuraGraphQLWhere\n ]\n : HasuraGraphQLWhere.EQUALS\n\n static GetHasuraJsonbOperator = <MBase extends ModelBaseStructure>(\n options: RepositoryFindFieltersOptions<MBase, NonFunctionPropertyNames<MBase>>,\n ): HasuraGraphQLWhere =>\n options.operator === Where.IN\n ? HasuraGraphQLWhere.JSON_CONTAINS\n : options.operator === Where.LIKE\n ? HasuraGraphQLWhere.JSON_HAS_KEYS_ANY\n : HasuraGraphQLWhere[\n Object.keys(HasuraGraphQLWhere).find(\n (graphQLOperator) =>\n graphQLOperator ===\n Object.keys(Where).find((operator) => Where[operator as keyof typeof Where] === options?.operator),\n ) as keyof typeof HasuraGraphQLWhere\n ]\n}\n","import {\n BaseModel,\n ModelBaseStructure,\n NonFunctionAndIdentifierPropertyNames,\n NonFunctionProperties,\n} from '../../../../domain'\nimport { is, isDate, isEmpty, isNil, isObject, isString, parseDateTime } from '../../../../utils'\nimport { Fields, GraphQLParams, HasuraGraphQLFields } from '../../types'\n\nimport { AttributeOptionHelper } from './attribute-option.helper'\nimport { BindFilterQueryHelper } from './bind-filter-query.helper'\n\nexport class GraphQLFieldHelper {\n static CheckIsGraphQLParams = <Model extends ModelBaseStructure>(\n params: string | GraphQLParams<Model>[],\n ): params is GraphQLParams<Model>[] =>\n !isString(params) && Array.isArray(params) && params.length >= 0 && !!params[0].operation\n\n static ConvertModelFieldsToGraphQLFields = <Model extends ModelBaseStructure>(\n fields: HasuraGraphQLFields<Model>,\n ): Fields => {\n return fields\n ?.map((field) => {\n if (isString(field)) return field.toString()\n if (field === 'affected_rows') return field\n\n const fieldName = Object.keys(field).shift()\n const fieldValue = field[fieldName as keyof typeof field]\n\n if (Array.isArray(fieldValue))\n return { [fieldName]: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fieldValue) }\n if (!AttributeOptionHelper.CheckIsColumnOption(fieldValue)) return null\n if (fieldValue.fields)\n return !fieldValue.filters\n ? {\n [fieldValue.columnName || fieldName]: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(\n fieldValue.fields,\n ),\n }\n : {\n operation: fieldValue.columnName || fieldName,\n fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fieldValue.fields),\n variables: {\n [`${fieldValue.columnName}_where`]: {\n name: 'where',\n type: fieldValue.filters.filterType,\n value: BindFilterQueryHelper.MakeGraphQLWhere(fieldValue.filters.filters, fieldValue.fields),\n required: true,\n },\n },\n }\n\n return fieldValue.columnName\n })\n .filter((field) => !!field)\n }\n\n static ConvertFieldValueFrom = <\n Model extends ModelBaseStructure,\n RecordDataType extends string | number | DataType | Date,\n DataType extends Record<string, RecordDataType | RecordDataType[]>,\n >(\n data: DataType,\n fields: HasuraGraphQLFields<Model>,\n ): Partial<NonFunctionProperties<Model>> =>\n Object.keys(data).reduce((result, columnName) => {\n const {\n attributeName,\n fields: attributeFields,\n from,\n } = AttributeOptionHelper.FindColumnOptionFromList(columnName, fields)\n\n if (!!attributeFields && Array.isArray(attributeFields)) {\n if (Array.isArray(data[columnName]))\n return {\n ...result,\n [attributeName]: from\n ? from(data[columnName], data)\n : is<RecordDataType[]>(data[columnName]).map((value) =>\n GraphQLFieldHelper.ConvertFieldValueFrom(is<DataType>(value), attributeFields),\n ),\n }\n if (isObject(data[columnName]))\n return {\n ...result,\n [attributeName]: !!from\n ? from(data[columnName])\n : GraphQLFieldHelper.ConvertFieldValueFrom(is<DataType>(data[columnName]), attributeFields),\n }\n }\n\n if (!!from) return { ...result, [attributeName]: from(data[columnName], data) }\n\n return { ...result, [attributeName]: parseDateTime(data[columnName]?.toString()) }\n }, {})\n\n static ConvertFieldValueTo = <\n Model extends ModelBaseStructure,\n DataType extends Record<string, string | number | DataType | Date>,\n >(\n instance: Model,\n fields: HasuraGraphQLFields<Model>,\n update = false,\n ): DataType => {\n const data: Partial<Model> = instance.toPlain?.() || instance\n\n return Object.keys(data).reduce((result, attributeName) => {\n const {\n columnName,\n fields: attributeFields,\n foreignKeyColumn,\n to,\n bindPersistData,\n } = AttributeOptionHelper.FindByAttribute(attributeName as NonFunctionAndIdentifierPropertyNames<Model>, fields)\n\n if (bindPersistData)\n return {\n ...result,\n ...bindPersistData(data[attributeName as NonFunctionAndIdentifierPropertyNames<Model>], instance),\n }\n if (isNil(columnName)) return result\n if (\n !!foreignKeyColumn &&\n !isEmpty(foreignKeyColumn) &&\n !Object.keys(foreignKeyColumn).filter(\n (key) =>\n !is<Record<string, string>>(data[attributeName as NonFunctionAndIdentifierPropertyNames<Model>])?.[key],\n ).length\n )\n return Object.keys(foreignKeyColumn).reduce(\n (object, current) => ({\n ...object,\n [foreignKeyColumn[current as keyof HasuraGraphQLFields<Model>[number]]]:\n data[attributeName as keyof HasuraGraphQLFields<Model>[number]]?.[current],\n }),\n { ...result },\n )\n\n if (\n update &&\n isObject(data[attributeName as keyof HasuraGraphQLFields<Model>[number]]) &&\n !isNil(attributeFields) &&\n !isDate(data[attributeName as keyof HasuraGraphQLFields<Model>[number]])\n )\n return result\n\n if (\n !!columnName &&\n Array.isArray(attributeFields) &&\n isObject(data[attributeName as keyof HasuraGraphQLFields<Model>[number]])\n ) {\n const converted =\n !isNil(columnName) && to\n ? to(instance[attributeName as keyof HasuraGraphQLFields<Model>[number]], instance)\n : data[attributeName as keyof HasuraGraphQLFields<Model>[number]]\n\n return {\n ...result,\n ...(converted !== undefined\n ? {\n [columnName]: {\n data:\n instance[attributeName as NonFunctionAndIdentifierPropertyNames<Model>] instanceof BaseModel\n ? GraphQLFieldHelper.ConvertFieldValueTo(\n data[attributeName as keyof HasuraGraphQLFields<Model>[number]],\n attributeFields as HasuraGraphQLFields<Model>,\n )\n : converted,\n },\n }\n : {}),\n }\n }\n\n if (!!to)\n return {\n ...result,\n [columnName]: to(instance[attributeName as keyof HasuraGraphQLFields<Model>[number]], instance),\n }\n\n return { ...result, [columnName]: data[attributeName as keyof HasuraGraphQLFields<Model>[number]] }\n }, {} as DataType)\n }\n}\n","import { CreateRepository, CreateRepositoryParams, ModelBaseStructure } from '../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../utils'\nimport { GraphQLRepository, HasuraGraphQLFields } from '../types'\n\nimport { AttributeOptionHelper } from './helpers'\n\nexport type CreateConstructorParams = {\n insertGraphQLOperation?: string\n insertGraphQLObjectType?: string\n}\n\nexport const withCreateHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n): MixinCtor<\n GraphQLRepository<MBase> & InstanceType<TMixinBase> & CreateRepository<MBase>,\n MergeConstructorParams<[CreateConstructorParams, ...any[]], ConstructorParameters<TMixinBase>>\n> => {\n return class CreateHasuraGraphQLMixin extends MixinBase implements CreateRepository<MBase> {\n insertGraphQLOperation: string\n insertGraphQLObjectType: string\n\n constructor(...params: any[]) {\n const options: CreateConstructorParams = params?.[0]\n\n super(...params)\n\n this.insertGraphQLOperation = options?.insertGraphQLOperation || `insert_${this.tableName}_one`\n this.insertGraphQLObjectType = options?.insertGraphQLObjectType || `${this.tableName}_insert_input`\n }\n\n async create(data: CreateRepositoryParams<MBase>): Promise<MBase> {\n const newData = await this.save(this.model.toInstance(data as any))\n\n return this.model.toInstance(newData)\n }\n\n async save(data: MBase): Promise<Partial<MBase>> {\n const primaryKeyColumns = this.model.identifiersFields.map(\n (field) => AttributeOptionHelper.FindByAttribute(field, this.fields).columnName,\n ) as HasuraGraphQLFields<MBase>\n const foreignKeyColumns = this.fields\n .map((field) => {\n const columnOptions = Object.values(field).shift()\n\n return (\n AttributeOptionHelper.CheckIsColumnOption(columnOptions) &&\n columnOptions.foreignKeyColumn && [\n ...Object.values(columnOptions.foreignKeyColumn),\n {\n [columnOptions.columnName]: Object.keys(columnOptions.foreignKeyColumn).map(\n (foreignKeyField) =>\n AttributeOptionHelper.FindByAttribute(foreignKeyField as any, columnOptions?.fields)?.columnName ||\n foreignKeyField,\n ),\n },\n ]\n )\n })\n .filter(Boolean)\n .reduce((keys, current) => [...keys, ...current], [])\n\n const result = await this.mutation<Record<string, Record<string, any>>>(\n this.insertGraphQLOperation,\n [...primaryKeyColumns, ...foreignKeyColumns] as HasuraGraphQLFields<MBase>,\n {\n object: { type: this.insertGraphQLObjectType, required: true, value: this.convertDataToHasura(data) },\n },\n )\n\n return { ...data.toPlain(), ...this.convertDataFromHasura(result[this.insertGraphQLOperation]).toPlain() }\n }\n } as any\n}\n","import { DeleteRepository, DeleteRepositoryParams, ModelBaseStructure } from '../../../domain'\nimport { isNil, MergeConstructorParams, MixinCtor } from '../../../utils'\nimport { GraphQLRepository, HasuraGraphQLFields } from '../types'\n\nimport { AttributeOptionHelper } from './helpers'\n\nexport type DeleteConstructorParams = {\n deleteGraphQLOperation?: string\n}\n\nexport const withDeleteHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n): MixinCtor<\n GraphQLRepository<MBase> & DeleteRepository<MBase> & InstanceType<TMixinBase>,\n MergeConstructorParams<[DeleteConstructorParams, ...any[]], ConstructorParameters<TMixinBase>>\n> => {\n return class DeleteHasuraGraphQLMixin extends MixinBase implements DeleteRepository<MBase> {\n deleteGraphQLOperation: string\n\n constructor(...params: any[]) {\n const options: DeleteConstructorParams = params?.[0]\n\n super(...params)\n\n this.deleteGraphQLOperation = options?.deleteGraphQLOperation || `delete_${this.tableName}_by_pk`\n }\n\n async delete(identifiers: DeleteRepositoryParams<MBase>): Promise<void> {\n const instance = this.model.toInstance(identifiers as any)\n\n await this.mutation(\n this.deleteGraphQLOperation,\n this.model.identifiersFields.map(\n (field) => AttributeOptionHelper.FindByAttribute(field, this.fields).columnName,\n ) as HasuraGraphQLFields<MBase>,\n this.model.identifiersFields.reduce((ids, identifier) => {\n if (isNil(instance[identifier])) return ids\n\n const columnOption = AttributeOptionHelper.FindByAttribute(identifier, this.fields)\n const value = columnOption.to(identifiers[identifier as keyof DeleteRepositoryParams<MBase>], instance)\n\n return {\n ...ids,\n [columnOption.columnName]: {\n type: this.getAttributeGraphQLTypeOf(columnOption.type || value),\n value,\n required: true,\n },\n }\n }, {}),\n )\n }\n } as any\n}\n","import { mutation, query } from 'gql-query-builder'\nimport fetch from 'node-fetch'\n\nimport { BaseModelBuilder, ModelBaseStructure } from '../../../domain'\nimport {\n isBoolean,\n isInteger,\n isNaN,\n isNil,\n isNumber,\n isString,\n isUUID,\n MergeConstructorParams,\n MixinCtor,\n parseISO,\n} from '../../../utils'\nimport {\n GraphQLParams,\n GraphQLRepository,\n HasuraGraphQLAuthOptions,\n HasuraGraphQLFields,\n HasuraGraphQLHeaders,\n VariableOptions,\n} from '../types'\n\nimport { GraphQLFieldHelper } from './helpers'\n\nexport type ConstructorParams<Model extends ModelBaseStructure> = {\n tableName: string\n model: BaseModelBuilder<Model>\n fields: HasuraGraphQLFields<Model>\n endpoint: string\n authOptions: HasuraGraphQLAuthOptions\n}\n\nexport const withHasuraGraphQL = <MBase extends ModelBaseStructure, T extends MixinCtor = MixinCtor>(\n MixinBase: T,\n): MixinCtor<GraphQLRepository<MBase>, MergeConstructorParams<any[], ConstructorParameters<T>>> => {\n return class HasuraGraphQLMixin extends MixinBase implements GraphQLRepository<MBase> {\n tableName: string\n endpoint: string\n authOptions: HasuraGraphQLAuthOptions\n model: BaseModelBuilder<MBase>\n fields: HasuraGraphQLFields<MBase>\n\n get headers(): HasuraGraphQLHeaders {\n return {\n 'Content-Type': 'application/json',\n ...(isNil(this.authOptions.authToken) ? {} : { Authorization: this.authOptions.authToken }),\n ...(isNil(this.authOptions.adminSecret) ? {} : { 'X-Hasura-Admin-Secret': this.authOptions.adminSecret }),\n ...(isNil(this.authOptions.authRole)\n ? {}\n : { 'X-Hasura-Role': this.authOptions.authRole.role, 'X-Hasura-User-Id': this.authOptions.authRole.userId }),\n }\n }\n\n constructor(...params: any[]) {\n const options: ConstructorParams<MBase> = params[0]\n\n super(...params)\n\n this.tableName = options.tableName\n this.endpoint = options.endpoint\n this.authOptions = options.authOptions\n this.model = options.model\n this.fields = options.fields || (this.model.identifiersFields as HasuraGraphQLFields<MBase>)\n }\n\n async mutation<ReturnFields = any>(\n operation: string,\n fields?: HasuraGraphQLFields<MBase>,\n variables?: VariableOptions,\n ): Promise<ReturnFields> {\n const resultQuery = mutation({\n operation,\n variables,\n fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fields),\n })\n\n return this.fetch(resultQuery)\n }\n\n async query<ReturnFields = any>(\n operation: string | GraphQLParams<MBase>[],\n fields?: HasuraGraphQLFields<MBase>,\n variables?: VariableOptions,\n ): Promise<ReturnFields> {\n const resultQuery = GraphQLFieldHelper.CheckIsGraphQLParams(operation)\n ? query(\n operation.map((option) => ({\n operation: option.operation,\n variables: option.variables,\n fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(option.fields),\n })),\n )\n : query({\n operation,\n variables,\n fields: GraphQLFieldHelper.ConvertModelFieldsToGraphQLFields(fields),\n })\n\n return this.fetch(resultQuery)\n }\n\n async fetch<ReturnFields = any>(params: { variables: any; query: string }): Promise<ReturnFields> {\n const headers = this.headers\n const response = await fetch(`${this.endpoint}`, {\n method: 'POST',\n body: JSON.stringify(params),\n headers,\n })\n const result: any = await response.json()\n\n if (!isNil(result.errors)) throw new Error(JSON.stringify(result.errors))\n\n return result.data\n }\n\n getAttributeGraphQLTypeOf<FieldType>(value: FieldType): string {\n if (isUUID(value as any)) return 'uuid'\n if (isString(value)) return 'String'\n if (isBoolean(value)) return 'Boolean'\n if (value instanceof Date) return 'timestamptz'\n if (isInteger(value)) return 'Int'\n if (isNumber(value)) return 'numeric'\n\n throw new Error('Type not implemented yet')\n }\n\n checkIfIsDateTimeAndParse(value: string): Date | string {\n if (!/^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/.test(value)) return value\n\n const date = parseISO(value)\n\n if (isNaN(date.getTime())) return value\n\n return date\n }\n\n convertDataFromHasura(data: Record<string, string | number>): MBase {\n const plain = GraphQLFieldHelper.ConvertFieldValueFrom(data, this.fields)\n\n return this.model.toInstance(plain)\n }\n\n convertDataToHasura(instance: MBase, update = false): Record<string, string | number> {\n return GraphQLFieldHelper.ConvertFieldValueTo(instance, this.fields, update)\n }\n }\n}\n","import {\n BaseModel,\n ModelBaseStructure,\n NonFunctionAndIdentifierProperties,\n RepositoryUpdateParams,\n UpdateOptionActions,\n UpdateOptions,\n UpdateRepository,\n} from '../../../domain'\nimport { is, isNil, MergeConstructorParams, MixinCtor } from '../../../utils'\nimport { GraphQLRepository, HasuraGraphQLFields } from '../types'\n\nimport { AttributeOptionHelper } from './helpers'\n\nexport type UpdateHasuraGraphQLRepositoryType<MBase extends ModelBaseStructure> = UpdateRepository<MBase> & {\n paramsToPlain(params: RepositoryUpdateParams<MBase>): Partial<MBase>\n}\n\nexport type UpdateConstructorParams = {\n updateGraphQLOperation?: string\n updateGraphQLObjectType?: string\n updateGraphQLPKType?: string\n}\n\nexport const withUpdateHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n): MixinCtor<\n GraphQLRepository<MBase> & UpdateHasuraGraphQLRepositoryType<MBase> & InstanceType<TMixinBase>,\n MergeConstructorParams<[UpdateConstructorParams, ...any[]], ConstructorParameters<TMixinBase>>\n> => {\n const getValueByAction = (options: UpdateOptions<MBase>): unknown => {\n if (options instanceof BaseModel) return options.toPlain()\n if (isNil(options?.action)) return options\n if ([UpdateOptionActions.REMOVE_FIELD.toString(), UpdateOptionActions.NULL.toString()].includes(options.action))\n return null\n\n return options.value\n }\n\n return class UpdateHasuraGraphQLMixin extends MixinBase implements UpdateRepository<MBase> {\n updateGraphQLOperation: string\n updateGraphQLObjectType: string\n updateGraphQLPKType: string\n\n constructor(...params: any[]) {\n const options: UpdateConstructorParams = params?.[0]\n\n super(...params)\n\n this.updateGraphQLOperation = options?.updateGraphQLOperation || `update_${this.tableName}_by_pk`\n this.updateGraphQLObjectType = options?.updateGraphQLObjectType || `${this.tableName}_set_input`\n this.updateGraphQLPKType = options?.updateGraphQLPKType || `${this.tableName}_pk_columns_input`\n }\n\n async update(data: RepositoryUpdateParams<MBase>): Promise<MBase> {\n const plainData = this.paramsToPlain(data)\n\n await this.mutation(\n this.updateGraphQLOperation,\n this.model.identifiersFields.map(\n (field) => AttributeOptionHelper.FindByAttribute(field, this.fields).columnName,\n ) as HasuraGraphQLFields<MBase>,\n {\n _set: {\n type: this.updateGraphQLObjectType,\n value: this.convertDataToHasura(this.model.toInstance(plainData), true),\n required: true,\n },\n pk_columns: { type: this.updateGraphQLPKType, value: this.getUpdateModelKeys(plainData), required: true },\n },\n )\n\n return this.model.toInstance(plainData)\n }\n\n paramsToPlain(params: RepositoryUpdateParams<MBase>): Partial<MBase> {\n const model = this.model\n\n if (model.isModel(params)) return params.toPlain()\n\n return Object.keys(params).reduce(\n (data, currentKey) => ({\n ...data,\n ...(params[currentKey as keyof RepositoryUpdateParams<MBase>] !== undefined && {\n [currentKey]: getValueByAction(\n is<UpdateOptions<MBase>>(params[currentKey as keyof RepositoryUpdateParams<MBase>]),\n ),\n }),\n }),\n {},\n )\n }\n\n getUpdateModelKeys(data: Partial<MBase>): NonFunctionAndIdentifierProperties<MBase> {\n const instance = this.model.toInstance(data)\n\n return this.model.identifiersFields.reduce((ids, identifier) => {\n if (isNil(instance[identifier])) return ids\n\n const columnOption = AttributeOptionHelper.FindByAttribute(identifier, this.fields)\n const value = columnOption?.to?.(data[identifier], instance) || data[columnOption.attributeName]\n\n return {\n ...ids,\n [columnOption.columnName]: value,\n }\n }, {} as NonFunctionAndIdentifierProperties<MBase>)\n }\n } as any\n}\n","import { GetRepository, GetRepositoryParams, ModelBaseStructure } from '../../../domain'\nimport { NotFoundError } from '../../../errors'\nimport { isNil, MixinCtor } from '../../../utils'\nimport { GraphQLRepository } from '../types'\n\nimport { AttributeOptionHelper } from './helpers'\n\nexport type GetConstructorParams = {\n getGraphQLOperation?: string\n}\n\nexport const withGetHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n) => {\n return class GetHasuraGraphQLMixin extends MixinBase implements GetRepository<MBase> {\n getGraphQLOperation: string\n\n constructor(...params: any[]) {\n const options: GetConstructorParams = params?.[0]\n\n super(...params)\n\n this.getGraphQLOperation = options?.getGraphQLOperation || `${this.tableName}_by_pk`\n }\n\n async get(identifiers: GetRepositoryParams<MBase>): Promise<MBase> {\n const instance = this.model.toInstance(identifiers)\n const result = await this.query(\n this.getGraphQLOperation,\n this.fields,\n this.model.identifiersFields.reduce((ids, identifier) => {\n if (isNil(instance[identifier])) return ids\n\n const columnOption = AttributeOptionHelper.FindByAttribute(identifier, this.fields)\n const value =\n columnOption?.to?.(identifiers[identifier as keyof typeof identifiers], instance) ||\n identifiers[identifier as keyof typeof identifiers]\n\n return {\n ...ids,\n [columnOption.columnName]: {\n type: this.getAttributeGraphQLTypeOf(columnOption.type || value),\n value,\n required: true,\n },\n }\n }, {}),\n )\n const data = result[this.getGraphQLOperation]\n\n if (isNil(data)) throw new NotFoundError(`${instance.constructor.name} not found`)\n\n return this.convertDataFromHasura(result[this.getGraphQLOperation])\n }\n }\n}\n","import {\n FindRepository,\n ModelBaseStructure,\n NonFunctionPropertyNames,\n RepositoryFindFielters,\n RepositoryFindResult,\n RepositoryLimitOptions,\n RepositoryOrderBy,\n} from '../../../domain'\nimport { isNil, MixinCtor } from '../../../utils'\nimport { GraphQLRepository } from '../types'\n\nimport { BindFilterQueryHelper } from './helpers'\n\nexport const withFindHasuraGraphQL = <\n MBase extends ModelBaseStructure,\n TMixinBase extends MixinCtor<GraphQLRepository<MBase>>,\n>(\n MixinBase: MixinCtor<GraphQLRepository<MBase>> & TMixinBase,\n) => {\n return class FindHasuraGraphQLMixin extends MixinBase implements FindRepository<MBase> {\n async find(options?: {\n filters?: RepositoryFindFielters<MBase>\n fields?: NonFunctionPropertyNames<MBase>[]\n limits?: RepositoryLimitOptions<MBase>\n orderBy?: RepositoryOrderBy<MBase>\n }): Promise<RepositoryFindResult<MBase>> {\n const { filters, limits, orderBy } = options || {}\n const variablesCount = {\n ...(isNil(orderBy) ? {} : { order_by: { type: `${this.tableName}_order_by!`, list: true, value: orderBy } }),\n ...(isNil(filters)\n ? {}\n : {\n where: {\n value: BindFilterQueryHelper.MakeGraphQLWhere(filters, this.fields),\n type: `${this.tableName}_bool_exp`,\n required: true,\n },\n }),\n }\n const variables = {\n ...(isNil(limits) ? {} : limits),\n ...variablesCount,\n }\n const result = await this.query([\n {\n operation: this.tableName,\n fields: options.fields\n ? options.fields\n .map(\n (fieldName) =>\n this.fields.find((fieldOption) => fieldOption === fieldName) ??\n this.fields.find((fieldOption) => Object.keys(fieldOption).shift() === fieldName),\n )\n .filter(Boolean)\n : this.fields,\n variables,\n },\n {\n operation: `${this.tableName}_aggregate`,\n fields: [{ aggregate: ['count'] }],\n variables: variablesCount,\n },\n ])\n const data: MBase[] = result[this.tableName].map((row: Record<string, string | number>) =>\n this.convertDataFromHasura(row),\n )\n const count = result[`${this.tableName}_aggregate`].aggregate.count\n\n return { count, data }\n }\n }\n}\n","import { CrudRepository, ModelBaseStructure } from '../../../domain'\nimport { MergeConstructorParams, MixinCtor } from '../../../utils'\nimport { GraphQLRepository } from '../types'\n\nimport { CreateConstructorParams, withCreateHasuraGraphQL } from './with-create-hasura-graphql.mixin'\nimport { DeleteConstructorParams, withDeleteHasuraGraphQL } from './with-delete-hasura-graphql.mixin'\nimport { withFindHasuraGraphQL } from './with-find-hasura-graphql.mixin'\nimport { GetConstructorParams, withGetHasuraGraphQL } from './with-get-hasura-graphql.mixin'\nimport { ConstructorParams } from './with-hasura-graphql.mixin'\nimport {\n UpdateConstructorParams,\n UpdateHasuraGraphQLRepositoryType,\n withUpdateHasuraGraphQL,\n} from './with-update-hasura-graphql.mixin'\n\nexport const withCrudHasuraGraphQL = <\n TBase extends ModelBaseStructure,\n Repository = CrudRepository<TBase>,\n TMixinBase extends MixinCtor = MixinCtor,\n>(\n MixinBase: MixinCtor<GraphQLRepository<TBase>> & TMixinBase,\n): MixinCtor<\n GraphQLRepository<TBase> & Repository & UpdateHasuraGraphQLRepositoryType<TBase>,\n MergeConstructorParams<\n [\n ConstructorParams<TBase> &\n CreateConstructorParams &\n DeleteConstructorParams &\n GetConstructorParams &\n UpdateConstructorParams,\n ...any[],\n ],\n ConstructorParameters<TMixinBase>\n >\n> => {\n return class CrudHasuraGraphQLMixin\n extends withUpdateHasuraGraphQL(\n withGetHasuraGraphQL(\n withFindHasuraGraphQL(\n withDeleteHasuraGraphQL(withCreateHasuraGraphQL(MixinBase as MixinCtor<GraphQLRepository<TBase>>)),\n ),\n ),\n )\n implements CrudRepository<TBase> {} as any\n}\n","import { Category } from '../../../domain'\n\nexport class CategoryHasuraGraphQL extends Category {\n firestoreId?: string\n brandCondition?: string\n tagCondition?: string[]\n}\n","import { Type } from 'class-transformer'\n\nimport { Product } from '../../../domain'\n\nimport { KitProductHasuraGraphQL } from './kit-product-hasura-graphql'\n\nexport class ProductHasuraGraphQL extends Product {\n firestoreId?: string\n fullPrice?: number\n subscriberDiscountPercentage?: number\n subscriberPrice?: number\n productId?: number\n differentials?: string\n whoMustUse?: string\n howToUse?: string\n brandDescription?: string\n\n @Type(() => KitProductHasuraGraphQL)\n override kitProducts?: KitProductHasuraGraphQL[]\n}\n","import { Type } from 'class-transformer'\n\nimport { KitProduct } from '../../../domain'\n\nimport { ProductHasuraGraphQL } from './product-hasura-graphql'\n\nexport class KitProductHasuraGraphQL extends KitProduct {\n @Type(() => ProductHasuraGraphQL)\n override kit: ProductHasuraGraphQL\n\n @Type(() => ProductHasuraGraphQL)\n override product: ProductHasuraGraphQL\n}\n","import { Variant } from '../../../domain'\n\nexport class VariantHasuraGraphQL extends Variant {\n firestoreId?: string\n fullPrice?: number\n subscriberDiscountPercentage?: number\n subscriberPrice?: number\n\n name ? = ''\n hasVariants ? = false\n}\n","import {\n Category,\n CategoryMetadata,\n CategoryRepository,\n CreateRepositoryParams,\n GetRepositoryParams,\n Product,\n ProductMetadata,\n Shops,\n UpdateRepositoryParams,\n Where,\n} from '../../../../domain'\nimport { DuplicatedResultsError, NotFoundError } from '../../../../errors'\nimport { Base, omit } from '../../../../utils'\nimport { HasuraGraphQLColumnType } from '../../enums'\nimport { withCrudHasuraGraphQL, withHasuraGraphQL } from '../../mixins'\nimport { CategoryHasuraGraphQL } from '../../models'\nimport { HasuraGraphQLAuthOptions } from '../../types'\n\nimport { ProductHasuraGraphQLRepository } from './product-hasura-graphql.repository'\n\nexport class CategoryHasuraGraphQLRepository\n extends withCrudHasuraGraphQL(withHasuraGraphQL<CategoryHasuraGraphQL>(Base))\n implements CategoryRepository\n{\n constructor(\n endpoint: string,\n authOptions: HasuraGraphQLAuthOptions,\n private readonly productRepository: ProductHasuraGraphQLRepository,\n ) {\n super({\n tableName: 'category',\n model: Category,\n endpoint,\n authOptions,\n fields: [\n { id: { columnName: 'id', to: (value: string) => +value, from: (value: number) => value.toString() } },\n { firestoreId: { columnName: 'firestore_id' } },\n 'name',\n 'description',\n 'image',\n 'published',\n 'shop',\n 'slug',\n { brandCategory: { columnName: 'brand_category' } },\n { brandCategoryBanner: { columnName: 'brand_banner' } },\n { brandCategoryBannerMobile: { columnName: 'brand_banner_mobile' } },\n { brandLogo: { columnName: 'brand_logo' } },\n { brandCondition: { columnName: 'brand_condition' } },\n {\n conditions: {\n columnName: 'tag_condition',\n type: HasuraGraphQLColumnType.Jsonb,\n from: (tags: unknown, row: Record<string, any>) => ({\n brand: row.brand_condition,\n tags: Array.isArray(tags) ? tags : [],\n }),\n bindPersistData: (value: CategoryHasuraGraphQL['conditions']) => {\n return {\n brand_condition: value.brand,\n tag_condition: value?.tags || [],\n }\n },\n bindFindFilter: (sentence: any) => {\n return {\n ...(sentence.brand ? { brand_condition: sentence.brand } : {}),\n ...(sentence.tags ? { tag_condition: sentence.tags } : {}),\n }\n },\n },\n },\n 'filters',\n { createdAt: { columnName: 'created_at' } },\n { updatedAt: { columnName: 'updated_at' } },\n {\n products: {\n columnName: 'products',\n fields: ['product_id'],\n from: (value: { product_id: number }[]) => value.map((product) => product.product_id.toString()),\n to: (productIds: string[]) =>\n productIds.map((productId) => ({\n product_id: +productId,\n })),\n },\n },\n {\n metadata: {\n columnName: 'metadata',\n fields: ['title', 'description'],\n bindPersistData: (value: ProductMetadata): Record<string, any> => ({\n metadata: { data: value },\n }),\n },\n },\n ],\n })\n }\n\n override async create(params: CreateRepositoryParams<CategoryHasuraGraphQL>): Promise<CategoryHasuraGraphQL> {\n const { metadata, ...data } = params\n\n return super.create({ ...data, metadata: metadata || { description: null, title: null } })\n }\n\n override async get(identifiers: GetRepositoryParams<CategoryHasuraGraphQL>): Promise<CategoryHasuraGraphQL> {\n return Number.isNaN(+identifiers.id)\n ? (await this.find({ filters: { firestoreId: identifiers.id } })).data?.[0]\n : super.get(identifiers)\n }\n\n override async update(params: UpdateRepositoryParams<CategoryHasuraGraphQL>): Promise<CategoryHasuraGraphQL> {\n const { products, id: checkId, metadata, ...data } = params\n const plainData = this.paramsToPlain({ id: checkId })\n const id = await this.getId(plainData.id)\n const category = await super.update({ id, ...data })\n\n category.products = products && (await this.updateProducts(+id, { products }))\n category.metadata = metadata && (await this.updateMetadata(+id, { metadata }))\n\n return category\n }\n\n async getCategoryBySlug(slug: string, shop: Shops): Promise<Category> {\n if (!slug) return null\n\n const { data, count } = await this.find({ filters: { slug, shop, published: true } })\n\n if (count > 1) throw new DuplicatedResultsError('Query returned duplicated values')\n if (!count) throw new NotFoundError(`Category with slug ${slug} not found`)\n\n return data.shift()\n }\n\n async getCategoriesForHome(categoryIds: string[], limit = 4): Promise<{ category: Category; products: Product[] }[]> {\n if (!categoryIds?.length) return []\n\n const categoriesFirestore = categoryIds.filter((categoryId) => Number.isNaN(+categoryId))\n const categoriesHasura = categoryIds.filter((categoryId) => +categoryId > 0)\n const categories = []\n\n if (categoriesFirestore.length)\n categories.push(\n ...(await this.find({\n filters: { firestoreId: { operator: Where.IN, value: categoriesFirestore.filter(Boolean) }, published: true },\n }).then(({ data }) => data)),\n )\n if (categoriesHasura.length)\n categories.push(\n ...(await this.find({\n filters: { id: { operator: Where.IN, value: categoriesHasura.filter(Boolean) }, published: true },\n }).then(({ data }) => data)),\n )\n\n if (!categories.length) return []\n\n const homeSections = await Promise.all(\n categories.map(async (category) => ({\n category,\n products: await this.mountCategory(category, { limit, hasStock: true }),\n })),\n )\n\n return homeSections\n }\n\n async mountCategory(category: Category, options?: { limit?: number; hasStock?: boolean }): Promise<Product[]> {\n if (!category?.products?.length) return []\n\n const products = []\n const { data: productsData } = await this.productRepository.find({\n filters: {\n id: { operator: Where.IN, value: category.products },\n published: true,\n ...(options?.hasStock ? { stock: { quantity: { operator: Where.GT, value: 0 } } } : {}),\n },\n fields: [\n 'id',\n 'name',\n 'slug',\n 'images',\n 'miniatures',\n 'price',\n 'fullPrice',\n 'subscriberDiscountPercentage',\n 'subscriberPrice',\n 'stock',\n 'published',\n 'CEST',\n 'EAN',\n 'NCM',\n 'brand',\n 'costPrice',\n 'hasVariants',\n 'isKit',\n 'sku',\n 'rate',\n 'tags',\n 'type',\n 'shoppingCount',\n ],\n ...(options?.limit ? { limits: { limit: options?.limit } } : {}),\n })\n\n products.push(...productsData)\n\n return products\n }\n\n private async getId(id: string): Promise<string> {\n if (!Number.isNaN(+id)) return id\n\n const { data } = await this.find({ filters: { firestoreId: id } })\n\n if (data?.[0]?.id) return data?.[0]?.id\n\n throw new NotFoundError(`Category with id ${id} not found`)\n }\n\n private async updateProducts(\n categoryId: number,\n { products }: Pick<UpdateRepositoryParams<CategoryHasuraGraphQL>, 'products'>,\n ): Promise<CategoryHasuraGraphQL['products']> {\n if ('action' in products && products.action === 'remove') {\n await this.mutation('delete_category_product', ['affected_rows'], {\n where: {\n type: 'category_product_bool_exp',\n required: true,\n value: { category_id: { _eq: categoryId } },\n },\n })\n\n return []\n }\n\n const plainData = this.paramsToPlain({ products })\n\n if (!plainData.products || plainData.products.length <= 0) return []\n\n await this.mutation('delete_category_product', ['affected_rows'], {\n where: {\n type: 'category_product_bool_exp',\n required: true,\n value: { category_id: { _eq: categoryId } },\n },\n })\n\n await this.mutation('insert_category_product', ['affected_rows'], {\n objects: {\n type: '[category_product_insert_input!]',\n required: true,\n value: plainData.products.map((productId) => ({ category_id: categoryId, product_id: productId })),\n },\n })\n\n return plainData.products\n }\n\n private async updateMetadata(\n categoryId: number,\n { metadata }: Pick<UpdateRepositoryParams<CategoryHasuraGraphQL>, 'metadata'>,\n ): Promise<CategoryMetadata> {\n const plainData = this.paramsToPlain({ metadata })\n\n if (!plainData.metadata) return null\n\n await this.mutation('update_category_metadata_by_pk', ['category_id'], {\n pk_columns: {\n value: { category_id: categoryId },\n type: 'category_metadata_pk_columns_input',\n required: true,\n },\n _set: {\n value: omit(metadata, ['category_id']),\n type: 'category_metadata_set_input',\n required: true,\n },\n })\n\n return plainData.metadata\n }\n}\n","import {\n CreateRepositoryParams,\n FindRepositoryParams,\n GetRepositoryParams,\n NonFunctionPropertyNames,\n ProductMetadata,\n ProductRepository,\n ProductReview,\n RepositoryFindResult,\n ReviewStatusParams,\n ReviewWithProductData,\n ShopPrice,\n Shops,\n UpdateRepositoryParams,\n Where,\n} from '../../../../domain'\nimport { NotFoundError } from '../../../../errors'\nimport { Base, is, isNil, omit } from '../../../../utils'\nimport { HasuraGraphQLColumnType, HasuraGraphQLWhere } from '../../enums'\nimport { withCrudHasuraGraphQL, withHasuraGraphQL } from '../../mixins'\nimport { ProductHasuraGraphQL } from '../../models'\nimport { HasuraGraphQLAuthOptions, HasuraGraphQLFields } from '../../types'\n\ntype ProductReviewFields = {\n id?: string\n shop: Shops\n rate: number\n author?: string\n email?: string\n location?: string\n review?: string\n status?: boolean\n title?: string\n person_id?: number\n points?: number\n order_id?: string\n created_at?: Date\n updated_at?: Date\n}\n\nexport class ProductHasuraGraphQLRepository\n extends withCrudHasuraGraphQL(withHasuraGraphQL<ProductHasuraGraphQL>(Base))\n implements ProductRepository\n{\n private get reviewsFields(): any {\n return [\n 'id',\n 'shop',\n 'rate',\n 'author',\n 'email',\n 'location',\n 'review',\n 'status',\n 'title',\n { personId: { columnName: 'person_id' } },\n 'points',\n { orderId: { columnName: 'order_id' } },\n { createdAt: { columnName: 'created_at' } },\n { updatedAt: { columnName: 'updated_at' } },\n ]\n }\n\n constructor(endpoint: string, authOptions: HasuraGraphQLAuthOptions) {\n super({\n tableName: 'product',\n model: ProductHasuraGraphQL,\n endpoint,\n authOptions,\n fields: [],\n })\n\n const commonFields: HasuraGraphQLFields<ProductHasuraGraphQL> = [\n { id: { columnName: 'id', to: (value) => +value, from: (value) => value.toString() } },\n { firestoreId: { columnName: 'firestore_id' } },\n { productId: { columnName: 'main_product_id' } },\n { CEST: { columnName: 'cest' } },\n { EAN: { columnName: 'ean' } },\n { NCM: { columnName: 'ncm' } },\n 'brand',\n { costPrice: { columnName: 'cost_price' } },\n {\n description: {\n columnName: 'description',\n from: (description, data) => ({\n description,\n differentials: data.differentials,\n whoMustUse: data.who_must_use,\n howToUse: data.how_to_use,\n brand: data.brand_description,\n }),\n bindFindFilter: (sentence) => {\n const filters = Object.values(sentence).shift()\n\n return {\n ...(filters?.description && { description: filters.description }),\n ...(filters.differentials && { differentials: filters.differentials }),\n ...(filters.whoMustUse && {\n who_must_use: filters.whoMustUse,\n }),\n ...(filters.howToUse && {\n how_to_use: filters.howToUse,\n }),\n ...(filters.brand && {\n brand_description: filters.brand,\n }),\n }\n },\n bindPersistData: (descriptionData) => ({\n ...(descriptionData?.description && { description: descriptionData.description }),\n ...(descriptionData.differentials && { differentials: descriptionData.differentials }),\n ...(descriptionData.whoMustUse && {\n who_must_use: descriptionData.whoMustUse,\n }),\n ...(descriptionData.howToUse && { how_to_use: descriptionData.howToUse }),\n ...(descriptionData.brand && { brand_description: descriptionData.brand }),\n }),\n },\n },\n { differentials: { columnName: 'differentials' } },\n { whoMustUse: { columnName: 'who_must_use' } },\n { howToUse: { columnName: 'how_to_use' } },\n { brandDescription: { columnName: 'brand_description' } },\n { hasVariants: { columnName: 'has_variants' } },\n {\n images: {\n columnName: 'images',\n to: (value: string[]) => (value?.length > 0 ? `{\"${value?.join?.(`\",\"`) || ''}\"}` : `{}`),\n },\n },\n {\n miniatures: {\n columnName: 'miniatures',\n to: (value) => (value?.length > 0 ? `{\"${value?.join?.(`\",\"`) || ''}\"}` : `{}`),\n },\n },\n 'name',\n {\n price: {\n columnName: 'price',\n from: (price, data): ShopPrice => ({\n price,\n fullPrice: data.full_price,\n subscriberDiscountPercentage: data.subscriber_discount_percentage,\n subscriberPrice: data.subscriber_price,\n }),\n bindFindFilter: (sentence) => {\n const filters = Object.values(sentence).shift()\n\n return {\n ...((filters?.price || filters?.price === 0) && { price: filters.price }),\n ...((filters.fullPrice || filters.fullPrice === 0) && { full_price: filters.fullPrice }),\n ...((filters.subscriberDiscountPercentage || filters.subscriberDiscountPercentage === 0) && {\n subscriber_discount_percentage: filters.subscriberDiscountPercentage,\n }),\n ...((filters.subscriberPrice || filters.subscriberPrice === 0) && {\n subscriber_price: filters.subscriberPrice,\n }),\n }\n },\n bindPersistData: (priceData) => ({\n ...(priceData?.price >= 0 && { price: priceData.price }),\n ...(priceData.fullPrice >= 0 && { full_price: priceData.fullPrice }),\n ...(priceData.subscriberDiscountPercentage >= 0 && {\n subscriber_discount_percentage: priceData.subscriberDiscountPercentage,\n }),\n ...(priceData.subscriberPrice >= 0 && { subscriber_price: priceData.subscriberPrice }),\n }),\n },\n },\n { fullPrice: { columnName: 'full_price' } },\n { subscriberDiscountPercentage: { columnName: 'subscriber_discount_percentage' } },\n { subscriberPrice: { columnName: 'subscriber_price' } },\n 'published',\n 'sku',\n {\n stock: {\n columnName: 'stock',\n from: (quantity: number) => ({ quantity }),\n to: (value) => (isNil(value?.quantity) ? value : value?.quantity),\n },\n },\n 'slug',\n 'type',\n 'video',\n 'weight',\n 'gender',\n { tags: { columnName: 'tags', type: HasuraGraphQLColumnType.Jsonb } },\n { isKit: { columnName: 'is_kit' } },\n { createdAt: { columnName: 'created_at' } },\n { updatedAt: { columnName: 'updated_at' } },\n {\n rate: {\n columnName: 'reviews_aggregate',\n filters: {\n filters: { status: true },\n filterType: 'product_review_bool_exp',\n },\n fields: [{ aggregate: [{ avg: ['rate'] }] }],\n from: (value) => value.aggregate.avg.rate,\n },\n },\n { shoppingCount: { columnName: 'shopping_count' } },\n ]\n\n this.fields = [\n ...commonFields,\n {\n categories: {\n columnName: 'categories',\n fields: ['category_id'],\n bindPersistData: (value) => ({\n categories: { data: value.map((category) => ({ category_id: +category })) },\n }),\n to: (categories) => categories.map((categoryId) => +categoryId),\n from: (categories: { category_id: number }[]) =>\n categories?.map((category) => category?.category_id?.toString()) || [],\n },\n },\n {\n kitProducts: {\n columnName: 'kit_products',\n foreignKeyColumn: { productId: 'id' },\n fields: [\n { productId: { columnName: 'product_id' } },\n { kitProductId: { columnName: 'kit_product_id' } },\n 'quantity',\n { product: { columnName: 'product', foreignKeyColumn: { id: 'product_id' }, fields: commonFields } },\n ],\n },\n },\n {\n reviews: {\n columnName: 'reviews',\n foreignKeyColumn: { product_id: 'id' },\n fields: this.reviewsFields,\n },\n },\n {\n metadata: {\n columnName: 'metadata',\n fields: ['title', 'description'],\n bindPersistData: (value) => ({\n metadata: { data: value },\n }),\n },\n },\n ]\n }\n\n override async create(params: CreateRepositoryParams<ProductHasuraGraphQL>): Promise<ProductHasuraGraphQL> {\n const { metadata, ...data } = params\n const product = await super.create(\n omit({ ...data, metadata: metadata || { description: null, title: null } }, ['reviews']),\n )\n\n try {\n product.reviews = data.reviews && (await this.updateReviews(+product.id, data))\n } catch (error) {\n await this.delete({ id: product.id })\n\n throw error\n }\n\n return product\n }\n\n override async get(identifiers: GetRepositoryParams<ProductHasuraGraphQL>): Promise<ProductHasuraGraphQL> {\n const product = Number.isNaN(+identifiers.id)\n ? (await this.find({ filters: { firestoreId: identifiers.id } })).data?.[0]\n : await super.get(identifiers)\n\n if (product.productId) throw new NotFoundError('Product not found, it is a variant')\n\n product.reviews = product.reviews || (await this.findReviewsByProduct(+product.id))\n\n return product\n }\n\n override async find(\n params?: FindRepositoryParams<ProductHasuraGraphQL>,\n ): Promise<RepositoryFindResult<ProductHasuraGraphQL>> {\n const { filters, fields, ...options } = params || {}\n const bindFields =\n fields ||\n (this.fields\n .map((field) => (typeof field === 'string' ? field : Object.keys(field).shift()))\n .filter((field) => field !== 'reviews') as NonFunctionPropertyNames<\n ProductHasuraGraphQL,\n keyof ProductHasuraGraphQL\n >[])\n\n return super.find({\n ...options,\n filters: { ...filters, productId: { operator: Where.ISNULL } },\n fields: bindFields,\n })\n }\n\n async getBySlug(slug: string): Promise<ProductHasuraGraphQL> {\n const result = await this.find({\n filters: {\n slug,\n },\n })\n\n const product = result?.data?.shift()\n\n product.reviews = await this.findReviewsByProduct(+product.id)\n\n return product\n }\n\n override async update(params: UpdateRepositoryParams<ProductHasuraGraphQL>): Promise<ProductHasuraGraphQL> {\n const { categories, kitProducts, reviews, id: checkId, rate, metadata, ...data } = params\n const plainData = this.paramsToPlain({ id: checkId })\n const id = await this.getId(plainData.id)\n const product = await super.update({ id, ...data })\n\n product.categories = categories && (await this.updateCategories(+id, { categories }))\n product.kitProducts = kitProducts && (await this.updateKitProducts(+id, { kitProducts }))\n product.reviews = reviews && (await this.updateReviews(+id, { reviews }))\n product.metadata = metadata && (await this.updateMetadata(+id, { metadata }))\n\n return product\n }\n\n async fetchReviews(status: ReviewStatusParams): Promise<ReviewWithProductData[]> {\n const reviewsExpression = {\n status:\n status === 'pending'\n ? { [HasuraGraphQLWhere.ISNULL]: true }\n : { [HasuraGraphQLWhere.EQUALS]: status === 'approved' },\n }\n const { product: data } = await this.query(\n 'product',\n ['id', 'name', 'sku', { reviews: { columnName: 'reviews', fields: this.reviewsFields } }],\n {\n where: { value: { reviews: reviewsExpression }, type: 'product_bool_exp', required: true },\n },\n )\n\n return data.reduce(\n (reviews: ReviewWithProductData[], product: ProductHasuraGraphQL) => [\n ...reviews,\n ...product.reviews\n .filter(\n (review) =>\n (status === 'pending' && [undefined, null].includes(review.status)) ||\n (status === 'approved' && review.status === true) ||\n (status === 'rejected' && review.status === false),\n )\n .map((review) => ({\n ...this.bindReviewToModel(review),\n productId: product.id,\n productName: product.name,\n productSku: product.sku,\n })),\n ],\n [] as ReviewWithProductData[],\n )\n }\n\n private async updateCategories(\n productId: number,\n { categories }: Pick<UpdateRepositoryParams<ProductHasuraGraphQL>, 'categories'>,\n ): Promise<ProductHasuraGraphQL['categories']> {\n if ('action' in categories && categories.action === 'remove') {\n await this.mutation('delete_category_product', ['affected_rows'], {\n where: {\n type: 'category_product_bool_exp',\n required: true,\n value: { product_id: { _eq: productId } },\n },\n })\n\n return []\n }\n\n const plainData = this.paramsToPlain({ categories })\n\n if (!plainData.categories || plainData.categories.length <= 0) return []\n\n await this.mutation('delete_category_product', ['affected_rows'], {\n where: {\n type: 'category_product_bool_exp',\n required: true,\n value: { product_id: { _eq: productId } },\n },\n })\n\n await this.mutation('insert_category_product', ['affected_rows'], {\n objects: {\n type: '[category_product_insert_input!]',\n required: true,\n value: plainData.categories.map((categoryId) => ({ category_id: categoryId, product_id: productId })),\n },\n })\n\n return plainData.categories\n }\n\n private async updateKitProducts(\n productId: number,\n { kitProducts }: Pick<UpdateRepositoryParams<ProductHasuraGraphQL>, 'kitProducts'>,\n ): Promise<ProductHasuraGraphQL['kitProducts']> {\n const plainData = this.paramsToPlain({ kitProducts })\n\n await this.mutation('delete_product_kit', ['affected_rows'], {\n where: {\n type: 'product_kit_bool_exp',\n required: true,\n value: { kit_product_id: { _eq: productId } },\n },\n })\n\n await this.mutation('insert_product_kit', ['affected_rows'], {\n objects: {\n type: '[product_kit_insert_input!]',\n required: true,\n value: plainData.kitProducts.map((kitProduct) => ({\n kit_product_id: productId,\n product_id: kitProduct.productId || kitProduct.product.id,\n quantity: kitProduct.quantity,\n })),\n },\n })\n\n return plainData.kitProducts\n }\n\n private async updateReviews(\n productId: number,\n { reviews }: Pick<UpdateRepositoryParams<ProductHasuraGraphQL>, 'reviews'>,\n ): Promise<ProductReview[]> {\n if (!reviews) return []\n if ('action' in reviews && reviews.action === 'remove') {\n const reviewIds = await Promise.all(\n reviews.value.map(async (reviewData) => {\n const review = await this.findReview(reviewData, productId)\n\n return review?.id\n }),\n )\n\n await this.mutation('delete_product_review', ['affected_rows'], {\n where: { value: { id: { _in: reviewIds.filter(Boolean) } }, type: 'product_review_bool_exp', required: true },\n })\n\n return reviews.value.map((review, index) => !reviewIds[index] && review).filter(Boolean)\n }\n\n const plainData = this.paramsToPlain({ reviews })\n\n if (!plainData.reviews || plainData.reviews.length <= 0) return []\n\n return Promise.all(\n plainData.reviews.map(async (reviewData) => {\n const review = await this.findReview(reviewData, productId)\n\n if (review.id)\n return this.bindReviewToModel(\n (\n await this.mutation('update_product_review_by_pk', this.reviewsFields, {\n pk_columns: {\n value: { id: review.id },\n type: 'product_review_pk_columns_input',\n required: true,\n },\n _set: {\n value: omit(this.bindReviewToHasura(reviewData), ['id', 'product_id']),\n type: 'product_review_set_input',\n required: true,\n },\n })\n ).update_product_review_by_pk,\n )\n\n return this.bindReviewToModel(\n (\n await this.mutation('insert_product_review_one', this.reviewsFields, {\n object: {\n value: omit({ ...this.bindReviewToHasura(reviewData), product_id: productId }, ['id']),\n type: 'product_review_insert_input',\n required: true,\n },\n })\n ).insert_product_review_one,\n )\n }),\n )\n }\n\n private async updateMetadata(\n productId: number,\n { metadata }: Pick<UpdateRepositoryParams<ProductHasuraGraphQL>, 'metadata'>,\n ): Promise<ProductMetadata> {\n const plainData = this.paramsToPlain({ metadata })\n\n if (!plainData.metadata) return null\n\n await this.mutation('update_product_metadata_by_pk', ['product_id'], {\n pk_columns: {\n value: { product_id: productId },\n type: 'product_metadata_pk_columns_input',\n required: true,\n },\n _set: {\n value: omit(metadata, ['product_id']),\n type: 'product_metadata_set_input',\n required: true,\n },\n })\n\n return plainData.metadata\n }\n\n private async getId(id: string): Promise<string> {\n if (!Number.isNaN(+id)) return id\n\n const { data } = await this.find({ filters: { firestoreId: id } })\n\n if (data?.[0]?.id) return data?.[0]?.id\n\n throw new NotFoundError(`Product with id ${id} not found`)\n }\n\n private async findReviewsByProduct(productId: number): Promise<ProductReview[]> {\n const { product_review: data } = await this.query('product_review', this.reviewsFields, {\n where: {\n value: {\n product_id: { _eq: productId },\n },\n type: 'product_review_bool_exp',\n required: true,\n },\n })\n\n return data && data.map((review: Record<string, any>) => this.bindReviewToModel(review))\n }\n\n private async findReview(review: ProductReview, productId: number): Promise<ProductReview> {\n if (review.id) return review\n\n let loadedReview: ProductReview\n\n if (review.personId) loadedReview = await this.getReviewByPersonId(review.personId, productId, review.orderId)\n if (!loadedReview && review.author && review.email)\n loadedReview = await this.getReviewByAuthorAndEmail(review.author, review.email, productId, review.orderId)\n\n return loadedReview || review\n }\n\n private async getReviewByPersonId(personId: number, productId: number, orderId?: string): Promise<ProductReview> {\n const { product_review: data } = await this.query('product_review', this.reviewsFields, {\n where: {\n value: {\n product_id: { _eq: productId },\n person_id: { _eq: personId },\n ...(orderId && { order_id: { _eq: orderId } }),\n },\n type: `product_review_bool_exp`,\n required: true,\n },\n })\n\n return data && data[0] && this.bindReviewToModel(data[0])\n }\n\n private async getReviewByAuthorAndEmail(\n author: string,\n email: string,\n productId: number,\n orderId?: string,\n ): Promise<ProductReview> {\n const { product_review: data } = await this.query('product_review', this.reviewsFields, {\n where: {\n value: {\n product_id: { _eq: productId },\n author: { _eq: author },\n email: { _eq: email },\n ...(orderId && { order_id: { _eq: orderId } }),\n },\n type: `product_review_bool_exp`,\n required: true,\n },\n })\n\n return data && data[0] && this.bindReviewToModel(data[0])\n }\n\n private bindReviewToModel = (plain: Record<string, any>): ProductReview => ({\n ...is<ProductReview>(omit(plain, ['product_id', 'created_at', 'updated_at', 'person_id', 'order_id'])),\n createdAt: typeof plain.created_at === 'string' ? new Date(plain.created_at) : plain.created_at,\n updatedAt: typeof plain.updated_at === 'string' ? new Date(plain.updated_at) : plain.updated_at,\n personId: plain.person_id,\n orderId: plain.order_id,\n })\n\n private bindReviewToHasura = (review: ProductReview): ProductReviewFields => ({\n ...is<ProductReviewFields>(omit(review, ['productId', 'createdAt', 'updatedAt', 'personId', 'orderId'])),\n person_id: review.personId,\n order_id: review.orderId,\n })\n}\n","import {\n FindRepositoryParams,\n GetRepositoryParams,\n RepositoryFindResult,\n ShopPrice,\n UpdateRepositoryParams,\n VariantRepository,\n Where,\n} from '../../../../domain'\nimport { NotFoundError } from '../../../../errors'\nimport { Base, isNil } from '../../../../utils'\nimport { HasuraGraphQLColumnType } from '../../enums'\nimport { withCrudHasuraGraphQL, withHasuraGraphQL } from '../../mixins'\nimport { VariantHasuraGraphQL } from '../../models'\nimport { HasuraGraphQLAuthOptions } from '../../types'\n\nexport class VariantHasuraGraphQLRepository\n extends withCrudHasuraGraphQL(withHasuraGraphQL<VariantHasuraGraphQL>(Base))\n implements VariantRepository\n{\n constructor(endpoint: string, authOptions: HasuraGraphQLAuthOptions) {\n super({\n tableName: 'product',\n model: VariantHasuraGraphQL,\n endpoint,\n authOptions,\n fields: [\n { id: { columnName: 'id', to: (value: string) => +value, from: (value: number) => value.toString() } },\n { firestoreId: { columnName: 'firestore_id' } },\n {\n productId: {\n columnName: 'main_product_id',\n to: (value: string) => +value,\n from: (value: number) => value?.toString(),\n },\n },\n { EAN: { columnName: 'ean' } },\n { costPrice: { columnName: 'cost_price' } },\n {\n price: {\n columnName: 'price',\n from: (price: number, data: Record<string, any>): ShopPrice => ({\n price,\n fullPrice: data.full_price,\n subscriberDiscountPercentage: data.subscriber_discount_percentage,\n subscriberPrice: data.subscriber_price,\n }),\n bindFindFilter: (sentence) => {\n const filters = Object.values(sentence).shift()\n\n return {\n ...((filters?.price || filters?.price === 0) && { price: filters.price }),\n ...((filters.fullPrice || filters.fullPrice === 0) && { full_price: filters.fullPrice }),\n ...((filters.subscriberDiscountPercentage || filters.subscriberDiscountPercentage === 0) && {\n subscriber_discount_percentage: filters.subscriberDiscountPercentage,\n }),\n ...((filters.subscriberPrice || filters.subscriberPrice === 0) && {\n subscriber_price: filters.subscriberPrice,\n }),\n }\n },\n bindPersistData: (priceData: VariantHasuraGraphQL['price']) => ({\n ...(priceData?.price >= 0 && { price: priceData.price }),\n ...(priceData.fullPrice >= 0 && { full_price: priceData.fullPrice }),\n ...(priceData.subscriberDiscountPercentage >= 0 && {\n subscriber_discount_percentage: priceData.subscriberDiscountPercentage,\n }),\n ...(priceData.subscriberPrice >= 0 && { subscriber_price: priceData.subscriberPrice }),\n }),\n },\n },\n { fullPrice: { columnName: 'full_price' } },\n { subscriberDiscountPercentage: { columnName: 'subscriber_discount_percentage' } },\n { subscriberPrice: { columnName: 'subscriber_price' } },\n 'sku',\n {\n stock: {\n columnName: 'stock',\n from: (quantity: number) => ({ quantity }),\n to: (value: VariantHasuraGraphQL['stock']) => (isNil(value?.quantity) ? value : value?.quantity),\n },\n },\n 'weight',\n { name: { to: () => '', from: (): undefined => undefined } },\n { hasVariants: { columnName: 'has_variants', to: () => false, from: (): undefined => undefined } },\n { createdAt: { columnName: 'created_at' } },\n { updatedAt: { columnName: 'updated_at' } },\n {\n grade: {\n columnName: 'grade',\n type: HasuraGraphQLColumnType.Jsonb,\n },\n },\n ],\n })\n }\n\n override async get(identifiers: GetRepositoryParams<VariantHasuraGraphQL>): Promise<VariantHasuraGraphQL> {\n const variant = Number.isNaN(+identifiers.id)\n ? (await this.find({ filters: { firestoreId: identifiers.id } })).data?.[0]\n : await super.get(identifiers)\n\n if (!variant.productId) throw new NotFoundError(`Variant not found, it is a product`)\n\n return variant\n }\n\n override async find(\n params?: FindRepositoryParams<VariantHasuraGraphQL>,\n ): Promise<RepositoryFindResult<VariantHasuraGraphQL>> {\n const { filters, ...options } = params || {}\n\n return super.find({ ...options, filters: { productId: { operator: Where.ISNOTNULL }, ...filters } })\n }\n\n override async update(params: UpdateRepositoryParams<VariantHasuraGraphQL>): Promise<VariantHasuraGraphQL> {\n const { productId, id: checkId, ...data } = params\n const dataWithProductId = this.paramsToPlain({ id: checkId, productId })\n const id = await this.getId(dataWithProductId.id)\n const product = await super.update({ id, ...data })\n\n product.productId = dataWithProductId.productId\n\n return product\n }\n\n private async getId(id: string): Promise<string> {\n if (!Number.isNaN(+id)) return id\n\n const { data } = await this.find({ filters: { firestoreId: id } })\n\n if (data?.[0]?.id) return data?.[0]?.id\n\n throw new NotFoundError(`Product with id ${id} not found`)\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getLodash","Answers.AccessoryImportances","Answers.BeardProblems","Answers.BeardSizes","Answers.BeautyProductImportances","Answers.BodyProblems","Answers.BodyShapes","Answers.BodyTattoos","Answers.FaceSkinOilinesses","Answers.FaceSkinProblems","Answers.FaceSkinTones","Answers.FamilyIncomes","Answers.FragranceImportances","Answers.HairColors","Answers.HairProblems","Answers.HairStrands","Answers.HairTypes","Answers.ProductSpents","query","isNaN"],"mappings":";;;;;;;;;;;;;;MAWa,SAAS,CAAA;AACpB,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,MAAM,GAAI,IAAI,CAAC,WAAuC,CAAC,iBAAiB,CAAC,MAAM,CACnF,CAAC,KAAK,KAAK,KAAK,KAAK,YAAY,CAClC,CAAA;AAED,QAAA,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAA+B,CAAC,EAAE,CAAC,EAClF,EAA+C,CAChD,CAAA;KACF;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAQ,IAAI,CAAC,WAAoD,CAAC,iBAAiB,CAAA;KACpF;AAED,IAAA,WAAA,CAAY,IAAqB,EAAA;AAC/B,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KAC1B;IAED,OAAO,UAAU,CAAkD,IAAwC,EAAA;QACzG,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;KACzC;IAED,OAAO,OAAO,CAAkD,KAAU,EAAA;QACxE,OAAO,KAAK,YAAY,IAAI,CAAA;KAC7B;IAED,OAAO,GAAA;AACL,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAA;KAC7B;AACF;;IC1CW,MAaX;AAbD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,IAAa,CAAA;AACb,IAAA,KAAA,CAAA,WAAA,CAAA,GAAA,IAAgB,CAAA;AAChB,IAAA,KAAA,CAAA,IAAA,CAAA,GAAA,GAAQ,CAAA;AACR,IAAA,KAAA,CAAA,KAAA,CAAA,GAAA,IAAU,CAAA;AACV,IAAA,KAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,KAAA,CAAA,OAAA,CAAA,GAAA,QAAgB,CAAA;AAChB,IAAA,KAAA,CAAA,IAAA,CAAA,GAAA,GAAQ,CAAA;AACR,IAAA,KAAA,CAAA,KAAA,CAAA,GAAA,IAAU,CAAA;AACV,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,KAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACpB,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,KAAA,CAAA,WAAA,CAAA,GAAA,aAAyB,CAAA;AAC3B,CAAC,EAbW,KAAK,KAAL,KAAK,GAahB,EAAA,CAAA,CAAA;;ICbW,oBAMX;AAND,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EANW,mBAAmB,KAAnB,mBAAmB,GAM9B,EAAA,CAAA,CAAA;;ICNW,qBAIX;AAJD,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,gBAAA,CAAA,GAAA,0BAAsC,CAAA;AACtC,IAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,uBAAyC,CAAA;AACzC,IAAA,oBAAA,CAAA,4BAAA,CAAA,GAAA,mEAA2F,CAAA;AAC7F,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,GAI/B,EAAA,CAAA,CAAA;;ICJW,KAUX;AAVD,CAAA,UAAY,IAAI,EAAA;AACd,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,OAAY,CAAA;AACZ,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,kBAA8B,CAAA;AAC9B,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,YAAmB,CAAA;AACnB,IAAA,IAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,IAAA,CAAA,YAAA,CAAA,GAAA,qBAAkC,CAAA;AAClC,IAAA,IAAA,CAAA,OAAA,CAAA,GAAA,WAAmB,CAAA;AACnB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACX,CAAC,EAVW,IAAI,KAAJ,IAAI,GAUf,EAAA,CAAA,CAAA;;ICVW,cAQX;AARD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC7B,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,YAAkB,CAAA;AAClB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,eAAsB,CAAA;AACtB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,iBAA4B,CAAA;AAC5B,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,uBAAkC,CAAA;AAClC,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,iBAA0B,CAAA;AAC1B,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,YAA2B,CAAA;AAC7B,CAAC,EARW,aAAa,KAAb,aAAa,GAQxB,EAAA,CAAA,CAAA;;ICRW,WAMX;AAND,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,QAAc,CAAA;AACd,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,YAAgB,CAAA;AAChB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,QAAmB,CAAA;AACnB,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,WAAqB,CAAA;AACvB,CAAC,EANW,UAAU,KAAV,UAAU,GAMrB,EAAA,CAAA,CAAA;;ICNW,yBAKX;AALD,CAAA,UAAY,wBAAwB,EAAA;AAClC,IAAA,wBAAA,CAAA,mBAAA,CAAA,GAAA,oEAAmF,CAAA;AACnF,IAAA,wBAAA,CAAA,oCAAA,CAAA,GAAA,+FAA0H,CAAA;AAC1H,IAAA,wBAAA,CAAA,kBAAA,CAAA,GAAA,gIAA8I,CAAA;AAC9I,IAAA,wBAAA,CAAA,sBAAA,CAAA,GAAA,oCAA2D,CAAA;AAC7D,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,GAKnC,EAAA,CAAA,CAAA;;ICLW,aAUX;AAVD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,4BAA+B,CAAA;AAC/B,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,UAAuB,CAAA;AACvB,IAAA,YAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC,CAAA;AACpC,IAAA,YAAA,CAAA,eAAA,CAAA,GAAA,SAAyB,CAAA;AACzB,IAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,oBAAgC,CAAA;AAChC,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACtB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,aAAyB,CAAA;AACzB,IAAA,YAAA,CAAA,eAAA,CAAA,GAAA,iBAAiC,CAAA;AACjC,IAAA,YAAA,CAAA,qBAAA,CAAA,GAAA,yBAA0C,CAAA;AAC5C,CAAC,EAVW,YAAY,KAAZ,YAAY,GAUvB,EAAA,CAAA,CAAA;;ICVW,WAMX;AAND,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,OAAc,CAAA;AACd,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,eAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,eAAqB,CAAA;AACrB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACxB,CAAC,EANW,UAAU,KAAV,UAAU,GAMrB,EAAA,CAAA,CAAA;;ICNW,YAIX;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,SAAgB,CAAA;AAChB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,0BAAuC,CAAA;AACvC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,wBAAuC,CAAA;AACzC,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA;;ICJW,mBAMX;AAND,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY,CAAA;AACZ,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,SAAgB,CAAA;AAChB,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,4BAAmC,CAAA;AACrC,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,GAM7B,EAAA,CAAA,CAAA;;ICNW,iBASX;AATD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC7B,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,UAAyB,CAAA;AACzB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,OAAkB,CAAA;AAClB,IAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,mBAAwC,CAAA;AACxC,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,QAAmB,CAAA;AACnB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,eAAsB,CAAA;AACtB,IAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,oBAAgC,CAAA;AAClC,CAAC,EATW,gBAAgB,KAAhB,gBAAgB,GAS3B,EAAA,CAAA,CAAA;;ICTW,cAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,aAA0B,CAAA;AAC1B,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,kBAA4B,CAAA;AAC5B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,mBAA4B,CAAA;AAC5B,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,QAAe,CAAA;AACf,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,cAA0B,CAAA;AAC5B,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;ICPW,cAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,kBAA0B,CAAA;AAC1B,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,sBAA2C,CAAA;AAC3C,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,uBAA6C,CAAA;AAC7C,IAAA,aAAA,CAAA,sBAAA,CAAA,GAAA,wBAA+C,CAAA;AAC/C,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,kBAAoC,CAAA;AACpC,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,uBAAoC,CAAA;AACtC,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;ICPW,qBAIX;AAJD,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,gBAAA,CAAA,GAAA,0BAAsC,CAAA;AACtC,IAAA,oBAAA,CAAA,sBAAA,CAAA,GAAA,6CAAoE,CAAA;AACpE,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,mDAA8D,CAAA;AAChE,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,GAI/B,EAAA,CAAA,CAAA;;ICJW,WASX;AATD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,iBAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,gBAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,cAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,iBAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,OAAiB,CAAA;AACjB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,WAAmB,CAAA;AACrB,CAAC,EATW,UAAU,KAAV,UAAU,GASrB,EAAA,CAAA,CAAA;;ICTW,aASX;AATD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC7B,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,OAAkB,CAAA;AAClB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,OAAc,CAAA;AACd,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,YAAmB,CAAA;AACnB,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,cAAwB,CAAA;AACxB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,SAAoB,CAAA;AACpB,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,iBAA8B,CAAA;AAC9B,IAAA,YAAA,CAAA,aAAA,CAAA,GAAA,eAA6B,CAAA;AAC/B,CAAC,EATW,YAAY,KAAZ,YAAY,GASvB,EAAA,CAAA,CAAA;;ICTW,YAOX;AAPD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,YAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,UAAgB,CAAA;AAChB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,YAAmB,CAAA;AACnB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,WAAmB,CAAA;AACnB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,UAAiB,CAAA;AACjB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,YAAoB,CAAA;AACtB,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA;;ICPW,UAMX;AAND,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,MAAe,CAAA;AACf,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,UAAiB,CAAA;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,UAAkB,CAAA;AAClB,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,YAAmB,CAAA;AACrB,CAAC,EANW,SAAS,KAAT,SAAS,GAMpB,EAAA,CAAA,CAAA;;ICNW,eAKX;AALD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,iBAA0B,CAAA;AAC1B,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACpB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,SAAoB,CAAA;AACtB,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA;;ICLW,cAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,eAAqB,CAAA;AACrB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACnC,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,uBAAoC,CAAA;AACtC,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;ICPW,SAOX;AAPD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,sBAA4B,CAAA;AAC5B,IAAA,QAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,QAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,SAAe,CAAA;AACf,IAAA,QAAA,CAAA,cAAA,CAAA,GAAA,kBAA4B,CAAA;AAC5B,IAAA,QAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AAC3B,CAAC,EAPW,QAAQ,KAAR,QAAQ,GAOnB,EAAA,CAAA,CAAA;;ICPW,cAEX;AAFD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,MAAc,CAAA;AAChB,CAAC,EAFW,aAAa,KAAb,aAAa,GAExB,EAAA,CAAA,CAAA;;ICFW,cAGX;AAHD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,+BAA0C,CAAA;AAC1C,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,KAAb,aAAa,GAGxB,EAAA,CAAA,CAAA;;ICHW,YAIX;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,qBAAwB,CAAA;AACxB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,qBAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,sCAAsC,CAAA;AACxC,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA;;ICJW,OAGX;AAHD,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,MAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACzB,CAAC,EAHW,MAAM,KAAN,MAAM,GAGjB,EAAA,CAAA,CAAA;;ACGK,MAAO,OAAQ,SAAQ,SAAsC,CAAA;AAYjE,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;KAChC;AACF;;ACfK,MAAO,OAAQ,SAAQ,SAAkB,CAAA;AAyG7C,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AApFC,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC5B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACzB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACvB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,uBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC9B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;AACb,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACf,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC5B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;;AACjB,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC1B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACb,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACvB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACf,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACd,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjB,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;;AACf,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA;;ACpGrB,MAAO,mBAAoB,SAAQ,SAA8D,CAAA;AAUrG,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;KAChC;AACF,CAAA;AANC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACX,OAAO,CAAA;AAAA,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACbZ,MAAgB,OAAyC,SAAQ,SAA+B,CAAA;AAmBpG,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;MCxBY,GAAG,GAAG,CAAC,MAAW,EAAE,IAAY,EAAE,YAAkB,KAAKA,KAAS,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY;;ACFpG,SAAU,EAAE,CAAI,KAAU,EAAA;AAC9B,IAAA,OAAO,KAAK,CAAA;AACd;;MCAa,MAAM,GAAG,CAAC,KAAa,KAClC,QAAQ,CAAC,KAAK,CAAC,IAAI,iFAAiF,CAAC,IAAI,CAAC,KAAK;;MCHpG,IAAI,CAAA;AACf,IAAA,WAAA,CAAY,GAAG,IAAgB,EAAA;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;KAC7B;AACF;;ACDY,MAAA,aAAa,GAAG,CAAC,KAAa,KAAmB;AAC5D,IAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAA;AAClC,IAAA,IACE,CAAC,kDAAkD,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/D,QAAA,CAAC,mEAAmE,CAAC,IAAI,CAAC,KAAK,CAAC;AAEhF,QAAA,OAAO,KAAK,CAAA;AAEd,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;AAE5B,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAAE,QAAA,OAAO,KAAK,CAAA;AAEvC,IAAA,OAAO,IAAI,CAAA;AACb;;IChBY,cAIX;AAJD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAChB,IAAA,aAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACT,CAAC,EAJW,aAAa,KAAb,aAAa,GAIxB,EAAA,CAAA,CAAA;;ICJW,YAOX;AAPD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,WAAA,CAAA,WAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;;;;;AAKhB,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA;;ICPW,eAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,cAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,cAAA,CAAA,cAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AAChB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;ICHW,cAOX;AAPD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB,IAAA,aAAA,CAAA,aAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB,IAAA,aAAA,CAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAqB,CAAA;AACrB,IAAA,aAAA,CAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAuB,CAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB,CAAA;AACpB,CAAC,EAPW,aAAa,KAAb,aAAa,GAOxB,EAAA,CAAA,CAAA;;ACGD,MAAM,iBAAiB,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;AAE7C,MAAO,MAAO,SAAQ,SAAiB,CAAA;AA4B3C,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;KACpC;AAED,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;IAED,OAAO,YAAY,CAAC,MAAc,EAAA;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC;AACrB,YAAA,QAAQ,EAAE,CAAG,EAAA,IAAI,CAAC,GAAG,EAAE,CAAE,CAAA;YACzB,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,YAAY,EAAE,aAAa,CAAC,SAAS;AACrC,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,eAAe,EAAE,IAAI;YACrB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC;AACpD,SAAA,CAAC,CAAA;KACH;AACF,CAAA;AA5BC,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AACP,CAAA,EAAA,MAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAE3B,UAAA,CAAA;AAAC,IAAA,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;AACN,CAAA,EAAA,MAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA;;ACpC3B,MAAO,gBAAiB,SAAQ,SAA2B,CAAA;AAQ/D,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;ACPK,MAAO,aAAc,SAAQ,SAAkD,CAAA;IAM1E,OAAO,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAE7B,OAAO,KAAK,CAAC,EAAE,CAAA;AAEf,QAAA,OAAO,KAAK,CAAA;KACb;AAED,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;KACxB;AACF;;ACdK,MAAO,IAAK,SAAQ,SAAe,CAAA;IAuBvC,OAAgB,UAAU,CAExB,IAA2C,EAAA;QAE3C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAS,CAAA;AAE/C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACxB,YAAA,QAAQ,CAAC,WAAW,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,EAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,CAAE,CAAA,GAAG,EAAE,CAAA,CAAE,CAAA;AAE/F,QAAA,OAAO,QAAe,CAAA;KACvB;IAEQ,OAAO,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAE7B,OAAO,KAAK,CAAC,aAAa,CAAA;AAE1B,QAAA,OAAO,KAAK,CAAA;KACb;AAED,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AA1BC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,aAAa,CAAC;8BACV,aAAa,CAAA;AAAA,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA;;AClBzB,MAAO,YAAa,SAAQ,SAAuB,CAAA;AA2BvD,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AAlBC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC;8BACX,IAAI,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACV,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,gBAAgB,CAAC;8BACX,gBAAgB,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,MAAM,CAAC;8BACV,MAAM,CAAA;AAAA,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACf,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;;AACD,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,mBAAmB,CAAC;;AACD,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACjC3B,MAAO,WAAY,SAAQ,OAA+B,CAAA;AAI9D,IAAA,WAAoB,iBAAiB,GAAA;AACnC,QAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;KACxB;AACF;;ACPK,MAAO,iBAAkB,SAAQ,SAAoD,CAAA;AAWzF,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;KACxB;AACF;;AChBK,MAAO,IAAK,SAAQ,SAAe,CAAA;AAKvC,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;ACRK,MAAO,iBAAkB,SAAQ,WAAW,CAAA;AAChD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;ICAW,cAGX;AAHD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAHW,aAAa,KAAb,aAAa,GAGxB,EAAA,CAAA,CAAA,CAAA;MASY,cAAc,CAAA;IACzB,WAA6B,CAAA,WAAkC,EAAmB,cAA8B,EAAA;QAAnF,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;QAAmB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KAAI;IAEpH,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAgB,EAAE,YAA0B,EAAA;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;AACpD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAS,CAAC,CAAA;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAE9C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI,CAAA;AAC7B,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;AAEzF,QAAA,MAAM,IAAI,iBAAiB,CAAC,qBAAqB,CAAC,CAAA;KACnD;AAEO,IAAA,kBAAkB,CACxB,YAA0B,EAAA;AAE1B,QAAA,OAAO,YAAY,KAAK,aAAa,CAAC,cAAc,GAAG,4BAA4B,GAAG,kBAAkB,CAAA;KACzG;IAEO,MAAM,uBAAuB,CAAC,IAAmB,EAAA;AACvD,QAAA,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AAC7B,YAAA,GAAG,IAAI;AACP,YAAA,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpB,SAAS;YACT,QAAQ;AACR,YAAA,iBAAiB,EAAE,KAAK;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,cAAc,EAAE,cAAc,CAAC,MAAM;YACrC,IAAI,EAAE,QAAQ,CAAC,YAAY;AAC5B,SAAA,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAC1C;AACF;;ACpDK,MAAO,0BAA2B,SAAQ,WAAW,CAAA;AACzD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;ACJK,MAAO,iBAAkB,SAAQ,WAAW,CAAA;IAChD,WAAY,CAAA,OAAO,GAAG,eAAe,EAAA;QACnC,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;MCCY,QAAQ,CAAA;IACnB,WAA6B,CAAA,eAAgC,EAAmB,cAA8B,EAAA;QAAjF,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAAmB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KAAI;IAElH,MAAM,QAAQ,CAAC,MAAsB,EAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAC9C,MAAM,WAAW,GAAG,CAAA,EAAG,MAAM,CAAC,SAAS,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,CAAA,CAAE,CAAA;AAE5D,QAAA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;YACnE,MAAM,IAAI,0BAA0B,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAC,GAAG,CAAiB,eAAA,CAAA,CAAC,CAAA;AACtF,QAAA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;YACvE,MAAM,IAAI,0BAA0B,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAC,KAAK,CAAiB,eAAA,CAAA,CAAC,CAAA;QAE3F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC/C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK;YACL,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,WAAW;YACX,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC1B,SAAA,CAAC,CAAA;QAEF,OAAO,MAAM,CAAC,QAAQ,CAAA;QAEtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC5C,YAAA,GAAG,MAAM;YACT,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK;YACL,WAAW;YACX,IAAI,EAAE,QAAQ,CAAC,GAAG;YAClB,WAAW,EAAE,IAAI,IAAI,EAAE;YACvB,YAAY,EAAE,IAAI,IAAI,EAAE;AACzB,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAA;KACZ;AACF;;MC1CY,OAAO,CAAA;AAClB,IAAA,WAAA,CAA6B,WAAkC,EAAA;QAAlC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;KAAI;AAEnE,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;KACjC;AACF;;MCNY,gBAAgB,CAAA;AAC3B,IAAA,WAAA,CAA6B,WAAkC,EAAA;QAAlC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;KAAI;IAEnE,MAAM,SAAS,CAAC,KAAa,EAAA;QAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAA;KACrD;AACF;;ACHK,MAAO,QAAS,SAAQ,SAAmB,CAAA;IAmB/C,gBAAgB,GAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AAED,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;IC/BW,kBAIX;AAJD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;;ICJW,MAKX;AALD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,KAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,KAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,KAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EALW,KAAK,KAAL,KAAK,GAKhB,EAAA,CAAA,CAAA;;ACEK,MAAO,OAAQ,SAAQ,SAAkB,CAAA;IAmC7C,gBAAgB,GAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AAED,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AAVC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,UAAU,CAAC;;AACG,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA;;AChCtB,MAAO,UAAW,SAAQ,SAA4C,CAAA;AAW1E,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;KACpC;AACF,CAAA;AATC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACf,OAAO,CAAA;AAAA,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEZ,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACX,OAAO,CAAA;AAAA,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACXZ,MAAO,OAAQ,SAAQ,SAA6C,CAAA;IAaxE,gBAAgB,GAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AAED,IAAA,WAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;KAC3B;AACF;;IC1BW,YASX;AATD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C,CAAA;AAC7C,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,mBAAgC,CAAA;AAChC,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,qBAAkC,CAAA;AAClC,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,4BAA+C,CAAA;AAC/C,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC7B,CAAC,EATW,WAAW,KAAX,WAAW,GAStB,EAAA,CAAA,CAAA;;ACPK,MAAO,QAAS,SAAQ,OAAO,CAAA;AAMpC;;ACNK,MAAO,cAAe,SAAQ,SAAyB,CAAA;AAc3D,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;ACRK,MAAO,QAAS,SAAQ,SAAmB,CAAA;AA0B/C,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AAhBC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,QAAQ,CAAC;;AACC,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC;8BACV,IAAI,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACX,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACF,OAAO,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACzB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,cAAc,CAAC;8BAChB,cAAc,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACzB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,MAAM,CAAC;8BACV,MAAM,CAAA;AAAA,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA;;AC7BX,MAAO,KAAM,SAAQ,QAAQ,CAAA;AAOlC,CAAA;AAFC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACX,OAAO,CAAA;AAAA,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACHZ,MAAO,oBAAqB,SAAQ,SAA+B,CAAA;AAoBvE,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AAZC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,OAAO,CAAC;8BACH,OAAO,CAAA;AAAA,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,gBAAgB,CAAC;8BACX,gBAAgB,CAAA;AAAA,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,MAAM,CAAC;8BACV,MAAM,CAAA;AAAA,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA;;ACtBX,MAAO,OAAQ,SAAQ,SAAkB,CAAA;AAe7C,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF,CAAA;AANC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,QAAQ,CAAC;;AACC,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA;;IClBZ,WAkBX;AAlBD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,qBAA4C,CAAA;AAC5C,IAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC,CAAA;AAChC,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,WAAwB,CAAA;AACxB,IAAA,UAAA,CAAA,2BAAA,CAAA,GAAA,yBAAqD,CAAA;AACrD,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,WAAwB,CAAA;AACxB,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,kBAAuC,CAAA;AACvC,IAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,kBAAuC,CAAA;AACvC,IAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,cAA+B,CAAA;AAC/B,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,qBAA4C,CAAA;AAC5C,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,WAAwB,CAAA;AACxB,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,UAAsB,CAAA;AACtB,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAChC,CAAC,EAlBW,UAAU,KAAV,UAAU,GAkBrB,EAAA,CAAA,CAAA;;IClBW,iBAkBX;AAlBD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,sBAAA,CAAA,GAAA,qDAAkE,CAAA;AAClE,IAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,yCAAqD,CAAA;AACrD,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,2DAAmE,CAAA;AACnE,IAAA,gBAAA,CAAA,2BAAA,CAAA,GAAA,2FAA6G,CAAA;AAC7G,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,6EAA8E,CAAA;AAC9E,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,2BAAwC,CAAA;AACxC,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,gCAA0C,CAAA;AAC1C,IAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,4DAA4E,CAAA;AAC5E,IAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,0CAA+D,CAAA;AAC/D,IAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,uBAAwC,CAAA;AACxC,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,sGAAiH,CAAA;AACjH,IAAA,gBAAA,CAAA,sBAAA,CAAA,GAAA,oDAAsE,CAAA;AACtE,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,6CAAqD,CAAA;AACrD,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,qEAAgF,CAAA;AAChF,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,0BAAoC,CAAA;AACpC,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,2BAAkC,CAAA;AAClC,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,oFAA+F,CAAA;AACjG,CAAC,EAlBW,gBAAgB,KAAhB,gBAAgB,GAkB3B,EAAA,CAAA,CAAA;;MCXY,qBAAqB,CAAA;IAChC,OAAO,UAAU,CAAC,MAAkB,EAAA;AAClC,QAAA,QAAQ,MAAM;YACZ,KAAK,UAAU,CAAC,oBAAoB;gBAClC,OAAOC,oBAA4B,CAAA;YACrC,KAAK,UAAU,CAAC,cAAc;gBAC5B,OAAOC,aAAqB,CAAA;YAC9B,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAOC,UAAkB,CAAA;YAC3B,KAAK,UAAU,CAAC,yBAAyB;gBACvC,OAAOC,wBAAgC,CAAA;YACzC,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAOC,YAAoB,CAAA;YAC7B,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAOC,UAAkB,CAAA;YAC3B,KAAK,UAAU,CAAC,YAAY;gBAC1B,OAAOC,WAAmB,CAAA;YAC5B,KAAK,UAAU,CAAC,kBAAkB;gBAChC,OAAOC,kBAA0B,CAAA;YACnC,KAAK,UAAU,CAAC,kBAAkB;gBAChC,OAAOC,gBAAwB,CAAA;YACjC,KAAK,UAAU,CAAC,cAAc;gBAC5B,OAAOC,aAAqB,CAAA;YAC9B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAOC,aAAqB,CAAA;YAC9B,KAAK,UAAU,CAAC,oBAAoB;gBAClC,OAAOC,oBAA4B,CAAA;YACrC,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAOC,UAAkB,CAAA;YAC3B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAOC,YAAoB,CAAA;YAC7B,KAAK,UAAU,CAAC,YAAY;gBAC1B,OAAOC,WAAmB,CAAA;YAC5B,KAAK,UAAU,CAAC,SAAS;gBACvB,OAAOC,SAAiB,CAAA;YAC1B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAOC,aAAqB,CAAA;AAC/B,SAAA;KACF;IAED,OAAO,YAAY,CAAC,MAAkB,EAAA;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAA4B,CAAA;AAE/G,QAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAA;KACnC;AACF;;ACjDK,MAAO,IAAK,SAAQ,SAAe,CAAA;AAevC,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;AClBK,MAAO,QAAS,SAAQ,SAAmB,CAAA;AAI/C,IAAA,WAAW,iBAAiB,GAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;KACd;AACF;;ACRK,MAAO,oBAAqB,SAAQ,WAAW,CAAA;AACnD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;ACJK,MAAO,qBAAsB,SAAQ,WAAW,CAAA;AAGpD,IAAA,WAAA,CAAqB,IAAc,EAAA;QACjC,KAAK,CAAC,CAAuB,oBAAA,EAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAA,CAAC,CAAA;QAD5B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAU;AAGjC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;KACtB;AACF;;ACRK,MAAO,aAAc,SAAQ,WAAW,CAAA;AAC5C,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;ACJK,MAAO,sBAAuB,SAAQ,WAAW,CAAA;AACrD,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;KACf;AACF;;MCKY,YAAY,CAAA;AACvB,IAAA,WAAA,CAA6B,MAAgC,EAAA;QAAhC,IAAM,CAAA,MAAA,GAAN,MAAM,CAA0B;KAAI;IAEjE,MAAM,GAAG,CAAC,KAAa,EAAA;QACrB,IAAI;AACF,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC;gBAC3B,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA;AAClC,gBAAA,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE;AAC9D,aAAA,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,OAAO,CAAA;AACpB,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC;AAAE,gBAAA,MAAM,KAAK,CAAA;AAE1C,YAAA,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AACvC,SAAA;KACF;AAED,IAAA,MAAM,KAAK,CAAC,KAAa,EAAE,KAAU,EAAA;AACnC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC;YAC3B,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA;AAClC,YAAA,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE;AAC7D,YAAA,IAAI,EAAE,KAAK;AACZ,SAAA,CAAC,CAAA;QAEF,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;AAC5B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;SACrB,CAAA;KACF;AAED,IAAA,MAAM,IAAI,CAAC,KAAa,EAAE,IAAgB,EAAA;AACxC,QAAA,MAAM,KAAK,CAAC;YACV,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA;AAClC,YAAA,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE;YAC7D,IAAI;AACL,SAAA,CAAC,CAAA;KACH;IAED,MAAM,MAAM,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,KAAK,CAAC;YACV,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA;AAClC,YAAA,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE;AAC9D,SAAA,CAAC,CAAA;KACH;AACF;;MCxDY,aAAa,CAAA;AACxB,IAAA,WAAA,CAA6B,OAA8B,EAAA;QAA9B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAuB;KAAI;IAE/D,MAAM,GAAG,CAAC,EAAU,EAAA;AAClB,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAE,CAAC,CAAA;AAE1D,QAAA,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;KAChC;AAED,IAAA,MAAM,QAAQ,CAAC,GAAa,EAAE,OAA0D,EAAA;AACtF,QAAA,MAAM,MAAM,GAAG;YACb,OAAO;YACP,IAAI;YACJ,QAAQ;YACR,YAAY;YACZ,MAAM;YACN,OAAO;YACP,KAAK;YACL,OAAO;YACP,MAAM;YACN,SAAS;YACT,WAAW;YACX,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,MAAM;YACN,aAAa;YACb,MAAM;SACP,CAAA;AACD,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE;AAC5D,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE;AACJ,oBAAA,MAAM,EAAE;AACN,wBAAA;AACE,4BAAA,KAAK,EAAE;AACL,gCAAA,GAAG,EAAE,GAAG;AACT,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE;AACJ,gCAAA,SAAS,EAAE,IAAI;AAChB,6BAAA;AACF,yBAAA;wBACD,IAAI,OAAO,EAAE,QAAQ;AACnB,8BAAE;AACE,gCAAA;AACE,oCAAA,KAAK,EAAE;AACL,wCAAA,gBAAgB,EAAE;AAChB,4CAAA,EAAE,EAAE,CAAC;AACN,yCAAA;AACF,qCAAA;AACF,iCAAA;AACF,6BAAA;8BACD,EAAE,CAAC;AACR,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAClD,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;KAC1D;IAED,MAAM,IAAI,CAAC,OAA6B,EAAA;QACtC,OAAO,OAAO,CAAC,SAAS,CAAA;QACxB,OAAO,OAAO,CAAC,SAAS,CAAA;QACxB,OAAO,OAAO,CAAC,WAAW,CAAA;QAE1B,IAAI;YACF,IAAI,CAAC,OAAO,CAAC,WAAW;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAE5E,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AAEnC,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAiB,cAAA,EAAA,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;AACnF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC;AAAE,gBAAA,MAAM,KAAK,CAAA;AAE1C,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAE5B,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAiB,cAAA,EAAA,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;AAC1E,SAAA;KACF;IAED,MAAM,MAAM,CAAC,OAA6B,EAAA;QACxC,IAAI,CAAC,OAAO,CAAC,WAAW;YAAE,OAAM;QAEhC,IAAI;YACF,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AAEnC,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAiB,cAAA,EAAA,OAAO,CAAC,WAAW,CAAE,CAAA,CAAC,CAAA;AAClE,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAiB,cAAA,EAAA,OAAO,CAAC,EAAE,CAAE,CAAA,CAAC,CAAA;AACzD,SAAA;KACF;AACF;;ACvFY,MAAA,aAAa,GAAG,CAC3B,SAAY,KACwC;AACpD,IAAA,MAAM,kBAAkB,GAAG,CAAC,IAAS,KACnC,IAAI;AACJ,QAAA,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACpB,OAAO,IAAI,KAAK,QAAQ;AACxB,QAAA,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,WAAW;AACtC,QAAA,EAAE,SAAS,IAAI,IAAI,CAAC,CAAA;AACtB,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAyB,EAAE,OAAe,KAAyB;AACnF,QAAA,IAAI,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;QAChE,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;AAC/F,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;AAEnG,QAAA,OAAO,IAAI,CAAA;AACb,KAAC,CAAA;AACD,IAAA,MAAM,qBAAqB,GAAG,CAAC,IAAyB,KAA4D;AAClH,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAC7B,CAAC,MAAM,EAAE,GAAG,MAAM;AAChB,YAAA,GAAG,MAAM;YACT,CAAC,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,kBAAE,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;kBAChC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,sBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAY,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;sBACzG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;SAC7B,CAAC,EACF,EAA4D,CAC7D,CAAA;AACH,KAAC,CAAA;IAED,OAAO,cAAc,SAAS,CAAA;AAAvB,QAAA,WAAA,GAAA;;YAEL,IAAc,CAAA,cAAA,GAAW,EAAE,CAAA;SAkC5B;AA9BC,QAAA,UAAU,CAAC,IAAa,EAAA;YACtB,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAA;SACxG;QAED,kBAAkB,GAAA;YAIhB,OAAO;gBACL,WAAW,EAAE,CAAC,IAAW,MAAoB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACnF,gBAAA,aAAa,EAAE,CAAC,IAAkC,KAAW;AAC3D,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;oBACxB,IAAI,UAAU,GAA2D,IAAI,CAAA;oBAE7E,IAAI;wBACF,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;AAE3B,wBAAA,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;AAExC,wBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;AACxD,qBAAA;AAAC,oBAAA,OAAO,KAAK,EAAE;wBACd,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;AAC3B,wBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;AAChD,wBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAEpB,wBAAA,MAAM,KAAK,CAAA;AACZ,qBAAA;iBACF;aACF,CAAA;SACF;KACF,CAAA;AACH;;ACzEa,MAAA,WAAW,GAAG,CAA2C,SAAiC,KAAI;IACzG,OAAO,cAAc,SAAS,CAAA;AAC5B,QAAA,OAAO,CAA+B,QAAuD,EAAA;AAC3F,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC3B,gBAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAA6B,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AACnE,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAA6B,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AACxE,aAAA;SACF;AAED,QAAA,eAAe,CACb,UAAkC,EAAA;YAElC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAA;SAC3E;KACF,CAAA;AACH;;ACfa,MAAA,gBAAgB,GAAG,CAI9B,SAAgF,KAI9E;IACF,OAAO,MAAM,YAAa,SAAQ,SAAS,CAAA;QACzC,MAAM,GAAG,CAAC,WAAyC,EAAA;AACjD,YAAA,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,GAAG,CACD,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,EAClE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAC9C,CACF,CAAA;AACD,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;YAE1B,IAAI,KAAK,CAAC,IAAI,CAAC;AAAE,gBAAA,MAAM,IAAI,aAAa,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAY,UAAA,CAAA,CAAC,CAAA;AAE7F,YAAA,OAAO,IAAI,CAAA;SACZ;AAED,QAAA,yBAAyB,CAAC,WAAyC,EAAA;AACjE,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,kBAAE,CAAG,EAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAI,CAAA,EAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,cAAc,CAAE,CAAA;AACrG,kBAAE,IAAI,CAAC,cAAc,CAAA;SACxB;KACK,CAAA;AACV;;ACrCA,IAAY,kBAOX,CAAA;AAPD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EAPW,kBAAkB,KAAlB,kBAAkB,GAO7B,EAAA,CAAA,CAAA;;ACmCY,MAAA,iBAAiB,GAAG,CAI/B,SAAgF,KAI9E;AACF,IAAA,MAAM,qBAAqB,GAAG,CAAC,MAAW,KACxC,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAC1B,IAAA,MAAM,kBAAkB,GAAG,CAAC,MAAuC,KAAS;AAC1E,QAAA,OAAO,qBAAqB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAA;AAC9D,KAAC,CAAA;IACD,MAAM,iBAAiB,GAAG,CAAC,KAAU,KACnC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACzE,UAAE,KAAK;AACP,UAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAEtC,OAAO,MAAM,aAAc,SAAQ,SAAS,CAAA;AAArC,QAAA,WAAA,GAAA;;YAiCL,IAAkB,CAAA,kBAAA,GAAG,CAAC,MAAqC,KACzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CACxB,CAAC,OAA0B,EAAE,SAAiB,KAAK;AACjD,gBAAA,GAAG,OAAO;AACV,gBAAA,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAA4C,CAAC,CAAC,CAAC;aAChG,EACD,EAAE,CACH,CAAA;AAEH,YAAA,IAAA,CAAA,kBAAkB,GAAG,CACnB,SAAmD,EACnD,OAA8E,KACzD;gBACrB,IAAI,IAAI,CAAC,eAAe,CAAQ,IAAI,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa;AAAE,oBAAA,EAAE,CAAA;AAE7E,gBAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAA;gBACvC,MAAM,MAAM,GAAG,EAAE,CAAA;AAEjB,gBAAA,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;AAE7B,gBAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;AACtD,gBAAA,MAAM,kBAAkB,GACtB,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,sBAAE,SAAS,CAAC,QAAQ,EAAE;sBACpB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;AAElE,gBAAA,IAAI,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC,IAAI,EAAE;AACpC,oBAAA,IACE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AAC7B,yBAAC,IAAI,CAAC,MAAM,CAAC,kBAAkE,CAAC;AAC9E,4BAAA,kBAAkB,CAAC,KAAK;AACxB,4BAAA,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkE,CAAC,CAAC;AAEnF,wBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;oBAEzE,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;AAC9G,iBAAA;AACD,gBAAA,IACE,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC,EAAE;AAC9B,oBAAA,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;qBAC5B,IAAI,CAAC,MAAM,CAAC,kBAAkE,CAAC,KAAK,kBAAkB,CAAC,KAAK;AAC3G,wBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkE,CAAC,CAAC;AAEnF,oBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AACrE,gBAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AAC1E,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAChC,CAAC,OAAO,EAAE,GAAG,KAAK;AAChB,wBAAA,GAAG,OAAO;wBACV,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAA,CAAA,EAAI,GAAG,CAAE,CAAA,EAAE,EAAE,CAAsB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;qBACpG,EACD,EAAE,CACH,CAAA;AACF,iBAAA;AAED,gBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAG,OAAO,EAAE,QAA0B,IAAI,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,CAAA;AAC7G,aAAC,CAAA;AAED,YAAA,IAAA,CAAA,oBAAoB,GAAG,CACrB,OAAsC,EACtC,eAA0C,KACrB;gBACrB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAA;gBAEtD,IAAI,CAAC,WAAW,CAAC,MAAM;AAAE,oBAAA,OAAO,EAAE,CAAA;gBAElC,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAChE,CAAC,SAAS,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAChD,CAAA;gBAED,IAAI,wBAAwB,CAAC,MAAM;oBACjC,wBAAwB,CAAC,OAAO,CAC9B,CAAC,SAAS,MACP,eAAe,GAAG;AACjB,wBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAC1B,EAAE,CACA,OAAO,CAAC,SAA4C,CAAC,CACtD,CAAC,QAAQ,CACX;AACC,8BAAE,EAAE,CAAC,SAAS,GAAG,KAAK,EAAE;8BACtB,EAAE,CAAC;AACP,wBAAA,GAAG,eAAe;AACnB,qBAAA,CAAC,CACL,CAAA;gBAEH,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,KAChD,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,SAA4C,CAAC,CAAC,CAClF,CAAA;AACH,aAAC,CAAA;SA8BF;QArJC,MAAM,IAAI,CAAC,EACT,OAAO,EACP,MAAM,EACN,OAAO,GAAA,GAKL,EAAE,EAAA;AACJ,YAAA,MAAM,UAAU,GAA+B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAA;YACxG,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACxD,YAAA,MAAM,eAAe,GAAsB,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,CAAA;AAClF,YAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,eAAe,CAAC,CAAC,CAAA;AACjE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YAE/C,OAAO;gBACL,IAAI;gBACJ,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;aACzC,CAAA;SACF;AAED,QAAA,0BAA0B,CAAC,OAAsC,EAAA;AAC/D,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAQ,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,cAAc,CAAA;AAElE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;YACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC,CAAA;AAE7D,YAAA,OAAO,CAAG,EAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAI,CAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,cAAc,EAAE,CAAA;SACpF;AA2FD,QAAA,MAAM,YAAY,CAChB,OAAsC,EACtC,MAAqC,EAAA;YAErC,MAAM,OAAO,GAAG,EAAE,CAAA;YAElB,IAAI,MAAM,EAAE,MAAM,EAAE;gBAClB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,oBAAA,OAAO,CAAC,IAAI,CACV,UAAU,CACR,MAAM,MAAM,CACV,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CACjG,CACF,CACF,CAAA;AACE,qBAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AAClG,aAAA;YACD,IAAI,MAAM,EAAE,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAEpD,YAAA,OAAO,OAAO,CAAA;SACf;QAED,cAAc,CAAC,IAAa,EAAE,MAAqC,EAAA;AACjE,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAA;AAC9B,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK;gBAAE,OAAO,IAAI,CAAC,MAAM,CAAA;AAEnD,YAAA,OAAO,QAAQ,CAAA;SAChB;KACK,CAAA;AACV;;AC9Ma,MAAA,mBAAmB,GAAG,CAIjC,SAAgF,KAI9E;IACF,OAAO,MAAM,eAAgB,SAAQ,SAAS,CAAA;QAC5C,MAAM,MAAM,CAAC,IAAmC,EAAA;AAC9C,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAW,CAAC,CAAC,CAAA;AAClE,YAAA,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;AAEhC,YAAA,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;SAClB;QAED,MAAM,IAAI,CAAC,IAAW,EAAA;AACpB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAA;YACvE,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;YAElD,IAAI,OAAO,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YAEhD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAClC,YAAA,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAE1B,YAAA,OAAO,MAAM,CAAA;SACd;AAED,QAAA,yBAAyB,CAAC,WAA2B,EAAA;AACnD,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,kBAAE,CAAG,EAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAI,CAAA,EAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,cAAc,CAAE,CAAA;AACrG,kBAAE,IAAI,CAAC,cAAc,CAAA;SACxB;KACK,CAAA;AACV;;ACzBa,MAAA,mBAAmB,GAAG,CAIjC,SAAgF,KAI9E;IACF,MAAM,kBAAkB,GAAG,CACzB,MAAqC,EACrC,KAAsC,KAEtC,CAAC,KAAK,CAAC,EAAE,CAAkE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AAC/F,UAAE,EAAE,CAAmD,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,UAAE,EAAE,CAAkE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAA;AACvG,IAAA,MAAM,gBAAgB,GAAG,CAAC,OAA6B,KAA0B;AAC/E,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AAAE,YAAA,OAAO,OAAO,CAAA;AAC1C,QAAA,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,YAAY;YAAE,OAAO,WAAW,EAAE,CAAA;AAC9E,QAAA,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAA;QAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,KAAK;AAAE,gBAAA,OAAO,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AACtF,YAAA,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,MAAM;AAAE,gBAAA,OAAO,WAAW,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AACzF,SAAA;QAED,OAAO,OAAO,EAAE,KAAK,CAAA;AACvB,KAAC,CAAA;IAED,OAAO,MAAM,eAAgB,SAAQ,SAAS,CAAA;QAC5C,MAAM,MAAM,CAAC,IAAmC,EAAA;AAC9C,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;YAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;YAChD,MAAM,MAAM,GAAG,GAAG,CAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,EACxD,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAC9C,CAAA;AAED,YAAA,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAE/D,YAAA,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;AAEpC,YAAA,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;SACtB;AAED,QAAA,4BAA4B,CAAC,WAA0C,EAAA;AACrE,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;kBAC7B,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAC5F,IAAI,CAAC,cACP,CAAE,CAAA;AACJ,kBAAE,IAAI,CAAC,cAAc,CAAA;SACxB;AAED,QAAA,aAAa,CAAC,MAAqC,EAAA;AACjD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;AAExB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;AAElD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,UAAU,MAAM;AACrB,gBAAA,GAAG,IAAI;AACP,gBAAA,GAAG,CAAC,CAAC,KAAK,MAA2B,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,GAAG,KAAK,EAAE,CAAC,EACtF,gBAAgB,CAAC,MAAM,CAAC,UAAmB,CAAC,CAAC,CAC9C;aACF,CAAC,EACF,EAAE,CACH,CAAA;SACF;KACK,CAAA;AACV;;AC/Ea,MAAA,mBAAmB,GAAG,CAIjC,SAAgF,KAI9E;IACF,OAAO,MAAM,eAAgB,SAAQ,SAAS,CAAA;QAC5C,MAAM,MAAM,CAAC,WAA0C,EAAA;AACrD,YAAA,MAAM,SAAS,CACb,GAAG,CACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,EAC/D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAC9C,CACF,CAAA;SACF;AAED,QAAA,4BAA4B,CAAC,WAAoC,EAAA;AAC/D,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,kBAAE,CAAG,EAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAI,CAAA,EAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,cAAc,CAAE,CAAA;AACrG,kBAAE,IAAI,CAAC,cAAc,CAAA;SACxB;KACK,CAAA;AACV;;MCzBa,iBAAiB,GAAG,CAK/B,SAA6D,EAC7D,WAAkC,KAOhC;IACF,OAAO,MAAM,gBACX,SAAQ,SAAS,CAAA;AAMjB,QAAA,WAAA,CAAY,GAAG,IAAgB,EAAA;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAA;SACZ;AAEQ,QAAA,UAAU,CAAC,IAAa,EAAA;AAC/B,YAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;SAC9B;KACK,CAAA;AACV;;ACzBa,MAAA,iBAAiB,GAAG,CAK/B,SAAgF,KAI9E;AACF,IAAA,OAAO,MAAM,aACX,SAAQ,mBAAmB,CACzB,gBAAgB,CACd,iBAAiB,CACf,mBAAmB,CACjB,mBAAmB,CAAC,SAAqE,CAAC,CAC3F,CACF,CACF,CACF,CAAA;KACyC,CAAA;AAC9C;;ACxBa,MAAA,uBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAO,IAAI,CAAC,CAAC,CAAC,CAAA;AAGjE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KAClB;AACF;;MCRY,sCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;IAGrG,WACoB,CAAA,SAAoB,EACpB,gBAAiD,EAAA;AAEnE,QAAA,KAAK,EAAE,CAAA;QAHW,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAiC;AAGnE,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACdY,MAAA,+BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAe,IAAI,CAAC,CAAC,CAAC,CAAA;AAGzE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;KAC1B;AACF;;MCRY,sCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAsB,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;IAGjH,WACoB,CAAA,SAAoB,EACpB,gBAAiD,EAAA;AAEnE,QAAA,KAAK,EAAE,CAAA;QAHW,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAiC;AAGnE,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAA;KACjC;AACF;;MCbY,8BACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAc,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAGjG,WAA8B,CAAA,SAAoB,EAAoB,gBAAyC,EAAA;AAC7G,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAoB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;AAE7G,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAA;KACzB;AACF;;MCVY,oCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAgB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAGnG,WAA8B,CAAA,SAAoB,EAAoB,gBAAyC,EAAA;AAC7G,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAoB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;AAE7G,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAA;KAC3B;AACF;;ACZY,MAAA,uBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAO,IAAI,CAAC,CAAC,CAAC,CAAA;AAGjE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KAClB;IAEQ,MAAM,GAAG,CAAC,WAA0B,EAAA;AAC3C,QAAA,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;AAEpD,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACzD,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAE3D,QAAA,OAAO,IAAI,CAAA;KACZ;AAED,IAAA,MAAM,oBAAoB,CAAC,KAAa,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC,CAAA;AAE/D,QAAA,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA;KACxB;IAEQ,kBAAkB,GAAA;QAIzB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;QAEjE,OAAO;AACL,YAAA,WAAW,EAAE,CAAC,IAAU,KAAkB;AACxC,gBAAA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;gBAE/B,OAAO,KAAK,CAAC,YAAY,CAAA;AAEzB,gBAAA,OAAO,KAAK,CAAA;aACb;YACD,aAAa;SACd,CAAA;KACF;IAEO,MAAM,gBAAgB,CAAC,MAAc,EAAA;AAC3C,QAAA,MAAM,aAAa,GAAG,MAAM,MAAM,CAChC,GAAG,CACD,IAAI,CAAC,UAAU,CAAC,CAAA,EAAG,IAAI,CAAC,cAAc,CAAI,CAAA,EAAA,MAAM,CAAK,GAAA,CAAA,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,EAC5G,eAAe,CAChB,CACF,CAAA;AAED,QAAA,OAAO,aAAa,CAAC,IAAI,EAAE,CAAA;KAC5B;IAEO,MAAM,mBAAmB,CAAC,MAAc,EAAA;AAC9C,QAAA,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CACxG,CAAA;QAED,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;KAC7B;IAEO,+BAA+B,GAAA;QAIrC,OAAO;YACL,WAAW,EAAE,CAAC,IAAmB,KAAmB,IAAI,CAAC,OAAO,EAAE;AAClE,YAAA,aAAa,EAAE,CAAC,IAA0C,KACxD,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACxC,CAAA;KACF;AACF;;MCtEY,oCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAoB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAGvG,WAA8B,CAAA,SAAoB,EAAoB,gBAAyC,EAAA;AAC7G,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAoB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;AAE7G,QAAA,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAA;AACtC,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAA;KAC/B;AACF;;ACVY,MAAA,2BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAW,IAAI,CAAC,CAAC,CAAC,CAAA;AAGrE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAAA;AAClC,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;KACtB;AAED,IAAA,MAAM,iBAAiB,CAAC,IAAY,EAAE,IAAW,EAAA;QAC/C,MAAM,YAAY,GAAG,MAAM,OAAO,CAChC,KAAK,CACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EACpC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EACzB,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EACzB,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAC/B,CACF,CAAA;AAED,QAAA,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,sBAAsB,CAAC,kCAAkC,CAAC,CAAA;QAC/F,IAAI,YAAY,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,sBAAsB,IAAI,CAAA,UAAA,CAAY,CAAC,CAAA;QAEvF,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;KACnC;AAED,IAAA,MAAM,oBAAoB,CAAC,WAAqB,EAAE,KAAK,GAAG,CAAC,EAAA;AACzD,QAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAChC,KAAK,CACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EACpC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAC9C,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAC/B,CACF,CAAA;QAED,IAAI,YAAY,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,sBAAsB,CAAC,CAAA;AAEvE,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AAC7D,QAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,UAAU,CAAC,GAAG,CAAC,OAAO,QAAQ,MAAM;YAClC,QAAQ;AACR,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACxE,CAAC,CAAC,CACJ,CAAA;AAED,QAAA,OAAO,YAAY,CAAA;KACpB;AAED,IAAA,MAAM,aAAa,CAAC,QAAkB,EAAE,OAAgD,EAAA;QACtF,IAAI,CAAC,QAAQ,CAAC,QAAQ;AAAE,YAAA,MAAM,IAAI,qBAAqB,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAA;QAEvF,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,MAAM,MAAM,GAAsB,EAAE,CAAA;AAEpC,QAAA,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE;YAC/B,IAAI,OAAO,EAAE,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,KAAK;gBAAE,MAAK;YAE9D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;YAE1E,IAAI,OAAO,EAAE,QAAQ;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;YACnE,IAAI,OAAO,EAAE,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;AAEtD,YAAA,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;YAE1F,IAAI,WAAW,CAAC,KAAK;gBAAE,SAAQ;YAE/B,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;AACnC,SAAA;AAED,QAAA,OAAO,EAAE,CAAY,QAAQ,CAAC,CAAA;KAC/B;AACF;;ACzEY,MAAA,0BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,CAAA;AAKpE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAF1C,IAAO,CAAA,OAAA,GAAiE,EAAE,CAAA;AAIhF,QAAA,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAA;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;IAED,MAAM,SAAS,CAAC,IAAY,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9C,aAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;KAC7B;IAED,MAAM,YAAY,CAAC,MAA0B,EAAA;QAC3C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;AAE5C,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3B,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;gBAAE,OAAM;AAE5D,YAAA,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,UAAU,EAAE,OAAO,CAAC,GAAG;aACxB,CAAA;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAA;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAA;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAA;YAE1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACjC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;AAAE,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAC9G,gBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK;AAAE,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAC7F,gBAAA,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;AAAE,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAErF,gBAAA,OAAO,MAAM,CAAA;AACf,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;KAC5B;AACF;;MChDY,iCACX,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAGhG,WAA8B,CAAA,SAAoB,EAAoB,gBAA4C,EAAA;AAChH,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAoB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAA4B;AAEhH,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAA;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACXY,MAAA,sCACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,CAAA;AAGpE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAA;AAC5C,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACTY,MAAA,2BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAW,IAAI,CAAC,CAAC,CAAC,CAAA;AAGrE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAA;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;KACtB;AACF;;ACTY,MAAA,yBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAS,IAAI,CAAC,CAAC,CAAC,CAAA;AAGnE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAA;KACpB;IAEQ,kBAAkB,GAAA;QAIzB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;QAEjE,OAAO;AACL,YAAA,WAAW,EAAE,CAAC,IAAY,KAAkB;AAC1C,gBAAA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;AAE/B,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS;oBAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;AAEhE,gBAAA,OAAO,KAAK,CAAA;aACb;AACD,YAAA,aAAa,EAAE,CAAC,IAAmC,KAAY;AAC7D,gBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;AAEpC,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,oBAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAA;AAEpF,gBAAA,OAAO,QAAQ,CAAA;aAChB;SACF,CAAA;KACF;AACF;;AChCY,MAAA,wBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAQ,IAAI,CAAC,CAAC,CAAC,CAAA;AAGlE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAwB1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,KAAY,KAAW;AACnD,YAAA,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;AAC9B,gBAAA,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AACjD,oBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAY,CAAA;oBACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAEpC,IAAI,CAAC,CAAC,SAAS;AAAE,wBAAA,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;AAE3C,oBAAA,OAAO,QAAQ,CAAA;AACjB,iBAAC,CAAC,CAAA;AACH,aAAA;AAED,YAAA,OAAO,KAAK,CAAA;AACd,SAAC,CAAA;AAnCC,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,kBAAkB,CAAC,MAAM;SAClC,CAAA;KACF;IAEQ,kBAAkB,GAAA;QAIzB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;QACjE,OAAO;YACL,WAAW,EAAE,CAAC,IAAW,KAAmB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AAC9F,YAAA,aAAa,EAAE,CAAC,IAAkC,KAAW;AAC3D,gBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;AAEpC,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;aACzC;SACF,CAAA;KACF;AAgBF;;AC3CY,MAAA,0BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,CAAA;AAGpE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACTY,MAAA,uCACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAuB,IAAI,CAAC,CAAC,CAAC,CAAA;AAGjF,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,uBAAuB,CAAA;AAC7C,QAAA,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAA;KAClC;AACF;;ACTY,MAAA,mCACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAmB,IAAI,CAAC,CAAC,CAAC,CAAA;AAG7E,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAA;AACzC,QAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAA;KAC9B;AACF;;ACTY,MAAA,0BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAU,IAAI,CAAC,CAAC,CAAC,CAAA;AAGpE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA;KACrB;AACF;;ACVK,MAAO,8BAA+B,SAAQ,wBAAwB,CAAA;AAC1E,IAAA,WAAA,CAA8B,SAAoB,EAAA;QAChD,KAAK,CAAC,SAAS,CAAC,CAAA;QADY,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;KACrC;AACF;;ACJY,MAAA,uBACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAO,IAAI,CAAC,CAAC,CAAC,CAAA;AAGjE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AA0B1C,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,IAAU,KAAU;AAC7C,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AACrG,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AAEO,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,iBAAoC,MAAM;AAC5E,YAAA,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC9C,YAAA,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;AACzE,SAAA,CAAC,CAAA;AAEM,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,IAAU,KAAU;AAC/C,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBACpG,IAAI,CAAC,IAAI,CAAC,SAAS;oBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,YAAY,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;gBAC/F,IAAI,CAAC,IAAI,CAAC,SAAS;oBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,YAAY,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;AAChG,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AAEO,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,iBAAoC,MAAM;YAC5E,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AACzD,YAAA,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACnF,SAAA,CAAC,CAAA;AAxDA,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KAClB;IAEQ,kBAAkB,GAAA;QAIzB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;QAEjE,OAAO;AACL,YAAA,WAAW,EAAE,CAAC,IAAU,KAAkB;gBACxC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AAE/C,gBAAA,OAAO,WAAW,CAAC,YAAY,CAAC,CAAA;aACjC;AACD,YAAA,aAAa,EAAE,CAAC,IAAiC,KAAU;AACzD,gBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;AAEpC,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;aACxC;SACF,CAAA;KACF;AAmCF;;AC/DY,MAAA,2BACX,SAAQ,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAW,IAAI,CAAC,CAAC,CAAC,CAAA;AAGrE,IAAA,WAAA,CAA8B,SAAoB,EAAA;AAChD,QAAA,KAAK,EAAE,CAAA;QADqB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAEhD,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAA;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;KACtB;AACF;;MCHY,iCAAiC,CAAA;AAC5C,IAAA,WAAA,CAA6B,YAAkB,EAAA;QAAlB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAM;KAAI;IAEnD,MAAM,0BAA0B,CAAC,IAA4B,EAAA;AAC3D,QAAA,MAAM,WAAW,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClG,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAE7B,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,WAAW;AACvB,YAAA,WAAW,EAAE,KAAK;SACnB,CAAA;KACF;AAED,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAA;AACtF,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAE7B,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,WAAW;AACvB,YAAA,WAAW,EAAE,KAAK;SACnB,CAAA;KACF;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA;KAC5B;AAED,IAAA,MAAM,iBAAiB,GAAA;QACrB,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AACvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAA;QAE5C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AAEvB,QAAA,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,sBAAsB,CAAC,KAAa,EAAA;QACxC,OAAO,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;KACxD;AACF;;MCjDY,2BAA2B,CAAA;AACtC,IAAA,WAAA,CAA6B,YAAkB,EAAA;QAAlB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAM;KAAI;IAEnD,MAAM,QAAQ,CAAC,MAAsB,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAE7D,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,8BAA8B,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACnG,MAAM,IAAI,GAAG,EAAE,CAAqB,IAAI,CAAC,IAAI,CAAC,CAAA;AAE9C,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;AAE9C,YAAA,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAA;AACjC,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAA;AAElB,YAAA,OAAO,IAAI,CAAA;AACZ,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC;AAAE,gBAAA,MAAM,KAAK,CAAA;YAE1C,MAAM,aAAa,GAAG,KAAsB,CAAA;AAE5C,YAAA,IAAI,aAAa,CAAC,IAAI,KAAK,2BAA2B;AACpD,gBAAA,MAAM,IAAI,0BAA0B,CAAC,0BAA0B,CAAC,CAAA;AAClE,YAAA,IAAI,aAAa,CAAC,IAAI,KAAK,oBAAoB;gBAAE,MAAM,IAAI,iBAAiB,EAAE,CAAA;AAE9E,YAAA,MAAM,KAAK,CAAA;AACZ,SAAA;KACF;AACF;;MC5BY,qBAAqB,CAAA;;AACzB,qBAAA,CAAA,eAAe,GAAG,CAIvB,aAAwB,EACxB,MAAkC,KACS;AAC3C,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAoB,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAA;AAEzG,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CACzG,CAAA;IACD,MAAM,WAAW,GAAG,EAAE,CAA4D,KAAK,CAAC,GAAG,aAAa,CAAC,CAAA;IAEzG,IAAI,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAA;AACtF,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAAE,QAAA,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;AAEnH,IAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,WAAW,EAAE,CAAA;AAChF,CAAC,CAAA;AAEM,qBAAmB,CAAA,mBAAA,GAAG,CAC3B,UAAmD,KACC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;AAEtE,qBAAA,CAAA,wBAAwB,GAAG,CAChC,UAAkB,EAClB,MAAwC,KACqE;AAC7G,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAsD,CAAC;AACzE,QAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAgE,EAAE,CAAA;IAExG,MAAM,KAAK,GAAG,EAAE,CACd,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAA;AAElC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KACpD,qBAAqB,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,GAAG,MAAM,GAAG,EAAE,CACpG,CAAA;AAED,QAAA,OAAO,qBAAqB,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,YAAY,EAAE,UAAU,KAAK,UAAU,CAAA;AAC3G,KAAC,CAAC,IAAI,EAAE,CACT,CAAA;AACD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAC3C,CAAC,mBAAmB,KAClB,qBAAqB,CAAC,mBAAmB,CACvC,KAAK,CAAC,mBAAyE,CAAC,CACjF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAyE,CAAC,CAAC,CACjD,CAAA;AACvD,IAAA,MAAM,WAAW,GAAG,KAAK,GAAG,aAAa,CAAC,CAAA;AAE1C,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC5B,OAAO,EAAE,aAAa,EAAE,aAAmE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;IAEpH,OAAO;QACL,aAAa,EAAE,aAAa,IAAK,UAAiE;QAClG,UAAU;AACV,QAAA,GAAG,WAAW;KACf,CAAA;AACH,CAAC;;ACpEH,IAAY,kBAcX,CAAA;AAdD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,KAAc,CAAA;AACd,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY,CAAA;AACZ,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,MAAc,CAAA;AACd,IAAA,kBAAA,CAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,MAAY,CAAA;AACZ,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,OAAc,CAAA;AACd,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,QAAkB,CAAA;AAClB,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,UAAmB,CAAA;AACnB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,UAAsB,CAAA;AACtB,IAAA,kBAAA,CAAA,eAAA,CAAA,GAAA,WAA2B,CAAA;AAC3B,IAAA,kBAAA,CAAA,mBAAA,CAAA,GAAA,eAAmC,CAAA;AACrC,CAAC,EAdW,kBAAkB,KAAlB,kBAAkB,GAc7B,EAAA,CAAA,CAAA;;ACdD,IAAY,uBAUX,CAAA;AAVD,CAAA,UAAY,uBAAuB,EAAA;AACjC,IAAA,uBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,uBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,uBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,uBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,YAAuB,CAAA;AACvB,IAAA,uBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,uBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,uBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,uBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EAVW,uBAAuB,KAAvB,uBAAuB,GAUlC,EAAA,CAAA,CAAA;;MCNY,kBAAkB,CAAA;;AACtB,kBAAA,CAAA,qBAAqB,GAAG,CAC7B,MAAW,KAC6C,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAE3E,kBAAA,CAAA,kBAAkB,GAAG,CAC1B,MAAiD,EACjD,WAAoC,KAC7B;AACP,IAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,MAAM,CAAA;AACpE,IAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI,CAAA;AACjD,IAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,SAAS;AAAE,QAAA,OAAO,KAAK,CAAA;AAErD,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE;UAC5B,WAAW,CAAC,EAAE;AAChB,UAAE,CAAC,KAAU,KACT,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;cACpF,CAAI,CAAA,EAAA,KAAK,CAAG,CAAA,CAAA;cACZ,KAAK,CAAA;AAEf,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC5G,UAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;AACzD,UAAE,SAAS,CAAC,MAAM,CAAC,KAAY,CAAC,CAAA;AACpC,CAAC;;MCbU,qBAAqB,CAAA;;AACzB,qBAAgB,CAAA,gBAAA,GAAG,CACxB,MAAqC,EACrC,MAAkC,KAElC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,SAA0B,EAAE,SAAiB,KAAI;IAC3E,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CACxD,SAAyD,EACzD,MAAM,CACP,CAAA;IAED,IAAI,CAAC,YAAY,CAAC,cAAc;QAC9B,OAAO;AACL,YAAA,GAAG,SAAS;YACZ,GAAG;AACD,gBAAA,CAAC,YAAY,CAAC,UAAU,GAAG,qBAAqB,CAAC,kBAAkB,CACjE,SAAyD,EACzD,MAAM,CAAC,SAA4C,CAGlD,EACD,MAAM,CACP;AACF,aAAA;SACF,CAAA;IAEH,MAAM,WAAW,GAAkC,YAAY,CAAC,cAAc,CAC5E,MAAM,CAAC,SAA4C,CAGlD,CACF,CAAA;IAED,OAAO;AACL,QAAA,GAAG,SAAS;AACZ,QAAA,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAChC,CAAC,aAA8B,EAAE,UAAkB,MAAM;AACvD,YAAA,GAAG,aAAa;AAChB,YAAA,CAAC,UAAU,GAAG,qBAAqB,CAAC,kBAAkB,CACpD,SAAyD,EACzD,WAAW,CAAC,UAA6C,CAGxD,EACD,MAAM,CACP;SACF,CAAC,EACF,EAAE,CACH;KACF,CAAA;AACH,CAAC,EAAE,EAAE,CAAC,CAAA;AAED,qBAAkB,CAAA,kBAAA,GAAG,CAC1B,KAAmD,EACnD,OAA8E,EAC9E,MAAkC,KACf;IACnB,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,eAAe,CAAQ,KAAK,EAAE,MAAM,CAAC,CAAA;AAExF,IAAA,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACvB,QAAQ,CAAC,OAAO,CAAC;AACjB,QAAA,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;AACxB,QAAA,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;AACrB,QAAA,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAE/B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,GAAG,KAAI;AACpD,YAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CACxD,GAAmD,EACnD,oBAAoB,EAAE,MAAM,IAAK,MAAc,CAChD,CAAA;AACD,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAA;AAC1C,YAAA,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAA;YAExC,OAAO;AACL,gBAAA,GAAG,SAAS;gBACZ,CAAC,UAAU,GAAG,qBAAqB,CAAC,kBAAkB,CACpD,GAAmD,EACnD,EAAE,CACA,EAAE,CAAgC,OAAO,CAAC,CAAC,GAAsC,CAAC,CACnF,EACD,YAAY,IAAK,EAAU,CAC5B;aACF,CAAA;SACF,EAAE,EAAE,CAAC,CAAA;AAER,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAChE,OAAO;AACL,YAAA,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAiD,GAC7E,qBAAqB,CAAC,qBAAqB,CACzC,OAAO,EACP,oBAAiG,CAClG;SACJ,CAAA;IAEH,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,OAAO,CAAC;QACzE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAA8C,CAAA;AAElF,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3B,UAAE,OAAO,CAAC,MAAM,CACZ,CAAC,aAAa,EAAE,MAAM,MAAM;AAC1B,YAAA,GAAG,aAAa;AAChB,YAAA,GAAG,qBAAqB,CAAC,qBAAqB,CAC5C,MAAM,EACN,oBAAiG,CAClG;SACF,CAAC,EACF,EAAE,CACH;UACD,qBAAqB,CAAC,qBAAqB,CACzC,OAAO,EACP,oBAAiG,CAClG,CAAA;AACP,CAAC,CAAA;AAEM,qBAAqB,CAAA,qBAAA,GAAG,CAC7B,OAAkD,EAClD,WAAoC,MACf;AACrB,IAAA,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,kBAAkB,CAAC,kBAAkB,CACpG,OAAO,EACP,WAAW,CACZ;AACF,CAAA,CAAC,CAAA;AAEK,qBAAA,CAAA,iBAAiB,GAAG,CACzB,OAA8E,EAC9E,WAAoC,KAEpC,kBAAkB,CAAC,qBAAqB,CAAC,OAAO,CAAC;AAC/C,MAAE,WAAW,CAAC,IAAI,KAAK,uBAAuB,CAAC,KAAK;AAClD,UAAE,qBAAqB,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACvD,UAAE,kBAAkB,CAChB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAClC,CAAC,eAAe,KACd,eAAe;YACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAA8B,CAAC,KAAK,OAAO,EAAE,QAAQ,CAAC,CAClE,CACrC;AACL,MAAE,kBAAkB,CAAC,MAAM,CAAA;AAExB,qBAAA,CAAA,sBAAsB,GAAG,CAC9B,OAA8E,KAE9E,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,EAAE;MACzB,kBAAkB,CAAC,aAAa;AAClC,MAAE,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI;UAC/B,kBAAkB,CAAC,iBAAiB;AACtC,UAAE,kBAAkB,CAChB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAClC,CAAC,eAAe,KACd,eAAe;YACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAA8B,CAAC,KAAK,OAAO,EAAE,QAAQ,CAAC,CAClE,CACrC;;MC5JI,kBAAkB,CAAA;;AACtB,kBAAA,CAAA,oBAAoB,GAAG,CAC5B,MAAuC,KAEvC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAEpF,kBAAA,CAAA,iCAAiC,GAAG,CACzC,MAAkC,KACxB;AACV,IAAA,OAAO,MAAM;AACX,UAAE,GAAG,CAAC,CAAC,KAAK,KAAI;QACd,IAAI,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC5C,IAAI,KAAK,KAAK,eAAe;AAAE,YAAA,OAAO,KAAK,CAAA;QAE3C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA;AAC5C,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,SAA+B,CAAC,CAAA;AAEzD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AAC3B,YAAA,OAAO,EAAE,CAAC,SAAS,GAAG,kBAAkB,CAAC,iCAAiC,CAAC,UAAU,CAAC,EAAE,CAAA;AAC1F,QAAA,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,IAAI,CAAA;QACvE,IAAI,UAAU,CAAC,MAAM;YACnB,OAAO,CAAC,UAAU,CAAC,OAAO;AACxB,kBAAE;AACE,oBAAA,CAAC,UAAU,CAAC,UAAU,IAAI,SAAS,GAAG,kBAAkB,CAAC,iCAAiC,CACxF,UAAU,CAAC,MAAM,CAClB;AACF,iBAAA;AACH,kBAAE;AACE,oBAAA,SAAS,EAAE,UAAU,CAAC,UAAU,IAAI,SAAS;oBAC7C,MAAM,EAAE,kBAAkB,CAAC,iCAAiC,CAAC,UAAU,CAAC,MAAM,CAAC;AAC/E,oBAAA,SAAS,EAAE;AACT,wBAAA,CAAC,GAAG,UAAU,CAAC,UAAU,CAAA,MAAA,CAAQ,GAAG;AAClC,4BAAA,IAAI,EAAE,OAAO;AACb,4BAAA,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU;AACnC,4BAAA,KAAK,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC;AAC5F,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACF,qBAAA;iBACF,CAAA;QAEP,OAAO,UAAU,CAAC,UAAU,CAAA;AAC9B,KAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC,CAAA;AAEM,kBAAqB,CAAA,qBAAA,GAAG,CAK7B,IAAc,EACd,MAAkC,KAElC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,KAAI;AAC9C,IAAA,MAAM,EACJ,aAAa,EACb,MAAM,EAAE,eAAe,EACvB,IAAI,GACL,GAAG,qBAAqB,CAAC,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAEtE,IAAI,CAAC,CAAC,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjC,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,CAAC,aAAa,GAAG,IAAI;sBACjB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;sBAC5B,EAAE,CAAmB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAC/C,kBAAkB,CAAC,qBAAqB,CAAC,EAAE,CAAW,KAAK,CAAC,EAAE,eAAe,CAAC,CAC/E;aACN,CAAA;AACH,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI;AACrB,sBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxB,sBAAE,kBAAkB,CAAC,qBAAqB,CAAC,EAAE,CAAW,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC;aAC9F,CAAA;AACJ,KAAA;IAED,IAAI,CAAC,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,CAAA;AAE/E,IAAA,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;AACpF,CAAC,EAAE,EAAE,CAAC,CAAA;AAED,kBAAmB,CAAA,mBAAA,GAAG,CAI3B,QAAe,EACf,MAAkC,EAClC,MAAM,GAAG,KAAK,KACF;IACZ,MAAM,IAAI,GAAmB,QAAQ,CAAC,OAAO,IAAI,IAAI,QAAQ,CAAA;AAE7D,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,aAAa,KAAI;QACxD,MAAM,EACJ,UAAU,EACV,MAAM,EAAE,eAAe,EACvB,gBAAgB,EAChB,EAAE,EACF,eAAe,GAChB,GAAG,qBAAqB,CAAC,eAAe,CAAC,aAA6D,EAAE,MAAM,CAAC,CAAA;AAEhH,QAAA,IAAI,eAAe;YACjB,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,GAAG,eAAe,CAAC,IAAI,CAAC,aAA6D,CAAC,EAAE,QAAQ,CAAC;aAClG,CAAA;QACH,IAAI,KAAK,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,MAAM,CAAA;QACpC,IACE,CAAC,CAAC,gBAAgB;YAClB,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAC1B,YAAA,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CACnC,CAAC,GAAG,KACF,CAAC,EAAE,CAAyB,IAAI,CAAC,aAA6D,CAAC,CAAC,GAAG,GAAG,CAAC,CAC1G,CAAC,MAAM;AAER,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CACzC,CAAC,MAAM,EAAE,OAAO,MAAM;AACpB,gBAAA,GAAG,MAAM;AACT,gBAAA,CAAC,gBAAgB,CAAC,OAAmD,CAAC,GACpE,IAAI,CAAC,aAAyD,CAAC,GAAG,OAAO,CAAC;AAC7E,aAAA,CAAC,EACF,EAAE,GAAG,MAAM,EAAE,CACd,CAAA;AAEH,QAAA,IACE,MAAM;AACN,YAAA,QAAQ,CAAC,IAAI,CAAC,aAAyD,CAAC,CAAC;YACzE,CAAC,KAAK,CAAC,eAAe,CAAC;AACvB,YAAA,CAAC,MAAM,CAAC,IAAI,CAAC,aAAyD,CAAC,CAAC;AAExE,YAAA,OAAO,MAAM,CAAA;QAEf,IACE,CAAC,CAAC,UAAU;AACZ,YAAA,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC9B,YAAA,QAAQ,CAAC,IAAI,CAAC,aAAyD,CAAC,CAAC,EACzE;YACA,MAAM,SAAS,GACb,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;kBACpB,EAAE,CAAC,QAAQ,CAAC,aAAyD,CAAC,EAAE,QAAQ,CAAC;AACnF,kBAAE,IAAI,CAAC,aAAyD,CAAC,CAAA;YAErE,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,IAAI,SAAS,KAAK,SAAS;AACzB,sBAAE;wBACE,CAAC,UAAU,GAAG;AACZ,4BAAA,IAAI,EACF,QAAQ,CAAC,aAA6D,CAAC,YAAY,SAAS;kCACxF,kBAAkB,CAAC,mBAAmB,CACpC,IAAI,CAAC,aAAyD,CAAC,EAC/D,eAA6C,CAC9C;AACH,kCAAE,SAAS;AAChB,yBAAA;AACF,qBAAA;sBACD,EAAE,CAAC;aACR,CAAA;AACF,SAAA;QAED,IAAI,CAAC,CAAC,EAAE;YACN,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAyD,CAAC,EAAE,QAAQ,CAAC;aAChG,CAAA;AAEH,QAAA,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,aAAyD,CAAC,EAAE,CAAA;KACpG,EAAE,EAAc,CAAC,CAAA;AACpB,CAAC;;AC3KU,MAAA,uBAAuB,GAAG,CAIrC,SAA2D,KAIzD;IACF,OAAO,MAAM,wBAAyB,SAAQ,SAAS,CAAA;AAIrD,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAA4B,MAAM,GAAG,CAAC,CAAC,CAAA;AAEpD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,sBAAsB,IAAI,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAA,IAAA,CAAM,CAAA;AAC/F,YAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO,EAAE,uBAAuB,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,aAAA,CAAe,CAAA;SACpG;QAED,MAAM,MAAM,CAAC,IAAmC,EAAA;AAC9C,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAW,CAAC,CAAC,CAAA;YAEnE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;SACtC;QAED,MAAM,IAAI,CAAC,IAAW,EAAA;AACpB,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CACxD,CAAC,KAAK,KAAK,qBAAqB,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAClD,CAAA;AAC/B,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM;AAClC,iBAAA,GAAG,CAAC,CAAC,KAAK,KAAI;gBACb,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA;AAElD,gBAAA,QACE,qBAAqB,CAAC,mBAAmB,CAAC,aAAa,CAAC;oBACxD,aAAa,CAAC,gBAAgB,IAAI;AAChC,oBAAA,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAChD,oBAAA;AACE,wBAAA,CAAC,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,GAAG,CACzE,CAAC,eAAe,KACd,qBAAqB,CAAC,eAAe,CAAC,eAAsB,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,UAAU;AAChG,4BAAA,eAAe,CAClB;AACF,qBAAA;AACF,iBAAA,EACF;AACH,aAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAC;AACf,iBAAA,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;AAEvD,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChC,IAAI,CAAC,sBAAsB,EAC3B,CAAC,GAAG,iBAAiB,EAAE,GAAG,iBAAiB,CAA+B,EAC1E;gBACE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;AACtG,aAAA,CACF,CAAA;YAED,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAA;SAC3G;KACK,CAAA;AACV;;ACjEa,MAAA,uBAAuB,GAAG,CAIrC,SAA2D,KAIzD;IACF,OAAO,MAAM,wBAAyB,SAAQ,SAAS,CAAA;AAGrD,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAA4B,MAAM,GAAG,CAAC,CAAC,CAAA;AAEpD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,sBAAsB,IAAI,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ,CAAA;SAClG;QAED,MAAM,MAAM,CAAC,WAA0C,EAAA;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAkB,CAAC,CAAA;YAE1D,MAAM,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAC9B,CAAC,KAAK,KAAK,qBAAqB,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAClD,EAC/B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,KAAI;AACtD,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAAE,oBAAA,OAAO,GAAG,CAAA;AAE3C,gBAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AACnF,gBAAA,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,UAAiD,CAAC,EAAE,QAAQ,CAAC,CAAA;gBAEvG,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,CAAC,YAAY,CAAC,UAAU,GAAG;wBACzB,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC;wBAChE,KAAK;AACL,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;iBACF,CAAA;AACH,aAAC,EAAE,EAAE,CAAC,CACP,CAAA;SACF;KACK,CAAA;AACV;;ACrBa,MAAA,iBAAiB,GAAG,CAC/B,SAAY,KACoF;IAChG,OAAO,MAAM,kBAAmB,SAAQ,SAAS,CAAA;AAkB/C,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAA6B,MAAM,CAAC,CAAC,CAAC,CAAA;AAEnD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;AACtC,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;AAC1B,YAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAK,IAAI,CAAC,KAAK,CAAC,iBAAgD,CAAA;SAC7F;AArBD,QAAA,IAAI,OAAO,GAAA;YACT,OAAO;AACL,gBAAA,cAAc,EAAE,kBAAkB;gBAClC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC3F,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,uBAAuB,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBACzG,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAClC,sBAAE,EAAE;sBACF,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aAC/G,CAAA;SACF;AAcD,QAAA,MAAM,QAAQ,CACZ,SAAiB,EACjB,MAAmC,EACnC,SAA2B,EAAA;YAE3B,MAAM,WAAW,GAAG,QAAQ,CAAC;gBAC3B,SAAS;gBACT,SAAS;AACT,gBAAA,MAAM,EAAE,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,CAAC;AACrE,aAAA,CAAC,CAAA;AAEF,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;SAC/B;AAED,QAAA,MAAM,KAAK,CACT,SAA0C,EAC1C,MAAmC,EACnC,SAA2B,EAAA;AAE3B,YAAA,MAAM,WAAW,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACpE,kBAAEC,OAAK,CACH,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;oBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,MAAM,EAAE,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5E,iBAAA,CAAC,CAAC,CACJ;kBACDA,OAAK,CAAC;oBACJ,SAAS;oBACT,SAAS;AACT,oBAAA,MAAM,EAAE,kBAAkB,CAAC,iCAAiC,CAAC,MAAM,CAAC;AACrE,iBAAA,CAAC,CAAA;AAEN,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;SAC/B;QAED,MAAM,KAAK,CAAqB,MAAyC,EAAA;AACvE,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;YAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA,CAAE,EAAE;AAC/C,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC5B,OAAO;AACR,aAAA,CAAC,CAAA;AACF,YAAA,MAAM,MAAM,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;AAEzC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAEzE,OAAO,MAAM,CAAC,IAAI,CAAA;SACnB;AAED,QAAA,yBAAyB,CAAY,KAAgB,EAAA;YACnD,IAAI,MAAM,CAAC,KAAY,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAA;YACvC,IAAI,QAAQ,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,QAAQ,CAAA;YACpC,IAAI,SAAS,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,SAAS,CAAA;YACtC,IAAI,KAAK,YAAY,IAAI;AAAE,gBAAA,OAAO,aAAa,CAAA;YAC/C,IAAI,SAAS,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAA;YAClC,IAAI,QAAQ,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,SAAS,CAAA;AAErC,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;SAC5C;AAED,QAAA,yBAAyB,CAAC,KAAa,EAAA;AACrC,YAAA,IAAI,CAAC,kDAAkD,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAA;AAEjF,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;AAE5B,YAAA,IAAIC,OAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAA;AAEvC,YAAA,OAAO,IAAI,CAAA;SACZ;AAED,QAAA,qBAAqB,CAAC,IAAqC,EAAA;AACzD,YAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAEzE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;SACpC;AAED,QAAA,mBAAmB,CAAC,QAAe,EAAE,MAAM,GAAG,KAAK,EAAA;AACjD,YAAA,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAC7E;KACF,CAAA;AACH;;AC7Ha,MAAA,uBAAuB,GAAG,CAIrC,SAA2D,KAIzD;AACF,IAAA,MAAM,gBAAgB,GAAG,CAAC,OAA6B,KAAa;QAClE,IAAI,OAAO,YAAY,SAAS;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;AAC1D,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AAAE,YAAA,OAAO,OAAO,CAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AAC7G,YAAA,OAAO,IAAI,CAAA;QAEb,OAAO,OAAO,CAAC,KAAK,CAAA;AACtB,KAAC,CAAA;IAED,OAAO,MAAM,wBAAyB,SAAQ,SAAS,CAAA;AAKrD,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAA4B,MAAM,GAAG,CAAC,CAAC,CAAA;AAEpD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,sBAAsB,IAAI,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ,CAAA;AACjG,YAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO,EAAE,uBAAuB,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,UAAA,CAAY,CAAA;AAChG,YAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,iBAAA,CAAmB,CAAA;SAChG;QAED,MAAM,MAAM,CAAC,IAAmC,EAAA;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AAE1C,YAAA,MAAM,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAC9B,CAAC,KAAK,KAAK,qBAAqB,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAClD,EAC/B;AACE,gBAAA,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,uBAAuB;AAClC,oBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;AACvE,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA;gBACD,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1G,aAAA,CACF,CAAA;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;SACxC;AAED,QAAA,aAAa,CAAC,MAAqC,EAAA;AACjD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;AAExB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;AAElD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,UAAU,MAAM;AACrB,gBAAA,GAAG,IAAI;AACP,gBAAA,IAAI,MAAM,CAAC,UAAiD,CAAC,KAAK,SAAS,IAAI;AAC7E,oBAAA,CAAC,UAAU,GAAG,gBAAgB,CAC5B,EAAE,CAAuB,MAAM,CAAC,UAAiD,CAAC,CAAC,CACpF;iBACF,CAAC;aACH,CAAC,EACF,EAAE,CACH,CAAA;SACF;AAED,QAAA,kBAAkB,CAAC,IAAoB,EAAA;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAE5C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,KAAI;AAC7D,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAAE,oBAAA,OAAO,GAAG,CAAA;AAE3C,gBAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBACnF,MAAM,KAAK,GAAG,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;gBAEhG,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK;iBACjC,CAAA;aACF,EAAE,EAA+C,CAAC,CAAA;SACpD;KACK,CAAA;AACV;;ACrGa,MAAA,oBAAoB,GAAG,CAIlC,SAA2D,KACzD;IACF,OAAO,MAAM,qBAAsB,SAAQ,SAAS,CAAA;AAGlD,QAAA,WAAA,CAAY,GAAG,MAAa,EAAA;AAC1B,YAAA,MAAM,OAAO,GAAyB,MAAM,GAAG,CAAC,CAAC,CAAA;AAEjD,YAAA,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;AAEhB,YAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ,CAAA;SACrF;QAED,MAAM,GAAG,CAAC,WAAuC,EAAA;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AACnD,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,KAAI;AACtD,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAAE,oBAAA,OAAO,GAAG,CAAA;AAE3C,gBAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AACnF,gBAAA,MAAM,KAAK,GACT,YAAY,EAAE,EAAE,GAAG,WAAW,CAAC,UAAsC,CAAC,EAAE,QAAQ,CAAC;oBACjF,WAAW,CAAC,UAAsC,CAAC,CAAA;gBAErD,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,CAAC,YAAY,CAAC,UAAU,GAAG;wBACzB,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC;wBAChE,KAAK;AACL,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;iBACF,CAAA;AACH,aAAC,EAAE,EAAE,CAAC,CACP,CAAA;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;YAE7C,IAAI,KAAK,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,aAAa,CAAC,CAAG,EAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAY,UAAA,CAAA,CAAC,CAAA;YAElF,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;SACpE;KACF,CAAA;AACH;;AC5Ca,MAAA,qBAAqB,GAAG,CAInC,SAA2D,KACzD;IACF,OAAO,MAAM,sBAAuB,SAAQ,SAAS,CAAA;QACnD,MAAM,IAAI,CAAC,OAKV,EAAA;YACC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;AAClD,YAAA,MAAM,cAAc,GAAG;AACrB,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAG,EAAA,IAAI,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC5G,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC;AAChB,sBAAE,EAAE;AACJ,sBAAE;AACE,wBAAA,KAAK,EAAE;4BACL,KAAK,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AACnE,4BAAA,IAAI,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAW,SAAA,CAAA;AAClC,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;qBACF,CAAC;aACP,CAAA;AACD,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;AAChC,gBAAA,GAAG,cAAc;aAClB,CAAA;AACD,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC;AAC9B,gBAAA;oBACE,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,OAAO,CAAC,MAAM;0BAClB,OAAO,CAAC,MAAM;6BACX,GAAG,CACF,CAAC,SAAS,KACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,KAAK,SAAS,CAAC;4BAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC,CACpF;6BACA,MAAM,CAAC,OAAO,CAAC;0BAClB,IAAI,CAAC,MAAM;oBACf,SAAS;AACV,iBAAA;AACD,gBAAA;AACE,oBAAA,SAAS,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAY,UAAA,CAAA;oBACxC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AAClC,oBAAA,SAAS,EAAE,cAAc;AAC1B,iBAAA;AACF,aAAA,CAAC,CAAA;YACF,MAAM,IAAI,GAAY,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAoC,KACpF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAChC,CAAA;AACD,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAA,UAAA,CAAY,CAAC,CAAC,SAAS,CAAC,KAAK,CAAA;AAEnE,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;SACvB;KACF,CAAA;AACH;;ACzDa,MAAA,qBAAqB,GAAG,CAKnC,SAA2D,KAczD;AACF,IAAA,OAAO,MAAM,sBACX,SAAQ,uBAAuB,CAC7B,oBAAoB,CAClB,qBAAqB,CACnB,uBAAuB,CAAC,uBAAuB,CAAC,SAAgD,CAAC,CAAC,CACnG,CACF,CACF,CAAA;KACyC,CAAA;AAC9C;;AC1CM,MAAO,qBAAsB,SAAQ,QAAQ,CAAA;AAIlD;;ACAK,MAAO,oBAAqB,SAAQ,OAAO,CAAA;AAahD,CAAA;AAFC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,uBAAuB,CAAC;;AACY,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA;;ACZ5C,MAAO,uBAAwB,SAAQ,UAAU,CAAA;AAMtD,CAAA;AALC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,oBAAoB,CAAC;8BACnB,oBAAoB,CAAA;AAAA,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAElC,UAAA,CAAA;AAAC,IAAA,IAAI,CAAC,MAAM,oBAAoB,CAAC;8BACf,oBAAoB,CAAA;AAAA,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;;ACTlC,MAAO,oBAAqB,SAAQ,OAAO,CAAA;AAAjD,IAAA,WAAA,GAAA;;QAME,IAAI,CAAA,IAAA,GAAK,EAAE,CAAA;QACX,IAAW,CAAA,WAAA,GAAK,KAAK,CAAA;KACtB;AAAA;;ACWK,MAAO,+BACX,SAAQ,qBAAqB,CAAC,iBAAiB,CAAwB,IAAI,CAAC,CAAC,CAAA;AAG7E,IAAA,WAAA,CACE,QAAgB,EAChB,WAAqC,EACpB,iBAAiD,EAAA;AAElE,QAAA,KAAK,CAAC;AACJ,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,KAAK,EAAE,QAAQ;YACf,QAAQ;YACR,WAAW;AACX,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAa,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE;AACtG,gBAAA,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;gBAC/C,MAAM;gBACN,aAAa;gBACb,OAAO;gBACP,WAAW;gBACX,MAAM;gBACN,MAAM;AACN,gBAAA,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE;AACnD,gBAAA,EAAE,mBAAmB,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AACvD,gBAAA,EAAE,yBAAyB,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,EAAE;AACpE,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE;AACrD,gBAAA;AACE,oBAAA,UAAU,EAAE;AACV,wBAAA,UAAU,EAAE,eAAe;wBAC3B,IAAI,EAAE,uBAAuB,CAAC,KAAK;wBACnC,IAAI,EAAE,CAAC,IAAa,EAAE,GAAwB,MAAM;4BAClD,KAAK,EAAE,GAAG,CAAC,eAAe;AAC1B,4BAAA,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;yBACtC,CAAC;AACF,wBAAA,eAAe,EAAE,CAAC,KAA0C,KAAI;4BAC9D,OAAO;gCACL,eAAe,EAAE,KAAK,CAAC,KAAK;AAC5B,gCAAA,aAAa,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;6BACjC,CAAA;yBACF;AACD,wBAAA,cAAc,EAAE,CAAC,QAAa,KAAI;4BAChC,OAAO;AACL,gCAAA,IAAI,QAAQ,CAAC,KAAK,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9D,gCAAA,IAAI,QAAQ,CAAC,IAAI,GAAG,EAAE,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;6BAC3D,CAAA;yBACF;AACF,qBAAA;AACF,iBAAA;gBACD,SAAS;AACT,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA;AACE,oBAAA,QAAQ,EAAE;AACR,wBAAA,UAAU,EAAE,UAAU;wBACtB,MAAM,EAAE,CAAC,YAAY,CAAC;wBACtB,IAAI,EAAE,CAAC,KAA+B,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAChG,wBAAA,EAAE,EAAE,CAAC,UAAoB,KACvB,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM;4BAC7B,UAAU,EAAE,CAAC,SAAS;AACvB,yBAAA,CAAC,CAAC;AACN,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,QAAQ,EAAE;AACR,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;AAChC,wBAAA,eAAe,EAAE,CAAC,KAAsB,MAA2B;AACjE,4BAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;yBAC1B,CAAC;AACH,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAA;QAnEe,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAgC;KAoEnE;IAEQ,MAAM,MAAM,CAAC,MAAqD,EAAA;QACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAEpC,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;KAC3F;IAEQ,MAAM,GAAG,CAAC,WAAuD,EAAA;QACxE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;cAChC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAC3E,cAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;KAC3B;IAEQ,MAAM,MAAM,CAAC,MAAqD,EAAA;AACzE,QAAA,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;AAC3D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACrD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;AACzC,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;AAEpD,QAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC9E,QAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AAE9E,QAAA,OAAO,QAAQ,CAAA;KAChB;AAED,IAAA,MAAM,iBAAiB,CAAC,IAAY,EAAE,IAAW,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAA;QAEtB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QAErF,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,sBAAsB,CAAC,kCAAkC,CAAC,CAAA;AACnF,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,sBAAsB,IAAI,CAAA,UAAA,CAAY,CAAC,CAAA;AAE3E,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;KACpB;AAED,IAAA,MAAM,oBAAoB,CAAC,WAAqB,EAAE,KAAK,GAAG,CAAC,EAAA;QACzD,IAAI,CAAC,WAAW,EAAE,MAAM;AAAE,YAAA,OAAO,EAAE,CAAA;AAEnC,QAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AACzF,QAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;QAC5E,MAAM,UAAU,GAAG,EAAE,CAAA;QAErB,IAAI,mBAAmB,CAAC,MAAM;YAC5B,UAAU,CAAC,IAAI,CACb,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC;gBAClB,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AAC9G,aAAA,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAC7B,CAAA;QACH,IAAI,gBAAgB,CAAC,MAAM;YACzB,UAAU,CAAC,IAAI,CACb,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC;gBAClB,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AAClG,aAAA,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAC7B,CAAA;QAEH,IAAI,CAAC,UAAU,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAA;AAEjC,QAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,UAAU,CAAC,GAAG,CAAC,OAAO,QAAQ,MAAM;YAClC,QAAQ;AACR,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACxE,CAAC,CAAC,CACJ,CAAA;AAED,QAAA,OAAO,YAAY,CAAA;KACpB;AAED,IAAA,MAAM,aAAa,CAAC,QAAkB,EAAE,OAAgD,EAAA;AACtF,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM;AAAE,YAAA,OAAO,EAAE,CAAA;QAE1C,MAAM,QAAQ,GAAG,EAAE,CAAA;AACnB,QAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC/D,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE;AACpD,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,IAAI,OAAO,EAAE,QAAQ,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACxF,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,IAAI;gBACJ,MAAM;gBACN,MAAM;gBACN,QAAQ;gBACR,YAAY;gBACZ,OAAO;gBACP,WAAW;gBACX,8BAA8B;gBAC9B,iBAAiB;gBACjB,OAAO;gBACP,WAAW;gBACX,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,OAAO;gBACP,WAAW;gBACX,aAAa;gBACb,OAAO;gBACP,KAAK;gBACL,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,eAAe;AAChB,aAAA;YACD,IAAI,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC;AACjE,SAAA,CAAC,CAAA;AAEF,QAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;AAE9B,QAAA,OAAO,QAAQ,CAAA;KAChB;IAEO,MAAM,KAAK,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;AAEjC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAElE,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE;AAAE,YAAA,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;AAEvC,QAAA,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,CAAA,UAAA,CAAY,CAAC,CAAA;KAC5D;AAEO,IAAA,MAAM,cAAc,CAC1B,UAAkB,EAClB,EAAE,QAAQ,EAAmE,EAAA;QAE7E,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;YACxD,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,2BAA2B;AACjC,oBAAA,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE;AAC5C,iBAAA;AACF,aAAA,CAAC,CAAA;AAEF,YAAA,OAAO,EAAE,CAAA;AACV,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAElD,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;QAEpE,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE;AAC5C,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,kCAAkC;AACxC,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACnG,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,QAAQ,CAAA;KAC1B;AAEO,IAAA,MAAM,cAAc,CAC1B,UAAkB,EAClB,EAAE,QAAQ,EAAmE,EAAA;QAE7E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAElD,IAAI,CAAC,SAAS,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAA;QAEpC,MAAM,IAAI,CAAC,QAAQ,CAAC,gCAAgC,EAAE,CAAC,aAAa,CAAC,EAAE;AACrE,YAAA,UAAU,EAAE;AACV,gBAAA,KAAK,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;AAClC,gBAAA,IAAI,EAAE,oCAAoC;AAC1C,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;AACtC,gBAAA,IAAI,EAAE,6BAA6B;AACnC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,QAAQ,CAAA;KAC1B;AACF;;AChPK,MAAO,8BACX,SAAQ,qBAAqB,CAAC,iBAAiB,CAAuB,IAAI,CAAC,CAAC,CAAA;IAsB5E,WAAY,CAAA,QAAgB,EAAE,WAAqC,EAAA;AACjE,QAAA,KAAK,CAAC;AACJ,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,KAAK,EAAE,oBAAoB;YAC3B,QAAQ;YACR,WAAW;AACX,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC,CAAA;AAygBI,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,KAA0B,MAAqB;AAC1E,YAAA,GAAG,EAAE,CAAgB,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;YACtG,SAAS,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,UAAU;YAC/F,SAAS,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,UAAU;YAC/F,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,OAAO,EAAE,KAAK,CAAC,QAAQ;AACxB,SAAA,CAAC,CAAA;AAEM,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,MAAqB,MAA2B;AAC5E,YAAA,GAAG,EAAE,CAAsB,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;YACxG,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,QAAQ,EAAE,MAAM,CAAC,OAAO;AACzB,SAAA,CAAC,CAAA;AAnhBA,QAAA,MAAM,YAAY,GAA8C;AAC9D,YAAA,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE;AACtF,YAAA,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AAC/C,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE;AAChD,YAAA,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;AAChC,YAAA,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;AAC9B,YAAA,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;YAC9B,OAAO;AACP,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA;AACE,gBAAA,WAAW,EAAE;AACX,oBAAA,UAAU,EAAE,aAAa;oBACzB,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,MAAM;wBAC5B,WAAW;wBACX,aAAa,EAAE,IAAI,CAAC,aAAa;wBACjC,UAAU,EAAE,IAAI,CAAC,YAAY;wBAC7B,QAAQ,EAAE,IAAI,CAAC,UAAU;wBACzB,KAAK,EAAE,IAAI,CAAC,iBAAiB;qBAC9B,CAAC;AACF,oBAAA,cAAc,EAAE,CAAC,QAAQ,KAAI;wBAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAA;wBAE/C,OAAO;AACL,4BAAA,IAAI,OAAO,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;AACjE,4BAAA,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;AACtE,4BAAA,IAAI,OAAO,CAAC,UAAU,IAAI;gCACxB,YAAY,EAAE,OAAO,CAAC,UAAU;6BACjC,CAAC;AACF,4BAAA,IAAI,OAAO,CAAC,QAAQ,IAAI;gCACtB,UAAU,EAAE,OAAO,CAAC,QAAQ;6BAC7B,CAAC;AACF,4BAAA,IAAI,OAAO,CAAC,KAAK,IAAI;gCACnB,iBAAiB,EAAE,OAAO,CAAC,KAAK;6BACjC,CAAC;yBACH,CAAA;qBACF;AACD,oBAAA,eAAe,EAAE,CAAC,eAAe,MAAM;AACrC,wBAAA,IAAI,eAAe,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,CAAC;AACjF,wBAAA,IAAI,eAAe,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE,CAAC;AACtF,wBAAA,IAAI,eAAe,CAAC,UAAU,IAAI;4BAChC,YAAY,EAAE,eAAe,CAAC,UAAU;yBACzC,CAAC;AACF,wBAAA,IAAI,eAAe,CAAC,QAAQ,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC;AACzE,wBAAA,IAAI,eAAe,CAAC,KAAK,IAAI,EAAE,iBAAiB,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC;qBAC3E,CAAC;AACH,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE;AAClD,YAAA,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AAC9C,YAAA,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC1C,YAAA,EAAE,gBAAgB,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,EAAE;AACzD,YAAA,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AAC/C,YAAA;AACE,gBAAA,MAAM,EAAE;AACN,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,EAAE,EAAE,CAAC,KAAe,MAAM,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAK,EAAA,EAAA,KAAK,EAAE,IAAI,GAAG,CAAK,GAAA,CAAA,CAAC,IAAI,EAAE,CAAI,EAAA,CAAA,GAAG,IAAI,CAAC;AAC1F,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,UAAU,EAAE;AACV,oBAAA,UAAU,EAAE,YAAY;AACxB,oBAAA,EAAE,EAAE,CAAC,KAAK,MAAM,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAK,EAAA,EAAA,KAAK,EAAE,IAAI,GAAG,CAAK,GAAA,CAAA,CAAC,IAAI,EAAE,CAAI,EAAA,CAAA,GAAG,IAAI,CAAC;AAChF,iBAAA;AACF,aAAA;YACD,MAAM;AACN,YAAA;AACE,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,OAAO;oBACnB,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,MAAiB;wBACjC,KAAK;wBACL,SAAS,EAAE,IAAI,CAAC,UAAU;wBAC1B,4BAA4B,EAAE,IAAI,CAAC,8BAA8B;wBACjE,eAAe,EAAE,IAAI,CAAC,gBAAgB;qBACvC,CAAC;AACF,oBAAA,cAAc,EAAE,CAAC,QAAQ,KAAI;wBAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAA;wBAE/C,OAAO;4BACL,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;4BACzE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AACxF,4BAAA,IAAI,CAAC,OAAO,CAAC,4BAA4B,IAAI,OAAO,CAAC,4BAA4B,KAAK,CAAC,KAAK;gCAC1F,8BAA8B,EAAE,OAAO,CAAC,4BAA4B;6BACrE,CAAC;AACF,4BAAA,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,KAAK,CAAC,KAAK;gCAChE,gBAAgB,EAAE,OAAO,CAAC,eAAe;6BAC1C,CAAC;yBACH,CAAA;qBACF;AACD,oBAAA,eAAe,EAAE,CAAC,SAAS,MAAM;AAC/B,wBAAA,IAAI,SAAS,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACxD,wBAAA,IAAI,SAAS,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;AACpE,wBAAA,IAAI,SAAS,CAAC,4BAA4B,IAAI,CAAC,IAAI;4BACjD,8BAA8B,EAAE,SAAS,CAAC,4BAA4B;yBACvE,CAAC;AACF,wBAAA,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC;qBACvF,CAAC;AACH,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA,EAAE,4BAA4B,EAAE,EAAE,UAAU,EAAE,gCAAgC,EAAE,EAAE;AAClF,YAAA,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE;YACvD,WAAW;YACX,KAAK;AACL,YAAA;AACE,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,OAAO;oBACnB,IAAI,EAAE,CAAC,QAAgB,MAAM,EAAE,QAAQ,EAAE,CAAC;oBAC1C,EAAE,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,QAAQ,CAAC;AAClE,iBAAA;AACF,aAAA;YACD,MAAM;YACN,MAAM;YACN,OAAO;YACP,QAAQ;YACR,QAAQ;AACR,YAAA,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,CAAC,KAAK,EAAE,EAAE;AACrE,YAAA,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE;AACnC,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA;AACE,gBAAA,IAAI,EAAE;AACJ,oBAAA,UAAU,EAAE,mBAAmB;AAC/B,oBAAA,OAAO,EAAE;AACP,wBAAA,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACzB,wBAAA,UAAU,EAAE,yBAAyB;AACtC,qBAAA;AACD,oBAAA,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5C,oBAAA,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AAC1C,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE;SACpD,CAAA;QAED,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,GAAG,YAAY;AACf,YAAA;AACE,gBAAA,UAAU,EAAE;AACV,oBAAA,UAAU,EAAE,YAAY;oBACxB,MAAM,EAAE,CAAC,aAAa,CAAC;AACvB,oBAAA,eAAe,EAAE,CAAC,KAAK,MAAM;wBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;qBAC5E,CAAC;AACF,oBAAA,EAAE,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,CAAC;oBAC/D,IAAI,EAAE,CAAC,UAAqC,KAC1C,UAAU,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;AACzE,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,WAAW,EAAE;AACX,oBAAA,UAAU,EAAE,cAAc;AAC1B,oBAAA,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;AACrC,oBAAA,MAAM,EAAE;AACN,wBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,wBAAA,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE;wBAClD,UAAU;AACV,wBAAA,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;AACrG,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,SAAS;AACrB,oBAAA,gBAAgB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;oBACtC,MAAM,EAAE,IAAI,CAAC,aAAa;AAC3B,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE;AACR,oBAAA,UAAU,EAAE,UAAU;AACtB,oBAAA,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;AAChC,oBAAA,eAAe,EAAE,CAAC,KAAK,MAAM;AAC3B,wBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;qBAC1B,CAAC;AACH,iBAAA;AACF,aAAA;SACF,CAAA;KACF;AA5MD,IAAA,IAAY,aAAa,GAAA;QACvB,OAAO;YACL,IAAI;YACJ,MAAM;YACN,MAAM;YACN,QAAQ;YACR,OAAO;YACP,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,OAAO;AACP,YAAA,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE;YACzC,QAAQ;AACR,YAAA,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;AACvC,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,YAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;SAC5C,CAAA;KACF;IA6LQ,MAAM,MAAM,CAAC,MAAoD,EAAA;QACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;AACpC,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAChC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CACzF,CAAA;QAED,IAAI;YACF,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;AAChF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;AAErC,YAAA,MAAM,KAAK,CAAA;AACZ,SAAA;AAED,QAAA,OAAO,OAAO,CAAA;KACf;IAEQ,MAAM,GAAG,CAAC,WAAsD,EAAA;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;cACzC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;cACzE,MAAM,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEhC,IAAI,OAAO,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,oCAAoC,CAAC,CAAA;AAEpF,QAAA,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;AAEnF,QAAA,OAAO,OAAO,CAAA;KACf;IAEQ,MAAM,IAAI,CACjB,MAAmD,EAAA;AAEnD,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;QACpD,MAAM,UAAU,GACd,MAAM;AACL,YAAA,IAAI,CAAC,MAAM;AACT,iBAAA,GAAG,CAAC,CAAC,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;iBAChF,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS,CAGpC,CAAA;QAEN,OAAO,KAAK,CAAC,IAAI,CAAC;AAChB,YAAA,GAAG,OAAO;AACV,YAAA,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE;AAC9D,YAAA,MAAM,EAAE,UAAU;AACnB,SAAA,CAAC,CAAA;KACH;IAED,MAAM,SAAS,CAAC,IAAY,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,OAAO,EAAE;gBACP,IAAI;AACL,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAErC,QAAA,OAAO,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAE9D,QAAA,OAAO,OAAO,CAAA;KACf;IAEQ,MAAM,MAAM,CAAC,MAAoD,EAAA;QACxE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;AACzF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACrD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;AAEnD,QAAA,OAAO,CAAC,UAAU,GAAG,UAAU,KAAK,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;AACrF,QAAA,OAAO,CAAC,WAAW,GAAG,WAAW,KAAK,MAAM,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;AACzF,QAAA,OAAO,CAAC,OAAO,GAAG,OAAO,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;AACzE,QAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AAE7E,QAAA,OAAO,OAAO,CAAA;KACf;IAED,MAAM,YAAY,CAAC,MAA0B,EAAA;AAC3C,QAAA,MAAM,iBAAiB,GAAG;YACxB,MAAM,EACJ,MAAM,KAAK,SAAS;kBAChB,EAAE,CAAC,kBAAkB,CAAC,MAAM,GAAG,IAAI,EAAE;kBACrC,EAAE,CAAC,kBAAkB,CAAC,MAAM,GAAG,MAAM,KAAK,UAAU,EAAE;SAC7D,CAAA;AACD,QAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CACxC,SAAS,EACT,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,EACzF;AACE,YAAA,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC3F,SAAA,CACF,CAAA;QAED,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,OAAgC,EAAE,OAA6B,KAAK;AACnE,YAAA,GAAG,OAAO;YACV,GAAG,OAAO,CAAC,OAAO;iBACf,MAAM,CACL,CAAC,MAAM,KACL,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;iBACjE,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;iBAChD,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CACrD;AACA,iBAAA,GAAG,CAAC,CAAC,MAAM,MAAM;AAChB,gBAAA,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBACjC,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,UAAU,EAAE,OAAO,CAAC,GAAG;AACxB,aAAA,CAAC,CAAC;SACN,EACD,EAA6B,CAC9B,CAAA;KACF;AAEO,IAAA,MAAM,gBAAgB,CAC5B,SAAiB,EACjB,EAAE,UAAU,EAAoE,EAAA;QAEhF,IAAI,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC5D,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,2BAA2B;AACjC,oBAAA,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;AAC1C,iBAAA;AACF,aAAA,CAAC,CAAA;AAEF,YAAA,OAAO,EAAE,CAAA;AACV,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAEpD,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;QAExE,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;AAC1C,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE;AAChE,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,kCAAkC;AACxC,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACtG,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,UAAU,CAAA;KAC5B;AAEO,IAAA,MAAM,iBAAiB,CAC7B,SAAiB,EACjB,EAAE,WAAW,EAAqE,EAAA;QAElF,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAA;QAErD,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,eAAe,CAAC,EAAE;AAC3D,YAAA,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;AAC9C,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,eAAe,CAAC,EAAE;AAC3D,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,6BAA6B;AACnC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;AAChD,oBAAA,cAAc,EAAE,SAAS;oBACzB,UAAU,EAAE,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;oBACzD,QAAQ,EAAE,UAAU,CAAC,QAAQ;AAC9B,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,WAAW,CAAA;KAC7B;AAEO,IAAA,MAAM,aAAa,CACzB,SAAiB,EACjB,EAAE,OAAO,EAAiE,EAAA;AAE1E,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE,CAAA;QACvB,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AACtD,YAAA,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,UAAU,KAAI;gBACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;gBAE3D,OAAO,MAAM,EAAE,EAAE,CAAA;aAClB,CAAC,CACH,CAAA;YAED,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,eAAe,CAAC,EAAE;gBAC9D,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9G,aAAA,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACzF,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;QAEjD,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;AAElE,QAAA,OAAO,OAAO,CAAC,GAAG,CAChB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,UAAU,KAAI;YACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;YAE3D,IAAI,MAAM,CAAC,EAAE;AACX,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAC3B,CACE,MAAM,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE,IAAI,CAAC,aAAa,EAAE;AACrE,oBAAA,UAAU,EAAE;AACV,wBAAA,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;AACxB,wBAAA,IAAI,EAAE,iCAAiC;AACvC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACtE,wBAAA,IAAI,EAAE,0BAA0B;AAChC,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF,iBAAA,CAAC,EACF,2BAA2B,CAC9B,CAAA;AAEH,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAC3B,CACE,MAAM,IAAI,CAAC,QAAQ,CAAC,2BAA2B,EAAE,IAAI,CAAC,aAAa,EAAE;AACnE,gBAAA,MAAM,EAAE;oBACN,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AACtF,oBAAA,IAAI,EAAE,6BAA6B;AACnC,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA;AACF,aAAA,CAAC,EACF,yBAAyB,CAC5B,CAAA;SACF,CAAC,CACH,CAAA;KACF;AAEO,IAAA,MAAM,cAAc,CAC1B,SAAiB,EACjB,EAAE,QAAQ,EAAkE,EAAA;QAE5E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAElD,IAAI,CAAC,SAAS,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAA;QAEpC,MAAM,IAAI,CAAC,QAAQ,CAAC,+BAA+B,EAAE,CAAC,YAAY,CAAC,EAAE;AACnE,YAAA,UAAU,EAAE;AACV,gBAAA,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;AAChC,gBAAA,IAAI,EAAE,mCAAmC;AACzC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC;AACrC,gBAAA,IAAI,EAAE,4BAA4B;AAClC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;QAEF,OAAO,SAAS,CAAC,QAAQ,CAAA;KAC1B;IAEO,MAAM,KAAK,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;AAEjC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAElE,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE;AAAE,YAAA,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;AAEvC,QAAA,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,CAAA,UAAA,CAAY,CAAC,CAAA;KAC3D;IAEO,MAAM,oBAAoB,CAAC,SAAiB,EAAA;AAClD,QAAA,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,EAAE;AACtF,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;AAC/B,iBAAA;AACD,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAA2B,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;KACzF;AAEO,IAAA,MAAM,UAAU,CAAC,MAAqB,EAAE,SAAiB,EAAA;QAC/D,IAAI,MAAM,CAAC,EAAE;AAAE,YAAA,OAAO,MAAM,CAAA;AAE5B,QAAA,IAAI,YAA2B,CAAA;QAE/B,IAAI,MAAM,CAAC,QAAQ;AAAE,YAAA,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC9G,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK;YAChD,YAAY,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAE7G,OAAO,YAAY,IAAI,MAAM,CAAA;KAC9B;AAEO,IAAA,MAAM,mBAAmB,CAAC,QAAgB,EAAE,SAAiB,EAAE,OAAgB,EAAA;AACrF,QAAA,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,EAAE;AACtF,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;AAC9B,oBAAA,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC5B,oBAAA,IAAI,OAAO,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;AAC/C,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAyB,uBAAA,CAAA;AAC/B,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KAC1D;IAEO,MAAM,yBAAyB,CACrC,MAAc,EACd,KAAa,EACb,SAAiB,EACjB,OAAgB,EAAA;AAEhB,QAAA,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,EAAE;AACtF,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;AAC9B,oBAAA,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;AACvB,oBAAA,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;AACrB,oBAAA,IAAI,OAAO,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;AAC/C,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAyB,uBAAA,CAAA;AAC/B,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KAC1D;AAeF;;AC5kBK,MAAO,8BACX,SAAQ,qBAAqB,CAAC,iBAAiB,CAAuB,IAAI,CAAC,CAAC,CAAA;IAG5E,WAAY,CAAA,QAAgB,EAAE,WAAqC,EAAA;AACjE,QAAA,KAAK,CAAC;AACJ,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,KAAK,EAAE,oBAAoB;YAC3B,QAAQ;YACR,WAAW;AACX,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAa,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE;AACtG,gBAAA,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;AAC/C,gBAAA;AACE,oBAAA,SAAS,EAAE;AACT,wBAAA,UAAU,EAAE,iBAAiB;AAC7B,wBAAA,EAAE,EAAE,CAAC,KAAa,KAAK,CAAC,KAAK;wBAC7B,IAAI,EAAE,CAAC,KAAa,KAAK,KAAK,EAAE,QAAQ,EAAE;AAC3C,qBAAA;AACF,iBAAA;AACD,gBAAA,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;AAC9B,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA;AACE,oBAAA,KAAK,EAAE;AACL,wBAAA,UAAU,EAAE,OAAO;wBACnB,IAAI,EAAE,CAAC,KAAa,EAAE,IAAyB,MAAiB;4BAC9D,KAAK;4BACL,SAAS,EAAE,IAAI,CAAC,UAAU;4BAC1B,4BAA4B,EAAE,IAAI,CAAC,8BAA8B;4BACjE,eAAe,EAAE,IAAI,CAAC,gBAAgB;yBACvC,CAAC;AACF,wBAAA,cAAc,EAAE,CAAC,QAAQ,KAAI;4BAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAA;4BAE/C,OAAO;gCACL,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;gCACzE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AACxF,gCAAA,IAAI,CAAC,OAAO,CAAC,4BAA4B,IAAI,OAAO,CAAC,4BAA4B,KAAK,CAAC,KAAK;oCAC1F,8BAA8B,EAAE,OAAO,CAAC,4BAA4B;iCACrE,CAAC;AACF,gCAAA,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,KAAK,CAAC,KAAK;oCAChE,gBAAgB,EAAE,OAAO,CAAC,eAAe;iCAC1C,CAAC;6BACH,CAAA;yBACF;AACD,wBAAA,eAAe,EAAE,CAAC,SAAwC,MAAM;AAC9D,4BAAA,IAAI,SAAS,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACxD,4BAAA,IAAI,SAAS,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;AACpE,4BAAA,IAAI,SAAS,CAAC,4BAA4B,IAAI,CAAC,IAAI;gCACjD,8BAA8B,EAAE,SAAS,CAAC,4BAA4B;6BACvE,CAAC;AACF,4BAAA,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC;yBACvF,CAAC;AACH,qBAAA;AACF,iBAAA;AACD,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA,EAAE,4BAA4B,EAAE,EAAE,UAAU,EAAE,gCAAgC,EAAE,EAAE;AAClF,gBAAA,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE;gBACvD,KAAK;AACL,gBAAA;AACE,oBAAA,KAAK,EAAE;AACL,wBAAA,UAAU,EAAE,OAAO;wBACnB,IAAI,EAAE,CAAC,QAAgB,MAAM,EAAE,QAAQ,EAAE,CAAC;wBAC1C,EAAE,EAAE,CAAC,KAAoC,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,QAAQ,CAAC;AACjG,qBAAA;AACF,iBAAA;gBACD,QAAQ;AACR,gBAAA,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAiB,SAAS,EAAE,EAAE;gBAC5D,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,KAAK,EAAE,IAAI,EAAE,MAAiB,SAAS,EAAE,EAAE;AAClG,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;AAC3C,gBAAA;AACE,oBAAA,KAAK,EAAE;AACL,wBAAA,UAAU,EAAE,OAAO;wBACnB,IAAI,EAAE,uBAAuB,CAAC,KAAK;AACpC,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAA;KACH;IAEQ,MAAM,GAAG,CAAC,WAAsD,EAAA;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;cACzC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;cACzE,MAAM,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEhC,IAAI,CAAC,OAAO,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,aAAa,CAAC,CAAA,kCAAA,CAAoC,CAAC,CAAA;AAErF,QAAA,OAAO,OAAO,CAAA;KACf;IAEQ,MAAM,IAAI,CACjB,MAAmD,EAAA;QAEnD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;QAE5C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;KACrG;IAEQ,MAAM,MAAM,CAAC,MAAoD,EAAA;AACxE,QAAA,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;AAClD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;QACxE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;AACjD,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;AAEnD,QAAA,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAA;AAE/C,QAAA,OAAO,OAAO,CAAA;KACf;IAEO,MAAM,KAAK,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,CAAA;AAEjC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAElE,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE;AAAE,YAAA,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;AAEvC,QAAA,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,CAAA,UAAA,CAAY,CAAC,CAAA;KAC3D;AACF;;ACvID;;AAEG;;;;"}