{"version":3,"file":"PolyBuilder.mjs","sources":["../../src/shapes/PolyBuilder.ts"],"sourcesContent":["import { Point, Polygon, utils } from '@pixi/core';\nimport { BuildData } from '../core/BuildData';\nimport { JOINT_TYPE } from '../core/const';\nimport { SmoothGraphicsData } from '../core/SmoothGraphicsData';\n\nimport type { IShapeBuilder } from '../core/IShapeBuilder';\n\nconst tempArr: Array<number> = [];\n\nfunction fixOrientation(points: number[], hole = false)\n{\n    const m = points.length;\n\n    if (m < 6)\n    {\n        return;\n    }\n\n    let area = 0;\n\n    for (let i = 0, x1 = points[m - 2], y1 = points[m - 1]; i < m; i += 2)\n    {\n        const x2 = points[i];\n        const y2 = points[i + 1];\n\n        area += (x2 - x1) * (y2 + y1);\n\n        x1 = x2;\n        y1 = y2;\n    }\n\n    if ((!hole && area > 0) || (hole && area <= 0))\n    {\n        const n = m / 2;\n\n        for (let i = n + (n % 2); i < m; i += 2)\n        {\n            const i1 = m - i - 2;\n            const i2 = m - i - 1;\n            const i3 = i;\n            const i4 = i + 1;\n\n            [points[i1], points[i3]] = [points[i3], points[i1]];\n            [points[i2], points[i4]] = [points[i4], points[i2]];\n        }\n    }\n}\n\n/**\n * @memberof PIXI.smooth\n */\nexport class PolyBuilder implements IShapeBuilder\n{\n    path(graphicsData: SmoothGraphicsData, buildData: BuildData)\n    {\n        const shape = graphicsData.shape as Polygon;\n        const points = graphicsData.points = shape.points.slice();\n        const eps = buildData.closePointEps;\n        const eps2 = eps * eps;\n\n        if (points.length === 0)\n        {\n            return;\n        }\n\n        const firstPoint = new Point(points[0], points[1]);\n        const lastPoint = new Point(points[points.length - 2], points[points.length - 1]);\n        const closedShape = graphicsData.closeStroke = shape.closeStroke;\n\n        let len = points.length;\n        let newLen = 2;\n\n        // 1. remove equal points\n        for (let i = 2; i < len; i += 2)\n        {\n            const x1 = points[i - 2];\n            const y1 = points[i - 1];\n            const x2 = points[i];\n            const y2 = points[i + 1];\n            let flag = true;\n\n            if (Math.abs(x1 - x2) < eps\n                && Math.abs(y1 - y2) < eps)\n            {\n                flag = false;\n            }\n\n            if (flag)\n            {\n                points[newLen] = points[i];\n                points[newLen + 1] = points[i + 1];\n                newLen += 2;\n            }\n        }\n        points.length = len = newLen;\n\n        newLen = 2;\n        // 2. remove middle points\n        for (let i = 2; i + 2 < len; i += 2)\n        {\n            let x1 = points[i - 2];\n            let y1 = points[i - 1];\n            const x2 = points[i];\n            const y2 = points[i + 1];\n            let x3 = points[i + 2];\n            let y3 = points[i + 3];\n\n            x1 -= x2;\n            y1 -= y2;\n            x3 -= x2;\n            y3 -= y2;\n            let flag = true;\n\n            if (Math.abs((x3 * y1) - (y3 * x1)) < eps2)\n            {\n                if ((x1 * x3) + (y1 * y3) < -eps2)\n                {\n                    flag = false;\n                }\n            }\n\n            if (flag)\n            {\n                points[newLen] = points[i];\n                points[newLen + 1] = points[i + 1];\n                newLen += 2;\n            }\n        }\n        points[newLen] = points[len - 2];\n        points[newLen + 1] = points[len - 1];\n        newLen += 2;\n\n        points.length = len = newLen;\n\n        if (len <= 2)\n        {\n            // suddenly, nothing\n            return;\n        }\n\n        if (closedShape)\n        {\n            // first point should be last point in closed line!\n            const closedPath = Math.abs(firstPoint.x - lastPoint.x) < eps\n                && Math.abs(firstPoint.y - lastPoint.y) < eps;\n\n            if (closedPath)\n            {\n                points.pop();\n                points.pop();\n            }\n        }\n    }\n\n    line(graphicsData: SmoothGraphicsData, buildData: BuildData)\n    {\n        const { closeStroke, points } = graphicsData;\n        // const eps = buildData.closePointEps;\n        // const eps2 = eps * eps;\n        const len = points.length;\n        // const style = graphicsData.lineStyle;\n\n        if (len <= 2)\n        {\n            return;\n        }\n        const { verts, joints } = buildData;\n\n        // TODO: alignment\n\n        const joint = graphicsData.jointType();\n        const cap = graphicsData.capType();\n        let prevCap = 0;\n\n        let prevX: number; let\n            prevY: number;\n\n        if (closeStroke)\n        {\n            prevX = points[len - 2];\n            prevY = points[len - 1];\n            joints.push(JOINT_TYPE.NONE);\n        }\n        else\n        {\n            prevX = points[2];\n            prevY = points[3];\n            if (cap === JOINT_TYPE.CAP_ROUND)\n            {\n                verts.push(points[0], points[1]);\n                joints.push(JOINT_TYPE.NONE);\n                joints.push(JOINT_TYPE.CAP_ROUND);\n                prevCap = 0;\n            }\n            else\n            {\n                prevCap = cap;\n                joints.push(JOINT_TYPE.NONE);\n            }\n        }\n        verts.push(prevX, prevY);\n\n        /* Line segments of interest where (x1,y1) forms the corner. */\n        for (let i = 0; i < len; i += 2)\n        {\n            const x1 = points[i]; const\n                y1 = points[i + 1];\n\n            // let x2: number; let\n            //     y2: number;\n\n            // if (i + 2 < len)\n            // {\n            //     x2 = points[i + 2];\n            //     y2 = points[i + 3];\n            // }\n            // else\n            // {\n            //     x2 = points[0];\n            //     y2 = points[1];\n            // }\n\n            // const dx = x2 - x1;\n            // const dy = y2 - y1;\n            // let nextX: number; let\n            //     nextY: number;\n\n            let endJoint = joint;\n\n            if (i + 2 >= len)\n            {\n                // nextX = points[2];\n                // nextY = points[3];\n                if (!closeStroke)\n                {\n                    endJoint = JOINT_TYPE.NONE;\n                }\n            }\n            else if (i + 4 >= len)\n            {\n                // nextX = points[0];\n                // nextY = points[1];\n                if (!closeStroke)\n                {\n                    if (cap === JOINT_TYPE.CAP_ROUND)\n                    {\n                        endJoint = JOINT_TYPE.JOINT_CAP_ROUND;\n                    }\n                    if (cap === JOINT_TYPE.CAP_BUTT)\n                    {\n                        endJoint = JOINT_TYPE.JOINT_CAP_BUTT;\n                    }\n                    if (cap === JOINT_TYPE.CAP_SQUARE)\n                    {\n                        endJoint = JOINT_TYPE.JOINT_CAP_SQUARE;\n                    }\n                }\n            }\n            // else\n            // {\n            //     nextX = points[i + 4];\n            //     nextY = points[i + 5];\n            // }\n\n            // const dx3 = x1 - prevX;\n            // const dy3 = y1 - prevY;\n\n            endJoint += prevCap;\n            prevCap = 0;\n\n            verts.push(x1, y1);\n            joints.push(endJoint);\n\n            prevX = x1;\n            prevY = y1;\n        }\n\n        if (closeStroke)\n        {\n            verts.push(points[0], points[1]);\n            joints.push(JOINT_TYPE.NONE);\n            verts.push(points[2], points[3]);\n            joints.push(JOINT_TYPE.NONE);\n        }\n        else\n        {\n            verts.push(points[len - 4], points[len - 3]);\n            joints.push(JOINT_TYPE.NONE);\n        }\n    }\n\n    fill(graphicsData: SmoothGraphicsData, buildData: BuildData)\n    {\n        let points = graphicsData.points;\n        // TODO: simplify holes too!\n        const holes = graphicsData.holes;\n        const eps = buildData.closePointEps;\n\n        const { verts, joints } = buildData;\n\n        if (points.length < 6)\n        {\n            return;\n        }\n        const holeArray = [];\n        let len = points.length;\n\n        fixOrientation(points, false);\n\n        // Process holes..\n        for (let i = 0; i < holes.length; i++)\n        {\n            const hole = holes[i];\n\n            fixOrientation(hole.points, true);\n\n            holeArray.push(points.length / 2);\n            points = points.concat(hole.points);\n        }\n\n        // TODO: reduce size later?\n        const pn = tempArr;\n\n        if (pn.length < points.length)\n        {\n            pn.length = points.length;\n        }\n        let start = 0;\n\n        for (let i = 0; i <= holeArray.length; i++)\n        {\n            let finish = len / 2;\n\n            if (i > 0)\n            {\n                if (i < holeArray.length)\n                {\n                    finish = holeArray[i];\n                }\n                else\n                {\n                    finish = (points.length >> 1);\n                }\n            }\n            pn[start * 2] = finish - 1;\n            pn[((finish - 1) * 2) + 1] = start;\n            for (let j = start; j + 1 < finish; j++)\n            {\n                pn[(j * 2) + 1] = j + 1;\n                pn[(j * 2) + 2] = j;\n            }\n            start = finish;\n        }\n\n        // sort color\n        graphicsData.triangles = utils.earcut(points, holeArray, 2);\n\n        if (!graphicsData.triangles)\n        {\n            return;\n        }\n\n        if (!graphicsData.fillAA)\n        {\n            for (let i = 0; i < points.length; i += 2)\n            {\n                verts.push(points[i], points[i + 1]);\n                joints.push(JOINT_TYPE.FILL);\n            }\n\n            return;\n        }\n\n        const { triangles } = graphicsData;\n\n        len = points.length;\n\n        for (let i = 0; i < triangles.length; i += 3)\n        {\n            // TODO: holes prev/next!!!\n            let flag = 0;\n\n            for (let j = 0; j < 3; j++)\n            {\n                const ind1 = triangles[i + j];\n                const ind2 = triangles[i + ((j + 1) % 3)];\n\n                if (pn[ind1 * 2] === ind2 || pn[(ind1 * 2) + 1] === ind2)\n                {\n                    flag |= (1 << j);\n                }\n            }\n            joints.push(JOINT_TYPE.FILL_EXPAND + flag);\n            joints.push(JOINT_TYPE.NONE);\n            joints.push(JOINT_TYPE.NONE);\n            joints.push(JOINT_TYPE.NONE);\n            joints.push(JOINT_TYPE.NONE);\n            joints.push(JOINT_TYPE.NONE);\n        }\n\n        // bisect, re-using pn\n        for (let ind = 0; ind < len / 2; ind++)\n        {\n            const prev = pn[ind * 2];\n            const next = pn[(ind * 2) + 1];\n            let nx1 = (points[(next * 2) + 1] - points[(ind * 2) + 1]); let\n                ny1 = -(points[next * 2] - points[ind * 2]);\n            let nx2 = (points[(ind * 2) + 1] - points[(prev * 2) + 1]); let\n                ny2 = -(points[ind * 2] - points[prev * 2]);\n            const D1 = Math.sqrt((nx1 * nx1) + (ny1 * ny1));\n\n            nx1 /= D1;\n            ny1 /= D1;\n            const D2 = Math.sqrt((nx2 * nx2) + (ny2 * ny2));\n\n            nx2 /= D2;\n            ny2 /= D2;\n\n            let bx = (nx1 + nx2);\n            let by = (ny1 + ny2);\n            const D = (bx * nx1) + (by * ny1);\n\n            if (Math.abs(D) < eps)\n            {\n                bx = nx1;\n                by = ny1;\n            }\n            else\n            {\n                bx /= D;\n                by /= D;\n            }\n            pn[ind * 2] = bx;\n            pn[(ind * 2) + 1] = by;\n        }\n\n        for (let i = 0; i < triangles.length; i += 3)\n        {\n            const prev = triangles[i];\n            const ind = triangles[i + 1];\n            const next = triangles[i + 2];\n            const nx1 = (points[(next * 2) + 1] - points[(ind * 2) + 1]); const\n                ny1 = -(points[next * 2] - points[ind * 2]);\n            const nx2 = (points[(ind * 2) + 1] - points[(prev * 2) + 1]); const\n                ny2 = -(points[ind * 2] - points[prev * 2]);\n\n            let j1 = 1;\n\n            if ((nx1 * ny2) - (nx2 * ny1) > 0.0)\n            {\n                j1 = 2;\n            }\n\n            for (let j = 0; j < 3; j++)\n            {\n                const ind = triangles[i + ((j * j1) % 3)];\n\n                verts.push(points[ind * 2], points[(ind * 2) + 1]);\n            }\n            for (let j = 0; j < 3; j++)\n            {\n                const ind = triangles[i + ((j * j1) % 3)];\n\n                verts.push(pn[ind * 2], pn[(ind * 2) + 1]);\n            }\n        }\n    }\n}\n"],"names":["ind"],"mappings":";;;AAOA,MAAM,UAAyB,EAAC,CAAA;AAEhC,SAAS,cAAA,CAAe,MAAkB,EAAA,IAAA,GAAO,KACjD,EAAA;AACI,EAAA,MAAM,IAAI,MAAO,CAAA,MAAA,CAAA;AAEjB,EAAA,IAAI,IAAI,CACR,EAAA;AACI,IAAA,OAAA;AAAA,GACJ;AAEA,EAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AAEX,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,EAAK,GAAA,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG,EAAK,GAAA,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,KAAK,CACpE,EAAA;AACI,IAAM,MAAA,EAAA,GAAK,OAAO,CAAC,CAAA,CAAA;AACnB,IAAM,MAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAEvB,IAAS,IAAA,IAAA,CAAA,EAAA,GAAK,OAAO,EAAK,GAAA,EAAA,CAAA,CAAA;AAE1B,IAAK,EAAA,GAAA,EAAA,CAAA;AACL,IAAK,EAAA,GAAA,EAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAK,CAAC,IAAQ,IAAA,IAAA,GAAO,CAAO,IAAA,IAAA,IAAQ,QAAQ,CAC5C,EAAA;AACI,IAAA,MAAM,IAAI,CAAI,GAAA,CAAA,CAAA;AAEd,IAAA,KAAA,IAAS,IAAI,CAAK,GAAA,CAAA,GAAI,GAAI,CAAI,GAAA,CAAA,EAAG,KAAK,CACtC,EAAA;AACI,MAAM,MAAA,EAAA,GAAK,IAAI,CAAI,GAAA,CAAA,CAAA;AACnB,MAAM,MAAA,EAAA,GAAK,IAAI,CAAI,GAAA,CAAA,CAAA;AACnB,MAAA,MAAM,EAAK,GAAA,CAAA,CAAA;AACX,MAAA,MAAM,KAAK,CAAI,GAAA,CAAA,CAAA;AAEf,MAAA,CAAC,MAAO,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,EAAE,CAAC,CAAI,GAAA,CAAC,MAAO,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA;AAClD,MAAA,CAAC,MAAO,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,EAAE,CAAC,CAAI,GAAA,CAAC,MAAO,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA;AAAA,KACtD;AAAA,GACJ;AACJ,CAAA;AAKO,MAAM,WACb,CAAA;AAAA,EACI,IAAA,CAAK,cAAkC,SACvC,EAAA;AACI,IAAA,MAAM,QAAQ,YAAa,CAAA,KAAA,CAAA;AAC3B,IAAA,MAAM,MAAS,GAAA,YAAA,CAAa,MAAS,GAAA,KAAA,CAAM,OAAO,KAAM,EAAA,CAAA;AACxD,IAAA,MAAM,MAAM,SAAU,CAAA,aAAA,CAAA;AACtB,IAAA,MAAM,OAAO,GAAM,GAAA,GAAA,CAAA;AAEnB,IAAI,IAAA,MAAA,CAAO,WAAW,CACtB,EAAA;AACI,MAAA,OAAA;AAAA,KACJ;AAEA,IAAM,MAAA,UAAA,GAAa,IAAI,KAAM,CAAA,MAAA,CAAO,CAAC,CAAG,EAAA,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AACjD,IAAA,MAAM,SAAY,GAAA,IAAI,KAAM,CAAA,MAAA,CAAO,MAAO,CAAA,MAAA,GAAS,CAAC,CAAA,EAAG,MAAO,CAAA,MAAA,CAAO,MAAS,GAAA,CAAC,CAAC,CAAA,CAAA;AAChF,IAAM,MAAA,WAAA,GAAc,YAAa,CAAA,WAAA,GAAc,KAAM,CAAA,WAAA,CAAA;AAErD,IAAA,IAAI,MAAM,MAAO,CAAA,MAAA,CAAA;AACjB,IAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAGb,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,KAAK,CAC9B,EAAA;AACI,MAAM,MAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACvB,MAAM,MAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACvB,MAAM,MAAA,EAAA,GAAK,OAAO,CAAC,CAAA,CAAA;AACnB,MAAM,MAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACvB,MAAA,IAAI,IAAO,GAAA,IAAA,CAAA;AAEX,MAAI,IAAA,IAAA,CAAK,GAAI,CAAA,EAAA,GAAK,EAAE,CAAA,GAAI,GACjB,IAAA,IAAA,CAAK,GAAI,CAAA,EAAA,GAAK,EAAE,CAAA,GAAI,GAC3B,EAAA;AACI,QAAO,IAAA,GAAA,KAAA,CAAA;AAAA,OACX;AAEA,MAAA,IAAI,IACJ,EAAA;AACI,QAAO,MAAA,CAAA,MAAM,CAAI,GAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AACzB,QAAA,MAAA,CAAO,MAAS,GAAA,CAAC,CAAI,GAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AACjC,QAAU,MAAA,IAAA,CAAA,CAAA;AAAA,OACd;AAAA,KACJ;AACA,IAAA,MAAA,CAAO,SAAS,GAAM,GAAA,MAAA,CAAA;AAEtB,IAAS,MAAA,GAAA,CAAA,CAAA;AAET,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,CAAI,GAAA,GAAA,EAAK,KAAK,CAClC,EAAA;AACI,MAAI,IAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACrB,MAAI,IAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACrB,MAAM,MAAA,EAAA,GAAK,OAAO,CAAC,CAAA,CAAA;AACnB,MAAM,MAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACvB,MAAI,IAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACrB,MAAI,IAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAErB,MAAM,EAAA,IAAA,EAAA,CAAA;AACN,MAAM,EAAA,IAAA,EAAA,CAAA;AACN,MAAM,EAAA,IAAA,EAAA,CAAA;AACN,MAAM,EAAA,IAAA,EAAA,CAAA;AACN,MAAA,IAAI,IAAO,GAAA,IAAA,CAAA;AAEX,MAAA,IAAI,KAAK,GAAK,CAAA,EAAA,GAAK,KAAO,EAAK,GAAA,EAAG,IAAI,IACtC,EAAA;AACI,QAAA,IAAK,EAAK,GAAA,EAAA,GAAO,EAAK,GAAA,EAAA,GAAM,CAAC,IAC7B,EAAA;AACI,UAAO,IAAA,GAAA,KAAA,CAAA;AAAA,SACX;AAAA,OACJ;AAEA,MAAA,IAAI,IACJ,EAAA;AACI,QAAO,MAAA,CAAA,MAAM,CAAI,GAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AACzB,QAAA,MAAA,CAAO,MAAS,GAAA,CAAC,CAAI,GAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AACjC,QAAU,MAAA,IAAA,CAAA,CAAA;AAAA,OACd;AAAA,KACJ;AACA,IAAA,MAAA,CAAO,MAAM,CAAA,GAAI,MAAO,CAAA,GAAA,GAAM,CAAC,CAAA,CAAA;AAC/B,IAAA,MAAA,CAAO,MAAS,GAAA,CAAC,CAAI,GAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AACnC,IAAU,MAAA,IAAA,CAAA,CAAA;AAEV,IAAA,MAAA,CAAO,SAAS,GAAM,GAAA,MAAA,CAAA;AAEtB,IAAA,IAAI,OAAO,CACX,EAAA;AAEI,MAAA,OAAA;AAAA,KACJ;AAEA,IAAA,IAAI,WACJ,EAAA;AAEI,MAAA,MAAM,UAAa,GAAA,IAAA,CAAK,GAAI,CAAA,UAAA,CAAW,IAAI,SAAU,CAAA,CAAC,CAAI,GAAA,GAAA,IACnD,KAAK,GAAI,CAAA,UAAA,CAAW,CAAI,GAAA,SAAA,CAAU,CAAC,CAAI,GAAA,GAAA,CAAA;AAE9C,MAAA,IAAI,UACJ,EAAA;AACI,QAAA,MAAA,CAAO,GAAI,EAAA,CAAA;AACX,QAAA,MAAA,CAAO,GAAI,EAAA,CAAA;AAAA,OACf;AAAA,KACJ;AAAA,GACJ;AAAA,EAEA,IAAA,CAAK,cAAkC,SACvC,EAAA;AACI,IAAM,MAAA,EAAE,WAAa,EAAA,MAAA,EAAW,GAAA,YAAA,CAAA;AAGhC,IAAA,MAAM,MAAM,MAAO,CAAA,MAAA,CAAA;AAGnB,IAAA,IAAI,OAAO,CACX,EAAA;AACI,MAAA,OAAA;AAAA,KACJ;AACA,IAAM,MAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,SAAA,CAAA;AAI1B,IAAM,MAAA,KAAA,GAAQ,aAAa,SAAU,EAAA,CAAA;AACrC,IAAM,MAAA,GAAA,GAAM,aAAa,OAAQ,EAAA,CAAA;AACjC,IAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AAEd,IAAI,IAAA,KAAA,CAAA;AAAe,IACf,IAAA,KAAA,CAAA;AAEJ,IAAA,IAAI,WACJ,EAAA;AACI,MAAQ,KAAA,GAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AACtB,MAAQ,KAAA,GAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AACtB,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAAA,KAG/B,MAAA;AACI,MAAA,KAAA,GAAQ,OAAO,CAAC,CAAA,CAAA;AAChB,MAAA,KAAA,GAAQ,OAAO,CAAC,CAAA,CAAA;AAChB,MAAI,IAAA,GAAA,KAAQ,WAAW,SACvB,EAAA;AACI,QAAA,KAAA,CAAM,KAAK,MAAO,CAAA,CAAC,CAAG,EAAA,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAC/B,QAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAC3B,QAAO,MAAA,CAAA,IAAA,CAAK,WAAW,SAAS,CAAA,CAAA;AAChC,QAAU,OAAA,GAAA,CAAA,CAAA;AAAA,OAGd,MAAA;AACI,QAAU,OAAA,GAAA,GAAA,CAAA;AACV,QAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAAA,OAC/B;AAAA,KACJ;AACA,IAAM,KAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AAGvB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,KAAK,CAC9B,EAAA;AACI,MAAM,MAAA,EAAA,GAAK,OAAO,CAAC,CAAA,CAAA;AAAG,MAClB,MAAA,EAAA,GAAK,MAAO,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAqBrB,MAAA,IAAI,QAAW,GAAA,KAAA,CAAA;AAEf,MAAI,IAAA,CAAA,GAAI,KAAK,GACb,EAAA;AAGI,QAAA,IAAI,CAAC,WACL,EAAA;AACI,UAAA,QAAA,GAAW,UAAW,CAAA,IAAA,CAAA;AAAA,SAC1B;AAAA,OACJ,MAAA,IACS,CAAI,GAAA,CAAA,IAAK,GAClB,EAAA;AAGI,QAAA,IAAI,CAAC,WACL,EAAA;AACI,UAAI,IAAA,GAAA,KAAQ,WAAW,SACvB,EAAA;AACI,YAAA,QAAA,GAAW,UAAW,CAAA,eAAA,CAAA;AAAA,WAC1B;AACA,UAAI,IAAA,GAAA,KAAQ,WAAW,QACvB,EAAA;AACI,YAAA,QAAA,GAAW,UAAW,CAAA,cAAA,CAAA;AAAA,WAC1B;AACA,UAAI,IAAA,GAAA,KAAQ,WAAW,UACvB,EAAA;AACI,YAAA,QAAA,GAAW,UAAW,CAAA,gBAAA,CAAA;AAAA,WAC1B;AAAA,SACJ;AAAA,OACJ;AAUA,MAAY,QAAA,IAAA,OAAA,CAAA;AACZ,MAAU,OAAA,GAAA,CAAA,CAAA;AAEV,MAAM,KAAA,CAAA,IAAA,CAAK,IAAI,EAAE,CAAA,CAAA;AACjB,MAAA,MAAA,CAAO,KAAK,QAAQ,CAAA,CAAA;AAEpB,MAAQ,KAAA,GAAA,EAAA,CAAA;AACR,MAAQ,KAAA,GAAA,EAAA,CAAA;AAAA,KACZ;AAEA,IAAA,IAAI,WACJ,EAAA;AACI,MAAA,KAAA,CAAM,KAAK,MAAO,CAAA,CAAC,CAAG,EAAA,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAC/B,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAC3B,MAAA,KAAA,CAAM,KAAK,MAAO,CAAA,CAAC,CAAG,EAAA,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAC/B,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAAA,KAG/B,MAAA;AACI,MAAM,KAAA,CAAA,IAAA,CAAK,OAAO,GAAM,GAAA,CAAC,GAAG,MAAO,CAAA,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA;AAC3C,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAAA,KAC/B;AAAA,GACJ;AAAA,EAEA,IAAA,CAAK,cAAkC,SACvC,EAAA;AACI,IAAA,IAAI,SAAS,YAAa,CAAA,MAAA,CAAA;AAE1B,IAAA,MAAM,QAAQ,YAAa,CAAA,KAAA,CAAA;AAC3B,IAAA,MAAM,MAAM,SAAU,CAAA,aAAA,CAAA;AAEtB,IAAM,MAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,SAAA,CAAA;AAE1B,IAAI,IAAA,MAAA,CAAO,SAAS,CACpB,EAAA;AACI,MAAA,OAAA;AAAA,KACJ;AACA,IAAA,MAAM,YAAY,EAAC,CAAA;AACnB,IAAA,IAAI,MAAM,MAAO,CAAA,MAAA,CAAA;AAEjB,IAAA,cAAA,CAAe,QAAQ,KAAK,CAAA,CAAA;AAG5B,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAClC,EAAA,EAAA;AACI,MAAM,MAAA,IAAA,GAAO,MAAM,CAAC,CAAA,CAAA;AAEpB,MAAe,cAAA,CAAA,IAAA,CAAK,QAAQ,IAAI,CAAA,CAAA;AAEhC,MAAU,SAAA,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAChC,MAAS,MAAA,GAAA,MAAA,CAAO,MAAO,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,KACtC;AAGA,IAAA,MAAM,EAAK,GAAA,OAAA,CAAA;AAEX,IAAI,IAAA,EAAA,CAAG,MAAS,GAAA,MAAA,CAAO,MACvB,EAAA;AACI,MAAA,EAAA,CAAG,SAAS,MAAO,CAAA,MAAA,CAAA;AAAA,KACvB;AACA,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAEZ,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAK,IAAA,SAAA,CAAU,QAAQ,CACvC,EAAA,EAAA;AACI,MAAA,IAAI,SAAS,GAAM,GAAA,CAAA,CAAA;AAEnB,MAAA,IAAI,IAAI,CACR,EAAA;AACI,QAAI,IAAA,CAAA,GAAI,UAAU,MAClB,EAAA;AACI,UAAA,MAAA,GAAS,UAAU,CAAC,CAAA,CAAA;AAAA,SAGxB,MAAA;AACI,UAAA,MAAA,GAAU,OAAO,MAAU,IAAA,CAAA,CAAA;AAAA,SAC/B;AAAA,OACJ;AACA,MAAG,EAAA,CAAA,KAAA,GAAQ,CAAC,CAAA,GAAI,MAAS,GAAA,CAAA,CAAA;AACzB,MAAA,EAAA,CAAA,CAAK,MAAS,GAAA,CAAA,IAAK,CAAK,GAAA,CAAC,CAAI,GAAA,KAAA,CAAA;AAC7B,MAAA,KAAA,IAAS,CAAI,GAAA,KAAA,EAAO,CAAI,GAAA,CAAA,GAAI,QAAQ,CACpC,EAAA,EAAA;AACI,QAAA,EAAA,CAAI,CAAI,GAAA,CAAA,GAAK,CAAC,CAAA,GAAI,CAAI,GAAA,CAAA,CAAA;AACtB,QAAI,EAAA,CAAA,CAAA,GAAI,CAAK,GAAA,CAAC,CAAI,GAAA,CAAA,CAAA;AAAA,OACtB;AACA,MAAQ,KAAA,GAAA,MAAA,CAAA;AAAA,KACZ;AAGA,IAAA,YAAA,CAAa,SAAY,GAAA,KAAA,CAAM,MAAO,CAAA,MAAA,EAAQ,WAAW,CAAC,CAAA,CAAA;AAE1D,IAAI,IAAA,CAAC,aAAa,SAClB,EAAA;AACI,MAAA,OAAA;AAAA,KACJ;AAEA,IAAI,IAAA,CAAC,aAAa,MAClB,EAAA;AACI,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAO,CAAA,MAAA,EAAQ,KAAK,CACxC,EAAA;AACI,QAAA,KAAA,CAAM,KAAK,MAAO,CAAA,CAAC,GAAG,MAAO,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AACnC,QAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAAA,OAC/B;AAEA,MAAA,OAAA;AAAA,KACJ;AAEA,IAAM,MAAA,EAAE,WAAc,GAAA,YAAA,CAAA;AAEtB,IAAA,GAAA,GAAM,MAAO,CAAA,MAAA,CAAA;AAEb,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,SAAU,CAAA,MAAA,EAAQ,KAAK,CAC3C,EAAA;AAEI,MAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AAEX,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CACvB,EAAA,EAAA;AACI,QAAM,MAAA,IAAA,GAAO,SAAU,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAC5B,QAAA,MAAM,IAAO,GAAA,SAAA,CAAU,CAAM,GAAA,CAAA,CAAA,GAAI,KAAK,CAAE,CAAA,CAAA;AAExC,QAAI,IAAA,EAAA,CAAG,IAAO,GAAA,CAAC,CAAM,KAAA,IAAA,IAAQ,GAAI,IAAO,GAAA,CAAA,GAAK,CAAC,CAAA,KAAM,IACpD,EAAA;AACI,UAAA,IAAA,IAAS,CAAK,IAAA,CAAA,CAAA;AAAA,SAClB;AAAA,OACJ;AACA,MAAO,MAAA,CAAA,IAAA,CAAK,UAAW,CAAA,WAAA,GAAc,IAAI,CAAA,CAAA;AACzC,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAC3B,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAC3B,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAC3B,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAC3B,MAAO,MAAA,CAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AAAA,KAC/B;AAGA,IAAA,KAAA,IAAS,GAAM,GAAA,CAAA,EAAG,GAAM,GAAA,GAAA,GAAM,GAAG,GACjC,EAAA,EAAA;AACI,MAAM,MAAA,IAAA,GAAO,EAAG,CAAA,GAAA,GAAM,CAAC,CAAA,CAAA;AACvB,MAAA,MAAM,IAAO,GAAA,EAAA,CAAI,GAAM,GAAA,CAAA,GAAK,CAAC,CAAA,CAAA;AAC7B,MAAI,IAAA,GAAA,GAAO,OAAQ,IAAO,GAAA,CAAA,GAAK,CAAC,CAAI,GAAA,MAAA,CAAQ,GAAM,GAAA,CAAA,GAAK,CAAC,CAAA,CAAA;AAAI,MACxD,IAAA,GAAA,GAAM,EAAE,MAAO,CAAA,IAAA,GAAO,CAAC,CAAI,GAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,CAAA;AAC7C,MAAI,IAAA,GAAA,GAAO,OAAQ,GAAM,GAAA,CAAA,GAAK,CAAC,CAAI,GAAA,MAAA,CAAQ,IAAO,GAAA,CAAA,GAAK,CAAC,CAAA,CAAA;AAAI,MACxD,IAAA,GAAA,GAAM,EAAE,MAAO,CAAA,GAAA,GAAM,CAAC,CAAI,GAAA,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA,CAAA;AAC7C,MAAA,MAAM,KAAK,IAAK,CAAA,IAAA,CAAM,GAAM,GAAA,GAAA,GAAQ,MAAM,GAAI,CAAA,CAAA;AAE9C,MAAO,GAAA,IAAA,EAAA,CAAA;AACP,MAAO,GAAA,IAAA,EAAA,CAAA;AACP,MAAA,MAAM,KAAK,IAAK,CAAA,IAAA,CAAM,GAAM,GAAA,GAAA,GAAQ,MAAM,GAAI,CAAA,CAAA;AAE9C,MAAO,GAAA,IAAA,EAAA,CAAA;AACP,MAAO,GAAA,IAAA,EAAA,CAAA;AAEP,MAAA,IAAI,KAAM,GAAM,GAAA,GAAA,CAAA;AAChB,MAAA,IAAI,KAAM,GAAM,GAAA,GAAA,CAAA;AAChB,MAAM,MAAA,CAAA,GAAK,EAAK,GAAA,GAAA,GAAQ,EAAK,GAAA,GAAA,CAAA;AAE7B,MAAA,IAAI,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAClB,EAAA;AACI,QAAK,EAAA,GAAA,GAAA,CAAA;AACL,QAAK,EAAA,GAAA,GAAA,CAAA;AAAA,OAGT,MAAA;AACI,QAAM,EAAA,IAAA,CAAA,CAAA;AACN,QAAM,EAAA,IAAA,CAAA,CAAA;AAAA,OACV;AACA,MAAG,EAAA,CAAA,GAAA,GAAM,CAAC,CAAI,GAAA,EAAA,CAAA;AACd,MAAI,EAAA,CAAA,GAAA,GAAM,CAAK,GAAA,CAAC,CAAI,GAAA,EAAA,CAAA;AAAA,KACxB;AAEA,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,SAAU,CAAA,MAAA,EAAQ,KAAK,CAC3C,EAAA;AACI,MAAM,MAAA,IAAA,GAAO,UAAU,CAAC,CAAA,CAAA;AACxB,MAAM,MAAA,GAAA,GAAM,SAAU,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAC3B,MAAM,MAAA,IAAA,GAAO,SAAU,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAC5B,MAAM,MAAA,GAAA,GAAO,OAAQ,IAAO,GAAA,CAAA,GAAK,CAAC,CAAI,GAAA,MAAA,CAAQ,GAAM,GAAA,CAAA,GAAK,CAAC,CAAA,CAAA;AAAI,MAC1D,MAAA,GAAA,GAAM,EAAE,MAAO,CAAA,IAAA,GAAO,CAAC,CAAI,GAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,CAAA;AAC7C,MAAM,MAAA,GAAA,GAAO,OAAQ,GAAM,GAAA,CAAA,GAAK,CAAC,CAAI,GAAA,MAAA,CAAQ,IAAO,GAAA,CAAA,GAAK,CAAC,CAAA,CAAA;AAAI,MAC1D,MAAA,GAAA,GAAM,EAAE,MAAO,CAAA,GAAA,GAAM,CAAC,CAAI,GAAA,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA,CAAA;AAE7C,MAAA,IAAI,EAAK,GAAA,CAAA,CAAA;AAET,MAAA,IAAK,GAAM,GAAA,GAAA,GAAQ,GAAM,GAAA,GAAA,GAAO,CAChC,EAAA;AACI,QAAK,EAAA,GAAA,CAAA,CAAA;AAAA,OACT;AAEA,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CACvB,EAAA,EAAA;AACI,QAAA,MAAMA,IAAM,GAAA,SAAA,CAAU,CAAM,GAAA,CAAA,GAAI,KAAM,CAAE,CAAA,CAAA;AAExC,QAAM,KAAA,CAAA,IAAA,CAAK,OAAOA,IAAM,GAAA,CAAC,GAAG,MAAQA,CAAAA,IAAAA,GAAM,CAAK,GAAA,CAAC,CAAC,CAAA,CAAA;AAAA,OACrD;AACA,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CACvB,EAAA,EAAA;AACI,QAAA,MAAMA,IAAM,GAAA,SAAA,CAAU,CAAM,GAAA,CAAA,GAAI,KAAM,CAAE,CAAA,CAAA;AAExC,QAAM,KAAA,CAAA,IAAA,CAAK,GAAGA,IAAM,GAAA,CAAC,GAAG,EAAIA,CAAAA,IAAAA,GAAM,CAAK,GAAA,CAAC,CAAC,CAAA,CAAA;AAAA,OAC7C;AAAA,KACJ;AAAA,GACJ;AACJ;;;;"}