{"version":3,"file":"MiniGl-COCu5Is1.js","sources":["../../app/javascript/entrypoints/views/welcome/gl/MiniGl.js"],"sourcesContent":[" //Essential functionality of WebGl\n //t = width\n //n = height\n class MiniGl {\n constructor(canvas, width, height, debug = false) {\n const _miniGl = this,\n debug_output = -1 !== document.location.search.toLowerCase().indexOf('debug=webgl')\n ;(_miniGl.canvas = canvas),\n (_miniGl.gl = _miniGl.canvas.getContext('webgl', {\n antialias: true\n })),\n (_miniGl.meshes = [])\n const context = _miniGl.gl\n width && height && this.setSize(width, height),\n _miniGl.lastDebugMsg,\n (_miniGl.debug =\n debug && debug_output\n ? function (e) {\n const t = new Date()\n t - _miniGl.lastDebugMsg > 1e3 && console.log('---'),\n console.log(\n t.toLocaleTimeString() + Array(Math.max(0, 32 - e.length)).join(' ') + e + ': ',\n ...Array.from(arguments).slice(1)\n ),\n (_miniGl.lastDebugMsg = t)\n }\n : () => {}),\n Object.defineProperties(_miniGl, {\n Material: {\n enumerable: false,\n value: class {\n constructor(vertexShaders, fragments, uniforms = {}) {\n const material = this\n function getShaderByType(type, source) {\n const shader = context.createShader(type)\n return (\n context.shaderSource(shader, source),\n context.compileShader(shader),\n context.getShaderParameter(shader, context.COMPILE_STATUS) || console.error(context.getShaderInfoLog(shader)),\n _miniGl.debug('Material.compileShaderSource', {\n source: source\n }),\n shader\n )\n }\n function getUniformVariableDeclarations(uniforms, type) {\n return Object.entries(uniforms)\n .map(([uniform, value]) => value.getDeclaration(uniform, type))\n .join('\\n')\n }\n ;(material.uniforms = uniforms), (material.uniformInstances = [])\n\n const prefix = '\\n precision highp float;\\n '\n ;(material.vertexSource = `\\n ${prefix}\\n attribute vec4 position;\\n attribute vec2 uv;\\n attribute vec2 uvNorm;\\n ${getUniformVariableDeclarations(\n _miniGl.commonUniforms,\n 'vertex'\n )}\\n ${getUniformVariableDeclarations(uniforms, 'vertex')}\\n ${vertexShaders}\\n `),\n (material.Source = `\\n ${prefix}\\n ${getUniformVariableDeclarations(\n _miniGl.commonUniforms,\n 'fragment'\n )}\\n ${getUniformVariableDeclarations(uniforms, 'fragment')}\\n ${fragments}\\n `),\n (material.vertexShader = getShaderByType(context.VERTEX_SHADER, material.vertexSource)),\n (material.fragmentShader = getShaderByType(context.FRAGMENT_SHADER, material.Source)),\n (material.program = context.createProgram()),\n context.attachShader(material.program, material.vertexShader),\n context.attachShader(material.program, material.fragmentShader),\n context.linkProgram(material.program),\n context.getProgramParameter(material.program, context.LINK_STATUS) ||\n console.error(context.getProgramInfoLog(material.program)),\n context.useProgram(material.program),\n material.attachUniforms(void 0, _miniGl.commonUniforms),\n material.attachUniforms(void 0, material.uniforms)\n }\n //t = uniform\n attachUniforms(name, uniforms) {\n //n = material\n const material = this\n void 0 === name\n ? Object.entries(uniforms).forEach(([name, uniform]) => {\n material.attachUniforms(name, uniform)\n })\n : 'array' == uniforms.type\n ? uniforms.value.forEach((uniform, i) => material.attachUniforms(`${name}[${i}]`, uniform))\n : 'struct' == uniforms.type\n ? Object.entries(uniforms.value).forEach(([uniform, i]) => material.attachUniforms(`${name}.${uniform}`, i))\n : (_miniGl.debug('Material.attachUniforms', {\n name: name,\n uniform: uniforms\n }),\n material.uniformInstances.push({\n uniform: uniforms,\n location: context.getUniformLocation(material.program, name)\n }))\n }\n }\n },\n Uniform: {\n enumerable: !1,\n value: class {\n constructor(e) {\n ;(this.type = 'float'), Object.assign(this, e)\n ;(this.typeFn =\n {\n float: '1f',\n int: '1i',\n vec2: '2fv',\n vec3: '3fv',\n vec4: '4fv',\n mat4: 'Matrix4fv'\n }[this.type] || '1f'),\n this.update()\n }\n update(value) {\n void 0 !== this.value &&\n context[`uniform${this.typeFn}`](\n value,\n 0 === this.typeFn.indexOf('Matrix') ? this.transpose : this.value,\n 0 === this.typeFn.indexOf('Matrix') ? this.value : null\n )\n }\n //e - name\n //t - type\n //n - length\n getDeclaration(name, type, length) {\n const uniform = this\n if (uniform.excludeFrom !== type) {\n if ('array' === uniform.type)\n return (\n uniform.value[0].getDeclaration(name, type, uniform.value.length) +\n `\\nconst int ${name}_length = ${uniform.value.length};`\n )\n if ('struct' === uniform.type) {\n let name_no_prefix = name.replace('u_', '')\n return (\n (name_no_prefix = name_no_prefix.charAt(0).toUpperCase() + name_no_prefix.slice(1)),\n `uniform struct ${name_no_prefix}\n {\\n` +\n Object.entries(uniform.value)\n .map(([name, uniform]) => uniform.getDeclaration(name, type).replace(/^uniform/, ''))\n .join('') +\n `\\n} ${name}${length > 0 ? `[${length}]` : ''};`\n )\n }\n return `uniform ${uniform.type} ${name}${length > 0 ? `[${length}]` : ''};`\n }\n }\n }\n },\n PlaneGeometry: {\n enumerable: !1,\n value: class {\n constructor(width, height, n, i, orientation) {\n context.createBuffer(),\n (this.attributes = {\n position: new _miniGl.Attribute({\n target: context.ARRAY_BUFFER,\n size: 3\n }),\n uv: new _miniGl.Attribute({\n target: context.ARRAY_BUFFER,\n size: 2\n }),\n uvNorm: new _miniGl.Attribute({\n target: context.ARRAY_BUFFER,\n size: 2\n }),\n index: new _miniGl.Attribute({\n target: context.ELEMENT_ARRAY_BUFFER,\n size: 3,\n type: context.UNSIGNED_SHORT\n })\n }),\n this.setTopology(n, i),\n this.setSize(width, height, orientation)\n }\n setTopology(e = 1, t = 1) {\n const n = this\n ;(n.xSegCount = e),\n (n.ySegCount = t),\n (n.vertexCount = (n.xSegCount + 1) * (n.ySegCount + 1)),\n (n.quadCount = n.xSegCount * n.ySegCount * 2),\n (n.attributes.uv.values = new Float32Array(2 * n.vertexCount)),\n (n.attributes.uvNorm.values = new Float32Array(2 * n.vertexCount)),\n (n.attributes.index.values = new Uint16Array(3 * n.quadCount))\n for (let e = 0; e <= n.ySegCount; e++)\n for (let t = 0; t <= n.xSegCount; t++) {\n const i = e * (n.xSegCount + 1) + t\n if (\n ((n.attributes.uv.values[2 * i] = t / n.xSegCount),\n (n.attributes.uv.values[2 * i + 1] = 1 - e / n.ySegCount),\n (n.attributes.uvNorm.values[2 * i] = (t / n.xSegCount) * 2 - 1),\n (n.attributes.uvNorm.values[2 * i + 1] = 1 - (e / n.ySegCount) * 2),\n t < n.xSegCount && e < n.ySegCount)\n ) {\n const s = e * n.xSegCount + t\n ;(n.attributes.index.values[6 * s] = i),\n (n.attributes.index.values[6 * s + 1] = i + 1 + n.xSegCount),\n (n.attributes.index.values[6 * s + 2] = i + 1),\n (n.attributes.index.values[6 * s + 3] = i + 1),\n (n.attributes.index.values[6 * s + 4] = i + 1 + n.xSegCount),\n (n.attributes.index.values[6 * s + 5] = i + 2 + n.xSegCount)\n }\n }\n n.attributes.uv.update(),\n n.attributes.uvNorm.update(),\n n.attributes.index.update(),\n _miniGl.debug('Geometry.setTopology', {\n uv: n.attributes.uv,\n uvNorm: n.attributes.uvNorm,\n index: n.attributes.index\n })\n }\n setSize(width = 1, height = 1, orientation = 'xz') {\n const geometry = this\n ;(geometry.width = width),\n (geometry.height = height),\n (geometry.orientation = orientation),\n (geometry.attributes.position.values && geometry.attributes.position.values.length === 3 * geometry.vertexCount) ||\n (geometry.attributes.position.values = new Float32Array(3 * geometry.vertexCount))\n const o = width / -2,\n r = height / -2,\n segment_width = width / geometry.xSegCount,\n segment_height = height / geometry.ySegCount\n for (let yIndex = 0; yIndex <= geometry.ySegCount; yIndex++) {\n const t = r + yIndex * segment_height\n for (let xIndex = 0; xIndex <= geometry.xSegCount; xIndex++) {\n const r = o + xIndex * segment_width,\n l = yIndex * (geometry.xSegCount + 1) + xIndex\n ;(geometry.attributes.position.values[3 * l + 'xyz'.indexOf(orientation[0])] = r),\n (geometry.attributes.position.values[3 * l + 'xyz'.indexOf(orientation[1])] = -t)\n }\n }\n geometry.attributes.position.update(),\n _miniGl.debug('Geometry.setSize', {\n position: geometry.attributes.position\n })\n }\n }\n },\n Mesh: {\n enumerable: !1,\n value: class {\n constructor(geometry, material) {\n const mesh = this\n ;(mesh.geometry = geometry),\n (mesh.material = material),\n (mesh.wireframe = !1),\n (mesh.attributeInstances = []),\n Object.entries(mesh.geometry.attributes).forEach(([e, attribute]) => {\n mesh.attributeInstances.push({\n attribute: attribute,\n location: attribute.attach(e, mesh.material.program)\n })\n }),\n _miniGl.meshes.push(mesh),\n _miniGl.debug('Mesh.constructor', {\n mesh: mesh\n })\n }\n draw() {\n context.useProgram(this.material.program),\n this.material.uniformInstances.forEach(({ uniform: e, location: t }) => e.update(t)),\n this.attributeInstances.forEach(({ attribute: e, location: t }) => e.use(t)),\n context.drawElements(\n this.wireframe ? context.LINES : context.TRIANGLES,\n this.geometry.attributes.index.values.length,\n context.UNSIGNED_SHORT,\n 0\n )\n }\n remove() {\n _miniGl.meshes = _miniGl.meshes.filter((e) => e != this)\n }\n }\n },\n Attribute: {\n enumerable: !1,\n value: class {\n constructor(e) {\n ;(this.type = context.FLOAT),\n (this.normalized = !1),\n (this.buffer = context.createBuffer()),\n Object.assign(this, e),\n this.update()\n }\n update() {\n void 0 !== this.values &&\n (context.bindBuffer(this.target, this.buffer), context.bufferData(this.target, this.values, context.STATIC_DRAW))\n }\n attach(e, t) {\n const n = context.getAttribLocation(t, e)\n return (\n this.target === context.ARRAY_BUFFER &&\n (context.enableVertexAttribArray(n), context.vertexAttribPointer(n, this.size, this.type, this.normalized, 0, 0)),\n n\n )\n }\n use(e) {\n context.bindBuffer(this.target, this.buffer),\n this.target === context.ARRAY_BUFFER &&\n (context.enableVertexAttribArray(e), context.vertexAttribPointer(e, this.size, this.type, this.normalized, 0, 0))\n }\n }\n }\n })\n const a = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]\n _miniGl.commonUniforms = {\n projectionMatrix: new _miniGl.Uniform({\n type: 'mat4',\n value: a\n }),\n modelViewMatrix: new _miniGl.Uniform({\n type: 'mat4',\n value: a\n }),\n resolution: new _miniGl.Uniform({\n type: 'vec2',\n value: [1, 1]\n }),\n aspectRatio: new _miniGl.Uniform({\n type: 'float',\n value: 1\n })\n }\n }\n setSize(e = 640, t = 480) {\n ;(this.width = e),\n (this.height = t),\n (this.canvas.width = e),\n (this.canvas.height = t),\n this.gl.viewport(0, 0, e, t),\n (this.commonUniforms.resolution.value = [e, t]),\n (this.commonUniforms.aspectRatio.value = e / t),\n this.debug('MiniGL.setSize', {\n width: e,\n height: t\n })\n }\n //left, right, top, bottom, near, far\n setOrthographicCamera(e = 0, t = 0, n = 0, i = -2e3, s = 2e3) {\n ;(this.commonUniforms.projectionMatrix.value = [2 / this.width, 0, 0, 0, 0, 2 / this.height, 0, 0, 0, 0, 2 / (i - s), 0, e, t, n, 1]),\n this.debug('setOrthographicCamera', this.commonUniforms.projectionMatrix.value)\n }\n render() {\n this.gl.clearColor(0, 0, 0, 0), this.gl.clearDepth(1), this.meshes.forEach((e) => e.draw())\n }\n }\n\n export default MiniGl\n"],"names":["MiniGl","canvas","width","height","debug","_miniGl","debug_output","context","e","t","vertexShaders","fragments","uniforms","material","getShaderByType","type","source","shader","getUniformVariableDeclarations","uniform","value","prefix","name","i","length","name_no_prefix","n","orientation","s","geometry","o","r","segment_width","segment_height","yIndex","xIndex","l","mesh","attribute","a"],"mappings":"AAGE,MAAMA,CAAO,CACX,YAAYC,EAAQC,EAAOC,EAAQC,EAAQ,GAAO,CAChD,MAAMC,EAAU,KACdC,EAAsB,SAAS,SAAS,OAAO,YAAW,EAAG,QAAQ,aAAa,IAAnE,GACfD,EAAQ,OAASJ,EAChBI,EAAQ,GAAKA,EAAQ,OAAO,WAAW,QAAS,CAC/C,UAAW,EACrB,CAAS,EACAA,EAAQ,OAAS,CAAE,EACtB,MAAME,EAAUF,EAAQ,GACxBH,GAASC,GAAU,KAAK,QAAQD,EAAOC,CAAM,EAC3CE,EAAQ,aACPA,EAAQ,MACPD,GAASE,EACL,SAAUE,EAAG,CACX,MAAMC,EAAI,IAAI,KACdA,EAAIJ,EAAQ,aAAe,KAAO,QAAQ,IAAI,KAAK,EACjD,QAAQ,IACNI,EAAE,mBAAkB,EAAK,MAAM,KAAK,IAAI,EAAG,GAAKD,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,EAAIA,EAAI,KAC3E,GAAG,MAAM,KAAK,SAAS,EAAE,MAAM,CAAC,CACjC,EACAH,EAAQ,aAAeI,CAC1C,EACc,IAAM,CAAE,EACd,OAAO,iBAAiBJ,EAAS,CAC/B,SAAU,CACR,WAAY,GACZ,MAAO,KAAM,CACX,YAAYK,EAAeC,EAAWC,EAAW,CAAA,EAAI,CACnD,MAAMC,EAAW,KACjB,SAASC,EAAgBC,EAAMC,EAAQ,CACrC,MAAMC,EAASV,EAAQ,aAAaQ,CAAI,EACxC,OACER,EAAQ,aAAaU,EAAQD,CAAM,EACnCT,EAAQ,cAAcU,CAAM,EAC5BV,EAAQ,mBAAmBU,EAAQV,EAAQ,cAAc,GAAK,QAAQ,MAAMA,EAAQ,iBAAiBU,CAAM,CAAC,EAC5GZ,EAAQ,MAAM,+BAAgC,CAC5C,OAAQW,CAC9B,CAAqB,EACDC,CAEpB,CACgB,SAASC,EAA+BN,EAAUG,EAAM,CACtD,OAAO,OAAO,QAAQH,CAAQ,EAC3B,IAAI,CAAC,CAACO,EAASC,CAAK,IAAMA,EAAM,eAAeD,EAASJ,CAAI,CAAC,EAC7D,KAAK;AAAA,CAAI,CAC9B,CACkBF,EAAS,SAAWD,EAAYC,EAAS,iBAAmB,CAAE,EAEhE,MAAMQ,EAAS;AAAA;AAAA,cACbR,EAAS,aAAe;AAAA,gBAAmBQ,CAAM;AAAA;AAAA;AAAA;AAAA,gBAAmIH,EACpLb,EAAQ,eACR,QAClB,CAAiB;AAAA,gBAAmBa,EAA+BN,EAAU,QAAQ,CAAC;AAAA,gBAAmBF,CAAa;AAAA,cACnGG,EAAS,OAAS;AAAA,gBAAmBQ,CAAM;AAAA,gBAAmBH,EAC7Db,EAAQ,eACR,UACpB,CAAmB;AAAA,gBAAmBa,EAA+BN,EAAU,UAAU,CAAC;AAAA,gBAAmBD,CAAS;AAAA,cACnGE,EAAS,aAAeC,EAAgBP,EAAQ,cAAeM,EAAS,YAAY,EACpFA,EAAS,eAAiBC,EAAgBP,EAAQ,gBAAiBM,EAAS,MAAM,EAClFA,EAAS,QAAUN,EAAQ,cAAe,EAC3CA,EAAQ,aAAaM,EAAS,QAASA,EAAS,YAAY,EAC5DN,EAAQ,aAAaM,EAAS,QAASA,EAAS,cAAc,EAC9DN,EAAQ,YAAYM,EAAS,OAAO,EACpCN,EAAQ,oBAAoBM,EAAS,QAASN,EAAQ,WAAW,GAC/D,QAAQ,MAAMA,EAAQ,kBAAkBM,EAAS,OAAO,CAAC,EAC3DN,EAAQ,WAAWM,EAAS,OAAO,EACnCA,EAAS,eAAe,OAAQR,EAAQ,cAAc,EACtDQ,EAAS,eAAe,OAAQA,EAAS,QAAQ,CACnE,CAEc,eAAeS,EAAMV,EAAU,CAE7B,MAAMC,EAAW,KACNS,IAAX,OACI,OAAO,QAAQV,CAAQ,EAAE,QAAQ,CAAC,CAACU,EAAMH,CAAO,IAAM,CACpDN,EAAS,eAAeS,EAAMH,CAAO,CACtC,CAAA,EACUP,EAAS,MAApB,QACAA,EAAS,MAAM,QAAQ,CAACO,EAASI,IAAMV,EAAS,eAAe,GAAGS,CAAI,IAAIC,CAAC,IAAKJ,CAAO,CAAC,EAC5EP,EAAS,MAArB,SACA,OAAO,QAAQA,EAAS,KAAK,EAAE,QAAQ,CAAC,CAACO,EAASI,CAAC,IAAMV,EAAS,eAAe,GAAGS,CAAI,IAAIH,CAAO,GAAII,CAAC,CAAC,GACxGlB,EAAQ,MAAM,0BAA2B,CACxC,KAAMiB,EACN,QAASV,CAC/B,CAAqB,EACDC,EAAS,iBAAiB,KAAK,CAC7B,QAASD,EACT,SAAUL,EAAQ,mBAAmBM,EAAS,QAASS,CAAI,CACjF,CAAqB,EACrB,CACA,CACW,EACD,QAAS,CACP,WAAY,GACZ,MAAO,KAAM,CACX,YAAYd,EAAG,CACX,KAAK,KAAO,QAAU,OAAO,OAAO,KAAMA,CAAC,EAC3C,KAAK,OACL,CACE,MAAO,KACP,IAAK,KACL,KAAM,MACN,KAAM,MACN,KAAM,MACN,KAAM,WAC1B,EAAoB,KAAK,IAAI,GAAK,KAChB,KAAK,OAAM,CAC7B,CACc,OAAOY,EAAO,CACD,KAAK,QAAhB,QACEb,EAAQ,UAAU,KAAK,MAAM,EAAE,EAC7Ba,EACM,KAAK,OAAO,QAAQ,QAAQ,IAAlC,EAAsC,KAAK,UAAY,KAAK,MACtD,KAAK,OAAO,QAAQ,QAAQ,IAAlC,EAAsC,KAAK,MAAQ,IACvE,CACA,CAIc,eAAeE,EAAMP,EAAMS,EAAQ,CACjC,MAAML,EAAU,KAChB,GAAIA,EAAQ,cAAgBJ,EAAM,CAChC,GAAgBI,EAAQ,OAApB,QACF,OACEA,EAAQ,MAAM,CAAC,EAAE,eAAeG,EAAMP,EAAMI,EAAQ,MAAM,MAAM,EAChE;AAAA,YAAeG,CAAI,aAAaH,EAAQ,MAAM,MAAM,IAExD,GAAiBA,EAAQ,OAArB,SAA2B,CAC7B,IAAIM,EAAiBH,EAAK,QAAQ,KAAM,EAAE,EAC1C,OACGG,EAAiBA,EAAe,OAAO,CAAC,EAAE,cAAgBA,EAAe,MAAM,CAAC,EACjF,kBAAkBA,CAAc;AAAA;AAAA,EAE9B,OAAO,QAAQN,EAAQ,KAAK,EACzB,IAAI,CAAC,CAACG,EAAMH,CAAO,IAAMA,EAAQ,eAAeG,EAAMP,CAAI,EAAE,QAAQ,WAAY,EAAE,CAAC,EACnF,KAAK,EAAE,EACV;AAAA,IAAOO,CAAI,GAAGE,EAAS,EAAI,IAAIA,CAAM,IAAM,EAAE,GAErE,CACkB,MAAO,WAAWL,EAAQ,IAAI,IAAIG,CAAI,GAAGE,EAAS,EAAI,IAAIA,CAAM,IAAM,EAAE,GAC1F,CACA,CACA,CACW,EACD,cAAe,CACb,WAAY,GACZ,MAAO,KAAM,CACX,YAAYtB,EAAOC,EAAQuB,EAAGH,EAAGI,EAAa,CAC5CpB,EAAQ,aAAc,EACnB,KAAK,WAAa,CACjB,SAAU,IAAIF,EAAQ,UAAU,CAC9B,OAAQE,EAAQ,aAChB,KAAM,CAC5B,CAAqB,EACD,GAAI,IAAIF,EAAQ,UAAU,CACxB,OAAQE,EAAQ,aAChB,KAAM,CAC5B,CAAqB,EACD,OAAQ,IAAIF,EAAQ,UAAU,CAC5B,OAAQE,EAAQ,aAChB,KAAM,CAC5B,CAAqB,EACD,MAAO,IAAIF,EAAQ,UAAU,CAC3B,OAAQE,EAAQ,qBAChB,KAAM,EACN,KAAMA,EAAQ,cACf,CAAA,CACF,EACD,KAAK,YAAYmB,EAAGH,CAAC,EACrB,KAAK,QAAQrB,EAAOC,EAAQwB,CAAW,CACzD,CACc,YAAYnB,EAAI,EAAGC,EAAI,EAAG,CACxB,MAAMiB,EAAI,KACRA,EAAE,UAAYlB,EACbkB,EAAE,UAAYjB,EACdiB,EAAE,aAAeA,EAAE,UAAY,IAAMA,EAAE,UAAY,GACnDA,EAAE,UAAYA,EAAE,UAAYA,EAAE,UAAY,EAC1CA,EAAE,WAAW,GAAG,OAAS,IAAI,aAAa,EAAIA,EAAE,WAAW,EAC3DA,EAAE,WAAW,OAAO,OAAS,IAAI,aAAa,EAAIA,EAAE,WAAW,EAC/DA,EAAE,WAAW,MAAM,OAAS,IAAI,YAAY,EAAIA,EAAE,SAAS,EAC9D,QAAS,EAAI,EAAG,GAAKA,EAAE,UAAW,IAChC,QAASjB,EAAI,EAAGA,GAAKiB,EAAE,UAAWjB,IAAK,CACrC,MAAMc,EAAI,GAAKG,EAAE,UAAY,GAAKjB,EAClC,GACIiB,EAAE,WAAW,GAAG,OAAO,EAAIH,CAAC,EAAId,EAAIiB,EAAE,UACvCA,EAAE,WAAW,GAAG,OAAO,EAAIH,EAAI,CAAC,EAAI,EAAI,EAAIG,EAAE,UAC9CA,EAAE,WAAW,OAAO,OAAO,EAAIH,CAAC,EAAKd,EAAIiB,EAAE,UAAa,EAAI,EAC5DA,EAAE,WAAW,OAAO,OAAO,EAAIH,EAAI,CAAC,EAAI,EAAK,EAAIG,EAAE,UAAa,EACjEjB,EAAIiB,EAAE,WAAa,EAAIA,EAAE,UACzB,CACA,MAAME,EAAI,EAAIF,EAAE,UAAYjB,EAC1BiB,EAAE,WAAW,MAAM,OAAO,EAAIE,CAAC,EAAIL,EAClCG,EAAE,WAAW,MAAM,OAAO,EAAIE,EAAI,CAAC,EAAIL,EAAI,EAAIG,EAAE,UACjDA,EAAE,WAAW,MAAM,OAAO,EAAIE,EAAI,CAAC,EAAIL,EAAI,EAC3CG,EAAE,WAAW,MAAM,OAAO,EAAIE,EAAI,CAAC,EAAIL,EAAI,EAC3CG,EAAE,WAAW,MAAM,OAAO,EAAIE,EAAI,CAAC,EAAIL,EAAI,EAAIG,EAAE,UACjDA,EAAE,WAAW,MAAM,OAAO,EAAIE,EAAI,CAAC,EAAIL,EAAI,EAAIG,EAAE,SAC1E,CACA,CACgBA,EAAE,WAAW,GAAG,OAAQ,EACtBA,EAAE,WAAW,OAAO,OAAQ,EAC5BA,EAAE,WAAW,MAAM,OAAQ,EAC3BrB,EAAQ,MAAM,uBAAwB,CACpC,GAAIqB,EAAE,WAAW,GACjB,OAAQA,EAAE,WAAW,OACrB,MAAOA,EAAE,WAAW,KACrB,CAAA,CACnB,CACc,QAAQxB,EAAQ,EAAGC,EAAS,EAAGwB,EAAc,KAAM,CACjD,MAAME,EAAW,KACfA,EAAS,MAAQ3B,EAChB2B,EAAS,OAAS1B,EAClB0B,EAAS,YAAcF,EACvBE,EAAS,WAAW,SAAS,QAAUA,EAAS,WAAW,SAAS,OAAO,SAAW,EAAIA,EAAS,cACjGA,EAAS,WAAW,SAAS,OAAS,IAAI,aAAa,EAAIA,EAAS,WAAW,GACpF,MAAMC,EAAI5B,EAAQ,GAChB6B,EAAI5B,EAAS,GACb6B,EAAgB9B,EAAQ2B,EAAS,UACjCI,EAAiB9B,EAAS0B,EAAS,UACrC,QAASK,EAAS,EAAGA,GAAUL,EAAS,UAAWK,IAAU,CAC3D,MAAMzB,EAAIsB,EAAIG,EAASD,EACvB,QAASE,EAAS,EAAGA,GAAUN,EAAS,UAAWM,IAAU,CAC3D,MAAMJ,EAAID,EAAIK,EAASH,EACrBI,EAAIF,GAAUL,EAAS,UAAY,GAAKM,EACxCN,EAAS,WAAW,SAAS,OAAO,EAAIO,EAAI,MAAM,QAAQT,EAAY,CAAC,CAAC,CAAC,EAAII,EAC5EF,EAAS,WAAW,SAAS,OAAO,EAAIO,EAAI,MAAM,QAAQT,EAAY,CAAC,CAAC,CAAC,EAAI,CAAClB,CACrG,CACA,CACgBoB,EAAS,WAAW,SAAS,OAAQ,EACnCxB,EAAQ,MAAM,mBAAoB,CAChC,SAAUwB,EAAS,WAAW,QAC/B,CAAA,CACnB,CACA,CACW,EACD,KAAM,CACJ,WAAY,GACZ,MAAO,KAAM,CACX,YAAYA,EAAUhB,EAAU,CAC9B,MAAMwB,EAAO,KACXA,EAAK,SAAWR,EACfQ,EAAK,SAAWxB,EAChBwB,EAAK,UAAY,GACjBA,EAAK,mBAAqB,CAAE,EAC7B,OAAO,QAAQA,EAAK,SAAS,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAGC,CAAS,IAAM,CACnED,EAAK,mBAAmB,KAAK,CAC3B,UAAWC,EACX,SAAUA,EAAU,OAAO,EAAGD,EAAK,SAAS,OAAO,CACpD,CAAA,CACrB,CAAmB,EACDhC,EAAQ,OAAO,KAAKgC,CAAI,EACxBhC,EAAQ,MAAM,mBAAoB,CAChC,KAAMgC,CACP,CAAA,CACnB,CACc,MAAO,CACL9B,EAAQ,WAAW,KAAK,SAAS,OAAO,EACtC,KAAK,SAAS,iBAAiB,QAAQ,CAAC,CAAE,QAASC,EAAG,SAAUC,CAAG,IAAKD,EAAE,OAAOC,CAAC,CAAC,EACnF,KAAK,mBAAmB,QAAQ,CAAC,CAAE,UAAWD,EAAG,SAAUC,CAAC,IAAOD,EAAE,IAAIC,CAAC,CAAC,EAC3EF,EAAQ,aACN,KAAK,UAAYA,EAAQ,MAAQA,EAAQ,UACzC,KAAK,SAAS,WAAW,MAAM,OAAO,OACtCA,EAAQ,eACR,CACpB,CACA,CACc,QAAS,CACPF,EAAQ,OAASA,EAAQ,OAAO,OAAQG,GAAMA,GAAK,IAAI,CACvE,CACA,CACW,EACD,UAAW,CACT,WAAY,GACZ,MAAO,KAAM,CACX,YAAYA,EAAG,CACX,KAAK,KAAOD,EAAQ,MACnB,KAAK,WAAa,GAClB,KAAK,OAASA,EAAQ,aAAc,EACrC,OAAO,OAAO,KAAMC,CAAC,EACrB,KAAK,OAAM,CAC7B,CACc,QAAS,CACI,KAAK,SAAhB,SACGD,EAAQ,WAAW,KAAK,OAAQ,KAAK,MAAM,EAAGA,EAAQ,WAAW,KAAK,OAAQ,KAAK,OAAQA,EAAQ,WAAW,EACjI,CACc,OAAOC,EAAGC,EAAG,CACX,MAAMiB,EAAInB,EAAQ,kBAAkBE,EAAGD,CAAC,EACxC,OACE,KAAK,SAAWD,EAAQ,eACrBA,EAAQ,wBAAwBmB,CAAC,EAAGnB,EAAQ,oBAAoBmB,EAAG,KAAK,KAAM,KAAK,KAAM,KAAK,WAAY,EAAG,CAAC,GACjHA,CAElB,CACc,IAAIlB,EAAG,CACLD,EAAQ,WAAW,KAAK,OAAQ,KAAK,MAAM,EACzC,KAAK,SAAWA,EAAQ,eACrBA,EAAQ,wBAAwBC,CAAC,EAAGD,EAAQ,oBAAoBC,EAAG,KAAK,KAAM,KAAK,KAAM,KAAK,WAAY,EAAG,CAAC,EACnI,CACA,CACA,CACS,CAAA,EACH,MAAM+B,EAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACzDlC,EAAQ,eAAiB,CACvB,iBAAkB,IAAIA,EAAQ,QAAQ,CACpC,KAAM,OACN,MAAOkC,CACjB,CAAS,EACD,gBAAiB,IAAIlC,EAAQ,QAAQ,CACnC,KAAM,OACN,MAAOkC,CACjB,CAAS,EACD,WAAY,IAAIlC,EAAQ,QAAQ,CAC9B,KAAM,OACN,MAAO,CAAC,EAAG,CAAC,CACtB,CAAS,EACD,YAAa,IAAIA,EAAQ,QAAQ,CAC/B,KAAM,QACN,MAAO,CACR,CAAA,CACT,CACA,CACI,QAAQG,EAAI,IAAKC,EAAI,IAAK,CACtB,KAAK,MAAQD,EACZ,KAAK,OAASC,EACd,KAAK,OAAO,MAAQD,EACpB,KAAK,OAAO,OAASC,EACtB,KAAK,GAAG,SAAS,EAAG,EAAGD,EAAGC,CAAC,EAC1B,KAAK,eAAe,WAAW,MAAQ,CAACD,EAAGC,CAAC,EAC5C,KAAK,eAAe,YAAY,MAAQD,EAAIC,EAC7C,KAAK,MAAM,iBAAkB,CAC3B,MAAOD,EACP,OAAQC,CACT,CAAA,CACT,CAEI,sBAAsBD,EAAI,EAAGC,EAAI,EAAGiB,EAAI,EAAGH,EAAI,KAAMK,EAAI,IAAK,CAC1D,KAAK,eAAe,iBAAiB,MAAQ,CAAC,EAAI,KAAK,MAAO,EAAG,EAAG,EAAG,EAAG,EAAI,KAAK,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAKL,EAAIK,GAAI,EAAGpB,EAAGC,EAAGiB,EAAG,CAAC,EACjI,KAAK,MAAM,wBAAyB,KAAK,eAAe,iBAAiB,KAAK,CACtF,CACI,QAAS,CACP,KAAK,GAAG,WAAW,EAAG,EAAG,EAAG,CAAC,EAAG,KAAK,GAAG,WAAW,CAAC,EAAG,KAAK,OAAO,QAASlB,GAAMA,EAAE,KAAM,CAAA,CAChG,CACA"}