Changeset - ef3cde3e81e8
[Not reviewed]
default
0 9 3
drewp@bigasterisk.com - 9 months ago 2024-05-16 22:03:50
drewp@bigasterisk.com
switch collector output from json to avro (still over WS)
12 files changed with 997 insertions and 50 deletions:
0 comments (0 inline, 0 general)
avro/CollectorUpdate.avsc
Show inline comments
 
new file 100644
 
{
 
    "namespace": "light9",
 
    "type": "record",
 
    "name": "CollectorUpdate",
 
    "fields": [
 
        {
 
            "name": "OutputAttrsSet",
 
            "type": {
 
                "type": "record",
 
                "name": "_OutputAttrsSetValue",
 
                "fields": [
 
                    { "name": "dev", "type": "string" },
 
                    {
 
                        "name": "attrs",
 
                        "type": {
 
                            "type": "array",
 
                            "items": {
 
                                "type": "record",
 
                                "name": "Attribute",
 
                                "fields": [
 
                                    { "name": "attr", "type": "string" },
 
                                    { "name": "val", "type": "int" },
 
                                    { "name": "chan", "type": "string" }
 
                                ]
 
                            }
 
                        }
 
                    }
 
                ]
 
            }
 
        }
 
    ]
 
}
 
\ No newline at end of file
package.json
Show inline comments
 
@@ -20,12 +20,13 @@
 
    "@types/fpsmeter": "^0.3.34",
 
    "@types/n3": "^1.16.4",
 
    "@types/node": "^20.12.11",
 
    "@types/reconnectingwebsocket": "^1.0.10",
 
    "@types/underscore": "^1.11.15",
 
    "async": "^3.2.5",
 
    "avro-js": "^1.11.3",
 
    "d3": "^7.9.0",
 
    "debug": "^4.3.4",
 
    "flexlayout-react": "^0.7.15",
 
    "fpsmeter": "^0.3.1",
 
    "immutable": "^4.3.5",
 
    "knockout": "^3.5.1",
 
@@ -43,9 +44,10 @@
 
    "vite": "^4.5.3",
 
    "vite-plugin-rewrite-all": "^1.0.2",
 
    "vitest": "^0.31.4"
 
  },
 
  "devDependencies": {
 
    "@types/react": "^18.3.2",
 
    "@types/react-dom": "^18.3.0"
 
    "@types/react-dom": "^18.3.0",
 
    "vite-plugin-node-polyfills": "^0.21.0"
 
  }
 
}
pdm.lock
Show inline comments
 
@@ -2,13 +2,13 @@
 
# It is not intended for manual editing.
 

	
 
[metadata]
 
groups = ["default", "dev"]
 
strategy = ["cross_platform", "inherit_metadata"]
 
lock_version = "4.4.1"
 
content_hash = "sha256:d3ae9f6966068cc41ec2f3189399535df27dceba40835b5e2614a57c8cb48f7e"
 
content_hash = "sha256:5393d5c679935ba9f042f2b4f4d6efd58dbf03519b2e9f25e08f1e9d421e52f1"
 

	
 
[[package]]
 
name = "aiohttp"
 
version = "3.9.5"
 
requires_python = ">=3.8"
 
summary = "Async http client/server framework (asyncio)"
 
@@ -162,12 +162,22 @@ dependencies = [
 
files = [
 
    {file = "Automat-22.10.0-py2.py3-none-any.whl", hash = "sha256:c3164f8742b9dc440f3682482d32aaff7bb53f71740dd018533f9de286b64180"},
 
    {file = "Automat-22.10.0.tar.gz", hash = "sha256:e56beb84edad19dcc11d30e8d9b895f75deeb5ef5e96b84a467066b3b84bb04e"},
 
]
 

	
 
[[package]]
 
name = "avro"
 
version = "1.11.3"
 
requires_python = ">=3.6"
 
summary = "Avro is a serialization and RPC framework."
 
groups = ["default"]
 
files = [
 
    {file = "avro-1.11.3.tar.gz", hash = "sha256:3393bb5139f9cf0791d205756ce1e39a5b58586af5b153d6a3b5a199610e9d17"},
 
]
 

	
 
[[package]]
 
name = "braillegraph"
 
version = "0.6"
 
summary = "A library for creating graphs using Unicode braille characters"
 
groups = ["default"]
 
files = [
 
    {file = "braillegraph-0.6.tar.gz", hash = "sha256:dd5656c371c4a60734013222b9ff9dbf4c27105090e66e5ef64cde1f6708d636"},
 
@@ -426,12 +436,34 @@ groups = ["default", "dev"]
 
files = [
 
    {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"},
 
    {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"},
 
]
 

	
 
[[package]]
 
name = "fastavro"
 
version = "1.9.4"
 
requires_python = ">=3.8"
 
summary = "Fast read/write of AVRO files"
 
groups = ["default"]
 
files = [
 
    {file = "fastavro-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:af8c6d8c43a02b5569c093fc5467469541ac408c79c36a5b0900d3dd0b3ba838"},
 
    {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a138710bd61580324d23bc5e3df01f0b82aee0a76404d5dddae73d9e4c723f"},
 
    {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:903d97418120ca6b6a7f38a731166c1ccc2c4344ee5e0470d09eb1dc3687540a"},
 
    {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c443eeb99899d062dbf78c525e4614dd77e041a7688fa2710c224f4033f193ae"},
 
    {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ac26ab0774d1b2b7af6d8f4300ad20bbc4b5469e658a02931ad13ce23635152f"},
 
    {file = "fastavro-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:cf7247874c22be856ba7d1f46a0f6e0379a6025f1a48a7da640444cbac6f570b"},
 
    {file = "fastavro-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:68912f2020e1b3d70557260b27dd85fb49a4fc6bfab18d384926127452c1da4c"},
 
    {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6925ce137cdd78e109abdb0bc33aad55de6c9f2d2d3036b65453128f2f5f5b92"},
 
    {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b928cd294e36e35516d0deb9e104b45be922ba06940794260a4e5dbed6c192a"},
 
    {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:90c9838bc4c991ffff5dd9d88a0cc0030f938b3fdf038cdf6babde144b920246"},
 
    {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:eca6e54da571b06a3c5a72dbb7212073f56c92a6fbfbf847b91c347510f8a426"},
 
    {file = "fastavro-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4b02839ac261100cefca2e2ad04cdfedc556cb66b5ec735e0db428e74b399de"},
 
    {file = "fastavro-1.9.4.tar.gz", hash = "sha256:56b8363e360a1256c94562393dc7f8611f3baf2b3159f64fb2b9c6b87b14e876"},
 
]
 

	
 
[[package]]
 
name = "flake8"
 
version = "7.0.0"
 
requires_python = ">=3.8.1"
 
summary = "the modular source code checker: pep8 pyflakes and co"
 
groups = ["dev"]
 
dependencies = [
 
@@ -2200,12 +2232,36 @@ dependencies = [
 
files = [
 
    {file = "yapf-0.40.2-py3-none-any.whl", hash = "sha256:adc8b5dd02c0143108878c499284205adb258aad6db6634e5b869e7ee2bd548b"},
 
    {file = "yapf-0.40.2.tar.gz", hash = "sha256:4dab8a5ed7134e26d57c1647c7483afb3f136878b579062b786c9ba16b94637b"},
 
]
 

	
 
[[package]]
 
name = "yappi"
 
version = "1.6.0"
 
requires_python = ">=3.6"
 
summary = "Yet Another Python Profiler"
 
groups = ["default"]
 
files = [
 
    {file = "yappi-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e9bc33b8ec9bce8b2575a4c3878b3cd223d08eb728669924699e5ac937e7b515"},
 
    {file = "yappi-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1cb70d46827a137350fb84b8fddecd7acec0a11834c763209875788b738f873"},
 
    {file = "yappi-1.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2cefe387bc747afcf0b26c9548e242113e17fac3de2674d900e97eb58a328f6"},
 
    {file = "yappi-1.6.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:acfbf4c80b6ee0513ad35a6e4a1f633aa2f93357517f9701aed6ad8cd56544d4"},
 
    {file = "yappi-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e4959c1dcfb6da8441d05915bfbb9c697e9f11655568f65b87c341e543bd65d5"},
 
    {file = "yappi-1.6.0-cp311-cp311-win32.whl", hash = "sha256:88dee431bba79866692f444110695133181efb2a6969ab63752f4424787f79c8"},
 
    {file = "yappi-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:8ddbe1475964f145b028f8bf120a58903d8f6c7bdd1be0a16c1471ba2d8646ca"},
 
    {file = "yappi-1.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1ba7d12c18bc0d092463ad126a95a1b2b8c261c47b0e3bd4cb2fd7479469141c"},
 
    {file = "yappi-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb5bbb4c6b996736554cb8f41e7fb6d5ee6096b7c4f54112cce8cf953a92c0a4"},
 
    {file = "yappi-1.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c12da5f310d81779056566259fef644a9c14ac1ec9a2b1b8a3fc62beb4ca6980"},
 
    {file = "yappi-1.6.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:677d992c41b239441eee399ac39ea7601010ddb5acb92bf997de7589f9ee2cc1"},
 
    {file = "yappi-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d58e60aac43041d109f0931917204ef02ac01004b9579fe173f2847fbc69655b"},
 
    {file = "yappi-1.6.0-cp312-cp312-win32.whl", hash = "sha256:a6797f189b7b89154d6c7c53ac769a22f0adb7bd88ea5b8f6c65106a286afad6"},
 
    {file = "yappi-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:cdaa263ba667aac9bf7bdc0d96fd10e2761a287f01fe87dc136f064ab7696af3"},
 
    {file = "yappi-1.6.0.tar.gz", hash = "sha256:a9aaf72009d8c03067294151ee0470ac7a6dfa7b33baab40b198d6c1ef00430a"},
 
]
 

	
 
[[package]]
 
name = "yarl"
 
version = "1.9.4"
 
requires_python = ">=3.7"
 
summary = "Yet another URL library"
 
groups = ["default", "dev"]
 
dependencies = [
pnpm-lock.yaml
Show inline comments
 
@@ -44,12 +44,18 @@ dependencies:
 
  '@types/underscore':
 
    specifier: ^1.11.15
 
    version: 1.11.15
 
  async:
 
    specifier: ^3.2.5
 
    version: 3.2.5
 
  avro-js:
 
    specifier: ^1.11.3
 
    version: 1.11.3
 
  avsc:
 
    specifier: ^5.7.7
 
    version: 5.7.7
 
  d3:
 
    specifier: ^7.9.0
 
    version: 7.9.0
 
  debug:
 
    specifier: ^4.3.4
 
    version: 4.3.4
 
@@ -112,216 +118,196 @@ devDependencies:
 
  '@types/react':
 
    specifier: ^18.3.2
 
    version: 18.3.2
 
  '@types/react-dom':
 
    specifier: ^18.3.0
 
    version: 18.3.0
 
  vite-plugin-node-polyfills:
 
    specifier: ^0.21.0
 
    version: 0.21.0(vite@4.5.3)
 

	
 
packages:
 

	
 
  /@esbuild/android-arm64@0.18.20:
 
    resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
 
    engines: {node: '>=12'}
 
    cpu: [arm64]
 
    os: [android]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/android-arm@0.18.20:
 
    resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
 
    engines: {node: '>=12'}
 
    cpu: [arm]
 
    os: [android]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/android-x64@0.18.20:
 
    resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
 
    engines: {node: '>=12'}
 
    cpu: [x64]
 
    os: [android]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/darwin-arm64@0.18.20:
 
    resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
 
    engines: {node: '>=12'}
 
    cpu: [arm64]
 
    os: [darwin]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/darwin-x64@0.18.20:
 
    resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
 
    engines: {node: '>=12'}
 
    cpu: [x64]
 
    os: [darwin]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/freebsd-arm64@0.18.20:
 
    resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
 
    engines: {node: '>=12'}
 
    cpu: [arm64]
 
    os: [freebsd]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/freebsd-x64@0.18.20:
 
    resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
 
    engines: {node: '>=12'}
 
    cpu: [x64]
 
    os: [freebsd]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-arm64@0.18.20:
 
    resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
 
    engines: {node: '>=12'}
 
    cpu: [arm64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-arm@0.18.20:
 
    resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
 
    engines: {node: '>=12'}
 
    cpu: [arm]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-ia32@0.18.20:
 
    resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
 
    engines: {node: '>=12'}
 
    cpu: [ia32]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-loong64@0.18.20:
 
    resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
 
    engines: {node: '>=12'}
 
    cpu: [loong64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-mips64el@0.18.20:
 
    resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
 
    engines: {node: '>=12'}
 
    cpu: [mips64el]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-ppc64@0.18.20:
 
    resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
 
    engines: {node: '>=12'}
 
    cpu: [ppc64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-riscv64@0.18.20:
 
    resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
 
    engines: {node: '>=12'}
 
    cpu: [riscv64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-s390x@0.18.20:
 
    resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
 
    engines: {node: '>=12'}
 
    cpu: [s390x]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/linux-x64@0.18.20:
 
    resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
 
    engines: {node: '>=12'}
 
    cpu: [x64]
 
    os: [linux]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/netbsd-x64@0.18.20:
 
    resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
 
    engines: {node: '>=12'}
 
    cpu: [x64]
 
    os: [netbsd]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/openbsd-x64@0.18.20:
 
    resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
 
    engines: {node: '>=12'}
 
    cpu: [x64]
 
    os: [openbsd]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/sunos-x64@0.18.20:
 
    resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
 
    engines: {node: '>=12'}
 
    cpu: [x64]
 
    os: [sunos]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/win32-arm64@0.18.20:
 
    resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
 
    engines: {node: '>=12'}
 
    cpu: [arm64]
 
    os: [win32]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/win32-ia32@0.18.20:
 
    resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
 
    engines: {node: '>=12'}
 
    cpu: [ia32]
 
    os: [win32]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/win32-x64@0.18.20:
 
    resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
 
    engines: {node: '>=12'}
 
    cpu: [x64]
 
    os: [win32]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@jridgewell/sourcemap-codec@1.4.15:
 
    resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
 
    dev: false
 

	
 
  /@lit-labs/ssr-dom-shim@1.2.0:
 
    resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==}
 
    dev: false
 

	
 
  /@lit/reactive-element@1.6.3:
 
@@ -707,12 +693,40 @@ packages:
 
  /@rdfjs/types@1.1.0:
 
    resolution: {integrity: sha512-5zm8bN2/CC634dTcn/0AhTRLaQRjXDZs3QfcAsQKNturHT7XVWcKy/8p3P5gXl+YkZTAmy7T5M/LyiT/jbkENw==}
 
    dependencies:
 
      '@types/node': 20.12.11
 
    dev: false
 

	
 
  /@rollup/plugin-inject@5.0.5:
 
    resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
 
    engines: {node: '>=14.0.0'}
 
    peerDependencies:
 
      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
 
    peerDependenciesMeta:
 
      rollup:
 
        optional: true
 
    dependencies:
 
      '@rollup/pluginutils': 5.1.0
 
      estree-walker: 2.0.2
 
      magic-string: 0.30.10
 
    dev: true
 

	
 
  /@rollup/pluginutils@5.1.0:
 
    resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
 
    engines: {node: '>=14.0.0'}
 
    peerDependencies:
 
      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
 
    peerDependenciesMeta:
 
      rollup:
 
        optional: true
 
    dependencies:
 
      '@types/estree': 1.0.5
 
      estree-walker: 2.0.2
 
      picomatch: 2.3.1
 
    dev: true
 

	
 
  /@types/async@3.2.24:
 
    resolution: {integrity: sha512-8iHVLHsCCOBKjCF2KwFe0p9Z3rfM9mL+sSP8btyR5vTjJRAqpBYD28/ZLgXPf0pjG1VxOvtCV/BgXkQbpSe8Hw==}
 
    dev: false
 

	
 
  /@types/chai-subset@1.3.5:
 
    resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==}
 
@@ -906,12 +920,16 @@ packages:
 
  /@types/debug@4.1.12:
 
    resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
 
    dependencies:
 
      '@types/ms': 0.7.34
 
    dev: false
 

	
 
  /@types/estree@1.0.5:
 
    resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
 
    dev: true
 

	
 
  /@types/fpsmeter@0.3.34:
 
    resolution: {integrity: sha512-ja3G1z7zkL0SUIH8fkhrSuOrayqiaocbLd4uZ8rTTbLLZy8wCdLx4E1ygOtJy/K5133VyXaU4r0Tr1js7edshA==}
 
    dev: false
 

	
 
  /@types/geojson@7946.0.14:
 
    resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==}
 
@@ -929,13 +947,12 @@ packages:
 
    dev: false
 

	
 
  /@types/node@20.12.11:
 
    resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
 
    dependencies:
 
      undici-types: 5.26.5
 
    dev: false
 

	
 
  /@types/prop-types@15.7.12:
 
    resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
 
    dev: true
 

	
 
  /@types/react-dom@18.3.0:
 
@@ -1027,44 +1044,180 @@ packages:
 

	
 
  /ansi-styles@5.2.0:
 
    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
 
    engines: {node: '>=10'}
 
    dev: false
 

	
 
  /asn1.js@4.10.1:
 
    resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      inherits: 2.0.4
 
      minimalistic-assert: 1.0.1
 
    dev: true
 

	
 
  /assert@2.1.0:
 
    resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
 
    dependencies:
 
      call-bind: 1.0.7
 
      is-nan: 1.3.2
 
      object-is: 1.1.6
 
      object.assign: 4.1.5
 
      util: 0.12.5
 
    dev: true
 

	
 
  /assertion-error@1.1.0:
 
    resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
 
    dev: false
 

	
 
  /async@3.2.5:
 
    resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==}
 
    dev: false
 

	
 
  /available-typed-arrays@1.0.7:
 
    resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      possible-typed-array-names: 1.0.0
 
    dev: true
 

	
 
  /avro-js@1.11.3:
 
    resolution: {integrity: sha512-B1b0wI5iwSkVwj3RQWRzW99/LGoYl6df9j1kWime8r8b0dXCdKU7t7mEOFkOpQFaT/I9JXaL7KAIxM+/3TUk1A==}
 
    dependencies:
 
      underscore: 1.13.6
 
    dev: false
 

	
 
  /avsc@5.7.7:
 
    resolution: {integrity: sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==}
 
    engines: {node: '>=0.11'}
 
    dev: false
 

	
 
  /base64-js@1.5.1:
 
    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
 
    dev: false
 

	
 
  /blocking-elements@0.1.1:
 
    resolution: {integrity: sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==}
 
    dev: false
 

	
 
  /blueimp-md5@2.19.0:
 
    resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==}
 
    dev: false
 

	
 
  /bn.js@4.12.0:
 
    resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
 
    dev: true
 

	
 
  /bn.js@5.2.1:
 
    resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
 
    dev: true
 

	
 
  /brorand@1.1.0:
 
    resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
 
    dev: true
 

	
 
  /browser-resolve@2.0.0:
 
    resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==}
 
    dependencies:
 
      resolve: 1.22.8
 
    dev: true
 

	
 
  /browserify-aes@1.2.0:
 
    resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
 
    dependencies:
 
      buffer-xor: 1.0.3
 
      cipher-base: 1.0.4
 
      create-hash: 1.2.0
 
      evp_bytestokey: 1.0.3
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /browserify-cipher@1.0.1:
 
    resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
 
    dependencies:
 
      browserify-aes: 1.2.0
 
      browserify-des: 1.0.2
 
      evp_bytestokey: 1.0.3
 
    dev: true
 

	
 
  /browserify-des@1.0.2:
 
    resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
 
    dependencies:
 
      cipher-base: 1.0.4
 
      des.js: 1.1.0
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /browserify-rsa@4.1.0:
 
    resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==}
 
    dependencies:
 
      bn.js: 5.2.1
 
      randombytes: 2.1.0
 
    dev: true
 

	
 
  /browserify-sign@4.2.3:
 
    resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==}
 
    engines: {node: '>= 0.12'}
 
    dependencies:
 
      bn.js: 5.2.1
 
      browserify-rsa: 4.1.0
 
      create-hash: 1.2.0
 
      create-hmac: 1.1.7
 
      elliptic: 6.5.5
 
      hash-base: 3.0.4
 
      inherits: 2.0.4
 
      parse-asn1: 5.1.7
 
      readable-stream: 2.3.8
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /browserify-zlib@0.2.0:
 
    resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
 
    dependencies:
 
      pako: 1.0.11
 
    dev: true
 

	
 
  /buffer-xor@1.0.3:
 
    resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
 
    dev: true
 

	
 
  /buffer@5.7.1:
 
    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
 
    dependencies:
 
      base64-js: 1.5.1
 
      ieee754: 1.2.1
 
    dev: true
 

	
 
  /buffer@6.0.3:
 
    resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
 
    dependencies:
 
      base64-js: 1.5.1
 
      ieee754: 1.2.1
 
    dev: false
 

	
 
  /builtin-status-codes@3.0.0:
 
    resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
 
    dev: true
 

	
 
  /cac@6.7.14:
 
    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
 
    engines: {node: '>=8'}
 
    dev: false
 

	
 
  /call-bind@1.0.7:
 
    resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      es-define-property: 1.0.0
 
      es-errors: 1.3.0
 
      function-bind: 1.1.2
 
      get-intrinsic: 1.2.4
 
      set-function-length: 1.2.2
 
    dev: true
 

	
 
  /chai@4.4.1:
 
    resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
 
    engines: {node: '>=4'}
 
    dependencies:
 
      assertion-error: 1.1.0
 
      check-error: 1.0.3
 
@@ -1078,12 +1231,19 @@ packages:
 
  /check-error@1.0.3:
 
    resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
 
    dependencies:
 
      get-func-name: 2.0.2
 
    dev: false
 

	
 
  /cipher-base@1.0.4:
 
    resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
 
    dependencies:
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /commander@7.2.0:
 
    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
 
    engines: {node: '>= 10'}
 
    dev: false
 

	
 
  /concordance@5.0.4:
 
@@ -1106,12 +1266,72 @@ packages:
 

	
 
  /connect-history-api-fallback@1.6.0:
 
    resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==}
 
    engines: {node: '>=0.8'}
 
    dev: false
 

	
 
  /console-browserify@1.2.0:
 
    resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
 
    dev: true
 

	
 
  /constants-browserify@1.0.0:
 
    resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
 
    dev: true
 

	
 
  /core-util-is@1.0.3:
 
    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
 
    dev: true
 

	
 
  /create-ecdh@4.0.4:
 
    resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      elliptic: 6.5.5
 
    dev: true
 

	
 
  /create-hash@1.2.0:
 
    resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
 
    dependencies:
 
      cipher-base: 1.0.4
 
      inherits: 2.0.4
 
      md5.js: 1.3.5
 
      ripemd160: 2.0.2
 
      sha.js: 2.4.11
 
    dev: true
 

	
 
  /create-hmac@1.1.7:
 
    resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
 
    dependencies:
 
      cipher-base: 1.0.4
 
      create-hash: 1.2.0
 
      inherits: 2.0.4
 
      ripemd160: 2.0.2
 
      safe-buffer: 5.2.1
 
      sha.js: 2.4.11
 
    dev: true
 

	
 
  /create-require@1.1.1:
 
    resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
 
    dev: true
 

	
 
  /crypto-browserify@3.12.0:
 
    resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==}
 
    dependencies:
 
      browserify-cipher: 1.0.1
 
      browserify-sign: 4.2.3
 
      create-ecdh: 4.0.4
 
      create-hash: 1.2.0
 
      create-hmac: 1.1.7
 
      diffie-hellman: 5.0.3
 
      inherits: 2.0.4
 
      pbkdf2: 3.1.2
 
      public-encrypt: 4.0.3
 
      randombytes: 2.1.0
 
      randomfill: 1.0.4
 
    dev: true
 

	
 
  /csstype@3.1.3:
 
    resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
 
    dev: true
 

	
 
  /d3-array@3.2.4:
 
    resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
 
@@ -1384,18 +1604,80 @@ packages:
 
    resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
 
    engines: {node: '>=6'}
 
    dependencies:
 
      type-detect: 4.0.8
 
    dev: false
 

	
 
  /define-data-property@1.1.4:
 
    resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      es-define-property: 1.0.0
 
      es-errors: 1.3.0
 
      gopd: 1.0.1
 
    dev: true
 

	
 
  /define-properties@1.2.1:
 
    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      define-data-property: 1.1.4
 
      has-property-descriptors: 1.0.2
 
      object-keys: 1.1.1
 
    dev: true
 

	
 
  /delaunator@5.0.1:
 
    resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
 
    dependencies:
 
      robust-predicates: 3.0.2
 
    dev: false
 

	
 
  /des.js@1.1.0:
 
    resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==}
 
    dependencies:
 
      inherits: 2.0.4
 
      minimalistic-assert: 1.0.1
 
    dev: true
 

	
 
  /diffie-hellman@5.0.3:
 
    resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      miller-rabin: 4.0.1
 
      randombytes: 2.1.0
 
    dev: true
 

	
 
  /domain-browser@4.23.0:
 
    resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==}
 
    engines: {node: '>=10'}
 
    dev: true
 

	
 
  /elliptic@6.5.5:
 
    resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      brorand: 1.1.0
 
      hash.js: 1.1.7
 
      hmac-drbg: 1.0.1
 
      inherits: 2.0.4
 
      minimalistic-assert: 1.0.1
 
      minimalistic-crypto-utils: 1.0.1
 
    dev: true
 

	
 
  /es-define-property@1.0.0:
 
    resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      get-intrinsic: 1.2.4
 
    dev: true
 

	
 
  /es-errors@1.3.0:
 
    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /esbuild@0.18.20:
 
    resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
 
    engines: {node: '>=12'}
 
    hasBin: true
 
    requiresBuild: true
 
    optionalDependencies:
 
@@ -1418,13 +1700,16 @@ packages:
 
      '@esbuild/netbsd-x64': 0.18.20
 
      '@esbuild/openbsd-x64': 0.18.20
 
      '@esbuild/sunos-x64': 0.18.20
 
      '@esbuild/win32-arm64': 0.18.20
 
      '@esbuild/win32-ia32': 0.18.20
 
      '@esbuild/win32-x64': 0.18.20
 
    dev: false
 

	
 
  /estree-walker@2.0.2:
 
    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
 
    dev: true
 

	
 
  /esutils@2.0.3:
 
    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
 
    engines: {node: '>=0.10.0'}
 
    dev: false
 

	
 
@@ -1433,68 +1718,227 @@ packages:
 
    engines: {node: '>=6'}
 
    dev: false
 

	
 
  /events@3.3.0:
 
    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
 
    engines: {node: '>=0.8.x'}
 
    dev: false
 

	
 
  /evp_bytestokey@1.0.3:
 
    resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
 
    dependencies:
 
      md5.js: 1.3.5
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /exenv-es6@1.1.1:
 
    resolution: {integrity: sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==}
 
    dev: false
 

	
 
  /fast-diff@1.3.0:
 
    resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
 
    dev: false
 

	
 
  /find-up@5.0.0:
 
    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      locate-path: 6.0.0
 
      path-exists: 4.0.0
 
    dev: true
 

	
 
  /flexlayout-react@0.7.15(react-dom@18.3.1)(react@18.3.1):
 
    resolution: {integrity: sha512-ydTMdEoQO5BniylxVkSxa59rEY0+96lqqRII+QK+yq6028eHywPuxZawt4g45y5pMb9ptP4N9HPAQXAFsxwowQ==}
 
    peerDependencies:
 
      react: ^18.0.0
 
      react-dom: ^18.0.0
 
    dependencies:
 
      react: 18.3.1
 
      react-dom: 18.3.1(react@18.3.1)
 
    dev: false
 

	
 
  /for-each@0.3.3:
 
    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
 
    dependencies:
 
      is-callable: 1.2.7
 
    dev: true
 

	
 
  /fpsmeter@0.3.1:
 
    resolution: {integrity: sha512-i3zzNJwGkA+9WWIXpAtP0TCN64eO5VkKQgirYE7ZCVqyC3NfUPszU35R044fmSCjiMqefiBs5NiGKvD7lFJ87Q==}
 
    dev: false
 

	
 
  /fsevents@2.3.3:
 
    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
 
    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
 
    os: [darwin]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /function-bind@1.1.2:
 
    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
 
    dev: true
 

	
 
  /get-func-name@2.0.2:
 
    resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
 
    dev: false
 

	
 
  /get-intrinsic@1.2.4:
 
    resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      es-errors: 1.3.0
 
      function-bind: 1.1.2
 
      has-proto: 1.0.3
 
      has-symbols: 1.0.3
 
      hasown: 2.0.2
 
    dev: true
 

	
 
  /gopd@1.0.1:
 
    resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
 
    dependencies:
 
      get-intrinsic: 1.2.4
 
    dev: true
 

	
 
  /has-property-descriptors@1.0.2:
 
    resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
 
    dependencies:
 
      es-define-property: 1.0.0
 
    dev: true
 

	
 
  /has-proto@1.0.3:
 
    resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /has-symbols@1.0.3:
 
    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /has-tostringtag@1.0.2:
 
    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      has-symbols: 1.0.3
 
    dev: true
 

	
 
  /hash-base@3.0.4:
 
    resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==}
 
    engines: {node: '>=4'}
 
    dependencies:
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /hash-base@3.1.0:
 
    resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
 
    engines: {node: '>=4'}
 
    dependencies:
 
      inherits: 2.0.4
 
      readable-stream: 3.6.2
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /hash.js@1.1.7:
 
    resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
 
    dependencies:
 
      inherits: 2.0.4
 
      minimalistic-assert: 1.0.1
 
    dev: true
 

	
 
  /hasown@2.0.2:
 
    resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      function-bind: 1.1.2
 
    dev: true
 

	
 
  /hmac-drbg@1.0.1:
 
    resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
 
    dependencies:
 
      hash.js: 1.1.7
 
      minimalistic-assert: 1.0.1
 
      minimalistic-crypto-utils: 1.0.1
 
    dev: true
 

	
 
  /https-browserify@1.0.0:
 
    resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==}
 
    dev: true
 

	
 
  /iconv-lite@0.6.3:
 
    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      safer-buffer: 2.1.2
 
    dev: false
 

	
 
  /ieee754@1.2.1:
 
    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
 
    dev: false
 

	
 
  /immutable@4.3.5:
 
    resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==}
 
    dev: false
 

	
 
  /inherits@2.0.4:
 
    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
 
    dev: true
 

	
 
  /internmap@2.0.3:
 
    resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
 
    engines: {node: '>=12'}
 
    dev: false
 

	
 
  /is-arguments@1.1.1:
 
    resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      has-tostringtag: 1.0.2
 
    dev: true
 

	
 
  /is-callable@1.2.7:
 
    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /is-core-module@2.13.1:
 
    resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
 
    dependencies:
 
      hasown: 2.0.2
 
    dev: true
 

	
 
  /is-generator-function@1.0.10:
 
    resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      has-tostringtag: 1.0.2
 
    dev: true
 

	
 
  /is-nan@1.3.2:
 
    resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      define-properties: 1.2.1
 
    dev: true
 

	
 
  /is-typed-array@1.1.13:
 
    resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      which-typed-array: 1.1.15
 
    dev: true
 

	
 
  /isarray@1.0.0:
 
    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
 
    dev: true
 

	
 
  /isomorphic-timers-promises@1.0.1:
 
    resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==}
 
    engines: {node: '>=10'}
 
    dev: true
 

	
 
  /js-string-escape@1.0.1:
 
    resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
 
    engines: {node: '>= 0.8'}
 
    dev: false
 

	
 
  /js-tokens@4.0.0:
 
@@ -1529,12 +1973,19 @@ packages:
 

	
 
  /local-pkg@0.4.3:
 
    resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
 
    engines: {node: '>=14'}
 
    dev: false
 

	
 
  /locate-path@6.0.0:
 
    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      p-locate: 5.0.0
 
    dev: true
 

	
 
  /lodash@4.17.21:
 
    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
    dev: false
 

	
 
  /loose-envify@1.4.0:
 
    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
 
@@ -1550,21 +2001,44 @@ packages:
 
    dev: false
 

	
 
  /magic-string@0.30.10:
 
    resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
 
    dependencies:
 
      '@jridgewell/sourcemap-codec': 1.4.15
 
    dev: false
 

	
 
  /md5-hex@3.0.1:
 
    resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==}
 
    engines: {node: '>=8'}
 
    dependencies:
 
      blueimp-md5: 2.19.0
 
    dev: false
 

	
 
  /md5.js@1.3.5:
 
    resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
 
    dependencies:
 
      hash-base: 3.1.0
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /miller-rabin@4.0.1:
 
    resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
 
    hasBin: true
 
    dependencies:
 
      bn.js: 4.12.0
 
      brorand: 1.1.0
 
    dev: true
 

	
 
  /minimalistic-assert@1.0.1:
 
    resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
 
    dev: true
 

	
 
  /minimalistic-crypto-utils@1.0.1:
 
    resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
 
    dev: true
 

	
 
  /mlly@1.7.0:
 
    resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==}
 
    dependencies:
 
      acorn: 8.11.3
 
      pathe: 1.1.2
 
      pkg-types: 1.1.1
 
@@ -1584,79 +2058,254 @@ packages:
 
    dev: false
 

	
 
  /nanoid@3.3.7:
 
    resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
 
    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
 
    hasBin: true
 
    dev: false
 

	
 
  /node-stdlib-browser@1.2.0:
 
    resolution: {integrity: sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      assert: 2.1.0
 
      browser-resolve: 2.0.0
 
      browserify-zlib: 0.2.0
 
      buffer: 5.7.1
 
      console-browserify: 1.2.0
 
      constants-browserify: 1.0.0
 
      create-require: 1.1.1
 
      crypto-browserify: 3.12.0
 
      domain-browser: 4.23.0
 
      events: 3.3.0
 
      https-browserify: 1.0.0
 
      isomorphic-timers-promises: 1.0.1
 
      os-browserify: 0.3.0
 
      path-browserify: 1.0.1
 
      pkg-dir: 5.0.0
 
      process: 0.11.10
 
      punycode: 1.4.1
 
      querystring-es3: 0.2.1
 
      readable-stream: 3.6.2
 
      stream-browserify: 3.0.0
 
      stream-http: 3.2.0
 
      string_decoder: 1.3.0
 
      timers-browserify: 2.0.12
 
      tty-browserify: 0.0.1
 
      url: 0.11.3
 
      util: 0.12.5
 
      vm-browserify: 1.1.2
 
    dev: true
 

	
 
  /object-inspect@1.13.1:
 
    resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
 
    dev: true
 

	
 
  /object-is@1.1.6:
 
    resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      define-properties: 1.2.1
 
    dev: true
 

	
 
  /object-keys@1.1.1:
 
    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /object.assign@4.1.5:
 
    resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      define-properties: 1.2.1
 
      has-symbols: 1.0.3
 
      object-keys: 1.1.1
 
    dev: true
 

	
 
  /onecolor@4.1.0:
 
    resolution: {integrity: sha512-kDUtnWdWlt5iWx85wrGZxMh8tB4058Bk1YyVpb+Zjl+2wLH/OvqIacbchJma0gjGXocwUTueLwMDVYKrbI+0zA==}
 
    engines: {node: '>=0.4.8'}
 
    dev: false
 

	
 
  /os-browserify@0.3.0:
 
    resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
 
    dev: true
 

	
 
  /p-limit@3.1.0:
 
    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      yocto-queue: 0.1.0
 
    dev: true
 

	
 
  /p-limit@4.0.0:
 
    resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
 
    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
    dependencies:
 
      yocto-queue: 1.0.0
 
    dev: false
 

	
 
  /p-locate@5.0.0:
 
    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      p-limit: 3.1.0
 
    dev: true
 

	
 
  /pako@1.0.11:
 
    resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
 
    dev: true
 

	
 
  /parse-asn1@5.1.7:
 
    resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==}
 
    engines: {node: '>= 0.10'}
 
    dependencies:
 
      asn1.js: 4.10.1
 
      browserify-aes: 1.2.0
 
      evp_bytestokey: 1.0.3
 
      hash-base: 3.0.4
 
      pbkdf2: 3.1.2
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /parse-prometheus-text-format@1.1.1:
 
    resolution: {integrity: sha512-dBlhYVACjRdSqLMFe4/Q1l/Gd3UmXm8ruvsTi7J6ul3ih45AkzkVpI5XHV4aZ37juGZW5+3dGU5lwk+QLM9XJA==}
 
    dependencies:
 
      shallow-equal: 1.2.1
 
    dev: false
 

	
 
  /path-browserify@1.0.1:
 
    resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
 
    dev: true
 

	
 
  /path-exists@4.0.0:
 
    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
 
    engines: {node: '>=8'}
 
    dev: true
 

	
 
  /path-parse@1.0.7:
 
    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
 
    dev: true
 

	
 
  /pathe@1.1.2:
 
    resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
 
    dev: false
 

	
 
  /pathval@1.1.1:
 
    resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
 
    dev: false
 

	
 
  /pbkdf2@3.1.2:
 
    resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
 
    engines: {node: '>=0.12'}
 
    dependencies:
 
      create-hash: 1.2.0
 
      create-hmac: 1.1.7
 
      ripemd160: 2.0.2
 
      safe-buffer: 5.2.1
 
      sha.js: 2.4.11
 
    dev: true
 

	
 
  /picocolors@1.0.0:
 
    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
 
    dev: false
 

	
 
  /picomatch@2.3.1:
 
    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
 
    engines: {node: '>=8.6'}
 
    dev: true
 

	
 
  /pkg-dir@5.0.0:
 
    resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      find-up: 5.0.0
 
    dev: true
 

	
 
  /pkg-types@1.1.1:
 
    resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==}
 
    dependencies:
 
      confbox: 0.1.7
 
      mlly: 1.7.0
 
      pathe: 1.1.2
 
    dev: false
 

	
 
  /possible-typed-array-names@1.0.0:
 
    resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /postcss@8.4.38:
 
    resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
 
    engines: {node: ^10 || ^12 || >=14}
 
    dependencies:
 
      nanoid: 3.3.7
 
      picocolors: 1.0.0
 
      source-map-js: 1.2.0
 
    dev: false
 

	
 
  /pretty-format@27.5.1:
 
    resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
 
    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
 
    dependencies:
 
      ansi-regex: 5.0.1
 
      ansi-styles: 5.2.0
 
      react-is: 17.0.2
 
    dev: false
 

	
 
  /process-nextick-args@2.0.1:
 
    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
 
    dev: true
 

	
 
  /process@0.11.10:
 
    resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
 
    engines: {node: '>= 0.6.0'}
 
    dev: false
 

	
 
  /public-encrypt@4.0.3:
 
    resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
 
    dependencies:
 
      bn.js: 4.12.0
 
      browserify-rsa: 4.1.0
 
      create-hash: 1.2.0
 
      parse-asn1: 5.1.7
 
      randombytes: 2.1.0
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /punycode@1.4.1:
 
    resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
 
    dev: true
 

	
 
  /qs@6.12.1:
 
    resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==}
 
    engines: {node: '>=0.6'}
 
    dependencies:
 
      side-channel: 1.0.6
 
    dev: true
 

	
 
  /querystring-es3@0.2.1:
 
    resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==}
 
    engines: {node: '>=0.4.x'}
 
    dev: true
 

	
 
  /queue-microtask@1.2.3:
 
    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 
    dev: false
 

	
 
  /randombytes@2.1.0:
 
    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
 
    dependencies:
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /randomfill@1.0.4:
 
    resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
 
    dependencies:
 
      randombytes: 2.1.0
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /react-dom@18.3.1(react@18.3.1):
 
    resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
 
    peerDependencies:
 
      react: ^18.3.1
 
    dependencies:
 
      loose-envify: 1.4.0
 
@@ -1672,12 +2321,33 @@ packages:
 
    resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      loose-envify: 1.4.0
 
    dev: false
 

	
 
  /readable-stream@2.3.8:
 
    resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
 
    dependencies:
 
      core-util-is: 1.0.3
 
      inherits: 2.0.4
 
      isarray: 1.0.0
 
      process-nextick-args: 2.0.1
 
      safe-buffer: 5.1.2
 
      string_decoder: 1.1.1
 
      util-deprecate: 1.0.2
 
    dev: true
 

	
 
  /readable-stream@3.6.2:
 
    resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
 
    engines: {node: '>= 6'}
 
    dependencies:
 
      inherits: 2.0.4
 
      string_decoder: 1.3.0
 
      util-deprecate: 1.0.2
 
    dev: true
 

	
 
  /readable-stream@4.5.2:
 
    resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==}
 
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
    dependencies:
 
      abort-controller: 3.0.0
 
      buffer: 6.0.3
 
@@ -1687,31 +2357,49 @@ packages:
 
    dev: false
 

	
 
  /reconnectingwebsocket@1.0.0:
 
    resolution: {integrity: sha512-r7H/dwkkfBu9x5eMGIt8td5WLqNbqy675x8Xg0+SoXaUS3xzniVlmfO7t7HSYmN/ZGzYjOKa9G2W4xCgCo7Zlg==}
 
    dev: false
 

	
 
  /resolve@1.22.8:
 
    resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
 
    hasBin: true
 
    dependencies:
 
      is-core-module: 2.13.1
 
      path-parse: 1.0.7
 
      supports-preserve-symlinks-flag: 1.0.0
 
    dev: true
 

	
 
  /ripemd160@2.0.2:
 
    resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
 
    dependencies:
 
      hash-base: 3.1.0
 
      inherits: 2.0.4
 
    dev: true
 

	
 
  /robust-predicates@3.0.2:
 
    resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
 
    dev: false
 

	
 
  /rollup@3.29.4:
 
    resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
 
    engines: {node: '>=14.18.0', npm: '>=8.0.0'}
 
    hasBin: true
 
    optionalDependencies:
 
      fsevents: 2.3.3
 
    dev: false
 

	
 
  /rw@1.3.3:
 
    resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
 
    dev: false
 

	
 
  /safe-buffer@5.1.2:
 
    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
 
    dev: true
 

	
 
  /safe-buffer@5.2.1:
 
    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
 
    dev: false
 

	
 
  /safer-buffer@2.1.2:
 
    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 
    dev: false
 

	
 
  /scheduler@0.23.2:
 
@@ -1723,50 +2411,109 @@ packages:
 
  /semver@7.6.2:
 
    resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
 
    engines: {node: '>=10'}
 
    hasBin: true
 
    dev: false
 

	
 
  /set-function-length@1.2.2:
 
    resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      define-data-property: 1.1.4
 
      es-errors: 1.3.0
 
      function-bind: 1.1.2
 
      get-intrinsic: 1.2.4
 
      gopd: 1.0.1
 
      has-property-descriptors: 1.0.2
 
    dev: true
 

	
 
  /setimmediate@1.0.5:
 
    resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
 
    dev: true
 

	
 
  /sha.js@2.4.11:
 
    resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
 
    hasBin: true
 
    dependencies:
 
      inherits: 2.0.4
 
      safe-buffer: 5.2.1
 
    dev: true
 

	
 
  /shallow-equal@1.2.1:
 
    resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
 
    dev: false
 

	
 
  /side-channel@1.0.6:
 
    resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      call-bind: 1.0.7
 
      es-errors: 1.3.0
 
      get-intrinsic: 1.2.4
 
      object-inspect: 1.13.1
 
    dev: true
 

	
 
  /siginfo@2.0.0:
 
    resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
 
    dev: false
 

	
 
  /source-map-js@1.2.0:
 
    resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
 
    engines: {node: '>=0.10.0'}
 
    dev: false
 

	
 
  /stackback@0.0.2:
 
    resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
 
    dev: false
 

	
 
  /std-env@3.7.0:
 
    resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
 
    dev: false
 

	
 
  /stream-browserify@3.0.0:
 
    resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
 
    dependencies:
 
      inherits: 2.0.4
 
      readable-stream: 3.6.2
 
    dev: true
 

	
 
  /stream-http@3.2.0:
 
    resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==}
 
    dependencies:
 
      builtin-status-codes: 3.0.0
 
      inherits: 2.0.4
 
      readable-stream: 3.6.2
 
      xtend: 4.0.2
 
    dev: true
 

	
 
  /string_decoder@1.1.1:
 
    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
 
    dependencies:
 
      safe-buffer: 5.1.2
 
    dev: true
 

	
 
  /string_decoder@1.3.0:
 
    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
 
    dependencies:
 
      safe-buffer: 5.2.1
 
    dev: false
 

	
 
  /strip-literal@1.3.0:
 
    resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
 
    dependencies:
 
      acorn: 8.11.3
 
    dev: false
 

	
 
  /sub-events@1.9.0:
 
    resolution: {integrity: sha512-dnFBayilG9Ku0k/lNs1Y7WV4kv91+ovCoeBV3uIYrY49DylvBb6z9d9ED2ctcrvX2YlReFalpCgJNtSgmrOaJg==}
 
    engines: {node: '>=10.0.0'}
 
    dev: false
 

	
 
  /supports-preserve-symlinks-flag@1.0.0:
 
    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
 
    engines: {node: '>= 0.4'}
 
    dev: true
 

	
 
  /sylvester@0.0.21:
 
    resolution: {integrity: sha512-yUT0ukFkFEt4nb+NY+n2ag51aS/u9UHXoZw+A4jgD77/jzZsBoSDHuqysrVCBC4CYR4TYvUJq54ONpXgDBH8tA==}
 
    engines: {node: '>=0.2.6'}
 
    dev: false
 

	
 
  /tabbable@5.3.3:
 
@@ -1775,12 +2522,19 @@ packages:
 

	
 
  /time-zone@1.0.0:
 
    resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==}
 
    engines: {node: '>=4'}
 
    dev: false
 

	
 
  /timers-browserify@2.0.12:
 
    resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==}
 
    engines: {node: '>=0.6.0'}
 
    dependencies:
 
      setimmediate: 1.0.5
 
    dev: true
 

	
 
  /tinybench@2.8.0:
 
    resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==}
 
    dev: false
 

	
 
  /tinypool@0.5.0:
 
    resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==}
 
@@ -1797,12 +2551,16 @@ packages:
 
    dev: false
 

	
 
  /tslib@2.6.2:
 
    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
 
    dev: false
 

	
 
  /tty-browserify@0.0.1:
 
    resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==}
 
    dev: true
 

	
 
  /type-detect@4.0.8:
 
    resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
 
    engines: {node: '>=4'}
 
    dev: false
 

	
 
  /typescript@5.4.5:
 
@@ -1818,13 +2576,33 @@ packages:
 
  /underscore@1.13.6:
 
    resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==}
 
    dev: false
 

	
 
  /undici-types@5.26.5:
 
    resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
 
    dev: false
 

	
 
  /url@0.11.3:
 
    resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==}
 
    dependencies:
 
      punycode: 1.4.1
 
      qs: 6.12.1
 
    dev: true
 

	
 
  /util-deprecate@1.0.2:
 
    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 
    dev: true
 

	
 
  /util@0.12.5:
 
    resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
 
    dependencies:
 
      inherits: 2.0.4
 
      is-arguments: 1.1.1
 
      is-generator-function: 1.0.10
 
      is-typed-array: 1.1.13
 
      which-typed-array: 1.1.15
 
    dev: true
 

	
 
  /vite-node@0.31.4(@types/node@20.12.11):
 
    resolution: {integrity: sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ==}
 
    engines: {node: '>=v14.18.0'}
 
    hasBin: true
 
    dependencies:
 
@@ -1842,12 +2620,24 @@ packages:
 
      - stylus
 
      - sugarss
 
      - supports-color
 
      - terser
 
    dev: false
 

	
 
  /vite-plugin-node-polyfills@0.21.0(vite@4.5.3):
 
    resolution: {integrity: sha512-Sk4DiKnmxN8E0vhgEhzLudfJQfaT8k4/gJ25xvUPG54KjLJ6HAmDKbr4rzDD/QWEY+Lwg80KE85fGYBQihEPQA==}
 
    peerDependencies:
 
      vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
 
    dependencies:
 
      '@rollup/plugin-inject': 5.0.5
 
      node-stdlib-browser: 1.2.0
 
      vite: 4.5.3(@types/node@20.12.11)
 
    transitivePeerDependencies:
 
      - rollup
 
    dev: true
 

	
 
  /vite-plugin-rewrite-all@1.0.2(vite@4.5.3):
 
    resolution: {integrity: sha512-NpiFyHi9w8iHm3kZ28ma/IU16LFCkNJNqTvGy6cjoit2EMBi7dgFWFZFYcwZjUrc+pOMup//rsQTRVILvF2efQ==}
 
    engines: {node: '>=12.0.0'}
 
    deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
 
    peerDependencies:
 
      vite: ^2.0.0 || ^3.0.0 || ^4.0.0
 
@@ -1887,13 +2677,12 @@ packages:
 
      '@types/node': 20.12.11
 
      esbuild: 0.18.20
 
      postcss: 8.4.38
 
      rollup: 3.29.4
 
    optionalDependencies:
 
      fsevents: 2.3.3
 
    dev: false
 

	
 
  /vitest@0.31.4:
 
    resolution: {integrity: sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ==}
 
    engines: {node: '>=v14.18.0'}
 
    hasBin: true
 
    peerDependencies:
 
@@ -1955,17 +2744,32 @@ packages:
 
      - stylus
 
      - sugarss
 
      - supports-color
 
      - terser
 
    dev: false
 

	
 
  /vm-browserify@1.1.2:
 
    resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
 
    dev: true
 

	
 
  /well-known-symbols@2.0.0:
 
    resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==}
 
    engines: {node: '>=6'}
 
    dev: false
 

	
 
  /which-typed-array@1.1.15:
 
    resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
 
    engines: {node: '>= 0.4'}
 
    dependencies:
 
      available-typed-arrays: 1.0.7
 
      call-bind: 1.0.7
 
      for-each: 0.3.3
 
      gopd: 1.0.1
 
      has-tostringtag: 1.0.2
 
    dev: true
 

	
 
  /why-is-node-running@2.2.2:
 
    resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
 
    engines: {node: '>=8'}
 
    hasBin: true
 
    dependencies:
 
      siginfo: 2.0.0
 
@@ -1973,10 +2777,20 @@ packages:
 
    dev: false
 

	
 
  /wicg-inert@3.1.2:
 
    resolution: {integrity: sha512-Ba9tGNYxXwaqKEi9sJJvPMKuo063umUPsHN0JJsjrs2j8KDSzkWLMZGZ+MH1Jf1Fq4OWZ5HsESJID6nRza2ang==}
 
    dev: false
 

	
 
  /xtend@4.0.2:
 
    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
 
    engines: {node: '>=0.4'}
 
    dev: true
 

	
 
  /yocto-queue@0.1.0:
 
    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
 
    engines: {node: '>=10'}
 
    dev: true
 

	
 
  /yocto-queue@1.0.0:
 
    resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
 
    engines: {node: '>=12.20'}
 
    dev: false
pyproject.toml
Show inline comments
 
@@ -42,12 +42,15 @@ dependencies = [
 
    "mido>=1.2.10",
 
    "alsa-midi>=1.0.1",
 
    "treq>=22.2.0",
 
    "light9 @ file:///${PROJECT_ROOT}/",
 
    "python-debouncer>=0.1.4",
 
    "pytest>=8.2.0",
 
    "avro>=1.11.3",
 
    "fastavro>=1.9.4",
 
    "yappi>=1.6.0",
 
]
 
requires-python = ">=3.11"
 

	
 
readme = "README.md"
 

	
 
[project.urls]
src/light9/collector/service.py
Show inline comments
 
@@ -47,14 +47,14 @@ class Updates(WebSocketEndpoint, UiListe
 
    async def on_connect(self, websocket: WebSocket):
 
        await websocket.accept()
 
        log.info('socket connect %s', self.scope['client'])
 
        self.websocket = websocket
 
        self.listeners.addClient(self)
 

	
 
    async def sendMessage(self, msgText):
 
        await self.websocket.send_text(msgText)
 
    async def sendMessage(self, msgText: bytes):
 
        await self.websocket.send_bytes(msgText)
 

	
 
    # async def on_receive(self, websocket, data):
 
    #     json.loads(data)
 

	
 
    async def on_disconnect(self, websocket: WebSocket, close_code: int):
 
        self.listeners.delClient(self)
src/light9/collector/weblisteners.py
Show inline comments
 
import asyncio
 
import io
 
import json
 
import logging
 
import time
 
from typing import Any, Awaitable, Dict, List, Protocol, Tuple
 

	
 
import fastavro
 
from fastavro.schema import load_schema
 
from light9.collector.output import Output as OutputInstance
 
from light9.newtypes import (DeviceUri, DmxIndex, DmxMessageIndex, OutputAttr, OutputUri, OutputValue)
 

	
 
log = logging.getLogger('weblisteners')
 

	
 

	
 
@@ -20,12 +23,13 @@ class UiListener(Protocol):
 
        ...
 

	
 

	
 
class WebListeners:
 

	
 
    def __init__(self) -> None:
 
        self.CollectorUpdateSchema = load_schema('avro/CollectorUpdate.avsc')
 
        self.clients: List[Tuple[UiListener, Dict[DeviceUri, Dict[OutputAttr, OutputValue]]]] = []
 
        self.pendingMessageForDev: Dict[DeviceUri, Tuple[Dict[OutputAttr, OutputValue], Dict[Tuple[DeviceUri, OutputAttr], Tuple[OutputUri,
 
                                                                                                                                 DmxMessageIndex]]]] = {}
 
        self.lastFlush = 0
 
        asyncio.create_task(self.flusher())
 

	
 
@@ -83,8 +87,11 @@ class WebListeners:
 
            dmxIndex = DmxIndex(bufIndex + 1)
 
            attrRows.append({'attr': attr.rsplit('/')[-1], 'val': val, 'chan': (shortenOutput(outputUri), dmxIndex)})
 
        attrRows.sort(key=lambda r: r['chan'])
 
        for row in attrRows:
 
            row['chan'] = '%s %s' % (row['chan'][0], row['chan'][1])
 

	
 
        msg = json.dumps({'outputAttrsSet': {'dev': dev, 'attrs': attrRows}}, sort_keys=True)
 
        out = io.BytesIO()
 
        fastavro.schemaless_writer(out, self.CollectorUpdateSchema, {'OutputAttrsSet': {'dev': dev, 'attrs': attrRows}})
 
        msg = out.getvalue()
 
        log.info(f'made update message {len(msg)=}')
 
        return msg
src/light9/homepage/write_config.py
Show inline comments
 
@@ -77,12 +77,15 @@ http {{
 
        showPath = showconfig.showUri().split('/', 3)[-1]
 
        root = showconfig.root()[:-len(showPath)].decode('ascii')
 
        print(f'''
 
  location /show/ {{
 
    root {root};
 
  }}
 
  location /avro/ {{
 
    root {root};
 
  }}
 

	
 
  location / {{
 
    proxy_pass http://localhost:8300;
 
  }}
 
 }}
 
}}''', file=out)
web/collector/Light9CollectorUi.ts
Show inline comments
 
@@ -7,13 +7,13 @@ import { sortBy, uniq } from "underscore
 
import { Patch } from "../patch";
 
import { getTopGraph } from "../RdfdbSyncedGraph";
 
import { SyncedGraph } from "../SyncedGraph";
 
import { Light9CollectorDevice } from "./Light9CollectorDevice";
 
export { RdfdbSyncedGraph } from "../RdfdbSyncedGraph";
 
export { Light9CollectorDevice };
 

	
 
import { avro } from "../lib/avro";
 
debug.enable("*");
 
const log = debug("collector");
 

	
 
@customElement("light9-collector-ui")
 
export class Light9CollectorUi extends LitElement {
 
  graph!: SyncedGraph;
 
@@ -31,21 +31,27 @@ export class Light9CollectorUi extends L
 
    super();
 
    getTopGraph().then((g) => {
 
      this.graph = g;
 
      this.graph.runHandler(this.findDevices.bind(this), "findDevices");
 
    });
 

	
 
    const ws = new ReconnectingWebSocket("ws://localhost:8200/service/collector/updates");
 
    ws.addEventListener("message", (ev: any) => {
 
      const outputAttrsSet = JSON.parse(ev.data).outputAttrsSet;
 
    this.setupListener();
 
  }
 

	
 
  async setupListener() {
 
    const CollectorUpdateType = await avro.loadType("CollectorUpdate");
 
    const ws = new ReconnectingWebSocket(`ws://${location.host}/service/collector/updates`);
 
    ws.addEventListener("message", async (ev: ReconnectingWebSocket.MessageEvent) => {
 
      const jsMsg = await avro.parseBlob(CollectorUpdateType, ev.data);
 

	
 
      const outputAttrsSet = jsMsg.OutputAttrsSet;
 
      if (outputAttrsSet) {
 
        this.updateDev(outputAttrsSet.dev, outputAttrsSet.attrs);
 
      }
 
    });
 
  }
 

	
 
  findDevices(patch?: Patch) {
 
    const U = this.graph.U();
 

	
 
    this.devices = [];
 
    this.clearDeviceChildElementCache();
 
    let classes = this.graph.subjects(U("rdf:type"), U(":DeviceClass"));
web/lib/avro-js.d.ts
Show inline comments
 
new file 100644
 
declare module "avro-js" {
 
    export namespace types {
 
        interface Type {
 
            fromBuffer(buffer: Buffer): Record;
 
        }
 
        type Record = any;
 
    }
 

	
 
    export function parse(schema: any): types.Type;
 
}
 
\ No newline at end of file
web/lib/avro.ts
Show inline comments
 
new file 100644
 
import * as avrojs from "avro-js";
 
export namespace avro {
 
  export async function loadType(typeName: string): Promise<avrojs.types.Type> {
 
    const schemaSource = await (await fetch(`/avro/${typeName}.avsc`)).json();
 
    return await avrojs.parse(schemaSource);
 
  }
 
  
 
  export async function parseBlob(type: avrojs.types.Type, b: Blob): Promise<avrojs.types.Record> {
 
    const jsMsg = type.fromBuffer(Buffer.from(await b.arrayBuffer()));
 
    return jsMsg;
 
  }
 
}
web/vite.config.ts
Show inline comments
 
import { defineConfig } from "vite";
 
import { nodePolyfills } from "vite-plugin-node-polyfills";
 

	
 
export default defineConfig({
 
  base: "/",
 
  root: "./web",
 
  publicDir: "../node_modules",
 
  server: {
 
@@ -13,7 +14,8 @@ export default defineConfig({
 
    },
 
  },
 
  clearScreen: false,
 
  define: {
 
    global: {},
 
  },
 
  plugins: [nodePolyfills()],
 
});
0 comments (0 inline, 0 general)