{"version":3,"file":"IFCLoader.umd.cjs","sources":["../src/IFC/components/IFCModel.ts","../src/IFC/components/IFCParser.ts","../src/IFC/components/subsets/ItemsMap.ts","../src/IFC/components/subsets/SubsetUtils.ts","../src/IFC/components/subsets/SubsetCreator.ts","../src/IFC/components/subsets/SubsetManager.ts","../src/IFC/BaseDefinitions.ts","../src/IFC/components/properties/BasePropertyManager.ts","../src/IFC/components/properties/WebIfcPropertyManager.ts","../src/IFC/components/properties/JSONPropertyManager.ts","../src/IFC/components/properties/GeometryTypes.ts","../src/IFC/components/properties/PropertySerializer.ts","../src/IFC/components/properties/PropertyManager.ts","../src/IFC/components/TypeManager.ts","../src/IFC/components/BvhManager.ts","../src/IFC/web-workers/BaseDefinitions.ts","../src/IFC/web-workers/serializer/Vector.ts","../src/IFC/web-workers/serializer/IfcGeometry.ts","../src/IFC/web-workers/serializer/FlatMesh.ts","../src/IFC/web-workers/serializer/FlatMeshVector.ts","../src/IFC/web-workers/serializer/Material.ts","../src/IFC/web-workers/serializer/Geometry.ts","../src/IFC/web-workers/serializer/Mesh.ts","../src/IFC/web-workers/serializer/Serializer.ts","../src/IFC/web-workers/handlers/PropertyHandler.ts","../src/IFC/web-workers/handlers/WebIfcHandler.ts","../src/IFC/web-workers/handlers/WorkerStateHandler.ts","../src/IFC/indexedDB/IndexedDatabase.ts","../src/IFC/web-workers/handlers/ParserHandler.ts","../src/IFC/web-workers/IFCWorkerHandler.ts","../src/IFC/components/MemoryCleaner.ts","../src/IFC/components/IFCUtils.ts","../src/IFC/components/sequence/Data.ts","../src/IFC/components/IFCManager.ts","../src/IFCLoader.ts"],"sourcesContent":["import { BufferGeometry, Material, Mesh, Object3D, Scene } from 'three';\r\nimport { IFCManager } from './IFCManager';\r\nimport { BaseSubsetConfig } from '../BaseDefinitions';\r\n\r\nconst nullIfcManagerErrorMessage = 'IfcManager is null!';\r\n\r\n/**\r\n * Represents an IFC model. This object is returned by the `IFCLoader` after loading an IFC.\r\n * @geometry `THREE.Buffergeometry`, see Three.js documentation.\r\n * @materials `THREE.Material[]`, see Three.js documentation.\r\n * @manager contains all the logic to work with IFC.\r\n */\r\nexport class IFCModel extends Mesh {\r\n\r\n    private static modelIdCounter = 0;\r\n\r\n    static dispose() {\r\n        IFCModel.modelIdCounter = 0;\r\n    }\r\n\r\n    modelID = IFCModel.modelIdCounter++;\r\n    ifcManager: IFCManager | null = null;\r\n\r\n    /**\r\n     * @deprecated `IfcModel` is already a mesh; you can place it in the scene directly.\r\n     */\r\n    mesh = this;\r\n\r\n    setIFCManager(manager: IFCManager) {\r\n        this.ifcManager = manager;\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.setWasmPath` instead.\r\n     *\r\n     * Sets the relative path of web-ifc.wasm file in the project.\r\n     * Beware: you **must** serve this file in your page; this means\r\n     * that you have to copy this files from *node_modules/web-ifc*\r\n     * to your deployment directory.\r\n     *\r\n     * If you don't use this methods,\r\n     * IFC.js assumes that you are serving it in the root directory.\r\n     *\r\n     * Example if web-ifc.wasm is in dist/wasmDir:\r\n     * `ifcLoader.setWasmPath(\"dist/wasmDir/\");`\r\n     *\r\n     * @path Relative path to web-ifc.wasm.\r\n     */\r\n    setWasmPath(path: string) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        this.ifcManager.setWasmPath(path);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.close` instead.\r\n     *\r\n     * Closes the specified model and deletes it from the [scene](https://threejs.org/docs/#api/en/scenes/Scene).\r\n     * @scene Scene where the model is (if it's located in a scene).\r\n     */\r\n    close(scene?: Scene) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        this.ifcManager.close(this.modelID, scene);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.getExpressId` instead.\r\n     *\r\n     * Gets the **Express ID** to which the given face belongs.\r\n     * This ID uniquely identifies this entity within this IFC file.\r\n     * @geometry The geometry of the IFC model.\r\n     * @faceIndex The index of the face of a geometry.You can easily get this index using the [Raycaster](https://threejs.org/docs/#api/en/core/Raycaster).\r\n     */\r\n    getExpressId(geometry: BufferGeometry, faceIndex: number) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        return this.ifcManager.getExpressId(geometry, faceIndex);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.getAllItemsOfType` instead.\r\n     *\r\n     * Returns all items of the specified type. You can import\r\n     * the types from *web-ifc*.\r\n     *\r\n     * Example to get all the standard walls of a project:\r\n     * ```js\r\n     * import { IFCWALLSTANDARDCASE } from 'web-ifc';\r\n     * const walls = ifcLoader.getAllItemsOfType(IFCWALLSTANDARDCASE);\r\n     * ```\r\n     * @type The type of IFC items to get.\r\n     * @verbose If false (default), this only gets IDs. If true, this also gets the native properties of all the fetched items.\r\n     */\r\n    getAllItemsOfType(type: number, verbose: boolean) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        return this.ifcManager.getAllItemsOfType(this.modelID, type, verbose);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.getItemProperties` instead.\r\n     *\r\n     * Gets the native properties of the given element.\r\n     * @id Express ID of the element.\r\n     * @recursive Wether you want to get the information of the referenced elements recursively.\r\n     */\r\n    getItemProperties(id: number, recursive = false) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        return this.ifcManager.getItemProperties(this.modelID, id, recursive);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.getPropertySets` instead.\r\n     *\r\n     * Gets the [property sets](https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifckernel/lexical/ifcpropertyset.htm)\r\n     * assigned to the given element.\r\n     * @id Express ID of the element.\r\n     * @recursive If true, this gets the native properties of the referenced elements recursively.\r\n     */\r\n    getPropertySets(id: number, recursive = false) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        return this.ifcManager.getPropertySets(this.modelID, id, recursive);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.getTypeProperties` instead.\r\n     *\r\n     * Gets the properties of the type assigned to the element.\r\n     * For example, if applied to a wall (IfcWall), this would get back the information\r\n     * contained in the IfcWallType assigned to it, if any.\r\n     * @id Express ID of the element.\r\n     * @recursive If true, this gets the native properties of the referenced elements recursively.\r\n     */\r\n    getTypeProperties(id: number, recursive = false) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        return this.ifcManager.getTypeProperties(this.modelID, id, recursive);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.getIfcType` instead.\r\n     *\r\n     * Gets the ifc type of the specified item.\r\n     * @id Express ID of the element.\r\n     */\r\n    getIfcType(id: number) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        return this.ifcManager.getIfcType(this.modelID, id);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.getSpatialStructure` instead.\r\n     *\r\n     * Gets the spatial structure of the project. The\r\n     * [spatial structure](https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifcproductextension/lexical/ifcspatialstructureelement.htm)\r\n     * is the hierarchical structure that organizes every IFC project (all physical items\r\n     * are referenced to an element of the spatial structure). It is formed by\r\n     * one IfcProject that contains one or more IfcSites, that contain one or more\r\n     * IfcBuildings, that contain one or more IfcBuildingStoreys, that contain\r\n     * one or more IfcSpaces.\r\n     */\r\n    getSpatialStructure() {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        return this.ifcManager.getSpatialStructure(this.modelID);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.getSubset` instead.\r\n     *\r\n     * Gets the mesh of the subset with the specified [material](https://threejs.org/docs/#api/en/materials/Material).\r\n     * If no material is given, this returns the subset with the original materials.\r\n     * @material Material assigned to the subset, if any.\r\n     */\r\n    getSubset(material?: Material) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        return this.ifcManager.getSubset(this.modelID, material);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.removeSubset` instead.\r\n     *\r\n     * Removes the specified subset.\r\n     * @parent The parent where the subset is (can be any `THREE.Object3D`).\r\n     * @material Material assigned to the subset, if any.\r\n     */\r\n    removeSubset(material?: Material, customID?: string) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        this.ifcManager.removeSubset(this.modelID, material, customID);\r\n    }\r\n\r\n    /**\r\n     * @deprecated Use `IfcModel.ifcManager.createSubset` instead.\r\n     *\r\n     * Creates a new geometric subset.\r\n     * @config A configuration object with the following options:\r\n     * - **scene**: `THREE.Object3D` where the model is located.\r\n     * - **ids**: Express IDs of the items of the model that will conform the subset.\r\n     * - **removePrevious**: Wether to remove the previous subset of this model with this material.\r\n     * - **material**: (optional) Wether to apply a material to the subset\r\n     */\r\n    createSubset(config: BaseSubsetConfig) {\r\n        if (this.ifcManager === null) throw new Error(nullIfcManagerErrorMessage);\r\n        const modelConfig = { ...config, modelID: this.modelID };\r\n        return this.ifcManager.createSubset(modelConfig);\r\n    }\r\n}\r\n","//@ts-ignore\r\nimport {\r\n    PlacedGeometry,\r\n    Color as ifcColor,\r\n    IfcGeometry,\r\n    IFCSPACE,\r\n    FlatMesh,\r\n    IFCOPENINGELEMENT,\r\n    IFCPRODUCTDEFINITIONSHAPE\r\n} from 'web-ifc';\r\nimport { IfcState, IfcMesh } from '../BaseDefinitions';\r\nimport {\r\n    Color,\r\n    MeshLambertMaterial,\r\n    DoubleSide,\r\n    Matrix4,\r\n    BufferGeometry,\r\n    BufferAttribute,\r\n    Mesh\r\n} from 'three';\r\nimport { mergeBufferGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils';\r\nimport { BvhManager } from './BvhManager';\r\nimport { IFCModel } from './IFCModel';\r\n\r\nexport interface ParserProgress {\r\n    loaded: number;\r\n    total: number;\r\n}\r\n\r\nexport interface OptionalCategories {\r\n    [category: number]: boolean\r\n}\r\n\r\nexport interface ParserAPI {\r\n    parse(buffer: any, coordinationMatrix?: number[]): Promise<IFCModel>;\r\n\r\n    getAndClearErrors(_modelId: number): void;\r\n\r\n    setupOptionalCategories(config: OptionalCategories): Promise<void>;\r\n\r\n    optionalCategories: OptionalCategories;\r\n}\r\n\r\nexport interface GeometriesByMaterial {\r\n    [materialID: string]: {\r\n        material: MeshLambertMaterial,\r\n        geometries: BufferGeometry[]\r\n    }\r\n}\r\n\r\n/**\r\n * Reads all the geometry of the IFC file and generates an optimized `THREE.Mesh`.\r\n */\r\nexport class IFCParser implements ParserAPI {\r\n    loadedModels = 0;\r\n\r\n    optionalCategories: OptionalCategories = {\r\n        [IFCSPACE]: true,\r\n        [IFCOPENINGELEMENT]: false\r\n    };\r\n\r\n    private geometriesByMaterials: GeometriesByMaterial = {};\r\n\r\n    private loadingState = {\r\n        total: 0,\r\n        current: 0,\r\n        step: 0.1\r\n    }\r\n\r\n    // Represents the index of the model in webIfcAPI\r\n    private currentWebIfcID = -1;\r\n    // When using JSON data for optimization, webIfcAPI is reinitialized every time a model is loaded\r\n    // This means that currentID is always 0, while currentModelID is the real index of stored models\r\n    private currentModelID = -1;\r\n\r\n    // BVH is optional because when using workers we have to apply it in the main thread,\r\n    // once the model has been serialized and reconstructed\r\n    constructor(private state: IfcState, private BVH?: BvhManager) {\r\n    }\r\n\r\n    async setupOptionalCategories(config: OptionalCategories) {\r\n        this.optionalCategories = config;\r\n    }\r\n\r\n    async parse(buffer: any, coordinationMatrix?: number[]) {\r\n        if (this.state.api.wasmModule === undefined) await this.state.api.Init();\r\n        await this.newIfcModel(buffer);\r\n        this.loadedModels++;\r\n        if (coordinationMatrix) {\r\n            await this.state.api.SetGeometryTransformation(this.currentWebIfcID, coordinationMatrix);\r\n        }\r\n        return this.loadAllGeometry(this.currentWebIfcID);\r\n    }\r\n\r\n    getAndClearErrors(_modelId: number) {\r\n        // return this.state.api.GetAndClearErrors(modelId);\r\n    }\r\n\r\n    private notifyProgress(loaded: number, total: number) {\r\n        if (this.state.onProgress) this.state.onProgress({ loaded, total });\r\n    }\r\n\r\n    private async newIfcModel(buffer: any) {\r\n        const data = new Uint8Array(buffer);\r\n        this.currentWebIfcID = await this.state.api.OpenModel(data, this.state.webIfcSettings);\r\n        this.currentModelID = this.state.useJSON ? this.loadedModels : this.currentWebIfcID;\r\n        this.state.models[this.currentModelID] = {\r\n            modelID: this.currentModelID,\r\n            mesh: {} as IfcMesh,\r\n            types: {},\r\n            jsonData: {}\r\n        };\r\n    }\r\n\r\n    private async loadAllGeometry(modelID: number) {\r\n        this.addOptionalCategories(modelID);\r\n        await this.initializeLoadingState(modelID);\r\n\r\n        this.state.api.StreamAllMeshes(modelID, (mesh: FlatMesh) => {\r\n            this.updateLoadingState();\r\n            // only during the lifetime of this function call, the geometry is available in memory\r\n            this.streamMesh(modelID, mesh);\r\n        });\r\n\r\n        this.notifyLoadingEnded();\r\n        const geometries: BufferGeometry[] = [];\r\n        const materials: MeshLambertMaterial[] = [];\r\n\r\n        Object.keys(this.geometriesByMaterials).forEach((key) => {\r\n            const geometriesByMaterial = this.geometriesByMaterials[key].geometries;\r\n            const merged = mergeBufferGeometries(geometriesByMaterial);\r\n            materials.push(this.geometriesByMaterials[key].material);\r\n            geometries.push(merged);\r\n        });\r\n\r\n        const combinedGeometry = mergeBufferGeometries(geometries, true);\r\n        this.cleanUpGeometryMemory(geometries);\r\n        if (this.BVH) this.BVH.applyThreeMeshBVH(combinedGeometry);\r\n        const model = new IFCModel(combinedGeometry, materials);\r\n        this.state.models[this.currentModelID].mesh = model;\r\n        return model;\r\n    }\r\n\r\n    private async initializeLoadingState(modelID: number) {\r\n        const shapes = await this.state.api.GetLineIDsWithType(modelID, IFCPRODUCTDEFINITIONSHAPE);\r\n        this.loadingState.total = shapes.size();\r\n        this.loadingState.current = 0;\r\n        this.loadingState.step = 0.1;\r\n    }\r\n\r\n    private notifyLoadingEnded() {\r\n        this.notifyProgress(this.loadingState.total, this.loadingState.total);\r\n    }\r\n\r\n    private updateLoadingState() {\r\n        const realCurrentItem = Math.min(this.loadingState.current++, this.loadingState.total);\r\n        if(realCurrentItem / this.loadingState.total >= this.loadingState.step) {\r\n            const currentProgress = Math.ceil(this.loadingState.total * this.loadingState.step);\r\n            this.notifyProgress(currentProgress, this.loadingState.total);\r\n            this.loadingState.step += 0.1;\r\n        }\r\n    }\r\n\r\n    // Some categories (like IfcSpace and IfcOpeningElement) need to be set explicitly\r\n    private addOptionalCategories(modelID: number) {\r\n\r\n        const optionalTypes: number[] = [];\r\n\r\n        for (let key in this.optionalCategories) {\r\n            if (this.optionalCategories.hasOwnProperty(key)) {\r\n                const category = parseInt(key);\r\n                if (this.optionalCategories[category]) optionalTypes.push(category);\r\n            }\r\n        }\r\n\r\n        this.state.api.StreamAllMeshesWithTypes(this.currentWebIfcID, optionalTypes, (mesh: FlatMesh) => {\r\n            this.streamMesh(modelID, mesh);\r\n        });\r\n    }\r\n\r\n    private streamMesh(modelID: number, mesh: FlatMesh) {\r\n        const placedGeometries = mesh.geometries;\r\n        const size = placedGeometries.size();\r\n\r\n        for (let i = 0; i < size; i++) {\r\n            const placedGeometry = placedGeometries.get(i);\r\n            let itemMesh = this.getPlacedGeometry(modelID, mesh.expressID, placedGeometry);\r\n            let geom = itemMesh.geometry.applyMatrix4(itemMesh.matrix);\r\n            this.storeGeometryByMaterial(placedGeometry.color, geom);\r\n        }\r\n    }\r\n\r\n    private getPlacedGeometry(modelID: number, expressID: number, placedGeometry: PlacedGeometry) {\r\n        const geometry = this.getBufferGeometry(modelID, expressID, placedGeometry);\r\n        const mesh = new Mesh(geometry);\r\n        mesh.matrix = this.getMeshMatrix(placedGeometry.flatTransformation);\r\n        mesh.matrixAutoUpdate = false;\r\n        return mesh;\r\n    }\r\n\r\n    private getBufferGeometry(modelID: number, expressID: number, placedGeometry: PlacedGeometry) {\r\n        const geometry = this.state.api.GetGeometry(modelID, placedGeometry.geometryExpressID) as IfcGeometry;\r\n        const verts = this.state.api.GetVertexArray(geometry.GetVertexData(), geometry.GetVertexDataSize()) as Float32Array;\r\n        const indices = this.state.api.GetIndexArray(geometry.GetIndexData(), geometry.GetIndexDataSize()) as Uint32Array;\r\n        const buffer = this.ifcGeometryToBuffer(expressID, verts, indices);\r\n        //@ts-ignore\r\n        geometry.delete();\r\n        return buffer;\r\n    }\r\n\r\n    private storeGeometryByMaterial(color: ifcColor, geometry: BufferGeometry) {\r\n        let colID = `${color.x}${color.y}${color.z}${color.w}`;\r\n        if (this.geometriesByMaterials[colID]) {\r\n            this.geometriesByMaterials[colID].geometries.push(geometry);\r\n            return;\r\n        }\r\n\r\n        // Assume RGB components are in sRGB-Rec709-D65 colorspace, and specify\r\n        // this so three.js can convert if THREE.ColorManagement APIs are enabled.\r\n        const col = new Color().setRGB(color.x, color.y, color.z, 'srgb');\r\n        const material = new MeshLambertMaterial({ color: col, side: DoubleSide });\r\n        material.transparent = color.w !== 1;\r\n        if (material.transparent) material.opacity = color.w;\r\n        this.geometriesByMaterials[colID] = { material, geometries: [geometry] };\r\n    }\r\n\r\n    private getMeshMatrix(matrix: Array<number>) {\r\n        const mat = new Matrix4();\r\n        mat.fromArray(matrix);\r\n        return mat;\r\n    }\r\n\r\n    private ifcGeometryToBuffer(expressID: number, vertexData: Float32Array, indexData: Uint32Array) {\r\n        const geometry = new BufferGeometry();\r\n\r\n        const posFloats = new Float32Array(vertexData.length / 2);\r\n        const normFloats = new Float32Array(vertexData.length / 2);\r\n        const idAttribute = new Uint32Array(vertexData.length / 6);\r\n\r\n        for (let i = 0; i < vertexData.length; i += 6) {\r\n            posFloats[i / 2] = vertexData[i];\r\n            posFloats[i / 2 + 1] = vertexData[i + 1];\r\n            posFloats[i / 2 + 2] = vertexData[i + 2];\r\n\r\n            normFloats[i / 2] = vertexData[i + 3];\r\n            normFloats[i / 2 + 1] = vertexData[i + 4];\r\n            normFloats[i / 2 + 2] = vertexData[i + 5];\r\n\r\n            idAttribute[i / 6] = expressID;\r\n        }\r\n\r\n        geometry.setAttribute(\r\n            'position',\r\n            new BufferAttribute(posFloats, 3));\r\n        geometry.setAttribute(\r\n            'normal',\r\n            new BufferAttribute(normFloats, 3));\r\n        geometry.setAttribute(\r\n            'expressID',\r\n            new BufferAttribute(idAttribute, 1));\r\n\r\n        geometry.setIndex(new BufferAttribute(indexData, 1));\r\n        return geometry;\r\n    }\r\n\r\n    // Three.js geometry has to be manually deallocated\r\n    private cleanUpGeometryMemory(geometries: BufferGeometry[]) {\r\n        geometries.forEach(geometry => geometry.dispose());\r\n\r\n        Object.keys(this.geometriesByMaterials).forEach((materialID) => {\r\n            const geometriesByMaterial = this.geometriesByMaterials[materialID];\r\n            geometriesByMaterial.geometries.forEach(geometry => geometry.dispose());\r\n            geometriesByMaterial.geometries = [];\r\n            // @ts-ignore\r\n            geometriesByMaterial.material = null;\r\n        });\r\n        this.geometriesByMaterials = {};\r\n    }\r\n}\r\n","import { IfcState } from '../../BaseDefinitions';\r\nimport { BufferAttribute, BufferGeometry, Material } from 'three';\r\n\r\n// The number array has the meaning: [start, end, start, end, start, end...]\r\nexport interface Indices {\r\n    [materialID: number]: number[]\r\n}\r\n\r\nexport interface IndexedGeometry extends BufferGeometry {\r\n    index: BufferAttribute;\r\n}\r\n\r\nexport interface Group {\r\n    start: number,\r\n    count: number,\r\n    materialIndex?: number\r\n}\r\n\r\nexport interface Items {\r\n    indexCache: Uint32Array,\r\n    map: Map<number, Indices>\r\n}\r\n\r\nexport interface IndicesMap {\r\n    [modelID: number]: {\r\n        indexCache: Uint32Array;\r\n        map: Map<number, Indices>;\r\n    }\r\n}\r\n\r\nexport class ItemsMap {\r\n\r\n    constructor(private state: IfcState) {\r\n    }\r\n\r\n    map: IndicesMap = {};\r\n\r\n    generateGeometryIndexMap(modelID: number) {\r\n        if (this.map[modelID]) return;\r\n        const geometry = this.getGeometry(modelID);\r\n        const items = this.newItemsMap(modelID, geometry);\r\n        for (const group of geometry.groups) {\r\n            this.fillItemsWithGroupInfo(group, geometry, items);\r\n        }\r\n    }\r\n\r\n    getSubsetID(modelID: number, material?: Material, customID = 'DEFAULT') {\r\n        const baseID = modelID;\r\n        const materialID = material ? material.uuid : 'DEFAULT';\r\n        return `${baseID} - ${materialID} - ${customID}`;\r\n    }\r\n\r\n    // Use this only for destroying the current IFCLoader instance\r\n    dispose() {\r\n        Object.values(this.map).forEach(model => {\r\n            (model.indexCache as any) = null;\r\n            (model.map as any) = null;\r\n        });\r\n\r\n        (this.map as any) = null;\r\n    }\r\n\r\n    private getGeometry(modelID: number) {\r\n        const geometry = this.state.models[modelID].mesh.geometry;\r\n        if (!geometry) throw new Error('Model without geometry.');\r\n        if (!geometry.index) throw new Error('Geometry must be indexed');\r\n        return geometry as IndexedGeometry;\r\n    }\r\n\r\n    private newItemsMap(modelID: number, geometry: IndexedGeometry) {\r\n        const startIndices = geometry.index.array as Uint32Array;\r\n        this.map[modelID] = {\r\n            indexCache: startIndices.slice(0, geometry.index.array.length),\r\n            map: new Map()\r\n        };\r\n        return this.map[modelID] as Items;\r\n    }\r\n\r\n    private fillItemsWithGroupInfo(group: Group, geometry: IndexedGeometry, items: Items) {\r\n        let prevExpressID = -1;\r\n\r\n        const materialIndex = group.materialIndex as number;\r\n        const materialStart = group.start;\r\n        const materialEnd = materialStart + group.count - 1;\r\n\r\n        let objectStart = -1;\r\n        let objectEnd = -1;\r\n\r\n        for (let i = materialStart; i <= materialEnd; i++) {\r\n            const index = geometry.index.array[i];\r\n            const bufferAttr = geometry.attributes.expressID as BufferAttribute;\r\n            const expressID = bufferAttr.array[index];\r\n\r\n            // First iteration\r\n            if (prevExpressID === -1) {\r\n                prevExpressID = expressID;\r\n                objectStart = i;\r\n            }\r\n\r\n            // It's the end of the material, which also means end of the object\r\n            const isEndOfMaterial = i === materialEnd;\r\n            if (isEndOfMaterial) {\r\n                const store = this.getMaterialStore(items.map, expressID, materialIndex);\r\n                store.push(objectStart, materialEnd);\r\n                break;\r\n            }\r\n\r\n            // Still going through the same object\r\n            if (prevExpressID === expressID) continue;\r\n\r\n            // New object starts; save previous object\r\n\r\n            // Store previous object\r\n            const store = this.getMaterialStore(items.map, prevExpressID, materialIndex);\r\n            objectEnd = i - 1;\r\n            store.push(objectStart, objectEnd);\r\n\r\n            // Get ready to process next object\r\n            prevExpressID = expressID;\r\n            objectStart = i;\r\n        }\r\n    }\r\n\r\n    private getMaterialStore(map: Map<number, Indices>, id: number, matIndex: number) {\r\n        // If this object wasn't store before, add it to the map\r\n        if (map.get(id) === undefined) {\r\n            map.set(id, {});\r\n        }\r\n        const storedIfcItem = map.get(id);\r\n        if (storedIfcItem === undefined) throw new Error('Geometry map generation error');\r\n\r\n        // If this material wasn't stored for this object before, add it to the object\r\n        if (storedIfcItem[matIndex] === undefined) {\r\n            storedIfcItem[matIndex] = [];\r\n        }\r\n        return storedIfcItem[matIndex];\r\n    }\r\n\r\n}","export class SubsetUtils {\r\n\r\n    // If flatten, all indices are in the same array; otherwise, indices are split in subarrays by material\r\n    static getAllIndicesOfGroup(modelID: number, ids: number[], materialIndex: number, items: any, flatten = true) {\r\n        const indicesByGroup: any = [];\r\n        for (const expressID of ids) {\r\n            const entry = items.map.get(expressID);\r\n            if (!entry) continue;\r\n            const value = entry[materialIndex];\r\n            if (!value) continue;\r\n            SubsetUtils.getIndexChunk(value, indicesByGroup, materialIndex, items, flatten);\r\n        }\r\n        return indicesByGroup;\r\n    }\r\n\r\n    private static getIndexChunk(value: number[], indicesByGroup: any, materialIndex: number, items: any, flatten: boolean) {\r\n        const pairs = value.length / 2;\r\n        for (let pair = 0; pair < pairs; pair++) {\r\n            const pairIndex = pair * 2;\r\n            const start = value[pairIndex];\r\n            const end = value[pairIndex + 1];\r\n            for (let j = start; j <= end; j++) {\r\n                if(flatten) indicesByGroup.push(items.indexCache[j]);\r\n                else {\r\n                    if (!indicesByGroup[materialIndex]) indicesByGroup[materialIndex] = [];\r\n                    indicesByGroup[materialIndex].push(items.indexCache[j]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","import { BufferGeometry, Mesh } from 'three';\r\nimport { IfcState, SubsetConfig } from '../../BaseDefinitions';\r\nimport { IndexedGeometry, ItemsMap } from './ItemsMap';\r\nimport { Subset, Subsets } from './SubsetManager';\r\nimport { SubsetUtils } from './SubsetUtils';\r\nimport { BvhManager } from '../BvhManager';\r\n\r\nexport class SubsetCreator {\r\n\r\n    private tempIndex: number[] = [];\r\n\r\n    constructor(private state: IfcState, private items: ItemsMap, private subsets: Subsets, private BVH: BvhManager) {\r\n    }\r\n\r\n    createSubset(config: SubsetConfig, subsetID: string) {\r\n        if (!this.items.map[config.modelID]) this.items.generateGeometryIndexMap(config.modelID);\r\n        if (!this.subsets[subsetID]) this.initializeSubset(config, subsetID);\r\n        this.filterIndices(config, subsetID);\r\n        this.constructSubsetByMaterial(config, subsetID);\r\n        config.ids.forEach(id => this.subsets[subsetID].ids.add(id));\r\n        this.subsets[subsetID].mesh.geometry.setIndex(this.tempIndex);\r\n        this.tempIndex.length = 0;\r\n        const subset = this.subsets[subsetID].mesh;\r\n        if (config.applyBVH) this.BVH.applyThreeMeshBVH(subset.geometry);\r\n        if (config.scene) config.scene.add(subset);\r\n        return this.subsets[subsetID].mesh;\r\n    }\r\n\r\n    dispose() {\r\n        this.tempIndex = [];\r\n    }\r\n\r\n    private initializeSubset(config: SubsetConfig, subsetID: string) {\r\n        const model = this.state.models[config.modelID].mesh;\r\n        const subsetGeom = new BufferGeometry();\r\n        this.initializeSubsetAttributes(subsetGeom, model);\r\n        if (!config.material) this.initializeSubsetGroups(subsetGeom, model);\r\n        const mesh = new Mesh(subsetGeom, config.material || model.material) as Subset;\r\n        mesh.modelID = config.modelID;\r\n        const bvh = Boolean(config.applyBVH);\r\n        this.subsets[subsetID] = { ids: new Set<number>(), mesh, bvh };\r\n        model.add(mesh);\r\n    }\r\n\r\n    // The subset shares the same attributes as the original (no memory consumed)\r\n    private initializeSubsetAttributes(subsetGeom: BufferGeometry, model: Mesh) {\r\n        subsetGeom.setAttribute('position', model.geometry.attributes.position);\r\n        subsetGeom.setAttribute('normal', model.geometry.attributes.normal);\r\n        subsetGeom.setAttribute('expressID', model.geometry.attributes.expressID);\r\n        subsetGeom.setIndex([]);\r\n    }\r\n\r\n    // If the subset has original materials, initialize the groups for the subset\r\n    private initializeSubsetGroups(subsetGeom: BufferGeometry, model: Mesh) {\r\n        subsetGeom.groups = JSON.parse(JSON.stringify(model.geometry.groups));\r\n        this.resetGroups(subsetGeom);\r\n    }\r\n\r\n    // Remove previous indices or filter the given ones to avoid repeating items\r\n    private filterIndices(config: SubsetConfig, subsetID: string) {\r\n        const geometry = this.subsets[subsetID].mesh.geometry as IndexedGeometry;\r\n        if (config.removePrevious) {\r\n            geometry.setIndex([]);\r\n            this.resetGroups(geometry);\r\n            return;\r\n        }\r\n        const previousIndices = geometry.index.array;\r\n        const previousIDs = this.subsets[subsetID].ids;\r\n        config.ids = config.ids.filter(id => !previousIDs.has(id));\r\n        this.tempIndex = Array.from(previousIndices);\r\n    }\r\n\r\n    private constructSubsetByMaterial(config: SubsetConfig, subsetID: string) {\r\n        const model = this.state.models[config.modelID].mesh;\r\n        const newIndices = { count: 0 };\r\n        for (let i = 0; i < model.geometry.groups.length; i++) {\r\n            this.insertNewIndices(config, subsetID, i, newIndices);\r\n        }\r\n    }\r\n\r\n    // If this subset has original materials, insert indices in correct position and update groups\r\n    // Otherwise, just insert indices at any position\r\n    private insertNewIndices(config: SubsetConfig, subsetID: string, materialIndex: number, newIndices: any) {\r\n        const items = this.items.map[config.modelID];\r\n        const indicesOfOneMaterial = SubsetUtils.getAllIndicesOfGroup(config.modelID, config.ids, materialIndex, items) as number[];\r\n\r\n        if (!config.material) {\r\n            this.insertIndicesAtGroup(subsetID, indicesOfOneMaterial, materialIndex, newIndices);\r\n        } else {\r\n            indicesOfOneMaterial.forEach(index => this.tempIndex.push(index));\r\n        }\r\n    }\r\n\r\n    private insertIndicesAtGroup(subsetID: string, indicesByGroup: number[], index: number, newIndices: any) {\r\n        const currentGroup = this.getCurrentGroup(subsetID, index);\r\n        currentGroup.start += newIndices.count;\r\n        let newIndicesPosition = currentGroup.start + currentGroup.count;\r\n        newIndices.count += indicesByGroup.length;\r\n        if (indicesByGroup.length > 0) {\r\n            let position = newIndicesPosition;\r\n            const start = this.tempIndex.slice(0, position);\r\n            const end = this.tempIndex.slice(position);\r\n            this.tempIndex = Array.prototype.concat.apply([], [start, indicesByGroup, end]);\r\n            currentGroup.count += indicesByGroup.length;\r\n        }\r\n    }\r\n\r\n    private getCurrentGroup(subsetID: string, groupIndex: number) {\r\n        const geometry = this.subsets[subsetID].mesh.geometry as IndexedGeometry;\r\n        return geometry.groups[groupIndex];\r\n    }\r\n\r\n    private resetGroups(geometry: BufferGeometry) {\r\n        geometry.groups.forEach((group) => {\r\n            group.start = 0;\r\n            group.count = 0;\r\n        });\r\n    }\r\n}","import { Material, Mesh, Object3D } from 'three';\r\nimport { SubsetConfig, IfcState } from '../../BaseDefinitions';\r\nimport { BvhManager } from '../BvhManager';\r\nimport { ItemsMap } from './ItemsMap';\r\nimport { SubsetCreator } from './SubsetCreator';\r\n\r\nexport interface Subset extends Mesh {\r\n    modelID: number;\r\n}\r\n\r\nexport type Subsets = {\r\n    [subsetID: string]: { ids: Set<number>, mesh: Subset, bvh: boolean };\r\n};\r\n\r\n/**\r\n * Contains the logic to get, create and delete geometric subsets of an IFC model. For example,\r\n * this can extract all the items in a specific IfcBuildingStorey and create a new Mesh.\r\n */\r\nexport class SubsetManager {\r\n    readonly items: ItemsMap;\r\n    private readonly BVH: BvhManager;\r\n    private state: IfcState;\r\n    private subsets: Subsets = {};\r\n    private subsetCreator: SubsetCreator;\r\n\r\n    constructor(state: IfcState, BVH: BvhManager) {\r\n        this.state = state;\r\n        this.items = new ItemsMap(state);\r\n        this.BVH = BVH;\r\n        this.subsetCreator = new SubsetCreator(state, this.items, this.subsets, this.BVH);\r\n    }\r\n\r\n    getAllSubsets(){\r\n        return this.subsets\r\n    }\r\n\r\n    getSubset(modelID: number, material?: Material, customId?: string) {\r\n        const subsetID = this.getSubsetID(modelID, material, customId);\r\n        return this.subsets[subsetID].mesh;\r\n    }\r\n\r\n    removeSubset(modelID: number, material?: Material, customID?: string) {\r\n        const subsetID = this.getSubsetID(modelID, material, customID);\r\n        const subset = this.subsets[subsetID];\r\n        if (!subset) return;\r\n        if (subset.mesh.parent) subset.mesh.removeFromParent();\r\n        subset.mesh.geometry.attributes = {};\r\n        subset.mesh.geometry.index = null;\r\n        subset.mesh.geometry.dispose();\r\n        // @ts-ignore\r\n        subset.mesh.geometry = null;\r\n        delete this.subsets[subsetID];\r\n    }\r\n\r\n    createSubset(config: SubsetConfig) {\r\n        const subsetID = this.getSubsetID(config.modelID, config.material, config.customID);\r\n        return this.subsetCreator.createSubset(config, subsetID);\r\n    }\r\n\r\n    removeFromSubset(modelID: number, ids: number[], customID?: string, material?: Material) {\r\n        const subsetID = this.getSubsetID(modelID, material, customID);\r\n        if (!this.subsets[subsetID]) return;\r\n\r\n        const previousIDs = this.subsets[subsetID].ids;\r\n        ids.forEach((id) => {\r\n            if(previousIDs.has(id)) previousIDs.delete(id);\r\n        })\r\n\r\n        return this.createSubset({\r\n            modelID,\r\n            removePrevious: true,\r\n            material,\r\n            customID,\r\n            applyBVH: this.subsets[subsetID].bvh,\r\n            ids: Array.from(previousIDs),\r\n            scene: this.subsets[subsetID].mesh.parent as Object3D\r\n        });\r\n    }\r\n\r\n    clearSubset(modelID: number, customID?: string, material?: Material) {\r\n        const subsetID = this.getSubsetID(modelID, material, customID);\r\n        if (!this.subsets[subsetID]) return;\r\n        this.subsets[subsetID].ids.clear();\r\n        const subset = this.getSubset(modelID, material, customID);\r\n        subset.geometry.setIndex([]);\r\n    }\r\n\r\n    // Use this only for destroying the current IFCLoader instance\r\n    dispose() {\r\n        this.items.dispose();\r\n        this.subsetCreator.dispose();\r\n\r\n        Object.values(this.subsets).forEach(subset => {\r\n            (subset.ids as any) = null;\r\n            subset.mesh.removeFromParent();\r\n            const mats = subset.mesh.material;\r\n            if(Array.isArray(mats)) mats.forEach(mat => mat.dispose());\r\n            else mats.dispose();\r\n            subset.mesh.geometry.index = null;\r\n            subset.mesh.geometry.dispose();\r\n            const geom = subset.mesh.geometry as any;\r\n            if(geom.disposeBoundsTree) geom.disposeBoundsTree();\r\n            (subset.mesh as any) = null;\r\n        });\r\n        (this.subsets as any) = null;\r\n    }\r\n\r\n    private getSubsetID(modelID: number, material?: Material, customID = 'DEFAULT') {\r\n        const baseID = modelID;\r\n        const materialID = material ? material.uuid : 'DEFAULT';\r\n        return `${baseID} - ${materialID} - ${customID}`;\r\n    }\r\n}\r\n","import { BufferAttribute, BufferGeometry, Material, Matrix4, Mesh, Object3D } from 'three';\r\n// TODO: Remove ts ignore comments when @types/three gets updated\r\n// @ts-ignore\r\nimport { mergeBufferGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils';\r\nimport {\r\n    FlatMesh,\r\n    IfcGeometry,\r\n    IFCRELAGGREGATES, IFCRELASSOCIATESMATERIAL,\r\n    IFCRELCONTAINEDINSPATIALSTRUCTURE,\r\n    IFCRELDEFINESBYPROPERTIES,\r\n    IFCRELDEFINESBYTYPE, LoaderError, LoaderSettings, RawLineData, Vector\r\n} from 'web-ifc';\r\nimport {ParserProgress} from \"./components/IFCParser\";\r\n\r\nexport const IdAttrName = 'expressID';\r\n\r\nexport type IdAttributeByMaterial = { [id: number]: number };\r\nexport type IdAttributesByMaterials = { [materialID: string]: IdAttributeByMaterial };\r\n\r\n//TODO: Rename \"scene\" to \"parent\" in the next major release\r\nexport interface BaseSubsetConfig {\r\n    scene?: Object3D;\r\n    ids: number[];\r\n    removePrevious: boolean;\r\n    material?: Material;\r\n    customID?: string;\r\n    applyBVH?: boolean;\r\n}\r\n\r\nexport interface SubsetConfig extends BaseSubsetConfig {\r\n    modelID: number;\r\n}\r\n\r\nexport const DEFAULT = 'default';\r\n\r\nexport type MapFaceindexID = { [key: number]: number };\r\n\r\nexport interface TypesMap {\r\n    [key: number]: number;\r\n}\r\n\r\n\r\nexport interface IfcModel {\r\n    modelID: number;\r\n    mesh: IfcMesh;\r\n    types: TypesMap;\r\n    jsonData: { [id: number]: JSONObject };\r\n}\r\n\r\nexport interface JSONObject {\r\n    expressID: number;\r\n    type: string;\r\n    [key: string]: any;\r\n}\r\n\r\nexport interface Worker {\r\n    active: boolean;\r\n    path: string;\r\n}\r\n\r\nexport interface IfcState {\r\n    models: { [modelID: number]: IfcModel };\r\n    api: WebIfcAPI;\r\n    useJSON: boolean;\r\n    worker: Worker;\r\n    webIfcSettings?: LoaderSettings;\r\n    onProgress?: (event: ParserProgress) => void;\r\n    coordinationMatrix?: Matrix4,\r\n    wasmPath?: string;\r\n}\r\n\r\nexport interface IfcMesh extends Mesh {\r\n    modelID: number;\r\n}\r\n\r\nexport interface Node {\r\n    expressID: number;\r\n    type: string;\r\n    children: Node[];\r\n}\r\n\r\nexport interface pName {\r\n    name: number;\r\n    relating: string;\r\n    related: string;\r\n    key: string;\r\n}\r\n\r\nexport interface NewIfcModel {\r\n    schema: string;\r\n    name?: string;\r\n    description?: string[];\r\n    authors?: string[];\r\n    organizations?: string[];\r\n    authorization?: string;\r\n}\r\n\r\nexport const PropsNames = {\r\n    aggregates: {\r\n        name: IFCRELAGGREGATES,\r\n        relating: 'RelatingObject',\r\n        related: 'RelatedObjects',\r\n        key: 'children'\r\n    },\r\n    spatial: {\r\n        name: IFCRELCONTAINEDINSPATIALSTRUCTURE,\r\n        relating: 'RelatingStructure',\r\n        related: 'RelatedElements',\r\n        key: 'children'\r\n    },\r\n    psets: {\r\n        name: IFCRELDEFINESBYPROPERTIES,\r\n        relating: 'RelatingPropertyDefinition',\r\n        related: 'RelatedObjects',\r\n        key: 'hasPsets'\r\n    },\r\n    materials: {\r\n        name: IFCRELASSOCIATESMATERIAL,\r\n        relating: 'RelatingMaterial',\r\n        related: 'RelatedObjects',\r\n        key: 'hasMaterial'\r\n    },\r\n    type: {\r\n        name: IFCRELDEFINESBYTYPE,\r\n        relating: 'RelatingType',\r\n        related: 'RelatedObjects',\r\n        key: 'hasType'\r\n    }\r\n};\r\n\r\nexport interface WebIfcAPI {\r\n\r\n    wasmModule: any;\r\n\r\n    Init(): void | Promise<void>;\r\n\r\n    // To close the web worker\r\n    Close?: () => void;\r\n\r\n    /**\r\n     * Opens a model and returns a modelID number\r\n     * @data Buffer containing IFC data (bytes)\r\n     * @data Settings settings for loading the model\r\n     */\r\n    OpenModel(data: string | Uint8Array, settings?: LoaderSettings): number | Promise<number>;\r\n\r\n    GetHeaderLine(modelID: number, headerType: number): any | Promise<any>;\r\n\r\n    /**\r\n     * Creates a new model and returns a modelID number\r\n     * @data Settings settings for generating data the model\r\n     */\r\n    CreateModel(model: NewIfcModel, settings?: LoaderSettings): number | Promise<number>;\r\n\r\n    ExportFileAsIFC(modelID: number): Uint8Array | Promise<Uint8Array>;\r\n\r\n    /**\r\n     * Opens a model and returns a modelID number\r\n     * @modelID Model handle retrieved by OpenModel, model must not be closed\r\n     * @data Buffer containing IFC data (bytes)\r\n     */\r\n    GetGeometry(modelID: number, geometryExpressID: number): IfcGeometry | Promise<IfcGeometry>;\r\n\r\n    GetLine(modelID: number, expressID: number, flatten?: boolean):  any | Promise<any>;\r\n\r\n    GetAndClearErrors(modelID: number): Vector<LoaderError> | Promise<Vector<LoaderError>>;\r\n\r\n    WriteLine(modelID: number, lineObject: any): void | Promise<void>;\r\n\r\n    FlattenLine(modelID: number, line: any): void | Promise<void>;\r\n\r\n    GetRawLineData(modelID: number, expressID: number): RawLineData | Promise<RawLineData>;\r\n\r\n    WriteRawLineData(modelID: number, data: RawLineData):  any | Promise<any>;\r\n\r\n    GetLineIDsWithType(modelID: number, type: number): Vector<number> | Promise<Vector<number>>;\r\n\r\n    GetAllLines(modelID: Number): Vector<number> | Promise<Vector<number>>;\r\n\r\n    SetGeometryTransformation(modelID: number, transformationMatrix: Array<number>): void | Promise<void>;\r\n\r\n    GetCoordinationMatrix(modelID: number): Array<number> | Promise<Array<number>>;\r\n\r\n    GetVertexArray(ptr: number, size: number): Float32Array | Promise<Float32Array>;\r\n\r\n    GetIndexArray(ptr: number, size: number): Uint32Array | Promise<Uint32Array>;\r\n\r\n    GetNameFromTypeCode(type:number): string | Promise<string>;\r\n\r\n    GetTypeCodeFromName(modelID: number,typeName:string): number | Promise<number>;\r\n\r\n    GetIfcEntityList(modelID: number) : Array<number> | Promise<Array<number>>;\r\n\r\n    getSubArray(heap: any, startPtr: any, sizeBytes: any): any | Promise<any>;\r\n\r\n    /**\r\n     * Closes a model and frees all related memory\r\n     * @modelID Model handle retrieved by OpenModel, model must not be closed\r\n     */\r\n    CloseModel(modelID: number): void | Promise<void>;\r\n\r\n    StreamAllMeshes(modelID: number, meshCallback: (mesh: FlatMesh) => void): void | Promise<void>;\r\n\r\n    StreamAllMeshesWithTypes(modelID: number, types: Array<number>, meshCallback: (mesh: FlatMesh) => void): void | Promise<void>;\r\n\r\n    /**\r\n     * Checks if a specific model ID is open or closed\r\n     * @modelID Model handle retrieved by OpenModel\r\n     */\r\n    IsModelOpen(modelID: number): boolean | Promise<boolean>;\r\n\r\n    /**\r\n     * Load all geometry in a model\r\n     * @modelID Model handle retrieved by OpenModel\r\n     */\r\n    LoadAllGeometry(modelID: number): Vector<FlatMesh> | Promise<Vector<FlatMesh>>;\r\n\r\n    /**\r\n     * Load geometry for a single element\r\n     * @modelID Model handle retrieved by OpenModel\r\n     */\r\n    GetFlatMesh(modelID: number, expressID: number): FlatMesh | Promise<FlatMesh>;\r\n\r\n    SetWasmPath(path: string): void | Promise<void>;\r\n}\r\n","import { IfcState, pName, PropsNames, Node } from '../../BaseDefinitions';\r\n\r\nexport class BasePropertyManager {\r\n\r\n    constructor(protected state: IfcState) {\r\n    }\r\n\r\n    async getPropertySets(modelID: number, elementID: number, recursive = false) {\r\n        return await this.getProperty(modelID, elementID, recursive, PropsNames.psets);\r\n    }\r\n\r\n    async getTypeProperties(modelID: number, elementID: number, recursive = false) {\r\n        return await this.getProperty(modelID, elementID, recursive, PropsNames.type);\r\n    }\r\n\r\n    async getMaterialsProperties(modelID: number, elementID: number, recursive = false) {\r\n        return await this.getProperty(modelID, elementID, recursive, PropsNames.materials);\r\n    }\r\n\r\n    protected async getSpatialNode(modelID: number, node: Node, treeChunks: any, includeProperties?: boolean) {\r\n        await this.getChildren(modelID, node, treeChunks, PropsNames.aggregates, includeProperties);\r\n        await this.getChildren(modelID, node, treeChunks, PropsNames.spatial, includeProperties);\r\n    }\r\n\r\n    protected async getChildren(modelID: number, node: Node, treeChunks: any, propNames: pName, includeProperties?: boolean) {\r\n        const children = treeChunks[node.expressID];\r\n        if (children == undefined) return;\r\n        const prop = propNames.key as keyof Node;\r\n        const nodes: any[] = [];\r\n        for(let i = 0; i < children.length; i++){\r\n            const child = children[i];\r\n            let node = this.newNode(modelID, child);\r\n            if (includeProperties) {\r\n                const properties = await this.getItemProperties(modelID, node.expressID) as any;\r\n                node = { ...properties, ...node };\r\n            }\r\n            await this.getSpatialNode(modelID, node, treeChunks, includeProperties);\r\n            nodes.push(node);\r\n        }\r\n        (node[prop] as Node[]) = nodes;\r\n    }\r\n\r\n    protected newNode(modelID: number, id: number) {\r\n        const typeName = this.getNodeType(modelID, id);\r\n        return {\r\n            expressID: id,\r\n            type: typeName,\r\n            children: []\r\n        };\r\n    }\r\n\r\n    protected async getSpatialTreeChunks(modelID: number) {\r\n        const treeChunks: any = {};\r\n        await this.getChunks(modelID, treeChunks, PropsNames.aggregates);\r\n        await this.getChunks(modelID, treeChunks, PropsNames.spatial);\r\n        return treeChunks;\r\n    }\r\n\r\n    protected saveChunk(chunks: any, propNames: pName, rel: any) {\r\n        const relating = rel[propNames.relating].value;\r\n        const related = rel[propNames.related].map((r: any) => r.value);\r\n        if (chunks[relating] == undefined) {\r\n            chunks[relating] = related;\r\n        } else {\r\n            chunks[relating] = chunks[relating].concat(related);\r\n        }\r\n    }\r\n\r\n    protected getRelated(rel: any, propNames: pName, IDs: number[]) {\r\n        const element = rel[propNames.relating];\r\n        if(!element) {\r\n            return console.warn(`The object with ID ${rel.expressID} has a broken reference.`);\r\n        }\r\n        if (!Array.isArray(element)) IDs.push(element.value);\r\n        else element.forEach((ele) => IDs.push(ele.value));\r\n    }\r\n\r\n    protected static isRelated(id: number, rel: any, propNames: pName) {\r\n        const relatedItems = rel[propNames.related];\r\n        if (Array.isArray(relatedItems)) {\r\n            const values = relatedItems.map((item) => item.value);\r\n            return values.includes(id);\r\n        }\r\n        return relatedItems.value === id;\r\n    }\r\n\r\n    protected static newIfcProject(id: number) {\r\n        return {\r\n            expressID: id,\r\n            type: 'IFCPROJECT',\r\n            children: []\r\n        };\r\n    }\r\n\r\n    async getProperty(modelID: number, elementID: number, recursive = false, propName: pName): Promise<any> {\r\n    }\r\n\r\n    protected async getChunks(modelID: number, chunks: any, propNames: pName): Promise<void> {\r\n    }\r\n\r\n    protected async getItemProperties(modelID: number, expressID: number, recursive = false): Promise<any> {\r\n    }\r\n\r\n    protected getNodeType(modelID: number, id: number): any {\r\n    }\r\n}","import { BasePropertyManager } from './BasePropertyManager';\r\nimport { IFCPROJECT } from 'web-ifc';\r\nimport { pName } from '../../BaseDefinitions';\r\nimport { PropertyAPI } from './BaseDefinitions';\r\n\r\nexport class WebIfcPropertyManager extends BasePropertyManager  implements PropertyAPI {\r\n    async getItemProperties(modelID: number, id: number, recursive = false) {\r\n        return this.state.api.GetLine(modelID, id, recursive);\r\n    }\r\n\r\n    async getHeaderLine(modelID: number, headerType: number) {\r\n        return this.state.api.GetHeaderLine(modelID, headerType);\r\n    }\r\n\r\n    async getSpatialStructure(modelID: number, includeProperties?: boolean) {\r\n        const chunks = await this.getSpatialTreeChunks(modelID);\r\n        const allLines = await this.state.api.GetLineIDsWithType(modelID, IFCPROJECT);\r\n        const projectID = allLines.get(0);\r\n        const project = WebIfcPropertyManager.newIfcProject(projectID);\r\n        await this.getSpatialNode(modelID, project, chunks, includeProperties);\r\n        return project;\r\n    }\r\n\r\n    async getAllItemsOfType(modelID: number, type: number, verbose: boolean) {\r\n        let items: number[] = [];\r\n        const lines = await this.state.api.GetLineIDsWithType(modelID, type);\r\n        for (let i = 0; i < lines.size(); i++) items.push(lines.get(i));\r\n        if (!verbose) return items;\r\n        const result: any[] = [];\r\n        for (let i = 0; i < items.length; i++) {\r\n            result.push(await this.state.api.GetLine(modelID, items[i]));\r\n        }\r\n        return result;\r\n    }\r\n\r\n    override async getProperty(modelID: number, elementID: number, recursive = false, propName: pName) {\r\n        const propSetIds = await this.getAllRelatedItemsOfType(modelID, elementID, propName);\r\n        const result: any[] = [];\r\n        for (let i = 0; i < propSetIds.length; i++) {\r\n            result.push(await this.state.api.GetLine(modelID, propSetIds[i], recursive));\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected override getNodeType(modelID: number, id: number) {\r\n        const typeID = this.state.models[modelID].types[id];\r\n        return this.state.api.GetNameFromTypeCode(typeID);\r\n    }\r\n\r\n    protected override async getChunks(modelID: number, chunks: any, propNames: pName) {\r\n        const relation = await this.state.api.GetLineIDsWithType(modelID, propNames.name);\r\n        for (let i = 0; i < relation.size(); i++) {\r\n            const rel = await this.state.api.GetLine(modelID, relation.get(i), false);\r\n            this.saveChunk(chunks, propNames, rel);\r\n        }\r\n    }\r\n\r\n    private async getAllRelatedItemsOfType(modelID: number, id: number, propNames: pName) {\r\n        const lines = await this.state.api.GetLineIDsWithType(modelID, propNames.name);\r\n        const IDs: number[] = [];\r\n        for (let i = 0; i < lines.size(); i++) {\r\n            const rel = await this.state.api.GetLine(modelID, lines.get(i));\r\n            const isRelated = BasePropertyManager.isRelated(id, rel, propNames);\r\n            if (isRelated) this.getRelated(rel, propNames, IDs);\r\n        }\r\n        return IDs;\r\n    }\r\n}","import { JSONObject, pName } from '../../BaseDefinitions';\r\nimport { BasePropertyManager } from './BasePropertyManager';\r\nimport { IFCPROJECT } from 'web-ifc';\r\nimport { PropertyAPI } from './BaseDefinitions';\r\n\r\nexport class JSONPropertyManager extends BasePropertyManager implements PropertyAPI {\r\n\r\n    async getItemProperties(modelID: number, id: number, recursive = false) {\r\n        return { ...this.state.models[modelID].jsonData[id] };\r\n    }\r\n\r\n    async getHeaderLine(modelID: number) {\r\n        return {};\r\n    }\r\n\r\n    async getSpatialStructure(modelID: number, includeProperties?: boolean) {\r\n        const chunks = await this.getSpatialTreeChunks(modelID);\r\n        const projectsIDs = await this.getAllItemsOfType(modelID, IFCPROJECT, false);\r\n        const projectID = projectsIDs[0];\r\n        const project = JSONPropertyManager.newIfcProject(projectID);\r\n        await this.getSpatialNode(modelID, project, chunks, includeProperties);\r\n        return { ...project };\r\n    }\r\n\r\n    async getAllItemsOfType(modelID: number, type: number, verbose: boolean) {\r\n        const data = this.state.models[modelID].jsonData;\r\n        const typeName = await this.state.api.GetNameFromTypeCode(type);\r\n        if (!typeName) {\r\n            throw new Error(`Type not found: ${type}`);\r\n        }\r\n        return this.filterItemsByType(data, typeName, verbose);\r\n    }\r\n\r\n    override async getProperty(modelID: number, elementID: number, recursive = false, propName: pName) {\r\n        const resultIDs = await this.getAllRelatedItemsOfType(modelID, elementID, propName);\r\n        const result = this.getItemsByID(modelID, resultIDs);\r\n        if (recursive) {\r\n            result.forEach(result => this.getReferencesRecursively(modelID, result));\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected override getNodeType(modelID: number, id: number) {\r\n        return this.state.models[modelID].jsonData[id].type;\r\n    }\r\n\r\n    protected override async getChunks(modelID: number, chunks: any, propNames: pName) {\r\n        const relation = await this.getAllItemsOfType(modelID, propNames.name, true);\r\n        relation.forEach(rel => {\r\n            this.saveChunk(chunks, propNames, rel);\r\n        });\r\n    }\r\n\r\n    private filterItemsByType(data: { [id: number]: JSONObject }, typeName: string, verbose: boolean) {\r\n        const result: any[] = [];\r\n        Object.keys(data).forEach(key => {\r\n            const numKey = parseInt(key);\r\n            if (data[numKey].type.toUpperCase() === typeName) {\r\n                result.push(verbose ? { ...data[numKey] } : numKey);\r\n            }\r\n        });\r\n        return result;\r\n    }\r\n\r\n    private async getAllRelatedItemsOfType(modelID: number, id: number, propNames: pName) {\r\n        const lines = await this.getAllItemsOfType(modelID, propNames.name, true);\r\n        const IDs: number[] = [];\r\n        lines.forEach(line => {\r\n            const isRelated = JSONPropertyManager.isRelated(id, line, propNames);\r\n            if (isRelated) this.getRelated(line, propNames, IDs);\r\n        });\r\n        return IDs;\r\n    }\r\n\r\n    private getItemsByID(modelID: number, ids: number[]) {\r\n        const data = this.state.models[modelID].jsonData;\r\n        const result: any[] = [];\r\n        ids.forEach(id => result.push({ ...data[id] }));\r\n        return result;\r\n    }\r\n\r\n    private getReferencesRecursively(modelID: number, jsonObject: any) {\r\n        if (jsonObject == undefined) return;\r\n        const keys = Object.keys(jsonObject);\r\n        for (let i = 0; i < keys.length; i++) {\r\n            const key = keys[i];\r\n            this.getJSONItem(modelID, jsonObject, key);\r\n        }\r\n    }\r\n\r\n    private getJSONItem(modelID: number, jsonObject: any, key: string) {\r\n        if (Array.isArray(jsonObject[key])) {\r\n            return this.getMultipleJSONItems(modelID, jsonObject, key);\r\n        }\r\n        if (jsonObject[key] && jsonObject[key].type === 5) {\r\n            jsonObject[key] = this.getItemsByID(modelID, [jsonObject[key].value])[0];\r\n            this.getReferencesRecursively(modelID, jsonObject[key]);\r\n        }\r\n    }\r\n\r\n    private getMultipleJSONItems(modelID: number, jsonObject: any, key: string) {\r\n        jsonObject[key] = jsonObject[key].map((item: any) => {\r\n            if (item.type === 5) {\r\n                item = this.getItemsByID(modelID, [item.value])[0];\r\n                this.getReferencesRecursively(modelID, item);\r\n            }\r\n            return item;\r\n        });\r\n    }\r\n}","export const geometryTypes = new Set<number>([\r\n  1123145078, 574549367, 1675464909, 2059837836, 3798115385, 32440307, 3125803723, 3207858831,\r\n  2740243338, 2624227202, 4240577450, 3615266464, 3724593414, 220341763, 477187591, 1878645084,\r\n  1300840506, 3303107099, 1607154358, 1878645084, 846575682, 1351298697, 2417041796, 3049322572,\r\n  3331915920, 1416205885, 776857604, 3285139300, 3958052878, 2827736869, 2732653382, 673634403,\r\n  3448662350, 4142052618, 2924175390, 803316827, 2556980723, 1809719519, 2205249479, 807026263,\r\n  3737207727, 1660063152, 2347385850, 3940055652, 2705031697, 3732776249, 2485617015, 2611217952,\r\n  1704287377, 2937912522, 2770003689, 1281925730, 1484403080, 3448662350, 4142052618, 3800577675,\r\n  4006246654, 3590301190, 1383045692, 2775532180, 2047409740, 370225590, 3593883385, 2665983363,\r\n  4124623270, 812098782, 3649129432, 987898635, 1105321065, 3510044353, 1635779807, 2603310189,\r\n  3406155212, 1310608509, 4261334040, 2736907675, 3649129432, 1136057603, 1260505505, 4182860854,\r\n  2713105998, 2898889636, 59481748, 3749851601, 3486308946, 3150382593, 1062206242, 3264961684,\r\n  15328376, 1485152156, 370225590, 1981873012, 2859738748, 45288368, 2614616156, 2732653382,\r\n  775493141, 2147822146, 2601014836, 2629017746, 1186437898, 2367409068, 1213902940, 3632507154,\r\n  3900360178, 476780140, 1472233963, 2804161546, 3008276851, 738692330, 374418227, 315944413,\r\n  3905492369, 3570813810, 2571569899, 178912537, 2294589976, 1437953363, 2133299955, 572779678,\r\n  3092502836, 388784114, 2624227202, 1425443689, 3057273783, 2347385850, 1682466193, 2519244187,\r\n  2839578677, 3958567839, 2513912981, 2830218821, 427810014\r\n]);\r\n","import {IFCBUILDING} from 'web-ifc';\r\nimport {WebIfcAPI} from \"../../BaseDefinitions\";\r\nimport {geometryTypes} from \"./GeometryTypes\";\r\n\r\nexport class PropertySerializer {\r\n\r\n  dispose() {\r\n    (this.webIfc as any) = null;\r\n  }\r\n\r\n  constructor( private webIfc: WebIfcAPI) {\r\n  }\r\n\r\n  /**\r\n   * Serializes all the properties of an IFC (exluding the geometry) into an array of Blobs.\r\n   * This is useful for populating databases with IFC data.\r\n   * @modelID ID of the IFC model whose properties to extract.\r\n   * @maxSize (optional) maximum number of entities for each Blob. If not defined, it's infinite (only one Blob will be created).\r\n   * @event (optional) callback called every time a 10% of entities are serialized into Blobs.\r\n   */\r\n  async serializeAllProperties(\r\n    modelID: number,\r\n    maxSize?: number,\r\n    event?: (progress: number, total: number) => void\r\n  ) {\r\n    const blobs: Blob[] = [];\r\n    await this.getPropertiesAsBlobs(modelID, blobs, maxSize, event);\r\n    return blobs;\r\n  }\r\n\r\n  private async getPropertiesAsBlobs(\r\n    modelID: number,\r\n    blobs: Blob[],\r\n    maxSize?: number,\r\n    event?: (progress: number, total: number) => void\r\n  ) {\r\n    const geometriesIDs = await this.getAllGeometriesIDs(modelID);\r\n    let properties = await this.initializePropertiesObject(modelID);\r\n    const allLinesIDs = await this.webIfc!.GetAllLines(modelID);\r\n    const linesCount = allLinesIDs.size();\r\n    let lastEvent = 0.1;\r\n\r\n    let counter = 0;\r\n    for (let i = 0; i < linesCount; i++) {\r\n      const id = allLinesIDs.get(i);\r\n      if (!geometriesIDs.has(id)) {\r\n        // eslint-disable-next-line no-await-in-loop\r\n        await this.getItemProperty(modelID, id, properties);\r\n        counter++;\r\n      }\r\n      if (maxSize && counter > maxSize) {\r\n        blobs.push(new Blob([JSON.stringify(properties)], { type: 'application/json' }));\r\n        properties = {};\r\n        counter = 0;\r\n      }\r\n      if (event && i / linesCount > lastEvent) {\r\n        event(i, linesCount);\r\n        lastEvent += 0.1;\r\n      }\r\n    }\r\n\r\n    blobs.push(new Blob([JSON.stringify(properties)], { type: 'application/json' }));\r\n  }\r\n\r\n  private async getItemProperty(modelID: number, id: number, properties: any) {\r\n    try {\r\n      const props = await this.webIfc!.GetLine(modelID, id);\r\n      if (props.type) {\r\n        props.type = this.webIfc!.GetNameFromTypeCode(props.type);\r\n      }\r\n      this.formatItemProperties(props);\r\n      properties[id] = props;\r\n    } catch (e) {\r\n      console.log(`There was a problem getting the properties of the item with ID ${id}`);\r\n    }\r\n  }\r\n\r\n  private formatItemProperties(props: any) {\r\n    Object.keys(props).forEach((key) => {\r\n      const value = props[key];\r\n      if (value && value.value !== undefined) props[key] = value.value;\r\n      else if (Array.isArray(value))\r\n        props[key] = value.map((item) => {\r\n          if (item && item.value) return item.value;\r\n          return item;\r\n        });\r\n    });\r\n  }\r\n\r\n  private async initializePropertiesObject(modelID: number): Promise<any> {\r\n    return {\r\n      coordinationMatrix: await this.webIfc!.GetCoordinationMatrix(modelID),\r\n      globalHeight: await this.getBuildingHeight(modelID)\r\n    };\r\n  }\r\n\r\n  private async getBuildingHeight(modelID: number) {\r\n    const building = await this.getBuilding(modelID);\r\n    let placement: any;\r\n    const siteReference = building.ObjectPlacement.PlacementRelTo;\r\n    if (siteReference) placement = siteReference.RelativePlacement.Location;\r\n    else placement = building.ObjectPlacement.RelativePlacement.Location;\r\n    const transform = placement.Coordinates.map((coord: any) => coord.value);\r\n    return transform[2];\r\n  }\r\n\r\n  private async getBuilding(modelID: number) {\r\n    const allBuildingsIDs = await this.webIfc.GetLineIDsWithType(modelID, IFCBUILDING);\r\n    const buildingID = allBuildingsIDs.get(0);\r\n    return this.webIfc.GetLine(modelID, buildingID, true);\r\n  }\r\n\r\n  private async getAllGeometriesIDs(modelID: number) {\r\n    const geometriesIDs = new Set<number>();\r\n    const geomTypesArray = Array.from(geometryTypes);\r\n    for (let i = 0; i < geomTypesArray.length; i++) {\r\n      const category = geomTypesArray[i];\r\n      // eslint-disable-next-line no-await-in-loop\r\n      const ids = await this.webIfc!.GetLineIDsWithType(modelID, category);\r\n      const idsSize = ids.size();\r\n      for (let j = 0; j < idsSize; j++) {\r\n        geometriesIDs.add(ids.get(j));\r\n      }\r\n    }\r\n    return geometriesIDs;\r\n  }\r\n}\r\n","import {\r\n    IdAttrName\r\n} from '../../BaseDefinitions';\r\nimport { IfcState } from '../../BaseDefinitions';\r\nimport { BufferAttribute, BufferGeometry } from 'three';\r\nimport { WebIfcPropertyManager } from './WebIfcPropertyManager';\r\nimport { JSONPropertyManager } from './JSONPropertyManager';\r\nimport { PropertyManagerAPI, PropertyAPI } from './BaseDefinitions';\r\nimport {PropertySerializer} from \"./PropertySerializer\";\r\n\r\n/**\r\n * Contains the logic to get the properties of the items within an IFC model.\r\n */\r\nexport class PropertyManager implements PropertyManagerAPI {\r\n    serializer?: PropertySerializer;\r\n\r\n    private readonly webIfcProps: WebIfcPropertyManager;\r\n    private readonly jsonProps: JSONPropertyManager;\r\n    private currentProps: PropertyAPI;\r\n\r\n    constructor(private state: IfcState) {\r\n        this.webIfcProps = new WebIfcPropertyManager(state);\r\n        this.jsonProps = new JSONPropertyManager(state);\r\n        this.currentProps = this.webIfcProps;\r\n        this.serializer = new PropertySerializer(this.state.api);\r\n    }\r\n\r\n    getExpressId(geometry: BufferGeometry, faceIndex: number) {\r\n        if (!geometry.index) throw new Error('Geometry does not have index information.');\r\n        const geoIndex = geometry.index.array;\r\n        const bufferAttr = geometry.attributes[IdAttrName] as BufferAttribute;\r\n        return bufferAttr.getX(geoIndex[3 * faceIndex]);\r\n    }\r\n\r\n    async getHeaderLine(modelID: number, headerType: number) {\r\n        this.updateCurrentProps();\r\n        return this.currentProps.getHeaderLine(modelID, headerType);\r\n    }\r\n\r\n    async getItemProperties(modelID: number, elementID: number, recursive = false) {\r\n        this.updateCurrentProps();\r\n        return this.currentProps.getItemProperties(modelID, elementID, recursive);\r\n    }\r\n\r\n    async getAllItemsOfType(modelID: number, type: number, verbose: boolean) {\r\n        this.updateCurrentProps();\r\n        return this.currentProps.getAllItemsOfType(modelID, type, verbose);\r\n    }\r\n\r\n    async getPropertySets(modelID: number, elementID: number, recursive = false) {\r\n        this.updateCurrentProps();\r\n        return this.currentProps.getPropertySets(modelID, elementID, recursive);\r\n    }\r\n\r\n    async getTypeProperties(modelID: number, elementID: number, recursive = false) {\r\n        this.updateCurrentProps();\r\n        return this.currentProps.getTypeProperties(modelID, elementID, recursive);\r\n    }\r\n\r\n    async getMaterialsProperties(modelID: number, elementID: number, recursive = false) {\r\n        this.updateCurrentProps();\r\n        return this.currentProps.getMaterialsProperties(modelID, elementID, recursive);\r\n    }\r\n\r\n    async getSpatialStructure(modelID: number, includeProperties?: boolean) {\r\n        this.updateCurrentProps();\r\n        if (!this.state.useJSON && includeProperties) {\r\n            console.warn('Including properties in getSpatialStructure with the JSON workflow disabled can lead to poor performance.');\r\n        }\r\n        return await this.currentProps.getSpatialStructure(modelID, includeProperties);\r\n    }\r\n\r\n    private updateCurrentProps() {\r\n        this.currentProps = this.state.useJSON ? this.jsonProps : this.webIfcProps;\r\n    }\r\n\r\n}\r\n","import { IfcState } from '../BaseDefinitions';\r\nimport { IFCWorkerHandler } from '../web-workers/IFCWorkerHandler';\r\n\r\n/**\r\n * Contains the logic to manage the type (e. g. IfcWall, IfcWindow, IfcDoor) of\r\n * all the items within an IFC file.\r\n */\r\nexport class TypeManager {\r\n\r\n    constructor(private state: IfcState) {\r\n        this.state = state;\r\n    }\r\n\r\n    async getAllTypes(worker?: IFCWorkerHandler){\r\n\t\tfor (let modelID in this.state.models) {\r\n\t\t\tif (this.state.models.hasOwnProperty(modelID)) {\r\n\t\t\t\tconst types = this.state.models[modelID].types;\r\n\t\t\t\tif (Object.keys(types).length == 0) {\r\n\t\t\t\t\tawait this.getAllTypesOfModel(parseInt(modelID), worker);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n    }\r\n\r\n    async getAllTypesOfModel(modelID: number, worker?: IFCWorkerHandler) {\r\n        const result = {};\r\n        const elements = await this.state.api.GetIfcEntityList(modelID);\r\n        for(let i = 0; i < elements.length; i++) {\r\n            const element = elements[i];\r\n            const lines = await this.state.api.GetLineIDsWithType(modelID, element);\r\n            const size = lines.size();\r\n            //@ts-ignore\r\n            for (let i = 0; i < size; i++) result[lines.get(i)] = element;\r\n        }\r\n        if(this.state.worker.active && worker) {\r\n            // TODO: When using web workers, store the type information there and request it to the worker\r\n            // Otherwise the type data is stored in 2 different places at the same time\r\n            await worker.workerState.updateModelStateTypes(modelID, result);\r\n        }\r\n        this.state.models[modelID].types = result;\r\n    }\r\n}\r\n","import { BufferGeometry, Mesh } from 'three';\r\n\r\nexport class BvhManager {\r\n    private computeBoundsTree?: any;\r\n    private disposeBoundsTree?: any;\r\n    private acceleratedRaycast?: any;\r\n\r\n    initializeMeshBVH(computeBoundsTree: any, disposeBoundsTree: any, acceleratedRaycast: any) {\r\n        this.computeBoundsTree = computeBoundsTree;\r\n        this.disposeBoundsTree = disposeBoundsTree;\r\n        this.acceleratedRaycast = acceleratedRaycast;\r\n        this.setupThreeMeshBVH();\r\n    }\r\n\r\n    applyThreeMeshBVH(geometry: BufferGeometry) {\r\n        if (this.computeBoundsTree)\r\n            //@ts-ignore\r\n            geometry.computeBoundsTree();\r\n    }\r\n\r\n    private setupThreeMeshBVH() {\r\n        if (!this.computeBoundsTree || !this.disposeBoundsTree || !this.acceleratedRaycast) return;\r\n        //@ts-ignore\r\n        BufferGeometry.prototype.computeBoundsTree = this.computeBoundsTree;\r\n        //@ts-ignore\r\n        BufferGeometry.prototype.disposeBoundsTree = this.disposeBoundsTree;\r\n        Mesh.prototype.raycast = this.acceleratedRaycast;\r\n    }\r\n}","import { IfcState, WebIfcAPI } from '../BaseDefinitions';\r\n\r\nexport interface IfcWorkerAPI {\r\n    post: (data: any) => void;\r\n    initializeAPI: (api: WebIfcAPI) => void;\r\n    state?: IfcState;\r\n    postCallback: (data: any, result: any, serializer?: any) => void;\r\n}\r\n\r\nexport enum WorkerActions {\r\n    // Worker State Actions\r\n    updateStateUseJson = 'updateStateUseJson',\r\n    updateStateWebIfcSettings = 'updateStateWebIfcSettings',\r\n    updateModelStateTypes = 'updateModelStateTypes',\r\n    updateModelStateJsonData = 'updateModelStateJsonData',\r\n    loadJsonDataFromWorker = 'loadJsonDataFromWorker',\r\n    dispose = 'dispose',\r\n\r\n    // WebIFC Actions\r\n    Close = 'Close',\r\n    DisposeWebIfc = 'DisposeWebIfc',\r\n    Init = 'Init',\r\n    OpenModel = 'OpenModel',\r\n    CreateModel = 'CreateModel',\r\n    ExportFileAsIFC = 'ExportFileAsIFC',\r\n    GetGeometry = 'GetGeometry',\r\n    GetLine = 'GetLine',\r\n    GetAndClearErrors = 'GetAndClearErrors',\r\n    WriteLine = 'WriteLine',\r\n    FlattenLine = 'FlattenLine',\r\n    GetRawLineData = 'GetRawLineData',\r\n    WriteRawLineData = 'WriteRawLineData',\r\n    GetLineIDsWithType = 'GetLineIDsWithType',\r\n    GetAllLines = 'GetAllLines',\r\n    SetGeometryTransformation = 'SetGeometryTransformation',\r\n    GetCoordinationMatrix = 'GetCoordinationMatrix',\r\n    GetVertexArray = 'GetVertexArray',\r\n    GetIndexArray = 'GetIndexArray',\r\n    getSubArray = 'getSubArray',\r\n    CloseModel = 'CloseModel',\r\n    StreamAllMeshes = 'StreamAllMeshes',\r\n    StreamAllMeshesWithTypes = 'StreamAllMeshesWithTypes',\r\n    IsModelOpen = 'IsModelOpen',\r\n    LoadAllGeometry = 'LoadAllGeometry',\r\n    GetFlatMesh = 'GetFlatMesh',\r\n    SetWasmPath = 'SetWasmPath',\r\n    GetNameFromTypeCode = 'GetNameFromTypeCode',\r\n    GetIfcEntityList = 'GetIfcEntityList',\r\n    GetTypeCodeFromName ='GetTypeCodeFromName',\r\n\r\n    // Parser\r\n    parse = 'parse',\r\n    setupOptionalCategories = 'setupOptionalCategories',\r\n\r\n    // Properties\r\n    getExpressId = 'getExpressId',\r\n    initializeProperties = 'initializeProperties',\r\n    getAllItemsOfType = 'getAllItemsOfType',\r\n    getItemProperties = 'getItemProperties',\r\n    getMaterialsProperties = 'getMaterialsProperties',\r\n    getPropertySets = 'getPropertySets',\r\n    getSpatialStructure = 'getSpatialStructure',\r\n    getTypeProperties = 'getTypeProperties',\r\n    getHeaderLine = 'getHeaderLine',\r\n}\r\n\r\nexport enum WorkerAPIs {\r\n    workerState = 'workerState',\r\n    webIfc = 'webIfc',\r\n    properties = 'properties',\r\n    parser = 'parser',\r\n}\r\n\r\nexport interface IfcEventData {\r\n    worker: WorkerAPIs;\r\n    action: WorkerActions;\r\n    args: any;\r\n    id: number;\r\n    result: any;\r\n    onProgress: boolean;\r\n}\r\n\r\nexport interface RootWorker {\r\n    [WorkerAPIs.workerState]: WorkerStateAPI;\r\n    [WorkerAPIs.webIfc]: WebIfcWorkerAPI;\r\n    [WorkerAPIs.properties]: PropertyWorkerAPI;\r\n}\r\n\r\nexport interface BaseWorkerAPI {\r\n    API: WorkerAPIs;\r\n}\r\n\r\nexport type IfcWorkerEventHandler = (data: IfcEventData) => void;\r\n\r\nexport interface WorkerStateAPI extends BaseWorkerAPI {\r\n    [WorkerActions.updateStateUseJson]: IfcWorkerEventHandler;\r\n    [WorkerActions.updateStateWebIfcSettings]: IfcWorkerEventHandler;\r\n    [WorkerActions.updateModelStateTypes]: IfcWorkerEventHandler;\r\n    [WorkerActions.updateModelStateJsonData]: IfcWorkerEventHandler;\r\n    [WorkerActions.loadJsonDataFromWorker]: IfcWorkerEventHandler;\r\n    [WorkerActions.dispose]: IfcWorkerEventHandler;\r\n}\r\n\r\nexport interface PropertyWorkerAPI extends BaseWorkerAPI {\r\n    [WorkerActions.getAllItemsOfType]: IfcWorkerEventHandler;\r\n    [WorkerActions.getItemProperties]: IfcWorkerEventHandler;\r\n    [WorkerActions.getMaterialsProperties]: IfcWorkerEventHandler;\r\n    [WorkerActions.getPropertySets]: IfcWorkerEventHandler;\r\n    [WorkerActions.getSpatialStructure]: IfcWorkerEventHandler;\r\n    [WorkerActions.getTypeProperties]: IfcWorkerEventHandler;\r\n}\r\n\r\nexport interface ParserWorkerAPI extends BaseWorkerAPI {\r\n    [WorkerActions.parse]: IfcWorkerEventHandler;\r\n    [WorkerActions.setupOptionalCategories]: IfcWorkerEventHandler;\r\n}\r\n\r\nexport interface WebIfcWorkerAPI extends BaseWorkerAPI {\r\n    [WorkerActions.Init]: IfcWorkerEventHandler;\r\n    [WorkerActions.Close]: IfcWorkerEventHandler;\r\n    [WorkerActions.DisposeWebIfc]: IfcWorkerEventHandler;\r\n    [WorkerActions.OpenModel]: IfcWorkerEventHandler;\r\n    [WorkerActions.CreateModel]: IfcWorkerEventHandler;\r\n    [WorkerActions.ExportFileAsIFC]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetGeometry]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetLine]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetAndClearErrors]: IfcWorkerEventHandler;\r\n    [WorkerActions.WriteLine]: IfcWorkerEventHandler;\r\n    [WorkerActions.FlattenLine]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetRawLineData]: IfcWorkerEventHandler;\r\n    [WorkerActions.WriteRawLineData]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetLineIDsWithType]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetAllLines]: IfcWorkerEventHandler;\r\n    [WorkerActions.SetGeometryTransformation]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetCoordinationMatrix]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetVertexArray]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetIndexArray]: IfcWorkerEventHandler;\r\n    [WorkerActions.getSubArray]: IfcWorkerEventHandler;\r\n    [WorkerActions.CloseModel]: IfcWorkerEventHandler;\r\n    [WorkerActions.StreamAllMeshes]: IfcWorkerEventHandler;\r\n    [WorkerActions.StreamAllMeshesWithTypes]: IfcWorkerEventHandler;\r\n    [WorkerActions.IsModelOpen]: IfcWorkerEventHandler;\r\n    [WorkerActions.LoadAllGeometry]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetFlatMesh]: IfcWorkerEventHandler;\r\n    [WorkerActions.SetWasmPath]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetNameFromTypeCode]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetIfcEntityList]: IfcWorkerEventHandler;\r\n    [WorkerActions.GetTypeCodeFromName]: IfcWorkerEventHandler;\r\n}\r\n\r\nexport interface SerializedVector {\r\n    [key: number]: any;\r\n\r\n    size: number;\r\n}\r\n\r\nexport interface SerializedIfcGeometry {\r\n    GetVertexData: number;\r\n    GetVertexDataSize: number;\r\n    GetIndexData: number;\r\n    GetIndexDataSize: number;\r\n}\r\n\r\nexport interface SerializedFlatMesh {\r\n    geometries: SerializedVector;\r\n    expressID: number;\r\n}\r\n\r\nexport const ErrorStateNotAvailable = 'The state of the worker does not exist';\r\nexport const ErrorRootStateNotAvailable = 'The root worker does not have any state';\r\nexport const ErrorPropertiesNotAvailable = 'Error: Properties not available from web worker';\r\nexport const ErrorParserNotAvailable = 'Error: Parser not available from web worker';\r\nexport const ErrorBadJsonPath = 'Error: Model not available from web worker';\r\nexport const ErrorBadJson = 'Error: The given Json could not be read as a JS object';","import { SerializedVector } from '../BaseDefinitions';\r\nimport { Vector as WebIfcVector } from 'web-ifc';\r\n\r\nexport class Vector<T> implements WebIfcVector<T> {\r\n    private readonly _size: number;\r\n    private _data: { [key: number]: T } = {};\r\n\r\n    constructor(vector: SerializedVector) {\r\n        this._size = vector.size;\r\n        const keys = Object.keys(vector).filter((key) => key.indexOf('size') === -1).map(key => parseInt(key));\r\n        keys.forEach((key) => this._data[key] = vector[key]);\r\n    }\r\n\r\n    size() {\r\n        return this._size;\r\n    }\r\n\r\n    get(index: number) {\r\n        return this._data[index];\r\n    }\r\n}","import { SerializedIfcGeometry } from '../BaseDefinitions';\r\nimport { IfcGeometry as WebIfcIfcGeometry } from 'web-ifc';\r\n\r\nexport class IfcGeometry implements WebIfcIfcGeometry {\r\n    private readonly _GetVertexData: number;\r\n    private readonly _GetVertexDataSize: number;\r\n    private readonly _GetIndexData: number;\r\n    private readonly _GetIndexDataSize: number;\r\n\r\n    constructor(vector: SerializedIfcGeometry) {\r\n        this._GetVertexData = vector.GetVertexData;\r\n        this._GetVertexDataSize = vector.GetVertexDataSize;\r\n        this._GetIndexData = vector.GetIndexData;\r\n        this._GetIndexDataSize = vector.GetIndexDataSize;\r\n    }\r\n\r\n    GetVertexData() {\r\n        return this._GetVertexData;\r\n    }\r\n\r\n    GetVertexDataSize() {\r\n        return this._GetVertexDataSize;\r\n    }\r\n\r\n    GetIndexData() {\r\n        return this._GetIndexData;\r\n    }\r\n\r\n    GetIndexDataSize() {\r\n        return this._GetIndexDataSize;\r\n    }\r\n}","import { SerializedFlatMesh } from '../BaseDefinitions';\r\nimport { FlatMesh as WebIfcFlatMesh, PlacedGeometry } from 'web-ifc';\r\nimport { Vector } from './Vector';\r\nimport { Serializer } from './Serializer';\r\n\r\nexport class FlatMesh implements WebIfcFlatMesh {\r\n    geometries: Vector<PlacedGeometry>;\r\n    expressID: number;\r\n\r\n    constructor(serializer: Serializer, flatMesh: SerializedFlatMesh) {\r\n        this.expressID = flatMesh.expressID;\r\n        this.geometries = serializer.reconstructVector(flatMesh.geometries);\r\n    }\r\n}","import { SerializedVector } from '../BaseDefinitions';\r\nimport { FlatMesh as WebIfcFlatMesh, Vector as WebIfcVector } from 'web-ifc';\r\nimport { Serializer } from './Serializer';\r\n\r\nexport class FlatMeshVector implements WebIfcVector<WebIfcFlatMesh> {\r\n    private readonly _size: number;\r\n    private _data: { [key: number]: WebIfcFlatMesh } = {};\r\n\r\n    constructor(serializer: Serializer, vector: SerializedVector) {\r\n        this._size = vector.size;\r\n        const keys = Object.keys(vector).filter((key) => key.indexOf('size') === -1).map(key => parseInt(key));\r\n        keys.forEach(key => this._data[key] = serializer.reconstructFlatMesh(vector[key]));\r\n    }\r\n\r\n    size() {\r\n        return this._size;\r\n    }\r\n\r\n    get(index: number) {\r\n        return this._data[index];\r\n    }\r\n}","import {Color, DoubleSide, MeshLambertMaterial} from 'three';\r\n\r\nexport class SerializedMaterial {\r\n    color: number[];\r\n    opacity: number;\r\n    transparent: boolean;\r\n\r\n    constructor(material: MeshLambertMaterial) {\r\n        this.color = [material.color.r, material.color.g, material.color.b];\r\n        this.opacity = material.opacity;\r\n        this.transparent = material.transparent;\r\n    }\r\n}\r\n\r\nexport class MaterialReconstructor {\r\n    static new(material: SerializedMaterial) {\r\n        return new MeshLambertMaterial({\r\n            color: new Color(material.color[0], material.color[1], material.color[2]),\r\n            opacity: material.opacity,\r\n            transparent: material.transparent,\r\n            side: DoubleSide\r\n        })\r\n    }\r\n}","import { BufferAttribute, BufferGeometry } from 'three';\r\n\r\nexport class SerializedGeometry {\r\n    position: ArrayLike<number>;\r\n    normal: ArrayLike<number>;\r\n    expressID: ArrayLike<number>;\r\n    index: ArrayLike<number>;\r\n    groups: { start: number, count: number, materialIndex?: number }[];\r\n\r\n    constructor(geometry: BufferGeometry) {\r\n        this.position = (geometry.attributes.position as BufferAttribute)?.array || [];\r\n        this.normal = (geometry.attributes.normal as BufferAttribute)?.array || [];\r\n        this.expressID = (geometry.attributes.expressID as BufferAttribute)?.array || [];\r\n        this.index = geometry.index?.array || [];\r\n        this.groups = geometry.groups;\r\n    }\r\n}\r\n\r\nexport class GeometryReconstructor {\r\n    static new(serialized: SerializedGeometry) {\r\n        const geom = new BufferGeometry();\r\n        GeometryReconstructor.set(geom, 'expressID', new Uint32Array(serialized.expressID), 1);\r\n        GeometryReconstructor.set(geom, 'position', new Float32Array(serialized.position), 3);\r\n        GeometryReconstructor.set(geom, 'normal', new Float32Array(serialized.normal), 3);\r\n        geom.setIndex(Array.from(serialized.index));\r\n        geom.groups = serialized.groups;\r\n        return geom;\r\n    }\r\n\r\n    private static set(geom: BufferGeometry, name: string, data: ArrayLike<number>, size: number) {\r\n        if(data.length > 0) {\r\n            geom.setAttribute(name, new BufferAttribute(data, size));\r\n        }\r\n    }\r\n}","import { IFCModel } from '../../components/IFCModel';\r\nimport { Material, MeshLambertMaterial } from 'three';\r\nimport { MaterialReconstructor, SerializedMaterial } from './Material';\r\nimport { GeometryReconstructor, SerializedGeometry } from './Geometry';\r\n\r\nexport class SerializedMesh {\r\n\r\n    modelID: number;\r\n    geometry: SerializedGeometry;\r\n    materials: SerializedMaterial [] = [];\r\n\r\n    constructor(model: IFCModel) {\r\n        this.modelID = model.modelID;\r\n        this.geometry = new SerializedGeometry(model.geometry);\r\n        if (Array.isArray(model.material)) {\r\n            model.material.forEach(mat => {\r\n                this.materials.push(new SerializedMaterial(mat as MeshLambertMaterial));\r\n            });\r\n        } else {\r\n            this.materials.push(new SerializedMaterial(model.material as MeshLambertMaterial));\r\n        }\r\n    }\r\n}\r\n\r\nexport class MeshReconstructor {\r\n\r\n    static new(serialized: SerializedMesh) {\r\n        const model = new IFCModel();\r\n        model.modelID = serialized.modelID;\r\n        model.geometry = GeometryReconstructor.new(serialized.geometry);\r\n        MeshReconstructor.getMaterials(serialized, model);\r\n        return model;\r\n    }\r\n\r\n    private static getMaterials(serialized: SerializedMesh, model: IFCModel) {\r\n        model.material = [];\r\n        const mats = model.material as Material[];\r\n        serialized.materials.forEach(mat => {\r\n            mats.push(MaterialReconstructor.new(mat));\r\n        });\r\n    }\r\n}","import { Vector as WebIfcVector, IfcGeometry as WebIfcIfcGeometry, FlatMesh as WebIfcFlatMesh } from 'web-ifc';\r\nimport { SerializedFlatMesh, SerializedIfcGeometry, SerializedVector } from '../BaseDefinitions';\r\nimport { Vector } from './Vector';\r\nimport { IfcGeometry } from './IfcGeometry';\r\nimport { FlatMesh } from './FlatMesh';\r\nimport { FlatMeshVector } from './FlatMeshVector';\r\nimport { IFCModel } from '../../components/IFCModel';\r\nimport { MeshReconstructor, SerializedMesh } from './Mesh';\r\n\r\nexport class Serializer {\r\n\r\n    serializeVector<T>(vector: WebIfcVector<T>) {\r\n        const size = vector.size();\r\n        const serialized: SerializedVector = { size };\r\n        for (let i = 0; i < size; i++) {\r\n            serialized[i] = vector.get(i);\r\n        }\r\n        return serialized;\r\n    }\r\n\r\n    reconstructVector(vector: SerializedVector): Vector<any> {\r\n        return new Vector(vector);\r\n    }\r\n\r\n    serializeIfcGeometry(geometry: WebIfcIfcGeometry) {\r\n        const GetVertexData = geometry.GetVertexData();\r\n        const GetVertexDataSize = geometry.GetVertexDataSize();\r\n        const GetIndexData = geometry.GetIndexData();\r\n        const GetIndexDataSize = geometry.GetIndexDataSize();\r\n        return {\r\n            GetVertexData,\r\n            GetVertexDataSize,\r\n            GetIndexData,\r\n            GetIndexDataSize\r\n        } as SerializedIfcGeometry;\r\n    }\r\n\r\n    reconstructIfcGeometry(geometry: SerializedIfcGeometry) {\r\n        return new IfcGeometry(geometry);\r\n    }\r\n\r\n    serializeFlatMesh(flatMesh: WebIfcFlatMesh) {\r\n        return {\r\n            expressID: flatMesh.expressID,\r\n            geometries: this.serializeVector(flatMesh.geometries)\r\n        } as SerializedFlatMesh;\r\n    }\r\n\r\n    reconstructFlatMesh(flatMesh: SerializedFlatMesh) {\r\n        return new FlatMesh(this, flatMesh);\r\n    }\r\n\r\n    serializeFlatMeshVector(vector: WebIfcVector<WebIfcFlatMesh>) {\r\n        const size = vector.size();\r\n        const serialized: SerializedVector = { size };\r\n        for (let i = 0; i < size; i++) {\r\n            const flatMesh = vector.get(i);\r\n            serialized[i] = this.serializeFlatMesh(flatMesh);\r\n        }\r\n        return serialized;\r\n    }\r\n\r\n    reconstructFlatMeshVector(vector: SerializedVector): WebIfcVector<WebIfcFlatMesh> {\r\n        return new FlatMeshVector(this, vector);\r\n    }\r\n\r\n    serializeIfcModel(model: IFCModel) {\r\n        return new SerializedMesh(model);\r\n    }\r\n\r\n    reconstructIfcModel(model: SerializedMesh) {\r\n        return MeshReconstructor.new(model);\r\n    }\r\n}","import { PropertyManagerAPI } from '../../components/properties/BaseDefinitions';\r\nimport { IFCWorkerHandler } from '../IFCWorkerHandler';\r\nimport { WorkerActions, WorkerAPIs } from '../BaseDefinitions';\r\nimport { BufferAttribute, BufferGeometry } from 'three';\r\nimport { IdAttrName } from '../../BaseDefinitions';\r\n\r\nexport class PropertyHandler implements PropertyManagerAPI {\r\n\r\n    API = WorkerAPIs.properties;\r\n\r\n    constructor(private handler: IFCWorkerHandler) {\r\n    }\r\n\r\n    getExpressId(geometry: BufferGeometry, faceIndex: number) {\r\n        if (!geometry.index) throw new Error('Geometry does not have index information.');\r\n        const geoIndex = geometry.index.array;\r\n        const bufferAttr = geometry.attributes[IdAttrName] as BufferAttribute;\r\n        return bufferAttr.getX(geoIndex[3 * faceIndex]);\r\n    }\r\n\r\n    getHeaderLine(modelID: number, headerType: number): Promise<any[]> {\r\n        return this.handler.request(this.API, WorkerActions.getHeaderLine, { modelID, headerType });\r\n    }\r\n\r\n    getAllItemsOfType(modelID: number, type: number, verbose: boolean): Promise<any[]> {\r\n        return this.handler.request(this.API, WorkerActions.getAllItemsOfType, { modelID, type, verbose });\r\n    }\r\n\r\n    getItemProperties(modelID: number, elementID: number, recursive: boolean): Promise<any> {\r\n        return this.handler.request(this.API, WorkerActions.getItemProperties, { modelID, elementID, recursive });\r\n    }\r\n\r\n    getMaterialsProperties(modelID: number, elementID: number, recursive: boolean): Promise<any[]> {\r\n        return this.handler.request(this.API, WorkerActions.getMaterialsProperties, { modelID, elementID, recursive });\r\n    }\r\n\r\n    getPropertySets(modelID: number, elementID: number, recursive: boolean): Promise<any[]> {\r\n        return this.handler.request(this.API, WorkerActions.getPropertySets, { modelID, elementID, recursive });\r\n    }\r\n\r\n    getTypeProperties(modelID: number, elementID: number, recursive: boolean): Promise<any[]> {\r\n        return this.handler.request(this.API, WorkerActions.getTypeProperties, { modelID, elementID, recursive });\r\n    }\r\n\r\n    getSpatialStructure(modelID: number, includeProperties?: boolean): Promise<any> {\r\n        return this.handler.request(this.API, WorkerActions.getSpatialStructure, { modelID, includeProperties });\r\n    }\r\n}","import { WebIfcAPI } from '../../BaseDefinitions';\r\nimport {\r\n    \r\n    SerializedFlatMesh,\r\n    SerializedIfcGeometry,\r\n    SerializedVector,\r\n    WorkerActions,\r\n    WorkerAPIs\r\n} from '../BaseDefinitions';\r\n\r\nimport { NewIfcModel, FlatMesh, IfcGeometry, LoaderError, LoaderSettings, RawLineData, Vector } from 'web-ifc';\r\nimport { IFCWorkerHandler } from '../IFCWorkerHandler';\r\nimport { Serializer } from '../serializer/Serializer';\r\n\r\nexport class WebIfcHandler implements WebIfcAPI {\r\n\r\n    wasmModule: any;\r\n    API = WorkerAPIs.webIfc;\r\n\r\n    constructor(private handler: IFCWorkerHandler, private serializer: Serializer) {\r\n    }\r\n\r\n    async Init(): Promise<void> {\r\n        this.wasmModule = true;\r\n        return this.handler.request(this.API, WorkerActions.Init);\r\n    }\r\n\r\n    async OpenModel(data:  string | Uint8Array, settings?: LoaderSettings): Promise<number> {\r\n        return this.handler.request(this.API, WorkerActions.OpenModel, { data, settings });\r\n    }\r\n\r\n    async CreateModel(model: NewIfcModel, settings?: LoaderSettings): Promise<number> {\r\n        return this.handler.request(this.API, WorkerActions.CreateModel, { model, settings });\r\n    }\r\n\r\n    async ExportFileAsIFC(modelID: number): Promise<Uint8Array> {\r\n        return this.handler.request(this.API, WorkerActions.ExportFileAsIFC, { modelID });\r\n    }\r\n\r\n    async GetHeaderLine(modelID: number, headerType: number): Promise<any> {\r\n        return this.handler.request(this.API, WorkerActions.getHeaderLine, { modelID, headerType });\r\n    }\r\n\r\n    async GetGeometry(modelID: number, geometryExpressID: number): Promise<IfcGeometry> {\r\n        this.handler.serializeHandlers[this.handler.requestID] = (geom: SerializedIfcGeometry) => {\r\n            return this.serializer.reconstructIfcGeometry(geom);\r\n        }\r\n        return this.handler.request(this.API, WorkerActions.GetGeometry, { modelID, geometryExpressID });\r\n    }\r\n\r\n    async GetLine(modelID: number, expressID: number, flatten?: boolean): Promise<any> {\r\n        return this.handler.request(this.API, WorkerActions.GetLine, { modelID, expressID, flatten });\r\n    }\r\n\r\n    async GetAndClearErrors(modelID: number): Promise<Vector<LoaderError>> {\r\n        this.handler.serializeHandlers[this.handler.requestID] = (vector: SerializedVector) => {\r\n            return this.serializer.reconstructVector(vector);\r\n        }\r\n        return this.handler.request(this.API, WorkerActions.GetAndClearErrors, { modelID });\r\n    }\r\n\r\n    async GetNameFromTypeCode(type:number): Promise<string> {\r\n        return this.handler.request(this.API, WorkerActions.GetNameFromTypeCode, { type });\r\n    } \r\n\r\n    async GetIfcEntityList(modelID: number) : Promise<number[]> {\r\n        return this.handler.request(this.API, WorkerActions.GetIfcEntityList, { modelID });\r\n    }\r\n\r\n    async GetTypeCodeFromName(modelID: number,typeName:string): Promise<number> {\r\n         return this.handler.request(this.API, WorkerActions.GetTypeCodeFromName, { modelID,typeName });\r\n    }\r\n\r\n    async WriteLine(modelID: number, lineObject: any): Promise<void> {\r\n        return this.handler.request(this.API, WorkerActions.WriteLine, { modelID, lineObject });\r\n    }\r\n\r\n    async FlattenLine(modelID: number, line: any): Promise<void> {\r\n        return this.handler.request(this.API, WorkerActions.FlattenLine, { modelID, line });\r\n    }\r\n\r\n    async GetRawLineData(modelID: number, expressID: number): Promise<RawLineData> {\r\n        return this.handler.request(this.API, WorkerActions.GetRawLineData, { modelID, expressID });\r\n    }\r\n\r\n    async WriteRawLineData(modelID: number, data: RawLineData): Promise<any> {\r\n        return this.handler.request(this.API, WorkerActions.WriteRawLineData, { modelID, data });\r\n    }\r\n\r\n    async GetLineIDsWithType(modelID: number, type: number): Promise<Vector<number>> {\r\n        this.handler.serializeHandlers[this.handler.requestID] = (vector: SerializedVector) => {\r\n            return this.serializer.reconstructVector(vector);\r\n        }\r\n        return this.handler.request(this.API, WorkerActions.GetLineIDsWithType, { modelID, type });\r\n    }\r\n\r\n    async GetAllLines(modelID: number): Promise<Vector<number>> {\r\n        this.handler.serializeHandlers[this.handler.requestID] = (vector: SerializedVector) => {\r\n            return this.serializer.reconstructVector(vector);\r\n        }\r\n        return this.handler.request(this.API, WorkerActions.GetAllLines, { modelID });\r\n    }\r\n\r\n    async SetGeometryTransformation(modelID: number, transformationMatrix: number[]): Promise<void> {\r\n        return this.handler.request(this.API, WorkerActions.SetGeometryTransformation, {\r\n            modelID,\r\n            transformationMatrix\r\n        });\r\n    }\r\n\r\n    async GetCoordinationMatrix(modelID: number): Promise<number[]> {\r\n        return this.handler.request(this.API, WorkerActions.GetCoordinationMatrix, { modelID });\r\n    }\r\n\r\n    async GetVertexArray(ptr: number, size: number): Promise<Float32Array> {\r\n        return this.handler.request(this.API, WorkerActions.GetVertexArray, { ptr, size });\r\n    }\r\n\r\n    async GetIndexArray(ptr: number, size: number): Promise<Uint32Array> {\r\n        return this.handler.request(this.API, WorkerActions.GetIndexArray, { ptr, size });\r\n    }\r\n\r\n    async getSubArray(heap: any, startPtr: any, sizeBytes: any): Promise<any> {\r\n        return this.handler.request(this.API, WorkerActions.getSubArray, { heap, startPtr, sizeBytes });\r\n    }\r\n\r\n    async CloseModel(modelID: number): Promise<void> {\r\n        return this.handler.request(this.API, WorkerActions.CloseModel, { modelID });\r\n    }\r\n\r\n    async StreamAllMeshes(modelID: number, meshCallback: (mesh: FlatMesh) => void): Promise<void> {\r\n        this.handler.callbackHandlers[this.handler.requestID] = {\r\n            action: meshCallback,\r\n            serializer: this.serializer.reconstructFlatMesh\r\n        };\r\n        return this.handler.request(this.API, WorkerActions.StreamAllMeshes, { modelID });\r\n    }\r\n\r\n    async StreamAllMeshesWithTypes(modelID: number, types: number[], meshCallback: (mesh: FlatMesh) => void): Promise<void> {\r\n        this.handler.callbackHandlers[this.handler.requestID] = {\r\n            action: meshCallback,\r\n            serializer: this.serializer.reconstructFlatMesh\r\n        };\r\n        return this.handler.request(this.API, WorkerActions.StreamAllMeshesWithTypes, { modelID, types });\r\n    }\r\n\r\n    async IsModelOpen(modelID: number): Promise<boolean> {\r\n        return this.handler.request(this.API, WorkerActions.IsModelOpen, { modelID });\r\n    }\r\n\r\n    async LoadAllGeometry(modelID: number): Promise<Vector<FlatMesh>> {\r\n        this.handler.serializeHandlers[this.handler.requestID] = (vector: SerializedVector) => {\r\n            return this.serializer.reconstructFlatMeshVector(vector);\r\n        }\r\n        return this.handler.request(this.API, WorkerActions.LoadAllGeometry, { modelID });\r\n    }\r\n\r\n    async GetFlatMesh(modelID: number, expressID: number): Promise<FlatMesh> {\r\n        this.handler.serializeHandlers[this.handler.requestID] = (flatMesh: SerializedFlatMesh) => {\r\n            return this.serializer.reconstructFlatMesh(flatMesh);\r\n        }\r\n        return this.handler.request(this.API, WorkerActions.GetFlatMesh, { modelID, expressID });\r\n    }\r\n\r\n    async SetWasmPath(path: string): Promise<void> {\r\n        return this.handler.request(this.API, WorkerActions.SetWasmPath, { path });\r\n    }\r\n}","import { WorkerActions, WorkerAPIs } from '../BaseDefinitions';\r\nimport { IFCWorkerHandler } from '../IFCWorkerHandler';\r\nimport { IfcState } from '../../BaseDefinitions';\r\n\r\nexport class WorkerStateHandler {\r\n    API = WorkerAPIs.workerState;\r\n    state: IfcState;\r\n\r\n    constructor(private handler: IFCWorkerHandler) {\r\n        this.state = this.handler.state;\r\n    }\r\n\r\n    async updateStateUseJson() {\r\n        const useJson = this.state.useJSON;\r\n        return this.handler.request(this.API, WorkerActions.updateStateUseJson, { useJson });\r\n    }\r\n\r\n    async updateStateWebIfcSettings() {\r\n        const webIfcSettings = this.state.webIfcSettings;\r\n        return this.handler.request(this.API, WorkerActions.updateStateWebIfcSettings, { webIfcSettings });\r\n    }\r\n\r\n    async updateModelStateTypes (modelID: number, types: any) {\r\n        return this.handler.request(this.API, WorkerActions.updateModelStateTypes, { modelID, types });\r\n    }\r\n\r\n    async updateModelStateJsonData(modelID: number, jsonData: any) {\r\n        return this.handler.request(this.API, WorkerActions.updateModelStateJsonData, { modelID, jsonData });\r\n    }\r\n\r\n    async loadJsonDataFromWorker(modelID: number, path: string) {\r\n        return this.handler.request(this.API, WorkerActions.loadJsonDataFromWorker, { modelID, path });\r\n    }\r\n}","export enum DBOperation {\r\n    transferIfcModel,\r\n    transferIndividualItems\r\n}\r\n\r\nexport class IndexedDatabase {\r\n    async save(item: any, id: DBOperation) {\r\n        const open = IndexedDatabase.openOrCreateDB(id);\r\n        this.createSchema(open, id)\r\n        return new Promise<any>((resolve, reject) => {\r\n            open.onsuccess = () => this.saveItem(item, open, id, resolve);\r\n        });\r\n    }\r\n\r\n    async load(id: number) {\r\n        const open = IndexedDatabase.openOrCreateDB(id);\r\n        return new Promise<any>((resolve, reject) => {\r\n            open.onsuccess = () => this.loadItem(open, id, resolve);\r\n        })\r\n    }\r\n\r\n    private createSchema(open: IDBOpenDBRequest, id: DBOperation) {\r\n        open.onupgradeneeded = function () {\r\n            const db = open.result;\r\n            db.createObjectStore(id.toString(), {keyPath: \"id\"});\r\n        };\r\n    }\r\n\r\n    private saveItem(item: any, open: IDBOpenDBRequest, id: DBOperation, resolve: (value: any) => void ) {\r\n        const {db, tx, store} = IndexedDatabase.getDBItems(open, id);\r\n        item.id = id;\r\n        store.put(item);\r\n        tx.oncomplete = () => IndexedDatabase.closeDB(db, tx, resolve);\r\n    }\r\n\r\n    private loadItem(open: IDBOpenDBRequest, id: DBOperation, resolve: (value: any) => void ) {\r\n        const {db, tx, store} = IndexedDatabase.getDBItems(open, id);\r\n        const item = store.get(id);\r\n        const callback = () => {\r\n            delete item.result.id;\r\n            resolve(item.result)\r\n        };\r\n        tx.oncomplete = () => IndexedDatabase.closeDB(db, tx, callback);\r\n    }\r\n\r\n    private static getDBItems(open: IDBOpenDBRequest, id: DBOperation) {\r\n        const db = open.result;\r\n        const tx = db.transaction(id.toString(), \"readwrite\");\r\n        const store = tx.objectStore(id.toString());\r\n        return {db, tx, store};\r\n    }\r\n\r\n    private static openOrCreateDB(id: DBOperation) {\r\n        return indexedDB.open(id.toString(), 1);\r\n    }\r\n\r\n    private static closeDB(db: IDBDatabase, tx: IDBTransaction, resolve: (value: any) => void) {\r\n        db.close();\r\n        resolve(\"success\");\r\n    }\r\n}","import {OptionalCategories, ParserAPI, ParserProgress } from '../../components/IFCParser';\r\nimport { WorkerActions, WorkerAPIs } from '../BaseDefinitions';\r\nimport { IFCWorkerHandler } from '../IFCWorkerHandler';\r\nimport { IFCModel } from '../../components/IFCModel';\r\nimport { Serializer } from '../serializer/Serializer';\r\nimport { ParserResult } from '../workers/ParserWorker';\r\nimport { BvhManager } from '../../components/BvhManager';\r\nimport { DBOperation, IndexedDatabase } from '../../indexedDB/IndexedDatabase';\r\nimport { IFCOPENINGELEMENT, IFCSPACE } from \"web-ifc\";\r\n\r\nexport class ParserHandler implements ParserAPI {\r\n\r\n    optionalCategories: OptionalCategories = {\r\n        [IFCSPACE]: true,\r\n        [IFCOPENINGELEMENT]: false\r\n    };\r\n\r\n    API = WorkerAPIs.parser;\r\n\r\n    constructor(private handler: IFCWorkerHandler,\r\n                private serializer: Serializer,\r\n                private BVH: BvhManager,\r\n                private IDB: IndexedDatabase) {\r\n    }\r\n\r\n    async setupOptionalCategories(config: OptionalCategories) {\r\n        this.optionalCategories = config;\r\n        return this.handler.request(this.API, WorkerActions.setupOptionalCategories, {config});\r\n    }\r\n\r\n    async parse(buffer: any, coordinationMatrix?: number[]): Promise<IFCModel> {\r\n        this.handler.onprogressHandlers[this.handler.requestID] = (progress: ParserProgress) => {\r\n            if (this.handler.state.onProgress) this.handler.state.onProgress(progress);\r\n        };\r\n        this.handler.serializeHandlers[this.handler.requestID] = async (result: ParserResult) => {\r\n            this.updateState(result.modelID);\r\n            // await this.getItems(result.modelID);\r\n            return this.getModel();\r\n        };\r\n        return this.handler.request(this.API, WorkerActions.parse, {buffer, coordinationMatrix});\r\n    }\r\n\r\n    getAndClearErrors(_modelId: number): void {\r\n    }\r\n\r\n    private updateState(modelID: number) {\r\n        this.handler.state.models[modelID] = {\r\n            modelID: modelID,\r\n            mesh: {} as any,\r\n            types: {},\r\n            jsonData: {}\r\n        };\r\n    }\r\n\r\n    // private async getItems(modelID: number) {\r\n    //     const items = await this.IDB.load(DBOperation.transferIndividualItems);\r\n    //     this.handler.state.models[modelID].items = this.serializer.reconstructGeometriesByMaterials(items);\r\n    // }\r\n\r\n    private async getModel() {\r\n        const serializedModel = await this.IDB.load(DBOperation.transferIfcModel);\r\n        const model = this.serializer.reconstructIfcModel(serializedModel);\r\n        this.BVH.applyThreeMeshBVH(model.geometry);\r\n        this.handler.state.models[model.modelID].mesh = model;\r\n        return model;\r\n    }\r\n}","import { IfcEventData, WorkerActions, WorkerAPIs } from './BaseDefinitions';\r\nimport { Serializer } from './serializer/Serializer';\r\nimport { PropertyHandler } from './handlers/PropertyHandler';\r\nimport { WebIfcHandler } from './handlers/WebIfcHandler';\r\nimport { IfcState } from '../BaseDefinitions';\r\nimport { WorkerStateHandler } from './handlers/WorkerStateHandler';\r\nimport { ParserHandler } from './handlers/ParserHandler';\r\nimport { BvhManager } from '../components/BvhManager';\r\nimport { IndexedDatabase } from '../indexedDB/IndexedDatabase';\r\n\r\nexport class IFCWorkerHandler {\r\n\r\n    requestID = 0;\r\n    rejectHandlers: any = {};\r\n    resolveHandlers: any = {};\r\n    serializeHandlers: any = {};\r\n    callbackHandlers: { [id: number]: { action: any, serializer: any } } = {};\r\n    onprogressHandlers: any = {};\r\n\r\n    readonly IDB: IndexedDatabase;\r\n    readonly workerState: WorkerStateHandler;\r\n    readonly webIfc: WebIfcHandler;\r\n    readonly properties: PropertyHandler;\r\n    readonly parser: ParserHandler;\r\n\r\n    private ifcWorker: Worker;\r\n    private readonly serializer = new Serializer();\r\n    private readonly workerPath: string;\r\n\r\n    constructor(public state: IfcState, private BVH: BvhManager) {\r\n        this.IDB = new IndexedDatabase();\r\n        this.workerPath = this.state.worker.path;\r\n        this.ifcWorker = new Worker(this.workerPath);\r\n        this.ifcWorker.onmessage = (data: any) => this.handleResponse(data);\r\n        this.properties = new PropertyHandler(this);\r\n        this.parser = new ParserHandler(this, this.serializer, this.BVH, this.IDB);\r\n        this.webIfc = new WebIfcHandler(this, this.serializer);\r\n        this.workerState = new WorkerStateHandler(this);\r\n    }\r\n\r\n    request(worker: WorkerAPIs, action: WorkerActions, args?: any) {\r\n        const data: IfcEventData = {worker, action, args, id: this.requestID, result: undefined, onProgress: false};\r\n\r\n        return new Promise<any>((resolve, reject) => {\r\n            this.resolveHandlers[this.requestID] = resolve;\r\n            this.rejectHandlers[this.requestID] = reject;\r\n            this.requestID++;\r\n            this.ifcWorker.postMessage(data);\r\n        });\r\n    }\r\n\r\n    async terminate() {\r\n        await this.request(WorkerAPIs.workerState, WorkerActions.dispose);\r\n        await this.request(WorkerAPIs.webIfc, WorkerActions.DisposeWebIfc);\r\n        this.ifcWorker.terminate();\r\n    }\r\n\r\n    async Close(): Promise<void> {\r\n        await this.request(WorkerAPIs.webIfc, WorkerActions.Close);\r\n    }\r\n\r\n    private handleResponse(event: MessageEvent) {\r\n        const data = event.data as IfcEventData;\r\n        if (data.onProgress) {\r\n            this.resolveOnProgress(data);\r\n            return;\r\n        }\r\n        this.callHandlers(data);\r\n        delete this.resolveHandlers[data.id];\r\n        delete this.rejectHandlers[data.id];\r\n        delete this.onprogressHandlers[data.id];\r\n    }\r\n\r\n    private callHandlers(data: IfcEventData) {\r\n        try {\r\n            this.resolveSerializations(data);\r\n            this.resolveCallbacks(data);\r\n            this.resolveHandlers[data.id](data.result);\r\n        } catch (error) {\r\n            this.rejectHandlers[data.id](error);\r\n        }\r\n    }\r\n\r\n    private resolveOnProgress(data: IfcEventData) {\r\n        if (this.onprogressHandlers[data.id]) {\r\n            data.result = this.onprogressHandlers[data.id](data.result);\r\n        }\r\n    }\r\n\r\n    private resolveSerializations(data: IfcEventData) {\r\n        if (this.serializeHandlers[data.id]) {\r\n            data.result = this.serializeHandlers[data.id](data.result);\r\n            delete this.serializeHandlers[data.id];\r\n        }\r\n    }\r\n\r\n    private resolveCallbacks(data: IfcEventData) {\r\n        if (this.callbackHandlers[data.id]) {\r\n            let callbackParameter = data.result;\r\n            if (this.callbackHandlers[data.id].serializer) {\r\n                callbackParameter = this.callbackHandlers[data.id].serializer(data.result);\r\n            }\r\n            this.callbackHandlers[data.id].action(callbackParameter);\r\n        }\r\n    }\r\n}","import { IfcState } from '../BaseDefinitions';\r\nimport { Material } from 'three';\r\n\r\nexport class MemoryCleaner {\r\n    constructor(private state: IfcState) {\r\n    }\r\n\r\n    async dispose() {\r\n\r\n        Object.keys(this.state.models).forEach(modelID => {\r\n            const model = this.state.models[parseInt(modelID, 10)];\r\n            model.mesh.removeFromParent();\r\n            const geom = model.mesh.geometry as any;\r\n            if (geom.disposeBoundsTree) geom.disposeBoundsTree();\r\n            geom.dispose();\r\n            if (!Array.isArray(model.mesh.material)) model.mesh.material.dispose();\r\n            else model.mesh.material.forEach(mat => mat.dispose());\r\n            (model.mesh as any) = null;\r\n            (model.types as any) = null;\r\n            (model.jsonData as any) = null;\r\n        });\r\n\r\n        (this.state.api as any) = null;\r\n        (this.state.models as any) = null;\r\n    }\r\n}","import { IfcState } from '../BaseDefinitions';\r\n\r\nexport class IFCUtils {\r\n    \r\n    map: {[key: string]: number} = {};\r\n\r\n    constructor(public state: IfcState) {}\r\n\r\n    isA(entity: any, entity_class: string){\r\n        var test = false;\r\n        if (entity_class){\r\n            if (this.state.api.GetNameFromTypeCode(entity.type) === entity_class.toUpperCase()){\r\n                test = true;\r\n            }\r\n            return test\r\n        }\r\n        else {\r\n            return this.state.api.GetNameFromTypeCode(entity.type);\r\n        }\r\n    }\r\n\r\n    async byId (modelID: number, id: number) {\r\n        return this.state.api.GetLine(modelID, id);\r\n    }\r\n\r\n    async idsByType(modelID: number, entity_class: string){\r\n        let entities_ids = await this.state.api.GetLineIDsWithType(modelID, Number(this.state.api.GetTypeCodeFromName(modelID,entity_class.toUpperCase())));\r\n        return entities_ids\r\n    }\r\n\r\n    async byType(modelID:number, entity_class:string){\r\n        let entities_ids = await this.idsByType(modelID, entity_class) \r\n        if (entities_ids !== null){\r\n            let items: number[] = [];\r\n            for (let i = 0; i < entities_ids.size(); i++){\r\n                let entity = await this.byId(modelID, entities_ids.get(i))\r\n                items.push(entity);\r\n            } \r\n            return items;\r\n        }\r\n    }\r\n}\r\n","import { IfcState } from '../../BaseDefinitions';\r\nimport { IFCUtils } from '../IFCUtils'\r\n\r\nexport class Data {\r\n    isLoaded = false;\r\n    workPlans: {[key: number]: any} = {}\r\n    workSchedules: {[key: number]: any} = {}\r\n    workCalendars: {[key: number]: any} = {}\r\n    workTimes: {[key: number]: any} = {}\r\n    recurrencePatterns: {[key: number]: any} = {}\r\n    timePeriods: {[key: number]: any} = {}\r\n    tasks: {[key: number]: any} = {}\r\n    taskTimes: {[key: number]: any} = {}\r\n    lagTimes: {[key: number]: any} = {}\r\n    sequences: {[key: number]: any} = {}\r\n    utils: any;\r\n\r\n    constructor(public state: IfcState) {\r\n        this.utils = new IFCUtils(this.state);\r\n\r\n    }\r\n\r\n    //TO DO: Refactor to retrieve top-level task from a workschedule entity, and then load tasks.\r\n    // Currently only tasks are retrieved. \r\n    async load(modelID: number){\r\n        await this.loadTasks(modelID)\r\n        await this.loadWorkSchedules(modelID)\r\n        await this.loadWorkCalendars(modelID)\r\n        await this.loadWorkTimes(modelID)\r\n        await this.loadTimePeriods(modelID)\r\n        this.isLoaded = true\r\n\r\n    }\r\n\r\n\r\n    async loadWorkSchedules(modelID: number){\r\n        let workSchedules = await this.utils.byType(modelID, \"IfcWorkSchedule\")\r\n        for (let i = 0; i < workSchedules.length; i++){\r\n            let workSchedule = workSchedules[i]\r\n            this.workSchedules[workSchedule.expressID] = {   \r\n                \"Id\": workSchedule.expressID,\r\n                \"Name\": workSchedule.Name.value,\r\n                \"Description\": ((workSchedule.Description) ? workSchedule.Description.value : \"\"),\r\n                \"Creators\": [], \r\n                \"CreationDate\": ((workSchedule.CreationDate) ? workSchedule.CreationDate.value : \"\"),\r\n                \"StartTime\": ((workSchedule.StartTime) ? workSchedule.StartTime.value : \"\"),\r\n                \"FinishTime\": ((workSchedule.FinishTime) ? workSchedule.FinishTime.value : \"\"),\r\n                \"TotalFloat\": ((workSchedule.TotalFloat) ? workSchedule.TotalFloat.value : \"\"),\r\n                \"RelatedObjects\": [],\r\n            }\r\n        }\r\n        this.loadWorkScheduleRelatedObjects(modelID)\r\n    }\r\n\r\n\r\n    async loadWorkScheduleRelatedObjects(modelID: number){\r\n        let relsControls = await this.utils.byType(modelID, \"IfcRelAssignsToControl\");\r\n        for (let i = 0; i < relsControls.length; i++){\r\n            let relControls = relsControls[i];\r\n            let relatingControl = await this.utils.byId(modelID, relControls.RelatingControl.value);\r\n            let relatedObjects = relControls.RelatedObjects;\r\n            if (this.utils.isA(relatingControl, \"IfcWorkSchedule\")) {\r\n                for (var objectIndex = 0; objectIndex < relatedObjects.length; objectIndex++) {\r\n                    this.workSchedules[relatingControl.expressID][\"RelatedObjects\"].push(relatedObjects[objectIndex].value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    async loadTasks(modelID: number){\r\n        let tasks = await this.utils.byType(modelID, \"IfcTask\")\r\n        for (let i = 0; i < tasks.length; i++){\r\n            let task = tasks[i]\r\n            this.tasks[task.expressID] = {   \r\n                \"Id\": task.expressID,\r\n                \"Name\": ((task.Name) ? task.Name.value : \"\"),\r\n                \"PredefinedType\": ((task.PredefinedType) ? task.PredefinedType.value : \"\"),\r\n                \"TaskTime\": ((task.TaskTime) ? await this.utils.byId(modelID, task.TaskTime.value) : \"\"), \r\n                \"Identification\": ((task.Identification) ? task.Identification.value : \"\"),\r\n                \"IsMilestone\": ((task.IsMilestone) ? task.IsMilestone.value : \"\"),\r\n                \"IsPredecessorTo\": [],\r\n                \"IsSucessorFrom\": [],\r\n                \"Inputs\": [],\r\n                \"Resources\": [],\r\n                \"Outputs\": [],\r\n                \"Controls\": [],\r\n                \"Nests\": [],\r\n                \"IsNestedBy\": [],\r\n                \"OperatesOn\":[],\r\n                \"HasAssignmentsWorkCalendars\": [],\r\n            }\r\n        }\r\n        await this.loadTaskSequence(modelID)\r\n        await this.loadTaskOutputs(modelID)\r\n        await this.loadTaskNesting(modelID)\r\n        await this.loadTaskOperations(modelID)\r\n        await this.loadAssignementsWorkCalendar(modelID)\r\n    }\r\n\r\n    async loadTaskSequence(modelID: number){\r\n        let relsSequence = await this.utils.idsByType(modelID, \"IfcRelSequence\")\r\n        for (let i = 0; i < relsSequence.size(); i++){\r\n            let relSequenceId = relsSequence.get(i)\r\n            if(relSequenceId !==0){\r\n                let relSequence = await this.utils.byId(modelID, relSequenceId)\r\n                let related_process = relSequence.RelatedProcess.value;\r\n                let relatingProcess = relSequence.RelatingProcess.value;\r\n                this.tasks[relatingProcess][\"IsPredecessorTo\"].push(relSequence.expressID)\r\n                this.tasks[related_process][\"IsSucessorFrom\"].push(relSequence.expressID)\r\n            }\r\n        }\r\n            \r\n    }\r\n\r\n    async loadTaskOutputs(modelID: number){\r\n        let rels_assigns_to_product = await this.utils.byType(modelID, \"IfcRelAssignsToProduct\");\r\n        for (let i = 0; i < rels_assigns_to_product.length; i++){\r\n            let relAssignsToProduct = rels_assigns_to_product[i]\r\n            let relatedObject = await this.utils.byId(modelID, relAssignsToProduct.RelatedObjects[0].value); \r\n            if (this.utils.isA(relatedObject, \"IfcTask\")) {\r\n                let relatingProduct = await this.utils.byId(modelID, relAssignsToProduct.RelatingProduct.value);\r\n                this.tasks[relatedObject.expressID][\"Outputs\"].push(relatingProduct.expressID);\r\n            }\r\n        }\r\n    }\r\n\r\n    async loadTaskNesting(modelID: number){\r\n        let rels_nests = await this.utils.byType(modelID, \"IfcRelNests\");\r\n        for (let i = 0; i < rels_nests.length; i++){\r\n            let relNests = rels_nests[i];\r\n            let relating_object = await this.utils.byId(modelID, relNests.RelatingObject.value);\r\n            if (this.utils.isA(relating_object, \"IfcTask\")) {\r\n                let relatedObjects = relNests.RelatedObjects;\r\n                for (var object_index = 0; object_index < relatedObjects.length; object_index++) {\r\n                    this.tasks[relating_object.expressID][\"IsNestedBy\"].push(relatedObjects[object_index].value);\r\n                    this.tasks[relatedObjects[object_index].value][\"Nests\"].push(relating_object.expressID);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    async loadTaskOperations(modelID: number){\r\n        let relsAssignsToProcess = await this.utils.byType(modelID, \"IfcRelAssignsToProcess\");\r\n        for (let i = 0; i < relsAssignsToProcess.length; i++){\r\n            let relAssignToProcess = relsAssignsToProcess[i];\r\n            let relatingProcess = await this.utils.byId(modelID, relAssignToProcess.RelatingProcess.value);\r\n            if (this.utils.isA(relatingProcess, \"IfcTask\")) {\r\n                let relatedObjects = relAssignToProcess.RelatedObjects;\r\n                for (var object_index = 0; object_index < relatedObjects.length; object_index++) {\r\n                    this.tasks[relatingProcess.expressID][\"OperatesOn\"].push(relatedObjects[object_index].value);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    async loadAssignementsWorkCalendar(modelID: number){\r\n        let relsAssignsToControl = await this.utils.byType(modelID, \"IfcRelAssignsToControl\");\r\n        for (let i = 0; i < relsAssignsToControl.length; i++){\r\n            let relAssignsToControl = relsAssignsToControl[i];\r\n            let relatingControl = await this.utils.byId(modelID, relAssignsToControl.RelatingControl.value);\r\n            if (this.utils.isA(relatingControl, \"IfcWorkCalendar\")) {\r\n                let relatedObjects = relAssignsToControl.RelatedObjects;\r\n                for (var object_index = 0; object_index < relatedObjects.length; object_index++) {\r\n                    this.tasks[relatedObjects[object_index].value][\"HasAssignmentsWorkCalendars\"].push(relatingControl.expressID);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    async loadWorkCalendars(modelID: number){\r\n        let workCalendars = await this.utils.byType(modelID, \"IfcWorkCalendar\")\r\n        for (let i = 0; i < workCalendars.length; i++){\r\n            let workCalendar = workCalendars[i]\r\n            let workCalenderData = {   \r\n                \"Id\": workCalendar.expressID,\r\n                \"Name\": ((workCalendar.Name) ? workCalendar.Name.value : \"\"),\r\n                \"Description\": ((workCalendar.Description) ? workCalendar.Description.value : \"\"),\r\n                \"WorkingTimes\": ((workCalendar.WorkingTimes) ? workCalendar.WorkingTimes : []),\r\n                \"ExceptionTimes\": ((workCalendar.ExceptionTimes) ? workCalendar.ExceptionTimes : []),\r\n            }\r\n            this.workCalendars[workCalendar.expressID] = workCalenderData\r\n        }\r\n        // this.loadworkCalendarRelatedObjects(modelID)\r\n    }    \r\n\r\n    async loadWorkTimes(modelID: number){\r\n        let workTimes = await this.utils.byType(modelID, \"IfcWorkTime\")\r\n        for (let i = 0; i < workTimes.length; i++){\r\n            let workTime = workTimes[i]\r\n            let workTimeData = {   \r\n                \"Name\": ((workTime.Name) ? workTime.Name.value : \"\"),\r\n                \"RecurrencePattern\": ((workTime.RecurrencePattern) ? await this.utils.byId(modelID, workTime.RecurrencePattern.value) : \"\"), \r\n                \"Start\": ((workTime.Start) ? new Date(workTime.Start.value) : \"\"),\r\n                \"Finish\": ((workTime.Finish) ? new Date(workTime.Finish.value) : \"\"),\r\n            }\r\n            this.workTimes[workTime.expressID] = workTimeData\r\n        }\r\n    }\r\n\r\n    async loadTimePeriods(modelID: number){\r\n        let timePeriods = await this.utils.byType(modelID, \"IfcTimePeriod\")\r\n        for (let i = 0; i < timePeriods.length; i++){\r\n            let timePeriod = timePeriods[i]\r\n            let workTimeData = {   \r\n                \"StartTime\": ((timePeriod.StartTime) ? new Date(timePeriod.StartTime.value) : \"\"),\r\n                \"EndTime\": ((timePeriod.EndTime) ? new Date(timePeriod.EndTime.value) : \"\"),\r\n            }\r\n            this.timePeriods[timePeriod.expressID] = workTimeData\r\n        }\r\n    }    \r\n}\r\n","import * as WebIFC from 'web-ifc';\r\nimport { IFCParser, ParserAPI, ParserProgress } from './IFCParser';\r\nimport { SubsetManager } from './subsets/SubsetManager';\r\nimport { PropertyManager } from './properties/PropertyManager';\r\nimport { TypeManager } from './TypeManager';\r\nimport { SubsetConfig, IfcState, JSONObject } from '../BaseDefinitions';\r\nimport {BufferGeometry, Material, Matrix4, Scene} from 'three';\r\nimport { IFCModel } from './IFCModel';\r\nimport { BvhManager } from './BvhManager';\r\nimport { LoaderSettings } from 'web-ifc';\r\nimport { IFCWorkerHandler } from '../web-workers/IFCWorkerHandler';\r\nimport { PropertyManagerAPI } from './properties/BaseDefinitions';\r\nimport { MemoryCleaner } from './MemoryCleaner';\r\nimport { IFCUtils } from './IFCUtils';\r\nimport { Data } from './sequence/Data'\r\n\r\n/**\r\n * Contains all the logic to work with the loaded IFC files (select, edit, etc).\r\n */\r\nexport class IFCManager {\r\n    state: IfcState = {\r\n        models: [],\r\n        api: new WebIFC.IfcAPI(),\r\n        useJSON: false,\r\n        worker: { active: false, path: '' }\r\n    };\r\n\r\n    BVH = new BvhManager();\r\n    parser: ParserAPI = new IFCParser(this.state, this.BVH);\r\n    subsets = new SubsetManager(this.state, this.BVH);\r\n    utils = new IFCUtils(this.state);\r\n    sequenceData = new Data(this.state);\r\n    properties: PropertyManagerAPI = new PropertyManager(this.state);\r\n    types = new TypeManager(this.state);\r\n\r\n    useFragments = false;\r\n\r\n    private cleaner = new MemoryCleaner(this.state);\r\n    private worker?: IFCWorkerHandler;\r\n\r\n    /**\r\n     * Returns the underlying web-ifc API.\r\n     */\r\n    get ifcAPI() {\r\n        return this.state.api;\r\n    }\r\n\r\n    // SETUP - all the logic regarding the configuration of web-ifc-three\r\n\r\n    async parse(buffer: ArrayBuffer) {\r\n        let model = await this.parser.parse(buffer, this.state.coordinationMatrix?.toArray()) as IFCModel;\r\n        model.setIFCManager(this);\r\n        // this.state.useJSON ? await this.disposeMemory() : await this.types.getAllTypes(this.worker);\r\n        // TODO: refactor this\r\n        try {\r\n            await this.types.getAllTypes(this.worker);\r\n        } catch (e) {\r\n            console.log(\"Could not get all types of model.\");\r\n        }\r\n        return model;\r\n    }\r\n\r\n    /**\r\n     * Sets the relative path of web-ifc.wasm file in the project.\r\n     * Beware: you **must** serve this file in your page; this means\r\n     * that you have to copy this files from *node_modules/web-ifc*\r\n     * to your deployment directory.\r\n     *\r\n     * If you don't use this methods,\r\n     * IFC.js assumes that you are serving it in the root directory.\r\n     *\r\n     * Example if web-ifc.wasm is in dist/wasmDir:\r\n     * `ifcLoader.setWasmPath(\"dist/wasmDir/\");`\r\n     *\r\n     * @path Relative path to web-ifc.wasm.\r\n     */\r\n    async setWasmPath(path: string) {\r\n        this.state.api.SetWasmPath(path);\r\n        this.state.wasmPath = path;\r\n    }\r\n\r\n    /**\r\n     * Makes object picking a lot faster\r\n     * Courtesy of gkjohnson's [work](https://github.com/gkjohnson/three-mesh-bvh).\r\n     * Import these objects from his library and pass them as arguments. IFC.js takes care of the rest!\r\n     */\r\n    setupThreeMeshBVH(computeBoundsTree: any, disposeBoundsTree: any, acceleratedRaycast: any) {\r\n        this.BVH.initializeMeshBVH(computeBoundsTree, disposeBoundsTree, acceleratedRaycast);\r\n    }\r\n\r\n    /**\r\n     * Sets a callback function that is called every 10% of IFC loaded.\r\n     * @onProgress callback function\r\n     */\r\n    setOnProgress(onProgress: (event: ParserProgress) => void) {\r\n        this.state.onProgress = onProgress;\r\n    }\r\n\r\n\r\n    /**\r\n     * Sets a coordination matrix to be applied when loading geometry.\r\n     * @matrix THREE.Matrix4\r\n     */\r\n    setupCoordinationMatrix(matrix: Matrix4){\r\n        this.state.coordinationMatrix = matrix;\r\n    }\r\n\r\n    /**\r\n     * Clears the coordination matrix that is applied when loading geometry.\r\n     */\r\n    clearCoordinationMatrix(){\r\n        delete this.state.coordinationMatrix;\r\n    }\r\n\r\n    /**\r\n     * Applies a configuration for [web-ifc](https://ifcjs.github.io/info/docs/Guide/web-ifc/Introduction).\r\n     */\r\n    async applyWebIfcConfig(settings: LoaderSettings) {\r\n        this.state.webIfcSettings = settings;\r\n        if (this.state.worker.active && this.worker) {\r\n            await this.worker.workerState.updateStateWebIfcSettings();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Uses web workers, making the loader non-blocking.\r\n     * @active Wether to use web workers or not.\r\n     * @path Relative path to the web worker file. Necessary if active=true.\r\n     */\r\n    async useWebWorkers(active: boolean, path?: string) {\r\n        if (this.state.worker.active === active) return;\r\n        // @ts-ignore\r\n        this.state.api = null;\r\n        if (active) {\r\n            if (!path) throw new Error('You must provide a path to the web worker.');\r\n            this.state.worker.active = active;\r\n            this.state.worker.path = path;\r\n            await this.initializeWorkers();\r\n            const wasm = this.state.wasmPath;\r\n            if(wasm) await this.setWasmPath(wasm);\r\n        } else {\r\n            this.state.api = new WebIFC.IfcAPI();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @deprecated This approach had sense when the compute-heavy operations were blocking. If you are facing performance issues, you can either use webworkers or use the approach used in web-ifc-viewer to work with JSON and glTF. If you have any question regarding this, check out the docs or ask us direclty.\r\n     * Enables the JSON mode (which consumes way less memory) and eliminates the WASM data.\r\n     * Only use this in the following scenarios:\r\n     * - If you don't need to access the properties of the IFC\r\n     * - If you will provide the properties as JSON.\r\n     * @useJSON: Wether to use the JSON mode or not.\r\n     */\r\n    async useJSONData(useJSON = true) {\r\n        this.state.useJSON = useJSON;\r\n        if (useJSON) {\r\n            await this.worker?.workerState.updateStateUseJson();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @deprecated This approach had sense when the compute-heavy operations were blocking. If you are facing performance issues, you can either use webworkers or use the approach used in web-ifc-viewer to work with JSON and glTF. If you have any question regarding this, check out the docs or ask us direclty.\r\n     * Adds the properties of a model as JSON data. If you are using web workers, use\r\n     * `loadJsonDataFromWorker()` instead to avoid overheads.\r\n     * @modelID ID of the IFC model.\r\n     * @data: data as an object where the keys are the expressIDs and the values the properties.\r\n     */\r\n    async addModelJSONData(modelID: number, data: { [id: number]: JSONObject }) {\r\n        const model = this.state.models[modelID];\r\n        if (!model) throw new Error('The specified model for the JSON data does not exist');\r\n        if (this.state.worker.active) {\r\n            await this.worker?.workerState.updateModelStateJsonData(modelID, data);\r\n        } else {\r\n            model.jsonData = data;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @deprecated This approach had sense when the compute-heavy operations were blocking. If you are facing performance issues, you can either use webworkers or use the approach used in web-ifc-viewer to work with JSON and glTF. If you have any question regarding this, check out the docs or ask us direclty.\r\n     * Loads the data of an IFC model from a JSON file directly from a web worker. If you are not using\r\n     * web workers, use `addModelJSONData()` instead.\r\n     * @modelID ID of the IFC model.\r\n     * @path: the path to the JSON file **relative to the web worker file**.\r\n     */\r\n    async loadJsonDataFromWorker(modelID: number, path: string) {\r\n        if (this.state.worker.active) {\r\n            await this.worker?.workerState.loadJsonDataFromWorker(modelID, path);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Closes the specified model and deletes it from the [scene](https://threejs.org/docs/#api/en/scenes/Scene).\r\n     * @modelID ID of the IFC model.\r\n     * @scene Scene where the model is (if it's located in a scene).\r\n     */\r\n    close(modelID: number, scene?: Scene) {\r\n        try {\r\n            this.state.api.CloseModel(modelID);\r\n            const mesh = this.state.models[modelID].mesh;\r\n            const { geometry, material } = mesh;\r\n            if (scene) scene.remove(mesh);\r\n            geometry?.dispose();\r\n            Array.isArray(material) ? material.forEach(m => m.dispose()) : material?.dispose();\r\n            delete this.state.models[modelID];\r\n        } catch(e) {\r\n            console.warn(`Close IFCModel ${modelID} failed`);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gets the **Express ID** to which the given face belongs.\r\n     * This ID uniquely identifies this entity within this IFC file.\r\n     * @geometry The geometry IFC model.\r\n     * @faceIndex The index of the face of a geometry.You can easily get this index using the [Raycaster](https://threejs.org/docs/#api/en/core/Raycaster).\r\n     */\r\n    getExpressId(geometry: BufferGeometry, faceIndex: number) {\r\n        return this.properties.getExpressId(geometry, faceIndex);\r\n    }\r\n\r\n    /**\r\n     * Returns all items of the specified type. You can import\r\n     * the types from *web-ifc*.\r\n     *\r\n     * Example to get all the standard walls of a project:\r\n     * ```js\r\n     * import { IFCWALLSTANDARDCASE } from 'web-ifc';\r\n     * const walls = ifcLoader.getAllItemsOfType(IFCWALLSTANDARDCASE);\r\n     * ```\r\n     * @modelID ID of the IFC model.\r\n     * @type type of IFC items to get.\r\n     * @verbose If false (default), this only gets IDs. If true, this also gets the native properties of all the fetched items.\r\n     */\r\n    getAllItemsOfType(modelID: number, type: number, verbose: boolean) {\r\n        return this.properties.getAllItemsOfType(modelID, type, verbose);\r\n    }\r\n\r\n    /**\r\n     * Gets the native properties of the given element.\r\n     * @modelID ID of the IFC model.\r\n     * @id Express ID of the element.\r\n     * @recursive Wether you want to get the information of the referenced elements recursively.\r\n     */\r\n    getItemProperties(modelID: number, id: number, recursive = false) {\r\n        return this.properties.getItemProperties(modelID, id, recursive);\r\n    }\r\n\r\n    /**\r\n     * Gets the [property sets](https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifckernel/lexical/ifcpropertyset.htm)\r\n     * assigned to the given element.\r\n     * @modelID ID of the IFC model.\r\n     * @id Express ID of the element.\r\n     * @recursive If true, this gets the native properties of the referenced elements recursively.\r\n     */\r\n    getPropertySets(modelID: number, id: number, recursive = false) {\r\n        return this.properties.getPropertySets(modelID, id, recursive);\r\n    }\r\n\r\n    /**\r\n     * Gets the properties of the type assigned to the element.\r\n     * For example, if applied to a wall (IfcWall), this would get back the information\r\n     * contained in the IfcWallType assigned to it, if any.\r\n     * @modelID ID of the IFC model.\r\n     * @id Express ID of the element.\r\n     * @recursive If true, this gets the native properties of the referenced elements recursively.\r\n     */\r\n    getTypeProperties(modelID: number, id: number, recursive = false) {\r\n        return this.properties.getTypeProperties(modelID, id, recursive);\r\n    }\r\n\r\n    /**\r\n     * Gets the materials assigned to the given element.\r\n     * @modelID ID of the IFC model.\r\n     * @id Express ID of the element.\r\n     * @recursive If true, this gets the native properties of the referenced elements recursively.\r\n     */\r\n    getMaterialsProperties(modelID: number, id: number, recursive = false) {\r\n        return this.properties.getMaterialsProperties(modelID, id, recursive);\r\n    }\r\n\r\n    /**\r\n     * Gets the ifc type of the specified item.\r\n     * @modelID ID of the IFC model.\r\n     * @id Express ID of the element.\r\n     */\r\n    getIfcType(modelID: number, id: number) {\r\n        const typeID = this.state.models[modelID].types[id];\r\n        return this.state.api.GetNameFromTypeCode(typeID);\r\n    }\r\n\r\n    /**\r\n     * Gets the spatial structure of the project. The\r\n     * [spatial structure](https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifcproductextension/lexical/ifcspatialstructureelement.htm)\r\n     * is the hierarchical structure that organizes every IFC project (all physical items\r\n     * are referenced to an element of the spatial structure). It is formed by\r\n     * one IfcProject that contains one or more IfcSites, that contain one or more\r\n     * IfcBuildings, that contain one or more IfcBuildingStoreys, that contain\r\n     * one or more IfcSpaces.\r\n     * @modelID ID of the IFC model.\r\n     */\r\n    getSpatialStructure(modelID: number, includeProperties?: boolean) {\r\n        return this.properties.getSpatialStructure(modelID, includeProperties);\r\n    }\r\n\r\n    /**\r\n     * Gets the mesh of the subset with the specified [material](https://threejs.org/docs/#api/en/materials/Material).\r\n     * If no material is given, this returns the subset with the original materials.\r\n     * @modelID ID of the IFC model.\r\n     * @material Material assigned to the subset (if any).\r\n     * @customId Optional identifier of the subset.\r\n     */\r\n    getSubset(modelID: number, material?: Material, customId?: string) {\r\n        return this.subsets.getSubset(modelID, material, customId);\r\n    }\r\n\r\n    /**\r\n     * Removes the specified subset.\r\n     * @modelID ID of the IFC model.\r\n     * @parent The parent where the subset is (can be any `THREE.Object3D`).\r\n     * @material Material assigned to the subset, if any.\r\n     */\r\n    removeSubset(modelID: number, material?: Material, customID?: string) {\r\n        this.subsets.removeSubset(modelID, material, customID);\r\n    }\r\n\r\n    /**\r\n     * Creates a new geometric subset.\r\n     * @config A configuration object with the following options:\r\n     * - **scene**: `THREE.Object3D` where the model is located.\r\n     * - **modelID**: ID of the model.\r\n     * - **ids**: Express IDs of the items of the model that will conform the subset.\r\n     * - **removePrevious**: wether to remove the previous subset of this model with this material.\r\n     * - **material**: (optional) wether to apply a material to the subset.\r\n     * - **customID**: (optional) custom identifier to distinguish subsets of the same model with the same material.\r\n     */\r\n    createSubset(config: SubsetConfig) {\r\n        return this.subsets.createSubset(config);\r\n    }\r\n\r\n    /**\r\n     * Removes the specified items from the geometry of a subset.\r\n     * @modelID ID of the IFC model.\r\n     * @ids Express IDs of the items of the model that will conform the subset.\r\n     * @material (optional) Material assigned to the subset, if any.\r\n     * @customID (optional) custom identifier to distinguish subsets of the same model with the same material.\r\n     */\r\n    removeFromSubset(modelID: number, ids: number[], customID?: string, material?: Material) {\r\n        return this.subsets.removeFromSubset(modelID, ids, customID, material);\r\n    }\r\n\r\n    /**\r\n     * Removes all the geometry of a subset.\r\n     * @modelID ID of the IFC model.\r\n     * @ids Express IDs of the items of the model that will conform the subset.\r\n     * @material (optional) Material assigned to the subset, if any.\r\n     * @customID (optional) custom identifier to distinguish subsets of the same model with the same material.\r\n     */\r\n    clearSubset(modelID: number, customID?: string, material?: Material) {\r\n        return this.subsets.clearSubset(modelID, customID, material);\r\n    }\r\n\r\n\r\n\r\n\r\n    // UTILITIES - Miscelaneus logic for various purposes\r\n\r\n    /**\r\n    * Returns the IFC class name of an instance if the optional parameter is not provided.\r\n    * If an entit class is provided, it will check if an instance belongs to the class.\r\n    * @modelID ID of the IFC model.\r\n    * @entityClass IFC Class name.\r\n    */\r\n    async isA(entity: any, entity_class: string) {\r\n        return this.utils.isA(entity, entity_class);\r\n    }\r\n\r\n    async getSequenceData(modelID: number) {\r\n        await this.sequenceData.load(modelID);\r\n        return this.sequenceData;\r\n    }\r\n\r\n\r\n    /**\r\n    * Returns the IFC objects filtered by IFC Type and wrapped with the entity_instance class.\r\n    * If an IFC type class has subclasses, all entities of those subclasses are also returned.\r\n    * @modelID ID of the IFC model.\r\n    * @entityClass IFC Class name.\r\n    */\r\n    async byType(modelID: number, entityClass: string) {\r\n        return this.utils.byType(modelID, entityClass);\r\n    }\r\n\r\n    /**\r\n    * Returns the IFC objects filtered by IFC ID.\r\n    * @modelID ID of the IFC model.\r\n    * @id Express ID of the element.\r\n    */\r\n    async byId(modelID: number, id: number) {\r\n        return this.utils.byId(modelID, id);\r\n    }\r\n\r\n    /**\r\n    * Returns the IFC objects filtered by IFC Type and wrapped with the entity_instance class.\r\n    * If an IFC type class has subclasses, all entities of those subclasses are also returned.\r\n    * @modelID ID of the IFC model.\r\n    * @entityClass IFC Class name.\r\n    */\r\n    async idsByType(modelID: number, entityClass: string) {\r\n        return this.utils.idsByType(modelID, entityClass);\r\n    }\r\n\r\n\r\n    // MISC - Miscelaneus logic for various purposes\r\n\r\n    /**\r\n     * Disposes all memory used by the IFCLoader, including WASM memory and the web worker.\r\n     * Use this if you want to destroy the object completely.\r\n     * If you want to load an IFC later, you'll need to create a new instance.\r\n     */\r\n    async dispose() {\r\n        IFCModel.dispose();\r\n        await this.cleaner.dispose();\r\n        this.subsets.dispose();\r\n        if(this.worker && this.state.worker.active) await this.worker.terminate();\r\n        (this.state as any) = null;\r\n    }\r\n\r\n    /**\r\n     * @deprecated This approach had sense when the compute-heavy operations were blocking. If you are facing performance issues, you can either use webworkers or use the approach used in web-ifc-viewer to work with JSON and glTF. If you have any question regarding this, check out the docs or ask us direclty.\r\n     * Completely releases the WASM memory, thus drastically decreasing the memory use of the app.\r\n     * Only use this in the following scenarios:\r\n     * - If you don't need to access the properties of the IFC\r\n     * - If you will provide the properties as JSON.\r\n     */\r\n    async disposeMemory() {\r\n        if (this.state.worker.active) {\r\n            await this.worker?.Close();\r\n        } else {\r\n            // @ts-ignore\r\n            this.state.api.Close();\r\n            (this.state.api as any) = null;\r\n            this.state.api = new WebIFC.IfcAPI();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * For internal use of IFC.js dev team and testers\r\n     */\r\n    getAndClearErrors(modelID: number) {\r\n        return this.parser.getAndClearErrors(modelID);\r\n    }\r\n\r\n    private async initializeWorkers() {\r\n        this.worker = new IFCWorkerHandler(this.state, this.BVH);\r\n        this.state.api = this.worker.webIfc;\r\n        this.properties = this.worker.properties;\r\n        await this.worker.parser.setupOptionalCategories(this.parser.optionalCategories);\r\n        this.parser = this.worker.parser;\r\n        await this.worker.workerState.updateStateUseJson();\r\n        await this.worker.workerState.updateStateWebIfcSettings();\r\n    }\r\n\r\n\r\n}\r\n","import { IFCManager } from './IFC/components/IFCManager';\r\nimport {FileLoader, Loader, LoadingManager, Matrix4} from 'three';\r\nimport { IFCModel } from './IFC/components/IFCModel';\r\n\r\nclass IFCLoader extends Loader {\r\n    ifcManager: IFCManager;\r\n    private onProgress?: (event: ProgressEvent) => void;\r\n\r\n    constructor(manager?: LoadingManager) {\r\n        super(manager);\r\n        this.ifcManager = new IFCManager();\r\n    }\r\n\r\n    load(\r\n        url: any,\r\n        onLoad: (ifc: IFCModel) => void,\r\n        onProgress?: (event: ProgressEvent) => void,\r\n        onError?: (event: ErrorEvent) => void\r\n    ) {\r\n        const scope = this;\r\n\r\n        const loader = new FileLoader(scope.manager);\r\n        this.onProgress = onProgress;\r\n        loader.setPath(scope.path);\r\n        loader.setResponseType('arraybuffer');\r\n        loader.setRequestHeader(scope.requestHeader);\r\n        loader.setWithCredentials(scope.withCredentials);\r\n        loader.load(\r\n            url,\r\n            async function (buffer) {\r\n                try {\r\n                    if (typeof buffer == 'string') {\r\n                        throw new Error('IFC files must be given as a buffer!');\r\n                    }\r\n                    onLoad(await scope.parse(buffer));\r\n                } catch (e: any) {\r\n                    if (onError) {\r\n                        onError(e);\r\n                    } else {\r\n                        console.error(e);\r\n                    }\r\n\r\n                    scope.manager.itemError(url);\r\n                }\r\n            },\r\n            onProgress,\r\n            onError\r\n        );\r\n    }\r\n\r\n    parse(buffer: ArrayBuffer) {\r\n        return this.ifcManager.parse(buffer);\r\n    }\r\n}\r\n\r\nexport { IFCLoader };\r\n"],"names":["Mesh","IFCSPACE","IFCOPENINGELEMENT","mergeBufferGeometries","IFCPRODUCTDEFINITIONSHAPE","Color","MeshLambertMaterial","DoubleSide","Matrix4","BufferGeometry","BufferAttribute","IFCRELAGGREGATES","IFCRELCONTAINEDINSPATIALSTRUCTURE","IFCRELDEFINESBYPROPERTIES","IFCRELASSOCIATESMATERIAL","IFCRELDEFINESBYTYPE","IFCPROJECT","IFCBUILDING","WebIFC","Loader","FileLoader"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;IAIA,MAAM,0BAA0B,GAAG,qBAAqB,CAAC;IAQnD,MAAO,QAAS,SAAQA,UAAI,CAAA;IAAlC,IAAA,WAAA,GAAA;;IAQI,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;YACpC,IAAU,CAAA,UAAA,GAAsB,IAAI,CAAC;YAKrC,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;SA+Kf;IAzLG,IAAA,OAAO,OAAO,GAAA;IACV,QAAA,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC;SAC/B;IAUD,IAAA,aAAa,CAAC,OAAmB,EAAA;IAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;SAC7B;IAkBD,IAAA,WAAW,CAAC,IAAY,EAAA;IACpB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACrC;IAQD,IAAA,KAAK,CAAC,KAAa,EAAA;IACf,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1E,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC9C;QAUD,YAAY,CAAC,QAAwB,EAAE,SAAiB,EAAA;IACpD,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC5D;QAgBD,iBAAiB,CAAC,IAAY,EAAE,OAAgB,EAAA;IAC5C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SACzE;IASD,IAAA,iBAAiB,CAAC,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IAC3C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SACzE;IAUD,IAAA,eAAe,CAAC,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IACzC,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SACvE;IAWD,IAAA,iBAAiB,CAAC,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IAC3C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SACzE;IAQD,IAAA,UAAU,CAAC,EAAU,EAAA;IACjB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SACvD;QAaD,mBAAmB,GAAA;IACf,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5D;IASD,IAAA,SAAS,CAAC,QAAmB,EAAA;IACzB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;SAC5D;QASD,YAAY,CAAC,QAAmB,EAAE,QAAiB,EAAA;IAC/C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAClE;IAYD,IAAA,YAAY,CAAC,MAAwB,EAAA;IACjC,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,QAAA,MAAM,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;SACpD;;IA1Lc,QAAc,CAAA,cAAA,GAAG,CAAC;;UCuCxB,SAAS,CAAA;QAwBlB,WAAoB,CAAA,KAAe,EAAU,GAAgB,EAAA;YAAzC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;YAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAa;YAvB7D,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;IAEjB,QAAA,IAAA,CAAA,kBAAkB,GAAuB;gBACrC,CAACC,eAAQ,GAAG,IAAI;gBAChB,CAACC,wBAAiB,GAAG,KAAK;aAC7B,CAAC;YAEM,IAAqB,CAAA,qBAAA,GAAyB,EAAE,CAAC;IAEjD,QAAA,IAAA,CAAA,YAAY,GAAG;IACnB,YAAA,KAAK,EAAE,CAAC;IACR,YAAA,OAAO,EAAE,CAAC;IACV,YAAA,IAAI,EAAE,GAAG;aACZ,CAAA;YAGO,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC,CAAC;YAGrB,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC,CAAC;SAK3B;QAED,MAAM,uBAAuB,CAAC,MAA0B,EAAA;IACpD,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;SACpC;IAED,IAAA,MAAM,KAAK,CAAC,MAAW,EAAE,kBAA6B,EAAA;YAClD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACzE,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;IACpB,QAAA,IAAI,kBAAkB,EAAE;IACpB,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAC5F,SAAA;YACD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACrD;IAED,IAAA,iBAAiB,CAAC,QAAgB,EAAA;SAEjC;QAEO,cAAc,CAAC,MAAc,EAAE,KAAa,EAAA;IAChD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU;gBAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SACvE;QAEO,MAAM,WAAW,CAAC,MAAW,EAAA;IACjC,QAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACvF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC;YACpF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG;gBACrC,OAAO,EAAE,IAAI,CAAC,cAAc;IAC5B,YAAA,IAAI,EAAE,EAAa;IACnB,YAAA,KAAK,EAAE,EAAE;IACT,YAAA,QAAQ,EAAE,EAAE;aACf,CAAC;SACL;QAEO,MAAM,eAAe,CAAC,OAAe,EAAA;IACzC,QAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACpC,QAAA,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAE3C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,IAAc,KAAI;gBACvD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAE1B,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,SAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAqB,EAAE,CAAC;YACxC,MAAM,SAAS,GAA0B,EAAE,CAAC;IAE5C,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACpD,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;IACxE,YAAA,MAAM,MAAM,GAAGC,yCAAqB,CAAC,oBAAoB,CAAC,CAAC;IAC3D,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzD,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAC,CAAC,CAAC;YAEH,MAAM,gBAAgB,GAAGA,yCAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjE,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,GAAG;IAAE,YAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IACxD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;IACpD,QAAA,OAAO,KAAK,CAAC;SAChB;QAEO,MAAM,sBAAsB,CAAC,OAAe,EAAA;IAChD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAEC,gCAAyB,CAAC,CAAC;YAC3F,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACxC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;IAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,CAAC;SAChC;QAEO,kBAAkB,GAAA;IACtB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACzE;QAEO,kBAAkB,GAAA;IACtB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACvF,QAAA,IAAG,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IACpE,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpF,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,GAAG,CAAC;IACjC,SAAA;SACJ;IAGO,IAAA,qBAAqB,CAAC,OAAe,EAAA;YAEzC,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACrC,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;IAC7C,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/B,gBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IAAE,oBAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvE,aAAA;IACJ,SAAA;IAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,CAAC,IAAc,KAAI;IAC5F,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,SAAC,CAAC,CAAC;SACN;QAEO,UAAU,CAAC,OAAe,EAAE,IAAc,EAAA;IAC9C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC;IACzC,QAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;YAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC/E,YAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC3D,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5D,SAAA;SACJ;IAEO,IAAA,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,cAA8B,EAAA;IACxF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAC5E,QAAA,MAAM,IAAI,GAAG,IAAIJ,UAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACpE,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAC9B,QAAA,OAAO,IAAI,CAAC;SACf;IAEO,IAAA,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,cAA8B,EAAA;IACxF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAgB,CAAC;YACtG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAiB,CAAC;YACpH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAgB,CAAC;IAClH,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAEnE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAClB,QAAA,OAAO,MAAM,CAAC;SACjB;QAEO,uBAAuB,CAAC,KAAe,EAAE,QAAwB,EAAA;IACrE,QAAA,IAAI,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAG,EAAA,KAAK,CAAC,CAAC,CAAA,EAAG,KAAK,CAAC,CAAC,EAAE,CAAC;IACvD,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;IACnC,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5D,OAAO;IACV,SAAA;YAID,MAAM,GAAG,GAAG,IAAIK,WAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE,QAAA,MAAM,QAAQ,GAAG,IAAIC,yBAAmB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAEC,gBAAU,EAAE,CAAC,CAAC;YAC3E,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,QAAQ,CAAC,WAAW;IAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;IACrD,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;SAC5E;IAEO,IAAA,aAAa,CAAC,MAAqB,EAAA;IACvC,QAAA,MAAM,GAAG,GAAG,IAAIC,aAAO,EAAE,CAAC;IAC1B,QAAA,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtB,QAAA,OAAO,GAAG,CAAC;SACd;IAEO,IAAA,mBAAmB,CAAC,SAAiB,EAAE,UAAwB,EAAE,SAAsB,EAAA;IAC3F,QAAA,MAAM,QAAQ,GAAG,IAAIC,oBAAc,EAAE,CAAC;YAEtC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE3D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC3C,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,YAAA,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,YAAA,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzC,YAAA,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,YAAA,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,YAAA,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1C,YAAA,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IAClC,SAAA;IAED,QAAA,QAAQ,CAAC,YAAY,CACjB,UAAU,EACV,IAAIC,qBAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,QAAA,QAAQ,CAAC,YAAY,CACjB,QAAQ,EACR,IAAIA,qBAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,QAAA,QAAQ,CAAC,YAAY,CACjB,WAAW,EACX,IAAIA,qBAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;YAEzC,QAAQ,CAAC,QAAQ,CAAC,IAAIA,qBAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,QAAA,OAAO,QAAQ,CAAC;SACnB;IAGO,IAAA,qBAAqB,CAAC,UAA4B,EAAA;IACtD,QAAA,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAEnD,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;gBAC3D,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACpE,YAAA,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,YAAA,oBAAoB,CAAC,UAAU,GAAG,EAAE,CAAC;IAErC,YAAA,oBAAoB,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzC,SAAC,CAAC,CAAC;IACH,QAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;SACnC;IACJ;;UCxPY,QAAQ,CAAA;IAEjB,IAAA,WAAA,CAAoB,KAAe,EAAA;YAAf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;YAGnC,IAAG,CAAA,GAAA,GAAe,EAAE,CAAC;SAFpB;IAID,IAAA,wBAAwB,CAAC,OAAe,EAAA;IACpC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,OAAO;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClD,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACjC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,SAAA;SACJ;IAED,IAAA,WAAW,CAAC,OAAe,EAAE,QAAmB,EAAE,QAAQ,GAAG,SAAS,EAAA;YAClE,MAAM,MAAM,GAAG,OAAO,CAAC;IACvB,QAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;IACxD,QAAA,OAAO,GAAG,MAAM,CAAA,GAAA,EAAM,UAAU,CAAM,GAAA,EAAA,QAAQ,EAAE,CAAC;SACpD;QAGD,OAAO,GAAA;IACH,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;IACnC,YAAA,KAAK,CAAC,UAAkB,GAAG,IAAI,CAAC;IAChC,YAAA,KAAK,CAAC,GAAW,GAAG,IAAI,CAAC;IAC9B,SAAC,CAAC,CAAC;IAEF,QAAA,IAAI,CAAC,GAAW,GAAG,IAAI,CAAC;SAC5B;IAEO,IAAA,WAAW,CAAC,OAAe,EAAA;IAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1D,QAAA,IAAI,CAAC,QAAQ;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,KAAK;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACjE,QAAA,OAAO,QAA2B,CAAC;SACtC;QAEO,WAAW,CAAC,OAAe,EAAE,QAAyB,EAAA;IAC1D,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAoB,CAAC;IACzD,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG;IAChB,YAAA,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC9D,GAAG,EAAE,IAAI,GAAG,EAAE;aACjB,CAAC;IACF,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAU,CAAC;SACrC;IAEO,IAAA,sBAAsB,CAAC,KAAY,EAAE,QAAyB,EAAE,KAAY,EAAA;IAChF,QAAA,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IAEvB,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAuB,CAAC;IACpD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;YAClC,MAAM,WAAW,GAAG,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IAEpD,QAAA,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IACrB,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;YAEnB,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;gBAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,SAA4B,CAAC;gBACpE,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAG1C,YAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;oBACtB,aAAa,GAAG,SAAS,CAAC;oBAC1B,WAAW,GAAG,CAAC,CAAC;IACnB,aAAA;IAGD,YAAA,MAAM,eAAe,GAAG,CAAC,KAAK,WAAW,CAAC;IAC1C,YAAA,IAAI,eAAe,EAAE;IACjB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACzE,gBAAA,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;oBACrC,MAAM;IACT,aAAA;gBAGD,IAAI,aAAa,KAAK,SAAS;oBAAE,SAAS;IAK1C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAC7E,YAAA,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,YAAA,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;gBAGnC,aAAa,GAAG,SAAS,CAAC;gBAC1B,WAAW,GAAG,CAAC,CAAC;IACnB,SAAA;SACJ;IAEO,IAAA,gBAAgB,CAAC,GAAyB,EAAE,EAAU,EAAE,QAAgB,EAAA;YAE5E,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;IAC3B,YAAA,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnB,SAAA;YACD,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,aAAa,KAAK,SAAS;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAGlF,QAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;IACvC,YAAA,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAChC,SAAA;IACD,QAAA,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;SAClC;IAEJ;;UC1IY,WAAW,CAAA;IAGpB,IAAA,OAAO,oBAAoB,CAAC,OAAe,EAAE,GAAa,EAAE,aAAqB,EAAE,KAAU,EAAE,OAAO,GAAG,IAAI,EAAA;YACzG,MAAM,cAAc,GAAQ,EAAE,CAAC;IAC/B,QAAA,KAAK,MAAM,SAAS,IAAI,GAAG,EAAE;gBACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,YAAA,IAAI,CAAC,KAAK;oBAAE,SAAS;IACrB,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,YAAA,IAAI,CAAC,KAAK;oBAAE,SAAS;IACrB,YAAA,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnF,SAAA;IACD,QAAA,OAAO,cAAc,CAAC;SACzB;QAEO,OAAO,aAAa,CAAC,KAAe,EAAE,cAAmB,EAAE,aAAqB,EAAE,KAAU,EAAE,OAAgB,EAAA;IAClH,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE;IACrC,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;IAC3B,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;IAC/B,gBAAA,IAAG,OAAO;wBAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,qBAAA;IACD,oBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;IAAE,wBAAA,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;IACvE,oBAAA,cAAc,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,iBAAA;IACJ,aAAA;IACJ,SAAA;SACJ;IACJ;;UCvBY,aAAa,CAAA;IAItB,IAAA,WAAA,CAAoB,KAAe,EAAU,KAAe,EAAU,OAAgB,EAAU,GAAe,EAAA;YAA3F,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;YAAU,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;YAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;YAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;YAFvG,IAAS,CAAA,SAAA,GAAa,EAAE,CAAC;SAGhC;QAED,YAAY,CAAC,MAAoB,EAAE,QAAgB,EAAA;YAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzF,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrE,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrC,QAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9D,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;YAC3C,IAAI,MAAM,CAAC,QAAQ;gBAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjE,IAAI,MAAM,CAAC,KAAK;IAAE,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;SACtC;QAED,OAAO,GAAA;IACH,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;SACvB;QAEO,gBAAgB,CAAC,MAAoB,EAAE,QAAgB,EAAA;IAC3D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IACrD,QAAA,MAAM,UAAU,GAAG,IAAID,oBAAc,EAAE,CAAC;IACxC,QAAA,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,QAAQ;IAAE,YAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrE,QAAA,MAAM,IAAI,GAAG,IAAIT,UAAI,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAW,CAAC;IAC/E,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,EAAU,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC/D,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACnB;QAGO,0BAA0B,CAAC,UAA0B,EAAE,KAAW,EAAA;IACtE,QAAA,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxE,QAAA,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACpE,QAAA,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC1E,QAAA,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAC3B;QAGO,sBAAsB,CAAC,UAA0B,EAAE,KAAW,EAAA;IAClE,QAAA,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SAChC;QAGO,aAAa,CAAC,MAAoB,EAAE,QAAgB,EAAA;IACxD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAA2B,CAAC;YACzE,IAAI,MAAM,CAAC,cAAc,EAAE;IACvB,YAAA,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtB,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC3B,OAAO;IACV,SAAA;IACD,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;YAC/C,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAChD;QAEO,yBAAyB,CAAC,MAAoB,EAAE,QAAgB,EAAA;IACpE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IACrD,QAAA,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1D,SAAA;SACJ;IAIO,IAAA,gBAAgB,CAAC,MAAoB,EAAE,QAAgB,EAAE,aAAqB,EAAE,UAAe,EAAA;IACnG,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,QAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,CAAa,CAAC;IAE5H,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACxF,SAAA;IAAM,aAAA;IACH,YAAA,oBAAoB,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,SAAA;SACJ;IAEO,IAAA,oBAAoB,CAAC,QAAgB,EAAE,cAAwB,EAAE,KAAa,EAAE,UAAe,EAAA;YACnG,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3D,QAAA,YAAY,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;YACvC,IAAI,kBAAkB,GAAG,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IACjE,QAAA,UAAU,CAAC,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC;IAC1C,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,IAAI,QAAQ,GAAG,kBAAkB,CAAC;IAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAChD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;IAChF,YAAA,YAAY,CAAC,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC;IAC/C,SAAA;SACJ;QAEO,eAAe,CAAC,QAAgB,EAAE,UAAkB,EAAA;IACxD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAA2B,CAAC;IACzE,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SACtC;IAEO,IAAA,WAAW,CAAC,QAAwB,EAAA;YACxC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;IAC9B,YAAA,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IAChB,YAAA,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IACpB,SAAC,CAAC,CAAC;SACN;IACJ;;UCpGY,aAAa,CAAA;QAOtB,WAAY,CAAA,KAAe,EAAE,GAAe,EAAA;YAHpC,IAAO,CAAA,OAAA,GAAY,EAAE,CAAC;IAI1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SACrF;QAED,aAAa,GAAA;YACT,OAAO,IAAI,CAAC,OAAO,CAAA;SACtB;IAED,IAAA,SAAS,CAAC,OAAe,EAAE,QAAmB,EAAE,QAAiB,EAAA;IAC7D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;SACtC;IAED,IAAA,YAAY,CAAC,OAAe,EAAE,QAAmB,EAAE,QAAiB,EAAA;IAChE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,QAAA,IAAI,CAAC,MAAM;gBAAE,OAAO;IACpB,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;IAAE,YAAA,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;IAClC,QAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAE/B,QAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC5B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACjC;IAED,IAAA,YAAY,CAAC,MAAoB,EAAA;IAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC5D;IAED,IAAA,gBAAgB,CAAC,OAAe,EAAE,GAAa,EAAE,QAAiB,EAAE,QAAmB,EAAA;IACnF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,OAAO;YAEpC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;IAC/C,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;IACf,YAAA,IAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAAE,gBAAA,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnD,SAAC,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,YAAY,CAAC;gBACrB,OAAO;IACP,YAAA,cAAc,EAAE,IAAI;gBACpB,QAAQ;gBACR,QAAQ;gBACR,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG;IACpC,YAAA,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC5B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAkB;IACxD,SAAA,CAAC,CAAC;SACN;IAED,IAAA,WAAW,CAAC,OAAe,EAAE,QAAiB,EAAE,QAAmB,EAAA;IAC/D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,OAAO;YACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,QAAA,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAChC;QAGD,OAAO,GAAA;IACH,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACrB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IAE7B,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;IACxC,YAAA,MAAM,CAAC,GAAW,GAAG,IAAI,CAAC;IAC3B,YAAA,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC/B,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC,YAAA,IAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAAE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;;oBACtD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;IAClC,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC/B,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAe,CAAC;gBACzC,IAAG,IAAI,CAAC,iBAAiB;oBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACnD,YAAA,MAAM,CAAC,IAAY,GAAG,IAAI,CAAC;IAChC,SAAC,CAAC,CAAC;IACF,QAAA,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;SAChC;IAEO,IAAA,WAAW,CAAC,OAAe,EAAE,QAAmB,EAAE,QAAQ,GAAG,SAAS,EAAA;YAC1E,MAAM,MAAM,GAAG,OAAO,CAAC;IACvB,QAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;IACxD,QAAA,OAAO,GAAG,MAAM,CAAA,GAAA,EAAM,UAAU,CAAM,GAAA,EAAA,QAAQ,EAAE,CAAC;SACpD;IACJ;;IClGM,MAAM,UAAU,GAAG,WAAW,CAAC;IAmF/B,MAAM,UAAU,GAAG;IACtB,IAAA,UAAU,EAAE;IACR,QAAA,IAAI,EAAEW,uBAAgB;IACtB,QAAA,QAAQ,EAAE,gBAAgB;IAC1B,QAAA,OAAO,EAAE,gBAAgB;IACzB,QAAA,GAAG,EAAE,UAAU;IAClB,KAAA;IACD,IAAA,OAAO,EAAE;IACL,QAAA,IAAI,EAAEC,wCAAiC;IACvC,QAAA,QAAQ,EAAE,mBAAmB;IAC7B,QAAA,OAAO,EAAE,iBAAiB;IAC1B,QAAA,GAAG,EAAE,UAAU;IAClB,KAAA;IACD,IAAA,KAAK,EAAE;IACH,QAAA,IAAI,EAAEC,gCAAyB;IAC/B,QAAA,QAAQ,EAAE,4BAA4B;IACtC,QAAA,OAAO,EAAE,gBAAgB;IACzB,QAAA,GAAG,EAAE,UAAU;IAClB,KAAA;IACD,IAAA,SAAS,EAAE;IACP,QAAA,IAAI,EAAEC,+BAAwB;IAC9B,QAAA,QAAQ,EAAE,kBAAkB;IAC5B,QAAA,OAAO,EAAE,gBAAgB;IACzB,QAAA,GAAG,EAAE,aAAa;IACrB,KAAA;IACD,IAAA,IAAI,EAAE;IACF,QAAA,IAAI,EAAEC,0BAAmB;IACzB,QAAA,QAAQ,EAAE,cAAc;IACxB,QAAA,OAAO,EAAE,gBAAgB;IACzB,QAAA,GAAG,EAAE,SAAS;IACjB,KAAA;KACJ;;UC9HY,mBAAmB,CAAA;IAE5B,IAAA,WAAA,CAAsB,KAAe,EAAA;YAAf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;SACpC;QAED,MAAM,eAAe,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAA;IACvE,QAAA,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;SAClF;QAED,MAAM,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAA;IACzE,QAAA,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;SACjF;QAED,MAAM,sBAAsB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAA;IAC9E,QAAA,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;SACtF;QAES,MAAM,cAAc,CAAC,OAAe,EAAE,IAAU,EAAE,UAAe,EAAE,iBAA2B,EAAA;IACpG,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC5F,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;SAC5F;QAES,MAAM,WAAW,CAAC,OAAe,EAAE,IAAU,EAAE,UAAe,EAAE,SAAgB,EAAE,iBAA2B,EAAA;YACnH,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,QAAQ,IAAI,SAAS;gBAAE,OAAO;IAClC,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,GAAiB,CAAC;YACzC,MAAM,KAAK,GAAU,EAAE,CAAC;IACxB,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IACpC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxC,YAAA,IAAI,iBAAiB,EAAE;IACnB,gBAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAQ,CAAC;oBAChF,IAAI,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC;IACrC,aAAA;IACD,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACxE,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,SAAA;IACA,QAAA,IAAI,CAAC,IAAI,CAAY,GAAG,KAAK,CAAC;SAClC;QAES,OAAO,CAAC,OAAe,EAAE,EAAU,EAAA;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/C,OAAO;IACH,YAAA,SAAS,EAAE,EAAE;IACb,YAAA,IAAI,EAAE,QAAQ;IACd,YAAA,QAAQ,EAAE,EAAE;aACf,CAAC;SACL;QAES,MAAM,oBAAoB,CAAC,OAAe,EAAA;YAChD,MAAM,UAAU,GAAQ,EAAE,CAAC;IAC3B,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IACjE,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9D,QAAA,OAAO,UAAU,CAAC;SACrB;IAES,IAAA,SAAS,CAAC,MAAW,EAAE,SAAgB,EAAE,GAAQ,EAAA;YACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;YAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE;IAC/B,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;IAC9B,SAAA;IAAM,aAAA;IACH,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,SAAA;SACJ;IAES,IAAA,UAAU,CAAC,GAAQ,EAAE,SAAgB,EAAE,GAAa,EAAA;YAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAG,CAAC,OAAO,EAAE;gBACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA,mBAAA,EAAsB,GAAG,CAAC,SAAS,CAA0B,wBAAA,CAAA,CAAC,CAAC;IACtF,SAAA;IACD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IAAE,YAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;IAChD,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;SACtD;IAES,IAAA,OAAO,SAAS,CAAC,EAAU,EAAE,GAAQ,EAAE,SAAgB,EAAA;YAC7D,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;IAC7B,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,SAAA;IACD,QAAA,OAAO,YAAY,CAAC,KAAK,KAAK,EAAE,CAAC;SACpC;QAES,OAAO,aAAa,CAAC,EAAU,EAAA;YACrC,OAAO;IACH,YAAA,SAAS,EAAE,EAAE;IACb,YAAA,IAAI,EAAE,YAAY;IAClB,YAAA,QAAQ,EAAE,EAAE;aACf,CAAC;SACL;QAED,MAAM,WAAW,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAE,QAAe,EAAA;SACvF;IAES,IAAA,MAAM,SAAS,CAAC,OAAe,EAAE,MAAW,EAAE,SAAgB,EAAA;SACvE;QAES,MAAM,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAA;SACtF;QAES,WAAW,CAAC,OAAe,EAAE,EAAU,EAAA;SAChD;IACJ;;ICpGK,MAAO,qBAAsB,SAAQ,mBAAmB,CAAA;QAC1D,MAAM,iBAAiB,CAAC,OAAe,EAAE,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IAClE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SACzD;IAED,IAAA,MAAM,aAAa,CAAC,OAAe,EAAE,UAAkB,EAAA;IACnD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;SAC5D;IAED,IAAA,MAAM,mBAAmB,CAAC,OAAe,EAAE,iBAA2B,EAAA;YAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACxD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAEC,iBAAU,CAAC,CAAC;YAC9E,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/D,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACvE,QAAA,OAAO,OAAO,CAAC;SAClB;IAED,IAAA,MAAM,iBAAiB,CAAC,OAAe,EAAE,IAAY,EAAE,OAAgB,EAAA;YACnE,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,QAAA,IAAI,CAAC,OAAO;IAAE,YAAA,OAAO,KAAK,CAAC;YAC3B,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,SAAA;IACD,QAAA,OAAO,MAAM,CAAC;SACjB;QAEQ,MAAM,WAAW,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAE,QAAe,EAAA;IAC7F,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrF,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAChF,SAAA;IACD,QAAA,OAAO,MAAM,CAAC;SACjB;QAEkB,WAAW,CAAC,OAAe,EAAE,EAAU,EAAA;IACtD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;SACrD;IAEkB,IAAA,MAAM,SAAS,CAAC,OAAe,EAAE,MAAW,EAAE,SAAgB,EAAA;IAC7E,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAClF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;gBACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC1E,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC1C,SAAA;SACJ;IAEO,IAAA,MAAM,wBAAwB,CAAC,OAAe,EAAE,EAAU,EAAE,SAAgB,EAAA;IAChF,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/E,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,YAAA,MAAM,SAAS,GAAG,mBAAmB,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IACpE,YAAA,IAAI,SAAS;oBAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACvD,SAAA;IACD,QAAA,OAAO,GAAG,CAAC;SACd;IACJ;;IC9DK,MAAO,mBAAoB,SAAQ,mBAAmB,CAAA;QAExD,MAAM,iBAAiB,CAAC,OAAe,EAAE,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IAClE,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;SACzD;QAED,MAAM,aAAa,CAAC,OAAe,EAAA;IAC/B,QAAA,OAAO,EAAE,CAAC;SACb;IAED,IAAA,MAAM,mBAAmB,CAAC,OAAe,EAAE,iBAA2B,EAAA;YAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACxD,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAEA,iBAAU,EAAE,KAAK,CAAC,CAAC;IAC7E,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC7D,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACvE,QAAA,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;SACzB;IAED,IAAA,MAAM,iBAAiB,CAAC,OAAe,EAAE,IAAY,EAAE,OAAgB,EAAA;IACnE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IACjD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,EAAE;IACX,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAA,CAAE,CAAC,CAAC;IAC9C,SAAA;YACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC1D;QAEQ,MAAM,WAAW,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAE,QAAe,EAAA;IAC7F,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrD,QAAA,IAAI,SAAS,EAAE;IACX,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,SAAA;IACD,QAAA,OAAO,MAAM,CAAC;SACjB;QAEkB,WAAW,CAAC,OAAe,EAAE,EAAU,EAAA;IACtD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;SACvD;IAEkB,IAAA,MAAM,SAAS,CAAC,OAAe,EAAE,MAAW,EAAE,SAAgB,EAAA;IAC7E,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7E,QAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAG;gBACnB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC3C,SAAC,CAAC,CAAC;SACN;IAEO,IAAA,iBAAiB,CAAC,IAAkC,EAAE,QAAgB,EAAE,OAAgB,EAAA;YAC5F,MAAM,MAAM,GAAU,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;IAC5B,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;IAC9C,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACvD,aAAA;IACL,SAAC,CAAC,CAAC;IACH,QAAA,OAAO,MAAM,CAAC;SACjB;IAEO,IAAA,MAAM,wBAAwB,CAAC,OAAe,EAAE,EAAU,EAAE,SAAgB,EAAA;IAChF,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1E,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;IACjB,YAAA,MAAM,SAAS,GAAG,mBAAmB,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACrE,YAAA,IAAI,SAAS;oBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACzD,SAAC,CAAC,CAAC;IACH,QAAA,OAAO,GAAG,CAAC;SACd;QAEO,YAAY,CAAC,OAAe,EAAE,GAAa,EAAA;IAC/C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;YACjD,MAAM,MAAM,GAAU,EAAE,CAAC;YACzB,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,QAAA,OAAO,MAAM,CAAC;SACjB;QAEO,wBAAwB,CAAC,OAAe,EAAE,UAAe,EAAA;YAC7D,IAAI,UAAU,IAAI,SAAS;gBAAE,OAAO;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAClC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC9C,SAAA;SACJ;IAEO,IAAA,WAAW,CAAC,OAAe,EAAE,UAAe,EAAE,GAAW,EAAA;YAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;gBAChC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC9D,SAAA;IACD,QAAA,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE;gBAC/C,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,SAAA;SACJ;IAEO,IAAA,oBAAoB,CAAC,OAAe,EAAE,UAAe,EAAE,GAAW,EAAA;IACtE,QAAA,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;IAChD,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;IACjB,gBAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,gBAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChD,aAAA;IACD,YAAA,OAAO,IAAI,CAAC;IAChB,SAAC,CAAC,CAAC;SACN;IACJ;;IC7GM,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;IAC3C,IAAA,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU;IAC3F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU;IAC5F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC7F,IAAA,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS;IAC5F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS;IAC5F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;IAC7F,IAAA,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC5F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC9F,IAAA,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC5F,IAAA,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU;IACzF,IAAA,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC7F,IAAA,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAC1F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS;IAC5F,IAAA,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAC7F,IAAA,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS;IAC1D,CAAA,CAAC;;UCdW,kBAAkB,CAAA;IAM7B,IAAA,WAAA,CAAqB,MAAiB,EAAA;YAAjB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;SACrC;QALD,OAAO,GAAA;IACJ,QAAA,IAAI,CAAC,MAAc,GAAG,IAAI,CAAC;SAC7B;IAYD,IAAA,MAAM,sBAAsB,CAC1B,OAAe,EACf,OAAgB,EAChB,KAAiD,EAAA;YAEjD,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,QAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAChE,QAAA,OAAO,KAAK,CAAC;SACd;QAEO,MAAM,oBAAoB,CAChC,OAAe,EACf,KAAa,EACb,OAAgB,EAChB,KAAiD,EAAA;YAEjD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC9D,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5D,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,SAAS,GAAG,GAAG,CAAC;YAEpB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAE1B,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IACpD,gBAAA,OAAO,EAAE,CAAC;IACX,aAAA;IACD,YAAA,IAAI,OAAO,IAAI,OAAO,GAAG,OAAO,EAAE;oBAChC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;oBACjF,UAAU,GAAG,EAAE,CAAC;oBAChB,OAAO,GAAG,CAAC,CAAC;IACb,aAAA;IACD,YAAA,IAAI,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,SAAS,EAAE;IACvC,gBAAA,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;oBACrB,SAAS,IAAI,GAAG,CAAC;IAClB,aAAA;IACF,SAAA;YAED,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;SAClF;IAEO,IAAA,MAAM,eAAe,CAAC,OAAe,EAAE,EAAU,EAAE,UAAe,EAAA;YACxE,IAAI;IACF,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACtD,IAAI,KAAK,CAAC,IAAI,EAAE;IACd,gBAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3D,aAAA;IACD,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACjC,YAAA,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACxB,SAAA;IAAC,QAAA,OAAO,CAAC,EAAE;IACV,YAAA,OAAO,CAAC,GAAG,CAAC,kEAAkE,EAAE,CAAA,CAAE,CAAC,CAAC;IACrF,SAAA;SACF;IAEO,IAAA,oBAAoB,CAAC,KAAU,EAAA;YACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;IACjC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,YAAA,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;IAAE,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5D,iBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;IAC9B,oBAAA,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK;4BAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAC1C,oBAAA,OAAO,IAAI,CAAC;IACd,iBAAC,CAAC,CAAC;IACP,SAAC,CAAC,CAAC;SACJ;QAEO,MAAM,0BAA0B,CAAC,OAAe,EAAA;YACtD,OAAO;gBACL,kBAAkB,EAAE,MAAM,IAAI,CAAC,MAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC;IACrE,YAAA,YAAY,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;aACpD,CAAC;SACH;QAEO,MAAM,iBAAiB,CAAC,OAAe,EAAA;YAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjD,QAAA,IAAI,SAAc,CAAC;IACnB,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC;IAC9D,QAAA,IAAI,aAAa;IAAE,YAAA,SAAS,GAAG,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC;;gBACnE,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC;IACrE,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;IACzE,QAAA,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;SACrB;QAEO,MAAM,WAAW,CAAC,OAAe,EAAA;IACvC,QAAA,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAEC,kBAAW,CAAC,CAAC;YACnF,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;SACvD;QAEO,MAAM,mBAAmB,CAAC,OAAe,EAAA;IAC/C,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;YACxC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC9C,YAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAEnC,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBAChC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,aAAA;IACF,SAAA;IACD,QAAA,OAAO,aAAa,CAAC;SACtB;IACF;;UCjHY,eAAe,CAAA;IAOxB,IAAA,WAAA,CAAoB,KAAe,EAAA;YAAf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC5D;QAED,YAAY,CAAC,QAAwB,EAAE,SAAiB,EAAA;YACpD,IAAI,CAAC,QAAQ,CAAC,KAAK;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAClF,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAoB,CAAC;YACtE,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;SACnD;IAED,IAAA,MAAM,aAAa,CAAC,OAAe,EAAE,UAAkB,EAAA;YACnD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;SAC/D;QAED,MAAM,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAA;YACzE,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC1B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7E;IAED,IAAA,MAAM,iBAAiB,CAAC,OAAe,EAAE,IAAY,EAAE,OAAgB,EAAA;YACnE,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC1B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SACtE;QAED,MAAM,eAAe,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAA;YACvE,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC1B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SAC3E;QAED,MAAM,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAA;YACzE,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC1B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7E;QAED,MAAM,sBAAsB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAS,GAAG,KAAK,EAAA;YAC9E,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC1B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SAClF;IAED,IAAA,MAAM,mBAAmB,CAAC,OAAe,EAAE,iBAA2B,EAAA;YAClE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,iBAAiB,EAAE;IAC1C,YAAA,OAAO,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;IAC7H,SAAA;YACD,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;SAClF;QAEO,kBAAkB,GAAA;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;SAC9E;IAEJ;;UCrEY,WAAW,CAAA;IAEpB,IAAA,WAAA,CAAoB,KAAe,EAAA;YAAf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;IAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;QAED,MAAM,WAAW,CAAC,MAAyB,EAAA;YAC7C,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACtC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;IAC9C,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;oBAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;wBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IACzD,iBAAA;IACD,aAAA;IACD,SAAA;SACE;IAED,IAAA,MAAM,kBAAkB,CAAC,OAAe,EAAE,MAAyB,EAAA;YAC/D,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChE,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACrC,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxE,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;oBAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACjE,SAAA;YACD,IAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE;gBAGnC,MAAM,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnE,SAAA;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;SAC7C;IACJ;;UCvCY,UAAU,CAAA;IAKnB,IAAA,iBAAiB,CAAC,iBAAsB,EAAE,iBAAsB,EAAE,kBAAuB,EAAA;IACrF,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC3C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC3C,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YAC7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;IAED,IAAA,iBAAiB,CAAC,QAAwB,EAAA;YACtC,IAAI,IAAI,CAAC,iBAAiB;gBAEtB,QAAQ,CAAC,iBAAiB,EAAE,CAAC;SACpC;QAEO,iBAAiB,GAAA;IACrB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBAAE,OAAO;YAE3FR,oBAAc,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAEpEA,oBAAc,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACpET,UAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;SACpD;IACJ;;ICnBD,IAAY,aAuDX,CAAA;IAvDD,CAAA,UAAY,aAAa,EAAA;IAErB,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC,CAAA;IACzC,IAAA,aAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD,CAAA;IACvD,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C,CAAA;IAC/C,IAAA,aAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD,CAAA;IACrD,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD,CAAA;IACjD,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;IAGnB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;IACf,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;IAC/B,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;IACb,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;IACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;IACnC,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;IACnB,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC,CAAA;IACvC,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;IACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;IACjC,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;IACrC,IAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC,CAAA;IACzC,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,aAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD,CAAA;IACvD,IAAA,aAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C,CAAA;IAC/C,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;IACjC,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;IAC/B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;IACzB,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;IACnC,IAAA,aAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD,CAAA;IACrD,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;IACnC,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C,CAAA;IAC3C,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;IACrC,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,qBAA0C,CAAA;IAG1C,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;IACf,IAAA,aAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD,CAAA;IAGnD,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;IAC7B,IAAA,aAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C,CAAA;IAC7C,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC,CAAA;IACvC,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC,CAAA;IACvC,IAAA,aAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD,CAAA;IACjD,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;IACnC,IAAA,aAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C,CAAA;IAC3C,IAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC,CAAA;IACvC,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;IACnC,CAAC,EAvDW,aAAa,KAAb,aAAa,GAuDxB,EAAA,CAAA,CAAA,CAAA;IAED,IAAY,UAKX,CAAA;IALD,CAAA,UAAY,UAAU,EAAA;IAClB,IAAA,UAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;IAC3B,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;IACjB,IAAA,UAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;IACzB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;IACrB,CAAC,EALW,UAAU,KAAV,UAAU,GAKrB,EAAA,CAAA,CAAA;;UCpEY,MAAM,CAAA;IAIf,IAAA,WAAA,CAAY,MAAwB,EAAA;YAF5B,IAAK,CAAA,KAAA,GAAyB,EAAE,CAAC;IAGrC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACvG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;SACxD;QAED,IAAI,GAAA;YACA,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;IAED,IAAA,GAAG,CAAC,KAAa,EAAA;IACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC5B;IACJ;;UCjBY,WAAW,CAAA;IAMpB,IAAA,WAAA,CAAY,MAA6B,EAAA;IACrC,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;IAC3C,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACnD,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;IACzC,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;SACpD;QAED,aAAa,GAAA;YACT,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;QAED,iBAAiB,GAAA;YACb,OAAO,IAAI,CAAC,kBAAkB,CAAC;SAClC;QAED,YAAY,GAAA;YACR,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,gBAAgB,GAAA;YACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC;SACjC;IACJ;;UC1BY,QAAQ,CAAA;QAIjB,WAAY,CAAA,UAAsB,EAAE,QAA4B,EAAA;IAC5D,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SACvE;IACJ;;UCTY,cAAc,CAAA;QAIvB,WAAY,CAAA,UAAsB,EAAE,MAAwB,EAAA;YAFpD,IAAK,CAAA,KAAA,GAAsC,EAAE,CAAC;IAGlD,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACvG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACtF;QAED,IAAI,GAAA;YACA,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;IAED,IAAA,GAAG,CAAC,KAAa,EAAA;IACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC5B;IACJ;;UCnBY,kBAAkB,CAAA;IAK3B,IAAA,WAAA,CAAY,QAA6B,EAAA;YACrC,IAAI,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAChC,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;SAC3C;IACJ,CAAA;UAEY,qBAAqB,CAAA;QAC9B,OAAO,GAAG,CAAC,QAA4B,EAAA;YACnC,OAAO,IAAIM,yBAAmB,CAAC;gBAC3B,KAAK,EAAE,IAAID,WAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzE,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;IACjC,YAAA,IAAI,EAAEE,gBAAU;IACnB,SAAA,CAAC,CAAA;SACL;IACJ;;UCrBY,kBAAkB,CAAA;IAO3B,IAAA,WAAA,CAAY,QAAwB,EAAA;;IAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,MAAC,QAAQ,CAAC,UAAU,CAAC,QAA4B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,KAAI,EAAE,CAAC;IAC/E,QAAA,IAAI,CAAC,MAAM,GAAG,CAAA,MAAC,QAAQ,CAAC,UAAU,CAAC,MAA0B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,KAAI,EAAE,CAAC;IAC3E,QAAA,IAAI,CAAC,SAAS,GAAG,CAAA,MAAC,QAAQ,CAAC,UAAU,CAAC,SAA6B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,KAAI,EAAE,CAAC;IACjF,QAAA,IAAI,CAAC,KAAK,GAAG,CAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,KAAI,EAAE,CAAC;IACzC,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;SACjC;IACJ,CAAA;UAEY,qBAAqB,CAAA;QAC9B,OAAO,GAAG,CAAC,UAA8B,EAAA;IACrC,QAAA,MAAM,IAAI,GAAG,IAAIE,oBAAc,EAAE,CAAC;IAClC,QAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACvF,QAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,QAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,QAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAChC,QAAA,OAAO,IAAI,CAAC;SACf;QAEO,OAAO,GAAG,CAAC,IAAoB,EAAE,IAAY,EAAE,IAAuB,EAAE,IAAY,EAAA;IACxF,QAAA,IAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IAChB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAIC,qBAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,SAAA;SACJ;IACJ;;UC7BY,cAAc,CAAA;IAMvB,IAAA,WAAA,CAAY,KAAe,EAAA;YAF3B,IAAS,CAAA,SAAA,GAA0B,EAAE,CAAC;IAGlC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;IAC/B,YAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAG;oBACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,GAA0B,CAAC,CAAC,CAAC;IAC5E,aAAC,CAAC,CAAC;IACN,SAAA;IAAM,aAAA;IACH,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAA+B,CAAC,CAAC,CAAC;IACtF,SAAA;SACJ;IACJ,CAAA;UAEY,iBAAiB,CAAA;QAE1B,OAAO,GAAG,CAAC,UAA0B,EAAA;IACjC,QAAA,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC7B,QAAA,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;YACnC,KAAK,CAAC,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAChE,QAAA,iBAAiB,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAClD,QAAA,OAAO,KAAK,CAAC;SAChB;IAEO,IAAA,OAAO,YAAY,CAAC,UAA0B,EAAE,KAAe,EAAA;IACnE,QAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;IACpB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAsB,CAAC;IAC1C,QAAA,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAG;gBAC/B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,SAAC,CAAC,CAAC;SACN;IACJ;;UChCY,UAAU,CAAA;IAEnB,IAAA,eAAe,CAAI,MAAuB,EAAA;IACtC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,QAAA,MAAM,UAAU,GAAqB,EAAE,IAAI,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjC,SAAA;IACD,QAAA,OAAO,UAAU,CAAC;SACrB;IAED,IAAA,iBAAiB,CAAC,MAAwB,EAAA;IACtC,QAAA,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;SAC7B;IAED,IAAA,oBAAoB,CAAC,QAA2B,EAAA;IAC5C,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC/C,QAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IACvD,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;IAC7C,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACrD,OAAO;gBACH,aAAa;gBACb,iBAAiB;gBACjB,YAAY;gBACZ,gBAAgB;aACM,CAAC;SAC9B;IAED,IAAA,sBAAsB,CAAC,QAA+B,EAAA;IAClD,QAAA,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;SACpC;IAED,IAAA,iBAAiB,CAAC,QAAwB,EAAA;YACtC,OAAO;gBACH,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;aAClC,CAAC;SAC3B;IAED,IAAA,mBAAmB,CAAC,QAA4B,EAAA;IAC5C,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SACvC;IAED,IAAA,uBAAuB,CAAC,MAAoC,EAAA;IACxD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,QAAA,MAAM,UAAU,GAAqB,EAAE,IAAI,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC/B,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpD,SAAA;IACD,QAAA,OAAO,UAAU,CAAC;SACrB;IAED,IAAA,yBAAyB,CAAC,MAAwB,EAAA;IAC9C,QAAA,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAC3C;IAED,IAAA,iBAAiB,CAAC,KAAe,EAAA;IAC7B,QAAA,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;SACpC;IAED,IAAA,mBAAmB,CAAC,KAAqB,EAAA;IACrC,QAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACvC;IACJ;;UCnEY,eAAe,CAAA;IAIxB,IAAA,WAAA,CAAoB,OAAyB,EAAA;YAAzB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;IAF7C,QAAA,IAAA,CAAA,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC;SAG3B;QAED,YAAY,CAAC,QAAwB,EAAE,SAAiB,EAAA;YACpD,IAAI,CAAC,QAAQ,CAAC,KAAK;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAClF,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAoB,CAAC;YACtE,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;SACnD;QAED,aAAa,CAAC,OAAe,EAAE,UAAkB,EAAA;YAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;SAC/F;IAED,IAAA,iBAAiB,CAAC,OAAe,EAAE,IAAY,EAAE,OAAgB,EAAA;YAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;SACtG;IAED,IAAA,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAkB,EAAA;YACpE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;SAC7G;IAED,IAAA,sBAAsB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAkB,EAAA;YACzE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;SAClH;IAED,IAAA,eAAe,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAkB,EAAA;YAClE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;SAC3G;IAED,IAAA,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAkB,EAAA;YACpE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;SAC7G;QAED,mBAAmB,CAAC,OAAe,EAAE,iBAA2B,EAAA;YAC5D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;SAC5G;IACJ;;UCjCY,aAAa,CAAA;QAKtB,WAAoB,CAAA,OAAyB,EAAU,UAAsB,EAAA;YAAzD,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;YAAU,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;IAF7E,QAAA,IAAA,CAAA,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;SAGvB;IAED,IAAA,MAAM,IAAI,GAAA;IACN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;SAC7D;IAED,IAAA,MAAM,SAAS,CAAC,IAA0B,EAAE,QAAyB,EAAA;YACjE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;SACtF;IAED,IAAA,MAAM,WAAW,CAAC,KAAkB,EAAE,QAAyB,EAAA;YAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;SACzF;QAED,MAAM,eAAe,CAAC,OAAe,EAAA;IACjC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SACrF;IAED,IAAA,MAAM,aAAa,CAAC,OAAe,EAAE,UAAkB,EAAA;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;SAC/F;IAED,IAAA,MAAM,WAAW,CAAC,OAAe,EAAE,iBAAyB,EAAA;IACxD,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAA2B,KAAI;gBACrF,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACxD,SAAC,CAAA;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;SACpG;IAED,IAAA,MAAM,OAAO,CAAC,OAAe,EAAE,SAAiB,EAAE,OAAiB,EAAA;YAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;SACjG;QAED,MAAM,iBAAiB,CAAC,OAAe,EAAA;IACnC,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAwB,KAAI;gBAClF,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrD,SAAC,CAAA;IACD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SACvF;QAED,MAAM,mBAAmB,CAAC,IAAW,EAAA;IACjC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SACtF;QAED,MAAM,gBAAgB,CAAC,OAAe,EAAA;IAClC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SACtF;IAED,IAAA,MAAM,mBAAmB,CAAC,OAAe,EAAC,QAAe,EAAA;YACpD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAC,QAAQ,EAAE,CAAC,CAAC;SACnG;IAED,IAAA,MAAM,SAAS,CAAC,OAAe,EAAE,UAAe,EAAA;YAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;SAC3F;IAED,IAAA,MAAM,WAAW,CAAC,OAAe,EAAE,IAAS,EAAA;YACxC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SACvF;IAED,IAAA,MAAM,cAAc,CAAC,OAAe,EAAE,SAAiB,EAAA;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;SAC/F;IAED,IAAA,MAAM,gBAAgB,CAAC,OAAe,EAAE,IAAiB,EAAA;YACrD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SAC5F;IAED,IAAA,MAAM,kBAAkB,CAAC,OAAe,EAAE,IAAY,EAAA;IAClD,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAwB,KAAI;gBAClF,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrD,SAAC,CAAA;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SAC9F;QAED,MAAM,WAAW,CAAC,OAAe,EAAA;IAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAwB,KAAI;gBAClF,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrD,SAAC,CAAA;IACD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SACjF;IAED,IAAA,MAAM,yBAAyB,CAAC,OAAe,EAAE,oBAA8B,EAAA;IAC3E,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,yBAAyB,EAAE;gBAC3E,OAAO;gBACP,oBAAoB;IACvB,SAAA,CAAC,CAAC;SACN;QAED,MAAM,qBAAqB,CAAC,OAAe,EAAA;IACvC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SAC3F;IAED,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,IAAY,EAAA;YAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;SACtF;IAED,IAAA,MAAM,aAAa,CAAC,GAAW,EAAE,IAAY,EAAA;YACzC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;SACrF;IAED,IAAA,MAAM,WAAW,CAAC,IAAS,EAAE,QAAa,EAAE,SAAc,EAAA;YACtD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;SACnG;QAED,MAAM,UAAU,CAAC,OAAe,EAAA;IAC5B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SAChF;IAED,IAAA,MAAM,eAAe,CAAC,OAAe,EAAE,YAAsC,EAAA;YACzE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;IACpD,YAAA,MAAM,EAAE,YAAY;IACpB,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB;aAClD,CAAC;IACF,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SACrF;IAED,IAAA,MAAM,wBAAwB,CAAC,OAAe,EAAE,KAAe,EAAE,YAAsC,EAAA;YACnG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;IACpD,YAAA,MAAM,EAAE,YAAY;IACpB,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB;aAClD,CAAC;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;SACrG;QAED,MAAM,WAAW,CAAC,OAAe,EAAA;IAC7B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SACjF;QAED,MAAM,eAAe,CAAC,OAAe,EAAA;IACjC,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAwB,KAAI;gBAClF,OAAO,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC7D,SAAC,CAAA;IACD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SACrF;IAED,IAAA,MAAM,WAAW,CAAC,OAAe,EAAE,SAAiB,EAAA;IAChD,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAA4B,KAAI;gBACtF,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACzD,SAAC,CAAA;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;SAC5F;QAED,MAAM,WAAW,CAAC,IAAY,EAAA;IAC1B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SAC9E;IACJ;;UCnKY,kBAAkB,CAAA;IAI3B,IAAA,WAAA,CAAoB,OAAyB,EAAA;YAAzB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;IAH7C,QAAA,IAAA,CAAA,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC;YAIzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC;IAED,IAAA,MAAM,kBAAkB,GAAA;IACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IACnC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SACxF;IAED,IAAA,MAAM,yBAAyB,GAAA;IAC3B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;IACjD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,yBAAyB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;SACtG;IAED,IAAA,MAAM,qBAAqB,CAAE,OAAe,EAAE,KAAU,EAAA;YACpD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;SAClG;IAED,IAAA,MAAM,wBAAwB,CAAC,OAAe,EAAE,QAAa,EAAA;YACzD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;SACxG;IAED,IAAA,MAAM,sBAAsB,CAAC,OAAe,EAAE,IAAY,EAAA;YACtD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SAClG;IACJ;;ICjCD,IAAY,WAGX,CAAA;IAHD,CAAA,UAAY,WAAW,EAAA;IACnB,IAAA,WAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAgB,CAAA;IAChB,IAAA,WAAA,CAAA,WAAA,CAAA,yBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,yBAAuB,CAAA;IAC3B,CAAC,EAHW,WAAW,KAAX,WAAW,GAGtB,EAAA,CAAA,CAAA,CAAA;UAEY,eAAe,CAAA;IACxB,IAAA,MAAM,IAAI,CAAC,IAAS,EAAE,EAAe,EAAA;YACjC,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAChD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YAC3B,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;IACxC,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAClE,SAAC,CAAC,CAAC;SACN;QAED,MAAM,IAAI,CAAC,EAAU,EAAA;YACjB,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAChD,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;IACxC,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5D,SAAC,CAAC,CAAA;SACL;QAEO,YAAY,CAAC,IAAsB,EAAE,EAAe,EAAA;YACxD,IAAI,CAAC,eAAe,GAAG,YAAA;IACnB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,YAAA,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;IACzD,SAAC,CAAC;SACL;IAEO,IAAA,QAAQ,CAAC,IAAS,EAAE,IAAsB,EAAE,EAAe,EAAE,OAA6B,EAAA;IAC9F,QAAA,MAAM,EAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7D,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChB,QAAA,EAAE,CAAC,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;SAClE;IAEO,IAAA,QAAQ,CAAC,IAAsB,EAAE,EAAe,EAAE,OAA6B,EAAA;IACnF,QAAA,MAAM,EAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAC,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAK;IAClB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACtB,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxB,SAAC,CAAC;IACF,QAAA,EAAE,CAAC,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;SACnE;IAEO,IAAA,OAAO,UAAU,CAAC,IAAsB,EAAE,EAAe,EAAA;IAC7D,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,QAAA,OAAO,EAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAC,CAAC;SAC1B;QAEO,OAAO,cAAc,CAAC,EAAe,EAAA;YACzC,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;SAC3C;IAEO,IAAA,OAAO,OAAO,CAAC,EAAe,EAAE,EAAkB,EAAE,OAA6B,EAAA;YACrF,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,SAAS,CAAC,CAAC;SACtB;IACJ;;UClDY,aAAa,CAAA;IAStB,IAAA,WAAA,CAAoB,OAAyB,EACzB,UAAsB,EACtB,GAAe,EACf,GAAoB,EAAA;YAHpB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;YACzB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;YACtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;YACf,IAAG,CAAA,GAAA,GAAH,GAAG,CAAiB;IAVxC,QAAA,IAAA,CAAA,kBAAkB,GAAuB;gBACrC,CAACT,eAAQ,GAAG,IAAI;gBAChB,CAACC,wBAAiB,GAAG,KAAK;aAC7B,CAAC;IAEF,QAAA,IAAA,CAAA,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;SAMvB;QAED,MAAM,uBAAuB,CAAC,MAA0B,EAAA;IACpD,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;IACjC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,uBAAuB,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC;SAC1F;IAED,IAAA,MAAM,KAAK,CAAC,MAAW,EAAE,kBAA6B,EAAA;IAClD,QAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAwB,KAAI;IACnF,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU;oBAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/E,SAAC,CAAC;IACF,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,MAAoB,KAAI;IACpF,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjC,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,SAAC,CAAC;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAC,CAAC,CAAC;SAC5F;IAED,IAAA,iBAAiB,CAAC,QAAgB,EAAA;SACjC;IAEO,IAAA,WAAW,CAAC,OAAe,EAAA;YAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;IACjC,YAAA,OAAO,EAAE,OAAO;IAChB,YAAA,IAAI,EAAE,EAAS;IACf,YAAA,KAAK,EAAE,EAAE;IACT,YAAA,QAAQ,EAAE,EAAE;aACf,CAAC;SACL;IAOO,IAAA,MAAM,QAAQ,GAAA;IAClB,QAAA,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YACnE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;IACtD,QAAA,OAAO,KAAK,CAAC;SAChB;IACJ;;UCxDY,gBAAgB,CAAA;QAmBzB,WAAmB,CAAA,KAAe,EAAU,GAAe,EAAA;YAAxC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;YAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;YAjB3D,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;YACd,IAAc,CAAA,cAAA,GAAQ,EAAE,CAAC;YACzB,IAAe,CAAA,eAAA,GAAQ,EAAE,CAAC;YAC1B,IAAiB,CAAA,iBAAA,GAAQ,EAAE,CAAC;YAC5B,IAAgB,CAAA,gBAAA,GAAuD,EAAE,CAAC;YAC1E,IAAkB,CAAA,kBAAA,GAAQ,EAAE,CAAC;IASZ,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAI3C,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YACzC,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,IAAS,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3E,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;SACnD;IAED,IAAA,OAAO,CAAC,MAAkB,EAAE,MAAqB,EAAE,IAAU,EAAA;YACzD,MAAM,IAAI,GAAiB,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC;YAE5G,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;gBACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;gBAC/C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;gBAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;IACjB,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,SAAC,CAAC,CAAC;SACN;IAED,IAAA,MAAM,SAAS,GAAA;IACX,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAClE,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACnE,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;SAC9B;IAED,IAAA,MAAM,KAAK,GAAA;IACP,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;SAC9D;IAEO,IAAA,cAAc,CAAC,KAAmB,EAAA;IACtC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAoB,CAAC;YACxC,IAAI,IAAI,CAAC,UAAU,EAAE;IACjB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO;IACV,SAAA;IACD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC3C;IAEO,IAAA,YAAY,CAAC,IAAkB,EAAA;YACnC,IAAI;IACA,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,SAAA;IAAC,QAAA,OAAO,KAAK,EAAE;gBACZ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,SAAA;SACJ;IAEO,IAAA,iBAAiB,CAAC,IAAkB,EAAA;YACxC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;IAClC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,SAAA;SACJ;IAEO,IAAA,qBAAqB,CAAC,IAAkB,EAAA;YAC5C,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;IACjC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,SAAA;SACJ;IAEO,IAAA,gBAAgB,CAAC,IAAkB,EAAA;YACvC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;IAChC,YAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE;IAC3C,gBAAA,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9E,aAAA;IACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC5D,SAAA;SACJ;IACJ;;UCtGY,aAAa,CAAA;IACtB,IAAA,WAAA,CAAoB,KAAe,EAAA;YAAf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;SAClC;IAED,IAAA,MAAM,OAAO,GAAA;IAET,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,IAAG;IAC7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,YAAA,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC9B,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAe,CAAC;gBACxC,IAAI,IAAI,CAAC,iBAAiB;oBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;;IAClE,gBAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,YAAA,KAAK,CAAC,IAAY,GAAG,IAAI,CAAC;IAC1B,YAAA,KAAK,CAAC,KAAa,GAAG,IAAI,CAAC;IAC3B,YAAA,KAAK,CAAC,QAAgB,GAAG,IAAI,CAAC;IACnC,SAAC,CAAC,CAAC;IAEF,QAAA,IAAI,CAAC,KAAK,CAAC,GAAW,GAAG,IAAI,CAAC;IAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAc,GAAG,IAAI,CAAC;SACrC;IACJ;;UCvBY,QAAQ,CAAA;IAIjB,IAAA,WAAA,CAAmB,KAAe,EAAA;YAAf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;YAFlC,IAAG,CAAA,GAAA,GAA4B,EAAE,CAAC;SAEI;QAEtC,GAAG,CAAC,MAAW,EAAE,YAAoB,EAAA;YACjC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,QAAA,IAAI,YAAY,EAAC;IACb,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,WAAW,EAAE,EAAC;oBAC/E,IAAI,GAAG,IAAI,CAAC;IACf,aAAA;IACD,YAAA,OAAO,IAAI,CAAA;IACd,SAAA;IACI,aAAA;IACD,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAA;SACJ;IAED,IAAA,MAAM,IAAI,CAAE,OAAe,EAAE,EAAU,EAAA;IACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SAC9C;IAED,IAAA,MAAM,SAAS,CAAC,OAAe,EAAE,YAAoB,EAAA;IACjD,QAAA,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACpJ,QAAA,OAAO,YAAY,CAAA;SACtB;IAED,IAAA,MAAM,MAAM,CAAC,OAAc,EAAE,YAAmB,EAAA;YAC5C,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;YAC9D,IAAI,YAAY,KAAK,IAAI,EAAC;gBACtB,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAC;IACzC,gBAAA,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,aAAA;IACD,YAAA,OAAO,KAAK,CAAC;IAChB,SAAA;SACJ;IACJ;;UCtCY,IAAI,CAAA;IAcb,IAAA,WAAA,CAAmB,KAAe,EAAA;YAAf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;YAblC,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;YACjB,IAAS,CAAA,SAAA,GAAyB,EAAE,CAAA;YACpC,IAAa,CAAA,aAAA,GAAyB,EAAE,CAAA;YACxC,IAAa,CAAA,aAAA,GAAyB,EAAE,CAAA;YACxC,IAAS,CAAA,SAAA,GAAyB,EAAE,CAAA;YACpC,IAAkB,CAAA,kBAAA,GAAyB,EAAE,CAAA;YAC7C,IAAW,CAAA,WAAA,GAAyB,EAAE,CAAA;YACtC,IAAK,CAAA,KAAA,GAAyB,EAAE,CAAA;YAChC,IAAS,CAAA,SAAA,GAAyB,EAAE,CAAA;YACpC,IAAQ,CAAA,QAAA,GAAyB,EAAE,CAAA;YACnC,IAAS,CAAA,SAAA,GAAyB,EAAE,CAAA;YAIhC,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAEzC;QAID,MAAM,IAAI,CAAC,OAAe,EAAA;IACtB,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC7B,QAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACrC,QAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACrC,QAAA,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACjC,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;SAEvB;QAGD,MAAM,iBAAiB,CAAC,OAAe,EAAA;IACnC,QAAA,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAA;IACvE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IAC1C,YAAA,IAAI,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IACnC,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG;oBACzC,IAAI,EAAE,YAAY,CAAC,SAAS;IAC5B,gBAAA,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK;IAC/B,gBAAA,aAAa,GAAG,CAAC,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;IACjF,gBAAA,UAAU,EAAE,EAAE;IACd,gBAAA,cAAc,GAAG,CAAC,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;IACpF,gBAAA,WAAW,GAAG,CAAC,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3E,gBAAA,YAAY,GAAG,CAAC,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;IAC9E,gBAAA,YAAY,GAAG,CAAC,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;IAC9E,gBAAA,gBAAgB,EAAE,EAAE;iBACvB,CAAA;IACJ,SAAA;IACD,QAAA,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAA;SAC/C;QAGD,MAAM,8BAA8B,CAAC,OAAe,EAAA;IAChD,QAAA,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAC9E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IACzC,YAAA,IAAI,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,YAAA,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACxF,YAAA,IAAI,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;gBAChD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAAE;IACpD,gBAAA,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;wBAC1E,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3G,iBAAA;IACJ,aAAA;IACJ,SAAA;SACJ;QAED,MAAM,SAAS,CAAC,OAAe,EAAA;IAC3B,QAAA,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACvD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IAClC,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACnB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG;oBACzB,IAAI,EAAE,IAAI,CAAC,SAAS;IACpB,gBAAA,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAC5C,gBAAA,gBAAgB,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC;IAC1E,gBAAA,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACxF,gBAAA,gBAAgB,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC;IAC1E,gBAAA,aAAa,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;IACjE,gBAAA,iBAAiB,EAAE,EAAE;IACrB,gBAAA,gBAAgB,EAAE,EAAE;IACpB,gBAAA,QAAQ,EAAE,EAAE;IACZ,gBAAA,WAAW,EAAE,EAAE;IACf,gBAAA,SAAS,EAAE,EAAE;IACb,gBAAA,UAAU,EAAE,EAAE;IACd,gBAAA,OAAO,EAAE,EAAE;IACX,gBAAA,YAAY,EAAE,EAAE;IAChB,gBAAA,YAAY,EAAC,EAAE;IACf,gBAAA,6BAA6B,EAAE,EAAE;iBACpC,CAAA;IACJ,SAAA;IACD,QAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACpC,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACnC,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACnC,QAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IACtC,QAAA,MAAM,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAA;SACnD;QAED,MAAM,gBAAgB,CAAC,OAAe,EAAA;IAClC,QAAA,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;IACxE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAC;gBACzC,IAAI,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBACvC,IAAG,aAAa,KAAI,CAAC,EAAC;IAClB,gBAAA,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAC/D,gBAAA,IAAI,eAAe,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC;IACvD,gBAAA,IAAI,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;IACxD,gBAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IAC1E,gBAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IAC5E,aAAA;IACJ,SAAA;SAEJ;QAED,MAAM,eAAe,CAAC,OAAe,EAAA;IACjC,QAAA,IAAI,uBAAuB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IACzF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IACpD,YAAA,IAAI,mBAAmB,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAA;gBACpD,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAChG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE;IAC1C,gBAAA,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChG,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAClF,aAAA;IACJ,SAAA;SACJ;QAED,MAAM,eAAe,CAAC,OAAe,EAAA;IACjC,QAAA,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACjE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IACvC,YAAA,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,YAAA,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACpF,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE;IAC5C,gBAAA,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;IAC7C,gBAAA,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE;wBAC7E,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;wBAC7F,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC3F,iBAAA;IACJ,aAAA;IACJ,SAAA;SACJ;QAED,MAAM,kBAAkB,CAAC,OAAe,EAAA;IACpC,QAAA,IAAI,oBAAoB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IACtF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IACjD,YAAA,IAAI,kBAAkB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACjD,YAAA,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC/F,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE;IAC5C,gBAAA,IAAI,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC;IACvD,gBAAA,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE;wBAC7E,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;IAChG,iBAAA;IACJ,aAAA;IACJ,SAAA;SACJ;QAED,MAAM,4BAA4B,CAAC,OAAe,EAAA;IAC9C,QAAA,IAAI,oBAAoB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IACtF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IACjD,YAAA,IAAI,mBAAmB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAClD,YAAA,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAChG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAAE;IACpD,gBAAA,IAAI,cAAc,GAAG,mBAAmB,CAAC,cAAc,CAAC;IACxD,gBAAA,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE;wBAC7E,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACjH,iBAAA;IACJ,aAAA;IACJ,SAAA;SACJ;QAED,MAAM,iBAAiB,CAAC,OAAe,EAAA;IACnC,QAAA,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAA;IACvE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IAC1C,YAAA,IAAI,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IACnC,YAAA,IAAI,gBAAgB,GAAG;oBACnB,IAAI,EAAE,YAAY,CAAC,SAAS;IAC5B,gBAAA,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAC5D,gBAAA,aAAa,GAAG,CAAC,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;IACjF,gBAAA,cAAc,GAAG,CAAC,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,YAAY,GAAG,EAAE,CAAC;IAC9E,gBAAA,gBAAgB,GAAG,CAAC,YAAY,CAAC,cAAc,IAAI,YAAY,CAAC,cAAc,GAAG,EAAE,CAAC;iBACvF,CAAA;gBACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAA;IAChE,SAAA;SAEJ;QAED,MAAM,aAAa,CAAC,OAAe,EAAA;IAC/B,QAAA,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAC/D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IACtC,YAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;IAC3B,YAAA,IAAI,YAAY,GAAG;IACf,gBAAA,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACpD,gBAAA,mBAAmB,GAAG,CAAC,QAAQ,CAAC,iBAAiB,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBAC3H,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBACjE,QAAQ,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBACvE,CAAA;gBACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,YAAY,CAAA;IACpD,SAAA;SACJ;QAED,MAAM,eAAe,CAAC,OAAe,EAAA;IACjC,QAAA,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IACxC,YAAA,IAAI,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAC/B,YAAA,IAAI,YAAY,GAAG;oBACf,WAAW,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBACjF,SAAS,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBAC9E,CAAA;gBACD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,YAAY,CAAA;IACxD,SAAA;SACJ;IACJ;;UC/LY,UAAU,CAAA;IAAvB,IAAA,WAAA,GAAA;IACI,QAAA,IAAA,CAAA,KAAK,GAAa;IACd,YAAA,MAAM,EAAE,EAAE;IACV,YAAA,GAAG,EAAE,IAAIgB,iBAAM,CAAC,MAAM,EAAE;IACxB,YAAA,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;aACtC,CAAC;IAEF,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;IACvB,QAAA,IAAA,CAAA,MAAM,GAAc,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,IAAK,CAAA,KAAA,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAY,CAAA,YAAA,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,IAAU,CAAA,UAAA,GAAuB,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjE,IAAK,CAAA,KAAA,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;YAEb,IAAO,CAAA,OAAA,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAyanD;IAnaG,IAAA,IAAI,MAAM,GAAA;IACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SACzB;QAID,MAAM,KAAK,CAAC,MAAmB,EAAA;;YAC3B,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAa,CAAC;IAClG,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAG1B,IAAI;gBACA,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,SAAA;IAAC,QAAA,OAAO,CAAC,EAAE;IACR,YAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACpD,SAAA;IACD,QAAA,OAAO,KAAK,CAAC;SAChB;QAgBD,MAAM,WAAW,CAAC,IAAY,EAAA;YAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;SAC9B;IAOD,IAAA,iBAAiB,CAAC,iBAAsB,EAAE,iBAAsB,EAAE,kBAAuB,EAAA;YACrF,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;SACxF;IAMD,IAAA,aAAa,CAAC,UAA2C,EAAA;IACrD,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;SACtC;IAOD,IAAA,uBAAuB,CAAC,MAAe,EAAA;IACnC,QAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,MAAM,CAAC;SAC1C;QAKD,uBAAuB,GAAA;IACnB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;SACxC;QAKD,MAAM,iBAAiB,CAAC,QAAwB,EAAA;IAC5C,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;YACrC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;gBACzC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC;IAC7D,SAAA;SACJ;IAOD,IAAA,MAAM,aAAa,CAAC,MAAe,EAAE,IAAa,EAAA;YAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO;IAEhD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;IACtB,QAAA,IAAI,MAAM,EAAE;IACR,YAAA,IAAI,CAAC,IAAI;IAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBACzE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAC9B,YAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IACjC,YAAA,IAAG,IAAI;IAAE,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,SAAA;IAAM,aAAA;gBACH,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAIA,iBAAM,CAAC,MAAM,EAAE,CAAC;IACxC,SAAA;SACJ;IAUD,IAAA,MAAM,WAAW,CAAC,OAAO,GAAG,IAAI,EAAA;;IAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,QAAA,IAAI,OAAO,EAAE;gBACT,OAAM,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC,kBAAkB,EAAE,CAAA,CAAC;IACvD,SAAA;SACJ;IASD,IAAA,MAAM,gBAAgB,CAAC,OAAe,EAAE,IAAkC,EAAA;;YACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,QAAA,IAAI,CAAC,KAAK;IAAE,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACpF,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;IAC1B,YAAA,OAAM,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA,CAAC;IAC1E,SAAA;IAAM,aAAA;IACH,YAAA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,SAAA;SACJ;IASD,IAAA,MAAM,sBAAsB,CAAC,OAAe,EAAE,IAAY,EAAA;;IACtD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;IAC1B,YAAA,OAAM,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA,CAAC;IACxE,SAAA;SACJ;QAOD,KAAK,CAAC,OAAe,EAAE,KAAa,EAAA;YAChC,IAAI;gBACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAC7C,YAAA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACpC,YAAA,IAAI,KAAK;IAAE,gBAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,YAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,OAAO,EAAE,CAAC;IACpB,YAAA,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,OAAO,EAAE,CAAC;gBACnF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,SAAA;IAAC,QAAA,OAAM,CAAC,EAAE;IACP,YAAA,OAAO,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAA,OAAA,CAAS,CAAC,CAAC;IACpD,SAAA;SACJ;QAQD,YAAY,CAAC,QAAwB,EAAE,SAAiB,EAAA;YACpD,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC5D;IAeD,IAAA,iBAAiB,CAAC,OAAe,EAAE,IAAY,EAAE,OAAgB,EAAA;IAC7D,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SACpE;IAQD,IAAA,iBAAiB,CAAC,OAAe,EAAE,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IAC5D,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SACpE;IASD,IAAA,eAAe,CAAC,OAAe,EAAE,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IAC1D,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SAClE;IAUD,IAAA,iBAAiB,CAAC,OAAe,EAAE,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IAC5D,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SACpE;IAQD,IAAA,sBAAsB,CAAC,OAAe,EAAE,EAAU,EAAE,SAAS,GAAG,KAAK,EAAA;IACjE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;SACzE;QAOD,UAAU,CAAC,OAAe,EAAE,EAAU,EAAA;IAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;SACrD;QAYD,mBAAmB,CAAC,OAAe,EAAE,iBAA2B,EAAA;YAC5D,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;SAC1E;IASD,IAAA,SAAS,CAAC,OAAe,EAAE,QAAmB,EAAE,QAAiB,EAAA;IAC7D,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC9D;IAQD,IAAA,YAAY,CAAC,OAAe,EAAE,QAAmB,EAAE,QAAiB,EAAA;YAChE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC1D;IAYD,IAAA,YAAY,CAAC,MAAoB,EAAA;YAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC5C;IASD,IAAA,gBAAgB,CAAC,OAAe,EAAE,GAAa,EAAE,QAAiB,EAAE,QAAmB,EAAA;IACnF,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC1E;IASD,IAAA,WAAW,CAAC,OAAe,EAAE,QAAiB,EAAE,QAAmB,EAAA;IAC/D,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAChE;IAaD,IAAA,MAAM,GAAG,CAAC,MAAW,EAAE,YAAoB,EAAA;YACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SAC/C;QAED,MAAM,eAAe,CAAC,OAAe,EAAA;YACjC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC,YAAY,CAAC;SAC5B;IASD,IAAA,MAAM,MAAM,CAAC,OAAe,EAAE,WAAmB,EAAA;YAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;SAClD;IAOD,IAAA,MAAM,IAAI,CAAC,OAAe,EAAE,EAAU,EAAA;YAClC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SACvC;IAQD,IAAA,MAAM,SAAS,CAAC,OAAe,EAAE,WAAmB,EAAA;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;SACrD;IAUD,IAAA,MAAM,OAAO,GAAA;YACT,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvB,IAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;IAAE,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACzE,QAAA,IAAI,CAAC,KAAa,GAAG,IAAI,CAAC;SAC9B;IASD,IAAA,MAAM,aAAa,GAAA;;IACf,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC1B,OAAM,MAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,EAAE,CAAA,CAAC;IAC9B,SAAA;IAAM,aAAA;IAEH,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACtB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAW,GAAG,IAAI,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAIA,iBAAM,CAAC,MAAM,EAAE,CAAC;IACxC,SAAA;SACJ;IAKD,IAAA,iBAAiB,CAAC,OAAe,EAAA;YAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;SACjD;IAEO,IAAA,MAAM,iBAAiB,GAAA;IAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IACzC,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACjF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACjC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC;SAC7D;IAGJ;;IC1cD,MAAM,SAAU,SAAQC,YAAM,CAAA;IAI1B,IAAA,WAAA,CAAY,OAAwB,EAAA;YAChC,KAAK,CAAC,OAAO,CAAC,CAAC;IACf,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;SACtC;IAED,IAAA,IAAI,CACA,GAAQ,EACR,MAA+B,EAC/B,UAA2C,EAC3C,OAAqC,EAAA;YAErC,MAAM,KAAK,GAAG,IAAI,CAAC;YAEnB,MAAM,MAAM,GAAG,IAAIC,gBAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC7B,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAA,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACtC,QAAA,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7C,QAAA,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACjD,QAAA,MAAM,CAAC,IAAI,CACP,GAAG,EACH,gBAAgB,MAAM,EAAA;gBAClB,IAAI;IACA,gBAAA,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;IAC3B,oBAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC3D,iBAAA;oBACD,MAAM,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,aAAA;IAAC,YAAA,OAAO,CAAM,EAAE;IACb,gBAAA,IAAI,OAAO,EAAE;wBACT,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,iBAAA;IAAM,qBAAA;IACH,oBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,iBAAA;IAED,gBAAA,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,aAAA;IACL,SAAC,EACD,UAAU,EACV,OAAO,CACV,CAAC;SACL;IAED,IAAA,KAAK,CAAC,MAAmB,EAAA;YACrB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACxC;IACJ;;;;;;;;;;"}